(* Release 3.10 *) (*-------------------------------------------------------------------------* * * * GRAPHICS.DEF - Modula-2 interface to BGI graphics * * * * COPYRIGHT (C) 1989..1992 Clarion Software Corporation. * * All Rights Reserved * * * *--------------------------------------------------------------------------*) (*# project("#set cgraph='borland'") *) (*# call(o_a_size=>off, o_a_copy=>off, c_conv=>on, result_optional=>on, reg_param=>(), reg_saved=>(di,si,ds,st1,st2), near_call=>off) *) (*# data(near_ptr=>off) *) (*# module(implementation=>off, init_code=>off) *) (*# name(prefix=>c) *) DEFINITION MODULE graphics; CONST (* Error Codes From graphresult *) grOk = 0; grNoInitGraph = -1; grNotDetected = -2; grFileNotFound = -3; grInvalidDriver = -4; grNoLoadMem = -5; grNoScanMem = -6; grNoFloodMem = -7; grFontNotFound = -8; grNoFontMem = -9; grInvalidMode = -10; grError = -11; grIOerror = -12; grInvalidFont = -13; grInvalidFontNum = -14; grInvalidVersion = -18; (* Graphics Drivers *) DETECT = 0; (* autodetect *) CGA = 1; MCGA = 2; EGA = 3; EGA64 = 4; EGAMONO = 5; IBM8514 = 6; HERCMONO = 7; ATT400 = 8; VGA = 9; PC3270 = 10; CURRENT_DRIVER = -1; (* default *) (* Graphics Modes For Each Driver *) CGAC0 = 0; (* 320x200 palette 0; 1 page *) CGAC1 = 1; (* 320x200 palette 1; 1 page *) CGAC2 = 2; (* 320x200 palette 2: 1 page *) CGAC3 = 3; (* 320x200 palette 3; 1 page *) CGAHI = 4; (* 640x200 1 page *) MCGAC0 = 0; (* 320x200 palette 0; 1 page *) MCGAC1 = 1; (* 320x200 palette 1; 1 page *) MCGAC2 = 2; (* 320x200 palette 2; 1 page *) MCGAC3 = 3; (* 320x200 palette 3; 1 page *) MCGAMED = 4; (* 640x200 1 page *) MCGAHI = 5; (* 640x480 1 page *) EGALO = 0; (* 640x200 16 color 4 pages *) EGAHI = 1; (* 640x350 16 color 2 pages *) EGA64LO = 0; (* 640x200 16 color 1 page *) EGA64HI = 1; (* 640x350 4 color 1 page *) EGAMONOHI = 0; (* 640x350 64K on card, 1 page - 256K on card, 4 pages *) HERCMONOHI = 0; (* 720x348 2 pages *) ATT400C0 = 0; (* 320x200 palette 0; 1 page *) ATT400C1 = 1; (* 320x200 palette 1; 1 page *) ATT400C2 = 2; (* 320x200 palette 2; 1 page *) ATT400C3 = 3; (* 320x200 palette 3; 1 page *) ATT400MED = 4; (* 640x200 1 page *) ATT400HI = 5; (* 640x400 1 page *) VGALO = 0; (* 640x200 16 color 4 pages *) VGAMED = 1; (* 640x350 16 color 2 pages *) VGAHI = 2; (* 640x480 16 color 1 page *) PC3270HI = 0; (* 720x350 1 page *) IBM8514LO = 0; (* 640x480 256 colors *) IBM8514HI = 1; (* 1024x768 256 colors *) CGA_LIGHTGREEN = 1; (* Palette C0 Color Names *) CGA_LIGHTRED = 2; CGA_YELLOW = 3; CGA_LIGHTCYAN = 1; (* Palette C1 Color Names *) CGA_LIGHTMAGENTA = 2; CGA_WHITE = 3; CGA_GREEN = 1; (* Palette C2 Color Names *) CGA_RED = 2; CGA_BROWN = 3; CGA_CYAN = 1; (* Palette C3 Color Names *) CGA_MAGENTA = 2; CGA_LIGHTGRAY = 3; EGA_BLACK = 0; (* dark colors *) EGA_BLUE = 1; EGA_GREEN = 2; EGA_CYAN = 3; EGA_RED = 4; EGA_MAGENTA = 5; EGA_BROWN = 20; EGA_LIGHTGRAY = 7; EGA_DARKGRAY = 56; (* light colors *) EGA_LIGHTBLUE = 57; EGA_LIGHTGREEN = 58; EGA_LIGHTCYAN = 59; EGA_LIGHTRED = 60; EGA_LIGHTMAGENTA = 61; EGA_YELLOW = 62; EGA_WHITE = 63; (* Line Widths for get/setlinestyle *) NORM_WIDTH = 1; THICK_WIDTH = 3; HORIZ_DIR = 0; (* left to right *) VERT_DIR = 1; (* bottom to top *) USER_CHAR_SIZE = 0; (* user-defined char size *) (* Horizontal and Vertical Justification for settextjustify *) LEFT_TEXT = 0; CENTER_TEXT = 1; RIGHT_TEXT = 2; BOTTOM_TEXT = 0; TOP_TEXT = 2; MAXCOLORS = 15; TYPE (* Colors For Setpalette and Setallpalette *) COLORS = (BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,LIGHTGRAY,(* dark colors *) DARKGRAY,LIGHTBLUE,LIGHTGREEN,LIGHTCYAN,LIGHTRED,LIGHTMAGENTA,YELLOW,WHITE); (* light colors *) (* Linestyles for get/setlinestyle *) line_styles = (SOLID_LINE,DOTTED_LINE,CENTER_LINE,DASHED_LINE,USERBIT_LINE); font_names = (DEFAULT_FONT, (* 8x8 bit mapped font *) TRIPLEX_FONT, (* "Stroked" fonts *) SMALL_FONT, SANS_SERIF_FONT, GOTHIC_FONT); (* Fill Patterns for get/setfillstyle *) fill_patterns = (EMPTY_FILL, (* fills area in background color *) SOLID_FILL, (* fills area in solid fill color *) LINE_FILL, (* --- fill *) LTSLASH_FILL, (* /// fill *) SLASH_FILL, (* /// fill with thick lines *) BKSLASH_FILL, (* \\\ fill with thick lines *) LTBKSLASH_FILL, (* \\\ fill *) HATCH_FILL, (* light hatch fill *) XHATCH_FILL, (* heavy cross hatch fill *) INTERLEAVE_FILL, (* interleaving line fill *) WIDE_DOT_FILL, (* Widely spaced dot fill *) CLOSE_DOT_FILL, (* Closely spaced dot fill *) USER_FILL); (* user defined fill *) (* BitBlt Operators For putimage *) putimage_ops = (COPY_PUT, (* MOV *) XOR_PUT, (* XOR *) OR_PUT, (* OR *) AND_PUT, (* AND *) NOT_PUT); (* NOT *) palettetype_p = POINTER TO palettetype; palettetype = RECORD size : SHORTCARD; colors : ARRAY[0..MAXCOLORS]OF SHORTINT; END; linesettingstype = RECORD linestyle : INTEGER; upattern : CARDINAL; thickness : INTEGER; END; textsettingstype = RECORD font : INTEGER; direction : INTEGER; charsize : INTEGER; horiz : INTEGER; vert : INTEGER; END; fillsettingstype = RECORD pattern : INTEGER; color : INTEGER; END; pointtype = RECORD x : INTEGER; y : INTEGER; END; viewporttype = RECORD left,top, right,bottom, clip : INTEGER; END; arccoordstype = RECORD x,y, xstart,ystart, xend,yend : INTEGER; END; driverproc = PROCEDURE():INTEGER; VAR CGA_driver_far : driverproc; EGAVGA_driver_far : driverproc; IBM8514_driver_far : driverproc; Herc_driver_far : driverproc; ATT_driver_far : driverproc; PC3270_driver_far : driverproc; triplex_font_far : PROC; small_font_far : PROC; sansserif_font_far : PROC; gothic_font_far : PROC; PROCEDURE arc(x,y,stangle,endandle,radius:INTEGER); PROCEDURE bar(left,top,right,bottom:INTEGER); PROCEDURE bar3d(left,top,right,bottom,depth,topflag:INTEGER); PROCEDURE circle(x,y,radius:INTEGER); PROCEDURE cleardevice; PROCEDURE clearviewport; PROCEDURE closegraph; PROCEDURE detectgraph(VAR graphdriver,graphmode:INTEGER); PROCEDURE drawpoly(numpoints:INTEGER;VAR polypoints:INTEGER); PROCEDURE ellipse(x,y,stangle,endangle,xradius,yradius:INTEGER); PROCEDURE fillellipse(x,y,xradius,yradius:INTEGER); PROCEDURE fillpoly(numpoints:INTEGER;VAR polypoints:INTEGER); PROCEDURE floodfill(x,y,border:INTEGER); PROCEDURE getarccoords(VAR arccoords:arccoordstype); PROCEDURE getaspectratio(VAR xasp,yasp:INTEGER); PROCEDURE getbkcolor():INTEGER; PROCEDURE getcolor():INTEGER; PROCEDURE getdefaultpalette():palettetype_p; (* **** returns pointer to open array of char *) PROCEDURE getdrivername():ADDRESS; PROCEDURE getfillpattern(VAR pattern:fill_patterns); PROCEDURE getfillsettings(VAR fillinfo:fillsettingstype); PROCEDURE getgraphmode():INTEGER; PROCEDURE getimage(left,top,right,bottom:INTEGER;bitmap:ADDRESS); PROCEDURE getlinesettings(VAR lineinfo:linesettingstype); PROCEDURE getmaxcolor():INTEGER; PROCEDURE getmaxmode():INTEGER; PROCEDURE getmaxx():INTEGER; PROCEDURE getmaxy():INTEGER; (* **** returns pointer to open array of char *) PROCEDURE getmodename(ModeNumber:INTEGER):ADDRESS; PROCEDURE getmoderange(graphdriver:INTEGER;VAR lomode,himode:INTEGER); PROCEDURE getpixel(x,y:INTEGER):CARDINAL; PROCEDURE getpalette(VAR palette:palettetype); PROCEDURE getpalettesize():INTEGER; PROCEDURE gettextsettings(VAR texttypeinfo:textsettingstype); PROCEDURE getviewsettings(VAR viewport:viewporttype); PROCEDURE getx():INTEGER; PROCEDURE gety():INTEGER; PROCEDURE graphdefaults; (* **** returns pointer to open array of char *) PROCEDURE grapherrormsg(errorcode:INTEGER):ADDRESS; PROCEDURE _graphfreemem(ptr:ADDRESS; size:CARDINAL); PROCEDURE _graphgetmem(size:CARDINAL):ADDRESS; PROCEDURE graphresult():INTEGER; PROCEDURE imagesize(left,top,right,bottom:INTEGER):CARDINAL; PROCEDURE initgraph(VAR graphdriver,graphmode:INTEGER;pathtodriver:ARRAY OF CHAR); PROCEDURE installuserdriver(name:ARRAY OF CHAR;driver:driverproc):INTEGER; PROCEDURE installuserfont(name:ARRAY OF CHAR):INTEGER; PROCEDURE line(x1,y1,x2,y2:INTEGER); PROCEDURE linerel(dx,dy:INTEGER); PROCEDURE lineto(x,y:INTEGER); PROCEDURE moverel(dx,dy:INTEGER); PROCEDURE moveto(x,y:INTEGER); PROCEDURE outtext(textstring:ARRAY OF CHAR); PROCEDURE outtextxy(x,y:INTEGER;textstring:ARRAY OF CHAR); PROCEDURE pieslice(x,y,stangle,endangle,radius:INTEGER); PROCEDURE putimage(left,top:INTEGER;bitmap:ADDRESS;op:putimage_ops); PROCEDURE putpixel(x,y,color:INTEGER); PROCEDURE rectangle(left,top,right,bottom:INTEGER); PROCEDURE restorecrtmode; PROCEDURE sector(X,Y,StAngle,EndAngle,XRadius,YRadius:INTEGER); PROCEDURE setactivepage(page:INTEGER); PROCEDURE setallpalette(VAR palette:palettetype); PROCEDURE setaspectratio(xasp,yasp:INTEGER); PROCEDURE setbkcolor(color:INTEGER); PROCEDURE setcolor(color:INTEGER); PROCEDURE setfillpattern(VAR upattern:fill_patterns;color:INTEGER); PROCEDURE setfillstyle(pattern, color: COLORS); PROCEDURE setgraphbufsize(bufsize:CARDINAL):CARDINAL; PROCEDURE setgraphmode(mode:INTEGER); PROCEDURE setlinestyle(linestyle: INTEGER; upattern: CARDINAL; thickness: INTEGER); PROCEDURE setpalette(colornum,color:INTEGER); PROCEDURE setrgbpalette(colornum,red,green,blue:INTEGER); PROCEDURE settextjustify(horiz,vert:INTEGER); PROCEDURE settextstyle(font,direction,charsize:INTEGER); PROCEDURE setusercharsize(mustx,divx,multy,divy:INTEGER); PROCEDURE setviewport(left, top, right, bottom, clip:INTEGER); PROCEDURE setvisualpage(page:INTEGER); PROCEDURE setwritemode(mode:INTEGER); PROCEDURE textheight(textstring:ARRAY OF CHAR):INTEGER; PROCEDURE textwidth(textstring:ARRAY OF CHAR):INTEGER; PROCEDURE registerbgidriver(driver:PROC):INTEGER; PROCEDURE registerfarbgidriver(driver:PROC):INTEGER; (* These "functions" are NOT user-callable They are there just so you can link in graphics drivers *) PROCEDURE CGA_driver; PROCEDURE EGAVGA_driver; PROCEDURE IBM8514_driver; PROCEDURE Herc_driver; PROCEDURE ATT_driver; PROCEDURE PC3270_driver; PROCEDURE registerbgifont(font:PROC):INTEGER; PROCEDURE registerfarbgifont(font:PROC):INTEGER; (* These "functions" are NOT user-callable, they are there just so you can link in fonts *) PROCEDURE triplex_font; PROCEDURE small_font; PROCEDURE sansserif_font; PROCEDURE gothic_font; END graphics.