File DIRECT.PA (PAL assembler source file)

Directory of image this file is from
This file as a plain text file

/ OS/8 DIRECT V5D
/
/
/
/
/
/
/COPYRIGHT  (C)  1974 BY DIGITAL EQUIPMENT CORPORATION
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
/
/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
/DIGITAL.
/
/
/
/
/
/
/
/
/THIS PROGRAM HAS BEEN MODIFIED BY SEVERAL PEOPLE:  LARRY FOWLER OF
/THE BOEING COMMERCIAL AIRPLANE COMPANY, SEATTLE, WASHINGTON STARTED
/BY ADDING THE "/A" OPTION TO ALPHABETIZE THE OUTPUT AND THE "/H"
/OPTION TO PRINT THE HEADER BLOCK INFORMATION USED BY DECSYSTEM-8.
/HE ALSO INCLUDED THE POSSIBILITY OF USING DIFFERENT DEVICE CODES FOR
/THE TERMINAL.                                               4/22/75
/
/DR. THOMAS W. MCINTYRE OF THE WEST VIRGINIA UNIVERSITY MEDICAL CENTER
/MORGANTOWN, WEST VIRGINIA ADDED THE COLUMN ORDERING ROUTINE SO THAT
/MULTIPLE COLUMN OUTPUT IS ORDERED VERTICALLY INSTEAD OF HORIZONTALLY.
/                                                            5/21/76
/
/THE "/N" OPTION TO PRINT NUMERIC DATES WAS ADDED BY JIM VAN ZEE OF
/THE DEPT. OF CHEMISTRY, UNIVERSITY OF WASHINGTON IN SEATTLE, WASH.
/HE ALSO ADDED THE "/P" OPTION TO PREVENT PAGING AT THE END OF EACH
/PASS AND REORGANIZED THE CODE SO THAT IT WOULD FIT INTO THE SAME
/CORE SPACE OCCUPIED BY THE ORIGINAL VERSION.  ALL UPDATES PUBLISHED
/TO DATE HAVE BEEN INCORPORATED.                            10/20/76

