OPERA864
(George Source)
Macros used: ALTLEN, AND, BC, BS, CHAIND, COOR1, COOR3, DCA, DO, DOWN, ELSE, ELSF, FC, FI, FIXTRA, GPERI, IF, IFR, LOCKC, MBC, MFREE, MHUNTW, OR, READED, REPEAT, SEGENTRY, STF, THEN, UNLOCK, UP, WHILE
- OPERA864.txt
22FL #OPT K0OPERA=0 22^= #LIS K0OPERA > K0ALLGEO > K0GREATGEO 23DW #SEG OPERA [COMM - STIG TOWNSEND 23YG [ 24D6 [ 24XQ 8HOPERA 25CB SEGENTRY K1OPERA,OPERAK1 [SHOW TO A MONITOR SCREEN 25X2 SEGENTRY K2OPERA,OPERAK2 [SHOW TO INTERACTIVE SCREEN 26BL SEGENTRY K3OPERA,OPERAK3 [CLEAR FCOUTBUF OF BSTS MESSAGES 26W= [ 27*W [ 27TG [ AWORK4 IS USED TO HOLD THE NUMBER OF THE SCREEN FOR 28*6 [ WHICH THE SHOW IS TO BE DONE. IN THE CASE OF A MONITOR 28SQ [ SHOW, THIS IS TAKEN FROM ACOMMUNE4 WHEN ENTERED 29#B [ 29S2 #PAGE 2=?L [ 2=R= [ 2?=W #DEF WIDTH = 40 [WIDTH OF OPER SCREEN (CHARS) 2?QG [ 2#=6 #DEF PAGESIZE = 2 [SIZE OF PAGE IN B/S BLOCKS 2#PQ [ 2*9B #DEF SIZEDATE = 7 [LENGTH OF DATE STRING (CHARS) 2*P2 [ 2B8L #DEF SIZETIME = 5 [LENGTH OF HH.MM (CHARS) 2BN= [ 2C7W #DEF WRITEMODE = 3 [EXTENDED WRITE MODE 2CMG [ 2D76 #DEF UNLOCK = #200 [ADDITIONAL WRITE MODE - UNLOCK KEYS 2DLQ [ 2F6B SHOWINGMSG 40H*** SHOWING *** 2FL2 [ 2G5L FIXTRA K90OPERA [FOR MACRO 'KEEPPAGES' 2GK= MAXBLKLET +20 * PAGESIZE [HIGHEST BLOCKLET NO IN RECALL FILE 2H4W [ 2HJG NEWLINES 4H^*^* [2 NEWLINES 2J46 [ 2JHQ TYPESHOW +CONBUFF+CSHOW@L 12 [CONBUFF/CSHOW BLOCKTYPE 2K3B [ 2KH2 TYPECOUT +CONBUFF+COUT @L 12 [CONBUFF/COUT BLOCKTYPE 2L2L #PAGE 2LG= [ 2L^W [ 2MFG [ 2M^6 [********************************************************************* 2NDQ [ 2NYB SHUNTFRRB 2PD2 [ 2PXL [********************************************************************* 2QC= [ 2QWW [ SUBSIDIARY HUNT ROUTINE FOR 'LOCKC' 2RBG [ 2RW6 MHUNTW 2,FILE,FRRB 2S*Q EXIT 1 0 2STB #PAGE 2T*2 [ 2TSL [ 2W#= [ 2WRW [********************************************************************* 2X?G [ 2XR6 SHOWBLOCK 2Y=Q [ 2YQB [********************************************************************* 2^=2 [ 2^PL [ POINTS X3 AT THE FIRST CONBUFF/CSHOW ON THE CONSOLE OUTPUT 329= [ CHAIN WHOSE DISPLAY NUMBER IS THE SAME AS THAT HELD IN AWORK4 32NW [ 338G [ X4 LINK 33N6 [ 347Q [ ON EXIT, X0 CORRUPT 34MB [ X1,2 = FX'S 3572 [ X3 -> BLOCK 35LL [ 366= LDX 1 FX1 36KW LDX 2 FX2 375G LDN 3 BCONSOUT 37K6 WHILE TRUE [LOOP TILL FIND /CSHOW FOR SCREEN 384Q LDX 3 FPTR(3) 38JB AND EITHER,+ATYPE(3),U,TYPESHOW(1) 3942 OR +AWORK4(2),U,CSVID(3) 39HL DO 3=3= REPEAT [X3 -> SHOW BLOCK 3=GW EXIT 4 0 3?2G [ 3?G6 #PAGE 3?^Q [ 3#FB [ 3#^2 [********************************************************************* 3*DL [ 3*Y= SREADPAGE 3BCW [ 3BXG [********************************************************************* 3CC6 [ 3CWQ [ READS THE PAGE SPECIFIED IN THE FIRST SHOW BLOCK FOR THE SCREEN WE 3DBB [ ARE CONSIDERING. 3DW2 [ 3F*L [ LINK X6 3FT= [ ON ENTRY, AWORK4 CONTAINS SCREEN NUMBER 3G#W [ /CSHOW BLOCK FOR THIS SCREEN IS ON CONSOLE CHAIN 3GSG [ 3H#6 [ ON EXIT, PAGE IS SET UP IN A FILE/FRRB BLOCK 3HRQ [ X1,2 = FX'S 3J?B [ X3 -> BLOCK 3JR2 [ X5 CORRUPT 3K=L [ 3KQ= SBX 6 FX1 3L9W CALL 4 SHOWBLOCK [X3 -> /CSHOW 3LPG LDX 2 CONSCNTRL 3M96 ADN 2 COVID 3MNQ ADX 2 CSVID(3) [X2 -> SCREEN CELL 3N8B LDX 4 CSPAG(3) [SET X4 TO START BLOCKLET OF PAGE 3NN2 IF 4,NG [IF START OF 'AUTO' THEN 3P7L THEN 3PM= BS 2,COAUTO [SET AUTO BIT 3Q6W LDN 4 1 [READ PAGE @1 3QLG STO 4 CSPAG(3) [PUT REAL PAGE NUMBER IN 3R66 ELSF +CSVID(3),NZ [ELSF FOR MONITOR SCREEN THEN 3RKQ THEN 3S5B BC 2,COAUTO [CLEAR AUTO BIT 3SK2 FI [FI 3T4L LDX 0 4 3TJ= SLL 0 PAGESIZE/2 3W3W SMO CONSCNTRL 3WHG LDX 4 COBLK 3X36 SBX 4 0 3XGQ IFR 4,NG 3Y2B OR 4,ZE 3YG2 THEN 3Y^L LDX 1 FX1 3^F= ADX 4 MAXBLKLET(1) 3^YW FI [X4 = START BLOCKLET 42DG LDN 5 PAGESIZE*128 42Y6 READED 4,1,5 [READ REQUESTED PAGE 43CQ MHUNTW 3,FILE,FRRB 43XB ADX 6 FX1 44C2 EXIT 6 0 44WL #PAGE 45B= [ 45TW [ 46*G [*************************************************************** 46T6 [ 47#Q SPREPERI 47SB [ 48#2 [*************************************************************** 48RL [ 49?= [ EXTRACTS BSTS MESSAGES FROM FCOUTBUF, TAKING COUNT AND 49QW [ ADDRESS FROM THE OPER DEVICE LIST ENTRY 4==G [ THE MESSAGE IS INCORPORATED AS A STRING OF /COUT'S 4=Q6 [ AT THE !! FRONT !! OF THE CONSOLE OUTPUT CHAIN 4?9Q [ THE MESSAGE MUST BE OF THE FORMAT: 4?PB [ <LINE>* <NULL>* 4#92 [ WHERE <LINE> ::= <NULL>* <DATA CHARS>* <NEWLINE> 4#NL [ <NULL> ::= UPARROW SPACE "^ " 4*8= [ <NEWLINE> ::= UPARROW STAR "^*" 4*MW [ A FOLLOWING ASTERISK MEANS THE ELEMENT MAY BE 4B7G [ REPEATED ANY NUMBER OF TIMES (INCL ZERO) 4BM6 [ 4C6Q [ LINK X7 4CLB [ 4D62 [ ON EXIT: COBS HOLDS ZERO 4DKL [ X1,2 = FX'S 4F5= [ 4FJW SBX 7 FX1 4G4G WHILE TRUE 4GJ6 LDX 1 FX1 4H3Q LDX 2 FX2 4HHB WHILE BUSY,CPPTR(2) 4J32 DO 4JGL COOR3 #50 4K2= REPEAT 4KFW LDX 3 CONSCNTRL 4K^G AND +COBS(3),NZ 4LF6 DO 4LYQ LDX 3 CPPTR(2) 4MDB DCA 3,LDX,4,COUNT 4MY2 ADN 4 (CPDATA-A1)*4 + 3 4NCL SRL 4 2 [SET UP BLOCK TO ... 4NX= SETUPCOR 4,2,ADATA,CREADL [HOLD COPY OF MESSAGE 4PBW [ 4PWG WHILE TRUE [ENSURE LONGER BSTS MESSAGE ... 4QB6 DCA 3,LDX,5,COUNT [NOT WRITTEN DURING 'SETUPCOR' 4QTQ ADN 5 (CPDATA-A1)*4 + 3 4R*B SRL 5 2 4RT2 AND 4,L,5 4S#L DO 4SS= LDX 4 5 4T?W ALTLEN 2,4,ADATA,CREADL 4TRG MHUNTW 2,ADATA,CREADL 4W?6 REPEAT 4WQQ [ 4X=B LDN 4 FCOUTBUF+1 [COPY OUT THE MESSAGE 4XQ2 LDN 5 CPDATA(2) 4Y9L LDN 6 FCOUTBUF+1 [SET X6 TO CHAR COUNT 4YP= DCA 3,SBX,6,CTSA 4^8W SLL 6 2 4^NG DCA 3,ADX,6,COUNT [X6 = CHAR COUNT LESS ANY ... 5286 SMO 6 [... PRECEDING "CANCEL" 52MQ MVCH 4 0 537B [ 53M2 [INITIALISE LOOP: 546L [X6 COUNT OF CHARS TO CHECK FOR N/L ( 54L= LDX 3 CONSCNTRL [COBS NONZERO MEANS BSTS WROTE ... 555W STOZ COBS(3) [ AGAIN AFTER THIS MSG WAS COPIED 55KG BS 3,COVERWRITE [REMEMBER SCREEN NEEDS RESETTING 55NL ... IF BSC,3,COPAGEWAIT [DONT PAGEWAIT 55RQ ... THEN 55WW ... STOZ CODAT(3) 5622 ... FI 5656 LDN 1 CPDATA [X1 DISPLACEMENT OF START OF ... 56JQ [ CURRENT LINE WITHIN MESSAGE 574B [ 57J2 WHILE TRUE [WHILE ... 583L MHUNTW 2,ADATA,CREADL 58H= ADX 1 2 592W WHILE 6,NZ [ (IGNORING NULLS ("^ ") ) 59GG [FIND "^*" OR END OF MSG 5=26 LDCH 0 0(1) 5=FQ SBN 0 #76 5=^B AND 0,ZE 5?F2 BCHX 1 £ 5?YL LDCH 0 0(1) 5#D= SBN 0 #32 5#XW SBN 6 2 5*CG BCHX 1 £ 5*X6 AND 0,NZ 5BBQ DO 5BWB REPEAT 5CB2 [AT END OF NULLS LOOP: 5CTL [X6 = 0 => END OF MESSAGE 5D*= [X6 NZERO => END OF LINE, WHEN 5DSW [ X0 = 0 => NEWLINE FOUND 5F#G [ X1 -> NEXT LINE 5FS6 [ X0 NZERO => DATA CHAR FOUND 5G?Q [ X1 -> DATA CHAR 5GRB AND 6,NZ [... NOT RUN OFF END OF MSG DO 5H?2 DO 5HQL LDX 3 1 [X3 -> START OF THIS LINE 5J== IF 0,NZ [IF LINE NOT NULL THEN 5JPW THEN 5K9G WHILE TRUE 5KP6 DO [FIND NEXT DELTA CHAR 5L8Q LDCH 0 0(1) 5LNB SBN 6 1 5M82 BCHX 1 £ 5MML SBN 0 #76 5N7= REPEAT UNTIL,0,ZE [FOUND ^ OF DELTA 5NLW LDCH 0 0(1) 5P6G SBN 6 1 5PL6 BCHX 1 £ 5Q5Q SBN 0 #32 [GEOERR IF NOT ^* - 5QKB BNZ 0 (GEOERR) [CAN'T COPE WITH DELTA IN LINE 5R52 FI [FI LINE NOT NULL 5RJL [ 5S4= [ HAVE FOUND NEWLINE 5SHW [ X1 -> BEYOND IT 5T3G [ X2 -> BSTS MESSAGE BLOCK 5TH6 [ X3 -> START OF THIS LINE WITHIN IT 5W2Q [ 5YDW SBX 1 2 [X1 -> START NEXT LINE (W.R.T. FPT 5^D6 SBX 3 2 [X3 -> START THIS LINE (W.R.T. FPT 5^GP ... SLC 3 2 5^K# ... LDX 4 1 5^MX ... SLC 4 2 5^QG ... SBN 4 2(3) [X4 = CHARS IN LINE EXCL "^*" 5^T5 ... SRC 3 2 5^XQ LDX 2 FX2 62CB STO 1 AWORK1(2) 62X2 STO 4 AWORK2(2) 63BL IF 4,NZ [IF THIS LINE NOT NULL THEN 63W= THEN 64*W ADN 4 (ATEXT-AREC)*4 + 3 64TG SRL 4 2 65*6 SETUPCOR 4,1,CONBUFF,COUT [X1 -> CONBUFF-COUT FOR ONE LIN 65SQ MHUNTW 2,ADATA,CREADL [X2 -> CREADL 66#B STO 4 AREC(1) [SET WORD COUNT 66S2 LDX 4 2 67?L ADX 4 3 [X4 -> START OF THIS LINE 67R= LDN 2 AREC-1(1) 68=W ADX 2 AREC(1) 68QG LDX 0 ACES 69=6 STO 0 0(2) [SPACEFILL LAST WORD IN /COUT 69PQ LDX 2 FX2 [X2 = FX2 6=9B LDN 5 ATEXT(1) [X5 -> START OF /COUT TEXT AREA 6=P2 LDX 3 AWORK2(2) 6?8L MVCH 4 0(3) [MOVE THIS LINE IN 6?N= FI [FI LINE NOT NULL 6#7W LDX 1 AWORK1(2) 6#MG REPEAT [REPEAT UNTIL END OF MESSAGE 6*76 MFREE ADATA,CREADL 6*LQ [ 6B6B [ LINES OF MSG ARE ON ACT CHAIN IN REVERSE ORDER 6BL2 [ PUTTING THEM AT FRONT OF CONSOLE CHAIN RESTORES ORIGINAL ORDER 6C5L [ 6CK= MHUNTW 3,CONBUFF,COUT [FROM 1ST /COUT (LAST LINE OF MSG) DO 6D4W WHILE TRUE 6DJG DO 6F46 LDX 4 FPTR(3) 6FHQ CHAIND 3,BCONSOUT [CHAIN /COUTS AT FRONT 6G3B LDX 3 4 6GH2 REPEAT UNTIL,+ATYPE(3),U,TYPECOUT(1) 6H2L [ 6HG= REPEAT 6H^W [ 6JFG ADX 7 FX1 6J^6 EXIT 7 0 6KDQ #PAGE 6KYB [ 6LD2 [ 6LXL [ WW WW W 6MC= [ WW WW WW 6MWW [ WW WW WWW 6NBG [ WWWW WW 6NW6 [ WWWW WW 6P*Q [ WW WW WW 6PTB [ WW WW WW 6Q*2 [ WW WW WW 6QSL [ 6R#= [ 6RRW OPERAK1 6S?G [ 6SR6 [ SHOWS A PAGE TO A MONITOR SCREEN (OR CLEARS SCREEN IF THE ACTIVE 6T=Q [ PAGE IS SPECIFIED) 6TQB [ 6W=2 [ ON ENTRY, ACOMMUNE4 CONTAINS SCREEN NUMBER 6WPL [ /CSHOW BLOCK FOR THIS SCREEN IS ON CONSOLE CHAIN 6X9= [ 6XNW LDX 0 ACOMMUNE4(2) 6Y8G STO 0 AWORK4(2) [SET SCREEN NUMBER 6YN6 CALL 4 SHOWBLOCK 6^7Q IF +CSPAG(3),ZE [IF "SHOW OFF" THEN 6^MB THEN 7272 CALL 7 SPREPERI 72LL LDX 0 NEWLINES(1) [SET UP BUFFER TO CLEAR SCREEN 736= STO 0 FCOUTBUF 73KW LDN 4 FCOUTBUF 745G LDN 5 FCOUTBUF+1 74K6 MOVE 4 HEIGHTPAGE+5/2 [BUFFER IS SET UP 754Q LDX 3 CPPTR(2) [SET UP CONTROL AREA 75JB LDN 0 WRITEMODE 7642 DCA 3,DLA,0,MODE 76HL LDN 0 FCOUTBUF 773= DCA 3,STO,0,CTSA 77GW LDX 0 AWORK4(2) 782G SLL 0 9 78G6 DCA 3,STO,0,EXTRA [INCLUDING SCREEN NUMBER 78^Q LDN 0 HEIGHTPAGE+5/2*4 79FB DCA 3,DLA,0,COUNT 79^2 GPERI 3,2 [ISSUE PERI 7=DL COOR1 7=Y= LDN 3 CPRW1(2) 7?CW IF MBAC,3,CONSFAIL,CONSINOP [IF OK THEN 7?XG THEN 7#C6 LDX 3 AWORK4(2) 7#WQ SMO CONSCNTRL 7*BB ADN 3 COVID 7*W2 MBC 3,COSHOWING,COAUTO [CLEAR 'SCREEN SHOWING' BITS 7B*L FC 3,COCURRENT 7BT= FI [FI 7C#W ELSE [ELSE (NOT ACTIVE PAGE) 7CSG CALL 6 SREADPAGE 7CWP ... LDX 3 CONSCNTRL 7CYY ... IF +CORET(3),ZE 7D37 ... THEN 7D5B ... MFREE FILE,FRRB 7D7K ... UP 7D9S ... FI 7D#6 DOWN OPER,3 [PUT RESPONSE LINE IN BLOCK 7DRQ CALL 4 SHOWBLOCK 7F?B LDX 3 CSVID(3) 7FR2 ADX 3 CONSCNTRL 7G=L ADN 3 COVID 7GQ= CALL 1 SHUNTFRRB 7H9W IF BC,3,COAUTO [IF NOT AUTO THEN 7HPG THEN 7J96 LDX 0 ACES [BLANK "(AUTO)" 7JNQ STO 0 (ACHCT+1)+(WIDTH/4)-2(2) 7K8B STO 0 (ACHCT+1)+(WIDTH/4)-1(2) 7KN2 FI [FI 7L7L LOCKC 2,SHUNTFRRB [LOCK BUFFER BLOCK 7LM= CALL 7 SPREPERI 7M6W LDX 3 CPPTR(2) [SET UP CONTROL AREA 7MLG LDN 0 WRITEMODE 7N66 DCA 3,DLA,0,MODE 7NKQ CALL 1 SHUNTFRRB 7P5B LDN 0 ACLOG(2) 7PK2 DCA 3,STO,0,CTSA 7Q4L LDX 0 ACHCT(2) 7QJ= DCA 3,DLA,0,COUNT 7R3W LDX 2 FX2 7RHG LDX 0 AWORK4(2) 7S36 SLL 0 9 7SGQ DCA 3,STO,0,EXTRA 7T2B GPERI 3,2 [ISSUE PERI 7TG2 COOR1 7T^L MFREE FILE,FRRB [FREE BUFFER BLOCK 7WF= LDN 3 CPRW1(2) 7WYW IF MBAC,3,CONSFAIL,CONSINOP [IF SHOWED OK THEN 7XDG THEN 7XY6 LDX 3 AWORK4(2) 7YCQ SMO CONSCNTRL 7YXB ADN 3 COVID [SET 'SCREEN SHOWING' BIT 7^C2 BS 3,COSHOWING 7^WL STO 3 5 82B= CALL 4 SHOWBLOCK 82TW LDX 1 CSPAG(3) [X1 = CURRENT PAGE NUMBER 83*G LDX 3 5 83T6 STF 3,COCURRENT,1 [SET IT IN THE INFO CELL 84#Q FI [FI 84SB FI [FI ACTIVE PAGE / OTHER 85#2 UP 85RL #PAGE 86?= [ 86QW [ 87=G [ 87Q6 [ WW WW WWWWW 889Q [ WW WW WW WW 88PB [ WW WW WW 8992 [ WWWW WW 89NL [ WWWW WW 8=8= [ WW WW WW 8=MW [ WW WW WW 8?7G [ WW WW WWWWWWW 8?M6 [ 8#6Q [ 8#LB OPERAK2 8*62 [ 8*KL [ 8B5= [ SHOWS A PAGE ON THE INTERACTIVE SCREEN, SETTING APPROPRIATE BITS 8BJW [ AND TIMER WORDS. 8C4G [ 8CJ6 [ ON ENTRY, /CSHOW BLOCK FOR THIS SCREEN IS ON CONSOLE CHAIN 8D3Q [ 8DHB STOZ AWORK4(2) [WE KNOW IT'S SCREEN ZERO 8F32 CALL 6 SREADPAGE 8FGL LDN 5 SHOWINGMSG(1) [X56 READY TO INSERT *** SHOWING *** 8G2= LDN 6 ACHCT+1(3) 8GFW LDX 2 3 8G^G ADX 2 ACLOG(3) [ACLOG WILL BE O-WRITTEN BY ***'S 8HF6 SBN 2 SIZETIME+SIZEDATE+4/4 [X2 -> FIELD FOR CURRENT TIME & DATE 8HYQ MOVE 5 WIDTH/4 [INSERT *** SHOWING *** 8JDB LDN 1 FTIME [INSERT CURRENT DATE AND TIME 8JY2 MVCH 1 SIZETIME 8KCL LDN 1 ACES 8KX= MVCH 1 4 8LBW LDN 1 FDATE 8LWG MVCH 1 SIZEDATE [TIME AND DATE INSERTED 8MB6 CALL 1 SHUNTFRRB 8MTQ LOCKC 2,SHUNTFRRB 8N*B DO 8NT2 CALL 7 SPREPERI 8P#L LDX 3 CPPTR(2) [SET UP CONTROL AREA 8PS= CALL 1 SHUNTFRRB 8Q?W LDN 0 WRITEMODE+UNLOCK 8QRG DCA 3,DLA,0,MODE 8R?6 LDN 0 ACLOG(2) 8RQQ DCA 3,STO,0,CTSA 8S=B LDX 0 ACHCT(2) 8SQ2 DCA 3,DLA,0,COUNT 8T9L LDN 0 0 8TP= DCA 3,STO,0,EXTRA 8W8W LDX 2 FX2 8WNG GPERI 3,2 [ISSUE PERI 8X86 COOR1 8XMQ LDN 3 CPRW1(2) 8Y7B REPEAT UNTIL,MBAC,3,CONSFAIL,CONSINOP 8YM2 CALL 4 SHOWBLOCK 8^6L LDX 1 CSPAG(3) [X1 = CURRENT PAGE NUMBER 8^L= LDX 3 CONSCNTRL 925W BC 3,COPAGEWAIT [CLEAR 'PAGEWAITING' 92KG LDX 0 EDATE 9356 STO 0 CODAT(3) [REMEMBER WHEN SHOW STARTED 93JQ LDX 0 CLEANCT 944B STO 0 CODAT+1(3) 94J2 ADN 3 COVID 953L BS 3,COSHOWING [SET 'SHOWING' 95H= STF 3,COCURRENT,1 [SET PAGE NO. IN INFO CELL 96GG MFREE FILE,FRRB 9726 UP 97FQ #PAGE 97^B [ 98F2 [ 98YL [ WW WW WWWWW 99D= [ WW WW WW WW 99XW [ WW WW WW 9=CG [ WWWW WWWW 9=X6 [ WWWW WW 9?BQ [ WW WW WW 9?WB [ WW WW WW WW 9#B2 [ WW WW WWWWW 9#TL [ 9**= [ 9*SW OPERAK3 9B#G [ 9BS6 [ CLEAR FCOUTBUF OF BSTS MESSAGES 9C?Q [ 9CRB CALL 7 SPREPERI 9D?2 UP 9DQL #END ^^^^ ...450612340004