(George Source)
Macros used: ALTLEN, AND, ANDR, BS, CHAIN, CHANGALL, CONSOUT, COOR1, COOR3, DCA, DO, DOWN, ELSE, ELSF, FI, FORWARD, FPUT, FREECORE, GETACT, GPERI, HUNTACT, IF, IFR, LF, LINK, LINKSET, LOCKC, MBSXD, MHUNTW, MONOUT, NAME, OR, OUTBLOCK, OUTNULL, OUTPACK, OUTPACKX, OVER, REPEAT, SEGENTRY, THEN, UNLOCK, UP, VFREEW, 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