.
. 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