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