return to main page

Stan'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