;SECTION 1 SEARCH C,TULIP ;ACCESS TULIP AND C DEFINITIONS TULIP1: MOVE P,[IOWD 40,PDL] ;SET UP PUSHDOWN LIST START ;CALL UUO TO INITIALIZE TULIP ;SECTION 2 DATE T1, ;GET THE DATE IN FUNNY FORMAT IDIVI T1,^D31 ;T2_DAY-1 ADDI T2,1 ;FIXT2 SO IT'S NOW 1-31 WDEC T2 ;AND PRINT IT WCHI "." ;SEPARATE EUPOPEAN STYLE IDIVI T1,^D12 ;T1_YEARS-64, T2_MONTH-1 WNAME MONTAB(T2) ;PRINT THIS MONTH WCHI "." ;SEPARATE THIS ADDI T1,^D64 ;MAKE THIS THE CURRENT YEAR WDEC T1 ;BOY, THIS IS STILL RATHER TEDIOUS... W2CHI CRLF ;CRLF IS DEFINED IN TULIP, AND IS JUST THAT ;SECTION 3 DATE T1, ;LET'S DO IT AGAIN, ONLY BETTER! IDIVI T1,^D<12*31> ;T1_YEAR-64 IDIVI T2,^D< 31> ;T2_MONTH-1, T3_DAY-1 DISIX [[SIXBIT\%.%.%!\] WDECI 1(T3) ;DAY WNAME MONTAB(T2);MONTH WDECI ^D64(T1)];AND YEAR ;SECTION 4 MSTIME T1, ;TOP OFF WITH TIME IDIVX T1,^D<60*60*1000>;T1_HOURS IDIVX T2,^D< 60*1000>;T2_MINUTES IDIVX T3,^D< 1000>;T3_SECONDS, T4_THOUSANTHS TXO F,LZEFLG ;PRINT TIME WITH LEADING ZEROS DISIX [[SIXBIT\ %:%:%.%#!\] WDEC 2,T1 ;HOURS WDEC 2,T2 ;MINUTES WDEC 2,T3 ;SECONDS WDEC 3,T4] ;THOUSANTHS. NOTE THAT THIS NEEDS LEADING ZEROS! ;SECTION 5 MONRT. ;BACK TO MONITOR EXIT ;IN CASE OF CONTINUE DEFINE MAKLST (A)< IRP A> MONTAB: MAKLST PDL: BLOCK 40 PRGEND TITLE TULIP2 - PROGRAM 2 FOR THE TULIP MANUAL SUBTTL RIC WERME, OCTOBER 1974 SEARCH C,TULIP ;ACCESS TULIP AND C DEFINITIONS TWOSEG ;GENERATE BOTH SEGMENTS RELOC 400000 ;STARTING WITH THE HISEG ;SYMBOLS WE NEED: DTA==0 ;IO CHANNEL FOR DECTAPE PDLLEN==100 ;LENGTH OF PUSHDOWN LIST DIRSIZ==200 ;SIZE OF DTA DIRECTORY BLOCK DIRADR==^D100 ;ADDRESS OF DIRECTORY BLOCK MAXFIL==^D22 ;MAX # OF FILES THAT WILL FIT ON A TAPE TAPLEN==^D578 ;# OF BLOCKS ON A DECTAPE DIRBYT==0 ;RELATIVE ADDR OF DIRECTORY BYTE MAP (5 BIT BYTES) DIRFIL==^D83 ;RELATIVE ADDR OF FIRST FILENAME DIREXT==^D105 ;RELATIVE ADDR OF EXTENSION/DATE WORD DIRLBL==^D127 ;RELATIVE ADDR OF LABEL WORD ENTRY TULIP2 ;TO LET PEOPLE PLAY WITH THIS TULIP2: MOVE P,[IOWD PDLLEN,PDL];SET UP PUSHDOWN LIST START ;CALL UUO TO INITIALIZE TULIP FSETUP DTAFIH ;SETUP DECTAPE FILE BLOCK FIGET DTAFIL ;OPEN DECTAPE USETI DTA,DIRADR ;READY TO READ DIRECTORY INPUT DTA,[IOWD DIRSIZ,DIRBLK 0] ;AND READ IT. ERROR HANDLING WILL BE IN PROGRAM 3 MOVEI T1,DIRBLK ;PRTDIR WANTS ADDRESS OF DIRECTORY IN T1 PUSHJ P,PRTDIR ;READ, PRINT DIRECTORY FREL DTAFIL ;RELEASE THE DTA MONRT. ;AND RETURN TO MONITOR LEVEL EXIT ;IN CASE OF CONTINUE ;SUBROUTINE TO PRINT A DECTAPE DIRECTORY POINTED AT BY T1 ON ;THE CURRENT OUTPUT CHANNEL. USES T1-T4 PRTDIR: PUSHJ P,SAVE1## ;NEED A PERMANENT AC FOR DIRECTORY ADDR HRLI T1,-MAXFIL ;MAKE A HANDY AOBJN WORD MOVE P1,T1 ;AND SAVE IN AN OUT OF THE WAY CORNER SETZ T2, ;CLEAR FILE COUNTER FILLOP: SKIPN DIRFIL(T1) ;FREE FILES HAVE A ZERO NAME MOVEI T2,1(T2) ;WHICH THIS ONE DOES AOBJN T1,FILLOP ;LOOK AT REST MOVEM T2,FREFIL ;SAVE FOR LATER USE. SETZM FILSIZ ;CLEAR OUT COUNT LIST OF FILE SIZES MOVE T1,[FILSIZ,,FILSIZ+1] BLT T1,FILSIZ+MAXFIL-1;USING TRIED, TRUE AND SLOW BLT MOVEI T1,TAPLEN-1 ;# OF BLOCKS TO SCAN (0 ISN'T IN BYTE MAP) MOVX T2,;POINT TO BEFORE FIRST BYTE IN MAP SIZLOP: ILDB T3,T2 ;GET OWNER OF THIS BLOCK AOS FILSIZ(T3) ;COUNT IT (N.B. - FREE BLOCKS ARE IN FILSIZ) SOJG T1,SIZLOP ;GO FOR NEXT DISIX [[SIXBIT\D&IRECTORY %#&F&REE: % BLOCKS, % FILES#!\] PUSHJ P,DATTIM;PRINT DIRECTORY HEADER. FIRST DATE AND TIME WDEC FILSIZ ;THEN THE FREE BLOCKS WDEC FREFIL] ;AND THE FREE FILES SKIPE T1,DIRLBL(P1) ;DOES THIS TAPE HAVE A LABEL? DISIX [[SIXBIT\T&APE &ID: %#!\] WNAME T1] W2CHI CRLF ;SEPARATE HEADER FROM DATA MOVE T1,FREFIL ;CHECK TO SEE IF ANY REASON TO PRINT CAIN T1,MAXFIL ; DIRECTORY. SAY EMPTY IF NO FILES WRITTEN DISIX [CPOPJ##,,[SIXBIT\D&IRECTORY EMPTY#!\]] MOVEI T4,1 ;MAKE INDEX INTO FILSIZ FOR BLOCKS USED ;NO NEED TO SAVE P1 NOW, USE IT AS AOBJN WORD DIRLOP: SKIPN DIRFIL(P1) ;DOES THIS FILE EXIST? JRST DIRAOB ;NO, TRY NEXT LDB T1,[POINT 12,DIREXT(P1),35];GET LOW 12 BITS OF CREATION DATE MOVEI T2,1 ;CHECK THE BYTE MAP FOR THE TOP 3 BITS TDNE T2,DIRBYT(P1) IORI T1,1B23 ;BRING UPTO 1985 TDNE T2,DIRBYT+MAXFIL(P1) IORI T1,1B22 ;UPTO 2007 TDNE T2,DIRBYT+<2*MAXFIL>(P1) IORI T1,1B21 ;UPTO 2051 (FOR THE PDP-10 IN THE SMITHSONIAN) DISIX [[SIXBIT\%.% % %#!\] WSIX 6,DIRFIL(P1);FILE WSIX 3,DIREXT(P1);AND EXTENSION WDEC 3,FILSIZ(T4);THEN LENGTH PUSHJ P,DATTHN] ;AND CREATION DATE DIRAOB: MOVEI T4,1(T4) ;POINT TO NEXT FILE NUMBER AOBJN P1,DIRLOP ;AND LOOP FOR NEXT FILE POPJ P, ;OR RETURN WHEN DONE ;SUBROUTINE TO PRINT CURRENT DATE AND TIME AS ; 'ON AT