{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: OPENTWO867)}}
====== OPENTWO867 ======
(George Source)
**Macros used:** [[george:macro:ADDMODE|ADDMODE]], [[george:macro:ALTLEND|ALTLEND]], [[george:macro:BXE|BXE]], [[george:macro:BXGE|BXGE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:CLOSETOP|CLOSETOP]], [[george:macro:FINDNAME|FINDNAME]], [[george:macro:FREECORE|FREECORE]], [[george:macro:GEOERR|GEOERR]], [[george:macro:GETDIR|GETDIR]], [[george:macro:HALFOPEX|HALFOPEX]], [[george:macro:HUNT|HUNT]], [[george:macro:JBC|JBC]], [[george:macro:LONGON|LONGON]], [[george:macro:MFREE|MFREE]], [[george:macro:NAME|NAME]], [[george:macro:OPENMASD|OPENMASD]], [[george:macro:OPENRELD|OPENRELD]], [[george:macro:PICKREP|PICKREP]], [[george:macro:PUTREP2|PUTREP2]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETMODE|SETMODE]], [[george:macro:SETREP|SETREP]], [[george:macro:SIX|SIX]], [[george:macro:TESTMODE|TESTMODE]], [[george:macro:TESTNAMX|TESTNAMX]], [[george:macro:TESTREP2|TESTREP2]], [[george:macro:TESTRPN2|TESTRPN2]], [[george:macro:TESTUSER|TESTUSER]], [[george:macro:TOPFCB2|TOPFCB2]], [[george:macro:TRACE|TRACE]], [[george:macro:TRACEIF|TRACEIF]], [[george:macro:UP|UP]], [[george:macro:UPPLUS|UPPLUS]]
22FL [
22^= [THIS IS A TIDIED-UP VERSION WITH MODETEST & BITSETTING MACROS
2394 ...[ (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1983
23DW [
23YG SEG OPENTWO,8,JUDY BIDGOOD,OPEN
24D6 SEGENTRY K1OPENTWO,Z1OPENTWO
24XQ SEGENTRY K2OPENTWO,Z2OPENTWO
25CB [
25X2 #
26BL #
26W= # THIS SEGMENT IS ENTERED FROM OPENFILE WITH [X4]=DEPTH OF FILE TO
27*W # BE OPENED,[X5]=POINTER FROM THE BOTTOM OF THE FABSNB TO NAME OF
27TG # 1ST FILE TO BE OPENED,& [X3]= MODE TO OPEN IT IN.
28*6 #
28SQ # AN ATTEMPT IS MADE TO HALF-OPEN THIS FILE. IF THIS FAILS WE SET
29#B # THE MODE ONE FURTHER TOO THE RIGHT(SEE TABLE AT HEAD OF OPENFILE
29S2 # SEGMENT) & THE PTR. TO THE USERNAME ABOVE THE ONE JUST TRIED &
2=?L # HAVE ANOTHER GO.IF WE RUN OFF THE TOP OF THE FABSNB,WE EXPAND IT
2=R= # FULLY UP TO MASTER & CARRY ON UNTIL WE'VE CONTRIVED TO HALFOPEN AT
2?=W # LEAST ONE FILE(WE MUST BE ABLE TO DO THIS AS MASTER'S FCB IS ALWAY
2?QG # IN CORE)
2#=6 # AS SOON AS WE'VE HALFOPENED A FILE,WE GO DOWN THE FABSNB AGAIN
2#PQ # DOING AN OPENREC ON EACH FILE BENEATH THE HALFOPENED ONE ,UPDATING
2*9B # THE MODE & PTR IN EACH CASE,UNTIL,HOORAH!,WE'VE REACHED THE BOTTOM
2*P2 #
2B8L #
2BN= #
2C7W MASTER 12HMASTER
2CMG SIX +6
2D76 THREE +3
2DLQ [ THIS SUBROUTINE CALCULATES THE MODE NECESSARY TO DO AN OPENREL
2F6B [ ON THE NEXT FILE DOWN IN THE FABSNB.TO DO THIS IT CALCULATES
2FL2 [ HOW FAR FROM THE END OF THE BLOCK WE ARE,FROM OUR TRUSTY POINTER
2G5L [ IN X5,AND THEN "SETMODE"'S IN X3 ACCORDING TO THE MODE WE WANT
2GK= [ TO OPEN THE BOTTON FILE
2H4W QCHEQMOD
2HJG LDX 0 5
2J46 SBN 0 6
2JHQ BNG 0 SLAST [PTR 6 WORDS FROM END OF FABSNB
2K3B BZE 0 SLAST [UNLESS FABSNB 4 WORDS LONG IN WHICH
2KH2 SBN 0 7 [CASE IT'S ONLY 3 WORDS FROM END
2L2L BNG 0 SLASTDIR [J IF POINTING TO PENULTIMATE FILE
2LG= SBN 0 7
2L^W BNG 0 SLASTBUTDIR [J IF POINTING TO LAST BUT-TWO'TH
2MFG [NAME
2M^6 BRN SREAD
2NDQ SLASTDIR
2NYB TESTMODE 6,NOTHAW,NOT,THAW
2PD2 TESTMAIN 6,NOTHAW,,READING
2QC= GEOERR BRIEFPM,THAWMODE [ONLY ALLOW READING MODE IF OPENTHAW
2QWW NOTHAW
2RBG TESTMODE 6,SUNCLEAN,,CREATE
2RW6 TESTMODE 6,SCLEAN,,THAW,REOPEN
2S*Q TESTMAIN 6,SREAD,NOT,UNCLEAN
2STB SCLEAN
2T*2 SETMODE 3,CLEAN
2TSL BRN SCONT
2W#= SUNCLEAN
2WRW SETMODE 3,GENERAL
2X?G BRN SCONT
2XR6 SLASTBUTDIR
2Y=Q TESTMODE 6,SREAD,NOT,CREATE
2YQB BRN SCLEAN
2^=2 SLAST
2^PL LDX 3 6
329= EXIT 7 0
32NW SREAD
338G SETMODE 3,READ
33N6 SCONT
347Q SETMODE 0,REPLY,NOWAIT,ERASING,DIREPLY,QUERY
34MB ANDX 0 6 [TRANSFER MODES IF PRESENT
3572 ORX 3 0
35LL TESTMODE 6,NNTHAW,NOT,THAW
366= ADDMODE 3,ERASING ['THAW' IMPLIES ERASING
36KW NNTHAW [ERASING
375G EXIT 7 0
37K6 #
384Q #
38JB #
3942 # THIS IS THE ENTRY POINT TO THE ROUTINE. X5 CONTAINS A POINTER
39HL # (FROM THE BOTTOM OF THE FABSNB) TO THE NAME OF A FILE TO BE
3=3= # HALFOPENED & X3 THE MAIN MODE IT IS TO BE OPENED IN.
3=GW #
3?2G #
3?G6 # WE DO AN"OPENMASD" IF THE INDICATED FILE IS MASTER.O/W WE TRY
3?^Q # TO HALFOPEN THE POINTED-TO F_E.
3#FB #
3#^2 Z1OPENTWO
3*DL ZB
3*Y= HUNT 2,FILE,FABSNB
3B3B ... LDX 0 A1(2) [OMIT CHECK FOR :MASTER IF NOT
3B6G ... SBN 0 1 [POINTING TO TOP FILE IN FABSNB,
3B9L ... SBX 0 5 [AS COULD BE DEALING WITH ANOTHER
3B#Q ... BNZ 0 NOTMASSA [FILE WITH LOCAL NAME MASTER.
3BCW ADX 2 A1(2)
3BXG SBX 2 5
3CC6 TESTNAMX 3,MASTER(1),A1(2),NOTMASSA
3CWQ Z2OPENTWO
3DBB ADDMODE 3,CAREFUL
3DW2 TRACEIF K6OPENTWO,99,299,3,OPEN MAS
3F*L OPENMASD NOBREAK,3
3FT= TESTREP2 OK,QBOTFILE
3G#W GEOERR 1,MASNOPEN
3GSG NOTMASSA
3H#6 LDX 0 5
3HRQ SBN 0 7
3J?B BNG 0 QHALF [DON'T OR IN ANY BITS IF BOTTOM FILE
3JR2 CALL 7 SCONT [TRANSFER MODES
3K=L QHALF
3KQ= ADDMODE 3,CAREFUL
3L9W TRACEIF K6OPENTWO,99,299,3,HALFOPEN
3LPG HALFOPEX XBRK,5,3
3M96 TESTREP2 OK,QBOTFILE1
3MNQ TESTRPN2 NOTFOUND,XREPLY
3N8B #
3NN2 # WE'VE BEEN UNABLE TO HALF-OPEN THE INDICATED FILE,SO WE TRY THE
3P7L # NEXT ONE UP,USING QCHEQMOD TO UPDATE THE MODE.IF WE'RE ALREADY AT
3PM= # THE TOP,WE HAVE TO DO A FINDNAME.
3Q6W #
3QLG HUNT 2,FILE,FABSNB
3R66 LDX 0 A1(2)
3RKQ SBN 0 1
3S5B SBX 0 5
3SK2 BZE 0 TOPFAB [J IF PTR.POINTS TO TOP OF FABSNB
3T4L [AND WE CANT 1/2-OPEN THIS FILE
3TJ= BXU 0 THREE(1),Q2
3W3W SUB4
3WHG ADN 5 3
3X36 BRN Q37
3XGQ Q2 ADN 5 6
3Y2B Q37
3YG2 CALL 7 QCHEQMOD [UPDATE MODE & RETURN TO CHECK IF NAME
3Y^L LDX 1 FX1 [IS :MASTER AT LABEL 'ZB'(=K1OPENTWO)
3^F= BRN ZB
3^YW TOPFAB
42DG #
42Y6 # WE'VE REACHED THE TOP UNSUCCESSFULLY.DO A FINDNAME,ADJUST PTR(TRI
43CQ # THIS!) AND GO TO LABEL"Q37" TO CHECK MODE & RE-ENTER ROUT9NE A0 "Z
43XB #
44C2 FINDNAME
44WL TESTREP2 NOUSER,WREPLY
45B= ADN 5 3
45TW HUNT 2,FILE,FABSNB
46*G LDX 0 A1(2)
46T6 SBN 0 1
47#Q SBX 0 5
47SB BXE 0 THREE(1),SUB4
48#2 BRN Q2
48RL ...[THE NEXT TWO LINES ARE REDUNDANT
49?= LDX 2 7 [PICK UP PTR.
49QW BRN QBOTFILE3
4==G QBOTFILE1
4=Q6 #
4?9Q # WE'VE EITHER OPENED MASTER SUCCESSFULLY,OR HALFOPENED A FILE
4?PB # WE CHECK WHETHER WE ARE AT THE BOTTOM.IF NOT WE ADJUST THE POINTER
4#92 # SET UP A FLOCNB,CHANGE THE MODE & DO AN OPENREL.
4#NL QBOTFILE
4*8= HUNT 2,FILE,FABSNB
4*MW QBOTFILE3
4B7G LDX 0 5
4BM6 SBN 0 3
4C6Q BZE 0 ZBOTIS
4CLB SBN 0 3
4D62 BZE 0 ZBOTIS [J IF AT BOTTOM NAME
4DKL PTRUPD
4F5= NGX 0 5
4FJW ADX 0 A1(2)
4G4G SMO FX1
4GJ6 BXGE 0 THREE,ZD4
4H3Q SBN 5 3 [FILE OF THE FABSNB,THE DIFFERENCE
4HHB BRN OLO [BETWEEN IT & THE R. H. WILL BE 1(<3)
4J32 ZD4 SBN 5 6
4JGL OLO
4K2= HUNT 3,FILE,FLOCNB
4KFW ADN 3 A1
4K^G ADN 2 A1
4LF6 ADX 2 0(2)
4LYQ SBX 2 5
4MDB MOVE 2 6 [MOVE IN REQUISITE NO. OF WORDS.
4MY2 CALL 7 QCHEQMOD
4NCL TRACEIF K6OPENTWO,99,299,3,OPENREL?
4NX= OPENRELD XBRK,3
4PBW TESTRPN2 OK,XREPLY
4PWG #
4QB6 # WE NOW PICK UP THE FCB & JUMP IMMEDIATELY IF THE FILE IS NOT
4QTQ # A DIRECTORY/B0 OF COMM UNSET) OTHERWISE WE MOVE A3ROSS THE USER
4R*B # NAME TO THE 6ABSNB,OVERWRITING THE LOCAL NAME OF THE DIRECTORY
4RT2 #
4S#L TOPFCB2 2
4SS= HUNT 3,FILE,FABSNB
4T?W LDX 7 3
4TRG JBC ZBOTIS,2,BFDIR
4W?6 ADX 3 A1(3)
4WQQ SBX 3 5
4X=B TESTUSER A1(3),QBOTFILE
4XQ2 # WE ARE NOT AT THE BOTTOM,& WE HAVE A LOCAL NAME,SO OVERWRITE IT
4Y9L # WITH THE APPROPRIATE USERNAME
4YP= LDN 1 A1(3)
4^8W SUM 0 3
4^NG STO 0 A1+5(3)
5286 LDX 0 HCOLUSER
52MQ STO 0 A1(3)
537B LDN 1 A1+1(3)
53M2 LDN 0 FME1(2)
546L MOVE 0 3 [ORIGINALLY THERE
54L= LDX 0 ACES
555W STO 0 A1+4(3)
5656 LDX 2 7 [PICK UP POINTER AGAIN
56JQ NGN 0 6
574B ADX 0 5
57J2 BNZ 0 PTRUPD [J.IF NOT TO BOTTOM YET
583L ZBOTIS
58H= TESTMODE 6,ND,NOT,DIR
59GG LDN 1 6 [SIZE OF FLOCNB = 6 WORDS
5=26 ADS 1 A1(2) [RESTORE REC. HEADER
5=FQ HUNT 3,FILE,FLOCNB [X3-> FLOCNB
5=^B LDX 0 ALOGLEN(2) [IF 0<(ALOGLEN) - (A1) <6 SET U
5?F2 SBX 0 A1(2) [ AN 8 WORD FLOCNB
5?YL BZE 0 NOSER [
5#D= XX1
5#XW SBN 0 6
5*CG BZE 0 NOSER [IF FABSNB SIZE 4+6N,WHERE N IS
5*X6 BPZ 0 XX1 [INTEGRAL, THEN FLOCNB SHOULB BE 6WDS
5BBQ ALTLEND 3,8,FILE,FLOCNB
5BWB HUNT 2,FILE,FABSNB [X2-> FABSNB
5CB2 HUNT 3,FILE,FLOCNB [X3-> FLOCNB
5CTL LDN 1 8 [SIZE OF FLOCNB = 8 WORDS
5D*= NOSER
5DSW LDX 0 ATYPE(2)
5F#G DSA 0 ATYPE(3) [COPY LS 12 BITS OF TYPE WORD TO FLOC
5FS6 ADN 3 A1
5G?Q ADX 2 A1(2)
5GRB ADN 2 A1-6
5H?2 MOVE 2 0(1) [MOVE LOCAL NAME FROM FABSNB TO FLOCN
5HQL TESTMODE 6,NERASE,NOT,ERASING
5J== GETDIR 2 [TELL ME OF ENTRY EVEN IF TO-BE-ERASE
5JPW BRN TESTR
5K9G NERASE
5KP6 GETDIR
5L8Q TESTR
5LNB TESTRPN2 OK,UREPLY
5M82 ND [REPLY "OKAY" ALREADY SET
5MML HUNT 2,FILE,FABSNB
5N7= LDX 1 A1(2)
5NLW SMO FX1
5P6G BXL 1 SIX,N6
5PL6 SBN 1 3
5Q5Q N6
5QKB SBN 1 3
5R52 ADX 1 2
5RCC ... LDX 0 A1(1)
5RPS ... BXU 0 HCOLUSER,NOAD
5S4= ADN 1 1
5SHW NOAD
5T3G TRACE A1(1),OPENED
5TH6 HUNT 1,FILE,FLOCNB
5W2Q LDX 0 A1(2)
5WGB SMO FX1 [FILE & HAD A LOCAL NAME,MOVE RN
5X22 BXL 0 SIX,MND [CORRESPONDING USERNAME
5XFL SBN 0 6
5X^= SMO 0
5YDW TESTUSER A1(2),MND
5YYG ADN 1 A1+4
5^D6 ADX 2 A1(2)
5^XQ ADN 2 A1-2 [X2-> GEN. NO. OF LAST LOCAL NAME IN
62CB MOVE 1 2 [UPDATE FABSNB WITH DIR. ENTRY INFORM
62X2 SBN 1 A1+4
63BL MND
63W= [
64*W [THE CODE BETWEEN HERE & THE 'FREECORE' WAS INSERTED TO DEAL WITH BUG
64TG [2586. AT THE END OF AN OPENTHAW ALL ACTIVITIES WAITING FOR FILE TO BE
65*6 [FREE FOR EMPTYING ARE WOKEN UP.
65SQ [
66#B TESTMODE 6,NOFR,NOT,THAW
66S2 LONGON 6,A1(1) [FREE WAITING ACTIVITIES
67?L HUNT 1,FILE,FLOCNB [RELOCATE FLOCNB.
67R= NOFR
68=W FREECORE 1 [FREE FLOCNB
69=6 UPPLUS1
69PQ LDX 0 AWORK2(2)
6=9B BZE 0 NOFREE [J IF NOT OPENSYS
6=P2 MFREE FILE,FABSNB
6?8L NOFREE
6?N= UPPLUS 1
6#7W XBRK
6*76 LDX 0 AWORK2(2)
6*LQ BZE 0 NFREEFAB
6B6B MFREE FILE,FABSNB
6BL2 NFREEFAB
6C5L UP [THERE HAS BEEN A BREAK-IN
6CK= #
6D4W #
6DJG # ROUTINES TO DEAL WITH NON-OF REPLIES
6F46 XREPLY
6FHQ LDX 0 5
6G3B SBN 0 3
6GH2 BZE 0 WREPLY
6H2L SBN 0 3
6HG= BZE 0 WREPLY [J IF BOTTOM FILE
6H^W SETREP NAME
6JFG WREPLY
6J^6 TESTMODE 6,RD,NOT,DIR
6KDQ SETREP NAME [MUST BE REPLY "NAME"
6LD2 HUNT 1,FILE,FABSNB [X1->FABSNB
6LXL LDN 0 6
6MC= ADS 0 A1(1) [RESTORE REC. HEADER TO ORIGINAL
6MWW RD
6NBG TESTMODE 6,QUERYM,,QUERY,REPLY,NOWAIT
6NW6 PD
6P*Q GEOERR BRIEFPM,NO FILE [FILE YOU ARE TRYING TO OPEN DOEESN