/* Screen and .gle driver for pc */
#include "all.h"
#include "vdevice.h"
#if (defined DJ || defined EMXOS2)
        extern int draw_circle(void);
#endif
#define false 0
#define true (!false)
#define SOLID_LINE 1
#define DASHED_LINE 2
#include <math.h>
#include "mygraph.h"
#include "justify.h"
/*---------------------------------------------------------------------------*/
#define pi 3.141592653
#define true (!false)
int getch(void);
int kbhit(void);
extern int gle_nspeed;
extern int gle_speed;
extern int nobigfile;
/*---------------------------------------------------------------------------*/
/* The global variables for the PC screen driver */
/*-----------------------------------------------*/

float v_scale, v_xscale, v_yscale;
char *gledir(char *s);
int v_graphmode;
int v_fillstyle=1,v_fillcolor;
int vv_lstyle,v_lwidth;
int v_maxy;
static int ee;
FILE *gf;
extern char input_file[];
char *bgidir();
/*---------------------------------------------------------------------------*/
v_open(float width, float height)
{
        static int g_driver,g_error;
        float f;
        char bigfile[80];
        char glefile[80];

#ifdef EMXOS2                                           /* a.r. */
        extern char outputName[80];

        strcpy(bigfile,outputName);
#else        
        strcpy(bigfile,input_file);
#endif
        if (strchr(bigfile,'.')==NULL) {
                gprint("Error in file name,  {%s} \n",input_file);
                gle_abort("error in file name \n");
        }
        *strchr(bigfile,'.') = 0;
        strcpy(glefile,bigfile);
        strcat(glefile,".gle");
        strcat(bigfile,".big");
        gf = fopen(glefile,"r");
        if (gf==NULL) { /* then it doesn't exist, so lets create it */
                gf = fopen(glefile,"w");
                if (gf==NULL) gprint("Failed to create {%s} \n",glefile);
                else {
                        fprintf(gf,"size 24 18\n");
                        fprintf(gf,"bigfile %s\n",bigfile);
                        fclose(gf);
                }
        } else fclose(gf);

        if (!nobigfile)
        {
                gf = fopen(bigfile,"w");
                if (gf==NULL) {
                        gprint("Unable to open output gle file out.gle\n");
                        text_inkey();
                        abort();
                }
        }
        gle_nspeed = 2;
        g_open(width,height);
}
/*---------------------------------------------------------------------------*/
v_close()
{
#ifndef EMXOS2
        g_close();
        fclose(gf);
#else
        if (!nobigfile) fclose(gf);
        g_close();
#endif
}
/*---------------------------------------------------------------------------*/
v_lstyle(char *s)
{
        if (*s == 0) s = "1";
        vv_lstyle = DASHED_LINE;
        if (strcmp(s,"")==0) vv_lstyle = SOLID_LINE;
        if (strcmp(s,"1")==0) vv_lstyle = SOLID_LINE;
        g_set_line_style(s);
        if (!nobigfile) fprintf(gf,"set lstyle %s\n",s);
}
/*---------------------------------------------------------------------------*/
v_line(float zx,float zy)
{
        g_line(zx,zy);
        if (!nobigfile) fprintf(gf,"aline %g %g \n",zx,zy);
}
v_move(float zx,float zy)
{
        g_move(zx,zy);
        if (!nobigfile) fprintf(gf,"amove %g %g \n",zx,zy);
}
/*---------------------------------------------------------------------------*/
v_gsave()
{
        g_gsave();
        if (!nobigfile) fprintf(gf,"gsave \n");
}
v_grestore()
{
        g_grestore();
        if (!nobigfile) fprintf(gf,"grestore \n");
}
v_text(char *s)
{
        g_text(s);
        if (!nobigfile) fprintf(gf,"text %s \n",s);
}
double cur_hei;
v_set_hei(float g)
{
        g_set_hei(g);
        cur_hei = g;
        if (!nobigfile) fprintf(gf,"set hei %g\n",g);
}
v_set_just(char *s)
{
        if (strcmp(s,"RC")==0) g_set_just(JUST_RC);
        if (strcmp(s,"TC")==0) g_set_just(JUST_TC);
        if (strcmp(s,"BC")==0) g_set_just(JUST_BC);
        if (strcmp(s,"CC")==0) g_set_just(JUST_CC);
        if (strcmp(s,"LEFT")==0) g_set_just(JUST_LEFT); 
        if (!nobigfile) fprintf(gf,"set just %s\n",s);
}
v_rotate(float g)
{
        g_rotate(g);
        if (!nobigfile) fprintf(gf,"rotate %g \n",g);
}
v_marker(char *m)
{
#if (!(defined DJ || defined EMXOS2))
        int i;
        i = get_markeri(m);
        g_marker(i,cur_hei);
#else
        draw_circle();
#endif
        if (!nobigfile) fprintf(gf,"marker %s\n",m);
}
#include "global.h"
int32 gt_firstval(OPKEY lkey,char *s);
v_color(char *s)
{
  char black[10];
        int i;
        i = 0;
        if (*s == 0) {strcpy(black,"BLACK"); s = black;}
        strupr(s);
        g_set_color(gt_firstval(&op_color_typ,s));
        if (!nobigfile) fprintf(gf,"set color %s\n",s);
}
int32 gt_firstval(OPKEY lkey,char *s)
{
        int nk,i,width=0,p;
        for (i=0; (*lkey)[i].typ!=typ_end; i++) {
                p = (*lkey)[i].pos;
                if (p>width) width = p ;
        }
        nk = i;
        for (i=0; i<nk; i++) {
                if (strcmp((*lkey)[i].name,s)==0) {
                        return (*lkey)[i].idx;
                }
        }
}
get_markeri(char *s)
{
        int i;
        int32 f=0;
        /* if 0, maybe its a user defined marker, ie a subroutine */
        /* Use -ve to signify subroutine instead of normal marker */
        f = gt_firstval(&op_marker,s);
        return f;
}

