;**********************************************
; 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.
;--- 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