mac-rom/OS/NetBoot/BootGlobals.h

312 lines
10 KiB
C
Raw Normal View History

/*EASE$$$ READ ONLY COPY of file <20>BootGlobals.h<>
** 1.0 PWD 10/30/1989 Adding to EASE
** END EASE MODIFICATION HISTORY */
extern void myListener(); /* These are asm lang. code */
extern QElemPtr DeQReqBuf(QHdr *quePtr,QElemPtr aptr);
extern void processQueue();
extern void processVBL();
extern void delayMilSec(short);
extern void readUserRecord();
extern void sendUserRecord();
extern void closeUserRecord();
extern void readImage();
extern void writeImage();
extern void closeImage();
extern void writeUserRecord();
extern void sendUpdateReply();
typedef char block[disksector];
typedef struct
{
char serverName[34]; /* server name to boot off of */
char serverZone[34]; /* and the zone it lives in */
char serverVol[34]; /* and the volume name */
short serverAuthMeth; /* authentication method to use (none, clear txt, rand) */
int sysDirID, /* the dir id of the blessed folder there */
userDirID; /* and of the user folder */
}OlduserRecord;
// This defines the portion of a user record which should
// be stored on disk by the boot server.
typedef struct
{
long finderInfo[8]; // blessed folder dir id, startup folder dir id etc...
char bootBlocks[135]; // see Inside Mac V-135
}store;
// This defines a user record.
// Some of these fields can be determined on the fly by the boot server,
// while others are stored on disk by the boot server
typedef struct
{
char serverName[serverNameLength]; // server name to boot off of
char serverZone[zoneNameLength]; // and the zone it lives in
char serverVol[volNameLength]; // the volume name
short serverAuthMeth; // authentication method to use (none, clear txt, rand)
long sharedSysDirID; // dir id of shared system folder
long userDirID; // dir id of the user's private system folder
store storeage // fields to be stored on disk for the user
}userRecord;
// This defines the user-record reply sent to workstations.
typedef struct
{
char Command; /* record reply command */
char pversion; /* version of boot protocol spoken by requestor */
short osID; /* type and version of os */
long userData; /* time stamp goes here */
short blockSize; /* number of bytes per block */
short imageID; /* image ID */
short result; /* error codes */
long imageSize; /* size of image in blocks */
userRecord userRec; /* the user's "boot blocks" */
}UserRecReply;
// This defines the user-record-update reply sent to workstations.
typedef struct
{
char Command; /* record update command */
char pversion; /* version of boot protocol spoken by requestor */
short result; /* results of update */
long userData; /* stamp goes here */
}UserUpdateReply;
// This defines the image reply sent to workstations.
typedef struct
{
char Command; /* type of request this is */
char pversion; /* version of this protocol */
short imageID; /* ? */
short blockNum; /* block number of this image */
block data; /* the actual block of data */
}ImageReply;
typedef struct
{
char Command; /* type of request this is */
char pversion; /* version of this protocol */
short imageID; /* ? */
short result; /* error field */
}ImageDone;
typedef struct
{
short osID; /* type and version of os */
long userData; /* time stamp goes here */
char userName[userNameLength]; /* key to finding thier record */
}urr; // User Record Req
typedef struct
{
short imageID; /* the image being requested */
char section; /* "section" of the image the bitmap refers to */
char flags; /* bit 0 means to send entire image */
short replyDelay; /* minimum needed inter-packet delay in milliseconds */
char bitmap[bitmapsize]; /* bitmap of the section of the image requested */
Boolean done; /* true when bitmap clear */
Boolean ORflag; /* used by server when replying: notes if bitmap has been ORed */
unsigned short lastblk; /* " ": an index used to tell what blk was last sent */
}bir; // Boot Image Req
typedef struct
{
short osID; /* type and version of os */
long userData; /* time stamp goes here */
char userName[userNameLength]; /* key to finding thier record */
userRecord userRec; /* the user's "boot blocks" */
}uru; // user record update request
// This defines the structure of queue element that are designed to hold
// all request (of all boot protocol types) received from workstations.
typedef struct
{
QElem *qLink; /* all request are placed in a queue */
short qType; /* not used */
unsigned short netnum; /* the network this request comes from */
unsigned char node; /* the node this request comes from */
char Command; /* type of request this is */
char pversion; /* version of boot protocol spoken by requestor */
char filler;
union{
urr urr; /* user record request */
bir bir; /* boot image request */
uru uru; /* user record update request */
}reqtype;
}requestBuf;
typedef struct {
short os;
short version;
short imageSize;
short delay;
}bootRez;
// An array of the following will keep info about
// each os we support handy.
typedef struct
{
long imageSize; /* # of blocks in the image */
short fileRefNum, /* images kept open at all times, store file ref num here */
imageVersion, /* version of this image */
delay; /* server suggested minimum inter-packet delay */
}oosDataRec;
// An linked-list of the following will keep info about
// each os we support handy.
typedef struct
{
long link; /* for the linked list */
long imageSize; /* # of blocks in the image */
short fileRefNum, /* images kept open at all times, store file ref num here */
imageVersion, /* version of this image */
delay; /* server suggested minimum inter-packet delay */
}osDataRec;
typedef struct
{
long Next; /* this is just a portion of the tStatRec Record taken */
long Filler0; /* from the AppleShare file server code. Server needs */
short VersionID; /* it to get a ptr to the server name string. */
short MaxVolCount;
long Last;
short numSessions;
short currReqs;
StringPtr SrvrNamePtr; /* we need this when we register ourselves */
} serverinfo;
// we define our own vbl record so that we can carry
// around a ptr to our server globals
typedef struct
{
VBLTask standard; // this is the normal vbl record
Ptr globalsPtr; // here we will carry a ptr to our globals
}myVBLTask;
/*
Global variables.
*/
typedef struct
{
requestBuf *gbufptr;
requestBuf *gcurrentReqPtr; // all asynch calls use this to get at current request buffer
QHdr gFreeLst; // a queue of free buffers
QHdr gUserRecReq; // a queue of user-record requests
QHdr gImageReq; // a queue of boot-image request
QHdr gUserUpdateReq; // a queue of user-record-update requests
short gintlevel; // flag to control asynch processing (keep only one outstanding at a time)
UserRecReply gmyUserRecReply;
ImageReply gmyImageReply;
UserUpdateReply gmyUserUpdateReply;
ImageDone gmyImageDone;
ParamBlockRec gPBrec; // this is for making asynch file calls (8 bytes)
MPPParamBlock gmyddpWrite; // for ddp write
AddrBlock gmydestAddr; // ditto
char gmyheader[18]; // ditto
char gmywds[600]; // ditto
HParamBlockRec gmyHPB;
MPPPBPtr gddppbptr;
MPPPBPtr gnamepbptr;
OSErr gerrCode;
short gmyNode;
short gmyNet;
short gworkLoad;
myVBLTask *gVBL; // ptr to VBLTask in the system heap
long gsleepstart;
EntityPtr gntePtr;
ProcPtr gioprocessQueue;
#if false
ProcPtr gioprocessVBL;
ProcPtr gioimageDone;
ProcPtr gioreadUserRecord;
ProcPtr giosendUserRecord;
ProcPtr giocloseUserRecord;
ProcPtr gioopenImage;
ProcPtr gioreadImage;
ProcPtr giowriteImage;
ProcPtr giocloseImage;
#endif
SysEnvRec gworld;
oosDataRec gosData[osMax];
osDataRec gosData // root of linked list
Boolean gDoneFlag; // TRUE when File/Quit choosen
TEHandle gTextH; // The TextEdit handle
Boolean gHaltFlag; // true if halted, false otherwise
Boolean gWindFlag; // true if showing, false otherwise
char gafname[200];
} Globals,*GlobalsPtr;
extern GlobalsPtr GetGPtr(); // returns ptr to above Globals
/*
Global variables.
*/
#define bufptr GetGPtr()->gbufptr
#define intlevel GetGPtr()->gintlevel
#define myHPB GetGPtr()->gmyHPB
#define myHPBptr GetGPtr()->gmyHPBptr
#define ddppbptr GetGPtr()->gddppbptr
#define namepbptr GetGPtr()->gnamepbptr
#define FreeLst GetGPtr()->gFreeLst
#define UserRecReq GetGPtr()->gUserRecReq
#define ImageReq GetGPtr()->gImageReq
#define UserUpdateReq GetGPtr()->gUserUpdateReq
#define errCode GetGPtr()->gerrCode
#define PBrec GetGPtr()->gPBrec
#define myddpWrite GetGPtr()->gmyddpWrite
#define myUserRecReply GetGPtr()->gmyUserRecReply
#define myImageReply GetGPtr()->gmyImageReply
#define myImageDone GetGPtr()->gmyImageDone
#define myUserUpdateReply GetGPtr()->gmyUserUpdateReply
#define mydestAddr GetGPtr()->gmydestAddr
#define myheader GetGPtr()->gmyheader
#define mywds GetGPtr()->gmywds
#define currentReqPtr GetGPtr()->gcurrentReqPtr
#define ioprocessQueue GetGPtr()->gioprocessQueue
#define ioprocessVBL GetGPtr()->gioprocessVBL
#define ioimageDone GetGPtr()->gioimageDone
#define myNode GetGPtr()->gmyNode
#define myNet GetGPtr()->gmyNet
#define workLoad GetGPtr()->gworkLoad
#define VBL GetGPtr()->gVBL
#define sleepstart GetGPtr()->gsleepstart
#define ntePtr GetGPtr()->gntePtr
#define ioreadUserRecord GetGPtr()->gioreadUserRecord
#define iosendUserRecord GetGPtr()->giosendUserRecord
#define iocloseUserRecord GetGPtr()->giocloseUserRecord
#define world GetGPtr()->gworld
#define ioopenImage GetGPtr()->gioopenImage
#define ioreadImage GetGPtr()->gioreadImage
#define iowriteImage GetGPtr()->giowriteImage
#define iocloseImage GetGPtr()->giocloseImage
#define osData GetGPtr()->gosData
#define DoneFlag GetGPtr()->gDoneFlag
#define TextH GetGPtr()->gTextH
#define HaltFlag GetGPtr()->gHaltFlag
#define WindFlag GetGPtr()->gWindFlag
#define afname GetGPtr()->gafname