'===========================================================================
' Subject: BETTER ANSI TO BASIC CONVERTER     Date: 01-13-96 (17:44)       
'  Author: David A. Wicker                    Code: QB, QBasic, PDS        
'  Origin: david@fastlane.net               Packet: ANSI.ABC
'===========================================================================
DEFINT A-Z
DECLARE SUB ReadANSI (T$)
DECLARE SUB SaveANSI (F$)

' * FREEWARE Submission to better ANSI to BASIC
' * Written by David A. Wicker (david@fastlane.net)

' * Reason: other could not handle complex ANSI pictures
'           my version is quite a bit smaller and produces smaller
'           Q-Basic 4.5 merge source.
            
' * NOTE!  Does not handle FLASHING (but neither did other) :)

DEF SEG = &HB800

Again:
  CLS
  LOCATE 12
  PRINT "* ANSI TO BASIC MERGE CONVERTOR WRITTEN BY DAVID A. WICKER *"
  PRINT
  DO
    INPUT "(C)onvert ANSI / (S)ee Sample / (E)xit :", T$
  LOOP UNTIL T$ = "C" OR T$ = "S" OR T$ = "E"
  IF T$ = "E" THEN END

  IF T$ = "S" THEN
    RESTORE SampleANSI
    T$ = ""
    FOR I = 1 TO 96
      READ A$
      T$ = T$ + A$
    NEXT
    ReadANSI T$
Pause:
    LOCATE 24, 1
    PRINT "Press any key to continue:";
    DO: LOOP UNTIL INKEY$ > ""
    GOTO Again
  END IF

  IF T$ = "C" THEN
GetName:
    PRINT
    INPUT "Path and Name of ANSI picture: I.E. \ansi\test.ans: ", F$
    IF F$ = "" THEN GOTO Again
    ON ERROR GOTO NotFound
    OPEN "I", 1, F$
    CLOSE
    SaveANSI F$
    PRINT "ANSI.INS saved on current path."
    PRINT "Use Q-Basic 4.5 (F)ile & (M)erge to extract"
    GOTO Pause
  END IF

END

NotFound:
  PRINT "* ERROR *  ANSI FILE NOT FOUND!"
  RESUME GetName

