{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: OPERIN867)}}
====== OPERIN867 ======
(George Source)
**Macros used:** [[george:macro:ALTLEN|ALTLEN]], [[george:macro:AND|AND]], [[george:macro:ANDR|ANDR]], [[george:macro:BS|BS]], [[george:macro:CHAIN|CHAIN]], [[george:macro:CHANGALL|CHANGALL]], [[george:macro:CONSOUT|CONSOUT]], [[george:macro:COOR1|COOR1]], [[george:macro:COOR3|COOR3]], [[george:macro:DCA|DCA]], [[george:macro:DO|DO]], [[george:macro:DOWN|DOWN]], [[george:macro:ELSE|ELSE]], [[george:macro:ELSF|ELSF]], [[george:macro:FI|FI]], [[george:macro:FORWARD|FORWARD]], [[george:macro:FPUT|FPUT]], [[george:macro:FREECORE|FREECORE]], [[george:macro:GETACT|GETACT]], [[george:macro:GPERI|GPERI]], [[george:macro:HUNTACT|HUNTACT]], [[george:macro:IF|IF]], [[george:macro:IFR|IFR]], [[george:macro:LF|LF]], [[george:macro:LINK|LINK]], [[george:macro:LINKSET|LINKSET]], [[george:macro:LOCKC|LOCKC]], [[george:macro:MBSXD|MBSXD]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:MONOUT|MONOUT]], [[george:macro:NAME|NAME]], [[george:macro:OR|OR]], [[george:macro:OUTBLOCK|OUTBLOCK]], [[george:macro:OUTNULL|OUTNULL]], [[george:macro:OUTPACK|OUTPACK]], [[george:macro:OUTPACKX|OUTPACKX]], [[george:macro:OVER|OVER]], [[george:macro:REPEAT|REPEAT]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:THEN|THEN]], [[george:macro:UNLOCK|UNLOCK]], [[george:macro:UP|UP]], [[george:macro:VFREEW|VFREEW]], [[george:macro:WHILE|WHILE]]
22FL #OPT K0OPERIN=0
22^= #LIS K0OPERIN > K0ALLGEO > K0GREATGEO
23DW #SEG OPERIN [COMM - STIG TOWNSEND
23NN ...[ (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982.
23YG [
24D6 [
24XQ 8HOPERIN
25CB SEGENTRY K1OPERIN,OPERINK1 [READ A LINE OF UNSOLICITED INPUT
25X2 SEGENTRY K2OPERIN,OPERINK2 [READ A LINE OF EMS REPLY
26BL [
26W= [
27*W [ AWORK1 USED BY SUBROUTINE SCANCEL
27TG [ AWORK2 USED BY K2ENTRY
28*6 [ AWORK3 USED TO STORE REPLY WORD TO THE READ WHILE
28SQ [ WE ARE WRITING A RESPONSE OF THE PREVIOUS
29#B [ LINES OF A MULTI-LINE INPUT(DURING SREAD)
29S2 [ OR A BLANK I-P AREA (DURING SRESPOND)
2=?L [ AWORK4 USED TO SAY WHAT KIND OF READ IT IS:
2=R= [ 0 => K1 - UNSOLICITED
2?=W [ 1 => K2 - SOLICITED
2?QG #PAGE
2#=6 [
2#PQ [
2*9B [ DEFINITIONS
2*P2 [
2B8L #DEF STARTINAREA = 20 [1ST LINE OF INPUT AREA
2BN= [
2C7W #DEF WIDTH = 40 [WIDTH OF OPER SCREEN (CHARS)
2CMG [
2D76 #DEF READMODE = 2 [EXTENDED MODE READ
2DLQ [
2F6B #DEF READLENGTH = 80 [LENGTH OF READ PERI
2FL2 [
2G5L #DEF WRITEMODE = 3 [EXTENDED WRITE MODE
2GK= [
2H4W #DEF UNLOCK = #200 [ADDITIONAL WRITE MODE - UNLOCK KEYS
2HJG [
2J46 #DEF MSGCANCLEN = 44 [LENGTH (CHARS) OF MSGCANCEL
2JHQ [
2K3B #DEF MSGCONTLEN = 44 [LENGTH (CHARS) OF MSGCONTN
2KH2 [
2L2L #DEF MSGOUTLEN = 16 [LENGTH (CHARS) OF MSGOUTWAITS
2LG= [
2L^W #DEF WAITPOSN = 23 @L 18 + (WIDTH-MSGOUTLEN)
2MFG [START POSITION OF MSGOUTWAITS
2M^6 [ON THE OPER SCREEN (SEE SYSWRITE)
2NDQ [
2NYB #DEF TRANSCHARS = READLENGTH/4 + FCINBUF
2PD2 [SPARE WORD IN INPUT BUFFER USED
2PXL [TO STORE LENGTH OF AN INPUT LINE
2QC= [
2QWW #DEF TOTSIZE = TRANSCHARS + 1 [FOLLOWING WORD HOLDS SIZE OF
2RBG [CORRESPONDING RECORD IN CURRENT
2RW6 [MESSAGE BLOCK
2S*Q [
2STB [
2T*2 [
2TSL [ PRESET DATA
2W#= [
2X?G [
2XR6 NEWLINES
2Y=Q MSGCANCEL 44H^*^*CANCEL
2YQB [
2^=2 MSGCONTINUE 44H^*^*PLEASE CONTINUE
2^PL [
329= MSGOUTWAIT +MSGOUTLEN [MESSAGE LENGTH (CHARS)
32NW +WAITPOSN [START POSITION ON SCREEN
338G 16HOUTPUT WAITING [TEXT
33N6 [
347Q [
34MB [
35*R ...PLINK LINK COMPROA,1 [LINK TO COMMAND PROCESSOR FOR
35LL [CPATS SET UP TO PROCESS OUR I/P
366= [
36KW [
375G [
37K6 VARCHAR +JPDVARCHAR [MESSAGE PDC
384Q [
38JB [
3942 [
39HL MINUS 4H- [FOR CONTINUED INPUT
3=3= #PAGE
3=GW [
3?2G [
3?G6 [*********************************************************************
3?^Q [
3#FB SGETOPER
3#^2 [
3*DL [*********************************************************************
3*Y= [
3BCW [ ENSURES THAT BSTS HAS NOT LEFT A MESSAGE IN FCOUTBUF
3BXG [ THAT HAS YET TO BE EXTRACTED. IT ENSURES THAT WE CAN OVERWRITE
3CC6 [ THE CONTROL AREA OF THE OPER DEVICE LIST
3CWQ [
3DBB [ LINK X4
3DW2 [
3F*L [ ON EXIT, OK TO USE DEVICE LIST
3FT= [ ALL DETECTED BSTS MESSAGES HAVE BEEN EXTRACTED
3G#W [ X1,2 = FX'S
3GSG [
3H#6 SBX 4 FX1
3HRQ LDX 1 FX1
3J?B LDX 2 FX2
3JR2 WHILE TRUE [START LOOP
3K=L WHILE BUSY,CPPTR(2) [WAIT TILL UNBUSY
3KQ= DO
3L9W COOR3 #50
3LPG REPEAT
3M96 SMO CONSCNTRL
3MNQ LDX 0 COBS
3N8B IF 0,NZ [EXTRACT MSG IF IS ONE
3NN2 THEN
3P7L DOWN OPERA,3
3PM= FI
3Q6W ANDR BUSY,CPPTR(2) [REPEAT IF BSTS WRITING NOW
3QLG SMO CONSCNTRL
3R66 LDX 0 COBS
3RKQ OR 0,NZ [OR ANOTHER MSG TO BE EXTRACTED
3S5B DO
3SK2 REPEAT
3T4L ADX 4 FX1
3TJ= EXIT 4 0
3W3W #PAGE
3WHG [
3X36 [
3XGQ [
3Y2B [*********************************************************************
3YG2 [
3Y^L SPERIA
3^F= [
3^YW [*********************************************************************
42DG [
42Y6 [ DO A PERI TO THE INPUT AREA AND RESPONSE LINE
43CQ [
43XB [ LINK X4
44C2 [ ON ENTRY, X0 CONTAINS START ADDR OF BUFFER
44WL [ X1 CONTAINS COUNT IN CHARACTERS
45B= [ ON EXIT, X0 DESTROYED
45TW [ X1=FX1
46*G [ X2=FX2
46T6 [ X3->CPRW1(2)
47#Q [
47SB SBX 4 FX1
48#2 LDX 2 FX2
48RL LDX 3 CPPTR(2)
49?= DCA 3,STO,0,CTSA [GIVEN START ADDRESS
49QW DCA 3,DLA,1,COUNT [GIVEN NUMBER OF CHARACTERS
4==G LDN 0 WRITEMODE+UNLOCK
4=Q6 DCA 3,DLA,0,MODE [EXTENDED WRITE MODE
4?9Q LDCT 0 STARTINAREA@L3
4?PB DCA 3,STO,0,EXTRA [STARTING AT BEGINNING OF INPUT AREA
4#92 GPERI 3,2
4#NL COOR1
4*8= LDN 3 CPRW1(2)
4*MW ADX 4 FX1
4B7G EXIT 4 0
4BM6 #PAGE
4C6Q [
4CLB [
4D62 [
4DKL [*********************************************************************
4F5= [
4FJW SRESPOND
4G4G [
4GJ6 [*********************************************************************
4H3Q [
4HHB [ BLANK THE INPUT AREA, PRESERVING INPUT REPLY
4J32 [
4JGL [ LINK X6
4K2= [
4KFW [ ON EXIT, X1,2 = FX'S
4K^G [
4LF6 SBX 6 FX1
4LYQ LDX 2 FX2
4MDB LDX 0 CPRW1(2) [PRESERVE INPUT REPLY WORD
4MY2 STO 0 AWORK3(2)
4NCL DO
4NX= CALL 4 SGETOPER
4PBW LDX 0 NEWLINES(1) [PREPARE TO BLANK INPUT AREA
4PWG STO 0 FCOUTBUF [3 NEWLINES FROM FCOUTBUF-1
4QB6 LDX 0 ACES
4QTQ LDN 3 WIDTH/4
4R*B DO [BLANK THE RESPONSE LINE
4RT2 STO 0 FCOUTBUF(3)
4S#L REPEAT CT 3
4SS= LDX 3 CONSCNTRL
4T?W IF BS,3,COUTWAITS [IF "OUTPUT WAITING" TO KEEP
4TRG THEN [THEN
4W?6 LDN 5 (WIDTH-MSGOUTLEN)/4 + FCOUTBUF + 1
4WQQ LDN 4 MSGOUTWAIT+2(1)
4X=B MOVE 4 MSGOUTLEN/4 [ADD IT ON RIGHT
4XQ2 FI [FI "OUTPUT WAITING"
4Y9L LDN 1 WIDTH+8
4YP= LDN 0 FCOUTBUF-1
4^8W CALL 4 SPERIA [DO THE PERI
4^NG REPEAT UNTIL,MBAC,3,CONSINOP,CONSFAIL
5286 LDX 0 AWORK3(2)
52MQ STO 0 CPRW1(2) [RESTORE INPUT REPLY
537B ADX 6 FX1
53M2 EXIT 6 0
546L #PAGE
54L= [
555W [
55KG [
5656 [*********************************************************************
56JQ [
574B SCANCEL
57J2 [
583L [*********************************************************************
58H= [
592W [ BLANK THE INPUT AREA, OUTPUT "CANCEL", SET UP A CANCEL REPLY WORD
59GG [ AND STOZ THE 'PREVIOUS LINES IN MESSAGE' COUNT
5=26 [
5=FQ [ LINK X5 - USES AWORK4
5=^B [ X3,4 CORRUPTED, X1 AND X2 SET TO FX'S
5?F2 [
5?YL SBX 5 FX1
5#D= LDX 1 FX1
5#XW LDX 2 FX2
5*CG LDX 4 CPRW1(2)
5*X6 MBSXD 0,CONSFWD,CONSREV
5BBQ ANDX 4 0 [X4 HOLDS PAGE KEY BITS FROM LAST READ
5BWB STO 4 AWORK1(2)
5CB2 DO
5CTL CALL 4 SGETOPER
5D*= LDN 2 MSGCANCEL(1)
5DSW LDN 3 FCOUTBUF
5F#G MOVE 2 MSGCANCLEN/4 [HAVE 3 NEWLINES AND CANCEL
5FS6 LDX 3 CONSCNTRL [1ST NEWLINE IN FCOUTBUF-1
5G?Q IF BS,3,COUTWAITS [POSSIBLY FOLLOWED BY
5GRB THEN ["OUTPUT WAITING"
5H?2 LDN 2 MSGOUTWAIT+2(1)
5HQL LDN 3 FCOUTBUF + (WIDTH-MSGOUTLEN / 4) + 1
5J== MOVE 2 MSGOUTLEN/4
5JPW FI [FI
5K9G LDN 0 FCOUTBUF-1 [FROM FCOUTBUF-1
5KP6 LDN 1 WIDTH+8
5L8Q CALL 4 SPERIA
5LNB REPEAT UNTIL,MBAC,3,CONSINOP,CONSFAIL
5M82 STOZ 0(3)
5MML BS 3,CONSCANCEL [SET UP CANCEL REPLY
5N7= LDX 4 AWORK1(2)
5NLW ORS 4 0(3) [INCLUDING CORRECT PAGE KEYS
5P6G SMO CONSCNTRL
5PL6 STOZ COIN [STOZ 'PREVIOUS LINES' COUNT
5Q5Q VFREEW FILE,FRB
5QKB ADX 5 FX1
5R52 EXIT 5 0
5RJL #PAGE
5S4= [
5SHW [
5T3G [
5TH6 [*********************************************************************
5W2Q [
5WGB SHUNTCREADL
5X22 [
5XFL [*********************************************************************
5X^= [
5YDW [ SUBSIDIARY HUNT ROUTINE FOR 'LOCKC'
5YYG [
5^D6 MHUNTW 2,ADATA,CREADL
5^XQ EXIT 1 0
62CB [
62X2 [
63BL [
63W= [*********************************************************************
64*W [
64TG SHUNTFRB
65*6 [
65SQ [*********************************************************************
66#B [
66S2 [ POINT X3 AT FILE FRB
67?L [
67R= [ LINK X6
68=W [
68QG MHUNTW 3,FILE,FRB
69=6 EXIT 6 0
69PQ #PAGE
6=9B [
6=P2 [
6?8L [
6?N= [*********************************************************************
6#7W [
6#MG SREAD
6*76 [
6*LQ [*********************************************************************
6B6B [
6BL2 [ ISSUES A READ. DEALS WITH FAILED TRANSFERS AND PAGE KEYS.
6C5L [ CONTINUATION IS ALSO DEALT WITH.
6CK= [ WE ASSUME THAT WORD COIN OF THE CONBUFF/CNTRL BLOCK HOLDS
6D4W [ A NUMBER IN THE RANGE 0-2 INCLUSIVE (PRIOR INPUT LINES OF
6DJG [ THIS MESSAGE).
6F46 [
6FHQ [ LINK X7
6G3B [ ON ENTRY X2=FX2
6GH2 [
6H2L [ ON EXIT KEYBOARD IS UNLOCKED
6HG= [ REPLY WORD IS FOR THE READ, NOT ITS RESPONSE
6H^W [
6JFG SBX 7 FX1
6J^6 IF +AWORK4(2),ZE [IF UNSOLICITED INPUT THEN
6KDQ THEN
6KYB OVER CONSW [ALLOW FURTHER INTERRUPTS
6LD2 FI [FI
6LXL CALL 4 SGETOPER
6MC= LDX 3 CPPTR(2)
6MWW LDN 0 READMODE
6NBG DCA 3,DLA,0,MODE [SET READ MODE
6NW6 LDN 0 READLENGTH
6P*Q DCA 3,DLA,0,COUNT [SET MAX PERMISSIBLE LENGTH
6PTB LDN 4 FCINBUF
6Q*2 DCA 3,STO,4,CTSA [SET START ADDRESS
6QSL GPERI 3,2 [ISSUE READ PERI
6R#= COOR1
6RRW LDN 3 CPRW1(2) [X3 -> REPLY WORD
6S?G IF MBS,3,CONSFAIL,CONSINOP [IF TRANSFER FAIL OR INOPERABLE
6SR6 THEN [THEN
6T=Q LDX 4 CPRW1(2)
6TQB DOWN OPER,2 [ASK FOR REPEAT INPUT
6W=2 STO 4 CPRW1(2)
6WPL ELSF +AWORK4(2),ZE [ELSF UNSOLICITED READ OK
6X9= AND BS,,EMSBIT [DURING EMS THEN
6XNW THEN
6Y8G IF MBAC,3,CONSFWD,CONSREV,CONSCONTN [IF NO KEYS
6YN6 LF 3,CONSREMCT,0
6^7Q SBN 0 READLENGTH
6^MB AND 0,ZE [AND NO CHARS THEN
7272 THEN
72LL CALL 6 SRESPOND
736= DOWN SHOWCOMM,3 [FREE LOG
73KW ELSE [ELSE
745G CALL 5 SCANCEL [CANCEL - WE MUST UNLOCK KEYBOARD
74K6 FI
754Q ELSE [ELSE (COMMAND OR REPLY OK)
75JB LDN 1 READLENGTH
7642 LF 3,CONSREMCT,0
76HL SBX 1 0
773= STO 1 TRANSCHARS [REMEMBER TRANSFER COUNT
77GW IF 1,NZ [IF DATA CHARS THEN
782G THEN
78G6 LDN 4 2*4 + 3(1)
78^Q SRL 4 2 [LENGTH OF 2 HEADER WORDS + DATA
79FB STO 4 TOTSIZE
79^2 SMO CONSCNTRL
7=DL LDX 0 COIN
7=Y= IF 0,ZE [IF 1ST LINE OF INPUT MSG THEN
7?CW THEN
7?XG ADN 4 1 [ALLOW FOR EXTRA WORD AT END
7#C6 SETUPCOR 4,3,FILE,FRB [SET UP MSG BLOCK
7#WQ [
7*BB [ THE FORMAT OF THE BLOCK IS:
7*W2 [ A1 - INCLUSIVE WORDCOUNT OF CELL
7B*L [ A1+1 - CHARACTER COUNT OF LINE
7BT= [ A1+2.. DATA
7C#W [
7CSG [ FROM 0 TO THREE INCLUSIVE OF THESE CELLS MAY
7D#6 [ BE CONTAINED IN THE BLOCK. THE LAST CELL IS
7DRQ [ FOLLOWED BY A ZERO WORD
7F?B [
7FR2 STOZ A1(3) [MARK IT EMPTY
7G=L ELSE [ELSE (CONTINUATION LINE)
7GQ= CALL 6 SHUNTFRB
7H9W ADX 4 ALOGLEN(3) [EXTEND BLOCK FOR NEW LINE
7HPG ALTLEN 3,4,FILE,FRB
7J96 CALL 6 SHUNTFRB
7JNQ FI [FI 1ST/CONTN LINE
7K8B ADN 3 A1 [X3 -> 1ST RECORD
7KN2 WHILE +0(3),NZ [FIND CURRENT END OF BLOCK
7L7L DO
7LM= ADX 3 0(3)
7M6W REPEAT [X3 -> 1ST EMPTY RECORD
7MLG LDX 0 TOTSIZE
7N66 STO 0 0(3) [SET UP RECORD HEADER
7NKQ LDX 1 TRANSCHARS
7P5B STO 1 1(3) [LENGTH OF DATA
7PK2 IF 1,NZ
7Q4L THEN
7QJ= LDN 4 FCINBUF
7R3W LDN 5 2(3)
7RHG MVCH 4 0(1) [DATA ITSELF
7S36 FI
7SGQ ADX 3 TOTSIZE [POINT AT NEXT FREE RECORD
7T2B STOZ 0(3) [STOZ IT
7TG2 LDN 3 CPRW1(2)
7T^L FI [FI DATA CHARS
7WF= IF BS,3,CONSCONTN [IF MSG IS CONTINUED THEN
7WYW THEN
7XDG SMO CONSCNTRL
7XY6 LDX 0 COIN
7YCQ SBN 0 2
7YXB IF EITHER,0,ZE [IF THIS IS THIRD LINE
7^C2 OR +TRANSCHARS,ZE [OR CONTAINS NO DATA THEN
7^WL THEN
82B= CALL 5 SCANCEL
82TW ELSE [ELSE (WANT MORE INPUT)
83*G LDX 0 CPRW1(2) [PRESERVE REPLY TO INPUT
83T6 STO 0 AWORK3(2)
84#Q CALL 6 SHUNTFRB
84SB LDX 4 ALOGLEN(3)
85#2 ADN 4 WIDTH/4 [FOR RESPONSE LINE
85RL SETUPCOR 4,2,ADATA,CREADL [X2 -> START OF BUFFER BLOCK
86?= CALL 6 SHUNTFRB [X3 -> RAW DATA
86QW LDN 5 A1(2) [X5 -> START OF BUFFER
87=G SMO CONSCNTRL
87Q6 LDX 0 COIN [0 OR 1 - 2 TRAPPED ABOVE
889Q IF 0,NZ [IF THIS IS 2ND LINE THEN
88PB THEN
8992 LDN 4 A1+2(3) [X4 -> 1ST RECORD IN INPUT
89NL SMO A1+1(3) [1ST LINE GOES TO ...
8=8= MVCH 4 0 [1ST OF INPUT AREA ...
8=MW LDN 4 MINUS(1)
8?7G MVCH 4 1
8?M6 ADX 3 A1(3) [(ELSE IT IS BLANK)
8#6Q FI [FI 2ND LINE
8#LB LDN 4 NEWLINES(1) [PUT NEWLINE AT ...
8*62 MVCH 4 2 [END OF 1ST INPUT AREA LINE
8*KL LDN 4 A1+2(3) [X4 -> NEXT INPUT LINE
8B5= SMO A1+1(3)
8BJW MVCH 4 0 [PUT IT ON 2ND INPUT AREA LINE
8C4G LDN 4 MINUS(1)
8CJ6 MVCH 4 1
8D3Q LDN 4 MSGCONTINUE(1)
8DHB MVCH 4 MSGCONTLEN [AND "PLEASE CONTINUE"
8F32 LDX 3 CONSCNTRL
8FGL IF BS,3,COUTWAITS [IF "OUTPUT WAITING" TO PRESERV
8G2= THEN
8GFW SBN 5 MSGOUTLEN/4 [OVERWRITE END OF LINE WITH
8G^G LDN 4 MSGOUTWAIT+2(1)
8HF6 MVCH 4 MSGOUTLEN ["OUTPUT WAITING"
8HYQ FI [FI
8JDB SBN 5 A1(2)
8JY2 SLC 5 2 [X5 = BUFFER LENGTH IN CHARS
8KCL LOCKC 2,SHUNTCREADL [LOCK BUFFER BLOCK
8KX= DO
8LBW CALL 4 SGETOPER
8LWG CALL 1 SHUNTCREADL [FIND IT
8MB6 LDN 0 A1(2)
8MTQ LDX 1 5
8N*B CALL 4 SPERIA [WRITE NEW INPUT AREA
8NT2 REPEAT UNTIL,MBAC,3,CONSINOP,CONSFAIL
8P#L CALL 1 SHUNTCREADL
8PS= FREECORE 2
8Q?W LDX 0 AWORK3(2)
8QRG STO 0 CPRW1(2) [RESTORE INPUT REPLY WORD
8R?6 LDN 0 1
8RQQ SMO CONSCNTRL
8S=B ADS 0 COIN [RAISE COUNT OF LINES IN MSG
8SQ2 FI [FI
8T9L ELSE [ELSE (LAST LINE OF MSG)
8TP= IF +TRANSCHARS,ZE [IF NO DATA CHARS
8W8W THEN
8WNG [
8X86 [ TO GET HERE, WE MUST HAVE RECEIVED A ZERO LENGTH INPUT
8XMQ [ AS A COMMAND DURING NORMAL RUNNING OR IN RESPONSE TO A
8Y7B [ QUESTION DURING EMS. IT WAS THE LAST (OR ONLY) LINE OF
8YM2 [ THE INPUT MESSAGE (I.E. 'CONTINUED' NOT SET IN REPLY
8^6L [ WORD). PAGE KEY BITS MAY BE SET THOUGH.
8^L= [
925W [ N.B. WE ASSUME THAT IF PAGE KEY BITS ARE SET THEN
92KG [ PAGE KEY(S) ONLY WERE USED, I.E. 'ENTER' WASN'T,
9356 [ AND THEREFORE THAT THE KEYBOARD IS NOT LOCKED.
93JQ [
944B [ WE MUST COPE WITH ONE OF THREE CASES THEN:
94J2 [
953L [ 1. PAGE KEY BIT(S) SET - IN NORMAL RUNNING THERE IS
95H= [ NOTHING TO DO WITH RESPECT TO THE MESSAGE AS A
962W [ WHOLE - PAGE KEYS ARE DEALT WITH AT THE END OF
96GG [ THIS SEGMENT. FOR AN EMS REPLY WE SET 'CONTINUED'
9726 [ IN THE INPUT REPLY WORD TO ENSURE THAT THE READ
97FQ [ JUST SATISFIED BY A PAGE KEY IS REISSUED
97^B [
98F2 [ 2. THE 2ND OR 3RD LINE OF A MESSAGE - NO PAGE KEYS
98YL [ HAVE BEEN USED, SO THIS MEANS CANCEL
99D= [
99XW [ 3. THE ONLY LINE OF A MESSAGE, I.E. 'ENTER' ON ITS
9=CG [ OWN - THIS IS CONTINUE LOGGING (SH @0,0). WE
9=X6 [ MUST UNLOCK THE KEYBOARD AND CHAIN THE CORRECT
9?BQ [ SHOW BLOCK. IF THIS CAME AS THE ANSWER TO AN EMS
9?WB [ QUESTION THEN WE SET 'CONTINUED' IN THE INPUT
9#B2 [ REPLY WORD TO ENSURE THAT THE READ JUST SATISFIED
9#TL [ BY THE NULL INPUT IS REISSUED
9**= [
9*SW LDN 3 CPRW1(2)
9B#G IF MBS,3,CONSREV,CONSFWD [IF PAGE KEY THEN
9BS6 THEN
9C?Q IF BS,,EMSBIT [IF EMS THEN
9CRB THEN
9D?2 BS 3,CONSCONTN [SET 'CONTINUED'
9DQL FI [FI EMS
9F== ELSF TRUE
9FPW LDX 3 CONSCNTRL
9G9G AND +COIN(3),NZ [ELSF 2ND OR 3RD LINE
9GP6 THEN [THEN
9H8Q CALL 5 SCANCEL [CANCEL THE INPUT
9HNB ELSE [ELSE (SH @0,0)
9J82 CALL 6 SRESPOND
9JML DOWN SHOWCOMM,3 [RESPOND AND CHAIN
9K7= IF BS,,EMSBIT [IF EMS REPLY THEN
9KLW THEN
9L6G LDN 3 CPRW1(2)
9LL6 BS 3,CONSCONTN [SET 'CONTINUED'
9M5Q FI [FI EMS
9MKB FI [FI TYPE OF NULL INPUT
9N52 ELSE [ELSE (DATA CHARS)
9NJL CALL 6 SRESPOND
9P4= [
9PHW [ CONDENSE MESSAGE IN FILE/FRB
9Q3G [
9QH6 CALL 6 SHUNTFRB [X3 -> MESSAGE BLOCK FPTR
9R2Q LDX 1 3 [X1 -> A1 BEFORE NEXT CELL
9RGB [
9S22 [WE ASSUME CPDATA <= A1+2 - IF NOT, WILL TRY TO MVCH
9SFL [MESSAGE TEXT OVER THE TOP OF ITSELF - HENCE THE TEST BELOW
9S^= [
9TDW #SKI A1+2 < CPDATA - CPDATA
9TYG !! TRYING TO DO A FORWARD MVCH !!
9WD6 [
9WXQ LDN 5 CPDATA(3) [X5 -> OUTPUT AREA
9XCB LDN 6 0 [X6 = CHARACTER COUNT
9XX2 WHILE +A1(1),NZ [CONDENSE THE MESSAGE LINES
9YBL DO
9YW= LDX 0 A1(1)
9^*W ADX 6 A1+1(1)
9^TG LDN 4 A1+2(1)
=2*6 SMO A1+1(1)
=2SQ MVCH 4 0
=3#B ADX 1 0
=3S2 REPEAT
=4?L LDN 4 ACES
=4R= MVCH 4 4 [ENSURE MESSAGE ENDS WITH SPACE
=5=W STO 6 A1(3) [INSERT CHARACTER COUNT
=5QG CHANGALL [MAKE IT A GRAPHIC MESSAGE
=6=6 [A1 NOW WORD COUNT
=6PQ [
=79B SMO CONSCNTRL
=7P2 STOZ COIN [ZEROISE LINECOUNT OF CURRENT M
=88L [
=8N= CALL 6 SHUNTFRB [X3 -> MESSAGE BLOCK
=97W LDX 4 ALOGLEN(3)
=9MG ADN 4 5
==76 OUTBLOCK 4 [SET UP JOURNAL PARAM BLOCK ...
==LQ SBN 4 5 [WITH SPACE FOR TIME AND HEADER
=?6B SETUPCOR 4,1,CONBUFF,CINP [SET UP ECHO BLOCK
=?L2 CALL 6 SHUNTFRB [X3 -> MESSAGE BLOCK
=#5L LDN 4 A1(3)
=#K= LDN 5 A1(1)
=*4W SMO ALOGLEN(3)
=*JG MOVE 4 0 [COPY MESSAGE TO ECHO BLOCK
=B46 CONSOUT 1 [AND CHAIN FOR ECHO
=BHQ LDN 0 1
=C3B SMO CONSCNTRL
=CH2 ADS 0 COECH [UPDATING THE ECHO COUNT
=D2L [
=DG= [ CAN'T USE OUTPAR TIMENOW SINCE
=D^W [ IT MAY NOT BE ACCURATE IN EMS
=FFG [
=F^6 OUTPACK CLEANCT,1,TIMETHEN [PUT TIME AND ...
=GDQ CALL 6 SHUNTFRB
=GYB LDX 4 A1(3)
=HD2 SBN 4 CPDATA-A1
=HXL STO 3 6
=JC= IFR 4,ZE [IF NO TEXT INPUT
=JWW LDN 2 CPDATA(3)
=KBG LDX 3 4 [SEE IF ALL SPACES
=KW6 WHILE +0(2),E,ACES
=L*Q DO
=LTB ADN 2 1
=M*2 REPEAT CT 3
=MSL OR 3,ZE [OR INPUT ALL SPACES THEN
=N#= THEN
=NRW OUTNULL [%B IS NULL
=P?G ELSE [ELSE
=PR6 LDX 3 6
=Q=Q LDN 3 CPDATA(3)
=QQB OUTPACKX 3,4,VARCHAR(1) [DATA IN JOURNAL MESSAGE
=R=2 FI [FI NULL INPUT TEXT
=RPL ... MONOUT JLCONSIN,,,IGOPTRACE [WRITE TO JOURNAL
=S9= [
=SNW IF BS,,EMSBIT [IF EMS THEN
=T8G THEN
=TN6 CALL 6 SHUNTFRB
=W7Q NAME 3,CONBUFF,EMSIN [TURN INTO CONBUFF/EMSIN
=WMB LDN 4 CPDATA(3)
=X72 LDN 5 A1+1(3)
=XLL LDX 1 A1(3)
=Y6= SBN 1 CPDATA-A1 [MAKE WORDCOUNT EXCLUSIVE
=YKW SLL 1 2
=^5G MVCH 4 0(1) [AND REFORMAT
=^K6 LDX 2 5 [LASTLY LOSE TRAILING SPACES
?24Q WHILE TRUE
?2JB SLC 2 2
?342 SBN 2 1
?3HL SRC 2 2
?43= LDCH 0 0(2)
?4GW SBN 0 #20
?52G AND 0,ZE
?5G6 DO
?5^Q SBN 1 1
?6FB REPEAT
?6^2 STO 1 A1(3) [AND RESET CHARACTER COUNT
?7DL ELSE [ELSE (NOT EMS)
?7Y= GETACT CPAT [GET A CPAT FOR THE COMMAND
?8CW LDX 2 BPTR(2) [X2 -> CPAT
?8XG LDCT 0 #770 [OP'S CONSOLE SOURCE BITS
?9C6 STO 0 JSOURCE1(2)
?9WQ STOZ AWORK1(2)
?=BB STOZ AWORK2(2)
?=W2 LINKSET 2,PLINK(1) [SET LINK TO COMM. PROCESSOR
??*L CALL 6 SHUNTFRB
??T= CHAIN 3,2 [CHAIN BLOCK AFTER CPAT
?##W LDX 2 BPTR(3) [X2 -> CPAT
?#SG FPUT [FPUT THE CPAT
?*#6 FI [FI ACTION ON END OF MESSAGE
?*RQ FI [FI NO DATA / DATA
?B?B FI [FI CONTINUED / LAST LINE
?BR2 LDX 2 FX2
?C=L IF BC,,EMSBIT [IF NORMAL RUNNING THEN
?CQ= THEN
?D9W LDN 3 CPRW1(2)
?DPG IF BS,3,CONSREV [IF PAGE REV USED THEN
?F96 THEN
?FNQ DOWN SHOWCOMM,2 [SIMULATE A SHOW -1,1
?G8B FI [FI
?GN2 LDN 3 CPRW1(2)
?H7L IF BS,3,CONSFWD [IF PAGE FWD USED THEN
?HM= THEN
?J6W DOWN SHOWCOMM,4 [SIMULATE A SHOW +1,1
?JLG FI [FI
?K66 FI [FI NORMAL RUNNING
?KKQ FI [FI TRANSFER OK/FAILED
?L5B ADX 7 FX1
?LK2 EXIT 7 0
?M4L #PAGE
?MJ= [
?N3W [
?NHG [
?P36 [ WW WW W
?PGQ [ WW WW WW
?Q2B [ WW WW WWW
?QG2 [ WWWW WW
?Q^L [ WWWW WW
?RF= [ WW WW WW
?RYW [ WW WW WW
?SDG [ WW WW WW
?SY6 [
?TCQ [
?TXB OPERINK1
?WC2 STOZ AWORK4(2) [UNSOLICITED INPUT
?WWL CALL 7 SREAD
?XB= UP
?XTW #PAGE
?Y*G [
?YT6 [
?^#Q [
?^SB [ WW WW WWWWW
#2#2 [ WW WW WW WW
#2RL [ WW WW WW
#3?= [ WWWW WW
#3QW [ WWWW WW
#4=G [ WW WW WW
#4Q6 [ WW WW WW
#59Q [ WW WW WWWWWWW
#5PB [
#692 [
#6NL OPERINK2
#78= LDN 0 1
#7MW STO 0 AWORK4(2) [SOLICITED INPUT
#87G LDX 0 CPPTR(2)
#8M6 STO 0 AWORK2(2) [PRESERVE CPPTR OF ACTIVITY
#96Q LDX 0 ACC3(2) [NEED ACC3 -> OPER DEV. LIST
#9LB STO 0 CPPTR(2) [SET UP PTR FOR 'SREAD'
#=62 [
#=KL [ WAIT TILL ALL OUTPUT DONE
#?5= [
#?JW WHILE EITHER,INUSE,CPPTR(2) [WHILE OPER BUSY
##4G LDN 3 BCONSOUT
##J6 OR EITHER,3,U,0(3) [OR CONSOLE CHAIN NOT EMPTY
#*3Q WHILE TRUE
#*HB DO
#B32 HUNTACT CONBUFF,2
#BGL LDX 0 ATYPE(2)
#C2= SRL 0 12
#CFW SBN 0 CONBUFF+ACTIVE
#C^G REPEAT UNTIL,0,ZE
#DF6 LDX 0 ACLEN(2)
#DYQ OR 0,NZ [OR UNWRITTEN ACTIVE PAGE DATA
#FDB DO
#FY2 COOR3 #53 [WAIT FOR ALL OUTPUT
#GCL REPEAT [REPEAT
#GX= LDX 2 FX2
#HBW CALL 7 SREAD
#HWG LDX 2 FX2
#JB6 LDX 0 AWORK2(2) [RESTORE CPPTR OF ACTIVITY
#JTQ STO 0 CPPTR(2)
#K*B UP
#KT2 #END
^^^^ ...735240060002