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