Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.74 KB | None | 0 0
  1. /*
  2. TurboC, a library for porting Borland Turbo C to GNU gcc.
  3. Copyright 2002,2010 Ronald S. Burkey
  4.  
  5. This library is free software; you can redistribute it and/or
  6. modify it under the terms of the GNU Lesser General Public
  7. License as published by the Free Software Foundation; either
  8. version 2.1 of the License, or (at your option) any later version.
  9.  
  10. This library is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  13. Lesser General Public License for more details.
  14.  
  15. You should have received a copy of the GNU Lesser General Public
  16. License along with this library; if not, write to the Free Software
  17. Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  18.  
  19. Contact Ron Burkey at info@sandroid.org.
  20.  
  21. Filename: graphics.h
  22. Purpose: Partial replacement for Borland Turbo C graphics.h.
  23. Mod history: 04/29/02 RSB Created.
  24. 05/10/02 RSB ... lotsa stuff on a continuing basis.
  25. 05/20/02 RSB Added fill-style stuff.
  26. 05/23/02 RSB Added getimage stuff.
  27. 08/28/10 RSB Now use macros for getmaxx() and
  28. getmaxy() to avoid namespace
  29. conflicts in newer Linux distros.
  30. */
  31.  
  32. #ifndef _INCLUDED_GRAPHICS_H
  33. #define _INCLUDED_GRAPHICS_H
  34.  
  35. // You may notice nested "#ifdef WITH_X". The reason for this is that
  36. // the inner "#ifdef WITH_X" are present because I felt that I might want
  37. // to implement a couple of different sets of graphics.h functions within
  38. // the TurboC library -- some using X and some not X. The outer
  39. // "#ifdef WITH_X" is there because I realized afterward that graphics.h
  40. // function sets already exist in some non-TurboC libraries (such as GRX).
  41. // So it's not unintentional. I simply haven't decided yet what's the
  42. // best way to implement alternate graphics.h libraries.
  43. #ifdef WITH_X
  44.  
  45. #include "TurboC.h"
  46. #include "conio.h"
  47.  
  48. //----------------------------------------------------------------------------
  49. // Constants.
  50.  
  51. // A conversion factor.
  52. #define RADIANS_PER_DEGREE 0.017453292
  53.  
  54. // This is the maximum number of simultaneously usable image buffers for
  55. // putimage and getimage are allowed.
  56. //#define MAX_TCIMAGEBUFS 32
  57.  
  58. // This actually a Turbo C constant (though it may look like one of mine).
  59. // It refers to the maximum color index in a Turbo C palette, and shouldn't be
  60. // messed with. It has no relationship to the TurboC library palettes.
  61. #define MAXCOLORS 15
  62.  
  63. // Colors. We protect some of them with a conditional,
  64. // because they're also defined (identically) in graphics.h, which
  65. // may or may not have already been loaded.
  66. #ifndef TC_COLORS_DEFINED
  67. #define TC_COLORS_DEFINED
  68. #define BLACK 0
  69. #define BLUE 1
  70. #define GREEN 2
  71. #define CYAN 3
  72. #define RED 4
  73. #define MAGENTA 5
  74. #define BROWN 6
  75. #define LIGHTGRAY 7
  76. #define DARKGRAY 8
  77. #define LIGHTBLUE 9
  78. #define LIGHTGREEN 10
  79. #define LIGHTCYAN 11
  80. #define LIGHTRED 12
  81. #define LIGHTMAGENTA 13
  82. #define YELLOW 14
  83. #define WHITE 15
  84. #endif // TC_COLORS_DEFINED
  85.  
  86. #define CGA_LIGHTGREEN 1
  87. #define CGA_LIGHTRED 2
  88. #define CGA_YELLOW 3
  89. #define CGA_LIGHTCYAN 1
  90. #define CGA_LIGHTMAGENTA 2
  91. #define CGA_WHITE 3
  92. #define CGA_GREEN 1
  93. #define CGA_RED 2
  94. #define CGA_BROWN 3
  95. #define CGA_CYAN 1
  96. #define CGA_MAGENTA 2
  97. #define CGA_LIGHTGRAY 3
  98.  
  99. #define EGA_BLACK 0
  100. #define EGA_BLUE 1
  101. #define EGA_GREEN 2
  102. #define EGA_CYAN 3
  103. #define EGA_RED 4
  104. #define EGA_MAGENTA 5
  105. #define EGA_BROWN 20
  106. #define EGA_LIGHTGRAY 7
  107. #define EGA_DARKGRAY 56
  108. #define EGA_LIGHTBLUE 57
  109. #define EGA_LIGHTGREEN 58
  110. #define EGA_LIGHTCYAN 59
  111. #define EGA_LIGHTRED 60
  112. #define EGA_LIGHTMAGENTA 61
  113. #define EGA_YELLOW 62
  114. #define EGA_WHITE 63
  115.  
  116. // Error codes.
  117. enum graphics_errors
  118. {
  119. grOk = 0,
  120. grNoInitGraph = -1,
  121. grNotDetected = -2,
  122. grFileNotFound = -3,
  123. grInvalidDriver = -4,
  124. grNoLoadMem = -5,
  125. grNoScanMem = -6,
  126. grNoFloodMem = -7,
  127. grFontNotFound = -8,
  128. grNoFontMem = -9,
  129. grInvalidMode = -10,
  130. grError = -11,
  131. grIOerror = -12,
  132. grInvalidFont = -13,
  133. grInvalidFontNum = -14,
  134. grInvalidDeviceNum = -15,
  135. grInvalidVersion = -18
  136. };
  137.  
  138. // Defines the allowed "graphics drivers" for initgraph. Those up through
  139. // 10 are available in Turbo C 2.0. The others are present in Borland C++
  140. // 5.0, but I don't know exactly what version they first appeared in.
  141. // Oddly, graphics.h is completely missing from the free compiler Borland C++
  142. // 5.5.
  143. #define DETECT 0
  144. #define CGA 1
  145. #define MCGA 2
  146. #define EGA 3
  147. #define EGA64 4
  148. #define EGAMONO 5
  149. #define IBM8514 6
  150. #define HERCMONO 7
  151. #define ATT400 8
  152. #define VGA 9
  153. #define PC3270 10
  154. #define VGA256 11
  155. #define ATTDEB 12
  156. #define TOSHIBA 13
  157. #define SVGA16 14
  158. #define SVGA256 15
  159. #define SVGA32K 16
  160. #define SVGA64K 17
  161. #define VESA16 18
  162. #define VESA256 19
  163. #define VESA32K 20
  164. #define VESA64K 21
  165. #define VESA16M 22
  166. #define ATI16 23
  167. #define ATI256 24
  168. #define ATI32K 25
  169. #define COMPAQ 26
  170. #define TSENG316 27
  171. #define TSENG3256 28
  172. #define TSENG416 29
  173. #define TSENG4256 30
  174. #define TSENG432K 31
  175. #define GENOA5 32
  176. #define GENOA6 33
  177. #define OAK 34
  178. #define PARADIS16 35
  179. #define PARADIS256 36
  180. #define TECMAR 37
  181. #define TRIDENT16 38
  182. #define TRIDENT256 39
  183. #define VIDEO7 40
  184. #define VIDEO7II 41
  185. #define S3 42
  186. #define ATIGUP 43
  187. #define DETECTX 256
  188.  
  189. #if defined(WITH_X)
  190.  
  191. // Here are RGB definitions of the X equivalents (I hope) for the various
  192. // Turbo C colors.
  193. #define XBLACK { 0x0000, 0x0000, 0x0000 }
  194. #define XBLUE { 0x0000, 0x0000, 0x8000 }
  195. #define XGREEN { 0x0000, 0x8000, 0x0000 }
  196. #define XCYAN { 0x0000, 0x8000, 0x8000 }
  197. #define XRED { 0x8000, 0x0000, 0x0000 }
  198. #define XMAGENTA { 0x8000, 0x0000, 0x8000 }
  199. #define XBROWN { 0x8000, 0x4000, 0x4000 }
  200. #define XLIGHTGRAY { 0xd400, 0xd400, 0xd400 }
  201. #define XDARKGRAY { 0xa800, 0xa800, 0xa800 }
  202. #define XLIGHTBLUE { 0x0000, 0x0000, 0xff00 }
  203. #define XLIGHTGREEN { 0x0000, 0xff00, 0x0000 }
  204. #define XLIGHTCYAN { 0x0000, 0xff00, 0xff00 }
  205. #define XLIGHTRED { 0xff00, 0x0000, 0x0000 }
  206. #define XLIGHTMAGENTA { 0xff00, 0x0000, 0xff00 }
  207. #define XYELLOW { 0xff00, 0xff00, 0x0000 }
  208. #define XWHITE { 0xff00, 0xff00, 0xff00 }
  209.  
  210. // Here are all of the allowed graphics modes. We encode the modes
  211. // differently (i.e., with different numerical constants) than Borland
  212. // does, but *hopefully* this won't cause any problem. This is done because
  213. // we simulate the graphics screen within X, rather than using hardware
  214. // modes of the graphics controller. We define a set of allowed x-resolutions,
  215. // y-resolutions, graphics-page counts, and palettes, and the modes are
  216. // any combination of these.
  217. //
  218. // The constants beginning TC_xxxx are used only for *defining* the
  219. // constants actually used by Turbo C. If desirable, we can add new
  220. // TC_xxxx constants later -- say, to go up to resolutions of 1600x1200 --
  221. // as long as the number of x-resolutions times the number of y-resolutions,
  222. // times the number of pages, times the number of palettes remains
  223. // less than 65536.
  224.  
  225. // x-resolutions.
  226. #define TC_X_320 0
  227. #define TC_X_640 1
  228. #define TC_X_720 2
  229. #define TC_X_800 3
  230. #define TC_X_1024 4
  231. #define TC_X_1280 5
  232. #define TCX 6 // Number of x-resolutions.
  233.  
  234. // y-resolutions.
  235. #define TC_Y_200 0
  236. #define TC_Y_348 1
  237. #define TC_Y_350 2
  238. #define TC_Y_400 3
  239. #define TC_Y_480 4
  240. #define TC_Y_600 5
  241. #define TC_Y_768 6
  242. #define TC_Y_1024 7
  243. #define TCY 8 // Number of y-resolutions.
  244. #define TCXY (TCX*TCY)
  245.  
  246. // graphics-page counts.
  247. #define TC_PG_1 0
  248. #define TC_PG_2 1
  249. #define TC_PG_4 2
  250. #define TCG 3 // Number of page-counts.
  251. #define TCXYG (TCX*TCY*TCG)
  252.  
  253. // palettes. I don't actually know
  254. // which palettes are used for the so-called "extended" modes associated
  255. // with drivers 11 and up, so I give it the special name TC_PAL_X.
  256. #define TC_PAL_2 0
  257. #define TC_PAL_C0 1
  258. #define TC_PAL_C1 2
  259. #define TC_PAL_C2 3
  260. #define TC_PAL_C3 4
  261. #define TC_PAL_4 5
  262. #define TC_PAL_16 6
  263. #define TC_PAL_256 7
  264. // #define TC_PAL_X TC_PAL_256
  265. #define TCP 8 // Number of palettes.
  266. #define TCXYGP (TCX*TCY*TCG*TCP)
  267.  
  268. // Okay, here are the actual constants used within Turbo C programs.
  269. // These are *not* the exact numbers used in true Borland Turbo C,
  270. // so programs that hard-code these numbers rather than using the
  271. // Borland-supplied constants are going to be in trouble. (Too bad
  272. // for them, I say.)
  273. //
  274. // Since it may not be obvious why the values are encoded the way they
  275. // are -- instead, say, of providing a simple 4-bit field for each of
  276. // the 4 values being encoded (x-resolution, y-resolution, number of
  277. // graphics pages, and palette type) -- the reason has entirely to do
  278. // with the Turbo C getmoderange function. This function pre-supposes
  279. // that the allowable graphics modes for any given graphics driver are
  280. // in a range of integer values. This requires that there be no *gaps*
  281. // in the sequence, so that if we give a ranges of modes from n to n+N,
  282. // every one of the intervening values represents a legal mode. By
  283. // encoding the modes in the way we have, all of the gaps are closed
  284. // up, and every value from 0 to TCXYGP-1 is a legal mode -- though
  285. // not necessarily one which has been assigned a symbolic name below.
  286. //
  287. // Note that if we add new possibilities later -- say, 1600x1200 --
  288. // then the values of the constants below could differ in different
  289. // versions of the TurboC library.
  290. #define CGAC0 (TC_X_320 + TCX*TC_Y_200 + TCXY*TC_PG_1 + TCXYG*TC_PAL_C0)
  291. #define CGAC1 (TC_X_320 + TCX*TC_Y_200 + TCXY*TC_PG_1 + TCXYG*TC_PAL_C1)
  292. #define CGAC2 (TC_X_320 + TCX*TC_Y_200 + TCXY*TC_PG_1 + TCXYG*TC_PAL_C2)
  293. #define CGAC3 (TC_X_320 + TCX*TC_Y_200 + TCXY*TC_PG_1 + TCXYG*TC_PAL_C3)
  294. #define CGAHI (TC_X_640 + TCX*TC_Y_200 + TCXY*TC_PG_1 + TCXYG*TC_PAL_2)
  295. #define MCGAC0 (TC_X_320 + TCX*TC_Y_200 + TCXY*TC_PG_1 + TCXYG*TC_PAL_C0)
  296. #define MCGAC1 (TC_X_320 + TCX*TC_Y_200 + TCXY*TC_PG_1 + TCXYG*TC_PAL_C1)
  297. #define MCGAC2 (TC_X_320 + TCX*TC_Y_200 + TCXY*TC_PG_1 + TCXYG*TC_PAL_C2)
  298. #define MCGAC3 (TC_X_320 + TCX*TC_Y_200 + TCXY*TC_PG_1 + TCXYG*TC_PAL_C3)
  299. #define MCGAMED (TC_X_640 + TCX*TC_Y_200 + TCXY*TC_PG_1 + TCXYG*TC_PAL_2)
  300. #define MCGAHI (TC_X_640 + TCX*TC_Y_480 + TCXY*TC_PG_1 + TCXYG*TC_PAL_2)
  301. #define EGALO (TC_X_640 + TCX*TC_Y_200 + TCXY*TC_PG_4 + TCXYG*TC_PAL_16)
  302. #define EGAHI (TC_X_640 + TCX*TC_Y_350 + TCXY*TC_PG_2 + TCXYG*TC_PAL_16)
  303. #define EGA64LO (TC_X_640 + TCX*TC_Y_200 + TCXY*TC_PG_1 + TCXYG*TC_PAL_16)
  304. #define EGA64HI (TC_X_640 + TCX*TC_Y_350 + TCXY*TC_PG_1 + TCXYG*TC_PAL_4)
  305. #define EGAMONOHI (TC_X_640 + TCX*TC_Y_350 + TCXY*TC_PG_2 + TCXYG*TC_PAL_2)
  306. #define HERCMONOHI (TC_X_720 + TCX*TC_Y_348 + TCXY*TC_PG_2 + TCXYG*TC_PAL_2)
  307. #define ATT400C0 (TC_X_320 + TCX*TC_Y_200 + TCXY*TC_PG_1 + TCXYG*TC_PAL_C0)
  308. #define ATT400C1 (TC_X_320 + TCX*TC_Y_200 + TCXY*TC_PG_1 + TCXYG*TC_PAL_C1)
  309. #define ATT400C2 (TC_X_320 + TCX*TC_Y_200 + TCXY*TC_PG_1 + TCXYG*TC_PAL_C2)
  310. #define ATT400C3 (TC_X_320 + TCX*TC_Y_200 + TCXY*TC_PG_1 + TCXYG*TC_PAL_C3)
  311. #define ATT400MED (TC_X_640 + TCX*TC_Y_200 + TCXY*TC_PG_1 + TCXYG*TC_PAL_2)
  312. #define ATT400HI (TC_X_640 + TCX*TC_Y_480 + TCXY*TC_PG_1 + TCXYG*TC_PAL_2)
  313. #define VGALO (TC_X_640 + TCX*TC_Y_200 + TCXY*TC_PG_2 + TCXYG*TC_PAL_16)
  314. #define VGAMED (TC_X_640 + TCX*TC_Y_350 + TCXY*TC_PG_2 + TCXYG*TC_PAL_16)
  315. #define VGAHI (TC_X_640 + TCX*TC_Y_480 + TCXY*TC_PG_1 + TCXYG*TC_PAL_16)
  316. #define PC3270HI (TC_X_720 + TCX*TC_Y_350 + TCXY*TC_PG_1 + TCXYG*TC_PAL_2)
  317. #define IBM8514LO (TC_X_640 + TCX*TC_Y_480 + TCXY*TC_PG_1 + TCXYG*TC_PAL_256)
  318. #define IBM8514HI (TC_X_1024 + TCX*TC_Y_768 + TCXY*TC_PG_1 + TCXYG*TC_PAL_256)
  319. //#define RES640x350 (TC_X_640 + TCX*TC_Y_350 + TCXY*TC_PG_1 + TCXYG*PC_PAL_X)
  320. //#define RES640x480 (TC_X_640 + TCX*TC_Y_480 + TCXY*TC_PG_1 + TCXYG*PC_PAL_X)
  321. //#define RES800x600 (TC_X_800 + TCX*TC_Y_600 + TCXY*TC_PG_1 + TCXYG*PC_PAL_X)
  322. //#define RES1024x768 (TC_X_1024 + TCX*TC_Y_768 + TCXY*TC_PG_1 + TCXYG*PC_PAL_X)
  323. //#define RES1280x1024 (TC_X_1280 + 0x10*TC_Y_1024 + TCXY*TC_PG_1 + TCXYG*PC_PAL_X)
  324.  
  325. #endif // defined(WITH_X)
  326.  
  327. // Write-modes.
  328. #define COPY_PUT 0
  329. #define XOR_PUT 1
  330. #define OR_PUT 2
  331. #define AND_PUT 3
  332. #define NOT_PUT 4
  333.  
  334. // Line-style stuff.
  335. #define SOLID_LINE 0
  336. #define DOTTED_LINE 1
  337. #define CENTER_LINE 2
  338. #define DASHED_LINE 3
  339. #define USERBIT_LINE 4
  340. #define NORM_WIDTH 1
  341. #define THICK_WIDTH 3
  342.  
  343. enum font_names
  344. {
  345. DEFAULT_FONT = 0,
  346. TRIPLEX_FONT = 1,
  347. SMALL_FONT = 2,
  348. SANS_SERIF_FONT = 3,
  349. GOTHIC_FONT = 4,
  350. SCRIPT_FONT = 5,
  351. SIMPLEX_FONT = 6,
  352. TRIPLEX_SCR_FONT = 7,
  353. COMPLEX_FONT = 8,
  354. EUROPEAN_FONT = 9,
  355. BOLD_FONT = 10,
  356. MAX_FONT = 11
  357. };
  358.  
  359. // Text directions.
  360. #define HORIZ_DIR 0
  361. #define VERT_DIR 1
  362.  
  363. // Text justification.
  364. #define LEFT_TEXT 0
  365. #define BOTTOM_TEXT 0
  366. #define CENTER_TEXT 1
  367. #define RIGHT_TEXT 2
  368. #define TOP_TEXT 2
  369.  
  370. // Fill styles.
  371. #define EMPTY_FILL 0
  372. #define SOLID_FILL 1
  373. #define LINE_FILL 2
  374. #define LTSLASH_FILL 3
  375. #define SLASH_FILL 4
  376. #define BKSLASH_FILL 5
  377. #define LTBKSLASH_FILL 6
  378. #define HATCH_FILL 7
  379. #define XHATCH_FILL 8
  380. #define INTERLEAVE_FILL 9
  381. #define WIDE_DOT_FILL 10
  382. #define CLOSE_DOT_FILL 11
  383. #define USER_FILL 12
  384.  
  385. //----------------------------------------------------------------------------
  386. // Data types.
  387.  
  388. // A little toy of my own.
  389. typedef struct
  390. {
  391. gint r, g, b;
  392. }
  393. RgbStruct;
  394.  
  395. // The following are all datatypes defined by true Turbo C.
  396.  
  397. struct arccoordstype
  398. {
  399. int x, y;
  400. int xstart, ystart, xend, yend;
  401. };
  402.  
  403. struct palettetype
  404. {
  405. guchar size;
  406. gschar colors[MAXCOLORS + 1];
  407. };
  408.  
  409. struct fillsettingstype
  410. {
  411. int pattern;
  412. int color;
  413. };
  414.  
  415. struct linesettingstype
  416. {
  417. int linestyle;
  418. unsigned upattern;
  419. int thickness;
  420. };
  421.  
  422. struct textsettingstype
  423. {
  424. int font;
  425. int direction;
  426. int charsize;
  427. int horiz;
  428. int vert;
  429. };
  430.  
  431. struct viewporttype
  432. {
  433. int left, top, right, bottom;
  434. int clip;
  435. };
  436.  
  437. // This is the structure which holds data for the getimage/putimage
  438. // functions. It is not used explicitly (or even defined) by true Turbo C
  439. // but it's convenient for us to define it! We keep a pool of these
  440. // in an array (TcImageBuffers).
  441. #ifdef WITH_X
  442. struct TcImageBuffer
  443. {
  444. gushort Width;
  445. gushort Height;
  446. Pixmap Handle;
  447. };
  448. #endif // WITH_X
  449.  
  450. //----------------------------------------------------------------------------
  451. // Function prototypes.
  452.  
  453. __BEGIN_DECLS
  454.  
  455. //
  456. extern void arc (int x, int y, int stangle, int endangle, int radius);
  457. extern void bar (int left, int top, int right, int bottom);
  458. extern void bar3d (int left, int top, int right, int bottom,
  459. int depth, int topflag);
  460. extern void circle (int x, int y, int radius);
  461. extern void cleardevice (void);
  462. extern void clearviewport (void);
  463. extern void closegraph (void);
  464. extern void detectgraph (int *graphdriver, int *graphmode);
  465. extern void drawpoly (int numpoints, int *polypoints);
  466. extern void ellipse (int x, int y, int stangle, int endangle,
  467. int xradius, int yradius);
  468. extern void fillellipse (int x, int y, int xradius, int yradius);
  469. extern void fillpoly (int numpoints, int *polypoints);
  470. extern void floodfill (int x, int y, int border);
  471. extern void getarccoords (struct arccoordstype *arccoords);
  472. extern void getaspectratio (int *xasp, int *yasp);
  473. extern int getbkcolor (void);
  474. extern int getcolor (void);
  475. extern const struct palettetype *getdefaultpalette (void);
  476. extern const char *getdrivername (void);
  477. extern void getfillpattern (char *pattern);
  478. extern void getfillsettings (struct fillsettingstype *fillinfo);
  479. extern int getgraphmode (void);
  480. extern void getimage (int left, int top, int right, int bottom, void *bitmap);
  481. //extern void freeimage (void *bitmap);
  482. extern void getlinesettings (struct linesettingstype *lineinfo);
  483. extern int getmaxcolor (void);
  484. extern int getmaxmode (void);
  485. #ifdef getmaxx
  486. #undef getmaxx
  487. #endif
  488. extern int turboc_getmaxx (void);
  489. #define getmaxx() turboc_getmaxx()
  490. #ifdef getmaxy
  491. #undef getmaxy
  492. #endif
  493. extern int turboc_getmaxy (void);
  494. #define getmaxy() turboc_getmaxy()
  495. extern char *getmodename (int mode_number);
  496. extern void getmoderange (int graphdriver, int *lomode, int *himode);
  497. extern unsigned getpixel (int x, int y);
  498. extern void getpalette (struct palettetype *palette);
  499. extern int getpalettesize (void);
  500. extern void gettextsettings (struct textsettingstype *texttypeinfo);
  501. extern void getviewsettings (struct viewporttype *viewport);
  502. extern int getx (void);
  503. extern int gety (void);
  504. extern void graphdefaults (void);
  505. extern void TcGraphDefaults (void);
  506. extern int TcDefaultColors (int Pal);
  507. extern char *grapherrormsg (int errorcode);
  508. extern void _graphfreemem (void *ptr, unsigned size);
  509. extern void *_graphgetmem (unsigned size);
  510. extern int graphresult (void);
  511. extern unsigned imagesize (int left, int top, int right, int bottom);
  512. extern void initgraph (int *graphdriver, int *graphmode, char *pathtodriver);
  513. extern int installuserdriver (char *name, int (*detect) (void));
  514. extern int installuserfont (char *name);
  515. extern void line (int x1, int y1, int x2, int y2);
  516. extern void linerel (int dx, int dy);
  517. extern void lineto (int x, int y);
  518. extern void moverel (int dx, int dy);
  519. extern void moveto (int x, int y);
  520. extern void outtext (char *textstring);
  521. extern void outtextxy (int x, int y, char *textstring);
  522. extern void pieslice (int x, int y, int stangle, int endangle, int radius);
  523. extern void putimage (int left, int top, void *bitmap, int op);
  524. extern void putpixel (int x, int y, int color);
  525. extern void rectangle (int left, int top, int right, int bottom);
  526. extern int registerbgidriver (void (*driver) (void));
  527. extern int registerbgifont (void (*font) (void));
  528. extern void restorecrtmode (void);
  529. extern void sector (int X, int Y, int StAngle, int EndAngle,
  530. int XRadius, int YRadius);
  531. extern void setactivepage (int page);
  532. extern void setallpalette (struct palettetype *palette);
  533. extern void setaspectratio (int xasp, int yasp);
  534. extern void setbkcolor (int color);
  535. extern void setcolor (int color);
  536. extern void setfillpattern (char *upattern, int color);
  537. extern void setfillstyle (int pattern, int color);
  538. extern unsigned setgraphbufsize (unsigned bufsize);
  539. extern void setgraphmode (int mode);
  540. extern void setlinestyle (int linestyle, unsigned upattern, int thickness);
  541. extern void setpalette (int colornum, int color);
  542. extern void setrgbpalette (int colornum, int red, int green, int blue);
  543. extern void settextjustify (int horiz, int vert);
  544. extern void settextstyle (int font, int direction, int charsize);
  545. extern void setusercharsize (int multx, int divx, int multy, int divy);
  546. extern void setviewport (int left, int top, int right, int bottom, int clip);
  547. extern void setvisualpage (int page);
  548. extern void setwritemode (int mode);
  549. extern int textheight (char *textstring);
  550. extern int textwidth (char *textstring);
  551.  
  552. // Non-user-callable functions. Really, just names for use as function
  553. // parameters in the registerbgidriver and registerbgifont functions.
  554. extern void CGA_driver (void);
  555. extern void EGAVGA_driver (void);
  556. extern void IBM8514_driver (void);
  557. extern void Herc_driver (void);
  558. extern void ATT_driver (void);
  559. extern void PC3270_driver (void);
  560. extern void triplex_font (void);
  561. extern void small_font (void);
  562. extern void sansserif_font (void);
  563. extern void gothic_font (void);
  564.  
  565. __END_DECLS
  566. //--------------------------------------------------------------------------
  567. // Variables.
  568. #ifdef TURBOC_VARIABLES_C
  569. volatile int TcGraphicsInitialized = 0;
  570. int TcCurrentGraphMode, TcGraphResult = grOk;
  571. int TcXresolution, TcYresolution, TcPageCount, TcPaletteNum;
  572. int TcDriver, TcVisualPage = 0, TcActivePage = 0;
  573. int TcForegroundColor, TcBackgroundColor, TcDriver;
  574. int TcViewLeft, TcViewTop, TcViewRight, TcViewBottom, TcViewClip;
  575. int Tcx, Tcy, TcViewMaxx, TcViewMaxy;
  576. int TcLastArcX = 0, TcLastArcY = 0, TcLastStangle = 0;
  577. int TcLastEndangle = 0, TcLastRadius = 0;
  578. int TcWritemode = 0, TcTextHoriz = 0, TcTextVert = 0;
  579. struct linesettingstype TcLinestyle = { SOLID_LINE, 0xffff, NORM_WIDTH };
  580. RgbStruct TcColors[256];
  581. const RgbStruct TcColors2[2] = { XBLACK, XWHITE };
  582. const RgbStruct TcColorsC0[4] = { XBLACK, XLIGHTGREEN, XLIGHTRED, XYELLOW };
  583. const RgbStruct TcColorsC1[4] = { XBLACK, XLIGHTCYAN, XLIGHTMAGENTA, XWHITE };
  584. const RgbStruct TcColorsC2[4] = { XBLACK, XGREEN, XRED, XBROWN };
  585. const RgbStruct TcColorsC3[4] = { XBLACK, XCYAN, XMAGENTA, XLIGHTGRAY };
  586. const RgbStruct TcColors4[4] = { XBLACK, XDARKGRAY, XLIGHTGRAY, XWHITE };
  587. const RgbStruct TcColors16[16] = {
  588. XBLACK, XBLUE, XGREEN, XCYAN, XRED, XMAGENTA, XBROWN, XLIGHTGRAY,
  589. XDARKGRAY, XLIGHTBLUE, XLIGHTGREEN, XLIGHTCYAN, XLIGHTRED, XLIGHTMAGENTA,
  590. XYELLOW, XWHITE
  591. };
  592. const struct palettetype TcDefaultPalette2 = { 2, {BLACK, WHITE} };
  593. const struct palettetype TcDefaultPaletteC0 =
  594. { 4, {BLACK, LIGHTGREEN, LIGHTRED, YELLOW} };
  595. const struct palettetype TcDefaultPaletteC1 =
  596. { 4, {BLACK, LIGHTCYAN, LIGHTMAGENTA, WHITE} };
  597. const struct palettetype TcDefaultPaletteC2 =
  598. { 4, {BLACK, GREEN, RED, BROWN} };
  599. const struct palettetype TcDefaultPaletteC3 =
  600. { 4, {BLACK, CYAN, MAGENTA, LIGHTGRAY} };
  601. const struct palettetype TcDefaultPalette4 =
  602. { 4, {BLACK, DARKGRAY, LIGHTGRAY, WHITE} };
  603. const struct palettetype TcDefaultPalette16 = {
  604. 16,
  605. {BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY,
  606. DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA,
  607. YELLOW, WHITE}
  608. };
  609. struct palettetype TcCurrentPalette;
  610. int TcTextFont, TcTextDirection, TcTextCharsize;
  611. int TcTextMultX, TcTextDivX, TcTextMultY, TcTextDivY;
  612. int TcFillStyle = SOLID_FILL, TcFillColor = 1;
  613. char TcUserFillPattern[8] = { 255, 255, 255, 255, 255, 255, 255, 255 };
  614. #ifdef WITH_X
  615. //struct TcPixmapPoolRecord TcPixmapPool[MAX_TCIMAGEBUFS] = { { 0 } };
  616. Display *TcDisplay;
  617. Window TcWindow;
  618. Pixmap TcPixmaps[16];
  619. gint TcScreen;
  620. GC TcGc;
  621. Colormap TcColormap;
  622. XColor TcXforeground, TcXbackground;
  623. Pixmap TcTile;
  624. #endif // WITH_X
  625. #else // TURBOC_VARIABLES_C
  626. extern volatile int TcGraphicsInitialized;
  627. extern int TcCurrentGraphMode, TcGraphResult;
  628. extern int TcXresolution, TcYresolution, TcPageCount, TcPaletteNum;
  629. extern int TcDriver, TcVisualPage, TcActivePage;
  630. extern int TcForegroundColor, TcBackgroundColor, TcDriver;
  631. extern int TcViewLeft, TcViewTop, TcViewRight, TcViewBottom, TcViewClip;
  632. extern int Tcx, Tcy, TcViewMaxx, TcViewMaxy;
  633. extern int TcLastArcX, TcLastArcY, TcLastStangle;
  634. extern int TcLastEndangle, TcLastRadius;
  635. extern int TcWritemode, TcTextHoriz, TcTextVert;
  636. extern struct linesettingstype TcLinestyle;
  637. extern RgbStruct TcColors[256];
  638. extern const RgbStruct TcColors2[2];
  639. extern const RgbStruct TcColorsC0[4];
  640. extern const RgbStruct TcColorsC1[4];
  641. extern const RgbStruct TcColorsC2[4];
  642. extern const RgbStruct TcColorsC3[4];
  643. extern const RgbStruct TcColors4[4];
  644. extern const RgbStruct TcColors16[16];
  645. extern const struct palettetype TcDefaultPalette2;
  646. extern const struct palettetype TcDefaultPaletteC0;
  647. extern const struct palettetype TcDefaultPaletteC1;
  648. extern const struct palettetype TcDefaultPaletteC2;
  649. extern const struct palettetype TcDefaultPaletteC3;
  650. extern const struct palettetype TcDefaultPalette4;
  651. extern const struct palettetype TcDefaultPalette16;
  652. extern struct palettetype TcCurrentPalette;
  653. extern int TcTextFont, TcTextDirection, TcTextCharsize;
  654. extern int TcTextMultX, TcTextDivX, TcTextMultY, TcTextDivY;
  655. extern int TcFillStyle, TcFillColor;
  656. extern char TcUserFillPattern[8];
  657. #ifdef WITH_X
  658. //extern struct TcPixmapPoolRecord TcPixmapPool[MAX_TCIMAGEBUFS];
  659. extern Display *TcDisplay;
  660. extern Window TcWindow;
  661. extern Pixmap TcPixmaps[16];
  662. extern gint TcScreen;
  663. extern GC TcGc;
  664. extern Colormap TcColormap;
  665. extern XColor TcXforeground, TcXbackground;
  666. extern Pixmap TcTile;
  667. #endif // WITH_X
  668. #endif // TURBOC_VARIABLES_C
  669.  
  670. #else // WITH_X
  671.  
  672. #include <graphics.h>
  673.  
  674. #endif // WITH_X
  675.  
  676. #endif // _INCLUDED_GRAPHICS_H
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement