Annotation of libwww/Library/src/HTInit.c, revision 2.48
2.20 frystyk 1: /* HTInit.c
2: ** CONFIGURATION-SPECIFIC INITIALIALIZATION
3: **
2.25 frystyk 4: ** (c) COPYRIGHT MIT 1995.
2.20 frystyk 5: ** Please first read the full copyright statement in the file COPYRIGH.
2.9 duns 6: **
2.20 frystyk 7: ** Define a basic set of suffixes and presentations
2.1 timbl 8: */
9:
2.22 frystyk 10: /* Library include files */
11: #include "tcp.h"
12: #include "HTUtils.h"
2.24 frystyk 13: #include "HTFormat.h"
14: #include "HTList.h"
15: #include "HTBind.h"
2.28 frystyk 16: #include "HTProt.h"
2.22 frystyk 17: #include "HTInit.h" /* Implemented here */
2.1 timbl 18:
2.29 frystyk 19: /* ------------------------------------------------------------------------- */
20:
2.23 frystyk 21: /* BINDINGS BETWEEN A SOURCE MEDIA TYPE AND A DEST MEDIA TYPE (CONVERSION)
22: ** ----------------------------------------------------------------------
2.47 frystyk 23: ** Not done automaticly - may be done by application!
2.23 frystyk 24: */
2.38 frystyk 25: PUBLIC void HTConverterInit (HTList * c)
2.23 frystyk 26: {
2.31 frystyk 27: /*
28: ** This set of converters uses the HTML/HText interface.
2.34 frystyk 29: ** If you do not want this interface then replace them!
2.31 frystyk 30: */
2.38 frystyk 31: HTConversion_add(c,"text/html", "www/present", HTMLPresent, 1.0, 0.0, 0.0);
32: HTConversion_add(c,"text/plain", "www/present", HTPlainPresent, 1.0, 0.0, 0.0);
33: HTConversion_add(c,"text/html", "text/x-c", HTMLToC, 0.5, 0.0, 0.0);
34: HTConversion_add(c,"text/html", "text/plain", HTMLToPlain, 0.5, 0.0, 0.0);
35: HTConversion_add(c,"text/html", "text/latex", HTMLToTeX, 1.0, 0.0, 0.0);
2.31 frystyk 36:
37: /*
38: ** These are converters that converts to something other than www/present,
39: ** that is not directly outputting someting to the user on the screen
40: */
2.43 frystyk 41: HTConversion_add(c,"message/rfc822", "*/*", HTMIMEConvert, 1.0, 0.0, 0.0);
42: HTConversion_add(c,"multipart/*", "*/*", HTBoundary, 1.0, 0.0, 0.0);
2.38 frystyk 43: HTConversion_add(c,"text/plain", "text/html", HTPlainToHTML, 1.0, 0.0, 0.0);
2.39 frystyk 44:
45: /*
46: ** The following conversions are converting ASCII output from various
47: ** protocols to HTML objects.
48: */
2.42 frystyk 49: #if 0
50: HTConversion_add(c,"text/x-gopher", "www/present", HTGopherMenu, 1.0, 0.0, 0.0);
51: HTConversion_add(c,"text/x-cso", "www/present", HTGopherCSO, 1.0, 0.0, 0.0);
52: #endif
2.48 ! frystyk 53: HTConversion_add(c,"text/x-nntp-list", "*/*", HTNewsList, 1.0, 0.0, 0.0);
! 54: HTConversion_add(c,"text/x-nntp-over", "*/*", HTNewsGroup, 1.0, 0.0, 0.0);
! 55: HTConversion_add(c,"text/x-wais-source", "*/*", HTWSRCConvert, 1.0, 0.0, 0.0);
2.43 frystyk 56:
2.31 frystyk 57: /*
2.45 frystyk 58: ** We also register a special content type guess stream that can figure out
59: ** the content type by reading the first bytes of the stream
60: */
61: HTConversion_add(c,"www/unknown", "*/*", HTGuess_new, 1.0, 0.0, 0.0);
2.46 frystyk 62:
63: /*
64: ** Handling Rule files is handled just like any other stream
65: ** This converter reads a rule file and generates the rules
66: */
2.48 ! frystyk 67: HTConversion_add(c,"application/x-www-rules","*/*", HTRules, 1.0, 0.0, 0.0);
2.46 frystyk 68:
2.45 frystyk 69: /*
2.34 frystyk 70: ** This dumps all other formats to local disk without any further
2.31 frystyk 71: ** action taken
72: */
2.38 frystyk 73: HTConversion_add(c,"*/*", "www/present", HTSaveLocally, 0.3, 0.0, 0.0);
2.23 frystyk 74: }
75:
76: /* BINDINGS BETWEEN MEDIA TYPES AND EXTERNAL VIEWERS/PRESENTERS
77: ** ------------------------------------------------------------
2.47 frystyk 78: ** Not done automaticly - may be done by application!
2.23 frystyk 79: ** The data objects are stored in temporary files before the external
80: ** program is called
81: */
2.38 frystyk 82: PUBLIC void HTPresenterInit (HTList * c)
2.1 timbl 83: {
84: #ifdef NeXT
2.38 frystyk 85: HTPresentation_add(c,"application/postscript", "open %s", NULL, 1.0, 2.0, 0.0);
2.10 luotonen 86: /* The following needs the GIF previewer -- you might not have it. */
2.19 howcome 87:
2.38 frystyk 88: HTPresentation_add(c,"image/gif", "open %s", NULL, 0.3, 2.0, 0.0);
2.44 frystyk 89: HTPresentation_add(c,"image/tiff", "open %s", NULL, 1.0, 2.0, 0.0);
2.41 frystyk 90: HTPresentation_add(c,"audio/basic", "open %s", NULL, 1.0, 2.0, 0.0);
91: HTPresentation_add(c,"*/*", "open %s", NULL, 0.05, 0.0, 0.0);
2.1 timbl 92: #else
2.10 luotonen 93: if (getenv("DISPLAY")) { /* Must have X11 */
2.38 frystyk 94: HTPresentation_add(c,"application/postscript", "ghostview %s", NULL, 1.0, 3.0, 0.0);
2.41 frystyk 95: HTPresentation_add(c,"image/gif", "xv %s", NULL, 1.0, 3.0, 0.0);
2.44 frystyk 96: HTPresentation_add(c,"image/tiff", "xv %s", NULL, 1.0, 3.0, 0.0);
2.38 frystyk 97: HTPresentation_add(c,"image/jpeg", "xv %s", NULL, 1.0, 3.0, 0.0);
2.44 frystyk 98: HTPresentation_add(c,"image/png", "xv %s", NULL, 1.0, 3.0, 0.0);
2.10 luotonen 99: }
2.1 timbl 100: #endif
2.15 frystyk 101: }
102:
103:
2.23 frystyk 104: /* PRESENTERS AND CONVERTERS AT THE SAME TIME
105: ** ------------------------------------------
2.47 frystyk 106: ** Not done automaticly - may be done by application!
2.23 frystyk 107: ** This function is only defined in order to preserve backward
108: ** compatibility.
109: */
2.38 frystyk 110: PUBLIC void HTFormatInit (HTList * c)
2.15 frystyk 111: {
2.23 frystyk 112: HTConverterInit(c);
113: HTPresenterInit(c);
114:
2.1 timbl 115: }
116:
2.47 frystyk 117:
118: /* REGISTER CALLBACKS FOR THE NET MANAGER
119: ** --------------------------------------
120: ** We register two often used callback functions:
121: ** a BEFORE and a AFTER callback
122: ** Not done automaticly - may be done by application!
123: */
124: PUBLIC void HTNetInit (void)
125: {
126: HTNetCall_addBefore(HTLoadStart, 0);
127: HTNetCall_addAfter(HTLoadTerminate, HT_ALL);
128: }
129:
130:
131: /* REGISTER CALLBACKS FOR THE ALERT MANAGER
132: ** ----------------------------------------
133: ** We register a set of alert messages
134: ** Not done automaticly - may be done by application!
135: */
136: PUBLIC void HTAlertInit (void)
137: {
138: HTAlert_add(HTProgress, HT_A_PROGRESS);
139: HTAlert_add(HTError_print, HT_A_MESSAGE);
140: HTAlert_add(HTConfirm, HT_A_CONFIRM);
141: HTAlert_add(HTPrompt, HT_A_PROMPT);
142: HTAlert_add(HTPromptPassword, HT_A_SECRET);
143: HTAlert_add(HTPromptUsernameAndPassword, HT_A_USER_PW);
144: }
145:
146:
2.24 frystyk 147: /* REGISTER ALL KNOWN PROTOCOLS IN THE LIBRARY
148: ** -------------------------------------------
2.47 frystyk 149: ** Not done automaticly - may be done by application!
2.24 frystyk 150: */
2.33 frystyk 151: PUBLIC void HTAccessInit (void)
2.24 frystyk 152: {
153: #ifndef DECNET
2.48 ! frystyk 154: HTProtocol_add("ftp", NO, HTLoadFTP, NULL);
! 155: HTProtocol_add("nntp", NO, HTLoadNews, NULL);
! 156: HTProtocol_add("news", NO, HTLoadNews, NULL);
! 157: HTProtocol_add("gopher", NO, HTLoadGopher, NULL);
2.24 frystyk 158: #ifdef HT_DIRECT_WAIS
2.48 ! frystyk 159: HTProtocol_add("wais", YES, HTLoadWAIS, NULL);
2.24 frystyk 160: #endif
161: #endif /* DECNET */
162:
2.48 ! frystyk 163: HTProtocol_add("http", NO, HTLoadHTTP, NULL);
! 164: HTProtocol_add("file", NO, HTLoadFile, NULL);
! 165: HTProtocol_add("telnet", YES, HTLoadTelnet, NULL);
! 166: HTProtocol_add("tn3270", YES, HTLoadTelnet, NULL);
! 167: HTProtocol_add("rlogin", YES, HTLoadTelnet, NULL);
2.24 frystyk 168: }
2.1 timbl 169:
2.48 ! frystyk 170: #if 0
! 171: /* BINDINGS BETWEEN ICONS AND MEDIA TYPES
! 172: ** --------------------------------------
! 173: ** Not done automaticly - may be done by application!
! 174: ** For directory listings etc. you can bind a set of icons to a set of
! 175: ** media types and special icons for directories and other objects that
! 176: ** do not have a media type.
! 177: */
! 178: PUBLIC void HTStdIconInit (CONST char * url_prefix)
! 179: {
! 180: CONST char * p = url_prefix ? url_prefix : "/internal-icon/";
! 181:
! 182: HTAddBlankIcon (prefixed(p,"blank.xbm"), NULL );
! 183: HTAddDirIcon (prefixed(p,"directory.xbm"),"DIR" );
! 184: HTAddParentIcon (prefixed(p,"back.xbm"), "UP" );
! 185: HTAddUnknownIcon(prefixed(p,"unknown.xbm"), NULL );
! 186: HTAddIcon(prefixed(p,"unknown.xbm"), NULL, "*/*");
! 187: HTAddIcon(prefixed(p,"binary.xbm"), "BIN", "binary");
! 188: HTAddIcon(prefixed(p,"unknown.xbm"), NULL, "www/unknown");
! 189: HTAddIcon(prefixed(p,"text.xbm"), "TXT", "text/*");
! 190: HTAddIcon(prefixed(p,"image.xbm"), "IMG", "image/*");
! 191: HTAddIcon(prefixed(p,"movie.xbm"), "MOV", "video/*");
! 192: HTAddIcon(prefixed(p,"sound.xbm"), "AU", "audio/*");
! 193: HTAddIcon(prefixed(p,"tar.xbm"), "TAR", "multipart/x-tar");
! 194: HTAddIcon(prefixed(p,"tar.xbm"), "TAR", "multipart/x-gtar");
! 195: HTAddIcon(prefixed(p,"compressed.xbm"), "CMP", "x-compress");
! 196: HTAddIcon(prefixed(p,"compressed.xbm"), "GZP", "x-gzip");
! 197: HTAddIcon(prefixed(p,"index.xbm"), "IDX", "application/x-gopher-index");
! 198: HTAddIcon(prefixed(p,"index2.xbm"), "CSO", "application/x-gopher-cso");
! 199: HTAddIcon(prefixed(p,"telnet.xbm"), "TEL", "application/x-gopher-telnet");
! 200: HTAddIcon(prefixed(p,"unknown.xbm"), "DUP", "application/x-gopher-duplicate");
! 201: HTAddIcon(prefixed(p,"unknown.xbm"), "TN", "application/x-gopher-tn3270");
! 202: }
! 203: #endif
! 204:
2.23 frystyk 205: /* BINDINGS BETWEEN FILE EXTENSIONS AND MEDIA TYPES
206: ** ------------------------------------------------
2.47 frystyk 207: ** Not done automaticly - may be done by application!
2.23 frystyk 208: ** The LAST suffix for a type is that used for temporary files of that
209: ** type. The quality is an apriori bias as to whether the file should be
2.1 timbl 210: ** used. Not that different suffixes can be used to represent files
211: ** which are of the same format but are originals or regenerated,
2.48 ! frystyk 212: ** with different values.
2.1 timbl 213: */
2.38 frystyk 214: PUBLIC void HTFileInit (void)
2.10 luotonen 215: {
2.24 frystyk 216: /* Suffix Content-Type Encoding Lang Quality */
2.12 luotonen 217:
2.41 frystyk 218: HTBind_add("mime", "message/rfc822", "8bit", NULL, 1.0); /* Internal -- MIME is */
2.24 frystyk 219: /* not recursive */
2.40 frystyk 220: HTBind_add("bin", "application/octet-stream", "binary", NULL, 1.0); /* Uninterpreted binary */
221: HTBind_add("oda", "application/oda", "binary", NULL, 1.0);
222: HTBind_add("pdf", "application/pdf", "binary", NULL, 1.0);
223: HTBind_add("ai", "application/postscript", "8bit", NULL, 0.5); /* Adobe Illustrator */
224: HTBind_add("PS", "application/postscript", "8bit", NULL, 0.8); /* PostScript */
225: HTBind_add("eps", "application/postscript", "8bit", NULL, 0.8);
226: HTBind_add("ps", "application/postscript", "8bit", NULL, 0.8);
227: HTBind_add("gtar", "application/x-gtar", "binary", NULL, 1.0); /* Gnu tar */
228: HTBind_add("rtf", "application/x-rtf", "7bit", NULL, 1.0); /* RTF */
229: HTBind_add("csh", "application/x-csh", "7bit", NULL, 0.5); /* C-shell script */
230: HTBind_add("dvi", "application/x-dvi", "binary", NULL, 1.0); /* TeX DVI */
231: HTBind_add("hdf", "application/x-hdf", "binary", NULL, 1.0); /* NCSA HDF data file */
232: HTBind_add("latex", "application/x-latex", "8bit", NULL, 1.0); /* LaTeX source */
233: HTBind_add("nc", "application/x-netcdf", "binary", NULL, 1.0); /* Unidata netCDF data */
234: HTBind_add("cdf", "application/x-netcdf", "binary", NULL, 1.0);
235: HTBind_add("sh", "application/x-sh", "7bit", NULL, 0.5); /* Shell-script */
236: HTBind_add("tar", "application/x-tar", "binary", NULL, 1.0); /* 4.3BSD tar */
237: HTBind_add("tcl", "application/x-tcl", "7bit", NULL, 0.5); /* TCL-script */
238: HTBind_add("tex", "application/x-tex", "8bit", NULL, 1.0); /* TeX source */
239: HTBind_add("texi", "application/x-texinfo", "7bit", NULL, 1.0); /* Texinfo */
240: HTBind_add("texinfo","application/x-texinfo", "7bit", NULL, 1.0);
241: HTBind_add("t", "application/x-troff", "7bit", NULL, 0.5); /* Troff */
242: HTBind_add("roff", "application/x-troff", "7bit", NULL, 0.5);
243: HTBind_add("tr", "application/x-troff", "7bit", NULL, 0.5);
244: HTBind_add("man", "application/x-troff-man", "7bit", NULL, 0.5); /* Troff with man macros*/
245: HTBind_add("me", "application/x-troff-me", "7bit", NULL, 0.5); /* Troff with me macros */
246: HTBind_add("ms", "application/x-troff-ms", "7bit", NULL, 0.5); /* Troff with ms macros */
247: HTBind_add("src", "application/x-wais-source", "7bit", NULL, 1.0); /* WAIS source */
248: HTBind_add("bcpio", "application/x-bcpio", "binary", NULL, 1.0); /* Old binary CPIO */
249: HTBind_add("cpio", "application/x-cpio", "binary", NULL, 1.0); /* POSIX CPIO */
250: HTBind_add("shar", "application/x-shar", "8bit", NULL, 1.0); /* Shell archive */
251: HTBind_add("sv4cpio","application/x-sv4cpio", "binary", NULL, 1.0); /* SVR4 CPIO */
252: HTBind_add("sv4crc", "application/x-sv4crc", "binary", NULL, 1.0); /* SVR4 CPIO with CRC */
253: HTBind_add("ustar", "application/x-ustar", "binary", NULL, 1.0); /* POSIX tar */
254: HTBind_add("snd", "audio/basic", "binary", NULL, 1.0); /* Audio */
255: HTBind_add("au", "audio/basic", "binary", NULL, 1.0);
256: HTBind_add("aiff", "audio/x-aiff", "binary", NULL, 1.0);
257: HTBind_add("aifc", "audio/x-aiff", "binary", NULL, 1.0);
258: HTBind_add("aif", "audio/x-aiff", "binary", NULL, 1.0);
259: HTBind_add("wav", "audio/x-wav", "binary", NULL, 1.0); /* Windows+ WAVE format */
260: HTBind_add("gif", "image/gif", "binary", NULL, 1.0); /* GIF */
2.44 frystyk 261: HTBind_add("png", "image/png", "binary", NULL, 1.0); /* PNG */
2.40 frystyk 262: HTBind_add("ief", "image/ief", "binary", NULL, 1.0); /* Image Exchange fmt */
263: HTBind_add("jpg", "image/jpeg", "binary", NULL, 1.0); /* JPEG */
264: HTBind_add("JPG", "image/jpeg", "binary", NULL, 1.0);
265: HTBind_add("JPE", "image/jpeg", "binary", NULL, 1.0);
266: HTBind_add("jpe", "image/jpeg", "binary", NULL, 1.0);
267: HTBind_add("JPEG", "image/jpeg", "binary", NULL, 1.0);
268: HTBind_add("jpeg", "image/jpeg", "binary", NULL, 1.0);
269: HTBind_add("tif", "image/tiff", "binary", NULL, 1.0); /* TIFF */
270: HTBind_add("tiff", "image/tiff", "binary", NULL, 1.0);
271: HTBind_add("ras", "image/cmu-raster", "binary", NULL, 1.0);
272: HTBind_add("pnm", "image/x-portable-anymap", "binary", NULL, 1.0); /* PBM Anymap format */
273: HTBind_add("pbm", "image/x-portable-bitmap", "binary", NULL, 1.0); /* PBM Bitmap format */
274: HTBind_add("pgm", "image/x-portable-graymap", "binary", NULL, 1.0); /* PBM Graymap format */
275: HTBind_add("ppm", "image/x-portable-pixmap", "binary", NULL, 1.0); /* PBM Pixmap format */
276: HTBind_add("rgb", "image/x-rgb", "binary", NULL, 1.0);
277: HTBind_add("xbm", "image/x-xbitmap", "binary", NULL, 1.0); /* X bitmap */
278: HTBind_add("xpm", "image/x-xpixmap", "binary", NULL, 1.0); /* X pixmap format */
279: HTBind_add("xwd", "image/x-xwindowdump", "binary", NULL, 1.0); /* X window dump (xwd) */
280: HTBind_add("html", "text/html", "8bit", NULL, 1.0); /* HTML */
281: HTBind_add("c", "text/plain", "7bit", NULL, 0.5); /* C source */
282: HTBind_add("h", "text/plain", "7bit", NULL, 0.5); /* C headers */
283: HTBind_add("C", "text/plain", "7bit", NULL, 0.5); /* C++ source */
284: HTBind_add("cc", "text/plain", "7bit", NULL, 0.5); /* C++ source */
285: HTBind_add("hh", "text/plain", "7bit", NULL, 0.5); /* C++ headers */
286: HTBind_add("m", "text/plain", "7bit", NULL, 0.5); /* Objective-C source */
287: HTBind_add("f90", "text/plain", "7bit", NULL, 0.5); /* Fortran 90 source */
288: HTBind_add("txt", "text/plain", "7bit", NULL, 0.5); /* Plain text */
289: HTBind_add("rtx", "text/richtext", "7bit", NULL, 1.0); /* MIME Richtext format */
290: HTBind_add("tsv", "text/tab-separated-values", "7bit", NULL, 1.0); /* Tab-separated values */
291: HTBind_add("etx", "text/x-setext", "7bit", NULL, 0.9); /* Struct Enchanced Txt */
292: HTBind_add("MPG", "video/mpeg", "binary", NULL, 1.0); /* MPEG */
293: HTBind_add("mpg", "video/mpeg", "binary", NULL, 1.0);
294: HTBind_add("MPE", "video/mpeg", "binary", NULL, 1.0);
295: HTBind_add("mpe", "video/mpeg", "binary", NULL, 1.0);
296: HTBind_add("MPEG", "video/mpeg", "binary", NULL, 1.0);
297: HTBind_add("mpeg", "video/mpeg", "binary", NULL, 1.0);
298: HTBind_add("qt", "video/quicktime", "binary", NULL, 1.0); /* QuickTime */
299: HTBind_add("mov", "video/quicktime", "binary", NULL, 1.0);
300: HTBind_add("avi", "video/x-msvideo", "binary", NULL, 1.0); /* MS Video for Windows */
301: HTBind_add("movie", "video/x-sgi-movie", "binary", NULL, 1.0); /* SGI "moviepalyer" */
2.24 frystyk 302:
2.40 frystyk 303: HTBind_add("zip", NULL, "zip", NULL, 1.0); /* PKZIP */
304: HTBind_add("Z", NULL, "compress", NULL, 1.0); /* Compressed data */
305: HTBind_add("gz", NULL, "gzip", NULL, 1.0); /* Gnu Compressed data */
2.46 frystyk 306:
307: HTBind_add("conf", "text/x-www-rules", "8bit", NULL, 1.0); /* CONFIGURATION FILE */
2.1 timbl 308:
2.40 frystyk 309: HTBind_add("*.*", "www/unknown", "binary", NULL, 0.1); /* Unknown suffix */
310: HTBind_add("*", "www/unknown", "7bit", NULL, 0.5); /* No suffix */
2.1 timbl 311: }
312:
Webmaster