;**********************************************
; SHORT - Shortens ASCII file to 80 chars
;
; by Dave Heyliger - AMUS Staff
;
; Directions: just type SHORT and follow 'em!
;**********************************************

;--- Get symbols and macros
;
       SEARCH SYS
       SEARCH SYSSYM
       SEARCH TRM

;--- Define version number
;
       VMAJOR=1.
       VMINOR=0.
       VEDIT=100.                              ;original by Doug Dozier, M.D.

;--- Define variables
;
       .OFINI
       .OFDEF  IDDB,D.DDB                      ;Input DDB for input file
       .OFDEF  ODDB,D.DDB                      ;Output DDB for output file
       .OFSIZ  IMPSIZ

;--- Define a "PRINT TAB (#,#)" macro
;
DEFINE  PRTTAB  AA,BB
       MOVB    #AA,D1
       LSLW    D1,#10
       MOVB    #BB,D1
       TCRT
ENDM

;--- Program header and variable offset assignments
;
       PHDR    -1,0,PH$REE!PH$REU              ;re-entrant, re-usable
       GETIMP  IMPSIZ,A3                       ;A3 points to variables
       LEA     A5,IDDB(A3)                     ;A5 points to input file
       LEA     A4,ODDB(A3)                     ;A4 point to output file

;--- type out introduction
;
       PRTTAB  -1,0                            ;clear screen
       PRTTAB  6,34                            ;tab to here
       TYPE    <SHORT Utility:>
       PRTTAB  10,24                           ;tab to here
       TYPE    <shortens lines to 80 characters or less>

;--- get input file and output file (not intensive error checking)
;
       PRTTAB  12,20
       TYPE    <Enter in the file needing Shorter lines: >
       KBD
       FSPEC   @A5
       PRTTAB  13,20
       TYPE    <Enter in a name for updated file : >
       KBD
       FSPEC   @A4
       INIT    @A5                             ;initialize both files
       INIT    @A4
       LOOKUP  @A5                             ;if input file not found
       JNE     BOOBOO                          ;error
       LOOKUP  @A4                             ;if output file found
       JEQ     BOOBOO                          ;error
       OPENI   @A5                             ;open them
       OPENO   @A4
       PRTTAB  15,1
       TYPE    <Working..>                     ;gizmo effects!

;--- read input file byte-by-byte, write to output file byte-by-byte,
;    but add a CRLF after 80 characters...
;
BYB:    MOV     #80.,D4
5$:     FILINB  @A5                             ;get a byte
       TST     IDDB+D.SIZ(A3)                  ;eof?
       BEQ     EOF                             ;yup
       FILOTB  @A4                             ;nope, output a byte
       DEC     D4                              ;decrement counter
       BNE     5$                              ;if not 80 times, get another
       ;
       MOVB    #15,D1                          ;yup, get a CR
       FILOTB  @A4                             ;write the CR
       MOVB    #12,D1                          ;and get the LF
10$:    FILOTB  @A4                             ;write out the LF
       TYPE    <.>                             ;gizmo effects!
       BR      BYB                             ;goto top

;--- if no input file or output file exists, type message
;
BOOBOO: PRTTAB  15,23
       TYPE    <File spec error or file already exists>
       MOV     #7,D1                           ;get a bell
       TTY                                     ;beep!
       BR      EXIT

;--- EOF hit, so close files, finish gizmo effects!
;
EOF:    CLOSE   @A5
       ;
       MOVB    #15,D1                          ;get a CR
       FILOTB  @A4                             ;write the CR
       MOVB    #12,D1                          ;and get the LF
       FILOTB  @A4                             ;write out the LF
       CLOSE   @A4
       ;
EXIT:   TYPECR  <!>
       EXIT
       END