Metropoli BBS
VIEWER: globals.h MODE: TEXT (ASCII)
/****************************************************************/
/*								*/
/*			    globals.h				*/
/*								*/
/*	       Global data structures and declarations		*/
/*								*/
/*			 November 9, 1991			*/
/*								*/
/*			Copyright (c) 1995			*/
/*			Pasquale J. Villani			*/
/*			All Rights Reserved			*/
/*								*/
/* This file is part of DOS-C.					*/
/*								*/
/* DOS-C is free software; you can redistribute it and/or	*/
/* modify it under the terms of the GNU General Public License	*/
/* as published by the Free Software Foundation; either version	*/
/* 2, or (at your option) any later version.			*/
/*								*/
/* DOS-C is distributed in the hope that it will be useful, but	*/
/* WITHOUT ANY WARRANTY; without even the implied warranty of	*/
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See	*/
/* the GNU General Public License for more details.		*/
/*								*/
/* You should have received a copy of the GNU General Public	*/
/* License along with DOS-C; see the file COPYING.  If not,	*/
/* write to the Free Software Foundation, 675 Mass Ave,		*/
/* Cambridge, MA 02139, USA.					*/
/****************************************************************/

/* $Logfile:   C:/dos-c/src/ipl/globals.h_v  $ */
#ifdef MAIN
# ifndef IPL
static BYTE *Globals_hRcsId = "$Header:   C:/dos-c/src/ipl/globals.h_v   1.2   01 Sep 1995 17:44:38   patv  $";
# endif
#endif

/*
 * $Log:   C:/dos-c/src/ipl/globals.h_v  $
 *	
 *	   Rev 1.2   01 Sep 1995 17:44:38   patv
 *	First GPL release.
 *	
 *	   Rev 1.1   30 Jul 1995 20:48:10   patv
 *	Eliminated version strings in ipl
 *	
 *	   Rev 1.0   02 Jul 1995 10:12:18   patv
 *	Initial revision.
 */

#include "../../hdr/device.h"
#include "../../hdr/mcb.h"
#include "../../hdr/pcb.h"
#include "../../hdr/date.h"
#include "../../hdr/time.h"
#include "../../hdr/fat.h"
#include "../../hdr/fcb.h"
#include "../../hdr/tail.h"
#include "../../hdr/process.h"
#include "../../hdr/dcb.h"
#include "../../hdr/sft.h"
#include "../../hdr/exe.h"
#include "../../hdr/fnode.h"
#include "../../hdr/dirmatch.h"
#include "../../hdr/file.h"
#include "../../hdr/dosnames.h"
#include "../../hdr/clock.h"
#include "../../hdr/kbd.h"
#include "../../hdr/error.h"

#define MAJOR_RELEASE	3
#define MINOR_RELEASE	30
#define REV_NUMBER	0

#define REVISION_MAJOR	1
#define REVISION_MINOR	0

/*									*/
/* Convience switch for maintaining variables in a single location	*/
/*									*/
#ifdef MAIN
#define GLOBAL
#else
#define GLOBAL extern
#endif

/*									*/
/* Convience definitions of TRUE and FALSE				*/
/*									*/
#ifndef TRUE
#define TRUE (1)
#endif
#ifndef FALSE
#define FALSE (0)
#endif

/*									*/
/* Constants and macros							*/
/*									*/
/* Defaults and limits - System wide					*/
#define	NFILES		16		/* number of files in table	*/
#define	NDEVS		4		/* number of supported devices	*/
#define NAMEMAX		64		/* Maximum path for CDS		*/

/* 0 = CON, standard input, can be redirected				*/
/* 1 = CON, standard output, can be redirected				*/
/* 2 = CON, standard error						*/
/* 3 = AUX, auxiliary							*/
/* 4 = PRN, list device							*/
/* 5 = 1st user file ...						*/
#define	STDIN		0
#define	STDOUT		1
#define	STDERR		2
#define	STDAUX		3
#define	STDPRN		4

/* error results returned after asking user				*/
#define	ABORT		-1
#define	RETRY		1
#define	FAIL		0
#define	CONTINUE	2

/* internal error from failure or aborted operation			*/
#define	ERROR		-1
#define	OK		0

/* internal transfer direction flags					*/
#define XFR_READ	1
#define XFR_WRITE	2

#define	RDONLY		0
#define WRONLY		1
#define RDWR		2

/* special ascii code equates						*/
#define	SPCL		0x00
#define	CTL_C		0x03
#define	CTL_F		0x06
#define	BELL		0x07
#define	BS		0x08
#define	HT		0x09
#define	LF		0x0a
#define	CR		0x0d
#define	CTL_Q		0x11
#define	CTL_S		0x13
#define	CTL_Z		0x1a
#define	ESC		0x1b
#define	CTL_BS		0x7f

#define	F3		0x3d
#define LEFT		0x4b
#define RIGHT		0x4d

/* Blockio constants							*/
#define	NUMBUFF	6 /* Number of track buffers -- must be at least 3	*/
#define	DSKWRITE	1		/* dskxfr function parameters	*/
#define	DSKREAD		2

/* FAT cluster special flags						*/
#define FREE			0x000

