1$ ver='F$VERIFY(0)
2$ SET NOON
3$ ECHO = "WRITE SYS$OUTPUT"
4$ ECHO "Creating device-dispatch routine GREXEC.F from DRIVERS.LIST"
5$!
6$! This command file deletes the existing GREXEC.F routine and
7$! then creates a new version that includes calls to all device
8$! handlers sepecified in file DRIVERS.LIST.
9$!
10$! modified 8/11/93 bht to check for existence of SYS$LIBRARY:UISSHR.EXE
11$! and SYS$LIBRARY:DECW$XLIBSHR.EXE before including windowing drivers
12$!
13$	ON control_y THEN GOTO Ex
14$! Delete any existing GREXEC.F routines (so as to not confuse things).
15$	IF F$SEARCH("GREXEC.F;*") .NES. "" THEN -
16$		DELETE/NOLOG/NOCONFIRM GREXEC.F;*
17$!
18$! Now scan the [.DRIVERS] directory for %%DRIVER.F routines and count
19$! them.
20$!
21$	NDEV=0
22$	NAMES = ""
23$	UIS = F$SEARCH("SYS$LIBRARY:UISSHR.EXE")
24$	XLIB = F$SEARCH("SYS$LIBRARY:DECW$XLIBSHR.EXE")
25$	open list DRIVERS.LIST /read
26$
27$ 40:	read list line /end=50
28$       line = f$edit(line,"COMPRESS,TRIM,UNCOMMENT,UPCASE")
29$	if line .eqs. "" then goto 40
30$	name = f$element(0," ",line)
31$! for WSDRIVER check that SYS$LIBRARY:UISSHR.EXE is online
32$	IF F$EXTRACT(0,2,NAME) .eqs. "WS" .and. UIS .eqs. ""
33$	    THEN
34$		ECHO "Rejecting WSDRIVER -- UIS is not installed"
35$		GOTO 40
36$           ENDIF
37$! for XEDRIVER check that SYS$LIBRARY:DECW$XLIBSHR.EXE is online
38$	IF F$EXTRACT(0,2,NAME) .eqs. "XE" .and. XLIB .eqs. ""
39$	    THEN
40$		ECHO "Rejecting XEDRIVER -- DECWindows is not installed"
41$		GOTO 40
42$           ENDIF
43$	IF F$EXTRACT(0,2,NAME) .eqs. "X2" .and. XLIB .eqs. ""
44$	    THEN
45$		ECHO "Rejecting X2DRIVER -- DECWindows is not installed"
46$		GOTO 40
47$           ENDIF
48$	NDEV = NDEV+1
49$	DRIVER'NDEV' = F$EXTRACT(0,6,NAME)
50$	CODE'NDEV' = F$ELEMENT(1," ",line)
51$	NAMES = NAMES + "," + F$EXTRACT(0,2,DRIVER'ndev')
52$	goto 40
53$ 50:	close list
54$!
55$! Create the dispatch routine.  Open file and write header info.
56$!
57$ Make:
58$	ECHO NDEV," device handlers found:"
59$	NAMES = NAMES - "," + "."
60$	ECHO NAMES
61$	OPEN/WRITE TMP TMP.F
62$	WRT = "WRITE TMP"
63$ WRT "C*GREXEC -- PGPLOT device handler dispatch routine"
64$ WRT "C+
65$ WRT "      SUBROUTINE GREXEC(IDEV,IFUNC,RBUF,NBUF,CHR,LCHR)"
66$ WRT "      INTEGER IDEV, IFUNC, NBUF, LCHR"
67$ WRT "      REAL    RBUF(*)"
68$ WRT "      CHARACTER*(*) CHR"
69$ WRT "C"
70$ WRT "C DO NOT MODIFY THIS ROUTINE."
71$ WRT "C You should always create a new version by re-executing"
72$ WRT "C the command file NEWEXEC.COM."
73$ WRT "C---"
74$ WRT "      INTEGER NDEV
75$ WRT "      PARAMETER (NDEV=",NDEV,")"
76$ WRT "      CHARACTER*10 MSG"
77$ WRT "C---"
78$!
79$! Now construct the computed GOTO statement.
80$!
81$	ICNT=0
82$	CBUF="      GOTO("
83$ Cgoto:
84$	ICNT=ICNT+1
85$       IF ICNT .GT. NDEV THEN GOTO Done
86$	CBUF=CBUF+"''ICNT'"
87$	IF ICNT.NE.NDEV THEN CBUF=CBUF+","
88$	IF F$LENGTH(CBUF).LT.60 THEN GOTO Cgoto
89$	WRT CBUF
90$	CBUF="     :   "
91$	GOTO Cgoto
92$!
93$ Done:
94$ WRT CBUF+") IDEV"
95$ WRT "      IF (IDEV.EQ.0) THEN"
96$ WRT "          RBUF(1) = NDEV"
97$ WRT "          NBUF = 1"
98$ WRT "      ELSE"
99$ WRT "          WRITE (MSG,'(I10)') IDEV"
100$ WRT "          CALL GRQUIT('Unknown device code in GREXEC: '//MSG)"
101$ WRT "      END IF"
102$ WRT "      RETURN"
103$ WRT "C---"
104$!
105$! Now add lines that actually call the device handlers.
106$!
107$	ICNT=0
108$ Mloop:
109$	ICNT=ICNT+1
110$       IF ICNT.GT.NDEV THEN GOTO Last
111$       IF (CODE'ICNT' .GT. 0)
112$       THEN
113$ WRT f$fao("!5UL CALL !AS(IFUNC,RBUF,NBUF,CHR,LCHR,!AS)", ICNT, -
114		DRIVER'ICNT', CODE'ICNT')
115$       ELSE
116$ WRT f$fao("!5UL CALL !AS(IFUNC,RBUF,NBUF,CHR,LCHR)", ICNT, -
117                DRIVER'ICNT')
118$       ENDIF
119$ WRT "      RETURN"
120$	GOTO Mloop
121$!
122$ Last:
123$ WRT "C"
124$ WRT "      END"
125$	CLOSE TMP
126$	RENAME TMP.F GREXEC.F
127$	FILE = F$SEARCH("GREXEC.F")
128$	ECHO FILE," created"
129$	FORTRAN/WARN=ALL/STAND=ALL 'FILE'
130$	LIBRARY/REPLACE GRPCKG.OLB GREXEC.OBJ
131$	SET FILE/PROT=(O:RWED,S:RWED) GREXEC.OBJ;*
132$	DELETE/NOCONFIRM GREXEC.OBJ;*
133$ Ex:
134$	IF ver THEN SET VERIFY
135