BCX Console Demonstration Program s90.bas
```
'-----------------------------------------------------------------
' BCX Console mode demonstration by Kevin Diggins (2000)
' Uses pointer arithmetic to grab screen text and color attributes
' Clears the screen and then restores the original text screen
'-----------------------------------------------------------------

DIM Buffer\$ * (80 * 25 * 2) + 1
GetText(1, 1, 80, 24, Buffer\$)
Say("Press a key to Clear the screen")
CLS
Say("Press a key to Restore the screen")
PutText (1, 1, 80, 24, Buffer\$)

SUB Say(A\$)
LOCAL EatKey
PRINT A\$
WHILE NOT INSTAT
WEND
EatKey = KEYPRESS
END SUB

SUB GetText(x1, y1, x2, y2, dest\$)
LOCAL  i      AS DWORD
LOCAL  ilen   AS DWORD
LOCAL  width  AS DWORD
LOCAL  coord  AS COORD
LOCAL  pwattr AS LPWORD
LOCAL  y      AS INTEGER
LOCAL  pstr   AS LPSTR

width = (x2 - x1 + 1)
pwattr = (USHORT *)malloc(width * SIZEOF(*pwattr) + 1)

IF NOT pwattr THEN
EXIT SUB
END IF

pstr = (CHAR *)malloc(width)

IF NOT pstr THEN
EXIT SUB
END IF

FOR y = y1 TO y2
coord.X = x1 - 1
coord.Y = y - 1
FOR i = 0 TO width
*dest\$ = *(pstr + i)
dest++
*dest\$ = (CHAR)*(pwattr + i)
dest++
NEXT
NEXT
END SUB

SUB PutText(x1, y1, x2, y2, srce\$)
LOCAL i      AS DWORD
LOCAL ilen   AS DWORD
LOCAL width  AS DWORD
LOCAL coord  AS COORD
LOCAL pwattr AS LPWORD
LOCAL y      AS INTEGER
LOCAL pstr   AS LPSTR

width = (x2 - x1 + 1)
pwattr = (USHORT *)malloc(width * SIZEOF(*pwattr))

IF NOT pwattr THEN
EXIT SUB
END IF

pstr = (CHAR *)malloc(width + 1)

IF NOT pstr THEN
EXIT SUB
END IF

FOR y = y1 TO y2
FOR i = 0 TO width
*(pstr + i) = *srce\$
srce++
*(pwattr + i) = *srce\$
srce++
NEXT i
coord.X = x1 - 1
coord.Y = y - 1
WriteConsoleOutputCharacterA(hConsole, pstr, width, coord, &ilen)
WriteConsoleOutputAttribute(hConsole, pwattr, width, coord, &ilen)
NEXT y
END SUB

```

Result:

```
Result not displayed for this example.

```