File EXPIP.PA (PAL assembler source file)

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

/^  APRIL   08    1975
EJECT EXPIP BY LARS PALMER HASSLE SWEDEN
	VERN="7^100
	VERL="B&77
	VERSION=VERN+VERL
/V1 72
/V2 73
/V3 JAN3 DECUS
/V4 JUNE 73
/V5 JULY 73
/5A AUGUST 73
/5B NOVEMBER 73 TO DECUS
/	BATCH TRAP AND REWRITTEN CONDITIONALS
/5C DECEMBER 73 SOME BUGS REMOVED
/	/Z CORRECTED 
	/MAX SIZE TRANSFERRED BLOCKED AT 256(10)BLOCKS
/
/5D
/ ON /K 0 FILES GAVE ERROR CORRECTED JAN 74
/	BATCH MODE IS INKOMPATIBLE WITH 12 K <CD OVERLAYED>
/	THIS VERSION EXITS IF A 12 K VERSION IS RUN UNDER BATCH
/5E APRIL 22
/ /U AND /N ADDED
/5F MAY 15  CHAINING FIXED
/SIZE=3777
/6 MERGE OPTION ADDED REQUIRES MUCH RE-ARRANGING
/6A	THE SRCATCH BLOCKS USED TO ELIMINATE THE ORDERING OF OPTIONS
/6B   12K OPTION REMOVED
/6CCHANGES MADE TO CHAIN ENTRY /Y,*.*,AND ALTMODES
/7A OPTIONS UPDATED NOT TO CONFLICT WITH FOTP
/	OLD	NEW
/	Q	W	WILD
/	S	Q	QUERY
/	X	V OR X
/	C	L	LIST
/7B THE /I/M LOGIC IMPLEMENTED
/USERS MANUAL IN FILE EXPIP.CO
/CONDITIONAL ASSEMBLY PARAMETERS SEE EXPIP.CO
ZDEV=0
IFNDEF SIZE<IFNDEF FIRSTFI <ZDEV=1>>/FOR /H TEXT
DECIMAL
IFNDEF SIZE <SIZE=730>
OCTAL
IFNDEF FIRSTFI <FIRSTFI=7>
IFNDEF STAR<STAR=5200>
IFNDEF MQL1 <MQL1=7421>
IFNDEF TEXTLI <TEXTLI=1>
IFNDEF ZERIN <ZERIN=0>
IFNDEF ZEROUT <ZEROUT=0>
IFNDEF ALLNAM <ALLNAM=0>
IFNDEF LPT <LPT=660>

/SOME OS8 DEFINITIONS
DATE=7666
OPTAL=7643	/COMMAND DECODER OPTIONS A-L
OPTMX=7644	/D:O M-X
OPTY9=7645	/AND D:O Y-9
OPTH=7642	/HIGHORDER WORD
OPTL=7646	/AND LOW ORDER
DCW=7757	/DEVICE CONTROL WORD TABLE
JSW=7746	/CHANGED TO NO RESTART ON /M
USR=200		/USR IS CEPT IN CORE
INDEV=7605	/LOCATION OF INPUT POINTER FROM C.D.



