'===========================================================================
' Subject: POKE CHARACTER                     Date: 11-16-87 (00:00)       
'  Author: Paul N. Lawrence                   Code: QB, QBasic, PDS        
'  Origin: harryst@castel.nl                Packet: TEXT.ABC
'===========================================================================
' saved as:  pokechar.bas  11/16/87  by  Paul N. Lawrence (MicroHelp BUG BBS)

DEFINT A-Z
DIM Char$(5)
over:
COLOR 15, 4
CLS
PRINT " What string to convert?"
PRINT
LINE INPUT i$: IF i$ = "" OR i$ = "end" OR i$ = "END" THEN END
User$ = i$

GOSUB showchar:

COLOR 14, 4
LOCATE 10, 1
FOR i = 1 TO 5
  PRINT LEFT$(Char$(i), 79)
NEXT
DO: LOOP UNTIL INKEY$ <> ""
GOTO over:
END

showchar:
' User$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ?!.,;: abcdefghijklmnopqrstuvwxyz|?|!|.|,|;|:"
'          ^ UserPtr                                  NOTE: CHR$(124) ^
'             12345   WidthPtr, CharWidth
' Char$(1) = "....."  CharHeight
' Char$(2) = "....."
' Char$(3) = "....."
' Char$(4) = "....."
' Char$(5) = "....."  CharHeight, MaxHeight

MaxHeight = 5
CharWidth = 6'                         | maximum width expected in DATA
FOR i = 1 TO MaxHeight'                | initialize array with spaces
  Char$(i) = SPACE$(LEN(User$) * CharWidth)'| leave room for maximum width
NEXT

UserPtr = 1'                           | point to first character in input
CharPtr = 1'                           | point to first place in output array

DO'                                    | go around until all input is used

Char = ASC(MID$(User$, UserPtr, 1))
IF Char < 97 THEN HeightOffset = 0 ELSE HeightOffset = 2' | lower or upper
IF Char = 124 THEN '                   | lower case punctuation follows
  UserPtr = UserPtr + 1
  Char = ASC(MID$(User$, UserPtr, 1)) + 256
END IF

' Large character data format:  DATA char.width, char.code, char.code,...
'   lower case punctuation has 256 added to ASCII value, and
'       must be preceded by a CHR$(124)

