{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: OPER864)}} ====== OPER864 ====== (George Source) **Macros used:** [[george:macro:AND|AND]], [[george:macro:ANDR|ANDR]], [[george:macro:BC|BC]], [[george:macro:BS|BS]], [[george:macro:CHAIN|CHAIN]], [[george:macro:COOR1|COOR1]], [[george:macro:COOR3|COOR3]], [[george:macro:COOR4|COOR4]], [[george:macro:DATECON|DATECON]], [[george:macro:DCA|DCA]], [[george:macro:DECF|DECF]], [[george:macro:DO|DO]], [[george:macro:DOWN|DOWN]], [[george:macro:ELSE|ELSE]], [[george:macro:ELSF|ELSF]], [[george:macro:ELSFR|ELSFR]], [[george:macro:FC|FC]], [[george:macro:FI|FI]], [[george:macro:FIXTRA|FIXTRA]], [[george:macro:FON|FON]], [[george:macro:FREECORE|FREECORE]], [[george:macro:GPERI|GPERI]], [[george:macro:IF|IF]], [[george:macro:IFR|IFR]], [[george:macro:LF|LF]], [[george:macro:LOCKC|LOCKC]], [[george:macro:MFREE|MFREE]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:MONOUT|MONOUT]], [[george:macro:NAME|NAME]], [[george:macro:OR|OR]], [[george:macro:ORR|ORR]], [[george:macro:OUTBLOCK|OUTBLOCK]], [[george:macro:OUTNULL|OUTNULL]], [[george:macro:OUTPACK|OUTPACK]], [[george:macro:OUTPACKX|OUTPACKX]], [[george:macro:REPEAT|REPEAT]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:STF|STF]], [[george:macro:THEN|THEN]], [[george:macro:TIMECON|TIMECON]], [[george:macro:UNLOCK|UNLOCK]], [[george:macro:UP|UP]], [[george:macro:WHILE|WHILE]], [[george:macro:WRITED|WRITED]] 22FL #OPT K0OPER=0 22^= #LIS K0OPER > K0ALLGEO > K0GREATGEO 23DW #SEG OPER [COMM - STIG TOWNSEND 23YG [ 24D6 [ 24XQ 8HOPER 25CB SEGENTRY K1OPER,OPERK1 [MAIN ENTRY POINT - CONSOLE ACTIVITY 25X2 SEGENTRY K2OPER,OPERK2 [WRITE "PLSE RPT" AFTER INPUT FAILED 26BL SEGENTRY K3OPER,OPERK3 [PUT HEADER IN A SHOW BUFFER BLOCK 26W= [ 27*W [ 27TG [ AWORK1 : 0 => DON'T PAGEWAIT (SET BY CONSET) 28*6 [ 1 => PAGEWAIT (SET BY EMSENG AND THIS CHAPTER) 28SQ [ AWORK3 : 0 => NO FAILED APPENDS TO ACTIVE PAGE 29#B [ ELSE (RESULT FROM SAPPENDMSG) => APPEND FAILED 29S2 [ USED IN APPEND AND RACKDOWN ROUTINES, AND SLOGAGAIN 2=?L [ AWORK4 : B0-5 SCREEN NUMBER 2=R= [ B15-23 FLAG FIELD (0 => NO SHOWS DONE ON THIS PASS) 2?=W [ USED IN SHOW SECTION AND 'SHOWBLOCK', WHICH IS CALLED FROM IT 2?QG [ AWORKS 2, 3, 4 ALSO USED IN 'SLOGAGAIN' DURING THE SETUP 2#=6 [ OF A NEW PAGE. THIS DOES NOT AFFECT THE USES GIVEN ABOVE 2#PQ [ AS THE WORDS ARE RESET BEFORE BEING USED IN THEIR 2*9B [ SEPARATE SECTIONS 2*P2 [ 2B8L [ 2BN= [ THE ASSUMPTION IS MADE THAT EACH PAGE IS HELD IN TWO 2C7W [ BACKING STORE BLOCKLETS. THE IDENTIFIER 'PAGESIZE' IS 2CMG [ USED ONLY FOR READABILITY, NOT GENERALITY 2D76 #PAGE 2DLQ [ 2F6B [ 2FL2 [ DEFINITIONS 2G5L [ 2GK= #DEF WIDTH = 40 [WIDTH OF OPER SCREEN (CHARS) 2H4W [ 2HJG #DEF PAGESIZE = 2 [SIZE OF PAGE IN B/S BLOCKS 2J46 [ 2JHQ #DEF SIZEDATE = 7 [LENGTH OF DATE STRING (CHARS) 2K3B [ 2KH2 #DEF SIZETIME = 5 [LENGTH OF HH.MM (CHARS) 2L2L [ 2LG= #DEF WRITEMODE = 3 [EXTENDED WRITE MODE 2L^W [ 2MFG #DEF UNLOCK = #200 [ADDITIONAL WRITE MODE - UNLOCK KEYS 2M^6 [ 2NDQ #DEF TFIELD = #400 [ADDITIONAL WRITE MODE - FIELD TYPE 2NYB [ 2PD2 #DEF MSGOUTLEN = 16 [LENGTH (CHARS) OF MSGOUTWAITS 2PXL [ 2QC= #DEF WAITPOSN = 23 @L 18 + (WIDTH-MSGOUTLEN) 2QWW [START POSITION OF MSGOUTWAITS 2RBG [ON THE OPER SCREEN (SEE SYSWRITE) 2RW6 [ 2S*Q #DEF MSGRPTLEN = 20 [LENGTH (CHARS) OF "PLSE RPT" MSG 2STB [ 2T*2 #DEF RPTPOSN = 23 @L 18 [START POSITION ON SCREEN 2TSL [ 2W#= #DEF SHOWLEN = 16 [16 BLANKS TO COVER *** SHOWING *** 2WRW [ 2X?G #DEF SHOWPOSN = 0 [IN TOP LEFT HAND CORNER 2XR6 [ 2Y=Q [ 2YQB [ 2^=2 [ PRESET DATA 2^PL [ 329= TYPECINP +CONBUFF+CINP @L 12 [CONBUFF/CINP BLOCKTYPE 32NW [ 338G TYPECOUT +CONBUFF+COUT @L 12 [CONBUFF/COUT BLOCKTYPE 33N6 [ 347Q TYPESHOW +CONBUFF+CSHOW@L 12 [CONBUFF/CSHOW BLOCKTYPE 34MB [ 3572 TYPEREMTW +CONBUFF+IREMTW@L12 [CONBUFF/IREMTW BLOCKTYPE 35LL [ 366= TYPEFORCE +CONBUFF+FORCE@L12 [CONBUFF/FORCE BLOCKTYPE 36KW [ 375G [ 37K6 PAGEMSG [AUTO "PAGE STARTED" MSG 384Q 40HLOADED: FIRST PAGE STARTED (AUTO) 38JB [ 39HL [ 3=3= MSGNOWAIT +MSGOUTLEN [MESSAGE LENGTH (CHARS) 3=GW +WAITPOSN [START POSITION ON SCREEN 3?2G 16H [TEXT 3?G6 [ 3?^Q MSGOUTWAIT +MSGOUTLEN [MESSAGE LENGTH (CHARS) 3#FB +WAITPOSN [START POSITION ON SCREEN 3#^2 16HOUTPUT WAITING [TEXT 3*DL [ 3*Y= MSGRPT +MSGRPTLEN [MESSAGE LENGTH (CHARS) 3BCW +RPTPOSN [START POSITION ON SCREEN 3BXG 20HPLEASE REPEAT [TEXT 3CC6 [ 3CWQ MSGNOSHOW +SHOWLEN [ 3DBB +SHOWPOSN [ 3DW2 16H [ 3F*L [ 3FT= [ 3G#W TICKSPERSEC 1000/K9 [CLEANCOUNTS/SECOND 3GSG [ 3H#6 TICKSPERDAY (1000/K9)*24*3600 [CLEANCOUNTS/DAY 3HRQ [ 3J?B [ 3JR2 [ 3K=L VARCHAR +JPDVARCHAR [MESSAGE PDC 3KQ= [ 3L9W [ 3LPG [ 3M96 FIXTRA K90OPER [FOR RESTORE-TIME-MACRO 'KEEPPAGES' 3MNQ [ 3N8B MAXBLKLET +20 * PAGESIZE [HIGHEST BLOCKLET NO IN RECALL FILE 3ND8 ...XFINISH #04000000 [MASK FOR FINISH 3NN2 #PAGE 3P7L [ 3PM= [ 3Q6W [ 3QLG [********************************************************************* 3R66 [ 3RKQ SFILEFULL 3S5B [ 3SK2 [********************************************************************* 3T4L [ 3TJ= [ CHECKS WHETHER MAX NUMBER OF OPER PAGES HAVE BEEN RETAINED 3W3W [ 3WHG [ LINK X6 3X36 [ ON EXIT, X0= 0(FILE FULL) OR NONZERO (ROOM LEFT) 3XGQ [ X1,2 = FX'S 3Y2B [ X3 = CONSCNTRL 3YG2 LDX 2 FX2 3Y^L LDX 1 FX1 3^F= LDX 0 MAXBLKLET(1) 3^YW SRL 0 PAGESIZE/2 [X0 = MAX PAGES ALLOWED 42DG LDX 3 CONSCNTRL 42Y6 SBX 0 CORET(3) [X0 = PAGES AS YET UNUSED 43CQ EXIT 6 0 43XB [ 44C2 [ 44WL [ 45B= [********************************************************************* 45TW [ 46*G SHUNTACTIVE 46T6 [ 47#Q [********************************************************************* 47SB [ 48#2 [ SUBSIDIARY HUNT ROUTINE FOR 'LOCKC' 48RL [ 49?= MHUNTW 2,CONBUFF,ACTIVE 49QW EXIT 1 0 4==G #PAGE 4=Q6 [ 4?9Q [ 4?PB [********************************************************************* 4#92 [ 4#NL SGETOPER 4*8= [ 4*MW [********************************************************************* 4B7G [ 4BM6 [ ENSURES THAT BSTS HAS NOT LEFT A MESSAGE IN FCOUTBUF 4C6Q [ THAT HAS YET TO BE EXTRACTED. IT ENSURES THAT WE CAN OVERWRITE 4CLB [ THE CONTROL AREA OF THE OPER DEVICE LIST 4D62 [ 4DKL [ LINK X3 4F5= [ 4FJW [ ON EXIT, OK TO USE DEVICE LIST 4G4G [ ALL DETECTED BSTS MESSAGES HAVE BEEN EXTRACTED 4GJ6 [ X1,2 = FX'S 4H3Q [ 4HHB SBX 3 FX1 4J32 LDX 1 FX1 4JGL LDX 2 FX2 4K2= WHILE TRUE [START LOOP 4KFW WHILE BUSY,CPPTR(2) [WAIT TILL UNBUSY 4K^G DO 4LF6 COOR3 #50 4LYQ REPEAT 4MDB SMO CONSCNTRL 4MY2 LDX 0 COBS 4NCL IF 0,NZ [EXTRACT MSG IF IS ONE 4NX= THEN 4PBW DOWN OPERA,3 4PWG FI 4QB6 ANDR BUSY,CPPTR(2) [REPEAT IF BSTS WRITING NOW 4QTQ SMO CONSCNTRL 4R*B LDX 0 COBS 4RT2 OR 0,NZ [OR ANOTHER MSG TO BE EXTRACTED 4S#L DO 4SS= REPEAT 4T?W ADX 3 FX1 4TRG EXIT 3 0 4W?6 #PAGE 4WQQ [ 4X=B [ 4XQ2 [ 4Y9L [********************************************************************* 4YP= [ 4^8W SELAPSED 4^NG [ 5286 [********************************************************************* 52MQ [ 537B [ CHECKS WHETHER A GIVEN NUMBER OF CLEANCOUNTS HAVE PASSED SINCE 53M2 [ THE TIME STORED IN A GIVEN TWO-WORD LOCATION IN THE FORMAT: 546L [ WORD 0 EDATE, WORD 1 CLEANCT 54L= [ 555W [ LINK X5 55KG [ ON ENTRY, X3 -> LOCATION 5656 [ X4 = ELAPSED TIME (CLEANCTS) TO BE CHECKED FOR 56JQ [ 574B [ ON EXIT, X0= 0(TIME HAS ELAPSED) OR 1(NOT YET ELAPSED) 57J2 [ X1 CORRUPT 583L [ X2, 3, 4 UNCHANGED 58H= [ 592W IF EITHER,+0(3),ZE [IF LOCATION HAS NOT BEEN WRITTEN 59GG LDX 0 EDATE 5=26 SBX 0 0(3) [X0 = DAYS SINCE WRITTEN 5=FQ SMO FX1 5=^B MPY 0 TICKSPERDAY [X01 = DAYS IN CLEANCTS 5?F2 OR EITHER,0,NZ [OR LARGE DIFFERENCES IN DATES 5?YL ADX 1 CLEANCT 5#D= SBX 1 1(3) 5#XW OR 1,GE,4 [OR ELAPSED CLEANCTS >= REQUIRED THEN 5*CG THEN 5*X6 LDN 0 0 [ZERO RESULT 5BBQ ELSE [ELSE (TIME NOT ELAPSED) 5BWB LDN 0 1 [NONZERO 5CB2 FI [FI 5CTL EXIT 5 0 5D*= #PAGE 5DSW [ 5F#G [ 5FS6 [ 5G?Q [********************************************************************* 5GRB [ 5H?2 SYSWRITE 5HQL [ 5J== [********************************************************************* 5JPW [ 5K9G [ WRITES A FIELD TO THE RESPONSE LINE 5KP6 [ 5L8Q [ LINK X4 5LNB [ ON ENTRY, X3 -> MESSAGE (RELATIVE TO FX1), OF WHICH 5M82 [ WORD 0 = LENGTH OF TEXT (CHARACTERS) 5MML [ WORD 1 = LINE (B0-5) AND CHARACTER (B15-23) OF 5N7= [ START OF FIELD 5NLW [ WORD 2.. TEXT 5P6G [ 5PL6 [ ON EXIT, X0 CORRUPT 5Q5Q [ X1,2 = FX'S 5QKB [ X3 UNCHANGED 5R52 [ 5RJL SBX 4 FX1 5S4= ANDN 4 #7777 [FORGET V SETTING - LINK < 4096 5SHW LDX 2 FX2 5T3G DO 5TH6 SLL 3 12 5W2Q ORS 3 4 [PRESERVE X3 AT TOP OF X4 5WGB CALL 3 SGETOPER 5X22 LDX 3 4 5XFL SRL 3 12 [RESTORE X3 5X^= ANDN 4 #7777 [RESTORE X4 5YDW ADX 3 FX1 [X3 -> MESSAGE 5YYG LDX 1 CPPTR(2) 5^D6 LDN 0 WRITEMODE+UNLOCK+TFIELD 5^XQ DCA 1,DLA,0,MODE 62CB LDEX 0 0(3) 62X2 DCA 1,DLA,0,COUNT 63BL LDX 0 1(3) 63W= DCA 1,STO,0,EXTRA 64*W LDN 0 FCOUTBUF [DATA WRITTEN FROM FCOUTBUF 64TG DCA 1,STO,0,CTSA 65*6 LDN 0 2(3) 65SQ LDN 1 FCOUTBUF 66#B SMO 0(3) 66S2 MVCH 0 0 [MOVE MESSAGE TEXT THERE 67?L SBX 3 FX1 [RESET X3 67R= GPERI CPPTR(2),2 68=W COOR1 68QG LDN 1 CPRW1(2) 69=6 REPEAT UNTIL,MBAC,1,CONSINOP,CONSFAIL 69PQ LDX 1 FX1 6=9B ADX 4 FX1 6=P2 EXIT 4 0 6?8L #PAGE 6?N= [ 6#7W [ 6#MG [ 6*76 [********************************************************************* 6*LQ [ 6B6B SRESET 6BL2 [ 6C5L [********************************************************************* 6CK= [ 6D4W [ RESETS LOG AREA, COMPLETELY REWRITING ACTIVE PAGE 6DJG [ 6F46 [ LINK X6 6FHQ [ 6G3B [ ON EXIT, X1,2 = FX'S 6GH2 [ X3 CORRUPT 6H2L [ /ACTIVE UPDATED SO NOTHING LEFT TO LOG 6HG= [ BIT COVERWRITE IN /CNTRL IS CLEAR 6H^W [ 6JFG SBX 6 FX1 6J^6 CALL 1 SHUNTACTIVE 6KDQ LOCKC 2,SHUNTACTIVE 6KYB DO [UNTIL A SUCCESSFUL RESET DO 6LD2 CALL 3 SGETOPER 6LXL CALL 1 SHUNTACTIVE [X2 -> /ACTIVE 6MC= LDX 3 ACLFT(2) 6MWW IF 3,NZ [FILL PAGE WITH NEWLINES 6NBG THEN 6NW6 LDX 0 FCANCEL+2 6P*Q LDX 1 ACLEN(2) 6PTB SRL 1 2 6Q*2 ADN 1 FPTR(2) 6QSL ADX 1 ACOUT(2) 6R#= DO 6RRW STO 0 0(1) 6S?G ADN 1 1 6SR6 REPEAT CT 3 6T=Q FI [PAGE FILLED WITH NEWLINES 6TQB SMO FX2 6W=2 LDX 3 CPPTR 6WPL LDN 0 WRITEMODE + UNLOCK [WRITE MODE 6X9= DCA 3,DLA,0,MODE 6XNW LDX 0 ACLOG(2) [BUFFER STARTS AT [ACLOG]+START ADDR 6Y8G ADN 0 FPTR(2) 6YN6 DCA 3,STO,0,CTSA 6^7Q LDX 0 ACOUT(2) [NO. CHARS = ( LINES ALREADY ... 6^MB SBX 0 ACLOG(2) [ ... WRITTEN 7272 ADX 0 ACLFT(2) [ + NO. OF NEWLINES 72LL SLL 0 2 [ ) * 4 736= ADX 0 ACLEN(2) [ + CHARS NOT YET WRITTEN 73KW SBN 0 4 [ - FINAL NEWLINE 745G DCA 3,DLA,0,COUNT 74K6 LDCT 0 #010 [STARTS LINE 1 ON SCREEN 754Q DCA 3,STO,0,EXTRA 75JB LDX 2 FX2 7642 GPERI 3,2 [DO PERI AND UNLOCK BLOCK 76HL COOR1 773= CALL 1 SHUNTACTIVE 77GW UNLOCK 2 782G LDN 3 CPRW1(2) 78G6 REPEAT UNTIL,MBAC,3,CONSINOP,CONSFAIL 78^Q LDX 3 CONSCNTRL 79FB BC 3,COVERWRITE 79^2 MHUNTW 3,CONBUFF,ACTIVE [UPDATE BLOCK POINTERS AND COUNTS 7=DL LDX 0 ACLEN(3) 7=Y= SRL 0 2 7?CW ADS 0 ACOUT(3) 7?XG STOZ ACLEN(3) 7#C6 STOZ ACLNS(3) 7#WQ ADX 6 FX1 7*BB EXIT 6 0 7*W2 #PAGE 7B*L [ 7BT= [ 7C#W [ 7CSG [********************************************************************* 7D#6 [ 7DRQ SAUTOHEAD 7F?B [ 7FR2 [********************************************************************* 7G=L [ 7GQ= [ INSERTS THE HEADING LINE FOR A MONITOR SHOW INTO A 7H9W [ CONBUFF/ACTIVE. 7HPG [ 7J96 [ LINK X5 7JNQ [ 7K8B [ ON ENTRY, X3 -> BLOCK 7KN2 [ X2=FX2 7L7L [ AWORK2 CONTAINS DATE PAGE CREATED 7LM= [ AWORK3 CONTAINS TIME PAGE CREATED 7M6W [ 7MLG [ ON EXIT, X1,2 = FX'S 7N66 [ X3,4 CORRUPT 7NKQ [ 7P5B SBX 5 FX1 7PK2 LDX 1 FX1 7Q4L LDN 4 ACHCT+1(3) 7QJ= LDN 3 PAGEMSG(1) 7R3W MOVE 3 WIDTH/4 [PUT IN BASIC HEADER 7RHG IF +AWORK2(2),NZ 7S36 THEN 7SGQ TIMECON AWORK3(2) 7T2B MHUNTW 3,CONBUFF,ACTIVE 7TG2 LDX 1 3 7T^L LDN 4 ACHCT+1(3) 7WF= LDN 3 ACOMMUNE1(2) 7WYW MVCH 3 SIZETIME 7XDG LDN 3 ACES 7XY6 MVCH 3 1 7YCQ SBX 4 1 [X4 -> DATE START (W.R.T. FPTR) 7YXB DATECON AWORK2(2) 7^C2 MHUNTW 3,CONBUFF,ACTIVE 7^WL ADX 4 3 82B= LDN 3 ACOMMUNE1(2) 82TW MVCH 3 SIZEDATE [INSERT DATE 83*G FI 83T6 ADX 5 FX1 84#Q EXIT 5 0 84SB #PAGE 85#2 [ 85RL [ 86?= [ 86QW [********************************************************************* 87=G [ 87Q6 SLOGAGAIN 889Q [ 88PB [********************************************************************* 8992 [ 89NL [ RESTARTS INTERACTIVE LOGGING. IF SCREEN IS SHOWING, IT IS 8=8= [ COMPLETELY RESET. IF PAGEWAITING, THE LOG IS UNFROZEN, A NEW 8=MW [ ACTIVE PAGE SET UP AND THE "OUTPUT WAITING" FIELD CLEARED. 8?7G [ 8?M6 [ LINK X7 8#6Q [ 8#LB [ ON EXIT, ALL ACCUMULATORS CORRUPT 8*62 [ 8*KL SBX 7 FX1 8B5= LDX 1 FX1 8BJW LDX 2 FX2 8C4G LDX 3 CONSCNTRL 8CJ6 ADN 3 COVID+0 8D3Q IF BS,3,COSHOWING [IF INTERACTIVE SHOWING THEN 8DHB THEN 8F32 CALL 6 SRESET [PUT BACK ACTIVE PAGE 8FGL LDN 3 MSGNOSHOW 8G2= CALL 4 SYSWRITE [CLEAR "*** SHOWING ***" ... 8GFW LDN 3 MSGNOWAIT 8G^G CALL 4 SYSWRITE [AND "OUTPUT WAITING" 8HF6 LDX 3 CONSCNTRL 8HYQ BC 3,COUTWAITS [CLEAR 'O/P WAITING' FLAG ... 8JDB STOZ CODAT(3) [AND TIME SHOW STARTED ... 8JY2 ADN 3 COVID + 0 8KCL BC 3,COSHOWING [AND 'SHOWING' FLAG ... 8KX= FC 3,COCURRENT [AND CURRENT PAGE NUMBER ... 8LBW ELSE [ELSE (MAY BE PAGEWAITING) 8LWG LDX 3 CONSCNTRL 8MB6 IF BSC,3,COUTWAITS [IF "O/P WAITING" THEN 8MTQ THEN 8N*B LDN 3 MSGNOWAIT 8NT2 CALL 4 SYSWRITE [CLEAR IT 8P#L FI [FI 8PS= LDX 3 CONSCNTRL 8Q?W IF BSC,3,COPAGEWAIT [IF PAGEWAITING THEN 8QRG THEN 8R?6 STOZ CODAT(3) [CLEAR TIME & BIT 8RQQ MHUNTW 3,CONBUFF,ACTIVE 8S=B LDX 0 ACOUT(3) [WORDS FROM FPTR TO END OF PAGE 8SQ2 SBN 0 ACLOG + 1 [WORDS INCLUDING FUNCTION LINE 8T9L [BUT EXCLUDING FINAL NEWLINE 8TP= ADX 0 ACLFT(3) [ AND NEWLINE FOR EACH UNUSED 8W8W SLL 0 2 8WNG STO 0 ACHCT(3) [INSERT CHARACTER LNGTH OF PAGE 8X86 LDX 4 ACLFT(3) 8XMQ IF 4,NZ [IF LINES TO BE BLANKED ON... 8Y7B THEN [SUBSEQUENT SHOW THEN 8YM2 LDX 0 FCANCEL+2 8^6L LDN 1 FPTR(3) 8^L= ADX 1 ACOUT(3) [PUT THAT NUMBER OF NEWLINES 925W DO [AT END OF PAGE 92KG STO 0 0(1) 9356 ADN 1 1 93JQ REPEAT CT 4 944B FI [FI 94J2 [ 953L [ WRITE PAGE TO ALL SCREENS ON AUTO 95H= [ 962W LDX 2 FX2 96GG LDN 6 CLUSTOPER [FOR ALL MONITORS DO 9726 DO [AT LOOP START: 97FQ LDN 1 COVID [ X3 -> ACTIVE 97^B ADX 1 CONSCNTRL [ X2 = FX2 98F2 ADX 1 6 [ X1 -> SCREEN CELL 98YL IF BS,1,COAUTO [IF SCREEN ON AUTO THEN 99D= THEN 99XW LDX 0 ACDAT(3) 9=CG STO 0 AWORK2(2) 9=X6 LDX 0 ACTIM(3) [PRESERVE DATE CREATED ... 9?BQ STO 0 AWORK3(2) [... TIME CREATED ... 9?WB LDX 0 ACLOG(3) [... AND ACLOG FOR WHEN ... 9#B2 STO 0 AWORK4(2) [... WE WRITE PAGE TO RECALL 9#TL CALL 5 SAUTOHEAD [PUT IN HEADER 9**= CALL 1 SHUNTACTIVE 9*SW LOCKC 2,SHUNTACTIVE [LOCK BLOCK 9B#G CALL 3 SGETOPER 9BS6 LDX 3 CPPTR(2) 9C?Q CALL 1 SHUNTACTIVE [SET UP CONTROL AREA 9CRB LDN 0 WRITEMODE+UNLOCK 9D?2 DCA 3,DLA,0,MODE [ -MODE 9DQL LDX 0 ACHCT(2) 9F== DCA 3,DLA,0,COUNT [ -COUNT 9FPW LDN 0 ACHCT+1(2) 9G9G DCA 3,STO,0,CTSA [ -BUFFER ADDRESS 9GP6 LDX 0 6 9H8Q SLL 0 9 9HNB DCA 3,STO,0,EXTRA [ -SCREEN NUMBER 9J82 LDX 2 FX2 9JML GPERI 3,2 [ISSUE PERI 9K7= COOR1 9KLW CALL 1 SHUNTACTIVE 9L6G UNLOCK 2 [UNLOCK BLOCK AGAIN 9LL6 LDX 1 CONSCNTRL 9M5Q ADN 1 COVID 9MKB ADX 1 6 9N52 LDN 3 CPRW1(2) 9NJL IF MBS,3,CONSINOP,CONSFAIL [IF WRITE FAILED THEN 9P4= THEN 9PHW BC 1,COAUTO [SWITCH OFF AUTO 9Q3G ELSE [ELSE (WRITE OK) 9QH6 LDN 5 1 9R2Q STF 1,COCURRENT,5 [SET "CURRENT" TO 1 9RGB FI [FI WRITE FAILED 9S22 MHUNTW 3,CONBUFF,ACTIVE [REFIND BLOCK 9SFL LDX 0 AWORK2(2) 9S^= STO 0 ACDAT(3) 9TDW LDX 0 AWORK3(2) [RESET DATE AND TIME 9TYG STO 0 ACTIM(3) 9WD6 LDX 0 AWORK4(2) 9WXQ STO 0 ACLOG(3) 9XCB FI [FI AUTO 9XX2 REPEAT CT 6 [REPEAT OVER MONITORS 9YBL [ 9YW= [ WRITE PAGE AWAY AND SET UP NEW ONE 9^*W [ 9^TG LDX 2 CONSCNTRL =2*6 IF BS,2,CONSNOFILE =2SQ THEN =3#B LDX 2 FX2 =3S2 ELSE =4?L NAME 3,FILE,FRWB =4R= IF BC,2,CONSFILE [IF NO FILE THEN =5=W THEN =5QG SMO FX2 =6=6 LDX 2 ACTRING =6PQ SBN 2 ACTRING-FPTR [X2 -> NEXT ACTY =79B CHAIN 3,BPTR(2) [CHAIN LATEST PAGE FURTHEST =7P2 CALL 6 SFILEFULL =88L IF 0,ZE [IF "FILE" FULL THEN =8N= THEN =97W MFREE FILE,FRWB [FREE OLDEST PAGE =9MG ELSE [ELSE (ROOM IN "FILE") ==76 LDN 0 1 ==LQ ADS 0 CORET(3) [UPDATE 'RETAINED' COUNT =?6B FI [FI EMS "FILE" FULL =?L2 ELSE [ELSE (FILE SET UP) =#5L CALL 6 SFILEFULL =#K= IF 0,NZ [IF FILE NOT FULL THEN =*4W THEN =*JG LDN 0 1 =B46 ADS 0 CORET(3) [RAISE 'RETAINED' COUNT =BHQ FI [FI =C3B LDX 4 COBLK(3) =CH2 WRITED 4,1 [WRITE OLD PAGE TO FILE =D2L ADN 4 PAGESIZE =DG= IF 4,GE,MAXBLKLET(1) [IF USED LAST BLOCKLET THEN =D^W THEN =FFG LDN 4 1 [RESART AT FRONT OF FILE =F^6 FI [FI =GDQ STO 4 COBLK(3) [RESERVE NEXT PAGE HOME =GYB FI [FI NOFILE / FILE =HD2 LDX 3 CONSCNTRL =HXL ADN 3 COVID =JC= LDN 6 CLUSTOPER =JWW DO [FOR ALL SCREENS DO =KBG IF BS,3,COSHOWING [IF SHOWING =KW6 [AND NON-AUTO =L*Q AND BC,3,COAUTO [(AUTO WILL HAVE SET FIELD) =LTB LF 3,COCURRENT,5 =M*2 ADN 5 1 =MSL LDX 4 MAXBLKLET(1) =N#= SRL 4 PAGESIZE/2 =NRW AND 4,GE,5 [AND NOT AT OLDEST PAGE THEN =P?G THEN =PR6 STF 3,COCURRENT,5 [RAISE CURRENT PAGE NUM =Q=Q FI [FI =QQB ADN 3 1 =R=2 REPEAT CT 6 [REPEAT =RPL ...#DEF WILLBELOCKD=0 =S9= SETNCORE ACTIVEINIT,3,CONBUFF,ACTIVE,+WILLBELOCKD =SNW FI [FI PAGE SETUP FAILED / DIDN'T =T8G [ =TN6 [ INITIALISE NEW ONE =W7Q [ =WMB LDN 0 1 =X72 STO 0 AWORK1(2) [PAGEWAIT ON FUTURE PAGES =XLL STOZ AWORK3(2) [NO APPEND HAS FAILED ON THIS PAGE =Y6= LDX 2 CONSCNTRL =YKW BC 2,COVERWRITE [THIS PAGE DOESN'T NEED RESET =^5G STOZ ACHCT(3) [INITIALISE NEW PAGE =^K6 STOZ ACLEN(3) ?24Q STOZ ACLNS(3) ?2JB LDN 0 HEIGHTPAGE ?342 STO 0 ACLFT(3) ?3HL LDN 0 WIDTH/4 + ACLOG ?43= STO 0 ACLOG(3) [POINTS TO START OF NEW PAGE ?4GW STO 0 ACOUT(3) [POINTS AT "PAGE STARTED" ?52G LDX 0 EDATE ?5G6 STO 0 ACDAT(3) ?5^Q LDX 0 CLEANCT ?6FB STO 0 ACTIM(3) ?6^2 FI [FI PAGEWAITING ?7DL FI [FI SHOW/NOT ?7Y= ADX 7 FX1 ?8CW EXIT 7 0 ?8XG #PAGE ?9C6 [ ?9WQ [ ?=BB [ ?=W2 [********************************************************************* ??*L [ ??T= SLOGBLOCK ?##W [ ?#SG [********************************************************************* ?*#6 [ ?*RQ [ POINTS X3 AT FIRST CONBUFF/COUT, CONBUFF/IREMTW OR CONBUFF/FORCE ?B?B [ ON THE CONSOLE CHAIN ?BR2 [ ?C=L [ LINK X5 ?CQ= [ ?D9W [ ON EXIT, X0= 0(NO BLOCK FOUND), NONZERO(BLOCK FOUND) ?DPG [ X1 = FX1 ?F96 [ X2 UNCHANGED ?FNQ [ X3 -> BLOCK IF X0 NONZERO ?G8B [ X4 CORRUPT ?GN2 [ ?H7L LDX 1 FX1 ?HM= LDN 3 BCONSOUT ?J6W LDX 4 3 ?JLG WHILE TRUE ?K66 LDN 0 0 [X0=0 IF HIT END OF CHAIN ?KKQ LDX 3 FPTR(3) ?L5B AND 3,U,4 [WHILE (NOT END OF CHAIN) ?LK2 LDX 0 ATYPE(3) [X0 NONZERO IF TESTING BLOCKS ?M4L ANDX 0 HALFTOP ?MJ= AND 0,U,TYPECOUT(1) [AND (NOT A /COUT) ?N3W AND 0,U,TYPEREMTW(1) [AND (NOT A /IREMTW) ?NHG AND 0,U,TYPEFORCE(1) ?P36 DO [DO REPEAT ?PGQ REPEAT ?Q2B EXIT 5 0 ?QG2 [ ?Q^L [ ?RF= [ ?RYW [********************************************************************* ?SDG [ ?SY6 SCINPBLOCK ?TCQ [ ?TXB [********************************************************************* ?WC2 [ ?WWL [ POINTS X3 AT FIRST CONBUFF-CINP ON CONSOLE CHAIN ?XB= [ ?XTW [ LINK X4 ?Y*G [ ?YT6 [ ON EXIT, X1=FX1 ?^#Q [ X3 -> BLOCK ?^SB [ #2#2 LDX 1 FX1 #2RL LDN 3 BCONSOUT #3?= DO #3QW LDX 3 FPTR(3) #4=G REPEAT UNTIL,+ATYPE(3),E,TYPECINP(1) #4Q6 EXIT 4 0 #59Q #PAGE #5PB [ #692 [ #6NL [ #78= [********************************************************************* #7MW [ #87G SHOWBLOCK #8M6 [ #96Q [********************************************************************* #9LB [ #=62 [ POINTS X3 AT THE FIRST CONBUFF/CSHOW ON THE CONSOLE OUTPUT #=KL [ CHAIN WHOSE DISPLAY NUMBER IS THE SAME AS THAT HELD IN #?5= [ CHARACTER ZERO OF AWORK4 #?JW [ ##4G [ X4 LINK ##J6 [ #*3Q [ ON EXIT, X0 CORRUPT #*HB [ X1,2 = FX'S #B32 [ X3 -> BLOCK #BGL [ #C2= LDX 1 FX1 #CFW LDX 2 FX2 #C^G LDN 3 BCONSOUT #DF6 WHILE TRUE [LOOP TILL FIND /CSHOW FOR SCREEN #DYQ LDX 3 FPTR(3) #FDB AND EITHER,+ATYPE(3),U,TYPESHOW(1) #FY2 LDCH 0 AWORK4(2) #GCL OR 0,U,CSVID(3) #GX= DO #HBW REPEAT [X3 -> SHOW BLOCK #HWG EXIT 4 0 #JB6 #PAGE #JTQ [ #K*B [ #KT2 [********************************************************************* #L#L [ #LS= SAPPENDMSG #M?W [ #MRG [********************************************************************* #N?6 [ #NQQ [ APPENDS A MESSAGE FROM A MESSAGE BLOCK TO THE ACTIVE PAGE. WHOLE- #P=B [ WORD OUTPUT LINES ARE USED, THE MESSAGE BEING FILLED WITH #74'S #PQ2 [ AT THE END IF NEEDED. #Q9L [ #QP= [ APPEND ALWAYS FAILS IF WE ARE PAGEWAITING, TO AVOID THE CASE WHERE #R8W [ WE PAGEWAIT DUE TO A TWO-LINE OUTPUT BUT SUBSEQUENTLY APPEND A #RNG [ ONE-LINE INPUT ENTERED DURING THE WAIT. THIS MESSAGE WOULD NEVER #S86 [ BE WRITTEN TO THE SCREEN AND SINCE 'SLOGAGAIN' ASSUMES THAT ACLEN #SMQ [ IS ZERO, THE MESSAGE WOULD BE OVERWRITTEN WITH NEWLINES BEFORE #T7B [ BEING WRITTEN TO RECALL FILE (AND THUS WOULD NEVER BE SHOWN EITHER). #TM2 [ #W6L [ LINK X7 #WL= [ #X5W [ ON ENTRY, X3 -> MESSAGE BLOCK #XKG [ #Y56 [ ON EXIT, X0 = 0 - APPENDED OK #YJQ [ +VE - PAGE FULL AND CANNOT BE EXTENDED #^4B [ (OR TRIED TO APPEND TOO MANY LINES) #^J2 [ X1, 2 = FX'S *23L [ X3-X6 UNCHANGED *2H= [ *32W LDX 2 FX2 *3GG LDX 1 CONSCNTRL *426 IF BS,1,COPAGEWAIT [IF PAGEWAITING THEN *4FQ THEN *4^B LDX 1 FX1 [EXIT WITH FAIL RESULT *5F2 LDN 0 1 *5YL ELSE [ELSE (NOT PAGEWAITING) *6D= SBX 7 FX1 *6XW LDX 0 ATYPE(3) *7CG STO 0 ACOMMUNE8(2) [REMEMBER BLOCK TYPE *7X6 NAME 3,CONBUFF,CONAPP [RESET TO BE FOUND BY OPERAPP *8BQ DOWN OPERAPP,1 *8WB LDX 0 ACOMMUNE9(2) *9B2 ADX 7 FX1 *9TL FI [FI PAGEWAITING *=*= EXIT 7 0 *=SW #PAGE *?#G [ *?S6 [ *#?Q [********************************************************************* *#RB [ **?2 SNOWAIT **QL [ *B== [********************************************************************* *BPW [ *C9G [ CHECKS TO SEE IF WE CAN DO ANYTHING AT ONCE (I.E. EXTRACT BSTS MSG, *CP6 [ SHOW, RESET INTERACTIVE SCREEN, INPUT OR REFRESH TIME) *D8Q [ *DNB [ LINK X4 *F82 [ *FML [ ON EXIT, X6= 0(WE CAN) OR UNCHANGED(WE CAN'T) *G7= [ XO CORRUPT *GLW [ X1,2 = FX'S *H6G [ X3 CORRUPT *HL6 [ *J5Q LDX 3 CONSCNTRL *JKB IF BS,3,COVERWRITE [IF (SCREEN NEEDS RESETTING .. *K52 LDN 2 COVID(3) *KJL ANDR BC,2,COSHOWING [.. AND NOT SHOWING) *L4= OR +COBS(3),NZ [OR BSTS MESSAGE TO EXTRACT THEN *LHW THEN *M3G LDN 6 0 [SET 'CAN' *MH6 FI [FI *N2Q ADN 3 COVID+CLUSTOPER [X3 -> LAST SCREEN CELL *NGB LDN 2 CLUSTOPER+1 *P22 WHILE 6,NZ [FOR ALL SCREENS TILL SHOW FOUND DO *PFL DO *P^= IF FNZ,3,COSHOWS *QDW THEN *QYG LDN 6 0 [SET 'CAN' IF SHOW FOUND *RD6 FI *RXQ SBN 3 1 *SCB REPEAT CT 2 [REPEAT *SX2 IF MBS,,GNUTIME,CONSW [IF TIME TO REFRESH OR I/P TO READ *TBL THEN [THEN *TW= LDN 6 0 [SET 'CAN' *W*W FI [FI *WTG LDX 1 FX1 *X*6 LDX 2 FX2 *XSQ EXIT 4 0 *Y#B #PAGE *YS2 [ *^?L [ *^R= [ WW WW W B2=W [ WW WW WW B2QG [ WW WW WWW B3=6 [ WWWW WW B3PQ [ WWWW WW B49B [ WW WW WW B4P2 [ WW WW WW B58L [ WW WW WW B5N= [ B67W [ B6MG OPERK1 B776 [ B7LQ [ THIS SEGMENT IS A GIANT LOOP WHICH ON BEING WOKEN CHECKS TO SEE B86B [ IF THE OPER NEEDS SERVICING IN ANY WAY (E.G. READ AN INPUT LINE, B8L2 [ REFRESH CURRENT DATE AND TIME, ETC). IT GOES BACK TO SLEEP B95L [ IF NOT. ANYTHING THAT NEEDS DOING IS DONE AS SOON AS POSSIBLE, AND B9K= [ WE START AGAIN FROM THE INITIAL CHECK B=4W [ B=JG DO B?46 [ B?HQ [ SEE IF WE'VE GOT ANYTHING TO DO. IF NOT, GO BACK TO SLEEP AFTER B#3B [ WAKING ANY EMS ACTIVITIES THAT MAY BE WAITING FOR THE OPER. B#H2 [ B*2L WHILE TRUE B*G= NGN 6 1 [X6 IS A FLAG: B*^W [ -1 => NOTHING TO DO BBFG [ 0 => SOMETHING CAN BE DONE AT BB^6 [ ONCE BCDQ [ 1 => SOMETHING CAN BE DONE IF BCYB [ LAST LOG-FREEZING HAPPENED BDD2 [ > PAGEWAIT SECS AGO BDXL LDX 3 CONSCNTRL BFC= IFR +COECH(3),NZ [IF I/P TO ECHO BFWW ORR BS,3,COVERWRITE [MUST WAIT IF SCREEN SHOWING BGBG CALL 5 SLOGBLOCK BGW6 ORR 0,NZ [OR O/P TO APPEND BH*Q MHUNTW 3,CONBUFF,ACTIVE BHTB OR +ACLEN(3),NZ [OR LOG DATA TO WRITE THEN BJ*2 THEN BJSL LDN 6 1 [PAGEWAIT RESTRAINT BK#= FI [FI BKRW CALL 4 SNOWAIT [SEE IF CAN ACT AT ONCE BL?G AND 6,NG [WHILE NOTHING TO DO BLR6 DO BLY# ... SMO FX1 BM5G ... LDX 4 XFINISH BM=N ... ANDX 4 FINISH BMCW ... IFR 4,NZ [OR FINISH BMK4 ... OR BS,,EMSBIT BMQB THEN BN=2 FON #53 BNPL FI BP9= COOR3 #50 [WE MUST WAIT BPNW REPEAT BQ8G [ BQN6 [ WE NOW KNOW THERE IS SOMETHING TO DO, BUT CIRCUMSTANCES MAY PREVENT BR7Q [ US FROM DOING ANY OF THEM RIGHT NOW. IN THAT CASE WE WAIT BRMB [ UNTIL WE ARE WOKEN FOR SOMETHING ELSE TO DO OR A TIME OF FONINTP BS72 [ SECONDS HAS PASSED. WE THEN MAKE THE CHECK AGAIN, AND AGAIN ... BSLL [ UNTIL WE ARE ABLE TO DO ONE OF THE ACTIONS. BT6= [ BTKW IF 6,NZ [IF MUST WAIT THEN BW5G THEN BWK6 WHILE TRUE [WHILE ... BX4Q CALL 4 SNOWAIT BXJB AND 6,NZ [... NO IMMEDIATE ACTION ARRIVED BY42 AND +AWORK1(2),NZ [AND CAN'T IGNORE PAGEWAIT BYHL LDX 3 IPAGEWAIT B^3= MPY 3 TICKSPERSEC(1) [X4 = PAGEWAIT IN CLEANCTS B^GW LDX 3 CONSCNTRL C22G ADN 3 CODAT C2G6 CALL 5 SELAPSED C2^Q AND 0,NZ [AND NOT TIME YET DO C3FB DO C3^2 COOR4 #50 [WAIT FOR TIME OR INTERRUPT C4DL REPEAT [REPEAT C4Y= FI [FI MUST WAIT C5CW [ C5XG [ EXTRACT ANY BSTS MESSAGES C6C6 [ C6WQ CALL 3 SGETOPER C7BB [ C7W2 [ IF INPUT HAS BEEN CHAINED (THE 'ENTER' KEY), WE READ IT NOW C8*L [ C8T= IF BS,,CONSW C9#W THEN C9SG DOWN OPERIN,1 C=#6 FI C=RQ [ C??B [ FOR EVERY SCREEN WE KNOW OF (0 TO CLUSTOPER INCL), WE DO SHOW C?R2 [ TO IT IF ONE HAS BEEN REQUESTED. ALL MONITOR SCREENS ARE TREATED C#=L [ BEFORE THE INTERACTIVE SO AS TO AVOID CHANGING THE PAGE C#Q= [ REFERENCE POINT (THE ACTIVE PAGE) BETWEEN A SHOW COMMAND BEING C*9W [ ISSUED AND ACTIONED. C*PG [ CB96 DO [UNTIL ALL SHOWS CLEARED DO CBNQ LDN 1 CLUSTOPER CC8B STOZ AWORK4(2) [MARK 'NONE DONE' CCN2 WHILE 1,PZ [FOR EACH SCREEN CD7L LDEX 0 AWORK4(2) CDM= AND 0,ZE [UNTIL A SHOW IS DONE CF6W DO CFLG DCH 1 AWORK4(2) [REMEMBER NUMBER CG66 LDX 3 CONSCNTRL CGKQ ADN 3 COVID(1) CH5B LF 3,COSHOWS,0 CHK2 IF 0,NZ [IF SHOWS FOR THIS SCREEN THEN CJ4L THEN CJJ= CALL 4 SHOWBLOCK [POINT X3 AT PARAM BLOCK CK3W LDCH 0 AWORK4(2) CKHG IF 0,NZ [IF NOT INTERACTIVE SCREEN CL36 THEN [THEN CLGQ STO 0 ACOMMUNE4(2) CM2B DOWN OPERA,1 CMG2 ELSFR +CSPAG(3),ZE [ELSF (INTERACTIVE AND) ACTI CM^L OR 0,NG CNF= THEN CNYW CALL 7 SLOGAGAIN [RESART LOGGING CPDG ELSE [ELSE (INTERACTIVE SHOW) CPY6 DOWN OPERA,2 CQCQ FI [FI TYPE OF SHOW CQXB CALL 4 SHOWBLOCK CRC2 FREECORE 3 [FREE SHOW PARAM BLOCK CRWL LDN 0 1 CSB= DEX 0 AWORK4(2) [MARK 'SHOW DONE' CSTW LDCH 3 AWORK4(2) CT*G ADX 3 CONSCNTRL CTT6 ADN 3 COVID CW#Q DECF 3,COSHOWS [DECREMENT THE RELEVANT COUN CWSB FI [FI SHOW TO DO CX#2 LDCH 1 AWORK4(2) CXRL SBN 1 1 CY?= REPEAT [REPEAT OVER SCREENS CYQW LDEX 0 AWORK4(2) C^=G REPEAT UNTIL,0,ZE [REPEAT TILL ALL SHOWS CLEARED C^Q6 [ D29Q [ IF THE CURRENT TIME/DATE NEEDS UPDATING THEN WE DO THAT NOW D2PB [ D392 WHILE BS,,GNUTIME D3NL DO D48= DO D4MW CALL 3 SGETOPER D57G LDX 3 CPPTR(2) D5M6 BC ,GNUTIME D66Q LDN 4 FTIME D6LB LDN 5 FCOUTBUF D762 MVCH 4 SIZETIME [PUT TIME IN MESSAGE D7KL LDN 4 ACES D85= MVCH 4 4 [THEN 4 SPACES D8JW LDN 4 FDATE D94G MVCH 4 SIZEDATE [THEN DATE D9J6 LDN 0 WRITEMODE+UNLOCK+TFIELD D=3Q DCA 3,DLA,0,MODE D=HB LDN 0 FCOUTBUF D?32 DCA 3,STO,0,CTSA D?GL LDN 0 SIZETIME+SIZEDATE+4 D#2= DCA 3,DLA,0,COUNT D#FW LDN 0 WIDTH-(SIZEDATE+SIZETIME+4) [START CHARACTER D#^G DCA 3,STO,0,EXTRA D*F6 GPERI 3,2 D*YQ COOR1 DBDB LDN 3 CPRW1(2) DBY2 REPEAT UNTIL,MBAC,3,CONSFAIL,CONSINOP DCCL REPEAT DCX= [ DDBW [ WE NOW CHECK WHETHER THERE IS ANY OUTPUT TO GO TO THE OPER LOG. IF DDWG [ THERE IS, IT IS APPENDED TO THE ACTIVE PAGE IF POSSIBLE. DFB6 [ THIS MAY CAUSE AN "OUTPUT WAITING" MESSAGE OR THE OLD ACTIVE DFTQ [ PAGE TO BE WRITTEN AWAY AND A NEW ONE SET UP DG*B [ DGT2 [ DH#L CALL 3 SGETOPER DHS= [ DJ?W [ DJRG STOZ AWORK3(2) [AWORK3 SET NZERO IF AN APPEND FAILS DK?6 WHILE TRUE [WHILE INPUT TO ECHO DKQQ LDX 3 CONSCNTRL DL=B AND +COECH(3),NZ DLQ2 CALL 4 SCINPBLOCK DM9L CALL 7 SAPPENDMSG DMP= LDX 2 FX2 DN8W STO 0 AWORK3(2) DNNG AND 0,ZE [AND APPENDED TO ACTIVE OK DO DP86 DO DPMQ CALL 4 SCINPBLOCK DQ7B FREECORE 3 [FREE MSG BLOCK DQM2 LDX 3 CONSCNTRL DR6L LDN 0 1 DRL= SBS 0 COECH(3) [DECREMENT ECHO COUNT DS5W REPEAT [REPEAT DSKG [ DT56 [ DTJQ LDX 3 CONSCNTRL DW4B IF +COECH(3),ZE [IF ALL INPUT APPENDED OK DWJ2 LDN 3 BCONSOUT DX3L AND 3,U,0(3) [AND BLOCKS ON CHAIN THEN DXH= THEN DY2W WHILE TRUE DYGG CALL 5 SLOGBLOCK D^26 AND 0,NZ [WHILE FIND A LOG BLOCK D^FQ CALL 7 SAPPENDMSG D^^B LDX 2 FX2 F2F2 STO 0 AWORK3(2) F2YL AND 0,ZE [AND APPENDED OK DO F3D= DO F3XW CALL 5 SLOGBLOCK [IF NOT /FORCE THEN F4CG IF +ATYPE(3),U,TYPEFORCE(1) F4X6 THEN F5BQ LDX 4 ALOGLEN(3) F5WB ADN 4 7 [FOR HEADERS, TIME, ETC F6B2 OUTBLOCK 4 F6TL [NOT USING OUTPAR TIMENOW .. F7*= [(THIS MAY NOT WORK IN EMS) F7SW OUTPACK CLEANCT,1,TIMETHEN [PUT TIME IN PARAMS F8#G CALL 5 SLOGBLOCK [REFIND BLOCK F8S6 LDX 0 ATYPE(3) F9?Q ANDX 0 HALFTOP F9RB IF 0,E,TYPECOUT(1) [IF /COUT THEN F=?2 THEN F=QL LDN 4 ATEXT(3) [GET START AND LENGTH F?== LDX 5 AREC(3) F?PW SBN 5 1 F#9G ELSE [ELSE (/IREMTW) F#P6 LDN 4 ICBUFF(3) [GET START AND LENGTH F*8Q LDX 5 A1(3) F*NB ANDN 5 #7777 FB82 FI [FI BLOCK TYPE FBML [ FC7= [X4 -> START OF MESSAGE TEXT FCLW [X5 = LENGTH IN WORDS FD6G [ FDL6 IFR 5,ZE [IF ZERO-LENGTH MSG FF5Q LDX 3 5 FFKB LDX 2 4 FG52 WHILE +0(2),E,ACES [SEE IF ALL SPACES FGJL DO FH4= ADN 2 1 FHHW REPEAT CT 3 FJ3G OR 3,ZE [OR MSG IS ALL SPACES THEN FJH6 THEN FK2Q OUTNULL [%B IS NULL FKGB ELSE [ELSE FL22 LDX 6 VARCHAR(1) FLFL OUTPACKX 4,5,6 [PUT MESSAGE IN PARAMS FL^= FI [FI NULL MESSAGE FMDW ... MONOUT JLCONSOUT,,,IGOPTRACE [SEND MSG TO JOURNAL FMYG CALL 5 SLOGBLOCK [FIND THE BLOCK AGAIN FND6 FI [FI REAL MESSAGE (NOT FORCE) FNXQ FREECORE 3 [FREE IT FPCB REPEAT [REPEAT OVER LENGTH OF CHAIN FPX2 FI [FI APPENDING OUTPUT MSGS FQBL [ FQW= [ FINALLY AN ATTEMPT IS MADE TO WRITE ANY UNWRITTEN AREAS OF FR*W [ THE ACTIVE PAGE TO THE LOG AREA OF THE INTERACTIVE SCREEN. FRTG [ FS*6 LDX 1 FX1 FSSQ LDX 2 FX2 FT#B LDX 3 IPAGEWAIT FTS2 MPY 3 TICKSPERSEC(1) [X4 = IP PAGEWAIT IN CLEANCTS FW?L LDX 3 CONSCNTRL FWR= ADN 3 CODAT [X3 -> TIME WAIT STARTED FX=W CALL 5 SELAPSED FXQG LDX 6 0 [X6 = LOGGING ALLOWED(0) OR NOT(NZ) FY=6 IF 6,NZ [IF NOT ALLOWED TO LOG (IP PAGEWAIT) FYPQ AND +AWORK1(2),NZ F^9B CALL 1 SHUNTACTIVE F^P2 AND +ACLEN(2),NZ [BUT WANT TO THEN G28L THEN G2N= LDX 3 CONSCNTRL G37W IF BCS,3,COUTWAITS G3MG THEN G476 LDN 3 MSGOUTWAIT G4LQ CALL 4 SYSWRITE [ENSURE RESPONSE SAYS SO G56B FI G5L2 ELSE [ELSE (LOGGING PERMITTED) G65L IFR 6,ZE [IF ALLOWED TO LOG G6K= LDX 2 FX2 G74W OR +AWORK1(2),ZE [THEN G7JG THEN G846 CALL 7 SLOGAGAIN [ENSURE SCREEN LOGGING G8HQ [ALL LOGGING WILL HAVE G93B [BEEN DONE IF A SHOW WAS RESET G9H2 FI [FI G=2L CALL 1 SHUNTACTIVE G=G= LDX 0 ACLEN(2) G=^W IF 0,NZ [IF DATA TO LOG THEN G?FG THEN G?^6 IFR +ACOUT(2),E,ACLOG(2) [IF FIRST WRITE OF PAGE G#DQ LDX 3 CONSCNTRL G#YB OR BS,3,COVERWRITE [OR SCREEN NEEDS RESETTING THEN G*D2 THEN G*XL CALL 6 SRESET [RESET WHOLE LOG AREA GBC= LDN 0 1 GBWW STO 0 AWORK1(2) [PAGEWAIT ON FURTHER PAGES GCBG ELSE [ELSE (APPEND) GCW6 LOCKC 2,SHUNTACTIVE GD*Q DO GDTB CALL 3 SGETOPER GF*2 LDX 3 CPPTR(2) GFSL MHUNTW 1,CONBUFF,ACTIVE GG#= LDN 0 WRITEMODE+UNLOCK GGRW DCA 3,DLA,0,MODE GH?G LDX 0 ACLEN(1) GHR6 SBN 0 4 [DON'T SEND FINAL NEWLINE GJ=Q DCA 3,DLA,0,COUNT GJQB LDX 0 ACOUT(1) GK=2 ADN 0 FPTR(1) GKPL DCA 3,STO,0,CTSA GL9= [SCREEN START LINE = GLNW LDN 0 1 + HEIGHTPAGE [NO OF 1ST LINE+LINES/PAG GM8G SBX 0 ACLFT(1) [- LINES ALREADY ... GMN6 SBX 0 ACLNS(1) [ ... ON SCREEN) GN7Q SRC 0 6 GNMB DCA 3,STO,0,EXTRA GP72 GPERI 3,2 [APPEND THE LOG LINES GPLL COOR1 GQ6= LDN 3 CPRW1(2) GQKW REPEAT UNTIL,MBAC,3,CONSINOP,CONSFAIL GR5G CALL 1 SHUNTACTIVE GRK6 LDX 0 ACLEN(2) GS4Q SRL 0 2 GSJB ADS 0 ACOUT(2) [UPDATE 'UNWRITTEN LINES' PO GT42 STOZ ACLEN(2) [AND LENGTH GTHL STOZ ACLNS(2) [AND LINES TO WRITE GW3= UNLOCK 2 [FINALLY UNLOCK IT GWGW FI [FI FIRST / SUBSEQUENT WRITE GX2G FI [FI DATA TO LOG GXG6 LDX 2 FX2 GXJP ... IF +AWORK3(2),NZ [IF PAGE FULL GXM# ... LDX 3 CONSCNTRL GXPX ... AND BS,3,COVERWRITE GXSG ... THEN GXX5 ... IF BC,3,COPAGEWAIT GX^N ... ADN 3 COVID+0 GY4? ... AND BC,3,COSHOWING GY6W ... THEN GY9F ... CALL 6 SRESET GY#4 ... FI GYBM ... ELSF +AWORK3(2),NZ GYFB THEN GY^2 LDX 3 CONSCNTRL [ENSURE PAGEWAIT FLAGGED G^DL IF BCS,3,COPAGEWAIT [IF NOT PAGEWAITING THEN G^Y= THEN H2CW LDX 0 EDATE H2XG STO 0 CODAT(3) H3C6 LDX 0 CLEANCT [REMEMBER DATE AND TIME ... H3WQ STO 0 CODAT+1(3) [THAT PAGEWAIT STARTED H4BB FI [FI NOT PAGEWAITING H4W2 IF BC,3,COUTWAITS [IF NO MSG ON SCREEN THEN H5*L AND +IPAGEWAIT,NZ H5T= AND +AWORK1(2),NZ H6#W THEN H6SG BS 3,COUTWAITS H7#6 LDN 3 MSGOUTWAIT [WRITE "O/P WAITING" H7RQ CALL 4 SYSWRITE H8?B FI H8R2 FI [FI FULL PAGE H9=L FI [FI ALLOWED TO LOG H9Q= REPEAT H=9W #PAGE H=PG [ H?96 [ H?NQ [ H#8B [ WW WW WWWWW H#N2 [ WW WW WW WW H*7L [ WW WW WW H*M= [ WWWW WW HB6W [ WWWW WW HBLG [ WW WW WW HC66 [ WW WW WW HCKQ [ WW WW WWWWWWW HD5B [ HDK2 [ HF4L OPERK2 HFJ= [ HG3W [ HGHG LDN 3 MSGRPT HH36 CALL 4 SYSWRITE HHGQ UP HJ2B #PAGE HJG2 [ HJ^L [ HKF= [ HKYW [ WW WW WWWWW HLDG [ WW WW WW WW HLY6 [ WW WW WW HMCQ [ WWWW WWWW HMXB [ WWWW WW HNC2 [ WW WW WW HNWL [ WW WW WW WW HPB= [ WW WW WWWWW HPTW [ HQ*G [ HQT6 OPERK3 HR#Q [ HRSB [ HS#2 MHUNTW 3,FILE,FRRB HSRL NAME 3,CONBUFF,ACTIVE HT?= LDX 0 ACDAT(3) HTQW STO 0 AWORK2(2) HW=G LDX 0 ACTIM(3) HWQ6 STO 0 AWORK3(2) HX9Q CALL 5 SAUTOHEAD HXPB MHUNTW 3,CONBUFF,ACTIVE HY92 NAME 3,FILE,FRRB HYNL UP H^8= #END ^^^^ ...474625020005