return to main pageStan's version of -
BIG PRINT
Started August 7, 2008 Table of Contents
Source Code
Stan Paddock's version of BIGPRINT Source Code .S
job BIGPRINT ctl 6611 * BIGPRINT * PROGRAM BY ED THELEN * MODIFIED BY DAN MCINNIS APRIL 1,2008 * MODIFIED BY STAN PADDOCK JULY 14, 2008 * NEED FOR PUNCH REMOVED * OPTION FOR NO PRINT REMOVED * SUBROUTING CALLS REMOVED AS POSSIBLE * IF THERE ARE NO BLURB CARDS, THERE IS NO BLURB PRINTING * - CARDS MUST BE "- " A MINUS FOLLOWED BY FOUR SPACES * INBUF DS 1 * ORG 87 X1 DSA 0 * index register 1 ORG 92 X2 DSA 0 * index register 2 ORG 97 X3 DSA 0 * index register 3 * ORG 201 * START PRINT OUTPUT AREA PRNTA DC 1 PRNTA1 DC 1 PRNTA2 DC 1 PRNTA3 DC 1 PRNTA4 DC 1 * * ------------------------------------------------------------- ORG 335 * START ORIGINAL PROGRAM AREA M14 DCW @14@ *MUPLIPLIER BY 14 M2 DCW @345@ *MULTIPLICAN * BH DCW @000@ BL DC @0000@ *WHERE THE ANSWER APPEARS * NZERO DCW 000 * A NUMERICAL ZERO NONE DCW 001 * A NUMERICAL ONE TXLIM DCW 000 * TEXT INDEX LIMIT TXLCNT DCW 000 * TEMP LINE COUNT START H * HALT TO CHECK PAPER CS 80 * CLEAR WORD MARKS FROM CARD READ SW 001 * SET WORD MARK ZA NZERO,NZERO * SET SIGN BITS * ****************************************************************** * LOAD TEXT CARD PAIRS INTO MEMORY, SETTING INDEX LIMIT AT END * THIS IS ALSO KNOWN AS THE BLURB ****************************************************************** * LOADTS MCW L3V65,X3 * 65=>X3 SET UP PUT AWAY INDEX ZA NZERO,TXLIM * INITIALIZE BLURB LINE COUNT * LOADC R * READ 1ST CARD OF PAIR C LMINUS,004 * HAS IT A LEADING -(SP)(SP)(SP) ? BE LOADTX * YES, EXIT MCW 065,TXTSTR-1&X3 * MOVE 65 CHAR OF CARD IMAGE TO STORE MA L3V65,X3 * INCREMENT PUT AWAY INDEX R * READ 2ND CARD OF PAIR C LMINUS,004 * HAS IT A LEADING --(SP)(SP)(SP) ? BE LOADTX * YES, EXIT MCW 065,TXTSTR-1&X3 * MOVE 65 CHAR OF CARD IMAGE TO STORE MA L3V65,X3 * INCREMENT PUT AWAY INDEX A NONE,TXLIM * ADD 1 TO LINE COUNT B LOADC * GO GET MORE ****************************************************************** LMINUS DCW @- @ * END OF FILE CARD L3V001 DCW @001@ * JUST A ONE LOADTX NOP * END OF BLURB LOAD * ****************************************************************** * READ IN AND STORE THE DATE CARD ****************************************************************** * R * READ DATE CARD MCW 25,DATE25 * PUT IT IN A SAFE PLACE * ****************************************************************** * READ IN AND PROCESS GUEST CARDS ****************************************************************** * RDGEST NOP * READG R * READ GUEST CARD C LMINUS,004 * IS FIRST COL MINUS AND THREE SPACES? BE NEND * YES, STOP * * THE FOLLOWING B IS ACTUALLY A CALL TO A SUBROUTINE SKIPPU B BIGPRT * CALL SUB TO PROCESS GUEST CARD & VISITED * * DOUBLE SIZE CONTROL IS RETURNED AS ZERO OK * MCW L1V0,DOUBLE * SET FOR SINGLE SIZE BIG PRINT MCW LINE3,WORK * * THE FOLLOWING B IS ACTUALLY A CALL TO A SUBROUTINE B PRINTS MCW LINE4,WORK * * THE FOLLOWING B IS ACTUALLY A CALL TO A SUBROUTINE B PRINTS MCW DATE25,WORK * PRINT DATE LINE * * THE FOLLOWING B IS ACTUALLY A CALL TO A SUBROUTINE B PRINTS * ****************************************************************** * START PRINT TEXT STUFF, 130 COL (65 X 2) UNTIL LIMIT - ****************************************************************** * C NZERO,TXLIM * CHECK AND SEE IF WE HAVE CARDS TO PRINT BE PNTTXX * NO, BY-PASS THIS SECTION * MCW P3V130,X3 * SET UP INDEX FETCH ZA TXLIM,TXLCNT * PUT THE LINE COUNT IN HERE CS 332 * CLEAR TOP OF PRINT AREA CS * CLEAR BOTTOM OF PRINT AREA SW 201 * ASSURE WORD MARK AT BEGIN PRINT AREA W * WRITE A BLANK LINE ***************************************************************** PNTCYC MCW TXTSTR-1&X3,330 * MOVE 130 CHAR W * WRITE TO PRINTER MA P3V130,X3 * ADD LENGTH TO FETCH S NONE,TXLCNT * SUBTRACT ONE LINE C NZERO,TXLCNT * CHECK AND SEE IF WE HAVE CARDS TO PRINT BE PNTTXX * NO, EXIT THIS SECTION B PNTCYC * GO GET ANOTHER LINE TO PRINT PNTTXX NOP * END OF ROUTINE CC 1 * TOP OF FORM * ******************************************************************* * SKIPTX B READG * GO AND GET THE NEXT GUEST CARD * NEND CC 1 * TOP OF FORM H 999 NOP * ****************************************************************** * BIG PRINT SUBROUTINE ****************************************************************** * BIGPRT SBR BIGPTX&3 * SET RETURN ADDRESS MCW L1V1,DOUBLE * MCW L3V000,PICKUP * INITIALIZE PICKUP MCW BLANKS,WORK * BLANK WORK AREA, FOR 1ST NAME MCW PICKUP,X1 * START SCAN MCW L3V000,X2 * START PUTAWAY BIGPTA MCW 1&X1,PCHAR * MOVE 1ST CHAR OF 1ST NAME MCW PCHAR,WORK-24&X2 A ONE3,X1 A ONE3,X2 C L3V012,X2 * TOO MANY? BE BIGPTB * YES, PRINT C L1VBL,PCHAR * WAS IT BLANK BU BIGPTA BIGPTB MCW X1,PICKUP B PRINTS * MCW BLANKS,WORK * BLANK WORK AREA, FOR 2ND NAME MCW L1VBL,BIGLST * SHOW NO CHARS IN LAST NAME MCW PICKUP,X1 * START SCAN MCW L3V002,X2 * START PUTAWAY BIGPTC MCW 1&X1,PCHAR * MOVE 1ST CHAR OF LAST NAME MCW PCHAR,WORK-24&X2 * A ONE3,X1 C X1,L3VO79 * DON'T SCAN PAST END OF CARD BE BIGPTD * YES, TERMINATE C L1VBL,BIGLST * IF IN LAST NAME, DON'T EAT BLANKS BU BIGNET C L1VBL,PCHAR * BLANK BE BIGPTC * YES, EAT LEADING BLANKS BIGNET MCW PCHAR,BIGLST * A ONE3,X2 C L3V012,X2 * TOO MANY? BU BIGPTC BIGPTD MCW X1,PICKUP B PRINTS * PRINT LAST NAME BIGPTX B 000 * SUBROUTINE RETURN BIGLST DCW 1 * ******************************************************************** * PRINTS SUBROUTINE ******************************************************************** * PRINTS SBR PRINTX&3 * set return address MCW ZERO3,WROW * initialize print row counter PRINT1 MCW ZERO3,WCOL * initialize work character pick up MCW L3V000,PCOL * initialize output index CS 332 * clear printer area CS SW 201 * PRINT2 MCW WCOL,X1 * prepare to pick up next char to process MCW WORK-24&X1,PCHAR * and get it A ONE3,WCOL * * process character into INDX MCW L3V0BB,INDXLO * iniialize three char INDX C L1VCMA,PCHAR * is it a comma, low already zeroed BU PCXA * MCW L1V3,INDXMD B PC5 * done PCXA C L1VDOT,PCHAR * is it a period, low already zeroed BU PCXB * MCW L1V1,INDXMD B PC5 * done PCXB C L1VMIN,PCHAR * is it a bar, minus BU PCXC MCW L1V2,INDXMD B PC5 * done PCXC MN PCHAR,INDXLO * move numerical 8421 C PCHAR,ZERO1 * branch if PCHAR <> ZERO BU PC1 MCW L1V4,INDXMD * force index 40 MCW ZERO1,INDXLO B PC5 * zero processed PC1 C L1VZ,PCHAR * branch if PCHAR <= 0 BH PC5 C L1VS,PCHAR * branch if PCHAR < S BL PC2 A ONE1,INDXMD PC2 C L1VJ,PCHAR * branch if PCHAR < J BL PC3 A ONE1,INDXMD PC3 C L1VA,PCHAR * branch if PCHAR < A BL PC4 A ONE1,INDXMD PC4 C C L1VZ,PCHAR * branch if PCHAR in range BE PC5 BL PC5 MCW ZERO3,INDXLO * form blank MCW L1VBL,PCHAR * print blank PC5 NOP * dummy - START MPY BY 14 ZA @0@,BL * CLEAR BL AND BH TO ZERO ZA INDXLO,BH * LOAD MULTIPLIER INDEXLO TO HIGH B M M14,BL * MULTIPLY by 14 MCW BL-1,INDXLO * back into position - tidy?? * A WROW,INDXLO * make INDEX+(2*WROW) A WROW,INDXLO * make INDEX+(2*WROW) A TWO3,INDXLO * add element size * * prepare to output MCW PCOL,X3 * output column MCW INDXLO,X1 * pickup proper mask MCW CODEA&X1,MASK2 * * --------------------------------- MCW L3V000,X2 * set up bit select index LOOP1 C BITSEL&X2,MASK2 * do compare BL L2 MCW PCHAR,WCHAR * yes, print special S BITSEL&X2,MASK2 * fix mask MN MASK2,NOZONE MCW NOZONE,MASK2 B L3 L2 MCW L1VBL,WCHAR L3 A L3V002,X2 * go to next bit MCW WCHAR,PRNTA&X3 * print proper character A L3V001,X3 C L1V0,DOUBLE * are we going double? BE L4 * no MCW WCHAR,PRNTA&X3 * print proper character A L3V001,X3 * L4 C L3V009,X2 BL LOOP1 A L3V001,X3 C L1V0,DOUBLE BE L5 A L3V001,X3 L5 MCW X3,PCOL * save column pointer C L3V132,X3 * BL PRINT2 W * write the print area to the printer - * * SIMH blanks col 2? * C L1V0,DOUBLE * are we going double? BE L6 * no W * write the print area to the printer COMMENTED OUT * B TAPE L6 A ONE3,WROW * increment row counter C L3V007,WROW BL PRINT1 * do another row CS 332 * clear printer area CS SW 201 W * write the print area to the printer - * * SIMH blanks col 2? * B TAPE PRINTX B 0 *** RETURN TO CALL DCW 0 P3V130 DCW 130 L3V65 DCW 065 * GENERAL PARAMETER AREA DOUBLE DCW 0 * ZERO PRINTS SINGLE SIZE * * work areas for PRINTS DCW @WCOL:@ WCOL DCW 000 * pickup index from input area DCW @WROW:@ WROW DCW 000 DCW @PCHAR:@ PCHAR DCW 0 WCHAR DCW 0 DCW @INDX:@ INDXHI DCW 1 * fabricate the fancy index INDXMD DC 1 INDXLO DC 1 DCW @MASK2:@ MASK2 DCW @00@ * 2 character mask DCW @WORK3:@ WORK3 DCW 000 DCW @PCOL:@ PCOL DCW 000 DCW @ZERO3@ ZERO3 DCW 000 ZERO1 DCW 0 ONE3 DCW 001 ONE1 DCW 1 TWO3 DCW 002 FIVE3 DCW 005 TWO4S2 DCW 16 TWO3S2 DCW 08 TWO2S2 DCW 04 TWO1S2 DCW 02 ONE2 DCW 01 NOZONE DCW 0 L1V1 DCW @1@ L3V000 DCW @000@ L3V012 DCW @012@ L1VBL DCW @ @ L3V002 DCW @002@ L1V0 DCW @0@ L3V0BB DCW @0 @ L1VCMA DCw @,@ L1V3 DCW @3@ L1VDOT DCW @.@ L1VMIN DCW @-@ L1DOL DCW @$@ L1EQU DCW @=@ L1V2 DCW @2@ L1V4 DCW @4@ L1VZ DCW @Z@ L1VS DCW @S@ L1VJ DCW @J@ L1VA DCW @A@ L3V009 DCW @009@ L3V132 DCW @132@ L3V007 DCW @007@ L3VO79 DCW @079@ DOLSW DCW 0 LNOP DCW @N@ LQUES DCW @?@ BITSEL DCW 16 DCW 08 DCW 04 DCW 02 DCW 01 DCW 00 * DATE25 DCW @0000000000000000000000000@ * SAVE DATE 25 LONG * ORG 1750 * 1234567890123456789012345678 WORKA DS 0 DS 0 * WORK AREA FOR STRING 25 LONG WORK DCW @0000000000000000000000000@ * BLANKS DCW @ @ * SET WORK TO BLANKS LINE3 DCW @VISITED THE COMPUTER @ LINE4 DCW @HISTORY MUSEUM ON @ * BCD collating sequence A .lt. Z .lt. 0 .lt. 9 .lt. B * MASK IS 14 CHR BA8421 CODEA DS 0 DC @00000000000000@ DC @04120404040414@ DC @14170102020431@ DC @31020402010114@ DC @02061018310202@ DC @31163001011714@ DC @06081630171714@ DC @31010204080808@ DC @14171714171714@ DC @14171715010212@ DC @00000000001212@ DC @14171717311717@ DC @30171730171730@ DC @14171616161714@ DC @24181717171824@ DC @31161630161631@ DC @31161630161616@ DC @14171623171715@ DC @17171731171717@ DC @14040404040414@ DC @00000031000000@ DC @07020202021812@ DC @17182224221817@ DC @16161616161631@ DC @17272121171717@ DC @17172521191717@ DC @14171717171714@ DC @30171730161616@ DC @14171717212213@ DC @30171730201817@ DC @00000000120408@ DC @00010203041600@ DC @15161614010130@ DC @31040404040404@ DC @17171717171714@ DC @17171717171004@ DC @17171721212110@ DC @17171004101717@ DC @17171710040404@ DC @31010204081631@ DC @14171921251714@ DCW @123456789012345678901234567890@ PICKUP DCW 000 ORG 2700 TXTSTR DCW @ @ * END START * NEW LAST CARD IN DECK, TRANSFER ADDRESS
return to main page