SELECT CASE Char
CASE 97: RESTORE CHAR97:
CHAR97:
DATA 3,210,183,32,214,182,32,211,208,32
CASE 98: RESTORE CHAR98:
CHAR98:
DATA 3,183,32,32,199,183,32,211,208,32
CASE 99: RESTORE CHAR99:
CHAR99:
DATA 3,210,183,32,186,32,32,211,208,32
CASE 100: RESTORE CHAR100:
CHAR100:
DATA 3,32,183,32,214,182,32,211,208,32
CASE 101: RESTORE CHAR101:
CHAR101:
DATA 3,210,183,32,199,189,32,211,208,32
CASE 102: RESTORE CHAR102:
CHAR102:
DATA 3,210,183,32,199,196,32,211,32,32
CASE 103: RESTORE CHAR103:
CHAR103:
DATA 3,210,183,32,211,182,32,211,208,32
CASE 104: RESTORE CHAR104:
CHAR104:
DATA 3,183,32,32,199,183,32,211,211,32
CASE 105: RESTORE CHAR105:
CHAR105:
DATA 2,211,32,186,32,211,32
CASE 106: RESTORE CHAR106:
CHAR106:
DATA 3,32,211,32,32,186,32,211,208,32
CASE 107: RESTORE CHAR107:
CHAR107:
DATA 4,183,32,32,32,199,210,189,32,189,211,189,32
CASE 108: RESTORE CHAR108:
CHAR108:
DATA 2,183,32,186,32,211,32
CASE 109: RESTORE CHAR109:
CHAR109:
DATA 4,210,210,183,32,186,186,186,32,211,211,211,32
CASE 110: RESTORE CHAR110:
CHAR110:
DATA 3,210,183,32,186,186,32,211,211,32
CASE 111: RESTORE CHAR111:
CHAR111:
DATA 3,210,183,32,186,186,32,211,208,32
CASE 112: RESTORE CHAR112:
CHAR112:
DATA 3,210,183,32,199,189,32,211,32,32
CASE 113: RESTORE CHAR113:
CHAR113:
DATA 3,210,183,32,211,182,32,32,211,32
CASE 114: RESTORE CHAR114:
CHAR114:
DATA 3,210,183,32,186,32,32,211,32,32
CASE 115: RESTORE CHAR115:
CHAR115:
DATA 3,210,183,32,211,183,32,211,208,32
CASE 116: RESTORE CHAR116:
CHAR116:
DATA 4,32,183,32,32,196,182,196,32,32,211,208,32
CASE 117: RESTORE CHAR117:
CHAR117:
DATA 4,183,32,214,32,186,32,186,32,211,196,208,32
CASE 118: RESTORE CHAR118:
CHAR118:
DATA 3,183,214,32,186,186,32,211,208,32
CASE 119: RESTORE CHAR119:
CHAR119:
DATA 4,183,32,214,32,186,186,186,32,211,208,208,32
CASE 120: RESTORE CHAR120:
CHAR120:
DATA 3,183,214,32,215,215,32,189,211,32
CASE 121: RESTORE CHAR121:
CHAR121:
DATA 4,183,32,214,32,211,210,189,32,32,208,32,32
CASE 122: RESTORE CHAR122:
CHAR122:
DATA 3,196,183,32,210,208,32,211,196,32
CASE 305: RESTORE CHAR305:
CHAR305:
DATA 2,183,32,186,32,208,32
CASE 306: RESTORE CHAR306:
CHAR306:
DATA 3,218,183,32,214,189,32,211,217,32
CASE 307: RESTORE CHAR307:
CHAR307:
DATA 3,218,183,32,32,182,32,192,189,32
CASE 308: RESTORE CHAR308:
CHAR308:
DATA 3,191,183,32,192,182,32,32,208,32
CASE 309: RESTORE CHAR309:
CHAR309:
DATA 3,214,191,32,211,183,32,192,189,32
CASE 310: RESTORE CHAR310:
CHAR310:
DATA 3,214,191,32,199,183,32,211,189,32
CASE 311: RESTORE CHAR311:
CHAR311:
DATA 3,218,183,32,32,186,32,32,208,32
CASE 312: RESTORE CHAR312:
CHAR312:
DATA 3,214,183,32,199,182,32,211,189,32
CASE 313: RESTORE CHAR313:
CHAR313:
DATA 3,214,183,32,211,182,32,192,189,32
CASE 304: RESTORE CHAR304:
CHAR304:
DATA 3,214,183,32,186,186,32,211,189,32
CASE 319: RESTORE CHAR319:
CHAR319:
DATA 4,214,196,220,32,32,219,32,32,32,254,32,32
CASE 289: RESTORE CHAR289:
CHAR289:
DATA 2,220,32,219,32,254,32
CASE 300: RESTORE CHAR300:
CHAR300:
DATA 2,32,32,32,32,191,32
CASE 302: RESTORE CHAR302:
CHAR302:
DATA 2,32,32,32,32,254,32
CASE 314: RESTORE CHAR314:
CHAR314:
DATA 2,32,32,254,32,254,32
CASE 315: RESTORE CHAR315:
CHAR315:
DATA 2,32,32,254,32,191,32
CASE 65: RESTORE CHAR65:
CHAR65:
DATA 5,186,223,223,186,32,186,32,32,186,32,199,196,196,182,32,186,32,32,186,32,186,32,32,186,32
CASE 66: RESTORE CHAR66:
CHAR66:
DATA 6,186,223,223,186,32,32,186,32,32,186,32,32,199,196,196,208,183,32,186,32,32,32,186,32,186,220,220,220,186,32
CASE 67: RESTORE CHAR67:
CHAR67:
DATA 5,186,223,223,186,32,186,32,32,32,32,186,32,32,32,32,186,32,32,32,32,186,220,220,186,32
CASE 68: RESTORE CHAR68:
CHAR68:
DATA 5,186,223,223,183,32,186,32,32,186,32,186,32,32,186,32,186,32,32,186,32,186,220,220,189,32
CASE 69: RESTORE CHAR69:
CHAR69:
DATA 5,186,223,223,32,32,186,32,32,32,32,199,196,180,32,32,186,32,32,32,32,186,220,220,186,32
CASE 70: RESTORE CHAR70:
CHAR70:
DATA 5,186,223,223,186,32,186,32,32,32,32,199,196,180,32,32,186,32,32,32,32,186,32,32,32,32
CASE 71: RESTORE CHAR71:
CHAR71:
DATA 5,186,223,223,186,32,186,32,32,32,32,186,32,195,183,32,186,32,32,186,32,186,220,220,186,32
CASE 72: RESTORE CHAR72:
CHAR72:
DATA 5,186,32,32,186,32,186,32,32,186,32,199,219,219,182,32,186,32,32,186,32,186,32,32,186,32
CASE 73: RESTORE CHAR73:
CHAR73:
DATA 6,223,223,186,223,223,32,32,32,186,32,32,32,32,32,186,32,32,32,32,32,186,32,32,32,220,220,186,220,220,32
CASE 74: RESTORE CHAR74:
CHAR74:
DATA 5,32,32,32,186,32,32,32,32,186,32,214,180,32,186,32,186,32,32,186,32,186,220,220,186,32
CASE 75: RESTORE CHAR75:
CHAR75:
DATA 5,186,32,32,186,32,186,32,32,186,32,186,220,220,189,32,186,32,211,183,32,186,32,32,186,32
CASE 76: RESTORE CHAR76:
CHAR76:
DATA 5,186,32,32,32,32,186,32,32,32,32,186,32,32,32,32,186,32,32,32,32,186,220,220,186,32
CASE 77: RESTORE CHAR77:
CHAR77:
DATA 6,186,223,210,223,186,32,186,32,186,32,186,32,186,32,208,32,186,32,186,32,32,32,186,32,186,32,32,32,186,32
CASE 78: RESTORE CHAR78:
CHAR78:
DATA 6,186,223,183,32,186,32,186,32,186,32,186,32,186,32,186,32,186,32,186,32,186,32,186,32,186,32,211,220,186,32
CASE 79: RESTORE CHAR79:
CHAR79:
DATA 5,186,223,223,186,32,186,32,32,186,32,186,32,32,186,32,186,32,32,186,32,186,220,220,186,32
CASE 80: RESTORE CHAR80:
CHAR80:
DATA 5,186,223,223,186,32,186,32,32,186,32,186,220,220,186,32,186,32,32,32,32,186,32,32,32,32
CASE 81: RESTORE CHAR81:
CHAR81:
DATA 6,186,223,223,186,32,32,186,32,32,186,32,32,186,32,32,186,32,32,186,32,32,186,32,32,186,219,219,199,183,32
CASE 82: RESTORE CHAR82:
CHAR82:
DATA 5,186,223,223,186,32,186,32,32,186,32,186,220,220,189,32,186,32,211,183,32,186,32,32,186,32
CASE 83: RESTORE CHAR83:
CHAR83:
DATA 5,186,223,223,186,32,186,32,32,32,32,211,196,196,183,32,32,32,32,186,32,186,220,220,186,32
CASE 84: RESTORE CHAR84:
CHAR84:
DATA 6,223,223,186,223,223,32,32,32,186,32,32,32,32,32,186,32,32,32,32,32,186,32,32,32,32,32,186,32,32,32
CASE 85: RESTORE CHAR85:
CHAR85:
DATA 6,186,32,32,186,32,32,186,32,32,186,32,32,186,32,32,186,32,32,186,32,32,186,32,32,186,220,220,199,183,32
CASE 86: RESTORE CHAR86:
CHAR86:
DATA 5,186,32,32,186,32,186,32,32,186,32,186,32,32,186,32,186,32,32,186,32,211,220,220,189,32
CASE 87: RESTORE CHAR87:
CHAR87:
DATA 6,186,32,32,32,186,32,186,32,32,32,186,32,186,32,210,32,186,32,186,32,186,32,186,32,186,220,208,220,186,32
CASE 88: RESTORE CHAR88:
CHAR88:
DATA 6,186,32,32,32,186,32,211,191,32,214,189,32,32,214,219,189,32,32,214,189,32,192,183,32,186,32,32,32,186,32
CASE 89: RESTORE CHAR89:
CHAR89:
DATA 6,186,32,32,32,186,32,186,32,32,32,186,32,211,220,32,220,189,32,32,32,186,32,32,32,32,32,186,32,32,32
CASE 90: RESTORE CHAR90:
CHAR90:
DATA 5,223,223,223,186,32,32,32,214,189,32,32,214,189,32,32,214,189,32,32,32,186,220,220,220,32
CASE 49: RESTORE CHAR49:
CHAR49:
DATA 4,223,186,32,32,32,186,32,32,32,186,32,32,32,186,32,32,220,186,220,32
CASE 50: RESTORE CHAR50:
CHAR50:
DATA 5,186,223,223,186,32,32,32,32,186,32,214,196,196,189,32,186,32,32,32,32,186,220,220,186,32
CASE 51: RESTORE CHAR51:
CHAR51:
DATA 5,186,223,223,186,32,32,32,32,186,32,32,32,196,182,32,32,32,32,186,32,186,220,220,186,32
CASE 52: RESTORE CHAR52:
CHAR52:
DATA 5,186,32,32,186,32,186,32,32,186,32,186,220,220,186,32,32,32,32,186,32,32,32,32,186,32
CASE 53: RESTORE CHAR53:
CHAR53:
DATA 5,186,223,223,223,32,186,32,32,32,32,211,196,196,183,32,32,32,32,186,32,220,220,220,186,32
CASE 54: RESTORE CHAR54:
CHAR54:
DATA 5,186,223,223,32,32,186,32,32,32,32,199,196,196,183,32,186,32,32,186,32,186,220,220,186,32
CASE 55: RESTORE CHAR55:
CHAR55:
DATA 5,223,223,223,186,32,32,32,32,186,32,32,32,32,186,32,32,32,32,186,32,32,32,32,186,32
CASE 56: RESTORE CHAR56:
CHAR56:
DATA 5,186,223,223,186,32,186,32,32,186,32,199,196,196,182,32,186,32,32,186,32,186,220,220,186,32
CASE 57: RESTORE CHAR57:
CHAR57:
DATA 5,186,223,223,186,32,186,32,32,186,32,211,196,196,182,32,32,32,32,186,32,32,32,32,186,32
CASE 48: RESTORE CHAR48:
CHAR48:
DATA 5,186,223,223,186,32,186,32,218,182,32,186,218,217,186,32,199,217,32,186,32,186,220,220,186,32
CASE 63: RESTORE CHAR63:
CHAR63:
DATA 5,186,223,223,186,32,32,32,214,189,32,32,214,189,32,32,32,186,32,32,32,32,220,32,32,32
CASE 33: RESTORE CHAR33:
CHAR33:
DATA 4,186,219,186,32,186,219,186,32,186,219,186,32,211,210,189,32,32,220,32,32
CASE 44: RESTORE CHAR44:
CHAR44:
DATA 2,32,32,32,32,32,32,32,32,191,32
CASE 46: RESTORE CHAR46:
CHAR46:
DATA 2,32,32,32,32,32,32,32,32,220,32
CASE 58: RESTORE CHAR58:
CHAR58:
DATA 2,32,32,32,32,223,32,220,32,32,32
CASE 59: RESTORE CHAR59:
CHAR59:
DATA 2,32,32,32,32,223,32,220,32,223,32
CASE ELSE: RESTORE CHAR999
CHAR999:
DATA 2,32,32,32,32,32,32,32,32,32,32
END SELECT

READ CharWidth
FOR CharHeight = (1 + HeightOffset) TO MaxHeight' puts lower in bottom 3/5
  FOR WidthPtr = CharPtr TO (CharPtr + CharWidth - 1)
    READ CharData
    MID$(Char$(CharHeight), WidthPtr, 1) = CHR$(CharData)
  NEXT
NEXT
CharPtr = CharPtr + CharWidth'         | adjust for next output
UserPtr = UserPtr + 1'                 | look at next input

LOOP UNTIL UserPtr > LEN(User$)'       | do until no more input

FOR i = 1 TO MaxHeight'                | truncate to actual size
  Char$(i) = LEFT$(Char$(i), (CharPtr - 1))
NEXT

RETURN
