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<LAST THEN[SWP,$(T-1)_$T;$T_LAST];LAST_$T]!SWAP 
      IF SWP THEN GO TO IN10  !IF NOT IN ORDER THEN GO DO ANOTHER CYCLE 
! 
      IFNOT LAST THEN GOTO IN13        !IF NO BAD TRACKS SKIP 
      IF $(LIS29    )<FTR THEN GOTO BTER
      IF LAST > 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$
                                