SampleANSI:
DATA "Ý&Û$ß$Û$ß$Û$ $Ý&Û$ß$ß$Û$ $Ý&Û$ß$ß$Û$ $Ý&"
DATA "Û$ $Ý&Û$ß$ß$Û$ $ $ $ßcßc c c c cÜrÜrÜrÜr"
DATA "Ür r r r rßcßc * * * * * * * * * * * *H1"
DATA "e1y1 1K1i1d1s1.1.1.1 * * * * * * * * * *"
DATA "Ý&Û$ $ $ $Û$ $Ý&Û$Ü$Ü$Û$ $Ý&Û$Ü$Ü$Û$ $Ý&"
DATA "Û$ $Ý&Û$ $ $Û$ $ßc c c c c c cÛrßr rßr r"
DATA "ßrÛr r r r r r rßc * * * * * * * * *¿/ /"
DATA "¿/ * * * * * * * * * * * * * * * * * * *"
DATA "Ý&Û$ $ $ $Û$ $Ý&Û$Ü2Û2Û$Ü2Ý&Û$ $ß$Ü$ $Ý&"
DATA "Û$ $Ý&Û$Ü$Ü$ßd d d d d d d dÛrÛr rÛr rÛr"
DATA " rÛrÛr r r r r r rßc * * * * * * * *³///"
DATA "¿/Ú/Ä/¿/Ú/Ä/¿/Ú/Ä/¿/ * * * * * * * * * *"
DATA "°C±C²C *°C±C²C *ß2Û2Û2Û2Û2Û2Ü2 2°C±C²C *"
DATA "°C±C²C *°C cÛ'ß'ß'ß' 'Ü'Ü'Ü'Ü'Ü'Ü'Ü'Ü'Ü'"
DATA "Ü'Ü'Ü'Ü'Ü' 'ÜcÜcÜc c c * * * * * * *Ù/ /"
DATA "Ù/À/Ä/Ä/À/Ä/Ä/Ã/Ä/Ù/ * * * * * * * * * *"
DATA " / / /Ü2Û2Û2Ü2 2 2 2Û2Û2Û2Û2Û2Û2Ü2 * * *"
DATA " * * * * rÛ' 'Ü'Û'Û'Û'Û'ß'ß'ß'ß'ß‡ß‡ß‡ß‡"
DATA "ß'ß'ß'ß'Û‡Û‡Û‡Û‡Ü' ' g g * * * * * * * *"
DATA " * * * * * * *Ù/ * * * * * * * * * * * *"
DATA " / /Û2Û2Û2Û2Û2Û2Ü2 2°Cß2Û2Û2Û2Û2Û2Û2Ü2±C"
DATA "²C *°C±CÜc *Û'Û'Ý'²ƒ²ƒ *ßƒ ƒ ƒßƒ * ƒ ƒ *"
DATA "ßƒ ƒ ƒßƒ *²ƒ²ƒÞ'Û'Û' 'Üc * * * * *Ú/Ä/¿/"
DATA " / / /./Ú/./ * * * * * * * * * * * * * *"
DATA " / / /ß2Û2Û2Û2Û2Û2Û2Ü2 2 2Û2Û2Û2Û2Û2Û2Û2"
DATA "Ü2 2 2 rßcÛ'Ý'²ƒ²ƒ ƒ ƒ ƒß)ß)ß) ‰ ‰ ‰ ‰ ‰"
DATA " ‰ÜƒÜƒÜƒ ƒ ƒ ƒ²ƒ²ƒÞ'Û'ßc c * * * *À/Ä/¿/"
DATA "Ú/Â/¿/¿/³/¿/Â/Ä/¿/Ú/Ä/¿/ * * * * * * * *"
DATA " / /²C *°Cß2Û2Û2Û2Û2Û2Û2Ü2 2ß2Û2Û2ß2ß2 2"
DATA "Ü2Ü2Ü2 2ÜcÝ'²ƒ²ƒ ƒ ƒ ƒÝ)Û2Û2Û2Ýƒ ƒ ƒ ƒ ƒ"
DATA "ÞƒÛ2Û2Û2Ýƒ ƒ ƒ ƒ²ƒ²ƒÞ'Üc * * * * *À/Ä/Ù/"
DATA "Ù/ /Ù/Ù/Ù/Ù/Ù/ /Ù/À/Ä/´/ * * * * * * * *"
DATA " * * * * * * * *ß2Û2Û2Û2ß2ß2Û2Ü2Ý2Ü2Û2Û2"
DATA "Û2Û2Û2Û2 2²ƒ²ƒ ƒ ƒ ƒÞ2Û2Û2Û2ßBßBÝƒ ƒ ƒÞƒ"
DATA "ßBßBÛ2Û2Û2Ý2Û)Û)Û)²ƒ²ƒ * * * * * * * * *"
DATA " * * * * * * * * * *Ä/Ù/ * * * * * * * *"
DATA " / /°C±C²C *°C±C²CÜ2Ü2Ü2Û2Û2Ü2ß2 2Û2Û2Û2"
DATA "ß2 2ßƒßƒßƒ *²ƒ²ƒ ƒÞƒÛ2Û2ßB Bß$ 4 * „ „ *"
DATA " 4ß$ 4ßBÛ2Û2Ýƒ ƒ²ƒ²ƒ *ßƒßƒßƒ * * * * * *"
DATA "a1n1d1 1S1n1u1f1f1 * * * * * * * * * * *"
DATA " * * * * * * * *Û2Û2Û2Û2Û2Û2Û2Û2Ü2 2ß2 2"
DATA " ’ ’ ’ ’ ’ ’Þƒ²ƒ²ƒ ƒÝ)Û2 B *þ2Þ$Ýƒ ƒ ƒÞƒ"
DATA "Ý$þ2 2 BÛ2Þ) ‰²ƒ²ƒÝƒ ƒ ƒ ƒ ƒ ƒ ƒ * * * *"
DATA " * * * * * * * * * * * * * * * * * * * *"
DATA " * * * *°C±C²C * *ß2Ü2Ü2ß2Û2ß2ß2Ü2Û2Û2 ’"
DATA " ’ ’ ’ ’\ƒ ƒ ƒ *Üƒ ƒ ƒ ƒß’ßƒßƒÞ) ‰ ‰ ‰ ‰"
DATA "Ý)ßƒßƒß’ ’ ’ ’Üƒ * ƒ ƒ/ƒ ƒ ƒ ƒ ƒ ƒ *t1h1"
DATA "o1s1e1 1S1n1i1f1i1t1s1 * * * * * * * * *"
DATA " * * * * * * * *Û2Û2Û2Û2Û2Ü2ß2Û2Û2Û2ß2Û2"
DATA " ’ ’ ’ ’/ƒ ƒ ƒßƒ * *Üƒ ƒ ƒ ƒÞ) ‰ ‰ ‰ ‰ ‰"
DATA " ‰Ý) ‰ ‰ ‰Üƒ * *ßƒ ƒ ƒ\ƒ ƒ ƒ ƒ ƒ * * * *"
DATA " * * * * * * * * * * * * * * * * * * * *"
DATA " * * * * * *°C±Cß2Û2Û2Û2Ü2Ü2Û2Û2ß2Ü2Û2Û2"
DATA "Û2 2ß)ß) ‰ ‰Ýƒ ƒßƒ * * * * * *ß)Û)Û)Û)Û)"
DATA "ß) * * * * * *ßƒ ƒÞƒ ƒ ƒÜƒÜƒ * * * *°C±C"
DATA "²C *°C±C²C *°C±C²C *°C±C²C * * * * * * *"
DATA "Ü'Ü'Ü'Ü' * * * * * *ß2ß2ß2ß2ß2 2ß2Û2Û2ß2"
DATA "Ü'Û'Û'Û'Û'Ü' ‡ ‡ ‡ßƒ * * * * * * * * * *"
DATA " * * * * * *ßƒ ƒ ƒ ƒÜ' g gÜ'Ü'Ü'Û'Û'Û' g"
DATA " g g gÜ' * * * * * * * * * * * * * * * *"
DATA "Þ2Û2Ý2Ý2 2 2 2 2°C±C²C *°C±C²C *°C±C²C c"
DATA " c c c c c cÜ' ‡ ‡ ‡ ‡ ‡ßƒßƒ *Û'Ü'Ü'Ü'Ü'"
DATA "Û' 'ßƒßƒ ƒ ƒ ƒ ƒ ƒÜ' g g g g g g g g g g"
DATA " g g g g g * * *°C±C²C *°C±C²C * * * * *"
DATA "Ü'Ü'Ü'Ü' * * * * * * * * * * * * * * * *"
DATA " g g g g g g gÜ$ß) ‰ ‰ ‰ ‰ ‰ ‰ßƒß'ß'ß'ß'"
DATA "ßƒ ƒ ƒ ƒ ƒ ƒ ƒß)Ü$ d d d d d d d * d d d"
DATA " d d d d d d * * * * * * * * * * * * * *"
DATA "Þ2Û2Ý2Ý2 * * * * * *°C±C²C *°C±C²C *°C±C"
DATA "²Cß' g g g g gÛ$Û$Ü$ß)ß)ß)Þ) ‰ ‰ ‰ ‰ ‰ ‰"
DATA " ‰ ‰Ý)ß)ß)ß)Ü$Û$Û$ d d d d d d * d d d d"
DATA " d d d d d d d±C²C *°C±C²C * * * * * * *"
DATA "Ü'Ü'Ü'Ü' * * * * * * * * * * * * * * * *"
DATA " * * * g g gÛ$Û$Û$Û$ d d dÜ'Ü'ß)ß)ß)ß)ß)"
DATA "ß)Ü'Ü' g g gÛ$Û$Û$Û$ d d d *Ü' g g g g g"
DATA " g g g g g g * * * * * * * * * * * * * *"
DATA "Þ2Û2Ý2Ý2 2 2 2 2°C±C²C *°C±C²C *°C±C²C *"
DATA "°C±C²C * cÛ$Û$Û$Û$Û$Û$ d d d d d d d d d"
DATA " d d d d dÛ$Û$Û$Û$Û$Û$ d *Û2 2ß'ß'ß'ß'ß'"
DATA "ß'ß'ß'ß'ß'Ü2 2 2°C±C²C *°C±C²C * * * * *"
DATA "Ü'Ü'Ü'Ü' * * * * * * * * * * * * * * * *"
DATA " * * * *ß' gÛ$Û$ÛqÛqÛ$Û$ dÛ$Û$Û$Û$Û$Û$Û$"
DATA "Û$Û$Û$ dÛ$Û$ÛAÛAÛ$Û$ dß' ' 'Û2Û2Û2Û2Û2Û2"
DATA "Û2Û2Û2Û2Û2ß2 * * * * * * * * * * * * * *"
DATA "Þ2Û2Ý2Ý2 2 2°C±C²C *°C±C²C *°C±C²C *°C±C"
DATA "²C *°C±C²C * *ß$ 4 4ß$ß3 3 3 3 3 3 3 3 3"
DATA " 3 3 3 3ß3ß$ 4 4ß$ $ $ $ $Û2Û2Û2ß2Û2Û2ß2"
DATA "Û2Û2ß2Û2Û2Û2°C±C²C *°C±C²C * * * * * * *"
DATA " * * * * * * * * * * * * * * * * * * * *"
DATA " * * * * * * * * * * * * * * * * * * * *"
DATA " * * * * * * * * * * * * * * * * * * * *"
DATA " * * * * * * * * * * * * * * * * * * * *"
DATA " * * * * * * * * * * * * * * * * * * * *"
DATA " * * * * * * * * * * * * * * * * * * * *"
DATA " * * * * * * * * * * * * * * * * * * * *"
DATA " * * * * * * * * * * * * * * * * * * * *"
DATA " * * * * * * * * * * * * * * * * * * * *"
DATA " * * * * * * * * * * * * * * * * * * * *"
DATA " * * * * * * * * * * * * * * * * * * * *"
DATA " * * * * * * * * * * * * * * * * * * * *"

