{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: DOXCODE867)}}
====== DOXCODE867 ======
(George Source)
**Macros used:** [[george:macro:ALTLEN|ALTLEN]], [[george:macro:ALTLENG|ALTLENG]], [[george:macro:BACKSPACE|BACKSPACE]], [[george:macro:BRUSEN|BRUSEN]], [[george:macro:CHNUMCON|CHNUMCON]], [[george:macro:CLOSETOP|CLOSETOP]], [[george:macro:COMERR|COMERR]], [[george:macro:COOR3|COOR3]], [[george:macro:ENDCOM|ENDCOM]], [[george:macro:FJOCA|FJOCA]], [[george:macro:FREECORE|FREECORE]], [[george:macro:GEOERR|GEOERR]], [[george:macro:JBS|JBS]], [[george:macro:MBS|MBS]], [[george:macro:MHUNT|MHUNT]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:MONOUT|MONOUT]], [[george:macro:OPENDIR|OPENDIR]], [[george:macro:OUTNULL|OUTNULL]], [[george:macro:OUTPARAM|OUTPARAM]], [[george:macro:PARAPASS|PARAPASS]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:SPARAPAS|SPARAPAS]], [[george:macro:STEPAGAIN|STEPAGAIN]], [[george:macro:STEPREWRITE|STEPREWRITE]], [[george:macro:TESTRPN2|TESTRPN2]], [[george:macro:TOPFCB2|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