/*
	lookfile.c
	1994/03/04 1994/03/08 1995/02/20
*/

#include <stdlib.h>
#include "fswch.h"

int instr( char a, const char *); /* 文字列sの文字aの位置 */
int split( char *s, char **str, const char *sep); /* 文字の切り分け */
int strcmp( const char *,const char *); /* 文字列の比較 */
char *strcpy( char *,const char *); /* 文字列のコピー */
char *strcat( char *a,const char *b); /* 文字列の連結 */
char *koumoku( char *k ); /* 項目とりだし */
void filetype( FILE *fp ); /* ファイル表示 */


void lookfile( char cm,int no ){

	static char buff[256],filename[85],pname[85];
	char *bp,*str[10];
	struct find_t fname;
	fpos_t ptr;
	FILE *fp;

	/* キー選択チェック */
	if(no<0) return;

	ptr = idxptr[no];
	fsetpos(idxfp,&(ptr));
	/* DIR を得る */
	do{
		fgets(buff,256,idxfp);
		if((bp=koumoku(buff))==NULL){
			fputs("項目エラー\r\n",stderr);
			return;
		}
		if(cm=='g' && strcmp(buff,"README")==0) break;
		if(cm=='d' && strcmp(buff,"MANUAL")==0) break;
		if(strcmp(buff,"DIR")==0) break;
	}while(buff[0]>='A' && buff[0]<='Z');
	cprintf("\r\n\nno:%3d %s %s\r\n",no,buff,bp);

	strcpy(pname,"q:");
	if(strcmp(buff,"MANUAL")==0 || strcmp(buff,"README")==0){
		strcpy(filename,pname);
		strcat(filename,bp);
	} else {
		int sc;
		strcat(pname,bp);
		strcat(pname,"\\"); /* ディレクトリパス */
		sc = split(bp,str,"\\"); /* \ で 分割 */
		strcpy(filename,pname);
		strcat(filename,str[sc-1]); /* ディレクトリ名をファイル名に */
		if(cm=='g') strcat(filename,".ggg");
		if(cm=='d') strcat(filename,".doc");
	}
	if((fp=fopen(filename,"r"))==NULL){
		strcpy(filename,pname);
		if(cm=='g')strcat(filename,"*.ggg");
		if(cm=='d')strcat(filename,"*.doc");
		_dos_findfirst(filename,_A_NORMAL,&fname); /* 通常ファイル */
		strcpy(filename,pname);
		strcat(filename,fname.name);
	}
	cprintf(ESC"0J"ESC_GREEN"file = %s\r\n"ESC_WHITE,filename);
	/*
	cputs(ESC_YELLOW"--- Hit anykey. ---");
	getop();
	cputs(ESC"2K\r"ESC_WHITE);
	*/
	if(fp==NULL) if((fp=fopen(filename,"r"))==NULL) return;
	/*
		1. README or MANUAL 
		2. DIR
		3. *.doc *.ggg
	*/
	if(pg==NULL){
		filetype(fp);
		fclose(fp);
	}else{
		fclose(fp);
		strcpy(buff,pg);
		strcat(buff," ");
		strcat(buff,filename);
		curon;
		system( buff );
		curoff;
		/*
		spawnlp(P_WAIT,pg,pg,filename,NULL);
		*/
	}
}


void filetype( FILE *fp ){ /* ファイル表示 */

	int i;
	char c;
	int lc=0;

	for(i=0;(c=fgetc(fp))!=EOF;i++){
		if( c!='\n' && c!='\t' && c!=0x1b && c < 0x20 || c == 0x7f )
			cputs(ESC_YELLOW"."ESC_WHITE);
		else putch(c);
		if(c=='\n'){
			putch('\r');
			i=0;
			lc++;
		}
		if(i>78 && !(
			/* 全角文字 一文字目 ？ */
			0x80<c && c<0xa0 || 0xdf< c && c < 0xf0
			) ){ i=0; lc++; }
		if(i==0 && lc==20){
			cputs(ESC_GREEN"--- more (esc,取消:quit) ---"
				ESC_WHITE);
			if(instr(getop(),"\x1b\x11")) return;
			cputs(ESC"2K\r");
			lc=0;
		}
	}
	cputs("\r\n"ESC_YELLOW"File End. Hit anykey."ESC_WHITE);
	getop();
	clstext();
}
