Example #1
0
/*
#define __POINTER_FILES__
//static FRESULT cari_files (char* pathxx, char *aksi) {
int cari_files (char* pathxx, char *aksi) {
    FRESULT resxx;
    FILINFO fnoxx;
    DIR dirxx;
    int i;
    
    #ifdef __POINTER_FILES__
    char *fnxx;
    #endif
    
    #ifdef __ARRAY__
    	char fnxx[64];
    #endif
    char abs_pathxx[128];
    strcpy(abs_pathxx, pathxx);
    char ngomong[128];
#if _USE_LFN
	static char lfnxx[_MAX_LFN * (_DF1S ? 2 : 1) + 1];
    fnoxx.lfname = lfnxx;
    fnoxx.lfsize = sizeof(lfnxx);
#endif

	portENTER_CRITICAL();
    resxx = f_opendir(&dirxx, pathxx);
    portEXIT_CRITICAL();
    
    if (resxx == FR_OK) {
        i = strlen(pathxx);

        for (;;) {
			portENTER_CRITICAL();
            resxx = f_readdir(&dirxx, &fnoxx);
            portEXIT_CRITICAL();
            
            if (resxx != FR_OK || fnoxx.fname[0] == 0) break;
            if (fnoxx.fname[0] == '.') continue;
#if _USE_LFN
			#ifdef __POINTER_FILES__
            fnxx = *fnoxx.lfname ? fnoxx.lfname : fnoxx.fname;
            #endif
            //strcpy(ngomong, fnxx.fname);
            //printf("ngomong: %s\r\n", ngomong);
            
            #ifdef __ARRAY__
				if (*fnoxx.lfname!=NULL) {
					strcpy(fnxx,fnoxx.lfname);
				} else {
					strcpy(fnxx,fnoxx.fname);
				}
			#endif
			
#else
			#ifdef __POINTER_FILES__
            fnxx = fnoxx.fname;
            #endif
            
            strcpy(ngomong, fnxx);
            
            
            #ifdef __ARRAY__
	            strcpy(fnxx,fnoxx.fname);
            #endif
#endif
			//sprintf(abs_pathxx, "%s\\%s", pathxx, fnxx);
			strcat(abs_pathxx, fnxx);
			printf("^^^^^^^^^%s\r\n", abs_pathxx);
			//printf("ngomong: %s\r\n", ngomong);
			#ifdef PAKAI_GSM_FTP
				if (strncmp(aksi,"kirim_ftp", 9)==0) {
					//kirim_file_ke_ftp(abs_pathxx, fnxx);
					//printf("kirim_ftpnya nama file: %s  %s\r\n", abs_pathxx, fnxx);
					//printf(ngomong);
				} else if (strncmp(aksi,"hapus", 5)==0) {
					i=dihapus(abs_pathxx);
					if (i==0) {
						printf("%s dihapus\r\n", abs_pathxx);
					} else {
						printf("%s GAGAL dihapus\r\n", abs_pathxx);
					}
				} else {
					//printf("%s\\%s\r\n", pathxx, fnxx);
				}
			#endif
			//printf("kirim_ftpnya nama file: %s  %s\r\n", abs_pathxx, fnxx);
			
			
            //vTaskDelay(10);
        }
    }

    //return resxx;
    return 1;
}
//*/
int cari_doku(int argc, char **argv) {
	display_args(argc,argv);
	printf("Jml arg: %d\r\n", argc);
	if (argc<1) {
		printf("Argumen kurang.\r\n");
		printf("cari [x-y: H-3 | J-1] [aksinya: ftp | lihat]\r\n");
		return -1;
	}
	char str_doku[127];
	sprintf(str_doku, "%s", argv[1]);
	if ((str_doku[0]!='H') && (str_doku[0]!='h') && (str_doku[0]!='J') && (str_doku[0]!='j') && (str_doku[0]!='B') && (str_doku[0]!='b') ) {
		printf("Argumen tidak benar !!\r\n");
		printf("Contoh : H-7, J-2, B-1\r\n");
		return -1;
	}
	
	if (argc==2) {
		cari_berkas(str_doku, "lihat");
		return 1;
	}
	
	if (strcmp(argv[2], "ftp") == 0) {
		#ifdef PAKAI_GSM_FTP
			//gsm_ftp();
			saat_gsm_aksi = 1;
		/*
			if (konek_ftp_awal()==0) 	{
				printf("Koneksi GPRS gagal !!!\r\n");
				printf("Create FTP sesssion error !\r\n");
				return 0;
			} else {
				printf("Create FTP sesssion !\r\n");
			}
			
			cari_berkas(str_doku, "kirim_ftp");			
			tutup_koneksi_ftp();
		//*/
		#else
			printf("tidak ada #define PAKAI_GSM_FTP\r\n");
		#endif
	} else if (strcmp(argv[2], "lihat") == 0) {
		cari_berkas(str_doku, "lihat");
	} else {
		printf("Perintah salah\r\n");
		printf("cari [x-y: H-3 | J-1] [aksinya: ftp | lihat]\r\n");
	}
}
Example #2
0
//TSP -> NN -> Generations( g, ForkJoin ( n, ACO -> 2-OPT ) ) -> TSP'
void Pipeline3(tsp_class& tsp_instance, unsigned int number_of_tasks, 
			                            unsigned int number_of_generations)
{
	#pragma region "PipelineConfiguration"
	auto a = Args<General_args_type>(make_General_args(number_of_generations, number_of_tasks));
	auto sa = Args<SA_args_type>();
	auto ga = Args<GA_args_type>();

	const int aco_iterations = static_cast<int>(tsp_instance.cities.size() * 100);
	const ants_type::size_type number_of_ants = tsp_instance.cities.size();
	const double BASE_PHEROMONE = 1.0f / static_cast<double>(tsp_instance.cities.size());
	const double ALPHA = 1.0;
	const double BETA  = 1.0;
	const double RHO   = 0.9;
	const double QVAL  = 70;
	auto aco = Args<ACO_args_type>(make_ACO_args(aco_iterations, number_of_ants, 
								   BASE_PHEROMONE, ALPHA, BETA, RHO, QVAL));	

	const char* pipeline_description = "TSP -> NN -> Generations( g, ForkJoin ( n, ACO -> 2-OPT ) ) -> TSP'";
	display_args(pipeline_description, a, sa, aco, ga);
	
	auto g = a[0].number_of_iterations_or_generations;
	auto n = a[0].number_of_tasks_in_parallel;
	auto _TSP = TSP(just(tsp_instance));
	auto _DisplayInput = Display("TSP INPUT", DisplayFlags::All);
	auto _NN = Measure(NN(), Display("NEAREST NEIGHBOUR", DisplayFlags::EmitMathematicaGraphPlot));	
	auto _ACO_2OPT = Chain(ACO(aco[0].aco_iterations, aco[0].number_of_ants, aco[0].base_pheromone, 
								aco[0].favor_pheromone_level_over_distance, 
								aco[0].favor_distance_over_pheromone_level, 
								aco[0].value_for_intensification_and_evaporation, 
								aco[0].pheronome_distribution), _2OPT());
	auto _ForkJoin = [](unsigned int n, TSP::transformer_type map_fun){ return Measure(ForkJoin(n, map_fun)); };
	auto _DisplayOutput = Display("TSP OUTPUT", DisplayFlags::EmitMathematicaGraphPlot); 
	#pragma endregion

	//TSP -> NN -> Generations( g, ForkJoin ( n, ACO -> 2-OPT ) ) -> TSP'
	auto result = _TSP
					.map(_DisplayInput)
					.map(_NN)
					.map(Generations(g, _ForkJoin(n, _ACO_2OPT)))
					.map(_DisplayOutput);
}
Example #3
0
static void item_fnt(int argc, char **argv)
{
  printf("item%d command called\n\r",(int)tinysh_get_arg());
  display_args(argc,argv);
}
Example #4
0
static void foo_fnt(int argc, char **argv)
{
  printf("foo command called\n\r");
  display_args(argc,argv);
}
Example #5
0
File: shell.c Project: koson/atinom
void kirim_serial (int argc, char **argv) {
	int sumb=0, i=0;
	int lope;
	unsigned char kirim_ser[100];
	// serial 2 AT\r\n
	if (argc < 3) {
		if (argc > 1)	{
			if (strcmp(argv[1], "help") == 0) {
				printf("serial 2 AT\r\n");
				return;
			}
		}
		printf(" ERR: argument kurang !\r\n");
		//printf(" coba set_group help \r\n");
		return;	
	}
	
	display_args(argc,argv);
	sprintf(kirim_ser, "%s", argv[1]);
	sumb = cek_nomer_valid(kirim_ser, 5);

	#ifdef PAKAI_SERIAL_1
	if (1 == sumb) {
		ganti_kata(kirim_ser, argv[2]);
		serX_putstring(1, kirim_ser);
		#ifdef PAKAI_GSM_FTP
		if	(PAKAI_GSM_FTP == 1)
			baca_hasil();			// fitur yang perlu jawaban
		#endif
		return;
	}
	#endif

	#ifdef PAKAI_SERIAL_2
	if (2 == sumb) {
		for (i=0; i<10; i++)
			ser2_getchar(1, &lope, 20 );
		
		ganti_kata(kirim_ser, argv[2]);
		serX_putstring(2, kirim_ser);
		//*
		#ifdef PAKAI_GSM_FTP
		if	(PAKAI_GSM_FTP==2)
			baca_hasil();			// fitur yang perlu jawaban
		#endif
		//*/
		return;
	}
	#endif
	
	#ifdef PAKAI_SERIAL_3
	if (3 == sumb) {
		ganti_kata(kirim_ser, argv[2]);
		
		#ifdef PAKAI_MAX485
		FIO0SET = TXDE;		// on	---> bisa kirim
		#endif
		serX_putstring(3, kirim_ser);
		
		#ifdef PAKAI_MAX485
		//FIO0SET &= ~TXDE;	// off	---> gak bisa kirim
		//FIO0CLR = TXDE;
		#endif
		
		#ifdef PAKAI_GSM_FTP
		if	(PAKAI_GSM_FTP==3)
			baca_hasil();			// fitur yang perlu jawaban
		#endif
		return;
	}
	#endif
	
}
Example #6
0
void set_mesin(int argc, char **argv)
{
	unsigned char buf[24];
	int sumb;
	unsigned int ret_ip;
	
	if (argc < 4) 
	{
		if (argc > 1)
		{
			if (strcmp(argv[1], "help") == 0)
			{
				printf(" Setting mesin yang akan ditampilkan\r\n");
				garis_bawah();
				printf(" argument : help, default, nama\r\n");
				printf("   help   : printout keterangan ini\r\n");
				printf("   default : load default setting mesin\r\n");
				printf(" \r\n");
				printf("   nama : memberikan nama mesin yang akan ditampilkan\r\n");
				printf("     misalnya : $ set_mesin nama 1 GMT_#4\r\n");
				printf("     artinya memberikan nama mesin 1 dengan GMT_#4\r\n");
			
				return ;
			}
			else if (strcmp(argv[1], "default") == 0)
			{
				printf("set mesin dengan data default !\n");
				set_awal_mesin();
				
				return;
			}		
		}
		printf(" ERR: argument kurang !\r\n");
		printf(" coba set_mesin help \r\n");
		return;	
	}
	
	printf(" set_mesin %s dipanggil\r\n", argv[1]);
	garis_bawah();
  	display_args(argc,argv);
	
	if (strcmp(argv[1], "nama") == 0)
	{
		sprintf(buf, "%s", argv[2]);	
		sumb = cek_nomer_sumber(buf, 10);
		if (sumb > 0)		
		{
			printf(" mesin = %d : ", sumb);
			
			if (strlen(argv[3]) > 10)
			{
				printf("nama terlalu panjang !\r\n");
				return;
			}
			sprintf(mesin[sumb-1].nama, argv[3]);
			printf(" Nama : %s\r\n", mesin[sumb-1].nama); 
		}
		else return ; 	
	}
	else
	{
		printf(" ERR: perintah tidak benar !\r\n");
		printf(" coba set_mesin help \r\n");
		return;
	}
}							 
Example #7
0
File: main.c Project: vidarh/ACE
int main( int argc, char **argv )
{
  int badopt= 0;
  int numfiles= 0;
  char *outfmt;

#ifdef _DCC /* Dice */
  expand_args(argc,argv, &argc,&argv);
#endif /* _DCC */

  infile= outfmt= (char *)0L;
  whoami= *argv;

  fin= stdin;
  fout= stdout;
  ferr= stderr;

  while(--argc>0 && !badopt)
  {
    char *arg= *++argv;

    if(*arg=='-')
    {
      if(arg[1]=='-')
        arg= convert_args(*argv);

      switch(*++arg)
      {

/*-d*/  case 'd':
#ifdef DEBUG
          debuglevel= 1;
#else
          echo("not compiled w/ a symbol DEBUG defined.  No debugging information available -- Sorry.");
#endif
          break;

/*-E*/  case 'E':
          if(arg[1]) ++arg;
          else arg= (--argc > 0) ? *(++argv) : (char *)0L;

          if(arg && *arg)
          {
            if(ferr != stderr)
            {
              warn("warning: option `%s' has already been seen!",*argv);
              fclose(ferr);
            }

            ferr= fopen(arg,"w");

            if(!ferr)
            {
              warn("can't direct error output to `%s' -- will use stderr",arg);
              ferr= stderr;
            }
          }
          else
          { warn("missing filename after `%s' option",*argv);
            ++badopt;
          }
          break;

/*-?*/  case '?':
/*-h*/  case 'h':
          fprintf(stderr,
            "usage: %s [options] [-o|>] [outfile] [<] [infiles..]\n\n",whoami);

          display_args();
          badopt= 1; /* hack: means exit. */
          break;

/*-o*/  case 'o':
          if(arg[1]) ++arg;
          else arg= (--argc > 0) ? *(++argv) : (char *)0L;

          if(arg && *arg)
          {
            if(outfmt)
              warn("option `%s' has already been seen!",*argv);
            outfmt= arg;
          }
          else
          {
            warn("missing output filename after `%s' option",*argv);
            ++badopt;
          }
          break;

/*-s*/  case 's':
          warn("silent option `%s' is not yet implemented -- sorry.",*argv);
          break;

/*-v*/  case 'v':
          display_version_information();
          badopt= 1; /* hack: means exit. */
          break;

/*??*/  default:
          warn("unrecognized option `%s'",*argv);
          ++badopt;
          break;
      }
    }
    else
    {
      if(arg && *arg)
      {
        if( chain_fname(arg) )
        {
          warn("out of memory... aaaiiiiiieeeeeeeee!");
          ++badopt;
        }
        else ++numfiles;
      }
      else
      {
        warn("command line error: can't parse `%s'",arg);
        ++badopt;
      }
    }
  }


  if(numfiles)
  {
    while( !badopt && (infile= unchain_fname()) )
    {
      if( fin= fopen(infile,"rb") )
      {
        if( fout= outfmt ? fmtopen(outfmt, infile) : stdout )
        {
          badopt= dothehardpart();

          if(fout != stdout)
            fclose(fout);
        }
        else ++badopt; /* fmtopen() has already warned */
        fclose(fin);
      }
      else
      {
        warn("can't access your input file `%s'",infile);
        ++badopt;
      }
    }
    purge_flist();
  }

  else if( !badopt )
  {
    if( fout= outfmt ? fmtopen(outfmt, "stdin") : stdout )
    {
      badopt= dothehardpart();

      if(fout != stdout)
         fclose(fout);
    }
    else ++badopt; /* fmtopen() has already warned */
  }

  if(fin  && fin  != stdin)    fclose(fin);
  if(fout && fout != stdout)   fclose(fout);
  if(ferr && ferr != stderr)   fclose(ferr);

  exit( badopt ? 1:0 );
}
Example #8
0
void set_kanal(int argc, char **argv)
{
	unsigned char buf[24];
	unsigned int kanal;
	float m;
	float c;
	int ret;
	
	if (argc < 3) 
	{
		if (argc > 1)
		{
			if (strcmp(argv[1], "help") == 0)
			{
				printf(" setting faktor kalibrasi kanal dengan y = mx + c, misalnya : \r\n");
				printf(" set_kanal 3 1.34 -0.431\r\n");
				printf(" artinya : setting kanal 3 dengan m = 1.34 dan C = -0.431\r\n");
				printf(" \r\n");
				printf(" set_kanal juga bisa untuk setting keterangan, misalnya :\r\n");
				printf(" set_kanal 3 ket jacket_water_temp\r\n");
				printf(" artinya : setting kanal 3 dengan keterangan 'jacket_water_temp'\r\n");
				return;
			} 
			else if (strcmp(argv[1], "default") == 0)
			{
				printf("set kanal dengan data default !\n");
				set_dafault_kalib();
				
				return;
			}	
		}
		printf(" ERR: argument kurang !\r\n");
		printf(" coba set_kanal help \r\n");
		return;	
	}
	
	printf(" set_kanal untuk kanal %s dipanggil\r\n", argv[1]);
	garis_bawah();
  	display_args(argc,argv);
  	
  	sprintf(buf, "%s", argv[1]);
	ret = sscanf(buf, "%d", &kanal);
	
	if (kanal > 10 || ret == NULL) 
	{
		printf(" Err kanal !\r\n");
		return ;
	}
	
	if (strcmp(argv[2], "ket") == 0)
  	{
  		printf(" Setting keterangan kanal %d :\r\n", kanal);
  		sprintf(env2.kalib[kanal-1].ket, "%s", argv[3]);
  		printf(" %s", env2.kalib[kanal-1].ket);
  	}
  	else
  	{
		sprintf(buf, "%s", argv[2]);
		ret = sscanf(buf, "%f", &m);
	
		if (ret == NULL) 
		{
			printf(" Err m !\r\n"); 
			return ;
		}
	
		sprintf(buf, "%s", argv[3]);
		ret = sscanf(buf, "%f", &c);
	
		if (ret == NULL) 
		{
			printf(" Err C !\r\n"); 
			return ;
		}
	
		printf(" Seting kanal %d, m = %f, dan C = %f\r\n", kanal, m, c);
		env2.kalib[kanal - 1].m = m;
		env2.kalib[kanal - 1].C = c;
		
	}
}
Example #9
0
void foo_fnt(int argc, char **argv)
{
  MESSAGE("foo command called\n\r");
  display_args(argc,argv);
}
Example #10
0
int main(int argc, char *argv[])
{
  int err= 0; /* return code */

  char *outfile    = (char *)0;      /* --output-file       */
  char *errfile    = (char *)0;      /* --error-file        */
  char *headerfile = (char *)0;      /* --texi-header-file  */
  char *yank_type  = "*";            /* --yank-type         */
  char *body_env   = "smallexample"; /* -B<environment>     */

  int page_width         = 80;       /* --page-width        */
  int tabsize            = 8;        /* --tab-size          */
  int tabs_to_spaces     = 0;        /* --tabs-to-spaces    */
  int output_type        = 1;        /* --output-type       */
  int table_of_contents  = 0;        /* --table-of-contents */
  int sort_entries       = 1;        /* --preserve-order    */
  int texi_flags         = TEXI_CREATE_HEADER | TEXI_PARSE_REFERENCES | TEXI_ITEMIZE_REFERENCES;
  int adoc_flags         = ADOC_FORM_FEEDS;
  int warn_mask          = WARN_NORMAL;
  int scanner_flags      = 0;        /* --indented-comments */
                                     /* --unindent-bodytext */
  int minimum_indentation = -1;      /* --reindent-bodytext */

  /* handles for the macro tables */

  int texi_macros = 0;
  int body_macros = 0;

#ifdef _DCC /* Dice */
  expand_args(argc,argv, &argc,&argv);
#endif /* _DCC */

  /* filenames on MS-DOG systems look very ugly: all uppercase and
   * backslashes.  Perform some cosmetics */

#ifdef __MSDOS__
  whoami= "adoc";

#else
  whoami= argv[0];

#endif /*__MSDOS__*/


  /* set the debugging defaults */
  D(bug_init(0,stdout));

  /* initialize the default error stream */
  ferr= stderr;

  if(err == 0)
  {
    /* prepare the texinfo macro table */
    texi_macros= mactab_new( 4+10 );

    if(!texi_macros)
      err= 1;
  }

  if(err == 0)
  {
    /* prepare the body-text macro table */
    body_macros= mactab_new( 2 );

    if(!body_macros)
      err= 2;
  }

  if(err)
    echo("error %d creating macro tables -- not enough memory?", err);

  else

  /* BEGIN scanning command line arguments */

  while( (--argc > 0) && (err <= 0) )
  {
    char *arg= *++argv;

#ifdef DEBUG
    if(argc > 1)  { D(bug("examining command line argument `%s' ( `%s', ... ) [%d]", argv[0], argv[1], argc-1)); }
    else          { D(bug("examining command line argument `%s' ( ) [%d]", argv[0], argc-1)); }
#endif /* DEBUG */

    if(*arg=='-')
    {
      /* remember the original command-line option string */
      char *opt= arg;

      if(arg[1]=='-')
        arg= convert_args(*argv);

      switch(*++arg)
      {

/*-0*/  case '0':
          output_type= 0;
          break;

/*-1*/  case '1':
          output_type= 1;
          break;

/*-2*/  case '2':
          output_type= 2;
          tabs_to_spaces= 1;
          minimum_indentation= 0;
          break;

/*-b*/  case 'b':
          texi_flags |= TEXI_TABLE_FUNCTIONS;
          break;

/*-B*/  case 'B':
          if(arg[1]) ++arg;
          else arg= (--argc > 0) ? *(++argv) : (char *)0;

          if(arg && *arg)
          {
            body_env= arg;
          }
          else
          {
            echo("missing texinfo body text environment after %s option",opt);
            err= 1;
          }
          break;

/*-c*/  case 'c':
          err= mactab_add(body_macros, "\\*", "/*", "*\\", "*/", (char *)0);

          if(err)
            echo("error %d adding comment convertion macros",err);
          break;

/*-d*/  case 'd':

#ifdef DEBUG

          if(arg[1]) { D(bug_level= atoi( &(arg[1]) )); }
          else       { D(bug_level= 1); }

#else /* !DEBUG */
          echo("not compiled w/ -DDEBUG.  No debug information available -- Sorry");
          /* no error */

#endif /* DEBUG */

          break;


/*-D*/  case 'D':
          if(arg[1] && --argc > 0)
          {
            char *lhs= &arg[1];
            char *rhs= *(++argv);

            err= mactab_add(texi_macros, lhs, rhs, (char *)0);

            if(err)
              echo("error adding texinfo macro `%s' = `%s'", lhs, rhs);
          }
          else
          {
            echo("missing macro %s after `%s' option",(arg[1] ? "value":"name"),opt);
            err= 1;
          }
          break;

/*-E*/  case 'E':
          if(arg[1]) ++arg;
          else arg= (--argc > 0) ? *(++argv) : (char *)0;

          if(arg && *arg)
          {
            if(errfile)
            {
              echo("warning: option `%s' has already been seen", opt);
              D(bug("%s \"%s\" superseeds -E \"%s\"", opt, arg, errfile));
            }

            /*errfile= strcmp(arg,"-") ? arg : (char *)0;*/
            errfile= arg;
          }
          else /* !(arg && *arg) */
          {
            echo("missing filename after `%s' option", opt);
            err= 1;
          }
          break;

/*-f*/  case 'f':
          if(arg[1])
          {
            while(*++arg) switch(*arg)
            {
              case 'f':
                adoc_flags |= ADOC_FORM_FEEDS;
                texi_flags |= TEXI_FUNCTION_NEWPAGE;
                break;

              default:
                echo("unknown paging option: `%s'",opt);
                break;
            }
          }
          else /* !arg[1] */
          {
            adoc_flags &= ~ADOC_FORM_FEEDS;
            texi_flags &= ~TEXI_FUNCTION_NEWPAGE;
          }
          break;

/*-g*/  case 'g':
          if(arg[1])
          {
            while(*++arg) switch(*arg)
            {
              case 's':
                texi_flags |= TEXI_GROUP_SECTIONS;
                break;

              default:
                echo("unknown grouping option: `%s'",opt);
                err= 1;
                break;
            }
          }
          else texi_flags &= ~TEXI_GROUP_SECTIONS;
          break;

/*-H*/  case 'H':
          if(arg[1]) ++arg;
          else arg= (--argc > 0) ? *(++argv) : (char *)0;

          if(arg && *arg)
          {
            if(headerfile)
            {
              echo("warning: option `%s' has already been seen", opt);
              D(bug("%s \"%s\" superseeds -H \"%s\"", opt, arg, headerfile));
            }

            headerfile= arg;
          }
          else /* !(arg && *arg) */
          {
            echo("missing texinfo header filename after `%s' option", opt);
            err= 1;
          }
          break;

/*-h*/  case 'h':
          printf("usage: %s [options] [-o outfile] [@ listfile] [infiles...]\n\n", whoami);
          display_args( arg[1] ? atoi(&arg[1]) : 3 );
          err= -1;    /* negative means exit w/o error */
          break;

/*-I*/  case 'I':
          table_of_contents= 1;
          break;

/*-i*/  case 'i':
          yank_type= "i";
          break;

/*-j*/  case 'j':
          if(arg[1]) ++arg;
          else arg= (--argc > 0) ? *(++argv) : (char *)0;

          if(arg && *arg)
          {
            if( (minimum_indentation= atoi(arg)) < 0 )
            {
              echo("illegal indentation: %d  (must be >= 0)", minimum_indentation);
              err= 1;
            }
          }
          else /* !(arg && *arg) */
          {
            echo("missing indentation after `%s' option", opt);
            err= 1;
          }
          break;

/*-l*/  case 'l':
          if(arg[1]) ++arg;
          else arg= (--argc > 0) ? *(++argv) : (char *)0;

          if(arg && *arg)
          {
            page_width= atoi(arg);

            if(page_width < 1)
            {
              echo("illegal page width: `%s'  (must be > 0)", arg);
              err= 1;
            }
          }
          else /* !(arg && *arg) */
          {
            echo("missing page width after `%s' option", opt);
            err= 1;
          }
          break;

/*-M*/  case 'M':
          if(arg[1] && --argc > 0)
          {
            char *lhs= &arg[1];
            char *rhs= *(++argv);

            err= mactab_add(body_macros, lhs, rhs, (char *)0);

            if(err)
              echo("error adding body macro `%s' -> `%s'", lhs, rhs);
          }
          else
          {
            echo("missing macro %s after `%s' option",(arg[1] ? "value":"name"),opt);
            err= 1;
          }
          break;

/*-n*/  case 'n':
          output_type= 0;
          break;

/*-o*/  case 'o':
          if(arg[1]) ++arg;
          else arg= (--argc > 0) ? *(++argv) : (char *)0;

          if(arg && *arg)
          {
            if(outfile)
              echo("warning: option `%s' has already been seen", opt);

            outfile= arg;
          }
          else /* !(arg && *arg) */
          {
            echo("missing filename after `%s' option", opt);
            err= 1;
          }
          break;

/*-p*/  case 'p':
          sort_entries= arg[1] ? 1:0;
          break;

/*-q*/  case 'q':
          break;

/*-T*/  case 'T':
          if(arg[1]) ++arg;
          else arg= (--argc > 0) ? *(++argv) : (char *)0;

          if(arg && *arg)
          {
            tabs_to_spaces= 1;
            tabsize= atoi(arg);

            if(tabsize < 1)
            {
              echo("illegal tab step: `%d'  (must be >= 1)", tabsize);
              err= 1;
            }
          }
          else /* !(arg && *arg) */
          {
            echo("missing tab size after `%s' option", opt);
            err= 1;
          }
          break;

/*-t*/  case 't':
          tabs_to_spaces= arg[1] ? atoi(&arg[1]) : 1;
          break;

/*-U*/  case 'U':
          if(arg[1]) ++arg;
          else arg= (--argc > 0) ? *(++argv) : (char *)0;

          if(arg && *arg)
          {
            mactab_remove(texi_macros, arg, (char *)0);
            mactab_remove(body_macros, arg, (char *)0);
          }

          else /* !(arg && *arg) */
          {
            echo("missing macro after `%s' option", opt);
            err= 1;
          }
          break;

/*-u*/  case 'u':
          if(arg[1])
          {
            scanner_flags &= ~SCANNER_UNINDENT_BODYTEXT;
            minimum_indentation= -1;
          }
          else scanner_flags |= SCANNER_UNINDENT_BODYTEXT;
          break;

/*-v*/  case 'v':
          printf("ADOC Version " VERSION " (compiled " __DATE__ ", " __TIME__ ")\n"
                 "(c)Copyright 1995 by Tobias Ferber,  All Rights Reserved\n" );
          err= -1;
          break;

/*-W*/  case 'W':
          if(arg[1])
          {
            ++arg;

            if( isdigit(*arg) )
              warn_mask |= atoi(arg);

            else switch( strarg(arg, "none",       /* 1 */
                                     "arnings",    /* 2 */
                                     "keywords",   /* 3 */
                                     "absence",    /* 4 */
                                     "untitled",   /* 5 */
                                     "all", "") )  /* 6 */
            {
              case 1:   warn_mask  = WARN_NONE;                 break;
              case 2:   warn_mask |= WARN_NORMAL;               break;
              case 3:   warn_mask |= WARN_UNKNOWN_KEYWORDS;     break;
              case 4:   warn_mask |= WARN_MISSING_KEYWORDS;     break;
              case 5:   warn_mask |= WARN_UNTITLED_SECTION;     break;
              case 6:   warn_mask |= WARN_ALL;                  break;

              default:
                echo("unknown warning method: `%s'",opt);
                err= 1;
                break;
            }
          }
          else warn_mask= WARN_NONE;
          break;

/*-x*/  case 'x':
          if(arg[1])
          {
            switch( strarg(++arg, "off",        /* 1 */
                                  "on",         /* 2 */
                                  "itemize",    /* 3 */
                                  "", "") )     /* 4 */
            {
              case 1:   texi_flags &= ~TEXI_PARSE_REFERENCES;
                        texi_flags &= ~TEXI_ITEMIZE_REFERENCES;   break;

              case 2:   texi_flags |=  TEXI_PARSE_REFERENCES;
                        texi_flags &= ~TEXI_ITEMIZE_REFERENCES;   break;

              case 3:   texi_flags |=  TEXI_PARSE_REFERENCES;
                        texi_flags |=  TEXI_ITEMIZE_REFERENCES;   break;

              default:
                echo("unknown reference handlig option: `%s'",opt);
                err= 1;
                break;
            }
          }
          else texi_flags &= ~(TEXI_PARSE_REFERENCES | TEXI_ITEMIZE_REFERENCES);
          break;


/*-Y*/  case 'Y':
          if(arg[1]) scanner_flags &= ~SCANNER_ALLOW_INDENTED_COMMENTS;
          else       scanner_flags |=  SCANNER_ALLOW_INDENTED_COMMENTS;
          break;

/*-y*/  case 'y':
          if(arg[1]) ++arg;
          else arg= (--argc > 0) ? *(++argv) : (char *)0L;

          if(arg && *arg)
            yank_type= arg;

          else /* !(arg && *arg) */
          {
            echo("missing comment type string after `%s' option", opt);
            err= 1;
          }
          break;

/*-z*/  case 'z':
          texi_flags &= ~TEXI_CREATE_HEADER;
          break;

/*-Z*/  case 'Z':
          if(arg[1]) texi_flags &= ~TEXI_NO_INDEX;
          else       texi_flags |=  TEXI_NO_INDEX;
          break;

          /*
           *  The following options are ignored for compatibility
           *  with Bill Koester's original version `autodoc' which
           *  is part of C=ommodore's Native Developer Kit (NDK).
           */

/*-C*/  case 'C':
/*-F*/  case 'F':
/*-s*/  case 's':
/*-a*/  case 'a':
/*-r*/  case 'r':
/*-w*/  case 'w':
          echo("warning: option `%s' ignored for compatibility", opt);
          break;

/*- */  case '\0':
          if( (err= flist_addfile("")) )
             echo("out of memory... hmmmmmmmmmpf!");
           break;

/*??*/  default:
          echo("unrecognized option `%s'", opt);
          err= 1;
          break;
      }
    }
    else if(*arg=='@')
    {
      if(arg[1]) ++arg;
      else arg= (--argc > 0) ? *(++argv) : (char *)0L;

      if(arg && *arg)
      {
        if( (err= flist_from_file(arg)) )
          echo("out of memory... aaarrrrrrgggggghh!");
      }
      else /* !(arg && *arg) */
      {
        echo("missing filename after `%s'", *argv);
        err= 1;
      }
    }
    else /* *arg != '@' */
    {
      if(arg && *arg)
      {
        if( (err= flist_addfile(arg)) )
          echo("out of memory... aaaiiiiiieeeeeeeee!");
      }
      else echo("internal problem parsing command line arguments: arg is empty");
    }
  }
  /* END scanning command line arguments */
  D(bug("command line argument parsing done"));

  if(err == 0)
  {
    /* prepare the error stream */

    if(errfile && *errfile)
    {
      D(bug("opening error stream `%s'",errfile));

      if( !(ferr= fopen(errfile,"w")) )
      {
        echo("could not write error messages to `%s'",errfile);
        err= __LINE__;
      }
    }
    /*else ferr is initialized to stderr */

    /* if no filename is given then read from stdin */

    if( !flist_getname() )
      flist_addfile("");


    /* read the input files (the scanner takes them from the flist queue) */

    D(bug("reading autodocs of type `%s'", yank_type));

    if(err == 0)
      err= read_source(yank_type, warn_mask, scanner_flags);

    if(err < 0)
      err= -err;  /* I/O error */

    D(bug("disposing file list"));
    flist_dispose();

    /*
     */

    if( (err == 0) && (minimum_indentation >= 0) )
    {
      if( (err= funindent(minimum_indentation, tabsize)) )
        echo("error %d reworking body text indentation -- not enough memory?",err);

      /* funindent() already performed that conversion */
      else tabs_to_spaces= 0;
    }


    if( (err == 0) && (output_type > 0) )
    {
      FILE *fout;

      /* prepare the output file */

      if(outfile && *outfile)
      {
        D(bug("opening output stream `%s'",outfile));

        if(!(fout= fopen(outfile,"w")) )
        {
          echo("could not write to `%s'",outfile);
          err= __LINE__;
        }
      }
      else fout= stdout;


      if( fout && (err==0) )
      {
        if(sort_entries)
        {
          D(bug("sorting entries"));
          funsort();
        }

        switch(output_type)
        {
          case 1: /* --autodoc */

            if(table_of_contents)
            {
              D(bug("writing table of contents"));
              err= gen_autodoc_toc(fout);
            }
            if(err == 0)
            {
              D(bug("writing autodocs"));
              err= gen_autodoc( fout, page_width, tabs_to_spaces ? tabsize : 0, adoc_flags, mactab(body_macros) );
            }
            break;

          case 2: /* --texinfo */
            if(texi_flags & TEXI_CREATE_HEADER)
            {
              D(bug("creating texinfo header"));
              err= gen_texinfo_header( fout, headerfile, mactab(texi_macros) );
            }

            if(err == 0)
            {
              D(bug("adding texinfo body macros"));
              err= mactab_add( body_macros,  "@",        "@@",
                                             "{",        "@{",
                                             "}",        "@}",
                                          /* "...",      "@dots{}", */
                                          /* "TeX",      "@TeX{}",  */
                                             "e.g. ",    "e.g.@: ",
                                             "E.g. ",    "E.g.@: ",
                                             "i.e. ",    "i.e.@: ",
                                             "I.e. ",    "I.e.@: ",   (char *)0 );
            }

            if(err == 0)
            {
              D(bug("creating texinfo output"));
              err+= gen_texinfo( fout, tabs_to_spaces ? tabsize : 0, texi_flags, body_env, mactab(body_macros) );
            }

            if(err)
              echo("error creating texinfo output");
            break;

          default: /* --dry-run */
            break;
        }
      }

      if(fout && (fout != stdout))
        fclose(fout);
    }

    D(bug("disposing libfun entries"));
    funfree();
  }

#ifdef DEBUG
  mactab_debug(bug_stream);
#endif

  D(bug("disposing macro tables"));
  mactab_dispose(body_macros);
  mactab_dispose(texi_macros);

  /*
  */

  if(err > 0)
  {
    echo("[%s] *** Error %d", (outfile && *outfile) ? outfile : "stdout", err);
    fprintf(ferr,"%s terminated abnormally (error %d)\n", whoami, err);
  }

  D(bug("closing I/O streams"));

  if( ferr && (ferr != stderr) && (ferr != stdout) )
    fclose(ferr);

  D(bug("exiting adoc returning %d (%s)", (err>0) ? 1:0, (err>0) ? "error":"success" ));
  D(bug_exit());

#ifdef DEBUG

  if(bug_stream && (bug_stream != stdout))
    fclose(bug_stream);

#endif /*DEBUG*/

  return (err > 0) ? 1:0;
}