www.pudn.com > drdossrc.zip > COMMAND.H


/* 
;    File              : $Workfile$ 
; 
;    Description       : 
; 
;    Original Author   : DIGITAL RESEARCH 
; 
;    Last Edited By    : $CALDERA$ 
; 
;-----------------------------------------------------------------------; 
;    Copyright Work of Caldera, Inc. All Rights Reserved. 
;       
;    THIS WORK IS A COPYRIGHT WORK AND CONTAINS CONFIDENTIAL, 
;    PROPRIETARY AND TRADE SECRET INFORMATION OF CALDERA, INC. 
;    ACCESS TO THIS WORK IS RESTRICTED TO (I) CALDERA, INC. EMPLOYEES 
;    WHO HAVE A NEED TO KNOW TO PERFORM TASKS WITHIN THE SCOPE OF 
;    THEIR ASSIGNMENTS AND (II) ENTITIES OTHER THAN CALDERA, INC. WHO 
;    HAVE ACCEPTED THE CALDERA OPENDOS SOURCE LICENSE OR OTHER CALDERA LICENSE 
;    AGREEMENTS. EXCEPT UNDER THE EXPRESS TERMS OF THE CALDERA LICENSE 
;    AGREEMENT NO PART OF THIS WORK MAY BE USED, PRACTICED, PERFORMED, 
;    COPIED, DISTRIBUTED, REVISED, MODIFIED, TRANSLATED, ABRIDGED, 
;    CONDENSED, EXPANDED, COLLECTED, COMPILED, LINKED, RECAST, 
;    TRANSFORMED OR ADAPTED WITHOUT THE PRIOR WRITTEN CONSENT OF 
;    CALDERA, INC. ANY USE OR EXPLOITATION OF THIS WORK WITHOUT 
;    AUTHORIZATION COULD SUBJECT THE PERPETRATOR TO CRIMINAL AND 
;    CIVIL LIABILITY. 
;-----------------------------------------------------------------------; 
; 
;    *** Current Edit History *** 
;    *** End of Current Edit History *** 
; 
;    $Log$ 
; 
;    ENDLOG 
*/ 
 
#define	SWITCH_ENABLED 1 
#define	DOSPLUS 1 
#define BETA 1 
#define PASSWORD 1 
 
/* 
 *	DOS Plus Command Line Processor definitions 
 */ 
#define PIPE_CHAR	'|'	/* Invoke PIPE handling 		     */ 
#define MULTI_CHAR	'!'	/* Character allows multiple commands on     */ 
				/* one command line or in batch file line    */ 
#define BACK_CHAR	'&'	/* This character forces the preceeding      */ 
				/* command to be placed into the background. */ 
#define ESC_CHAR	'~'	/* Do not process the following character    */ 
 
#define MAX_PATHLEN	131	/* Maximum length of a Path "x:\...."	     */ 
#define MAX_FILELEN	140	/* Maximum length of full file specification */ 
				/* ie "x:\....\nnnnnnnn.eee;password"	     */ 
#define	MAX_ENVLEN	255	/* Maximum length of environment entry       */ 
 
#define DEFAULT_PROMPT	"$n$g"		/* Default Prompt string */ 
 
#define MAX_MEMSIZE	1000		/* Maximum Memory Size	   */ 
#define MAX_LIMSIZE	8192		/* Max LIM Memory	   */ 
 
/* 
 *	The following definitions are used to control console redirection, 
 *	pipes, echo status etc. 
 */ 
#define REDIR_ACTIVE	0x0001		/* Redirection Enabled		*/ 
#define REDIR_BATCH	0x0002		/* Redirect Complete Batch File */ 
#define REDIR_PIPE	0x0004		/* Redirection from PIPE command*/ 
#define	REDIR_FOR	0x0008		/* Redirection from FOR command */ 
 
#define ECHO_ON 	0x0001		/* Turn Echo ON unconditionally */ 
#define ECHO_OFF	0x0000		/* Permanently Turn Echo OFF	*/ 
 
