#include <stdio.h>
#include <string.h>
#include "nomouse.h"

#define NUM_DP 100
#define STR_LEN 100
#define S_SIZE 40

struct board
{
	int row,col,color;
};
extern struct board B_Id;
extern char *SubType;
extern int A_Int;
extern int A_Reverse,A_Black;
extern int A_Brite,A_Norm;
extern int A_Flash;
extern int LastN;

extern int NumPath;
extern char Path[NUM_DP][STR_LEN];

int GF_Menu;  /* 0x70 black on white */
int GF_Title;  /* 0x4 white on red */
int GF_Box;  /* 0x70 black on white */
int GF_Bar;  /* 0x13 cyan on blue */
int GF_Text;  /* 0xc b_red on black */
int GF_Help;  /* 0x70 black on white */
extern int Monitor;
struct equipment
{
	int printers; 		/* number present */
	int sprinter;		/* serial printer installed?  0=no  1=yes */
	int game;			/* game adapter installed? */
	int sports;			/* number of serial ports */
	int dma;				/* DMA chip installed? */
	int drives;			/* number of disk drives */
	int video;			/* video mode 1=40 color 2=80 color 3=80 B/W */
	int disk;			/* any disk drives? */
	int memory;			/* memory size in Kbytes */
};
extern struct equipment Eq;
int Menu=0;
extern char GF_String[][S_SIZE];
char MString[300][25];

FILE *open_to_read_text(char *);

main(argc,argv)

int argc;
char *argv[];

{
	int i,j,k;
	int wildcard=0,num=0,len,slen,val;
	char pathbuffer[101],string[100],message[100],filename[100],mstring[100];
	FILE *fp,*fpmenu;

	NumPath=1;
	for(i=0;i<argc;i++)
	{
		if(argv[i][1]==':')
			add_disk_path(argv[i]);
		if(argv[i][0]=='\\')
			add_disk_path(argv[i]);
		if(argv[i][0]=='/'&&argv[i][1]=='m')
		{
			strcpy(mstring,argv[i+1]);
			fpmenu=open_to_read_text(mstring);
			if(!fpmenu)
			{
				printf("Could not open menu file '%s' to read.\n",mstring);
				exit(0);
			}
			fgets(mstring,100,fpmenu);
			while(fgets(string,100,fpmenu))
			{
				for(i=0;i<strlen(string);i++)
					if(string[i]==0xa||string[i]==0xd)
						string[i]='\0';
				sscanf(string,"%s",MString[Menu++]);
				len=strlen(MString[Menu-1]);
				slen=strlen(string);
				strcpy(GF_String[Menu-1],string+len+1);
			}
			if(Menu<1)
			{
				printf("No menu entries\n\n");
				exit(0);
			}
		}
	}
	video_on();
	SetVideoMode(0,&B_Id);

/* use SubPaths with type of SubType for sub images */
									/* move all Path up 1 */
	for(i=NumPath;i>0;i--)
		strcpy(Path[i],Path[i-1]);
	NumPath+=1;
									/* add '?mg\' to a new set of Paths */
	for(i=2;i<NumPath;i++)
		sprintf(Path[NumPath+i-2],"%s%s\\",Path[i],SubType+1);
	NumPath+=NumPath-2;

	getcwd(pathbuffer,100);
	sprintf(Path[0],"%s\\%s\\",pathbuffer,SubType+1);

	if(Menu>0)
	{
		WriteStringAtxy(40,0,39,(char)112,mstring);
		while((val=scroll_list(40,1,40,21,GF_String,Menu,string))>=0)
		{
			LastN=val;
			fp=fopen(MString[val],"rb");
			if(fp)
			{
				fclose(fp);
				if(text_view(MString[val],(long)6000)<0)
					printf("Could not open '%s'\n\n",MString[val]);
			WriteStringAtxy(40,0,39,(char)112,mstring);
		}
		else
			printf("Could not open '%s'\n\n",MString[val]);
		}
		exit(0);
	}
	else
	{
		if(argc>1)
			strcpy(string,argv[1]);
		else
			strcpy(string,"*.txt");
		for(i=0;i<strlen(string);i++)
			if(string[i]=='*'||string[i]=='?')
			{
				wildcard=1;
				break;
			}
		if(wildcard>0)
		{
			Monitor=check_equip(&Eq);
			if(Monitor==2)
			A_Brite=0x1b;
			GF_Text=0x74;
			GF_Box=0x13;
			GF_Bar=0x1b;
			GF_Help=0x74;
			ClearScreen(GF_Menu);
			print_help();
			while((num=get_file_name(string,filename,num))>=0)
			{
				LastN=num;
				sprintf(message,"file:  %s",filename);
				text_view(filename,(long)6000);	
				ClearScreen(GF_Menu);
				print_help();
			}
			ClearScreen(A_Black);
		}
		else
		{
			fp=fopen(string,"rb");
			if(fp)
			{
				fclose(fp);
				sprintf(message,"file:  %s",string);
				if(text_view(string,(long)6000)<0)
					printf("Could not open '%s'\n\n",string);
			}
			else
				printf("Could not open '%s'\n\n",string);
		}
	}
}
/***********************************************************************
**
**
**
**
************************************************************************/

int print_help()

{
	int i=0;

	SetCursor(0,0);
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"     Select a file from the window");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"to view by positioning the bar over");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"it then hitting 'Enter'.  Files are");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"in alphabetical order and there may");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"be more files than you can see in");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"the window.");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"  Up Arrow -- moves bar up one file");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"Down Arrow -- moves bar down one");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"     Pg Up -- moves bar to top or");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"              scrolls up one screen");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"     Pg Dn -- moves bar to bottom  ");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"              or scrolls down one");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"              screen");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		" type text -- searches for text");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"     Enter -- exits text mode or");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"              chooses file");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"       Esc -- exits program");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"     Once you select a file you will");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"be able to view it.  To get instruc-");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"tions for viewing the file hit F3,");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"'h' or 'H' while the viewing program");
	WriteStringAtxy(0,i++,GF_Menu,GF_Menu,
		"is running.");
}


                                       