home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Spezial / SPEZIAL2_97.zip / SPEZIAL2_97.iso / ANWEND / ONLINE / ANALOG_1 / ANALOG_1.ZIP / analhea2.h < prev    next >
C/C++ Source or Header  |  1997-09-07  |  24KB  |  620 lines

  1. /*** analhea2.h; header file for analog version 2.1 ***/
  2. /* Please read Readme.html, or http://www.statslab.cam.ac.uk/~sret1/analog/ */
  3.  
  4. /*** These things are not intended to be user definable;
  5.      user definable headers are in analhead.h ***/
  6.  
  7. #ifndef ANALHEAD2
  8. #define ANALHEAD2
  9.  
  10. /*** First some #define's and #include's. Start with system specific ones ***/
  11.  
  12. #define VNUMBER "2.11"    /* the version number of this program */
  13.  
  14. #ifdef __MWERKS__
  15. #define MAC        /* So MWERKS compiler automatically switches to Mac */
  16. #endif
  17.  
  18. #ifdef VERSION
  19. #undef VERSION
  20. #endif
  21.  
  22. #ifdef MAC
  23. #define MAC_EVENTS
  24. #define WEBSTAR
  25. #define NETPRESENZ
  26. #define NOPIPES
  27. #define MACDIRENT
  28. #include <MacHeaders.h>
  29. #include <sioux.h>
  30. #define VERSION VNUMBER "/Mac"
  31. #define DIRSEP ':'
  32. #endif
  33.  
  34. #ifdef DOS
  35. #define NODNS
  36. #define VERSION VNUMBER "/DOS"
  37. #define DIRSEP '\\'
  38. #endif
  39.  
  40. #ifdef VMS
  41. #define NOPIPES
  42. #define VMSDIRENT
  43. #define VERSION VNUMBER "/VMS"
  44. #define DIRSEP '/'
  45. #endif
  46.  
  47. #ifdef UNIX
  48. #define VERSION VNUMBER "/Unix"
  49. #define DIRSEP '/'
  50. #endif
  51.  
  52. #ifdef __EMX__
  53. #define VERSION VNUMBER "/emx"
  54. #define DIRSEP '\\'
  55. #endif
  56.  
  57. #ifdef _WIN32  /* so it can pick it up automatically */
  58. #undef WIN32
  59. #define WIN32
  60. #endif
  61. #ifdef WIN32
  62. #define VERSION VNUMBER "/Win32"
  63. #define DIRSEP '\\'
  64. #define popen _popen
  65. #define pclose _pclose
  66. extern void Win32Init(void);
  67. extern void Win32Cleanup(void);
  68. #endif
  69.  
  70. #ifdef RISCOS
  71. #define NODNS
  72. #define NOPIPES
  73. #define NODIRENT
  74. #define VERSION VNUMBER "/RISCOS"
  75. #define DIRSEP '.'
  76. #endif
  77.  
  78. /* If no OS is defined, the compilation will fail by not knowing VERSION */
  79.  
  80. #include <stdio.h>
  81. #include <stdlib.h>
  82. #include <math.h>
  83. #include <string.h>
  84. #include <time.h>
  85. #include <ctype.h>
  86. #ifndef NODIRENT
  87. #ifndef VMSDIRENT
  88. #ifndef MACDIRENT
  89. #include <sys/types.h>
  90. #include <sys/stat.h>
  91. #include <dirent.h>          /* Normal dirent */
  92. #else
  93. #include "macdir.h"          /* Mac dirent */
  94. #endif
  95. #else
  96. #define VMS_FSPEC_MAX 256    /* VMS dirent */
  97. #include <descrip.h>
  98. #endif
  99. #endif
  100. #ifndef NODNS
  101. #ifdef MAC
  102. #include <Gestalt.h>
  103. #include <MacTCP.h>
  104. #include <OpenTransport.h>
  105. #include <OpenTptInternet.h>
  106. #include <AddressXlation.h>
  107. #else
  108. #ifdef WIN32
  109. #include <winsock.h>
  110. #define INET_ADDR_ERR INADDR_NONE
  111. #else
  112. #include <sys/socket.h>
  113. #include <netinet/in.h>
  114. #include <netdb.h>
  115. #include <arpa/inet.h>
  116. #define INET_ADDR_ERR (-1)   /* what inet_addr() returns on error */
  117. #endif
  118. #endif
  119. #endif
  120. #ifdef MAC_EVENTS
  121. #define MAC_IDLE_FREQ (200)
  122. #endif
  123.  
  124. #ifdef TRUE  /* I suppose everyone else defines TRUE = 1, but I won't */
  125. #undef TRUE  /* risk it by doing an #ifndef! */
  126. #endif
  127. #define TRUE (1)
  128. #ifdef FALSE
  129. #undef FALSE
  130. #endif
  131. #define FALSE (0)
  132. #ifdef ON
  133. #undef ON
  134. #endif
  135. #define ON (TRUE)
  136. #ifdef OFF
  137. #undef OFF
  138. #endif
  139. #define OFF (FALSE)
  140. #ifdef OK
  141. #undef OK
  142. #endif
  143. #define OK (0)
  144. #ifdef NONE
  145. #undef NONE
  146. #endif
  147. #define NONE (0)
  148. #ifdef ERR
  149. #undef ERR
  150. #endif
  151. #define ERR (-1)
  152. #ifdef UNSET
  153. #undef UNSET
  154. #endif
  155. #define UNSET (-1)
  156. #ifdef ENGLISH           /* output languages */
  157. #undef ENGLISH
  158. #endif
  159. #define ENGLISH (0)
  160. #ifdef FRENCH
  161. #undef FRENCH
  162. #endif
  163. #define FRENCH (1)
  164. #ifdef GERMAN
  165. #undef GERMAN
  166. #endif
  167. #define GERMAN (2)
  168. #ifdef ITALIAN
  169. #undef ITALIAN
  170. #endif
  171. #define ITALIAN (3)
  172. #ifdef SPANISH
  173. #undef SPANISH
  174. #endif
  175. #define SPANISH (4)
  176. #ifdef US_ENGLISH
  177. #undef US_ENGLISH
  178. #endif
  179. #define US_ENGLISH (5)
  180. #ifdef DANISH
  181. #undef DANISH
  182. #endif
  183. #define DANISH (6)
  184. #define SENSITIVE (0)    /* as in, "Case ... filesystem" */
  185. #define INSENSITIVE (1)
  186. #define BYREQUESTS (0)       /* ways of sorting */
  187. #define BYBYTES (1)
  188. #define ALPHABETICAL (2)
  189. #define RANDOMLY (3)
  190. #define BYPAGES (4)
  191. #define APPROX (2)       /* for hostname counting */
  192. #define NETPRESENZLINE (4)
  193. #define WEBSTARLINE (3)
  194. #define COMMON (2)
  195. #define NCSAOLD (1)
  196. #define CORRUPT (0)
  197. #define PREFORMATTED (3)   /* output types */
  198. #define CACHE (2)
  199. #define ASCII (1)
  200. #define HTML (0)
  201. #ifdef MAX
  202. #undef MAX
  203. #endif
  204. #define MAX(a,b) (((a)>(b))?(a):(b))
  205. #ifdef MIN
  206. #undef MIN
  207. #endif
  208. #define MIN(a,b) (((a)<(b))?(a):(b))
  209. #ifdef ROUND
  210. #undef ROUND
  211. #endif            /* round double to nearest integer (as double) */
  212. #define ROUND(x) (((x)-(floor(x)))>=0.5?ceil(x):floor(x))
  213. #define STREQ(a,b) (strcmp(a,b)==0)
  214. #ifdef INFINITY
  215. #undef INFINITY
  216. #endif            /* something very big (but that will fit in a long) */
  217. #define INFINITY (2000000000)
  218. #define SUNDAY (0)
  219. #define MONDAY (1)
  220. #define TUESDAY (2)
  221. #define WEDNESDAY (3)
  222. #define THURSDAY (4)
  223. #define FRIDAY (5)
  224. #define SATURDAY (6)
  225. #define ISLEAPFEB(m,y) (((m)==1)&&(((y)%4)==0))  /* Feb in leap year */
  226. #define ISLEAPJF(m,y) (((m)<=1)&&(((y)%4)==0))  /* Jan or Feb in leap year */
  227. /* NB Every 4th year from 1901 to 2099 is a leap year */
  228. #define MAGICNO(x,s,b) {register unsigned char *r; \
  229.             for(x = 0, r = (unsigned char *)s; *r != '\0'; r++) { \
  230.               x = (x << 1) + (int)(*r); \
  231.               while (x >= (b)) \
  232.                 x -= b; }}
  233. /* magicno as macro not fn. for speed, tho' appears to make little diff. */
  234. /* x is answer, s is string to be magicked, b is base (no, of hash bins) */
  235.  
  236. #define DOMHASHSIZE (1354)
  237. /* = 2 * 26^2 + 2 by description of domain algorithm */
  238. #define NO_ERRS (34)   /* how many error types there are (in init.c) */
  239. #define MAXERRLENGTH (40)  /* the longest one */
  240. #define NO_STATUS (22) /* how many status codes are defined */
  241. #define MAXSTATUSLENGTH (35)
  242. #define NOLNGSTRS (149) /* how many lngstr's */
  243.  
  244. enum {weekbeg_, month_, day_, days_, hr_, minute_, minutes_, second_, seconds_,
  245.     byte_, bytes_, request_, requests_, date_, file_, host_, dir_, dom_,
  246.     ext_, url_, browser_, nr_, description_, webstatsfor_, monthrep_,
  247.     weekrep_, daysum_, dayrep_, hourrep_, hoursum_, hostrep_, hostgs_,
  248.     hostgp_, hostgen_, dirrep_, dirgs_, dirgp_, dirgen_, typerep_, extgs_,
  249.     extgp_, extgen_, reqrep_, filegs_, filegp_, filegen_, refrep_, refgs_,
  250.     refgp_, refgen_, browsum_, browgs_, browgp_, browgen_, browrep_,
  251.     domrep_, domgs_, domgp_, domgen_, subdomgs_, subdomgp_, subdomgen_,
  252.     credit_, runtime_, lessone_, dirlevel_, eachunit_, represents_,
  253.     partof_, pagereq_, pagereqs_, statrep_, errrep_, allerrs_, allerrs1_,
  254.     allerrsn_, occsort_, errtype_, progstart_, localtime_, reqstart_, to_,
  255.     succreqs_, avereqs_, totpages_, avepages_, totfails_, totredirs_,
  256.     distfiles_, disthosts_, approxhosts_, newhosts_, approxnewhosts_,
  257.     corrupt_, unwanted_, totdata_, avedata_, brackets_, sevendaysto_,
  258.     lastsevendays_, goto_, top_, nreqs_, preqs_, noccs_, poccs_, npgs_,
  259.     ppgs_, nbytes_, pbytes_, firstsm_, firstsf_, firstsn_, firstdsm_,
  260.     firstdsf_, firstdsn_, allsm_, allsf_, allsn_, atleast_, ptraffic_,
  261.     btraffic_, sortedms_, sortedfs_, sortedns_, sortedmp_, sortedfp_,
  262.     sortednp_, traffic_, ppages_, npages_, prequests_, nrequests_,
  263.     alphasortms_, alphasortfs_, alphasortns_, alphasortmp_,    alphasortfp_,
  264.     alphasortnp_, unsortedms_, unsortedfs_, unsortedns_, unsortedmp_,
  265.     unsortedfp_, unsortednp_, colon_, datefmt0_, datefmt1_,    datefmt2_};
  266.  
  267. /*** Now include the user-definable header things ***/
  268.  
  269. #include "analhead.h"
  270.  
  271. /*** Next some global structures ***/
  272.  
  273. typedef int flag;
  274.  
  275. struct timestruct {        /* some things we might want to know about a
  276.                   particular time */
  277.   int date;                /* the day of the month */
  278.   int monthno;             /* 0 for Jan, ... , 11 for Dec */
  279.   int year;                /* 4 digits */
  280.   int hr;                  /* 0 to 23 */
  281.   int min;                 /* 0 to 59 */
  282.   long code;               /* an increasing (but not linear) function of time,
  283.                   for quick comparisons. Defined in timecode(). */
  284. };
  285.  
  286. struct monthly {           /* a structure for a year's worth of monthly data */
  287.   int reqs[12];            /* the number of requests on each month */
  288.   int pages[12];           /* and page requests ditto */
  289.   double bytes[12];        /* and bytes ditto */
  290.   struct monthly *next;    /* where the next year's data is */
  291. };
  292.  
  293. struct daily {             /* similarly, for a month's worth of daily data */
  294.   int reqs[31];            /* NB Day n is stored in location (n - 1) */
  295.   int pages[31];
  296.   double bytes[31];
  297.   struct daily *next;
  298. };
  299.  
  300. struct hourly {            /* and for a day's worth of hourly data */
  301.   int reqs[24];
  302.   int pages[24];
  303.   double bytes[24];
  304.   struct hourly *next;
  305. };
  306.  
  307. struct weekly {             /* a structure for weekly data */
  308.   int reqs;
  309.   int pages;
  310.   double bytes;
  311.   struct timestruct start;  /* the start of the week */
  312.   struct weekly *next;
  313. };
  314.  
  315. struct genstruct {           /* relevant information about an object */
  316.   char *name;                /* its name as it appears in the logfile */
  317.   char *alias;               /* its name translated, if different */
  318.   int reqs;                  /* its number of requests */
  319.   int pages;                 /* and page requests due to it */
  320.   double bytes;              /* the number of bytes transferred due to it */
  321.   flag pre7;                 /* has been used before last 7 days? */
  322.   flag last7;                /* has been used in the last 7 days? */
  323.   flag wanted;               /* is this item included or excluded? */
  324.   flag ispage;               /* is this item a page? */
  325.   struct genstruct *next;    /* the next object in the list */
  326. };
  327.  
  328. struct dnscache {            /* information about DNS lookups */
  329.   char *number;              /* the numerical IP address */
  330.   char *alias;               /* the translation (or NULL if unresolvable) */
  331.   time_t altimecode;         /* the time at which its alias was looked up */
  332.   struct dnscache *next;
  333. };
  334.  
  335. struct domain {              /* and domains */
  336.   char *id;                  /* can be as long as host for subdomains */
  337.   char *revid;               /* same reversed */
  338.   char *name;                /* the geographical location of the domain */
  339.   int reqs;
  340.   int pages;
  341.   double bytes;
  342.   int nexti;                 /* the index of the next domain alphabetically */
  343.   struct domain *next;       /* the next subdomain of the current domain */
  344. };
  345.  
  346. struct alias {      /* aliases from the configuration file */
  347.   char from[MAXSTRINGLENGTH];
  348.   char to[MAXSTRINGLENGTH];
  349.   struct alias *next;
  350. };
  351.  
  352. struct include {   /* a list of included/excluded things */
  353.   char name[MAXSTRINGLENGTH];
  354.   int in;           /* TRUE, FALSE or UNSET */
  355.   struct include *next;
  356. };
  357.  
  358. struct loglist {   /* a list of logfiles */
  359.   char name[MAXSTRINGLENGTH];
  360.   char prefix[MAXSTRINGLENGTH];
  361.   struct loglist *next;
  362. };
  363.  
  364. struct stringlist {   /* a simple list of strings */
  365.   char name[MAXSTRINGLENGTH];
  366.   struct stringlist *next;
  367. };
  368.  
  369. /*** Finally, a list of all the functions defined in analog ***/
  370. /* in alias.c */
  371. extern flag doaliaslist(char *name, struct alias *listhead);
  372. #ifndef NODNS
  373. extern flag dnsresolve(char *hostn);
  374. #endif
  375. extern int doaliashost(char *hostn);
  376. extern char *reversehostname(char *hostn);
  377. extern int doaliasfile(char *filename);
  378. extern int doaliasref(char *name);
  379. extern int doalias(char *name, char codeletter);
  380. extern void allaliases(struct genstruct **objhead,
  381.   struct genstruct **objhead2, size_t hashsize, int *totalobjs,
  382.   int *totalobjs7, int *totalnew7, char code);
  383. extern int hosttodomcode(char *hostn);
  384. extern void urltodir(char *filename);
  385. extern char *urltoext(char *filename);
  386. extern flag included(char *name, flag ispage, struct include *listhead);
  387. extern flag itemwanted(char *name, flag ispage, char codeletter);
  388. /* in analog.c -- only main() */
  389. /* in formgen.c */
  390. extern void genopts(FILE *outf, char name[17], char plural[16], int sortby,
  391.   char codeletter);
  392. extern void repchoice(FILE *outf, char name[MAXSTRINGLENGTH], char codeletter,
  393.   flag qq);
  394. extern void formgen(void);
  395. /* in hash.c */
  396. extern struct genstruct *hashadd(struct genstruct **objhead, size_t hashsize,
  397.   char *name, int reqs, double bytes, int pages, flag last7q, int *totalobjs,
  398.   int *totalobjs7, int *totalnew7, flag al, flag maskq, flag ispage,
  399.   struct genstruct *freespace, int magicnumber, char codeletter);
  400. extern struct dnscache *dnshashadd(char *number, char *alias,
  401.   time_t altimecode);
  402. extern void domhashadd(char *hostn, int reqs, int pages, double bytes);
  403. extern void subdomadd(char *id, char *name);
  404. extern void addref(char *fromurl, char *filename, flag ispage, double bytes,
  405.   flag last7q, flag filemaskq);
  406. extern void addbrowser(char *browser, flag ispage, double bytes, flag last7q);
  407. extern void adderr(char *errstr);
  408. extern flag approxhostfilled(char *space, unsigned int i);
  409. extern void approxhostfill(char *space, unsigned int i);
  410. extern void approxhosthashadd(char *hostn, flag last7q);
  411. extern void addmonthlydata(int year, int monthno, int reqs, int pages,
  412.   double bytes);
  413. extern void adddailydata(int year, int monthno, int date, int reqs, int pages,
  414.   double bytes);
  415. extern void addhourlydata(int year, int monthno, int date, int hr, int reqs,
  416.   int pages, double bytes);
  417. extern void addweeklydata(int year, int monthno, int date, int reqs, int pages,
  418.   double bytes);
  419. extern void datehash(int year, int monthno, int date, int hr, int min,
  420.   long thistimecode, int reqs, int pages, double bytes);
  421. extern void errsort(int errorder[NO_ERRS]);
  422. extern double bytefloor(double bytes, char *str);
  423. extern int reqfloor(int reqs, char *str);
  424. extern struct genstruct *gensort(struct genstruct **objhead, size_t hashsize,
  425.   int tot_reqs, int tot_pages, double tot_bytes, int sortby, char *minreqstr,
  426.   char *minpagestr, char *minbytestr, struct include *includehead,
  427.   flag alphahost, int *maxreqs, int *maxpages, double *maxbytes,
  428.   int *maxlength);
  429. extern int domsort(void);
  430. extern void subdomsort(void);
  431. /* in init.c */
  432. extern void defaults(void);
  433. extern void init_structs(void);
  434. extern void othervars(void);
  435. extern void configline(char inputline[MAXLINELENGTH]);
  436. extern flag config(char *filename);
  437. extern void commandline(int argc, char **argv);
  438. extern void initialise(int argc, char **argv);
  439. extern void pvfiletest(char *name);
  440. extern void pvfilelist(struct stringlist *head,
  441.   char filetype[MAXSTRINGLENGTH]);
  442. extern void printvbles(void);
  443. /* in init2.c */
  444. extern void domainscan(void);
  445. extern void dnscachescan(void);
  446. extern void configwarning(char *comname, char *inputline);
  447. extern void configwarning2(char *inputline);
  448. extern void configwarning3(char *comname, char *inputline);
  449. extern void addonelogfile(struct loglist **p, char name[MAXSTRINGLENGTH],
  450.   char prefix[MAXSTRINGLENGTH]);
  451. extern void addwildlogs(struct loglist **p, char name[MAXSTRINGLENGTH],
  452.   char prefix[MAXSTRINGLENGTH]);
  453. extern void addlogfile(struct loglist **p, char name[MAXSTRINGLENGTH],
  454.   char prefix[MAXSTRINGLENGTH], flag wildexpand);
  455. extern void includeone(char *name, struct include **p, struct include *head,
  456.   int in, char *comname, char *inputline);
  457. extern void include(char *name, struct include **p, struct include *head,
  458.   int in, char *comname, char *inputline, int rc, flag *maskq);
  459. extern void configalias(char *from, char *to, struct alias **p, char *comname,
  460.   char *inputline, int rc);
  461. extern void fromtodate(char *tstr, struct timestruct *t, flag from,
  462.   char *comname, char *inputline, int rc);
  463. extern void configstr(char *name, char *target, char *comname, char *inputline,
  464.   int rc);
  465. extern void addonestrlist(struct stringlist **p, char *name);
  466. extern void addwildstrlist(struct stringlist **p, char *name);
  467. extern void configstrlist(char *name, struct stringlist **p, char *comname,
  468.   char *inputline, int rc, flag wildexpand);
  469. extern void configcols(char *cols, char *target, char *comname,
  470.   char *inputline, int rc);
  471. extern void configchar(char *str, char *target, char *comname, char *inputline,
  472.   int rc);
  473. extern void configint(char *number, int *target, char *comname,
  474.   char *inputline, int rc);
  475. extern void configsizet(char *number, size_t *target, char *comname,
  476.   char *inputline, int rc);
  477. extern void configsortby(char *method, int *target, char *comname,
  478.   char *inputline, int rc);
  479. extern void onoff(char *method, flag *target, char *comname, char *inputline,
  480.   int rc);
  481. extern void clflag(flag *f, char *arg);
  482. extern void cldaterep(flag *f, char *graph, char *arg);
  483. extern void clgenrep(flag *f, int *sortby, char *minreqstr, char *minpagestr,
  484.   char *minbytestr, char *arg);
  485. extern flag clfile(char *filename, char *arg);
  486. extern void alias_to_lower(struct alias *head);
  487. extern void include_to_lower(struct include *head);
  488. extern void pvcols(char *cols);
  489. extern void pvtime(char name[15], flag q, char graph, int unit, char cols[],
  490.   int rows);
  491. extern void pvgen(char name[17], flag q, int sortby, char *minreqstr,
  492.   char *minpagestr, char *minbytestr, char cols[], char singular[20],
  493.   char plural[21], char gender);
  494. extern void pvinout(char name[14], struct include *head);
  495. extern void pvalias(char name[8], struct alias *head);
  496. /* in macstuff.c */
  497. #ifdef MAC_EVENTS
  498. extern void MacInit(void);
  499. extern void MacFini(void);
  500. extern void MacIdle(void);
  501. #endif
  502. #ifdef MAC
  503. #ifndef NODNS
  504. extern int IpAddr2Name(char *hostname);
  505. extern void ResolverCleanup(void);
  506. #endif
  507. #endif
  508. /* in output.c */
  509. extern void output(struct genstruct *rsorthead, struct genstruct *isorthead,
  510.   struct genstruct *tsorthead, struct genstruct *Ssorthead, int firstdom,
  511.   struct genstruct *fsorthead, struct genstruct *bsorthead,
  512.   struct genstruct *Bsorthead, int errorder[]);
  513. /* in output2.c */
  514. extern void gotos(FILE *outf, char c);
  515. extern void htmlputc(char c, FILE *outf);
  516. extern void htmlfprintf(FILE *outf, char string[MAXSTRINGLENGTH]);
  517. extern size_t htmlstrlen(char *s);
  518. extern void matchlength(FILE *outf, char *s, char c);
  519. extern size_t datefmtlen(char *fmt);
  520. extern void dateprintf(FILE *outf, char *fmt, int date, int month, int year,
  521.   int hr, int min);
  522. extern double finddivider(double bytes, char *bprefix);
  523. extern void asciiline(FILE *outf);
  524. extern void barplot(FILE *outf, int n);
  525. extern void precols(FILE *outf, char *wantcols, char codeletter, flag byq,
  526.   flag pageq);
  527. extern void printcolheads(FILE *outf, char *wantcols, int fieldwidth,
  528.   int pfieldwidth, int bfieldwidth, char bprefix[2], char name[20], int width,
  529.   char type, flag byq, flag pageq, flag name1st);
  530. extern void printcols(FILE *outf, char *wantcols, int reqs, int pages,
  531.   double bytes, int fieldwidth, int pfieldwidth, int bfieldwidth,
  532.   double bdivider, int totreqs, int totpages, double totbytes, char type,
  533.   flag byq, flag pageq);
  534. extern int whatincluded(FILE *outf, int sortby, char *minreqstr,
  535.   char *minpagestr, char *minbytestr, char singular[27], char plural[29],
  536.   flag subdoms, char gender);
  537. extern int whatincludednop(int sortby, char *minreqstr, char *minpagestr,
  538.   char *minbytestr);
  539. extern void genout(FILE *outf, struct genstruct *sorthead, int tot_reqs,
  540.   int tot_pages, double tot_bytes, int sortby, char *minreqstr,
  541.   char *minpagestr, char *minbytestr, int max_reqs, int max_pages,
  542.   double max_bytes, char *wantcols, char anchor[10], char title[36],
  543.   char singular[22], char plural[24], char colhead[24], char gender,
  544.   char codeletter, flag alphahost, flag byq, flag pageq, struct include *links,
  545.   struct alias *aka, char baseurl[MAXSTRINGLENGTH]);
  546. extern void domout(FILE *outf, int firstdom);
  547. extern void datehead(FILE *outf, int maxreq, int maxpages, double maxbytes,
  548.   char *wantcols, char *graphtype, char anchor[11], char title[21],
  549.   char colhead[13], int colwidth, char codeletter, int *unit,
  550.   int *fieldwidth, int *pfieldwidth, int *bfieldwidth, int *graphwidth,
  551.   double *bdivider);
  552. extern void dateline(FILE *outf, int reqs, int pages, double bytes,
  553.   char *wantcols, char graphtype, int fieldwidth, int pfieldwidth,
  554.   int bfieldwidth, int unit, double bdivider);
  555. extern void statusout(FILE *outf);
  556. extern void errout(FILE *outf, int errorder[NO_ERRS]);
  557. extern void gensum(FILE *outf);
  558. /* in sscanf.c */
  559. extern int sscanf_date(char *inputline, int *date, int *monthno, int *year,
  560.   int *hr, int *min);
  561. extern int sscanf_olddate(char *inputline, int *date, int *monthno, int *year,
  562.   int *hr, int *min);
  563. extern int sscanf_common(char *inputline, char hostn[MAXSTRINGLENGTH],
  564.   int *date, int *monthno, int *year, int *hr, int *min,
  565.   char filename[MAXSTRINGLENGTH], char referrer[MAXSTRINGLENGTH],
  566.   char agent[MAXSTRINGLENGTH], int *code, char bytestr[16], size_t preflength);
  567. extern int sscanf_ncsaold(char *inputline, char hostn[MAXSTRINGLENGTH],
  568.   int *monthno, int *date, int *hr, int *min, int *year,
  569.   char filename[MAXSTRINGLENGTH], size_t preflength);
  570. extern int sscanf_domains(char *inputline, char string1[MAXSTRINGLENGTH],
  571.   char string2[MAXSTRINGLENGTH]);
  572. extern int sscanf_config(char *inputline, char string1[MAXSTRINGLENGTH],
  573.   char string2[MAXSTRINGLENGTH], char string3[MAXSTRINGLENGTH]);
  574. extern int sscanf_referrer(char *inputline, int *date, int *monthno, int *year,
  575.   int *hr, int *min, char from[MAXSTRINGLENGTH], char to[MAXSTRINGLENGTH]);
  576. #ifdef WEBSTAR
  577. extern int sscanf_webstar(char *inputline, char hostn[MAXSTRINGLENGTH],
  578.   int *date, int *monthno, int *year, int *hr, int *min,
  579.   char filename[MAXSTRINGLENGTH], char referrer[MAXSTRINGLENGTH],
  580.   char agent[MAXSTRINGLENGTH], int *code, char bytestr[16], size_t preflength);
  581. #endif
  582. #ifdef NETPRESENZ
  583. typedef enum { NP_HTTP, NP_GOPHER, NP_ADMIN, NP_FTP, NP_GETFILE, NP_GETDIR,
  584.          NP_LOGIN, NP_LOGOUT, NP_CGI, NP_ERROR } NP_type;
  585. typedef struct { char *str; NP_type value; } MatchPairs;
  586. extern NP_type checkValue(char *typeStr, const MatchPairs table[]);
  587. extern NP_type checkType(char *typeStr);
  588. extern void build_agent(char agent[MAXSTRINGLENGTH], NP_type entryType,
  589.   char *entryTypeStr, NP_type actionType, char *actionTypeStr);
  590. extern int readDigits(char **from);
  591. extern int scan_path(char *inputline, char filename[MAXSTRINGLENGTH],
  592.   int maxlen, struct include *expandhead);
  593. extern int sscanf_netpresenz(FILE *logfile, char *inputline,
  594.   char hostn[MAXSTRINGLENGTH], int *date, int *monthno, int *year, int *hr,
  595.   int *min, char filename[MAXSTRINGLENGTH], char referer[MAXSTRINGLENGTH],
  596.   char agent[MAXSTRINGLENGTH], int *code, char bytestr[16], size_t preflength);
  597. #endif
  598. /* in utils.c */
  599. extern flag matchq(char *string, char *pattern, flag whole);
  600. extern flag wildmatch(char *string, char *pattern, char **w1, char **w2);
  601. extern int strtomonth(char month[4]);
  602. extern int dayofdate(int date, int monthno, int year);
  603. extern int minsbetween(int date1, int monthno1, int year1, int hr1, int min1,
  604.   int date2, int monthno2, int year2, int hr2, int min2);
  605. extern long timecode(int date, int monthno, int year, int hr, int min);
  606. extern struct timestruct startofweek(struct timestruct atime);
  607. extern FILE *fopenlog(char *name, char logtype[14], flag *ispipe);
  608. extern int fcloselog(FILE *f, char *name, char logtype[14], flag ispipe);
  609. extern void int3printf(FILE *outf, int x, char sepchar, int fieldwidth);
  610. extern void double3printf(FILE *outf, double x, char sepchar, int fieldwidth);
  611. extern void doublefprintf(FILE *outf, double x);
  612. extern void *xmalloc(size_t size);
  613. extern void *xcalloc(size_t nelem, size_t elsize);
  614. extern char *strtolower(char *string);
  615. extern flag strtolowerf(char *string);
  616. extern char *strtoupper(char *string);
  617. extern int hoststrcmp(char *hostn1, char *hostn2);
  618. extern flag isnumeric(char *name);
  619. #endif  /* not previously included */
  620.