Turbo Pascal 3 include library for FabGL Ansi Terminal
Insert into your own TP3 programs using {$i fabgl.inc)
Supports most of the graphics/sound FabGL Specific Terminal Sequences in Ansi Terminal.
Also supports the additional resolution/font change capability of Ansi Terminal Mod.
FabGL Terminal Sequences: http://www.fabglib.org/special_term_escapes.html
Commands SCREEN & APPLY require Ansi Terminal Mods Version of Ansi Terminal.
Ansi Terminal Mods: https://github.com/eightbitswide/FabGL-AnsiTerminal-Mods-
- Adds a simple 16 color font definition.
- Adds the ability to load font data from code or external text file.
Note: I'm a Turbo Pascal beginner. While code has been tested to work, it is likely not optimized.
SPRITECOUNT(X);
FabGL Sequence: ESC "_GSPRITECOUNT" count "$" Parameters: count: number of sprites that will be defined by "SPRITEDEFRGB2" Example: // allocates two sprites SPRITECOUNT(2);
SPRITEDEFRGB2(SpriteNumber,Width,Height)
FabGL Sequence:
ESC "_GSPRITEDEF" spriteIndex ";" width ";" height ";"2"
Parameters:
spriteIndex: sprite index (0...)
width: bitmap width
height: bitmap height
format:
"2" = Assumed bitmap format is 64 colors
Example:
// allocates one sprite and assign a 16x23 64 Color Sprite.
SPRITECOUNT(1);
SPRITEDEFRGB2(0,16,23);
Important Note:
This Command must be followed with either SPRITEDATA or SPRITEFILEDATA,
providing the expected data to the sprite being defined.
SPRITEDATA(DATA);
FabGL Sequence: (Sends the sprite data expected by SPRITEDEFRGB2 when not reading it from an external text file.)
;DATA
Parameters:
0-F define 16 colors in the sprite as follows:
* 0 = {Black}
* 1 = {Grey}
* 2 = {Light Grey}
* 3 = {Pink}
* 4 = {Red}
* 5 = {Brown}
* 6 = {Peach}
* 7 = {Orange}
* 8 = {Yellow}
* 9 = {Green}
* A = {Cyan}
* B = {Light Blue}
* C = {Blue}
* D = {Magenta}
* E = {Purple}
* F = {White}
* $ = {End of Sprite Data}
Example:
// allocate one sprite, assign a 16x15 16 Color Sprite, sent from code.
SPRITECOUNT(1);
SPRITEDEFRGB2(0,16,15);
SPRITEDATA('0000000000000000');
SPRITEDATA('0000004444000000');
SPRITEDATA('0000444444440000');
SPRITEDATA('0004444444444000');
SPRITEDATA('004FF4444FF44400');
SPRITEDATA('00FFFF44FFFF4400');
SPRITEDATA('00CCFF44CCFF4400');
SPRITEDATA('04CCFF44CCFF4440');
SPRITEDATA('044FF4444FF44440');
SPRITEDATA('0444444444444440');
SPRITEDATA('0444444444444440');
SPRITEDATA('0444444444444440');
SPRITEDATA('0444444444444440');
SPRITEDATA('0440444004440440');
SPRITEDATA('0400044004400040');
SPRITEDATA('$');
Important Note:
Sprite data sent from code in this fashion must end with a SPRITEDATA('$'); to finish defining the sprite.
SPRITEFILEDATA('DATAFILE');
FabGL Sequence: (Sends the sprite data expected by SPRITEDEFRGB2 front an external text file.)
;DATA
Parameters:
0-F define 16 colors in the sprite as follows:
* 0 = {Black}
* 1 = {Grey}
* 2 = {Light Grey}
* 3 = {Pink}
* 4 = {Red}
* 5 = {Brown}
* 6 = {Peach}
* 7 = {Orange}
* 8 = {Yellow}
* 9 = {Green}
* A = {Cyan}
* B = {Light Blue}
* C = {Blue}
* D = {Magenta}
* E = {Purple}
* F = {White}
* $ = {End of Sprite Data}
Example:
// allocate one sprite, assign a 16x15 16 Color Sprite, sent from code.
SPRITECOUNT(1);
SPRITEDEFRGB2(0,16,23);
SRPITEFILEDATA('MYSPRITE.TXT');
Example Text File: (MYSPRITE.TXT)
0002220000222000
0BBB88BBBB88BBB0
0BBB88BBBB88BBB0
1BBB88BBBB88BBB1
1BBB88BBBB88BBB1
1BBB88BBBB88BBB1
1BBB11111111BBB1
1BB1111111111BB1
0B111111111111B0
0B1B88BBBB88B1B0
0BBB88BBBB88BBB0
0B1B88BBBB88B1B0
0B1B88BBBB88B1B0
0B1B88BBBB88B1B0
1BBB88BBBB88BBB1
1BBB11111111BBB1
1BBB81111118BBB1
1BB88BBBBBB88BB1
1BB88BBBBBB88BB1
0BB88BBBBBB88BB0
0BB88BBBBBB88BB0
0BB88BBBBBB88BB0
0002000000002000
Important Note:
Sending SPRITEDATA('$'); is not required. Included in the routine.
SPRITESET(SpriteNumber,Visible,X,Y)
FabGL Sequence: ESC "_GSPRITESET" spriteIndex ";" visible ";" frameIndex ";" X ";" Y "$" Parameters: spriteIndex: sprite index (0...) visible: "0" = hidden, "1" = visible X: horizontal position Y: vertical position Example: // make sprite 0 visible at position 50,120 with first added bitmap SPRITESET(0,1,50,120);
SCREEN('DATA');
Specific to Ansi Terminal Mods which gives resolution and font control to your programs.
Parameters: (resolution)
* 1280x768x2
* 1024x720x4
* 800x600x8
* 720x520x16
* 640x480@73x16
* 640x480@60x16
* 640x350x16
* 512x384x64
* 400x300x64
* 320x200x64
Parameters: (font)
* Auto
* VGA 4x6
* VGA 5x7
* VGA 5x8
* VGA 6x8
* VGA 6x9
* VGA 6x10
* VGA 6x12
* VGA 6x13
* VGA 7x13
* VGA 7x14
* VGA 8x8
* VGA 8x9
* VGA 8x13
* VGA 8x14
* VGA 8x16
* VGA 8x19
* VGA 9x15
* VGA 9x18
* VGA 10x20
* BigSerif 8x14
* BigSerif 8x16
* Block 8x14
* Broadway 8x14
* Computer 8x14
* Courier 8x14
* LCD 8x14
* Old English 8x16
* Sans Serif 8x14
* Sans Serif 8x16
* Slant 8x14
* Wiggly 8x16
Example:
// make resolution 320x200, 64 Colors with VGA 8x8 font and Apply.
SCREEN('320x200x64');
SCREEN('VGA 8x8');
APPLY;
Important Note:
An APPLY command must be send to make the make the SCREEN changes happen.
APPLY;
Must be executed after use of the SCREEN command.
PEN(RED,GREEN,BLUE);
BRUSH(RED,GREEN,BLUE);
RECT(X1,Y1,X2,Y2);
FILLRECT(X1,Y1,X2,Y2);
LINE(X1,Y1,X2,Y2);
CURSOR(0/1);
CLS;
HOME;
CLEAR;
PLOT(X,Y);
SCROLL<offsetX,offsetY);
ELLIPSE(X1,Y1,WIDTH,HEIGHT);
FILLELLIPSE(X1,Y1,WIDTH,HEIGHT);
PLAY(WAVEFORM,FREQ,DURATION,VOLUME);