GLOBALS.H
上传用户:dcs7469208
上传日期:2010-01-02
资源大小:443k
文件大小:20k
源码类别:

操作系统开发

开发平台:

DOS

  1. /****************************************************************/
  2. /*                                                              */
  3. /*                          globals.h                           */
  4. /*                            DOS-C                             */
  5. /*                                                              */
  6. /*             Global data structures and declarations          */
  7. /*                                                              */
  8. /*                   Copyright (c) 1995, 1996                   */
  9. /*                      Pasquale J. Villani                     */
  10. /*                      All Rights Reserved                     */
  11. /*                                                              */
  12. /* This file is part of DOS-C.                                  */
  13. /*                                                              */
  14. /* DOS-C is free software; you can redistribute it and/or       */
  15. /* modify it under the terms of the GNU General Public License  */
  16. /* as published by the Free Software Foundation; either version */
  17. /* 2, or (at your option) any later version.                    */
  18. /*                                                              */
  19. /* DOS-C is distributed in the hope that it will be useful, but */
  20. /* WITHOUT ANY WARRANTY; without even the implied warranty of   */
  21. /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See    */
  22. /* the GNU General Public License for more details.             */
  23. /*                                                              */
  24. /* You should have received a copy of the GNU General Public    */
  25. /* License along with DOS-C; see the file COPYING.  If not,     */
  26. /* write to the Free Software Foundation, 675 Mass Ave,         */
  27. /* Cambridge, MA 02139, USA.                                    */
  28. /****************************************************************/
  29. /* $Logfile:   C:/dos-c/src/kernel/globals.h_v  $ */
  30. #ifdef VERSION_STRINGS
  31. # ifdef MAIN
  32. static BYTE *Globals_hRcsId = "$Header:   C:/dos-c/src/kernel/globals.h_v   1.15   07 Feb 1998 20:38:00   patv  $";
  33. # endif
  34. #endif
  35. /* $Log:   C:/dos-c/src/kernel/globals.h_v  $
  36.    
  37.       Rev 1.15   07 Feb 1998 20:38:00   patv
  38.    Modified stack fram to match DOS standard
  39.    
  40.       Rev 1.14   02 Feb 1998 22:33:46   patv
  41.    Fixed size of default_drive.  Caused failures when break_ena was not zero.
  42.    
  43.       Rev 1.13   22 Jan 1998  4:09:24   patv
  44.    Fixed pointer problems affecting SDA
  45.    
  46.       Rev 1.12   04 Jan 1998 23:16:22   patv
  47.    Changed Log for strip utility
  48.    
  49.       Rev 1.11   03 Jan 1998  8:36:50   patv
  50.    Converted data area to SDA format
  51.    
  52.       Rev 1.10   06 Feb 1997 21:57:04   patv
  53.    Changed version format string
  54.    
  55.       Rev 1.9   06 Feb 1997 21:35:08   patv
  56.    Modified to support new version format
  57.    
  58.       Rev 1.8   22 Jan 1997 13:17:14   patv
  59.    Changed to support version.h and pre-0.92 Svante Frey bug fixes.
  60.    
  61.       Rev 1.6   16 Jan 1997 12:47:00   patv
  62.    pre-Release 0.92 feature additions
  63.    
  64.       Rev 1.5   13 Sep 1996 19:26:32   patv
  65.    Fixed boot for hard drive
  66.    
  67.       Rev 1.4   29 Aug 1996 13:07:22   patv
  68.    Bug fixes for v0.91b
  69.    
  70.       Rev 1.3   29 May 1996 21:03:34   patv
  71.    bug fixes for v0.91a
  72.    
  73.       Rev 1.2   19 Feb 1996  3:23:04   patv
  74.    Added NLS, int2f and config.sys processing
  75.    
  76.       Rev 1.1   01 Sep 1995 17:54:16   patv
  77.    First GPL release.
  78.    
  79.       Rev 1.0   02 Jul 1995  8:31:00   patv
  80.    Initial revision.
  81.  */   
  82. /* $EndLog$ */
  83. #include "../../hdr/device.h"
  84. #include "../../hdr/mcb.h"
  85. #include "../../hdr/pcb.h"
  86. #include "../../hdr/date.h"
  87. #include "../../hdr/time.h"
  88. #include "../../hdr/fat.h"
  89. #include "../../hdr/fcb.h"
  90. #include "../../hdr/tail.h"
  91. #include "../../hdr/process.h"
  92. #include "../../hdr/dcb.h"
  93. #include "../../hdr/sft.h"
  94. #include "../../hdr/cds.h"
  95. #include "../../hdr/exe.h"
  96. #include "../../hdr/fnode.h"
  97. #include "../../hdr/dirmatch.h"
  98. #include "../../hdr/file.h"
  99. #include "../../hdr/clock.h"
  100. #include "../../hdr/kbd.h"
  101. #include "../../hdr/error.h"
  102. #include "../../hdr/version.h"
  103. /*                                                                      */
  104. /* Convience switch for maintaining variables in a single location      */
  105. /*                                                                      */
  106. #ifdef MAIN
  107. #define GLOBAL
  108. #else
  109. #define GLOBAL extern
  110. #endif
  111. /*                                                                      */
  112. /* Convience definitions of TRUE and FALSE                              */
  113. /*                                                                      */
  114. #ifndef TRUE
  115. #define TRUE (1)
  116. #endif
  117. #ifndef FALSE
  118. #define FALSE (0)
  119. #endif
  120. /*                                                                      */
  121. /* Constants and macros                                                 */
  122. /*                                                                      */
  123. /* Defaults and limits - System wide                                    */
  124. #define PARSE_MAX 67 /* maximum # of bytes in path */
  125. #define NFILES          16              /* number of files in table     */
  126. #define NFCBS           16              /* number of fcbs               */
  127. #define NDEVS           8               /* number of supported devices  */
  128. #define NSTACKS         8               /* number of stacks             */
  129. #define NLAST           2               /* last drive                   */
  130. #define NAMEMAX         PARSE_MAX       /* Maximum path for CDS         */
  131. #define NUMBUFF         6               /* Number of track buffers      */
  132. /* -- must be at least 3        */
  133. /* 0 = CON, standard input, can be redirected                           */
  134. /* 1 = CON, standard output, can be redirected                          */
  135. /* 2 = CON, standard error                                              */
  136. /* 3 = AUX, auxiliary                                                   */
  137. /* 4 = PRN, list device                                                 */
  138. /* 5 = 1st user file ...                                                */
  139. #define STDIN           0
  140. #define STDOUT          1
  141. #define STDERR          2
  142. #define STDAUX          3
  143. #define STDPRN          4
  144. /* error results returned after asking user                             */
  145. #define ABORT           -1
  146. #define RETRY           1
  147. #define FAIL            0
  148. #define CONTINUE        2
  149. /* internal error from failure or aborted operation                     */
  150. #define ERROR           -1
  151. #define OK              0
  152. /* internal transfer direction flags                                    */
  153. #define XFR_READ        1
  154. #define XFR_WRITE       2
  155. #define RDONLY          0
  156. #define WRONLY          1
  157. #define RDWR            2
  158. /* special ascii code equates                                           */
  159. #define SPCL            0x00
  160. #define CTL_C           0x03
  161. #define CTL_F           0x06
  162. #define BELL            0x07
  163. #define BS              0x08
  164. #define HT              0x09
  165. #define LF              0x0a
  166. #define CR              0x0d
  167. #define CTL_Q           0x11
  168. #define CTL_S           0x13
  169. #define CTL_Z           0x1a
  170. #define ESC             0x1b
  171. #define CTL_BS          0x7f
  172. #define F3              0x3d
  173. #define LEFT            0x4b
  174. #define RIGHT           0x4d
  175. /* Blockio constants                                                    */
  176. #define DSKWRITE        1               /* dskxfr function parameters   */
  177. #define DSKREAD         2
  178. /* FAT cluster special flags                                            */
  179. #define FREE                    0x000
  180. #define LONG_LAST_CLUSTER       0xFFFF
  181. #define LONG_MASK               0xFFF8
  182. #define LONG_BAD                0xFFF0
  183. #define LAST_CLUSTER            0x0FFF
  184. #define MASK                    0xFF8
  185. #define BAD                     0xFF0
  186. /* Keyboard buffer maximum size                                         */
  187. #ifdef LINESIZE
  188. # undef LINESIZE
  189. #endif
  190. #define LINESIZE 256
  191. /*                                                                      */
  192. /* Data structures and unions                                           */
  193. /*                                                                      */
  194. /* Sector buffer structure                                              */
  195. #define BUFFERSIZE 512
  196. struct  buffer
  197. {
  198. struct  buffer
  199. FAR *b_next;            /* form linked list for LRU     */
  200. BYTE    b_unit;                 /* disk for this buffer         */
  201. BYTE    b_flag;                 /* buffer flags                 */
  202. LONG    b_blkno;                /* block for this buffer        */
  203. BYTE    b_copies;               /* number of copies to write    */
  204. BYTE    b_offset;               /* span between copies          */
  205. BYTE    b_buffer[BUFFERSIZE];   /* 512 byte sectors for now     */
  206. };
  207. #define BFR_DIRTY       0x40            /* buffer contains valid data   */
  208. #define BFR_VALID       0x20            /* buffer modified              */
  209. #define BFR_DATA        0x08            /* buffer is from data area     */
  210. #define BFR_DIR         0x04            /* buffer is from dir area      */
  211. #define BFR_FAT         0x02            /* buffer is from fat area      */
  212. #define BFR_BOOT        0x01            /* buffer is boot disk          */
  213. /* NLS character table type                                             */
  214. typedef BYTE *UPMAP;
  215. /*                                                                      */
  216. /* External Assembly variables                                          */
  217. /*                                                                      */
  218. extern struct dhdr
  219. FAR clk_dev,            /* Clock device driver                  */
  220. FAR con_dev,            /* Console device driver                */
  221. FAR blk_dev;            /* Block device (Disk) driver           */
  222. extern UWORD
  223. ram_top,                /* How much ram in Kbytes               */
  224. #ifdef I86
  225. api_sp,                 /* api stacks - for context             */
  226. #endif
  227. api_ss,                 /* switching                            */
  228. usr_sp,                 /* user stack                           */
  229. usr_ss;
  230. extern COUNT *
  231. #ifdef MC68K
  232. api_sp,                 /* api stacks - for context             */
  233. #endif
  234. error_tos,              /* error stack                          */
  235. disk_api_tos,           /* API handler stack - disk fns         */
  236. char_api_tos;           /* API handler stack - char fns         */
  237. extern BYTE
  238. FAR last;               /* first available byte of ram          */
  239. extern struct ClockRecord
  240. ClkRecord;
  241. /*                                                                      */
  242. /* Global variables                                                     */
  243. /*                                                                      */
  244. GLOBAL
  245. seg master_env;         /* Master environment segment           */
  246. GLOBAL BYTE
  247. os_major                /* major version number                 */
  248. #ifdef MAIN
  249. =  MAJOR_RELEASE,
  250. #else
  251. ,
  252. #endif
  253. os_minor                /* minor version number */
  254. #ifdef MAIN
  255. =  MINOR_RELEASE,
  256. #else
  257. ,
  258. #endif
  259. rev_number              /* minor version number */
  260. #ifdef MAIN
  261. =  REV_NUMBER,
  262. #else
  263. ,
  264. #endif
  265. version_flags;          /* minor version number */
  266. #ifdef DEBUG
  267. GLOBAL WORD bDumpRegs
  268. # ifdef MAIN
  269. = FALSE;
  270. # else
  271. ;
  272. # endif
  273. GLOBAL WORD bDumpRdWrParms
  274. # ifdef MAIN
  275. = FALSE;
  276. # else
  277. ;
  278. # endif
  279. #endif
  280. GLOBAL BYTE *copyright
  281. #ifdef MAIN
  282. ="(C) Copyright 1995, 1996, 1997, 1998nPasquale J. VillaninAll Rights Reservedn";
  283. #else
  284. ;
  285. #endif
  286. GLOBAL BYTE *os_release
  287. #ifdef MAIN
  288. # ifdef SHWR
  289. ="DOS-C version %d.%d Beta %d [FreeDOS Release] (Build %d).n
  290. n
  291. DOS-C is free software; you can redistribute it and/or modify it under then
  292. terms of the GNU General Public License as published by the Free Softwaren
  293. Foundation; either version 2, or (at your option) any later version.nn
  294. For technical information and description of the DOS-C operating systemn
  295. consult "FreeDOS Kernel" by Pat Villani, published by Millern
  296. Freeman Publishing, Lawrence KS, USA (ISBN 0-87930-436-7).n
  297. n";
  298. # else
  299. ="DOS-C version %d.%d.%d (Build %d)nn";
  300. # endif
  301. #else
  302. ;
  303. #endif
  304. /* Globally referenced variables - WARNING: ORDER IS DEFINED IN */
  305. /* KERNAL.ASM AND MUST NOT BE CHANGED. DO NOT CHANGE ORDER BECAUSE THEY */
  306. /* ARE DOCUMENTED AS UNDOCUMENTED (?) AND HAVE MANY  PROGRAMS AND TSR'S */
  307. /* ACCESSING THEM */
  308. extern  UWORD
  309. first_mcb;              /* Start of user memory */
  310. extern  struct dpb
  311. FAR *DPBp;              /* First drive Parameter Block */
  312. extern  sfttbl
  313. FAR *sfthead;           /* System File Table head */
  314. extern  struct dhdr
  315. FAR *clock,             /* CLOCK$ device */
  316. FAR *syscon;            /* console device */
  317. extern  WORD
  318. maxbksize;              /* Number of Drives in system */
  319. extern  struct buffer
  320. FAR *firstbuf;          /* head of buffers linked list */
  321. extern  VOID
  322. FAR *CDSp;              /* Current Directory Structure */
  323. extern  sfttbl
  324. FAR *FCBp;              /* FCB table pointer */
  325. extern  WORD
  326. nprotfcb;               /* number of protected fcbs */
  327. extern  BYTE
  328. nblkdev,                /* number of block devices */
  329. lastdrive;              /* value of last drive */
  330. extern  struct dhdr
  331. nul_dev;
  332. extern  BYTE
  333. LocalPath[PARSE_MAX+3], /* Room for drive spec */
  334. mem_access_mode,        /* memory allocation scheme             */
  335. InDOS,                  /* In DOS critical section */
  336. njoined;                /* number of joined devices */
  337. extern struct dirent
  338. SearchDir;
  339. extern struct
  340. {
  341. COUNT nDrive;
  342. BYTE szName[FNAME_SIZE+1];
  343. BYTE szExt[FEXT_SIZE+1];
  344. } FcbSearchBuffer;
  345. extern union /* Path name parsing buffer */
  346. {
  347. BYTE _PriPathName[128];
  348. struct
  349. {
  350. BYTE _dname[NAMEMAX];
  351. BYTE _fname[FNAME_SIZE];
  352. BYTE _fext[FEXT_SIZE];
  353. } _f;
  354. } _PriPathBuffer;
  355. #define PriPathName _PriPathBuffer._PriPathName
  356. #define szDirName _PriPathBuffer._f._dname
  357. #define szFileName _PriPathBuffer._f._fname
  358. #define szFileExt _PriPathBuffer._f._fext
  359. #define szPriDirName _PriPathBuffer._f._dname
  360. #define szPriFileName _PriPathBuffer._f._fname
  361. #define szPriFileExt _PriPathBuffer._f._fext
  362. extern union /* Alternate path name parsing buffer */
  363. {
  364. BYTE _SecPathName[128];
  365. struct
  366. {
  367. BYTE _dname[NAMEMAX];
  368. BYTE _fname[FNAME_SIZE];
  369. BYTE _fext[FEXT_SIZE];
  370. } _f;
  371. } _SecPathBuffer;
  372. #define SecPathName _SecPathBuffer._SecPathName
  373. #define szSecDirName _SecPathBuffer._f._dname
  374. #define szSecFileName _SecPathBuffer._f._fname
  375. #define szSecFileExt _SecPathBuffer._f._fext
  376. extern UWORD
  377. wAttr;
  378. extern BYTE
  379. default_drive;          /* default drive for dos                */
  380. extern BYTE
  381. TempBuffer[], /* Temporary general purpose buffer */
  382. FAR *internal_data, /* sda areas */
  383. FAR *swap_always, /*  "    " */
  384. FAR *swap_indos, /*  "    " */
  385. tsr,                    /* true if program is TSR               */
  386. break_flg,              /* true if break was detected           */
  387. break_ena,              /* break enabled flag                   */
  388. FAR *dta;               /* Disk transfer area (kludge)          */
  389. extern seg
  390. cu_psp;                 /* current psp segment */
  391. extern iregs
  392. FAR *user_r; /* User registers for int 21h call */
  393. extern struct dirent /* Temporary directory entry */
  394. DirEntBuffer;
  395. extern request /* I/O Request packets */
  396. CharReqHdr,
  397. IoReqHdr,
  398. MediaReqHdr;
  399. extern fcb
  400. FAR *lpFcb; /* Pointer to users fcb */
  401. extern sfttbl
  402. FAR *lpCurSft;
  403. extern  BYTE
  404. verify_ena,             /* verify enabled flag                  */
  405. switchar,               /* switch char                          */
  406. return_mode,            /* Process termination rets             */
  407. return_code;            /*     "        "       " */
  408. extern  WORD
  409. scr_pos,                /* screen position for bs, ht, etc      */
  410. BootDrive,              /* Drive we came up from                */
  411. NumFloppies;            /* How many floppies we have            */
  412. extern keyboard
  413. kb_buf;
  414. extern struct cds
  415. TempCDS;
  416. /* start of uncontrolled variables                                      */
  417. GLOBAL struct f_node
  418. *pDirFileNode;
  419. GLOBAL iregs    error_regs; /* registers for dump */
  420. GLOBAL WORD
  421. dump_regs; /* dump registers of bad call           */
  422. GLOBAL struct dpb
  423. blk_devices[NDEVS];
  424. GLOBAL struct f_node FAR
  425. *f_nodes;               /* pointer to the array                 */
  426. GLOBAL struct buffer
  427. FAR *lastbuf,           /* tail of ditto                        */
  428. FAR *buffers;           /* pointer to array of track buffers    */
  429. GLOBAL iregs
  430. FAR *ustackp,           /* user stack                           */
  431. FAR *kstackp;           /* kernel stack                         */
  432. /* Start of configuration variables                                     */
  433. GLOBAL struct config
  434. {
  435. UBYTE   cfgBuffers;     /* number of buffers in the system      */
  436. UBYTE   cfgFiles;       /* number of available files            */
  437. UBYTE   cfgFcbs;        /* number of available FCBs             */
  438. UBYTE   cfgProtFcbs;    /* number of protected FCBs             */
  439. BYTE    cfgInit[NAMEMAX];       /* init of command.com          */
  440. BYTE    cfgInitTail[NAMEMAX];   /* command.com's tail           */
  441. BYTE    cfgLastdrive;   /* last drive                           */
  442. BYTE    cfgStacks;      /* number of stacks                     */
  443. UWORD   cfgStackSize;   /* stacks size for each stack           */
  444. } Config
  445. #ifdef MAIN
  446. = {
  447. NUMBUFF,
  448. NFILES,
  449. NFCBS,
  450. 0,
  451. "command.com",
  452. " /Prn",
  453. NLAST,
  454. NSTACKS,
  455. 128
  456. };
  457. #else
  458. ;
  459. #endif
  460. GLOBAL
  461. /*                                                                      */
  462. /* Function prototypes - automatically generated                        */
  463. /*                                                                      */
  464. #include "proto.h"
  465. /* Process related functions - not under automatic generation.  */
  466. /* Typically, these are in ".asm" files.                        */
  467. VOID
  468. FAR cpm_entry(VOID),
  469. INRPT FAR re_entry(VOID),
  470. INRPT FAR handle_break(VOID);
  471. VOID
  472. enable(VOID),
  473. disable(VOID);
  474. #ifdef PROTO
  475. VOID    FAR CharMapSrvc(VOID);
  476. VOID    FAR set_stack(VOID);
  477. VOID    FAR restore_stack(VOID);
  478. VOID    execrh(request FAR *, struct dhdr FAR *);
  479. VOID    exit(COUNT);
  480. VOID    INRPT FAR handle_break(VOID);
  481. VOID    tmark(VOID);
  482. BOOL    tdelay(LONG);
  483. BYTE    FAR *device_end(VOID);
  484. COUNT   kb_data(VOID);
  485. COUNT   kb_input(VOID);
  486. COUNT   kb_init(VOID);
  487. VOID    setvec(UWORD, VOID (INRPT FAR *)());
  488. BYTE FAR *getvec(UWORD);
  489. COUNT   con(COUNT);
  490. VOID getdirent(BYTE FAR *, struct dirent FAR *);
  491. VOID putdirent(struct dirent FAR *, BYTE FAR *);
  492. #else
  493. VOID    FAR CharMapSrvc();
  494. VOID    FAR set_stack();
  495. VOID    FAR restore_stack();
  496. VOID    execrh();
  497. VOID    exit();
  498. VOID    INRPT FAR handle_break();
  499. VOID    tmark();
  500. BOOL    tdelay();
  501. BYTE    FAR *device_end();
  502. COUNT   kb_data();
  503. COUNT   kb_input();
  504. COUNT   kb_init();
  505. VOID    setvec();
  506. BYTE FAR *getvec();
  507. COUNT   con();
  508. VOID getdirent();
  509. VOID putdirent();
  510. #endif
  511. /*                                                              */
  512. /* special word packing prototypes                              */
  513. /*                                                              */
  514. #ifdef NATIVE
  515. # define getlong(vp, lp) (*(LONG *)(lp)=*(LONG *)(vp))
  516. # define getword(vp, wp) (*(WORD *)(wp)=*(WORD *)(vp))
  517. # define getbyte(vp, bp) (*(BYTE *)(bp)=*(BYTE *)(vp))
  518. # define fgetlong(vp, lp) (*(LONG FAR *)(lp)=*(LONG FAR *)(vp))
  519. # define fgetword(vp, wp) (*(WORD FAR *)(wp)=*(WORD FAR *)(vp))
  520. # define fgetbyte(vp, bp) (*(BYTE FAR *)(bp)=*(BYTE FAR *)(vp))
  521. # define fputlong(lp, vp) (*(LONG FAR *)(vp)=*(LONG FAR *)(lp))
  522. # define fputword(wp, vp) (*(WORD FAR *)(vp)=*(WORD FAR *)(wp))
  523. # define fputbyte(bp, vp) (*(BYTE FAR *)(vp)=*(BYTE FAR *)(bp))
  524. #else
  525. # ifdef PROTO
  526. VOID getword(VOID *, WORD *);
  527. VOID getbyte(VOID *, BYTE *);
  528. VOID fgetlong(VOID FAR *, LONG FAR *);
  529. VOID fgetword(VOID FAR *, WORD FAR *);
  530. VOID fgetbyte(VOID FAR *, BYTE FAR *);
  531. VOID fputlong(LONG FAR *, VOID FAR *);
  532. VOID fputword(WORD FAR *, VOID FAR *);
  533. VOID fputbyte(BYTE FAR *, VOID FAR *);
  534. # else
  535. VOID getword();
  536. VOID getbyte();
  537. VOID fgetlong();
  538. VOID fgetword();
  539. VOID fgetbyte();
  540. VOID fputlong();
  541. VOID fputword();
  542. VOID fputbyte();
  543. # endif
  544. #endif