-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgrexec.awk
executable file
·57 lines (54 loc) · 1.51 KB
/
grexec.awk
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
56
57
#!/bin/awk -f
BEGIN {
printf("C Warning: this code automatically generated by grexec.awk\n");
printf("C Warning: probably bad idea to edit this code\n");
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");
}