home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume8 / gnuplot1.10A / part03 / pc.trm < prev    next >
Encoding:
Text File  |  1989-09-09  |  15.2 KB  |  970 lines

  1. #ifdef __TURBOC__
  2. #include <graphics.h>
  3. #include <dos.h>
  4. #include <string.h>
  5.   int g_driver, g_mode, g_error;
  6.   char far *path;
  7.   char *pathp, path_s[128];
  8.  
  9. get_path()
  10. {
  11.    path=getenv("BGI");
  12.    if (path==NULL) {
  13.       strcpy(path_s,_argv[0]);
  14.       pathp=strrchr(path_s,'\\');
  15.       *pathp=0x00;
  16.       path=path_s;
  17.    }
  18. }
  19.  
  20. #endif
  21.  
  22. /* all of the Turbo C routines for the different graphics devices go here */
  23.  
  24. #define EGALIB_XMAX 640
  25. #define EGALIB_YMAX 350
  26.  
  27. #define EGALIB_XLAST (EGA_XMAX - 1)
  28. #define EGALIB_YLAST (EGA_YMAX - 1)
  29.  
  30. #define EGALIB_VCHAR 14
  31. #define EGALIB_HCHAR 8
  32. #define EGALIB_VTIC 4
  33. #define EGALIB_HTIC 5
  34.  
  35. static int ega64color[] =  {1,1,5,4,3,5,4,3, 5, 4, 3, 5, 4, 3,5};
  36. static int ega256color[] = {1,8,2,3,4,5,9,14,12,15,13,10,11,7,6};
  37.  
  38. static int *egacolor;
  39.  
  40. static char near buf[80];    /* kludge since EGA.LIB is compiled SMALL */
  41.  
  42. static int pattern[] = {0xffff, 0x0f0f, 0xffff, 0xaaaa, 0x3333, 0x3f3f, 0x0f0f};
  43.  
  44. static int graphics_on = FALSE;
  45. int startx, starty;
  46.  
  47. pause()                                /* press any key to continue... */
  48. {
  49.     while (kbhit())
  50.         (void) getch();                /* flush the keyboard buffer */
  51.     while (!kbhit())
  52.         ;
  53. }
  54.  
  55.  
  56. PC_lrput_text(row,str)
  57. int row;
  58. char str[];
  59. {
  60. #ifdef __TURBOC__
  61.     gotoxy(78-strlen(str),24-row);
  62.     puts(str);
  63. #else
  64.     PC_curloc(24-row,78-strlen(str));
  65.     PC_puts(str);
  66. #endif
  67. }
  68.  
  69. PC_ulput_text(row,str)
  70. int row;
  71. char str[];
  72. {
  73. #ifdef __TURBOC__
  74.     gotoxy(2,row+1);
  75.     puts(str);
  76. #else
  77.     PC_curloc(row+1,2);
  78.     PC_puts(str);
  79. #endif
  80. }
  81.  
  82. PC_text()
  83. {
  84.     if (graphics_on) {
  85.         graphics_on = FALSE;
  86.         pause();
  87.     }
  88. #ifdef __TURBOC__
  89.     closegraph();
  90. #else
  91.     Vmode(3);
  92. #endif
  93. }
  94.  
  95. PC_reset()
  96. {
  97. #ifdef __TURBOC__
  98.     closegraph();
  99. #endif
  100. }
  101.  
  102.  
  103. #ifdef __TURBOC__ 
  104.  
  105. #define VGA_XMAX 640
  106. #define VGA_YMAX 480
  107.  
  108. #define VGA_XLAST (VGA_XMAX - 1)
  109. #define VGA_YLAST (VGA_YMAX - 1)
  110.  
  111. #define VGA_VCHAR 14
  112. #define VGA_HCHAR 8
  113. #define VGA_VTIC 4
  114. #define VGA_HTIC 5
  115.  
  116. static int vga256color[] = {1,8,2,3,4,5,9,14,12,15,13,10,11,7,6};
  117.  
  118. static int *vgacolor;
  119.  
  120. VGA_init()
  121. {
  122.     g_driver=VGA;
  123.     g_mode=2;
  124.         initgraph(&g_driver,&g_mode,path);
  125.         if(g_driver!=9){
  126.           term=0;
  127.           switch (g_driver){
  128.             case -2: fprintf(stderr,"Graphics card not detected.\n");
  129.                      break;
  130.             case -3: fprintf(stderr,"BGI driver file cannot be found.\n");
  131.                      break;
  132.             case -4: fprintf(stderr,"Invalid BGI driver file.\n");
  133.                      break;
  134.             case -5: fprintf(stderr,"Insufficient memory to load ",
  135.                              "graphics driver.");
  136.                      break;
  137.             }
  138.             
  139. /*          int_error("color EGA board not found",NO_CARET);*/
  140.         }
  141.         if(g_driver==VGA) vgacolor=vga256color;
  142. }
  143.  
  144. VGA_graphics()
  145. {       g_driver=VGA;
  146.     g_mode=2;
  147.     graphics_on = TRUE;
  148.     initgraph(&g_driver,&g_mode,path);
  149. }
  150.  
  151. VGA_linetype(linetype)
  152. {
  153.     if (linetype >= 13)
  154.         linetype %= 13;
  155.     setcolor(vgacolor[linetype+2]);
  156. }
  157.  
  158. VGA_lrput_text(row,str)
  159. int row;
  160. char str[];
  161. {
  162.     strcpy((char far *)buf,str);
  163.     outtextxy(630-(strlen(str)*8),450-row*16,buf);
  164. }
  165.  
  166. #define VGA_reset EGALIB_reset
  167. #define VGA_text EGALIB_text
  168. #define VGA_move EGALIB_move
  169. #define VGA_vector EGALIB_vector
  170. #define VGA_ulput_text EGALIB_ulput_text
  171.  
  172. VGAMONO_linetype(linetype)
  173. {
  174.     if (linetype >= 5)
  175.         linetype %= 5;
  176.     setlinestyle(4,pattern[linetype+2],1);
  177. }
  178.  
  179. #define MCGA_XMAX 640
  180. #define MCGA_YMAX 480
  181.  
  182. #define MCGA_XLAST (MCGA_XMAX - 1)
  183. #define MCGA_YLAST (MCGA_YMAX - 1)
  184.  
  185. #define MCGA_VCHAR 14
  186. #define MCGA_HCHAR 8
  187. #define MCGA_VTIC 4
  188. #define MCGA_HTIC 5
  189.  
  190. static int *MCGAcolor;
  191.  
  192. MCGA_init()
  193. {
  194.     g_driver=MCGA;
  195.     g_mode=5;
  196.         initgraph(&g_driver,&g_mode,path);
  197.         if(g_driver!=2){
  198.           term=0;
  199.           switch (g_driver){
  200.             case -2: fprintf(stderr,"Graphics card not detected.\n");
  201.                      break;
  202.             case -3: fprintf(stderr,"BGI driver file cannot be found.\n");
  203.                      break;
  204.             case -4: fprintf(stderr,"Invalid BGI driver file.\n");
  205.                      break;
  206.             case -5: fprintf(stderr,"Insufficient memory to load ",
  207.                              "graphics driver.");
  208.                      break;
  209.             }
  210.             
  211.         }
  212. }
  213.  
  214. MCGA_graphics()
  215. {       g_driver=MCGA;
  216.     g_mode=5;
  217.     graphics_on = TRUE;
  218.     initgraph(&g_driver,&g_mode,path);
  219. }
  220.  
  221.  
  222. MCGA_lrput_text(row,str)
  223. int row;
  224. char str[];
  225. {
  226.     strcpy((char far *)buf,str);
  227.     outtextxy(630-(strlen(str)*8),450-row*16,buf);
  228. }
  229.  
  230. #define MCGA_reset EGALIB_reset
  231. #define MCGA_text EGALIB_text
  232. #define MCGA_move EGALIB_move
  233. #define MCGA_vector EGALIB_vector
  234. #define MCGA_ulput_text EGALIB_ulput_text
  235.  
  236. MCGA_linetype(linetype)
  237. {
  238.     if (linetype >= 5)
  239.         linetype %= 5;
  240.     setlinestyle(4,pattern[linetype+2],1);
  241. }
  242.  
  243.  
  244. EGALIB_init()
  245. {
  246.     g_driver=EGA;
  247.     g_mode=1;
  248.         initgraph(&g_driver,&g_mode,path);
  249.         if(g_driver<3 || g_driver>4){
  250.           term=0;
  251.           switch (g_driver){
  252.             case -2: fprintf(stderr,"Graphics card not detected.\n");
  253.                      break;
  254.             case -3: fprintf(stderr,"BGI driver file cannot be found.\n");
  255.                      break;
  256.             case -4: fprintf(stderr,"Invalid BGI driver file.\n");
  257.                      break;
  258.             case -5: fprintf(stderr,"Insufficient memory to load ",
  259.                              "graphics driver.");
  260.                      break;
  261.             }
  262.             
  263. /*          int_error("color EGA board not found",NO_CARET);*/
  264.         }
  265.         if(g_driver==EGA) egacolor=ega256color;
  266.         if(g_driver==EGA64) egacolor=ega64color;
  267. }
  268.  
  269. EGALIB_graphics()
  270. {
  271.     graphics_on = TRUE;
  272.     initgraph(&g_driver,&g_mode,path);
  273. }
  274.  
  275. EGALIB_text()
  276. {
  277.     if (graphics_on) {
  278.         graphics_on = FALSE;
  279.         pause();
  280.     }
  281.     closegraph();
  282. }
  283.  
  284. EGALIB_linetype(linetype)
  285. {
  286.     if (linetype >= 13)
  287.         linetype %= 13;
  288.     setcolor(egacolor[linetype+2]);
  289. }
  290.  
  291. EGALIB_move(x,y)
  292. {
  293.         moveto(x,getmaxy()-y);
  294. }
  295.  
  296.  
  297. EGALIB_vector(x,y)
  298. {
  299.     lineto(x,getmaxy()-y);
  300. }
  301.  
  302.  
  303. EGALIB_lrput_text(row,str)
  304. int row;
  305. char str[];
  306. {
  307.     strcpy((char far *)buf,str);
  308.     outtextxy(630-(strlen(str)*8),320-row*16,buf);
  309. }
  310.  
  311. EGALIB_ulput_text(row,str)
  312. int row;
  313. char str[];
  314. {
  315.     strcpy((char far *)buf,str);
  316.     outtextxy(10,row*16+16,buf);
  317. }
  318.  
  319. EGALIB_reset()
  320. {
  321.       closegraph();
  322. }
  323.  
  324. #define CGA_XMAX 640
  325. #define CGA_YMAX 200
  326.  
  327. #define CGA_XLAST (CGA_XMAX - 1)
  328. #define CGA_YLAST (CGA_YMAX - 1)
  329.  
  330. #define CGA_VCHAR 8
  331. #define CGA_HCHAR 8
  332. #define CGA_VTIC 2
  333. #define CGA_HTIC 3
  334.  
  335. CGA_init()
  336. {
  337.     g_driver=CGA;
  338.     g_mode=4;
  339.     initgraph(&g_driver,&g_mode,path);
  340.           switch (g_driver){
  341.             case -2: fprintf(stderr,"Graphics card not detected.\n");
  342.                      break;
  343.             case -3: fprintf(stderr,"BGI driver file cannot be found.\n");
  344.                      break;
  345.             case -4: fprintf(stderr,"Invalid BGI driver file.\n");
  346.                      break;
  347.             case -5: fprintf(stderr,"Insufficient memory to load ",
  348.                              "graphics driver.");
  349.                      break;
  350.             }
  351. /*    PC_color(1);         monochrome */
  352.  
  353. }
  354.  
  355. CGA_graphics()
  356. {
  357.     graphics_on = TRUE;
  358.     g_driver=CGA;
  359.     g_mode=4;
  360.     initgraph(&g_driver,&g_mode,path);
  361.     /*    Vmode(6);*/
  362. }
  363.  
  364. #define CGA_text PC_text
  365.  
  366. CGA_linetype(linetype)
  367. {
  368.     if (linetype >= 5)
  369.         linetype %= 5;
  370. /*    PC_mask(pattern[linetype+2]); */
  371.     setlinestyle(4,pattern[linetype+2],1);
  372. }
  373.  
  374. CGA_move(x,y)
  375. {
  376.     moveto(x,y);
  377. }
  378.  
  379.  
  380. CGA_vector(x,y)
  381. {
  382.     lineto(x,y);
  383. }
  384.  
  385. #define CGA_lrput_text PC_lrput_text
  386. #define CGA_ulput_text PC_ulput_text
  387.  
  388.  
  389. #define CGA_reset PC_reset
  390.  
  391. #define HERC_XMAX 720
  392. #define HERC_YMAX 348
  393.  
  394. #define HERC_XLAST (HERC_XMAX - 1)
  395. #define HERC_YLAST (HERC_YMAX - 1)
  396.  
  397. #define HERC_VCHAR 8
  398. #define HERC_HCHAR 8
  399. #define HERC_VTIC 4
  400. #define HERC_HTIC 4
  401.  
  402. HERC_init()
  403. {
  404.     g_driver=HERCMONO;
  405.     g_mode=0;
  406.       initgraph(&g_driver,&g_mode,path);
  407.           switch (g_driver){
  408.             case -2: fprintf(stderr,"Graphics card not detected.\n");
  409.                      break;
  410.             case -3: fprintf(stderr,"BGI driver file cannot be found.\n");
  411.                      break;
  412.             case -4: fprintf(stderr,"Invalid BGI driver file.\n");
  413.                      break;
  414.             case -5: fprintf(stderr,"Insufficient memory to load ",
  415.                              "graphics driver.");
  416.                      break;
  417.             }
  418. }
  419.  
  420. HERC_graphics()
  421. {
  422.     g_driver=HERCMONO;
  423.     g_mode=0;
  424.     initgraph(&g_driver,&g_mode,path);
  425.     graphics_on = TRUE;
  426. }
  427.  
  428. HERC_text()
  429. {
  430.     if (graphics_on) {
  431.         graphics_on = FALSE;
  432.         pause();
  433.     }
  434.     closegraph();
  435. }
  436.  
  437. HERC_linetype(linetype)
  438. {
  439.     if (linetype >= 5)
  440.         linetype %= 5;
  441.  
  442.     setlinestyle(linetype,0,1);
  443. }
  444.  
  445. HERC_move(x,y)
  446. {
  447.     if (x < 0)
  448.         x = 0;
  449.     else if (x > HERC_XLAST)
  450.         x = HERC_XLAST;
  451.  
  452.     if (y < 0)
  453.         y = 0;
  454.     else if (y > HERC_YLAST)
  455.         y = HERC_YLAST;
  456.     moveto(x,y);
  457. }
  458.  
  459. HERC_vector(x,y)
  460. {
  461.     if (x < 0)
  462.         x = 0;
  463.     else if (x > HERC_XLAST)
  464.         x = HERC_XLAST;
  465.     if (y < 0)
  466.         y = 0;
  467.     else if (y > HERC_YLAST)
  468.         y = HERC_YLAST;
  469.  
  470.     lineto(x,y);
  471. }
  472.  
  473. /*
  474.    Thanks to James Dugal (jpd@usl.edu) for patching these two HERC 
  475.    routines.  (We need to remove the OLD (probably bad) code someday.)
  476. */
  477.  
  478. HERC_lrput_text(row,str)
  479. int row;
  480. char str[];
  481. {
  482. #ifdef OLDHERC
  483.     gotoxy(79-strlen(str),24-row);
  484.     puts(str);
  485. #else
  486.     strcpy((char far *)buf,str);
  487.     outtextxy(710-(strlen(str)*8),318-row*10,buf);
  488. #endif
  489. }
  490.  
  491. HERC_ulput_text(row,str)
  492. int row;
  493. char str[];
  494. {
  495. #ifdef OLDHERC
  496.     gotoxy(2,row+1);
  497.     puts(str);
  498. #else
  499.     strcpy((char far *)buf,str);
  500.     outtextxy(10,row*10+10,buf);
  501. #endif
  502. }
  503.  
  504. #define HERC_reset PC_reset
  505.  
  506.  
  507. #else
  508.  
  509. pause()                                /* press any key to continue... */
  510. {
  511.     while (kbhit())
  512.         (void) getch();                /* flush the keyboard buffer */
  513.     while (!kbhit())
  514.         ;
  515. }
  516.  
  517.  
  518. PC_lrput_text(row,str)
  519. int row;
  520. char str[];
  521. {
  522.     PC_curloc(24-row,78-strlen(str));
  523.     PC_puts(str);
  524. }
  525.  
  526. PC_ulput_text(row,str)
  527. int row;
  528. char str[];
  529. {
  530.     PC_curloc(row+1,2);
  531.     PC_puts(str);
  532. }
  533.  
  534. PC_text()
  535. {
  536.     if (graphics_on) {
  537.         graphics_on = FALSE;
  538.         pause();
  539.     }
  540.     Vmode(3);
  541. }
  542.  
  543. PC_reset()
  544. {
  545. }
  546. #define CGA_XMAX 640
  547. #define CGA_YMAX 200
  548.  
  549. #define CGA_XLAST (CGA_XMAX - 1)
  550. #define CGA_YLAST (CGA_YMAX - 1)
  551.  
  552. #define CGA_VCHAR 8
  553. #define CGA_HCHAR 8
  554. #define CGA_VTIC 2
  555. #define CGA_HTIC 3
  556.  
  557. CGA_init()
  558. {
  559.     PC_color(1);        /* monochrome */
  560. }
  561.  
  562. CGA_graphics()
  563. {
  564.     graphics_on = TRUE;
  565.     Vmode(6);
  566. }
  567.  
  568. #define CGA_text PC_text
  569.  
  570. CGA_linetype(linetype)
  571. {
  572.     if (linetype >= 5)
  573.         linetype %= 5;
  574.     PC_mask(pattern[linetype+2]);
  575. }
  576.  
  577. CGA_move(x,y)
  578. {
  579.     startx = x;
  580.     starty = y;
  581. }
  582.  
  583.  
  584. CGA_vector(x,y)
  585. {
  586.     PC_line(startx,CGA_YLAST-starty,x,CGA_YLAST-y);
  587.     startx = x;
  588.     starty = y;
  589. }
  590.  
  591. #define CGA_lrput_text PC_lrput_text
  592. #define CGA_ulput_text PC_ulput_text
  593.  
  594.  
  595. #define CGA_reset PC_reset
  596.  
  597.  
  598. #define EGA_XMAX 640
  599. #define EGA_YMAX 350
  600.  
  601. #define EGA_XLAST (EGA_XMAX - 1)
  602. #define EGA_YLAST (EGA_YMAX - 1)
  603.  
  604. #define EGA_VCHAR 14
  605. #define EGA_HCHAR 8
  606. #define EGA_VTIC 5
  607. #define EGA_HTIC 5
  608.  
  609. static int ega64color[] =  {1,1,5,4,3,5,4,3, 5, 4, 3, 5, 4, 3,5};
  610. static int ega256color[] = {1,8,2,3,4,5,9,14,12,15,13,10,11,7,6};
  611.  
  612. static int *egacolor;
  613.  
  614.  
  615. EGA_init()
  616. {
  617.     PC_mask(0xffff);
  618.     egacolor = ega256color;        /* should be smarter */
  619. }
  620.  
  621. EGA_graphics()
  622. {
  623.     graphics_on = TRUE;
  624.     Vmode(16);
  625. }
  626.  
  627. #define EGA_text PC_text
  628.  
  629. EGA_linetype(linetype)
  630. {
  631.     if (linetype >= 13)
  632.         linetype %= 13;
  633.     PC_color(egacolor[linetype+2]);
  634. }
  635.  
  636. EGA_move(x,y)
  637. {
  638.     startx = x;
  639.     starty = y;
  640. }
  641.  
  642. EGA_vector(x,y)
  643. {
  644.     PC_line(startx,EGA_YLAST-starty,x,EGA_YLAST-y);
  645.     startx = x;
  646.     starty = y;
  647. }
  648.  
  649. #define EGA_lrput_text PC_lrput_text
  650. #define EGA_ulput_text PC_ulput_text
  651.  
  652.  
  653. #define EGA_reset PC_reset
  654.  
  655.  
  656.  
  657. #ifdef EGALIB
  658.  
  659. #define EGALIB_XMAX 640
  660. #define EGALIB_YMAX 350
  661.  
  662. #define EGALIB_XLAST (EGA_XMAX - 1)
  663. #define EGALIB_YLAST (EGA_YMAX - 1)
  664.  
  665. #define EGALIB_VCHAR 14
  666. #define EGALIB_HCHAR 8
  667. #define EGALIB_VTIC 4
  668. #define EGALIB_HTIC 5
  669.  
  670. #include "mcega.h"
  671.  
  672. EGALIB_init()
  673. {
  674.     GPPARMS();
  675.     if (GDTYPE != 5) {
  676.         term = 0;
  677.         int_error("color EGA board not found",NO_CARET);
  678.     }
  679.     egacolor = (GDMEMORY < 256) ? ega64color : ega256color;
  680. }
  681.  
  682. EGALIB_graphics()
  683. {
  684.     graphics_on = TRUE;
  685.     GPINIT();
  686. }
  687.  
  688. EGALIB_text()
  689. {
  690.     if (graphics_on) {
  691.         graphics_on = FALSE;
  692.         pause();
  693.     }
  694.     GPTERM();
  695. }
  696.  
  697. EGALIB_linetype(linetype)
  698. {
  699.     if (linetype >= 13)
  700.         linetype %= 13;
  701.     GPCOLOR(egacolor[linetype+2]);
  702. }
  703.  
  704. EGALIB_move(x,y)
  705. {
  706.     GPMOVE(x,GDMAXROW-y);
  707. }
  708.  
  709.  
  710. EGALIB_vector(x,y)
  711. {
  712.     GPLINE(x,GDMAXROW-y);
  713. }
  714.  
  715.  
  716. EGALIB_lrput_text(row,str)
  717. int row;
  718. char str[];
  719. {
  720.     strcpy((char far *)buf,str);
  721.     GotoXY(78-strlen(str),24-row);
  722.     gprintf(buf);
  723. }
  724.  
  725. EGALIB_ulput_text(row,str)
  726. int row;
  727. char str[];
  728. {
  729.     strcpy((char far *)buf,str);
  730.     GotoXY(2,row+1);
  731.     gprintf(buf);
  732. }
  733.  
  734. #define EGALIB_reset PC_reset
  735.  
  736. #endif /* EGALIB */
  737.  
  738.  
  739. #ifdef HERCULES
  740.  
  741. #define HERC_XMAX 720
  742. #define HERC_YMAX 348
  743.  
  744. #define HERC_XLAST (HERC_XMAX - 1)
  745. #define HERC_YLAST (HERC_YMAX - 1)
  746.  
  747. #define HERC_VCHAR 8
  748. #define HERC_HCHAR 8
  749. #define HERC_VTIC 4
  750. #define HERC_HTIC 4
  751.  
  752.  
  753. HERC_init()
  754. {
  755. }
  756.  
  757. HERC_graphics()
  758. {
  759.     HVmode(1);
  760.     graphics_on = TRUE;
  761. }
  762.  
  763. HERC_text()
  764. {
  765.     if (graphics_on) {
  766.         graphics_on = FALSE;
  767.         pause();
  768.     }
  769.     HVmode(0);
  770. }
  771.  
  772. HERC_linetype(linetype)
  773. {
  774.     if (linetype >= 5)
  775.         linetype %= 5;
  776.     H_mask(pattern[linetype+2]);
  777. }
  778.  
  779. HERC_move(x,y)
  780. {
  781.     if (x < 0)
  782.         startx = 0;
  783.     else if (x > HERC_XLAST)
  784.         startx = HERC_XLAST;
  785.     else
  786.         startx = x;
  787.  
  788.     if (y < 0)
  789.         starty = 0;
  790.     else if (y > HERC_YLAST)
  791.         starty = HERC_YLAST;
  792.     else
  793.         starty = y;
  794. }
  795.  
  796. HERC_vector(x,y)
  797. {
  798.     if (x < 0)
  799.         x = 0;
  800.     else if (x > HERC_XLAST)
  801.         x = HERC_XLAST;
  802.     if (y < 0)
  803.         y = 0;
  804.     else if (y > HERC_YLAST)
  805.         y = HERC_YLAST;
  806.  
  807.     H_line(startx,HERC_YLAST-starty,x,HERC_YLAST-y);
  808.     startx = x;
  809.     starty = y;
  810. }
  811.  
  812. HERC_lrput_text(row,str)
  813. int row;
  814. char str[];
  815. {
  816.     H_puts(str, 41-row, 87-strlen(str));
  817. }
  818.  
  819. HERC_ulput_text(row,str)
  820. int row;
  821. char str[];
  822. {
  823.     H_puts(str, row+1, 2);
  824. }
  825.  
  826. #define HERC_reset PC_reset
  827.  
  828. #endif /* HERCULES */
  829.  
  830.  
  831. /* thanks to sask!macphed (Geoff Coleman and Ian Macphedran) for the
  832.    ATT 6300 driver */ 
  833.  
  834.  
  835. #ifdef ATT6300
  836.  
  837. #define ATT_XMAX 640
  838. #define ATT_YMAX 400
  839.  
  840. #define ATT_XLAST (ATT_XMAX - 1)
  841. #define ATT_YLAST (ATT_YMAX - 1)
  842.  
  843. #define ATT_VCHAR 8
  844. #define ATT_HCHAR 8
  845. #define ATT_VTIC 3
  846. #define ATT_HTIC 3
  847.  
  848. #define ATT_init CGA_init
  849.  
  850. ATT_graphics()
  851. {
  852.     graphics_on = TRUE;
  853.     Vmode(0x40);        /* 40H is the magic number for the AT&T driver */
  854. }
  855.  
  856. #define ATT_text CGA_text
  857.  
  858. #define ATT_linetype CGA_linetype
  859.  
  860. #define ATT_move CGA_move
  861.  
  862. ATT_vector(x,y)
  863. {
  864.     PC_line(startx,ATT_YLAST-starty,x,ATT_YLAST-y);
  865.     startx = x;
  866.     starty = y;
  867. }
  868.  
  869. #define ATT_lrput_text PC_lrput_text
  870. #define ATT_ulput_text PC_ulput_text
  871.  
  872.  
  873. #define ATT_reset CGA_reset
  874.  
  875. #endif  /* ATT6300 */
  876.  
  877.  
  878. #ifdef CORONA
  879.  
  880. #define COR_XMAX 640
  881. #define COR_YMAX 325
  882.  
  883. #define COR_XLAST (COR_XMAX - 1)
  884. #define COR_YLAST (COR_YMAX - 1)
  885.  
  886. #define COR_VCHAR 13
  887. #define COR_HCHAR 8
  888. #define COR_VTIC 4
  889. #define COR_HTIC 4
  890.  
  891.  
  892. static int corscreen;        /* screen number, 0 - 7 */
  893.  
  894. COR_init()
  895. {
  896. register char *p;
  897.     if (!(p = getenv("CORSCREEN")))
  898.         int_error("must run CORPLOT for Corona graphics",NO_CARET);
  899.     corscreen = *p - '0';
  900. }
  901.  
  902. COR_graphics()
  903. {
  904.     graphics_on = TRUE;
  905.     Vmode(3);                /* clear text screen */
  906.     grinit(corscreen);
  907.     grandtx();
  908. }
  909.  
  910. COR_text()
  911. {
  912.     if (graphics_on) {
  913.         graphics_on = FALSE;
  914.         pause();
  915.     }
  916.     grreset();
  917.     txonly();
  918.     Vmode(3);
  919. }
  920.  
  921. COR_linetype(linetype)
  922. {
  923.     if (linetype >= 5)
  924.         linetype %= 5;
  925.     Cor_mask(pattern[linetype+2]);
  926. }
  927.  
  928. COR_move(x,y)
  929. {
  930.     if (x < 0)
  931.         startx = 0;
  932.     else if (x > COR_XLAST)
  933.         startx = COR_XLAST;
  934.     else
  935.         startx = x;
  936.  
  937.     if (y < 0)
  938.         starty = 0;
  939.     else if (y > COR_YLAST)
  940.         starty = COR_YLAST;
  941.     else
  942.         starty = y;
  943. }
  944.  
  945. COR_vector(x,y)
  946. {
  947.     if (x < 0)
  948.         x = 0;
  949.     else if (x > COR_XLAST)
  950.         x = COR_XLAST;
  951.     if (y < 0)
  952.         y = 0;
  953.     else if (y > COR_YLAST)
  954.         y = COR_YLAST;
  955.  
  956.     Cor_line(startx,COR_YLAST-starty,x,COR_YLAST-y);
  957.     startx = x;
  958.     starty = y;
  959. }
  960.  
  961. #define COR_lrput_text PC_lrput_text
  962. #define COR_ulput_text PC_ulput_text
  963.  
  964. #define COR_reset PC_reset
  965.  
  966. #endif /* CORONA */
  967.  
  968. #endif /* __TURBOC__ */
  969.  
  970.