/THIS CONSTRUCTION ALLOWS FOR /1 SOME EXTRA ONCE ONLY CODE /2 A WAY TO TRAP ODT SET A BREAKPOINT AT ODT AND CHANGE WHEN USR IS /IN CORE FIELD 0 *200 ISZ CHAIN /NON CHAINED TO CLA CIF 10 JMS 7700 10 ODT, CLA CLL TAD 7777 AND (2000 /BATCH FLAG= 2000 BIT SNA CLA /BATCH JMP NOBATCH CDF 10 DCA UTEST /DISABLE /U DCA BATCH /CHECK FOR /Y UNDER BATCH ! CDF 0 TAD 7777 AND (70 /BATCH FIELD TAD (CIF DCA TTYFAK+1 TAD (TTY DCA 11 TAD (TTYFAK DCA 10 TAD (-6 DCA 20 CDF 0 TAD I 10 CDF 10 DCA I 11 ISZ 20 JMP .-5 NOBATCH, CDF 0 TAD (CDF CIF 10) /NOW CHANGE START ADRESS DCA 7744 TAD (BESURE DCA 7745 CDF CIF 10 JMP START CHAIN, 0 /CHAINED TO FLAG 1=NO 0=YES FIELD 0 /FORCE LITERALS NOPUNCH *200 INHAND, ZBLOCK 400 OUTHAN, ZBLOCK 400 DIRBUF, ZBLOCK 400^6 DIREND, .-1 IOBUFF=. IOFIELD=0 IOTOPP=7577 IOMAX=IOTOPP-IOBUFF IOBLK=IOMAX%400 ENPUNCH
FIELD 1 *20 FILP, 0 /USED AS A POINTER INTO THE FILE NAME TABLE /0= DO NOT SAVE NAMES OADDR, 0 /OUTPUT HANDLER ADRESS IADDR, 0 /INPUT HANDLER ADRESS T1, 0 /POINTS AT CURRENT FILENAME SET IN BLOCKS T2, 0 /POINTS AT FILE LENGTH T3, 0 /POINTS AT FILE DATE WORD /T3 IS ALSO USED FOR THE FOLLOWING POINTERS / A)OUTPUT FILE BLOCK SET ON 1ST LOOP IN COPY / B)SET TO 0 ON SUCCESSFUL COPY -1 OTHERWAYS T4, 0 /TEMPORARY CROSS PAGE STORAGE T5, 0 BPOINT, 0 /POINTS AT CURRENT DIRECTORY BLOCK SET IN BLOCKS COUNT, 0 /NUMBER OF FILES OSW, 0 /SET TO 1 TO INHIBIT NAMES ON ^O LSW, 0 /1 IF MORE BLOCKS 0 IF NO MORE BLOCKS MODSW2, 0 /SAVE LOCATION FOR MODSW MODSW, 0 /0=NORMAL(NON /Q) 1=ONLY COPYING(2ND LOOP) /-1=ONLY DIRECTORY(1ST LOOP) NLOOP, 0 /NUMBER OF COPIES ON THE=N OPTION RFSS, 0 /START OF /M /R FILE / NOTE 10037 IS THE LAST FREE LOCATION ON P 1 ****
*2000 /A START TO 12000 WILL WORK BESURE, JMS I P7700 10 EXIT, FIRST, JMS LF /THIS OR A TLS IS ESSENTIAL !! TAD DSAVE DCA DATE OUTJMP, SKP /CLEARED IF ALT SET ON CHAINING JMP OUT TAD (FILST DCA FILP /FIRST INPUT FILE NAME JMS USR 13 /REMOVE ANY DIRECTORY INTHE USR /OR A LOOKUP CAN GO WRONG JMS DECODE P7700, SMA CLA /7700 ! JMS INERR /NOT FILE STRUCTURED INPUT ZZIA=. DCA OSW /NAMES PRINTED JMP I EXADD EXTSKP, TAD OPTAL AND (0500 SZA CLA JMP FDSTAR /D/F DO NOT REQUIRE AN OUTPUTHANDLER TAD OPTMX AND (100 SZA CLA JMP RSTART /R DOES NOT WANT OUTPUT HANDLER TAD 7600 AND (17 /IGNORE ANY POSSIBLE [LENGTH] SNA JMS OUTERR /WE NEED A OUTPUT BUT NONE GIVEN ZZOG=. RCONT, DCA 7600 /OK LENGTH REMOVED; MAYBE SET = DSK OR SYS TAD 7600 JMS USR 1 /FETCH OUTHANDLER OA, 0 JMS OUTERR ZZOA=. TAD 7600 TAD (DCW DCA T1 TAD I T1 DCA DEVTYP /FOR LATER USE TAD DEVTYP SPA CLA /FILE STRUCTURED JMP NOLOOP TAD OPTL CIA SNA NOLOOP, CLA CMA DCA NLOOP TAD OPTAL RAR /L REQUIRES NO/W TRANSFER SPA CLA JMP FDSTAR TAD OPTMX RTR /WILD TRANSFER ? SNL CLA JMP FDSTAR /NO TAD 7600 /IF WE GET HERE SO MUST INPUT#OUTPUT CIA /AS WE WILL DO SOME TRANSFER UNDER /W TAD INDEV SNA CLA JMS INERR /SAME DEVICES TRY AGAIN ZZIB=. CMA /IF /W SET MODSW=-1 OTHERWAYS 0 FDSTAR, DCA MODSW2 TAD MODSW2 DCA MODSW TAD INDEV JMS USR 1 /FETCH IN HANDLER IA, 0 JMS INERR ZZIC=. TAD OA /THE OUTPUT ADRESS PUT IT ON P 0 DCA OADDR TAD IA /AND THE INPUT DCA IADDR TAD 7604 /WE USE THE =OPTION WORD AS AN SPECIAL DCA OPTH /LOCATION TO SAVE THE 6TH INPUT FILE /USED BY THE X.FT<X.SS CONSTRUCTION ON SECOND LOOP OF /W JMS LF JMP SLOOP /OK OVER TO NEXT PAGE RSTART, TAD (TEXTIN DCA RFS DCA COPY /NO ASCII IAC /THE /R OPTION ALWAYS USES DEVICE #1(SYS) JMS MCONT IAC JMP RCONT /USED BY /M AND /R TO LOCATE OUTPUT FILES MCONT, 0 JMS USR /LOCATE LARGEST FILE ON SYS 3 RFS, 0 /NAME IS IRRELEVANT MUST NOT START WITH 0 RFL, 0 JMS OUTERR ZZOB=. TAD RFL /WE NEVER NEED A /R FILE >4000 BLOCKS ! CIA SPA CIA CLA CLL CMA RAR /3777 IAC /WE MAKE THE FILE 1 BLOCK TO SMALL FOR /M DCA RFL TAD RFS DCA RFSS JMP I MCONT DEFAUL, 0 /LOADED ON INITIALIZATION WITH DEVICE NUMBER FOR DSK DSAVE, 0 /SAVE TODAYS DATE EXADD, EXTOPT /CHANGES BETWEEN EXTOPT AND EXREAD OUT, CDF CIF 0 JMP 7600 PAGE
SLOOP, CIF 0 /FETCH DIRECTORY JMS I IADDR 1400 /6 BLOCKS INTO F 0 DIRBUFF 1 JMS INERR /WHAT ? ZZID=. RLOST, DCA COUNT /NUMBER OF FILES FOR THE /R&/D OPTIONS TAD (DIRBUF-400) /THE FIRST LOCATION FOR INPUT DIRECTORY DCA BPOINT TAD FILP /IF FILP=0 NO CHANGE SZA CLA TAD (FILST /THE FIST LOCATION FOR OUTPUT NAMES DCA FILP IAC /YES OK FORCE BLOCKS TO USE NEW DIRECTORY INFILE, JMS BLOCKS/NEXT FILE AC=0 IF NONE SNA JMP EOF /NO MORE FILES TAD (3 DCA ACCT /FILE EXTTENSION TAD (7611 /FIRSY FILE EXTENSION IN LOC 7611 DCA T4 TAD I T4 TAD (-STAR /5200 OR 5201 ? SNA CLA JMP ACCEPT /IF NO INPUT EXTENSION ACCEPT ALL FILES TAD MODSW SMA SZA CLA /IF MODSW=1 FORCE THE OUTPUT EX TO BE USED AS INPUT !!! CMA TAD (-5 DCA T5 /=5 OR 6 DEPENDING ON MODSW FIL1X, TAD I T4 CIA TAD I ACCT /COMPARE TWO EXTENSIONS SNA CLA JMP ACC1 /EQUAL TAD T4 TAD (5 DCA T4 ISZ T5 /ANY MORE POSSIBLE EXTENSIONS JMP FIL1X /YES TAD OPTMX /IF WE COME HERE THERE IS NO MATCH AND (5 /X AND /V SNA CLA JMP NOFILE /NO /X SPECIFIED ACCEPT, TAD OPTAL AND (100 /TEST FOR /F SZA CLA JMP SLASHF TAD OPTMX /TEST FOR /S<NAMES AND ? TO TTY> AND (200 /Q SNA CLA JMP NOS /NO /S TAD MODSW SMA SZA CLA JMP NOS /DO NOT REPEAT QUESTION TAD OSW SZA CLA /SKIP FILES ON ^O AND /S JMP NOFILE JMS NPRINT JMS YESNO SNA CLA JMP NOFILE /ANY ANSWER BUT Y NOS, TAD OPTAL /FILES ACCEPTED NOT /F CHECK FOR OTHER OPTIONS RTL RAL SPA CLA JMP SLASHD /D MBLK1, SKP /NOP UNDER /M TRANSFER JMP SLASHR TAD OPTMX AND (0100 SZA CLA JMP SLASHR /R JMS COPY /IF WE GET HERE ITS A STRAIGHT COPY HE WANTS INFILE /IF TO LARGE TAKE NEXT FILE NFIL, TAD MODSW SPA CLA JMP INFILE /SKIP INCREMENTING ON FIRST LOOP TAD FILP SNA CLA JMP INFILE TAD (-5 DCA ACCT CMA TAD T1 DCA 10 TAD I 10 DCA I FILP ISZ FILP ISZ ACCT JMP .-4 ISZ COUNT /NUMBER OF FILES TAD I T2 DCA I FILP ISZ FILP /POINT AT NEXT POSITION JMP INFILE SLASHD, DCA I T3 /FOR THE /K OPTION TAD OPTMX AND (200 /IF NAME WAS NOT OUTPUT TO /Q DO SO NOW SNA CLA SLASHF, JMS NPRINT /NAME WILL BE SAVED ALSO UNDER /F BUT 2 LOCATINS ARE SAVED JMP NFIL ACC1, TAD OPTMX AND (5 SNA CLA JMP ACCEPT /X NOFILE, CMA DCA I T3 JMP INFILE ACCT, 0 PAGE
/WE GET HERE ON /R AND /D WHEN IT IS TIME TO SWAP IN AND OUT DEVICES /AND ON /M AFTER ONE PASS REVERS, TAD COUNT SNA JMP EXIT /NO FILES TO OPERATE ON CIA DCA COUNT TAD IA DCA OADDR /SWAP IN AND OUT TAD OA DCA IADDR TAD OPTMX AND (100 /R SZA CLA JMP REVR /R TAD OPTAL AND (400 SZA CLA JMP DELETE /D JMP EXIT /ANYTHING ELSE REVR, TAD MODSW2 //R SET MODSW=0 ON FIRST PASS DCA MODSW CIF 0 JMS I OADDR 0100 0 0 /REWIND TAPE NOP /WE DONT REALLY CARE DO WE JMS TPRINT RTEXT JMS YESNO SNA CLA /5C JMP EXIT /ABORTED THE OPERATION TAD (DIRBUFF /NOW WE MUST MAKE A DIRECTORY FOR THE REVERSE OPERATION DCA T1 TAD RFSS DCA T2 TAD (FILST-1 DCA 11 PLOOP3, CMA TAD T1 DCA 10 TAD COUNT TAD (50 /WE CONSTRUCT THE DIRECTORY WITH 50 FILES/BLOCK SMA SZA JMP LASTB /LESS THAN 50 LEFT DCA COUNT TAD (-50 CLL CML /LINK TO NEXT SEGMENT PLOOPL, CDF 0 DCA I 10 /-COUNT TAD T2 DCA I 10 /IST BLOCK RAL /GET LINK DCA I 10 DCA I 10 CMA DCA I 10 /1 ADD WORD USED TO SAVE TEMPORARY INFO TAD I T1 /COUNT DCA T3 PLOOP2, TAD (-5 DCA T4 PLOOP1, CDF 10 TAD I 11 CDF 0 DCA I 10 ISZ T4 JMP PLOOP1 CDF 10 TAD I 11 DCA T5 TAD T5 CIA TAD T2 DCA T2 /INCREMENT FILE COUNT CDF 0 TAD T5 DCA I 10 CDF 10 ISZ T3 JMP PLOOP2 /MORE FILES IN THIS SEGMENT TAD COUNT SNA CLA JMP PEXT /END OF ALL SEGMENTS TAD T1 TAD (400 DCA T1 JMP PLOOP3 LASTB, 7600 TAD COUNT DCA T4 DCA COUNT CLL TAD T4 JMP PLOOPL PEXT, TAD OPTMX AND (2023 /***NOTE ONLY KEEP /N /T /X /V IN SECOND LOOP DCA OPTMX TAD OPTAL AND (4201 /ONLY /A /L /E IN 1ST WORD DCA OPTAL TAD INDEV DCA I LASTB DCA OSW /MUST CLEAR THE ^O IF SET TAD (STAR / .* DCA 7611 /MUST HAVE .* TO ACCEPT FILES IN REVERSE JMP RLOST /WE NOW SIMULATE A NORMAL FORWARD /TRANSFER WITH A NEW FILE DIRECTORY !! PAGE
EXITT, TAD LSW /WE COME HERE TO CHECK IF ANY INPUT FILE BLOCKS LEFT SZA CLA JMP INFILE-1 ISZ NLOOP JMP SLOOP /ONCE MORE TAD OPTAL RTR /CHECK FO /K SNL CLA JMP EXIT /NO IE READY TAD COUNT /NO OF FILES SNA JMP EXIT /5C JAN 74 CIA DCA COUNT JMP DELETE /AND DELETE FILES SLASHR, DCA MODSW /MODSW MUST BE 0 ON FIRST LOOP TAD I T2 /FILE SIZE CIA TAD RFL /AND SIZE LEFT ON SYS SPA CLA JMP .+3 JMS SOFT/FILE TOO LARGE AC=0 INFILE TAD DIRECT+1 /1ST BLOCK DCA RC1 TAD RFS /OUTPUT BLOCK DCA RC2 MBLK3, JMP .+3 /NOP UNDER /M CLA IAC DCA ZSW /AWAYS ASCII CONVERSION TAD I T2 /AND SIZE JMS FCOP /AND COPY RC1, 0 RC2, 0 TAD I T2 /INCREMENT THE FILE SIZES CIA TAD RFL DCA RFL TAD I T2 CIA TAD RFS DCA RFS JMP I MTRAP /AND SAVE THE FILE NAME FOR SECOND PASS MTRAP, NFIL /M CHANGES THIS TO SLASHF TO GET FILENAMES MBLK2, /CHANGED TO NOR ON /M EOF, CLA SKP /WE COME HERE ON /W AT END OF BLOCK AND ON /NON /Q AT END OF FILES JMP M2 TAD OPTMX AND (100 /R TAD OPTAL AND (500 SZA CLA JMP REVERS /D OR /R / /F ALSO GOES PAST BUT IS SORTED OUT AT REVERSE /N.B. DO NOT INCLUDE /M AS /A WOULD GO PAST AND /A IS LEGAL /WITH MODSW REQUESTING SECOND PASS TAD MODSW SMA CLA JMP EXITT /NO SECOND PASS DCA OSW /IF SET BY ^S IAC DCA MODSW /MODSW =1 ON SECOND LOOP CMA TAD BPOINT /WE SET THE NUMBER OF FILES IN THIS BLOCK /AND THE 1ST BLOCK NR BACK TO ORIGINAL DCA 10 TAD (DIRECT-1 DCA 11 CMA RAL CLL CLA /-2 DCA D2 CDF 0 TAD I 10 CDF 10 DCA I 11 ISZ D2 JMP .-5 CMA JMP INFILE DELETE, JMS LF JMS TPRINT TEXTDO JMS YESNO SNA CLA JMP EXIT /HE ABORTED THE /D ? GOOF? DELE2, CLA CMA /1 DATE WORD DCA DIRECT+4 /IN FAKE DIRECTORY TAD (FILST) /FROM BEGINNING OF LIST DCA T1 D3, JMS TSET /SET ALL POINTERS TAD I T3 SZA CLA JMP D4 /ONLY DELETE IF DATE WORD=0 TAD T1 DCA D2 TAD INDEV JMS USR 4 /CLOSE D2, 0 /LENGHT=0 IE DELETE 0 JMP DERR /DELETE ERROR NOR FATAL D4, TAD T1 /INCREMENT FILE COUNT TAD (6 DCA T1 ISZ COUNT JMP D3 /MORE TO DELETE JMP EXIT /NO PAGE
CHECK, 0 /CHECKS FOR ^O AND ^S DCA SAVAC /PRESERVE AC KSF JMP CRTN /FLAG OF NOTHING TO DO TAD (200 /FOR THOSE WITH PARITY KEYBOARDS KRB TAD (-223 /^S ? SZA JMP NOCT2 TAD (207 JMS TTY /WE SAW IT OK TAD OPTMX /YES AND (7577 TAD (200 /SET /Q SWITCH DCA OPTMX JMP CRTN NOCT2, TAD (223-217) /^O SZA CLA JMP CRTN IAC DCA OSW CRTN, TAD SAVAC JMP I CHECK SAVAC, 0 YESNO, 0 /TEST TTY RESPONCE FOR Y OR N CLA TAD (4077 / ' ?' JMS PRINT BATCH, JMP KEYBRD /NOP ON BATCH TAD OPTY9 SMA CLA /Y ? JMP NO JMP YES KEYBRD, KSF JMP .-1 TAD (200 KRS /FLAG IS CLEARED IN CHECK JMS CHECK TAD (-331 SZA CLA JMP NO /NOT A Y YES, TAD (3105 /ECHO 'YES' JMS PRINT TAD (2300 JMS PRINT IAC /AND RETURN WITH AC=1 JMP I YESNO NO, TAD (1617 /ECHO 'NO' JMS PRINT JMP I YESNO /AND RETURN WITH AC=0 DECODE, P7700 /ON ENTRY WE JUMP INTO DECODE JMS USR 5 /DECODE 5200 /NO LOOKUP 0 /PRESERVE TENT FILES FOR /M CHSTART, /IF CHAINED TO PRESUME CD AREAS SET TAD (OUTHAN+1 /THE 1 GIVES 2 PAGE HANDLER DCA OA TAD (INHAND+1 DCA IA TAD INDEV /INPUT DEVICE SNA TAD DEFAUL /NONE GIVEN SO USE DSK: DCA INDEV /IF IT WAS CHANGED TO DSK TAD INDEV /FETCH TO CHECK FOR FILE STR TAD (DCW /DCW TABLE DCA T1 TAD I T1 JMP I DECODE IFZERO TEXTLI <XLIST> TEXTIN, TEXT /IN-ERR/ TEXTOU, TEXT /OUT-ERR/ IFZERO ALLNAM <TEXTSP, TEXT /TOO LARGE/> IFNZRO ALLNAM <TEXTSP, TEXT /NOT MOVED /> TEXTDO, TEXT /DELETE OK/ RTEXT, TEXT /READY/ ZTEXT, TEXT /ZERO OUTPUT/ DTEXT, TEXT /DEL-ERR/ TEXT0D, TEXT /NO INPUT DATE/ IFZERO TEXTLI <XLIST> PAGE
/DIRECT + CONTAINS / 0 NUMBER OF FILES(-) / 1 STARTING BLOCK NR / 2 LINK NEXT SEGMENT / 3 / 4 MINUS NUMBER OF ADD INF WORDS / 5 1ST FILE ENTRY /CALLING JMS BLOCKS / AC=0 FETCH NEXT FILE / AC=-1 REUSE CURRENT BLOCK / AC=+1 NEXT BLOCK /ON RETURN AC<> FILE FOUND = 0 EOF BLOCKS, 0 JMS CHECK SNA JMP FILINC /AC=0 IE FETCH NEXT FILE SPA CLA JMP REUSE /REUSE CURRENT BLOCK RESET POINTERS NEXTB2, TAD MODSW2 /NOW FETCH THE NEXT DIREC BLOCK DCA MODSW /AT THIS POINT ALWAYS SET MODSW TO ITS /REAL VALUE FOR NEXT BLOCK DCA LSW /AND MAYBE NO MORE BLOCKS ? TAD BPOINT /MUST BE SET WHEN WE GET HERE TAD (400 /INCREMENT ONE BLOCK DCA BPOINT CLA CMA TAD BPOINT /NOW MOVE 400 LOCATIONS DCA 10 /FROM LOC POINTED AT BY BPOINT TAD (DIRECT-1 /TO DIRECT DCA 11 TAD (-400 DCA T1 NEXTB1, CDF 0 TAD I 10 CDF 10 DCA I 11 ISZ T1 JMP NEXTB1 REUSE, TAD (DIRECT+5) /POINTS AT 1ST FILE DCA T1 NEXT, TAD I T1 SZA CLA /ZERO FILE ? JMP BRET ISZ T1 /SKIP OVER ZERO FILE JMP FX FILINC, CLA TAD DIRECT+4 /NO OF ADD INFO WORDS SNA JMP NODAT /YOU MUST HAVE AT LEAST 1 I NEED THE SPACE CIA TAD T1 TAD (4 DCA T1 /POINT AT LENGHT FX, TAD I T1 /INCREMENT POINTERS PAST THIS FILE CIA /T1 POINTS AT FILE LENGTH AT THIS POINT TAD DIRECT+1 DCA DIRECT+1 /POINTS AT WHERE NEXT FILE STARTS ISZ T1 /POINT AT LOCATION AFTER LENGHT=NEXT FILE ISZ DIRECT /ONE LESS FILE LEFT JMP NEXT CLA CLL CML RTL /=TAD (2 TAD BPOINT /NO MORE FILES DCA T3 CDF 0 TAD I T3 /FETCH LINK TO NEXT SEGMENT CDF 10 SNA CLA /NO MORE BLOCKS JMP I BLOCKS /OK RETURN WITH AC=0 TAD MODSW SNA CLA JMP NEXTB2 /IF MODSW=0( NON/Q/F/D)SIMPLY TAKE NEXT BLOCK IAC DCA LSW /OTHERWAYS SET LSW TO MARK ANOTHER BLOCK JMP I BLOCKS /AND LET THE MAIN PROGRAM SORT IT OUT BRET, JMS TSET /SET T2 & T3 RELATIVE TO T1 TAD I T2 /IT MIGHT JUST BE A TENTATIVE FILE SNA CLA JMP FILINC /IT WAS TAD T1 JMP I BLOCKS /RETURN WITH AC # 0 THE FILE ADRESS IS USEFUL TSET, 0 /SETS T2 & T3 RELATIVE TO T1 TAD T1 TAD (4 DCA T3 /ADRESS+4=1ST ADD INF WORD TAD DIRECT+4 /NO OF ADD INF WORDS CIA TAD T3 DCA T2 /1ST INF+NO OF INFO=LENGTH JMP I TSET /T COMPARE 2 DATES /INPUT <TO BE TRANSFERRED> AND /OUTPUT I.E. THE FILE THAT EXISTS ON THE DEVICE /TRANSFER IF EITHE HAS A ZERO DATE WORD /OR IF DATE INPUT>DATE OUTPUT DACHEC, 0 /MUST HERE NO ROOM ON PAGE TAD 1404 TAD 17 DCA TSET TAD I TSET SNA /ANY DATE IN OUTPUT FILE ? IFZERO ZEROUT<JMP MOVE> IFNZRO ZEROUT<JMP NOMOVE> AND (7 DCA BLOCKS /NOT IN USE WHEN WE COME HERE TAD DSAVE /TODAYS DATE CIA TAD I TSET /SAME ? SNA CLA JMP MOVE /YES ALWAYS MOVE TODAYS FILES TAD I T3 /DATE IN INPUT FILE SNA IFZERO ZERIN<JMP MOVE> IFNZRO ZEROUT<JMP NOMOVE> AND (7 CIA TAD BLOCKS /INPUT-OUTPUT SNA JMP DAYS /SAME YEAR COMPARE DATES SPA CLA JMP MOVE /INPUT HAS MORE RESENT YEAR JMP NOMOVE /INPUT IS OLDER DAYS, TAD I TSET CLL RAR CLL RAR CLL RAR DCA BLOCKS /MONTH & DAY OF OUTPUT TAD I T3 CLL RAR CLL RAR CLL RAR /D:O INPUT CIA TAD BLOCKS /INPUT - OUTPUT SMA CLA NOMOVE, ISZ DACHEC MOVE, JMP I DACHEC PAGE
/GENERAL SUBROUTINES USED BY MANY RUTINES TPRINT, 0 /PRINTS TEXT **MUST BE FIRST ON PAGE**SE POINT TAD I TPRINT DCA T5 /POINTER TO TEXT TAD I T5 ISZ T5 JMS PRINT /AND PUT IT ON THE TTY TAD XTEXT AND (77 SZA CLA /STOP ON SEEING XX00 JMP TPRINT+3 /MORE LETTERS TO FOLLOW ISZ TPRINT /SET FOR RETURN<SKIP ARGUMENT> JMS CHECK /^O TYPED ? JMS LF POINT, JMP I TPRINT /=5600 ='.@' !! PRINT, 0 /SEPERATES TWO HALFES OF WORD DCA XTEXT TAD XTEXT RTR RTR RTR JMS SIXBIT /HIGH ORDER TAD XTEXT JMS SIXBIT /LOW ORDER JMP I PRINT SIXBIT, 0 /CONVERT SIXBIT ASCII TO 8 BIT & PRINT AND (77 /MASK OF 6 BITS SNA /CONVERT 0 TO SPACES AND PRINT TAD (40 DCA TTY TAD TTY TAD (-37 SPA CLA /CODES <37 ADD 300 OTHER ADD 200 TAD (100 TAD (200 TAD TTY JMS TTY /AND THE ACTUAL PRINT JMP I SIXBIT /THIS RUTINE CAN (ON BATCH) BE OVERLAYED /BY THE RUTINE LOADED AT 00400 TTY, 0 /YE OLDE TTY PRINTER TLS /THESE TWO LOCATIONS ARE CHANGED BY /U TSF JMP .-1 CLA JMP I TTY HARD, 0 /FATAL ERRORS CLA DCA OSW /CLEAR NO NAMES FLAG OR THE NAME WILL NOT BE PRINTED TAD I HARD DCA .+2 JMS TPRINT 0 JMP I .+1 MSTOP, EXIT /CHANGED ON /M TO FATAL SOFT, 0 /NONFATAL ERRORS SPECIFICALLY TOO LARGE FILE /CALLING ASSUMES T1 POINTS TO FILENAME /TAD 7600 OR INDEV IF FILE OPENED AC=0 IF NO FILE OPEN /JMS SOFT /RETURN ADRESS DCA HARD /SAVE TEMPORARILY DCA OSW /CLEAR THE NO NAMES FLAG JMS NPRINT JMS TPRINT TEXTSP TAD T1 DCA SOFT3 TAD HARD SNA /FILE OPEN ? JMP SOFTEX /NO JMS USR /YES DELETE IT 4 SOFT3, 0 0 SOFTEX, 7600 /WHAT ? TAD I SOFT /FETCH RETURN ADRESS DCA SOFT JMP I SOFT NPRINT, 0 /PRINTS FILENAME POINTED AT BY T1 TAD OSW SZA CLA /OSW =1 INHIBIT NAME PRINTING JMP I NPRINT /NO NAMES SWITCH SET JMS LF CLA CMA TAD T1 DCA 10 TAD I 10 JMS PRINT TAD I 10 JMS PRINT TAD I 10 JMS PRINT TAD POINT JMS PRINT TAD I 10 JMS PRINT TAD (240 /AND A SPACE JMS TTY JMS CHECK JMP I NPRINT LF, 0 /PRINT CR/LF CLA TAD (215 JMS TTY TAD (212 JMS TTY JMP I LF XTEXT, 0 MONIT, CDF CIF JMP I SOFTEX DIRZER, 7777 /1 FILE MOVED HERE IN VERSION 5C FIRSTFI /IN STANDARD VERSION NONSYSTEM TAPE 0 /NO MORE SEGMENTS 0 //NO TENT FILES 7777 /ADD INFO WORDS =1 0 /ZERO FILE -SIZE+FIRSTFI-7 /5C DERR, DCA OSW /TURN ON NO NAMES SWITCH JMS NPRINT /ERROR DELETING FILE JMS TPRINT DTEXT JMP D4 NODAT, JMS TPRINT /NO DATE WORD IN INPUT TEXT0D JMP I MSTOP PAGE TEMP=. FIELD 0 *400 TTYFAK, RELOC TTY 0 CIF 0 /CIF BATCH ! JMS I .+3 CLA JMP I TTY 7400 /PRINT TO BATCH LOG
FIELD 1 /LETS RETURN IN-LINE RELOC *TEMP /COPIES FILE FROM ONE DEVICE TO ANOTHER /ASSUMES THAT T1 POINTS AT FILENAME /ASSUMES AT LEAST ONE ADD INFORMATION WORD =OS8 ASSUMPTION /CALLING /JMS COPY /ERROR ADRESS IN CASE OF FILE TO LARGE COPY, 0 TAD I COPY DCA ERRADD /THIS IS WHERE WE GO IF FILE WILL NOT FIT ISZ COPY TAD MODSW /MODSW=+1 WE CAN SKIP THE CHECKS THEY /WERE DONE LAST TIME SMA SZA CLA JMP AOK2 TAD DEVTYP /FILESTR ? SMA CLA JMP AOK /NO THEN NO DIRECTORY WORK CMA /CREATE POINTER TO FILE'S EXTENSION TAD T3 /EXTENSION IS JUST BEFORE DATE WORD DCA BI /FILE EXTENSION TAD 7604 /IS OUTPUT EXTENSION GIVEN ? SZA DCA I BI /YES OK CHANGE FILE EXTENSION JMS ZERO /CHECK FOR /Z TAD T1 DCA DAT1 TAD I P7600 JMS USR/ LOCKUP THE FILE 2 DAT1, 0 0 JMP SLASHN /IT DID NOT EXIST TAD OPTAL /E ? AND (200 SZA CLA JMP FILE3 /YES TAD OPTAL RAL /A? SNL CLA /YES JMS DACHEC /COMPARE DATES JMP FILE2 FILE3, CMA CLA /DATE WORD IS SET TO 0 FOR FILE ENTERED -1 FOR FILE /NOT ENTERED THEREFORE WE MUST HAVE A DATEWORD /THIS -1 IS ON SUCCESFULL ENTER SET TO FIRST BLOCK FOR LATER USE DCA I T3 IFZERO ALLNAM <JMP I COPY> IFNZRO ALLNAM <JMP TOOLAR> FILE2, TAD OPTAL RAR SZL CLA /L SKIP FILE TRANSFERS JMP SLASHC /OUTPUT NAMES TAD OPTMX /ONE MORE OPTION /T AND (20 /T SZA CLA JMP TODAY /USE TODAYS DATE INSTEAD OF THAT IN FILE TAD I T3 SZA /WE DO NOT WANT 'UNDATED FILES' DCA DATE /SET DATEWORD TODAY, CMA DCA I T3 /NOW WE CAN MARK THE FILE AS OK TAD T1 DCA SBG TAD I T2 /SIZE REQUIRED CIA AND (4000 /MAX 377 (8) BLOCKS SZA CLA JMP TOOLAR+1 /NO OPEN FILE TAD I P7600 JMS USR 3 /OPEN OUTPUT FILE SBG, 0 SLG, 0 JMS OUTERR ZZOC=. TAD SLG CIA SPA JMP OK /AREA > 4000 TAD I T2 SPA CLA JMP TOOLAR OK, 7600 P7600=.-1 TAD SBG /BEGINNING BLOCK AOK, DCA I T3 TAD MODSW SPA CLA JMP MOD2 /THE ACTUAL COPYING IS SKIPPED IF MODSW = -1 AOK2, TAD DIRECT+1 /ON MODS =+1 WE GO HERE DCA BI TAD I T3 IAC SNA CLA /DATE WORD =-1 DO NOT COPY IFZERO ALLNAM <JMP I COPY> IFNZRO ALLNAM <JMP TOOLAR> TAD I T3 DCA BO TAD I T2 JMS FCOP /ACTUAL COPYING OF FILE BI, 0 BO, 0 DCA I T3 /MARK THE FILE TRANSFERRED TAD DEVTYP /TTY? SZA CLA JMS NPRINT /NO TAD MODSW /ON MODSW =+1 SKIP THE FILE CLOSES SMA CLA SZA JMP I COPY MOD2, TAD I T2 CIA DCA ARGX /LENGTH TAD T1 DCA ARGX-1 TAD I P7600 JMS USR /FILE CLOSURE 4 0 ARGX, 0 JMS OUTERR ZZOD=. JMP I COPY TOOLAR, TAD I P7600 JMS SOFT /FILE TOO LARGE ERRADD, START /IF CALLED BY ERROR DEVTYP, 0 /OUTPUT DEVICE TYPE SET FROM INITIALIZE SLASHC, DCA I T3 /TO ALLOW FOR(ANKC) JMP SLASHF PAGE
/SUBROUTINE TO MOVE NBLOCKS FROM DEVICE GIVEN BY IADDR TO THAT GIVEN /BY OADDR /AC = - NBLOCKS ON ENTRY FCOP, 0 DCA LENGTH TAD I FCOP DCA IO3 /FIRST INPUT BLOCK ISZ FCOP TAD I FCOP DCA IO4 /FIRST OUTPUT BLOCK ISZ FCOP TAD LENGTH SNA CLA /LENGTH=0 OH WHY WAS I CALLED ?? JMP I FCOP IOLOOP, TAD LENGTH TAD (IOBLK SMA /WILL BUFFER HOLD ALL JMP LASTC /YES DCA LENGTH /MORE THAN IOBLK BLOCKS INCCREMENT COUNT TAD (-IOBLK /OK COPY 1 BUFFER JMS IO TAD IO3 TAD (IOBLK DCA IO3 /INCREMENT INPUT COUNTER TAD IO4 TAD (IOBLK DCA IO4 /AND OUTPUT JMP IOLOOP LASTC, 7600 TAD LENGTH /MOVE REMAINING BLOCKS JMS IO JMP I FCOP IO, 0 /ACTUAL DATA NMOVER WIL WE EVER START THE TAPES? SNA /HERE WE MIGHT HAVE A 0 JMP IO5 CIA CLL RTR RTR RTR TAD (IOFIELD DCA IO1 /CONSTRUCT ARGUMENT FOR READ TAD IO1 TAD (4000 DCA IO2 /AND FOR WRITE TAD (IOBUFF /BUFFER ADRESS DCA IO1+1 TAD (IOBUFF DCA IO2+1 /AGAIND CIF 0 JMS I IADDR /READ IO1, 0 0 IO3, 0 JMS INERR ZZIE=. JMS CHECK TAD COPY /CAL FROM ABOVE 4000? SPA CLA JMS ASCII /YES CIF 0 JMS I OADDR IO2, 0 0 IO4, 0 JMS OUTERR ZZOE=. IO5, JMP I IO INERR, 0 CLA TAD INERR MQL1 /CALLING ADRESS IN MQ JMS HARD TEXTIN OUTERR, 0 CLA TAD OUTERR MQL1 /CALLING ADRESS IN MQ JMS HARD TEXTOUT LENGTH,ZERO, 0 TAD OPTY9 /Z ? RTL SNL CLL CLA JMP I ZERO /NO TAD I LASTC /CHECK DEVICE TAD (-2 SPA CLA JMS OUTERR /NEVER ZERO SYS OR DSK ZZOF=. TAD OPTY9 AND (5777 /REMOVE THE /Z DCA OPTY9 JMS TPRINT ZTEXT /ASK IF OK TO ZERO JMS YESNO SNA CLA JMP I ZERO /HE THOUGHT BETTER OFF IT CIF 0 JMS I OADDR 4110 /NOW WRITE THE 1ST DIR SEGMENT DIRZER 1 /BLOCK 1 JMS OUTERR ZZOH=. JMP I ZERO SLASHN, /FILE DID NOT EXIST /CHECK FOR /N TAD OPTMX RAL SMA CLA JMP FILE2 /NO /N IE ACCEPT JMP FILE3 EXREAD, CIF 0 JMS 7607 /SYS 1510 /READ REST OF EXPIP EXSTRT 40 RHLT, HLT /FAILURE FROM SYS JMP I .-3 /OK GO ON PAGE
NOPUNCH DIRECT, ZBLOCK 400 FILST, ZBLOCK 6^400 AAA=.-1 /THIS GIVES THE LAST LOCATION USED AS THE /THE FIRST ENTRY IN SYMBOL TABLE USEFUL ENPUNCH
FIELD 1 /FORCE LITERALS OR WE GET PE ERRORS *DIRECT /ONCE ONLY CODE THAT CALLS USR AND WRITES OUT THE EXTENDED OPTIONS /OVERLAYED LATER /START OF MAIN PROGRAM START, TAD DATE SNA /WE MUST HAVE A DATE WORD TO PROCEED JMP DAERR /NO DATE WORD LET HIM FIX IT AND RESTART DCA DSAVE /SAVE TODAYS DATE TAD (4 DCA T1 /USER ERROR 4 JMS USR 12 /INQUIRE ABOUT DSK DEVICE DSK 0 JMP FATAL /WHAT ! NO DSK: TAD .-3 DCA DEFAUL ISZ T5 /USER ERROR 5 CIF 0 JMS 7607 5510 EXSTRT /THE PART FROM EXSTRT TO 7577 40 JMP FATAL TAD (FILST DCA FILP JMS LF CDF 0 TAD CHAIN CIF CDF 10 SZA CLA JMP DECODE+1 TAD OPTH SPA SZA CLA DCA OUTJMP TAD 7606 SZA CLA JMP CHSTART TAD (STAR DCA 7611 /ON CHAINING ALT=EXIT AND BLANK 1ST NAME=ALL /FILES JMP CHSTART /CHAINED TO WILL IN BOTH CASES GO TO P7700 DAERR, JMS TPRINT TEXTND JMP MONIT PAGE
EXSTRT, JMP EXTOPT /SIMPLY TO SAVE 1 LOCATION AT EXREAD IFNZRO EXSTRT-4400 <BADLOC, EXBAD /MUST BE AT 4400 !!> SLASHU, TAD OPTL AND (77 RAL RTL SNA TAD DEVCOD DCA T1 TAD (6006 TAD T1 DCA TTY+1 TAD T1 TAD (6001 DCA TTY+2 JMS LF /PRINT A LINE FEED JMS TPRINT /AND A HEADING HLPLIS JMP EXIT DEVCOD, LPT HELP, TAD (HLPLIS DCA HARG JMS TPRINT HARG, 0 JMS CHECK /^O ? TAD OSW SZA CLA JMP EXIT /YES TAD I T5 /INCREMENTED BY TPRINT SNA CLA /END OF TEXT REACHED ? JMP EXIT /YES TAD T5 /NO DCA HARG /CHANGE ADRESS OF NEXT LINE JMP HARG-1 /AND PRINT PAGE
EXTOPT, TAD (EXTOPT DCA EXADD TAD OPTAL AND (20 /H ? SZA CLA JMP HELP /YES TAD OPTMX AND (10 SZA CLA UTEST, JMP SLASHU /CHANGE DEVICE CODES OUTPUT /SLASHU IS BLOCKED BY A BATCH START CLL TAD OPTMX AND (4400 /P OR M? SNA CLA JMP NOEXT /NO THE WE DONT COME HERE AGAIN DCA T3 TAD OPTMX SPA CLA ISZ T3 /SET TO 1 FOR /M 0 FOR /P TAD OPTL DCA DIRECT+1 CLA CMA DCA DIRECT+4 /CREATE A FALSE DIRECTORY TAD INHAND+1 DCA IAP TAD 7605 /FETCH INHANDLER JMS USR 1 IAP, 0 JMS INERR ZZIF=. TAD (1772 JMS PRINT TAD IAP DCA IADDR JMS USR 5 /NOW CALL FOR OUTPUT FILE 5200 /NO LOOKUP TAD I PP7600 AND (17 SNA IAC /DEFAULT = SYS DCA I PP7600 TAD (OUTHAN+1 DCA OAP TAD 7600 /FETCH OUTPUT HANDLER NOW JMS USR 1 OAP, 0 JMS OUTERR ZZOI=. TAD OAP DCA OADDR TAD 7601 SZA CLA /HAS HE STATED A FILE NAME JMP NAMOK /YES TAD PP7600 /NO DCA 10 TAD (DEFNAM-1 DCA 11 TAD (-4 DCA T1 TAD I 11 DCA I 10 ISZ T1 JMP .-3 NAMOK, TAD I PP7600 TAD (DCW DCA T1 TAD I T1 SMA JMP MTYP /NON FILE STRUCTURED DCA DEVTYP TAD T3 /M ? SZA CLA JMP SLASHM TAD OPTL CIA /FILE SIZES NEGATIVE DCA 7606 /LENGHT IN FAKE DIRECTORY DCA 7605 /AND DATE IF HE MADE A MISTAKE DCA MODSW /NON /W MODE TAD (7601 DCA T1 /POINT AT FILE IN 'DIRECTORY' JMS TSET /AN SET THE OTHER TWO JMS COPY /AND MOVE THE BLOCKS EXIT /RESTART IF TOO LARGE JMP EXIT /AND RESTART PP7600, 7600 NOEXT, TAD (EXREAD /NEXT TIME MUST FETCH FROM SCRATCH BLOCKS DCA EXADD JMP EXTSKP MTYP, CLA JMS TPRINT NONFIL JMP EXIT PAGE
SLASHM, DCA FILP /NO NAMES SAVED JMS ZERO /DOES HE WANT A EMPTY TAPE ? TAD OPTAL AND (10 /REMOVE ANY OPTION BUT /I DCA MITEMP TAD (MNAME+1 /PASS NAME TO /R DCA RFS CDF 0 TAD JSW AND (6777 TAD (1000 /NO RESTART AFTER /M DCA JSW CDF 10 TAD (FAT6 DCA MSTOP TAD (-3 DCA MARG2 /CHANGE 4 CORE LOCATIONS TAD (MARGS-1 DCA 10 TAD I 10 DCA MIA TAD (NOP DCA I MIA ISZ MARG2 JMP .-5 TAD (SLASHF DCA MTRAP TAD (-5 DCA MARG2 TAD (7577 DCA 10 TAD (MNAME-1 DCA 11 MLOOP, TAD I 10 DCA I 11 ISZ MARG2 JMP MLOOP CMA DCA COPY/ COPY MUST BE NEGATIVE TO CALL ASCII TAD MNAME /OUTPUT JMS MCONT /FIND HOLE TAD RFL DCA MFL /FOR CALCULATIN SIZE JMS MCODE /CALL COMMAND DECODER TAD MITEMP /WAS /I SET ? DCA OPTAL /SET IT BACK CLEARING ANY OTHER A-L OPTIONS TAD MNAME /DEVICE NR JMP RCONT MARGS, MBLK1 MBLK2 MBLK3 MCODE, 0 TAD (1116 /"IN JMS PRINT JMS DECODE /CALL COMMAND DECODER SMA CLA /FILE STRUCTURED ? JMP MERR /NO TAD OPTMX SPA CLA JMP ABORTM TAD (INHAND+1 DCA MIA TAD INDEV JMS USR 1 /FETCH HANDLER MIA, 0 JMP MERR TAD MIA DCA IADDR TAD OPTH DCA MH JMP I MCODE /AND CONTINUE MERR, JMS TPRINT /HANDLE OUR OWN ERRORS SO THAT PROGRAM CAN GO ON MNTEXT JMP MCODE+1 M2, CLA TAD MH /COME HERE AFTER ALL ARE IN FILE SPA CLA/ ALT SET ? JMP MEND /YES JMS LF /OR WE GET THE ASTERISK ON THE FILE NAME JMS MCODE DCA OSW /MIGHT HAVE BEEN SET EARLIER JMP SLOOP /CONTINUE MH, 0 ABORTM, JMS TPRINT ABORT JMP EXTOPT MITEMP, 0 /ISAVED IF ON SAME LINE AS /M PAGE
MEND, TAD (5 DCA T1 TAD RFS DCA .+5 CIF 0 JMS I OADDR /WRITE ^Z 4110 CNTRLZ 0 /NOW YOU SEE WHY WE SAVED 1 BLOCK ? JMP FATAL TAD MFL CIA TAD RFL /CALCULATE TOTAL SIZE IAC /BUT REMEMBER THE ^Z BLOCK DCA MARG2 TAD (MNAME+1 DCA MARG3 TAD MNAME JMS USR 1 /DECODE ALWAYS CLEARS HANDLERS SO WE /MUST FETCH IT AGAIN INHAND+1 JMP FATAL TAD MNAME JMS USR 4 MARG3, 0 /NAME MFL=.-1 MARG2, 0 /CLOSE SIZE JMP FATAL TAD MITEMP /IF /I WAS SET DO NOT CALL PIP SZA CLA JMP MIEXT TAD (-40 /CLEAR THE C.D. TABLES DCA MARG2 TAD (7577 DCA 10 MLOOP1, DCA I 10 ISZ MARG2 JMP MLOOP1 TAD (-5 /SET UP TABLES FOR PIP DCA MARG2 TAD (7577 DCA 10 TAD (MNAME-1 DCA 12 M2LOOP, TAD I 12 DCA I 10 ISZ MARG2 JMP M2LOOP TAD RFSS DCA 7620 TAD MNAME DCA 7617 TAD (OPTH-1 DCA 10 CLA CLL CML RAR /ALT MODE ? DCA I 10 /YES TAD (400 /D DCA I 10 DCA I 10 /CLEAR ANY OTHER OPTION DCA I 10 TAD (7 DCA T1 /USER ERROR 7 CLA IAC JMS USR 2 /LOOKUP PIP PIP 0 JMP FATAL TAD .-3 DCA PADDR JMS TPRINT PIPMESS CDF 0 TAD JSW AND (6777 /PIP CAN BE RE-STARTED DCA JSW CDF CIF 10 JMS USR 6 /CHAIN TO PIP PADDR, 0 MNAME, ZBLOCK 5 /SAVE NAME CNTRLZ, 232 /END OF FILE /ANYTHING CAN FOLLOW AS PIP STOPS HERE ANYHOW FATAL, TAD T1 DCA .+3 JMS USR 7 0 FAT6, TAD (6 JMP FATAL+1 ABORT, TEXT +/M ABORTED & RE-STARTED+ MIEXT, CDF CIF 0 JMP 7605 /NO RESTART FLAG IS SET ANYHOW PAGE
ASCII, 0 TAD OPTAL /CHECK FOR /I AND (10 SZA CLA JMP I ASCII /HE DOES NOT WANT CONVERSION TAD (-IOBLK^200-1 /COUNT FOR NUMBER TO ZERO DCA COUNT TAD (IOBUFF-1 /START OF BUFFER-1 DCA 10 TAD (IOBUFF-1 DCA 11 /OK CONVERT /A)ASCII CODE 241-337 ARE KEPT INTACT /B)ASCII CODES 211-215 ARE ALSO KEPT /C)ASCII 232<^Z> CONVERTED TO 214<^L> /D ANYTHING ELSE IS PUT TO 0 CDF IOFIELD LOOP, CLA CLL TAD ZSW RAL CLA TAD I 10 SZL CLA /CLEAR ON -1 IN ZSW DCA W1 TAD I 10 /THREE IN TWO SZL CLA DCA W2 TAD W1 AND (377 /FIRST CHARACTER JMS CHAR DCA A1 TAD W2 CLL AND (7400 RAL RTL RTL /NOW CHAR 3 BITS 4-7 ARE HERE DCA A3 TAD W1 AND (7400 RTR RTR TAD A3 /AND BITS 0-3 JMS CHAR DCA A2 TAD A2 RTL RTL AND (7400 TAD A1 DCA I 11 /CHAR 3 BITS 0-3 + CHAR 1 TAD A2 RAR RTR RTR AND (7400 DCA A2 /CHAR 3 BITS 4-7 TAD W2 AND (377 JMS CHAR /CHAR 2 TAD A2 DCA I 11 /AND CHAR2 +BITS 4-7 OF 3 ISZ COUNT JMP LOOP CDF 10 JMP I ASCII CHAR, 0 DCA T4 TAD T4 TAD (-240 SPA JMP LFEED TAD (240-337) SPA JMP AR NA, CLA CLL JMP I CHAR AR, CLA TAD T4 CLL JMP I CHAR LFEED, CLA TAD T4 TAD (-211 SPA JMP NA TAD (211-215 SPA SNA JMP AR TAD (215-232) SZA JMP NA TAD ZSW /ARE WE TO BLOCK THE REST ? SZA CLA CMA /YES DCA ZSW TAD (214 JMP AR+2 W1, 0 W2, 0 A1, 0 A2, 0 A3, 0 DEFNAM, FILENAME EXPIP.TM ZSW, 0 /0=CONVERSION /1=LOOK FOR ^Z /-1=^Z FOUND PAGE
PIP, FILENAME PIP.SV HLPLIS,TEXT +EXPIP VERSION :+ /N.B. MUST BE AN EVEN NO OF CHAR *.-1 VERSION 0 IFZERO TEXTLI <XLIST> TEXT +A)MODES+ TEXT +/R REVERSING+ TEXT +/D DELETE+ TEXT +/F LIST FILES+ TEXT +/M MERGE NOTE SYNTAX+ TEXT +/H HELP MESSAGE + TEXT +/P PANIC MODE + TEXT +/U CHANGE DEVICE CODES+ TEXT +ONLY ONE OF THESE MAY BE PRESENT+ TEXT +IF NONE IS PRESENT STRAIGHT TRANSFER IS PRESUMED+ TEXT +TESTED FOR IN THE ORDER H U P M F D R+ TEXT + + TEXT +B)MODIFIERS+ TEXT +/A ALL FILES(DO NOT CHECK DATES)+ TEXT +/N ONLY NEW COPIES OF EXISTING FILES+ TEXT +/E EXTRA SURE <CHECK NAMES ONLY>+ TEXT +/W WILD TRANSFER INPUT MUST BE # OUTPUT+ TEXT +/L LIST WHAT WOULD BE TRANSFERED ONLY+ TEXT +/T TODAYS DATE+ TEXT +/K KILL INPUT NOT WITH /R OR OUTPUT EXT+ TEXT +//Q QUERY+ TEXT +/X OR /V EXEPT+ TEXT +/Z ZERO OUTPUT FIRST+ TEXT +/I IMAGE ONLY WITH /P & /M+ TEXT + + TEXT + + TEXT +UNDER BATCH:+ TEXT +1 /U DISABLED OUTPUT GOES TO BATCHLOG+ TEXT +2 /Y GIVES 'YES'+ TEXT + + TEXT + UNDER CCL<WHEN CHAINED TO>+ TEXT +1 DEV: IS DEV:*.* TEXT +2 ALT MODE GIVES EXIT AFTER FIRST CALL+ TEXT +FILE SPECIFICATIONS+ TEXT +(OPTIONAL) [DSK ASSUMED]+ TEXT + + TEXT +A)TRANSFERS+ TEXT +*DEVA:(X.FT)<[DEVB:]*.*+ TEXT +B)/R /D /F+ TEXT +*(X.XA)<[DEVB:]*.*...OPTIONS+ TEXT +C)/P+ TEXT +1 *[DEVB:]=INPBLK/P+ TEXT +2 *DEVA:FIL.XX<=TOTAL NO BLCKS[/I]+ TEXT +D) /U=NN+ TEXT +D) /M+ TEXT + 1 ONLY /M+ TEXT + 2 OUTPUT (/Z)+ TEXT + 3-N INPUT $ ON LAST LINE CHAINS TO PIP+ TEXT + + TEXT + CONDITIONAL ASSEMBLY SWITCHES + IFZERO ZDEV<TEXT +/Z GIVES 730-7 BLOCKS+> IFNZRO ZDEV<TEXT +/Z GIVES NON STANDARD+> IFZERO ZERIN <TEXT +INPUT DATE =0 ACCEPTED+> IFNZRO ZERIN<TEXT +INPUT DATE = ZERO FILE REJECTED+> IFZERO ZEROUT <TEXT +OUTPUT DATE =0 FILE ACCEPTED+> IFNZRO ZEROUT <TEXT +OUTPUT DATE =0 FILE REJECTED+> IFZERO ALLNAM<TEXT +ONLY TOO LARGE FILES LISTED+> IFNZRO ALLNAM<TEXT +ALL NON COPIED FILES LISTED+> 0 TEXTND, TEXT /NO DATE ^C/ 0 /END OF TEXT MNTEXT, TEXT /INPUT ERROR TRY AGAIN/ NONFIL, TEXT +/M MUST HAVE FILE-OUTPUT /M ABORTED+ PIPMESS, TEXT /GOING TO PIP GOOD-BYE/ IFZERO TEXTLI <XLIST> AAB=. IFNZRO AAA-AAB&4000 <OVRCOR, TEXTLARGE> /!!!!! **BEWARE OF THE ODES OF MARCH*** $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$



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