home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
unix
/
volume22
/
nn6.4
/
part19
/
global.h
< prev
next >
Wrap
C/C++ Source or Header
|
1990-06-07
|
5KB
|
228 lines
/*
* (c) Copyright 1990, Kim Fabricius Storm. All rights reserved.
*
* Global declarations and definitions.
*/
/*
* Marks for global/external variables
*/
#define export /* export variable from module */
#define import extern /* import variable into module */
/*
* Various constants and types
*/
typedef int8 attr_type;
typedef int32 flag_type;
#ifdef I286_BUG
# define FLAG(n) (1L<<(n-1))
#else
# define FLAG(n) (((flag_type)1)<<(n-1))
#endif
typedef int32 article_number;
typedef int16 group_number;
typedef uint32 time_stamp;
typedef int (* fct_type )();
#define CALL(fct) (* (fct))
#define NULL_FCT (fct_type)NULL
/* frequently used characters */
#define NUL '\0'
#define TAB '\t'
#define NL '\n'
#define CR '\r'
#define BS '\b'
#define SP ' '
/* misc macros */
#define fl fflush(stdout)
#ifdef CONTROL_
#undef CONTROL_
#endif
#define CONTROL_(c) (c&037)
#ifndef HAVE_STRCHR
#define strrchr rindex
#define strchr index
#endif
#ifdef SIGNAL_HANDLERS_ARE_VOID
#define sig_type void
#else
#define sig_type int
#endif
#ifndef NNTP
#undef NNTP_POST
#endif
/*
* Some systems don't define these in <sys/stat.h>
*/
#ifndef S_IFMT
#define S_IFMT 0170000 /* type of file */
#define S_IFDIR 0040000 /* directory */
#define S_IFREG 0100000 /* regular */
#endif
#ifndef O_RDONLY
#define O_RDONLY 0
#define O_WRONLY 1
#define O_RDWR 2
#endif
/* define types of library functions */
char *getenv(), *ctime();
char *strchr(), *strrchr();
off_t lseek(), ftell(), tell();
int atoi();
long atol();
/* define types of own functions */
char *mk_file_name(), *home_relative();
char *date_time(), *user_name(), *plural();
char *copy_str();
time_t file_exist(), m_time(), cur_time();
extern FILE *open_file();
char *relative();
#define OPEN_READ 0 /* open for reading */
#define OPEN_UPDATE 1 /* open/create for update */
#define OPEN_CREATE 2 /* create/truncate for write */
#define OPEN_APPEND 3 /* open for append */
#define OPEN_CREATE_RW 4 /* create for read/write */
#define DONT_CREATE 0x40 /* return if file does not exist */
#define MUST_EXIST 0x80 /* fatal error if cannot open */
#define OPEN_UNLINK 0x100 /* unlink after open (not OPEN_UPDATE) */
/*
* Other external definitions
*
* NOTICE: the distinction between pointers and arrays is important
* here (they are global variables - not function arguments)
*/
extern char
*nn_directory,
*lib_directory,
version_id[];
#ifdef NNTP
extern int use_nntp; /* 1 iff we are using nntp */
#else
#define use_nntp 0 /* for optimizers */
#endif
extern int
s_hangup, /* hangup signal */
s_keyboard, /* keyboard signal */
s_pipe, /* broken pipe */
s_redraw; /* continue signal after stop */
extern int who_am_i;
#define I_AM_MASTER 0
#define I_AM_NN 1
#define I_AM_ADMIN 2
#define I_AM_CHECK 3
#define I_AM_TIDY 4
#define I_AM_EMACS 5
#define I_AM_GOBACK 6
#define I_AM_POST 7
#define I_AM_GREP 8
#define I_AM_DAILY 9
#define I_AM_SPEW 10
#define I_AM_EXPIRE 11
#define I_AM_ACCT 12
extern unsigned short /* as they are on most systems... */
user_id,
group_id;
extern int
process_id;
extern int errno;
/*
* Storage management
*/
extern char *mem_obj(), *mem_resize(), *mem_str();
#define newobj(type, nelt) \
(type *)mem_obj(sizeof(type), (int32)(nelt))
#define newstr(nelt) \
mem_str((int32)(nelt))
#define resizeobj(obj, type, nelt) \
(type *)mem_resize((char *)(obj), sizeof(type), (int32)(nelt))
#define freeobj(obj) mem_free((char *)(obj))
#define quicksort(a,n,t,f) qsort((char *)(a), (unsigned)(n), sizeof(t), f)
#include "vararg.h"
#include "data.h"
/*
* db external data
*/
extern master_header master;
/* group headers */
extern group_header *active_groups, **sorted_groups;
/* current group information */
extern char group_path_name[];
extern char *group_file_name;
extern group_header *current_group, *group_sequence, *rc_sequence;
extern group_header *lookup();
int l_g_index, s_g_first;
#define Loop_Groups_Number(num) \
for (num = 0; num < master.number_of_groups; num++)
#define Loop_Groups_Header(gh) \
for (l_g_index = 0, gh=active_groups; \
l_g_index < master.number_of_groups; \
l_g_index++, gh++)
#define Loop_Groups_Sorted(gh) \
for (l_g_index = s_g_first; \
(l_g_index < master.number_of_groups) && \
(gh = sorted_groups[l_g_index]) ;\
l_g_index++)
#define Loop_Groups_Sequence(gh) \
for (gh = group_sequence; gh; gh = gh->next_group)
#define Loop_Groups_Newsrc(gh) \
for (gh = rc_sequence; gh; gh = gh->newsrc_seq)