int add_command_list(char *option,char  *value){
  char *p;
  int i,ii;


  //DEBUGPRINT2("   add_command_list:start [%s] [%s]\n",option,value);
  if(!option || !value || !option[0] || !value[0]){

    //DEBUGPRINT2("   add_command_list:start ERROR [%d] [%s]\n",option,value);
    return 0;
  }

  for ( i = 0; command_array[i].option[0] != 0; i ++ ){
    //DEBUGPRINT4("   add_command_list:[%s] [%s] [%s] %d\n"
    //	,command_array[i].value,option,value,i);
    p = strstr_ex(command_array[i].option , option);
    if(p){
      //DEBUGPRINT2("     add_command_list   chg element %s %s\n",option,value);  
      write_log_file(3,"        C  %s  %s\n",option,value);  
      strcpy(command_array[i].value, value);
      break;
    }
  }

  if(command_array[i].option[0] == 0){
    //DEBUGPRINT2("     add_command_list   add element %s %s\n",option,value);  
    strcpy( command_array[i].option ,option);
    strcpy( command_array[i].value  ,value);
    write_log_file(3,"        A  %s  %s\n",option,value);  

  }
  return 1;
}
int add_command_list(char *option,char  *value){
  char *p;
  int i,ii;

  if(!option || !value || !option[0] || !value[0]){
    return 0;
  }

  for ( i = 0; command_array[i].option[0] != 0; i ++ ){
    p = strstr_ex(command_array[i].option , option);
    if(p){
      
      write_log_file(3,"        C  %s  %s\n",option,value);  
      strcpy(command_array[i].value, value);
      break;
    }
  }

  if(command_array[i].option[0] == 0){
    strcpy( command_array[i].option ,option);
    strcpy( command_array[i].value  ,value);
    write_log_file(3,"        A  %s  %s\n",option,value);  
  }
  return 1;
}
int main(int argc,char * argv[]) {

  char *printer;
  char ppd_line[500],tmp[500],*p_tmp,tmp_n[10],tmp_op[500];
  FILE *fp_ppd;
  char *p;
  char *commandline,*ppdfile, *printer_model;
  int i,ii;
  DEBUGPRINT("main:start\n");

//  fprintf (stderr, "ERROR: brcupsconfpt1 pid=%d\n", getpid());
//  sleep(100);

  if(argc < 1){
    return 0;
  }
  printer = argv[1];
  if(argc > 2){
    ppdfile= argv[2];
  }
  else{
    ppdfile="";
  }
	

//	fprintf(stderr, "ERROR: pid=%d\n", getpid());
//	sleep(1000);

  if(argc > 3){
    if(argv[3][0] >= '0' && argv[3][0] <= '9'){

      log_level = argv[3][0] -'0';
    }
    else{
      log_level = 0;
    }
  }
  else{
    log_level = 0;
  }

  if(argc > 4){
    commandline = argv[4];
  }
  else{
    commandline = "NULL COMMAND LINE";
  }

	printer_model = argv[5];

  fp_ppd = fopen(ppdfile , "r");
  if( fp_ppd == NULL) return 0;


  initialize_command_list();




  //************************************
  //  set default setting
  //************************************

#if	0
  DEBUGPRINT("main:set default setting\n");
  write_log_file(5,"DEFAULT SETTING\n");  
  for ( i = 0; default_setting[i] != NULL; i ++){
    p = strstr_ex(default_setting[i],"BROTHERPRINTER_XXX");
    if(p){
      p = strchr(p,'-');
      if(p){
	add_command_list_brcommand(p);
      }
    }
  }
#endif	// 0

  //************************************
  //  set PPD option 
  //************************************


  DEBUGPRINT("main:set PPD option (string)\n");
  write_log_file(5,"PPD SETTING\n");

  while(fgets(ppd_line,sizeof(ppd_line),fp_ppd)){
    if(NULL == delete_ppd_comment(ppd_line))continue;
    if(NULL == chk_ppd_default_setting_line(ppd_line))continue;

    //************************************
    //  set PPD option (string)
    //************************************

	for ( i = 0; ppdcommand_all_list[i]!= NULL; i ++)
	{
      //DEBUGPRINT2(    "main: set PPD option (string)    [%s]  [%s]\n",
      //	      ppd_line,ppdcommand_all_list[i]->label);
		p = strstr_ex(ppd_line,ppdcommand_all_list[i]->label);
		if(p)
		{
	//DEBUGPRINT2(    "main: set PPD option (string)    [%s]  [%s]\n",
	//       ppdcommand_all_list[i]->label,ppd_line);
	
		#if 1		// Added by SteadyBJ, Guo Jianxin , 20080121
			char * tmp;
			tmp = p + strlen( ppdcommand_all_list[i]->label);
        #endif
			for (ii = 0; ppdcommand_all_list[i]->ppdcommandlist[ii].value != NULL; ii++)
			{
	  //DEBUGPRINT3(    "main: set PPD option (string)    [%s]  [%s]  [%s]\n",
	  //       ppdcommand_all_list[i]->label,ppdcommand_all_list[i]->ppdcommandlist[ii].value ,  ppd_line);
	  		#if 0        // Modified by SteadyBJ, Guo Jianxin , 20080121
				p = strstr_ex(ppd_line,ppdcommand_all_list[i]->ppdcommandlist[ii].value);
			#else
				p = strstr_ex(tmp,ppdcommand_all_list[i]->ppdcommandlist[ii].value);
			#endif



				if(p)
				{
					add_command_list_brcommand(ppdcommand_all_list[i]->ppdcommandlist[ii].brcommand);
					break;
				}
			}
		}
	}



    //************************************
    //  set PPD option (numerical)
    //************************************
    for ( i = 0; PPDdefaultN[i].option!= NULL; i ++){
      strcpy(tmp,PPDdefaultN[i].option);
      p_tmp = tmp;
      if(tmp[0] == '^')p_tmp ++;
      p = strstr_ex(ppd_line,p_tmp);
      if(p){
	//DEBUGPRINT2(    "main: set PPD option (numerical)    [%s]  [%s]\n",
	//       ppd_line,p_tmp);

	sprintf(tmp,"%s  %s",PPDdefaultN[i].value,
	       p + strlen(PPDdefaultN[i].option));
        //DEBUGPRINT1("set commandline option(n)   **********    : [%s]\n",tmp);

	get_token(PPDdefaultN[i].value ,tmp_op);
	get_token(p + strlen(PPDdefaultN[i].option) ,tmp_n);

	add_command_list(tmp_op,tmp_n);

      }
    }

  }



  //************************************
  //  set brother command line option (string)
  //************************************
  DEBUGPRINT("main:set brother command line option (string)\n");
  write_log_file(5,"BROTHER COMMAND LINE SETTING(S)\n");  
  for ( i = 0; commandlinelist[i].value != NULL; i ++){
    //DEBUGPRINT2("main:set command line option (string)    Loop [%s] [%s]\n",
    //       commandline,commandlinelist[i].value );
    p = strstr_ex(commandline,commandlinelist[i].option);
    if(p){
      add_command_list_brcommand(commandlinelist[i].value);
    }
  }







  //************************************
  //  set cups standard command line option (duplex)
  //************************************
  DEBUGPRINT("main:set standard command line option (duplex)\n");
  write_log_file(5,"STANDARD COMMAND LINE SETTING(DUPLEX)\n");  
  for ( i = 0; standard_side_commandlinelist[i].value != NULL; i ++){
    //DEBUGPRINT2("main:set command line option (duplex)    Loop [%s] [%s]\n",
    //       commandline,standard_side_commandlinelist[i].option );
    p = strstr_ex(commandline,standard_side_commandlinelist[i].option);
    if(p){

      add_command_list_brcommand(standard_side_commandlinelist[i].value);
    }


  }


  //************************************
  //  set cups standard command line option (media )
  //************************************
  DEBUGPRINT("main:set standard command line option (media)\n");
  write_log_file(5,"STANDARD COMMAND LINE SETTING(MEDIA)\n");  
  {
    char output[5][30];
    int max;

    max = divide_media_token(commandline,output);
    //DEBUGPRINT2("main:set command line option (media)    Loop count %d   %s \n",
    //         max,commandline);
    for ( ii=0; ii < max; ii++){
//      for ( i = 0; standard_media_commandlinelist[i].value != NULL; i ++){
		for ( i = 0; standard_commandlinelist[i].value != NULL; i ++){
		
	//DEBUGPRINT2("main:set command line option (media)    Loop [%s] [%s]\n",
	//	    output[ii],standard_media_commandlinelist[i].option);
			p = strstr(standard_commandlinelist[i].option, output[ii]);
			if(p){
				add_command_list_brcommand(standard_commandlinelist[i].value);
			}
		}
    	}
  }
  
  //************************************

  //  set command line option (numerical)
  //************************************
  DEBUGPRINT("main:set command line option (numerical)\n");
  write_log_file(5,"COMMAND LINE SETTING(N)\n");  

  for(i = 0; commandlinelist2[i].option != NULL; i ++){
    p = strstr_ex(commandline,commandlinelist2[i].option);
    //DEBUGPRINT3("set commandline option(n) : [%s] [%s] [%s]\n"
    //	,commandline,commandlinelist2[i].option,p);
    if(p){
      //DEBUGPRINT3("set commandline option(n) 1  **********  : [%s] [%s] [%s]\n"
      //	  ,tmp_n,p + strlen(commandlinelist2[i].option),p);
      get_token(commandlinelist2[i].value   ,tmp_op);
      get_token(p + strlen(commandlinelist2[i].option) ,tmp_n);
      sprintf(tmp,"%s  %s",tmp_op,tmp_n );
      //DEBUGPRINT2("set commandline option(n) 2  **********    : [%s] [%s]\n"
      //	  ,tmp_op,tmp_n);

      add_command_list(tmp_op,tmp_n);

    }
  }

  //************************************
  //  call brprintconf
  //************************************

	exec_brprintconf(brprintconf,printer_model);

	return 0;
}
int main(int argc,char * argv[]) {

  char *printer;
  char ppd_line[500],tmp[500],*p_tmp,tmp_n[10],tmp_op[500];
  FILE *fp_ppd;
  char *p;
  char *commandline,*ppdfile;
  int i,ii;

#ifdef  _CUSTOM_TAPE_
      TapeItem tapeitem;
#endif
  DEBUGPRINT("main:start\n");

//  fprintf (stderr, "ERROR: brcupsconfpt1 pid=%d\n", getpid());
//  sleep(100);

#ifdef _CUSTOM_TAPE_
	memset(&g_tapelist, 0, sizeof(TapeList));
	g_tapelist.iSelIndex = -1;
#endif

  if(argc < 1){
    return 0;
  }
  printer = argv[1];
  if(argc > 2){
    ppdfile= argv[2];
  }
  else{
    ppdfile="";
  }

//	fprintf(stderr, "ERROR: pid=%d\n", getpid());
//	sleep(1000);

  if(argc > 3){
    if(argv[3][0] >= '0' && argv[3][0] <= '9'){

      log_level = argv[3][0] -'0';
    }
    else{
      log_level = 0;
    }
  }
  else{
    log_level = 0;
  }

  if(argc > 4){
    commandline = argv[4];
  }
  else{
    commandline = "NULL COMMAND LINE";
  }
  fp_ppd = fopen(ppdfile , "r");
  if( fp_ppd == NULL) return 0;


  initialize_command_list();




  //************************************
  //  set default setting
  //************************************
  DEBUGPRINT("main:set default setting\n");
  write_log_file(5,"DEFAULT SETTING\n");  
  for ( i = 0; default_setting[i] != NULL; i ++){
    p = strstr_ex(default_setting[i],"BROTHERPRINTER_XXX");
    if(p){
      p = strchr(p,'-');
      if(p){
	add_command_list_brcommand(p);
      }
    }
  }


  //************************************
  //  set PPD option 
  //************************************


      DEBUGPRINT("main:set PPD option (string)\n");
      write_log_file(5,"PPD SETTING\n");
#ifdef  _CUSTOM_TAPE_
 //     TapeItem tapeitem;
       while(fgets(ppd_line,sizeof(ppd_line),fp_ppd))
	{
		if(NULL == delete_ppd_comment(ppd_line))
			continue;
		if( 1 == GetLabel_name_id(ppd_line, tapeitem.tape_name, tapeitem.tape_id) )
		{
			add_tape(&g_tapelist, tapeitem.tape_name, tapeitem.tape_id);
		}
	}
	rewind(fp_ppd);
#endif

	while(fgets(ppd_line,sizeof(ppd_line),fp_ppd)){
		if(NULL == delete_ppd_comment(ppd_line))continue;
    		if(NULL == chk_ppd_default_setting_line(ppd_line))continue;

    //************************************
    //  set PPD option (string)
    //************************************

		for ( i = 0; ppdcommand_all_list[i]!= NULL; i ++)
		{
      //DEBUGPRINT2(    "main: set PPD option (string)    [%s]  [%s]\n",
      //	      ppd_line,ppdcommand_all_list[i]->label);
			p = strstr_ex(ppd_line,ppdcommand_all_list[i]->label);
			if(p)
			{
	//DEBUGPRINT2(    "main: set PPD option (string)    [%s]  [%s]\n",
	//       ppdcommand_all_list[i]->label,ppd_line);
				for (ii = 0; ppdcommand_all_list[i]->ppdcommandlist[ii].value != NULL; ii++)
				{
	  //DEBUGPRINT3(    "main: set PPD option (string)    [%s]  [%s]  [%s]\n",
	  //       ppdcommand_all_list[i]->label,ppdcommand_all_list[i]->ppdcommandlist[ii].value ,  ppd_line);
					p = strstr_ex(ppd_line,ppdcommand_all_list[i]->ppdcommandlist[ii].value);
					if(p)
					{
						add_command_list_brcommand(ppdcommand_all_list[i]->ppdcommandlist[ii].brcommand);
						break;
					}
				}
#ifdef _CUSTOM_TAPE_
				if( strcmp(ppdcommand_all_list[i]->label, "DefaultPageSize") == 0 )
				{
					for( ii = 0; ii < g_tapelist.count; ii++ )
					{
						p = strstr_ex(ppd_line, g_tapelist.tapelist[ii].tape_id);
						if(p)
						{
							char lp[512];
							sprintf(lp, "-media %s", g_tapelist.tapelist[ii].tape_name);
							add_command_list_brcommand(lp);
							break;


						}
					}
				}
#endif
			}
		}



    //************************************
    //  set PPD option (numerical)
    //************************************
		for ( i = 0; PPDdefaultN[i].option!= NULL; i ++){
      			strcpy(tmp,PPDdefaultN[i].option);
      			p_tmp = tmp;
     			if(tmp[0] == '^')p_tmp ++;
      			p = strstr_ex(ppd_line,p_tmp);
     			if(p){
	//DEBUGPRINT2(    "main: set PPD option (numerical)    [%s]  [%s]\n",
	//       ppd_line,p_tmp);

				sprintf(tmp,"%s  %s",PPDdefaultN[i].value,
	       		p + strlen(PPDdefaultN[i].option));
        //DEBUGPRINT1("set commandline option(n)   **********    : [%s]\n",tmp);

				get_token(PPDdefaultN[i].value ,tmp_op);
				get_token(p + strlen(PPDdefaultN[i].option) ,tmp_n);

				add_command_list(tmp_op,tmp_n);

      			}	
		}
	}



  //************************************
  //  set brother command line option (string)
  //************************************
  DEBUGPRINT("main:set brother command line option (string)\n");
  write_log_file(5,"BROTHER COMMAND LINE SETTING(S)\n");  
  for ( i = 0; commandlinelist[i].value != NULL; i ++){
    //DEBUGPRINT2("main:set command line option (string)    Loop [%s] [%s]\n",
    //       commandline,commandlinelist[i].value );
    p = strstr_ex(commandline,commandlinelist[i].option);
    if(p){
      add_command_list_brcommand(commandlinelist[i].value);
    }
  }



  //************************************
  //  set cups standard command line option (duplex)
  //************************************
  DEBUGPRINT("main:set standard command line option (duplex)\n");
  write_log_file(5,"STANDARD COMMAND LINE SETTING(DUPLEX)\n");  
  for ( i = 0; standard_side_commandlinelist[i].value != NULL; i ++){
    //DEBUGPRINT2("main:set command line option (duplex)    Loop [%s] [%s]\n",
    //       commandline,standard_side_commandlinelist[i].option );
    p = strstr_ex(commandline,standard_side_commandlinelist[i].option);
    if(p){

      add_command_list_brcommand(standard_side_commandlinelist[i].value);

    }


  }


  //************************************
  //  set cups standard command line option (media )
  //************************************
  DEBUGPRINT("main:set standard command line option (media)\n");
  write_log_file(5,"STANDARD COMMAND LINE SETTING(MEDIA)\n");  
  {
    char output[5][30];
    int max;

    max = divide_media_token(commandline,output);
    //DEBUGPRINT2("main:set command line option (media)    Loop count %d   %s \n",
    //         max,commandline);
    for ( ii=0; ii < max; ii++){
//      for ( i = 0; standard_media_commandlinelist[i].value != NULL; i ++){
		for ( i = 0; standard_commandlinelist[i].value != NULL; i ++){
		
	//DEBUGPRINT2("main:set command line option (media)    Loop [%s] [%s]\n",
	//	    output[ii],standard_media_commandlinelist[i].option);
			p = strstr(standard_commandlinelist[i].option, output[ii]);
			if(p){
				add_command_list_brcommand(standard_commandlinelist[i].value);
			}
		}
#ifdef _CUSTOM_TAPE_
         	for ( i = 0; i < g_tapelist.count; i++)
		{
                    // modified by Liu Bin 2006.2.20	
			char lp[512];

			p = strstr(output[ii], g_tapelist.tapelist[i].tape_name);
			
			if(p)		// when the user uses the tool to set media
			{
				sprintf(lp, "-media \"%s\"", g_tapelist.tapelist[i].tape_name);
				add_command_list_brcommand(lp);
			}
			else 	
			{
				p = strstr(output[ii], g_tapelist.tapelist[i].tape_id);
				if(p) // when the printing system uses the tool to set media
				{
					sprintf(lp, "-media \"%s\"", g_tapelist.tapelist[i].tape_name);
					add_command_list_brcommand(lp);
				}
			}
		}
#endif		
    	}
  }
  
  //************************************

  //  set command line option (numerical)
  //************************************
  DEBUGPRINT("main:set command line option (numerical)\n");
  write_log_file(5,"COMMAND LINE SETTING(N)\n");  

  for(i = 0; commandlinelist2[i].option != NULL; i ++){
    p = strstr_ex(commandline,commandlinelist2[i].option);
    //DEBUGPRINT3("set commandline option(n) : [%s] [%s] [%s]\n"
    //	,commandline,commandlinelist2[i].option,p);
    if(p){
      //DEBUGPRINT3("set commandline option(n) 1  **********  : [%s] [%s] [%s]\n"
      //	  ,tmp_n,p + strlen(commandlinelist2[i].option),p);
      get_token(commandlinelist2[i].value   ,tmp_op);
      get_token(p + strlen(commandlinelist2[i].option) ,tmp_n);
      sprintf(tmp,"%s  %s",tmp_op,tmp_n );
      //DEBUGPRINT2("set commandline option(n) 2  **********    : [%s] [%s]\n"
      //	  ,tmp_op,tmp_n);

      add_command_list(tmp_op,tmp_n);

    }
  }

  //************************************
  //  call brprintconf
  //************************************

  exec_brprintconf(brprintconf,printer);

	return 0;
}
int add_command_list(char *option , char *value ) 
{ 
  char *p ;
  int i ;

  {
#line 383
  if (! option) {
#line 386
    return (0);
  } else
#line 383
  if (! value) {
#line 386
    return (0);
  } else
#line 383
  if (! *(option + 0)) {
#line 386
    return (0);
  } else
#line 383
  if (! *(value + 0)) {
#line 386
    return (0);
  }
#line 389
  i = 0;
  {
#line 389
  while (1) {
    while_continue: /* CIL Label */ ;
#line 389
    if (! ((int )command_array[i].option[0] != 0)) {
#line 389
      goto while_break;
    }
    {
#line 392
    p = strstr_ex(command_array[i].option, option);
    }
#line 393
    if (p) {
      {
#line 395
      write_log_file(3, (char *)"        C  %s  %s\n", option, value);
#line 396
      strcpy((char */* __restrict  */)(command_array[i].value), (char const   */* __restrict  */)value);
      }
#line 397
      goto while_break;
    }
#line 389
    i ++;
  }
  while_break: /* CIL Label */ ;
  }
#line 401
  if ((int )command_array[i].option[0] == 0) {
    {
#line 403
    strcpy((char */* __restrict  */)(command_array[i].option), (char const   */* __restrict  */)option);
#line 404
    strcpy((char */* __restrict  */)(command_array[i].value), (char const   */* __restrict  */)value);
#line 405
    write_log_file(3, (char *)"        A  %s  %s\n", option, value);
    }
  }
#line 407
  return (1);
}
}
int main(int argc , char **argv ) 
{ 
  char *printer ;
  char ppd_line[500] ;
  char tmp[500] ;
  char *p_tmp ;
  char tmp_n[10] ;
  char tmp_op[500] ;
  FILE *fp_ppd ;
  char *p ;
  char *commandline ;
  char *ppdfile ;
  char *printer_model ;
  int i ;
  int ii ;
  char *tmp___0 ;
  char *tmp___1 ;
  size_t tmp___2 ;
  size_t tmp___3 ;
  char *tmp___4 ;
  char output[5][30] ;
  int max ;
  size_t tmp___5 ;

  {
#line 93
  if (argc < 1) {
#line 94
    return (0);
  }
#line 96
  printer = *(argv + 1);
#line 97
  if (argc > 2) {
#line 98
    ppdfile = *(argv + 2);
  } else {
#line 101
    ppdfile = (char *)"";
  }
#line 108
  if (argc > 3) {
#line 109
    if ((int )*(*(argv + 3) + 0) >= 48) {
#line 109
      if ((int )*(*(argv + 3) + 0) <= 57) {
#line 111
        log_level = (int )*(*(argv + 3) + 0) - 48;
      } else {
#line 114
        log_level = 0;
      }
    } else {
#line 114
      log_level = 0;
    }
  } else {
#line 118
    log_level = 0;
  }
#line 121
  if (argc > 4) {
#line 122
    commandline = *(argv + 4);
  } else {
#line 125
    commandline = (char *)"NULL COMMAND LINE";
  }
  {
#line 128
  printer_model = *(argv + 5);
#line 130
  fp_ppd = fopen((char const   */* __restrict  */)ppdfile, (char const   */* __restrict  */)"r");
  }
#line 131
  if ((unsigned long )fp_ppd == (unsigned long )((void *)0)) {
#line 131
    return (0);
  }
  {
#line 134
  initialize_command_list();
#line 163
  write_log_file(5, (char *)"PPD SETTING\n");
  }
  {
#line 165
  while (1) {
    while_continue: /* CIL Label */ ;
    {
#line 165
    tmp___4 = fgets((char */* __restrict  */)(ppd_line), (int )sizeof(ppd_line), (FILE */* __restrict  */)fp_ppd);
    }
#line 165
    if (! tmp___4) {
#line 165
      goto while_break;
    }
    {
#line 166
    tmp___0 = delete_ppd_comment(ppd_line);
    }
#line 166
    if ((unsigned long )((void *)0) == (unsigned long )tmp___0) {
#line 166
      goto while_continue;
    }
    {
#line 167
    tmp___1 = chk_ppd_default_setting_line(ppd_line);
    }
#line 167
    if ((unsigned long )((void *)0) == (unsigned long )tmp___1) {
#line 167
      goto while_continue;
    }
#line 173
    i = 0;
    {
#line 173
    while (1) {
      while_continue___0: /* CIL Label */ ;
#line 173
      if (! ((unsigned long )ppdcommand_all_list[i] != (unsigned long )((void *)0))) {
#line 173
        goto while_break___0;
      }
      {
#line 177
      p = strstr_ex(ppd_line, (ppdcommand_all_list[i])->label);
      }
#line 178
      if (p) {
#line 182
        ii = 0;
        {
#line 182
        while (1) {
          while_continue___1: /* CIL Label */ ;
#line 182
          if (! ((unsigned long )(ppdcommand_all_list[i])->ppdcommandlist[ii].value != (unsigned long )((void *)0))) {
#line 182
            goto while_break___1;
          }
          {
#line 186
          p = strstr_ex(ppd_line, (ppdcommand_all_list[i])->ppdcommandlist[ii].value);
          }
#line 190
          if (p) {
            {
#line 192
            add_command_list_brcommand((ppdcommand_all_list[i])->ppdcommandlist[ii].brcommand);
            }
#line 193
            goto while_break___1;
          }
#line 182
          ii ++;
        }
        while_break___1: /* CIL Label */ ;
        }
      }
#line 173
      i ++;
    }
    while_break___0: /* CIL Label */ ;
    }
#line 204
    i = 0;
    {
#line 204
    while (1) {
      while_continue___2: /* CIL Label */ ;
#line 204
      if (! ((unsigned long )PPDdefaultN[i].option != (unsigned long )((void *)0))) {
#line 204
        goto while_break___2;
      }
      {
#line 205
      strcpy((char */* __restrict  */)(tmp), (char const   */* __restrict  */)PPDdefaultN[i].option);
#line 206
      p_tmp = tmp;
      }
#line 207
      if ((int )tmp[0] == 94) {
#line 207
        p_tmp ++;
      }
      {
#line 208
      p = strstr_ex(ppd_line, p_tmp);
      }
#line 209
      if (p) {
        {
#line 213
        tmp___2 = strlen((char const   *)PPDdefaultN[i].option);
#line 213
        sprintf((char */* __restrict  */)(tmp), (char const   */* __restrict  */)"%s  %s",
                PPDdefaultN[i].value, p + tmp___2);
#line 217
        get_token(PPDdefaultN[i].value, tmp_op);
#line 218
        tmp___3 = strlen((char const   *)PPDdefaultN[i].option);
#line 218
        get_token(p + tmp___3, tmp_n);
#line 220
        add_command_list(tmp_op, tmp_n);
        }
      }
#line 204
      i ++;
    }
    while_break___2: /* CIL Label */ ;
    }
  }
  while_break: /* CIL Label */ ;
  }
  {
#line 233
  write_log_file(5, (char *)"BROTHER COMMAND LINE SETTING(S)\n");
#line 234
  i = 0;
  }
  {
#line 234
  while (1) {
    while_continue___3: /* CIL Label */ ;
#line 234
    if (! ((unsigned long )commandlinelist[i].value != (unsigned long )((void *)0))) {
#line 234
      goto while_break___3;
    }
    {
#line 237
    p = strstr_ex(commandline, commandlinelist[i].option);
    }
#line 238
    if (p) {
      {
#line 239
      add_command_list_brcommand(commandlinelist[i].value);
      }
    }
#line 234
    i ++;
  }
  while_break___3: /* CIL Label */ ;
  }
  {
#line 253
  write_log_file(5, (char *)"STANDARD COMMAND LINE SETTING(DUPLEX)\n");
#line 254
  i = 0;
  }
  {
#line 254
  while (1) {
    while_continue___4: /* CIL Label */ ;
#line 254
    if (! ((unsigned long )standard_side_commandlinelist[i].value != (unsigned long )((void *)0))) {
#line 254
      goto while_break___4;
    }
    {
#line 257
    p = strstr_ex(commandline, standard_side_commandlinelist[i].option);
    }
#line 258
    if (p) {
      {
#line 260
      add_command_list_brcommand(standard_side_commandlinelist[i].value);
      }
    }
#line 254
    i ++;
  }
  while_break___4: /* CIL Label */ ;
  }
  {
#line 271
  write_log_file(5, (char *)"STANDARD COMMAND LINE SETTING(MEDIA)\n");
#line 276
  max = divide_media_token(commandline, (char (*)[30])(output));
#line 279
  ii = 0;
  }
  {
#line 279
  while (1) {
    while_continue___5: /* CIL Label */ ;
#line 279
    if (! (ii < max)) {
#line 279
      goto while_break___5;
    }
#line 281
    i = 0;
    {
#line 281
    while (1) {
      while_continue___6: /* CIL Label */ ;
#line 281
      if (! ((unsigned long )standard_commandlinelist[i].value != (unsigned long )((void *)0))) {
#line 281
        goto while_break___6;
      }
      {
#line 285
      p = strstr((char const   *)standard_commandlinelist[i].option, (char const   *)(output[ii]));
      }
#line 286
      if (p) {
        {
#line 287
        add_command_list_brcommand(standard_commandlinelist[i].value);
        }
      }
#line 281
      i ++;
    }
    while_break___6: /* CIL Label */ ;
    }
#line 279
    ii ++;
  }
  while_break___5: /* CIL Label */ ;
  }
  {
#line 298
  write_log_file(5, (char *)"COMMAND LINE SETTING(N)\n");
#line 300
  i = 0;
  }
  {
#line 300
  while (1) {
    while_continue___7: /* CIL Label */ ;
#line 300
    if (! ((unsigned long )commandlinelist2[i].option != (unsigned long )((void *)0))) {
#line 300
      goto while_break___7;
    }
    {
#line 301
    p = strstr_ex(commandline, commandlinelist2[i].option);
    }
#line 304
    if (p) {
      {
#line 307
      get_token(commandlinelist2[i].value, tmp_op);
#line 308
      tmp___5 = strlen((char const   *)commandlinelist2[i].option);
#line 308
      get_token(p + tmp___5, tmp_n);
#line 309
      sprintf((char */* __restrict  */)(tmp), (char const   */* __restrict  */)"%s  %s",
              tmp_op, tmp_n);
#line 313
      add_command_list(tmp_op, tmp_n);
      }
    }
#line 300
    i ++;
  }
  while_break___7: /* CIL Label */ ;
  }
  {
#line 322
  exec_brprintconf(brprintconf, printer_model);
  }
#line 324
  return (0);
}
}
int main(int argc,char * argv[]) {
  char *printer;
  char ppd_line[500],tmp[500],*p_tmp,tmp_n[10],tmp_op[500];
  FILE *fp_ppd;
  char *p;
  char *commandline,*ppdfile;
  int i,ii;

  DEBUGPRINT("main:start\n");
  
  if(argc < 1){
    return 0;
  }
  printer = argv[1];
  if(argc > 2){
    ppdfile= argv[2];
  }
  else{
    ppdfile="";
  }
  if(argc > 3){
    if(argv[3][0] >= '0' && argv[3][0] <= '9'){
      log_level = argv[3][0] -'0';
    }
    else{
      log_level = 0;
    }
  }
  else{
    log_level = 0;
  }
  if(argc > 4){
    commandline = argv[4];
  }
  else{
    commandline = "NULL COMMAND LINE";
  }
  fp_ppd = fopen(ppdfile , "r");
  if( fp_ppd == NULL) return 0;


  initialize_command_list();




  DEBUGPRINT("main:set default setting\n");
  write_log_file(5,"DEFAULT SETTING\n");  
  for ( i = 0; default_setting[i] != NULL; i ++){
    p = strstr_ex(default_setting[i],"BROTHERPRINTER_XXX");
    if(p){
      p = strchr(p,'-');
      if(p){
	add_command_list_brcommand(p);
      }
    }
  }


  DEBUGPRINT("main:set PPD option (string)\n");
  write_log_file(5,"PPD SETTING\n");  
  while(fgets(ppd_line,sizeof(ppd_line),fp_ppd)){
    if(NULL == delete_ppd_comment(ppd_line))continue;
    if(NULL == chk_ppd_default_setting_line(ppd_line))continue;


    for ( i = 0; ppdcommand_all_list[i]!= NULL; i ++){
      p = strstr_ex(ppd_line,ppdcommand_all_list[i]->label);
      if(p){
	for (ii = 0; ppdcommand_all_list[i]->ppdcommandlist[ii].value != NULL; ii++){
	  p = strstr_ex(ppd_line,ppdcommand_all_list[i]->ppdcommandlist[ii].value);
	  if(p){
	    add_command_list_brcommand(ppdcommand_all_list[i]->ppdcommandlist[ii].brcommand);
	    break;
	  }
	}
      }
    }



    for ( i = 0; PPDdefaultN[i].option!= NULL; i ++){
      strcpy(tmp,PPDdefaultN[i].option);
      p_tmp = tmp;
      if(tmp[0] == '^')p_tmp ++;
      p = strstr_ex(ppd_line,p_tmp);
      if(p){

	sprintf(tmp,"%s  %s",PPDdefaultN[i].value,
	       p + strlen(PPDdefaultN[i].option));

	get_token(PPDdefaultN[i].value ,tmp_op);
	get_token(p + strlen(PPDdefaultN[i].option) ,tmp_n);

	add_command_list(tmp_op,tmp_n);

      }
    }

  }



  DEBUGPRINT("main:set brother command line option (string)\n");
  write_log_file(5,"BROTHER COMMAND LINE SETTING(S)\n");  
  for ( i = 0; commandlinelist[i].value != NULL; i ++){
    p = strstr_ex(commandline,commandlinelist[i].option);
    if(p){
      add_command_list_brcommand(commandlinelist[i].value);
    }
  }



  DEBUGPRINT("main:set standard command line option (duplex)\n");
  write_log_file(5,"STANDARD COMMAND LINE SETTING(DUPLEX)\n");  
  for ( i = 0; standard_side_commandlinelist[i].value != NULL; i ++){
    p = strstr_ex(commandline,standard_side_commandlinelist[i].option);
    if(p){
      add_command_list_brcommand(standard_side_commandlinelist[i].value);
    }
  }


  DEBUGPRINT("main:set standard command line option (media)\n");
  write_log_file(5,"STANDARD COMMAND LINE SETTING(MEDIA)\n");  
  {
    char output[5][30];
    int max;

    max = divide_media_token(commandline,output);
    for ( ii=0; ii < max; ii++){
      for ( i = 0; standard_media_commandlinelist[i].value != NULL; i ++){
	p = strstr_ex(output[ii],standard_media_commandlinelist[i].option);
	if(p){
	  add_command_list_brcommand(standard_media_commandlinelist[i].value);
	}
      }
    }
  }
  
  DEBUGPRINT("main:set command line option (numerical)\n");
  write_log_file(5,"COMMAND LINE SETTING(N)\n");  

  for(i = 0; commandlinelist2[i].option != NULL; i ++){
    p = strstr_ex(commandline,commandlinelist2[i].option);
    if(p){
      get_token(commandlinelist2[i].value   ,tmp_op);
      get_token(p + strlen(commandlinelist2[i].option) ,tmp_n);
      sprintf(tmp,"%s  %s",tmp_op,tmp_n );

      add_command_list(tmp_op,tmp_n);

    }
  }


  exec_brprintconf(brprintconf,printer);



}
int main(int argc,char * argv[]) {

    TapeItem tapeitem;
    char *printer;
    char ppd_line[500],tmp[500],*p_tmp,tmp_n[10],tmp_op[500];
    FILE *fp_ppd;
    char *p;
    char *commandline,*ppdfile;
    int i,ii;

    memset(&g_tapelist, 0, sizeof(TapeList));
    g_tapelist.iSelIndex = -1;

    if(argc < 1){
        return 0;
    }

    printer = argv[1];
    if(argc > 2){
        ppdfile= argv[2];
    }
    else{
        ppdfile="";
    }

    if(argc > 3){
        if(argv[3][0] >= '0' && argv[3][0] <= '9'){
            log_level = argv[3][0] -'0';
        }
        else{
            log_level = 0;
        }
    }
    else{
        log_level = 0;
    }

    if(argc > 4){
        commandline = argv[4];
    }
    else{
        commandline = "NULL COMMAND LINE";
    }
    fp_ppd = fopen(ppdfile , "r");
    if( fp_ppd == NULL) return 0;


    initialize_command_list();




    //************************************
    //  set default setting
    //************************************
    DEBUGPRINT("main:set default setting\n");
    write_log_file(5,"DEFAULT SETTING\n");  
    for ( i = 0; default_setting[i] != NULL; i ++){
        p = strstr_ex(default_setting[i],"BROTHERPRINTER_XXX");
        if(p){
            p = strchr(p,'-');
            if(p){
                add_command_list_brcommand(p);
            }
        }
    }


    //************************************
    //  set PPD option 
    //************************************
    DEBUGPRINT("main:set PPD option (string)\n");
    write_log_file(5,"PPD SETTING\n");
    while(fgets(ppd_line,sizeof(ppd_line),fp_ppd))
    {
        if(NULL == delete_ppd_comment(ppd_line))
            continue;
        if( 1 == GetLabel_name_id(ppd_line, tapeitem.tape_name, tapeitem.tape_id) )
        {
            add_tape(&g_tapelist, tapeitem.tape_name, tapeitem.tape_id);
        }
    }
    rewind(fp_ppd);

    while(fgets(ppd_line,sizeof(ppd_line),fp_ppd)){
        if(NULL == delete_ppd_comment(ppd_line))continue;
        if(NULL == chk_ppd_default_setting_line(ppd_line))continue;

        //************************************
        //  set PPD option (string)
        //************************************

        for ( i = 0; ppdcommand_all_list[i]!= NULL; i ++)
        {
            p = strstr_ex(ppd_line,ppdcommand_all_list[i]->label);
            if(p)
            {
                for (ii = 0; ppdcommand_all_list[i]->ppdcommandlist[ii].value != NULL; ii++)
                {
                    p = strstr_ex(ppd_line,ppdcommand_all_list[i]->ppdcommandlist[ii].value);
                    if(p)
                    {
                        add_command_list_brcommand(ppdcommand_all_list[i]->ppdcommandlist[ii].brcommand);
                        break;
                    }
                }

                if( strcmp(ppdcommand_all_list[i]->label, "DefaultPageSize") == 0 )
                {
                    for( ii = 0; ii < g_tapelist.count; ii++ )
                    {
                        p = strstr_ex(ppd_line, g_tapelist.tapelist[ii].tape_id);
                        if(p)
                        {
                            char lp[512];
                            sprintf(lp, "-media %s", g_tapelist.tapelist[ii].tape_name);
                            add_command_list_brcommand(lp);
                            break;
                        }
                    }
                }
            }
        }

        //************************************
        //  set PPD option (numerical)
        //************************************
        for ( i = 0; PPDdefaultN[i].option!= NULL; i ++){
            strcpy(tmp,PPDdefaultN[i].option);
            p_tmp = tmp;

            if(tmp[0] == '^')p_tmp ++;
            p = strstr_ex(ppd_line,p_tmp);

            if(p){
                sprintf(tmp,"%s  %s",PPDdefaultN[i].value,
                        p + strlen(PPDdefaultN[i].option));

                get_token(PPDdefaultN[i].value ,tmp_op);
                get_token(p + strlen(PPDdefaultN[i].option) ,tmp_n);

                add_command_list(tmp_op,tmp_n);
            }
        }
    }

    //************************************
    //  set brother command line option (string)
    //************************************
    DEBUGPRINT("main:set brother command line option (string)\n");
    write_log_file(5,"BROTHER COMMAND LINE SETTING(S)\n");
    for ( i = 0; commandlinelist[i].value != NULL; i ++){
        p = strstr_ex(commandline,commandlinelist[i].option);
        if(p){
            add_command_list_brcommand(commandlinelist[i].value);
        }
    }

    //************************************
    //  set cups standard command line option (duplex)
    //************************************
    DEBUGPRINT("main:set standard command line option (duplex)\n");
    write_log_file(5,"STANDARD COMMAND LINE SETTING(DUPLEX)\n");
    for ( i = 0; standard_side_commandlinelist[i].value != NULL; i ++){
        p = strstr_ex(commandline,standard_side_commandlinelist[i].option);
        if(p){
            add_command_list_brcommand(standard_side_commandlinelist[i].value);
        }
    }
   
    //************************************
    //  set cups standard command line option (media )
    //************************************
    DEBUGPRINT("main:set standard command line option (media)\n");
    write_log_file(5,"STANDARD COMMAND LINE SETTING(MEDIA)\n");
    {
        char output[5][30];
        int max;

        max = divide_media_token(commandline,output);

        for ( ii=0; ii < max; ii++){
            for ( i = 0; standard_commandlinelist[i].value != NULL; i ++){
                p = strstr(standard_commandlinelist[i].option, output[ii]);
                if(p){
                    add_command_list_brcommand(standard_commandlinelist[i].value);
                }
            }

            for ( i = 0; i < g_tapelist.count; i++)
            {
                char lp[512];
                p = strstr(output[ii], g_tapelist.tapelist[i].tape_name);
            
                if(p)
                {
                    sprintf(lp, "-media \"%s\"", g_tapelist.tapelist[i].tape_name);
                    add_command_list_brcommand(lp);
                }
                else
                {
                    p = strstr(output[ii], g_tapelist.tapelist[i].tape_id);
                    if(p)
                    {
                        sprintf(lp, "-media \"%s\"", g_tapelist.tapelist[i].tape_name);
                        add_command_list_brcommand(lp);
                    }
                }
            }
        }
    }

    //************************************
    //  set command line option (numerical)
    //************************************
    DEBUGPRINT("main:set command line option (numerical)\n");
    write_log_file(5,"COMMAND LINE SETTING(N)\n");

    for(i = 0; commandlinelist2[i].option != NULL; i ++){
        p = strstr_ex(commandline,commandlinelist2[i].option);
    
        if(p){
            get_token(commandlinelist2[i].value   ,tmp_op);
            get_token(p + strlen(commandlinelist2[i].option) ,tmp_n);
            sprintf(tmp,"%s  %s",tmp_op,tmp_n );
            add_command_list(tmp_op,tmp_n);
        }
    }

    //************************************
    //  call brprintconf
    //************************************
    exec_brprintconf(brprintconf,printer,argv[5]);
    
    return 0;
}