/PS/8 BATCH HASP HASP03 /HAS 3 LEVELS: / . KBMON / * CD / / PRINT ON TTY /ENTRY AT 600 /**UPDATE** /4/10/73 DEW / SOME MODIFICATIONS TO ALLOW INPUT OF FILES / NOT ON SYS. THE FILE IS COPYED INTO THE / FILE HASPBT.TM ON SYS BEFORE STARTING. /DEFINES MNCRLF=160 /A LITERAL ON PAGE ZERO OF THE MONITOR WHICH POINTS /TO THE CARRIAGE RETURN LINE FEED ROUTINE. KEY=7 /KEYBOARD MONITOR ON SYSTEM DEVICE RESEXP=64 /AREA ON SYSTEM DEVICE RESERVED FOR EXPANSION - US! F1MLOC=7673 /THIS IS THE LOCATION IN THE READ WHICH BRINGS IN THE /MONITOR - WE TELL IT TO BRING US IN! IN=600 /BUFFER FROM 600-1177! *600 /THIS IS ONCE ONLY CODE FOR INITIALIZATION /IT WILL BE OVERLAID BY THE BUFFER TMP1, CLA CMA /NORMAL ENTRY (.R HASP) TMP2, DCA CHANFG /CHAIN ENTRY, CD MUST BE SET UP TMP3, CDF 10 ISZ I (7700 /TO DETERMINE IF USR IS IN SKP JMP AINCOR /IS IN CORE CDF 0 /IS NOT CIF 10 JMS I SYSTEM /SO LOAD IT 10 AINCOR, CDF 10 CLA CMA DCA I (7700 CDF 0 TAD (200 DCA SYSTEM ISZ CHANFG /SKIPS IF NOT CHAINED TO JMP NOCD /CHAIN ENTRY, DO NOT CD CIF 10 JMS I SYSTEM 5 0224 /BT NOCD, CDF 10 TAD I (7620 /GET FILE START SNA JMP I (7605 /FILES DONT START AT ZERO DCA FBLOK TAD I (7617 DCA TMP1 /STASH FOR LATER TAD TMP1 CDF 0 AND (17 SNA JMP I (7605 /NO INPUT! DCA TMP2 /SAVE THE DEVICE NUMBER CIF 10 /RESET TABLES IN CASE COPY JMS I SYSTEM /WE WANT NO TEN. FILE PROBLEMS 13 CLA CLL TAD TMP2 CIF 10 JMS I SYSTEM 1 /FETCH THE HANDLER IF NECESS XXEP, 7201 HLT /THIS IS IMPOSSIBLE, SINCE CD GOT IT TAD XXEP TAD (-7607 SZA CLA JMP ONSYS /STICK THE FILE ON SYS:HASPBT.TM / HERE IS THE CODE TO CHANGE THE MONITOR ENTRY! INIT1, TAD RESEXP CDF 10 DCA I F1MLOC /WEVE GOT IT IN OUR HASP CDF 0 JMP I (KMNTRY /NOW WE ACT EXACTLY AS IF WE HAD BEEN CALLED /BY A JMP 7600 (OR 7605) CHANFG, 0 ONSYS, TAD TMP1 /PICK UP LENGTH ETC AND (7760 /MASK FOR -LENGTH CIA /MAKE POSITIVE DCA TMP3 /AND STASH FOR LATER TAD TMP3 CLL /ONLY 14 BLOCKS WILL BE TAD (-300 /ALLOWED (-300=-14 20) SZL CLA /SKIP IF FILE < 14(8) BLOCKS JMP I (7605 /FILE TO LARGE TAD TMP3 IAC /SYSTEM DEVICE CIF 10 JMS I SYSTEM /ENTER OUTPUT FILE 3 HASPFL, HASPBT 0 JMP I (7605 /NO ROOM TAD TMP3 /PICK UP LENGTH AGAIN CLL RTR;RTR /#BLOCKS PERMANENT FILE DCA HSCLOS CLA IAC /AND CLOSE THE FILE CIF 10 JMS I SYSTEM 4 HASPBT HSCLOS, 0 JMP I (7605 TAD TMP3 /LENGTH AGAIN CLL RTL;RAL /TO MAKE FUNCTION WORD IAC /IS IN FORWARD DIRECTION DCA RDBLK-2 /READ FUNCTION WORD CLA STL RAR /WRITE TAD RDBLK-2 DCA WTBLK-2 /WRITE FUNCTION TAD FBLOK /FROM WHERE DCA RDBLK TAD HASPFL /START ON SYS DCA FBLOK /SAVE FOR HASP TAD FBLOK DCA WTBLK /PUT IN HANDLER CALL JMS I XXEP /READ IT 0 1000 /HAVE 14 BLOCKS HERE RDBLK, 0 JMP I (7605 /HUH! JMS I (7607 /NOW WRITE IT OUT 0 1000 WTBLK, 0 JMP I (7605 JMP INIT1 HASPBT, FILENAME HASPBT.TM PAGE / *200 CDHASP, CLA CLL / **** MUST BE AT 00200 ****** CLA CLL TAD -200 /MOVE IT ALL, SOME MAY NOT BE NEEDED DCA T TAD 1200-1 DCA LXR TAD 1400-1 DCA X1 CDLP01, TAD I LXR /MOVE CDINIT ROUTINE UP DCA I X1 ISZ T JMP CDLP01 TAD IBLK DCA BLKSAV /REMEMBER THAT, WE MAY NEED IT (SEE BELOW) JMS GETCHR /ALSO RETURN FROM SLASH LINE DCA SAVCHR CDTADX, TAD SAVCHR TAD -"* SZA JMP I SLASHT /NO ASTERISK! GO TEST FOR SLAS TAD 1200-1 DCA LXR TAD -107 /FIRST 72 COLUMNS OF FILE MAY BE ANALYZED DCA T CDLP02, JMS GETCHR TAD -215 SNA JMP EOCDLN TAD 215-"$ SNA JMP CDDOLR TAD "$-"< SNA TAD " -"< /LSS MUST BECOME ARROW BEFORE CD CALLED TAD "< DCA I LXR /PUT CHARACTER OUT ISZ T JMP CDLP02 JMS I GGCRET /LINE TOO LONG-- JMP EOCDLN CDDOLR, JMS I GGCRET /GET THE REST OF THE LINE SKP EOCDLN, CLA CLL CMA DCA T DCA I LXR DCA I LXR JMS I DEVHND 4500 /WRITE LOCS 0-1117 0 RESEXP HLT CLA CLL KCC /IF THE COMMAND DECODER HAD REALLY BEEN /CALLED, IT WOULD HVE CLEARE THE LAG TAD T JMP I 1400 /BACK TO COMMAND DECODER GETCHR, 0 CLA CLL ISZ ICRCNT JMP I2 /NO NEED TO READ TAD FBLOK DCA IBLK JMS I DEVHND 0200 IN IBLK, 0 HLT /OOPS CLA CLL ISZ FBLOK /FOR NEXT TIME! TAD IN DCA IPTR1 TAD IN DCA IPTR2 TAD -600 DCA ICRCNT TAD -3 DCA I3 I2, ISZ I3 JMP I1 /NORMAL CHARACTER TAD -3 /WEIRD CHAR - RESET SWITCH DCA I3 TAD I IPTR2 ISZ IPTR2 AND 7400 DCA ICHAR TAD I IPTR2 ISZ IPTR2 AND 7400 CLL RTR RTR TAD ICHAR CLL RTR RTR JMP .+3 I1, TAD I IPTR1 ISZ IPTR1 AND 177 TAD 200 / WE IGNORE CERTAIN CHARACTERS! SNA JMP GETCHR+1 /NULL TAD -212 SNA JMP GETCHR+1 /LINE FEED TAD 212-214 SNA JMP GETCHR+1 /FORM FE TAD 214-377 SNA JMP GETCHR+1 /RUBOUT TAD 377-232 SNA JMP ENDHSP /ON Z KILL HASP TAD 232 JMP I GETCHR I3, 0 ICHAR, 0 ICRCNT, -1 /SO WE READ INITIALLY! IPTR1, 0 /WRD 1 PTR IPTR2, 0 /WRD 2 PTR / ENDHSP, TAD KEY CDF 10 DCA I F1MLOC /SET CALL BACK TO NORMAL! CDF 0 IFNZRO .&400 JMP I 7605 /QUIT HASPING / / PAGE *400 / / **** ONLY PAGE ZERO LITERALS ON THIS PAGE! ********* / KMNTRY, JMS I DEVHND /MUST BE AT 00400 ***** 0400 /READ IN TWO BLOCKS OF KEYBOARD 1000 KEY+2 HLT JMS I DEVHND 0100 /READ THE BUFFER BACK IN 1000 RESEXP+2 /I ONLY NEEDED THE MONITOR CODE AT 1200 HLT KCC TAD 7700 DCA SYSTEM JMP I 1601 /INITIALIZE (USES 22 25 15 14 /ALSO: STANDARD SYS 106 120 /EXTENDED COMMANDS SYS 111 122) XXRETI, TAD UPROVL-1 /MOVE OUR CODE TO MONITOR AREA DCA LXR TAD 1200 DCA X1 TAD XXKILL-XXLAST-1 DCA T1 HASPLP, TAD I LXR DCA I X1 ISZ T1 JMP HASPLP /KEEP MOVING THAT STUFF HASP77, SKP /BECOMES TAD SAVCHR IF CD KILL JMP HASPRD+1 CLA CLL HASPRD, JMS I GCHR /FIRST CHARACTER ON LINE TAD -215 /IF THE FIRST CHARACTER ON LINE IS A SNA JMP HASPRD /GO BACK (OTHERWISE WE LOSE NEXT LINE) TAD 215-". SZA JMP SLT /NOT A PERIOD, TEST FOR SLASH TAD SKP DCA HASP77 TAD 1577 DCA LXR TAD -107 /FIRST 72 COLUMNS MAY CONTAIN INFO DCA T HASPCC, JMS I GCHR TAD -215 /CARRIAGE RETURN SNA JMP EOLINE TAD 215-"$ SNA JMP ALTMOD TAD "$ /FIX BACK DCA I LXR /PUT IT TO MONITOR AREA ISZ T JMP HASPCC JMS GGCRET /LINE TOO LONG, IGNORE REST JMP EOLINE FLUSHP, JMS GGCRET /FIRST CHAR WAS NOT PERIOD, JMP HASPRD /FLUSH LINE AND TRY AGAIN ALTMOD, DCA I LXR /A ZERO TAD "$ DCA I LXR JMS GGCRET EOLINE, DCA I LXR DCA I LXR / / HERE I WRITE MESELF OUT! JMS I DEVHND 5000 /WRITE 4 BLOCKS 0 RESEXP /IT WAS RESERVED FOR EXPANSION - SO USE IT HLT / JMP I XXGO /GO! / GGCRET, 0 JMS I GCHR /SCAN OUT TO THE CARRIAGE RETURN TAD -215 SZA CLA JMP .-3 JMP I GGCRET ENDCDC, TAD I CDTADX /CODE IF WE DIDNT GET AN ASTERISK DCA HASP77 /ON A LINE FOR THE COMMAND DECODER TAD BLKSAV /LOOK TO SEE IF WE DID A READ CIA TAD I IBLK SNA CLA JMP KMNTRY /WE DID NOT READ FROM CONTROL FILE JMS I DEVHND 4100 /WE DID READ, SO WE NEED TO SAVE THIS PART 1000 /OF THE BUFFER BEFORE WE CAN ACT LIKE THE RESEXP+2 /CALL FOR THE MONITOR HLT JMP KMNTRY SLASHT, TAD "*-"/ /IS IT SLASH? SZA CLA JMP I ENDCDC /NOT SLASH, END CD JMS LIST /SLASH, LIST WHOLE LINE JMP I CDTADX-2 / HANUPA, KSF /WAIT FOR KEYSTRUCK JMP .-1 /***************************** KCC /***NOTE WE ARE ABOUT TO****** /***EXECUTE THE SUBROUTINE**** /***RETURN IN LIST!!!!!******* /***LIST MUST NOT BE CALLED*** /***************************** LIST, 0 /SR TO LIST SLASH LINE JMS I GCHR /GET A CHAR JMS ECHO /TYPE IT TAD KMUPA /TEST FOR SNA JMP HANUPA /YES, HANDLE UP ARROW TAD KUM215 /WAS IT CR? SZA CLA JMP LIST+1 /NO, KEEP TYPING TAD 212 /CR, APPEND A LF JMS ECHO CLA CLL JMP I LIST /DONE LISTING SLT, TAD ".-"/ /IS IT SLASH SZA CLA JMP FLUSHP /NO JMS LIST /YES, LIST IT JMP HASPRD /DONE UPROVL=. NOPUNCH; *1201; ENPUNCH / *** THIS CODE GETS MOVED TO MONITOR AREA XXKILL, JMP I .+1 7600 /WE GOT CALLED HERE, NO GOOD XXGO, TAD SYSTEM DCA XXSAVE JMS I DEVHND 0500 /READ IN THE OTHER 2 1/2 BLOCKS 0 KEY HLT CLA CLL JMS I MNCRLF TAD XXSAVE DCA SYSTEM JMP I XXLAST XXSAVE, 0 XXLAST, 404 /********GO INTO MONITOR! / / / PAGE ZERO, SOME LOCATIONS ARE LIKE MONITOR! / *14 LXR, 0 X1, 0 *20 T1, 0 T, 0 *25 SYSTEM, 7700 ECHO, 0 TLS TSF JMP .-1 JMP I ECHO *35 DEVHND, 7607 SAVCHR, 0 GCHR, GETCHR FBLOK, 0 BLKSAV, 0 / / THESE ARE LOCS USED BY THE INIT ROUTINE / *50;XXRETI /POINTER FOR RETURN *106;7700 /LITERAL FOR STANDARD SYS *111;7700 /LITERAL FOR EXTENDED COMMANDS SYS KMUPA, -" KUM215, " -215 *120;0200 /LITERAL FOR ST SYS *122;0200 /LITERAL FOR EXT COM SYS $