/*****************************************************************************
 *
 * Filename:	  genjob.h
 *
 * Date Created:  January 26, 1989
 *
 * Version:		  1.0
 *
 * Programmers:	  Tom Brough, Milt Anderson, Cliff Ross, Greg Peto
 *
 * Date Modified: 
 *
 * Modifications: 
 *
 * Comments:	  Common header file for all generic job server utilities
 *
 ****************************************************************************/

#include <stdio.h>
#include <nit.h>
#include <nitq.h>
#include <niterror.h>
#include <dos.h>
#include <io.h>
#include <fcntl.h>
#include <stdlib.h>
#include "..\shrthnd.h"

/* constants definitions */
#define	MAX_FSERVER_NAME		48
#define	MAX_JQUEUE_NAME		48				/* max length of job queue name */
#define	MAX_PATH					255			/* max full path name length */
#define	MAX_USER_NAME			48
#define	MAX_PASSWORD			128			/* max length of password */
#define	MAX_LOGICAL_DRIVES	32				/* max number of logical drives */
#define	MAX_SEARCH_VECTORS	17				/* 16 plus marker at end */
#define	NOT_SEARCH_MAPPED		0XFF			/* drive is not mapped to search */
#define	MAX_SERVER_ATTACHES	8				/* max number of servers attached */
#define	MAX_COMMAND				128			/* max length of command line to
															execute */
#define	MAX_COM_KEY	20							/* max length of command line
															keyword */
#define	MAX_ENV_ENTRIES		100			/* max number of environment entries */

#define	ENV_ENTRY_SIZE			128			/* max length of string in entry */
/* BUGS: how big should this be ? */
#define	MAX_ARG_VAR	156						/* max length of keyword string
															arg */

#define	JOB_QUEUE_NAME			"JS_QUEUE"	/* queue object name in bindiery */
/* #define	OT_JOB_QUEUE			153			/* bindery object type for job queue */

#define	TARGET_TIME_BYTES	6					/* number of bytes in job execute time */
/* drive status flags as returned by GetDriveInformation() */
#define	PERM_DIR_HANDLE	1
#define	TEMP_DIR_HANDLE	2
#define	MAPPED_TO_LOCAL	0x8

/* global variables and data types */
typedef struct
{
	BYTE	hour;
	BYTE	minute;
	BYTE	second;
} JOB_TIME;											/* time sub-field in job struct */

typedef struct
{
	BYTE	year;
	BYTE	month;
	BYTE	day;
} JOB_DATE;											/* date sub-field in job struct */

typedef struct
{
	int		com_token;							/* token constant for command */
	char		*com_key;							/* command key word, upper case */
	int		num_sig;								/* number of significant chars */
	BOOLEAN	req_string;							/* requires string parameter */
	BOOLEAN	req_int;								/* requires integer,time or date
																parameter */
} COMMAND_ARGS;									/* structure to store expected form
															of command line args */

#define	JOB_REC_V_NUMBER 	1					/* using job structure format #1 */
typedef struct
{
	BYTE	isTemp;
	BYTE	searchVector;
	BYTE	fullPath[MAX_PATH];
} MAPINFO;

typedef struct
{
	BYTE	serverName[MAX_FSERVER_NAME];
	BYTE	userName[MAX_USER_NAME];			/* full login name of user */
	BYTE	password[MAX_PASSWORD];				/* password for user */
				                              /* current attached server(s)
																info */
} SERVERINFO;

typedef	struct
{
	char			v;									/* holds 'v'*/
	char			period;							/* holds '.' */
	char			versionNumber;					/* version number of job file
															format as character '0' + # */
	char			jobCommand[MAX_COMMAND];	/* command line to execute */
} CLIENT_REC_AREA;								/* client record format for job */

/* flag values for JOBFILE flag element */
#define	DO_ACK_MESS		01						/* send acknowledge message peer to
															peer when job terminates */

typedef struct
{
	int			flags;							/* flags set by submitting program */
	BYTE			curDrive;						/* current drive attached to */
	unsigned BYTE svector[MAX_SEARCH_VECTORS];	/* search vector drive mappings
																array */
	char			envEntries[MAX_ENV_ENTRIES][ENV_ENTRY_SIZE];
	int			numEntries;						/* number entries in envEntries */
   MAPINFO     mapInfo[MAX_LOGICAL_DRIVES];
   SERVERINFO  serverInfo[MAX_SERVER_ATTACHES];
	int			numServers;					/* number of entries in serverInfor */
} JOBFILE;											/* job file format */

/* functions and data in genjob.c */
extern char		*jobQueueName;
extern int		jobQueueType;
extern BYTE		jobServerConID;
extern long		jobQueueID;

extern void		GetArg(char *,char *,BOOLEAN *,char *,long *,
						JOB_TIME *,JOB_DATE *);
extern void		FindJobServer(char [],BOOLEAN);
extern long		CheckServerForQueue(WORD);

/* macro definitions */
/*****************************************************************************/