#define XBATCH_ON 	0x0001		/* Turn Echo ON unconditionally */ 
#define XBATCH_OFF	0x0000		/* Permanently Turn Echo OFF	*/ 
 
 
/* 
 *	The following definitions are "LONGJMP" error codes used 
 *	to specify the cause of the Internal Abort. 
 */ 
#define	IA_BREAK	1		/* Control-C "BREAK" termination */ 
#define	IA_STACK	2		/* Stack Overflow		 */ 
#define	IA_HEAP		3		/* Heap Overflow		 */ 
#define	IA_FILENAME	4		/* FileName specification Error	 */ 
 
/*.pa*/ 
#define SYSDATE struct sysdate 
SYSDATE { 
	WORD	year;		/* Current Year 1980 - 2099 */ 
	BYTE	month;		/* Month (1 - 12) */ 
	BYTE	day;		/* Day (1 - 31) */ 
	BYTE	dow;		/* Day of the Week (0 - 6) (Sun - Sat) */ 
	}; 
 
#define SYSTIME struct systime 
SYSTIME { 
	BYTE	hour;		/* Hour (0 - 23) */ 
	BYTE	min;		/* Minute (0 - 59) */ 
	BYTE	sec;		/* Second (0 - 59) */ 
	BYTE	hsec;		/* Hundredth of a second (0 - 99) */ 
	}; 
 
#define DTA struct dta 
DTA {				/* 128 Data Transfer Buffer in Search	*/ 
	BYTE	resvd[21];	/* First - Search Next format		*/ 
	BYTE	fattr; 
	WORD	ftime; 
	WORD	fdate; 
	LONG	fsize; 
	BYTE	fname[13]; 
}; 
 
/************************************************************************/ 
/*									*/ 
/*	The following structure is initialized by the COMMAND.COM	*/ 
/*	kernel	via  a call  to MS_S_COUNTRY.	It is needed  for	*/ 
/*	date/time conversions and directory displays... 		*/ 
/*									*/ 
/************************************************************************/ 
#define INTERNAT struct internat 
INTERNAT { 
	WORD	dt_fmt; 	/* 0=MM/DD/YY 1=DD/MM/YY 2=YY/MM/DD	*/ 
	BYTE	currcy[5];	/* currency symbol + nulls		*/ 
	BYTE	d1000[2];	/* thousands delimiter + null		*/ 
	BYTE	ddecm[2];	/* decimal delimiter + null		*/ 
	BYTE	ddate[2];	/* date delimiter + null		*/ 
	BYTE	dtime[2];	/* time delimiter + null		*/ 
	BYTE	cflg;		/* currcy sym bits: 01 trailing, 02 = spaced */ 
	BYTE	cdec;		/* number of decimal places in currency */ 
	BYTE	ampm;		/* 0=am/pm 1=24h clock			*/ 
    BYTE    internl[14]; 
    UWORD   code;       
}; 
 
 
/* Possible values of needparam in S_CMD. */ 
#define	PARAM_NONE	0 
#define	PARAM_NEEDFILE	1 
#define	PARAM_NEEDPATH	2 
#define	PARAM_NEEDDEV	3 
#define	PARAM_SYNTAX	4 
#define PARAM_IFCONTEXT 6 
 
#define S_CMD struct s_cmd 
S_CMD { 
#if defined(MWC) 
    BYTE *cmnd;			/* ASCII command string 	    */ 
    CDECL VOID (* CDECL func)(BYTE *, BYTE *); 
    UWORD needparm; 		/* Pointer to Null command line msg */ 
    WORD help_index; 		/* help msg index */ 
#else 
#if defined(__WATCOMC__) 
    BYTE *cmnd;			/* ASCII command string 	    */ 
    VOID CDECL (*func)(BYTE *, BYTE *); 
    UWORD needparm; 		/* Pointer to Null command line msg */ 
    WORD help_index; 		/* help msg index */ 
#else 
    BYTE *cmnd;			/* ASCII command string 	    */ 
    VOID (* CDECL func)();	/* corresponding 'C' function	    */ 
    UWORD needparm; 		/* Pointer to Null command line msg */ 
    WORD help_index; 		/* help msg index */ 
#endif 
#endif 
}; 
 
