SPL,L,O,M,C ! NAME: IN.. ! SOURCE: 92064-18165 ! RELOC: 92064-16055 ! PGMR: G.A.A. ! MOD: G.L.M. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! ! NAME IN..(7) " 92064-16055 REV.1650 761024" ! ! ! IN.. IS THE RTE FILE MANAGER ACTION ROUTINE ! FOR THE IN DIRECTIVE. ! ! THE IN DIRECTIVE HAS THE FORM: ! ! IN,MSC,CR,LABEL,ILAB,#FT,#DTR,#SEC/TR,BTL !PARAMETER 1 5 9 13 17 21 25 29 ! ! OR ! ! IN,MSC--NMSC ! ! W H E R E: ! ! MSC IS THE TWO CHARACTER MASTER SECURITY CODE ! ! CR IS EITHER THE CARTRIDGE LABEL(+) OR ITS ! LOGICAL UNIT(-) (MUST BE NUMERIC) ! ! LABEL IS THE NEW CARTRIDGE LABEL (MUST BE NUMERIC > 0). ! ! ILAB IS THE CARTRIDGE INFORMATION LABEL (MUST BE ASCII). ! ! #FT IS THE FIRST FMP TRACK. ! ! #DTR IS THE NUMBER OF DIRECTORY TRACK ! (NULL (SET TO 1) OR NUMERIC) ! ! #SEC/TR IS THE NUMBER OF 64 WORD SECTORS ! PER TRACK (NUMERIC (MAY BE NULL FOR LU2 AND 3)). ! ! BTL IS A BAD TRACK LIST - UP TO 6 BAD TRACK NUMBERS. ! ! NMSC IS A NEW MASTER SECURITY CODE. ! ! THE MASTER SECURITY CODE IS SET AT GENERATION ! AND MUST MATCH THEREAFTER. ! LET DR.RD,D.RIO,MSS.,NAM..,EXEC \ ,READF,WRITF,IMESS \ BE SUBROUTINE,EXTERNAL ! LET CLD.R BE SUBROUTINE,EXTERNAL,DIRECT LET PK.DR,D.SDR ,D.LT,D.LB,C.BUF, \ .P1,.P2,.P3,.P4, \ DS.LU BE INTEGER,EXTERNAL LET PTST BE SUBROUTINE LET LOCK.,MVW BE SUBROUTINE,EXTERNAL LET FID. BE FUNCTION,EXTERNAL LET MSC. BE FUNCTION,EXTERNAL ! ! ! ! DEFINE DUMMY LOCK FILE TO PROTECT TRACK 0 SECTOR 0 ! ! LET LK0(3),LK3,LK4,LK5,LK6,LK7,LK8 \ BE INTEGER ! ! INITIALIZE LK0 TO "FLOPLK" INITIALIZE LK3 TO 1 INITIALIZE LK4 TO 0 INITIALIZE LK5 TO 0 INITIALIZE LK6 TO 2 INITIALIZE LK7 TO 0 INITIALIZE LK8 TO -32767 ! ! ! ! CONSTANTS ! LET YE BE CONSTANT(54505K) LET NO BE CONSTANT(47117K) LET A BE CONSTANT(0 ) LET B BE CONSTANT(1 ) LET WRIT BE CONSTANT(2 ) LET READI BE CONSTANT(1 ) LET XEQT BE CONSTANT(1717K) LET DMSIN BE CONSTANT(26455K) IN..: SUBROUTINE(NCAM,PLIST,MSNO)GLOBAL LET NCAM,PLIST,MSNO BE INTEGER ! ! DDIR_@D.SDR PDIR2_[PDIR1_[PDIR_@PK.DR]+1]+1 PDIR9_[PDIR8_[PDIR7_[PDIR6_[PDIR5_[PDIR4_[PDIR3_\ PDIR2+1]+1]+1]+1]+1]+1]+1 LIS29_[LIS21_[LIS17_[LIS13_[LIST9_[LIST5_@PLIST+5]+4]+4]+4]+4]+8 MSNO_0! INITILIZE FOR NO ERRORS ! ! TEST FOR LEGAL PARAMETERS ! IF NCAM>3 THEN GO TO IN2 !IF MORE THAN 3 PARMS CONTINUE AT IN2 IF NCAM#1 THEN GOTO NOPRM !IF LESS THAN 3,MUST BE 1 ! MSC CHANGE? ! IFNOT MSC.(PLIST) THEN GOTO SCER ! IF $(@PLIST+2)#DMSIN THEN GOTO NOPRM ! T2_[IF([T_$(@PLIST+3)]AND 77400K)=20000K THEN 0,ELSE T] ! ! GO PRIV AND SET NEW MASTER SECURITY CODE ! ASSEMBLE " JSB .DRCT" ASSEMBLE " EXT $XECM" ASSEMBLE " DEF $XECM" ASSEMBLE " STA 1 SAVE ADDRESS IN B" ASSEMBLE " LDA DEFT2 FETCH ADDRESS OF WORD HOLDING NEW CODE" ASSEMBLE " EXT PMOVE" ASSEMBLE " JSB PMOVE" ASSEMBLE " OCT 1" RETURN !RETURN ! ! DEFT2: ASSEMBLE " DEF T2" ! ! ! LABER:DO[MSNO_53;RETURN] ! NOPRM:DO[MSNO_50;RETURN] !NOT ENOUGH PRAMS - EXIT ! IN2: IFNOT MSC.(PLIST)THEN GO TO SCER !CHECK SECURITY ! ! CHECK LABEL PARAMETERS ! ! IN6: IFNOT -$LIST9<0 THEN GO TO LABER !LABEL MUST BE >0 ! IF $(@PLIST+12)#3 THEN GO TO LABER !MUST BE ASCII NAM..($(LIS13 )) !MUST BE VALID NAMR DO[AREG_$A; IF AREG THEN GO TO LABER] ! ! SET UP TO TEST THE REST OF THE PRAMS. ! FOR T_4 TO 13 DO[PTST($(@PLIST+T*4))] ! IFNOT$[T_(LIS21 )]THEN $T_1 !MUST HAVE DRTRK ! ! READ BLOCK ZERO ! IN7: DR.RD(READI,$LIST5 ,0)?[MSNO_54;RETURN] ! ! T_@PLIST+25 !SET NO OF SECTORS ADDRESS IFNOT $T THEN $T_60 !IF #SECT NOT GIVEN DEFAULT TO 60 !WILL NEED TO INCLUDE SECT SKIP HERE ! LTR_$$@D.LT NEW,TN_LTR-[FTR_$LIS17]+1 !SET FIRST TRACK,TOTAL NO. TRACKS IF TN<[ND_$LIS21 ]THEN GOTO BADPM ! IF ND>((TN-ND)>-3)+1 THEN GO TO BADPM !DISALLOW UNREASONABLE ! NUMBER OF DIRECTORY TRACKS ! ! CHECK THE BAD TRACKS AND ARRANGE IN ASCENDING ORDER ! LIS49_[T1_LIS29]+20 FOR T_LIS29 TO LIS49 BY 4 DO[\ IF $T THEN[$T1_$T;T1_T1+1]] FOR T_T1 TO LIS29+6 DO[$T_0] ! ZERO THE END OF THE LIST IN10: SWP,LAST_0 !INITILIZE THE SORT FOR T_LIS29 TO T1-1 DO[\ SWAP LOOP IF $T LTR-ND THEN GO TO BTER IN13: T3_$$@DS.LU !SET LU DLB_D.LB !SET THE LABEL ADDRESS ! IF $LIST9=$DLB THEN GO TO IN12!IS SAME LABEL SKIP ! ! CHECK FOR DUPLICATE LABEL ! DR.RD(READI,$LIST9,0)?[DR.RD(READI,$LIST5,0);GO TO IN12] DO[MSNO_12;RETURN]!DUPLICATE LABEL ERROR RETURN ! ! ! ! GET DRIVER TYPE -- IF FLOPPY DRIVER WE MUST PROTECT TRACK ! ZERO SECTOR ZERO. ! IN12: CALL EXEC(13,T3,EQ5) !DO STATUS EQ5_EQ5 AND 37400K !ISOLATE DRIVER TYPE IF EQ5=15400K THEN FLPY_2, ELSE FLPY_0 ! IF [TX,NEW_FID. ($(LIST5 ))] THEN GO TO IN20 ! LOCK.($LIST5,3)?[RETURN] ! REQUEST LOCK/RETURN IF ERROR ! ! A DIRECTORY EXISTS - IS THE NEW PRAM SET ! COMPATIBLE? ! ! CALCULATE # BLOCKS IN DIRECTORY ! ENDBL_ -$PDIR8*($PDIR6 AND 377K)/2 ! IF FTR>$(PDIR4 ) THEN GOTO IN15 IF $(PDIR9 )>(LTR-ND+1)THEN GOTO IN15 IF ND+$PDIR8 <0 THEN GO TO IN15 !IF FEWER DIRECTORY TRACKS ASK. ! IF FLPY THEN[IFNOT FTR THEN [IF $PDIR4 \ !IF INIT DOWN THEN GOTO IN15]] !TO TRK 0 THEN ASK(ONLY IF FLOPPY) ! ! ! FULL SPEED AHEAD! IN20: FLCR_16 !OFFSET VALUE FOR DIR CLEAR $PDIR_$(LIS13 )+100000K !SET ID+SIGN BIT $(PDIR1 )_$(@PLIST+14) !SET LAST 2 WORDS OF ID $(PDIR2 )_$(@PLIST+15) $(PDIR3 )_$LIST9 !SET LABEL $(PDIR4 )_FTR !SET FIRST AVAIL TRK ! IFNOT NEW THEN GOTO IN21 !SKIP SETTING NXTRK AND SECT IF OLD !ALSO SKIP SECT/TRK INFO AS DIRECTORY !AND FILES ARE ALREADY WRITTEN ! ! ! ! ! ! SET FIRST TRACK (PDIR9) AND IF IT'S A FLOPPY ! AND FIRST TRACK=0 THEN SET FIRST SECTOR (PDIR5) ! TO 2 AND MOVE DUMMY FILE IN TO PROTECT TRK 0 SECT 0 ! ! $(PDIR9)_FTR $(PDIR5)_FLPY IFNOT FTR THEN [IF FLPY THEN \ !IF TRK=0 AND ITS A FLOPPY MVW(@LK0,PDIR+16,9);\ !THEN MOVE DUMMY ENTRY IN FLCR_25],\ ELSE $(PDIR5)_0 ! ! ! $(PDIR6 )_$(@PLIST+25) ! SET SKIP FACTOR\#SECT ! ! IN21: $(PDIR7 )_LTR-ND+1 !SET LOWEST DIRECTORY TRACK $(PDIR8 )_-ND !SET #DIRECTORY TRACKS ! ! SET BAD TRACKS ! FOR T_10 TO 15 DO $(PDIR+T)_$(@PLIST+T+19) ! ! IF NEW CLEAR REST OF DIRECTORY ! IF NEW THEN[FOR T_FLCR TO 127 DO $(PDIR+T)_0] BL_0 !SET THE BLOCK TO ZERO ! ! NOW WRITE IT OUT IN22: DR.RD(WRIT,$LIST5 ,BL)?[GO TO IN30] ! ! !CLEAR BUFFER ! FOR T_0 TO 127 DO $(PDIR+T)_0 IFNOT NEW THEN [BL,NEW_ENDBL;GOTO IN22]!SET TO ZERO ADDED DIRECTORY DO[BL_BL+1;GO TO IN22]!ZERO THE NEXT BLOCK ! ! ! SET UP FOR CALL TO D.RFP TO UPDATE THE DRN ! IN30: IF $LIST9=$DLB THEN GO TO EXNOW !SKIP UPDATE OF DRN IF SAME .P1_7 !SET FUNCTION CODE .P2_$LIST9 !SET THE LABEL .P3_ $$@DS.LU !SET THE LU ! ASSEMBLE " CCB SET THE SUBFUNCTION(P7) FOR DRN UPDATE" ! CALL CLD.R !CALL D.RFP ! ! IF DUP DRN THEN ERROR 12 WILL RETURN ! IN THIS CASE--THE DISK WILL HAVE BEEN INITIALIZED ! BUT THE MASTER DIRECTORY WILL NOT HAVE IT'S DRN ! THAT WORD WILL BE ZERO ! ! MSNO_$$B !SET THE ERROR CODE EXNOW: LOCK.($LIST9,5) !RELEASE LOCK RETURN !WE DID IT - EXIT ! IN15: MSS.(60);IMESS(2,35137K,1) ;\ SEND COLON PROMPT IMESS(1, C.BUF,36);LN_$1 !READ RESPONSE IF LN<1 THEN GOTO IN15 IF C.BUF=YE THEN[NEW_1; GO TO IN20], ELSE [ \ IF C.BUF=NO THEN GOTO IN30 ,\ ELSE GOTO IN15] ! BADPM:DO[MSNO_56;RETURN] ! MSPRM:DO[MSNO_55;RETURN] ! BTER: DO[MSNO_57;RETURN] SCER: MSNO_51 RETURN END PTST: SUBROUTINE(PTR) ! IF PTR=3 THEN GOTO BADPM !MUST NOT BE ASCII ! ! IF $(@PTR+1)<0 THEN GOTO BADPM !IF <0 - BAD NEWS ! RETURN !OK !RETURN ! END END ! END$