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