#define LONG_LAST_CLUSTER	0xFFFF
#define LONG_MASK		0xFFF8
#define LONG_BAD		0xFFF0
#define LAST_CLUSTER		0x0FFF
#define MASK			0xFF8
#define BAD			0xFF0

/*									*/
/* Data structures and unions						*/
/*									*/
/* Sector buffer structure						*/
#define BUFFERSIZE 512
struct	buffer
{
	struct	buffer
		FAR *b_next;		/* form linked list for LRU	*/
	WORD	b_unit;			/* disk for this buffer		*/
	LONG	b_blkno;		/* block for this buffer	*/
	BYTE	b_flag;			/* buffer valid flag		*/
	BYTE	b_update;		/* true if a blockio write has	*/
					/* put data in this buffer,	*/
					/* but the buffer hasn't been	*/
					/* flushed yet.			*/
	BYTE	b_buffer[BUFFERSIZE];	/* 512 byte sectors for now	*/
};

/*									*/
/* External Assembly variables						*/
/*									*/
extern struct dhdr
	FAR clk_dev,		/* Clock device driver			*/
	FAR con_dev,		/* Console device driver		*/
	FAR blk_dev;		/* Block device (Disk) driver		*/
extern UWORD
	ram_top,		/* How much ram in Kbytes		*/
#ifdef I86
	api_sp,			/* api stacks - for context		*/
	api_ss,			/* switching				*/
	usr_ss,			/* user stack segment			*/
	MarkSS,			/* stack highwater segment		*/
#endif
	MarkSP,			/* stack highwater stack pointer	*/
	usr_sp;			/* user stack				*/

extern COUNT *
#ifdef MC68K
	api_sp,			/* api stacks - for context		*/
	MarkSP,			/* stack highwater stack pointer	*/
#endif
	api_tos;		/* API handler stack			*/
extern BYTE
	FAR last;		/* first available byte of ram		*/


/*									*/
/* Global variables							*/
/*									*/
GLOBAL
	iregs far *user_r;
GLOBAL
	seg master_env;		/* Master environment segment		*/

GLOBAL BYTE
	os_major		/* major version number			*/
#ifdef MAIN
	=  MAJOR_RELEASE,
#else
,
#endif
	os_minor		/* minor version number		*/
#ifdef MAIN
	=  MINOR_RELEASE,
#else
,
#endif
	rev_number		/* minor version number		*/
#ifdef MAIN
	=  REV_NUMBER,
#else
,
#endif
	version_flags;		/* minor version number		*/

#ifdef DEBUG
GLOBAL WORD bDumpRdWrParms
# ifdef MAIN
= FALSE;
# else
;
# endif
#endif


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

GLOBAL BYTE *os_release
#ifdef MAIN
# ifdef SHWR
="DOS-C version %d.%02d [Shareware Release].\n\
\n\
May be freely redistributed provided you do not alter the kernel or any\n\
associated files.\n";
# else
="DOS-C version %d.%02d\n\n";
# endif
#else
;
#endif

/* Globally referenced variables				*/
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			/* temporary			*/
	FAR *CDSp;		/* Current Directory Structure	*/
extern	fcb
	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	njoined;		/* number of joined devices	*/
extern	WORD
	BootDrive,		/* Drive we came up from		*/
	NumFloppies;		/* How many floppies we have		*/

/* start of uncontrolled variables					*/
GLOBAL seg	cu_psp;			/* current psp segment		*/

GLOBAL iregs	error_regs;		/* registers for dump		*/

GLOBAL WORD
	tsr,			/* true if program is TSR		*/
	break_flg,		/* true if break was detected		*/
	dump_regs,		/* dump registers of bad call		*/
	scr_pos,		/* screen position for bs, ht, etc	*/
	default_drive;		/* default drive for dos		*/

GLOBAL keyboard
	kb_buf;

GLOBAL sfttbl
	basesft;

GLOBAL struct dpb
	blk_devices[NDEVS];

GLOBAL struct f_node
	f_nodes[NFILES];

GLOBAL struct buffer
	FAR *lastbuf,      	/* tail of ditto			*/
	buffers[NUMBUFF];   	/* array of track buffers		*/

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

GLOBAL BYTE
	verify_ena,		/* verify enabled flag			*/
	break_ena,		/* break enabled flag			*/
	return_mode,		/* Process termination rets		*/
	return_code,		/*     "        "       "		*/
	mem_access_mode;	/* memory allocation scheme		*/


GLOBAL BYTE
	InDOS,			/* In DOS critical section		*/
	FAR *dta;		/* Disk transfer area (kludge)		*/

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

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

#ifdef PROTO
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);
VOID	setvec(UWORD, VOID (INRPT FAR *)());
COUNT	con(COUNT);
VOID getdirent(BYTE FAR *, struct dirent FAR *);
VOID putdirent(struct dirent FAR *, BYTE FAR *);
#else
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();
VOID	setvec();
COUNT	con();
VOID getdirent();
VOID putdirent();
#endif


/*								*/
/* special word packing prototypes				*/
/*								*/
#ifdef NATIVE
# define getlong(vp, lp) (*(BYTE *)(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


/* Special IPL defines							*/
#define KERNSEG 0x00c0
[ RETURN TO DIRECTORY ]