⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 globals.h

📁 DOS操作系统的C语言源代码 强烈推荐!!! 可以用来学习基于字符界面的操作系统的设计
💻 H
📖 第 1 页 / 共 2 页
字号:
# endif
#endif


GLOBAL BYTE *copyright
#ifdef MAIN
="(C) Copyright 1995, 1996, 1997, 1998\nPasquale J. Villani\nAll Rights Reserved\n";
#else
;
#endif

GLOBAL BYTE *os_release
#ifdef MAIN
# ifdef SHWR
="DOS-C version %d.%d Beta %d [FreeDOS Release] (Build %d).\n\
\n\
DOS-C is free software; you can redistribute it and/or modify it under the\n\
terms of the GNU General Public License as published by the Free Software\n\
Foundation; either version 2, or (at your option) any later version.\n\n\
For technical information and description of the DOS-C operating system\n\
consult \"FreeDOS Kernel\" by Pat Villani, published by Miller\n\
Freeman Publishing, Lawrence KS, USA (ISBN 0-87930-436-7).\n\
\n";
# else
="DOS-C version %d.%d.%d (Build %d)\n\n";
# endif
#else
;
#endif

/* Globally referenced variables - WARNING: ORDER IS DEFINED IN		*/
/* KERNAL.ASM AND MUST NOT BE CHANGED. DO NOT CHANGE ORDER BECAUSE THEY	*/
/* ARE DOCUMENTED AS UNDOCUMENTED (?) AND HAVE MANY  PROGRAMS AND TSR'S	*/
/* ACCESSING THEM							*/
extern  UWORD
	first_mcb;              /* Start of user memory			*/
extern  struct dpb
	FAR *DPBp;              /* First drive Parameter Block		*/
extern  sfttbl
	FAR *sfthead;           /* System File Table head		*/
extern  struct dhdr
	FAR *clock,             /* CLOCK$ device			*/
	FAR *syscon;            /* console device			*/
extern  WORD
	maxbksize;              /* Number of Drives in system		*/
extern  struct buffer
	FAR *firstbuf;          /* head of buffers linked list		*/
extern  VOID
	FAR *CDSp;              /* Current Directory Structure		*/
extern  sfttbl
	FAR *FCBp;              /* FCB table pointer			*/
extern  WORD
	nprotfcb;               /* number of protected fcbs		*/
extern  BYTE
	nblkdev,                /* number of block devices		*/
	lastdrive;              /* value of last drive			*/
extern  struct dhdr
	nul_dev;
extern  BYTE
	LocalPath[PARSE_MAX+3],	/* Room for drive spec			*/
	mem_access_mode,        /* memory allocation scheme             */
	InDOS,                  /* In DOS critical section		*/
	njoined;                /* number of joined devices		*/

extern struct dirent
	SearchDir;

extern struct
	{
		COUNT nDrive;
		BYTE szName[FNAME_SIZE+1];
		BYTE szExt[FEXT_SIZE+1];
	} FcbSearchBuffer;


extern	union			/* Path name parsing buffer		*/
	{
		BYTE _PriPathName[128];
		struct
		{
			BYTE _dname[NAMEMAX];
			BYTE _fname[FNAME_SIZE];
			BYTE _fext[FEXT_SIZE];
		} _f;
	} _PriPathBuffer;
#define PriPathName _PriPathBuffer._PriPathName
#define szDirName _PriPathBuffer._f._dname
#define szFileName _PriPathBuffer._f._fname
#define szFileExt _PriPathBuffer._f._fext
#define szPriDirName _PriPathBuffer._f._dname
#define szPriFileName _PriPathBuffer._f._fname
#define szPriFileExt _PriPathBuffer._f._fext

extern	union			/* Alternate path name parsing buffer	*/
	{
		BYTE _SecPathName[128];
		struct
		{
			BYTE _dname[NAMEMAX];
			BYTE _fname[FNAME_SIZE];
			BYTE _fext[FEXT_SIZE];
		} _f;
	} _SecPathBuffer;
#define SecPathName _SecPathBuffer._SecPathName
#define szSecDirName _SecPathBuffer._f._dname
#define szSecFileName _SecPathBuffer._f._fname
#define szSecFileExt _SecPathBuffer._f._fext

extern UWORD
	wAttr;

extern BYTE
	default_drive;          /* default drive for dos                */

extern BYTE
	TempBuffer[],		/* Temporary general purpose buffer	*/
	FAR *internal_data,	/* sda areas				*/
	FAR *swap_always,	/*  "    "				*/
	FAR *swap_indos,	/*  "    "				*/
	tsr,                    /* true if program is TSR               */
	break_flg,              /* true if break was detected           */
	break_ena,              /* break enabled flag                   */
	FAR *dta;               /* Disk transfer area (kludge)          */
extern seg
	cu_psp;                 /* current psp segment			*/
extern iregs
	FAR *user_r;		/* User registers for int 21h call	*/

extern struct dirent		/* Temporary directory entry		*/
	DirEntBuffer;

extern request			/* I/O Request packets			*/
	CharReqHdr,
	IoReqHdr,
	MediaReqHdr;

extern fcb
	FAR *lpFcb;		/* Pointer to users fcb			*/

extern sfttbl
	FAR *lpCurSft;

extern  BYTE
	verify_ena,             /* verify enabled flag                  */
	switchar,               /* switch char                          */
	return_mode,            /* Process termination rets             */
	return_code;            /*     "        "       "		*/

