'=========================================================================== ' Subject: .ANS TO .BAS Date: Unknown Date (00:00) ' Author: Aaron Lapikas Code: QB, PDS ' Keys: ANS,BAS Packet: ANSI.ABC '=========================================================================== 'ANSI2BAS v3.1 was written by Aaron Lapikas of BCData Inc. This program is 'designed to make the annoying job of creating graphical screens in screen 'mode 0 much easier. This program is in public domain, and no fee is 'required to use it. You can use it wherever you want, just maybe give me a 'little credit, like mentioning my name or something like that. :) 'To use the program, either complile it into an EXE, or modify the COMMAND$. 'If the program is started with no parameters, then the help screen is 'displayed. I hope that you find this program helpful, and please, give me 'any comments about this program and let me know of any bugs (if there are 'any ). DECLARE SUB ANSIDriver (ANSICode$) DIM SHARED PosOfSC%(4), Color$(5), CColor%(1), Col%(1), RowA%(1), Attribute$(1) DIM SHARED Blink$(1) DEFINT A-Z ON ERROR GOTO HandleError IF COMMAND$ = "" THEN COLOR 7, 0 PRINT PRINT "ANSI2BAS v3.1 by BCData Inc. Released on May 31, 1992" PRINT PRINT PRINT "Converts ANSI source code files to QuickBASIC version 4.5 "; PRINT "format. Supports the" PRINT "use of ansy ANSI files, as well as ASCII files." PRINT PRINT PRINT "USAGE: ANSI2BAS InputFile.Ext OutputFile.Ext[/A]" PRINT PRINT PRINT "NOTE : Extensions, as well as the output filename are optional, "; PRINT "and are not" PRINT " needed in order for the program to run correctly. If "; PRINT "no extension is" PRINT " given, ANSI2BAS uses the default extension .ANS forthe "; PRINT "ANSI source" PRINT " file, and .BAS for the QuickBASIC output file. If no "; PRINT "output filename" PRINT " is given, then ANSI2BAS names the output file the same "; PRINT "as the ANSI" PRINT " filename, but with a .BAS extension. The /A parameter "; PRINT "allows the ANSI" PRINT " file to be displayed while being converted. Note the "; PRINT "examples below:" PRINT PRINT PRINT "ANSI2BAS FILE.BAS -> Converts the ANSI file FILE.ANS to FILE.BAS" PRINT "ANSI2BAS FILE/A -> Converts and displays the ANSI file FILE.ANS "; PRINT "to FILE.BAS" END END IF Parameter$ = RIGHT$(COMMAND$, 2) IF UCASE$(Parameter$) = "/A" THEN LET ANSIView$ = "ON" LET Command2$ = LEFT$(COMMAND$, LEN(COMMAND$) - 2) ELSE LET Command2$ = COMMAND$ END IF FOR y = 1 TO LEN(Command2$) IF MID$(Command2$, y, 1) = " " THEN EXIT FOR NEXT y FOR x = y TO 1 STEP -1 IF MID$(Command2$, x, 1) = "\" THEN EXIT FOR NEXT x IF x < LEN(Command2$) = 1 AND x < y THEN LET FILE$ = UCASE$(MID$(Command2$, x + 1, LEN(Command2$) - y + 3)) ELSE LET FILE$ = LEFT$(Command2$, y - 1) END IF LET FullFile$ = UCASE$(LEFT$(Command2$, y - 1)) IF LEN(FILE$) > 4 THEN IF MID$(FILE$, LEN(FILE$) - 3, 1) <> "." THEN LET FILE$ = FILE$ + ".ANS" LET FullFile$ = FullFile$ + ".ANS" END IF ELSE LET FILE$ = FILE$ + ".ANS" LET FullFile$ = FullFile$ + ".ANS" END IF IF y <> LEN(Command2$) + 1 THEN LET Output$ = MID$(Command2$, y + 1, LEN(Command2$) - y + 1) IF LEN(Output$) < 5 THEN LET Output$ = Output$ + ".BAS" ELSEIF MID$(Output$, LEN(Output$) - 3, 1) <> "." THEN LET Output$ = Output$ + ".BAS" END IF ELSE LET Output$ = MID$(FILE$, 1, LEN(FILE$) - 4) + ".BAS" END IF CLS COLOR 7, 0 PRINT "ANSI2BAS v3.1 - Released on May 31, 1992 by BCData Inc." PRINT PRINT PRINT "ANSI Source File [.ANS]: "; UCASE$(FullFile$) PRINT "QB45 Output File [.BAS]: "; UCASE$(Output$) PRINT PRINT OPEN FullFile$ FOR INPUT AS 1 OPEN Output$ FOR OUTPUT AS 2 PRINT "Accessing ANSI code...Please wait." IF ANSIView$ = "ON" THEN FOR x! = 1 TO 7000 NEXT x! CLS ELSE SCREEN , , 1, 0 END IF PRINT #2, "' "; UCASE$(Output$) + " - Prepared by ANSI2BAS v3.1 by BCData Inc." PRINT #2, "' Released on May 31, 1992 by BCData Inc." PRINT #2, "" PRINT #2, "" COLOR 7, 0 LET CColor%(1) = 7 DO IF Flag = 1 THEN LET Flag = 0 GOTO SecondChar END IF IF LOC(1) < 1 THEN a = 0 DO a = a + 1 LOOP UNTIL a = 100 OR LOC(1) > 0 IF a = 100 THEN END END IF IF Flag <> 31 THEN a$ = INPUT$(1, #1) ELSE LET Flag = 0 LET a$ = CHR$(27) END IF IF a$ = CHR$(27) THEN SecondChar: a = 0 DO a = a + 1 LOOP UNTIL a = 100 OR LOC(1) > 0 IF a = 100 THEN END B$ = INPUT$(1, #1) IF B$ = "[" THEN LET ANSICode$ = "" DO a = 0 DO a = a + 1 LOOP UNTIL a = 100 OR LOC(1) > 0 IF a = 100 THEN END C$ = INPUT$(1, #1) ANSICode$ = ANSICode$ + C$ IF ANSICode$ = "M" THEN DO IF LOC(1) > 1 THEN D$ = INPUT$(1, #1) LET ANSICode$ = ANSICode$ + D$ END IF LOOP UNTIL D$ = CHR$(14) END IF SELECT CASE C$ CASE "H", "A", "B", "C", "D", "f", "m", "s", "u", "k", "J", "M" EXIT DO END SELECT ''IF C$ = "H" OR C$ = "A" OR C$ = "B" OR C$ = "C" OR C$ = "D" OR C$ = "f" OR C$ = "m" OR C$ = "s" OR C$ = "u" OR C$ = "k" OR C$ = "J" OR C$ = "M" THEN EXIT DO LOOP LET ANSICode$ = CHR$(27) + "[" + ANSICode$ ANSIDriver ANSICode$ ELSEIF B$ <> CHR$(13) THEN PRINT B$; PRINT #2, "PRINT " + CHR$(34) + B$ + CHR$(34) + ";" PRINT #2, "" ELSEIF B$ = CHR$(13) THEN LOCATE , 1 PRINT #2, "LOCATE ,1" END IF ELSE LET Print$ = "" DO UNTIL EOF(1) IF a$ = CHR$(13) OR a$ = CHR$(10) OR a$ = CHR$(27) THEN EXIT DO LET Print$ = Print$ + a$ a$ = INPUT$(1, #1) LOOP IF LEN(Print$) + POS(x) > 80 THEN LET Print1$ = "" LET Print2$ = "" LET a = 81 - POS(x) LET Print1$ = LEFT$(Print$, a) PRINT #2, "PRINT " + CHR$(34) + Print1$ + CHR$(34) PRINT Print1$ LET Print2$ = RIGHT$(Print$, LEN(Print$) - a) PRINT #2, "PRINT " + CHR$(34) + Print2$ + CHR$(34) + ";" PRINT #2, "" PRINT Print2$; ELSE PRINT Print$; PRINT #2, "PRINT " + CHR$(34) + Print$ + CHR$(34) + ";" PRINT #2, "" END IF IF a$ = CHR$(13) THEN LOCATE , 1 PRINT #2, "LOCATE ,1" ELSEIF a$ = CHR$(10) THEN PRINT PRINT #2, "PRINT" ELSEIF a$ = CHR$(27) THEN LET Flag = 31 END IF END IF LOOP UNTIL EOF(1) IF ANSIView$ <> "ON" THEN SCREEN , , 0 LOCATE 8, 1 COLOR 7, 0 PRINT "Conversion complete. QuickBASIC source "; Output$; PRINT " has been created." ELSE COLOR 7, 0 PRINT PRINT "Conversion complete. QuickBASIC source "; Output$; PRINT " has been created." END IF COLOR 7, 0 PRINT #2, "" PRINT #2, "COLOR 7,0" END HandleError: IF ERR = 76 THEN LOCATE 8, 1 COLOR 7, 0 BEEP PRINT "Path not found. Exiting program." PRINT END ELSEIF ERR = 53 THEN BEEP LOCATE 8, 1 COLOR 7, 0 PRINT "File not found or invalid parameters. Exiting program." PRINT END END IF RESUME ' SUB ANSIDriver (ANSICode$) IF RIGHT$(ANSICode$, 1) = "m" THEN NumOfSC = 0 FOR x = 1 TO LEN(ANSICode$) IF MID$(ANSICode$, x, 1) = ";" THEN LET NumOfSC = NumOfSC + 1 LET PosOfSC(NumOfSC) = x END IF NEXT x IF NumOfSC = 0 THEN LET Color$(1) = MID$(ANSICode$, 3, LEN(ANSICode$) - 3) LET Color$(2) = "" LET Color$(3) = "" LET Color$(4) = "" LET SC = 1 ELSEIF NumOfSC = 1 THEN LET Color$(1) = MID$(ANSICode$, 3, PosOfSC%(1) - 3) LET Color$(2) = MID$(ANSICode$, PosOfSC%(1) + 1, LEN(ANSICode$) - (PosOfSC%(1) + 1)) LET Color$(3) = "" LET Color$(4) = "" LET SC = 2 ELSEIF NumOfSC = 2 THEN LET Color$(1) = MID$(ANSICode$, 3, (PosOfSC%(1) - 3)) LET Color$(2) = MID$(ANSICode$, PosOfSC%(1) + 1, PosOfSC%(2) - (PosOfSC%(1) + 1)) LET Color$(3) = MID$(ANSICode$, PosOfSC(2) + 1, LEN(ANSICode$) - (PosOfSC%(2) + 1)) LET Color$(4) = "" LET SC = 3 ELSEIF NumOfSC = 3 THEN LET Color$(1) = MID$(ANSICode$, 3, PosOfSC%(1) - 3) LET Color$(2) = MID$(ANSICode$, PosOfSC%(1) + 1, PosOfSC(2) - (PosOfSC%(1) + 1)) LET Color$(3) = MID$(ANSICode$, PosOfSC(2) + 1, PosOfSC(3) - (PosOfSC(2) + 1)) LET Color$(4) = MID$(ANSICode$, PosOfSC(3) + 1, LEN(ANSICode$) - (PosOfSC(3) + 1)) LET SC = 4 ELSE GOTO ExitDriver END IF IF ANSICode$ = CHR$(27) + "[0m" THEN LET Attribute$(1) = "OFF" LET Blink$(1) = "OFF" COLOR 7, 0 PRINT #2, "COLOR 7,0" LET CColor%(1) = 7 ELSEIF ANSICode$ = CHR$(27) + "[1m" THEN LET Attribute$(1) = "ON" IF CColor%(1) < 8 THEN COLOR CColor%(1) + 8 PRINT #2, "COLOR "; CColor%(1) + 8 LET CColor%(1) = CColor%(1) + 8 END IF END IF Span = SC \ 2 DO WHILE (Span > 0) FOR I = Span TO SC - 1 j = I - Span + 1 FOR j = (I - Span + 1) TO 1 STEP -Span IF Color$(j) <= Color$(j + Span) THEN EXIT FOR SWAP Color$(j), Color$(j + Span) NEXT j NEXT I Span = Span \ 2 LOOP FOR w = 1 TO SC IF Color$(w) = "0" THEN LET Attribute$(1) = "OFF" LET Blink$(1) = "OFF" COLOR , 0 PRINT #2, "COLOR ,0" LET CColor%(1) = 0 ELSE COLOR 8 PRINT #2, "COLOR 8" LET CColor%(1) = 8 END IF IF Color$(w) = "31" THEN IF Attribute$(1) = "OFF" THEN COLOR 4 PRINT #2, "COLOR 4" LET CColor%(1) = 4 ELSE COLOR 12 PRINT #2, "COLOR 12" LET CColor%(1) = 12 END IF ELSEIF Color$(w) = "32" THEN IF Attribute$(1) = "OFF" THEN COLOR 2 PRINT #2, "COLOR 2" LET CColor%(1) = 2 ELSE COLOR 10 PRINT #2, "COLOR 10" LET CColor%(1) = 10 END IF ELSEIF Color$(w) = "33" THEN IF Attribute$(1) = "OFF" THEN COLOR 6 PRINT #2, "COLOR 6" LET CColor%(1) = 6 ELSE COLOR 14 PRINT #2, "COLOR 14" LET CColor%(1) = 14 END IF ELSEIF Color$(w) = "34" THEN IF Attribute$(1) = "OFF" THEN COLOR 1 PRINT #2, "COLOR 1" LET CColor%(1) = 1 ELSE COLOR 9 PRINT #2, "COLOR 9" LET CColor%(1) = 9 END IF ELSEIF Color$(w) = "35" THEN IF Attribute$(1) = "OFF" THEN COLOR 5 PRINT #2, "COLOR 5" LET CColor%(1) = 5 ELSE COLOR 13 PRINT #2, "COLOR 13" LET CColor%(1) = 13 END IF ELSEIF Color$(w) = "36" THEN IF Attribute$(1) = "OFF" THEN COLOR 3 PRINT #2, "COLOR 3" LET CColor%(1) = 3 ELSE COLOR 11 PRINT #2, "COLOR 11" LET CColor%(1) = 11 END IF ELSEIF Color$(w) = "37" THEN IF Attribute$(1) = "OFF" THEN COLOR 7 PRINT #2, "COLOR 7" LET CColor%(1) = 7 ELSE COLOR 15 PRINT #2, "COLOR 15" LET CColor%(1) = 15 END IF ELSEIF Color$(w) = "40" THEN COLOR , 0 PRINT #2, "COLOR ,0" ELSEIF Color$(w) = "41" THEN COLOR , 4 PRINT #2, "COLOR ,4" ELSEIF Color$(w) = "42" THEN COLOR , 2 PRINT #2, "COLOR ,2" ELSEIF Color$(w) = "43" THEN COLOR , 6 PRINT #2, "COLOR ,6" ELSEIF Color$(w) = "44" THEN COLOR , 1 PRINT #2, "COLOR ,1" ELSEIF Color$(w) = "45" THEN COLOR , 5 PRINT #2, "COLOR ,5" ELSEIF Color$(w) = "46" THEN COLOR , 3 PRINT #2, "COLOR ,3" ELSEIF Color$(w) = "47" THEN COLOR , 7 PRINT #2, "COLOR ,7" END IF NEXT w IF Blink$(1) = "ON" THEN COLOR CColor%(1) + 16 PRINT #2, "COLOR "; CColor%(1) + 16 END IF ELSEIF RIGHT$(ANSICode$, 1) = "J" THEN CLS 2 LOCATE 1, 1 PRINT #2, "CLS 2" PRINT #2, "LOCATE 1,1" PRINT #2, "" ELSEIF RIGHT$(ANSICode$, 1) = "K" THEN Row = CSRLIN Column = POS(x) NumOfSpace = 81 - POS(x) PRINT SPACE$(NumOfSpace) PRINT #2, "SPACE$("; NumOfSpace; ")" LOCATE Row, Column PRINT #2, "LOCATE"; Row; ","; Column; "" ELSEIF RIGHT$(ANSICode$, 1) = "H" OR RIGHT$(ANSICode$, 1) = "f" THEN IF ANSICode$ = CHR$(27) + "[H" THEN PRINT #2, "LOCATE 1,1" LOCATE 1, 1 GOTO ExitDriver END IF FOR x = 1 TO LEN(ANSICode$) IF MID$(ANSICode$, x, 1) = ";" THEN EXIT FOR NEXT x IF x = LEN(ANSICode$) + 1 THEN LET HRow$ = MID$(ANSICode$, 3, LEN(ANSICode$) - 3) LET HRow = VAL(HRow$) LOCATE HRow, 1 PRINT #2, "LOCATE "; HRow; ",1" ELSEIF x = 3 THEN LET HCol$ = MID$(ANSICode$, 4, LEN(ANSICode$) - 4) LET HCol = VAL(HCol$) LOCATE 1, HCol PRINT #2, "LOCATE 1,"; HCol ELSEIF x = LEN(ANSICode$) - 1 THEN HRow$ = MID$(ANSICode$, 3, LEN(ANSICode$) - 4) LET HRow = VAL(HRow$) LOCATE HRow, 1 PRINT #2, "LOCATE "; HRow; ",1" ELSE HColumn$ = RIGHT$(ANSICode$, LEN(ANSICode$) - x) HColumn$ = LEFT$(HColumn$, LEN(HColumn$) - 1) HRow$ = LEFT$(ANSICode$, x - 1) HRow$ = RIGHT$(HRow$, LEN(HRow$) - 2) HRow = VAL(HRow$) HColumn = VAL(HColumn$) IF HRow > 25 THEN LET HRow = 25 LOCATE HRow, HColumn PRINT #2, "LOCATE"; HRow; ","; HColumn END IF ELSEIF RIGHT$(ANSICode$, 1) = "C" THEN IF LEN(ANSICode$) = 3 THEN PRINT #2, "LOCATE ,"; POS(x) + 1 LOCATE , POS(x) + 1 END IF Column$ = MID$(ANSICode$, 3, LEN(ANSICode$) - 3) LET Column = VAL(Column$) IF POS(x) + Column < 81 THEN PRINT #2, "LOCATE,"; POS(x) + Column LOCATE , POS(x) + Column END IF ELSEIF RIGHT$(ANSICode$, 1) = "D" THEN IF LEN(ANSICode$) = 3 AND POS(x) <> 1 THEN PRINT #2, "LOCATE,"; POS(x) - 1 LOCATE , POS(x) - 1 ELSE Back$ = MID$(ANSICode$, 3, LEN(ANSICode$) - 3) Back = VAL(Back$) IF POS(x) > 1 AND Back < 80 THEN PRINT #2, "LOCATE,"; POS(x) - Back LOCATE , POS(x) - Back END IF END IF ELSEIF RIGHT$(ANSICode$, 1) = "A" THEN IF LEN(ANSICode$) = 3 THEN PRINT #2, "LOCATE"; CSRLIN - 1; ","; POS(x) LOCATE CSRLIN - 1, POS(x) END IF Up$ = MID$(ANSICode$, 3, LEN(ANSICode$) - 3) Up = VAL(Up$) IF CSRLIN > 1 THEN PRINT #2, "LOCATE"; CSRLIN - Up; ","; POS(x) LOCATE CSRLIN - Up, POS(x) ELSE PRINT #2, "LOCATE 1,"; POS(x) LOCATE 1, POS(x) END IF ELSEIF RIGHT$(ANSICode$, 1) = "B" THEN IF LEN(ANSICode$) = 3 THEN PRINT #2, "LOCATE"; CSRLIN + 1; ","; POS(x) LOCATE CSRLIN + 1, POS(x) END IF Down$ = MID$(ANSICode$, 3, LEN(ANSICode$) - 3) Down = VAL(Down$) IF CSRLIN >= 24 THEN PRINT #2, "LOCATE 24,"; POS(x) LOCATE 24, POS(x) ELSE PRINT #2, "LOCATE"; CSRLIN + Down; ","; POS(x) LOCATE CSRLIN + Down, POS(x) END IF ELSEIF RIGHT$(ANSICode$, 1) = "s" THEN LET Col%(1) = POS(x) LET RowA%(1) = CSRLIN ELSEIF RIGHT$(ANSICode$, 1) = "u" THEN LOCATE RowA%(1), Col%(1) PRINT #2, "LOCATE"; RowA%(1); ","; Col%(1) ELSEIF RIGHT$(ANSICode$, 1) = CHR$(14) THEN LET ANSIMusic$ = MID$(ANSICode$, 3, (LEN(ANSICode$) - 3)) PLAY ANSIMusic$ LET ANSIMusic$ = "" END IF ExitDriver: END SUB