'Atari800 to PC converter 'Original from years ago, last mod 5/8/2020 'This is QBasic-style code, to compile with FreeBasic 'use the command: fbc -lang qb -exx at2pc.bas ' 'In mode 0 Converts 9B hex line ends to 0D 0A (CrLf) and 'reverse text characters converted to [Reverse] text [Normal] 'In mode 1 converts common control codes to [Clear][Up][Down][Left] etc 'and common box graphics characters converted to [.--][-.-][--.][|--] etc 'In mode 2 converts the control and graphics codes to similar-looking 'Unicode characters rather than the [] codes for a nicer listing 'Anything not recognized converted to [$xx] where xx is the hex byte ' programstart: ON ERROR GOTO ferror PRINT "Atari ATASCII to PC ASCII Converter" INPUT "Convert mode [0]none [1]text [2]UTF-8 :", a$ convertmode = INT(VAL(a$)) IF convertmode < 1 OR convertmode > 2 THEN convertmode = 0 again: INPUT "Input file :", inpfile$ IF inpfile$ = "" THEN SYSTEM OPEN inpfile$ FOR INPUT AS #1 : CLOSE #1 OPEN inpfile$ FOR BINARY AS #1 INPUT "Output file :", outfile$ IF outfile$ = "" THEN SYSTEM OPEN outfile$ FOR OUTPUT AS #2 Print "Converting... "; currentbyte = 0 WHILE NOT EOF(1) lastbyte = currentbyte GOSUB getonebyte currentbyte = byte IF byte = 155 THEN IF lastbyte > 159 THEN PRINT #2,"[Normal]"; PRINT #2, CHR$(13); CHR$(10); ELSE IF byte > 159 AND byte < 253 THEN IF lastbyte < 160 THEN PRINT #2,"[Reverse]"; byte = byte - 128 ELSE IF lastbyte > 159 AND lastbyte < 253 THEN PRINT #2,"[Normal]"; END IF IF byte < 32 OR byte > 127 THEN outstring$ = "[$"+RIGHT$("0"+HEX$(byte),2)+"]" ELSE outstring$ = CHR$(byte) END IF IF convertmode = 1 THEN IF outstring$ = "}" THEN outstring$ = "[Clear]" IF outstring$ = "[$1C]" THEN outstring$ = "[Up]" IF outstring$ = "[$1D]" THEN outstring$ = "[Down]" IF outstring$ = "[$1E]" THEN outstring$ = "[Left]" IF outstring$ = "[$1F]" THEN outstring$ = "[Right]" IF outstring$ = "[$FE]" THEN outstring$ = "[Del]" IF outstring$ = "[$11]" THEN outstring$ = "[.--]" IF outstring$ = "[$12]" THEN outstring$ = "[---]" IF outstring$ = "[$05]" THEN outstring$ = "[--.]" IF outstring$ = "[$1A]" THEN outstring$ = "[`--]" IF outstring$ = "[$03]" THEN outstring$ = "[--']" IF outstring$ = "[$01]" THEN outstring$ = "[|--]" IF outstring$ = "[$13]" THEN outstring$ = "[-|-]" IF outstring$ = "[$04]" THEN outstring$ = "[--|]" IF outstring$ = "[$17]" THEN outstring$ = "[-.-]" IF outstring$ = "[$18]" THEN outstring$ = "[-'-]" END IF IF convertmode = 2 THEN IF outstring$ = "}" THEN outstring$ = chr$(&hE2)+chr$(&h86)+chr$(&hB0) IF outstring$ = "[$FE]" THEN outstring$ = chr$(&hE2)+chr$(&h97)+chr$(&h80) IF outstring$ = "[$1C]" THEN outstring$ = chr$(&hE2)+chr$(&h86)+chr$(&h91) IF outstring$ = "[$1D]" THEN outstring$ = chr$(&hE2)+chr$(&h86)+chr$(&h93) IF outstring$ = "[$1E]" THEN outstring$ = chr$(&hE2)+chr$(&h86)+chr$(&h90) IF outstring$ = "[$1F]" THEN outstring$ = chr$(&hE2)+chr$(&h86)+chr$(&h92) IF outstring$ = "[$11]" THEN outstring$ = chr$(&hE2)+chr$(&h94)+chr$(&h8C) IF outstring$ = "[$12]" THEN outstring$ = chr$(&hE2)+chr$(&h94)+chr$(&h80) IF outstring$ = "[$05]" THEN outstring$ = chr$(&hE2)+chr$(&h94)+chr$(&h90) IF outstring$ = "[$1A]" THEN outstring$ = chr$(&hE2)+chr$(&h94)+chr$(&h94) IF outstring$ = "[$03]" THEN outstring$ = chr$(&hE2)+chr$(&h94)+chr$(&h98) IF outstring$ = "[$01]" THEN outstring$ = chr$(&hE2)+chr$(&h94)+chr$(&h9C) IF outstring$ = "[$13]" THEN outstring$ = chr$(&hE2)+chr$(&h94)+chr$(&hBC) IF outstring$ = "[$04]" THEN outstring$ = chr$(&hE2)+chr$(&h94)+chr$(&hA4) IF outstring$ = "[$17]" THEN outstring$ = chr$(&hE2)+chr$(&h94)+chr$(&hAC) IF outstring$ = "[$18]" THEN outstring$ = chr$(&hE2)+chr$(&h94)+chr$(&hB4) END IF PRINT #2, outstring$; END IF WEND CLOSE PRINT "Done." GOTO again getonebyte: 'return one byte in byte 'has to get 2 bytes from file 'then split between calls IF odd = 0 THEN GET #1, , inword% 'get 2 bytes iwv = inword% IF iwv < 0 THEN iwv = iwv + 65536 byte = iwv - INT(iwv / 256) * 256 'return low byte odd = 1 ELSE byte = INT(iwv / 256) 'return high byte odd = 0 END IF RETURN ferror: CLOSE PRINT "Error" GOTO programstart