/* #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"); } }
//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); }
static void item_fnt(int argc, char **argv) { printf("item%d command called\n\r",(int)tinysh_get_arg()); display_args(argc,argv); }
static void foo_fnt(int argc, char **argv) { printf("foo command called\n\r"); display_args(argc,argv); }
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 }
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; } }
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 ); }
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; } }
void foo_fnt(int argc, char **argv) { MESSAGE("foo command called\n\r"); display_args(argc,argv); }
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; }