CONSTSTRING (18) VSN = "COMMANDER 27/03/80" EXTERNALROUTINESPEC DTOFF(RECORDNAME P) EXTERNALINTEGERFNSPEC D LOWER ACR(INTEGER ACR) EXTERNALROUTINESPEC DPON(RECORDNAME P) ! %EXTERNALROUTINESPEC RSTRG(%STRINGNAME S) EXTERNALROUTINESPEC PROMPT(STRING (15) S) RECORDFORMAT PARMF(INTEGER DEST, SRCE, P1, P2, P3, P4, P5, P6) SYSTEMROUTINESPEC MOVE(INTEGER L, F, T) SYSTEMROUTINESPEC ETOI(INTEGER AD, LENGTH) ! ! ! ROUTINE RSTRG(STRINGNAME S) INTEGER I S = "" LOOP: READSYMBOL(I) RETURN IF I = NL S = S.TOSTRING(I) -> LOOP END ; ! OF RSTRG ! ! ! ROUTINE PRINT PICTURE(INTEGER PICTURE) CONSTSTRING (1) SNL = " " STRING (40) LINE INTEGERARRAYNAME TABLE INTEGERARRAYFORMAT TABLEF(0 : 43) INTEGER LINE AD, PIC AD, LENGTH, N CONSTINTEGER COMM AD = X'80C00000'; ! COMMUNICATIONS AREA ADDRESS. INTEGERFN PROCESS RESULT = 0 IF BYTEINTEGER(LINE AD+4) = ' ' C AND BYTEINTEGER(LINE AD+17) = ' ' C AND BYTEINTEGER(LINE AD+30) = ' ' C AND N > 3 RESULT = 1 END ; ! PROCESS. TABLE == ARRAY(INTEGER(COMM AD+28),TABLEF); ! GPC TABLE. PIC AD = 0 PIC AD = TABLE(41) IF PICTURE = 'L' PIC AD = TABLE(42) IF PICTURE = 'P' PIC AD = TABLE(43)+2048 IF PICTURE = 'S' PIC AD = TABLE(43)+3072 IF PICTURE = 'V' PRINTSTRING(TOSTRING(PICTURE)."?".SNL) AND RETURN C IF PIC AD = 0 N = 0 LINE AD = ADDR(LINE)+1 BYTEINTEGER(LINE AD-1) = 40 LENGTH = INTEGER(PICAD) PICAD = PICAD+8 PRINTSTRING(SNL) WHILE LENGTH > 0 CYCLE MOVE(40,PICAD,LINE AD); ETOI(LINE AD,40) PRINTSTRING(LINE.SNL) UNLESS LINE = C " " C OR (PICTURE = 'P' AND PROCESS = 0) LENGTH = LENGTH-41; PIC AD = PIC AD+41; N = N + 1 REPEAT END ; ! OF %ROUTINE PRINT PICTURE. EXTERNALROUTINE COMMANDER(STRING (255) S) SWITCH ACT(1 : 31) STRING (255) IN LINE RECORD P(PARMF) PRINTSTRING(VSN); NEWLINE UNLESS D LOWER ACR(2) = 0 START PRINTSTRING("FIRST THE MAGIC WORDS!") NEWLINE RETURN FINISH READ MORE: P_DEST = 0 DTOFF(P) UNLESS P_DEST = 0 START -> ACT(P_DEST&31) ACT(1): PRINTSTRING(STRING(ADDR(P_P1))) -> READ MORE ACT(7): PRINTSTRING(STRING(ADDR(P_P1))) NEWLINE P_DEST = X'320007' P_SRCE = 0 DPON(P); ! UPDATE OPERLOG -> READ MORE FINISH PROMPT("COMMAND:") RSTRG(IN LINE) -> READ MORE IF IN LINE = "" IF LENGTH(IN LINE) > 23 START PRINTSTRING("SORRY, ONLY 23 CHS") NEWLINE -> READ MORE FINISH P_DEST = X'0032000E' P_SRCE = 7 STRING(ADDR(P_P1)) = IN LINE DPON(P) -> READ MORE ! ! ! ACT(8): ! PROMPT PROMPT(STRING(ADDR(P_P1))) RSTRG(IN LINE) P_DEST = P_SRCE P_SRCE = 7 STRING(ADDR(P_P1)) <- IN LINE DPON(P) -> READ MORE ! ! ! ACT(19): IF P_P1 < 0 THEN PRINT PICTURE(BYTEINTEGER(ADDR(P_P3)+1)) C ELSE PRINTSTRING("DISPLAY PICTURE ") C AND WRITE(P_P1,1) NEWLINE -> READ MORE END ; ! OF COMMANDER ENDOFFILE