/*
	padpage.c
	tab=8
*/

#define PROGRAM   "パッド対応ページャー"
#define VERSION   "V0.06"
#define FIRSTDATE "94/11/15"
#define FINALDATE "95/02/20"
#define USAGE     "   for FM-ＴＯＷＮＳ コンソールモード\n" \
		  "Usage : padpage [-t[1-9]] [-s[wait]] [-5] filename"
#define MAIN

#include "calo.h"
#include "padpage.h"
#include <fcntl.h>


void main( int argc, char *argv[] ){		/* メイン */

	int i;
	char *name;

	/* オプションスイッチセット */
	if( argc == 1 ) usage( argv[0] );
	for( i = 1 ; i < argc ; i++ ){
		if( argv[i][0] == '-' || argv[i][0] == '/')
		switch ( argv[i][1] ) {
		case 'T':
		case 't':
			tabs = atoi(argv[i]+2);
			tabs = ( tabs < 1 || tabs > 9 ) ? 9 : tabs;
			break;
		case 'S':
		case 's':
			sclw = ( sclw = atoi(argv[i]+2)) > 99 ? 99 : sclw ;
			break;
		case '5':
			lines = 5;
			maxdisp = 21;
			break;
		case 'H':
		case 'h':
		case '?':
			usage(argv[0]);
		default:
			usage("無効なスイッチです.");
			break;
		}
		else name = argv[i];
	}
	/* ファイルオープン */
	if( ( fp = open( name, O_RDONLY ) ) < 0 ){
		usage( argv[0] );
	}
	/* パッド初期化 */
	padinit();
	/* カーソル消去 */
	cur( OFF );
	/* 画面モード */
	if( lines == 0 )
		width( 20 );
	/* メイン処理 */
	{
		int rr = OFF;
		int j = 1;
		int l,ll=0;
		static const char *usfn = {
			"\f"ESC_GRr " ファイル: %-s " ESC_reset
			};

		/* filename disp */
		cprintf( usfn , name );
		/* auto scroll */
		sclw = 0;
		if( sclw > 0 )
			mline = ppgscroll('+',j);
		/* オペレーション */
		while( rr == OFF ){
			dsppage( j,l = setline( j ) );
			if( inkey() == NULL )
			ll = setline( ( ll < l ) ? l : ll );
			switch ( inkey() ) {
			case RIGHT:
				j += maxdisp/2;
				break;
			case LEFT:
				j = 1;
				break;
			case UP:
				j--;
				break;
			case DOWN:
				j++;
				break;
			case ESCKEY: /* sellect */
				rr = ON;
				break;
			case ' ':
			case QUIT: /* B botan */
				j -= maxdisp/2;
				break;
			case '\r':
			case EXEC: /* A botan */
				rr = ppgmenu( &j ); /* menu */
				cprintf( usfn, name );
				j = dsppage( j, -1 );	/* 再表示 */
			default:
				break;
			}
			if( j < 1 ) j = 1;
			/*
			*/
			if( mp_eof && j > ll ) j = ll ;
		}
	}
	close( fp );
	/* カーソル復活 */
	cur( ON );
	width( 25 );
}