#define N_CMD struct n_cmd 
N_CMD { 
#if defined(MWC) 
    BYTE *string;			/* ASCII command string 	    */ 
    CDECL VOID (* CDECL func)(BYTE *); 
#else 
#if defined(__WATCOMC__) 
    BYTE *string;			/* ASCII command string 	    */ 
    VOID CDECL (*func)(BYTE *); 
#else 
    BYTE *string;			/* ASCII command string 	    */ 
    VOID (* CDECL func)();	/* corresponding 'C' function	    */ 
#endif 
#endif 
}; 
 
#if defined(CDOSTMP) 
#define	INVALID_DRV(drv)    (drv < 0 || drv > 25 || (drv == *SYSDATB(SRCHDISK))) 
#else 
#define	INVALID_DRV(drv)    (drv < 0 || drv > 31) 
#endif 
 
/*	DOS file attribute bit masks		*/ 
 
#define 	ATTR_RO 	0x0001	/* file is read/only		*/ 
#define 	ATTR_HID 	0x0002	/* file is hidden		*/ 
#define 	ATTR_SYS	0x0004	/* file system is system 	*/ 
#define 	ATTR_STD	(ATTR_SYS | ATTR_RO) 
#define 	ATTR_ALL	0x0014	/* find all but labels & hidden */ 
#define 	ATTR_LBL	0x0008	/* find labels		 	*/ 
#define 	ATTR_DIR	0x0010	/* find directories, too	*/ 
#define		ATTR_DEV	0x0040	/* Attribute returned for Device*/ 
 
#define STDIN		0	/* Standard Console Input Handle	*/ 
#define STDOUT		1	/* Standard Console Output Handle	*/  
#define STDERR		2	/* Standard Error Output		*/ 
#define STDAUX		3	/* Auxilary Device Handle		*/ 
#define STDPRN		4	/* Printer Device Handle		*/ 
#define STDCON		5	/* Internal Console Handle		*/ 
 
#define OPEN_RO 	0x0000		/* Open in Read Only		*/ 
#define OPEN_WO 	0x0001		/* Open in Write Only		*/ 
#define OPEN_RW 	0x0002		/* Open in Read/Write mode	*/ 
 
#define OPEN_DRW	0x0010		/* Deny Read/Write Access	*/ 
#define OPEN_DW 	0x0020		/* Deny Write Access		*/ 
#define OPEN_DR 	0x0030		/* Deny Read Access		*/ 
#define OPEN_DN 	0x0040		/* Deny None			*/ 
 
#define OPEN_NI 	0x0080		/* Prevent Child Inheriting	*/ 
 
#define OPEN_READ	(OPEN_RO | OPEN_DW)	/* Open Read Only	*/ 
#define OPEN_WRITE	(OPEN_WO | OPEN_DRW)	/* Open Write Only	*/ 
#define	OPEN_RDWR	(OPEN_RW | OPEN_DRW)	/* Open Read and Write	*/ 
 
/* 
 *	Set STACK to 1 to use dynamic string storage fuunction STACK 
 *	which will reserve a any number of bytes on the stack for 
 *	the life of the calling function. However this routine relies 
 *	on a certain type of function exit code and cannot be used 
 *	with all compilers 
 */ 
#define	STACK		defined(MSC) 
 
/* macros to break 'far' pointers into segment and offset components */ 
 
#define FP_OFF(__p) ((unsigned)(__p)) 
#define FP_SEG(__p) ((unsigned)((unsigned long)(void far*)(__p) >> 16)) 
 
/*	make a far pointer from segment and offset */ 
#define MK_FP(__s,__o) ((void far*)(((unsigned long)(__s)<<16)|(unsigned)(__o)))