     AUTOCODER RUN  THRU OUTPUT
               JOB  CONDENSED DISK DUMP TO CARDS
               CTL  2 1        S         D
     * INITIALIZATION
     START     CS   99
               SW   87,92
               SW   97,WRDSEP
               MLC  WRDSEP,MAIN4&7
               MZ   *-6,MAIN5&7     MAKE THE D-CHAR AN ALT-BLANK
     *
     * SET UP HEADER CARD
     *
               CS   180
               LCA  GMARK,181
               LCA  HEADER,180
               WCP  MSG01
               WCP  MSG02
               SBR  X1,MSG03
               SBR  X2,LENGTH-17
               B    ANSWER
               MN   ANSWRS&19,CODE
               MN   ANSWRS&19,101
               MLC  @000@,104
               SBR  X1,MSG04
               B    ANSWER
               BCE  START6,ANSWRS&19,Y
     START4    SBR  X1,MSG05
               SBR  X2,LENGTH-12
               B    ANSWER
               C    X3,&.ANSWRS&21.
               BU   START4
               MCM  ANSWRS&14,166
               MLC  @ @,172
     START5    SBR  X1,MSG06
               B    ANSWER
               C    X3,&.ANSWRS&21.
               BU   START5
               MCM  ANSWRS&14,175
     START6    SBR  X1,MSG07
               SBR  X2,LENGTH#18
               B    ANSWER
               MCM  ANSWRS&2,130
               LCA  @  @           REMOVE GM
               P
               MLC  171,REALSC    SET UP DISK
               MLC  180,ENDSC
               MLC  REALSC,DSKBUF-4
               SD   DSKBUF-10         INIT SEEK TO CYL 0
               BIN  *-12,\
               BIN  DSKERR,Y
               CS   180
               MLC  SEQNO,104
               MLC
               SBR  X2,104
               B    DISKRD               END OF INITIALIZATION
     *
     * QUESTION-ANSWER SUBROUTINE
     * CALL WITH MESSAGE POINTER IN X1
     *      AND LO-ORDER POINTER TO PROPER LENGTH BLANK FIELD IN X2
     * X3 RETURNS WITH B-ADDRDREG AFTER INPUT
     *
     ANSWER    SBR  ANSWEX&3
     ANSWE1    WCP  0&X1
               BIN  *&5,Q
               B    *-8
               LCA  0&X2,ANSWRS&19
               SBR  *&14
               MA   @001@,*&7
               RCP  0
               SBR  X3
               BIN  ANSWE1,*       ERROR - ASK IT AGAIN
     ANSWEX    B    0         EXIT
     *
     *
      MSG01    DCW  @CONDENSED DISK DUMP@,G
      MSG02    DC   @READY DRIVE 0@,G
      MSG03    DC   @TYPE ONE-DIGIT ID CODE@,G
      MSG04    DCW  @DUMP ENTIRE DISK?@,G
      MSG05    DCW  @STARTING DISK ADDR /6 DIGITS, START OF CYL/@,G
      MSG06    DCW  @LAST DISK ADDRESS /6 DIGITS, LAST TRACK OF CYL@,G
      MSG07    DCW  @TYPE ID MSG -- UP TO 18 CHARS@,G
      ANSWRS   DCW  #20,G
     HEADER    DCW  @TRACK ADDRESSES 000000 - 019980@
               SKIPN
     * DISK READ -- READS ONE TRACK /20 SECTORS/
     *
     DISKRD    BCE  BFILL,MAIN3,B   DUMP REMAINING BLANKS **SUBR**
               C    REALSC,ENDSC
               BL   EOJ
               BCE  SEEKIT,SKCNT-1,1     BR TO SEEK NEXT CYL /DIRECT/
     DISKR2    MLC  DSKBUF-4,DATAIN      SAVE SECTOR ADDR FOR OUTPUT
               RD   DSKBUF-10
               BIN  *-12,\
               BIN  BADADR,X
               BIN  DSKERR,Y
     *
     * OUTPUT THE SECTOR ADDRESS
     *
               B    SPCHAR               PUT A WORD-SEPARATOR /DBL CHK/
               SBR  X1,@T@        PUT IN T FOR TRACK ADDRESS
               B    PUTIT
               SBR  X1,DATAIN-5
               SBR  X3,6
     DISKR4    B    PUTIT
               A    @1@,X1
               S    @1@,X3
               BCE  DISKR6,X3,?
               B    DISKR4               LOOP 6 TIMES
     *
     * SET DISK STUFF FOR NEXT TIME
     *
     DISKR6    A    @1@,SKCNT            COUNT 10 TRACKS FOR SEEKING
               A    @020@,REALSC         KEEP TABS ON REAL SECTOR ADDRESS
               MLC  @020@,DSKBUF-1       SECTOR COUNT
               A    @1@,DSKBUF-4         UPDATE SECTOR ADDR FOR READ
               SBR  X1,DSKBUF            POINT TO BUFFER
               B    MAIN2                ENTER THE MAIN LOOP
     *
     *
     SEEKIT    SD   DIRECT               DIRECT SEEK - ONE CYL
               BIN  *-12,\
               BIN  DSKERR,Y
               S    SKCNT                RESET COUNTER
               B    DISKR2               RETURN
      DIRECT   DCW  @00002#0000@
     *
     *
     DSKERR    H    *-3        ***INSERT MESSAGES HERE***
     *
     *
     BADADR    WCP  MSG10
               BIN  *&5,Q
               B    *-8
               LCA  REALSC,DATAIN        CLEAR STRAY GROUP-MARKS
               RCP  DATAIN-5
               BIN  BADADR,*
               MLC  DATAIN,DSKBUF-4
               B    DISKR2               TRY THIS ADDRESS
     *
      MSG10    DCW  @WHAT ADDRESS FOR SECTOR @
     REALSC    DCW  000000
               DC   @?@,G
     GMARK     EQU  *
     ENDSC     DCW  #6
     DATAIN    DCW  #6,G
     SKCNT     DCW  00
               DCW  0000000020
     DSKBUF    DA   1X2000,G,C
               SKIPN
     * TRANSFER CHARS FROM DISK BUFFER TO CARDS
     *
     * STRINGS OF MORE THAN 4 BLANKS ARE CONDENSED TO 4 CHARS
     *         /WRD-SEP AND 3-CHAR COUNT
     *
     * WORD-SEPARATORS AND ALT BLANKS ARE PRECEDED BY WRD-SEP
     *
     *
     BLANK     A    @1@,BCOUNT           COUNT THE BLANK
               MLC  @B@,MAIN3            SET SWITCH - FALL THRU TO MAIN
     * MAIN LOOP
     MAIN      A    @1@,X1               GET NEXT CHAR
               BWZ  DISKRD,0&X1,1         UNLESS END OF TRACK BUFFER
     MAIN2     BCE  BLANK,0&X1,          BRANCH IF BLANK
     MAIN3     NOP  BFILL                BRANCH IF PREVIOUS CHARS WERE BLANK
     MAIN4     BCE  SPCHAR,0&X1,       D-CHAR IS WORD-SEP
     MAIN5     BCE  ALTBLK,0&X1,       D-CHAR IS ALT-BLANK
               B    PUTIT                OUTPUT CHAR *** SUBROUTINE
               B    MAIN                 LOOP
     *
     * OUTPUT SUBROUTINE
     *
     PUTIT     SBR  PUTITX&3
               A    @1@,X2
               BCE  PUNCH,0&X2,_         TIME TO PUNCH CARD /GM/
     PUTIT2    SW   0&X2                 MOVE ONE CHAR...
               MLC  0&X1,0&X2            ...INTO PUNCH BUFFER
     PUTITX    B    0            RETURN
     *
     PUNCH     P
               CS   180
               MA   @001@,SEQNO          3-CHAR SEQ NO.
               C    SEQNO,@000@
               BU   PUNCH1
               MZ   @-@,CODE          AFTER 16000 CARDS
     PUNCH1    MLC  SEQNO,104
               MLC
               SBR  X2,105
               B    PUTIT2
     *
     * BLANK FILL OR COMPRESS
     *
     BFILL     SBR  BFILLZ&3
               MLC  X1,SAVEX1
               C    BCOUNT,@0005@  DO WE COMPRESS
               BL   BFILL2              YES
               SBR  X1,@ @              NO - JUST OUTPUT BLANKS
     BFILL1    B    PUTIT
               S    @1@,BCOUNT
               BCE  BFILLX,BCOUNT,?
               B    BFILL1             LOOP /BCOUNT/ TIMES
     *
     * COMPRESS THE BLANKS
     BFILL2    SBR  X1,WRDSEP          OUTPUT A WORD-SEP
               B    PUTIT
               SBR  X1,@B@        PUT IN A B FOR
               B    PUTIT         BLANKS
               BCE  BFILL5,BCOUNT-3,0
               BCE  BFILL4,BCOUNT-3,1  DAMN THE COLLATING SEQUENCE
               BCE  BFILL3,BCOUNT-3,2
               H    *-3   ****************DEBUG HALT**************
     BFILL3    MZ   @R@,BCOUNT-2
               B    BFILL5
     BFILL4    MZ   @Z@,BCOUNT-2
     BFILL5    SBR  X1,BCOUNT-2
               B    PUTIT
               SBR  X1,BCOUNT-1
               B    PUTIT
               SBR  X1,BCOUNT
               B    PUTIT
     * EXIT
     BFILLX    MLC  @0000@,BCOUNT      RESET COUNT
               MLC  @N@,MAIN3          RESET SWITCH
               MLC  SAVEX1,X1          RESTORE X1
     BFILLZ    B    0         RETURN
     *
     * SPECIAL CHARACTER - PUT A WORD SEP FIRST
     *
     SPCHAR    SBR  SPCHAX&3
               MLC  X1,SAVEX1
               SBR  X1,WRDSEP
               B    PUTIT
               MLC  SAVEX1,X1
     SPCHAX    B    0
     *
     *     ALTERNATE BLANK-PUNCHED AS A WRD-SEP FOLLOWED BY A BLANK
     *
     ALTBLK    B    SPCHAR        PUT IN A WRD-SEP
               MCW  @ @,0&X1      MOVE IN A BLANK
               B    MAIN5
     *
     *
     *
     *
     *
     EOJ       B    SPCHAR
               SBR  X1,@T@        SET START OF DUMMY TRACK.
               B    PUTIT
               P
               WCP  MSGEOJ
               H    *-3        NOT RESTARTABLE
      MSGEOJ   DCW  @EOJ@,G
     *
     BCOUNT    DCW  0000
     SAVEX1    DCW  #3
     WRDSEP    DCW  @0+@      WORD SEP /EXTRA CHAR FOR AUTOCODER/
     CODE      DCW  0        THESE TWO...
     SEQNO     DCW  001      ...MUST BE TOGETHER
               END  START
