;<134-TENEX>FILINI.MAC;38 28-APR-75 12:40:37 EDIT BY CLEMENTS ;<134-TENEX>FILINI.MAC;37 28-APR-75 11:38:15 EDIT BY CLEMENTS ;<134-TENEX>FILINI.MAC;36 24-APR-75 14:19:17 EDIT BY CLEMENTS ;<134-TENEX>FILINI.MAC;35 14-APR-75 13:32:30 EDIT BY ALLEN ; INIT JBCLCK WITH SETOM, NOT UNLOCK ;<133-TENEX>FILINI.MAC;34 25-OCT-74 10:48:21 EDIT BY TOMLINSON ;<133-TENEX>FILINI.MAC;33 25-OCT-74 10:36:25 EDIT BY TOMLINSON ; Initialize DIRECTORY and INDEX files to have FDBPRM&FDBUND set ;FILINI.MAC;32 11-JUN-74 12:43:46 EDIT BY TOMLINSON ; ELIMINATED VARIABLE FDFMTF. NOW MUST BE SET AS DESIRED. ;FILINI.MAC;31 20-MAY-74 12:30:03 EDIT BY TOMLINSON ; CHANGE INITIAL PROTECTION OF DIRECTORY TO 404000 ;FILINI.MAC;30 13-MAY-74 08:50:39 EDIT BY TOMLINSON ; Changed JFCL after CRDIR to BUGHLT ;FILINI.MAC;29 9-MAY-74 23:40:52 EDIT BY CLEMENTS ; JFCL AFTER CRDIR WHICH NOW SKIPS ;FILINI.MAC;28 3-MAY-74 08:44:53 EDIT BY TOMLINSON ; CHECK DIRECTORY PTT FOR EMPTY ENTRIES DURING FILINI ;FILINI.MAC;27 13-APR-74 11:46:48 EDIT BY TOMLINSON ; INITIALIZE PASSWORD FAILURE COUNTER ;FILINI.MAC;26 1-APR-74 20:12:15 EDIT BY TOMLINSON ; ADDED CODE IN FILINI TO UNLOCK ANY SUBINDEX AND SYSTEM DIRECTORY ;FILINI.MAC;24 19-MAR-74 13:52:02 EDIT BY TOMLINSON ; MORE BUG FIXES TO CVTFD AND RELATIVES ;FILINI.MAC;23 19-MAR-74 10:56:51 EDIT BY TOMLINSON ; BUG FIX IN CVTFD ;FILINI.MAC;22 18-MAR-74 21:01:14 EDIT BY TOMLINSON ; INSERTED FD FORMAT CONVERTER ROUTINE (CVTFD) ;FILINI.MAC;21 18-MAR-74 18:57:24 EDIT BY TOMLINSON ; ADDED CHECKS FOR NEW FD FORMAT (CONTIGUOUS PAGES FOR ONE DIRECTORY) ;FILINI.MAC;1 4-MAR-74 15:04:39 EDIT BY BTHOMAS ;FILINI.MAC;20 30-NOV-73 16:50:36 EDIT BY TOMLINSON ;FILINI.MAC;19 27-NOV-73 17:43:22 EDIT BY CLEMENTS ; MADE INITIAL ACCOUNT, AT JBFINI, BE A PARAMETER "INIACT" ;FILINI.MAC;16 2-NOV-73 13:12:46 EDIT BY TOMLINSON ; SUBROUTINIZED SUBINDEX INITIALIZED AND REDID INITIAL SUBINDEX COUNT ;FILINI.MAC;15 2-NOV-73 11:51:37 EDIT BY TOMLINSON ;FILINI.MAC;14 13-JUN-73 21:07:24 EDIT BY CLEMENTS ;FILINI.MAC;13 6-MAR-73 18:14:18 EDIT BY CLEMENTS ;FILINI.MAC;12 13-FEB-73 19:00:13 EDIT BY CLEMENTS ;ADDED INITIAL UNLOCK OF JBCLCK ;FILINI.MAC;11 19-JAN-73 09:51:02 EDIT BY TOMLINSON ; ADDED ADC/DAC INITIALIZATION ;FILINI.MAC;10 31-OCT-72 10:54:47 EDIT BY CHIPMAN ; FIX PAGE STORAGE END CHECK AND INIT JOBUNT ;FILINI.MAC;9 21-AUG-72 20:08:25 EDIT BY MURPHY ;FILINI.MAC;8 29-JUN-72 9:54:41 EDIT BY TOMLINSON SEARCH STENEX,PROLOG TITLE FILINI EXTERN CHKDEV,CLASS,DEVDSP,DSKDTB,GETFDB,INIBLK,MAPDIR,TODCLK,USTDIR EXTERN MAXLW,RELPAG,ASGPAG,ACCTPT,DIDSCA,DIDSCI,BHC EXTERN DSKBTI,JOBDIR,FORKX,FKDIR,FKGRPS,PASFCT EXTERN DISKP,DIOFN,FDLOFN,BUGCHK,BUGHLT,FDOFN,SETMPG,ASOFN,DSKASN EXTERN PRIMRY,CAPENB,CAPMSK INTERN FILINI,JBFINI ; Initialize file stuff USE RESPC JBFINI::MOVEI A,JSFREE ; Origin of free area in jsb HRLOM A,JSBFRE ; To header MOVEI A,IJSFRE HRRZM A,JSFREE ; One big block free MOVEM A,JSBFRE+2 SETOM JSBFRE+1 MOVE A,[XWD JSFREE+IJSFRE,JSFREE] MOVEM A,JSBFRE+4 MOVEI A,MAXLW+1 MOVEM A,JSBFRE+3 SETOM JBCLCK MOVE A,[XWD JBCOR,JBCOR+1] SETZM JBCOR BLT A,JBCOR+3 MOVEI C,FREJP ; Start with frejp page IJFRLP: MOVE A,C LSH A,9 PUSH P,C PUSHJ P,RELPAG POP P,C CAIGE C,PPMPG-1 AOJA C,IJFRLP SETOM PRIMRY ; Primary io to controlling tty SETOM JFNLCK ; Unlock jfnlck SETZM PASFCT ; CLEAR PASSWORD FAILURE COUNTER SETZM MAXJFN MOVEI A,1 MOVE B,FORKX ; Set connected directory, assume HRLZM A,FKDIR(B) ; this code in top job fork only SETZM FKGRPS(B) MOVE B,JOBNO HRLZM A,JOBDIR(B) ; Connect to directory 1, no log in SETOM JOBUNT ; DEFAULT DSK UNIT IFDEF NDP,< SETZM JOBDC##> ; No display consoles assigned MOVE A,[XWD 777000,-1] MOVEM A,CAPMSK MOVEM A,CAPENB MOVE A,[XWD 500000,INIACT] MOVEM A,ACCTPT POPJ P, ; File system initialization FILINI: SKIPE DIDSCA JRST FILINW SKIPN DISKP JRST FILINW HRROI A,[ASCIZ / DO YOU REALLY WANT TO CLOBBER THE DISC BY RE-INITIALIZING? /] FILINQ: PSOUT PBIN PUSH P,A MOVEI A,37 PBOUT POP P,A CAIN A,"Y" JRST [ HRROI A,[ASCIZ /OK, YOU ASKED FOR IT./] PSOUT JRST FILINW] CAIE A,"N" JRST [ HRROI A,[ASCIZ /PLEASE TYPE Y OR N: /] JRST FILINQ] HRROI A,[ASCIZ /I THOUGHT NOT. PLEASE BE MORE CAREFUL IN THE FUTURE./] PSOUT MOVE A,DIDSCI MOVEM A,DIDSCA FILINW: SKIPN DIDSCA ; Dont init bit table if not fresh start PUSHJ P,DSKBTI PUSHJ P,DEVINI## IFDEF MTAN,< PUSHJ P,MTAINI##> IFDEF DACN,< PUSHJ P,DACINI##> IFDEF ADCN,< PUSHJ P,ADCINI##> IFDEF LPTN,< PUSHJ P,LPTINI##> IFDEF PLTN,< PUSHJ P,PLTINI##> IFDEF PTPN,< PUSHJ P,PTPINI##> IFDEF PTRN,< PUSHJ P,PTRINI##> IFDEF DTAN,< PUSHJ P,DTAINI##> IFDEF NETN,< PUSHJ P,NETINI##> IFDEF NDP,< PUSHJ P,DSPINI##> PUSHJ P,DMPINI## MOVE A,TODCLK ANDI A,777 MOVEM A,CLASS SKIPE 1,DIDSCA ; Do we have a disc address for di JRST FILIN1 ; Yes, use it PUSHJ P,NEWIB ; No, get an ib ofn MOVEM B,DIDSCA MOVEM A,DIOFN PUSHJ P,NEWIB PUSH P,B PUSH P,A HRLOI A,600000 PUSHJ P,CHKDEV BUG(HLT,) POP P,A MOVEM A,FDLOFN PUSHJ P,ASGPAG BUG(HLT,) MOVE B,A HRLI B,140000 MOVE A,FDLOFN PUSHJ P,SETMPG HRLI B,C MOVSI C,-NFDIB FILIN9: PUSH P,B PUSH P,C PUSHJ P,NEWFD TLO B,40 TLZ B,20 EXCH B,-1(P) POP P,C MOVEM A,FDOFN(C) POP P,@B AOBJN C,FILIN9 MOVEI A,0 PUSHJ P,SETMPG HRRZ A,B PUSHJ P,RELPAG MOVE A,0(P) ; DISC ADDRESS OF FD PUSHJ P,IDXINI ; INITIALIZE THE SUBINDEX MOVSI 1,200001 HRROI 2,[ASCIZ /DIRECTORY;1;P404000/] GTJFN BUG(HLT,DIRECTORY.>) MOVE JFN,A LSH JFN,SJFN HRROI DEV,DSKDTB PUSHJ P,GETFDB BUG(HLT,DIRECTORY.>) POP P,FDBADR(A) ; Put fd disc address into fdb MOVSI B,FDBNXF ANDCAM B,FDBCTL(A) MOVSI B,FDBLNG!FDBPRM!FDBUND IORM B,FDBCTL(A) PUSHJ P,USTDIR MOVSI 1,200001 HRROI 2,[ASCIZ /INDEX;1;P404000/] GTJFN BUG(HLT,INDEX.>) MOVE JFN,A LSH JFN,SJFN HRROI DEV,DSKDTB PUSHJ P,GETFDB BUG(HLT,INDEX.>) MOVE B,DIDSCA MOVEM B,FDBADR(A) MOVSI B,FDBNXF ANDCAM B,FDBCTL(A) MOVSI B,FDBPRM!FDBUND IORM B,FDBCTL(A) PUSHJ P,USTDIR MOVNI 1,1 RLJFN JFCL POPJ P, MKFDBK: 0 0 0 700000 0 ; INITIALIZE THE WHOLE SUBINDEX NDIRHT==NFDIB*47 ; HASH TABLE SIZE 20% MORE THAN MAX DIR'S IDXINI: PUSH P,A ; SAVE FD DISC ADDRESS MOVEI A,0 PUSHJ P,MAPDIR SETZM DIRORG MOVE A,[XWD DIRORG,DIRORG+1] BLT A,ESBIDT+NDIRHT-1 POP P,FDADR ; Store disc address of fd in di MOVEI A,ESBIDT-DIRORG ; End of sbidtb is beginning of hash MOVEM A,DIRHTO MOVEI A,NDIRHT MOVEM A,DIRHTL ; Hash table length SETZ C, ; START WITH LETTER NULL MOVE B,[POINT 7,SBIDTB] ; POINTER TO SUBINDEX DISPATCH TABLE MOVEI A,1 ; FIRST LETTERS GOINTO SUBINDEX 1 MOVEI D,[EXP "A","B","D","F","I","L","M","O","R","S","T",177]+^D<12/NSUBI - 1> ; LETTERS DELIMITING 8.333 PERCENTILES OF USER NAMES FILINZ: IDPB A,B ; DEPOSIT CORRECT SUBINDEX IN DISPATCH TABLE CAML C,0(D) ; REACHED PERCENTILE BOUNDARY? JRST [ ADDI D,^D<12/NSUBI> AOJA A,.+1] CAIGE C,177 AOJA C,FILINZ PUSH P,A FILINP: MOVN A,0(P) PUSHJ P,FILINX ; INITIALIZE EACH SUBINDEX SOSLE 0(P) JRST FILINP POP P,A ; FLUSH STACK, CLEAR A PUSHJ P,MAPDIR SETOM DIRLCK INLP1: MOVEI A,[ASCIZ /PDP-10/] HRROM A,MKFDBK+1 HRROI 1,[ASCIZ /SYSTEM/] MOVE 2,[XWD 260000,MKFDBK] CRDIR BUG(HLT,) POPJ P, FILINX: PUSH P,A PUSHJ P,MAPDIR POP P,C MOVEI A,DDBLEN MOVEI B,7777 PUSHJ P,INIBLK SETOM DIRLCK POPJ P, ; Initialize directory and index contents ; Make directory and index known to system FILIN1: TLO A,(1B2) PUSHJ P,ASOFN ; Get ofn for di BUG(HLT,) MOVEM A,DIOFN MOVEI A,0 PUSHJ P,MAPDIR MOVE A,FDADR TLO A,(1B2) PUSHJ P,ASOFN ; Get ofn for fd BUG(HLT,) MOVEM A,FDLOFN HRLOI A,600000 PUSHJ P,CHKDEV BUG(HLT,) MOVE A,FDLOFN HRLM A,DEVDSP(B) PUSHJ P,ASGPAG BUG(HLT,) MOVE B,A HRLI B,140000 MOVE A,FDLOFN PUSHJ P,SETMPG HRLI B,F MOVSI F,-NFDIB FILIN2: SKIPN A,@B BUG(HLT,) TLO A,20 PUSH P,B TLZE A,40 PUSHJ P,ASOFN BUG(HLT,) POP P,B MOVEM A,FDOFN(F) AOBJN F,FILIN2 HRRZ A,B PUSHJ P,RELPAG SKIPA FDFMTF ; CHANGE TO SKIPE FDFMTF TO AUTO CONVERT PUSHJ P,CVTFD MOVEI A,1 SETO B, CALL MAPDIR ; MAP SYSTEM DIRECTORY SETO A, EXCH A,DIRLCK ; LOCK DIRECTORY CAME A,[-1] ; WAS IT PROPERLY LOCKED? BUG(CHK,) SETZ A, CALL MAPDIR MOVE A,[POINT 7,SBIDTB] MOVEI B,200 SETZ C, FILIN6: ILDB D,A CAML D,C MOVE C,D SOJG B,FILIN6 UNLDIL: MOVNI 1,0(D) PUSH P,D PUSHJ P,MAPDIR SETO A, EXCH A,DIRLCK CAME A,[-1] BUG(CHK,) POP P,D SOJGE D,UNLDIL POPJ P, FDFMTF::0 ; CHANGE TO -1 IF OLD STYLE FORMAT ; CONVERT OLD STYLE FD INTO NEW STYLE ; CALLED BY FILIN2 IF OLD STYLE ENCOUNTERED CVTFD: MOVSI D,-NFDIB MOVEI E,1(P) ; POINTER TO PAGE VECTOR HRLI E,D ADD P,[NFDIB,,NFDIB] CVTFD0: CALL ASGPAG ; ASSIGN A PAGE FOR EACH COPY BUG(HLT,) HRLI A,140000 ; SET RW BITS MOVEM A,@E AOBJN D,CVTFD0 PUSHJ P,ASGPAG ; ASSIGN WINDOW PAGE FOR OLD PTS BUG(HLT,) HRLI A,140000 PUSH P,A SETZ C, CVTFDL: HRLI C,-1000 HRRZ A,C LSH A,-9 MOVE A,FDOFN(A) MOVE B,0(P) CALL SETMPG CVTFD1: HRRZ A,C ROT A,-3 ADDI A,0(A) ROT A,3 CAIL A,NFDIB*1000 SUBI A,NFDIB*1000-10 MOVE D,A LSH D,-9 ANDI A,777 ADD A,@E PUSH P,0(B) POP P,0(A) AOS B AOBJN C,CVTFD1 CAIGE C,NFDIB*1000 JRST CVTFDL MOVSI D,-NFDIB CVTFD3: MOVE B,0(P) MOVE A,FDOFN(D) PUSHJ P,SETMPG MOVS A,@E HRR A,B BLT A,777(B) HRRZ A,@E CALL RELPAG AOBJN D,CVTFD3 SETZM FDFMTF POP P,A HRRZS A CALL RELPAG SUB P,[NFDIB,,NFDIB] POPJ P, NEWFD: TDZA A,A NEWIB: MOVSI A,(1B2 ) TLO A,(1B3) PUSH P,A MOVE A,DIDSCI ; Parameter dependent on configuration PUSHJ P,DSKASN ; Get a blank disc address BUG(HLT,) TLO A,20 IORM A,(P) EXCH A,(P) PUSHJ P,ASOFN BUG(HLT,) PUSH P,A ; Save the ofn PUSHJ P,ASGPAG ; Get a page in job area BUG(HLT,) PUSH P,A MOVE B,A TLO B,140000 MOVE A,-1(P) PUSHJ P,SETMPG MOVE A,(P) HRLZ B,A HRRI B,1(A) SETZM (A) BLT B,777(A) MOVE B,(P) MOVEI A,0 PUSHJ P,SETMPG POP P,A PUSHJ P,RELPAG POP P,A POP P,B ; Get disc address POPJ P, END