home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume22 / nn6.4 / part19 / global.h < prev    next >
C/C++ Source or Header  |  1990-06-07  |  5KB  |  228 lines

  1. /*
  2.  *    (c) Copyright 1990, Kim Fabricius Storm.  All rights reserved.
  3.  *
  4.  *    Global declarations and definitions.
  5.  */
  6.  
  7. /*
  8.  *    Marks for global/external variables
  9.  */
  10.  
  11. #define    export            /* export variable from module */
  12. #define import    extern        /* import variable into module */
  13.  
  14. /*
  15.  *    Various constants and types
  16.  */
  17.  
  18. typedef int8      attr_type;
  19. typedef int32     flag_type;
  20.  
  21. #ifdef I286_BUG
  22. #    define FLAG(n)    (1L<<(n-1))
  23. #else
  24. #    define FLAG(n)    (((flag_type)1)<<(n-1))
  25. #endif
  26.  
  27. typedef int32    article_number;
  28. typedef int16    group_number;
  29. typedef uint32    time_stamp;
  30.  
  31. typedef int    (* fct_type )();
  32. #define CALL(fct)  (* (fct))
  33. #define NULL_FCT  (fct_type)NULL
  34.  
  35. /* frequently used characters */
  36.  
  37. #define NUL    '\0'
  38. #define TAB    '\t'
  39. #define NL    '\n'
  40. #define CR    '\r'
  41. #define BS    '\b'
  42. #define SP    ' '
  43.  
  44. /* misc macros */
  45.  
  46. #define fl fflush(stdout)
  47.  
  48. #ifdef CONTROL_
  49. #undef CONTROL_
  50. #endif
  51. #define CONTROL_(c)    (c&037)
  52.  
  53. #ifndef HAVE_STRCHR
  54. #define    strrchr        rindex
  55. #define strchr        index
  56. #endif
  57.  
  58. #ifdef SIGNAL_HANDLERS_ARE_VOID
  59. #define sig_type void
  60. #else
  61. #define sig_type int
  62. #endif
  63.  
  64. #ifndef NNTP
  65. #undef NNTP_POST
  66. #endif
  67.  
  68. /*
  69.  *    Some systems don't define these in <sys/stat.h>
  70.  */
  71.  
  72. #ifndef S_IFMT
  73. #define    S_IFMT    0170000            /* type of file */
  74. #define S_IFDIR    0040000            /* directory */
  75. #define S_IFREG    0100000            /* regular */
  76. #endif
  77.  
  78. #ifndef O_RDONLY
  79. #define    O_RDONLY    0
  80. #define    O_WRONLY    1
  81. #define    O_RDWR        2
  82. #endif
  83.  
  84. /* define types of library functions */
  85.  
  86. char     *getenv(), *ctime();
  87. char     *strchr(), *strrchr();
  88. off_t     lseek(), ftell(), tell();
  89. int    atoi();
  90. long    atol();
  91.  
  92.  
  93. /* define types of own functions */
  94.  
  95. char *mk_file_name(), *home_relative();
  96. char *date_time(), *user_name(), *plural();
  97. char *copy_str();
  98.  
  99. time_t    file_exist(), m_time(), cur_time();
  100.  
  101. extern FILE *open_file();
  102. char *relative();
  103.  
  104. #define    OPEN_READ    0    /* open for reading */
  105. #define    OPEN_UPDATE    1    /* open/create for update */
  106. #define    OPEN_CREATE    2    /* create/truncate for write */
  107. #define    OPEN_APPEND    3    /* open for append */
  108. #define OPEN_CREATE_RW    4    /* create for read/write */
  109.  
  110. #define    DONT_CREATE    0x40    /* return if file does not exist */
  111. #define    MUST_EXIST    0x80    /* fatal error if cannot open */
  112. #define    OPEN_UNLINK    0x100    /* unlink after open (not OPEN_UPDATE) */
  113.  
  114.  
  115. /*
  116.  *    Other external definitions
  117.  *
  118.  *    NOTICE: the distinction between pointers and arrays is important
  119.  *        here (they are global variables - not function arguments)
  120.  */
  121.  
  122. extern char
  123.  
  124.     *nn_directory,
  125.     *lib_directory,
  126.     version_id[];
  127.  
  128. #ifdef NNTP
  129. extern int  use_nntp;   /* 1 iff we are using nntp */
  130. #else
  131. #define use_nntp 0    /* for optimizers */
  132. #endif
  133.  
  134. extern int
  135.     s_hangup,    /* hangup signal */
  136.     s_keyboard,    /* keyboard signal */
  137.     s_pipe,    /* broken pipe */
  138.     s_redraw;    /* continue signal after stop */
  139.  
  140. extern int who_am_i;
  141.  
  142. #define I_AM_MASTER    0
  143. #define I_AM_NN        1
  144. #define I_AM_ADMIN    2
  145. #define I_AM_CHECK    3
  146. #define I_AM_TIDY    4
  147. #define I_AM_EMACS    5
  148. #define I_AM_GOBACK    6
  149. #define I_AM_POST    7
  150. #define I_AM_GREP    8
  151. #define    I_AM_DAILY    9
  152. #define    I_AM_SPEW    10
  153. #define I_AM_EXPIRE    11
  154. #define    I_AM_ACCT    12
  155.  
  156. extern unsigned short        /* as they are on most systems... */
  157.     user_id,
  158.     group_id;
  159.  
  160. extern int
  161.     process_id;
  162.  
  163. extern int errno;
  164.  
  165. /*
  166.  *    Storage management
  167.  */
  168.  
  169. extern char *mem_obj(), *mem_resize(), *mem_str();
  170.  
  171. #define    newobj(type, nelt) \
  172.     (type *)mem_obj(sizeof(type), (int32)(nelt))
  173.  
  174. #define    newstr(nelt) \
  175.     mem_str((int32)(nelt))
  176.  
  177. #define    resizeobj(obj, type, nelt) \
  178.     (type *)mem_resize((char *)(obj), sizeof(type), (int32)(nelt))
  179.  
  180. #define    freeobj(obj) mem_free((char *)(obj))
  181.  
  182. #define quicksort(a,n,t,f) qsort((char *)(a), (unsigned)(n), sizeof(t), f)
  183.  
  184. #include "vararg.h"
  185. #include "data.h"
  186.  
  187. /*
  188.  *    db external data
  189.  */
  190.  
  191. extern master_header master;
  192.  
  193. /* group headers */
  194.  
  195. extern group_header *active_groups, **sorted_groups;
  196.  
  197. /* current group information */
  198.  
  199. extern char     group_path_name[];
  200. extern char    *group_file_name;
  201.  
  202. extern group_header *current_group, *group_sequence, *rc_sequence;
  203.  
  204. extern group_header *lookup();
  205.  
  206.  
  207. int l_g_index, s_g_first;
  208.  
  209. #define    Loop_Groups_Number(num) \
  210.     for (num = 0; num < master.number_of_groups; num++)
  211.  
  212. #define Loop_Groups_Header(gh) \
  213.     for (l_g_index = 0, gh=active_groups; \
  214.      l_g_index < master.number_of_groups; \
  215.      l_g_index++, gh++)
  216.  
  217. #define Loop_Groups_Sorted(gh) \
  218.     for (l_g_index = s_g_first; \
  219.      (l_g_index < master.number_of_groups) && \
  220.      (gh = sorted_groups[l_g_index]) ;\
  221.      l_g_index++)
  222.  
  223. #define    Loop_Groups_Sequence(gh) \
  224.     for (gh = group_sequence; gh; gh = gh->next_group)
  225.  
  226. #define    Loop_Groups_Newsrc(gh) \
  227.     for (gh = rc_sequence; gh; gh = gh->newsrc_seq)
  228.