1 /* $LynxId: LYUtils.h,v 1.91 2012/02/09 18:55:26 tom Exp $ */
2 #ifndef LYUTILS_H
3 #define LYUTILS_H
4 
5 #include <LYCharVals.h>		/* S/390 -- gil -- 2149 */
6 #include <LYKeymap.h>
7 
8 #ifndef HTLIST_H
9 #include <HTList.h>
10 #endif /* HTLIST_H */
11 
12 #ifndef HTSTREAM_H
13 #include <HTStream.h>
14 #endif /* HTSTREAM_H */
15 
16 #ifdef VMS
17 #include <HTFTP.h>
18 #include <HTVMSUtils.h>
19 #endif /* VMS */
20 
21 #if defined(USE_DOS_DRIVES)
22 #include <HTDOS.h>
23 #endif
24 
25 #if defined(SYSLOG_REQUESTED_URLS)
26 #include <syslog.h>
27 #endif
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 #ifdef VMS
33 #define HTSYS_name(path)   HTVMS_name("", path)
34 #define HTSYS_purge(path)  HTVMS_purge(path)
35 #define HTSYS_remove(path) HTVMS_remove(path)
36 #endif				/* VMS */
37 #if defined(USE_DOS_DRIVES)
38 #define HTSYS_name(path) HTDOS_name(path)
39 #endif
40 #ifndef HTSYS_name
41 #define HTSYS_name(path) path
42 #endif
43 #ifndef HTSYS_purge
44 #define HTSYS_purge(path)	/* nothing */
45 #endif
46 #ifndef HTSYS_remove
47 #define HTSYS_remove(path) remove(path)
48 #endif
49 #define LYIsPipeCommand(s) ((s)[0] == '|')
50 #ifdef VMS
51 #define TTY_DEVICE "tt:"
52 #define NUL_DEVICE "nl:"
53 #define LYIsNullDevice(s) (!strncasecomp(s, "nl:", 3) || !strncasecomp(s, "/nl/", 4))
54 #define LYSameFilename(a,b) (!strcasecomp(a,b))
55 #define LYSameHostname(a,b) (!strcasecomp(a,b))
56 #else
57 #if defined(DOSPATH) || defined(__EMX__)
58 #define TTY_DEVICE "con"
59 #define NUL_DEVICE "nul"
60 #define LYIsNullDevice(s) LYSameFilename(s,NUL_DEVICE)
61 #define LYSameFilename(a,b) (!strcasecomp(a,b))
62 #define LYSameHostname(a,b) (!strcasecomp(a,b))
63 #else
64 #if defined(__CYGWIN__)
65 #define TTY_DEVICE "/dev/tty"
66 #define NUL_DEVICE "/dev/null"
67 #define LYIsNullDevice(s) LYSameFilename(s,NUL_DEVICE)
68 #define LYSameFilename(a,b) (!strcasecomp(a,b))
69 #define LYSameHostname(a,b) (!strcasecomp(a,b))
70 #else
71 #define TTY_DEVICE "/dev/tty"
72 #define NUL_DEVICE "/dev/null"
73 #define LYIsNullDevice(s) LYSameFilename(s,NUL_DEVICE)
74 #define LYSameFilename(a,b) (!strcmp(a,b))
75 #define LYSameHostname(a,b) (!strcmp(a,b))
76 #endif				/* __CYGWIN__ */
77 #endif				/* DOSPATH */
78 #endif				/* VMS */
79 /* See definitions in src/LYCharVals.h.  The hardcoded values...
80    This prohibits binding C-c and C-g.  Maybe it is better to remove this? */
81 #define LYCharIsINTERRUPT_HARD(ch)	\
82   ((ch) == LYCharINTERRUPT1 || ch == LYCharINTERRUPT2)
83 #define LYCharIsINTERRUPT(ch)		\
84   (LYCharIsINTERRUPT_HARD(ch) || LKC_TO_LAC(keymap,ch) == LYK_INTERRUPT)
85 #define LYCharIsINTERRUPT_NO_letter(ch)	\
86   (LYCharIsINTERRUPT(ch) && !isprint(ch))
87 #if defined(USE_DOS_DRIVES)
88 #define PATHSEP_STR "\\"
89 #define LYIsPathSep(ch) ((ch) == '/' || (ch) == '\\')
90 #define LYIsDosDrive(s) (isalpha(UCH((s)[0])) && (s)[1] == ':')
91 #else
92 #define PATHSEP_STR "/"
93 #define LYIsPathSep(ch) ((ch) == '/')
94 #define LYIsDosDrive(s) FALSE	/* really nothing */
95 #endif
96 #ifdef USE_ADDRLIST_PAGE
97 #define LYIsListpageTitle(name) \
98     (!strcmp((name), LIST_PAGE_TITLE) || \
99      !strcmp((name), ADDRLIST_PAGE_TITLE))
100 #else
101 #define LYIsListpageTitle(name) \
102     (!strcmp((name), LIST_PAGE_TITLE))
103 #endif
104 #define LYIsTilde(ch)     ((ch) == '~')
105 #define LYIsHtmlSep(ch) ((ch) == '/')
106 #define findPoundSelector(address) strchr(address, '#')
107 #define restorePoundSelector(pound) if ((pound) != NULL) *(pound) = '#'
108     extern BOOL strn_dash_equ(const char *p1, const char *p2, int len);
109     extern BOOLEAN LYAddSchemeForURL(char **AllocatedString, const char *default_scheme);
110     extern BOOLEAN LYCachedTemp(char *result, char **cached);
111     extern BOOLEAN LYCanDoHEAD(const char *address);
112     extern BOOLEAN LYCanReadFile(const char *name);
113     extern BOOLEAN LYCanWriteFile(const char *name);
114     extern BOOLEAN LYCloseInput(FILE *fp);
115     extern BOOLEAN LYCloseOutput(FILE *fp);
116     extern BOOLEAN LYExpandHostForURL(char **AllocatedString,
117 				      char *prefix_list, char *suffix_list);
118     extern BOOLEAN LYFixCursesOnForAccess(const char *addr, const char *physical);
119     extern BOOLEAN LYPathOffHomeOK(char *fbuffer, size_t fbuffer_size);
120     extern BOOLEAN LYValidateFilename(bstring **result, bstring **given);
121     extern BOOLEAN LYisAbsPath(const char *path);
122     extern BOOLEAN LYisLocalAlias(const char *filename);
123     extern BOOLEAN LYisLocalFile(const char *filename);
124     extern BOOLEAN LYisLocalHost(const char *filename);
125     extern BOOLEAN LYisRootPath(const char *path);
126     extern BOOLEAN inlocaldomain(void);
127     extern FILE *InternalPageFP(char *filename, int reuse_flag);
128     extern FILE *LYAppendToTxtFile(const char *name);
129     extern FILE *LYNewBinFile(const char *name);
130     extern FILE *LYNewTxtFile(const char *name);
131     extern FILE *LYOpenScratch(char *result, const char *prefix);
132     extern FILE *LYOpenTemp(char *result, const char *suffix, const char *mode);
133     extern FILE *LYOpenTempRewrite(char *result, const char *suffix, const char *mode);
134     extern FILE *LYReopenTemp(char *name);
135     extern char *Current_Dir(char *pathname);
136     extern char *LYAbsOrHomePath(char **fname);
137     extern char *LYAddPathToSave(char *fname);
138     extern char *LYGetEnv(const char *name);
139     extern char *LYLastPathSep(const char *path);
140     extern char *LYPathLeaf(char *pathname);
141     extern char *LYTildeExpand(char **pathname, int embedded);
142     extern char *LYgetXDisplay(void);
143     extern char *strip_trailing_slash(char *my_dirname);
144     extern char *trimPoundSelector(char *address);
145     extern const char *Home_Dir(void);
146     extern const char *LYGetHiliteStr(int cur, int count);
147     extern const char *LYSysShell(void);
148     extern const char *index_to_restriction(unsigned inx);
149     extern const char *wwwName(const char *pathname);
150     extern int HTCheckForInterrupt(void);
151     extern int LYConsoleInputFD(int need_selectable);
152     extern int LYCopyFile(char *src, char *dst);
153     extern int LYGetHilitePos(int cur, int count);
154     extern int LYRemoveTemp(char *name);
155     extern int LYReopenInput(void);
156     extern int LYSystem(char *command);
157     extern int LYValidateOutput(char *filename);
158     extern int find_restriction(const char *name, int len);
159     extern int number2arrows(int number);
160     extern size_t utf8_length(int utf_flag, const char *data);
161     extern time_t LYmktime(char *string, int absolute);
162     extern void BeginInternalPage(FILE *fp0, const char *Title, const char *HelpURL);
163     extern void EndInternalPage(FILE *fp0);
164     extern void HTAddSugFilename(char *fname);
165     extern void HTSugFilenames_free(void);
166     extern void LYAddHilite(int cur, char *text, int x);
167     extern void LYAddHtmlSep(char **path);
168     extern void LYAddHtmlSep0(char *path);
169     extern void LYAddLocalhostAlias(char *alias);
170     extern void LYAddPathSep(char **path);
171     extern void LYAddPathSep0(char *path);
172     extern void LYAddPathToHome(char *fbuffer, size_t fbuffer_size, const char *fname);
173     extern void LYCheckBibHost(void);
174     extern void LYCheckMail(void);
175     extern void LYCleanupTemp(void);
176     extern void LYCloseTemp(char *name);
177     extern void LYCloseTempFP(FILE *fp);
178     extern void LYConvertToURL(char **AllocatedString, int fixit);
179     extern void LYDoCSI(char *url, const char *comment, char **csi);
180     extern void LYEnsureAbsoluteURL(char **href, const char *name, int fixit);
181     extern void LYFakeZap(int set);
182     extern void LYFixCursesOn(const char *reason);
183     extern void LYFreeHilites(int first, int last);
184     extern void LYFreeStringList(HTList *list);
185     extern void LYLocalFileToURL(char **target, const char *source);
186     extern void LYLocalhostAliases_free(void);
187     extern void LYRenamedTemp(char *oldname, char *newname);
188     extern void LYSetHilite(int cur, const char *text);
189     extern void LYTrimHtmlSep(char *path);
190     extern void LYTrimPathSep(char *path);
191     extern void LYTrimRelFromAbsPath(char *path);
192     extern void LYhighlight(int flag, int cur, const char *target);
193     extern void LYmsec_delay(unsigned msec);
194     extern void LYsetXDisplay(char *new_display);
195     extern void WriteInternalTitle(FILE *fp0, const char *Title);
196     extern void WriteStreamTitle(HTStream *target, const char *Title);
197     extern void change_sug_filename(char *fname);
198     extern void convert_to_spaces(char *string, int condense);
199     extern void free_and_clear(char **obj);
200     extern void noviceline(int more_flag);
201     extern void parse_restrictions(const char *s);
202     extern void print_restrictions_to_fd(FILE *fp);
203     extern void remove_backslashes(char *buf);
204     extern void size_change(int sig);
205     extern void statusline(const char *text);
206     extern void toggle_novice_line(void);
207 
208 #if defined(MULTI_USER_UNIX)
209     extern BOOL IsOurFile(const char *name);
210 #else
211 #define IsOurFile(name) TRUE
212 #endif
213 
214 #ifdef USE_ASCII_CTYPES
215     extern int ascii_tolower(int i);
216     extern int ascii_toupper(int i);
217     extern int ascii_isupper(int i);
218 #endif
219 
220 #ifdef __CYGWIN__
221     extern int Cygwin_Shell(void);
222 #endif
223 
224 #if defined(_WIN_CC) || defined(WIN_EX)
225     extern int exec_command(char *cmd, int wait_flag);	/* xsystem.c */
226     extern char *quote_pathname(char *pathname);
227     extern int xsystem(char *cmd);
228 #endif
229 
230 /* Keeping track of User Interface Pages: */
231     typedef enum {
232 	UIP_UNKNOWN = -1
233 	,UIP_HISTORY = 0
234 	,UIP_DOWNLOAD_OPTIONS
235 	,UIP_PRINT_OPTIONS
236 	,UIP_SHOWINFO
237 	,UIP_LIST_PAGE
238 	,UIP_VLINKS
239 	,UIP_LYNXCFG
240 	,UIP_OPTIONS_MENU
241 	,UIP_DIRED_MENU
242 	,UIP_PERMIT_OPTIONS
243 	,UIP_UPLOAD_OPTIONS
244 	,UIP_ADDRLIST_PAGE
245 	,UIP_CONFIG_DEF
246 	,UIP_TRACELOG
247 	,UIP_INSTALL
248     } UIP_t;
249 
250 #define UIP_P_FRAG 0x0001	/* flag: consider "url#frag" as matching "url" */
251 
252     extern BOOL LYIsUIPage3(const char *url, UIP_t type, int flagparam);
253 
254 #define LYIsUIPage(url,type) LYIsUIPage3(url, type, UIP_P_FRAG)
255     extern void LYRegisterUIPage(const char *url, UIP_t type);
256 
257 #define LYUnRegisterUIPage(type) LYRegisterUIPage(NULL, type)
258     extern void LYUIPages_free(void);
259 
260 #ifdef CAN_CUT_AND_PASTE
261     extern int put_clip(const char *szBuffer);
262 
263 /* get_clip_grab() returns a pointer to the string in the system area.
264    get_clip_release() should be called ASAP after this. */
265     extern char *get_clip_grab(void);
266     extern void get_clip_release(void);
267 
268 #  ifdef WIN_EX
269 #    define size_clip()	8192
270 #  else
271     extern int size_clip(void);
272 
273 #  endif
274 #endif
275 
276 #if defined(WIN_EX)		/* 1997/10/16 (Thu) 20:13:28 */
277     extern char *HTDOS_short_name(const char *path);
278     extern char *w32_strerror(DWORD ercode);
279 #endif
280 
281 #if defined(WIN_EX) || defined(__CYGWIN__)	/* 2000/03/07 (Tue) 17:17:46 */
282     extern int unsafe_filename(const char *fname);
283     extern FILE *safe_fopen(const char *fname, const char *mode);
284 #endif
285 
286 #ifdef VMS
287     extern void Define_VMSLogical(char *LogicalName, char *LogicalValue);
288 #endif				/* VMS */
289 
290 #if ! HAVE_PUTENV
291     extern int putenv(const char *string);
292 #endif				/* HAVE_PUTENV */
293 
294 #if defined(MULTI_USER_UNIX)
295     extern void LYRelaxFilePermissions(const char *name);
296 
297 #else
298 #define LYRelaxFilePermissions(name)	/* nothing */
299 #endif
300 
301 #if defined(_WINDOWS)
302     extern int win32_check_interrupt(void);
303 #endif
304 
305 /*
306  *  Whether or not the status line must be shown.
307  */
308     extern BOOLEAN mustshow;
309 
310 #define _statusline(msg)	mustshow = TRUE, statusline(msg)
311 
312 /*
313  *  For is_url().
314  *
315  *  Universal document id types (see LYCheckForProxyURL)
316  */
317     typedef enum {
318 	NOT_A_URL_TYPE = 0,
319 	UNKNOWN_URL_TYPE = 1,	/* must be nonzero */
320 
321 	HTTP_URL_TYPE,
322 	FILE_URL_TYPE,
323 	FTP_URL_TYPE,
324 	NCFTP_URL_TYPE,
325 	WAIS_URL_TYPE,
326 	NEWS_URL_TYPE,
327 	NNTP_URL_TYPE,
328 	TELNET_URL_TYPE,
329 	TN3270_URL_TYPE,
330 	RLOGIN_URL_TYPE,
331 	GOPHER_URL_TYPE,
332 	HTML_GOPHER_URL_TYPE,
333 	TELNET_GOPHER_URL_TYPE,
334 	INDEX_GOPHER_URL_TYPE,
335 	MAILTO_URL_TYPE,
336 	BIBP_URL_TYPE,
337 	FINGER_URL_TYPE,
338 	CSO_URL_TYPE,
339 	HTTPS_URL_TYPE,
340 	SNEWS_URL_TYPE,
341 	PROSPERO_URL_TYPE,
342 	AFS_URL_TYPE,
343 
344 	DATA_URL_TYPE,
345 
346 	LYNXCGI_URL_TYPE,
347 	LYNXEXEC_URL_TYPE,
348 	LYNXPROG_URL_TYPE,
349 
350 	NEWSPOST_URL_TYPE,
351 	NEWSREPLY_URL_TYPE,
352 	SNEWSPOST_URL_TYPE,
353 	SNEWSREPLY_URL_TYPE,
354 
355 	LYNXCACHE_URL_TYPE,
356 	LYNXCFG_URL_TYPE,
357 	LYNXCOMPILE_OPTS_URL_TYPE,
358 	LYNXCOOKIE_URL_TYPE,
359 	LYNXDIRED_URL_TYPE,
360 	LYNXDOWNLOAD_URL_TYPE,
361 	LYNXHIST_URL_TYPE,
362 	LYNXIMGMAP_URL_TYPE,
363 	LYNXKEYMAP_URL_TYPE,
364 	LYNXMESSAGES_URL_TYPE,
365 	LYNXOPTIONS_URL_TYPE,
366 	LYNXPRINT_URL_TYPE,
367 
368 	PROXY_URL_TYPE
369 
370     } UrlTypes;
371 
372     extern UrlTypes LYCheckForProxyURL(char *filename);
373     extern UrlTypes is_url(char *filename);
374 
375 /* common URLs */
376 #define STR_BIBP_URL         "bibp:"
377 #define LEN_BIBP_URL         5
378 #define isBIBP_URL(addr)     !strncasecomp(addr, STR_BIBP_URL, LEN_BIBP_URL)
379 
380 #define STR_CSO_URL          "cso:"
381 #define LEN_CSO_URL          4
382 #define isCSO_URL(addr)      !strncasecomp(addr, STR_CSO_URL, LEN_CSO_URL)
383 
384 #define STR_FILE_URL         "file:"
385 #define LEN_FILE_URL         5
386 #define isFILE_URL(addr)     ((*addr == 'f' || *addr == 'F') &&\
387                              !strncasecomp(addr, STR_FILE_URL, LEN_FILE_URL))
388 
389 #define STR_FINGER_URL       "finger:"
390 #define LEN_FINGER_URL       7
391 #define isFINGER_URL(addr)   !strncasecomp(addr, STR_FINGER_URL, LEN_FINGER_URL)
392 
393 #define STR_FTP_URL          "ftp:"
394 #define LEN_FTP_URL          4
395 #define isFTP_URL(addr)      !strncasecomp(addr, STR_FTP_URL, LEN_FTP_URL)
396 
397 #define STR_GOPHER_URL       "gopher:"
398 #define LEN_GOPHER_URL       7
399 #define isGOPHER_URL(addr)   !strncasecomp(addr, STR_GOPHER_URL, LEN_GOPHER_URL)
400 
401 #define STR_HTTP_URL         "http:"
402 #define LEN_HTTP_URL         5
403 #define isHTTP_URL(addr)     !strncasecomp(addr, STR_HTTP_URL, LEN_HTTP_URL)
404 
405 #define STR_HTTPS_URL        "https:"
406 #define LEN_HTTPS_URL        6
407 #define isHTTPS_URL(addr)    !strncasecomp(addr, STR_HTTPS_URL, LEN_HTTPS_URL)
408 
409 #define STR_MAILTO_URL       "mailto:"
410 #define LEN_MAILTO_URL       7
411 #define isMAILTO_URL(addr)   !strncasecomp(addr, STR_MAILTO_URL, LEN_MAILTO_URL)
412 
413 #define STR_NEWS_URL         "news:"
414 #define LEN_NEWS_URL         5
415 #define isNEWS_URL(addr)     !strncasecomp(addr, STR_NEWS_URL, LEN_NEWS_URL)
416 
417 #define STR_NNTP_URL         "nntp:"
418 #define LEN_NNTP_URL         5
419 #define isNNTP_URL(addr)     !strncasecomp(addr, STR_NNTP_URL, LEN_NNTP_URL)
420 
421 #define STR_RLOGIN_URL       "rlogin:"
422 #define LEN_RLOGIN_URL       7
423 #define isRLOGIN_URL(addr)   !strncasecomp(addr, STR_RLOGIN_URL, LEN_RLOGIN_URL)
424 
425 #define STR_SNEWS_URL        "snews:"
426 #define LEN_SNEWS_URL        6
427 #define isSNEWS_URL(addr)    !strncasecomp(addr, STR_SNEWS_URL, LEN_SNEWS_URL)
428 
429 #define STR_TELNET_URL       "telnet:"
430 #define LEN_TELNET_URL       7
431 #define isTELNET_URL(addr)   !strncasecomp(addr, STR_TELNET_URL, LEN_TELNET_URL)
432 
433 #define STR_TN3270_URL       "tn3270:"
434 #define LEN_TN3270_URL       7
435 #define isTN3270_URL(addr)   !strncasecomp(addr, STR_TN3270_URL, LEN_TN3270_URL)
436 
437 #define STR_WAIS_URL         "wais:"
438 #define LEN_WAIS_URL         5
439 #define isWAIS_URL(addr)     !strncasecomp(addr, STR_WAIS_URL, LEN_WAIS_URL)
440 
441 /* internal URLs */
442 #define STR_LYNXCACHE        "LYNXCACHE:"
443 #define LEN_LYNXCACHE        10
444 #define isLYNXCACHE(addr)    !strncasecomp(addr, STR_LYNXCACHE, LEN_LYNXCACHE)
445 
446 #define STR_LYNXCFG          "LYNXCFG:"
447 #define LEN_LYNXCFG          8
448 #define isLYNXCFG(addr)      !strncasecomp(addr, STR_LYNXCFG, LEN_LYNXCFG)
449 
450 #define STR_LYNXCFLAGS       "LYNXCOMPILEOPTS:"
451 #define LEN_LYNXCFLAGS       16
452 #define isLYNXCFLAGS(addr)   !strncasecomp(addr, STR_LYNXCFLAGS, LEN_LYNXCFLAGS)
453 
454 #define STR_LYNXCGI          "lynxcgi:"
455 #define LEN_LYNXCGI          8
456 #define isLYNXCGI(addr)      ((*addr == 'l' || *addr == 'L') &&\
457                              !strncasecomp(addr, STR_LYNXCGI, LEN_LYNXCGI))
458 
459 #define STR_LYNXCOOKIE       "LYNXCOOKIE:"
460 #define LEN_LYNXCOOKIE       11
461 #define isLYNXCOOKIE(addr)   !strncasecomp(addr, STR_LYNXCOOKIE, LEN_LYNXCOOKIE)
462 
463 #define STR_LYNXDIRED        "LYNXDIRED:"
464 #define LEN_LYNXDIRED        10
465 #define isLYNXDIRED(addr)    !strncasecomp(addr, STR_LYNXDIRED, LEN_LYNXDIRED)
466 
467 #define STR_LYNXEXEC         "lynxexec:"
468 #define LEN_LYNXEXEC         9
469 #define isLYNXEXEC(addr)     ((*addr == 'l' || *addr == 'L') &&\
470                              !strncasecomp(addr, STR_LYNXEXEC, LEN_LYNXEXEC))
471 
472 #define STR_LYNXDOWNLOAD     "LYNXDOWNLOAD:"
473 #define LEN_LYNXDOWNLOAD     13
474 #define isLYNXDOWNLOAD(addr) !strncasecomp(addr, STR_LYNXDOWNLOAD, LEN_LYNXDOWNLOAD)
475 
476 #define STR_LYNXHIST         "LYNXHIST:"
477 #define LEN_LYNXHIST         9
478 #define isLYNXHIST(addr)     !strncasecomp(addr, STR_LYNXHIST, LEN_LYNXHIST)
479 
480 #define STR_LYNXKEYMAP       "LYNXKEYMAP:"
481 #define LEN_LYNXKEYMAP       11
482 #define isLYNXKEYMAP(addr)   !strncasecomp(addr, STR_LYNXKEYMAP, LEN_LYNXKEYMAP)
483 
484 #define STR_LYNXIMGMAP       "LYNXIMGMAP:"
485 #define LEN_LYNXIMGMAP       11
486 #define isLYNXIMGMAP(addr)   !strncasecomp(addr, STR_LYNXIMGMAP, LEN_LYNXIMGMAP)
487 
488 #define STR_LYNXMESSAGES     "LYNXMESSAGES:"
489 #define LEN_LYNXMESSAGES     13
490 #define isLYNXMESSAGES(addr) !strncasecomp(addr, STR_LYNXMESSAGES, LEN_LYNXMESSAGES)
491 
492 #define STR_LYNXOPTIONS      "LYNXOPTIONS:"
493 #define LEN_LYNXOPTIONS      12
494 #define isLYNXOPTIONS(addr)  !strncasecomp(addr, STR_LYNXOPTIONS, LEN_LYNXOPTIONS)
495 
496 #define STR_LYNXPRINT        "LYNXPRINT:"
497 #define LEN_LYNXPRINT        10
498 #define isLYNXPRINT(addr)    !strncasecomp(addr, STR_LYNXPRINT, LEN_LYNXPRINT)
499 
500 #define STR_LYNXPROG         "lynxprog:"
501 #define LEN_LYNXPROG         9
502 #define isLYNXPROG(addr)     ((*addr == 'l' || *addr == 'L') &&\
503                              !strncasecomp(addr, STR_LYNXPROG, LEN_LYNXPROG))
504 
505 #define LYNXOPTIONS_PAGE(s)  STR_LYNXOPTIONS s
506 /*
507  *  For change_sug_filename().
508  */
509     extern HTList *sug_filenames;
510 
511 /*
512  * syslog() facility
513  */
514 #if defined(SYSLOG_REQUESTED_URLS)
515     extern void LYOpenlog(const char *banner);
516     extern void LYSyslog(char *arg);
517     extern void LYCloselog(void);
518 #endif				/* SYSLOG_REQUESTED_URLS */
519 
520 #undef STREQ			/* conflict with wais.h */
521 
522 /*
523  *  Miscellaneous.
524  */
525 #define STREQ(a,b)    (strcmp(a,b) == 0)
526 #define STRNEQ(a,b,c) (StrNCmp(a,b,c) == 0)
527 
528 #define HIDE_CHMOD 0600
529 #define HIDE_UMASK 0077
530 
531 #if defined(DOSPATH) || defined(__CYGWIN__)
532 #define TXT_R	"rt"
533 #define TXT_W	"wt"
534 #define TXT_A	"at+"
535 #else
536 #define TXT_R	"r"
537 #define TXT_W	"w"
538 #define TXT_A	"a+"
539 #endif
540 
541 #define BIN_R	"rb"
542 #define BIN_W	"wb"
543 #define BIN_A	"ab+"
544 
545 #ifdef __cplusplus
546 }
547 #endif
548 #endif				/* LYUTILS_H */
549