SUBROUTINE PROSYS C INCLUDE "FLX:FLXINC.FLX" $NOLIST INCLUDE "FLX:FLXINC.FLX" $LIST C C ********************************************** C C TO PROCESS-SYSTEM-COMMAND C C ********************************************** C CURSOR=2 RESET-GET-CHARACTER WHILE(CHTYPE.EQ.TBLANK) GET-CHARACTER START=CURSOR WHILE(CHTYPE.LE.TDIGIT) GET-CHARACTER LEN=CURSOR-START IF (LEN.GT.0) CALL CPYSUB(SST,SFLX,START,LEN) CONDITIONAL (ASSMBL .AND. FLNDEX(KPAGE,SST).EQ.1) CALL PAGE (ASSMBL .AND. FLNDEX(KLIST,SST).EQ.1) LSTFLG = .TRUE. CALL LSTON FIN (ASSMBL .AND. FLNDEX(KNOLST,SST).EQ.1) LSTFLG = .FALSE. CALL LSTOFF FIN (FLNDEX(KDEFN,SST).EQ.1) DEFINE-PARAMETER (FLNDEX(KTRUE,SST).EQ.1) VARSET=.TRUE. DEFINE-VARIABLE FIN (FLNDEX(KFALSE,SST).EQ.1) VARSET=.FALSE. DEFINE-VARIABLE FIN (STREQ(KIF,SST)) VARSET=.TRUE. BEGIN-CONDITIONAL-ASSEMBLY FIN (STREQ(KUNLES,SST)) VARSET=.FALSE. BEGIN-CONDITIONAL-ASSEMBLY FIN (STREQ(KFIN,SST)) END-CONDITIONAL-ASSEMBLY FIN FIN LIST-INDENTED-SOURCE RETURN TO BEGIN-CONDITIONAL-ASSEMBLY SCAN-VARIABLE-NAME IF (FOUND) FIND-VARIABLE-IN-TABLE WHEN (VARNDX.GT.0) WHEN (VSTOP.LT.VARMAX) UNLESS (VARSET) VARNDX=-VARNDX VSTOP=VSTOP+1 VSTACK(VSTOP)=VARNDX CHECK-CONDITIONAL-ASSEMBLY FIN ELSE LIST-COND-ASSEMBLY-TABLES-EXCEEDED FIN ELSE LIST-INVALID-SYSTEM-COMMAND FIN FIN TO CHECK-CONDITIONAL-ASSEMBLY ASSMBL=.TRUE. I=1 WHILE(I.LE.VSTOP) VARSET=VSTACK(I).GT.0 IF (VARSET.NE.VARFLG(IABS(VSTACK(I)))) ASSMBL=.FALSE. I=VSTOP FIN I=I+1 FIN FIN TO DEFINE-PARAMETER SCAN-TOKEN WHILE (CHTYPE.EQ.TBLANK) GET-CHARACTER USTART(2)=CURSOR UNTIL (CHTYPE.EQ.TBLANK .OR. CHTYPE.EQ.TEOL) GET-CHARACTER ULEN(2)=CURSOR-USTART(2) UNLESS (ULEN(1).EQ.0) FIND-PARAMETER DO (I=1,2) UTYPE(I)=1+(ULEN(I)+NCHPWD-1)/NCHPWD TMAX=MAX-1-UTYPE(1)-UTYPE(2) FIN CONDITIONAL (ULEN(1).EQ.0) LIST-INVALID-SYSTEM-COMMAND (FOUND) LIST-INVALID-SYSTEM-COMMAND (TMAX.LE.TOP+SAFETY) GIVE-UP (OTHERWISE) PARMS=.TRUE. MAX=TMAX PENT=MAX+1 STACK(P)=PENT STACK(PENT)=0 PENT=PENT+1 CALL CPYSTR(STACK(PENT),SSTRNG) PENT=PENT+UTYPE(1) CALL CPYSUB(STACK(PENT),SFLX,USTART(2),ULEN(2)) CALL STRUC(STACK(PENT)) CALL PUT(LINENO,SFLX,LISTCL) FIN FIN FIN TO DEFINE-VARIABLE SCAN-VARIABLE-NAME IF (FOUND) FIND-VARIABLE-IN-TABLE IF (VARNDX.EQ.0) WHEN (VARNUM.LT.VARMAX) VARNUM=VARNUM+1 VARNDX=VARNUM FIN ELSE LIST-COND-ASSEMBLY-TABLES-EXCEEDED FIN IF (VARNDX.GT.0) VARNAM(VARNDX)=VARIBL VARFLG(VARNDX)=VARSET FIN FIN FIN TO END-CONDITIONAL-ASSEMBLY WHEN (VSTOP.GT.0) VSTOP=VSTOP-1 CHECK-CONDITIONAL-ASSEMBLY FIN ELSE LIST-INVALID-SYSTEM-COMMAND FIN TO FIND-PARAMETER CALL CPYSUB(SSTRNG,SFLX,USTART(1),ULEN(1)) CALL STRUC(SSTRNG) P=MAXSTK-PRIME-HASH(SSTRNG,PRIME) FOUND=.FALSE. UNTIL (STACK(P).EQ.0 .OR. FOUND) P=STACK(P) PENT=P+1 IF (STREQ(SSTRNG,STACK(PENT))) FOUND=.TRUE. FIN FIN TO FIND-VARIABLE-IN-TABLE VARNDX=0 I=1 WHILE (I.LE.VARNUM) IF (VARIBL.EQ.VARNAM(I)) VARNDX=I I=VARNUM FIN I=I+1 FIN FIN TO GET-CHARACTER CURSOR=CURSOR+1 CPOS=CPOS+1 IF (CPOS.GT.NCHPWD) CWD=CWD+1 CPOS=1 FIN WHEN(CURSOR.GT.SFLX(1)) CH = -1 CHTYPE=TEOL FIN ELSE CALL GETCH(SFLX(CWD),CPOS,CH) CHTYPE=CHTYP(CH) FIN FIN TO GIVE-UP CALL PUT(0,SGUP1,ERRCL) CALL PUT(0,SGUP2,ERRCL) CALL CLOSEF(MINCNT,-1) CALL FLEXIT FIN TO LIST-COND-ASSEMBLY-TABLES-EXCEEDED MAJCNT=MAJCNT+1 CALL PUT(-LINENO,SFLX,ERRCL) CALL PUT(0,SICATX,ERRCL) FIN TO LIST-INVALID-SYSTEM-COMMAND MAJCNT=MAJCNT+1 CALL PUT(-LINENO,SFLX,ERRCL) CALL PUT(0,SISCMD,ERRCL) FIN TO LIST-INDENTED-SOURCE IF (LSTFIN) CALL PUT(LINENO,SFLX,FINCL) FIN TO RESET-GET-CHARACTER CURSOR=CURSOR-1 CWD=(CURSOR-1)/NCHPWD+2 CPOS=CURSOR-(CWD-2)*NCHPWD GET-CHARACTER FIN TO SCAN-TOKEN WHILE (CHTYPE.EQ.TBLANK) GET-CHARACTER USTART(1)=CURSOR WHILE (CHTYPE.LE.TDIGIT) GET-CHARACTER ULEN(1)=CURSOR-USTART(1) ENDLIN=CHTYPE.EQ.TEOL .AND. ULEN(1).EQ.0 IF (.NOT.ENDLIN .AND. ULEN(1).EQ.0) GET-CHARACTER ULEN(1)=1 FIN FIN TO SCAN-VARIABLE-NAME FOUND=.FALSE. WHILE (CHTYPE.EQ.TBLANK) GET-CHARACTER DO (I=1,NCHPWD) CALL PUTCH(VARIBL,I+0,CHSPAC) I=1 WHILE (I.LE.NCHPWD .AND. CHTYPE.LE.TDIGIT) FOUND=.TRUE. CALL PUTCH(VARIBL,I,CH) GET-CHARACTER I=I+1 FIN UNLESS (FOUND) LIST-INVALID-SYSTEM-COMMAND FIN END