{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: OPERAPP864)}}
====== OPERAPP864 ======
(George Source)
**Macros used:** [[george:macro:ALTLEN|ALTLEN]], [[george:macro:AND|AND]], [[george:macro:BXE|BXE]], [[george:macro:BXGE|BXGE]], [[george:macro:DO|DO]], [[george:macro:ELSE|ELSE]], [[george:macro:ELSF|ELSF]], [[george:macro:FI|FI]], [[george:macro:IF|IF]], [[george:macro:INSERT|INSERT]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:REPEAT|REPEAT]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:THEN|THEN]], [[george:macro:UP|UP]], [[george:macro:WHILE|WHILE]]
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