#include "all.h"
#include <math.h>
#ifdef __TURBOC__
#include "conio.h"
#include "bios.h"
#endif

int gle_debug;
int dev_eps=0;
int control_d = !0;
int MAX_VECTOR=500;
int dev_fill,dev_font; /* do real filling for d_dvi.c, and use texcmr font */
extern int trace_on;
int init_memory(void);
int text_expand(int n);
int g_get_type(char *s);
int gle_redraw(void);
int scr_init(void);
int scr_end(void);
#define true (!false)
#define false 0
int noscreenio=true;
int BLACKANDWHITE=(false);
#define dbg if (gle_debug>0)
#ifdef __TURBOC__
	extern unsigned _stklen=45000;
#endif

typedef char (*TEXT)[];
int int_edt(char *fname);
int scrinsert(int y);
int scrdeleteline(int y);
int text_eol(void);
int text_delete(void);
int text_undelete(void);
int text_deleteline(void);
int text_left(void);
int text_right(void);
int text_up(void);
int text_down(void);
int text_return(void);
int text_refresh();
int text_putstr(char *s);
int text_setwindow();
int text_move(int x,int y);
int scr_tab(char *s, int x);
int scr_negtab(char *s, int x, int *fpos, int *scrx);
int fner(char *s);
int fner_clear(void);
int text_setwindow(void);
int text_refresh(void);
int text_main(void);
int text_inkey(void);
int text_scroll(void);
int text_scroll_up(void);
int text_scroll_down(void);
int text_select(void);
int text_cut(void);
int text_paste(void);
int restofline(int y,int x);
int normal_key(int c);
int setoutfile(char *s);
int lineset(int i,char *ss);
int lineinsert(int y, char *ss);
int textinsert(int y);
char *sline(int i);
int text_load(char *f);
int print_out(void);
char *line(int i);
int ncpy(char *d, char *s, int n);
/*------------ GLOBAL VARIABLES --------------*/
char input_file[50];
char *(*gtxt)[];   /* gtxt is a pointer to an array of poiter to char */
int ngtxt=0;
char gleroot[60];
char glearg0[66];
int gotfile;
int hpgl_size;
/*---------------------------------------------------------------------------*/
#ifdef unix
#include "glepath.h"
#endif
main(int argc, char **argv)
{
char dtype[60];
char fname[60],*ss;
static int i,ask_debug,spawn_print,call_menu,drawit;
	strcpy(fname,"test.gle");
	strcpy(glearg0,argv[0]);
	strcpy(gleroot,argv[0]);
	init_memory(); /* saves some memory for emergencies */
#ifdef VMS
	if (strcmp(strupr(getsymbol("GLE_NOCONTROLD")),"TRUE")==0) {
		control_d = false;
	}
#endif
#ifdef unix
	dtype[0] = 0;
	ss = getenv("GLE_TOP");
	if (ss==NULL) ss = GLEPATH;
	strcpy(gleroot,ss);
	control_d = false;
#endif
#ifdef __TURBOC__
	ss = strchr(gleroot,'\\');
	if (ss==NULL) gle_abort("Unable to locate files AGRV[0] wrong");
	for (;strchr(ss+1,'\\')!=NULL;) ss = strchr(ss+1,'\\');
	*(ss+1) = 0;
	if (getenv("GLE_NOCONTROLD")!=NULL) control_d = false;
#endif
#ifdef VAXC
	if (strcmp(getsymbol("GLE_NOCONTROLD"),"TRUE")==0) control_d = false;
#endif
	hpgl_size = 3;
	for (i=1;i<argc;i++) {
		strcpy(dtype,argv[i]);
		strupr( argv[i] );
		if (strcmp( argv[i] , "/TRACE")==0) trace_on = true;
		else if (strcmp( argv[i] , "/DEBUG")==0) ask_debug = true;
		else if (strcmp( argv[i] , "/PRINT")==0) spawn_print = true;
		else if (strncmp( argv[i] , "/DEV", 4)==0) spawn_print = false;
		else if (strcmp( argv[i] , "/NOD")==0) control_d = false;
		else if (strcmp( argv[i] , "/ADDD")==0) control_d = true;
		else if (strcmp( argv[i] , "/A0")==0) hpgl_size = 0;
		else if (strcmp( argv[i] , "/A1")==0) hpgl_size = 1;
		else if (strcmp( argv[i] , "/A2")==0) hpgl_size = 2;
		else if (strcmp( argv[i] , "/A3")==0) hpgl_size = 3;
		else if (strcmp( argv[i] , "/A4")==0) hpgl_size = 4;
		else if (strcmp( argv[i] , "/MENU")==0) call_menu = true;
		else if (strcmp( argv[i] , "/EPS")==0) dev_eps = true;
		else if (strcmp( argv[i] , "/FILL")==0) dev_fill = true;
		else if (strcmp( argv[i] , "/FONT")==0) dev_font = true;
		else if (strcmp( argv[i] , "/NOMAXPATH")==0) MAX_VECTOR = 999999;
		else if (strcmp( argv[i] , "/COLOR")==0) BLACKANDWHITE = false;
		else if (strcmp( argv[i] , "/NOCOLOR")==0) BLACKANDWHITE = false;
		else if (strncmp( argv[i] , "/OUT", 4)==0) setoutfile(argv[i]);
		else if (strncmp( argv[i] , "/DRA", 4)==0) drawit = true;
		else if (!gotfile && (isalnum(*argv[i]) || (*argv[i] == '['))) {strcpy(fname, dtype); gotfile=true;}
		else printf("Unrecognised qualifier {%s} \n",argv[i]);
	}
/*	if (argc>1) strcpy(fname,*(++argv)); else strcpy(fname,"test.gle");*/
	g_get_type(dtype);
/* works here */
	if (strstr(dtype,"HARDCOPY")!=NULL  && !call_menu) {
		if (!gotfile) {
try_again:		gprint("Enter name of GLE file ? ");
			gets(fname);
			ss = strchr(fname,'\n');
			if (ss!=NULL) *ss = 0;
			if (strcmp(fname,"")==0) goto try_again;
		}
	}

	if (strchr(fname,'.')==NULL) strcat(fname,".gle");
/* works*/
	if (strstr(dtype,"HARDCOPY")==NULL  || call_menu) {
		noscreenio = false;
		scr_init();
	}
	strcpy(input_file,fname);
	text_expand(500); /* Initially allocate 500 lines of text */

	if (strstr(dtype,"HARDCOPY")!=NULL  && !call_menu) {
		text_load(fname);
		if (ask_debug) {
		printf("Debug options 16=do_pcode, 8=pass 4=polish, 2=eval ");
		printf("Debug ");scanf("%d",&gle_debug);
		printf("Trace "); scanf("%d",&trace_on);
		}
		gle_redraw();
	} else {
		noscreenio = false;
		if (coreleft()<120000L) {
 printf("\n\nThere is not enough memory for GLE to run properly, follow these guidelines\n");
 printf("to free up more memory.\n");
 printf("	1) Don't run GLE from inside editors/file utilities.\n");
 printf("	2) Don't run GLE at the same time as disk servers like:\n");
 printf("		NOVELL, PCSA, VDISK, RAF etc...\n");
 printf("	3) Remove any extra's from CONFIG.SYS and AUTOEXEC.BAT\n");
 printf("		(after taking copies of them)\n\n");
 printf("	(GLE will attempt to continue by not using any complex fonts)\n");
 printf("Press any key to continue");
			font_simple();
			if (!drawit) text_inkey();
		}
		if (gotfile) text_load(fname);
		if (drawit) gle_redraw();
		else int_edt(fname);
	}
	if (!noscreenio) scr_end();
/* 	if (spawn_print) {
		print_out();
	} */
#ifdef VMS
	return 1;
#else
	return 0;
#endif
}
#ifdef unix
print_out(){}
#endif
#ifdef __TURBOC__
print_out()
{}
#else
#ifdef VMS
#include <descrip.h>
/* #include <lib$routines.h> */
print_out()
{
	static $DESCRIPTOR(cmd_desc
	  ,"print out.ps /que=laser/notify/noburst/noflag");

	printf("$ %s \n",cmd_desc.dsc$a_pointer);
	LIB$DO_COMMAND(&cmd_desc);
}
#endif
#endif
char output_file[80];
setoutfile(char *q)
{
	char *s;
	s = strchr(q,'=');
	if (s==NULL) return;
	strcpy(output_file,s+1);
	strlwr(output_file);
}




