Files
DR-DOS-OpenDOS/COMMAND/COMMAND.H
2020-11-04 23:59:28 +01:00

239 lines
8.0 KiB
C

/*
; 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)))