summaryrefslogtreecommitdiff
path: root/support/dktools/wprclean2.c
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-10-12 03:04:00 +0000
committerNorbert Preining <norbert@preining.info>2020-10-12 03:04:00 +0000
commit0ce40abb18ec02ec6fd6bcc5f21612c88daa7578 (patch)
tree416289fe1448873fd8ca33051f50ad85bffa8aaa /support/dktools/wprclean2.c
parentfdb18507cd80dc17f5a5256153d34668b4f4e61c (diff)
CTAN sync 202010120303
Diffstat (limited to 'support/dktools/wprclean2.c')
-rw-r--r--support/dktools/wprclean2.c1189
1 files changed, 0 insertions, 1189 deletions
diff --git a/support/dktools/wprclean2.c b/support/dktools/wprclean2.c
deleted file mode 100644
index 057f699566..0000000000
--- a/support/dktools/wprclean2.c
+++ /dev/null
@@ -1,1189 +0,0 @@
-/*
-Copyright (C) 2017-2020, Dirk Krause
-SPDX-License-Identifier: BSD-3-Clause
-*/
-
-/*
- WARNING: This file was generated by the dkct program (see
- http://dktools.sourceforge.net/ for details).
- Changes you make here will be lost if dkct is run again!
- You should modify the original source and run dkct on it.
- Original source: wprclean2.ctr
-*/
-
-
-#line 7 "wprclean2.ctr"
-
-/** @file wprclean.c Cleanup Windows print queues.
-*/
-
-#include "dk4conf.h"
-
-#include <stdio.h>
-
-#if DK4_ON_WINDOWS
-#ifndef WINDOWS_H_INCLUDED
-#include <windows.h>
-#define WINDOWS_H_INCLUDED
-#endif
-#endif
-
-#if DK4_HAVE_STDLIB_H
-#ifndef STDLIB_H_INCLUDED
-#include <stdlib.h>
-#define STDLIB_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_UNISTD_H
-#ifndef UNISTD_H_INCLUDED
-#include <unistd.h>
-#define UNISTD_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_PROCESS_H
-#ifndef PROCESS_H_INCLUDED
-#include <process.h>
-#define PROCESS_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_IO_H
-#ifndef IO_H_INCLUDED
-#include <io.h>
-#define IO_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_FCNTL_H
-#ifndef FCNTL_H_INCLUDED
-#include <fcntl.h>
-#define FCNTL_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_SYS_TYPES_H
-#ifndef SYS_TYPES_H_INCLUDED
-#include <sys/types.h>
-#define SYS_TYPES_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_SIGNAL_H
-#ifndef SIGNAL_H_INCLUDED
-#include <signal.h>
-#define SIGNAL_H_INCLUDED 1
-#endif
-#endif
-
-#include "dk4types.h"
-#include "dk4const.h"
-#include "dk4error.h"
-#include "dk4mem.h"
-#include "dk4mema.h"
-#include "dk4strd.h"
-#include "dk4app.h"
-#include "dk4aopt.h"
-#include "dk4vers.h"
-#include "dk4hnamed.h"
-#include "dk4user.h"
-
-#ifndef DK4WMAIN_H_INCLUDED
-#include "dk4wmain.h"
-#endif
-
-
-
-
-#line 89 "wprclean2.ctr"
-
-
-
-/** Information required to delete a print job.
-*/
-typedef struct {
- DWORD position; /**< Position in queue. */
- DWORD jobid; /**< Job ID. */
-} wprclean_printjob_t;
-
-
-
-/** Constant text strings used by program, not localized.
-*/
-static const dkChar * const wprclean_kwnl[] = {
-/* 0 */
-dkT("dktools"),
-
-/* 1 */
-dkT("wprclean.txt"),
-
-/* 2 */
-dkT("wprclean.str"),
-
-NULL
-
-
-#line 118 "wprclean2.ctr"
-};
-
-
-
-/** Constant texts used by the program, replaced by localized versions.
-*/
-static const dkChar * const wprclean_kw_def[] = {
-/* 0 */
-dkT("This program is only available for the Windows platform!"),
-
-/* 1 */
-dkT("Unnamed printer found in enumeration!"),
-
-/* 2 */
-dkT("Failed to enumerate print queues!"),
-
-/* 3 */
-dkT("Failed to open print queue \""),
-
-/* 4 */
-dkT("\"!"),
-
-/* 5 */
-dkT("Failed to obtain size for print queue information \""),
-
-/* 6 */
-dkT("\"!"),
-
-/* 7 */
-dkT("Failed to enumerate jobs for print queue \""),
-
-/* 8 */
-dkT("\"!"),
-
-/* 9 */
-dkT("Failed to obtain number of jobs for queue \""),
-
-/* 10 */
-dkT("\"!"),
-
-/* 11 */
-dkT("Failed to remove job from queue \""),
-
-/* 12 */
-dkT("\"!"),
-
-NULL
-
-
-#line 164 "wprclean2.ctr"
-};
-
-
-
-static const dkChar * const wprclean_help_text[] = {
-/* 0 */
-dkT(""),
-
-/* 1 */
-dkT("Windows print queue cleanup"),
-
-/* 2 */
-dkT(""),
-
-/* 3 */
-dkT("wprclean [-c]"),
-
-/* 4 */
-dkT(""),
-
-/* 5 */
-dkT("Options:"),
-
-/* 6 */
-dkT("-c\t--computer\tDelete print jobs submitted from this computer only."),
-
-/* 7 */
-dkT(""),
-
-/* 8 */
-dkT("\t--help\t\tShow this short help text."),
-
-/* 9 */
-dkT("\t--manual\t*** SHOW FULL MANUAL ***"),
-
-/* 10 */
-dkT("\t--version\tShow version information."),
-
-/* 11 */
-dkT("\t--license\tShow license information."),
-
-NULL
-
-
-#line 183 "wprclean2.ctr"
-};
-
-
-
-
-/** License conditions.
-*/
-static const dkChar * const wprclean_license_text[] = {
-dkT(""),
-dkT("This software uses code from the following projects, either directly or as"),
-dkT("a library:"),
-dkT(""),
-dkT("dktools\t\tDirk Krause's tools and libraries."),
-dkT("\t\tSee http://sourceforge.net/p/dktools/wiki/Home/"),
-dkT("\t\tfor more information."),
-#if DK4_HAVE_ZLIB_H
-dkT(""),
-dkT("zlib\t\tData compression library."),
-dkT("\t\tSee http://www.zlib.net/ for more information."),
-#endif
-#if DK4_HAVE_BZLIB_H
-dkT(""),
-dkT("bzip2\t\tData compression program and library."),
-dkT("\t\tSee http://www.bzip.org/ for more information."),
-#endif
-dkT(""),
-dkT("All the licenses below apply to the program."),
-dkT("Licenses for used libraries are shown as found on my Scientific Linux 6.x"),
-dkT("computer in the /usr/share/doc directory on 2015-04-01. Check the project"),
-dkT("homepages of the used libraries for additional information and/or updated"),
-dkT("license terms."),
-dkT(""),
-dkT(""),
-dkT("DK tools and libraries license"),
-dkT("=============================="),
-dkT("Copyright (c) 2015-2016, Dirk Krause"),
-dkT("All rights reserved."),
-dkT(""),
-dkT("Redistribution and use in source and binary forms, with or without"),
-dkT("modification, are permitted provided that the following conditions are met:"),
-dkT(""),
-dkT("1. Redistributions of source code must retain the above copyright notice,"),
-dkT(" this list of conditions and the following disclaimer."),
-dkT("2. Redistributions in binary form must reproduce the above copyright"),
-dkT(" notice, this list of conditions and the following disclaimer in the"),
-dkT(" documentation and/or other materials provided with the distribution."),
-dkT("3. Neither the name of the copyright holder nor the names of its"),
-dkT(" contributors may be used to endorse or promote products derived from"),
-dkT(" this software without specific prior written permission."),
-dkT(""),
-dkT("THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"),
-dkT("``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT"),
-dkT("LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR"),
-dkT("A PARTICULAR PURPOSE ARE DISCLAIMED."),
-dkT("IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY"),
-dkT("DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES"),
-dkT("(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR"),
-dkT("SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER"),
-dkT("CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT"),
-dkT("LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY"),
-dkT("OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF"),
-dkT("SUCH DAMAGE."),
-dkT(""),
-#if DK4_HAVE_ZLIB_H
-dkT(""),
-dkT(""),
-dkT("Zlib license"),
-dkT("============"),
-dkT("(C) 1995-2004 Jean-loup Gailly and Mark Adler"),
-dkT(""),
-dkT("This software is provided 'as-is', without any express or implied"),
-dkT("warranty. In no event will the authors be held liable for any damages"),
-dkT("arising from the use of this software."),
-dkT(""),
-dkT("Permission is granted to anyone to use this software for any purpose,"),
-dkT("including commercial applications, and to alter it and redistribute it"),
-dkT("freely, subject to the following restrictions:"),
-dkT(""),
-dkT("1. The origin of this software must not be misrepresented; you must not"),
-dkT(" claim that you wrote the original software. If you use this software"),
-dkT(" in a product, an acknowledgment in the product documentation would be"),
-dkT(" appreciated but is not required."),
-dkT("2. Altered source versions must be plainly marked as such, and must not be"),
-dkT(" misrepresented as being the original software."),
-dkT("3. This notice may not be removed or altered from any source distribution."),
-dkT(""),
-dkT("Jean-loup Gailly Mark Adler"),
-dkT("jloup@gzip.org madler@alumni.caltech.edu"),
-#endif
-#if DK4_HAVE_BZLIB_H
-dkT(""),
-dkT(""),
-dkT("Bzip2 and libbzip2 library license"),
-dkT("=================================="),
-dkT("This program, \"bzip2\", the associated library \"libbzip2\", and all"),
-dkT("documentation, are copyright (C) 1996-2007 Julian R Seward. All"),
-dkT("rights reserved."),
-dkT(""),
-dkT("Redistribution and use in source and binary forms, with or without"),
-dkT("modification, are permitted provided that the following conditions"),
-dkT("are met:"),
-dkT(""),
-dkT("1. Redistributions of source code must retain the above copyright"),
-dkT(" notice, this list of conditions and the following disclaimer."),
-dkT(""),
-dkT("2. The origin of this software must not be misrepresented; you must "),
-dkT(" not claim that you wrote the original software. If you use this "),
-dkT(" software in a product, an acknowledgment in the product "),
-dkT(" documentation would be appreciated but is not required."),
-dkT(""),
-dkT("3. Altered source versions must be plainly marked as such, and must"),
-dkT(" not be misrepresented as being the original software."),
-dkT(""),
-dkT("4. The name of the author may not be used to endorse or promote "),
-dkT(" products derived from this software without specific prior written "),
-dkT(" permission."),
-dkT(""),
-dkT("THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS"),
-dkT("OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED"),
-dkT("WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE"),
-dkT("ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY"),
-dkT("DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL"),
-dkT("DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE"),
-dkT("GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS"),
-dkT("INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,"),
-dkT("WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING"),
-dkT("NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS"),
-dkT("SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."),
-dkT(""),
-dkT("Julian Seward, jseward@bzip.org"),
-dkT("bzip2/libbzip2 version 1.0.5 of 10 December 2007"),
-#endif
-dkT(""),
-NULL
-
-
-#line 318 "wprclean2.ctr"
-};
-
-
-
-/** Full computer name (including domain).
-*/
-static dkChar host_long[256];
-
-
-
-/** Short computer name (just host name).
-*/
-static dkChar host_short[256];
-
-
-
-/** User name.
-*/
-static dkChar user_name[256];
-
-
-
-/** Options used by the program.
-*/
-static const dk4_option_specification_t wprclean_options[] = {
-
- /* Delete jobs submitted from local computer only.
- */
- { dkT('c'), dkT("computer"), DK4_OPT_ARG_NONE },
-
- /* Produce verbose output.
- */
- { dkT('v'), dkT("verbose"), DK4_OPT_ARG_NONE }
-};
-
-
-
-/** Application structure.
-*/
-static dk4_app_t *app = NULL;
-
-
-
-/** Queue storage.
-*/
-static dk4_sto_t *s_q = NULL;
-
-
-
-/** Iterator for queue storage.
-*/
-static dk4_sto_it_t *i_q = NULL;
-
-
-
-/** Message texts, replaced by localized version if available.
-*/
-static const dkChar * const *msg = wprclean_kw_def;
-
-
-/** Number of elements in the wprclean_options array.
-*/
-static const size_t wprclean_sz_options =
-sizeof(wprclean_options)/sizeof(dk4_option_specification_t);
-
-
-
-/** Size of user_name buffer.
-*/
-static const size_t sz_user_name = DK4_SIZEOF(user_name,dkChar);
-
-
-
-/** Number of elements in the wprclean_kw_def array.
-*/
-static size_t sz_msg =
-(sizeof(wprclean_kw_def)/sizeof(DK4_PDKCHAR) - 1);
-
-
-
-/** Size of short host name buffer.
-*/
-static const size_t sz_host_short = DK4_SIZEOF(host_short,dkChar);
-
-
-
-/** Flag: Use separated short host name.
-*/
-static int have_short_host = 0;
-
-
-
-/** Flag: Delete jobs submitted from current host only.
-*/
-static int only_this_host = 0;
-
-
-
-/** Exit status code returned by the program.
-*/
-static int exval = EXIT_FAILURE;
-
-
-
-/** Flag: Verbose output.
-*/
-static int verbose = 0;
-
-
-
-/* This program is only available for the Windows platform!
-*/
-#if DK4_ON_WINDOWS
-
-
-
-/** Check presence of -c option, retrieve host name and short
- host name if necessary.
-*/
-static
-void
-check_options(void)
-{
- dkChar *ptr;
-
-
-#line 443 "wprclean2.ctr"
- host_long[0] = dkT('\0');
- host_short[0] = dkT('\0');
- user_name[0] = dkT('\0');
- if (0 != dk4app_opt_is_set_short(app, dkT('v'), NULL)) {
- verbose = 1;
-
-#line 448 "wprclean2.ctr"
- }
- if (0 != dk4app_opt_is_set_short(app, dkT('c'), NULL)) {
-
-#line 450 "wprclean2.ctr"
- if (0 != dk4hostname(host_long, DK4_SIZEOF(host_long,dkChar), NULL)) {
- only_this_host = 1;
-
-#line 452 "wprclean2.ctr"
- if (0 != dk4str_cpy_s(host_short, sz_host_short, host_long, NULL)) {
- ptr = dk4str_chr(host_short, dkT('.'));
-
-#line 454 "wprclean2.ctr"
- if (NULL != ptr) {
-
-#line 455 "wprclean2.ctr"
- *ptr = dkT('\0');
- have_short_host = 1;
- }
-#if TRACE_DEBUG
- else {
-
-#line 460 "wprclean2.ctr"
- }
-#endif
- }
-#if TRACE_DEBUG
- else {
-
-#line 465 "wprclean2.ctr"
- }
-#endif
- }
-#if TRACE_DEBUG
- else {
-
-#line 470 "wprclean2.ctr"
- }
-#endif
- }
-
-
-#line 474 "wprclean2.ctr"
-}
-
-
-
-/** Compare two queue names.
- @param l Left queue name.
- @param r Right queue name.
- @param cr Comparison criteria, unused.
- @return Comparison result.
-*/
-static
-int
-compare_queues(const void *l, const void *r, int cr)
-{
- int back = 0;
- if (NULL != l) {
- if (NULL != r) {
- back = dk4str_cmp((const dkChar *)l, (const dkChar *)r);
- if (-1 > back) back = -1;
- if ( 1 < back) back = 1;
- } else back = 1;
- } else {
- if (NULL != r) back = -1;
- }
- return back;
-}
-
-
-
-/** Compare two print jobs within the same queue.
- @param l Left job.
- @param r Right job.
- @param cr Comparison criteria (ignored).
- @return Comparison result (inverted sort order).
-*/
-static
-int
-compare_print_jobs(const void *l, const void *r, int cr)
-{
- const wprclean_printjob_t *jl = NULL;
- const wprclean_printjob_t *jr = NULL;
- int back = 0;
- if (NULL != l) {
- if (NULL != r) {
- jl = (const wprclean_printjob_t *)l;
- jr = (const wprclean_printjob_t *)r;
- if (jl->position > jr->position) {
- back = -1;
- } else {
- if (jr->position > jl->position) {
- back = 1;
- } else {
- if (jl->jobid > jr->jobid) {
- back = -1;
- } else {
- if (jr->jobid > jl->jobid) {
- back = 1;
- }
- }
- }
- }
- } else back = 1;
- } else {
- if (NULL != r) back = -1;
- }
- return back;
-}
-
-
-/** Allocate resources for list of print queues and iterator.
- @return 1 on success, 0 on error.
-*/
-static
-int
-setup_for_queue_list(void)
-{
- int back = 0;
-
-
-#line 552 "wprclean2.ctr"
- s_q = dk4sto_open(NULL);
- if (NULL != s_q) {
-
-#line 554 "wprclean2.ctr"
- dk4sto_set_comp(s_q, compare_queues, 0);
- i_q = dk4sto_it_open(s_q, NULL);
- if (NULL != i_q) {
-
-#line 557 "wprclean2.ctr"
- back = 1;
- }
-#if TRACE_DEBUG
- else {
-
-#line 561 "wprclean2.ctr"
- }
-#endif
- }
-#if TRACE_DEBUG
- else {
-
-#line 566 "wprclean2.ctr"
- }
-#endif
-
-
-#line 569 "wprclean2.ctr"
- return back;
-}
-
-
-
-/** Clean up print queues storage and iterator.
-*/
-static
-void
-cleanup_for_queue_list(void)
-{
- dkChar *p;
-
-
-#line 582 "wprclean2.ctr"
- /* Release all queue names saved, close iterator.
- */
- if (NULL != i_q) {
-
-#line 585 "wprclean2.ctr"
- dk4sto_it_reset(i_q);
- do {
- p = (dkChar *)dk4sto_it_next(i_q);
- if (NULL != p) {
- dk4mem_free(p);
- }
- } while (NULL != p);
-
-#line 592 "wprclean2.ctr"
- dk4sto_it_close(i_q); i_q = NULL;
- }
- /* Close storage.
- */
- if (NULL != s_q) {
-
-#line 597 "wprclean2.ctr"
- dk4sto_close(s_q); s_q = NULL;
- }
-
-
-#line 600 "wprclean2.ctr"
-}
-
-
-
-/** Retrieve list of print queue names.
- @return 1 on success, 0 on error
-*/
-static
-int
-retrieve_queue_list(void)
-{
-#if DK4_ON_WINDOWS
- char *peb; /* Result buffer */
- dkChar *pn; /* Printer name */
-#if DK4_CHAR_SIZE > 1
- PRINTER_INFO_2W *pi2; /* Printer information array */
-#else
- PRINTER_INFO_2A *pi2; /* Printer information array */
-#endif
- DWORD cbNeeded; /* Bytes needed */
- DWORD cbReturned; /* Bytes returned */
- DWORD szPeb; /* Size of peb */
- DWORD i; /* Index current print queue */
- BOOL res; /* Operation result */
- int back = 0;
-
-
-#line 626 "wprclean2.ctr"
- cbNeeded = cbReturned = szPeb = (DWORD)0UL;
-#if DK4_CHAR_SIZE > 1
- EnumPrintersW(PRINTER_ENUM_LOCAL,NULL,2,NULL,szPeb,&cbNeeded,&cbReturned);
-#else
- EnumPrintersA(PRINTER_ENUM_LOCAL,NULL,2,NULL,szPeb,&cbNeeded,&cbReturned);
-#endif
- if ((DWORD)0UL < cbNeeded) {
- szPeb = cbNeeded;
- peb = dk4mem_new_app(char, (size_t)cbNeeded, app);
- if (NULL != peb) {
- cbNeeded = cbReturned = (DWORD)0UL;
-#if DK4_CHAR_SIZE > 1
- res = EnumPrintersW(
- PRINTER_ENUM_LOCAL,NULL,2,(LPBYTE)peb,szPeb,&cbNeeded,&cbReturned
- );
-#else
- res = EnumPrintersA(
- PRINTER_ENUM_LOCAL,NULL,2,(LPBYTE)peb,szPeb,&cbNeeded,&cbReturned
- );
-#endif
- if (res) {
- if ((DWORD)0UL < cbReturned) {
- pi2 = (PRINTER_INFO_2 *)peb;
- back = 1;
- for (i = (DWORD)0UL; i < cbReturned; i++) {
- if (NULL != pi2->pPrinterName) {
- pn = dk4str_dup(pi2->pPrinterName, NULL);
- if (NULL != pn) {
- if (0 == dk4sto_add(s_q, pn, NULL)) {
- dk4mem_free(pn);
-
-#line 656 "wprclean2.ctr"
- back = 0;
- exval = EXIT_FAILURE;
- /* ERROR: Memory */
- dk4app_log_base1(app, DK4_LL_ERROR, 90);
- }
- } else {
-
-#line 662 "wprclean2.ctr"
- back = 0;
- exval = EXIT_FAILURE;
- /* ERROR: Memory */
- dk4app_log_base1(app, DK4_LL_ERROR, 90);
- }
- } else {
-
-#line 668 "wprclean2.ctr"
- back = 0;
- exval = EXIT_FAILURE;
- /* ERROR: Invalid printer configuration */
- dk4app_log_1(app, msg, sz_msg, DK4_LL_ERROR, 1);
- }
- pi2++;
- }
- } else {
-
-#line 676 "wprclean2.ctr"
- }
- } else {
-
-#line 678 "wprclean2.ctr"
- exval = EXIT_FAILURE;
- /* ERROR: Printer enumeration failed */
- dk4app_log_1(app, msg, sz_msg, DK4_LL_ERROR, 2);
- }
- dk4mem_release(peb);
- } else {
-
-#line 684 "wprclean2.ctr"
- exval = EXIT_FAILURE;
- }
- } else {
-
-#line 687 "wprclean2.ctr"
- }
-
-
-#line 689 "wprclean2.ctr"
- return back;
-#else
- return 1;
-#endif
-}
-
-
-
-/** Remove jobs from one print queue.
-*/
-static
-void
-handle_one_queue(const dkChar *pn)
-{
- char *pc1 = NULL; /* First buffer */
- char *pc2 = NULL; /* Second buffer */
- dk4_sto_t *s_j = NULL; /* Jobs container */
- dk4_sto_it_t *i_j = NULL; /* Jobs iterator */
-#if DK4_CHAR_SIZE > 1
- PRINTER_INFO_2W *pi2 = NULL; /* Printer info */
- JOB_INFO_1W *ji1 = NULL; /* Print job info */
-#else
- PRINTER_INFO_2A *pi2 = NULL; /* Printer info */
- JOB_INFO_1A *ji1 = NULL; /* Print job info */
-#endif
- wprclean_printjob_t *pj = NULL; /* New print job */
- HANDLE h_pr = INVALID_HANDLE_VALUE; /* Printer handle */
- DWORD sz1 = (DWORD)0UL; /* Size provided */
- DWORD sz2 = (DWORD)0UL; /* Size needed */
- DWORD sz3 = (DWORD)0UL; /* Size provided */
- DWORD sz4 = (DWORD)0UL; /* Size needed */
- DWORD sz5 = (DWORD)0UL; /* No print jobs */
- DWORD nJobs = (DWORD)0UL; /* Number of jobs */
- DWORD i = (DWORD)0UL; /* Current job index */
- int mm = 0; /* Machine matches */
- int um = 0; /* User matches */
- BOOL bres = FALSE; /* Printer open res */
- BOOL br1 = FALSE; /* GetPrinter res */
- BOOL br2 = FALSE; /* GetPrinter res */
- BOOL br3 = FALSE; /* EnumJobs res */
- BOOL br4 = FALSE; /* EnumJobs res */
- BOOL br5 = FALSE; /* SetJob res */
-
-
-#line 732 "wprclean2.ctr"
- /* Prepare data structures.
- */
- s_j = dk4sto_open(NULL);
- if (NULL == s_j) {
-
-#line 736 "wprclean2.ctr"
- exval = EXIT_FAILURE;
- /* ERROR: Memory */
- dk4app_log_base1(app, DK4_LL_ERROR, 90);
- goto finished;
- }
- dk4sto_set_comp(s_j, compare_print_jobs, 0);
- i_j = dk4sto_it_open(s_j, NULL);
- if (NULL == i_j) {
-
-#line 744 "wprclean2.ctr"
- exval = EXIT_FAILURE;
- /* ERROR: Memory */
- dk4app_log_base1(app, DK4_LL_ERROR, 90);
- goto finished;
- }
- /* Open printer
- */
-#if DK4_CHAR_SIZE > 1
- bres = OpenPrinterW(pn, &h_pr, NULL);
-#else
- bres = OpenPrinterA(pn, &h_pr, NULL);
-#endif
- if (!(bres)) {
-
-#line 757 "wprclean2.ctr"
- h_pr = INVALID_HANDLE_VALUE;
- exval = EXIT_FAILURE;
- /* ERROR: Failed to open printer */
- dk4app_log_3(app, msg, sz_msg, DK4_LL_ERROR, 3, 4, pn);
- goto finished;
- }
- /* Retrieve number of jobs
- */
-#if DK4_CHAR_SIZE > 1
- br1 = GetPrinterW(h_pr, 2, NULL, (DWORD)0UL, &sz1);
-#else
- br1 = GetPrinterA(h_pr, 2, NULL, (DWORD)0UL, &sz1);
-#endif
- if ((DWORD)0UL == sz1) {
-
-#line 771 "wprclean2.ctr"
-
-
-#line 772 "wprclean2.ctr"
-
-
-#line 773 "wprclean2.ctr"
- exval = EXIT_FAILURE;
- /* ERROR: Failed to request print queue */
- dk4app_log_3(app, msg, sz_msg, DK4_LL_ERROR, 5, 6, pn);
- goto finished;
- }
- if ((DWORD)0UL == sz1) {
-
-#line 779 "wprclean2.ctr"
- exval = EXIT_FAILURE;
- /* ERROR: Failed to request print queue */
- dk4app_log_3(app, msg, sz_msg, DK4_LL_ERROR, 5, 6, pn);
- goto finished;
- }
- pc1 = dk4mem_new_app(char,(size_t)sz1,app);
- if (NULL == pc1) {
-
-#line 786 "wprclean2.ctr"
- exval = EXIT_FAILURE;
- goto finished;
- }
-#if DK4_CHAR_SIZE > 1
- br2 = GetPrinterW(h_pr, 2, pc1, sz1, &sz2);
-#else
- br2 = GetPrinterA(h_pr, 2, pc1, sz1, &sz2);
-#endif
- if (!(br2)) {
-
-#line 795 "wprclean2.ctr"
- exval = EXIT_FAILURE;
- /* ERROR: GetPrinter failed */
- dk4app_log_3(app, msg, sz_msg, DK4_LL_ERROR, 9, 10, pn);
- goto finished;
- }
- if (sz2 > sz1) {
-
-#line 801 "wprclean2.ctr"
- exval = EXIT_FAILURE;
- /* ERROR: Number of bytes increased. */
- dk4app_log_3(app, msg, sz_msg, DK4_LL_ERROR, 9, 10, pn);
- goto finished;
- }
- pi2 = (PRINTER_INFO_2 *)pc1;
- nJobs = pi2->cJobs;
- if ((DWORD)0UL == nJobs) {
-
-#line 809 "wprclean2.ctr"
- goto finished;
- }
- /* Retrieve job data and build sorted storage
- */
-#if DK4_CHAR_SIZE > 1
- br3 = EnumJobsW(
- h_pr, (DWORD)0UL, nJobs, 1, NULL, (DWORD)0UL, &sz3, &sz4
- );
-#else
- br3 = EnumJobsW(
- h_pr, (DWORD)0UL, nJobs, 1, NULL, (DWORD)0UL, &sz3, &sz4
- );
-#endif
- if ((!(br3)) || ((DWORD)0UL == sz3)) {
-
-#line 823 "wprclean2.ctr"
- exval = EXIT_FAILURE;
- /* ERROR: Failed to find required byte number */
- dk4app_log_3(app, msg, sz_msg, DK4_LL_ERROR, 7, 8, pn);
- goto finished;
- }
- pc2 = dk4mem_new_app(char,(size_t)sz3,app);
- if (NULL == pc2) {
-
-#line 830 "wprclean2.ctr"
- exval = EXIT_FAILURE;
- goto finished;
- }
- sz4 = (DWORD)0UL;
-#if DK4_CHAR_SIZE > 1
- br4 = EnumJobsW(
- h_pr, (DWORD)0UL, nJobs, 1, pc2, sz3, &sz4, &sz5
- );
-#else
- br4 = EnumJobsW(
- h_pr, (DWORD)0UL, nJobs, 1, pc2, sz3, &sz4, &sz5
- );
-#endif
- if (!(br4)) {
-
-#line 844 "wprclean2.ctr"
- exval = EXIT_FAILURE;
- /* ERROR: EnumJobs */
- dk4app_log_3(app, msg, sz_msg, DK4_LL_ERROR, 7, 8, pn);
- goto finished;
- }
- if (sz4 > sz3) {
-
-#line 850 "wprclean2.ctr"
- exval = EXIT_FAILURE;
- /* ERROR: Number of bytes changed */
- dk4app_log_3(app, msg, sz_msg, DK4_LL_ERROR, 7, 8, pn);
- goto finished;
- }
-#if DK4_CHAR_SIZE > 1
- ji1 = (JOB_INFO_1W *)pc2;
-#else
- ji1 = (JOB_INFO_1A *)pc2;
-#endif
- for (i = (DWORD)0UL; i < sz5; i++) {
- mm = 1;
- um = 1;
- if (0 != only_this_host) {
-
-#line 864 "wprclean2.ctr"
- if (NULL != ji1->pMachineName) {
-
-#line 865 "wprclean2.ctr"
- if (0 != dk4str_casecmp(host_long, ji1->pMachineName)) {
- mm = 0;
- if (0 != have_short_host) {
-
-#line 868 "wprclean2.ctr"
- if (0 == dk4str_casecmp(host_short, ji1->pMachineName)) {
- mm = 1;
-
-#line 870 "wprclean2.ctr"
- }
- }
- }
- }
- }
- if (NULL != ji1->pUserName) {
- if (0 != dk4str_casecmp(user_name, ji1->pUserName)) {
- um = 0;
- }
- }
- else {
-
-#line 881 "wprclean2.ctr"
- um = 0;
- }
- if ((0 != mm) && (0 != um)) {
-
-#line 884 "wprclean2.ctr"
- pj = dk4mem_new_app(wprclean_printjob_t,1,app);
- if (NULL != pj) {
- pj->position = i;
- pj->jobid = ji1->JobId;
-
-
-#line 889 "wprclean2.ctr"
- if (0 == dk4sto_add(s_j, pj, NULL)) {
-
-#line 890 "wprclean2.ctr"
- dk4mem_free(pj);
- exval = EXIT_FAILURE;
- /* ERROR: Memory */
- dk4app_log_base1(app, DK4_LL_ERROR, 90);
- }
- } else {
-
-#line 896 "wprclean2.ctr"
- exval = EXIT_FAILURE;
- }
- }
- ji1++;
- }
- /* Remove print jobs from queue
- */
- dk4sto_it_reset(i_j);
- do {
- pj = (wprclean_printjob_t *)dk4sto_it_next(i_j);
- if (NULL != pj) {
-
-#line 907 "wprclean2.ctr"
-#if DK4_CHAR_SIZE > 1
- br5 = SetJobW(h_pr, pj->jobid, 0, NULL, JOB_CONTROL_DELETE);
-#else
- br5 = SetJobA(h_pr, pj->jobid, 0, NULL, JOB_CONTROL_DELETE);
-#endif
- if (!(br5)) {
-
-#line 913 "wprclean2.ctr"
- exval = EXIT_FAILURE;
- /* ERROR: Failed to remove job */
- dk4app_log_3(app, msg, sz_msg, DK4_LL_ERROR, 11, 12, pn);
- }
- else {
-
-#line 918 "wprclean2.ctr"
- }
- }
- } while(NULL != pj);
-
- /* Final cleanup.
- */
- finished:
- if (NULL != pc2) {
- dk4mem_free(pc2);
- }
- if (NULL != pc1) {
- dk4mem_free(pc1);
- }
- if (bres) {
- ClosePrinter(h_pr);
- }
- if (NULL != i_j) {
- dk4sto_it_reset(i_j);
- do {
- pj = (wprclean_printjob_t *)dk4sto_it_next(i_j);
- if (NULL != pj) {
- dk4mem_free(pj);
- }
- } while(NULL != pj);
- dk4sto_it_close(i_j);
- }
- if (NULL != s_j) {
- dk4sto_close(s_j);
- }
-
-
-#line 948 "wprclean2.ctr"
-}
-
-
-
-/** Remove all print jobs from local queues.
-*/
-static
-void
-remove_all_print_jobs(void)
-{
- dkChar *pn;
-
- check_options();
- if (0 != dk4user_get_logname(user_name, sz_user_name, 1, NULL)) {
- if (setup_for_queue_list()) {
- exval = EXIT_SUCCESS;
- if (retrieve_queue_list()) {
- dk4sto_it_reset(i_q);
- do {
- pn = (dkChar *)dk4sto_it_next(i_q);
- if (NULL != pn) {
- handle_one_queue(pn);
- }
- } while (NULL != pn);
- }
- }
- cleanup_for_queue_list();
- } else {
- }
-}
-
-#endif
-
-
-
-/** 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
-{
-
-
-#line 995 "wprclean2.ctr"
-
-
-#line 996 "wprclean2.ctr"
- app = dk4app_open_cmd(
- argc, argv, wprclean_options, wprclean_sz_options,
- wprclean_kwnl[0], DKT_VERSION_DK,
- wprclean_kwnl[1], wprclean_help_text, wprclean_license_text
- );
- if (NULL != app) {
- sz_msg = dk4app_string_table_size(wprclean_kw_def);
- msg = dk4app_string_table(app, wprclean_kwnl[2], wprclean_kw_def);
- if (0 != dk4app_can_run_normally(app)) {
-#if DK4_ON_WINDOWS
- remove_all_print_jobs();
-#else
- dk4app_log_1(app, msg, sz_msg, DK4_LL_ERROR, 0);
-#endif
- } else {
- if (0 != dk4app_help_version_license(app)) {
- exval = EXIT_SUCCESS;
- }
- }
- dk4app_close(app);
- }
-
-
-#line 1018 "wprclean2.ctr"
-
-
-#line 1019 "wprclean2.ctr"
- exit(exval); return exval;
-}
-