+static char def_rcsid[]="$Id$";
+
+/*----------------------------------------------------
+ * def.h Tom Green Mon Jan 31 10:44:27 1994
+ *
+ * Copyright 1993
+ *
+ * SUPER COMPUTER COMPUTATIONS RESEARCH INSTITUTE
+ * FLORIDA STATE UNIVERSITY
+ *
+ *
+ * SCRI representatives make no claims about the
+ * suitability of this software for any purpose.
+ * It is provided "as is" without express or
+ * implied warranty.
+ *
+ * $Log$
+ * Revision 1.8 2000/03/09 03:56:07 chuck
+ * Modified FLOCK macro for lockf on System 5 hosts and flock on
+ * BSD hosts. FLOCK now only locks. New macro FUNLOCK is now used
+ * to unlock.
+ *
+ * Revision 1.7 2000/03/09 03:51:22 chuck
+ * Fixed a memory leak in the UNPACKSTR macro.
+ * An input argument was overwritten without first releasing
+ * the memory it pointed to.
+ *
+ * Revision 1.6 1999/04/30 16:46:26 green
+ * reworked file locking in dqs_log.c to use MACRO FLOCK defined in def.h
+ * so that AIX doesn't have to include -lbsd
+ *
+ * Revision 1.5 1999/04/30 14:50:52 green
+ * support for changing from hex to base10 for queue configurations
+ *
+ * Revision 1.4 1998/10/26 19:24:09 green
+ * use the DQS_EXIT macro to determine exit value of ancillaries
+ *
+ * Revision 1.3 1998/10/21 14:42:52 green
+ * Red Hat Alpha Port - ADDRLEN incorporated
+ * SETPGRP/GETPGRP macros redefined
+ *
+ * Revision 1.2 1998/10/13 15:08:48 green
+ * Solaris 2.6 support - hopefully, as I don't have access to one...
+ *
+ * Revision 1.1.1.1 1998/08/18 14:39:10 green
+ * DQS 3.2.0.5 WIP Import
+ *
+ * Revision 1.5 1997/10/21 15:51:19 decker
+ * Expanded MAX_STRING_SIZE and TOKEN_SIZE to 2048
+ *
+ * Revision 1.4 1997/09/04 16:39:05 decker
+ * Ron Lee's Patch for VALID,SETBIT,CLEARBIT added
+ *
+ * Revision 1.3 1997/08/08 15:17:14 decker
+ * Added David Geldreich Patch:
+ *
+ * Revision 1.2 1997/04/10 21:51:49 green
+ * added def for rindex
+ *
+ * Revision 1.1.1.1 1997/04/10 15:10:31 green
+ * DQS 3.1.3.4.1 Distribution
+ *
+ * Revision 3.60 1996/08/26 14:20:45 nrl
+ * Incorporated SCRI scheduling changes
+ *
+ * Revision 3.59 1996/08/16 17:44:42 nrl
+ * Added SETEUID macro to def.h to provide differentiation
+ * for HP from the rest of the pack.
+ *
+ * Revision 3.58 1996/07/09 19:53:12 nrl
+ * Added SOLARIS2.5 parameters
+ *
+ * Revision 3.57 1996/06/27 01:55:37 nrl
+ * changes to accomodate osf gcc
+ *
+ * Revision 3.55 1996/06/26 19:08:44 nrl
+ * set JOBS_SCANNED_PER_PASS to very large number to force
+ * a relook at the entire queue each time.
+ *
+ * Revision 3.54 1996/06/26 14:03:19 nrl
+ * Added pvmcleanup.sh to install.. added osf2.3 detection
+ *
+ * Revision 3.53 1996/06/17 02:28:36 nrl
+ * Updtaes from Guntram Wolski, Ron Lee, John Makosky and
+ * Bodo Beckebach
+ *
+ * Revision 3.52 1996/04/01 21:35:38 nrl
+ * removed absolte path from DEBUG313,txt file name
+ *
+ * Revision 3.51 1996/03/25 16:28:26 nrl
+ * Repaired parameter scanning for qidle
+ *
+ * Revision 3.50 1996/03/21 17:06:37 nrl
+ * added fortran and "c" syntax to resource requests
+ *
+ * Revision 3.49 1996/03/19 23:27:01 nrl
+ * added capability to clean up consumable resources whenthey
+ * get out of sync with reality
+ *
+ * Revision 3.48 1996/03/17 00:57:28 nrl
+ * merge in qsub prevalidation scheme and consumable restoration
+ *
+ * Revision 3.47 1996/03/14 03:15:57 nrl
+ * merge in subordinate queues and consumable resource changes
+ *
+ * Revision 3.46 1996/03/12 17:11:45 nrl
+ * removed aborts and replaced with an error messaging scheme
+ * to send email to the dqs adminsitrator and wait for
+ * actions by that administrator
+ *
+ * Revision 3.45 1996/02/07 13:07:37 nrl
+ * Added "process leader" and TMP_FILES link capability
+ *
+ * Revision 3.44 1996/01/19 20:58:36 nrl
+ * merged SCRI code and new job and queue structure changes
+ *
+ * Revision 3.43 1995/10/23 18:51:37 nrl
+ * Added fix for setpgrp (once more) for Solaris 2.4, recommended by
+ * Ron Lee
+ *
+ * Revision 3.42 1995/07/13 20:51:06 nrl
+ * This is the contribution of that almost anonymous fellow
+ * Ron lee from a company which does not its name mentioned..
+ * which finally!! (we hope) solves ALL the Solaris 2.4 problems.
+ *
+ * Revision 3.41 1995/07/12 18:47:48 nrl
+ * Fixed numerous problmes with Irix 5.3 and 6.0 systems
+ *
+ * Revision 3.40 1995/06/22 19:31:07 nrl
+ * Added kludgie "subpriority" field to differentiate jobs from the
+ * same user. Also fixed MAXUJOBS and added "MAXU" warning to
+ * the "qstat" command.
+ *
+ * Revision 3.39 1995/06/21 16:57:28 nrl
+ * Major scheduling changes... added a subpriority field to manage
+ * things within the user submitted priority. Added priority info to the
+ * accounting file.
+ *
+ * Revision 3.38 1995/06/15 17:20:51 nrl
+ * Mike Iglesias solved the setpriority problem on OSF platforms
+ *
+ * Revision 3.37 1995/06/15 14:20:54 nrl
+ * changed SETPGRP for OSF systems to use setpgid
+ *
+ * Revision 3.36 1995/06/13 12:06:11 nrl
+ * Updated count of variables for fscanf testing
+ *
+ * Revision 3.35 1995/05/29 18:08:44 nrl
+ * More solaris stuff GAGGHH had to differentiate more cases of
+ * solaris2.3 and solaris2.4 stuff
+ *
+ * Revision 3.34 1995/05/28 16:44:35 nrl
+ * Fixes for solaris2.3 and solaris 2.4 and mailer default recipients
+ *
+ * Revision 3.33 1995/05/14 18:28:46 nrl
+ * Plugged one hole in dqs_execd and qmaster handhsaking...
+ * added gethostbyname calls to overcome problems with some
+ * systems
+ *
+ * Revision 3.32 1995/03/05 03:46:56 nrl
+ * Included Axel Brandes job scheduling mechanism to keep one
+ * user from hawging the queue.
+ *
+ * Revision 3.31 1995/02/22 14:29:13 nrl
+ * added "FREE" macro to make sure all freed pointers are NULL,
+ * replaced all calls to free( ) with FREE.
+ *
+ * Revision 3.30 1995/02/20 01:02:59 nrl
+ * corrected SUN changes for bcmp,bcopy and bzero
+ *
+ * Revision 3.29 1995/02/19 22:37:48 nrl
+ * Simplified pvm and tcgmsg interface to a minimalist scheme requiring
+ * user scripts to start the daemons
+ *
+ * Revision 3.28 1995/02/17 02:56:51 nrl
+ * Added formal skeletons for PVM and TCGMSG parallel modes
+ *
+ * Revision 3.27 1995/02/09 12:48:57 nrl
+ * Added "delete complex" and "modify complex"
+ *
+ * Revision 3.26 1995/02/06 16:31:48 nrl
+ * Added "account" info to rusage structure and to the "acc_file"
+ * for analysis by user.
+ *
+ * Revision 3.25 1995/01/17 16:31:57 nrl
+ * completed mailer feature
+ *
+ * Revision 3.24 1994/11/14 13:56:36 green
+ * fixed hpux "nice"
+ * 536c536
+ * < #define SETPRIORITY(niceval) nice(GETPGRP,niceval)
+ * ---
+ * > #define SETPRIORITY(niceval) nice(niceval)
+ * --------------------------------------------------------------------
+ *
+ * Revision 3.23 1994/08/02 23:11:05 green
+ * added support for a crude job staging mechanism
+ *
+ * Revision 3.22 1994/07/05 14:22:27 green
+ * added James MacKinnon's NeXT ports
+ *
+ * Revision 3.21 1994/06/12 23:18:00 green
+ * yanked NCARGS
+ *
+ * Revision 3.20 1994/06/12 21:04:56 green
+ * expanded DQS_MAXNAMELEN to MAX_STRING_SIZE in def.h
+ *
+ * utilize DQS_MAXNAMELEN for command size in dqs_dshd.c
+ *
+ * Revision 3.19 1994/06/09 18:38:20 green
+ * had some problems with nonre-entrant gethostbyX in dqs_sec.c - fixed
+ *
+ * #def overload for "GENERIC" in def.h - fixed
+ *
+ * Revision 3.18 1994/06/09 14:25:04 green
+ * yanked PVM after further digging through the PVM code decided there
+ * might be potential problems(let somebody else worry with pvm if they
+ * want it...)
+ *
+ * pulled out some sloaris #defs - maybe one day SUN will ship me my
+ * compiler
+ *
+ * Revision 3.17 1994/06/08 17:48:00 green
+ * added P4 support(with the help of Ralph Butler - Thanks Ralph!)
+ *
+ * backed down to Rev. 3.3 of dqs_check_to_do_list.c
+ *
+ * Revision 3.16 1994/06/07 16:45:37 green
+ * more "sloaris" porting...
+ *
+ * Revision 3.15 1994/06/07 12:37:55 green
+ * moved some format descriptors out of dqs_ck_to_do_list.c and
+ * dqs_job_exeit.c and into def.h
+ *
+ * added dqs_read_stats() to dqs_ck_to_do_list.c
+ *
+ * Revision 3.14 1994/06/06 01:23:01 green
+ * added "dqs_dshd_service" to the DQS config
+ *
+ * add "-par pvm" - though we do NOT intend to support it
+ * (see dqs_start_pvm.c for a more thorough discussion)
+ *
+ * Revision 3.13 1994/06/04 15:24:28 green
+ * added "-par parallel_packge" support
+ *
+ * Revision 3.12 1994/06/04 14:49:41 green
+ * added necessary P4/MPI defs
+ *
+ * Revision 3.11 1994/06/02 13:44:26 green
+ * attempt to port to Sloaris...
+ * Work In Progress(WIPed)
+ *
+ * Revision 3.10 1994/05/31 12:23:32 green
+ * modified #define for GETPGRP such that __osf__ doesn't utilize args
+ *
+ * Revision 3.9 1994/05/31 12:03:45 green
+ * some OSes define MAXNAMELEN - some don't
+ * handled with an ifndef in def.h
+ *
+ * removed "#include "h.h"" in defined.c
+ *
+ * yanked ANSI prototyping in dsh.c/dshd.c as some(sic) C compilers can't
+ * swallow them
+ *
+ * #ifdef'ed fcntl(F_SETOWN) out for HPUX in dsh.c as HPUX doesn't define
+ * it
+ *
+ * #ifdef'ed "#include <sys/select.h>" out of h.h #ifdefed
+ * __hpux/bsd_4_2/SVR3/__osf__.(taken care of in types.h in most of
+ * these.)
+ *
+ * Revision 3.8 1994/05/31 10:30:36 green
+ * some OSes define NCARGS, some don't - handle with ifndef...
+ *
+ * Revision 3.7 1994/05/31 00:52:40 green
+ * added dsh.c dshd.c to Makefile.proto
+ *
+ * added MAXNAMELEN and NCARGS to def.h
+ *
+ * type casting in dqs_reauth.c, dqs_sec.c, dqs_setup.c to hush gcc
+ * warnings
+ *
+ * added jmp_buf to globals.h, changed Revision number in globals.h
+ *
+ * added dsh and dshd tp prognames.h
+ *
+ * Revision 3.6 1994/05/30 23:56:16 green
+ * added necessary defs for DCMD/DSH to def.h
+ *
+ * added notes on necessary hooks to dqs_execd.c reqd for direct execing
+ * of dsh
+ *
+ * added "#include <setjmp.h>" to h.h
+ *
+ * Revision 3.5 1994/05/04 17:54:53 green
+ * added FreeBSD support(Pedro A M Vazquez)
+ *
+ * Revision 3.4 1994/04/01 02:59:28 green
+ * added "qalter" support
+ *
+ * Revision 3.3 1994/03/27 05:59:44 green
+ * def.h:UNPACKSTR() modified to force a NULL as realloc() doesn't
+ * necessarily return clean memory
+ *
+ * dqs_list.c:dqs_insert(TAIL) had a bug wheninserting to a NULL head
+ *
+ * may "Last Minute Hack" to dqs_list.c:dqs_showlist() really screwed up
+ * some things - yanked...
+ *
+ * Revision 3.2 1994/03/26 16:33:33 green
+ * added "-srl" support.
+ *
+ * dqs_resolve.c:dqs_read_resolve_file() now returns the primary qmaster
+ * name for fields marked as "none"
+ *
+ * Revision 3.1 1994/03/26 15:29:14 green
+ * allowed for "qconf -sq [dest_id_list]" vs "qconf -sq dest_id_list"
+ *
+ * write generic queue configuration in common_dir
+ *
+ * Revision 3.0 1994/03/07 04:13:02 green
+ * 3.0 freeze
+ *
+ * Revision 1.8 1994/02/25 23:13:17 green
+ * added "PID_FILE" to def.h to log process id.
+ *
+ * modified dqs_execd.c and qmaster.c to log pids to a file
+ *
+ * added dqs_log_pid() to dqs_utility.c
+ *
+ * remade func.h
+ *
+ * forced insertion of "green" into Man_head -- this needs to be removed
+ * and a def in dqs.h if running as non-root.
+ *
+ * Revision 1.7 1994/02/24 01:10:01 green
+ * added default compile flags in Makefile.proto
+ *
+ * modified GETPGRP() and SETPGRP() in def.h for IRIX 5.1.1.1 support
+ *
+ * changed "st_mtime" to "st_m_time" in dqs_reauth.cand dqs_sec.c
+ * for IRIX 5.1.1.1 support
+ *
+ * Revision 1.6 1994/02/23 16:19:16 green
+ * added "QUSAGE" to def.h
+ *
+ * Revision 1.5 1994/02/17 14:48:57 green
+ * added MAX_KLOG_TIME to def.h
+ *
+ * added some strategic dqs_set_coresize_2_0() as CYAs
+ *
+ * nuked some dqs_set_coresize_back_normal()
+ *
+ * dinked with ALRM handlers for "robustness"
+ *
+ * NOTE: HPUX does not support core limit size --- sad...
+ *
+ * Revision 1.4 1994/02/10 20:58:37 green
+ * moved "LOG_FILE" and "ERR_FILE" out of def.h to dqs.h
+ *
+ * fixed "-Passwd passwd_file" option
+ *
+ * Revision 1.3 1994/02/09 19:47:58 green
+ * syncing source with docs
+ *
+ * Revision 1.2 1994/02/02 20:22:05 green
+ * cleaned up "qconf.c" to sync with docs
+ *
+ * Revision 1.1.1.1 1994/02/01 17:57:36 green
+ * DQS 3.0 ALPHA
+ *
+ *--------------------------------------------------*/
+
+/* logicals */
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+
+
+/* DQS_COMPILE_DEBUG inserts debugging macros
+ * LEAVE THEM IN!(or don't call if ya need help)
+ */
+
+#define DQS_COMPILE_DEBUG
+#define DEBUG_FILE stderr
+
+#define DEFAULT_EDITOR "vi"
+#define DQS_MAX_FD 600
+#define MAX_SEQNUM 999999
+#define MAX_PATH 2048
+
+/*********************************************************/
+
+#ifdef __alpha
+#define u_long32 u_int
+#else
+#define u_long32 u_long
+#endif
+
+/*********************************************************/
+/* Job states */
+#define IDLE 0
+
+/* Batch Services Summary */
+
+#define JOB_EXECUTION 300
+#define JOB_ROUTING 301
+#define JOB_EXIT 302
+#define BATCH_SERVER_RESTART 303
+#define JOB_ABORTS 304
+#define QUEUE_JOB_REQUEST 305
+#define MODIFY_JOB_REQUEST 306
+#define DELETE_JOB_REQUEST 307
+#define JOB_MESSAGE_REQUEST 308
+#define RERUN_JOB_REQUEST 309
+#define SIGNAL_JOB_REQUEST 310
+#define JOB_STATUS_REQUEST 311
+#define QUEUE_STATUS_REQUEST 312
+#define SERVER_STATUS_REQUEST 313
+#define SELECT_JOBS_REQUEST 314
+#define MOVE_JOB_REQUEST 315
+#define HOLD_JOB_REQUEST 316
+#define RELEASE_JOB_REQUEST 317
+#define SERVER_SHUTDOWN_REQUEST 318
+#define LOCATE_JOB_REQUEST 319
+#define SIGNAL_QUEUE_REQUEST 320
+
+#define STARTING_UP 321 /* NOT PART OF P1003.15D12! */
+#define DQS_ACK 500
+#define DQS_NAK 501
+#define LOAD_AVG 322
+
+#define QMASTER_ACTION_REQUEST 323 /* sent to the qmaster for help */
+#define DQS_EXECD_ACTION_REQUEST 344 /* sent to the dqs_execd by the qmaster */
+
+/* Action sub fields */
+#define SYNCHRONIZE 001
+#define ERROR_REPORT 002
+#define SLAVE_PROCESS_ALERT 003
+#define KILL_SLAVE_PROCESS 004
+#define REFRESH 005
+#define SHUTDOWN 006
+#define MAIL_TO_ADMINISTRATOR 007
+
+/* return codes */
+#define DENIED 400
+#define ACCEPTED 401
+
+/********************************************************************************/
+/************ scheduling constants *****************************************/
+
+#define BASE_PRIORITY 1024
+#define PRIORITY_OFFSET 8
+#define NEWCOMER_FLAG 0x1000000
+/* forced negative sign bit */
+#define MAX_JOBS_EXCEEDED 0x8000000
+#define ALREADY_SCANNED 0x4000000
+
+#define PRIORITY_MASK 0xffff00
+#define SUBPRIORITY_MASK 0x0000ff
+
+#define JOBS_SCANNED_PER_PASS 4000
+/********************************************************************************/
+
+/* Event logging controls */
+#define LOG_VIA_SYSLOG 500 /* log via syslogd */
+#define LOG_VIA_FILE 501 /* log via logfile */
+#define LOG_VIA_COMBO 502 /* log messages both ways */
+
+#define LOG_EXTDEBUG LOG_DEBUG+1
+
+/********************************************************************************/
+
+/* misc */
+#define ASCENDING 600
+#define DESCENDING 601
+#define HEAD 602
+#define TAIL 603
+
+/********************************************************************************/
+
+/* Shell strategies */
+
+#define DQS_FIXED_SHELL 700
+#define DQS_FLOATING_SHELL 701
+
+/********************************************************************************/
+
+/* remap signals */
+
+#define DQS_SIGHUP 901
+#define DQS_SIGINT 902
+#define DQS_SIGQUIT 903
+#define DQS_SIGILL 904
+#define DQS_SIGTRAP 905
+#define DQS_SIGABRT 906
+#define DQS_SIGIOT 907
+#define DQS_SIGEMT 908
+#define DQS_SIGFPE 909
+#define DQS_SIGKILL 910
+#define DQS_SIGBUS 911
+#define DQS_SIGSEGV 912
+#define DQS_SIGSYS 913
+#define DQS_SIGPIPE 914
+#define DQS_SIGALRM 915
+#define DQS_SIGTERM 916
+#define DQS_SIGURG 917
+#define DQS_SIGSTOP 918
+#define DQS_SIGTSTP 919
+#define DQS_SIGCONT 920
+#define DQS_SIGCHLD 921
+#define DQS_SIGTTIN 922
+#define DQS_SIGTTOU 923
+#define DQS_SIGIO 924
+#define DQS_SIGXCPU 925
+#define DQS_SIGXFSZ 926
+#define DQS_SIGVTALRM 927
+#define DQS_SIGPROF 928
+#define DQS_SIGWINCH 929
+#define DQS_SIGLOST 930
+#define DQS_SIGUSR1 931
+#define DQS_SIGUSR2 932
+
+/********************************************************************************/
+/* Symbolic Constants */
+
+/* misc */
+
+#define NONE 0x00000000
+#define ALL 0x77777777
+
+/* Checkpoint/Restart Constants */
+/* use dqs_show_checkpoint() */
+
+#define CHECKPOINT_AT_MINIMUM_INTERVAL_SYM 'm'
+#define CHECKPOINT_AT_MINIMUM_INTERVAL 0x00000001
+#define CHECKPOINT_AT_SHUTDOWN_SYM 's'
+#define CHECKPOINT_AT_SHUTDOWN 0x00000002
+#define CHECKPOINT_AT_UNSPECIFIED_SYM 'u'
+#define CHECKPOINT_AT_UNSPECIFIED 0x00000004
+#define NO_CHECKPOINT_SYM 'n'
+#define NO_CHECKPOINT 0x00000008
+
+/* Hold Type Constants */
+#define NO_HOLD_SYM 'n'
+#define NO_HOLD 0x000000010
+#define OTHER_SYM 'o'
+#define OTHER 0x000000020
+#define SYSTEM_SYM 's'
+#define SYSTEM 0x000000040
+#define USER_SYM 'u'
+#define USER 0x000000080
+
+/* Job/Queue State Constants */
+/* use dqs_show_states() */
+
+#define ALARM_SYM 'a'
+#define ALARM 0x000000001
+#define SUSPEND_ON_COMP_SYM 'c' /* NOT PART OF P1003.15D12! */
+#define SUSPEND_ON_COMP 0x000000002
+#define DISABLED_SYM 'd'
+#define DISABLED 0x000000004
+#define ENABLED_SYM 'e'
+#define ENABLED 0x000000008
+#define HELD_SYM 'h'
+#define HELD 0x000000010
+#define MIGRATING_SYM 'm' /* NOT PART OF P1003.15D12! */
+#define MIGRATING 0x000000020
+#define QUEUED_SYM 'q'
+#define QUEUED 0x000000040
+#define RUNNING_SYM 'r'
+#define RUNNING 0x000000080
+#define SUSPENDED_SYM 's' /* NOT PART OF P1003.15D12! */
+#define SUSPENDED 0x000000100
+#define TRANSISTING_SYM 't'
+#define TRANSISTING 0x000000200
+#define UNKNOWN_SYM 'u'
+#define UNKNOWN 0x000000400
+#define WAITING_SYM 'w'
+#define WAITING 0x000000800
+#define EXITING_SYM 'x' /* NOT P1003.15D12 compliant! 'e' */
+#define EXITING 0x000001000
+#define XSUSPEND_ON_COMP 0x000002000
+#define HANDOFF_ERROR_SYM 'H' /* NOT PART OF P1003.15D12! */
+#define HANDOFF_ERROR 0x000004000
+#define SUBORDINATED_SYM 'S' /* NOT PART OF P1003.15D12! */
+#define SUBORDINATED 0x000008000
+/* Keep_list Constants */
+#define KEEP_NONE_SYM 'n'
+#define KEEP_NONE 0x00000000
+#define KEEP_STD_ERROR_SYM 'e'
+#define KEEP_STD_ERROR 0x000010000
+#define KEEP_STD_OUTPUT_SYM 'o'
+#define KEEP_STD_OUTPUT 0x000020000
+
+/* Mail Option Constants */
+
+#define MAIL_AT_ABORT_SYM 'a'
+#define MAIL_AT_ABORT 0x000040000
+#define MAIL_AT_BEGINNING_SYM 'b'
+#define MAIL_AT_BEGINNING 0x000080000
+#define MAIL_AT_EXIT_SYM 'e'
+#define MAIL_AT_EXIT 0x000100000
+#define NO_MAIL_SYM 'n'
+#define NO_MAIL 0x000200000
+#define MAIL_AT_SUSPENSION_SYM 's' /* NOT PART OF P1003.15D12! */
+#define MAIL_AT_SUSPENSION 0x000400000
+
+/********************************************************************************/
+
+/* User access declarations */
+
+#define GLOBAL_ACCESS_LIST "GLOBAL" /* global access list name */
+#define ACCESS_FREE 1 /* access free w/o exclusions */
+#define ACCESS_OPEN 2 /* access open w/ exclusions */
+#define ACCESS_RESTRICTED 3 /* access restricted, some */
+ /* users allowed */
+/*******************************************************************************/
+/* conf file definitions */
+#define LEAVE_OUTPUT_FILES 800
+#define COPY_OUTPUT_FILES 801
+#define LINK_OUTPUT_FILES 802
+
+/********************************************************************************/
+
+/* misc qsub/qsh stuff */
+
+/* Resource request types */
+#define GENERIC 0 /* resource requested by DQS group */
+#define HARD 0 /* request must be satisfied */
+#define SOFT 2 /* request need not be satisfied */
+#define SPECIFIC 3 /* specific queue requested */
+
+/* used by the parser */
+#define MASTER 0
+#define H_SPECIFIC 1
+#define H_GENERIC 2
+#define S_SPECIFIC 3
+#define S_GENERIC 4
+
+#define P4 1
+#define MPI 2
+#define GENERIC_SLA 3
+#define GENERIC_ALL 4
+#define PVM 5
+#define TCGMSG 6
+/********************************************************************************/
+
+/* misc directories */
+/* these are all relative to the SPOOL_DIR */
+#define COMMON_DIR "common_dir"
+#define EXEC_DIR "exec_dir"
+#define JOB_DIR "job_dir"
+#define QUEUE_DIR "queue_dir"
+#define RUSAGE_DIR "rusage_dir"
+#define TID_DIR "tid_dir"
+
+/* misc files */
+/* these are all relative to the SPOOL_DIR */
+#define ACL_FILE "common_dir/acl_file"
+#define ACT_FILE "act_file"
+#define PID_FILE "pid_file"
+#define COMPLEX_FILE "common_dir/complex_file"
+#define CONSUMABLE_FILE "common_dir/consumable_file"
+#define COOKIE_FILE "common_dir/cookie_file"
+#define DEFAULT_COMPLEX_FILE "common_dir/default_complex_file"
+#define DEFAULT_QCONF_FILE "common_dir/default_qconf_file"
+#define GENERIC_QUEUE "common_dir/generic_queue"
+#define HOST_FILE "common_dir/host_file"
+#define MAN_FILE "common_dir/man_file"
+#define OP_FILE "common_dir/op_file"
+#define SEQ_NUM_FILE "common_dir/seq_num_file"
+#define STAT_FILE "stat_file"
+
+/*********************************************************/
+/*Code via Doug Gibson*/
+#define MAX_STRING_SIZE 2048
+
+#define INTSIZE 4 /* (4) 8 bit bytes */
+#if _UNICOS
+#define INTOFF 4 /* big endian 64-bit machines where sizeof(int) = 8 */
+#else
+#define INTOFF 0 /* the rest of the world; see comments in request.c */
+#endif
+
+#define MAX_DBE_SIZE 4096 /* max (key,content) size in bytes for ndbm(3) */
+
+#define REQUESTSIZE 1024 /* BE CAREFUL */
+
+#define HASH_BUCKET_SIZE 128
+#define QMASTER_HASH_BUCKET_SIZE 256
+#ifndef MAX_NIS_RETRIES
+#define MAX_NIS_RETRIES 10 /* max number of retries for slow NIS servers */
+#endif
+#ifndef MAX_UNLINK_RETRIES
+#define MAX_UNLINK_RETRIES 50 /* max number of unlink(2) retries */
+#endif
+
+#define CLEAR_EXECD_TIDS 10 /* how often to clear unreaped execd TIDs */
+
+/*********************************************************/
+/* Operating system-specific definitions */
+/*********************************************************/
+
+#if ( defined(SOLARIS23) || defined(SOLARIS24) || defined(SOLARIS25) || defined(SOLARIS26) || defined(SOLARIS27) )
+#define SOLARIS23_UP TRUE
+#endif
+
+/* Extended sysconf(2) interface macros */
+#ifdef _SC_EXIT_SIGHUP
+#define EXIT_SIGHUP sysconf(_SC_EXIT_SIGHUP)
+#else
+#define EXIT_SIGHUP FALSE
+#endif
+#ifdef _SC_PID_MAX
+#define MAX_PROCESS_ID sysconf(_SC_PID_MAX)
+#else
+#define MAX_PROCESS_ID MAXPID
+#endif
+#ifdef _SC_UID_MAX
+#define MAX_USER_ID sysconf(_SC_UID_MAX)
+#else
+#define MAX_USER_ID MAXUID
+#endif
+
+/* FLOCK - lock a file */
+
+#if (defined(_AIX) || defined(__hpux) || defined(sun))
+#define FLOCK(x) lockf(x,F_LOCK,0)
+#define FUNLOCK(x) lockf(x,F_ULOCK,0)
+#else
+#define FLOCK(x) flock(x,LOCK_EX)
+#define FUNLOCK(x) flock(x,LOCK_UN)
+#endif
+
+
+/* GETPGRP - get a process group */
+
+#if (defined(__sgi) || defined(__convex__) || defined(_AIX) || defined(i386) || defined (SVR3) || defined (__osf__) || defined(solaris)|| defined(SOLARIS23_UP) )
+#define GETPGRP getpgrp()
+#else
+#define GETPGRP getpgrp(getpid())
+#endif
+
+/* SETPGRP - set process group */
+#if (defined(__sgi) || defined(i386) || defined(_UNICOS) || defined (SVR3)|| defined (__osf__) || defined (_AIX) || defined(solaris) || defined(SOLARIS23_UP) )
+#define SETPGRP setpgrp()
+#else
+#define SETPGRP setpgid(getpid(), GETPGRP)
+#endif
+
+/* SunOS 4.1.X Specific SETPGRP, Required for Proper Signal Handling. */
+/* Assign calling process, PID=0, the Process Group ID, pgrp, to the actual */
+/* PID number. */
+#if ( defined(sun) && !(defined(solaris) || defined(SOLARIS23_UP) ))
+#undef SETPGRP
+#define SETPGRP setpgrp(0,getpid())
+#endif
+
+#if defined( __FreeBSD__)
+#undef SETPGRP
+#define SETPGRP setpgrp(getpid(),getpid())
+#endif
+/*This is a patch from David Geldreich*/
+#if defined (__osf__)
+#undef SETPGRP
+#define SETPGRP setpgid(getpid(),getpid())
+#endif
+/*End patch*/
+#if defined __hpux
+#undef SETPGRP
+#undef GETPGRP
+#define SETPGRP setpgrp()
+#define GETPGRP getpgrp()
+#endif
+
+#if (defined( linux ) && defined(__alpha ) )
+#undef SETPGRP
+#undef GETPGRP
+#define SETPGRP setpgrp()
+#define GETPGRP getpgrp()
+#endif
+
+#if defined __hpux
+#define SETEUID(e1) setresuid (-1, e1, -1)
+#else
+#define SETEUID(e1) seteuid ( e1 )
+#endif
+
+
+/* SETPRIORITY - set process priority */
+#if (defined(solaris)||defined(SOLARIS23_UP))
+#define SETPRIORITY(niceval) nice(niceval-nice(0))
+#endif
+#ifdef __hpux
+#define SETPRIORITY(niceval) nice(niceval)
+#endif
+#ifdef _UNICOS
+#define SETPRIORITY(niceval) nice(niceval)
+#endif
+#ifndef SETPRIORITY
+#define SETPRIORITY(niceval) setpriority(PRIO_PGRP,GETPGRP,niceval)
+#endif
+
+/* SunOS 4.1.X DOES NOT HAVE "strerror()" routine defined. */
+/* Forces the use of the "sys_errlist[]" structure defined in "<errno.h>". */
+#if ( defined(sun) && !(defined(solaris) || defined(SOLARIS23_UP) ))
+#define STRERROR sys_errlist[(int) errno]
+#else
+#define STRERROR strerror((int) errno)
+#endif
+
+#if (defined(_UNICOS) || defined(__hpux) || defined(solaris) || defined(SOLARIS23_UP))
+#define RESOURCES tms
+#define GETRUSAGE(loc) times(loc)
+#if _UNICOS
+#define CLOCKTICK _SC_CLK_TCK
+#endif
+
+#if (defined(__hpux) || defined(solaris)|| defined(SOLARIS23_UP))
+#define CLOCKTICK CLK_TCK;
+#endif
+#else
+#define RESOURCES rusage
+#define GETRUSAGE(loc) getrusage(RUSAGE_CHILDREN,loc)
+#define CLOCKTICK
+#endif
+
+#if (defined( solaris) || defined(SOLARIS23_UP))
+#ifdef bcmp
+#undef bcmp
+#endif
+#define bcmp(s1, s2, n) memcmp ((s1), (s2), (n))
+
+#ifdef bcopy
+#undef bcopy
+#endif
+#define bcopy(s, d, n) memcpy ((d), (s), (n))
+
+#ifdef bzero
+#undef bzero
+#endif
+#define bzero(s, n) memset ((s), 0, (n))
+
+#ifdef index
+#undef index
+#endif
+#define index(s, c) strchr(s, c)
+
+#ifdef rindex
+#undef rindex
+#endif
+#define rindex(s, c) strrchr(s, c)
+
+/* this is no longer used in solaris, but then we have no rusage-information */
+#ifdef wait3
+#undef wait3
+#endif
+#define wait3(s, o, r) waitpid(-1, s, o)
+
+#endif
+
+
+/* Directory structure definitions */
+
+#if (defined(_AIX) || defined(__osf__) || defined(_UNICOS) || defined(sun) || defined(solaris) || defined(SOLARIS23_UP))
+#define DIRENT dirent
+ struct dirent *readdir();
+#else
+#define DIRENT direct
+#ifndef NeXT
+ struct direct *readdir();
+#endif
+#endif
+
+/* Temporary filename interface */
+#if __convex__
+#define TEMPNAM tmpnam((char *)NULL)
+char *tmpnam();
+#else
+#define TEMPNAM tempnam((char *)NULL,(char *)NULL)
+char *tempnam();
+#endif
+
+#if (defined( linux ) && defined(__alpha ) )
+#define ADDRLEN size_t
+#else
+#define ADDRLEN int
+#endif
+
+#ifndef _NFILE
+#define _NFILE 32
+#endif
+
+/*********************************************************/
+/* Logging macros from hell */
+/*********************************************************/
+
+#define FREE(x) if(x){free( (char *)x); x=NULL;}
+
+#define READ_WRITE_MACRO_DEFS int str_len=0;int bytes_written=0;\
+int ii=0;int bytes_read=0;string tmpp_str
+
+#define WRITE_INT(x,y) if (dqs_writenbytes(x,y,INTSIZE)!=INTSIZE) {\
+WARNING((DQS_EVENT,"dqs_writenbytes() returned an error"));\
+DEXITE;return(-1);}else{bytes_written+=INTSIZE;}
+
+#define WRITE_STR(x,y) str_len=strlen(y);str_len++;\
+WRITE_INT(x,&str_len);ii=dqs_writenbytes(x,y,str_len);\
+DPRINTF((DQS_EVENT,"dqs_writenbytes returned %d str_len = %d",ii,str_len))\
+if (ii!=str_len) {WARNING((DQS_EVENT,"error writting string"));\
+DEXITE;return(-1);}else{bytes_written+=str_len;}
+
+#define READ_INT(x,y) if (dqs_readnbytes(x,y,INTSIZE)!=INTSIZE) {\
+WARNING((DQS_EVENT,"dqs_readnbytes() returned an error"));DEXITE;return(NULL);}\
+else{bytes_read+=INTSIZE;}
+
+#define READ_STR(x,y)READ_INT(x,&str_len);ii=dqs_readnbytes(x,tmpp_str,str_len);if(ii!=str_len){\
+WARNING((DQS_EVENT,"error reading string"));DEXITE;return(NULL);}\
+else{y=dqs_string_insert(y,tmpp_str);bytes_read+=str_len;}
+
+/* DON'T TOUCH THESE! */
+#define NIBBLE 8
+#define OFFSET 16*NIBBLE
+#define CHUNK 262144
+#define NIBBLE_SIZE(x) ((1+((x-1)/NIBBLE))*NIBBLE)
+
+#define CHUNK_SIZE(x) ((1+((x-1)/CHUNK))*CHUNK)
+
+#define PACK_MACRO_DEFS int STR_LEN;char STRING[MAX_STRING_SIZE];u_long32 J
+
+/* a b c d e
+PACKINT(head_ptr,cur_ptr,int,bytes_packed,mem_size);
+*/
+
+#define PACKINT(a,b,c,d,e)\
+ if ((d+INTSIZE)>e)\
+ {\
+ e+=CHUNK;\
+ a=dqs_realloc(a,e);\
+ if (!a)\
+ {\
+ CRITICAL((DQS_EVENT,"dqs_realloc() failure in PACKINT()"));\
+ abort();\
+ }\
+ b=(a);\
+ b+=(d);\
+ }\
+ J=htonl(c);\
+ bcopy(&J,b,INTSIZE);\
+ b=(b+INTSIZE);\
+ d+=INTSIZE;
+
+
+/* a b c d e
+PACKSTR(head_ptr,cur_ptr,str,bytes_packed,mem_size);
+*/
+
+
+#define PACKSTR(a,b,c,d,e)\
+ if (!c) STR_LEN=1; \
+ else { \
+ STR_LEN=strlen(c);\
+ STR_LEN++; } \
+ if ((d+STR_LEN)>e)\
+ {\
+ e+=CHUNK;\
+ a=dqs_realloc(a,e);\
+ if (!a)\
+ {\
+ CRITICAL((DQS_EVENT,"dqs_realloc() failure in PACKSTR()"));\
+ abort();\
+ }\
+ b=(a);\
+ b+=(d);\
+ }\
+ if (c) bcopy(c,b,STR_LEN);\
+ else bcopy(&dqs_zero,b,STR_LEN); \
+ b+=STR_LEN;\
+ d+=STR_LEN;
+
+/* a b c d e f
+PACKBUF(head_ptr,cur_ptr,buf_ptr,buf_size,bytes_packed,mem_size);
+*/
+
+#define PACKBUF(a,b,c,d,e,f)\
+ if ((d+e)>f)\
+ {\
+ f+=CHUNK_SIZE(d);\
+ a=dqs_realloc(a,f);\
+ if (!a)\
+ {\
+ CRITICAL((DQS_EVENT,"dqs_realloc() failure in PACKBUF()"));\
+ abort();\
+ }\
+ b=(a);\
+ b+=(e);\
+ }\
+ bcopy(c,b,d);\
+ b+=(d);\
+ e+=(d);
+
+
+/* a b c d
+UNPACKINT(cur_ptr,int,bytes_unpacked,bytes_packed);
+*/
+#define UNPACKINT(a,b,c,d)\
+ if ((c+INTSIZE)>d)\
+ {\
+ CRITICAL((DQS_EVENT,"error in UNPACKINT()"));\
+ abort();\
+ }\
+ bcopy(a,&b,INTSIZE);\
+ b=ntohl(b);\
+ a+=INTSIZE;\
+ c+=INTSIZE;
+
+
+/* a b c d
+UNPACKSTR(cur_ptr,str,bytes_unpacked,bytes_packed);
+*/
+#define UNPACKSTR(a,b,c,d)\
+ if (!a[0]) STR_LEN=1; \
+ else { \
+ STR_LEN=strlen(a);\
+ STR_LEN++;\
+ } \
+ if ((STR_LEN+c)>d)\
+ {\
+ CRITICAL((DQS_EVENT,"error in UNPACKSTR()"));\
+ abort();\
+ }\
+ FREE(b); \
+if (a[0]) { \
+ bcopy(a,STRING,STR_LEN);\
+ b=dqs_string_insert(NULL,STRING); } \
+ else b=NULL; \
+ a+=STR_LEN;\
+ c+=STR_LEN;
+
+/* a b c d e
+UNPACKBUF(cur_ptr,buf_ptr,buf_size,bytes_unpacked,bytes_packed);
+*/
+
+#define UNPACKBUF(a,b,c,d,e)\
+ if ((c+d)>e)\
+ {\
+ CRITICAL((DQS_EVENT,"error in UNPACKBUF()"));\
+ abort();\
+ }\
+ b=dqs_malloc(c);\
+ bcopy(a,b,c);\
+ a+=c;\
+ d+=c;
+
+
+#define CRITICAL(x) sprintf x;dqs_log(LOG_CRIT,DQS_EVENT,__FILE__,DQS_FUNC,__LINE__)
+#define ERROR(x) sprintf x;dqs_log(LOG_ERR,DQS_EVENT,__FILE__,DQS_FUNC,__LINE__)
+#define WARNING(x) sprintf x;dqs_log(LOG_WARNING,DQS_EVENT,__FILE__,DQS_FUNC,__LINE__)
+#define NOTICE(x) sprintf x;dqs_log(LOG_NOTICE,DQS_EVENT,__FILE__,DQS_FUNC,__LINE__)
+#define INFO(x) sprintf x;dqs_log(LOG_INFO,DQS_EVENT,__FILE__,DQS_FUNC,__LINE__)
+
+#ifdef DQS_COMPILE_DEBUG
+
+#define DENTER_MAIN(x) \
+ int LOG_LEVEL=LOG_DEBUG,DQS_OINDENT; \
+ string DQS_FUNC,DQS_EVENT,ACK_EVENT; \
+ dqs_list_type LISTEL; \
+ bzero((char *)&conf,sizeof(conf)); \
+ bzero((char *)&me,sizeof(me)); \
+ conf.logfacility=LOGFACILITY; \
+ DQS_FUNC[0]=0;\
+ dqs_mini_setup(argv[0]); \
+ if (getenv("EXT_DEBUG")) \
+ {DEBUG_LOGLEVEL=LOG_EXTDEBUG;DEBUG_ON=TRUE;} \
+ else if (getenv("DEBUG")) \
+ {DEBUG_LOGLEVEL=LOG_DEBUG;DEBUG_ON=TRUE;} \
+ else \
+ DEBUG_LOGLEVEL=0; \
+ if (DEBUG_ON)\
+ {\
+ strcpy x;\
+ strcpy(DQS_FUNC,DQS_EVENT);\
+ DQS_OINDENT=DEBUG_INDENT;\
+ DEBUG_INDENT+=8;\
+ sprintf(DQS_EVENT,"--> %s()",DQS_FUNC);\
+ dqs_log(LOG_LEVEL,DQS_EVENT,__FILE__,DQS_FUNC,__LINE__);\
+ }
+
+#define DENTER(x)\
+ int LOG_LEVEL=LOG_DEBUG,DQS_OINDENT; \
+ string DQS_FUNC,DQS_EVENT,ACK_EVENT; \
+ dqs_list_type LISTEL; \
+ DQS_FUNC[0]=0;\
+ if (EXT_DEBUG_ON|DEBUG_ON)\
+ {\
+ strcpy x;\
+ strcpy(DQS_FUNC,DQS_EVENT);\
+ DQS_OINDENT=DEBUG_INDENT;\
+ DEBUG_INDENT+=8;\
+ sprintf(DQS_EVENT,"--> %s()",DQS_FUNC);\
+ dqs_log(LOG_LEVEL,DQS_EVENT,__FILE__,DQS_FUNC,__LINE__);\
+ }
+
+#define DENTER_EXT(x)\
+ int LOG_LEVEL=LOG_EXTDEBUG,DQS_OINDENT; \
+ string DQS_FUNC,DQS_EVENT,ACK_EVENT; \
+ dqs_list_type LISTEL; \
+ DQS_FUNC[0]=0;\
+ if (EXT_DEBUG_ON|DEBUG_ON)\
+ {\
+ strcpy x;\
+ strcpy(DQS_FUNC,DQS_EVENT);\
+ DQS_OINDENT=DEBUG_INDENT;\
+ DEBUG_INDENT+=8; \
+ sprintf(DQS_EVENT,"--> %s()",DQS_FUNC);\
+ dqs_log(LOG_LEVEL,DQS_EVENT,__FILE__,DQS_FUNC,__LINE__);\
+ }
+
+#define DPRINTF(x)\
+ if (DEBUG_ON)\
+ {\
+ sprintf x;\
+ dqs_log(LOG_LEVEL,DQS_EVENT,__FILE__,DQS_FUNC,__LINE__);\
+ }
+
+#define DTRACE\
+ if (DEBUG_ON)\
+ {\
+ sprintf(DQS_EVENT,"TRACE");\
+ dqs_log(LOG_LEVEL,DQS_EVENT,__FILE__,DQS_FUNC,__LINE__);\
+ }
+
+#define DTRACEE\
+ if (1)\
+{\
+ sprintf(DQS_EVENT,"TRACE");\
+ dqs_log(LOG_ERR,DQS_EVENT,__FILE__,DQS_FUNC,__LINE__);\
+}
+
+#define ACK(x)\
+ sprintf x;\
+ bzero((char *)&LISTEL,sizeof(LISTEL));\
+ LISTEL.status=DQS_ACK;\
+ LISTEL.str0=dqs_string_insert(NULL,ACK_EVENT);\
+ reply_head=dqs_insert(DQS_STR0,TAIL,reply_head,&LISTEL);
+
+#define NAK(x)\
+ sprintf x;\
+ bzero((char *)&LISTEL,sizeof(LISTEL));\
+ LISTEL.status=DQS_NAK;\
+ LISTEL.str0=dqs_string_insert(NULL,ACK_EVENT);\
+ reply_head=dqs_insert(DQS_STR0,TAIL,reply_head,&LISTEL);
+
+#define DEXIT\
+ if (DEBUG_ON)\
+ {\
+ sprintf(DQS_EVENT,"<-- %s()",DQS_FUNC);\
+ dqs_log(LOG_LEVEL,DQS_EVENT,__FILE__,DQS_FUNC,__LINE__);\
+ DEBUG_INDENT=DQS_OINDENT;\
+ }
+
+#define DEXITE\
+ if (DEBUG_ON)\
+ {\
+ sprintf(DQS_EVENT,"<-- %s() *** ERROR ***",DQS_FUNC);dqs_log(LOG_LEVEL,DQS_EVENT,__FILE__,DQS_FUNC,__LINE__);\
+ DEBUG_INDENT=DQS_OINDENT;\
+ }
+
+#else
+#define DENTER(x) {}
+#define DTRACE {}
+#define DPRINTF(x){}
+#define DEXIT {}
+#endif
+
+
+#if defined(_AIX) || defined(SVR3)
+#define DQS_ASSERT(x) if x ; else {dqs_log(LOG_CRIT, # x ,__FILE__,DQS_FUNC,__LINE__);dqs_log(LOG_CRIT,"unrecoverable error - contact systems manager",__FILE__,DQS_FUNC,__LINE__);abort();}
+#else
+#define DQS_ASSERT(x) if x ; else {dqs_log(LOG_CRIT,"unrecoverable error - contact systems manager",__FILE__,DQS_FUNC,__LINE__);abort();}
+#endif
+
+#define DQS_EXIT(x)\
+ if (x==DQS_ACK)\
+ exit(0);\
+ else\
+ exit(-1);
+
+/******************************************************************************/
+/* misc flags/attribute defines */
+
+#define NO_OPT 0
+#define a_OPT 1
+#define A_OPT 2
+#define B_OPT 3
+#define c_OPT 4
+#define cell_OPT 5
+#define C_OPT 6
+#define e_OPT 7
+#define par_OPT 8
+#define E_OPT 9
+#define f_OPT 10
+#define h_OPT 11
+#define hard_OPT 12
+#define j_OPT 13
+#define k_OPT 14
+#define l_OPT 15
+#define m_OPT 16
+#define master_OPT 17
+#define M_OPT 18
+#define N_OPT 19
+#define o_OPT 20
+#define O_OPT 21
+#define p_OPT 22
+#define q_OPT 23
+#define Q_OPT 24
+#define r_OPT 25
+#define s_OPT 26
+#define soft_OPT 27
+#define S_OPT 28
+#define u_OPT 29
+#define v_OPT 30
+#define verify_OPT 31
+#define V_OPT 32
+#define z_OPT 33
+#define DESTIN_OPR 34
+#define JOB_ID_OPR 35
+#define MESSAGE_OPR 36
+#define SCRIPT_OPR 37
+#define SRVR_NM_OPR 38
+#define soc_OPT 39
+#define xsoc_OPT 40
+#define help_OPT 41
+#define cwd_OPT 42
+#define ext_OPT 43
+#define ul_OPT 44
+#define reauth_OPT 45
+#define notify_OPT 46
+#define passwd_OPT 47
+#define Passwd_OPT 48
+#define d_OPT 49
+#define us_OPT 50
+#define hold_jid_OPT 51
+
+#define ac_OPT 101
+#define ah_OPT 102
+#define am_OPT 103
+#define ao_OPT 104
+#define aq_OPT 105
+#define au_OPT 106
+#define Aq_OPT 107
+#define cq_OPT 108
+#define dc_OPT 109
+#define dh_OPT 110
+#define dm_OPT 111
+#define do_OPT 112
+#define dq_OPT 113
+#define du_OPT 114
+#define kq_OPT 115
+#define kqs_OPT 116
+#define mc_OPT 117
+#define mconf_OPT 118
+#define mq_OPT 119
+#define qmon_OPT 120
+#define sc_OPT 121
+#define scl_OPT 122
+#define sconf_OPT 123
+#define sh_OPT 124
+#define sm_OPT 125
+#define so_OPT 126
+#define sq_OPT 127
+#define sql_OPT 128
+#define su_OPT 129
+#define sul_OPT 130
+#define srl_OPT 131
+#define jid_OPT 132
+#define clean_OPT 133
+#define gc_OPT 134 /* dummy from qconf to qmasster to get complex */
+#define acons_OPT 135 /* add consumable */
+#define mcons_OPT 136 /* modify consumable */
+#define dcons_OPT 137 /* delete consumable */
+#define scons_OPT 138
+#define sconsl_OPT 139
+#define gcons_OPT 140
+#define refr_OPT 141 /* refresh dqs_execd */
+#define shutd_OPT 142 /* shutdown dqs_execd */
+#define rc_OPT 143 /* return consumable */
+#define F_OPT 144 /* force submission of a job (qsub ) */
+#define g_OPT 145 /* geometry option */
+/* who */
+#define QALTER 1
+#define QCONF 2
+#define QDEL 3
+#define QHOLD 4
+#define QIDLE 5
+#define QMASTER 6
+#define QMOD 7
+#define QMOVE 8
+#define QMSG 9
+#define QRERUN 10
+#define QRLS 11
+#define QSELECT 12
+#define QSH 13
+#define QSIG 14
+#define QSTAT 15
+#define QSUB 16
+#define DQS_EXECD 17
+#define MAX_ANCILLARY 17
+#define ALL_OPT 19
+
+/* Note: do not include QUSAGE before ALL_OPT! */
+/* ALL_OPT is used by "dqs_options" while "qusage" */
+/* is part of "XSRC" */
+
+#define QUSAGE 20
+#define DCMD 21
+#define DSH 22
+
+/* macros used in parsing */
+#define VALID_OPT(opt,who) (dqs_options[opt][who])
+
+/****************************************************************/
+/* DQS list types */
+
+#define DQS_TYPE 0x00000001
+#define DQS_INT0 0x00000002
+#define DQS_INT1 0x00000004
+#define DQS_INT2 0x00000010
+#define DQS_INT3 0x00000020
+#define DQS_STR0 0x00000040
+#define DQS_STR1 0x00000100
+#define DQS_STR2 0x00000200
+#define DQS_STR3 0x00000400
+#define DQS_RUSAGE 0x00001000
+#define DQS_QUEUE 0x00002000
+#define DQS_CONF 0x00004000
+#define DQS_JOB 0x00010000
+#define DQS_ME 0x00020000
+#define DQS_CHAIN 0x00040000
+
+#define DQS_STDIN 0x00100000
+#define DQS_STDOUT 0x00200000
+#define DQS_STDERR 0x00400000
+#define DQS_DEBUG 0x01000000
+#define DQS_HOSTS 0x02000000
+#define DQS_SHELL 0x04000000
+#define DQS_ACCOUNT 0x10000000
+#define DQS_PAR_STDOUT 0x20000000
+#define DQS_PAR_STDERR 0x40000000
+
+/*patch from Ron Lee*/
+#define VALID(a,b) ((a)&(b))
+#define SETBIT(a,b) ((b)=(a)|(b));
+#define CLEARBIT(a,b) ((b)=~(a)&(b));
+
+
+/****************************************************************/
+/* DQS "op" types */
+
+#define EQ_OP 0x00000001
+#define GE_OP 0x00000002
+#define GT_OP 0x00000004
+#define LT_OP 0x00000008
+#define LE_OP 0x00000010
+#define NE_OP 0x00000020
+#define NOT_OP 0x00000040
+#define AND_OP 0x00000080
+#define OR_OP 0x00000100
+#define STREQ_OP 0x00000200
+#define END_OP 0x00001000
+/****************************************************************/
+/* misc */
+
+#define GRANTED 0
+#define REAPED 3
+#define SLAVE 1
+#define MIN_BACKOFF_TIME 2
+#define MAX_BACKOFF_TIME 10
+#define ABORT -1
+#define NEGATE_CLASS '^'
+/*Code via Doug Gibson*/
+#define TOKEN_SIZE 2048
+#define MAX_KEY_SIZE 100
+#define DQS_NRETRIES 3
+#define MAX_KLOG_TIME 15
+#define DQS_MAXNAMELEN MAX_STRING_SIZE /* Max str length allowed in dsh/dshd */
+#define MAX_RLIMIT 0x7fffffff
+
+/****************************************************************/
+/* DQS Format Macros */
+
+#define STATFILE_FPRINTF_FORMAT "%d:%s:%s:%d:%d:%d:%s:%s\n"
+
+#define STATFILE_FSCANF_FORMAT "\n%d:%[^:]:%[^:]:%d:%d:%d:%[^:]:%[^:\n]"
+
+#define STATFILE_FSCANF_COUNT 8
+
+#define STATFILE_FSCANF_VARS \
+ &Stats->time, \
+ Stats->qname, \
+ Stats->hostname, \
+ &Stats->load_avg, \
+ &Stats->qty, \
+ &Stats->qty_active, \
+ qcomplex_str, \
+ Stats->states
+
+#define ACTFILE_FPRINTF_FORMAT \
+"%s:%s:%ld:%s:%s:%s:%s:%s:%s:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld\n"
+
+#define ACTFILE_FSCANF_FORMAT \
+"\n%[^:]:%[^:]:%ld:%[^:]:%[^:]:%[^:]:%[^:]:%[^:]:%[^:]:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld"
+
+#define ACTFILE_FSCANF_COUNT 33
+
+#define ACTFILE_FPRINTF_VARS \
+ d->qname, \
+ d->hostname, \
+ d->master, \
+ qcomplex_str, \
+ d->group, \
+ d->owner, \
+ d->job_name, \
+ d->dqs_job_name, \
+ d->account, \
+ d->priority, \
+ d->job_number, \
+ d->submission_time, \
+ d->start_time, \
+ d->end_time, \
+ d->exit_status, \
+ d->ru_wallclock, \
+ d->ru_utime, \
+ d->ru_stime, \
+ d->ru_maxrss, \
+ d->ru_ixrss, \
+ d->ru_ismrss, \
+ d->ru_idrss, \
+ d->ru_isrss, \
+ d->ru_minflt, \
+ d->ru_majflt, \
+ d->ru_nswap, \
+ d->ru_inblock, \
+ d->ru_oublock, \
+ d->ru_msgsnd, \
+ d->ru_msgrcv, \
+ d->ru_nsignals, \
+ d->ru_nvcsw, \
+ d->ru_nivcsw
+
+#define ACTFILE_FSCANF_VARS \
+ d->qname, \
+ d->hostname, \
+ &d->master, \
+ qcomplex_str, \
+ d->group, \
+ d->owner, \
+ d->job_name, \
+ d->dqs_job_name, \
+ d->account, \
+ &d->priority, \
+ &d->job_number, \
+ &d->submission_time, \
+ &d->start_time, \
+ &d->end_time, \
+ &d->exit_status, \
+ &d->ru_wallclock, \
+ &d->ru_utime, \
+ &d->ru_stime, \
+ &d->ru_maxrss, \
+ &d->ru_ixrss, \
+ &d->ru_ismrss, \
+ &d->ru_idrss, \
+ &d->ru_isrss, \
+ &d->ru_minflt, \
+ &d->ru_majflt, \
+ &d->ru_nswap, \
+ &d->ru_inblock, \
+ &d->ru_oublock, \
+ &d->ru_msgsnd, \
+ &d->ru_msgrcv, \
+ &d->ru_nsignals, \
+ &d->ru_nvcsw, \
+ &d->ru_nivcsw
+
+/****************************************************************/
+/* DQS Development Macros */
+
+#define GETFD(a) close(creat("RMME",0755));a=open("RMME",O_RDWR)
+
+#define RESETFD(a) lseek(a,0,SEEK_SET)
+
+#if (defined(sun) || defined(solaris) || defined(SOLARIS23_UP))
+#define volatile /* comment this out if a real compiler */
+#define labs abs /* ditto - way to go SUN! */
+#endif
+
+#ifdef NeXT
+#define sigaction sigvec
+#define sa_handler sv_handler
+#define sa_mask sv_mask
+#define sa_flags sv_flags
+#define sigset_t int
+#endif
+
+#ifndef pid_t
+#define pid_t int
+#endif
+
+#ifndef gid_t
+#define gid_t int
+#endif
+
+#ifndef mode_t
+#define mode_t int
+#endif
+
+/*
+ this isn't the way to do it but since I've yet to figure out
+ how you are suppose to differentiate SunOS 4/5...
+
+ course the SunPro demo compiler I saw doesn't define "__svr4__"
+
+ funny how it only takes a hour to port to every other arc,
+ (all totalled!) then you spend days porting to SunOSes
+ */
+
+#ifdef __svr4__
+#ifdef sun
+#define sloaris
+#endif
+#endif