10 PRINT CHR$(26) 20 GOSUB 1000 30 TOP = 0 : BOTTOM = 23 : LEFT = 0 : RIGHT = 79 40 CHARACTER = OXEGE.OUTLINE.DIM : ATTRIBUTE = ATTRIBUTE.BIT.ALTERNATE.FONT 50 GOSUB 2040 60 TOP = 1 : BOTTOM = 22 : LEFT = 1 : RIGHT = 78 70 CHARACTER = OXEGE.FILL.QUARTER 80 GOSUB 1890 90 TOP = 3 : BOTTOM = 9 : LEFT = 40 : RIGHT = 60 100 CHARACTER = 32 110 ATTRIBUTE = 0 120 GOSUB 1890 130 CHARACTER = OXEGE.OUTLINE.FULL : ATTRIBUTE = ATTRIBUTE.BIT.ALTERNATE.FONT 140 GOSUB 2040 150 I$ = INKEY$ : IF I$ = "" THEN 150 160 PRINT CHR$(26) 170 END 1000 REM ============================= 1010 REM OXEGE.ASC 1020 REM 1030 REM The Osborne Executive 1040 REM Enhanced Graphics Environment 1050 REM 1060 REM ============================== 1070 REM 1080 REM by Ted A. Campbell 1090 REM Raleigh Osborne Computer Club 1100 REM Email: tcamp@ecsvax 1110 REM 1120 REM ================================= 1130 REM 1140 REM 1150 REM OXEGE.ASC is a series of BASIC 1160 REM subroutines to handle special graphics 1170 REM for the Osborne Executive (tm) com- 1180 REM puter. These subroutines require 1190 REM that the special character set 1200 REM OXEGE.CHR be loaded into font RAM 1210 REM before the program will execute 1220 REM properly. 1230 REM 1240 REM ================================= 1250 REM 1260 REM Subroutine 1240: INITIALIZE 1270 REM This subroutine sets up variables 1280 REM used in OXEGE. call it first 1290 REM in any program using OXEGE. 1300 REM 1310 VIDEO.RAM.CHARACTER.LOCATION! = &HC000 1320 VIDEO.RAM.ATTRIBUTE.LOCATION! = &HD000 1330 ATTRIBUTE.BIT.INVERSE = 128 1340 ATTRIBUTE.BIT.BRIGHT = 128 1350 ATTRIBUTE.BIT.UNDERLINE = 64 1360 ATTRIBUTE.BIT.BLINK = 32 1370 ATTRIBUTE.BIT.ALTERNATE.FONT = 16 1380 DATE.LOCATION = 63732! 1390 TIME.LOCATION.HOUR = 63734! 1400 TIME.LOCATION.MINUTE = 63735! 1410 TIME.LOCATION.SECOND = 63736! 1420 CONSOLE.READY = 1 1430 AUXILIARY.READY = 255 1440 OXEGE.OUTLINE.DIM = 117 1450 OXEGE.OUTLINE.FULL = 109 1600 OXEGE.FILL.FULL = 127 1610 OXEGE.FILL.THREE.FOURTHS = 125 + ATTRIBUTE.BIT.INVERSE 1620 OXEGE.FILL.HALF = 126 1630 OXEGE.FILL.QUARTER = 125 1640 RETURN 1650 REM ==================================================== 1660 REM 1670 REM Subroutine CPOKE 1680 REM 1690 REM Pokes a chatacter into Video RAM 1700 REM 1710 REM Input: CHARACTER, LINE, COLUMN 1720 REM 1725 LOCATION!=VIDEO.RAM.CHARACTER.LOCATION!+(DISPLAY.LINE*128)+DISPLAY.COLUMN 1730 OUT 0,65 1740 POKE LOCATION!,CHARACTER 1750 OUT 0,1 1760 RETURN 1770 REM ============================================================== 1780 REM 1790 REM Subroutine APOKE 1800 REM 1810 REM Pokes an attribute into Video RAM 1820 REM 1830 REM Input: ATTRIBUTE, LINE, COLUMN 1840 REM 1845 LOCATION!=VIDEO.RAM.ATTRIBUTE.LOCATION!+(DISPLAY.LINE*128)+DISPLAY.COLUMN 1850 OUT 0,65 1860 POKE LOCATION!,ATTRIBUTE 1870 OUT 0,1 1880 RETURN 1890 REM ============================================================== 1900 REM 1910 REM Subroutine FILL 1920 REM 1930 REM Fill a screen area with a specific character and attribute 1940 REM 1950 REM Input: TOP, LEFT, BOTTOM, RIGHT 1960 REM CHARACTER, ATTRIBUTE 1970 FOR DISPLAY.LINE = TOP TO BOTTOM 1980 FOR DISPLAY.COLUMN = LEFT TO RIGHT 1990 GOSUB 1650 2000 GOSUB 1770 2010 NEXT DISPLAY.COLUMN 2020 NEXT DISPLAY.LINE 2030 RETURN 2040 REM ============================================================== 2050 REM 2060 REM Subroutine OUTLINE 2070 REM 2080 REM Draws an outline using OXEGE characters 2090 REM 2100 REM Input: TOP, LEFT, BOTTOM, RIGHT, CHARACTER, ATTRIBUTE 2110 REM 2120 SAVE.CHARACTER = CHARACTER 2130 CHARACTER = SAVE.CHARACTER+2 2140 DISPLAY.LINE = TOP 2150 FOR DISPLAY.COLUMN = LEFT+1 TO RIGHT -1 2160 GOSUB 1650 2170 GOSUB 1770 2180 NEXT DISPLAY.COLUMN 2190 DISPLAY.COLUMN = RIGHT : CHARACTER = SAVE.CHARACTER+5 2200 GOSUB 1650 2210 GOSUB 1770 2220 CHARACTER = SAVE.CHARACTER+1 2230 FOR DISPLAY.LINE = TOP+1 TO BOTTOM-1 2240 GOSUB 1650 2250 GOSUB 1770 2260 NEXT DISPLAY.LINE 2270 DISPLAY.LINE = BOTTOM : CHARACTER = SAVE.CHARACTER+7 2280 GOSUB 1650 2290 GOSUB 1770 2300 CHARACTER = SAVE.CHARACTER+3 2310 FOR DISPLAY.COLUMN = RIGHT-1 TO LEFT+1 STEP -1 2320 GOSUB 1650 2330 GOSUB 1770 2340 NEXT DISPLAY.COLUMN 2350 DISPLAY.COLUMN = LEFT : CHARACTER = SAVE.CHARACTER+6 2360 GOSUB 1650 2370 GOSUB 1770 2380 CHARACTER = SAVE.CHARACTER+0 2390 FOR DISPLAY.LINE = BOTTOM-1 TO TOP+1 STEP -1 2400 GOSUB 1650 2410 GOSUB 1770 2420 NEXT DISPLAY.LINE 2430 CHARACTER = SAVE.CHARACTER+4 : DISPLAY.LINE = TOP 2440 GOSUB 1650 2450 GOSUB 1770 2460 RETURN T DISPLAY