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