/DIRECTORY LISTING PROGRAM /JANUARY 17, 1974 H.J. /APRIL 22, 1975 L.F. /MAY 21, 1976 TMC /SEPTEMBER 10, OCTOBER 20, 1976 JVZ /MARCH 21, 1977 ADDED /X, FIXED /O/C JVZ /APRIL 15, 1977 ADDED EXTENDED DATE JVZ XR=10 /OTHERS ARE USED TOO PTR=20 CNT=21 INFPTR=22 OUHAND=23 INHAND=24 LNCNT=25 EPTR=26 DAFLG=27 TEMP=30 MOIN=31 BLOCK=32 OSWTCH=33 INFWDS=34 BDPTR=35 GPTR1=36 ALNCNT=37 AC2=CLA CLL CML RTL AC4000=CLA CLL CML RAR ACM2=CLA CLL CMA RAL ACM3=CLA CLL CMA RTL ALTOPT=7642 OPT1=7643 OPT2=7644 EQLS=7646 /EQUALS OPTION DATE=7666 BUF=5200 /THE FILE OUTPUT BUFFER /5 BLOCKS LONG, TO 7577 / CRT=6722 /ALTERNATE CONSOLE DEVICE IFDEF CRT < INDVC=11 OUTDVC=12 KSF= INDVC^10+6001 KCC= INDVC^10+6002 KRS= INDVC^10+6004 KRB= KCC KRS TSF= OUTDVC^10+6001 TCF= OUTDVC^10+6002 TPC= OUTDVC^10+6004 TLS= TCF TPC >
FIELD 1 *4600 /KEEP THE SAME S.A. SKP CLA /NORMAL ENTRY JMP MSTRT /CHAIN ENTRY CDCALL, JMS 200 /SEE WHAT THE PERSON WANTS 5 STAR, 5200 /IN SPECIAL MODE MSTRT, AC2 /GET OPTION /W AND OPT2 SNA CLA /SKIP FOR VESION NUMBER JMP EQUALT JMS ERROR /PRINT VERSION NUMBER VERNO+40 /SET UP FOR MULTIPLE ENTRIES ON A LINE EQUALT, TAD (-10 /EQUALS OPTION WORD STL /EXTEND THE SIGN TAD EQLS /CHECK LEGALITY OF OPTION SNL SZA CLA /SKIP IF GOOD JMP BADEQ /SUBSTITUTE .DI IF NULL EXTENSION TAD 7604 /GET EXTENSION SNA /SKIP IF GIVEN TAD (0411 /.DI DCA 7604 /PUT EXTENSION BACK / CHECK FOR ? IN OUTPUT SPECIFICATION TAD (-10 DCA CNT /CNT HAVING -10 PUTS US AT FIRST CHAR S1C, TAD (7605 JMS GTSXBT /GET A CHAR TAD (-"?!7700 /CHECK FOR ? SNA JMP QINO TAD ("?-"* SNA CLA JMP AINO ISZ CNT JMP S1C / CHECK FOR EMBEDDED * IN ANY SPECIFICATION TAD (7605 S4L, DCA PTR TAD (-10 DCA CNT ACK, TAD PTR JMS GTSXBT TAD (-"*!7700 SZA CLA JMP CNTUP AC2 TAD CNT SZA TAD (6 SNA CLA ISZ CNT TAD PTR JMS GTSXBT SZA CLA JMP AINO CNTUP, ISZ CNT JMP ACK TAD I PTR SNA CLA JMP NULLCK TAD (5 TAD PTR JMP S4L NULLCK, TAD (7201 DCA AO2 TAD (7201 DCA AO1 TAD 7600 SNA JMP TTYHND JMS 200 1 AO1, 7201 HLT TAD AO1 JMP CMN TTYHND, DCA TTY2 JMS 200 1 IFNDEF CRT <5524> /TTY COMPRESSED CODE IFDEF CRT <CRT> /CRT COMPRESSED CODE TTY2, 0 AO2, 7201 JMP IDBLVT TAD TTY2 DCA 7600 TAD AO2 CMN, DCA OUHAND TAD (7601 DCA BLCK TAD 7600 JMS 200 3 BLCK, 7601 LENGTH, 0 JMP NOROOM TAD BLCK JMP PG0 AINO, JMS ERROR ILLA+40 JMP ABORT QINO, JMS ERROR ILLQ+40 ABORT, TAD ALTOPT /ABORT OPERATION AND GOTO ENDUP SMA CLA JMP CDCALL CIF CDF 0 JMP 7605 PAGE
*2000 PG0, DCA BLCKN TAD BUFAD DCA OCPTR TAD (RPOS-1 DCA RPOS TAD (-1200 /NUMBER OF WORDS IN BUFFER DCA OUWDCT DCA CLEN TAD 7605 SNA JMS DSK DCA 7605 TAD (7605 DOMOIN, DCA INFPTR TAD (6601 DCA AI1 TAD I INFPTR SNA JMP ENDCHK JMS 200 1 AI1, 6601 HLT TAD AI1 DCA INHAND JMP PG1 /THIS IS THE END OF OPERATION CODE /IT CLOSES THE FILE AND HANDLES RETURNS ENDCHK, ISZ ECHO TAD (232 OLOOP, JMS OUTCHR TAD OUWDCT /GET -WORDS LEFT IN BUFFER AND (177 /CHECK AGAINST NEW BUFFER # SNA TAD RPOS /CHECK MORE CAREFULLY! CIA TAD (RPOS-1 SZA CLA /SKIP IF JUST DUMPED ONE JMP OLOOP /KEEP GOING TO DUMP ONE TAD OUWDCT TAD (1200 /DONT DUMP IF AT END SZA CLA JMS DUMP /DUMP BUFFER TAD 7600 JMS 200 4 7601 CLEN, 0 JMP CLOERR JMP ABORT OUWDCT, 0 OCPTR, 0 OUTCHR, 0 JMP I RPOS RPOS1, DCA I OCPTR JMS RPOS RPOS2, DCA HOLD JMS RPOS RPOS3, RTL RTL DCA HOLD2 TAD HOLD2 AND (7400 TAD I OCPTR DCA I OCPTR ISZ OCPTR TAD HOLD2 RTL RTL AND (7400 TAD HOLD DCA I OCPTR ISZ OCPTR ISZ OUWDCT SKP JMS DUMP JMS RPOS JMP RPOS1 RPOS, RPOS1 JMP I OUTCHR HOLD=. DUMP, 0 TAD LENGTH /GET LENGTH AVAILABLE SNA /IF ZERO ITS NON FILE STRUCTURE JMP NOMATR /IF ZERO DOESN'T MATTER CLL TAD CLEN /ADD CURRENT SIZE TAD (5 /ADD # OF BLOCKS SZL CLA /WE ARE OK IF SKIPS JMP NOROOM TAD CLEN /UPDATE CLOSING LENGTH TAD (5 /BY NUMBER OF BLOCKS DCA CLEN /SAVE FOR CLOSE NOMATR, TAD OUWDCT TAD (5210 DCA CTLWD CIF 0 JMS I OUHAND HOLD2=. CTLWD, 5210 BUFAD, BUF BLCKN, 0 JMP WRTERR TAD (5 TAD BLCKN /UPDATE BLOCK # BY 5 DCA BLCKN TAD (-1200 DCA OUWDCT TAD BUFAD DCA OCPTR JMP I DUMP PAGE
DIRCTY=0 /LOCATION OF INPUT DIRECTORY PG1, TAD OPT2 /CHECK DATE OPTION RAL /N = 'NUMERIC' SPA CLA CMA DCA DAFLG TAD (OUTCHR DCA OSWTCH JMS CRLF TAD DATE JMS PDATE JMS CRLF JMS CRLF TAD EQLS SNA IAC CIA /SET UP NEGATIVE COUNT DCA ALNCNT /SAVE FOR LATER TAD ALNCNT /SAVE FOR LATER DCA LNCNT /SAVE FOR LATER TAD I INFPTR TAD (7757 DCA TEMP TAD I TEMP SMA CLA JMP NFIN CIF 0 JMS I INHAND 1400 DIRTY, DIRCTY 1 JMP INDERR CDF 0 /CODE TO CHECK FOR TAD I DIRTY /LEGALITY OF DIRECTORY CMA CLL TAD I (DIRCTY+2 CDF 10 SNL TAD (7700 SZL CLA JMP BIDIR /DIRECTORY IS BAD TAD OPT1 /CHECK ALPHABETIZE OPTION SMA JMP NOSORT AND (5577 /DISABLE THE EMPTY AND BLOCK OPTIONS DCA OPT1 JMS SORT /DO AN INPLACE SORT ON INPUT BUFFER CDF 10 TAD OPT1 NOSORT, AND (20 /CHECK THE /H OPTION SZA CLA JMS HEADER / COUNT NUMBER OF INPUTS FROM THE SAME DEVICE DCA INSCNT TAD INFPTR GETCNT, IAC DCA MOIN TAD I MOIN SZA CLA JMP NOSUB TAD (5200 DCA I MOIN TAD (3 TAD MOIN DCA TEMP TAD (5200 DCA I TEMP NOSUB, TAD MOIN TAD (4 DCA MOIN CMA TAD INSCNT DCA INSCNT TAD OPT2 /U AND (10 SZA CLA JMP NOPTIM TAD I MOIN CIA TAD I INFPTR SZA CLA JMP NOPTIM TAD MOIN JMP GETCNT NFIN, JMS ERROR NFLEIN+40 JMP ABORT INDERR, JMS ERROR BADIRD+40 JMP ABORT BIDIR, JMS ERROR BADDIR+40 JMP ABORT WRTERR, JMS ERROR OUERR+40 JMP ABORT CLOERR, JMS ERROR CLERR+40 JMP ABORT NOROOM, JMS ERROR SPRBLM+40 JMP ABORT BADEQ, JMS ERROR BIGEQ+40 JMP ABORT PAGE
/THIS IS THE SUPERQUASIFACETED DIRECTORY PATTERN MATCHING ROUTINE /THE INPUT DIRECTORY IS SEARCHED HERE, IF A MATCH /IS FOUND USING THE INPUT GROUPING /GOT1 GETS CONTROL WITH -BLOCKS IN THE AC NOPTIM, DCA ECOUNT DCA BDPTR DCA RFLAG NBLOCK, TAD BDPTR /POINTER TO START OF DIR BLOCK DCA XR CDF 0 TAD I BDPTR /GET THE ENTRY COUNT DCA BDCTR /FOR THIS BLOCK TAD I XR /GET BLOCK NUMBER FIRST FILE DCA BLOCK TAD I XR /NEXT SEGMENT NUMBER DCA LFLAG /IF IT 0 WE AT END ISZ XR /SKIP TENTATIVE FILE WORD TAD I XR /GET -NUMBER OF INFO WORDS CIA /MAKE POSITVE DCA INFWDS TAD XR /POINT TO FIRST IAC /ENTRY DCA EPTR BLOOP, TAD I EPTR /GET FILENAME WORD CDF 10 SNA CLA /SKIP IF FILE HERE JMP EMPTY /NO... ITS REALLY AN EMPTY TAD INSCNT /SET NUMBER OF INPUT TO LOOK DCA NCNT /AT ALL AT ONCE DCA MATFLG /CLEAR MATCH FLAG TAD INFPTR /ADDRESS OF FIRST INPUT SKP MN1, TAD GPTR2 /ADDRESS OF CURRENT INPUT TAD (5 /GTSXBT SUBR REQUIRES US TO DCA GPTR2 /POINT TO END OF FIELD TAD EPTR /POINT DIRECTORY POINTER TO TAD (4 /END OF ENTRY FOR SAME REASON DCA GPTR1 TAD GPTR1 /SET EPNEXT TO POINT TO TAD INFWDS /MINUS NUMBER OF BLOCKS IN DCA EPNEXT /FILE WORD TAD (-10 /NUMBER OF CHARS TO LOOK AT WILDNM, DCA CNT TAD RFLAG /CHECK /R SZA CLA JMP MEXT /EVERYTHING AFTER MATCHES
MLP, TAD GPTR2 /OK - GET A CHARACTER FROM JMS GTSXBT /STRING TAD (-"*!7700 /IS IT A * ? SNA /SKIP IF NOT * JMP WILDA /YEP... ITS A WILD CARD TAD ("*-"? /IS IT A ? SNA /SKIP IF NOT JMP WILD /YES... FORCE MATCH ON THIS CHAR TAD ("?&77 /RESTORE VALUE CIA /NEGATE DCA CHAR /AND SAVE TAD GPTR1 /NOW GET CHAR FROM DIRECTORY CDF 0 JMS GTSXBT CDF 10 TAD CHAR /DO CHARS MATCH SZA CLA /SKIP IF THEY DO JMP NM1 /NO MATCH ON THIS INPUT WILD, ISZ CNT /BUMP COUNT OF CHARS & POINTER JMP MLP /COMPARE ALL 8 MEXT, ISZ MATFLG /A MATCH!!!!!!! NM1, CLA /WILD CARD COMES HERE WITH ICHY AC ISZ NCNT /HAVE WE CHECKED GROUP OF INPUTS JMP MN1 /NO CHECK WHOLE GROUP TAD MATFLG /HAVE THERE BEEN ANY MATCHES SZA CLA /SKIP IF NOT TAD (4 /WILL INVERT /V SWITCH TAD OPT2 /ADD SWITCH AND (4 /ISOLATE IT CDF 0 /SKIPS IF INPUT DIRECTORY ENTRY IS NOT CANDIDATE /THAT IS - IF A MATCH WAS NOT FOUND BETWEEN ANY /OF THE INPUTS AND /V WAS NOT SPECIFIED OR /A MATCH WAS FOUND AND /V WAS SPECIFIED /THIS ALLOWS /V TO MEAN EVERYTHING BUT... SZA CLA TAD I EPNEXT /GET -NUMBER OF BLOCKS CDF 10 SZA /SKIPS IF TENTATIVE OR NOT CANDIDATE JMP GOT1 /LOOKS LIKE AN ENTRY NENT, TAD EPNEXT /POINT EPTR TO BLOCK DCA EPTR /COUNT OF FILE JMP NEMPTY EMPTY, ISZ EPTR /ON EMPTY MAKE EPTR POINT TO BLOCK COUNT JMS HEMPTY /HANDLE EMPTY SLOTS NEMPTY, CDF 0 TAD I EPTR /GET BLOCK COUNT CIA /MAKE POSITIVE TAD BLOCK DCA BLOCK /KEEP SUM ISZ EPTR /POINT TO NEXT ENTRY ISZ BDCTR /POINTS TO -NUMBER OF ENTRIES JMP BLOOP /NOT DONE WITH SEGMENT CDF 10 TAD (400 /BUMP TO NEXT SEGMENT TAD BDPTR DCA BDPTR TAD LFLAG /DID WE PROCESS LAST SEGMENT SZA CLA /SKIP IF WE DID JMP NBLOCK /PROCESS NEW SEGMENT JMP PASSND /THE END OF A PASS, MAYBE ALL DONE /HANDLE WILD CARDS WILDA, TAD CNT /GET CURRENT CHAR POSITION TAD (6 /ADD SIZE OF FILENAME SPA /SKIP IF IN EXTENSION FIELD JMP WILDNM /THIS BUMPS TO EXTENSION JMP MEXT /THIS MEANS IT HAS TO BE A MATCH CHAR, 0 EPNEXT, 0 GPTR2, 0 LFLAG, 0 RFLAG, 0 NCNT, 0 INSCNT, 0 MATFLG, 0 BDCTR, 0 PAGE
GOT1, DCA TEMP /SAVE THE SIZE TAD OPT2 /CHECK /R AND G100 DCA RFLAG TAD OPT1 JMS MDATE /CHECK /C G100, 100 SZA CLA JMP NENT TAD OPT2 JMS MDATE /CHECK /O STA SNA CLA JMP NENT TAD OPT2 /CHECK /M SMA CLA JMS CHKR /SEE IF THIS IS TIME JMP NENT /NOT NOW LITTLE BEAVER TAD OPT1 AND (10 /CHECK /I SWITCH SZA CLA TAD INFWDS /GET NUMBER OF ADDITIONAL WORDS CLL CIA IAC /USE -(INFWDS-1) DCA PNBLK SZL /CHECK FOR 0,1 JMP PNLOOP-2 TAD GPTR1 DCA XR ADDLP, CDF 0 /DUMP ADDITIONAL INFORMATION WORDS TAD I XR /GET WORD CDF 10 JMS OPRNT /PRINT IT IN OCTAL ISZ PNBLK /COUNT NUMBER JMP ADDLP TAD (-10 DCA CNT PNLOOP, TAD GPTR1 /PRINT FILE NAME CDF 0 JMS GTSXBT CDF 10 JMS CONVTP TAD (3 TAD CNT SZA CLA JMP .+3 TAD (". JMS I OSWTCH ISZ CNT JMP PNLOOP JMS PNBLK JMP NODATE TAD TEMP CIA JMS PRNUM TAD INFWDS SNA CLA JMP NODATE CDF TAD I GPTR1 CDF 10 JMS PDATE NODATE, JMS EOLIN JMP NENT PNBLK, 0 TAD OPT1 /B RTL SNL CLA JMP SKPBLK JMS CONVTP TAD BLOCK JMS OPRNT SKPBLK, TAD OPT1 /F AND G100 SNA CLA ISZ PNBLK JMP I PNBLK OPRNT, 0 DCA MDATE TAD (-4 DCA CNT OPLP, TAD MDATE CLL RAL RTL DCA MDATE TAD MDATE RAL AND (7 TAD (260 JMS CONVTP ISZ CNT JMP OPLP JMS CONVTP JMP I OPRNT MDATE, 0 RTL SMA CLA JMP I MDATE ISZ MDATE /SKIP RETURN CDF 0 TAD I GPTR1 /GET DATE WORD CIA CDF 10 TAD DATE /COMPARE WITH MONITORS, 0 IF = JMP I MDATE SYS4-1 SYS3-1 SYS2-1 POINT, SYS1-1 PAGE
/ PROCESS THE EMPTIES . . . HEMPTY, 0 CDF 0 TAD I EPTR CDF 10 CIA DCA TEMP TAD TEMP TAD ECOUNT DCA ECOUNT TAD OPT1 /CHECK /E AND (200 SZA CLA JMP LISTEM TAD OPT2 /CHECK /M SPA CLA LISTEM, JMS CHKR /DO IT NOW OR JUST COUNT? JMP I HEMPTY /LATER ALLIGATOR TAD OPT1 /CHECK /I AND (10 SNA CLA /IF YES PAD BY ADDITIONAL INFO WORDS JMP EMSG TAD INFWDS CLL RTL TAD INFWDS /NUMBER OF SPACES=5*(INFWDS-1) SZA TAD (-5 SZA JMS BLANK EMSG, TAD (EMPTYM-1 JMS PRINT JMS PNBLK JMP NOSIZE TAD TEMP JMS PRNUM TAD INFWDS SZA CLA JMS PDATE NOSIZE, JMS EOLIN JMP I HEMPTY EOLIN, 0 ISZ LNCNT /IS LINE FILLED? JMP MOLIN /NO JMS CRLF TAD ALNCNT /RESET COUNT DCA LNCNT JMP I EOLIN MOLIN, TAD (2 /OUTPUT 2 BLANKS - WAS 4 JMS BLANK JMP I EOLIN ECOUNT=. HEADER, 0 CDF 0 ISZ I (DIRCTY+2402 JMP END TAD I (DIRCTY+2504 DCA TEMP DCA I (DIRCTY+2504 TAD (DIRCTY+2500-1 JMS PRINT TAD (VOLMES-1 JMS PRINT TAD TEMP JMS PRNUM JMS CRLF CDF 0 TAD (DIRCTY+2600-1 JMS PRINT JMS CRLF CDF 0 ISZ I (DIRCTY+2407 JMP END TAD (POINT+1 TAD I (DIRCTY+2505 DCA PTR CDF 10 TAD I PTR JMS PRINT TAD (SYSMES-1 JMS PRINT CDF0, CDF 0 TAD I (DIRCTY+2506 CDF 10 JMS PRNUM JMS CRLF JMS CRLF END, CDF 10 JMP I HEADER PRINT, 0 DCA XR RDF TAD CDF0 DCA .+1 NEXTCH, CDF TAD I XR CDF 10 SZA TAD (-232 SNA JMP I PRINT TAD (232 JMS OUTCHR JMP NEXTCH PAGE
/THIS CODE TESTS THE =OPTION WORD. IF IT IS >=2 THEN THIS CODE WILL /REARRANGE THE OUTPUT OF THE DIRECTORY LISTING SO THAT THE OUTPUT /WILL BE GENERATED IN ORDER BY COLUMN RATHER THAN BY ROW AS IT WAS. /ADDED BY TOM MCINTYRE, WVU MEDICAL CENTER 5/21/76. CHKR, 0 TAD ALNCNT /CHECK COLUMN COUNT CLL IAC SNA CLA /IS IT > 1 ISZ CHKR /IF AC=0 OPTION=0 OR 1 SO SKIP CODE TAD PFLAG /GET PASS INDICATOR FLAG SMA CLA /IF PASS FLAG<0 WE ARE IN FILE COUNT PASS JMP PROCF /IF PASS FLAG >=0 WE ARE IN FILE PROCESS PASS SNL /SET IF ALNCNT=-1 ISZ FILEC /INCREMENT FILE COUNT COUNTER JMP I CHKR /IF NOT >=0 CONTINUE FILE SEARCH AND COUNT PASSND, TAD ECOUNT /SAVE THE EMPTY COUNT DCA ESAVE TAD FILEC /CHECK IF WE'RE DONE SZA CMA /OR ALMOST DONE SNA CLA JMP ALLDON /YES WE ARE ISZ PFLAG /WHICH PASS? JMP PRCPAS /A PRINTING PASS DCA SKPCNT /DIVIDE THINGS UP TAD FILEC TAD ALNCNT ISZ SKPCNT SMA SZA JMP .-3 /HOW MANY ROWS? SNA /WHEN DO WE BREAK IT? JMP .+3 /WE DON'T, IT CAME OUT EVEN TAD EQLS CMA /SINCE IT IS A PREINCREMENT COLOK, DCA COLCNT /AT THIS COLUMN WE CHANGE COUNT TAD SKPCNT CIA DCA SKPCTB /BASE COLUMN CTR TAD FILEC CMA DCA FILEC /FILE COUNTER DCA ROWCNT /INIT THE ROW TO 0 PRCPAS, ISZ ROWCNT /SKIP THIS MANY AT FIRST TAD ROWCNT CIA DCA SKPCTR /FOR FIRST ENTRY IN ROW TAD COLCNT /REINIT THE COLUMN COUNT DCA COLCTR TAD SKPCTB DCA SKPCNT /RE INIT THE LENGTH ALSO JMP NOPTIM /BACK TO BEGINNING OF DIRECTORY /THIS CODE ACTUALLY COUNTS THE ENTRIES AND CALLS OUTPUT PROCF, ISZ SKPCTR /DO THIS ONE? JMP I CHKR /NO, SKIP TO NEXT ISZ CHKR /NOW IS THE TIME TO SKIP ISZ COLCTR /DO WE CHANGE IT YET? SKP /NOT YET ISZ SKPCNT /YES, ONE LESS PER COLUMN TAD SKPCNT /YES, AND INIT COUNT FOR NEXT DCA SKPCTR ISZ FILEC /ARE WE ALL DONE? JMP I CHKR /NO, GO DO IT ALLDON, CMA DCA PFLAG /YES, CLEAN UP DCA FILEC JMS CRLF JMS CRLF TAD ESAVE JMS PRNUM 4 /FORCE A SINGLE 0 IF NONE FREE TAD (FRBLM-1 JMS PRINT JMS CRLF TAD OPT2 /P AND (400 SNA CLA TAD (14 /FORM FEED JMS OUTCHR TAD MOIN JMP DOMOIN PFLAG, -1 /PASS INDICATOR FLAG FILEC, 0 /FILE COUNT COUNTER SKPCNT, 0 /SKIPPING FACTOR BETWEEN TWO FILE PROCESSES SKPCTR, 0 /ACTIVE COUNTER FOR SKIPS ROWCNT, 0 /INIT SKIP FOR EACH ROW COLCNT, 0 SKPCTB, 0 COLCTR, 0 ESAVE, DSK, 0 DCA AI2 JMS 200 12 5723 AI2, 0 0 JMP IDBLVT TAD AI2 JMP I DSK CHKEX, 0 /SUPPLEMENTAL ROUTINE TO ALPHABETIZE DCA XR 2 /BY EXTENSION FIRST - COURTESY OF CDF 10 /REV. GEOFFREY CHASE O.S.B. 3/21/77 IAC /PORTSMOUTH ABBEY, PORTSMOUTH, R.I. AND OPT2 /X CDF 0 SNA CLA JMP NOX /NORMAL METHOD TAD I XR 1 CLL CIA /COMPARE EXTENSIONS TAD I XR 2 SZA CLA JMP SAME-2 /SWAP? IAC NOX, TAD (-4 JMP I CHKEX PAGE
/THE DATE ROUTINE NOW PRINTS EITHER ALPHANUMERIC DATES /OR STRAIGHT NUMERIC ONES IF THE USER SPECIFIES "/N". /MODIFIED BY JIM VAN ZEE, U/W DEPT. OF CHEM. 9/10/76. /ADDED V3D CODE TO PRINT DATES AFTER 1977. 4/15/76. PDATE, 0 SNA JMP FDATE DCA TEMP DCA PRBLNK /SUPPRESS BLANKS JMS CONVTP TAD DAFLG SZA CLA JMP M0NTHS M0NS, TAD TEMP RTR RAR AND (37 JMS PRNUM 3 TAD DAFLG SNA JMP MONTHS MONS, CMA CLL RAL /0 OR -2 TAD ("/ JMS CONVTP TAD TEMP JMS CKYEAR /COMPARE WITH CURRENT YEAR TAD TEMP TAD (106 /1970 DCA TEMP CDF 0 TAD I DIGIT-1 /=7777 CDF 10 AND (600 /GET EXTENDED DATE BITS CLL RTR RTR TAD TEMP JMS PRNUM TAD MONS+2 /'JMS CONVTP' DCA PRBLNK JMP I PDATE FDATE, TAD LNCNT /SEE IF AT END OF LINE? IAC /AC=0 NOW IF YES SNA CLA /OUTPUT SPACES TO FILL DATE SLOT JMP I PDATE /NO NEED FOR SPACES IF AT END OF LINE TAD DAFLG /0 OR -1 TAD (12 /10 SPACES IS WHATS NEEDED JMS BLANK JMP I PDATE /LEAVE M0NTHS, JMS MOONS JMS PRNUM 3 TAD ("/ JMS CONVTP JMP M0NS MONTHS, TAD ("- JMS CONVTP JMS MOONS TAD (-15 SPA CLA JMS MOONS DCA PRNUM TAD PRNUM TAD PRNUM TAD PRNUM TAD (DATTAB-4 DCA XR ACM3 DCA CNT TAD I XR JMS I OSWTCH ISZ CNT JMP .-3 JMP MONS PWRTEN, -1750;-144;-12;-1;DIGIT=. MOONS, 0 TAD TEMP CLL RAL RTL RTL AND (37 JMP I MOONS PRNUM, 0 DCA NUM TAD I PRNUM /POSITION TO FORCE PRINTING CIA DCA PTR /(OPTIONAL) TAD (TAD PWRTEN DCA DIVLPY DCA PNTFLG DCA DIGIT DIVLPY, TAD PWRTEN SNA JMP I PRNUM CLL TAD NUM SNL JMP PRTDIG DCA NUM ISZ DIGIT JMP DIVLPY PRTDIG, CLA ISZ DIVLPY TAD DIGIT ISZ PNTFLG SZA JMP .+3 ISZ PTR JMP PRBLNK TAD (260 JMS CONVTP CMA JMP DIVLPY-2 PRBLNK, JMS CONVTP JMP DIVLPY-2 NUM= XR 1 PNTFLG= XR 2 PAGE
/THIS IS THE ALPHABETIZE ROUTINE. /WRITTEN BY LARRY FOWLER, BCAC 4/22/75 SORT, 0 CDF 0 TAD I (DIRCTY+4 /POINTER TO ADDITIONAL WORD FLAG CIA /NEGATIVE NUMBER OF ADDITIONAL WORDS TAD (5 /SET FILE SIZE DCA SIZE TAD (DIRCTY MORSEG, DCA POINT1 /SET BLOCK POINTER TAD I POINT1 /GET BLOCK FILE COUNT DCA CNT1 /SET FILE COUNTER ISZ POINT1 ISZ POINT1 /POINT TO BLOCK LINK WORD TAD (3 TAD POINT1 TRYAGN, DCA PT1 /SET POINTER TO FILE TAD POINT1 DCA POINT2 /SET BLOCK SCAN POINTER TO LINK WORD TAD I PT1 /GET FIRST DIRECTORY FILE WORD SZA CLA /IS IT AN EMPTY JMP GOTONE /NO AC2 TAD PT1 /WAS EMPTY, PASS IT UP ISZ CNT1 /IS THIS THE LAST FILE IN THIS BLOCK JMP TRYAGN /NO DONE, CLA TAD I POINT1 /YES GET LINK WORD SNA CLA /IS THIS THE LAST BLOCK JMP I SORT /YES DF=0 TAD POINT1 TAD (376 /NO SET BLOCK POINTER TO NEXT BLOCK JMP MORSEG /AND CONTINUE SORTING GOTONE, TAD CNT1 /WE GOT A GOOD FILE TO CHECK IAC SNA /IS IT THE LAST FILE ON THIS BLOCK JMP ENDBLK /YES DCA CNT2 /NO SET FILE SCAN COUNTER TAD PT1 TAD SIZE KPLOOK, DCA PT2 /SET FILE SCAN COUNTER TO NEXT FILE TAD I PT2 SZA CLA /IS IT AN EMPTY JMP CHECK /NO LETS CHECK THE ORDER AC2 /YES PASS IT UP RETURN, TAD PT2 /SET FILE SCAN POINTER TO NEXT FILE ISZ CNT2 /WAS THE PREVIOUS FILE THE LAST FILE JMP KPLOOK /NO LETS CHECK IT OUT LIMIT= -DIRCTY-3000 /NEGATIVE UPPER LIMIT FOR DIRECTORY
ENDBLK, CLA TAD I POINT2 /YES GET BLOCK LINK WORD SNA CLA /IS THIS THE LAST BLOCK JMP RECYCL TAD POINT2 TAD (376 /NO SET BLOCK SCAN POINTER TO NEXT BLOCK DCA POINT2 TAD I POINT2 /GET FILE COUNT DCA CNT2 /RESET FILE SCAN COUNTER ISZ POINT2 ISZ POINT2 /POINT TO BLOCK LINK WORD TAD POINT2 TAD (LIMIT /DID WE OVERFLOW THE BUFFER SMA CLA JMP BIDIR /YES DIRECTORY MUST BE BAD TAD (3 /SET FILE SCAN POINTER TO NEXT BLOCK TAD POINT2 JMP KPLOOK /KEEP LOOKING RECYCL, TAD PT1 TAD SIZE /RESET BLOCK FILE POINTER ISZ CNT1 /IS THIS THE LAST FILE JMP TRYAGN JMP DONE /YES CHECK IF WE ARE DONE /THIS ROUTINE CHECKS IF THE FILES ARE IN THE RIGHT ORDER CHECK, AC2 /MODIFIED TO ALPHABETIZE BY EXTENSION TAD PT1 DCA XR 1 /IF /X IS SPECIFIED IN ADDITION TO /A AC2 TAD PT2 JMS CHKEX DCA CNT0 TAD PT1 DCA CK1 /SET FIRST CHECK POINTER TAD PT2 DCA CK2 /SET SECOND CHECK POINTER NXTCHR, TAD I CK1 CIA CLL TAD I CK2 /COMPARE THE TWO WORDS SNA /ARE THEY THE SAME JMP ZERO /YES INCREMENT AND CHECK NEXT WORD SNL CLA /NO, BUT ARE THEY IN THE RIGHT ORDER JMS SWAP /WRONG ORDER, LETS SWAP THEM AROUND SAME, TAD SIZE /RIGHT ORDER, SET UP RETURN (6 IN THE AC) JMP RETURN ZERO, ISZ CK1 /INCREMENT CHECK POINTERS ISZ CK2 ISZ CNT0 /HAVE WE CHECKED ALL FOUR WORDS JMP NXTCHR /NO CONTINUE CHECKING JMP SAME /THIS SHOULD NEVER BE. TWO FILES WITH THE /SAME NAME, UNLESS ONE IS A TENTATIVE /FILE WHICH WAS NOT CLOSED
/THIS ROUTINE DOES THE ACTUAL SWAPPING SWAP, 0 TAD PT1 DCA CK1 /SET FIRST SWAP POINTER TAD PT2 DCA CK2 /SET SECOND SWAP POINTER TAD SIZE /GET FILE ENTRY SIZE CIA DCA CNT0 /SET COUNTER TO NEGATIVE FILE SIZE CONTIN, TAD I CK1 DCA HOLDIT TAD I CK2 DCA I CK1 TAD HOLDIT DCA I CK2 ISZ CK1 ISZ CK2 ISZ CNT0 JMP CONTIN JMP I SWAP PT1, 0 PT2, 0 CK1, 0 CK2, 0 POINT1, 0 POINT2, 0 CNT0= XR 3 CNT1= XR 4 CNT2= XR 5 SIZE= XR 6 HOLDIT= XR 7 PAGE
*4000 TYPE, 0 DCA GTSXBT TAD (217 /^O JMS CTYPE DCA ECHO TAD ECHO SNA CLA JMP I TYPE TAD (203 /^C JMS CTYPE JMP SPURGE TAD (220 /^P JMS CTYPE JMP SPURGE+1 TAD GTSXBT JMS TTY JMP I TYPE SPURGE, CMA DCA ALTOPT JMP ABORT CTYPE, 0 DCA ROTR6 TAD (200 KRS CIA TAD ROTR6 SNA CLA KSF JMP IDLE KCC TAD ("^ JMS TTY TAD ROTR6 TAD (100 JMS TTY TAD (215 JMS TTY SKP IDLE, ISZ CTYPE JMP I CTYPE TTY, 0 TLS TSF JMP .-1 TAD (-215 SZA CLA JMP I TTY TAD (212 JMP TTY+1 ECHO, 1 /THIS IS THE ERROR MESSAGE PRINTER ERROR, 0 ISZ ECHO AC4000 /='TYPE' DCA OSWTCH TAD (-100 DCA CNT PLOOP, TAD I ERROR JMS GTSXBT DCA BLANK TAD BLANK JMS CONVTP ISZ CNT TAD BLANK SZA CLA JMP PLOOP TAD (215 JMS TYPE ISZ ERROR JMP I ERROR BLANK, 0 /BLANKS ROUTINE CIA DCA CRLF JMS CONVTP ISZ CRLF JMP .-2 JMP I BLANK CONVTP, 0 SZA TAD (240 AND (77 TAD (240 JMS I OSWTCH JMP I CONVTP GTSXBT, 0 CLL RAL TAD CNT CML RAR DCA ROTR6 TAD I ROTR6 SNL JMS ROTR6 AND (77 JMP I GTSXBT ROTR6, 0 RTR RTR RTR JMP I ROTR6 CRLF, 0 TAD (215 JMS OUTCHR TAD (212 JMS OUTCHR JMP I CRLF IDBLVT, JMS ERROR NOTTY+40 JMP ABORT SYS1, "P;"S;"/;"8;0 PAGE
VERNO, TEXT /DIRECT V5D/ BADIRD, TEXT /ERROR READING INPUT DIRECTORY/ SPRBLM, TEXT /NO ROOM FOR OUTPUT FILE/ OUERR, TEXT /ERROR WRITING FILE/ CLERR, TEXT /ERROR CLOSING FILE/ NFLEIN, TEXT /DEVICE DOES NOT HAVE DIRECTORY/ BIGEQ, TEXT /EQUALS OPTION BAD/ ILLQ, TEXT /ILLEGAL ?/ ILLA, TEXT /ILLEGAL */ BADDIR, TEXT /BAD INPUT DIRECTORY/ NOTTY, TEXT /THERE IS NO HOPE-THERE IS NO TTY HANDLER IN YOUR SYSTEM/ EMPTYM, "<;"E;"M;"P;"T;"Y;">;240;240;0 FRBLM, 240;"F;"R;"E;"E;240;"B;"L;"O;"C;"K;"S;0 VOLMES, 240;240;"V;"O;"L;"U;"M;"E;"-;"-;0 SYS2, "O;"S;"/;"8;0 SYS3, "O;"S;"/;"1;"2;0 SYS4, "D;"E;"C;"S;"Y;"S;"T;"E;"M;"-;"8;0 SYSMES, 240;"S;"Y;"S;"T;"E;"M;"-;"-;"V;"E;"R;"S;"I;"O;"N;240;0 "B;"A;"D /PROTECTION AGAINST BAD DATES DATTAB, "J;"A;"N "F;"E;"B "M;"A;"R "A;"P;"R "M;"A;"Y "J;"U;"N "J;"U;"L "A;"U;"G "S;"E;"P "O;"C;"T "N;"O;"V "D;"E;"C CKYEAR, 0 /EXTENDED DATE CHECK FOR OS/8-V3D AND (7 DCA TEMP TAD DATE /COMPARE YEARS SNA JMP I CKYEAR /UNLESS THERE IS NO DATE AND (7 CIA TAD TEMP SMA SZA CLA TAD (-10 /TOO BIG, DECREASE BY 8 JMP I CKYEAR $



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search