extern  WORD
	scr_pos,                /* screen position for bs, ht, etc      */
	BootDrive,              /* Drive we came up from                */
	NumFloppies;            /* How many floppies we have            */

extern keyboard
	kb_buf;

extern struct cds
	TempCDS;

/* start of uncontrolled variables                                      */
GLOBAL struct f_node
	*pDirFileNode;

GLOBAL iregs    error_regs;	/* registers for dump			*/

GLOBAL WORD
	dump_regs;		/* dump registers of bad call           */

GLOBAL struct dpb
	blk_devices[NDEVS];

GLOBAL struct f_node FAR
	*f_nodes;               /* pointer to the array                 */

GLOBAL struct buffer
	FAR *lastbuf,           /* tail of ditto                        */
	FAR *buffers;           /* pointer to array of track buffers    */

GLOBAL iregs
	FAR *ustackp,           /* user stack                           */
	FAR *kstackp;           /* kernel stack                         */


/* Start of configuration variables                                     */
GLOBAL struct config
{
	UBYTE   cfgBuffers;     /* number of buffers in the system      */
	UBYTE   cfgFiles;       /* number of available files            */
	UBYTE   cfgFcbs;        /* number of available FCBs             */
	UBYTE   cfgProtFcbs;    /* number of protected FCBs             */
	BYTE    cfgInit[NAMEMAX];       /* init of command.com          */
	BYTE    cfgInitTail[NAMEMAX];   /* command.com's tail           */
	BYTE    cfgLastdrive;   /* last drive                           */
	BYTE    cfgStacks;      /* number of stacks                     */
	UWORD   cfgStackSize;   /* stacks size for each stack           */
} Config
#ifdef MAIN
= {
	NUMBUFF,
	NFILES,
	NFCBS,
	0,
	"command.com",
	" /P\r\n",
	NLAST,
	NSTACKS,
	128
};
#else
;
#endif

GLOBAL
/*                                                                      */
/* Function prototypes - automatically generated                        */
/*                                                                      */
#include "proto.h"

/* Process related functions - not under automatic generation.  */
/* Typically, these are in ".asm" files.                        */
VOID
	FAR cpm_entry(VOID),
	INRPT FAR re_entry(VOID),
	INRPT FAR handle_break(VOID);
VOID
	enable(VOID),
	disable(VOID);

#ifdef PROTO
VOID    FAR CharMapSrvc(VOID);
VOID    FAR set_stack(VOID);
VOID    FAR restore_stack(VOID);
VOID    execrh(request FAR *, struct dhdr FAR *);
VOID    exit(COUNT);
VOID    INRPT FAR handle_break(VOID);
VOID    tmark(VOID);
BOOL    tdelay(LONG);
BYTE    FAR *device_end(VOID);
COUNT   kb_data(VOID);
COUNT   kb_input(VOID);
COUNT   kb_init(VOID);
VOID    setvec(UWORD, VOID (INRPT FAR *)());
BYTE FAR *getvec(UWORD);
COUNT   con(COUNT);
VOID getdirent(BYTE FAR *, struct dirent FAR *);
VOID putdirent(struct dirent FAR *, BYTE FAR *);
#else
VOID    FAR CharMapSrvc();
VOID    FAR set_stack();
VOID    FAR restore_stack();
VOID    execrh();
VOID    exit();
VOID    INRPT FAR handle_break();
VOID    tmark();
BOOL    tdelay();
BYTE    FAR *device_end();
COUNT   kb_data();
COUNT   kb_input();
COUNT   kb_init();
VOID    setvec();
BYTE FAR *getvec();
COUNT   con();
VOID getdirent();
VOID putdirent();
#endif


/*                                                              */
/* special word packing prototypes                              */
/*                                                              */
#ifdef NATIVE
# define getlong(vp, lp) (*(LONG *)(lp)=*(LONG *)(vp))
# define getword(vp, wp) (*(WORD *)(wp)=*(WORD *)(vp))
# define getbyte(vp, bp) (*(BYTE *)(bp)=*(BYTE *)(vp))
# define fgetlong(vp, lp) (*(LONG FAR *)(lp)=*(LONG FAR *)(vp))
# define fgetword(vp, wp) (*(WORD FAR *)(wp)=*(WORD FAR *)(vp))
# define fgetbyte(vp, bp) (*(BYTE FAR *)(bp)=*(BYTE FAR *)(vp))
# define fputlong(lp, vp) (*(LONG FAR *)(vp)=*(LONG FAR *)(lp))
# define fputword(wp, vp) (*(WORD FAR *)(vp)=*(WORD FAR *)(wp))
# define fputbyte(bp, vp) (*(BYTE FAR *)(vp)=*(BYTE FAR *)(bp))
#else
# ifdef PROTO
VOID getword(VOID *, WORD *);
VOID getbyte(VOID *, BYTE *);
VOID fgetlong(VOID FAR *, LONG FAR *);
VOID fgetword(VOID FAR *, WORD FAR *);
VOID fgetbyte(VOID FAR *, BYTE FAR *);
VOID fputlong(LONG FAR *, VOID FAR *);
VOID fputword(WORD FAR *, VOID FAR *);
VOID fputbyte(BYTE FAR *, VOID FAR *);
# else
VOID getword();
VOID getbyte();
VOID fgetlong();
VOID fgetword();
VOID fgetbyte();
VOID fputlong();
VOID fputword();
VOID fputbyte();
# endif
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -