; 861121
; SV4MAC.M68 - CONVERT SUPERVUE "T" FILE TO MACWRITE COMPATIBLE TEXT
; AND FLAG INDENTED OR CENTERED LINES WITH \
; LOREN AMELANG - 70110,551 - TOAD/AM
CRLF
CRLF
TYPECR CONVERT A SUPERVUE "T" FILE TO MACWRITE COMPATIBLE TEXT
CRLF
TYPECR * TELL MACWRITE A RETURN SIGNIFIES A NEW PARAGRAPH *
CRLF
TYPECR * LINES BEGINNING WITH \ REQUIRE MANUAL FORMATTING
CRLF
FNAME: CRLF
TYPESP ENTER INPUT FILENAME AND EXTENSION:
KBD OVER
BYP
FSPEC MYFILE(A5)
INIT MYFILE(A5)
LOOKUP MYFILE(A5)
JNE NOFIND
OPENI MYFILE(A5)
CRLF
TYPESP ENTER OUTPUT FILENAME AND EXTENSION (.TM SUGGESTED):
KBD OVER
BYP
FSPEC OUTFILE(A5)
INIT OUTFILE(A5)
OPENO OUTFILE(A5)
INPUT: FILINB MYFILE(A5) ; GET A CHARACTER
ANDB #^H7F,D1 ; STRIP HIGH BIT
NOTDC: CMPB D1,#^H0D ; CHECK FOR CARRIAGE RETURN
JEQ CRET ; GO DEAL WITH RETURN
NOTCR: CMPB D1,#^H09 ; CHECK FOR TAB
BEQ KEEP ; PRESERVE TAB
CMPB D1,#^H13 ; ^H13 PREFIXES AN INDENT OR CENTERED LINE
JEQ MARK ; GO DEAL WITH INDENT...
CMPB D1,#^H01 ; ^H01 MARKS A NON-TEXT "HEADER" FOR THE FILE
BEQ HDR ; GO DEAL WITH HEADER
CMPB D1,#^H20 ; CHECK FOR PRINTABLE CHARACTER
BLT EOF ; DONE IF NOT PRINTABLE
KEEP: TTY D1 ; PRINT TO SCREEN
FILOTB OUTFILE(A5) ; PRINT TO OUTFILE
EOF: TST D.SIZ(A5) ; CHECK FOR END OF INPUT FILE
BNE INPUT ; GET NEXT CHARACTER IF MORE
CRLF
TYPECR END OF FILE
OVER: CRLF
CLOSE MYFILE(A5)
CLOSE OUTFILE(A5)
EXIT
HDR: FILINB MYFILE(A5) ; EAT CHARACTERS
ANDB #^H7F,D1
CMPB D1,#^H01 ; UNTIL A SECOND ^H01 MARKS
BNE HDR ; END OF HEADER
FILINB MYFILE(A5) ; GET NEXT CHARACTER
CMPB D1,#^H2E ; CHECK THE BYTE FOLLOWING THE HEADER
JEQ DOTCM ; FOR THE START OF A DOT COMMAND
JMP NOTDC ; IF NOT DOT COMMAND, COULD BE ANYTHING...
MARK: FILINB MYFILE(A5) ; EAT TAB VALUE BYTE WHICH FOLLOWS ^H13...
MOVB #^H5C,D1 ; PUT \ IN OUTFILE TO MARK LINE WHICH
JMP KEEP ; NEEDS OPERATOR ATTENTION (CENTERING...)
CRET: CTRLC OVER ; CHECK FOR OPERATOR INTERRUPT AFTER EACH LINE
FILINB MYFILE(A5) ; GET NEXT CHARACTER
ANDB #^H7F,D1
CMPB D1,#^H0A ; IF IT IS A LINEFEED (MIGHT NOT BE A "T" FILE...)
BEQ CRET ; SKIP IT
CMPB D1,#^H0D ; SEE IF IT IS ANOTHER RETURN
JNE SFTCR ; ASSUME A SINGLE RETURN IS "SOFT"...
CRLF ; OUTPUT FIRST OF TWO "HARD" RETURNS
FILOTB OUTFILE(A5) ; TO SCREEN AND OUTFILE
NXTCR: CRLF ; OUTPUT SECOND (OR LATER...) RETURN
FILOTB OUTFILE(A5) ; TO SCREEN AND OUTFILE
FILINB MYFILE(A5) ; CHECK FOR YET ANOTHER RETURN
ANDB #^H7F,D1
CMPB D1,#^H0D
BEQ NXTCR ; KEEP LOOPING AS LONG AS THEY KEEP COMING...
CMPB D1,#^H2E ; CHECK THE BYTE FOLLOWING THE LAST RETURN
JEQ DOTCM ; FOR THE START OF A DOT COMMAND
JMP NOTCR ; IF NOT DOT COMMAND, BACK TO PRINTABLE TEXT
SFTCR: CMPB D1,#^H2E ; THIS BYTE FOLLOWED A RETURN; IF IT IS A "DOT"
JEQ DOTCM ; WE HAVE A DOT COMMAND TO DEAL WITH...
MOVB D1,D3 ; IF NOT A "DOT", SAVE THE CHARACTER
MOVB #^H20,D1 ; AND OUTPUT A SPACE
TTY D1 ; TO REPLACE A "SOFT" RETURN
FILOTB OUTFILE(A5)
MOVB D3,D1 ; REPLACE THE SAVED NEXT CHARACTER
JMP NOTCR ; BACK TO PRINTABLE TEXT
DOTCM: FILINB MYFILE(A5) ; EAT INPUT (DOT COMMAND...)
ANDB #^H7F,D1 ; TO END OF LINE
CMPB D1,#^H0D ; (NEXT RETURN)
BNE DOTCM
JMP CRET ; END OF DOT COMMAND; PROCESS RETURN
NOFIND: TOUT #^H07 ; BEEP
TYPECR FILE NOT FOUND
CRLF
JMP FNAME ; ANOTHER CHANCE; ^C WILL LET USER QUIT...