COMMAND.H
上传用户:xiaogehua
上传日期:2007-01-08
资源大小:1183k
文件大小:8k
源码类别:

操作系统开发

开发平台:

Asm

  1. /*
  2. ;    File              : $Workfile$
  3. ;
  4. ;    Description       :
  5. ;
  6. ;    Original Author   : DIGITAL RESEARCH
  7. ;
  8. ;    Last Edited By    : $CALDERA$
  9. ;
  10. ;-----------------------------------------------------------------------;
  11. ;    Copyright Work of Caldera, Inc. All Rights Reserved.
  12. ;      
  13. ;    THIS WORK IS A COPYRIGHT WORK AND CONTAINS CONFIDENTIAL,
  14. ;    PROPRIETARY AND TRADE SECRET INFORMATION OF CALDERA, INC.
  15. ;    ACCESS TO THIS WORK IS RESTRICTED TO (I) CALDERA, INC. EMPLOYEES
  16. ;    WHO HAVE A NEED TO KNOW TO PERFORM TASKS WITHIN THE SCOPE OF
  17. ;    THEIR ASSIGNMENTS AND (II) ENTITIES OTHER THAN CALDERA, INC. WHO
  18. ;    HAVE ACCEPTED THE CALDERA OPENDOS SOURCE LICENSE OR OTHER CALDERA LICENSE
  19. ;    AGREEMENTS. EXCEPT UNDER THE EXPRESS TERMS OF THE CALDERA LICENSE
  20. ;    AGREEMENT NO PART OF THIS WORK MAY BE USED, PRACTICED, PERFORMED,
  21. ;    COPIED, DISTRIBUTED, REVISED, MODIFIED, TRANSLATED, ABRIDGED,
  22. ;    CONDENSED, EXPANDED, COLLECTED, COMPILED, LINKED, RECAST,
  23. ;    TRANSFORMED OR ADAPTED WITHOUT THE PRIOR WRITTEN CONSENT OF
  24. ;    CALDERA, INC. ANY USE OR EXPLOITATION OF THIS WORK WITHOUT
  25. ;    AUTHORIZATION COULD SUBJECT THE PERPETRATOR TO CRIMINAL AND
  26. ;    CIVIL LIABILITY.
  27. ;-----------------------------------------------------------------------;
  28. ;
  29. ;    *** Current Edit History ***
  30. ;    *** End of Current Edit History ***
  31. ;
  32. ;    $Log$
  33. ;
  34. ;    ENDLOG
  35. */
  36. #define SWITCH_ENABLED 1
  37. #define DOSPLUS 1
  38. #define BETA 1
  39. #define PASSWORD 1
  40. /*
  41.  * DOS Plus Command Line Processor definitions
  42.  */
  43. #define PIPE_CHAR '|' /* Invoke PIPE handling       */
  44. #define MULTI_CHAR '!' /* Character allows multiple commands on     */
  45. /* one command line or in batch file line    */
  46. #define BACK_CHAR '&' /* This character forces the preceeding      */
  47. /* command to be placed into the background. */
  48. #define ESC_CHAR '~' /* Do not process the following character    */
  49. #define MAX_PATHLEN 131 /* Maximum length of a Path "x:...."      */
  50. #define MAX_FILELEN 140 /* Maximum length of full file specification */
  51. /* ie "x:....nnnnnnnn.eee;password"      */
  52. #define MAX_ENVLEN 255 /* Maximum length of environment entry       */
  53. #define DEFAULT_PROMPT "$n$g" /* Default Prompt string */
  54. #define MAX_MEMSIZE 1000 /* Maximum Memory Size    */
  55. #define MAX_LIMSIZE 8192 /* Max LIM Memory    */
  56. /*
  57.  * The following definitions are used to control console redirection,
  58.  * pipes, echo status etc.
  59.  */
  60. #define REDIR_ACTIVE 0x0001 /* Redirection Enabled */
  61. #define REDIR_BATCH 0x0002 /* Redirect Complete Batch File */
  62. #define REDIR_PIPE 0x0004 /* Redirection from PIPE command*/
  63. #define REDIR_FOR 0x0008 /* Redirection from FOR command */
  64. #define ECHO_ON  0x0001 /* Turn Echo ON unconditionally */
  65. #define ECHO_OFF 0x0000 /* Permanently Turn Echo OFF */
  66. #define XBATCH_ON  0x0001 /* Turn Echo ON unconditionally */
  67. #define XBATCH_OFF 0x0000 /* Permanently Turn Echo OFF */
  68. /*
  69.  * The following definitions are "LONGJMP" error codes used
  70.  * to specify the cause of the Internal Abort.
  71.  */
  72. #define IA_BREAK 1 /* Control-C "BREAK" termination */
  73. #define IA_STACK 2 /* Stack Overflow  */
  74. #define IA_HEAP 3 /* Heap Overflow  */
  75. #define IA_FILENAME 4 /* FileName specification Error  */
  76. /*.pa*/
  77. #define SYSDATE struct sysdate
  78. SYSDATE {
  79. WORD year; /* Current Year 1980 - 2099 */
  80. BYTE month; /* Month (1 - 12) */
  81. BYTE day; /* Day (1 - 31) */
  82. BYTE dow; /* Day of the Week (0 - 6) (Sun - Sat) */
  83. };
  84. #define SYSTIME struct systime
  85. SYSTIME {
  86. BYTE hour; /* Hour (0 - 23) */
  87. BYTE min; /* Minute (0 - 59) */
  88. BYTE sec; /* Second (0 - 59) */
  89. BYTE hsec; /* Hundredth of a second (0 - 99) */
  90. };
  91. #define DTA struct dta
  92. DTA { /* 128 Data Transfer Buffer in Search */
  93. BYTE resvd[21]; /* First - Search Next format */
  94. BYTE fattr;
  95. WORD ftime;
  96. WORD fdate;
  97. LONG fsize;
  98. BYTE fname[13];
  99. };
  100. /************************************************************************/
  101. /* */
  102. /* The following structure is initialized by the COMMAND.COM */
  103. /* kernel via  a call  to MS_S_COUNTRY. It is needed  for */
  104. /* date/time conversions and directory displays...  */
  105. /* */
  106. /************************************************************************/
  107. #define INTERNAT struct internat
  108. INTERNAT {
  109. WORD dt_fmt;  /* 0=MM/DD/YY 1=DD/MM/YY 2=YY/MM/DD */
  110. BYTE currcy[5]; /* currency symbol + nulls */
  111. BYTE d1000[2]; /* thousands delimiter + null */
  112. BYTE ddecm[2]; /* decimal delimiter + null */
  113. BYTE ddate[2]; /* date delimiter + null */
  114. BYTE dtime[2]; /* time delimiter + null */
  115. BYTE cflg; /* currcy sym bits: 01 trailing, 02 = spaced */
  116. BYTE cdec; /* number of decimal places in currency */
  117. BYTE ampm; /* 0=am/pm 1=24h clock */
  118.     BYTE    internl[14];
  119.     UWORD   code;      
  120. };
  121. /* Possible values of needparam in S_CMD. */
  122. #define PARAM_NONE 0
  123. #define PARAM_NEEDFILE 1
  124. #define PARAM_NEEDPATH 2
  125. #define PARAM_NEEDDEV 3
  126. #define PARAM_SYNTAX 4
  127. #define PARAM_IFCONTEXT 6
  128. #define S_CMD struct s_cmd
  129. S_CMD {
  130. #if defined(MWC)
  131.     BYTE *cmnd; /* ASCII command string      */
  132.     CDECL VOID (* CDECL func)(BYTE *, BYTE *);
  133.     UWORD needparm;  /* Pointer to Null command line msg */
  134.     WORD help_index;  /* help msg index */
  135. #else
  136. #if defined(__WATCOMC__)
  137.     BYTE *cmnd; /* ASCII command string      */
  138.     VOID CDECL (*func)(BYTE *, BYTE *);
  139.     UWORD needparm;  /* Pointer to Null command line msg */
  140.     WORD help_index;  /* help msg index */
  141. #else
  142.     BYTE *cmnd; /* ASCII command string      */
  143.     VOID (* CDECL func)(); /* corresponding 'C' function     */
  144.     UWORD needparm;  /* Pointer to Null command line msg */
  145.     WORD help_index;  /* help msg index */
  146. #endif
  147. #endif
  148. };
  149. #define N_CMD struct n_cmd
  150. N_CMD {
  151. #if defined(MWC)
  152.     BYTE *string; /* ASCII command string      */
  153.     CDECL VOID (* CDECL func)(BYTE *);
  154. #else
  155. #if defined(__WATCOMC__)
  156.     BYTE *string; /* ASCII command string      */
  157.     VOID CDECL (*func)(BYTE *);
  158. #else
  159.     BYTE *string; /* ASCII command string      */
  160.     VOID (* CDECL func)(); /* corresponding 'C' function     */
  161. #endif
  162. #endif
  163. };
  164. #if defined(CDOSTMP)
  165. #define INVALID_DRV(drv)    (drv < 0 || drv > 25 || (drv == *SYSDATB(SRCHDISK)))
  166. #else
  167. #define INVALID_DRV(drv)    (drv < 0 || drv > 31)
  168. #endif
  169. /* DOS file attribute bit masks */
  170. #define  ATTR_RO  0x0001 /* file is read/only */
  171. #define  ATTR_HID  0x0002 /* file is hidden */
  172. #define  ATTR_SYS 0x0004 /* file system is system  */
  173. #define  ATTR_STD (ATTR_SYS | ATTR_RO)
  174. #define  ATTR_ALL 0x0014 /* find all but labels & hidden */
  175. #define  ATTR_LBL 0x0008 /* find labels   */
  176. #define  ATTR_DIR 0x0010 /* find directories, too */
  177. #define ATTR_DEV 0x0040 /* Attribute returned for Device*/
  178. #define STDIN 0 /* Standard Console Input Handle */
  179. #define STDOUT 1 /* Standard Console Output Handle */ 
  180. #define STDERR 2 /* Standard Error Output */
  181. #define STDAUX 3 /* Auxilary Device Handle */
  182. #define STDPRN 4 /* Printer Device Handle */
  183. #define STDCON 5 /* Internal Console Handle */
  184. #define OPEN_RO  0x0000 /* Open in Read Only */
  185. #define OPEN_WO  0x0001 /* Open in Write Only */
  186. #define OPEN_RW  0x0002 /* Open in Read/Write mode */
  187. #define OPEN_DRW 0x0010 /* Deny Read/Write Access */
  188. #define OPEN_DW  0x0020 /* Deny Write Access */
  189. #define OPEN_DR  0x0030 /* Deny Read Access */
  190. #define OPEN_DN  0x0040 /* Deny None */
  191. #define OPEN_NI  0x0080 /* Prevent Child Inheriting */
  192. #define OPEN_READ (OPEN_RO | OPEN_DW) /* Open Read Only */
  193. #define OPEN_WRITE (OPEN_WO | OPEN_DRW) /* Open Write Only */
  194. #define OPEN_RDWR (OPEN_RW | OPEN_DRW) /* Open Read and Write */
  195. /*
  196.  * Set STACK to 1 to use dynamic string storage fuunction STACK
  197.  * which will reserve a any number of bytes on the stack for
  198.  * the life of the calling function. However this routine relies
  199.  * on a certain type of function exit code and cannot be used
  200.  * with all compilers
  201.  */
  202. #define STACK defined(MSC)
  203. /* macros to break 'far' pointers into segment and offset components */
  204. #define FP_OFF(__p) ((unsigned)(__p))
  205. #define FP_SEG(__p) ((unsigned)((unsigned long)(void far*)(__p) >> 16))
  206. /* make a far pointer from segment and offset */
  207. #define MK_FP(__s,__o) ((void far*)(((unsigned long)(__s)<<16)|(unsigned)(__o)))