.
.         INTERFACE BETWEEN FANG AND THE REAL WORLD
.
.
.         (C)  Copyright 1972-1978  John Walker
.
.         This software is in the public domain
.
          AXR$
          DEFUNCT$
          FANG
          PURE      CODE
.
.         TELL STATEMENT HANDLER
.
.         THE TELL STATEMENT IS AN IMMEDIATE COMMAND WHICH TYPES
.         THE TEXT SUPPLIED AS ITS STRING PARAMETER ON THE CONSOLE.
.
TELLP*    REMOVE    PARQUE              GET THE STRING PARAMETER
          LA,U      A0,PBSS,A1          LOAD START ADDRESS OF STRING
          LXI       A0,PBVAL,A1         LOAD LENGTH IN CHARACTERS
          SA        A0,FL$+1            PUT IN FDIT LINE FOR PACKET
          SZ        FL$                 CLEAR FIRST WORD OF PACKET
          LA        A4,CWOPTION         LOAD OPTIONS
          LMJ       X11,CONNUM          GET CONSOLE NUMBER
          SA,S2     A3,FL$              PUT CONSOLE CLASS NUMBER IN PACKET
          SZ        FL$+2               CLEAR INPUT SPECIFICATION
          COM$P     FL$                 TYPE OUT THE MESSAGE
          BRELP     A1                  RELEASE THE PARAMETER BUFFER
          J         ICOUT               END OF THIS COMMAND
.
.         ASK OPERATOR INTERFACE (ASYNCHRONOUS)
.
.         THIS COMMAND TYPES THE TEXT ON THE CONSOLE AS A TYPE AND READ
.         MESSAGE, AND WAITS FOR THE OPERATOR'S REPLY.  THE REPLY IS TYPED
.         UPON RECIEPT.  SYNCE THIS IS AN ASYNCHRONOUS COMMAND, THE USER MAY
.         GO ON WITH ANY OTHER FANG COMMANDS WHILE WAITING FOR THE MESSAGE
.         TO BE ANSWERED.  THE USER MAY NOT, HOWEVER, EXIT FANG UNTIL THE
.         OPERATOR REPLIES.  THE USER MAY HAVE MULTIPLE ASK STATEMENTS
.         OUTSTANDING AT ONCE.
.
ASKP*     BGET      12                  ALLOCATE A CONSOLE BUFFER
          SZ        0,A0                CLEAR FIRST WORD OF COM$ PACKET
          LA        A4,CDOPTS,X8        LOAD COMMAND OPTIONS
          LMJ       X11,CONNUM          GET CONSOLE NUMBER
          SA,S2     A3,,A0              PUT CONSOLE CLASS IN PACKET
          LA,U      A1,3,A0             LOAD INPUT BUFFER ADDRESS
          LXI,U     A1,50               LOAD INPUT COUNT ALLOWED
          SA        A1,2,A0             PUT INPUT ACCESS WORD IN PACKET
          LA        A1,CDBPC,X8         LOAD FIRST PARAMETER ADDRESS
          LA,U      A2,PBSS,A1          LOAD STRING START ADDRESS
          LXI       A2,PBVAL,A1         LOAD LENGTH OF TYPEOUT
          SA        A2,1,A0             PUT OUTPUT SPECIFICATION IN PACKET
          COM$      .                   TYPE AND READ
          LX,U      X10,,A0             SAVE THE BUFFER ADDRESS
          R$DIT     .                   ENTER EDITING MODE
          E$MSG     CONREP              EDIT CONSOLE REPLY HEADER
          LA,H2     A1,,X10             LOAD INPUT COUNT
          LA,U      A0,3,X10            LOAD BUFFER ADDRESS
          E$COPY    .                   COPY THE MESSAGE TO THE BUFFER
          E$MSG     STN                 EDIT STATEMENT NUMBER PREFIX
          LX        X5,CDIMG,X8         LOAD IMAGE ADDRESS
          LMJ       X6,ESNV             EDIT STATEMENT NUMBER
          E$SKIP    -1                  BACK UP A CHARACTER
          U$LOOK    .                   LOAD THE CHARACTER
          TNE,U     A0,'.'              COMPLICATED NUMBER ?
          J         NOBLX               NO.  OVERLAY DOT
          E$SKIP    1                   SKIP OVER THE LAST CHARACTER
