home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Professional
/
OS2PRO194.ISO
/
os2
/
com
/
bbs
/
downsrt
/
source
/
area_102.h
< prev
next >
Wrap
C/C++ Source or Header
|
1990-08-01
|
9KB
|
183 lines
/***************************************************************************
AREA.IDX Structures
***************************************************************************/
struct _aidx
{
word area; /* Same format as area.areano */
dword offset;
dword name_crc; /* Currently undefined, but reserved by Maximus. *
* This will probably become a CRC-32 of the *
* area.name string, below... but is currently not *
* implemented. */
};
/***************************************************************************
AREA.DAT Structures
***************************************************************************/
#ifdef NEVER
/* NOTE: The _area structure has a dynamic length! To access this file, *
* you should read the first _area structure from the file, and *
* check the struct_len byte. Then, to access the file, you seek *
* to each new location, instead of reading straight through. *
* *
* For example, to read all of the _area file into an array, you *
* MUST do it like this, for upward compatiblity: */
{
struct _area area[NUM_AREAS];
int x,
slen;
if ((areafile=open(area_name,O_RDONLY | O_BINARY))==-1)
Error();
/* Read the first record of the file, to grab the structure-length *
* byte. */
read(areafile,&area[0],sizeof(struct _area));
slen=area[0].struct_len;
for (x=0;! eof(area_data);x++)
{
/* Note this lseek() call, which positions the pointer to the *
* start of the next record, no matter how long the previous *
* record was. */
lseek(areafile,x*(long)struct_len,SEEK_SET);
read(areafile,&area[x],sizeof(struct _area));
}
close(areafile);
}
#endif
struct _override
{
int priv; /* Override priv level */
byte lock; /* Override lock setting */
byte ch; /* First letter of menu option to apply override to */
};
#define AREA_id 0x54414441L /* "ADAT" */
struct _area
{
long id; /* Unique identifier for AREA.DAT structure. *
* Should be AREA_id, above. */
word struct_len; /* Length of _area structure -- this needs only *
* to be read from the first record in an area *
* data file, since it can be assumed to remain *
* the same throughout the entire file. This is *
* GUARANTEED to be at offset two for all future *
* versions of this structure. */
word areano; /* This is the integer representation of this *
* area's name, and will be obsoleted very *
* shortly, even though the current version of *
* Maximus uses this internally. Use the 'name' *
* element instead: It is a standard string, and *
* is what will be supported in future versions. *
* One of the items on our "To Do" list is to *
* completely go with area names. This means that *
* we'll be using a string for an area "number", *
* and it could theoretically be as long as could *
* fit in the 'name' variable, as long as it is a *
* single word. ie. "BinkleyTerm" could be a *
* valid area name! By using the 'name' element *
* as a straight ASCII string, you'll have *
* automatic support for future versions of Max. */
byte name[40]; /* String format of area's name. USE THIS! */
/*************************************************************************/
/** Message Area Information **/
/*************************************************************************/
word area_type; /* Message base type. 0x00 = *.MSG. Others are *
* currently undefined, and rsvd by Maximus. */
byte msgpath[80], /* Path to messages */
msgname[40], /* The 'tag' of the area, for use in ECHOTOSS.LOG */
msginfo[80], /* The DIR.BBS-like description for msg section */
msgbar[80], /* Barricade file for message area */
origin[62]; /* The ORIGIN line for this area */
sword msgpriv; /* This is the priv required to access the msg *
* section of this area. */
byte msglock; /* The lock for the message area */
byte fill1;
sword origin_aka; /* This is the AKA number to use on the origin *
* line. See the normal SysOp documentation on *
* the "Origin" statement, for info on how this *
* number is used. */
/*************************************************************************/
/** File Area Information **/
/*************************************************************************/
byte filepath[80], /* Path for downloads */
uppath[80], /* Path for uploads */
filebar[80], /* Barricade file for file areas */
filesbbs[80], /* Path to FILES.BBS-like catalog for this area */
fileinfo[80]; /* The DIR.BBS-like description for file section */
sword filepriv; /* This is the priv required to access the file *
* section of this area. */
byte filelock; /* The locks for the file area */
byte fill2;
/*************************************************************************/
/** Miscellaneous Information **/
/*************************************************************************/
byte msgmenuname[13], /* Alternate *.MNU name to use for this msg.area */
filemenuname[13];/* Alternate *.MNU name to use for this file area */
word attrib[MAXCLASS];/* This is an array of attributes for the *
* msg/file areas. These are dependant on PRIV *
* level. Once you have the CLASS number for a *
* particular user (via Find_Class_Number()), you *
* can find the attributes for that particular *
* priv level like this: "area.attrib[class]" *
* ...which will get you the attribute for that *
* priv level. */
/*************************************************************************/
/** Stuff hacked on later **/
/*************************************************************************/
struct _override movr[MAX_OVR]; /* Override privs for msg/file areas */
struct _override fovr[MAX_OVR];
};
/* Area attributes, for area.attrib[] (above) */
#define SYSMAIL 0x0001 /* is a mail area */
#define NOPUBLIC 0x0004 /* OPUS: Disallow public messages */
#define NOPRIVATE 0x0008 /* OPUS: Disallow private messages */
#define ANON_OK 0x0010 /* OPUS: Enable anonymous messages */
#define ECHOMAIL 0x0020 /* OPUS: Set=Echomail Clear=Not Echomail */
#define HIGHBIT 0x0040 /* MAX: Allow high-bit chars in this area */
#define NREALNAME 0x0200 /* MAX: Don't use ^aREALNAME for this area */
#define UREALNAME 0x0400 /* MAX: Use usr.realname instead of usr.name */