; 861121
; SV4MAC.M68 - CONVERT SUPERVUE "T" FILE TO MACWRITE COMPATIBLE TEXT
;                        AND FLAG INDENTED OR CENTERED LINES WITH \
; LOREN AMELANG - 70110,551 - TOAD/AM

       OBJNAM  SV4MAC.LIT

       SEARCH  SYS
       SEARCH  SYSSYM

VMAJOR  =       1.
VMINOR  =       0.
VEDIT   =       2.

       DSECT
       .=0
MYFILE: BLKB    D.DDB
OUTFILE:BLKB    D.DDB
       EVEN
IMPSIZ  =       .
       .=0

       PSECT
       PHDR    -1,0,PH$REE!PH$REU

       GETIMP  IMPSIZ,A5

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

       END