/******* MULTI8 SPOOL FILE XFER TASK ******* /NAME: SP /LENGTH: 2 PAGES +2 PAGE BUFFER. /FUNCTION:THIS MODULE PERFORMS BLOCK TRANSFERS FROM A FILE- / ORIENTED MASS STORAGE DEVICE OR A CHARACTERORIENTED / INPUT DEVICE TO A CHARACTERORIENTED OUTPUT DEVICE. / SINCE THE FOREGROUND IS NOT ALLOWED TO WRITE ONTO / THE BACKGROUND DISK,THIS TASK CAN ONLY DRAIN INFOR- / MATION FROM THE DISK AND OTHER MASS STORAGE DEVICES. / IT IS CONTROLLED BY THE FOLLOWING TYPE-IN: / *PP: IFNZRO PDPTYP-PDP8E < CLL RTL RTL RTL /ONE HALF > DCA I SPNTR2 ACM1 /REMEMBER THERE WAS A FILENAME DCA SPSWIT /SET SWITCH JMS SPREAD /OTHER HALF AND C77 TAD I SPNTR2 DCA I SPNTR2 ISZ SPNTR2 ISZ ZTEM3 /6 DONE? JMP SP3 /N SPIGNORE,JMS SPREAD /IGNORE FURTHER CHARACTERS CLA JMP SPIGNORE /Y:IGNORE THE REST UNTIL "." /HERE AFTER ":" SPCOLON,TAD I SPI3 SNA JMP SPC2 AND (40 SNA CLA IFNZRO PDPTYP-PDP8E < TAD (100 > IFZERO PDPTYP-PDP8E < IAC BSW > TAD C200 TAD I SPI3 DCA I SPI2 /SAVE MDEV DCA SPSWIT /CLEAR SWITCH: NO FILENAME DCA I SPI3 TAD I SPI12 IFZERO PDPTYP-PDP8E IFNZRO PDPTYP-PDP8E < CLL RTR RTR RTR > AND C7 DCA I SPI9 DCA I SPI12 DCA I SPI17 JMP SPC2 /ENTRY HERE AFTER "." SPDOT, TAD C3 /DO AS IN SPCOLON JMP SPC2 /EXCESSIVE CHARS DON'T HARM /HERE AFTER "<" SPI, TAD I SPI2 IFZERO PDPTYP-PDP8E < /NO ROOM FOR THIS ON A 8I TAD (-1720 /LP: ? SNA JMP .+4 /YES, OK TAD M400 /PP:-LP: SZA CLA /PP: ? JMP SPERR /NO, ERROR. TAD I SPI2 > DCA I SPI7 TAD I SPI4 DCA I SPI2 /RESET MDEV JMP SPC2 SPREAD, .-. /FETCH NEXT CHAR AND BRANCH TAD I SPNTR1 TAD M215 SZA TAD (-375+215 SNA JMP SPCR ISZ SPNTR1 /MUST BE AFTER TEST FOR CR OR AM TAD (-"<+375 SNA JMP SPI TAD C2 /(-":+"< SNA JMP SPCOLON TAD (-".+": SNA JMP SPDOT TAD C2 /(-",+". SNA JMP SPCOMA TAD (-260+", SPA JMP SPERR TAD C260 JMP I SPREAD SPCR, JMS I SPI6 /DO LAST FILE SPXIT, JMS MONITOR /EXIT EXIT+SWPOUT PAGE SPI10, SPSWIT SPI11, SPDTV /A NUMBER OF INDIRECT REFERENCES SPI13, SPFIL SPI15, SPBUF SPI16, SPERR SPDO, .-. /DO ONE FILE TAD SPFIL DCA SPMDEV /SAVE MDEV ISZ I SPI10 /HAS FILENAME BEEN TYPED? JMP SPDO2 /N;SET BLKCOUNTER TO HIGH VALUE TAD SPI13 /SPFIL JMS MONITOR CALL /CALL THE DIRECTORY SEARCHER "D^100+"I&3777 JMS SPSTALL /NOT THERE? WAIT .1 SEC, JMP .-4 SZA CLA JMP SPRET /ERROR FILE NOT FOUND TAD SPDTV /SAVE -LENGTH;# OF BLOCKS SPDO2, DCA SPCNT TAD SPI15 /BUFFER ADDRESS DCA SPDTV+1 /SAVE BUFFER ADDRESS TAD MYCDF /SAVE FIELD OF BUFFER DCA SPEND /FOR SURE RDF /ALSO SET UP FIELD IN FUNCTIONWORD TAD C200 /ONE BLOCK;READ TAD SPDEV /ADD UNIT# DCA SPDTV /CALL THE INPUT BLOCK DRIVER SPLOOP, TAD SPMDEV /SET FOR INPUT DCA SPIN CDTOIF /DF AND AC AS POINTER TO DTV SPLUP, CLA CLL /L=0 FOR DECTAPE BACKWD MOTION TAD SPI11 JMS MONITOR CALL SPIN, 0 /NAME OF INPUT OR OUTPUT MODULE JMS SPSTALL /BUSY ? OR NON-EXISTING ? DCA SPSLOT /SAVE INTERRUPT SLOT JMS MONITOR /WAIT FOR COMPLETION WAIT SPSLOT, 0 SNA /ERROR? JMP SPNOER /NO TAD M10 /OR END OF MEDIUM ? SZA CLA JMP SPEND /I/O ERROR ACM1 DCA SPCNT /CHANGE CODE SPNOER, AC4000 /4000 FLIPS THE R/W BIT TAD SPDTV DCA SPDTV SNL JMP SP2 /L=0 IF WRITE AFTER A READ ISZ SPDTV+2 /NEXT BLOCK:COMES A READ AFTER A WRITE ISZ SPCNT /ALL DONE? SPREND, JMP SPLOOP /N SPEND, 0 /BECOMES CORRECT CDF TO BUFFER SPRET, CLA DCA SPDTV /CLEAR FILENA.ME LOCATIONS DCA SPDTV+1 DCA SPDTV+2 DCA SPDTV+3 DCA I SPI10 /AND FILE SWITCH JMP I SPDO /FILE READY SP2, TAD SPODEV JMP SPLOOP+1 SPSTALL,.-. ACM2 TAD SPSTALL JMS DEFER SMA CLA JMP I SPI16 /NON-EXISTING MODULE JMS MONITOR STALL DGNTICK /TRY EVERY SECOND TAD M7 /AC=2, SPSTALL POINTS TO RETURN ADDR. TAD SPSTALL /SO SPSTALL+2-7 POINTS TO CALL.ADDR-4 DCA SPSTALL JMP I SPSTALL /AC=0 /INPUT LINE BUFFER SPBUFL=46 /LENGTH OF INPUT STRING BUFFER SPLINE, IDEV /INPUT DEV -SPBUFL /MAX LENGTH "* /PRINT "*" BEFORE INPUT SPCNT, 0 /THERE IS FIRST A BLANK (FOR LINEINPUTTER) /THE DEFAULT STRING "1;".;"L;"S;", "2;".;"L;"S;", "3;".;"L;"S;", "4;".;"L;"S;", "5;".;"L;"S 215 /TERMINATOR;WATCH IT! ZBLOCK SPLINE+SPBUFL+2-. /LARGE ENOUGH SPMDEV, MDEV /MASS DEVICE SPODEV, ODEV /OUTPUT DEVICE SPFIL, MDEV /REQUEST BLOCK FOR DIR SEARCH SPDEV, 0 /UNIT # 0-7 SPDTV, 0 /DTV STARTS HERE 0 /CORE ADDRESS 0 /BLOCK # 0 /EXTENSION 0 /IN CASE MORE CHARS TYPED 0 PAGE SPBUF=. /THE BUFFER O=SPBUF+377 /END OF BUFFER. $$$$