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