diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/dktools/dk-pwd.ctr |
Initial commit
Diffstat (limited to 'support/dktools/dk-pwd.ctr')
-rw-r--r-- | support/dktools/dk-pwd.ctr | 395 |
1 files changed, 395 insertions, 0 deletions
diff --git a/support/dktools/dk-pwd.ctr b/support/dktools/dk-pwd.ctr new file mode 100644 index 0000000000..3c74fb1cd3 --- /dev/null +++ b/support/dktools/dk-pwd.ctr @@ -0,0 +1,395 @@ +%% options + +copyright owner = Dirk Krause +copyright year = 2015-xxxx +license = bsd + + + +%% module + + + +#include "dk4conf.h" +#include "dk4types.h" +#include "dk4const.h" +#include "dk4app.h" +#include "dk4aopt.h" +#include "dk4vers.h" +#include "dk4mpl.h" +#include "dk4getcwdd.h" +#include "dk4mem.h" +#include "dk4fput.h" + + + +$!trace-include + + +/** Default help text, used if help text file is not found. +*/ +static const dkChar * const dk_pwd_help_text[] = { +$!text macro=dkT,preprocessor + +Show current directory + +dk-pwd [<options>] + +Options: + +-l Show last part of path only. +-b Beautify (replace backslashes by slashes). + +--help Show this short help text. +--manual *** SHOW FULL MANUAL. *** +--version Show version information. +--license Show license information. + +$!end +}; + + + +/** License conditions. +*/ +static const dkChar * const dk_pwd_license_text[] = { +$!text macro=dkT,preprocessor +This software uses code from the following projects, either directly or as +a library: + +dktools Dirk Krause's tools and libraries. + See http://dktools.sourceforge.net/ for more information. +#if DK4_HAVE_ZLIB_H + +zlib Data compression library. + See http://www.zlib.net/ for more information. +#endif +#if DK4_HAVE_BZLIB_H + +bzip2 Data compression program and library. + See http://www.bzip.org/ for more information. +#endif + +All the licenses below apply to the program. +Licenses for used libraries are shown as found on my Scientific Linux 6.x +computer in the /usr/share/doc directory on 2015-04-01. Check the project +homepages of the used libraries for additional information and/or updated +license terms. + + +DK tools and libraries license +============================== +Copyright (c) 2015-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 Dirk Krause 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. +#if DK4_HAVE_ZLIB_H + + +Zlib license +============ +(C) 1995-2004 Jean-loup Gailly and Mark Adler + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + +Jean-loup Gailly Mark Adler +jloup@gzip.org madler@alumni.caltech.edu +#endif +#if DK4_HAVE_BZLIB_H + + +Bzip2 and libbzip2 library license +================================== +This program, "bzip2", the associated library "libbzip2", and all +documentation, are copyright (C) 1996-2007 Julian R Seward. All +rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + +3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + +4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + +Julian Seward, jseward@bzip.org +bzip2/libbzip2 version 1.0.5 of 10 December 2007 +#endif + +$!end +}; + + + +/** Buffer to store the directory. +*/ +static dkChar cwdbuf[DK4_MAX_PATH]; + + + +/** Constant texts used by the module, not localized. +*/ +static const dkChar * const dk_pwd_kwnl[] = { +$!string-table macro=dkT +# +# 0 Program group name +# +dktools +# +# 1 Help file (manual) +# +dk-pwd.txt +# +# 2 String table file name +# +dk-pwd.str +$!end +}; + + + +/** Constant texts used by the program, replaced by localized texts. +*/ +static const dkChar * const dk_pwd_kw_def[] = { +$!string-table macro=dkT +# +# 0 Error: Failed to find current directory! +# +Failed to find current directory! +$!end +}; + + +/** Options used by program. +*/ +static const dk4_option_specification_t dk_pwd_options[] = { + + /* Show final part of directory name only. + */ + { dkT('l'), dkT("last"), DK4_OPT_ARG_NONE }, + + /* Replace backslashes by slashes. + */ + { dkT('b'), dkT("beautify"), DK4_OPT_ARG_NONE } +}; + + + +/** Localized texts. +*/ +static const dkChar * const *dk_pwd_msg = dk_pwd_kw_def; + + + +/** Application structure for diagnostics. +*/ +static dk4_app_t *app = NULL; + + + +/** Number of options in the dk_pwd_options array. +*/ +static const size_t dk_pwd_sz_options = +sizeof(dk_pwd_options)/sizeof(dk4_option_specification_t); + + + +/** Number of entries in the message texts array. +*/ +static size_t dk_pwd_sz_msg = +sizeof(dk_pwd_kw_def)/sizeof(DK4_PDKCHAR) - 1; + + + +/** Exit status code returned by the program. +*/ +static int exval = EXIT_FAILURE; + + + +static +void +dk_pwd_beautify(dkChar *buf) +{ + while(dkT('\0') != *buf) { + if (dkT('\\') == *buf) { *buf = dkT('/'); } + buf++; + } +} + + + +static +dkChar * +dk_pwd_last_part(dkChar *buf) +{ + dkChar *back = NULL; + dkChar *orbuf; + + orbuf = buf; + while (dkT('\0') != *buf) { + if ((dkT('\\') == *buf) || (dkT('/') == *buf)) { back = buf; } + buf++; + } + if (NULL != back) { back++; } else { back = orbuf; } + return back; +} + + + +static +void +dk_pwd_show_current_directory(void) +{ + dk4_er_t er; + dkChar *ptr; + + dk4error_init(&er); + if (0 != dk4getcwd(cwdbuf, DK4_SIZEOF(cwdbuf,dkChar), &er)) { + if (0 != dk4app_opt_is_set_short(app, dkT('b'), NULL)) { + dk_pwd_beautify(cwdbuf); + } + ptr = cwdbuf; + if (0 != dk4app_opt_is_set_short(app, dkT('l'), NULL)) { + ptr = dk_pwd_last_part(cwdbuf); + } + exval = EXIT_SUCCESS; + if (0 == dk4fputs(ptr, stdout, NULL)) { + exval = EXIT_FAILURE; + } + if (0 == dk4fputc(dkT('\n'), stdout, NULL)) { + exval = EXIT_FAILURE; + } + } else { + dk4app_log_1(app, dk_pwd_msg, dk_pwd_sz_msg, DK4_LL_ERROR, 0); + } +} + + + +/** Main function. + @param argc Number of command line arguments. + @param argv Command line arguments array. + @return 0 on success, all other values indicate errors. +*/ +#if DK4_CHAR_SIZE > 1 +int wmain(int argc, wchar_t *argv[]) +#else +int main(int argc, char *argv[]) +#endif +{ + /* + Initialize stdout and stderr for dkChar output. + */ + dk4fput_initialize_stdout(); + dk4fput_initialize_stderr(); + /* + Create dk4_app_t structure. + */ + app = dk4app_open_cmd( + argc, argv, dk_pwd_options, dk_pwd_sz_options, + dk_pwd_kwnl[0], DKT_VERSION_DK, + dk_pwd_kwnl[1], dk_pwd_help_text, dk_pwd_license_text + ); + if (NULL != app) { + /* + Obtain string table (array of localized strings). + Memory is managed in the dk4_app_t structure. + */ + dk_pwd_sz_msg = dk4app_string_table_size(dk_pwd_kw_def); + dk_pwd_msg = dk4app_string_table(app, dk_pwd_kwnl[2], dk_pwd_kw_def); + /* + Check how to run. + */ + if (0 != dk4app_can_run_normally(app)) { + /* + Run normally. + */ + dk_pwd_show_current_directory(); + } else { + /* + --help, --version, --license, --manual was used. Show information. + */ + if (0 != dk4app_help_version_license(app)) { + exval = EXIT_SUCCESS; + } + } + /* + Destroy dk4_app_t structure, release memory. + Memory for the string tables is released here too. + */ + dk4app_close(app); + } + /* + Flush stdout and stderr, restore settings from program start. + */ + fflush(stdout); + fflush(stderr); + dk4fput_cleanup_stderr(); + dk4fput_cleanup_stdout(); + /* + Return exit status code. + */ + exit(exval); return exval; +} + |