'=========================================================================== ' Subject: SKELETAL GRAPHICS FONT Date: 04-15-95 (00:00) ' Author: Byron C. Smith, Jr. Code: QB, QBasic, PDS ' Origin: harryst@castel.nl Packet: GRAPHICS.ABC '=========================================================================== 'ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» 'º GRFN.BAS ³ GRaphics FoNt -- Skeletal 4x6 character cell graphics engine. º 'ÇÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ 'º Overview ³ GRFN is version 0.95D15 (15-APR-1995) by Byron C. Smith, Jr. º 'º ³ GRFN is designed for the CGA screen modes but can be executed º 'º ³ in almost any screen mode (the font face, however, may be too º 'º ³ small for the user's desire in especially the VGA modes). º 'º ³ GRFN is released as freeware for the benefit of all users. º 'º ³ º 'º Snail ³ The author can be reached here: º 'º ³ º 'º ³ Byron C. Smith, Jr. º 'º ³ 355 Smith Lake Rd º 'º ³ Vidor, TX 77662-3025 º 'º ³ 409/769-5795 º 'º ³ º 'º Email ³ The author is also on the internet: º 'º ³ º 'º ³ xolotl@io.com (preferred email address, unless on AOL) º 'º ³ bsmith5637@aol.com º 'º ³ http://www.io.com/~xolotl (Web page, very skimpy as of yet) º 'ÇÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ 'º Program ³ GRFN originated in the C environment during a hobby project º 'º ³ the author started to design part of a personal tools library.º 'º ³ GRFN models existed for plain 3x5, (GRFN) 3x6, 3x7, 3x8, and º 'º ³ 4x8 character cells. GRFN was ported to PowerBASIC and QBasic º 'º ³ for a friend's use in a future graphics game (tentatively set º 'º ³ near May 1997 by the looks of things. :) ). º 'º ³ º 'º ³ GRFN is a modified octal graphics engine, based on a 3x6 cell º 'º ³ with an I-shaped buffer zone (which is six pixels / border): º 'º ³ º 'º ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ º 'º ³ ÉÍÍÍÍÍÍÍ» ÚÄÄÄÄÄÄÄÄÄ´one octal digit wide³ º 'º ³ ºbin¯octº* ÚÄÄÁÄÄ¿ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ º 'º ³ ÌÍÍÍÍÍÍ͹ ÚÚÄÂÄÂÄÂÄ¿¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ º 'º ³ º010 = 2º ³³ ³ ³Û³ ³³ÚÄÄÄÄ´six octal digits tall³ º 'º ³ ÇÄÄÄÄÄÄĶ Ú´ÃÄÅÄÅÄÅÄ´³³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ º 'º ³ º101 = 5º ³³³ ³Û³ ³Û³³³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ º 'º ³ ÇÄÄÄÄÄÄĶ ³³ÃÄÅÄÅÄÅÄ´³³ ÚÄÄ´two octal digits long³ º 'º ³ º111 = 7º ³À³ ³Û³Û³Û³³³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ º 'º ³ ÇÄÄÄÄÄÄĶ ÚÄ´ ÃÄÅÄÅÄÅÄ´ÃÙ ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ º 'º ³ º101 = 5º ³ ³Ú³ ³Û³ ³Û³³ ³ *³"A" has GRFN value of³ º 'º ³ ÇÄÄÄÄÄÄĶ ³ ³³ÃÄÅÄÅÄÅÄ´³ ³ ³G = &O00257550, with ³ º 'º ³ º101 = 5º ³ ³³³ ³Û³ ³Û³³ ³ ³the highest octal ³ º 'º ³ ÇÄÄÄÄÄÄĶ ³ À´ÃÄÅÄÅÄÅÄ´³ ³ ³digits being 00 since³ º 'º ³ º000 = 0º ³ ³³ ³ ³ ³ ³³ ³ ³this designates the ³ º 'º ³ ÈÍÍÍÍÍÍͼ ³ ÀÀÄÁÄÁÄÁÄÙÙ ³ ³empty I-buffer space.³ º 'º ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ º 'º ³ º 'ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ DECLARE SUB GRFN (T$) SCREEN 2 'GRFN might be too small for some in mode 2. CLS PSET (18, 20), 0 'Start GRFN out at 18, 20. FOR C% = 32 TO 128 'GRFN is only programmed for ASCII subset, GRFN CHR$(C%) 'although entire 4x6 cell is accessible. NEXT PSET (18, 8), 0 GRFN "GRFN:" LINE INPUT "GRFN: ", T$ 'What would the user like to see GRFNized? PSET (46, 8), 0 'Set up to display right underneath input. GRFN T$ 'GRFNize it without furthur delay. WHILE LEN(INKEY$) = 0: WEND SCREEN 0: CLS : SYSTEM 'For QBASIC /RUN, terminates back to DOS. DEFINT A-F, H-Z DEFLNG G SUB GRFN (T$) FOR I = 1 TO LEN(T$) SELECT CASE ASC(MID$(T$, I, 1)) CASE 32 G = &O0 '(space) CASE 33 G = &O222020 '! CASE 34 G = &O550000 '" CASE 35 G = &O575750 '# CASE 36 G = &O232620 '$ CASE 37 G = &O412410 '% CASE 38 G = &O337520 '& CASE 39 G = &O240000 '' CASE 40 G = &O244420 '( CASE 41 G = &O211120 ') CASE 42 G = &O272500 '* CASE 43 G = &O27200 '+ CASE 44 G = &O24 ', CASE 45 G = &O7000 '- CASE 46 G = &O20 '. CASE 47 G = &O112440 '/ CASE 48 G = &O257520 '0 CASE 49 G = &O262220 '1 CASE 50 G = &O612470 '2 CASE 51 G = &O612160 '3 CASE 52 G = &O137110 '4 CASE 53 G = &O746160 '5 CASE 54 G = &O346530 '6 CASE 55 G = &O712440 '7 CASE 56 G = &O352560 '8 CASE 57 G = &O357160 '9 CASE 58 G = &O20200 ': CASE 59 G = &O2024 '; CASE 60 G = &O124210 '< CASE 61 G = &O70700 '= CASE 62 G = &O421240 '> CASE 63 G = &O612020 '? CASE 64 G = &O377430 '@ CASE 65 G = &O257550 'A CASE 66 G = &O656560 'B CASE 67 G = &O344430 'C CASE 68 G = &O655560 'D CASE 69 G = &O746470 'E CASE 70 G = &O746440 'F CASE 71 G = &O344530 'G CASE 72 G = &O557550 'H CASE 73 G = &O722270 'I CASE 74 G = &O311160 'J CASE 75 G = &O556550 'K CASE 76 G = &O444470 'L CASE 77 G = &O777750 'M CASE 78 G = &O577750 'N CASE 79 G = &O255520 'O CASE 80 G = &O656440 'P CASE 81 G = &O355573 'Q CASE 82 G = &O656550 'R CASE 83 G = &O342160 'S CASE 84 G = &O722220 'T CASE 85 G = &O555570 'U CASE 86 G = &O555520 'V CASE 87 G = &O577770 'W CASE 88 G = &O552550 'X CASE 89 G = &O552220 'Y CASE 90 G = &O712470 'Z CASE 91 G = &O644460 '[ CASE 92 G = &O442110 '\ CASE 93 G = &O311130 '] CASE 94 G = &O250000 '^ CASE 95 G = &O1000007 '_ CASE 96 G = &O210000 '` CASE 97 G = &O61770 'a CASE 98 G = &O465560 'b CASE 99 G = &O34430 'c CASE 100 G = &O135530 'd CASE 101 G = &O37430 'e CASE 102 G = &O346440 'f CASE 103 G = &O35716 'g CASE 104 G = &O465550 'h CASE 105 G = &O202220 'i CASE 106 G = &O101116 'j CASE 107 G = &O456550 'k CASE 108 G = &O222210 'l CASE 109 G = &O77750 'm CASE 110 G = &O65550 'n CASE 111 G = &O25520 'o CASE 112 G = &O65564 'p CASE 113 G = &O35531 'q CASE 114 G = &O34440 'r CASE 115 G = &O36160 's CASE 116 G = &O272210 't CASE 117 G = &O55570 'u CASE 118 G = &O55520 'v CASE 119 G = &O57770 'w CASE 120 G = &O52550 'x CASE 121 G = &O55716 'y CASE 122 G = &O71270 'z CASE 123 G = &O326230 '{ CASE 124 G = &O220220 '| CASE 125 G = &O623260 '} CASE 126 G = &O350000 '~ Three pixels wide is too narrow to make a good tilde. CASE 127 G = &O25570 '(tri) CASE ELSE G = &O77777777 '(blk) This is catch-all for characters not in GRFN set. END SELECT G = G - 65536 * (G < 0) 'Keep GRFN data positive. IF G > 262143 THEN PSET STEP(0, 1), (G AND 4194304) > 0 PSET STEP(0, 1), (G AND 2097152) > 0 PSET STEP(0, 1), (G AND 1048576) > 0 PSET STEP(0, 1), (G AND 524288) > 0 PSET STEP(0, 1), (G AND 262144) > 0 PSET STEP(0, -5), (G AND 8388608) > 0 END IF PSET STEP(1, 0), (G AND 131072) > 0 PSET STEP(1, 0), (G AND 65536) > 0 PSET STEP(1, 0), (G AND 32768) > 0 PSET STEP(-2, 1), (G AND 16384) > 0 PSET STEP(1, 0), (G AND 8192) > 0 PSET STEP(1, 0), (G AND 4096) > 0 PSET STEP(-2, 1), (G AND 2048) > 0 PSET STEP(1, 0), (G AND 1024) > 0 PSET STEP(1, 0), (G AND 512) > 0 PSET STEP(-2, 1), (G AND 256) > 0 PSET STEP(1, 0), (G AND 128) > 0 PSET STEP(1, 0), (G AND 64) > 0 PSET STEP(-2, 1), (G AND 32) > 0 PSET STEP(1, 0), (G AND 16) > 0 PSET STEP(1, 0), (G AND 8) > 0 PSET STEP(-2, 1), (G AND 4) > 0 PSET STEP(1, 0), (G AND 2) > 0 PSET STEP(1, 0), (G AND 1) > 0 PSET STEP(1, -5), 0 'Mark starting point of next char. NEXT END SUB