summaryrefslogtreecommitdiff
path: root/support/dktools/dk-pwd.ctr
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/dktools/dk-pwd.ctr
Initial commit
Diffstat (limited to 'support/dktools/dk-pwd.ctr')
-rw-r--r--support/dktools/dk-pwd.ctr395
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;
+}
+