DEFINT A-Z
SUB ReadANSI (T$)
  FOR I = 0 TO 23
    FOR J = 0 TO 79
      N = I * 160 + J * 2
      A = ASC(MID$(T$, N + 1, 1))
      IF A = 255 THEN A = 34
      POKE N, A
      B = ASC(MID$(T$, N + 2, 1))
      POKE N + 1, B - 35
    NEXT
  NEXT
END SUB

DEFINT A-Z
SUB SaveANSI (F$)
  Q$ = CHR$(34)
  SHELL "TYPE " + F$
  OPEN "O", 1, "ANSI.INS"
  FOR I = 0 TO 24
    FOR J = 0 TO 79
      IF J = 0 OR J = 20 OR J = 40 OR J = 60 THEN
        IF I > 0 OR J > 0 THEN PRINT #1, Q$
        PRINT #1, "DATA " + Q$;
      END IF
      N = I * 160 + J * 2
      A = PEEK(N)
      IF A < 32 THEN A = 32
      IF A = 255 THEN A = 32
      IF A = 34 THEN A = 255
      B = PEEK(N + 1)
      B = B MOD 128
      PRINT #1, CHR$(A); CHR$(B + 35);
    NEXT
  NEXT
  PRINT #1, Q$
  CLOSE
END SUB

