{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: DECODE860)}} ====== DECODE860 ====== (George Source) **Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:ALTLEN|ALTLEN]], [[george:macro:BXU|BXU]], [[george:macro:DOWN|DOWN]], [[george:macro:FINDCORE|FINDCORE]], [[george:macro:FREECORE|FREECORE]], [[george:macro:GEOERR|GEOERR]], [[george:macro:GETCOREN|GETCOREN]], [[george:macro:HUNT|HUNT]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MFREE|MFREE]], [[george:macro:MHUNT|MHUNT]], [[george:macro:NAME|NAME]], [[george:macro:PARAFREE|PARAFREE]], [[george:macro:PARANEXT|PARANEXT]], [[george:macro:PARANOT|PARANOT]], [[george:macro:PARANUMB|PARANUMB]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:SETREP|SETREP]], [[george:macro:SPARANOX|SPARANOX]], [[george:macro:TESTPAIR|TESTPAIR]], [[george:macro:TESTREP|TESTREP]], [[george:macro:TESTREP2|TESTREP2]], [[george:macro:TRACE|TRACE]], [[george:macro:UP|UP]] 22FL #LIS K0DECODE>K0ALLGEO>K0GREATGEO>K0FILESTORE 22^= #SEG DECODE5 [ TONY HAMILTON 23DW 8HDECODE 23YG # THIS CHAPTER IS THE CONTROLLING ROUTINE FOR THE FNORM MACRO 24D6 # INPUT MUST BE A FILENAME PARAMETER BLOCK (FILE/FNAME) AND THE 24XQ # CORRESPONDING MULTI BLOCK AS PRODUCED BY ALAS OR PARALYSE. 25CB # IT DECODES THE FILENAME PARAMETER,USING THE PARAMETER TYPE FROM 25X2 # THE FILE/FNAME BLOCK AND GOES DOWN TO NORMALUS,WHICH SETS UP 26BL # A FILE/FABSNB.WHEN THE FILENAME IS QUALIFIED,NORMALUS GOES DOWN TO 26W= # ADJUNCTS WHICH SETS UP A FILE/ADJUNCTS BLOCK 27*W # **** 27TG [ 28*6 SEGENTRY K1DECODE,XFNORM [FNORM WITH PARAMETER 28SQ SEGENTRY K2DECODE,ZFNORM [FNORM WITHOUT PARAMETER 29#B SEGENTRY K3DECODE,TIDYUP 29S2 SFNORM 2=?L #HAL FI+FNORM,0 2=R= SCUNI 2?=W #HAL CPB+CUNI,0 2?QG [ 2#=6 ZFNORM 2#PQ [ 2*9B STOZ ACOMMUNE9(2) 2*P2 [ 2B8L XFNORM 2BN= [ 2C7W ... SETNCORE 1,1,FI,FNORM [MARKER BLOCK FOR CUNI FREEING ON EX 2CMG STOZ AWORK3(2) [NO FABSNB 2D76 LDX 7 ACOMMUNE9(2) 2DBY ... STO 7 A1(1) [ PRESERVE MODE 2DLQ LDN 6 0 2F6B HUNT 3,CPB,CMULTI 2FL2 BNG 3 SERF 2G5L LDX 6 ANALEV(3) 2GK= SERF 2H4W HUNT 1,FILE,FNAME [ TO BE PASSED TO TEMP FILE ROUTINE 2HJG #SKI K6DECODE>599-599 2J46 TRACE ANUM+1(1),DECODE 2JHQ LDEX 5 ATYPE(1) [PICK UP THE PARAM NUMBER 2K3B SPARANOX 5,6 [GET PARAMETER TO BE NORMALISED 2KH2 HUNT 2,CPB,CUNI 2L2L NGX 0 ANUM(2) 2LG= BPZ 0 REPLZ [NULL & NON/E PARAMETERS WRONG 2L^W LDX 3 FX2 2MFG STO 6 AWORK1(3) [STORE IT IN THE LINK BLOCK 2M^6 LDN 0 1 2NDQ ANDX 0 7 2NYB BZE 0 XADJ [J IF NO ADJUNCTS WANTED 2PD2 LDCT 0 #400 2PXL ORS 0 AWORK1(3) [SET B0 TO REMEMBER ADJUNCTS WANTED 2QC= XADJ 2QWW LDX 1 ANUM(2) 2RBG SRL 1 12 [USE THE PARAM TYPE TO 2RW6 BZE 1 SIMPL [ J TO ROUTINE TO HANDLE THIS TYPE 2S*Q SBN 1 1 2STB BZE 1 SEUDO [J IF PSEUDO-SIMPLE 2T*2 SBN 1 1 2TSL BZE 1 POZIT [J IF COMPOSITE 2W#= SBN 1 1 2WRW BZE 1 QUALD [J IF QUALIFIED 2X?G GEOERR 1,PARTYPE? [PARAMETER TYPE EXCEEDS 3 -ILLEGAL 2XR6 SIMPL DOWN NORMALUS,1 [SET UP THE FABSNB 2Y=Q TESTREPN OK,RONG 2YQB BRN XIT 2^=2 TRONG 2^PL ACROSS NORMERR,33 329= RONG 32NW ACROSS NORMERR,32 338G XIT 33N6 HUNT 1,CPB,CUNI 347Q FREECORE 1 34MB XITA 3572 LDX 1 FX2 35LL LDX 5 EXPEDIENT(1) [KEEP TO TEST IF ADJUNCTS WANTED 366= LDEX 6 EXPEDIENT(1) [ANALYSIS LEVEL WHEN ENTERED 36KW ADN 6 1 375G ORX 6 GSIGN 37K6 ERX 6 GSIGN 384Q PARAFREE 6 38JB HUNT 1,FILE,ADJUNCTS [SEE IF AN ADJUNSTS BLOCK HAS BEEN SE 3942 BNG 1 NOADJ [J IF NOT 39HL BPZ 5 NWANT [J IF ADJUNCTS NOT WANTED 3=3= SETREP ADJUNCTS 3=GW [ 3?2G TIDYUP 3?G6 [ 3?^Q UP1 HUNT 2,FI,FNORM 3#FB BNG 2 UP [J IF NO FNORM BLOCK - CUNI'S FREED 3#^2 LDX 1 FX1 3*DL LDX 2 FX2 3*Y= NCUNI LDX 2 FPTR(2) [NEXT BLOCK 3BCW LDX 0 ATYPE(2) 3BXG ANDX 0 HALFTOP 3CC6 TXU 0 SFNORM(1) 3CWQ BCC UP2 [J IF FNORM - NO MORE FNORM CUNI'S 3DBB TXU 0 SCUNI(1) 3DW2 BCS NCUNI [J IF NOT A CUNI 3F*L FREECORE 2 [A CUNI CREATED BY FNORM 3FT= BRN NCUNI 3G#W UP2 FREECORE 2 [THE FNORM BLOCK 3GSG UP 3H#6 UP 3HRQ NWANT FREECORE 1 [FREE ADJUNCTS BLOCK 3J?B NOADJ 3JR2 MHUNT 1,FILE,FABSNB 3K=L LDN 0 #2000 3KQ= ANDX 0 ATYPE(1) 3L9W BZE 0 Z2 3LPG LDX 0 A1(1) 3M96 SBN 0 6 3MNQ BZE 0 SRONG4 3N8B Z2 3NN2 SETREP OK 3P7L BRN UP1 3PM= REPLY 3Q6W ACROSS NORMERR,87 3QLG REPLZ ACROSS NORMERR,63 3R66 SEUDO 3RKQ FREECORE 2 3S5B PARANEXT #33, ,5 [SPLIT THE PARAM AT + 3S*8 ... TESTREP2 TOOMANY,MESSB 3SK2 CALL 1 TESTPAIR 3T4L ADN 6 1 [INCREASE ANALYSIS LEVEL 3TJ= PARANUMB 4 3W3W SBN 4 1 3WHG BZE 4 SIMPL 3X36 [THIS SECTION WILL BE OMITTED 3XGQ [IN MARK 1 -STREAM COMMAND 3Y2B TEMPF 3YG2 ACROSS NORMERR,31 [STREAMS NOT ALLOWED 3Y^L POZIT 3^F= POZ PARANEXT #34, ,5 [REMOVE PARENTHESES & SPLIT AT COMMA 3^P4 ... TESTREP2 TOOMANY,MESSB 3^YW CALL 1 TESTPAIR 42DG ADN 6 1 [ADD 1 TO ANALYSIS LEVEL 42Y6 PARANUMB 4 43CQ SBN 4 1 [X4 WILL BE ZERO IF NO COMMA (THE BRA 43XB HUNT 1,CPB,CUNI [ WERE THEN SUPERFLUOUS) 44C2 NGX 3 ANUM(1) 44WL BPZ 3 MESSA [ERROR IF NO SERIAL NO. GIVEN 45B= LDCH 3 ANUM+1(1) 45TW SBN 3 8 [TEST IF OCTAL CHAR 46*G ... FREECORE 1 46T6 BPZ 3 MESSA [ERROR IF NOT T.S.N. 47#Q LDX 3 4 47SB ADN 3 1 [X3 = NO OF PARAMS WITHIN THE BRACKET 48#2 SPARANOX 3 48RL HUNT 1,CPB,CUNI 49?= LDCH 0 ANUM+1(1) [ & TEST IF IT BEGINS OCTAL CHAR 49QW SBN 0 10 4==G BNG 0 NONAM [IF IT DOES NO FILENAME IS SPECIFIED 4=Q6 BZE 0 NCOL [IF IT IS A COLON. 4?9Q USMT DOWN NORMALUS,1 [SET UP FABSNB USING LAST PARAMETER 4?PB TESTREPN OK,RONG [J IF ERROR IN NAME 4#92 MFREE CPB,CUNI 4#NL HUNT 3,FILE,FABSNB [EXTEND FABSNB TO HOLD TSN'S 4*8= NORET LDN 0 #2000 [SET B13 OF ATYPE IN FABSNB TO SHOW 4*MW ORS 0 ATYPE(3) 4B7G LDX 5 ALOGLEN(3) 4BM6 BXU 5 HDREC(3),RETSP [J IF RET.P IS IN FABSNB 4C6Q ADN 5 1 [ALLOW FOR EXTRA WORD 4CLB NGN 7 1 [SET SWITCH 4D62 RETSP ADX 5 4 [ADD NO OF TSN'S TO BE STORED 4DKL ALTLEN 3,5,FILE,FABSNB 4F5= BPZ 7 NAMNO [J IF RET PER IS IN 4FJW HUNT 2,FILE,FABSNB 4G4G ADX 2 HDREC(2) [X2 -> END OF BLOCK 4GJ6 STO 7 A1(2) [SET RET PER -VE 4H3Q NAMNO LDN 3 0 [MODIFIER FOR APPENDING TSN'S 4HHB SBN 4 1 [**** IN MK1 4J32 BNZ 4 TRONG1 4JGL ADN 4 1 [**** IS ALLOWED 4K2= BRN NOUNI 4KFW NXTSN HUNT 1,CPB,CUNI 4K^G FREECORE 1 [FREE LAST CUNI BLOCK 4LF6 NOUNI ADN 3 1 [INCREASE MODIFIER 4LYQ SBN 4 1 4MDB BNG 4 SERQA [J IF ALL TSN'S PROCESSED 4MY2 PARANOT 0(3),6 [PASS NEXT TSN 4NCL HUNT 1,CPB,CUNI 4NX= LDX 0 ANUM(1) [ACCESS TYPE 4PBW SRL 0 12 4PWG BNZ 0 MESSA [ERROR IF NOT SIMPLE 4QB6 CALL 5 SCOB [STORE TSN IN FABSNB 4QTQ BRN NXTSN [J TO PICK UP NEXT 4R*B XENO LDCH 2 APARA+2(1) [FOR A TSN OF 9 CHARS 4RT2 SBN 2 #70 [TEST IF 9TH CHAR IS X 4S#L BNZ 2 MESSA [ERROR IF NOT 4SS= HUNT 2,FILE,FABSNB 4T?W ADX 2 HDREC(2) 4TRG SMO 3 4W?6 STOZ A1(2) 4WQQ LDCT 0 #400 [SET B0 OF TSN WORD TO SHOW XENOTAPE 4X=B SMO 3 4XQ2 ORS 0 A1(2) 4Y9L LDEX 2 ANUM(1) 4YP= SBN 2 1 [REDUCE COUNT BY 1 4^8W BRN XENT 4^NG SCOB LDEX 2 ANUM(1) [GET COUNT OF CHARS IN TSN 5286 SBN 2 #11 52MQ BNG 2 NOTX [J IF 8 CHARS OR LESS 537B BZE 2 XENO [J IF 9 CHARS 53M2 BRN MESSA [ERROR IF GREATER 546L NOTX HUNT 2,FILE,FABSNB 54L= ADX 2 HDREC(2) 555W SMO 3 55KG STOZ A1(2) [ZEROISE TSN WORD 5656 LDEX 2 ANUM(1) 56JQ XENT LDN 7 0 [SET X7 ZERO 574B NXOCT LDCH 0 ANUM+1(1) [PICK UP NEXT CHAR 57J2 SBN 0 #10 583L BPZ 0 NXEN [J IF NOT OCTAL 58H= ADN 0 #10 592W SLL 7 3 [MOVE TO ALLOW FOR NEXT CHAR 59GG ORX 7 0 [ADD NEXT NUMBER TO X7 5=26 BCHX 1 £ 5=FQ BCT 2 NXOCT [J IF MORE OCTAL CHARS 5=^B HUNT 2,FILE,FABSNB 5?F2 ADX 2 HDREC(2) 5?YL BZE 7 MESSA 5#D= BNG 7 MESSA 5#XW SMO 3 5*CG ORS 7 A1(2) [STORE TSN AT END OF FABSNB 5*X6 EXIT 5 0 5BBQ NXEN SBN 0 #60 [TEST FOR X,IF IT IS NOT 5BWB BNZ 0 MESSA [ERROR REPORTED 5CB2 SBN 2 1 5CTL BNZ 2 MESSA 5D*= HUNT 2,FILE,FABSNB 5DSW ADX 2 HDREC(2) 5F#G BZE 7 MESSA 5FS6 SMO 3 5G?Q STO 7 A1(2) [STORE TSN AT END OF FABSNB 5GRB LDCT 0 #400 [SET BO TO SHOW 5H?2 SMO 3 [XENOTAPE 5HQL ORS 0 A1(2) 5J== EXIT 5 0 5JPW NCOL FREECORE 1 5K9G PARANEXT #36,,3 5KF# ... TESTREP2 TOOMANY,MESSB 5KP6 CALL 1 TESTPAIR 5L8Q ADN 6 1 5LNB PARANUMB 5 [GET NO. PARAMS 5M82 SBN 5 1 [IF ONE,WE HAVE ONLY A 5MML BZE 5 XKT [USERNAME,ILLEGAL WITH T.S.N 5N7= PARAFREE 6 [FRRE LAST CPB,CMULTI BLOCK 5NLW SBN 6 1 [OTHERWISE FREE 5P6G HUNT 1,CPB,CUNI [CUNI BLOCK AND CONTINUE 5PL6 FREECORE 1 5Q5Q SPARANOX 3 5QKB BRN USMT 5R52 NONAM FREECORE 1 [FREE CUNI BLOCK 5RJL GETCOREN 10,1 [SET UP A FABSNB WITH USERNAME ONLY 5S4= FINDCORE 3 5SHW NAME 3,FILE,FABSNB 5T3G LDN 0 10 5TH6 STO 0 HDREC(3) 5W2Q [THE NAME OF THE CURRENT USER IS MOVE 5WGB ADN 2 CPREFIX [TO THE FABSNB 5X22 ADN 3 A1+1 5XFL MOVE 2 3 5X^= LDN 0 6 [SIX-WORD LOCALNAME IS ZEROIZED 5YDW ZELOC STOZ 3(3) 5YYG ADN 3 1 5^D6 BCT 0 ZELOC 5^XQ SBN 3 A1+7 [RESET X3 -> FABSNB 62CB ADN 4 1 [ONE MORE TSN AS THERE IS NO LOCALNAM 62X2 BRN NORET 63BL XKT HUNT 1,CPB,CUNI [ERROR CASE 63W= FREECORE 1 [ONLY USERNAME PRESENT 64*W BRN TRONG 64TG QUALD 65*6 QUAST PARANEXT #33, ,5 [SPLIT PARAM AT + 65JY ... TESTREP2 TOOMANY,MESSB 65SQ CALL 1 TESTPAIR 66#B ADN 6 1 [ADD 1 TO ANALYSIS LEVEL 66S2 PARANUMB 4 [TO TEST FOR A STREAM NAME 67?L SBN 4 1 67R= BNZ 4 TEMPF [J IF IT IS A STREAM NAME 68=W HUNT 1,CPB,CUNI 68QG LDCH 0 APARA(1) [TEST1ST CHAR FOR '(' WHICH 69=6 SBN 0 #30 [INTRODUCES A STREAM NAME 69PQ BZE 0 STREM [J IF ( 6=9B NORML DOWN NORMALUS,1 [SET UP A OABSNB FOR WHAT SHOULD0 BE 6=P2 TESTREPN OK,RONG [A NORMAL QUALIFIED NAME 6?8L MFREE CPB,CUNI 6?N= BRN XIT 6#7W STREM FREECORE 1 [FREE LAST CUNI BLOCK 6#MG STREM1 6*76 LDN 5 1 [POINTER TO FIRST COMPONENT 6*LQ PARANEXT ,,5 [REMOVE PARENTHESES 6*WJ ... TESTREP2 TOOMANY,MESSB 6B6B CALL 1 TESTPAIR 6BL2 ADN 6 1 [STEP ANALYSIS LEVEL 6C5L HUNT 2,CPB,CUNI [TEST 1ST CHAR OF PARAM FOR A MUMERIC 6CK= LDX 4 ANUM(2) 6D4W BZE 4 MESSA [BRANCH IF NULL PARAMETER 6DJG LDX 4 APARA(2) 6F46 FREECORE 2 6FHQ LDN 3 0 6G3B SLL 34 6 [X3 CONTAINS FIRST CHARACTER 6GH2 SRL 4 18 [X4 CONTAINS 2ND CHARACTER 6H2L SBN 3 #12 6HG= BNG 3 POZIT [BRANCH IF SERIAL NUMBER 6H^W SBN 3 #16 6JFG BNZ 3 TRONG [MUST BE ( 6J^6 SBN 4 10 6KDQ BPZ 4 MESSA [ (MUST BE FOLLOWED BY T.S.N. 6KYB BRN STREM1 6LD2 SERQA SMO FX2 6LXL LDEX 0 AWORK1 6MC= SBX 6 0 6MWW SBN 6 2 6NBG #SKI K6NORMALUS>599-599 6NW6 TRACE 6,ANALEV 6P*Q BNG 6 XIT [J TO EXIT IF NO QUALIFIERS 6PTB SMO FX2 6Q*2 LDEX 6 EXPEDIENT [ANALEV OF OUALIFIERS 6QSL ADN 6 2 [TWO HIGHER THAN THAT ON ENTRY 6R#= DOWN NORMALUS,5 6RRW TESTREP NAMEFORM,RONG [J IF ANY FORMAT ERROR 6S?G BRN XIT 6SR6 MESSA 6T=Q ACROSS NORMERR,17 6TQB TESTPAIR 6W=2 TESTREP UNPAIR,XUNPAIR 6WPL EXIT 1 0 6X9= XUNPAIR 6XNW ACROSS NORMERR,18 6Y8G TRONG1 6YN6 ACROSS NORMERR,19 6^7Q SRONG4 6^MB ACROSS NORMERR,89 6^SJ ...MESSB 6^^Q ... ACROSS NORMERR,34 7272 [ 72LL MENDAREA 30,K99DECODE 736= #END ^^^^ ...01527374000200000000