NOBLX     E$CHAR    ')'                 EDIT CLOSING PARENTHESIS
          E$CHAR    '.'                 EDIT PERIOD
          R$PRTX    1                   PRINT THE MESSAGE AND TERMINATE
          BRELP     X10                 RELEASE THE BUFFER
          COMPLETE  .                   COMPLETE THIS COMMAND
.
.
.         GET CONSOLE CLASS FROM @MSG OPTIONS
.
CONNUM    LA,U      A3                  CLEAR CLASS TO SYSTEM CONSOLE
          TEP       A4,(OPTION('C'))    COMMUNICATIONS CONSOLE ?
          LA,U      A3,2                YES.  LOAD COMMUNICATIONS CODE
          TEP,U     A4,OPTION('I')      I/O CONSOLE ?
          LA,U      A3,1                YES.  LOAD I/O CONSOLE CODE
          TEP       A4,(OPTION('H'))    HARDWARE CONSOLE ?
          LA,U      A3,3                YES.  LOAD CODE OF 3
          J         0,X11               RETURN
.
.         PRINT TIME AND DATE
.
TIMEP*    F$DT1     fll$,fl$            SET UP EDITOR, CLEAR LINE
          F$FD4     ('TODAY IS ')       EDIT COME-ON
          TDATE$    .                   GET THE TIME AND DATE
          SA        A0,R3               SAVE FOR CONSISTENCY
          f$dayw    R3                  EDIT DAY OF THE WEEK
          F$CHAR    ','                 EDIT A COMMA
          F$SKIP    1                   SKIP A SPACE
          F$DAY3    R3                  EDIT THE DATE
          F$FD3     (' AT ')            EDIT 'AT'
          F$TIME1   R3                  GIVE HIM THE TIME OF DAY
          F$PRT     1                   PRINT THE LINE
          J         ICOUT               END OF THE COMMAND
.
.         ABORT EXECUTION VIA EABT$
.
.         USED TO GET A LISTING OF ACTIVITIES AND REENTRY ADDRESSES
.         WHEN THE PROCESSOR HANGS, AND IS BEING DEBUGGED FROM DEMAND.
.
          ON        DEBUG
EABTP*    JNDEM     DOZAP               DON'T ASK QUESTIONS IF BATCH
          F$DT1     fll$,fl$            CLEAR THE LINE
          LA        A0,(0124,FL$+2)     LOAD PRINT PARAMETER
          LA        A1,(DOZAP,FL$)      LOAD READ PARAMETER
          DS        A0,FL$              BUILD TYPE-AND-READ PACKET
          F$COL     12                  SET UP TO SKIP PACKET
          F$MSG     REALLY              ASK IF HE MEANS IT
          ON        EOL>-1
          F$CHAR    EOL                 TERMINATE THE LINE
          OFF       EOL>-1
          TREAD     FL$                 ASK IF HE MEANS IT
          LA        A0,FL$              GET REPLY
          TNE       A0,('YES   ')       IS IT 'YES' ?
DOZAP     EABT$     .                   YES.  KILL THE PROCESSOR
          F$DT      .                   CLEAR THE LINE
          F$FD1     ('WHEW!')           EDIT SIGH OF RELIEF
          F$PRT     1                   PRINT THE MESSAGE
          J         ICOUT               END OF THIS COMMAND
          OFF       DEBUG
.
.
.
          PURE      DATA
CONREP    'CONSOLE REPLY: !'
STN       ' (FROM STATEMENT !'
          ON        DEBUG
REALLY    'DO YOU REALLY WANT TO ABORT VIA EABT? &'
          OFF       DEBUG
          END