; 861121 ; SV2MAC.M68 - CONVERT SUPERVUE "T" FILE TO MACWRITE COMPATIBLE TEXT ; LOREN AMELANG - 70110,551 - TOAD/AM OBJNAM SV2MAC.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...) JMP INPUT ; remove this line & uncomment above 2 if your ; .t files rarely use .>. for left margin 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 .