CCOMMND Generate Command File from Directory C C C CDEFN RATLIB STANDARD DEFINITIONS C C THESE DEFINITIONS ARE CONSISTANT WITH THOSE OF THE RATFOR LIBRARY C (RATLIB) AND THE SYKES RATFOR PREPROCESSOR C C C INTEGER SETFLT C 20000 IF (.NOT.( SETFLT ( 5, 3HCMD, 4H.LST, 4H.CMD, 2 ) .EQ. 1 )) GOTO $20001 CALL COMMND GOTO 20000 20001 CONTINUE CALL EXIT END C SUBROUTINE COMMND C C LOGICAL * 1 FILNAM ( 20 ), CMD ( 132 ), TEMCOM ( 132 ) INTEGER GETNAM, SUBFOR, APPEND, MODE C CALL INIT ( MODE, TEMCOM ) IF (.NOT.( TEMCOM ( 1 ) .EQ. 0 )) GOTO 20002 CALL PUTL ( 48H TYPE COMMAND LINE, '?' IS REPLACED BY FILE NAME, $5 ) CALL GETL ( TEMCOM, 132, 5 ) 20002 CONTINUE 20004 IF (.NOT.( GETNAM ( MODE, FILNAM ) .NE. - 3 )) GOTO 20005 CMD ( 1 ) = 0 JUNK = APPEND ( CMD, TEMCOM, 1 ) JUNK = SUBFOR ( CMD, 1H?, FILNAM ) CALL PUTL ( CMD, 4 ) GOTO 20004 20005 CONTINUE RETURN END C CINIT INITIALIZATION FOR COMMND ROUTINE C C PROCESS MCR COMMAND LINE SWITCHES TO RETURN C C MODE -- PROCESSING MODE C TEMCOM -- THE TEMPLATE COMMAND C C SUBROUTINE INIT ( MODE, TEMCOM ) C C INTEGER MODE, GETARG, NUMSWI, SHIFT, NEGATE, LOC LOGICAL * 1 TEMCOM ( 10000 ), WRKSWI ( 80 ) C MODE = 1 TEMCOM ( 1 ) = 0 C NUMSWI = 1 20006 IF (.NOT.( GETARG ( NUMSWI, WRKSWI, 80 ) .NE. - 3)) GOTO 20008 NEGATE = 0 IF (.NOT.( WRKSWI ( 1 ) .EQ. '-' )) GOTO 20009 NEGATE = 1 JUNK = SHIFT ( WRKSWI, 1 ) 20009 CONTINUE IF (.NOT.( WRKSWI ( 1 ) .EQ. 'N' .AND. WRKSWI ( 2 ) .EQ. 'O' )) $GOTO 20011 NEGATE = 1 JUNK = SHIFT ( WRKSWI, 2 ) C FIRST LETTER WILL IDENTIFY THE SWITCH 20011 CONTINUE IF (.NOT.( WRKSWI ( 1 ) .EQ. 1HV )) GOTO 20013 MODE = 2 GOTO 20014 20013 CONTINUE IF (.NOT.( WRKSWI ( 1 ) .EQ. 1HE )) GOTO 20015 MODE = 3 GOTO 20016 20015 CONTINUE IF (.NOT.( WRKSWI ( 1 ) .EQ. 1HL )) GOTO 20017 MODE = 0 GOTO 20018 20017 CONTINUE IF (.NOT.( WRKSWI ( 1 ) .EQ. 1HC )) GOTO 20019 LOC = INDEX ( WRKSWI, 1H: ) + 1 IF (.NOT.( LOC .GT. 1 )) GOTO 20021 CALL SCOPY ( WRKSWI, LOC, TEMCOM, 1, 80 ) 20021 CONTINUE CONTINUE I = 1 20023 IF (.NOT.( TEMCOM ( I ) .NE. 0)) GOTO 20025 IF (.NOT.( TEMCOM ( I ) .EQ. - 20 )) GOTO 20026 TEMCOM ( I ) = ',' GOTO 20027 20026 CONTINUE IF (.NOT.( TEMCOM ( I ) .EQ. - 21 )) GOTO 20028 TEMCOM ( I ) = '=' GOTO 20029 20028 CONTINUE IF (.NOT.( TEMCOM ( I ) .EQ. - 22 )) GOTO 20030 TEMCOM ( I ) = '/' 20030 CONTINUE 20029 CONTINUE 20027 CONTINUE 20024 I = I + 1 GOTO 20023 20025 CONTINUE GOTO 20020 20019 CONTINUE CALL MCRERR ( 5, 3HCMD, 'BAD SWITCH, IGNORED' ) 20020 CONTINUE 20018 CONTINUE 20016 CONTINUE 20014 CONTINUE 20007 NUMSWI = NUMSWI + 1 GOTO 20006 20008 CONTINUE END C CGETNAM Get next file name C INTEGER FUNCTION GETNAM ( MODE, FILNAM ) C CINPUT C INTEGER MODE C COUTPUT C LOGICAL * 1 FILNAM ( 10000 ) C C FUNCTION RETURNS EOF IF NO NAME FOUND, LENGTH OF NAME IF NAME FOUND C C CINTERNAL DECLARATIONS C LOGICAL * 1 BUF ( 80 ), BRKCHR INTEGER I INTEGER LEN, GETL, PLACE, INDEX, SUBFOR, SHIFT, APPEND C 20032 CONTINUE LEN = GETL ( BUF, 80, 3 ) IF (.NOT.( LEN .EQ. - 3 )) GOTO 20035 FILNAM ( 1 ) = 0 GETNAM = ( - 3 ) RETURN 20035 CONTINUE CONTINUE I = 1 20037 IF (.NOT.( BUF ( I ) .NE. 0)) GOTO 20039 IF (.NOT.( BUF ( I ) .GE. 32 .AND. BUF ( I ) .LE. 1H~ )) GOTO $20040 GOTO 20038 20040 CONTINUE JUNK = SHIFT ( BUF ( I ), 1 ) I = I - 1 20041 CONTINUE 20038 I = I + 1 GOTO 20037 20039 CONTINUE IF (.NOT.( MODE .EQ. 0 )) GOTO 20042 GOTO 20034 20042 CONTINUE IF (.NOT.( INDEX ( BUF, 1H; ) .NE. 0 )) GOTO 20044 GOTO 20034 20044 CONTINUE 20033 GOTO 20032 20034 CONTINUE IF (.NOT.( MODE .EQ. 2 )) GOTO 20046 BRKCHR = 1H; GOTO 20047 20046 CONTINUE IF (.NOT.( MODE .EQ. 3 )) GOTO 20048 BRKCHR = 1H. GOTO 20049 20048 CONTINUE IF (.NOT.( MODE .EQ. 1 .OR. MODE .EQ. 0 )) GOTO 20050 BRKCHR = 0 20050 CONTINUE 20049 CONTINUE 20047 CONTINUE IF (.NOT.( BRKCHR .NE. 0 )) GOTO 20052 PLACE = INDEX ( BUF, BRKCHR ) BUF ( PLACE ) = 0 20052 CONTINUE JUNK = SUBFOR ( BUF, ' ', 0 ) FILNAM ( 1 ) = 0 LEN = APPEND ( FILNAM, BUF, 1 ) GETNAM = ( LEN ) RETURN END INTEGER FUNCTION NXTMCR ( LUNPMT, PROMP, LUNIND, NUMOUT ) LOGICAL * 1 PROMP ( 3 ), MCR ( 82 ), CJUNK, FN ( 41 ), TYPE INTEGER NUMOUT, DONE, I, N, POS, LUNIND, FIRST, NBRCK, ININD, $GETL, MATCH COMMON / MCRNFO / MCR, POS DATA DONE / 0 /, FIRST / 1 /, ININD / 0 / IF (.NOT.( LUNPMT .LT. 0 )) GOTO 20054 CLOSE ( UNIT = LUNIND ) ININD = 0 NXTMCR = ( 1 ) RETURN C%^ 20054 CONTINUE 20056 CONTINUE IF (.NOT.( DONE .EQ. 1 .AND. ININD .EQ. 0 )) GOTO 20059 NXTMCR = ( 0 ) RETURN 20059 CONTINUE IF (.NOT.( FIRST .EQ. 1 )) GOTO 20061 CALL GETMCR ( MCR, N ) CONTINUE POS = 1 20063 IF (.NOT.( POS .LE. N .AND. MCR ( POS ) .NE. 32 .AND. MCR ( POS ) $ .NE. 9)) GOTO 20065 20064 POS = POS + 1 GOTO 20063 20065 CONTINUE CONTINUE 20066 IF (.NOT.( POS .LE. N .AND. MCR ( POS ) .EQ. 32 .OR. MCR ( POS ) $.EQ. 9 )) GOTO 20067 POS = POS + 1 GOTO 20066 20067 CONTINUE IF (.NOT.( POS .LE. N )) GOTO 20068 DONE = 1 20068 CONTINUE FIRST = 0 GOTO 20062 20061 CONTINUE IF (.NOT.( ININD .EQ. 1 .AND. LUNIND .GT. 0 )) GOTO 20070 N = GETL ( MCR, 80, LUNIND ) IF (.NOT.( N .EQ. - 3 )) GOTO 20072 ININD = 0 CLOSE ( UNIT = LUNIND ) 20072 CONTINUE GOTO 20071 20070 CONTINUE WRITE ( LUNPMT, 10 ) PROMP 10 FORMAT ( 1H$, 3A1, 1H> ) READ ( LUNPMT, 20, END = 1000 ) N, MCR 20 FORMAT ( Q, 82A1 ) 20071 CONTINUE CONTINUE POS = 1 20074 IF (.NOT.( POS .LE. N .AND. MCR ( POS ) .EQ. 32 .OR. MCR ( POS ) $.EQ. 9)) GOTO 20076 20075 POS = POS + 1 GOTO 20074 20076 CONTINUE 20062 CONTINUE IF (.NOT.( POS .LT. N .AND. MCR ( POS ) .EQ. 1H@ )) GOTO 20077 MCR ( N + 1 ) = 0 N = - 1 IF (.NOT.( ININD .EQ. 1 .OR. LUNIND .LE. 0 )) GOTO 20079 CALL MCRERR ( LUNPMT, PROMP, 25HCOMMAND FILE INVALID HERE ) GOTO 20080 20079 CONTINUE POS = POS + 1 JUNK = NXTFIL ( 4H.CMD, FN, 41, CJUNK, 1 ) OPEN ( UNIT = LUNIND, NAME = FN, TYPE = 'OLD', ERR = 30, READONLY $ ) ININD = 1 GO TO 31 30 CALL MCRERR ( LUNPMT, PROMP, 32HCAN'T OPEN INDIRECT COMMAND FILE $) 31 CONTINUE 20080 CONTINUE 20077 CONTINUE 20057 IF (.NOT.( POS .LE. N )) GOTO 20056 20058 CONTINUE C CHANGE COMMAS IN COMMAND ARGUEMENT TO FUNNYCOMMA ,"=" TO FUNNYEQUAL C AND AND "/" TO FUNNYSLASH C I = MATCH ( MCR, 2H/C ) IF (.NOT.( I .GT. 0 )) GOTO 20081 CONTINUE 20083 CONTINUE I = I + 1 IF (.NOT.( MCR ( I ) .EQ. 1H, )) GOTO 20086 MCR ( I ) = - 20 20086 CONTINUE IF (.NOT.( MCR ( I ) .EQ. 1H= )) GOTO 20088 MCR ( I ) = - 21 20088 CONTINUE IF (.NOT.( MCR ( I ) .EQ. 1H/ )) GOTO 20090 MCR ( I ) = - 22 20090 CONTINUE 20084 IF (.NOT.( MCR ( I ) .EQ. 0 )) GOTO 20083 20085 CONTINUE 20081 CONTINUE NUMOUT = 1 NBRCK = 0 MCR ( N + 1 ) = 0 I = 1 20092 IF (.NOT.( MCR ( I ) .NE. 0)) GOTO 20094 IF (.NOT.( MCR ( I ) .EQ. 1H[ )) GOTO 20095 NBRCK = NBRCK + 1 GOTO 20096 20095 CONTINUE IF (.NOT.( MCR ( I ) .EQ. 1H] )) GOTO 20097 NBRCK = NBRCK - 1 GOTO 20098 20097 CONTINUE IF (.NOT.( MCR ( I ) .EQ. 1H, .AND. NBRCK .EQ. 0 )) GOTO 20099 NUMOUT = NUMOUT + 1 GOTO 20100 20099 CONTINUE IF (.NOT.( MCR ( I ) .EQ. 1H= )) GOTO 20101 GOTO 20094 20101 CONTINUE 20100 CONTINUE 20098 CONTINUE 20096 CONTINUE 20093 I = I + 1 GOTO 20092 20094 CONTINUE IF (.NOT.( MCR ( I ) .NE. 1H= )) GOTO 20103 NUMOUT = 0 20103 CONTINUE NXTMCR = ( 1 ) RETURN 1000 DONE = 1 NXTMCR = ( 0 ) RETURN END