OPERAPP864
(George Source)
Macros used: ALTLEN, AND, BXE, BXGE, DO, ELSE, ELSF, FI, IF, INSERT, MHUNTW, REPEAT, SEGENTRY, THEN, UP, WHILE
- OPERAPP864.txt
22FL #OPT K0OPERAPP=0 22^= #LIS K0OPERAPP > K0ALLGEO > K0GREATGEO 23DW #SEG OPERAPP [COMM - STIG TOWNSEND 23YG [ 24D6 [ 24XQ 8HOPERAPP 25CB SEGENTRY K1OPERAPP,OPERAPPK1 [APPEND A MESSAGE TO ACTIVE PAGE 25X2 SEGENTRY K2OPERAPP,OPERAPPK2 [FILL ACTIVE PAGE WITH NEWLINES 26BL [ 26W= [ 27*W [ AWORK1, 2 USED 27TG #PAGE 28*6 [ 28SQ [ 29#B PREFIXC 4H- - [CONTINUATION PREFIX = HYPHEN SP SP 29S2 [ 2=?L XDELTA #74 [DELTA CHARACTER LIMIT 2=R= [ 2?=W TABLE [USED FOR SPLITTING LONG MESSAGES 2?QG BRN XCOLNFOUND 2#=6 4H000: [COLON 2#PQ BRN XEDIT 2*9B 4H000( [OPEN PARENTHESIS 2*P2 BRN XCOMMA 2B8L 4H000, [COMMA 2BN= BRN XEDIT 2C7W 4H000 [SPACE 2CMG TEND 2D76 [ 2DLQ [ 2F6B TOOLONGMSG 2FL2 ... 30HOVERLONG MESSAGE TRUNCATED 2K3B [ 2KH2 [ DEFINITIONS 2L2L [ 2LG= #DEF WIDTH = 40 [WIDTH OF OPER SCREEN (CHARS) 2L^W [ 2MFG [ 2M^6 [ PRESET DATA 2NDQ [ 2NYB TYPECOUT +CONBUFF+COUT @L 12 [CONBUFF/COUT BLOCKTYPE 2PD2 [ 2PXL TYPEREMTW +CONBUFF+IREMTW@L12 [CONBUFF/IREMTW BLOCKTYPE 2QC= [ 2QWW TYPEAPP +CONBUFF+CONAPP@L12 [CONBUFF/CONAPP BLOCKTYPE 2RBG [ 2RW6 TYPEFORCE +CONBUFF+FORCE@L12 [CONBUFF/FORCE BLOCKTYPE 2S*Q [ 2STB SEARCHBACK +10 [MSG ONLY SPLIT IN LAST 10 CHARS 2T*2 [ 2TJS ...SMSK #77770000 2TSL [ 2W#= #PAGE 2WRW [ 2X?G [ 2XR6 [********************************************************************* 2Y=Q [ 2YQB SFILLPAGE 2^=2 [ 2^PL [********************************************************************* 329= [ 32NW [ FILLS THE ACTIVE PAGE BLOCK WITH NEWLINES (I.E. BLANK 338G [ LINES), UPDATING ACLEN, ACLNS AND ACLFT 33N6 [ 347Q [ LINK X7 34MB [ 3572 [ ON EXIT, X1,2 = FX'S 35LL [ X0,3 CORRUPT 366= [ 36KW MHUNTW 1,CONBUFF,ACTIVE 375G LDX 3 ACLFT(1) 37K6 IF 3,NZ 384Q THEN 38JB LDX 0 FCANCEL+2 3942 LDX 2 ACLEN(1) 39HL SRL 2 2 3=3= ADN 2 FPTR(1) 3=GW ADX 2 ACOUT(1) 3?2G DO 3?G6 STO 0 0(2) 3?^Q ADN 2 1 3#FB REPEAT CT 3 3#^2 LDX 0 ACLFT(1) 3*DL ADS 0 ACLNS(1) 3*Y= SLL 0 2 3BCW ADS 0 ACLEN(1) 3BXG STOZ ACLFT(1) 3CC6 FI 3CWQ LDX 1 FX1 3DBB LDX 2 FX2 3DW2 EXIT 7 0 3F*L #PAGE 3FT= [ 3G#W [ 3GSG [ WW WW W 3H#6 [ WW WW WW 3HRQ [ WW WW WWW 3J?B [ WWWW WW 3JR2 [ WWWW WW 3K=L [ WW WW WW 3KQ= [ WW WW WW 3L9W [ WW WW WW 3LPG [ 3M96 [ 3MNQ OPERAPPK1 3N8B [ 3NN2 [ APPENDS A MESSAGE FROM A MESSAGE BLOCK TO THE ACTIVE PAGE. WHOLE- 3P7L [ WORD OUTPUT LINES ARE USED, THE MESSAGE BEING FILLED WITH #74'S 3PM= [ AT THE END IF NEEDED 3Q6W [ 3QLG [ ON ENTRY, MESSAGE IN 1ST CONBUFF-CONAPP ON CONSOLE CHAIN 3R66 [ 3RKQ [ ON EXIT, X0 = 0 - APPENDED OK 3S5B [ -VE - DIDN'T BUT PAGE BLOCK IS NOT MAXIMUM SIZE 3SK2 [ +VE - PAGE FULL AND CANNOT BE EXTENDED 3T4L [ (OR TRIED TO APPEND TOO MANY LINES) 3TJ= [ 3W3W [ THIS ROUTINE DOES NOT COORDINATE OR USE ANY MACROS (APART FROM 3WHG [ MHUNTW) WHICH CHANGE ACCUMULATORS, AWORK OR ACOMMUNE WORDS. 3X36 [ ACOMMUNE WORDS ARE THEREFORE USED TO STORE DATA 3XGQ [ 3Y2B [ ACOMMUNE1 USED FOR TEMPORARY STORAGE 3YG2 [ ACOMMUNE3 HOLDS THE POINTER TO THE MESSAGE BLOCK 3Y^L [ ACOMMUNE4 USED FOR TEMPORARY STORAGE 3^F= [ ACOMMUNE5 HOLDS THE NUMBER OF LINES ALLOWED FOR THIS MESSAGE 3^YW [ ACOMMUNE6 HOLDS THE NUMBER OF CHARS ALLOWED FOR THIS MESSAGE 42DG [ ACOMMUNE7 HOLDS THE NUMBER OF LINES ADDED FOR THIS MESSAGE 42Y6 [ ACOMMUNE8 HOLDS ORIGINAL ATYPE OF CONBUFF/CONAPP 43CQ [ ACOMMUNE9 USED TO RETURN RESULT (X0) 43XB [ 44C2 [ AWORK1 HOLDS LENGTH OF DATA ALLOWED ON A LINE 44WL [ ('WIDTH' FOR 1ST, 'WIDTH'-3 FOR REST - PREFIX) 45B= [ AWORK2 REMAINDER COUNT OF SOURCE MESSAGE 45TW [ 46*G [EXTENDING /ACTIVE UNTIL MAX ... 46T6 [... SIZE OR UNTIL NO MORE ... 47#Q [... LINES LEFT IN PAGE, ... 47SB [... TRY TO APPEND MSG 48#2 LDN 3 BCONSOUT 48RL WHILE TRUE 49?= DO [FIND /CONAPP BLOCK 49QW LDX 3 FPTR(3) 4==G REPEAT UNTIL,+ATYPE(3),E,TYPEAPP(1) 4=Q6 STO 3 ACOMMUNE3(2) 4?9Q IF +ACOMMUNE8(2),E,TYPEFORCE(1) 4?PB THEN 4#92 CALL 7 SFILLPAGE 4#NL LDN 0 0 4*8= BRN XITSAPP 4*MW [*************** 4B7G [ 4BM6 FI 4C6Q LDN 0 WIDTH 4CLB STO 0 AWORK1(2) 4D62 MHUNTW 1,CONBUFF,ACTIVE 4DKL LDX 0 ACLFT(1) 4F5= STO 0 ACOMMUNE5(2) [LINES ALLOWED FOR MESSAGE 4FJW STOZ ACOMMUNE7(2) [NO LINES ADDED YET 4G4G LDX 0 ACLEN(1) 4GJ6 SRL 0 2 4H3Q ADX 0 ACOUT(1) 4HHB SBX 0 ALOGLEN(1) 4J32 SBN 0 ACHCT 4JGL NGX 0 0 [UNUSED WORDS IN ACTIVE BLOCK 4K2= SBX 0 ACLFT(1) [RESERVE SPACE FOR NEWLINES AT END 4KFW SLL 0 2 4K^G STO 0 ACOMMUNE6(2) [CHARS AVAILABLE IN PAGE BLOCK 4LF6 LDX 1 FX1 4LYQ LDX 0 ACOMMUNE8(2) [GET START AND LENGTH OF ... 4MDB ANDX 0 HALFTOP [TEXT FOR /COUT, /IREMTW OR /CINP 4MY2 IF 0,E,TYPECOUT(1) 4NCL THEN 4NX= LDX 5 AREC(3) 4PBW SBN 5 1 4PWG LDN 6 ATEXT 4QB6 ELSF 0,E,TYPEREMTW(1) 4QTQ THEN 4R*B LDEX 5 AREC(3) 4RT2 LDN 6 ICBUFF 4S#L ELSE [/CINP 4SS= LDX 5 A1(3) 4T?W SBN 5 CPDATA-A1-1 [WORD COUNT INCL 4 INITIAL SPACES 4TRG #DEF 20? = CPDATA-(A1+1) 4W?6 #SKI (20?<1$1) ^ (20?�) [TROUBLE IF CPDATA < (A1+1) 4WQQ !! CPDATA NOT GREATER THAN A1+1 - CAN'T INSERT LEADING SPACES 4X=B LDX 0 ACES 4XQ2 STO 0 CPDATA-1(3) [INSERT LEADING SPACES (INPUT MSG) 4Y9L LDN 6 CPDATA-1 4YP= FI 4^8W [ 4^NG [ X1 = FX1 5286 [ X2 = FX2 52MQ [ X5 = MESSAGE LENGTH IN WORDS (ASSUMES SPACE-FILLED AT END) 537B [ X6 -> START OF TEXT (REL FPTR) 53M2 [ OTHERS FREE 546L [ 54L= [ FIND LAST SIGNIFICANT CHARACTER IN MESSAGE 555W [ 55KG LDX 3 6 5656 ADX 3 ACOMMUNE3(2) 56JQ ADX 3 5 [X3 -> BEYOND LAST WORD OF TEXT 574B IF 5,NZ [IF MESSAGE NOT NULL THEN 57J2 THEN 583L SLL 5 2 [CONVERT WORDS TO CHARS 58H= WHILE TRUE 592W SLC 3 2 59GG SBN 3 1 5=26 SRC 3 2 5=FQ LDCH 0 0(3) 5=^B SBN 0 #20 5?F2 AND 0,ZE [WHILE SPACE IS LAST CHAR DO 5?YL DO 5#D= REPEAT CT 5 [REPEAT 5#XW FI [FI 5*CG [ 5*X6 [ X1 = FX1 5BBQ [ X2 = FX2 5BWB [ X5 = CHARACTERS IN MESSAGE (MAY BE ZERO) 5CB2 [ X6 -> START OF TEXT (REL FPTR) 5CTL [ OTHERS FREE 5D*= [ 5DSW [ APPEND A MESSAGE TO ACTIVE PAGE 5F#G [ 5FS6 STO 5 AWORK2(2) [REMAINDER COUNT OF MESSAGE 5G?Q MHUNTW 1,CONBUFF,ACTIVE 5GRB LDX 0 ACLEN(1) 5H?2 SRL 0 2 5HQL ADX 1 ACOUT(1) 5J== ADX 1 0 [X1 -> END OF ACTIVE PAGE 5JPW LDX 3 6 5K9G ADX 3 ACOMMUNE3(2) [X3 -> START OF TEXT 5KP6 LDN 4 0 [X4 IS COUNT OF CHARS APPENDED THIS MSG 5L8Q [ 5LNB [ ON ENTRY TO THE LOOP: 5M82 [ X1 -> NEXT APPEND POSITION 5MML [ X2 = FX2 5N7= [ X3 -> START OF THE LINE WE ARE ADDING 5NLW [ X4 = TOTAL CHARS ADDED TO ACTIVE PAGE THIS MESSAGE 5P6G [ AWORK1 = LENGTH OF LINE ALLOWED 5PL6 [ AWORK2 = REMAINDER COUNT OF MESSAGE (CHARS) 5Q5Q [ 5QKB DO 5R52 STO 1 ACOMMUNE1(2) [SAVE APPEND POINTER 5RJL LDX 5 AWORK2(2) [X5 = MESSAGE REMAINDER COUNT 5S4= LDX 0 AWORK1(2) 5SHW ADN 0 1 5T3G IF 5,GE,0 [IF MSG LONGER THAN ONE LINE THEN 5TH6 THEN 5W2Q SMO FX1 [SPLIT MESSAGE 5WGB LDN 1 TABLE [X1 -> BRN'S IN TABLE 5X22 LDN 6 TEND-TABLE/2 [X6 = NO OF ELTS IN TABLE 5XFL DO 5X^= LDX 2 3 5YDW SLC 2 2 5YYG SMO FX2 5^D6 ADX 2 AWORK1 [NO OF CHARACTERS LEFT ON LINE 5^XQ SBN 2 1 62CB SRC 2 2 [X2 -> LAST CHAR OF THIS 'WIDTH 62X2 SMO FX1 63BL LDX 0 SEARCHBACK [FOR LAST FEW CHARS, STARTING A 63W= DO [DO 64*W LDCH 7 0(2) [LOAD NEXT CHAR 64TG BXE 7 1(1),(1) [J IF SUITABLE CHAR FOUND 65*6 RECOVER [FROM COLON ROUTINE IF SPACE FOLLOWS 65SQ SLC 2 2 [STEP BACK POINTER ONE CHAR 66#B SBN 2 1 66S2 SRC 2 2 67?L REPEAT CT 0 [REPEAT BACK ALONG LINE 67R= ADN 1 2 68=W REPEAT CT 6 [REPEAT OVER SPLITTER CHARS 68QG SMO FX2 [NO SUITABLE CHARACTER FOUND ... 69=6 LDX 5 AWORK1 [SO SPLIT AFTER 'WIDTH' 69PQ FI 6=9B XPT [RETURN POINT FROM SPLITTER ROUTINES 6=P2 LDX 2 FX2 6?8L LDX 1 ACOMMUNE1(2) [POINT X1 AT CURRENT END OF ACTIVE 6?N= [ 6#7W [ X1 -> NEXT APPEND POSITION 6#MG [ X2 = FX2 6*76 [ X3 -> START OF THIS LINE 6*LQ [ X4 = TRANSFER COUNT 6B6B [ X5 = LENGTH OF LINE (CHARS) 6BL2 [ 6C5L LDX 7 AWORK2(2) [MESSAGE REMAINDER COUNT 6CK= LDN 6 #76 6D4W IF 5,NZ 6DJG THEN 6F46 DO [FOR CHARS IN LINE DO 6FHQ LDX 0 4 6G3B ADN 0 1 6GH2 BXGE 0 ACOMMUNE6(2),XITERR [J IF NO ROOM FOR TWO CHARS 6H2L [*************************** 6HG= [ 6H^W LDCH 0 0(3) [LOAD NEXT CHARACTER 6JFG STO 3 ACOMMUNE4(2) 6J^6 LDX 3 FX1 6KDQ IF 0,GE,XDELTA(3) [IF DELTA CHAR THEN 6KYB THEN 6LD2 DCH 6 0(1) [STORE #76 FOR NEXT CHAR 6LXL BCHX 1 £ 6MC= SBN 0 #10 [CONVERT CHARACTER TO ALPHA 6MWW ADN 4 1 [UPDATE CURRENT CHAR COUNT 6NBG FI [FI DELTA 6NW6 LDX 3 ACOMMUNE4(2) 6P*Q SBN 7 1 [DECREMENT MSG REMAINDER COUNT 6PTB DCH 0 0(1) [INSERT NEXT CHARACTER 6Q*2 BCHX 1 £ 6QSL BCHX 3 £ [UPDATE POINTERS 6R#= ADN 4 1 [AND CHARACTER COUNT 6RRW REPEAT CT 5 6S?G FI 6SR6 [ 6T=Q [ END OF (PRINT) LINE REACHED 6TQB [ 6W=2 [ X1 -> NEXT APPEND POSITION 6WPL [ X2 = FX2 6X9= [ X3 -> NEXT INPUT CHARACTER 6XNW [ X4 = TOTAL TRANSFER COUNT 6Y8G [ X7 = MESSAGE REMAINDER COUNT 6YN6 [ 6^7Q LDX 0 4 6^MB ADN 0 9 [J IF NO ROOM FOR 10 CHARS ... 7272 BXGE 0 ACOMMUNE6(2),XITERR [(4 NEWLINE, 3 PREFIX, 3 FILL CHARS)) 72LL [*************************** 736= [ 73KW LDX 0 ACOMMUNE5(2) 745G SBN 0 1 74K6 IF 0,NG [IF TOO MANY LINES THEN 754Q THEN 75JB MHUNTW 1,CONBUFF,ACTIVE 7642 LDN 0 1 [DRASTIC ERROR 76HL BRN XITSAPP 773= [*************** 77GW [ 782G FI [FI 78G6 STO 0 ACOMMUNE5(2) [REDUCE LINES LEFT 78^Q LDN 0 1 79FB ADS 0 ACOMMUNE7(2) 79^2 ... LDN 0 #74 [X0 = NULL CHAR 7=DL WHILE TRUE 7=Y= LDN 5 0(1) 7?CW AND 5,U,1 [UNTIL X1 -> WORD BOUNDARY 7?XG DO 7#C6 DCH 0 0(1) 7#WQ ADN 4 1 [PUT IN NULL 7*BB REPEAT CHX 1 [REPEAT 7*W2 LDN 0 FCANCEL+2 [ADDRESS OF NL BUFFER 7B*L MVCH 0 4 [MOVE IN NL 7BT= ADN 4 4 [INCREMENT CURRENT COUNT 7C#W LDN 0 WIDTH-3 [AFTER NL, SUBSEQUENT LINES 7CSG STO 0 AWORK1(2) [MUST HAVE A 3-CHAR PREFIX 7D#6 IF 7,NZ [IF MSG CONTINUES THEN 7DRQ THEN 7F?B SMO FX1 [INSERT CONTINUATION CHARS 7FR2 LDN 0 PREFIXC [ADDRESS OF CONTINUATION PREFIX 7G=L MVCH 0 3 [MOVE IN CONT PREFIX 7GQ= ADN 4 3 [INCREMENT CURRENT COUNT 7H9W WHILE TRUE [FOR FOLLOWING TEXT 7HPG STO 7 AWORK2(2) [STORE CURRENT REMAINDER COUNT 7J96 LDCH 0 0(3) 7JNQ SBN 0 #20 7K8B AND 0,ZE [WHILE SPACES 7KN2 SBN 7 1 7L7L AND 7,NZ [AND STILL HAVE TEXT LEFT DO 7LM= DO 7M6W REPEAT CHX 3 7MLG FI [FI 7N66 [ 7NKQ [ X1 APPEND PTR 7P5B [ X2 FX2 7PK2 [ X3 -> NEXT MSG CHAR (UNLESS EOM) 7Q4L [ X4 TOTAL CHARS APPENDED 7QJ= [ X7 REMAINDER COUNT OF MESSAGE 7R3W [ AWORK1 LENGTH OF LINE ALLOWED 7RHG [ AWORK2 REMAINDER COUNT OF MSG (= X7) 7S36 [ 7SGQ REPEAT UNTIL,7,ZE [REPEAT OVER LINES IN MSG 7T2B MHUNTW 1,CONBUFF,ACTIVE 7TG2 LDX 0 ACOMMUNE5(2) 7T^L STO 0 ACLFT(1) [UPDATE LINES LEFT IN PAGE 7WF= ADS 4 ACLEN(1) [UPDATE 'TO BE WRITTEN' CHAR COUNT 7WYW LDX 0 ACOMMUNE7(2) 7XDG ADS 0 ACLNS(1) [UPDATE 'TO BE WRITTEN' LINE COUNT 7XY6 STO 1 ACHCT(1) [MESSAGE APPENDED OK 7YCQ LDN 0 0 7YXB BRN XITSAPP [SUCCESS 7^C2 XITERR [APPEND HAS FAILED 7^WL MHUNTW 1,CONBUFF,ACTIVE 82B= LDX 0 ALOGLEN(1) 82TW SBN 0 ACTIVEMAX 83*G ADN 0 1 [X0 = 1(PAGE FULL), -VE(EXTENSIBLE) 83T6 BPZ 0 XITSAPP [FAIL IF NOT WORTH EXTENDING PAGE 84#Q LDX 2 FX2 84SB LDX 3 ACOMMUNE8(2) [PRESERVE ORIGINAL TYPE 85#2 LDX 4 ALOGLEN(1) 85RL ADN 4 ACTIVEXT 86?= ALTLEN 1,4,CONBUFF,ACTIVE [EXTEND BLOCK 86QW STO 3 ACOMMUNE8(2) [RESTORE ORIGINAL TYPE 87=G BRN OPERAPPK1 [TRY AGAIN AFTER PAGE EXTENDED 87Q6 XITSAPP 889Q LDX 2 FX2 88PB STO 0 ACOMMUNE9(2) 8992 SBN 0 1 89NL IF 0,ZE [IF PAGE FULL 8=8= AND +ACHCT(1),ZE [AND NO MESSAGE FULLY APPENDED THEN 8=MW THEN 8=WN ...[ MESSAGE TOO LONG TO FIT ON A FULL PAGE 8?5G ...[ TRUNCATE MESSAGE & GO BACK TO K1OPERAPP TO TRY AGAIN 8?## ...[ X3 -> NEXT CHAR OF MESSAGE 8?H6 ... LDX 5 3 8?PY ... SBN 5 9 [STEP BACK 9 WORDS IN MESSAGE BLOCK 8?YQ ... LDX 1 FX1 8#7J ... LDN 4 TOOLONGMSG(1) 8#BB ... MVCH 4 30 [MOVE TO MESSAGE BLOCK 8#K8 ... LDX 3 ACOMMUNE3(2) [POINTER TO MESSAGE BLOCK 8#S2 ... SBX 5 3 [CHAR POINTER RELATIVE TO START OF BL 8*2S ... LDX 0 ACOMMUNE8(2) [ATYPE OF MESSAGE BLOCK 8*9L ... ANDX 0 HALFTOP 8*DD ... IF 0,E,TYPECOUT(1) [CONBUFF/COUT BLOCK 8*M= ... THEN 8*W4 ... SBN 5 AREC [GET NEW MESSAGE LENGTH 8B4W ... ANDX 5 BITS22LS 8B?N ... STO 5 AREC(3) 8BGG ... ELSF 0,E,TYPEREMTW(1) [CONBUFF/IREMTW BLOCK 8BP# ... THEN 8BY6 ... SBN 5 ICBUFF 8C6Y ... ANDX 5 BITS22LS 8C*Q ... LDX 4 A1(3) 8CJJ ... ANDX 4 SMSK(1) 8CRB ... ADX 4 5 8D28 ... STO 4 A1(3) 8D92 ... ELSE 8DCS ... SBN 5 CPDATA [CONBUFF/CINP BLOCK 8DLL ... ANDX 5 BITS22LS 8DTD ... STO 5 A1(3) 8F4= ... FI 8F?4 ... BRN OPERAPPK1 8FGL FI [FI 8G2= LDX 0 ACOMMUNE8(2) 8GFW SMO ACOMMUNE3(2) 8G^G STO 0 ATYPE [RESTORE BLOCK TYPE/SUBTYPE 8HF6 UP 8HYQ [ 8JDB [ 8JY2 [ SPLITTER ROUTINES BRN'D TO FROM 'TABLE' 8KCL [ 8KX= [ 8LBW XCOLNFOUND [ENTER IF FIND COLON 8LWG BCHX 2 £ [X2-> CHAR FOLLOWING : 8MB6 LDCH 7 0(2) [LOAD CHAR FOLLOWING : 8MTQ SLC 2 2 8N*B SBN 2 1 8NT2 SRC 2 2 [X2-> : 8P#L SBN 7 #20 [IF FOLLOWED BY SPACE ... 8PS= BZE 7 RECOVER [GO BACK TO FIND SUITABLE CHAR 8Q?W [ 8QRG XEDIT [SPACE, '(' OR COLON FOUND 8R?6 [REMOVE ANY PRECEDING SPACES 8RQQ LDX 5 2 [X2 -> THE SPLIT CHAR 8S=B SLC 5 2 8SQ2 SLC 3 2 8T9L SBX 5 3 [X5 = NO OF CHARS BEFORE IT ... 8TP= SRC 3 2 [ON THIS LINE 8W8W WHILE TRUE [FOR PRECEDING CHARACTERS 8WNG SLC 2 2 8X86 SBN 2 1 8XMQ SRC 2 2 8Y7B LDCH 7 0(2) 8YM2 SBN 7 #20 8^6L AND 7,ZE [WHILE THEY ARE SPACES DO 8^L= DO 925W REPEAT CT 5 [REPEAT 92KG BRN XPT [RETURN TO MAIN FLOW 9356 [ 93JQ XCOMMA [X2-> COMMA 944B SLC 2 2 94J2 SLC 3 2 953L SBX 2 3 [X2 = CHARS IN LINE UP TO COMMA 95H= SRC 3 2 [(X2 NO LONGER -> SPLIT CHAR) 962W LDX 5 2 96GG ADN 5 1 [X5 = LINE LENGTH INCL COMMA 9726 BRN XPT [RETURN TO MAIN FLOW 97FQ #PAGE 97^B [ 98F2 [ 98YL [ 99D= [ WW WW WWWWW 99XW [ WW WW WW WW 9=CG [ WW WW WW 9=X6 [ WWWW WW 9?BQ [ WWWW WW 9?WB [ WW WW WW 9#B2 [ WW WW WW 9#TL [ WW WW WWWWWWW 9**= [ 9*SW [ 9B#G OPERAPPK2 9BS6 [ 9C?Q [ 9CRB [ FILLS THE ACTIVE PAGE WITH NEWLINES AND UPDATES THE BLOCK 9D?2 [ 9DQL CALL 7 SFILLPAGE 9F== UP 9FPW #END ^^^^ ...100515520004