home *** CD-ROM | disk | FTP | other *** search
- /*--------------------------------------------------------------*/
- /* VT100 Driver 1.0 , for GLE V3.0 */
- /*---------------------------------------------------------------------------*/
- #include "all.h"
- #include <math.h>
- #include "core.h"
- #include "mygraph.h"
- #include "mydev.h"
- #define GS 29
- #define FF 12
- #define MAXX (130)
- #define MAXY (23)
- int screenbit[MAXX+4][MAXY+4];
- int ingraphmode;
- extern struct gmodel g;
- /*---------------------------------------------------------------------------*/
- #define pi 3.141592653
- #define true (!false)
- #define BLACKANDWHITE 1
- #define ESC 27
- #define false 0
- #define dbg if ((gle_debug & 64)>0)
- #define stop if ((gle_debug & 128)>0) return
- extern int gle_debug;
- int incap=true;
- int getch(void);
- /*---------------------------------------------------------------------------*/
- /* The global variables for the PC screen driver */
- /*-----------------------------------------------*/
-
- int i,l,j,ix,iy;
- double f;
- double devxcm=23,devycm=15.5;
- FILE *hpfile;
-
- #define gerr() i = graphresult(); if (i!=0) printf("Graph error: %s \n",grapherrormsg(i));
- #define sx(v) ( ((v) * d_xscale))
- #define sy(v) ( (((v) * d_yscale)))
- #define rx(v) ( ((v) * d_xscale))
- #define ry(v) ( (((v) * d_yscale)))
-
- double d_scale, d_xscale, d_yscale;
- int d_graphmode;
- int d_fillstyle=1,d_fillcolor;
- int d_lstyle,d_lwidth;
- char outstr[400];
-
- d_devcmd(char *s)
- {}
- /*---------------------------------------------------------------------------*/
- d_dfont(char *c)
- {
- /* only used for the DFONT driver which builds fonts */
- }
- /*---------------------------------------------------------------------------*/
- static char lastline[80];
- d_message(char *s)
- {
- static int single_step;
- int oldcolor,oldx,oldy;
- w_message(s);
- }
- /*---------------------------------------------------------------------------*/
- d_source(char *s)
- {
- s=s;
- }
- /*---------------------------------------------------------------------------*/
- d_get_type(char *t)
- {
- strcpy(t,"INTERACTIVE, VT100, VAX");
- }
- /*---------------------------------------------------------------------------*/
- d_set_path(int onoff)
- {}
- /*---------------------------------------------------------------------------*/
- d_newpath()
- {
- }
- /*---------------------------------------------------------------------------*/
- extern char output_file[];
- d_open(double width, double height)
- {
- /* Get largest rectangle we can fit on the screen */
- d_scale = devxcm / width;
- f = devycm / height;
- if (f<d_scale) d_scale = f;
- d_xscale = d_scale * MAXX / devxcm; /* Device Scale X, Device Scale y */
- d_yscale = d_scale * MAXY / devycm;
- }
- /*---------------------------------------------------------------------------*/
- d_tidyup()
- {
- }
- d_close()
- {
- int x,y;
- char oneline[200];
- int lastinv=false;
- g_flush();
-
- scr_refresh();
- printf("%c[?3h",27);
- for (y = MAXY-1;y>= 0;y--) {
- oneline[0] = 0;
- for (x=0;x<=MAXX;x++) {
- if (screenbit[x][y]==0) strcat(oneline," ");
- else strcat(oneline,"#");
- /* if (screenbit[x][y]==0) {
- if (lastinv) strcat(oneline,"\x1b[0m ");
- else strcat(oneline," ");
- lastinv = false;
- } else {
- if (!lastinv) strcat(oneline,"\x1b[7m ");
- else strcat(oneline," ");
- lastinv = true;
- }*/
- }
- printf("%s\n",oneline);
- }
- printf("\x1b[7m");
- text_inkey();
- printf("\x1b[0m");
- printf("%c[?3l",27);
- }
- /*---------------------------------------------------------------------------*/
- d_set_line_cap(int i)
- {
- i++;
- }
- /*---------------------------------------------------------------------------*/
- d_set_line_join(int i)
- {
- i++;
- }
- /*---------------------------------------------------------------------------*/
- d_set_line_miterlimit(double d)
- {
- i++;
- }
- /*---------------------------------------------------------------------------*/
- d_set_line_width(double w)
- {
- }
- /*---------------------------------------------------------------------------*/
- d_set_line_styled(double dd)
- {}
- d_set_line_style(char *s)
- {
- d_lstyle = 2;
- if (strcmp(s,"")==0) d_lstyle = 1;
- if (strcmp(s,"1")==0) d_lstyle = 1;
- }
- /*---------------------------------------------------------------------------*/
- d_fill()
- {
- }
- /*---------------------------------------------------------------------------*/
- d_fill_ary(int nwk,double (*wkx)[],double (*wky)[])
- {
- int i;
- /* fprintf(psfile,"%g %g moveto \n",(*wkx)[0],(*wky)[0]);
- for (i=1;i<nwk;i++)
- fprintf(psfile,"%g %g l \n",(*wkx)[i],(*wky)[i]);
- */
- }
- d_line_ary(int nwk,double (*wkx)[],double (*wky)[])
- {
- int i;
- /*
- g_dev( (*wkx)[0], (*wky)[0], &ix, &iy);
- moveto(ix,iy);
- for (i=1;i<nwk;i++) {
- g_dev( (*wkx)[i], (*wky)[i], &ix, &iy);
- lineto(ix,iy);
- }
- */
- }
- /*---------------------------------------------------------------------------*/
- d_stroke()
- {
- }
- /*---------------------------------------------------------------------------*/
- d_clip()
- {
- }
- /*---------------------------------------------------------------------------*/
- d_set_matrix(double newmat[3][3])
- {
- }
- /*---------------------------------------------------------------------------*/
- d_move(double zx,double zy)
- {
- }
- /*---------------------------------------------------------------------------*/
- d_reverse() /* reverse the order of stuff in the current path */
- {
- }
- /*---------------------------------------------------------------------------*/
- d_closepath()
- {
- g_line(g.closex,g.closey);
- }
- /*---------------------------------------------------------------------------*/
- int vt100line(int x1, int y1, int x2, int y2);
- int hpglxy(double xx, double yy);
- d_line(double zx,double zy)
- {
- static double ix,iy,ux,uy;
- g_dev(g.curx,g.cury,&ux,&uy);
- g_dev(zx,zy,&ix,&iy);
- vt100line(sx(ux),sy(uy),sx(ix),sy(iy));
- }
- /*---------------------------------------------------------------------------*/
- /* int screenbit[MAXX+1][MAXY+1]; */
- xxvt100line(int x1, int y1, int x2, int y2)
- {
- #define sign(x) ((x) > 0 ? 1: ((x) == 0 ? 0: (-1)))
- int dx,dy,dxabs,dyabs,i,px,py,sdx,sdy,x,y;
- if (x1<0) x1 = 0;
- if (x1>MAXX) x1 = MAXX;
- if (y1<0) y1 = 0;
- if (y1>MAXY) y1 = MAXY;
- if (x2<0) x2 = 0;
- if (x2>MAXX) x2 = MAXX;
- if (y2<0) y2 = 0;
- if (y2>MAXY) y2 = MAXY;
-
- /* line algorithym begins */
-
- dx = x2 - x1;
- dy = y2 - y1;
- sdx = sign(dx);
- sdy = sign(dy);
- dxabs = abs(dx);
- dyabs = abs(dy);
- x = 0;
- y = 0;
- px = x1;
- py = y1;
- if (dxabs >= dyabs) {
- for (i=0; i<=dxabs; i++) {
- y += dyabs;
- if (y>=dxabs) {
- y -= dxabs;
- py += sdy;
- }
- screenbit[px][py] = '#';
- px += sdx;
- }
- } else {
- for (i=0; i<=dyabs; i++) {
- x += dxabs;
- if (x>=dyabs) {
- x -= dyabs;
- px += sdx;
- }
- screenbit[px][py] = '#';
- py += sdy;
- }
- }
- }
-
- unsigned long int PATTERN = 0xFFFFFFFF;
- int LINEWIDTH=1;
-
- vt100line(int x1, int y1, int x2, int y2)
- {
- #define sign(x) ((x) > 0 ? 1: ((x) == 0 ? 0: (-1)))
- int dx, dy, dxabs, dyabs, i, j, px, py, sdx, sdy, x, y;
- unsigned long int mask=0x80000000;
-
- if (x1<0) x1 = 0;
- if (x1>MAXX) x1 = MAXX;
- if (y1<0) y1 = 0;
- if (y1>MAXY) y1 = MAXY;
- if (x2<0) x2 = 0;
- if (x2>MAXX) x2 = MAXX;
- if (y2<0) y2 = 0;
- if (y2>MAXY) y2 = MAXY;
-
- dx = x2 - x1;
- dy = y2 - y1;
- sdx = sign(dx);
- sdy = sign(dy);
- dxabs = abs(dx);
- dyabs = abs(dy);
- x = 0;
- y = 0;
- px = x1;
- py = y1;
-
-
- mask = mask ? mask : 0x80000000;
- if (PATTERN & mask)
- {
- for (j= -LINEWIDTH/2; j<=LINEWIDTH/2; j++)
- screenbit[px][py+j] = '#';
-
- }
- mask >>= 1;
-
-
- if (dxabs >= dyabs)
- {
- for (i=0; i<dxabs; i++)
- {
- mask = mask ? mask : 0x80000000;
- y += dyabs;
- if (y>=dxabs)
- {
- y -= dxabs;
- py += sdy;
- }
- px += sdx;
- if (PATTERN & mask)
- {
- for (j= -LINEWIDTH/2; j<=LINEWIDTH/2; j++)
- screenbit[px][py+j] = '#';
-
- }
- mask >>= 1;
- }
- }
- else
- {
- for (i=0; i<dyabs; i++)
- {
- mask = mask ? mask : 0x80000000;
- x += dxabs;
- if (x>=dyabs)
- {
- x -= dyabs;
- px += sdx;
- }
- py += sdy;
- if (PATTERN & mask)
- {
- for (j= -LINEWIDTH/2; j<=LINEWIDTH/2; j++)
- screenbit[px+j][py] = '#';
- }
- mask >>= 1;
- }
- }
- }
- /*---------------------------------------------------------------------------*/
- d_clear()
- {
- int x,y;
- for (y=0;y<=MAXY;y++) {
- for (x=0;x<=MAXX;x++) {
- screenbit[x][y] = 0;
- }
- }
- }
- /*---------------------------------------------------------------------------*/
- d_flush()
- {
- }
- /*---------------------------------------------------------------------------*/
- d_arcto(dbl x1,dbl y1,dbl x2,dbl y2,dbl rrr)
- {
- df_arcto(x1,y1,x2,y2,rrr);
- }
- /*---------------------------------------------------------------------------*/
- d_arc(dbl r,dbl t1,dbl t2,dbl cx,dbl cy)
- {
- df_arc(r,t1,t2,cx,cy);
- }
- /*---------------------------------------------------------------------------*/
- d_narc(dbl r,dbl t1,dbl t2,dbl cx,dbl cy)
- {
- df_arc(r,t1,t2,cx,cy);
- }
- /*---------------------------------------------------------------------------*/
- d_box_fill(dbl x1, dbl y1, dbl x2, dbl y2)
- {
- df_box_fill(x1,y1,x2,y2);
- }
- d_box_stroke(dbl x1, dbl y1, dbl x2, dbl y2)
- {
- df_box_stroke(x1,y1,x2,y2);
- }
- /*---------------------------------------------------------------------------*/
- d_circle_stroke(double zr)
- {
- df_circle_stroke(zr);
- }
- d_circle_fill(double zr)
- {
- df_circle_fill(zr);
- }
- /*---------------------------------------------------------------------------*/
- d_bezier(dbl x1,dbl y1,dbl x2,dbl y2,dbl x3,dbl y3)
- {
- double ax,bx,cx,ay,by,cy,dist;
- double xxx,yyy,i,t,nstep,x0,y0;
- g_get_xy(&x0,&y0);
- dist = fabs(x3-x0) + fabs(y3-y0);
- nstep = 10;
- if (dist>3) nstep = 20;
- if (dist<.5) nstep = 5;
- if (dist<.3) nstep = 3;
- if (dist<.1) {
- g_line(x3,y3);
- return;
- }
- cx = (x1-x0)*3;
- bx = (x2-x1)*3-cx;
- ax = x3-x0-cx-bx;
- cy = (y1-y0)*3;
- by = (y2-y1)*3-cy;
- ay = y3-y0-cy-by;
- for (i=0;i<=nstep;i++) {
- t = i/nstep;
- xxx = ax*pow(t,3.0) + bx*t*t + cx*t + x0;
- yyy = ay*pow(t,3.0) + by*t*t + cy*t + y0;
- g_line(xxx,yyy);
- }
- }
- /*---------------------------------------------------------------------------*/
- d_set_color(long f)
- {
- }
- d_set_fill(long f)
- {
- }
- /*---------------------------------------------------------------------------*/
- d_beginclip()
- {
- }
- d_endclip()
- {
- }
- struct char_data {float wx,wy,x1,y1,x2,y2; };
- int font_get_chardata(struct char_data **cd, int ff, int cc);
- /*---------------------------------------------------------------------------*/
- d_char(int font, int cc)
- {
- static struct char_data cd;
- static int ix,iy,ix1,ix2,iy1,iy2,fz,fzx;
- static int ux,uy;
- static int safnt;
- char ss[2];
-
- ss[0] = cc;
- ss[1] = 0;
- if (safnt==0) safnt = pass_font("PLSR");
- if (font>=2) {
- my_char(font,cc);
- return;
- }
- my_char(safnt,cc);
- }
-
-
-