diff options
Diffstat (limited to 'support/dktools/dkct.ctr')
-rw-r--r-- | support/dktools/dkct.ctr | 877 |
1 files changed, 0 insertions, 877 deletions
diff --git a/support/dktools/dkct.ctr b/support/dktools/dkct.ctr deleted file mode 100644 index ea09cf623c..0000000000 --- a/support/dktools/dkct.ctr +++ /dev/null @@ -1,877 +0,0 @@ -%% options - -copyright owner = Dirk Krause -copyright year = 2011-xxxx -SPDX-License-Identifier: BSD-3-Clause - - - -%% module - -/** @file dkct.c Dirk Krause's C/C++ tool. -*/ - -#include "dk4conf.h" - -#if DK3_USE_WX -#include "dkwxtrace.h" -#else -#include "dkct.h" -#endif - -#include "dk3enc.h" - - - -$!trace-include - - - -/** Application group name. -*/ -static dkChar const dkct_group_name[] = { dkT("dktools") }; - - - -/** Version number string. -*/ -static dkChar const dkct_version[] = { -dkT("dkct ") DKT_VERSION_DK -}; - - - -/** License conditions shown for dkct --license. -*/ -static dkChar const * const dkct_license[] = { -$!text macro=dkT - -Copyright (c) 2011-2016, Dirk Krause -All rights reserved. - -Redistribution and use in source and binary forms, -with or without modification, are permitted provided -that the following conditions are met: - -* Redistributions of source code must retain the above - copyright notice, this list of conditions and the - following disclaimer. -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. -* Neither the name of the copyright holder(s) nor the names of - contributors may be used to endorse or promote - products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. -IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -$!end -}; - - - -/** Options for the dkct program. -*/ -static dk3_option_t const dkct_options[] = { - { dkT('R'), dkT("reset"), 0 }, - { dkT('d'), dkT("debug"), 0 }, - { dkT('s'), dkT("debug-stdout"), 0 }, - { dkT('l'), dkT("line-numbers"), 0 }, - { dkT('m'), dkT("make"), 0 }, - { dkT('b'), dkT("box-width"), 1 }, - { dkT('h'), dkT("help"), 0 }, - { dkT('v'), dkT("version"), 0 }, - { dkT('L'), dkT("license-terms"), 0 }, - { dkT('\0'),dkT("license"), 0 }, - { dkT('t'), dkT("timestamp"), 0 }, - { dkT('k'), dkT("trace-keyword"), 0 }, - { dkT('w'), dkT("windows-wide-char"), 0 }, - { dkT('p'), dkT("portable-output"), 0 }, - { dkT('S'), dkT("splint"), 0 }, - { dkT('\0'),dkT("splint-comment-char"), 1 }, - { dkT('\0'),dkT("no-modification-warning"), 0 } -}; -/** Number of options in the \a dkct_options array. -*/ -static size_t dkct_sz_options = sizeof(dkct_options)/sizeof(dk3_option_t); - -/** Keywords without need for localization. -*/ -static dkChar const * dkct_not_localized[] = { -/* 0 */ dkT("."), /* Current directory. */ -NULL -}; - - - -/** File name for help file. -*/ -static dkChar const dkct_help_file_name[] = { -dkT("dkct.txt") -}; - - - -/** Default help text, shown if help text file is not found. -*/ -static dkChar const * dkct_help_text[] = { -$!text macro=dkT - -NAME - - dkct - Dirk Krause's C tool - -SYNOPSIS - - dkt [<options>] [<files>] - -DESCRIPTION - -The program provides: -- A preprocessor for debug/trace instructions, -- a code generator for state machines, -- a code generator for GUIs using the wxWidgets library. - -The program converts *.ctr, *.cpt, *.mtr and *.jtr files to *.c, *.cpp, -*.m and *.java. The source files can contain debug instructions in a special -notation. When producing release versions the debug instructions are ignored. -When producing debug versions the debug instructions are converted to output -instructtions. - -OPTIONS - --R ---reset - Ignore all settings from configuration files. - --d ---debug - Create debug output. - --s ---debug-stdout - Debug output goes to standard output. - --t ---timestamp - Debug output contains a timestamp. - --k ---trace-keyword - Debug output contains "trace" string. - --w ---windows-wide-char - Prepare debug output for wchar_t. - --p ---portable-output - Create portable debug output code (implies -w). - --l ---line-numbers - Write preprozessor directives "#line ..." to output. - --m ---make - Make mode: rebuild destination files only if necessary. - --b <width> ---box-width=<width> - Box with for comment boxes. - --S ---splint - Write annotation comments for the splint program. - ---splint-comment-char=<character> - Use the specified character to mark splint comments. - ---no-modification-warning - Suppress the warning at the beginning of output files. - These warnings tell the user to not modify the output files produced - by dkct, users should modify the input files processed by dkct - instead. - --h ---help - Show help text. - --v ---version - Show version number. - --L ---license-terms - Show license conditions. - -EXIT STATUS - -The program returns 0 on success, any other value indicates an error. - -SEE ALSO - -http://sourceforge.net/p/dktools/dkct%20manual/ - -AUTHOR - -Dirk Krause - -LICENSE - -Use - dkct --license-terms -to view the license conditions. - -$!end -}; - - - -/** Initialize option set. - @param o Option set. -*/ -static -void -dkct_option_set_init(DKCT_OPTION_SET *o) -{ - o->deb = 0; o->lnn = 0; o->mak = 0; o->sty = 0; - o->bw = 78; o->tkw = 0; o->ts = 0; o->win = 0; - o->tip = 0; o->deben = 1; o->port = 0; - o->spls = '\0'; - o->nowarn = 0; -} - - - -/** Initialize job structure. - @param j Structure to initialize. -*/ -static -void -dkct_job_init(DKCT_J *j) -{ - j->exval = DKT_RESULT_ERR_UNSPECIFIC; - j->app = NULL; - j->msg = NULL; - j->nlc = NULL; - j->opt = NULL; - j->sCwd = NULL; - j->cmd = 0; - j->curdi = 0; - dkct_option_set_init(&(j->dkcto)); -} - - - -/** Clean up job structure. - @param j Job structure to clean up. -*/ -static -void -dkct_job_cleanup(DKCT_J *j) -{ - if(j->opt) { - dk3opt_close(j->opt); - } j->opt = NULL; - if(j->app) { - dk3app_close(j->app); - } j->app = NULL; - j->msg = NULL; j->nlc = NULL; -} - - - -/** Process command line arguments, search for options. - @param j Job structure. - @return 1 on success, 0 on error. -*/ -static -int -dkct_process_arguments(DKCT_J *j) -{ - int back = 0; - int i; /* Temporary value to read box width. */ - dkChar const *arg; /* Argument value. */ - $? "+ dkct_process_arguments" - j->opt = dk3opt_open_from_app( - dkct_options, - dkct_sz_options, - 0x00, - NULL, - j->app - ); - if(j->opt) { - if(dk3opt_get_error_code(j->opt) == 0) { - back = 1; - if(dk3opt_is_set(j->opt, dkT('R'))) { - dkct_option_set_init(&(j->dkcto)); - } - if (dk3opt_is_set_long(j->opt, dkct_options[16].lo)) { - (j->dkcto).nowarn = 1; - } - if(dk3opt_is_set(j->opt, dkT('d'))) { - (j->dkcto).deb = 1; - } - if(dk3opt_is_set(j->opt, dkT('s'))) { - (j->dkcto).deb = 2; - } - if((j->dkcto).deb) { - if(dk3opt_is_set(j->opt, dkT('t'))) { - (j->dkcto).ts = 1; - } - if(dk3opt_is_set(j->opt, dkT('k'))) { - (j->dkcto).tkw = 1; - } - if(dk3opt_is_set(j->opt, dkT('w'))) { - (j->dkcto).win = 1; - } - if(dk3opt_is_set(j->opt, dkT('p'))) { - (j->dkcto).port = 1; - } - } - if(dk3opt_is_set(j->opt, dkT('l'))) { - (j->dkcto).lnn = 1; - } - if(dk3opt_is_set(j->opt, dkT('m'))) { - (j->dkcto).mak = 1; - } - if(dk3opt_is_set(j->opt, dkT('h'))) { - j->cmd |= DK3_APP_CMD_HELP; - } - if(dk3opt_is_set(j->opt, dkT('v'))) { - j->cmd |= DK3_APP_CMD_VERSION; - } - if(dk3opt_is_set(j->opt, dkT('L'))) { - j->cmd |= DK3_APP_CMD_LICENSE; - } - if(dk3opt_is_set_long(j->opt, dkT("license"))) { - j->cmd |= DK3_APP_CMD_LICENSE; - } - if(dk3opt_is_set(j->opt, dkT('b'))) { - arg = dk3opt_get_short_arg(j->opt, dkT('b')); - if(arg) { -#if VERSION_BEFORE_20140716 - if(dk3sf_sscanf3(arg, dkT("%d"), &i)) -#else - if(0 != dk3ma_i_from_string(&i, arg, NULL)) -#endif - { - if(i > 20) { - (j->dkcto).bw = i; - } else { - j->exval = DKT_RESULT_ERR_OPTION; back = 0; - } - } else { - j->exval = DKT_RESULT_ERR_OPTION; back = 0; - } - } else { - j->exval = DKT_RESULT_ERR_OPTION; back = 0; - } - } - -#if VERSION_BEFORE_20140611 - if (dk3opt_is_set(j->opt, dkT('S'))) { $? ". option S" - arg = dk3opt_get_short_arg(j->opt, dkT('S')); - if (arg) { $? ". have arg" - if (dk3str_len(arg) == 1) { $? ". length ok" - if (128 > (int)(*arg)) { $? ". char ok" - (j->dkcto).spls = (char)(*arg); - } else { $? "! not ASCII" - j->exval = DKT_RESULT_ERR_OPTION; back = 0; - /* ##### ERROR: Not an ASCII character */ - } - } else { $? "! too long" - j->exval = DKT_RESULT_ERR_OPTION; back = 0; - /* ##### ERROR: Just one character allowed */ - } - } else { $? "! missing arg" - j->exval = DKT_RESULT_ERR_OPTION; back = 0; - } - } -#else - if (dk3opt_is_set_long(j->opt, dkct_options[14].lo)) { $? ". --splint-comment-char set" - arg = dk3opt_get_long_arg(j->opt, dkct_options[14].lo); - if (arg) { - if (1 == dk3str_len(arg)) { -#if DK3_CHAR_SIZE > 1 - if (128UL > dk3enc_dk_to_ul(*arg)) { - (j->dkcto).spls = (char)(*arg); - } else { - /* ##### ERROR: Not an ASCII character! */ - j->exval = DKT_RESULT_ERR_OPTION; back = 0; - } -#else - if (128 > (int)((unsigned char)(*arg))) { - (j->dkcto).spls = (char)(*arg); - } else { - /* ##### ERROR: Not an ASCII character! */ - j->exval = DKT_RESULT_ERR_OPTION; back = 0; - } -#endif - } else { - /* ##### ERROR: Exactly one character required! */ - j->exval = DKT_RESULT_ERR_OPTION; back = 0; - } - } else { - /* ##### ERROR: Argument required for option! */ - j->exval = DKT_RESULT_ERR_OPTION; back = 0; - } - } else { $? ". --splint-comment-char not set" - } - if (dk3opt_is_set(j->opt, dkT('S'))) { $? ". -S set" - if ('\0' == (j->dkcto).spls) { - (j->dkcto).spls = '@'; - } - } else { $? ". -S not set" - } -#endif - } else { - j->exval = DKT_RESULT_ERR_OPTION; - } - } else { - j->exval = DKT_RESULT_ERR_OPTION; - } $? "- dkct_process_arguments %d exval=%d", back, j->exval - return back; -} - - - -/** Run for file after expanding wildcards. - @param j Job structure. - @param fn Source file name. - @param sufi Source file suffix index. -*/ -static -void -dkct_really_run_for_file(DKCT_J *j, dkChar const *fn, int sufi) -{ - char shn[DK3_MAX_PATH]; /* Short file name. */ - dkChar const *pstart; /* Short file name. */ - int ie; /* System input encoding. */ - DKCT_SRC *psrc; /* Source structure. */ - int success; /* Flag: Success so far. */ - $? "+ dkct_really_run_for_file \"%!ds\"", fn - pstart = dk3str_rchr(fn, DK3_CHAR_SEP); - if(pstart) { - pstart++; - } else { - pstart = fn; - } - if(pstart) { - ie = dk3app_get_encoding(j->app); - if(dk3str_to_c8p_app(shn, sizeof(shn), pstart, ie, j->app)) { $? ". shn ok" - psrc = dkct_tr_new(&(j->dkcto), shn, sufi, j->app, fn); - if(psrc) { $? ". psrc ok" - success = 0; - if(j->curdi) { psrc->curdi = 1; } - psrc->msg = j->msg; - dk3app_log_1(j->app, DK3_LL_PROGRESS, j->msg, 106); - if(dkct_tr_read(psrc, fn, sufi)) { $? ". read ok" - if(dkct_tr_check(psrc, fn, sufi)) { $? ". check ok" - if(dkct_tr_write(psrc, fn, sufi)) { - success = 1; - } - } - } - dk3app_set_source_line(j->app, 0UL); - dk3app_log_1(j->app, DK3_LL_PROGRESS, j->msg, 107); - if(!success) { - j->exval = DKT_RESULT_ERR_UNSPECIFIC; - switch(psrc->ec) { - case DK3_ERROR_MEMORY: { - j->exval = DKT_RESULT_ERR_MEMORY; - } break; - case DK3_ERROR_SYNTAX: { - j->exval = DKT_RESULT_ERR_INPUT; - } break; - } - } else { - if (DK3_ERROR_NONE != psrc->ec) { - switch (psrc->ec) { - case DK3_ERROR_SYNTAX: { - j->exval = DKT_RESULT_ERR_INPUT; - } break; - } - } - } - dkct_tr_delete(psrc); psrc = NULL; - } else { - j->exval = DKT_RESULT_ERR_MEMORY; - } - } - } - $? "- dkct_really_run_for_file" -} - - - -/** Run for a file name. - @param j Job structure. - @param fn Source file name. -*/ -static -void -dkct_run_for_file(DKCT_J *j, dkChar const *fn) -{ - int must_run = 1; /* Flag: Must run. */ - int ai; /* Source suffix type. */ - dkChar const *su; /* Source suffx. */ - dkChar const *oldsourcename; /* Old source file name. */ - dkChar const *shortSourceName; /* Short source file name. */ - dkChar *xsu; /* Suffix position. */ - dkChar const * const *lfdsu; /* Destination suffix. */ - dkChar b1[DK3_MAX_PATH]; /* Destination file name. */ - unsigned long oldsourceline; /* Old source line number. */ - $? "+ dkct_run_for_file \"%!ds\"", fn - oldsourcename = dk3app_get_source_file(j->app); - oldsourceline = dk3app_get_source_line(j->app); - if(j->curdi) { - shortSourceName = dk3str_rchr(fn, (dk3app_not_localized(20))[0]); - if(shortSourceName) { shortSourceName++; } - else { shortSourceName = fn; } - } else { - shortSourceName = fn; - } - dk3app_set_source_file(j->app, shortSourceName); - dk3app_set_source_line(j->app, 0UL); - su = dk3str_get_suffix(fn); - if(su) { -#if DK3_ON_WINDOWS || DK3_HAVE_FNCASEINS - ai = dk3str_array_index(dkct_str_get_source_suffixes(), su, 0); -#else - ai = dk3str_array_index(dkct_str_get_source_suffixes(), su, 1); -#endif - if(ai >= 0) { - if((j->dkcto).mak) { - if(dk3str_len(fn) < DK3_SIZEOF(b1,dkChar)) { - dk3str_cpy_not_overlapped(b1, fn); - lfdsu = (dkct_str_get_dest_suffixes())[ai]; - xsu = dk3str_get_suffix(b1); - if(xsu) { - must_run = 0; - while(*lfdsu) { - *xsu = dkT('\0'); - if((dk3str_len(b1)+dk3str_len(*lfdsu)) < DK3_SIZEOF(b1,dkChar)) { - dk3str_cat(b1, *lfdsu); - if(dk3sf_must_rebuild(b1, fn)) { - must_run = 1; - } - } else { - must_run = 1; - } - lfdsu++; - } - } - } - } - if(must_run) { - dkct_really_run_for_file(j, fn, ai); - } else { - /* Progress: All output files up to date. 105 */ - dk3app_log_1(j->app, DK3_LL_PROGRESS, j->msg, 105); - } - } else { - /* Wrong suffix, not an input file! */ - dk3app_log_3(j->app, DK3_LL_ERROR, j->msg, 0, 1, fn); - j->exval = DKT_RESULT_ERR_FILENAME; - } - } else { - /* No suffix, Not an input file! */ - dk3app_log_3(j->app, DK3_LL_ERROR, j->msg, 0, 1, fn); - j->exval = DKT_RESULT_ERR_FILENAME; - } - dk3app_set_source_file(j->app, oldsourcename); - dk3app_set_source_line(j->app, oldsourceline); - $? "- dkct_run_for_file" -} - - - -/** Run for a directory. - @param j Job structure. - @param dn Directory name. - @param fcd Flag: Use chdir() to enter directory (ignored). -*/ -static -void -dkct_run_for_directory(DKCT_J *j, dkChar const *dn, int fcd) -{ - int ok = 1; /* Flag: Ok so far. */ - dk3_dir_t *dir; /* Directory. */ - dkChar const *en; /* Current file name. */ - dkChar const *su; /* File name suffix. */ - dk3_stat_t const *es; /* Stat information for current file. */ - int ai; /* Source suffix type. */ - - if(fcd) { -#if 0 - /* Change into directory dn. */ - if(!dk3sf_chdir_app(dn, j->app)) { - ok = 0; - } -#endif - } - if(ok) { - dir = dk3dir_open_app(dn, j->app); - if(dir) { - while(dk3dir_get_next_file(dir)) { - en = dk3dir_get_fullname(dir); - es = dk3dir_get_stat(dir); - if((en) && (es)) { - switch((es->ft) & (~(DK3_FT_SYMLINK))) { - case DK3_FT_REGULAR: { - su = dk3str_get_suffix(en); - if(su) { -#if DK3_ON_WINDOWS || DK3_HAVE_FNCASEINS - ai = dk3str_array_index(dkct_str_get_source_suffixes(), su, 0); -#else - ai = dk3str_array_index(dkct_str_get_source_suffixes(), su, 1); -#endif - if(ai >= 0) { - dkct_run_for_file(j, en); - } - } - } break; - } - } - } - dk3dir_close(dir); - } else { - /* ERROR: Failed to open directory! */ - j->exval = DKT_RESULT_ERR_OPENDIR; - } - } - if(fcd) { -#if 0 - /* Change back into previous current directory. */ - if(ok) { - dk3sf_chdir_app(j->sCwd, j->app); - } -#endif - } -} - - - -/** Run for a directory, test for current directory before running. - @param j Job structure. - @param fn Directory name. -*/ -static -void -dkct_run_for_directory_test_current(DKCT_J *j, dkChar const *fn) -{ - if(dk3str_cmp(fn, dkct_not_localized[0]) == 0) { - j->curdi = 1; - dkct_run_for_directory(j, fn, 0); - } else { - dkct_run_for_directory(j, fn, 1); - } -} - - - -/** Run for the given file names. - @param j Job structure. -*/ -static -void -dkct_run(DKCT_J *j) -{ - int nfn; /* Number of file names. */ - dkChar const *arg; /* Current argument. */ - dkChar const *en; /* File name. */ - dkChar bu[DK3_MAX_PATH]; /* Buffer input file name. */ - dk3_stat_t stb; /* Stat inf for input file. */ - dk3_stat_t const *es; /* Stat inf for output file. */ - dk3_dir_t *fne; /* File name expander. */ - int i; /* Current argument index. */ - int found = 0; /* Flag: Matching file found. */ - - nfn = dk3opt_get_num_args(j->opt); - if(nfn > 0) { - for(i = 0; i < nfn; i++) { - arg = dk3opt_get_arg(j->opt, i); - if(arg) { - if(dk3str_len(arg) < DK3_SIZEOF(bu,dkChar)) { - dk3str_cpy_not_overlapped(bu, arg); - dk3str_correct_filename(bu); - if(dk3sf_must_expand(bu)) { - fne = dk3dir_fne_open_app(bu, j->app); - if(fne) { - found = 0; - while(dk3dir_get_next_file(fne)) { - en = dk3dir_get_fullname(fne); - es = dk3dir_get_stat(fne); - if((en) && (es)) { - switch((es->ft) & (~(DK3_FT_SYMLINK))) { - case DK3_FT_REGULAR: { - found = 1; - dkct_run_for_file(j, en); - } break; - default: { - /* Illegal file type! */ - dk3app_log_3(j->app, DK3_LL_ERROR, j->msg, 2, 3, en); - j->exval = DKT_RESULT_ERR_INPUT; - } break; - } - } - } - while(dk3dir_get_next_directory(fne)) { - en = dk3dir_get_fullname(fne); - es = dk3dir_get_stat(fne); - if((en) && (es)) { - switch((es->ft) & (~(DK3_FT_SYMLINK))) { - case DK3_FT_DIRECTORY: { - dkct_run_for_directory_test_current(j, en); - } break; - default: { - /* Illegal file type! */ - dk3app_log_3(j->app, DK3_LL_ERROR, j->msg, 2, 3, en); - j->exval = DKT_RESULT_ERR_INPUT; - } break; - } - } - } - if(!found) { - /* ERROR: No such file or directory! */ - dk3app_log_i3(j->app, DK3_LL_ERROR, 215, 216, bu); - j->exval = DKT_RESULT_ERR_FILENAME; - } - dk3dir_close(fne); - } else { - /* ERROR: No fne */ - j->exval = DKT_RESULT_ERR_MEMORY; - } - } else { - if(dk3sf_stat_app(&stb, bu, j->app)) { - switch((stb.ft) & (~(DK3_FT_SYMLINK))) { - case DK3_FT_REGULAR: { - dkct_run_for_file(j, bu); - } break; - case DK3_FT_DIRECTORY: { - dkct_run_for_directory_test_current(j, bu); - } break; - default: { - /* ERROR: Illegal file type! */ - dk3app_log_3(j->app, DK3_LL_ERROR, j->msg, 2, 3, bu); - j->exval = DKT_RESULT_ERR_FILENAME; - } break; - } - } else { - /* ERROR: No such file or directory! */ - j->exval = DKT_RESULT_ERR_FILENAME; - } - } - } else { - /* ERROR: Name too long! */ - dk3app_log_i3(j->app, DK3_LL_ERROR, 65, 66, arg); - j->exval = DKT_RESULT_ERR_FILENAME; - } - } else { - /* BUG */ - j->exval = DKT_RESULT_ERR_UNSPECIFIC; - } - } - } else { - j->curdi = 1; - dkct_run_for_directory(j, j->sCwd, 0); - } -} - - - -/** Show license conditions. - @param j Job structure. -*/ -static -void -dkct_show_license(void) -{ - dkChar const * const *sptr; /* Pointer to traverse text. */ - - sptr = dkct_license; - dk3sf_initialize_stdout(); - while(*sptr) { - dk3sf_fputs(*(sptr++), stdout); - dk3sf_fputc(dkT('\n'), stdout); - } -} - - - -/** The main() function. - @param argc Number of command line arguments. - @param argv Command line arguments array. - @return 0 on success, any other value indicates an error. -*/ -DK3_MAIN -{ - int exval = 0; /* Exit status code. */ - DKCT_J j; /* Job structure. */ - dkChar cd[DK3_MAX_PATH]; /* Buffer for current directory. */ - $!trace-init dkct.deb - $? "+ main" - dkct_job_init(&j); - j.app = dk3app_open_command( - argc, (dkChar const * const *)argv, dkct_group_name - ); - if(j.app) { - j.msg = dk3app_messages( - j.app, - dkct_str_get_string_table_file_name(), - (dkChar const **)dkct_str_get_message_texts() - ); - j.nlc = dkct_not_localized; - if(dk3sf_getcwd_app(cd, DK3_SIZEOF(cd,dkChar), j.app)) { - j.sCwd = cd; - if(dkct_process_arguments(&j)) { - j.exval = DKT_RESULT_OK; - if(j.cmd) { - /* Help, version, license */ - if((j.cmd) & DK3_APP_CMD_VERSION) { - dk3sf_initialize_stdout(); - dk3sf_fputs(dkct_version, stdout); - dk3sf_fputc(dkT('\n'), stdout); - } - if((j.cmd) & DK3_APP_CMD_LICENSE) { - dkct_show_license(); - } - if((j.cmd) & DK3_APP_CMD_HELP) { - dk3app_help(j.app, dkct_help_file_name, dkct_help_text); - } - } else { - dkct_run(&j); - } - } - } - } - exval = j.exval; - dkct_job_cleanup(&j); - $? "- main %d", exval - $!trace-end - fflush(stdout); - exit(exval); return exval; -} - - - -/* vim: set ai sw=2 : */ - |