{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: CONSOLE867)}}
====== CONSOLE867 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:BSOFF|BSOFF]], [[george:macro:BSON|BSON]], [[george:macro:CHANG|CHANG]], [[george:macro:CONSOUT|CONSOUT]], [[george:macro:COOR1|COOR1]], [[george:macro:COOR3|COOR3]], [[george:macro:DCA|DCA]], [[george:macro:DISENGPER|DISENGPER]], [[george:macro:FON|FON]], [[george:macro:FPUT|FPUT]], [[george:macro:FREECORE|FREECORE]], [[george:macro:FSHENTRY|FSHENTRY]], [[george:macro:GETACTOP|GETACTOP]], [[george:macro:GPERI|GPERI]], [[george:macro:JBUSY|JBUSY]], [[george:macro:LINKSET|LINKSET]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:OVER|OVER]], [[george:macro:PAIR|PAIR]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SLEEP|SLEEP]], [[george:macro:UP|UP]]
22FL #SEG CONSOLE8 [A DAVID
22PD # (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982.
22^= #OPT K0CONSOLE=0
23DW #LIS K0CONSOLE>K0GREATGEO>K0ALLGEO
23YG #OPT K6CONSOLE=0
24D6 #
24XQ 8HCONSOLE
25CB #
25X2 # ENTRY POINTS
26BL #
26W= SEGENTRY K1CONSOLE,X1CONSOLE
27*W SEGENTRY K2CONSOLE,X2CONSOLE
27TG SEGENTRY K3CONSOLE,X3CONSOLE
285# FSHENTRY K4CONSOLE,X4CONSOLE,,X4CONSOLE
28*6 #
28SQ # THIS SEGMENT HANDLES INPUT AND OUTPUT FOR THE OPERATOR'S CONSOLE.
29#B # OUTPUT IS ALLOWED TO OVERRIDE INPUT AFTER WAITING FOR 6*FONINTP SECS
29S2 # (ABOUT 25 SECS), THE OUTPUT BEING PRECEDED BY "CANCEL NL". A NEWLINE
2=?L # IS OUTPUT FOLLOWING A SUCCESSFUL INPUT. WHEN FINISHED, THE ACTIVITY
2=R= # GOES TO SLEEP IN STYLE #50
2?=W #
2?QG # THE SWITCH CONSW IS SET BY CHARGESC TO INDICATE INPUT REQUIRED
2#=6 #
2#PQ # AWORK1 : MAX NO OF CHARS THAT MAY BE OUTPUT
2*9B # BEFORE NEXT NEWLINE
2*P2 # AWORK2 : NO OF CHARS OF MESSAGE STILL TO BE OUTPUT
2B8L # (B0 SET - NO OUTPUT BLOCK TO BE FREED)
2BN= # AWORK3 : BOTTOM 9 BITS - INPUT CHARACTER COUNT. B0 SET
2C7W # - UNPROCESSED DATA IN INPUT BUFFER (INPUT SUPPRESSED)
2CMG # AWORK4 : CHAR 1 IS MARKER FOR OUTPUT MESSAGE PREFIX
2D76 # B0 SET - NO CPAT FOR INPUT SET UP YET
2DLQ #
2F6B WAITCOUNT +60000/K9 [INPUT WAIT TIME ( = 1 MIN)
2F7R PREFIXC #20203535 [CONTINUATION PREFIX
2F98 SEGENTRY K50CONSOLE
2F=K WIDTH +72 [CONSOLE WIDTH ALTERED BY MACRO
2F?4 SEGENTRY K91CONSOLE
2F?H TIMECHAIN +1 [TIME CHAINED (SEE K2)
2F#2 X1CONSOLE
2F*C
2FBS LDX 0 WIDTH(1)
2FD9 STO 0 AWORK1(2)
2FFL BRN START
2FH3 [CONSWIDTH . DEFAULT = 72 . ELSE 40..
2FJD TABLE [COMPARISON TABLE USED FOR SPLITTING LONG MESSAGES
2FKT BRN XCOLNFOUND
2FM= #12 [#12 = :
2FMP BRN XGOT
2FN8 #31
2FNM BRN XEDIT
2FQ4 #30 [#30 = (
2FRF BRN XGOT
2FSW #34 [#34 =,
2FW? BRN XEDIT
2FXN #20 [#20 = SPACE
2F^5 TEND
2G2G X26 +26
2G3X X122 +122
2G5L X125 +125
2GK= X127 +127
2H4W X128 +128
2HJG XDELTA #74 [DELTA SHIFT LIMIT
2HS# XFINISH #04000000 [MASK FOR FINISH
2J46 PLINK
2JHQ PAIR CONSOLE,3
2K3B THING
2K*R SMO FX1
2KN8 LDX 0 WIDTH
2L2L STO 0 AWORK1(2)
2LG= SLEEP
2L^W COOR3 #50 [WAIT FOR SOMETHING TO DO
2MFG TWITTER
2M^6 JBUSY ,SLEEP [IGNORE WAKE-UP IF CONSOLE JUSY
2NDQ # AS BACKING STORE ROUTINES MAY GET THEIR OAR IN
2NYB # AT ANY TIME
2PD2 START
2PXL BSON CONSW,O2 [BR IF INPUT REQUESTED
2QC= O1
2QWW LDN 4 BCONSOUT
2RBG TXU 4 BCONSOUT
2RW6 BCS ZOOM [BR IF OUTPUT TO DO
2S23 LDX 0 XFINISH(1)
2S5Y ANDX 0 FINISH [TEST IF "FINISHED" BIT SET
2S9T BNZ 0 XFN
2S*Q BSOFF EMSBIT,SLEEP [BR IF NOT EMS
2STB XFN FON #53 [ELSE WAKE UP ACTIVITIES AWAITING
2T*2 BRN SLEEP [END OF OUTPUT
2TSL ZOOM
2W#= LDN 7 0
2WRW BRN ZZ [BR TO DO OUTPUT
2X?G O2
2XR6 LDX 0 AWORK3(2)
2Y=Q BNG 0 XOUTP [BR IF INPUT SUPPRESSED
2YQB OVER CONSW [SWITCH OFF 'INPUT REQUEST' MARKER
2^=2 LDX 3 CPPTR(2) [LOAD CONSOLE D/L PO9NTER
2^PL LDN 7 0 [MODE 0 FOR INPUT PERI
329= DCA 3,DLA,7,MODE [INSERT MODE
32NW LDN 6 128 [CHARACTER COUNT = 128
338G DCA 3,DLA,6,COUNT [INSERT COUNT
33N6 LDN 5 FCINBUF [CORE ADDRESS OF INPUT BUFFER
347Q DCA 3,STO,5,CTSA [STORE TRANSFER START ADDRESS
34MB GPERI 3,2,NC [ISSUE READ PERI, NO CHAINING
34P^ #UNS ENHOPER
34SJ (
34X7 BSON EMSBIT,OUT [CANCEL READ AT ONCE IF EMS -
34^Q [ONLY DO THIS TO UNLOCK KEYBOARD
354* )
3572 WAIT
35LL COOR3 #41 [WAIT K9 MILLISECONDS
366= LDXC 0 CPRW1(2)
36KW BCC XOVER [BR IF TRANSFER FINISHED
375G ADN 7 1
37K6 TXL 7 WAITCOUNT(1)
384Q BCS WAIT [BR IF TIME NOT UP YET
38JB LDN 4 BCONSOUT
3942 TXU 4 BCONSOUT
39HL BCC WAIT [BR IF NO OUTPUT
3=3= LDX 1 BCONSOUT [LOAD POINTER TO 1ST BLOCK
3=GW TXU 1 BCONSOUT+1 [BRANCH IF MORE THAN ONE BLOCK IN
3?2G BCS OUT [THE CONSOLE OUTPUT CHAIN
3?G6 LDX 0 ATYPE(1) [IF ONLY ONE MESSAGE WAITING TO GF
3?^Q SRL 0 12 [OUT, WE DO NOT CANCEL INPUT JUST
3#FB SBN 0 IREMTW+CONBUFF [TO OUTPUT THE TIME
3#^2 BNZ 0 OUT [BR IF NOT TIME MESSAGE
3*DL LDCT 0 #200
3*Y= ORX 1 0
3BCW LDCH 0 A1(1)
3BXG BZE 0 WAIT [BR IF TIME MESSAGE
3CC6 # ELSE OVERRIDE INPUT, PREFIXING MESSAGE WITH CANCEL NL
3CWQ OUT
3DBB DISENGPER [ TO CANCEL INPUT
3DW2 OUTND
3F*L LDN 7 3 [3 EXTRA WORDS FOR CANCEL NL
3FN3 SMO FX1
3G2D LDX 5 WIDTH [IN CASE NO OUTPUT MESSAGES
3G#W ZZ
3GSG JBUSY ,THING [CONSOLE MAY BE USED ANY TIME BY
3H#6 # BACKING STORE FAIL ROUTINES
3HRQ LDCT 1 #200
3J?B SMO FX2
3JR2 DCH 7 AWORK4(1) [MARKER FOR ANY MESSAGE PREFIXES
3K=L LDX 7 GSIGN [SET X7 -VE IN CASE WE GO TO P1
3KQ= LDN 4 0 [INITIALISE CURRENT CHARACTER COUNT
3L9W LDN 3 BCONSOUT
3LPG TXU 3 BCONSOUT
3M96 BCC P1 [BR IF NO MESSAGES TO OUTPUT
3MNQ LDX 3 BCONSOUT [LOAD POINTER TO FIRST OUTPUT BLOCK
3N8B LDEX 5 AREC(3) [LOAD MESSAGE LENGTH (+1?)
3NN2 LDN 6 ATEXT [X6 = INTERNAL MESSAGE POINTER
3P7L LDX 0 ATYPE(3)
3PM= SRL 0 12
3Q6W SBN 0 CONBUFF+COUT
3QLG BZE 0 XCOUT [BR IF CONBUFF/COUT
3R66 ADN 5 1 [RECONCILE IREMTW AND COUT BLOCK
3RKQ #SKI ICBUFF-ATEXT+10>10$10
3S5B ADN 6 ICBUFF-ATEXT [FORMATS
3SK2 #SKI ATEXT-ICBUFF+10>10$10
3T4L SBN 6 ATEXT-ICBUFF [FORMATS
3TJ= XCOUT
3W3W SBN 5 1 [X5 = NO OF WORDS IN MESSAGE
3WHG # X6 = POINTER TO START OF MESSAGE, RELATIVE TO BLOCK
3X36 LDX 3 6 [ROUTINE TO "REMOVE" TRAILING SPACES
3XGQ ADX 3 BCONSOUT
3Y2B ADX 3 5
3YG2 BNZ 5 V1 [J IF MESSAGE NOT NULL
3Y^L LDN 7 0 [NO MORE CHARS TO DEAL WITH
3^F= LDCT 1 #200
3^YW SMO FX2
42DG LDCH 0 AWORK4(1)
42Y6 BZE 0 V2 [J IF NO MESSAGE PREFIX
43CQ NGN 5 1 [ELSE NEWLINE REQD NEXT TIME
43XB BRN P2
44C2 V2
44WL LDN 0 1
45B= SMO FX2
45TW DCH 0 AWORK4(1) [SET MESSAGE PREFIX
46*G BRN ZZZA1 [J FOR OUTPUT
46T6 V1
47#Q SBN 3 1 [X3 POINTS TO LAST WORD IN MESSAGE
47SB SLL 5 2 [CONVERT WORDS TO CHARS
48#2 ORX 3 CACT [X3 -> CHAR 3 OF LAST WORD
48RL T1
49?= LDCH 0 0(3) [LOAD NEXT CHARACTER
49QW SBN 0 #20
4==G BNZ 0 T2 [BR IF NOT SPACE
4=Q6 SLC 3 2
4?9Q SBN 3 1 [REVERSE BCHX ON X3
4?PB SRC 3 2
4#92 BCT 5 T1 [BACK FOR NEXT CHARACTER
4#NL LDN 5 1
4*8= T2
4*MW STO 5 AWORK2(2)
4B7G YY
4BM6 JBUSY ,THING [BR IF CONSOLE IN USE BY EG TRANFAIL
4C6Q LDN 1 FCOUTBUF [START ADDRESS OF BUFFER
4CLB LDX 3 6
4D62 ADX 3 BCONSOUT [SET X3 AS MESSAGE POINTER
4DKL LDN 4 0 [INITIALISE CURRENT COUNT
4F5= PLOOP
4F*4 STO 1 ACOMMUNE1(2) [SAVE CONTS OF X1
4FJW LDX 5 AWORK2(2) [LOAD CHARACTER COUNT
4G4G LDXC 0 GSIGN [ SET C
4GJ6 TXL 5 AWORK1(2) [BR IF LENGTH OF MESSAGE < NO OF
4H3Q BCS SHORT [CHARS POSSIBLE WITHOUT NEWLINE
4H4K LDN 0 3
4H5D SBS 0 AWORK1(2) [LEAVE ROOM FOR CONTINUATION SEQ
4H6* SMO FX1 [ELSE SPLIT MESSAGE
4H8Y LDN 1 TABLE [X1 -> BRN INSTRUCTIONS IN TABLE
4H?H LDN 6 TEND-TABLE/2 [X6= NO OF CHARS UNDER TABLE
4HB6 SETCT
4HDP LDX 2 FX2
4HHB LDX 0 AWORK1(2) [NO OF CHARACTERS LEFT ON LINE
4HRH LDX 2 3
4J3N SLC 2 2
4J?T ADX 2 0
4JJ2 SBN 2 1
4JS7 SRC 2 2
4K4# LDN 0 26
4K#F Y1
4KJL LDCH 7 0(2) [LOAD NEXT CHAR
4KSR TXU 7 1(1)
4L4Y BCC (1) [J IF SUITABLE CHAR FOUND
4L*5 RECOVER
4LK= SLC 2 2 [STEP BACK POINTER ONE CHAR
4LTC SBN 2 1
4M5J SRC 2 2
4M*P BCT 0 Y1
4MKW ADN 1 2
4MW3 BCT 6 SETCT [DECREMENT TABLE COUNT
4N68 SMO FX2 [NO SUITABLE CHARACTER FOUND
4NB* LDX 5 AWORK1
4NLG BRN XPT
4NWM XCOLNFOUND
4P6S BCHX 2 £ [X2-> CHAR FOLLOWING :
4PB^ LDCH 7 0(2) [LOAD CHAR FOLLOWING :
4PM6 SLC 2 2
4PX? SBN 2 1
4Q7D SRC 2 2 [X2-> :
4QCK SBN 7 #20 [ IF CHAR FOLLOWING : IS SPACE
4QMQ BZE 7 RECOVER [J BACK TO SEARCH FOR SUITABLE CHAR
4QXX XEDIT [SP OR ) FOUND, REMOVE ANY PRECEEDING
4R84 LDX 5 2 [X2-.>-S ASUITABLE SPLIT CHAR
4RD9 SLC 5 2
4RNB SLC 3 2
4RYH SBX 5 3 [X5 = NO OF CHARS PRECEEDING S
4S8N SRC 3 2
4SDT
4SP2
4S^7 ZELOOP
4T9# SLC 2 2
4TFF SBN 2 1
4TPL SRC 2 2
4T^R LDCH 7 0(2) [LOAD NEXT CHAR
4W9Y SBN 7 #20
4WG5 BNZ 7 XPT [J IF NOT A SPACE CHAR
4WQ= BCT 5 ZELOOP
4X2C LDN 5 1 [ONLY SPACES IN MESSAGE
4X=J BRN XPT
4XGP XGOT [X2-> SPLITTING CHAR
4XQW SLC 2 2
4Y33 SLC 3 2
4Y?8 SBX 2 3 [X2 = NO OF CHAR B4 NL REQUIRED
4YH* SRC 3 2 [RESET CURRENT MESSAGE POINTER
4YRG LDX 5 2
4^3M ADN 5 1
4^?S XPT
4^H^ LDX 2 FX2
4^S6 SHORT
524? LDX 1 ACOMMUNE1(2)
52#D PSHORT
52JK STO 5 AWORK1(2) [STORE NO OF CHAR B4 NL REQUIRED
52SQ LDX 7 AWORK2(2) [MESSAGE REMAINDED COUNT
534X LDN 6 #76
53*4 LDX 2 FX1
53M2 ZLOOP
546L # EDITING ROUTINE
54L= TXL 4 X128(2)
555W BCC XPERI [BR IF END OF BUFFER REACHED
55KG LDCH 0 0(3) [LOAD NEXT CHARACTER
5656 TXL 0 XDELTA(2)
56JQ BCS NOTDELTA [BR IF CHARACTER NOT DELTA SHIFT
574B TXL 4 X127(2)
57J2 BCC XPERI [BR IF NO ROOM IN BUFFER
583L DCH 6 0(1) [STORE #76 FOR NEXT CHARACTER
58H= BCHX 1 £
592W SBN 0 #10 [CONVERT CHARACTER TO ALPHA SHIFT
59GG ADN 4 1 [UPDATE CURRENT CHARACTER COUNT
5=26 NOTDELTA
5=FQ SBN 7 1 [DECREMENT REMAINDER COUNT
5=^B DCH 0 0(1) [INSERT NEXT CHARACTER
5?F2 BCHX 1 £
5?YL BCHX 3 £ [UPDATE POINTERS
5#D= ADN 4 1 [AND CHARACTER COUNT
5#XW BCT 5 ZLOOP
5*CG TXL 4 X125(2) [END OF (PRINT) LINE REACHED
5*KF BCC NLSIGN [J TO INDICATE NL PREFIX REQUED
5*RD BNZ 7 NOTEOM [J IF MESSAGE CONTINUES
5*^C # [ELSE INSERT NL CHARS
5B7B LDX 2 FX2
5B** LDN 0 FCANCEL+2 [ADDRESS OF NL BUFFER
5BH# MVCH 0 4 [MOVE IN NL
5BP? ADN 4 4 [INCREMENT CURRENT COUNT
5BX= SMO FX1
5C59 LDX 0 WIDTH
5C?8 STO 0 AWORK1(2) [NO OF CHARS BEFORE NEXT NL
5CF7 BRN ZZZA2
5CM6 NOTEOM [NOT EOM INSERT NL & CONTINUATION PREFIX- IF SPACE
5CT5 LDX 2 FX2
5D34 SMO FX1
5D93 TXL 4 X122 [TEST FOR SPACE
5DC2 BCC NLSIGN [J-AS NL & CONTINUATION PREFIX REQD
5DJ^ # [INSERT NL & CONTINUATION CHARS
5F#T RETURN
5FGS SMO FX1
5FNR LDN 0 PREFIXC [ADDRESS OF CONTINUATION PREFIX
5FWQ MVCH 0 3 [MOVE IN CONT PREFIX
5F^P LDN 0 FCANCEL+2 [ADDRESS OF NL BUFFER
5G4N MVCH 0 4 [MOVE IN NL
5G7M ADN 4 7 [INCREMENT CURRENT COUNT
5G=N SMO FX1
5GDM LDX 0 WIDTH
5GSK STO 0 AWORK1(2)
5H2J BRN YA [J TO REMOVE PRECEEDING SPACES
5H8H NLSIGN
5HBG NGN 5 1 [NL PREFIX REQUIRED FOR NEXT
5HJF BRN XPERI [PRINT LINE. J TO OUTPUT
5HQL YA
5J== STO 7 AWORK2(2) [STORE CURRENT REMAINDER COUNT
5JPW LDCH 0 0(3) [ELSE LOAD NEXT CHARACTER
5K9G SBN 0 #20
5KP6 BNZ 0 PLOOP [BR IF NOT SPACH
5L8Q BCT 7 YA1 [COUNT DOWN REMAINDER COUNT
5LNB BRN ZZZA2 [BR IF EXHAUSTED
5M82 YA1
5MML BCHX 3 YA
5N7= XPERI
5NLW # TO OUTPUT A LINE
5P6G P1
5PL6 LDX 2 FX2
5Q5Q P2
5QKB STO 5 AWORK1(2) [STORE LINE REMAINDER COUNT
5R52 ZZZA1
5RJL LDX 6 3 [PRESERVE MESSAGE POINTER
5S4= SBX 6 BCONSOUT [AND RELATIVISE IT
5SHW ZZZA2
5T3G STO 7 AWORK2(2) [STORE REMAINDER COUNT
5TH6 LDCT 1 #200
5W2Q SMO FX2
5WGB LDCH 0 AWORK4(1) [LOAD CANCEL/NL MARKER
5X22 LDN 1 FCOUTBUF
5XFL SBX 1 0 [FIX START ADDRESS
5X^= LDX 3 CPPTR(2)
5YDW DCA 3,STO,1,CTSA [STORE TRANSFER START ADDRESS
5YYG SLL 0 2 [CONVERT NO OF EXTRA WORDS TO NO CHAR
5^D6 ADX 4 0 [AND ADD TO CURRENT COUNT
5^XQ BZE 4 X1CONSOLE [BR IF NO ACTUAL OUTPUT TO DO
62CB DCA 3,DLA,4,COUNT [STORE CHARACTER COUNT
62X2 LDN 7 1
63BL DCA 3,DLA,7,MODE [INSERT MODE
63W= TF
64?8 GPERI 3,2 [AND ISSUE PERI
64N6 COOR1 [WAIT FOR END OF TRANSFER
6554 CALL 5 XGETCORE [CHECK IF CORE REQUIRED
65G2 SMO FX1
65WY LDX 5 WIDTH [SET X5 IN CASE J TO THING OR ZZ
66?W LDCH 0 CPRW1(2) [TEST REPLY WORD
66NS ANDN 0 5
675Q BZE 0 OK [BRANCH IF TRANSFER OK
67GN NM
67XL LDN 7 1 [TRAN FAIL - SET NL INDICATOR
68#J STO 5 AWORK1(2) [AND FULL CONSOL WIDTH FOR NEXT MESS
68PG BRN ZZ
696D OK [TRAN OK
69HB LDX 0 AWORK2(2)
69Y# BNG 0 NOBLOCK [J IF NO MESSAGE BLOCK
6=*=
6=Q8 BNZ 0 NFIN [J IF MESSAGE NOT FINISHED
6?76 FREECORE BCONSOUT [ELSE FREE MESSAGE BLOCK
6?J4 NOBLOCK
6?^2 LDX 0 AWORK1(2)
6#*Y BNG 0 NM [J IF NL PREFIX REQUIRED FOR START
6#QW # [OF NEXT MESSAGE , ELSE
6*7S BRN TWITTER [J TO TEST FOR INPUT
6*JQ NFIN
6*^N JBUSY ,THING [J CONSOLE USED AT ANY TIME BY BSTS
6BBL LDN 4 0 [INITIALISE CURRENT COUNT
6BRJ LDX 3 6
6C8G ADX 3 BCONSOUT [SET X3 AS MESSAGE POINTER
6CKD LDX 0 AWORK1(2)
6D2B BNG 0 NF [J IF NL REQ
6DC# LDX 5 AWORK1(2) [STORE LINE REMENDER COUNT
6DS= LDN 7 0 [NO MESSAGE PREFIX FOR NEXT MESSAGE
6F98 LDCT 1 #200
6FL6 SMO FX2
6G34 DCH 7 AWORK4(1)
6GD2 LDN 1 FCOUTBUF
6GSY BRN PSHORT
6H9W NF [MESS CONTINUES SO CLEAR NL MARKER IN AW4
6HLS LDX 7 AWORK2(2)
6J3Q LDN 0 0
6JDN LDCT 1 #200
6JTL SMO FX2
6K=J DCH 0 AWORK4(1) [NO NL MARKER FOR START OF NEXT MESSA
6KMG LDN 1 FCOUTBUF
6L4D BRN RETURN [J TO PREFIX NEXT LINE WITH
6LFB # [CONTINUATION SEQUENCE
6LXL XOVER
6MC= # INPUT TERMINATED BY EITHER ACCEPT, CANCEL, OR COUNTED OUT
6MWW #
6NBG LDCH 0 CPRW1(2)
6NW6 ANDN 0 2 [MASK ERROR BIT
6P*Q BNZ 0 OUTND [BR TO OUTPUT CANCEL NL
6PTB LDEX 4 CPRW1(2) [LOAD REMAINDER COUNT
6Q*2 SBX 6 4
6QSL BZE 6 OUTND [CANCEL IF NO INPUT
6R#= LDX 0 GSIGN [SET AWORK3 -VE TO INDICATE NO CORE
6RRW ORS 0 AWORK3(2) [FOR ADATA/CREADL GOT YET
6S?G ORS 0 AWORK4(2) [NO CPAT GOT YET
6SR6 DSA 6 AWORK3(2) [REMEMBER MESS CHAR COUNT
6T=Q CALL 5 XGETCORE [TRY FOR SOME CORE
6TK7 SMO FX1
6TXJ LDX 5 WIDTH
6W=2 LDN 7 1 [SET NEWLINE MARKER
6WPL BRN ZZ [BR TO DO OUTPUT
6X9= XOUTP
6XNW CALL 5 XGETCORE [TRY FOR SOME CORE
6Y8G BRN O1
6YN6 XOUT
6^7Q LDN 7 0 [NO NL TO OUTPUT
6^MB BRN OUT [BR TO DO OUTPUT
7272 XGETCORE
72LL #
736= # THIS SUBROUTINE OPTIONALLY GETS CORE TO HANDLE ANY OUTSTANDING INPUT+
73KW # IF CORE RS AVAILABLE A CPA IS SET UP WITH ALINK TO K3CONSOLE & FPUT.
745G # EXIT WITH AWORK4 +VE MEANS THE CPA WAS SUCCESSFULLY SET UP.
74K6 #
754Q LDXC 0 AWORK4(2) [EXIT IF CPAT NOT REQUIRED
75JB BCC (5)
7642 SBX 5 FX1
76HL GETACTOP XEXIT,CPAT [GETA CPAT
773= LDX 0 BITS22LS
77GW ANDS 0 AWORK4(2) [CLEAR CPA REQUIRED MARKER
782G LDEX 0 AWORK3(2) [CHARACTER COUNT FOR MESSAGE
78G6 LDX 2 BPTR(2) [POINTER TO NEO CPA
78^Q STO 0 AWORK1(2) [STORE MESS CHAR COUNT
79FB LDX 0 FX2
79^2 STO 0 AWORK2(2) [STORE ADDRESS OF CONSA/CNTRAL
7=DL LINKSET 2,PLINK(1) [SET LINKS FOR NEW ACTRVITY
7=Y= FPUT [START THE ACTIVITY
7?CW XEXIT
7?XG ADX 5 FX1
7#C6 EXIT 5 0
7#WQ X2CONSOLE
7*BB # THIS ENTRY POINT IS USED BY THE MACRO CONSTIME TO CONTROL THE OUTPUT
7*W2 # OF THE TIME ON THE OPERATOR'S CONSOLE. ANY TIME MESSAGE WAITING IN THE
7B*L # CHAIN WHEN THE MACRO IS ISSUED IS FREED. THE TIME MESSAGE IS FOUND IN
7BT= # A GMON/AOUT BLOCK CHAINED TO THE CURRENT ACTIVITY. IT IS THEN RENAMED
7C#W # A CONBUFF/IREMTW AND CHAINED INTO THE CONSOLE OUTPUT CHAIN, AND THE
7CSG # CONSOLE ACTIVITY IS WOKEN UP
7D#6 #
7DF# LDX 0 TIMECHAIN(1)
7DLG BZE 0 X2UP [J IF TIME SUPPRESSED
7DRQ LDN 4 BCONSOUT [START ADDRESS OF CONSOLE OUTPUT
7F?B TXU 4 BCONSOUT [CHAIN
7FR2 BCC REMPTY [BR IF EMPTY
7G=L LDX 3 BCONSOUT [LOAD POINTER TO FIRST BLOCK
7GGD LDX 3 FPTR(3)
7GK3 TXU 3 4
7GML BCC REMPTY [J IF NO MORE BLOCKS ON CHAIN
7GQ= R101
7H9W LDX 0 ATYPE(3)
7HPG SRL 0 12
7J96 SBN 0 CONBUFF+IREMTW
7JNQ SEGENTRY K8CONSOLE [FOR ALLTIME MACRO
7K8B BZE 0 RFND [BR IF IREMTW FOUND
7KN2 R102
7L7L LDX 3 FPTR(3)
7LM= TXU 3 4
7M6W BCC REMPTY [BR IF END OF CHAIN REACHED
7MLG BRN R101
7N66 RFND
7NKQ LDCT 1 #200
7P5B SMO 3
7PK2 LDCH 0 A1(1) [LOAD SOURCE CHARACTER
7Q4L BNZ 0 R102 [BR IF NOT TIME MESSAGE
7QJ= FREECORE 3 [ELSE FREE THE MESSAGE BLOCK
7R3W REMPTY
7RHG MHUNTW 1,GMON,AOUT [FIND THE MESSAGE BLOCK
7S36 LDEX 6 A1(1) [LOAD MESSAGE COUNT
7SGQ ADN 6 ICBUFF-A1-2 [IREMTW BLOCK LENGTH
7T2B SETUPCOR 6,3,CONBUFF,IREMTW [SET UP IREMTW BLOCK
7TG2 MHUNTW 2,GMON,AOUT
7T^L LDEX 6 A1(2) [LOAD RECORD H5ADER
7WF= SBN 6 2 [CONVERT TO MESSAGE LENGTH
7WYW STO 6 A1(3) [AND STORE IN CONBUFF IREMTW
7XDG ADN 2 A1+2 [MESSAGE START - GMON AOUT
7XY6 ADN 3 ICBUFF [MESSAGE START - IREMTW
7YCQ SMO 6
7YXB MOVE 2 0 [MOVE MESSAGE IN
7^C2 SBN 3 ICBUFF [POINT TO START OF BLOCK
7^WL CONSOUT 3 [OUTPUT TO CENTRAL CONSOLE
826D X2UP
82B= UP [RETURN
82TW X3CONSOLE
83*G #
83T6 # THIS ENTRY IS USED BY THE MAIN ROUTINE TO HANDLE INPUT. IT IS
84#Q # DRIVEN FROM THE NEW CPA, AND SETS UP AN ADATA/CREADL BLOCK TO HOLD
84SB # THE INPUT IN THE CONSOLE INPUT BUFFER. WHEN THE DATA IS THUS STORED
85#2 # AWAY, B0 OF AWORK3 OF THE CONSA ACTIVITY IS UNSET TO ALLOW MORE INPUT.
85RL # THE MESSAGE IS THEN EDITED TO REMOVE DELTA SHIFTS. THE CPA THEN GOES
86?= # ACROSS TO COMPRO,1.
86QW #
87=G LDCT 0 #770
87Q6 STO 0 JSOURCE1(2) [JSOURCE1 FOR CENTRAL CONSOLE
889Q LDEX 6 AWORK1(2) [MESSAGE CHARACTER COUNT
88PB ADN 6 3
8992 SRL 6 2 [MESSAGE LENGTH IN WORDS
89NL ADN 6 CPDATA-A1+1 [LOGICAL LENGTH REQUIRED
8=8= SETUPCOR 6,1,FILE,FRB [SET UP FRB
8=MW LDEX 6 AWORK1(2) [CHARACTER COUNT
8?7G STO 6 A1(1) [STORE MESSAGE LENGTH
8?M6 LDN 0 FCINBUF
8#6Q ADN 1 CPDATA
8#LB SMO 6
8*62 MVCH 0 0 [MOVE MESSAGE IN
8*KL # FIND THE CONSA/CNTRAL ACTIVITY
8B5= SMO AWORK2(2) [ADDRESS OF CONSA/CNTRAL
8BJW STOZ AWORK3 [CLEAR SUPPRESS INPUT MARKER
8C4G CHANG [EDIT MESSAGE
8CJ6 STOZ AWORK2(2)
8D3Q STOZ AWORK1(2)
8DQL ACROSS COMPROA,1
8F32 #PAGE
8FGL MENDAREA 20,K100CONSOLE
8G2= #END
^^^^ ...42576073000200000000