{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: ANALYSEA3)}}
====== ANALYSEA3 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:ALTLEN|ALTLEN]], [[george:macro:HUNT|HUNT]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MFREE|MFREE]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:MHUNTX|MHUNTX]], [[george:macro:ON|ON]], [[george:macro:PHOTO|PHOTO]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETREP|SETREP]], [[george:macro:TESTMOVE|TESTMOVE]], [[george:macro:UP|UP]]
22FL #LIS K0ANALYSEA>K0ALLGEO>K0GREATGEO>K0COMMAND
22^= #SEG ANALYSEA3 [ BILL IZATT
23DW 8HANALYSEA
23YG [ THE ENTRY POINTS
24D6 [ THESE ENTRY POINTS MUST BE KEPT FIXED WITHIN THE SEGMENT
24XQ SEGENTRY K1ANALYSEA,QENTRY1
25CB SEGENTRY K2ANALYSEA,QENTRY2
25X2 SEGENTRY K3ANALYSEA,QENTRY3
26BL [
26W= [
27*W SPACE #20
27TG XTEN #12
28*6 XALPH #41
28SQ OCT73 #73
29#B XLP #30
29S2 XRP #31
2=?L QT #22
2=R= MINUS #35
2?=W MINUS1 #77777777
2?QG #
2#=6 # THIS SEGMENT IS ENTERED FROM SEGMENT ANALYSE TO COMPLETE THE
2#PQ # IMPLEMENTATION OF THE PARALYSE AND PARANEXT MACROS. THE PARE
2*9B # PARAMETER IS SPLIT AT EACH OCCURRENCE OF THE SEPARATOR,OR IF
2*P2 # NONE SPECIFIED AT EACH END OF PAIRS OF BRACKETS,PARENTHESES
2B8L # QUOTES AND THE COMPONENTS STORED IN THE BLOCK SET UP IN ANAL
2BN= # PARALYSE THEN GOES UP; PARANEXT GOES ACROSS TO K5PARAM . K3A
2C7W # IS USED BY THE COMMAND PROCESSOR TO DETERMINE PARAMETER TYPE
2CMG QENTRY1
2D76 TESTMOVE 7,OK [BRN IF NO BLOCKS MOVED
2DLQ HUNT 3,CPB,CMULTI
2F6B LDX 2 FPTR(3) [ADDRESS OF PARENT BLOCK
2FL2 BRN OK1
2G5L OK LDX 2 5
2GK= OK1 LDX 1 6
2H4W SMO FX2
2HJG LDX 5 EXT+7
2J46 SMO FX2
2JHQ LDX 7 EXT+4 [LOAD SEPARATOR
2K3B BPZ 7 SEP [BRANCH IF SEPARATOR SPECIFIED
2KH2 #
2L2L # NO SEPARATOR SPECIFIED
2LG= #
2L^W SBN 4 2
2MFG BZE 4 SCOMP [BRANCH IF PARAMETER COMPOSITE
2M^6 SBN 4 1
2NDQ BNZ 4 XADR [BRN IF SIMPLE OR PSEUDO-SIMPLE
2NYB #
2PD2 # QUALIFIED PARAMETER (NO SEPARATOR SPECIFIED)
2PXL #
2QC= QUAL SMO 2
2QWW LDCH 4 0(1) [TAKE FIRST CHARACTER
2RBG WHAT CALL 0 TESTBRAC [TEST FOR BRACKET
2RW6 BRN £ [BRANCH IF NOT
2S*Q TFCH SMO 2
2STB LDCH 4 0(1) [TAKE FIRST CHARACTER
2T*2 SMO FX2
2TSL LDX 5 EXT+7 [CHARACTER COUNT
2W#= BCT 5 STOCT [BRANCH IF NOT END OF PARAMETER
2WRW CALL 7 STORECH [STORE LAST CHARACTER
2X?G BRN ZEND [BRANCH TO TERMINATE BLOCK
2XR6 STOCT SMO FX2
2Y=Q STO 5 EXT+7 [CHARACTER COUNT
2YQB BCHX 1 £
2^=2 STOCH CALL 7 STORECH [STORE CHARACTER
2^PL SMO 2
329= LDCH 4 0(1) [TAKE A CHARACTER
32NW STO 1 6 [POINTER TO THIS CHARACTER
338G BCHX 1 £ [UPDATE POINTER
33N6 STO 1 APTNECHA(2) [ AND STORE
347Q SMO FX2
34MB LDX 5 EXT+7 [COUNT OF NUMBER OF CHARACTERS IN OLD
3572 BCT 5 NEND [BRANCH IF NOT END
35LL CALL 7 STORECH [END OF PARAMETER, STORE LAST CHARACT
366= BRN ZEND [BRANCH TO TERMINATE BLOCK
36KW NEND SMO FX2
375G STO 5 EXT+7 [STORE CHARACTER COUNT
37K6 LDX 0 CPBFSD(3) [BRACKET COUNT
384Q BNZ 0 TBTY
38JB SMO FX1
3942 TXU 4 SPACE
39HL BCS CTB1 [NOT SPACE,CARRY ON AS BEFORE
3=3= LDN 7 0
3=GW TNC2 ADN 7 1 [SPACE COUNT
3?2G SMO 2
3?G6 LDCH 4 0(1) [TAKE NEXT CHAR
3?^Q SMO FX1
3#FB TXU 4 SPACE
3#^2 BCS NMSP
3*DL BCHX 1 £
3*Y= BRN TNC2
3BCW NMSP CALL 0 TESTBRAC
3BXG BRN XLD [NOT BRACKET,SPACES SIGNIFICANT
3CC6 SBN 7 1
3CWQ SMO FX2 [IS BRACKET,SPACES REDUNDANT
3DBB SBS 7 EXT+7 [REDUCE CHAR COUNT BY SPACE COUNT
3DW2 STOZ 4 [SPACES ARE TRAILINC,
3F*L STO 1 APTNECHA(2)
3FT= CALL 7 TER [TERMINATE PARAMETER
3G#W LDX 1 APTNECHA(2)
3GSG BRN TFCH
3H#6 #
3HRQ XLD SMO FX2
3J?B SBS 7 EXT+7 [REDUCE CHARACTER COUNT BY SPACE COUN
3JR2 SMO FX1
3K=L LDX 4 SPACE
3KQ= XLDA SMO FX2
3L9W STO 7 EXT+3
3LPG CALL 7 STORECH [STO SIGNIFICANT SPACE
3M96 SMO FX2
3MNQ LDX 7 EXT+3
3N8B BCT 7 XLDA [BRN IF SPACE COUNT NOT EXHAUSTED
3NN2 SMO 2
3P7L LDCH 4 0(1) [GET NEXT CHAR AFTER SPACE
3PM= BCHX 1 £
3Q6W SMO FX2
3QLG LDX 5 EXT+7 [CHARACTER COUNT
3R66 BNZ 5 STOCH [CONTINUE IF COUNT NOT EXHAUSTED
3RKQ CALL 7 STORECH [STO LAST CHARACTER
3S5B BRN ZEND
3SK2 #
3T4L CTB1 CALL 0 TESTBRAC
3TJ= BRN STOCH [BRANCH IF NOT BRACKET
3W3W STO 6 APTNECHA(2) [IS BRACKET,END OF PARAMETER,SET PTR.
3WHG LDN 0 1
3X36 SMO FX2
3XGQ ADS 0 EXT+7 [SET CHARACTER COUNT BACK
3Y2B STOZ 4
3YG2 CALL 7 TER [TERMINATE PARAMETER
3Y^L LDX 1 APTNECHA(2) [POINTER TO FIRST CHARACTER OF NEW PA
3^F= BRN TFCH
3^YW TBTY CALL 7 TINBRAC [BRACKET COUNT NON ZERO, TEST FOR BRA
42DG BRN STOCH [BRANCH IF BRACKET COUNT STILL NON ZE
42Y6 CALL 7 STORECH [END OF PARAMETER, STORE CHARACTER
43CQ STOZ 4
43XB CALL 7 TER [TERMINATE PARAMETER
44C2 LDX 1 APTNECHA(2) [POINTER TO FIRST CHARACTER OF NEW PA
44WL SMO FX2
45B= LDX 5 EXT+7 [CHARACTER COUNT
45TW CALL 0 XLSPTEST [ANNIHILATE LEADING SPACES
46*G SMO FX2
46T6 STO 5 EXT+7 [CHARACTER COUNT
47#Q BRN WHAT
47SB #
48#2 # COMPOSITE PARAMETER (NO SEPARATOR SPECIFIED)
48RL #
49?= SCOMP CALL 7 SCOMPOST
49QW CALL 0 XLSPTEST [IGNORE LEADING SPACES
4==G NEND1 SMO FX2
4=Q6 STO 5 EXT+7 [CHARACTER COUNT
4?9Q NENDA CALL 7 STORECH [STORECH IF NOT SPACE
4?PB SMO FX2
4#92 LDX 5 EXT+7 [CHARACTER COUNT
4#NL BCT 5 NEND2 [BRN IF NOT END
4*8= BRN ZEND [END OF PARAMETER
4*MW NEND2 BCHX 1 £
4B7G SMO 2
4BM6 LDCH 4 0(1) [TAKE A CHARACTER
4C6Q SMO FX1
4CLB TXU 4 SPACE
4D62 BCS NEND1 [STORECH IF NOT SPACE
4DKL STO 1 APTNECHA(2) [HOLD ADDRESS OF FIRST SPACE
4F5= LDN 0 0
4FJW STWO ADN 0 1 [ADD 1 TO SPACE COUNT
4G4G BCT 5 PLUS2
4GJ6 BRN ZEND [BRN IF NO MORE CHARACTERS
4H3Q PLUS2 BCHX 1 £
4HHB SMO 2
4J32 LDCH 4 0(1) [TAKE NEXT CHARACTER
4JGL SMO FX1
4K2= TXU 4 SPACE
4KFW BCC STWO [BRN IF ANOTHER SPACE
4K^G LDX 1 APTNECHA(2) [ADDRESS OF FIRST SPACE
4LF6 SMO FX2
4LYQ STO 5 EXT+7 [CHARACTER COUNT
4MDB STSP SMO 2
4MY2 LDCH 4 0(1)
4NCL SMO FX2
4NX= STO 0 EXT+3 [SPACE COUNT
4PBW CALL 7 STORECH [STO SIGNIFICANT SPACE
4PWG SMO FX2
4QB6 LDX 0 EXT+3 [SPACE COUNT
4QTQ BCHX 1 £ [ADDRESS OF NEXT SPACE IN 1
4R*B BCT 0 STSP [BRN IF SPACE COUNT NOT EXHAUSTED
4RT2 #
4S#L XADR SMO 2 [ENTRY FOR SIMPLE + PSEUDO-SIMPLE PAR
4SS= LDCH 4 0(1) [TAKE NEXT CHARACTER (NON-SPACE)
4T?W BRN NENDA [BRN TO STORE THIS CHARACTER
4TRG #
4W?6 # SEPARATOR SPECIFIED (ALL PARAMETER TYPES)
4WQQ #
4X=B SEP SBN 4 2
4XQ2 BNZ 4 TACH [BRANCH IF PARAMETER NOT COMPOSITE
4Y9L CALL 7 SCOMPOST
4YP= CALL 0 XLSPTEST [IGNORE LEADING SPACES
4^8W BRN TACH
4^NG UDMOD BCHX 1 £ [UPDATE CHARACTER POINTER
5286 TACH SMO FX2
52MQ STO 5 EXT+7 [STO CHARACTER COUNT
537B SMO 2
53M2 LDCH 4 0(1) [TAKE A CHARACTER
546L LDX 0 CPBFSD(3) [BRACKET COUNT
54L= BZE 0 TSP [BRANCH IF ZERO
555W CALL 7 TINBRAC [BRACKET COUNT NON ZERO, TEST FOR BRA
55KG BRN UDCHC [COUNT NON ZERO
5656 BRN UDCHC [COUNT ZERO
56JQ #
574B TSP SMO FX2
57J2 TXU 4 EXT+4 [TEST FOR SEPARATOR
583L BCS TLP [BRANCH IF NOT
58H= SEPR STOZ 4
592W STO 1 APTNECHA(2)
59GG CALL 7 TER [TERMINATE PARAMETER
5=26 LDX 1 APTNECHA(2)
5=FQ SMO FX2
5=^B LDX 5 EXT+7 [LOAD CHARACTER COUNT OF OLD PARAMETE
5?F2 SBN 5 1
5?YL BZE 5 ZENDA [END IF NO MORE CHARACTERS
5#D= BCHX 1 £ [UPDATE CHARACTER POINTER
5#XW CALL 0 XLSPTEST [IGNORE LEADING SPACES
5*CG BRN TACH
5*X6 #
5BBQ TSPT SMO FX1
5BWB TXU 4 SPACE
5CB2 BCC PLUS3 [BRN IF SPACE
5CTL BRN UDCHC
5D*= #
5DSW PLUS3 LDN 0 0
5F#G SMO FX2
5FS6 LDX 5 EXT+7 [CHARACTER COUNT
5G?Q PLUS4 ADN 0 1 [SPACE COUNT
5GRB SBN 5 1 [REDUCE CHARACTER COUNT
5H?2 BZE 5 ZENDA [COMPOSITE TRAILERS
5HQL BCHX 1 £
5J== SMO 2
5JPW LDCH 4 0(1) [TAKE NEXT CHARACTER
5K9G SMO FX1
5KP6 TXU 4 SPACE
5L8Q BCC PLUS4 [BRN IF ANOTHER SPACE
5LNB SMO FX2
5M82 STO 5 EXT+7 [CHARACTER COUNT
5MML SMO FX2
5N7= TXU 4 EXT+4
5NLW BCC SEPR [BRN IF SEPARATOR FOLLOWS SPACES
5P6G SMO FX1
5PL6 LDX 4 SPACE
5Q5Q XSMO SMO FX2
5QKB STO 0 EXT+3 [SPACE COUNT
5R52 CALL 7 STORECH [STORE SPACE
5RJL SMO FX2
5S4= LDX 0 EXT+3
5SHW BCT 0 XSMO [BRN IF SPACE COUNT NOT EXHAUSTED
5T3G SMO 2
5TH6 LDCH 4 0(1) [TAKE 1ST CHARACTER AFTER SPACES
5W2Q STO 4 5 [PRESERVE X4
5WGB CALL 0 TESTBRAC
5X22 BRN UDCHC
5XFL LDX 4 5
5X^= BRN UDCHC
5YDW #
5YYG TLP STO 4 5 [HOLD CHARACTER
5^D6 CALL 0 TESTBRAC [TEST FOR BRACKET
5^XQ BRN TSPT [NOT A BRACKET
62CB LDX 4 5
62X2 #
63BL UDCHC CALL 7 STORECH [STORE CHARACTER
63W= TEP SMO FX2
64*W LDX 5 EXT+7 [LOAD CHARACTER COUNT OF OLD PARAMETE
64TG BCT 5 UDMOD [BRANCH IF END OF PARAMETER NOT REACH
65*6 #
65SQ # END OF PARAMETER IF SEPARATOR SPECIFIED
66#B # THE CHARACTER IS TESTED FOR BEING A BRACKET BEFORE END
66S2 # OF PARAMETER IS TESTED FOR:SHOULD NOT BE TESTED TWICE
67?L #
67R= ZENDA LDX 0 CPBFSD(3)
68=W BZE 0 ZEND1
68QG BRN SUSP
69=6 #
69PQ # END OF PARAMETER
6=9B #
6=P2 ZEND
6?8L LDX 0 CPBFSD(3) [BRACKET COUNT
6?N= BZE 0 TESTO
6#7W CALL 7 TINBRAC [MATCHING BRACKET ?
6#MG BRN SUSP [LOOKS SUSPICOUS
6*76 BRN ZEND1 [YES
6*LQ TESTO CALL 0 TESTBRAC [OPENING BRACKET?
6B6B BRN ZEND1 [NO
6BL2 SUSP SMO FX2
6C5L LDX 4 EXT+2
6CK= BNZ 4 UNPAIR [ONLY ERROR IF NOT COMPOSITE
6D4W ZEND1 NGN 4 1
6DJG CALL 7 TER [TERMINATE LAST PARAMETER & SET END O
6F46 NULP
6FHQ LDN 7 APARAFIR
6G3B SLL 7 12
6GH2 ADN 7 1
6H2L STO 7 APTBEPAR(3) [SET FOR 1ST PASS
6HG= STO 7 ADNOPARAL(3) [SET FOR 1ST ANALYSE
6H^W STOZ APTNECHA(2)
6JFG # TEST FOR PARALYSE OR PARANEXT
6J^6 TWCH SMO FX2
6KDQ LDX 7 EXT+5
6KYB SETREP OK
6LD2 BNZ 7 NEXT [BRANCH IF PARANEXT
6LXL UP [RETURN IF PARALYSE
6MC= NEXT
6MWW SMO FX2
6NBG STO 7 EXT+7 [SET EXT+7=-1 FOR SPARAPAS
6NW6 UDAL NGN 7 1
6P*Q SMO FX2
6PTB STO 7 EXT+2 [SET "LOWEST" ANALEV FOR PARAPASS
6Q*2 ACROSS PARAM,25 [BRN TO PASS FIRST PARAMETER
6QSL #
6R#= # SUBROUTINE TO TERMINATE A PARAMETER
6RRW #
6S?G TER LDX 1 APTNECHA(3)
6SR6 SLC 1 2
6T=Q ADN 1 3
6TQB SRL 1 2 [ROUND TO WHOLE NO. OF WORDS
6W=2 STO 1 APTNECHA(3) [STO POINTER TO FIRST WORD OF NEW PAR
6WPL SBN 1 A1-1 [LOGICAL LENGTH NEEDED
6X9= TXL 1 ALOGLEN(3) [COMPARE WITH ACTUAL LOGICAL LENGTH
6XNW BCS ON [BRANCH IF SUFFICIENT CORE
6Y8G LDX 6 ALOGLEN(3)
6YN6 ADN 6 AVELINE [EXTEND CORE BY AVERAGE LINE LENGTH
6^7Q SBX 7 FX1
6^MB PHOTO 5
7272 ALTLEN 3,6,CPB,CMULTI [ INCREASE BLOCK SIZE
72LL TESTMOVE 5,RES [BRANCH IF NO BLOCKS MOVED
736= HUNT 3,CPB,CMULTI
73KW RES ADX 7 1 [ RESTORE RETURN ADDRESS (X1=FX1)
745G BRN NJOIN
74K6 ON LDX 1 FX1
754Q LDX 2 FX2 [ X2 WILL BE RESTORED ON EXIT
75JB NJOIN SMO APTNECHA(3) [ POINTER TO NEXT PARAMETER
7642 STO 4 0(3) [ZEROISE 1ST WORD OR SET END OF BLOCK
76HL LDN 6 1 [ X6=1 => TER S/R. RESTORE X2 AT END
773= ADS 6 APARANUM(3) [ADD 1 TO NUMBER OF PARAMETERS
776B ... LDX 6 APARANUM(3)
779G ... SBN 6 25
77#L ... BPZ 6 TOOMANY
77CQ ... LDN 6 1 [INDICATES TER SUBR
77GW #
782G # SUBROUTINE ENTERED HERE BY COMMAND PROCESSOR VIA K3ANALYS
78G6 #
78^Q SCENT
79FB STO 3 ACOMMUNE3(2)
79^2 ADX 3 APTBEPAR(3)
7=DL STO 7 AWORK1(2)
7=Y= LDX 7 0(3) [CHARACTER COUNT
7?CW BNG 7 UP [BRN IF NO MORE PARAMETERS (CP)
7?XG ADN 3 1 [EVALUATE ADDRESS OF 1ST CHARACTER
7#C6 BRN PTYPE1
7#WQ [
7*BB QENTRY2
7*W2 LDX 0 ACOMMUNE1(2)
7B*L TESTMOVE 0,NMV
7BT= LDX 3 ACOMMUNE2(2)
7C#W SLL 3 12
7CSG MHUNTX 3,3
7D#6 STO 3 ACOMMUNE3(2) [NEW START ADDRESS
7DRQ BRN XFND
7F?B NMV LDX 3 ACOMMUNE3(2)
7FR2 XFND ADX 3 ACOMMUNE4(2) [ABSOLUTE PTR. TO 1ST CHARACTER
7G=L LDX 7 ACOMMUNE5(2) [COUNT OF CHARACTERS
7GQ= NGN 6 1 [INDICATE PTYPE MACRO
7H9W PTYPE1
7HPG STOZ 5 [SET 'SIMPLE'
7J96 BZE 7 UUU [BRN IF NULL PARAMETER
7JNQ LDCH 4 0(3) [GET 1ST CHARACTER
7K8B TXU 4 XLP(1)
7KN2 BCC XLPA [BRN IF LEFT PARENTHESIS
7L7L TXU 4 QT(1)
7LM= BCC QTA [BRN IF QUOTE
7M6W TXU 4 XRP(1)
7MLG BCC WQUAL
7N66 BRN STINT
7NKQ NEXTZ
7P5B LDCH 4 0(3) [GET NEXT CHARACTER
7PK2 TXU 4 XRP(1)
7Q4L BCC WQUAL [BRN IF QUALIFIED
7QJ= TXU 4 XLP(1)
7R3W BCC WQUAL [BRN IF QUALIFIED
7RHG TXU 4 QT(1)
7S36 BCC WQUAL [BRN0IF QUALIFIED
7SGQ BNZ 5 NPSEV [BRN IF NOT 'SIMPLE'
7T2B STINT
7TG2 TXL 4 OCT73(1)
7T^L BCC PSEV [BRN IF NOT 'SIMPLE' ANY MORE
7WF= TXL 4 XALPH(1)
7WYW BCC NPSEV [BRN IF LETTER
7XDG TXL 4 XTEN(1)
7XY6 BCS NPSEV [BRN IF DIGIT
7YCQ TXU 4 SPACE(1)
7YXB BCC NPSEV [BRN IF SPACE
7^C2 TXU 4 MINUS(1)
7^WL BCC NPSEV
82B= PSEV LDN 5 1 [SET 'PSENDO-SIMPLE'
82TW NPSEV BCHX 3 £
83*G BCT 7 NEXTZ
83T6 #
84#Q # END OF PARAMETER: INSERT TYPE AND LENGTH IN SPECIFIED WORD
84SB UUU
85#2 SLL 5 12
85RL BPZ 6 STORETYPE2 [BRN IF ANALYSE/CP
86?= ADX 5 ACOMMUNE5(2)
86QW LDX 3 ACOMMUNE3(2)
87=G ADX 3 ACOMMUNE6(2)
87Q6 STO 5 0(3)
889Q UP
88PB STORETYPE2
8992 LDX 3 ACOMMUNE3(2)
89NL SMO APTBEPAR(3)
8=8= ORS 5 0(3) [INSERT PARAMETER TYPE
8=MW LDX 7 AWORK1(2)
8?7G BZE 6 XIT70
8?M6 LDX 2 FPTR(3) [ RESTORE X2 FOR EXIT FROM TER S/R
8#6Q LDX 0 APTNECHA(3)
8#LB STO 0 APTBEPAR(3)
8*62 ADN 0 1
8*KL STO 0 APTNECHA(3)
8B5= XIT70
8BJW EXIT 7 0
8C4G XLPA
8CJ6 SBN 7 2 [WE WANT TO TEST ALL BUT LAST CHAR.
8D3Q BNG 7 WQUAL
8DHB BZE 7 XLPE
8F32 XLPB BCHX 3 £
8FGL LDCH 4 0(3)
8G2= TXU 4 XLP(1)
8GFW BCC XLPC
8G^G TXU 4 XRP(1)
8HF6 BCS XLPB1
8HYQ BNZ 7 WQUAL
8JDB BRN WCOMP
8JY2 XLPB1
8KCL BCT 7 XLPB
8KX= XLPE
8LBW BCHX 3 £
8LWG LDCH 4 0(3)
8MB6 TXU 4 XRP(1)
8MTQ BCC WCOMP
8N*B BRN WQUAL
8NT2 XLPC BCT 7 XLPC1
8P#L BRN XLPE
8PS= XLPC1 LDN 0 1 [SORT OF DELIMITER COUNT
8Q?W XLPD BCHX 3 £
8QRG LDCH 4 0(3)
8R?6 TXU 4 XRP(1)
8RQQ BCS NOTRP
8S=B SBN 0 1
8SQ2 BNG 0 WQUAL
8T9L NOTRP
8TP= TXU 4 XLP(1)
8W8W BCS NOTLP
8WNG ADN 0 1
8X86 NOTLP BCT 7 XLPD
8XMQ BZE 0 XLPE
8Y7B BRN WQUAL
8YM2 QTA
8^6L SBN 7 1
8^L= BZE 7 WQUAL [ONLY ONE CHARACTER
925W SLC 3 2 [ABSOLUTE POINTER TO LAST CHARACTER
92KG ADX 3 7
9356 SRC 3 2
93JQ LDCH 7 0(3) [X7HOLDS LAST CHAR OF PARAMETER
944B TXU 7 QT(1)
94J2 BCC WCOMP [IF TERMINAL CHARS BOTH QUOTES,COMPOS
953L WQUAL
95H= LDN 5 3 [SET QUALIFIED
962W BRN UUU
96GG WCOMP
9726 LDN 5 2 [SET COMPOSITE
97FQ BRN UUU
97^B #
98F2 # SUBROUTINE TO TEST FOR BRACKET WHEN BRACKET COUNT ZERO
98YL #
99D= TESTBRAC
99XW SMO FX1
9=CG TXU 4 XLP [TEST FOR (
9=X6 BCS STLB [BRANCH IF NOT
9?BQ SLL 4 12
9?WB SMO FX1
9#B2 ORX 4 XRP [SET ( AS BRACKET
9#TL BRN STOB
9**= STLB SMO FX1
9*SW TXU 4 QT [TEST FOR "
9B#G BCC SAP [BRANCH IF IS
9BS6 EXIT 0 0 [NOT'BRACKET',EXIT
9C?Q SAP SLL 4 12
9CRB SMO FX1
9D?2 ORX 4 QT [SET " AS BRACKET
9DQL STOB SMO FX2
9F== STO 4 EXT+6 [STORE BRACKET TYPE
9FPW LDN 4 1
9G9G ADS 4 CPBFSD(3) [ADD 1 TO BRACKET COUNT
9GP6 EXIT 0 1 [RETURN
9H8Q #
9HNB # SUBROUTINE TO TEST FOR BRACKET WHEN BRACKET COUNT IS NON
9J82 #
9JML TINBRAC
9K7= SMO FX2
9KLW LDX 5 EXT+6
9L6G SRL 56 12 [ISOLATE LEFT BRACKET
9LL6 SRL 6 12 [ISOLATE RIGHT BRACKET
9M5Q TXU 4 6 [TEST FOR 'CLOSE'
9MKB BCS TOP [BRANCH IF NOT
9N52 SBN 0 1 [SUBTRACT 1 FROM BRACKET COUNT
9NJL STO 0 CPBFSD(3)
9P4= BNZ 0 ZRET [BRANCH IF BRACKET COUNT NON-ZERO
9PHW EXIT 7 1 [RETURN, BRACKET COUNT ZERO
9Q3G TOP TXU 4 5 [TEST FOR 'OPEN'
9QH6 BCS ZRET [BRANCH IF NOT
9R2Q ADN 0 1 [ADD 1 TO BRACKET COUNT
9RGB STO 0 CPBFSD(3)
9S22 ZRET EXIT 7 0 [RETURN, BRACKET COUNT NON ZERO
9SFL #
9S^= # SUBROUTINE TO IGNORE LEADING SPACES
9TDW #
9TYG XLSPTEST
9WD6 SMO 2
9WXQ LDCH 4 0(1) [TAKE A CHAR
9XCB SMO FX1
9XX2 TXU 4 SPACE
9YBL BCC TNC [BRN IF SPACE
9YW= EXIT 0 0 [EXIT NO SPACES
9^*W TNC SBN 5 1 [REDUCE CHAR COUNT FOR EACH SPACE
9^TG BZE 5 ZEND [END IF NO MORE CHARS
=2*6 BCHX 1 £ [1 IS UPDATED
=2SQ SMO 2
=3#B LDCH 4 0(1) [TAKE NEXT CHAR
=3S2 SMO FX1
=4?L TXU 4 SPACE
=4R= BCC TNC [BRN IF ANOTHER SPACE
=5=W EXIT 0 0
=5QG #
=6=6 # SUBROUTINE TO STORE A CHARACTER
=6PQ #
=79B STORECH
=7P2 STO 1 APTNECHA(2)
=88L LDN 0 1
=8N= LDX 5 APTBEPAR(3) [POINTER TO BEGINNING OF PARAMETER
=97W SMO 5
=9MG ADS 0 0(3) [ADD 1 TO PARAMETER CHARACTER COUNT
==76 LDX 5 APTNECHA(3) [POINTER TO NEXT CHARACTER
==LQ SLL 5 2
=?6B SRL 5 2 [NUMBER OF WORDS IN BLOCK
=?L2 SBN 5 A1-1 [ADD 1 AND SUBTRACT RED TAPE
=#5L TXL 5 ALOGLEN(3)
=#K= BCS NCOR [BRANCH IF SUFFICIENT CORE
=*4W LDX 5 ALOGLEN(3)
=*JG ADN 5 AVELINE [EXTEND CORE BY AVERAGE LINE LENGTH
=B46 SBX 7 FX1
=BHQ SMO FX2
=C3B STO 7 EXT+1 [STORE RETURN ADDRESS
=CH2 STO 2 7 [STORE ADDRESS OF OLD BLOCK
=D2L PHOTO 6
=DG= ALTLEN 3,5 [INCREASE BLOCK SIZE
=D^W LDX 2 7
=FFG TESTMOVE 6,NSER [BRANCH IF NO BLOCKS MOVED
=F^6 HUNT 3,CPB,CMULTI
=GDQ LDX 2 FPTR(3)
=GYB NSER SMO FX2
=HD2 LDX 7 EXT+1
=HXL ADX 7 FX1 [RETURN ADDRESS
=JC= NCOR LDX 1 APTNECHA(3) [POINTER TO NEXT CHARACTER
=JWW SMO 3
=KBG DCH 4 0(1) [STORE CHARACTER
=KW6 BCHX 1 £ [UPDATE POINTER
=L*Q STO 1 APTNECHA(3) [ AND STORE
=LTB LDX 1 APTNECHA(2)
=M*2 EXIT 7 0 [RETURN
=MSL #
=N#= # SUBROUTINE TO CHECK THAT A 'COMPOSITE' PARAMETER IS IN FACT INCLUD
=NRW # IN A BRACKET PAIR
=P?G #
=PR6 SCOMPOST
=Q=Q SMO FX2
=QQB STOZ EXT+2 ['COMPOSITE MARKER
=R=2 SMO 2
=RPL LDCH 4 0(1)
=S9= STOZ CPBFSD(3) [ZEROISE BRACKET COUNT
=SNW SBN 5 2 [REDUCE CHARACTER COUNT BY 2
=T8G BNZ 5 UNUL [BRN IF NOT NULL PARAMETER
=TN6 STOZ APARAFIR(3) [SET
=W7Q LDN 4 1 [RED
=WMB STO 4 APARANUM(3) [TAPE
=X72 NGS 4 APARAFIR+1(3) [WORDS
=XLL BRN NULP
=Y6= UNUL
=YKW BCHX 1 £
=^5G EXIT 7 0
=^K6 #
?24Q # ROUTINE ENTERED IF AN UNPAIRED BRACKET ENCOUNTERED
?27* ...# OR TOO MANY PARAMETERS FOUND ON SPLITTING A PARAMETER
?29Y ...#
?2#H ...TOOMANY
?2C6 ... SETREP TOOMANY
?2FP ... BRN XFREE
?2JB UNPAIR
?2PJ ... SETREP UNPAIR
?2WQ ...XFREE
?342 MFREE CPB,CMULTI
?43= UP
?4GW [
?52G [ ENTRY FROM COMMAND PROCESSOR
?5G6 QENTRY3
?5^Q MHUNTW 3,CPB,CALAS
?6FB LDN 4 APARAFIR
?6^2 STO 4 APTBEPAR(3)
?7DL LDN 6 0 [INDICATE C/P
?7Y= SCENTCALL
?8CW CALL 7 SCENT [SET PARAMETER TYPE
?8XG SMO APTBEPAR(3)
?9C6 LDX 7 0(3)
?9WQ ANDN 7 #7777
?=BB ADN 7 7
?=W2 SRL 7 2
??*L ADS 7 APTBEPAR(3)
??T= BRN SCENTCALL
?##W UP
?#SG UP
?*#6 MENDAREA 30,K99ANALYSEA
?*RQ #END
^^^^ ...57322164000300000000