(George Source)
Macros used: ALTLEN, ALTLENG, BACKSPACE, BRUSEN, CHNUMCON, CLOSETOP, COMERR, COOR3, ENDCOM, FJOCA, FREECORE, GEOERR, JBS, MBS, MHUNT, MHUNTW, MONOUT, OPENDIR, OUTNULL, OUTPARAM, PARAPASS, SEG, SEGENTRY, SETNCORE, SPARAPAS, STEPAGAIN, STEPREWRITE, TESTRPN2, TOPFCB2
22FL ... SEG DOXCODE,,CENT(INSTALLATION HOOKS),,G400 22^= [ 23DW [ (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982 23YG [ 24D6 # 24XQ SEGENTRY K1DOXCODE,START 25CB # 25X2 # THIS CHAPTER IS FOR G3PLUS-IH MK2 26BL # 26HS ...# THIS CHAPTER IMPLEMENTS THE EXTRACODE COMMAND 26P2 ...# 26W= # STORED WORDS 27*W SEGENTRY G400HKD2 27TG UHOOK 12HHOOKS 28*6 NLOC 1,0.2,0 28SQ T501 +501 29#B THIR +13 29S2 TA #41 2=?L TZ #73 2=R= T9 +10 2?=W TMINUS #35 2?QG TBMISC +BMISC 2#=6 TNOHKMESS 2#PQ 32HHOOK SPECIFIED DOES NOT EXIST 2*9B TSP #20 2*P2 MASKCTXT #60777777 2B8L TON 4HON00 2BN= TOF 4HOF00 2C7W # 2CMG # SUBROUTINE TO LOCATE THE HOOKS BLOCK 2D76 # ON EXIT :- RESULT IN X3 2DLQ # X0 OVERWRITTEN 2F6B # 2FL2 THKBLK 2G5L #HAL IUSER+G400BLK,0 2GK= # 2H4W # 2HJG SFNDHKBLK 2J46 LDN 3 BMISC [START ADDRESS 2JHQ SFNDHKBLK2 2K3B LDX 3 BPTR(3) [NEXT BLK 2KH2 SMO FX1 2L2L TXU 3 TBMISC 2LG= BCS SFNDHKBLK1 [STILL OK 2L^W GEOERR 1,DSKHKBLK [BREAK-LOST HK BLK 2MFG SFNDHKBLK1 2M^6 LDX 0 ATYPE(3) 2NDQ SMO FX1 2NYB TXU 0 THKBLK 2PD2 BCS SFNDHKBLK2 [NOT HK BLK 2PXL LDX 0 A1(3) 2QC= SBN 0 7 2QWW BNZ 0 SFNDHKBLK2 [NOT HK BLK 2RBG EXIT 7 0 2RW6 # 2S*Q # SUBROUTINE TO LOCATE ENTRY HOOK BLK 2STB # ON ENTRY :- ADDRESS OF BLOCK IN X3 2T*2 # HOOK NAME IN ACOMMUNE1-3 OF CPAT 2TSL # LINK IN X7 2W#= # ON EXIT :- RESULT IN X4 2WRW # X1 =FX1 2X?G # X2 =FX2 2XR6 # X0 ,X5 OVERWRITTEN 2Y=Q # 2YQB # EXIT 1 IF HOOK ENTRY FOUND 2^=2 # EXIT 0 IF NOT FOUND 2^PL # 329= SFNDENTRY 32NW LDX 2 FX2 338G LDX 4 A1+2(3) [COUNT OF HOOKS 33N6 LDN 1 A1+3(3) 347Q BZE 4 SFNDENTRY2 34MB LDN 5 A1(3) 3572 ADX 5 ALOGLEN(3) [END OF HOOK BLOCK 35LL SFNDENTRY3 366= TXL 5 1 36KW BCS SFNDENTRY9 [J IF END OF HOOK BLOCK 375G LDX 0 1(1) 37K6 TXU 0 ACOMMUNE2(2) 384Q BCS SFNDENTRY1 [J IF NOT MATCH 38JB LDX 0 2(1) 3942 TXU 0 ACOMMUNE3(2) 39HL BCS SFNDENTRY1 [J IF NOT MATCH 3=3= LDX 0 3(1) 3=GW TXU 0 ACOMMUNE4(2) 3?2G BCS SFNDENTRY1 [J IF NOT MATCH 3?G6 LDX 4 1 [ADDRESS OF HOOK ENTRY 3?^Q ADN 7 1 [LINK TO EXIT + 1 3#FB BRN SFNDENTRY2 [EXIT 3#^2 SFNDENTRY1 3*DL ADN 1 5 3*Y= BCT 4 SFNDENTRY3 [LOOP BACK 3BCW SFNDENTRY2 3BXG LDX 1 FX1 3CC6 EXIT 7 0 3CWQ SFNDENTRY9 3DBB GEOERR 1,DSKHKCNT [ INCORRECT COUNT OF HOOKS 3DW2 # 3F*L # SUBROUTINES TO OBTAIN COMMAND PARAMETERS : SPAR,PARA 3FT= # LINK X7 3G#W # EXIT + 0 IF NULL 3GSG # + 1 IF NON-EXISTENT 3H#6 # + 2 OTHERWWISE 3HRQ # 3J?B SPAR 3JR2 SBX 7 FX1 3K=L SPARAPAS 3KQ= BRN PAR 3L9W PARA 3LPG SBX 7 FX1 3M96 PARAPASS 3MNQ PAR 3N8B ADX 7 FX1 3NN2 MHUNT 3,CPB,CUNI 3P7L LDX 0 ANUM(3) 3PM= BZE 0 PAR0 3Q6W BNG 0 PAR1 3QLG EXIT 7 2 3R66 PAR1 3RKQ EXIT 7 1 3S5B PAR0 3SK2 EXIT 7 0 3T4L # 3TJ= # 1 - CHECK THAT THIS USER IS ALLOWED TO 3W3W # USE THE EXTRACODE COMMAND 3WHG # 3X36 P1SR 3XGQ BRUSEN P1C 3Y2B FJOCA 3,2 3YG2 LDN 4 3 [COUNT FOR 3WD NAME 3Y^L P1B 3^F= SMO 4 3^YW LDX 0 UHOOK-1(1) [WD OF REQUIRED NAME 42DG SMO 4 42Y6 TXU 0 JUSER-1(3) [WD OF ACTUAL NAME 43CQ BCC P1A 43XB P1C 44C2 COMERR ANOTKNOWN 44WL P1A 45B= BCT 4 P1B 45TW EXIT 7 0 46*G # 46T6 # DECODE PARAMETERS :- 47#Q # 47SB # 2A - COMMAND / MACRO NAME 48#2 # CHECK LOCAL NAME FORMAT 48RL # AND STORE IN ACOMMUNE2-4 49?= # 49QW SEGENTRY K9DOXCODE 4==G # 4=Q6 # ############################################################# 4?9Q # 4?PB # K K 1 4#92 # K K 11 4#NL # K K 1 4*8= # K K 1 4*MW # KKK 1 4B7G # K K 1 4BM6 # K K 1 4C6Q # K K 1 4CLB # K K 1 4D62 # 4DKL # ############################################################# 4F5= # 4FJW START 4G4G CALL 7 P1SR 4GJ6 CALL 7 SPAR [1ST PARAMETER 4H3Q BRN PARMIS [PARAMETER MISSING 4HHB BRN PARMIS [DITTO 4J32 LDX 6 ANUM(3) 4JGL ANDN 6 #7777 [CHARACTER COUNT 4K2= TXL 6 THIR(1) [TEST IF > 12CHS 4KFW BCC PARFORM [..IF SO FORMAT ERROR 4K^G LDX 2 3 4LF6 LDCH 0 APARA(2) [1ST CHAR 4LYQ TXL 0 TZ(1) 4MDB BCC PARFORM [ERROR IF > Z 4MY2 TXL 0 TA(1) 4NCL BCS PARFORM [J IF < A 4NX= BCHX 2 £ [STEP PTR 4PBW LDX 5 6 4PWG SBN 5 1 [COUNT OF REMAINING CHARS 4QB6 BZE 5 ST4 4QTQ ST2 4R*B LDCH 0 APARA(2) [NEXT CHAR 4RT2 TXL 0 T9(1) 4S#L BCS ST1 [J IF NUMERIC 4SS= TXU 0 TMINUS(1) 4T?W BCC ST1 4TRG TXL 0 TA(1) 4W?6 BCS PARFORM [ERROR IF < A 4WQQ TXL 0 TZ(1) 4X=B BCC PARFORM [OR > Z 4XQ2 ST1 4Y9L BCHX 2 £ 4YP= BCT 5 ST2 [LOOP BACK IF ANY CHARS LEFT 4^8W ST4 4^NG LDX 2 FX2 5286 LDX 0 ACES 52MQ STO 0 ACOMMUNE1(2) [SPACE FILL ACOM1-4 537B STO 0 ACOMMUNE2(2) 53M2 STO 0 ACOMMUNE3(2) 546L STO 0 ACOMMUNE4(2) 54L= LDN 4 APARA(3) 555W LDN 5 ACOMMUNE2(2) 55KG SMO 6 5656 MVCH 4 0 [SAVE NAME 56JQ # 574B # 2B - ABBREVIATED NAME 57J2 # 583L # CHECK 2 CHARS AND STORE IN ACOMMUNE1 58H= CALL 7 PARA [CHECK 2ND PARAMETER 592W BRN ST3 [J IF NULL=MACRO 59GG BRN PARMIS [NO MORE PARAMS 5=26 ANDN 0 #7777 [CHAR COUNT 5=FQ SBN 0 2 5=^B BNZ 0 PARFORM [FORMAT ERROR IF NOT 2 5?F2 LDN 4 ACOMMUNE1(2) 5?YL LDN 3 APARA(3) 5#D= MVCH 3 2 [SAVE ABBREV NAME 5#XW # 5*CG # 2C - CONTEXT,INTO ACOMMUNE5 5*X6 # 5BBQ ST3 5BWB CALL 7 PARA 5CB2 BRN PARMIS [PARAMETER MISSING 5CTL BRN PARMIS [PARAMETER MISSING 5D*= CHNUMCON [COMVERT TO BINARY 5DSW TESTREPN OK,XEND [ENDCOM IF ERROR 5F#G MHUNT 3,CPAR,GNUMCON 5FS6 LDX 6 A1+1(3) 5G?Q ANDX 6 MASKCTXT(1) 5GRB STO 6 ACOMMUNE5(2) 5H?2 FREECORE 3 [FREE GNUMCON BLOCK 5HQL # 5J== # 2D - ON,OR OFF--INTO ACOMMUNE6 5JPW # 5K9G CALL 7 PARA 5KP6 BRN XON [IF NOT PRESENT 5L8Q BRN XON [ASSUME "ON" 5LNB LDX 0 APARA(3) 5M82 ANDX 0 HALFTOP 5MML TXU 0 TON(1) 5N7= BCC XON [J IF ON 5NLW TXU 0 TOF(1) [TEST IF "OF" 5P6G BCS PARFORM [IF NOT ERROR 5PL6 STOZ ACOMMUNE6(2) 5Q5Q BRN P3A 5QKB XON 5R52 LDN 0 1 5RJL STO 0 ACOMMUNE6(2) 5S4= # 5SHW # 3 - LOCATE AND LOCK HOOK BLOCK,ADDRESS TO X3 5T3G # 5TH6 P3A 5W2Q CALL 7 SFNDHKBLK 5WGB LDX 0 GSIGN 5X22 ANDX 0 A1+1(3) 5XFL BZE 0 P3B [J IF NOT LOCKED OUT 5X^= ... COOR3 #41 5YDW BRN P3A 5YYG P3B 5^D6 LDX 0 GSIGN 5^XQ ORS 0 A1+1(3) 62CB # 62X2 # 4 - MAKE CHANGE TO HOOK LIST 63BL # 63W= LDX 0 ACOMMUNE6(2) 64*W BNZ 0 P4A [J IF "ON" 64TG # 65*6 # "OFF" CASE 65SQ # 66#B CALL 7 SFNDENTRY [ADDRESS TO X5 66S2 BRN P4B [NO SUCH HOOK 67?L LDX 5 4 67R= ADN 4 5 ['FROM' ADDRESS 68=W # 68QG # CALCULATE NR OF HOOKS TO BE MOVED INTO 69=6 # 69PQ LDX 0 A1+2(3) [TOTAL NR OF HOOKS 6=9B SLL 0 2 [MULTIPLY BYN4 6=P2 ADX 0 A1+2(3) [+1,=5 TIMES 6?8L ADN 0 A1+3(3) [END OF BLOCK ADDRESS 6?N= SBX 0 4 [THOSE BEFORE HOOK REQD DONT MOVE 6#7W P4B4 6#MG BZE 0 P4B1 [NONE TO MOVE 6*76 # 6*LQ # MOVE UP FOLLOWING ENTRIES 6B6B # 6BL2 SMO FX1 6C5L TXL 0 T501 6CK= BCS P4B2 [J IF NEED ONLY ONE MOVE 6D4W SBN 0 500 [REDUCE WORD COUNT 6DJG LDN 1 500 6F46 BRN P4B3 6FHQ P4B2 6G3B LDX 1 0 [MOVE ALL WORDS 6GH2 LDN 0 0 [SET COUNT ZERO 6H2L P4B3 6HG= SMO 1 6H^W MOVE 4 0 [DO MOVE 6JFG ADX 4 1 6J^6 ADX 5 1 6KDQ BRN P4B4 [J FOR FURTHER MOVES 6KYB ADX 4 1 6LD2 # 6LXL # SHORTEN BLOCK 6MC= # 6MWW P4B1 6NBG LDX 5 ALOGLEN(3) 6NW6 SBN 5 5 6P*Q ALTLENG 3,5 [DO SHORTENING 6PTB CALL 7 SFNDHKBLK 6Q*2 LDX 6 A1+2(3) 6QSL SBN 6 1 6R#= STO 6 A1+2(3) [REDUCE HOOK COUNT 6RRW BRN P5 [J IF 'ON' 6S?G P4B 6SR6 SETNCORE 9,3,IUSER,G400BLK [DOESNT EXIST 6T=Q LDN 4 TNOHKMESS(1) 6TQB LDN 5 A1+1(3) 6W=2 MOVE 4 8 6WPL LDN 4 8 6X9= STO 4 A1(3) 6XNW LDN 4 32 6Y8G OUTPARAM 4,A1+1,IUSER,G400BLK 6YN6 MONOUT G400MESSAGE 6^7Q CALL 7 SFNDHKBLK 6^MB BRN P5 7272 # 72LL # 'ON' CASE 736= # 73KW P4A 745G CALL 7 SFNDENTRY [ADDRESS TO X4 74K6 BRN P4D 754Q LDX 5 4 75JB BRN P4C [TIDY AND EXIT 7642 P4D 76HL LDX 6 ALOGLEN(3) [INCREASE BLOCK SIZE 773= ADN 6 5 77GW ALTLEN 3,6 782G CALL 7 SFNDHKBLK 78G6 LDX 6 A1+2(3) 78^Q ADN 6 1 [STEP COUNT OF HOOKS 79FB STO 6 A1+2(3) [AND STORE 79^2 LDN 5 A1(3) 7=DL ADX 5 ALOGLEN(3) 7=Y= SBN 5 5 7?CW P4C 7?XG LDN 4 ACOMMUNE1(2) 7#C6 MOVE 4 5 [INSERT HOOK 7#WQ # 7*BB # 5 - UNLOCK HOOK BLOCK 7*W2 # 7B*L P5 7BT= NGN 0 1 7C#W ERX 0 GSIGN 7CSG ANDS 0 A1+1(3) [UNLOCK 7D#6 LDX 0 ACOMMUNE6(2) 7DRQ BZE 0 XEND [J IF NOT 'ON' 7F?B # 7FR2 # NOW MARK DIRECTORY AS 'ALWAYSDUMP' AND 'DONT OFFLINE' 7G=L # 7GQ= SETNCORE 10,2,FILE,FABSNB 7H9W MHUNT 2,FILE,FABSNB 7HPG LDN 0 10 7J96 STO 0 A1(2) 7JNQ ADN 1 UHOOK 7K8B ADN 2 A1+1 7KN2 MVCH 1 12 [ USERNAME 7L7L SMO FX2 7LM= LDN 1 ACOMMUNE2 7M6W MVCH 1 12 [ FILENAME 7MLG SMO FX1 7N66 LDN 1 NLOC 7NKQ MVCH 1 12 7P5B OPENDIR P5,GENERAL,QUERY [ TRY TO OPEN HOOK FILE 7PK2 TESTRPN2 OK,XEND [ DOESN'T EXIST 7Q4L TOPFCB2 1 7QJ= [ENSURE THAT THE HOOKS DIRECTORY 7R3W JBS SETALREADY,1,BFALLINCS 7RHG [IS ALWAYS SCANNED BY DUMPER 7S36 MBS 1,BFALLINCS,BFDIRUPDATE 7SGQ SETALREADY 7T2B MHUNTW 1,FILE,ENT 7TG2 LDEX 6 ECOPS(1) 7T^L FREECORE 1 7WF= BZE 6 WOFF 7WYW BACKSPACE 7XDG WOFF 7XY6 STEPAGAIN 7YCQ MBS 3,BNONLINE,BNALLINCS 7YXB STEPREWRITE [REWRITE DIRECTORY ENTRY 7^C2 CLOSETOP 7^WL # 82B= # 6 - EXIT COMMAND 82TW # 83*G XEND 83T6 ENDCOM 84#Q # 84SB # VARIOUS COMMAND ERRORS 85#2 # 85RL PARMIS 86?= OUTNULL 86QW COMERR JPARMIS 87=G PARFORM 87Q6 COMERR APFERR 889Q #END ^^^^ ...724010070002