diff options
Diffstat (limited to 'packages/svgalib/src/svgalib.pp')
-rw-r--r-- | packages/svgalib/src/svgalib.pp | 509 |
1 files changed, 509 insertions, 0 deletions
diff --git a/packages/svgalib/src/svgalib.pp b/packages/svgalib/src/svgalib.pp new file mode 100644 index 0000000000..ddb1ba70a5 --- /dev/null +++ b/packages/svgalib/src/svgalib.pp @@ -0,0 +1,509 @@ +unit SVGALib; + +{************************************************************************* + VGAlib version 1.2 - (c) 1993 Tommy Frandsen + + This library is free software; you can redistribute it and/or + modify it without any restrictions. This library is distributed + in the hope that it will be useful, but without any warranty. + + Extended for svgalib by Harm Hanemaayer and Hartmut Schirmer + ************************************************************************ + + Original conversion to FPK-Pascal done by Balazs Scheidler (bazsi@tas.vein.hu) + 08/29/1997 + + Modified by Matthias K"oppe <mkoeppe@csmd.cs.uni-magdeburg.de>, 21-Sep-1997 + The compiler (FPK 0.9.1) seems to have a problem with external procedures + having void argument list (wrong number of arguments is taken from stack.) + Therefore, I added dummy arguments to all these procedures. Moreover, I + added `vgagl' support. + + Modified by Michael Van Canneyt (michael@tfdec1.fys.kuleuven.ac.be) to + support version 0.99.5 of the compiler. (March 1998) Removed the void replacements. + Added makefile and 2 testprograms. Tested with svgalib 1.2.12. + + ************************************************************************} + +interface + +{ As of version 0.99.0, you can specify libs to link to in the source file } +{ Make sure you have those libs. MVC } + +{$linklib vga} +{$linklib vgagl} +{$linklib c} + +const + GTEXT = 0; { Compatible with VGAlib v1.2 } + G320x200x16 = 1; + G640x200x16 = 2; + G640x350x16 = 3; + G640x480x16 = 4; + G320x200x256 = 5; + G320x240x256 = 6; + G320x400x256 = 7; + G360x480x256 = 8; + G640x480x2 = 9; + + G640x480x256 = 10; + G800x600x256 = 11; + G1024x768x256 = 12; + + G1280x1024x256 = 13; { Additional modes. } + + G320x200x32K = 14; + G320x200x64K = 15; + G320x200x16M = 16; + G640x480x32K = 17; + G640x480x64K = 18; + G640x480x16M = 19; + G800x600x32K = 20; + G800x600x64K = 21; + G800x600x16M = 22; + G1024x768x32K = 23; + G1024x768x64K = 24; + G1024x768x16M = 25; + G1280x1024x32K = 26; + G1280x1024x64K = 27; + G1280x1024x16M = 28; + + G800x600x16 = 29; + G1024x768x16 = 30; + G1280x1024x16 = 31; + + G720x348x2 = 32; { Hercules emulation mode } + + G320x200x16M32 = 33; { 32-bit per pixel modes. } + G640x480x16M32 = 34; + G800x600x16M32 = 35; + G1024x768x16M32 = 36; + G1280x1024x16M32 = 37; + +{ additional resolutions } + G1152x864x16 = 38; + G1152x864x256 = 39; + G1152x864x32K = 40; + G1152x864x64K = 41; + G1152x864x16M = 42; + G1152x864x16M32 = 43; + + G1600x1200x16 = 44; + G1600x1200x256 = 45; + G1600x1200x32K = 46; + G1600x1200x64K = 47; + G1600x1200x16M = 48; + G1600x1200x16M32 = 49; + + GLASTMODE = 49; + +{ Extensions to VGAlib v1.2: } + +{ blit flags } +const + HAVE_BITBLIT = 1; + HAVE_FILLBLIT = 2; + HAVE_IMAGEBLIT = 4; + HAVE_HLINELISTBLIT = 8; + HAVE_BLITWAIT = 16; + +{ other flags } + HAVE_RWPAGE = 1; { vga_setreadpage() / vga_setwritepage() available } + IS_INTERLACED = 2; { mode is interlaced } + IS_MODEX = 4; { ModeX style 256 colors } + IS_DYNAMICMODE = 8; { Dynamic defined mode } + CAPABLE_LINEAR = 16; { Can go to linear addressing mode. } + IS_LINEAR = 32; { Linear addressing enabled. } + EXT_INFO_AVAILABLE = 64; { Returned modeinfo contains valid extended fields } + RGB_MISORDERED = 128; { Mach32 32bpp uses 0BGR instead of BGR0. } + { As of this version 1.25 also used to signal if real RGB + (red first in memory) is used instead of BGR (Mach32 DAC 4) } + HAVE_EXT_SET = 256; { vga_ext_set() available } + +{ Valid values for what in vga_ext_set: } +const + VGA_EXT_AVAILABLE = 0; { supported flags } + VGA_EXT_SET = 1; { set flag(s) } + VGA_EXT_CLEAR = 2; { clear flag(s) } + VGA_EXT_RESET = 3; { set/clear flag(s) } + VGA_EXT_PAGE_OFFSET = 4; { set an offset for all subsequent vga_set*page() calls } + { Like: vga_ext_set(VGA_EXT_PAGE_OFFSET, 42); } + { returns the previous offset value. } + + { Valid params for VGA_EXT_AVAILABLE: } + VGA_AVAIL_SET = 0; { vga_ext_set sub funcs } + VGA_AVAIL_ACCEL = 1; { vga_accel sub funcs } + VGA_AVAIL_FLAGS = 2; { known flags for VGA_EXT_SET } + + { Known flags to vga_ext_set() } + VGA_CLUT8 = 1; { 8 bit DAC entries } + + { Acceleration interface. } + + { Accel operations. } + ACCEL_FILLBOX = 1; { Simple solid fill. } + ACCEL_SCREENCOPY = 2; { Simple screen-to-screen BLT. } + ACCEL_PUTIMAGE = 3; { Straight image transfer. } + ACCEL_DRAWLINE = 4; { General line draw. } + ACCEL_SETFGCOLOR = 5; { Set foreground color. } + ACCEL_SETBGCOLOR = 6; { Set background color. } + ACCEL_SETTRANSPARENCY = 7; { Set transparency mode. } + ACCEL_SETRASTEROP = 8; { Set raster-operation. } + ACCEL_PUTBITMAP = 9; { Color-expand bitmap. } + ACCEL_SCREENCOPYBITMAP = 10; { Color-exand from screen. } + ACCEL_DRAWHLINELIST = 11; { Draw horizontal spans. } + ACCEL_SETMODE = 12; { Set blit strategy. } + ACCEL_SYNC = 13; { Wait for blits to finish. } + + { Corresponding bitmask. } + ACCELFLAG_FILLBOX = $1; { Simple solid fill. } + ACCELFLAG_SCREENCOPY = $2; { Simple screen-to-screen BLT. } + ACCELFLAG_PUTIMAGE = $4; { Straight image transfer. } + ACCELFLAG_DRAWLINE = $8; { General line draw. } + ACCELFLAG_SETFGCOLOR = $10; { Set foreground color. } + ACCELFLAG_SETBGCOLOR = $20; { Set background color. } + ACCELFLAG_SETTRANSPARENCY = $40; { Set transparency mode. } + ACCELFLAG_SETRASTEROP = $80; { Set raster-operation. } + ACCELFLAG_PUTBITMAP = $100; { Color-expand bitmap. } + ACCELFLAG_SCREENCOPYBITMAP = $200; { Color-exand from screen. } + ACCELFLAG_DRAWHLINELIST = $400; { Draw horizontal spans. } + ACCELFLAG_SETMODE = $800; { Set blit strategy. } + ACCELFLAG_SYNC = $1000; { Wait for blits to finish. } + + { Mode for SetTransparency. } + DISABLE_TRANSPARENCY_COLOR = 0; + ENABLE_TRANSPARENCY_COLOR = 1; + DISABLE_BITMAP_TRANSPARENCY = 2; + ENABLE_BITMAP_TRANSPARENCY = 3; + + { Flags for SetMode (accelerator interface). } + BLITS_SYNC = 0; + BLITS_IN_BACKGROUND = $1; + + { Raster ops. } + ROP_COPY = 0; { Straight copy. } + ROP_OR = 1; { Source OR destination. } + ROP_AND = 2; { Source AND destination. } + ROP_XOR = 3; { Source XOR destination. } + ROP_INVERT = 4; { Invert destination. } + +const + { chipsets } + UNDEFINED = 0; + VGA = 1; + ET4000 = 2; + CIRRUS = 3; + TVGA8900 = 4; + OAK = 5; + EGA = 6; + S3 = 7; + ET3000 = 8; + MACH32 = 9; + GVGA6400 = 10; + ARK = 11; + ATI = 12; + ALI = 13; + MACH64 = 14; + + { Hor. sync: } + MON640_60 = 0; { 31.5 KHz (standard VGA) } + MON800_56 = 1; { 35.1 KHz (old SVGA) } + MON1024_43I = 2; { 35.5 KHz (low-end SVGA, 8514) } + MON800_60 = 3; { 37.9 KHz (SVGA) } + MON1024_60 = 4; { 48.3 KHz (SVGA non-interlaced) } + MON1024_70 = 5; { 56.0 KHz (SVGA high frequency) } + MON1024_72 = 6; + +{ + * valid values for what ( | is valid to combine them ) + (vga_waitevent values) + } + VGA_MOUSEEVENT = 1; + VGA_KEYEVENT = 2; + + +type + pvga_modeinfo = ^vga_modeinfo; + vga_modeinfo = record + width, + height, + bytesperpixel, + colors, + linewidth, { scanline width in bytes } + maxlogicalwidth, { maximum logical scanline width } + startaddressrange, { changeable bits set } + maxpixels, { video memory / bytesperpixel } + haveblit, { mask of blit functions available } + flags: Longint; { other flags } + + { Extended fields: } + + chiptype, { Chiptype detected } + memory, { videomemory in KB } + linewidth_unit: Longint; { Use only a multiple of this as parameter for set_logicalwidth and + set_displaystart } + linear_aperture: PChar; { points to mmap secondary mem aperture of card (NULL if unavailable) } + aperture_size: Longint; { size of aperture in KB if size>=videomemory. 0 if unavail } + set_aperture_page: procedure (page: Longint); + { if aperture_size<videomemory select a memory page } + extensions: Pointer; { points to copy of eeprom for mach32 } + { depends from actual driver/chiptype.. etc. } + end; + shutdown_routine_ptr = procedure; + +var + graph_mem: PChar; + +Function vga_setmode(mode: Longint): Longint; cdecl; external; +Function vga_hasmode(mode: Longint): Boolean; cdecl; external; +Function vga_setflipchar(c: Longint): Longint; cdecl; external; + +Function vga_clear: Longint; cdecl; external; +Function vga_flip: Longint; cdecl; external; + +Function vga_getxdim: Longint; cdecl; external; +Function vga_getydim: Longint; cdecl; external; +Function vga_getcolors: Longint; cdecl; external; + +Function vga_setpalette(index: Longint; red: Longint; green: Longint; blue: Longint): Longint; cdecl; external; +Function vga_getpalette(index: Longint; var red: Longint; var green: Longint; var blue: Longint): Longint; cdecl; external; +Function vga_setpalvec(start: Longint; num: Longint; var pal): Longint; cdecl; external; +Function vga_getpalvec(start: Longint; num: Longint; var pal): Longint; cdecl; external; + +Function vga_screenoff: Longint; cdecl; external; +Function vga_screenon: Longint; cdecl; external; + +Function vga_setcolor(color: Longint): Longint; cdecl; external; +Function vga_drawpixel(x, y: Longint): Longint; cdecl; external; +Function vga_drawline(x1, y1, x2, y2: Longint): Longint; cdecl; external; +Function vga_drawscanline(line: Longint; var colors): Longint; cdecl; external; +Function vga_drawscansegment(var colors; x, y: Longint; length: Longint): Longint; cdecl; external; +Function vga_getpixel(x, y: Longint): Longint; cdecl; external; +Function vga_getscansegment(var colors; x, y: Longint; length: Longint): Longint; cdecl; external; + +Function vga_getch: Longint; cdecl; external; + +Function vga_dumpregs: Longint; cdecl; external; + + +Function vga_getmodeinfo(mode: Longint): pvga_modeinfo; cdecl; external; +Function vga_getdefaultmode: Longint; cdecl; external; +Function vga_getcurrentmode: Longint; cdecl; external; +Function vga_getcurrentchipset: Longint; cdecl; external; +Function vga_getmodename(mode: Longint): PChar; cdecl; external; +Function vga_getmodenumber(name: PChar): Longint; cdecl; external; +Function vga_lastmodenumber: Longint; cdecl; external; + +Function vga_getgraphmem: PChar; cdecl; external; + +Procedure vga_setpage(p: Longint); cdecl; external; +Procedure vga_setreadpage(p: Longint); cdecl; external; +Procedure vga_setwritepage(p: Longint); cdecl; external; +Procedure vga_setlogicalwidth(w: Longint); cdecl; external; +Procedure vga_setdisplaystart(a: Longint); cdecl; external; +Procedure vga_waitretrace; cdecl; external; +Function vga_claimvideomemory(n: Longint): Longint; cdecl; external; +Procedure vga_disabledriverreport; cdecl; external; +Function vga_setmodeX: Longint; cdecl; external; +Function vga_init: Longint; { Used to return void in svgalib <= 1.12. } cdecl; external; +Function vga_getmousetype: Longint; cdecl; external; +Function vga_getmonitortype: Longint; cdecl; external; +Procedure vga_setmousesupport(s: Longint); cdecl; external; +Procedure vga_lockvc; cdecl; external; +Procedure vga_unlockvc; cdecl; external; +Function vga_getkey: Longint; cdecl; external; +Procedure vga_runinbackground(s: Longint); cdecl; external; +Function vga_oktowrite: Longint; cdecl; external; +Procedure vga_copytoplanar256(virtualp: PChar; pitch: Longint; + voffset: Longint; vpitch: Longint; w: Longint; h: Longint);cdecl; external; +Procedure vga_copytoplanar16(virtualp: PChar; pitch, voffset, vpitch, w, h: Longint); cdecl; external; +Procedure vga_copytoplane(virtualp: PChar; pitch, voffset, vpitch, w, h, plane: Longint); cdecl; external; +Function vga_setlinearaddressing: Longint; cdecl; external; +Procedure vga_safety_fork(shutdown_routine: shutdown_routine_ptr); cdecl; external; + +Procedure vga_setchipset(c: Longint); cdecl; external; +Procedure vga_setchipsetandfeatures(c: Longint; par1: Longint; par2: Longint); cdecl; external; +Procedure vga_gettextfont(font: Pointer); cdecl; external; +Procedure vga_puttextfont(font: Pointer); cdecl; external; +Procedure vga_settextmoderegs(regs: Pointer); cdecl; external; +Procedure vga_gettextmoderegs(regs: Pointer); cdecl; external; + +Function vga_white: Longint; cdecl; external; +Function vga_setegacolor(c: Longint): Longint; cdecl; external; +Function vga_setrgbcolor(r, g, b: Longint): Longint; cdecl; external; + +Procedure vga_bitblt(srcaddr, destaddr: Longint; w, h: Longint; pitch: Longint); cdecl; external; +Procedure vga_imageblt(srcaddr: Pointer; destaddr: Longint; w, h, pitch: Longint); cdecl; external; +Procedure vga_fillblt(destaddr: Longint; w, h, pitch, c: Longint); cdecl; external; +Procedure vga_hlinelistblt(ymin, n: Longint; var xmin, xmax: Longint; pitch, c: Longint); cdecl; external; +Procedure vga_blitwait; cdecl; external; + +{ + The following Functions are not implemented, because they use variable number cdecl; external; + of arguments +int vga_ext_set(unsigned what,...); +int vga_accel(unsigned operation,...); +} + +{ + * wait for keypress, mousemove, I/O, timeout. cf. select (3) for details on + * all parameters execept which. + * NULL is a valid argument for any of the ptrs. + } + +type + fd_set = array [1..32] of Longint; + timeval = record + tv_sec, tv_usec: Longint; + end; + +Function vga_waitevent(which: Longint; var inp, outp, excp: fd_set; + timeout: timeval): Longint;cdecl; external; + +{ + * return value >= has bits set for mouse/keyboard events detected. + * mouse and raw keyboard events are already handled and their bits removed + * from *in when vga_waitevent returns. + * VGA_KEYEVENT relates to vga_getch NOT vga_getkey. + * return values < 0 signal errors. In this case check errno. + } + +{ This part has been added by Matthias K"oppe <mkoeppe@csmd.cs.uni-magdeburg.de>. + It reflects the content of `vgagl.h'. + } + +const + CONTEXT_VIRTUAL = 0; + CONTEXT_PAGED = 1; + CONTEXT_LINEAR = 2; + CONTEXT_MODEX = 3; + CONTEXT_PLANAR16 = 4; + +const + MODEFLAG_PAGEFLIPPING_CAPABLE = $01; + MODEFLAG_TRIPLEBUFFERING_CAPABLE = $02; + MODEFLAG_PAGEFLIPPING_ENABLED = $04; + MODEFLAG_TRIPLEBUFFERING_ENABLED = $08; + MODEFLAG_FLIPPAGE_BANKALIGNED = $10; + MODEFLAG_32BPP_SHIFT8 = $20; + MODEFLAG_24BPP_REVERSED = $20; + +type + PGraphicsContext = ^TGraphicsContext; + TGraphicsContext = record + ModeType: Byte; + ModeFlags: Byte; + Dummy: Byte; + FlipPage: Byte; + Width: LongInt; + Height: LongInt; + BytesPerPixel: LongInt; + Colors: LongInt; + BitsPerPixel: LongInt; + ByteWidth: LongInt; + VBuf: pointer; + Clip: LongInt; + ClipX1: LongInt; + ClipY1: LongInt; + ClipX2: LongInt; + ClipY2: LongInt; + ff: pointer; + end; + +{ Configuration +} +Function gl_setcontextvga(m: LongInt): LongInt; cdecl; external; +Function gl_setcontextvgavirtual(m: LongInt): LongInt; cdecl; external; +Procedure gl_setcontextvirtual(w, h, bpp, bitspp: LongInt; vbuf: pointer); cdecl; external; +Procedure gl_setcontextwidth(w: LongInt); cdecl; external; +Procedure gl_setcontextheight(h: LongInt); cdecl; external; +Function gl_allocatecontext: PGraphicsContext; cdecl; external; +Procedure gl_setcontext(gc: PGraphicsContext); cdecl; external; +Procedure gl_getcontext(gc: PGraphicsContext); cdecl; external; +Procedure gl_freecontext(gc: PGraphicsContext); cdecl; external; + +{ Line drawing +} +Procedure gl_setpixel(x, y, c: LongInt); cdecl; external; +Procedure gl_setpixelrgb(x, y, r, g, b: LongInt); cdecl; external; +Function gl_getpixel(x, y: LongInt): LongInt; cdecl; external; +Procedure gl_getpixelrgb(x, y: LongInt; var r, g, b: LongInt); cdecl; external; +Function gl_rgbcolor(r, g, b: LongInt): LongInt; cdecl; external; +Procedure gl_hline(x1, y, x2, c: LongInt); cdecl; external; +Procedure gl_line(x1, y1, x2, y2, c: LongInt); cdecl; external; +Procedure gl_circle(x, y, r, c: LongInt ); cdecl; external; + +{ Box (bitmap) Functions cdecl; external; +} +Procedure gl_fillbox(x, y, w, h, c: LongInt); cdecl; external; +Procedure gl_getbox(x, y, w, h: LongInt; dp: pointer); cdecl; external; +Procedure gl_putbox(x, y, w, h: LongInt; dp: pointer); cdecl; external; +Procedure gl_putboxpart(x, y, w, h, bw, bh: LongInt; b: pointer; xo, yo: LongInt); cdecl; external; +Procedure gl_putboxmask(x, y, w, h: LongInt; dp: pointer); cdecl; external; +Procedure gl_copybox(x1, y1, w, h, x2, y2: LongInt); cdecl; external; +Procedure gl_copyboxtocontext(x1, y1, w, h: LongInt; var gc: TGraphicsContext; x2, y2: LongInt); cdecl; external; +Procedure gl_copyboxfromcontext(var gc: TGraphicsContext; x1, y1, w, h, x2, y2: LongInt); cdecl; external; +{ The following Functions only work in 256-color modes: } +Procedure gl_compileboxmask(w, h: LongInt; sdp, dpp: pointer); cdecl; external; +Function gl_compiledboxmasksize(w, h: LongInt; sdp: pointer): LongInt; cdecl; external; +Procedure gl_putboxmaskcompiled(x, y, w, h: LongInt; dp: pointer); cdecl; external; + +{ Miscellaneous + } + +Procedure gl_clearscreen(c: LongInt); cdecl; external; +Procedure gl_scalebox(w1, h1: LongInt; sb: pointer; w2, h2: LongInt; db: pointer); cdecl; external; +Procedure gl_setdisplaystart(x, y: LongInt); cdecl; external; +Procedure gl_enableclipping; cdecl; external; +Procedure gl_setclippingwindow(x1, y1, x2, y2: LongInt); cdecl; external; +Procedure gl_disableclipping; cdecl; external; + +{ Screen buffering +} + +Procedure gl_copyscreen(var gc: TGraphicsContext); cdecl; external; +Procedure gl_setscreenoffset(o: LongInt); cdecl; external; +Function gl_enablepageflipping(var gc: TGraphicsContext): LongInt; cdecl; external; + +{ Text + } + +{ Writemode flags. + } +const + WRITEMODE_OVERWRITE = 0; + WRITEMODE_MASKED = 1; + FONT_EXPANDED = 0; + FONT_COMPRESSED = 2; + +Procedure gl_expandfont(fw, fh, c: LongInt; sfdp, dfdp: pointer); cdecl; external; +Procedure gl_setfont(fw, fh: LongInt; fdp: pointer); cdecl; external; +Procedure gl_colorfont(fw, fh, c: LongInt; fdp: pointer); cdecl; external; +Procedure gl_setwritemode(wm: LongInt); cdecl; external; +Procedure gl_write(x, y: LongInt; s: PChar); cdecl; external; +Procedure gl_writen(x, y, n: LongInt; s: PChar); cdecl; external; +Procedure gl_setfontcolors(bg, fg: LongInt); cdecl; external; + +{extern unsigned char *gl_font8x8; /* compressed 8x8 font */} + +type + TRGB = record + red, green, blue: Byte + end; +type + TRGBPalette = array[0..255] of TRGB; + +Procedure gl_setpalettecolor(c, r, b, g: LongInt); cdecl; external; +Procedure gl_getpalettecolor(c: LongInt; var r, b, g: LongInt); cdecl; external; +Procedure gl_setpalettecolors(s, n: LongInt; dp: pointer); cdecl; external; +Procedure gl_getpalettecolors(s, n: LongInt; dp: pointer); cdecl; external; +Procedure gl_setpalette(p: pointer); cdecl; external; +Procedure gl_getpalette(p: pointer); cdecl; external; +Procedure gl_setrgbpalette; cdecl; external; + +Procedure gl_font8x8; { ACTUALLY A DATA POINTER } cdecl; external; + +implementation + + +end. |