{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: MULTCOMM867)}}
====== MULTCOMM867 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:CHAIN|CHAIN]], [[george:macro:MFREEW|MFREEW]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETXCORE|SETXCORE]]
22FL SEG MULTCOMM,,CENT(COMMAND PROCESSOR),,G286
22^= #SKI G286&1
23DW # FOR UGUG EDIT M286 (MULTI-COMMAND LINES)
23YG # OVERFLOW SEGMENT FOR COMPRO
24D6 [ THE ENTRY POINTS
24XQ [ THESE ENTRY POINTS MUST BE KEPT FIXED WITHIN THE SEGMENT
25CB SEGENTRY K1MULTCOMM,QENTRY1 [ TO SET UP MULTI COMM LINE BLOCK
25X2 SEGENTRY K2MULTCOMM,QENTRY2 [ TO GET NEXT COMMAND FROM MULTI B
26BL #
26W= QENTRY2
27*W SETXCORE 7,2,ADATA,CREADL [ CREATE CREADL BLOCK TO HOLD NEXT
27TG [ COMMAND FROM IUSER BLOCK
28*6 MHUNTW 3,IUSER,HULL
28SQ LDCT 0 #400
29#B ANDX 0 A1(3)
29S2 SMO FX2
2=?L ORS 0 EXT+9 [ SET TO SHIFT OR GRAPHIC
2=R= BRN XCCS11
2?=W #
2?QG QENTRY1
2#=6 SETXCORE 7,3,IUSER,HULL
2#PQ LDCT 0 #400
2*9B ANDX 0 EXT+9(2)
2*P2 ORX 7 0 [ REMEMBER IF SHIFT OR GRAPHIC
2B8L STO 7 A1(3) [ SIZE OF BLOCK
2BN= MHUNTW 2,CLB
2C7W CHAIN 3,2 [ STICK IUSER AFTER CLB
2CMG MHUNTW 2,ADATA,CREADL
2D76 LDN 4 CPDATA(2)
2DLQ LDN 5 A1+3(3)
2F6B LDX 1 A1(2)
2FL2 STO 1 A1+1(3) [ NUMBER OF CHARS LEFT IN IUSER/HULL
2G5L SRL 1 2 [ CONVERT TO WORDS
2GK= MOVE 4 1(1) [ WORD MOVE IN CASE > 512 CHARS
2H4W STOZ A1+2(3) [ CHARACTER ADDRESS OF NEXT '('
2HJG XCCS11
2J46 LDX 1 A1+1(3) [ NO OF CHARS LEFT IN IUSER BLOCK
2JHQ LDN 6 A1+3(3) [ X6 REMAINS CONSTANT (=ADDRESS OF IU
2K3B ADN 2 CPDATA [ X2 = CHAR ADDRESS OF NEXT DCH IN CR
2KH2 LDX 3 A1+2(3) [ CHARACTER ADDRESS OF NEXT '(' IN IU
2L2L LDN 7 0 [ COUNT OF CHARS IN NEXT COMMAND
2LG= LDN 0 1 [ 1 '('
2L^W SBN 1 1
2MFG BZE 1 XCCS7 [ ONLY A '('
2M^6 XCCS3
2NDQ BCHX 3 £ [ INPUT BLOCK + 1 CHAR
2NYB SMO 6
2PD2 LDCH 5 0(3) [ NEXT CHAR
2PXL LDX 4 5 [ REMEMBER IT
2QC= SBN 5 #30 [ '('
2QWW BNZ 5 XCCS2 [ NO
2RBG ADN 0 1 [ '(' + 1
2RW6 XCCS5
2S*Q BZE 0 XCCS6 [ BRN IF BRACKETS MATCH
2STB XCCS4
2T*2 DCH 4 0(2)
2TSL ADN 7 1
2W#= BCHX 2 £ [ OUTPUT BLOCK + 1 CHAR
2WRW BCT 1 XCCS3 [ UNTIL INPUT BLOCK EMPTY
2X?G XCCS7
2XR6 LDN 1 1
2Y=Q BRN XCCS6 [ NO MATCHING ')' BUT PROBABLY OK
2YQB XCCS2
2^=2 SBN 5 1
2^PL BNZ 5 XCCS4 [ BRN IF NOT ')'
329= SBN 0 1 [ ')' - 1
32NW BRN XCCS5
338G XCCS6
33N6 MHUNTW 2,ADATA,CREADL
347Q BNZ 7 XCCS12
34MB LDN 7 1 [ NULL COMMAND
3572 LDN 0 #20
35LL DCH 0 CPDATA(2)
366= XCCS12
36KW STO 7 A1(2) [ CHARACTER COUNT
375G SBN 1 1
37K6 BNZ 1 XCCS8 [ BRN IF IUSER/HULL NOT EMPTY
384Q XCCS10
38JB MFREEW IUSER,HULL [ NO MORE COMMANDS LEFT
3942 BRN XCCS1
39HL XCCS8
3=3= BCHX 3 £
3=GW SMO 6
3?2G LDCH 5 0(3)
3?G6 SBN 5 #30 [ SEARCH FOR NEXT '(' IF ANY
3?^Q BZE 5 XCCS9
3#FB BCT 1 XCCS8
3#^2 BRN XCCS10 [ NONE
3*DL XCCS9
3*Y= LDX 2 6
3BCW SBN 2 A1+3
3BXG STO 1 A1+1(2) [ CHARS LEFT IN IUSER BLOCK
3CC6 STO 3 A1+2(2) [ CHARACTER ADDRESS OF NEXT '('
3CWQ XCCS1
3DBB ACROSS ALAS,1
3DW2 #END
^^^^ ...342011360001