/ DISPLAY DATA FILING PROGRAM / LAST EDIT: 27-APR-1988 16:00:00 CJL / MUST BE ASSEMBLED WITH '/J' SWITCH SET. / THIS PROGRAM PROCESSES X, Y PAIR DATA ON THE DISK CREATED BY A PRIOR / PROGRAM (SUCH AS FOCAL, ETC.). THE DATA FORMAT IS PROSCRIBED BY THE / FOCAL "DPATCH" PROGRAM. ASCII OUTPUT FILES WILL CONTAIN THE ACTUAL / DATA VALUES IN PRINTABLE FORM. / PROGRAM USAGE: / AFTER RUNNING THE DATA CREATION PROGRAM, INVOKE THIS PROGRAM AS FOLLOWS: / .GET BDSFIL BINARY OF THIS ASSEMBLY / .R $,OUT1,OUT2,OUTN< RUN WITH OUTPUT FILES AS NECESSARY / OR / .R $>OUT1,OUT2,OUTN ALTERNATE COMMAND SYNTAX FOR ABOVE / THIS OUTPUT FILE LIST MAY CONTAIN UP TO 17 FILES; THE ACTUAL NUMBER OF / FILES USED WILL BE REPORTED AT THE END OF EXECUTION; ADDITIONAL FILES MAY / BE DISCARDED. IF INSUFFICIENT FILES ARE PASSED, AN ERROR MESSAGE WILL / INDICATE THE TRUNCATION OF THE OUTPUT DATA. INPUT FILES ARE NOT ALLOWED. / THE OPTION SWITCH '/U' MAY BE INVOKED WHILE RUNNING THIS PROGRAM TO CAUSE / ALL CONSOLE MESSAGES TO PRINT IN UPPER-CASE ONLY (DEFAULT IS UPPER-LOWER / CASE). / PROGRAM PARAMETERS. DECIMAL /MAKE IT EASIER LINCNT= 6 /SIX ON A LINE OCTAL /BACK TO NORMAL / PROGRAM DEFINITIONS. FILBUFF=3000 /FILE CREATED IN 003000 PRGFLD= 0^10 /PROGRAM FIELD XYFLD= 1^10 /FIELD FOR X, Y DATA PAIRS / SYSTEM DEFINITIONS. DOLBLK= 0040 /DEFAULT ASCII SCRATCH AREA ($) INCON= 0031 /EQUATED FROM CONSOLE! OUTCON= 0033 /EQUATED FROM CONSOLE! SBOOT= 7600 /MONITOR EXIT ADDRESS SBTFUN= 7602 /SYSTEM BOOTSTRAP UNIT WORD SCRSIZE=7611 /SOFTWARE CORE SIZE WORD SFILES= 7757 /PASSED OUTPUT FILES HERE SOUTFLS=7607 /OUTPUT FILE COUNT SYSIO= 7640 /I/O ROUTINES ENTRY POINT SWMX= 7605 /M-/X SWITCHES TTY= 0003 /CONSOLE DEVICE CODE WRITE= 4000 /SYSIO WRITE FUNCTION BIT / DEVICE DEFINITIONS. KCCIOT= TTY^10+6002 /CLEAR KEYBOARD FLAG KRSIOT= TTY^10+6004 /READ KEYBOARD BUFFER KSFIOT= TTY^10+6001 /SKIP ON KEYBOARD FLAG TLSIOT= TTY+1^10+6006 /OUTPUT TO TELEPRINTER TSFIOT= TTY+1^10+6001 /SKIP ON TELEPRINTER FLAG XYBLK= 4400 /STARTING BLOCK FOR X, Y DATA PAIRS XYHIGH= 6260 /UPPER BLOCK LIMIT FOR X, Y DATA PAIRS XYUNIT= 7 /LOGICAL UNIT FOR X, Y DATA PAIRS / NUMERIC LOAD, ETC. DEFINITIONS. JMSC= JMS . /CURRENT PAGE JMS INSTRUCTION JMSSYSI=SYSIO&177+JMSC /CALL TO SYSIO ON ITS PAGE NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 NL7775= CLA CLL CMA RTL /LOAD AC WITH 7775 NL7777= CLA CMA /LOAD AC WITH 7777 PAGE 0 /START AT THE BEGINNING 0 /DON'T USE THIS! *10 /GET TO AUTO-INDEX AREA *20 /GET PAST AUTO-INDEX AREA CNTHI, .-. /HIGH-ORDER WORD COUNTER CNTLO, .-. /LOW-ORDER WORD COUNTER EOLPROT,250 / PROTECTION VALUE FOR FIXED FILES FILCNT, 0 /P?S/8 FILE CREATION COUNT FILPTR, SFILES /FILE POINTER HICNT, .-. /HIGH-ORDER DISPLAY COUNT INCHAR, .-. /LATEST KEYBOARD INPUT CHARACTER LOCNT, .-. /LOW-ORDER DISPLAY COUNT LZSW, .-. /LEADING ZERO SWITCH PFFLATE,.-. /LATEST CHARACTER INSERTED INTO FIXED FILE PFFPREV,.-. /PREVIOUS CHARACTER INSERTED INTO FIXED FILE PUTEMP, .-. /OUTPUT TEMPORARY P7TEMP, .-. /TERMINAL OUTPUT TEMPORARY SCRCASE,.-. /SCRIBE ROUTINE CASE SCRCHAR,.-. /LATEST OUTPUT CHARACTER SCRPTR, .-. /SCRIBE ROUTINE POINTER / EAE SIMULATOR DEFINITIONS. DVI= JMS I [XDVI] /DIVIDE MUY= JMS I [XMUY] /MULTIPLY CHKUP, .-. /CHECK FOR <^C>, ETC. ROUTINE JMS CTLCTST /CHECK FOR <^C> SZA /SKIP IF NOTHING CAME IN TAD [-"Q!300] /ELSE COMPARE TO <^Q> SNA /SKIP IF NEITHER CASE JMP CHKCLR /ELSE FORGET IT TAD [-"S+"Q] /COMPARE TO <^S> PSYSIO, SZA CLA /SKIP IF IT MATCHES JMP I CHKUP /ELSE RETURN JMS CTLCTST /GET ANOTHER CHARACTER TAD [-"Q!300] /COMPARE TO <^Q> SZA CLA /SKIP IF IT MATCHES JMP .-3 /ELSE KEEP GOING CHKCLR, DCA INCHAR /OBLITERATE <^Q>, ETC. JMP I CHKUP /RETURN CTLCTST,.-. /CHECK FOR <^C> ROUTINE L7600, CLA!400 /CLEAN UP CHKKSF, KSFIOT /**** CONSOLE **** CIF MCS+10 CHKJMP, JMP I CTLCTST /**** CONSOLE **** JMS INCON CHKKRS, KRSIOT/OR KRBIOT /**** CONSOLE **** JMP I CTLCTST AND [177] /JUST SEVEN BITS DCA INCHAR /STASH THE CHARACTER NL7775 /-3 TAD INCHAR /COMPARE INPUT TO <^C> SNA /SKIP IF OTHER ISZ I [SCRSIZE] /ELSE SET SOFT INDICATOR SPA SNA CLA /SKIP IF <^D> OR GREATER JMP I L7600/[SBOOT] /ELSE GOODBYE CHKKCC, KCCIOT/OR 0000 /**** CONSOLE **** 0000 TAD INCHAR /GET THE CHARACTER JMP I CTLCTST /RETURN P7CH, .-. /SEVEN-BIT PRINT ROUTINE DCA P7TEMP /STASH PASSED VALUE P7AGN, JMS CHKUP /CHECK FOR <^C>, ETC. TAD P7TEMP /GET THE VALUE P7TSF, TSFIOT /**** CONSOLE **** CIF MCS+10 P7JMP, JMP P7AGN /**** CONSOLE **** JMS OUTCON P7TLS, TLSIOT /**** CONSOLE **** JMP P7AGN JMS CHKUP /CHECK FOR <^C>, ETC. JMP I P7CH /RETURN PAGE /START AT THE BEGINNING START, JMS I (INITIALIZE) /SETUP POINTERS, ETC. LOOP, JMS GETONE /GET A WORD JMS I (PUTONE) /PUT A WORD ISZ CNTLO /COUNT THIS ONE SKP /SKIP IF NO OVERFLOW ISZ CNTHI /ELSE BUMP HIGH-ORDER ISZ LOCNT /DONE YET (LOW-ORDER)? SKP /SKIP IF NOT ISZ HICNT /DONE YET (HIGH-ORDER)? JMP EOLCHK /NO, KEEP GOING JMS I [P6CH] /OUTPUT NOW DONE, NL4000 /INDICATE JMS I [PFFOUT] /CLOSE THE FILE JMP I (CREPORT) /FINISH IT THERE EOLCHK, TAD CNTHI /GET HIGH-ORDER COUNT MQL /TO LOW-ORDER DVI; LINCNT /DIVIDE BY LINE COUNT MQL /SAVE REMAINDER TAD CNTLO /GET LOW-ORDER COUNT SWP /SETUP FOR NEXT DVI; LINCNT /DIVIDE BY LINE COUNT SZA CLA /SKIP IF REMAINDER IS ZERO TAD [37] /ELSE GET JMS I [P6CH] /OUTPUT OR AS NECESSARY JMP LOOP /KEEP GOING GETONE, .-. /GET A WORD ROUTINE JMP I GETEXIT /GO WHERE YOU HAVE TO GETEXIT,GETINIT /EXIT ROUTINE CDF XYFLD /GOTO PAIR FIELD TAD I GETPTR /GET AN X VALUE ISZ GETPTR /BUMP TO NEXT NOP /JUST IN CASE CDF PRGFLD /BACK TO OUR FIELD JMP I GETONE /RETURN TO MAIN CALLER / COMES HERE TO READ IN THE NEXT BUFFER. GETIO, JMS I PSYSIO/[SYSIO] /CALL I/O ROUTINES GETPTR, 0000 /TRANSFER ADDRESS XYFUN, .-.^100+XYFLD+XYUNIT /PAGE COUNT WILL BE FILLED IN XYBLOCK,.-. /BLOCK WILL BE FILLED IN GETLUP, JMS GETEXIT /ACQUIRE LATEST X OR Y AND RETURN TAD GETPTR /GET THE POINTER SZA CLA /SKIP IF AT END OF BUFFER JMP GETLUP /ELSE JUST KEEP GOING TAD XYBLOCK /GET THE BLOCK TAD [40] /UPDATE TO NEXT BUFFER DCA XYBLOCK /STORE BACK CLL /CLEAR LINK FOR TEST TAD XYBLOCK /GET THE NEW BLOCK TAD [40] /ADD ON TENTATIVE COUNT TAD (-XYHIGH) /COMPARE TO DEVICE UPPER LIMIT SNL /SKIP IF NEAR END OF DEVICE JMP XYOK /JUMP IF NOT CIA /NOW HAVE HOW MANY NOT TO USE SKP /DON'T CLEAR! XYOK, CLA /CLEAN UP / TAD [40] /NOW HAVE LATEST PAGE COUNT AND [37] /JUST PAGE BITS FOR CALL CLL RTL;RTL;RTL /MOVE UP TAD (XYFLD+XYUNIT) /ADD ON FIELD AND UNIT BITS DCA XYFUN /STORE IN-LINE JMP GETIO /CONTINUE THERE / COMES HERE TO INITIALIZE FIRST BUFFER, ETC. GETINIT,JMS I PSYSIO/[SYSIO] /CALL I/O ROUTINES 0000 /TRANSFER ADDRESS 40&37^100+XYFLD+XYUNIT /FUNCTION XYBLK /BLOCK DCA GETPTR /CLEAR THE POINTER TAD (XYBLK) /SETUP THE DCA XYBLOCK /INITIAL BLOCK CDF XYFLD /GOTO PAIR FIELD TAD I GETPTR /GET THE LOW-ORDER COUNT CLL RAL /*2 FOR WORDS DCA LOCNT /SAVE FOR NOW ISZ GETPTR /BUMP TO NEXT TAD I GETPTR /GET HIGH-ORDER COUNT RAL /*2 FOR WORDS DCA HICNT /SAVE FOR NOW ISZ GETPTR /BUMP TO NEXT DCA CNTLO /CLEAR THE DCA CNTHI /WORD COUNTERS TAD LOCNT /GET LOW-ORDER COUNT SNA /SKIP IF SOME THERE TAD HICNT /ELSE GET HIGH-ORDER COUNT SNA CLA /SKIP IF SOMETHING THERE IN EITHER JMP DONE /ELSE WE'RE DONE ALREADY! TAD LOCNT /GET LOW-ORDER COUNT BACK CLL CIA /INVERT IT FOR COUNTING DCA LOCNT /STASH IT TAD HICNT /GET THE HIGH-ORDER COUNT CMA /INVERT IT FOR COUNTING SZL /CARRY? IAC /YES, SO INCREMENT DCA HICNT /STASH IT JMP GETLUP /CONTINUE THERE PAGE / WORD OUTPUT ROUTINE. PUTONE, .-. /OUTPUT A WORD ROUTINE DCA PUTEMP /SAVE PASSED VALUE DCA LZSW /CLEAR LEADING SWITCH TAD PUTEMP /GET THE VALUE SPA CLA /SKIP IF POSITIVE JMP DONEG /JUMP IF NOT TAD [" &77] /GET A LEADING JMS I [P6CH] /OUTPUT IT JMP PUTCOMMON /CONTINUE THERE DONEG, TAD ("-&77) /GET A MINUS SIGN JMS I [P6CH] /OUTPUT IT TAD PUTEMP /GET THE VALUE CIA /INVERT IT DCA PUTEMP /STORE BACK PUTCOMM,TAD PUTEMP /GET THE VALUE MQL /TO LOW-ORDER DVI; 1750 /GET THOUSANDS DIGIT JMS DIGOUT /OUTPUT IT TAD PUTEMP /GET REMAINDER MQL /TO LOW-ORDER DVI; 144 /GET HUNDREDS DIGIT JMS DIGOUT /OUTPUT IT TAD PUTEMP /GET REMAINDER MQL /TO LOW-ORDER DVI; 12 /GET TENS DIGIT JMS DIGOUT /OUTPUT IT ISZ LZSW /FORCE SIGNIFICENCE OF LAST DIGIT TAD PUTEMP /GET REMAINDER MQL /TO LOW-ORDER JMS DIGOUT /OUTPUT ONES DIGIT JMP I PUTONE /RETURN DIGOUT, .-. /OUTPUT A DIGIT ROUTINE DCA PUTEMP /SAVE REMAINDER FIRST MQA /GET QUOTIENT SZA CLA /SKIP IF ZERO ISZ LZSW /ELSE FORCE SIGNIFICENCE FOR LATER CLL /CLEAR LINK NOW TAD LZSW /GET CURRENT SWITCH SZA CLA /SKIP IF NOT SET STL /ELSE SET LINK TO PREVENT TEST MQA /GET THE QUOTIENT SNL /SKIP IF NOT TO TEST SZA /SKIP IF LEADING ZERO TAD ("0-" ) /CONVERT TO DIGIT TAD [" &77] /GET VALUE JMS I [P6CH] /OUTPUT THE CHARACTER JMP I DIGOUT /RETURN / MESSAGE PRINTING ROUTINE. SCRIBE, .-. /MESSAGE PRINT ROUTINE CLA /JUST IN CASE TAD I SCRIBE /GET MESSAGE POINTER DCA SCRPTR /STASH IT ISZ SCRIBE /BUMP PAST ARGUMENT TAD (140) /INITIALIZE TO CASZP1, DCA SCRCASE /**** /U **** CLA!400 SCRLUP, TAD I SCRPTR /GET LEFT HALF-WORD RTR;RTR;RTR /MOVE OVER JMS SCRPRNT /PRINT IT TAD I SCRPTR /GET RIGHT HALF-WORD JMS SCRPRNT /PRINT IT ISZ SCRPTR /BUMP TO NEXT PAIR JMP SCRLUP /KEEP GOING SCRPRNT,.-. /CHARACTER PRINT ROUTINE AND [77] /JUST SIX-BIT SNA /END OF MESSAGE? JMP I SCRIBE /YES, RETURN TO ORIGINAL CALLER DCA SCRCHAR /NO, SAVE FOR NOW TAD SCRCHAR /GET IT BACK TAD (-"%!200) /IS IT "%"? SNA /SKIP IF NOT JMP SCRCRLF /JUMP IF IT MATCHES TAD [-"^+100+"%] /IS IT "^" SNA CLA /SKIP IF NOT JMP SCRFLIP /JUMP IF IT MATCHES TAD SCRCHAR /GET THE CHARACTER AND [40] /DOES CASE MATTER? SNA CLA /SKIP IF NOT TAD SCRCASE /ELSE GET PREVAILING CASE TAD SCRCHAR /GET THE CHARACTER LFENTRY,JMS P7CH /PRINT THE CHARACTER JMP I SCRPRNT /RETURN SCRCRLF,TAD (15) /GET A JMS P7CH /PRINT IT TAD (12) /GET A JMP LFENTRY /CONTINUE THERE SCRFLIP,TAD SCRCASE /GET CURRENT CASE CIA /INVERT IT TAD (140+100) /ADD SUM OF POSSIBLE VALUES CASZP2, DCA SCRCASE /**** /U **** CLA!400 JMP I SCRPRNT /RETURN PAGE / P?S/8 SIX-BIT OUTPUT ROUTINE. / CALL WITH: / TAD CHAR /AC CONTAINS LATEST CHARACTER TO OUTPUT / JMS I (P6CH) /CALL ROUTINE / ALWAYS RETURNS HERE WITH CLEAR AC / FILES ARE AUTOMATICALLY CREATED AS NECESSARY. / CALL APPROPRIATE ROUTINE TO CLOSE THE FILE (NL4000;JMS I [PFFOUT]). P6CH, .-. /SIX-BIT OUTPUT ROUTINE JMS I [PFFOUT] /CALL P?S/8 OUTPUT ROUTINE SKP /SKIP IF FILE JUST CLOSED JMP P6END /JUMP IF NOT ISZ FILPTR /BUMP TO NEXT FILE ARGUMENT TAD I FILPTR /GET THE NEXT FILE ARGUMENT SNA /END OF ALL FILES? JMP TRUNCATE /YES, WE LOSE DCA POFBLK /NO, STORE IN-LINE JMS I [PFFINITIALIZE] /CALL INITIALIZE ROUTINE POFBLK, .-. /WILL BE FILE ARGUMENT ([BLOCK&7770] + [UNIT&7]) 144 /INITIAL LINE NUMBER 12 /LINE INCREMENT P6END, JMS CHKUP /CHECK FOR <^C>, ETC. JMP I P6CH /RETURN TO CALLER TRUNCAT,JMS I [SCRIBE] /TELL THEM TRUMSG /WE DIDN'T MAKE IT CREPORT,TAD FILCNT /GET FILE COUNT SNA /SKIP IF ANY JMP FILNO /ELSE LEAVE IT SAYING "NO" TAD (-12) /IS IT LESS THAN TEN? SMA /SKIP IF SO TAD ("1^100-3612) /ELSE CORRECT FOR 10-17 TAD ("0-200+3612) /GET NUMERIC CORRECTION DCA I (FCTMSG+1) /STORE IN MESSAGE NL7777 /-1 TAD FILCNT /EXACTLY ONE FILE? SZA CLA /SKIP IF SO JMP FILNO /JUMP IF OTHERWISE TAD ("E^100+"^-300) /ELSE MAKE IT DROP THE "S" DCA I (FLSMSG+3) /STORE INTO THE MESSAGE FILNO, JMS I [SCRIBE] /TELL THEM FCTMSG /THE FILE COUNT JMS I [SCRIBE] /TELL THEM FLSMSG /FILES (OR FILE) JMS I [SCRIBE] /TELL THEM CREMSG /CREATION MESSAGE JMP I [SBOOT] /GOODBYE PAGE / P?S/8 FIXED FILE OUTPUT ROUTINE. / CALL WITH: / TAD CHAR /AC CONTAINS LATEST CHARACTER TO OUTPUT / JMS I [PFFOUT] /CALL ROUTINE / JMP FILEFULL /THE FILE BECAME FULL AND WAS CLOSED OUT / JMP FILEOK /FILE IS STILL ACTIVE / FILES WILL BE CLOSED OUT IF: / A) A NON- IS PASSED AND THERE IS ONLY ROOM ENOUGH FOR THE / NON- CHARACTER AND AN ADDITIONAL CHARACTER AND . / AN WILL BE AUTOMATICALLY INSERTED TO PRESERVE THE INTEGRITY / OF THE FILE ALONG WITH AN TO CLOSE IT. THE FILE WILL ALSO / BE WRITTEN OUT TO THE SYSTEM DEVICE ACCORDING TO THE PRIOR / INITIALIZATION (SEE "PFFINIT"). / B) AN CHARACTER (0000) IS PASSED AND THERE IS LESS ROOM THAN / "EOLPROT" LEFT IN THE FILE. AN WILL BE INSERTED INTO THE FILE / AND IT WILL BE CLOSED AND WRITTEN OUT TO THE SYSTEM DEVICE ACCORDING / TO THE PRIOR INITIALIZATION (SEE "PFFINIT"). / C) AN CHARACTER (4000) IS PASSED. IF THE PREVIOUS CHARACTER WAS / NOT AN CHARACTER, ONE WILL BE INSERTED BEFORE AN IS / INSERTED. THE FILE WILL BE CLOSED AND WRITTEN OUT TO THE SYSTEM / DEVICE ACCORDING TO THE PRIOR INITIALIZATION (SEE "PFFINIT"). PFFOUT, .-. /FIXED FILE OUTPUT ROUTINE DCA PFFLATEST /SAVE LATEST CHARACTER TAD PFFLATEST /GET IT BACK SNA /IS IT ? JMP PFFEOL /YES SPA CLA /IS IT ? JMP PFFCLOSE /YES TAD PFFLATEST /NO, GET THE CHARACTER AND [77] /JUST IN CASE JMS PFFSTORE /STORE IN FILE BUFFER TAD PFFPTR /GET THE INSERTION POINTER VALUE TAD (5) /ADD ON ULTIMATE PROTECTION VALUE CIA /INVERT FOR TESTING TAD I [FILBUFFER+3777] /COMPARE TO FILE POINTER LIMIT VALUE SMA SZA CLA /SKIP IF FILE IS ABSOLUTELY FULL JMP PFFOK /JUMP IF STILL SOME EXTRA ROOM JMS PFFOEOL /STORE CHARACTER PRESERVING FILE INTEGRITY JMP PFFWRITE /CONTINUE THERE PFFEOL, JMS PFFOEOL /OUTPUT CHARACTER TAD PFFNUMBER /GET LATEST LINE NUMBER TAD PFFINCREMENT /BUMP TO NEXT VALUE DCA PFFNUMBER /STORE BACK FOR NEXT TIME TAD (PFFLEFT) /RESET THE DCA PFFPUT /CO-ROUTINE TAD I [FILBUFFER+3776] /GET TEXT POINTER TAD EOLPROTECTION /ADD ON PROTECTION VALUE CIA /INVERT FOR TESTING TAD I [FILBUFFER+3777] /COMPARE TO POINTER LIMIT PF7700, SMA CLA /SKIP IF TOO FULL JMP PFFOK /JUMP IF STILL ENOUGH ROOM SKP /FALL INTO ROUTINE PFFCLOS,TAD PFFPREVIOUS /GET PREVIOUS CHARACTER SZA CLA /SKIP IF IT WAS JMS PFFOEOL /STORE CHARACTER PRESERVING FILE INTEGRITY PFFWRIT,TAD I [FILBUFFER+3776] /GET FREE TEXT POINTER TAD (-FILBUFFER) /COMPARE TO EMPTY VALUE SNA CLA /SKIP IF OTHERWISE JMP PFFEMPTY /JUMP IF FILE IS EMPTY JMS I PSYSIO/[SYSIO] /CALL I/O ROUTINES PFFBUFF,FILBUFFER /FILE ADDRESS PFFFUN, 20^100+WRITE+00+.-. /UNIT BITS WILL BE FILLED IN PFFBLK, .-. /BLOCK NUMBER WILL BE FILLED IN ISZ FILCNT /BUMP UP CREATION COUNT PFFEMPT,JMS PFFINITIALIZE /RE-INITIALIZE THE FILE POINTERS PFFDOLL,DOLBLK+.-. /UNIT BITS FROM "SBTFUN" WILL BE FILLED IN 144 /INITIAL LINE NUMBER 12 /LINE NUMBER INCREMENT SKP /DO NOT TAKE SKIP RETURN PFFOK, ISZ PFFOUT /BUMP TO OK RETURN TAD PFFLATEST /GET LATEST CHARACTER DCA PFFPREVIOUS /SAVE AS PREVIOUS CHARACTER FOR NEXT TIME JMP I PFFOUT /RETURN TO CALLER PFFOEOL,.-. / OUTPUT ROUTINE JMS PFFSTORE /OUTPUT CHARACTER ISZ PFFPTR /BUMP PAST LAST WORD DCA I PFFPTR /STORE TENTATIVE TAD PFFNUMBER /GET LATEST LINE NUMBER DCA I PFFLPTR /STORE OVER (FORMER) DUMMY LINE VALUE JMS PFFLINE /UPDATE FILE POINTERS AND CREATE NEW DUMMY PAIR JMP I PFFOEOL /RETURN / P?S/8 FIXED FILE INITIALIZE ROUTINE. / CALL WITH: / JMS I [PFFINITIALIZE] /CALL ROUTINE / BLOCK+UNIT /FILE ARGUMENT ([BLOCK&7770] + [UNIT&7]) / NUMBER /INITIAL LINE NUMBER / INCREMENT /LINE NUMBER INCREMENT / RETURN /ALWAYS RETURNS HERE PFFINIT,.-. /FIXED FILE INITIALIZE ROUTINE TAD I PFFINITIALIZE /GET FILE ARGUMENT AND [7770] /JUST BLOCK BITS DCA PFFBLK /STORE IN-LINE TAD I PFFINITIALIZE /GET IT AGAIN AND [7] /JUST UNIT BITS TAD (20^100+WRITE) /FORM WRITE FUNCTION DCA PFFFUN /STORE IN-LINE ISZ PFFINITIALIZE /BUMP TO NEXT ARGUMENT TAD I PFFINITIALIZE /GET INTIAL LINE NUMBER DCA PFFNUMBER /STASH IT ISZ PFFINITIALIZE /BUMP TO NEXT ARGUMENT TAD I PFFINITIALIZE /GET LINE NUMBER INCREMENT DCA PFFINCREMENT /STASH IT ISZ PFFINITIALIZE /BUMP PAST ARGUMENT TAD PFFBUFFER/(FILBUFFER) /SETUP THE DCA PFFPTR /TEXT POINTER TAD (PFFLEFT) /INITIALIZE DCA PFFPUT /CO-ROUTINE TAD [FILBUFFER+3777] /INITIALIZE DCA PFFLPTR /LINE POINTER JMS PFFLINE /CREATE INITIAL FILE POINTERS DCA PFFPREVIOUS /INITIALIZE PREVIOUS CHARACTER TO JMP I PFFINITIALIZE /RETURN PFFLINE,.-. /LINE POINTERS UPDATE ROUTINE NL7775 /BACKUP TO TAD PFFLPTR /PREVIOUS PAIR DCA PFFLPTR /STORE BACK TAD PFFLPTR /GET THE POINTER DCA I [FILBUFFER+3777] /STORE LATEST PAIR POINTER TAD PFFPTR /GET LATEST TEXT POINTER DCA I [FILBUFFER+3776] /STORE IN FREE TEXT POINTER TAD PFFPTR /GET TEXT POINTER DCA I PFFLPTR /STORE AS FREE TEXT POINTER IN DUMMY PAIR ISZ PFFLPTR /BUMP TO DUMMY LINE ADDRESS NL7777 /GET DUMMY LINE VALUE DCA I PFFLPTR /STORE IN DUMMY LINE HOLDER JMP I PFFLINE /RETURN PFFSTOR,.-. /CHARACTER INSERTION ROUTINE JMP I PFFPUT /GO WHERE YOU SHOULD PFFPUT, PFFLEFT /EXIT ROUTINE; INITIALIZED FOR FIRST CHARACTER DCA I PFFPTR /STORE LATEST WORD JMP I PFFSTORE /RETURN TO THEIR CALLER PFFLEFT,STL RTL;STL RTL;STL RTL /SHIFT LEFT WITH GARBAGE JMS PFFPUT /STORE IT AND GET ANOTHER CHARACTER DCA PFFINITIALIZE /SAVE LATEST CHARACTER TAD I PFFPTR /GET PREVIOUS AND GARBAGE AND PF7700/(7700) /REMOVE GARBAGE TAD PFFINITIALIZE /ADD ON LATEST JMS PFFPUT /STORE BOTH AND GET ANOTHER ISZ PFFPTR /BUMP TO NEXT PAIR JMP PFFLEFT /KEEP GOING PFFINCR,.-. /LINE NUMBER INCREMENT FOR FIXED FILES PFFLPTR,.-. /FIXED FILE INFORMATION PAIR POINTER PFFNUMB,.-. /LATEST LINE NUMBER FOR FIXED FILES PFFPTR, .-. /FIXED FILE INSERTION POINTER PAGE / INITIALIZE ROUTINE. INITIAL,.-. /INITIALIZE ROUTINE TAD (GETINIT) /RESET THE DCA I (GETEXIT) /INPUT CO-ROUTINE TAD I (SBTFUN) /GET BOOTSTRAP FUNCTION WORD AND [7] /JUST UNIT BITS TAD [DOLBLK] /ADD ON "$" BLOCK NUMBER DCA I (PFFDOLLAR) /STORE IN INITIALIZE CODE TAD I [SBOOT] /GET BOOTSTRAP INSTRUCTION TAD (-JMSSYSIO) /COMPARE TO POSSIBLE VALUE SNA CLA /SKIP IF DIFFERENT JMP CHKCOVERLAY /JUMP IF IT MATCHES ISZ CHKKRS /TURN "KRSIOT" ISZ CHKKRS /INTO "KRBIOT" DCA CHKKCC /DESTROY "KCCIOT" CHKCOVR,NL0002 /SETUP "C" BIT MASK AND I [SCRSIZE] /GET THE "C" BIT SNA CLA /SKIP IF CONSOLE OVERLAY PRESENT JMP ANNOUNCE /JUMP IF NOT TAD I [SCRSIZE] /GET THE CORE SIZE WORD RTR;RAR /MOVE OVER AND AND (70) /ISOLATE MCS BITS TAD (CIF 10) /TURN INTO CIF MCS+10 DCA P7TSF /STORE OVER "TSFIOT" TAD P7JMP /GET "JMP P7AGN" DCA P7TLS /STORE OVER "TLSIOT" TAD (JMS OUTCON) /GET OUTPUT CALL INSTRUCTION DCA P7JMP /STORE OVER "JMP P7AGN" TAD P7TSF /GET "CIF MCS+10" AGAIN DCA CHKKSF /STORE OVER "KSFIOT" TAD CHKJMP /GET "JMP I CTLCTST" DCA CHKKRS /STORE OVER "KRSIOT" (OR "KRBIOT") TAD (JMS INCON) /GET INPUT CALL INSTRUCTION DCA CHKJMP /STORE OVER "JMP I CTLCTST" DCA CHKKCC /DESTROY "KCCIOT" ANNOUNC,TAD I (SWMX) /GET /M-/X SWITCHES AND (10) /JUST /U BIT SNA CLA /SKIP IF SET JMP ANNOU2 /ELSE GO START IT UP TAD L7600/[CLA!400] /GET A "CLA" INSTRUCTION DCA I (CASZP1) /PREVENT CASE CHANGE TAD L7600/[CLA!400] /GET A "CLA" INSTRUCTION DCA I (CASZP2) /PREVENT CASE CHANGE TAD (100) /FORCE DCA SCRCASE /UPPER-CASE ANNOU2, JMS I [SCRIBE] /TELL THEM ANNMSG /WE HAVE ARRIVED TAD I FILPTR /GET FIRST FILE ARGUMENT SNA CLA /SKIP IF SOMETHING THERE JMP NOFILES /ELSE COMPLAIN TAD I (SOUTFLS) /GET OUTPUT FILE COUNT SNA /SKIP IF SOME OUTPUT FILES PASSED JMP NOOUTFILES /JUMP IF NOT TAD FILPTR /POINT AT END OF OUTPUT LIST DCA P7TEMP /STASH THE POINTER TAD I P7TEMP /GET THE DELIMITER SZA CLA /SKIP IF ACTUAL END OF LIST JMP MIXFILES /ELSE COMPLAIN OF MIXED FILES TAD I FILPTR /GET THE FIRST FILE ARGUMENT SNA /SKIP IF VALID ARGUMENT JMP I (TRUNCATE) /ELSE GO COMPLAIN THERE DCA INIARG /STORE IN-LINE JMS I [PFFINITIALIZE] /CALL INITIALIZATION ROUTINE INIARG, .-. /WILL BE FILE ARGUMENT ([BLOCK&7770] + [UNIT&7]) 144 /INITIAL LINE NUMBER 12 /LINE INCREMENT JMP I INITIALIZE /RETURN MIXFILE,JMS I [SCRIBE] /TELL THEM MFLMSG /OF MIXED FILES JMP I [CREPORT] /GOODBYE! NOFILES,JMS I [SCRIBE] /TELL THEM NFLMSG /THEY GOOFED JMP I [CREPORT] /GOODBYE! NOOUTFI,JMS I [SCRIBE] /TELL THEM NOFMSG /THEY GOOFED JMP I [CREPORT] /GOODBYE PAGE / ONCE-ONLY TEXT MESSAGES. ANNMSG, TEXT "^D^ISPLAY ^D^ATA ^F^ILE ^C^REATION%" CRLF, TEXT "%" MFLMSG, TEXT "%^C^ANNOT ^P^ROCESS ^M^IXED ^I^NPUT AND ^O^UTPUT ^F^ILES!%^" NFLMSG, TEXT "%^N^O ^P?S/8 F^ILES ^G^IVEN!%" NOFMSG, TEXT "%^N^O ^P?S/8 O^UTPUT ^F^ILES ^G^IVEN!%^" / TEXT MESSAGES. CREMSG, TEXT " ^C^REATED%" FCTMSG, TEXT "%^NO^" FLSMSG, TEXT " ^F^ILES^" TRUMSG, TEXT "%^I^NSUFFICIENT ^O^UTPUT ^F^ILES, ^I^NPUT ^T^RUNCATED!%" PAGE / DIVIDE ROUTINE. XDVI, .-. /DIVIDE DCA XDVIAC /SAVE HIGH-ORDER MQA /GET LOW-ORDER DCA XDVIMQ /STASH IT TAD I XDVI /GET THE ARGUMENT VALUE CIA /INVERT IT DCA XDIVSOR /SAVE AS DIVISOR TAD XDVIAC /GET BACK AC STL CMA /COMPLEMENT AND SET LINK FOR TEST TAD I XDVI /ADD ON DIVISOR SZL CLA /SKIP IF NO OVERFLOW JMP XDVIEXT /JUMP IF OVERFLOW TAD (-14) /SETUP THE DCA XDVICT /SHIFT COUNTER XDVILP, TAD XDVIMQ /GET LOW-ORDER CLL RAL /MOVE UP DCA XDVIMQ /STORE BACK TAD XDVIAC /GET HIGH-ORDER RAL /MOVE UP DCA XDVIAC /STORE BACK TAD XDVIAC /GET HIGH-ORDER TAD XDIVSOR /COMPARE TO DIVISOR SZL /SKIP IF SMALLER DCA XDVIAC /ELSE STORE BACK SZL CLA /SKIP IF SMALLER ISZ XDVIMQ /ELSE BUMP QUOTIENT ISZ XDVICT /SHIFTED ENOUGH? JMP XDVILP /NO, KEEP GOING TAD XDVIMQ /GET LOW-ORDER MQL /LOAD IT TAD XDVIAC /GET HIGH-ORDER XDVIEXT,ISZ XDVI /BUMP PAST ARGUMENT JMP I XDVI /RETURN XDVIMQ, .-. /LOW-ORDER STORAGE OF PASSED VALUE XDVIAC, .-. /HIGH-ORDER STORAGE OF PASSED VALUE XDVICT, .-. /SHIFT COUNTER XDIVSOR,.-. /DIVISOR / MULTIPLY ROUTINE. XMUY, .-. /MULTIPLY ROUTINE CLA CLL /CLEAN UP TAD (-15) /SETUP THE DCA XMUYCT /SHIFT COUNTER XMUYUP, RAR /SHIFT RIGHT SWP /INTO LOW-ORDER; GET LOW-ORDER RAR /SHIFT RIGHT SWP /RETURN TO LOW-ORDER; GET ORIGINAL HIGH-ORDER ISZ XMUYCT /SHIFTED ENOUGH? SKP /SKIP IF NOT JMP XMUYEXT /EXIT IF SO SNL /LATEST BIT ON JMP XMUYUP /NO, JUST KEEP GOING CLL /YES, CLEAR LINK FOR PROPER CARRY TAD I XMUY /ADD ON ARGUMENT VALUE JMP XMUYUP /KEEP GOING XMUYEXT,ISZ XMUY /BUMP PAST THE ARGUMENT JMP I XMUY /RETURN XMUYCT, .-. /SHIFT COUNTER PAGE $ /THAT'S ALL FOLK!