File: grexec.awk

package info (click to toggle)
pgplot5 5.2.2-19.7
  • links: PTS, VCS
  • area: non-free
  • in suites: forky, sid, trixie
  • size: 7,188 kB
  • sloc: fortran: 39,795; ansic: 22,554; objc: 1,534; sh: 1,298; makefile: 267; pascal: 233; perl: 209; tcl: 190; awk: 51; csh: 25
file content (55 lines) | stat: -rwxr-xr-x 1,405 bytes parent folder | download | duplicates (15)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/awk -f

BEGIN {
  printf("C*GREXEC -- PGPLOT device handler dispatch routine\n");
  printf("C+\n");
  printf("      SUBROUTINE GREXEC(IDEV,IFUNC,RBUF,NBUF,CHR,LCHR)\n");
  printf("      INTEGER IDEV, IFUNC, NBUF, LCHR\n");
  printf("      REAL    RBUF(*)\n");
  printf("      CHARACTER*(*) CHR\n");
  printf("C---\n");
  printf("      INTEGER NDEV\n");
}

/^[^!]/ {
  drivpos = index($1,"DRIV");
  if(drivpos > 0) {
    ndev++;
    driver[ndev] = substr($1,1,drivpos-1);
    mode[ndev] = $2;
  }
}

END {
  printf("      PARAMETER (NDEV=%d)\n", ndev);
  printf("      CHARACTER*10 MSG\n");
  printf("C---\n");
  printf("      GOTO(");
  for(i=1; i<=ndev; i++) {
    if(i%15 == 0)
      printf("\n     +     ");
    printf("%d", i);
    if(i<ndev)
      printf(",");
  };
  printf(") IDEV\n");
  printf("      IF (IDEV.EQ.0) THEN\n");
  printf("          RBUF(1) = NDEV\n");
  printf("          NBUF = 1\n");
  printf("      ELSE\n");
  printf("          WRITE (MSG,'(I10)') IDEV\n");
  printf("          CALL GRWARN('Unknown device code in GREXEC: '//MSG)\n");
  printf("      END IF\n");
  printf("      RETURN\n");
  printf("C---\n");
  for(i=1; i<=ndev; i++) {
    printf("%-5d CALL %sDRIV(IFUNC,RBUF,NBUF,CHR,LCHR", i, driver[i]);
    if(mode[i] != 0)
      printf(",%d)\n", mode[i]);
    else
      printf(")\n");
    printf("      RETURN\n");
  };
  printf("C\n");
  printf("      END\n");
}