#include <stdio.h>
#include <string.h>
#include <stdlib.h>

static unsigned char    filename[80]="",
			buf[16*21],
			stg[20];
FILE                    *fp;
unsigned int            i,k,ad1;

void main(int argc,unsigned char *argv[])
{
	if(argc>=2) strcpy(filename,argv[1]);
	if(argv[1][1]=='?'){
	  printf("***************************************************\n");
	  printf("**  ファンクションキー設定プログラム  by N.Baba  **\n");
	  printf("***************************************************\n");
	  printf("PFSET.EXE [<drive>:][<path>] \n");
	  printf("    KEYSET.TBLの有るパスを指定します。\n");
	  printf("    パス名は、最後に\\が来るようにしてください。\n");
	  printf("例）PFSET.EXE a:\\bin\\ \n");
	  exit(0);
	  }
	strcat(filename,"keyset.tbl");
	fp=fopen(filename,"rb");
	if(fp==NULL){
	  printf("Can't find \"KEYSET.TBL\" \n");
	  fclose(fp);
	  printf("***************************************************\n");
	  printf("**  ファンクションキー設定プログラム  by N.Baba  **\n");
	  printf("***************************************************\n");
	  printf("PFSET.EXE [<drive>:][<path>] \n");
	  printf("    KEYSET.TBLの有るパスを指定します。\n");
	  printf("    パス名は、最後に\\が来るようにしてください。\n");
	  printf("例）PFSET.EXE a:\\bin\\ \n");
	  exit(0);
	  }
	fread(buf,1,16*21,fp);
	fclose(fp);

	for(i=1;i<=20;i++){
	  ad1=(unsigned int)(buf[16*i]);
	  strcpy(stg,&buf[16*i+1]);
	  printf("PF%2d=",i);
	  for(k=0;k<ad1;k++){
	    if(stg[k]<0x20) printf("\x1b%c",stg[k]);
	    else if((stg[k]<0x80)||((stg[k]>=0xa0)&&(stg[k]<0xe0)))
	      printf("%c",stg[k]);
	    else{
	      printf("%c%c",stg[k],stg[k+1]);
	      k++;
	      }
	    }
	  printf("\n");
	  k=0x8000+i;
	  _asm{
	    mov ah,0x0e
	    mov al,0
	    mov dx,k
	    mov cx,ad1
	    mov di,offset stg
	    int 0x90
	    }
	  }
}
