home *** CD-ROM | disk | FTP | other *** search
- #include "part.h"
-
- #define FsX 12
- #define FsY 6
- #define FsW 66
- #define FsH 17
-
- #define FmX 4
- #define FmY 14
- #define FmW 74
- #define FmH 5
-
-
- void select_system_type(struct part_long *p)
- {
- char *buf, *tmp;
- struct event ev;
- int i, k, n, top, act, N, barpos;
-
- if( (buf=malloc(FsW*FsH*2))==0 ) { show_error(ERROR_MALLOC); return; }
- if( (tmp=malloc(FsW))==0 ) { free(buf); show_error(ERROR_MALLOC); return; }
-
- save_window( FsX, FsY, FsW, FsH, buf);
- border_window( Yellow+BakWhite, FsX, FsY, FsW, FsH, Border22f );
- write_string( Black+BakWhite, FsX+2, FsY+1, HEADER_SYSTYPE );
- for( i=0 ; i<FsW-4 ; i++ ) tmp[i]='─';
- tmp[i]=0;
- write_string( Yellow+BakWhite, FsX+2, FsY+2, tmp );
- write_string( Yellow+BakWhite, FsX+28, FsY+FsH-1, " F1 - Help ");
- write_string( Yellow+BakWhite, FsX+42, FsY+FsH-1, " INS - Custom code ");
-
- for( N=0 ; os_desc[N].os_id!=OS_UNKN /* valid ids */ ; N++ );
-
- /* N - number of records in table */
- /* n - number of records on screen */
-
- top=0;
- act = ( os_desc[p->os_num].os_id==OS_UNKN ) ? 0 : p->os_num;
- n = ( N<FsH-4 ) ? N : FsH-4;
-
- #define BARX (FsX+FsW-3)
- #define BARY (FsY+3)
- #define BARLEN (n) /* (n-2) */
-
- while(1)
- {
- if( act<top ) top=act;
- if( act>=top+n ) top=act-n+1;
-
- for( i=0 ; i<n ; i++ )
- {
- sprintf_systype(tmp,top+i);
- write_string( (top+i==act) ? (White+BakBlack) : (Black+BakWhite),
- FsX+2, FsY+3+i, tmp );
- }
-
- // if( top>0 ) write_char( Yellow+BakWhite, BARX, BARY, '');
- // else write_char( Yellow+BakWhite, BARX, BARY, ' ');
-
- // if( top+n<N ) write_char( Yellow+BakWhite, BARX, BARY+BARLEN, '');
- // else write_char( Yellow+BakWhite, BARX, BARY+BARLEN, ' ');
-
- if( N!=n )
- {
- barpos=((float)(top))/(N-n)*(BARLEN-1);
-
- for( i=0 ; i<BARLEN ; i++ )
- write_char( Yellow+BakWhite, BARX, BARY+i, (i!=barpos)?'░':'▓');
- }
-
- move_cursor(1,25);
-
- get_event(&ev,EV_KEY);
-
- if( ev.key==27 ) /* ESC */
- {
- break;
- }
-
- if( ev.key==13 ) /* Enter */
- {
- p->os_num=act;
- p->os_id=os_desc[act].os_id;
- break;
- }
- else if( ev.scan==0x3B00 ) /* F1 - Help */
- {
- sprintf(tmp,"os_id 0x%02X",os_desc[act].os_id);
- html_view(HELP_TEXT,tmp);
- }
- else if( ev.scan==0x52E0 || ev.scan==0x5200 ) /* Insert */
- {
- if( enter_string(4,16,PROMPT_FSTYPE, FsW, tmp, 0) )
- {
- i=0;
- sscanf(tmp,"%X",&i);
- if( i!=0 && i<256 )
- {
- p->os_id=i;
- for( i=0 ; os_desc[i].os_id!=p->os_id && os_desc[i].os_id!=OS_UNKN ; i++ );
- p->os_num=i;
- break;
- }
- }
- }
- else if( ev.scan==0x47E0 || ev.scan==0x4700 ) /* Home */
- {
- act=0;
- }
- else if( ev.scan==0x4FE0 || ev.scan==0x4F00 ) /* End */
- {
- act=N-1;
- }
- else if( ev.scan==0x50E0 || ev.scan==0x5000 ) /* down */
- {
- if( act<N-1 ) act++;
- }
- else if( ev.scan==0x48E0 || ev.scan==0x4800 ) /* up */
- {
- if( act>0 ) act--;
- }
- else if( ev.scan==0x49E0 || ev.scan==0x4900 ) /* PgUp */
- {
- act-=n;
- if( act<0 ) act=0;
- }
- else if( ev.scan==0x51E0 || ev.scan==0x5100 ) /* PgDn */
- {
- act+=n;
- if( act>=N ) act=N-1;
- }
-
- }/* while(1) */
-
- load_window( FsX, FsY, FsW, FsH, buf );
- free(buf);
- free(tmp);
- }/* select_system_type */
-
-
- int enter_string(int x, int y, char *prompt, int maxlen, char *name, char *help_target)
- {
- char *buf;
- struct event ev;
- int i, z, w, x2, strw;
-
- strw=min(min(maxlen,36),73-x-strlen(prompt));
- w=strlen(prompt)+5+strw;
- x2=x+strlen(prompt)+3;
-
- if( (buf=malloc(w*3*2))==0 )
- {
- show_error(ERROR_MALLOC);
- return 0;
- }
-
- save_window(x,y,w,3,buf);
- border_window(Yellow+BakWhite,x,y,w,3, Border22f );
- write_string(Black+BakWhite,x+2,y+1,prompt);
-
- if( help_target!=0 )
- write_string( Yellow+BakWhite, x+w-14, y+2, " F1 - Help ");
-
- i=0;
- while(1)
- {
- name[i]=0;
- z=0;
- if( i>strw ) z=i-strw;
- clear_window(BrWhite+BakBlack,x2,y+1,strw,1);
- write_string(BrWhite+BakBlack,x2,y+1,name+z);
- move_cursor(x2+i-z,y+1);
-
- get_event( &ev, EV_KEY );
-
- if( ev.key==27 ) { z=0; break; }
- if( ev.key==13 ) { z=1; break; }
-
- if( ev.key==8 ) /* BackSpace */
- {
- if( i>0 ) i--;
- }
- else if( ev.scan==0x3B00 && help_target!=0 ) /* F1 - Help */
- {
- html_view(HELP_TEXT,help_target);
- }
- else if( ev.key>=' ' && ev.key<=127 && i<maxlen-1 )
- {
- name[i]=ev.key;
- i++;
- }
-
- }/* while(1) */
-
- load_window(x,y,w,3,buf);
- free(buf);
- return z;
- }/* enter_string */
-
-
- void show_error(char *msg)
- {
- int x, y=12, w, h=4;
- struct event ev;
- static char buf[4*80*2];
-
- w = strlen(msg)+6;
- if( w%2==1 ) w++;
- if( w>78 ) w=78;
- x = (80-w)/2+1;
-
- save_window(x,y,w,h,buf);
- border_window(Yellow+BakRed,x,y,w,h, Border22f );
-
- write_string( BrWhite+BakRed, x+3, y+1, msg );
- write_string( Black+BakWhite, x+w/2-2, y+2," OK " );
-
- get_event( &ev, EV_KEY );
-
- load_window(x,y,w,h,buf);
- }/* show_error */
-
-
- static char *format_buf;
- static int format_status;
-
-
- void format_progress_init(void)
- {
- format_status=0;
- }/* format_progress_init */
-
-
- void format_progress_done(void)
- {
- if( interactive==1 && format_status==1 )
- {
- load_window(FmX,FmY,FmW,FmH,format_buf);
- free(format_buf);
- }
- }/* format_progress_done */
-
-
- int format_progress(char *msg)
- {
- struct event ev;
- if( interactive==1 )
- {
- if( format_status==0 )
- {
- if( (format_buf=malloc(FsW*FsH*2))==0 )
- { show_error(ERROR_MALLOC); return FORMAT_FAILED; }
- move_cursor(1,25);
- save_window(FmX,FmY,FmW,FmH,format_buf);
- border_window(Yellow+BakWhite,FmX,FmY,FmW,FmH, Border22f );
- write_string(Black+BakWhite,FmX+2+50,FmY+1,PRESS_ESC);
- format_status=1;
- }
-
- if( msg!=0 )
- {
- if( *msg=='^' )
- {
- clear_window(Black+BakWhite,FmX+2,FmY+1, 50, 1);
- write_string(Black+BakWhite,FmX+2,FmY+1, msg+1);
- }
- else
- {
- if( *msg=='\n' || *msg=='\r' ) msg++;
- clear_window(Black+BakWhite,FmX+2+strlen(msg),FmY+3,70-strlen(msg),1);
- write_string(Black+BakWhite,FmX+2,FmY+3, msg);
- }
- }
- }/* interactive */
- else
- {
- if( format_status==0 )
- {
- printf("%s\n",PRESS_ESC);
- format_status=1;
- }
- if( msg!=0 )
- {
- if( msg[0]=='^' )
- { printf("\n%s\n",msg+1); }
- else if( msg[0]=='\r' )
- { printf("%s",msg); clreol(); }
- else
- { printf("\n%s",msg); clreol(); }
- }
- }
-
- get_event(&ev,EV_KEY|EV_NONBLOCK);
-
- if( ev.ev_type==EV_KEY && ev.key==27 ) /* ESC */
- {
- return FORMAT_CANCEL;
- }
-
- return FORMAT_OK;
-
- }/* format_progress */
-