Annotation of libwww/Library/src/HTInit.c, revision 2.34
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"
2.28 frystyk 15:
16: /* Binding Managers */
2.24 frystyk 17: #include "HTBind.h"
2.28 frystyk 18: #include "HTProt.h"
2.24 frystyk 19:
20: /* Converters and Presenters */
2.31 frystyk 21: #include "HTML.h" /* Uses HTML/HText interface */
22: #include "HTPlain.h" /* Uses HTML/HText interface */
23:
24: #include "HTTeXGen.h"
2.1 timbl 25: #include "HTMLGen.h"
26: #include "HTMIME.h"
2.2 timbl 27: #include "HTWSRC.h"
2.22 frystyk 28: #include "HTFWrite.h"
2.24 frystyk 29:
30: /* Protocol Modules */
31: #include "HTTP.h"
32: #include "HTFile.h"
33: #include "HTFTP.h"
34: #include "HTGopher.h"
35: #include "HTTelnet.h"
2.18 frystyk 36: #include "HTNews.h"
2.24 frystyk 37:
38: #ifdef HT_DIRECT_WAIS
2.27 frystyk 39: #include "HTWAIS.h"
2.24 frystyk 40: #endif
41:
2.22 frystyk 42: #include "HTInit.h" /* Implemented here */
2.1 timbl 43:
2.29 frystyk 44: /*
45: ** A bug in the Pyramid compiler requires this
46: */
47: #ifdef pyramid
48: extern HTConverter HTMIMEConvert, HTMLToC, HTMLToPlain, HTMLPresent,
49: HTMLToTeX, HTPlainToHTML, HTPlainPresent, HTSaveLocally,
50: HTWSRCConvert;
51: #endif /* pyramid */
52:
53: /* ------------------------------------------------------------------------- */
54:
2.23 frystyk 55: /* BINDINGS BETWEEN A SOURCE MEDIA TYPE AND A DEST MEDIA TYPE (CONVERSION)
56: ** ----------------------------------------------------------------------
57: **
58: ** Not done automaticly - must be done by application!
59: */
60: PUBLIC void HTConverterInit ARGS1(HTList *, c)
61: {
2.31 frystyk 62: /*
63: ** This set of converters uses the HTML/HText interface.
2.34 ! frystyk 64: ** If you do not want this interface then replace them!
2.31 frystyk 65: */
66: HTSetConversion(c,"text/html", "www/present", HTMLPresent, 1.0, 0.0, 0.0);
67: HTSetConversion(c,"text/plain", "www/present", HTPlainPresent, 1.0, 0.0, 0.0);
2.23 frystyk 68: HTSetConversion(c,"text/html", "text/x-c", HTMLToC, 0.5, 0.0, 0.0);
69: HTSetConversion(c,"text/html", "text/plain", HTMLToPlain, 0.5, 0.0, 0.0);
2.32 frystyk 70: HTSetConversion(c,"text/html", "text/latex", HTMLToTeX, 1.0, 0.0, 0.0);
2.31 frystyk 71:
72: /*
2.34 ! frystyk 73: ** A set of converters that converts from Gopher, news,
! 74: ** and FTP listings, menues etc. to HTML
! 75: */
! 76: #if 0
! 77: HTSetConversion(c,"text/x-ftplist", "www/present", HTFTPLongList, 1.0, 0.0, 0.0);
! 78: HTSetConversion(c,"text/x-ftpnlst", "www/present", HTFTPShortList, 1.0, 0.0, 0.0);
! 79: #endif
! 80: /*
2.31 frystyk 81: ** These are converters that converts to something other than www/present,
82: ** that is not directly outputting someting to the user on the screen
83: */
84: HTSetConversion(c,"www/mime", "*/*", HTMIMEConvert, 1.0, 0.0, 0.0);
2.23 frystyk 85: HTSetConversion(c,"text/plain", "text/html", HTPlainToHTML, 1.0, 0.0, 0.0);
2.31 frystyk 86: HTSetConversion(c,"application/x-wais-source","*/*", HTWSRCConvert, 1.0, 0.0, 0.0);
87:
88: /*
2.34 ! frystyk 89: ** This dumps all other formats to local disk without any further
2.31 frystyk 90: ** action taken
91: */
2.23 frystyk 92: HTSetConversion(c,"*/*", "www/present", HTSaveLocally, 0.3, 0.0, 0.0);
93: }
94:
95: /* BINDINGS BETWEEN MEDIA TYPES AND EXTERNAL VIEWERS/PRESENTERS
96: ** ------------------------------------------------------------
97: **
98: ** The data objects are stored in temporary files before the external
99: ** program is called
100: **
101: ** Not done automaticly - must be done by application!
102: */
103: PUBLIC void HTPresenterInit ARGS1(HTList *, c)
2.1 timbl 104: {
105: #ifdef NeXT
2.19 howcome 106: HTSetPresentation(c,"application/postscript", "open %s", NULL, 1.0, 2.0, 0.0);
2.10 luotonen 107: /* The following needs the GIF previewer -- you might not have it. */
2.19 howcome 108:
109: HTSetPresentation(c,"image/gif", "open %s", NULL, 0.3, 2.0, 0.0);
110: HTSetPresentation(c,"image/x-tiff", "open %s", NULL, 1.0, 2.0, 0.0);
111: HTSetPresentation(c,"audio/basic", "open %s", NULL, 1.0, 2.0, 0.0);
112: HTSetPresentation(c,"*/*", "open %s", NULL, 0.05, 0.0, 0.0);
2.1 timbl 113: #else
2.10 luotonen 114: if (getenv("DISPLAY")) { /* Must have X11 */
2.19 howcome 115: HTSetPresentation(c,"application/postscript", "ghostview %s", NULL, 1.0, 3.0, 0.0);
116: HTSetPresentation(c,"image/gif", "xv %s", NULL, 1.0, 3.0, 0.0);
117: HTSetPresentation(c,"image/x-tiff", "xv %s", NULL, 1.0, 3.0, 0.0);
118: HTSetPresentation(c,"image/jpeg", "xv %s", NULL, 1.0, 3.0, 0.0);
2.30 frystyk 119: HTSetPresentation(c,"image/x-png", "xv %s", NULL, 1.0, 3.0, 0.0);
2.10 luotonen 120: }
2.1 timbl 121: #endif
2.15 frystyk 122: }
123:
124:
2.23 frystyk 125: /* PRESENTERS AND CONVERTERS AT THE SAME TIME
126: ** ------------------------------------------
127: **
128: ** This function is only defined in order to preserve backward
129: ** compatibility.
130: */
131: PUBLIC void HTFormatInit ARGS1(HTList *, c)
2.15 frystyk 132: {
2.23 frystyk 133: HTConverterInit(c);
134: HTPresenterInit(c);
135:
2.1 timbl 136: }
137:
2.24 frystyk 138: /* REGISTER ALL KNOWN PROTOCOLS IN THE LIBRARY
139: ** -------------------------------------------
140: **
141: ** Add to or subtract from this list if you add or remove protocol
142: ** modules. This function is called from HTLibInit()
143: ** Compiling with HT_NO_INIT prevents all known protocols from being
144: ** force in at link time.
145: */
146: #ifndef HT_NO_INIT
2.33 frystyk 147: PUBLIC void HTAccessInit (void)
2.24 frystyk 148: {
149: #ifndef DECNET
2.34 ! frystyk 150: HTProtocol_add("ftp", NO, HTLoadFTP);
2.33 frystyk 151: HTProtocol_add("nntp", YES, HTLoadNews);
152: HTProtocol_add("gopher", NO, HTLoadGopher);
2.24 frystyk 153: #ifdef HT_DIRECT_WAIS
2.33 frystyk 154: HTProtocol_add("wais", YES, HTLoadWAIS);
2.24 frystyk 155: #endif
156: #endif /* DECNET */
157:
2.33 frystyk 158: HTProtocol_add("http", NO, HTLoadHTTP);
159: HTProtocol_add("file", NO, HTLoadFile);
160: HTProtocol_add("telnet", YES, HTLoadTelnet);
161: HTProtocol_add("tn3270", YES, HTLoadTelnet);
162: HTProtocol_add("rlogin", YES, HTLoadTelnet);
2.24 frystyk 163: }
164: #endif /* !HT_NO_INIT */
165:
2.1 timbl 166:
2.23 frystyk 167: /* BINDINGS BETWEEN FILE EXTENSIONS AND MEDIA TYPES
168: ** ------------------------------------------------
2.1 timbl 169: **
2.23 frystyk 170: ** The LAST suffix for a type is that used for temporary files of that
171: ** type. The quality is an apriori bias as to whether the file should be
2.1 timbl 172: ** used. Not that different suffixes can be used to represent files
173: ** which are of the same format but are originals or regenerated,
2.24 frystyk 174: ** with different values. Called from HTLibraryInit().
2.1 timbl 175: */
176:
2.23 frystyk 177: #ifndef HT_NO_INIT
2.1 timbl 178: PUBLIC void HTFileInit NOARGS
2.10 luotonen 179: {
2.24 frystyk 180: /* Suffix Content-Type Encoding Lang Quality */
2.12 luotonen 181:
2.24 frystyk 182: HTBind_setBinding("mime", "www/mime", "8bit", NULL, 1.0); /* Internal -- MIME is */
183: /* not recursive */
184: HTBind_setBinding("bin", "application/octet-stream", "binary", NULL, 1.0); /* Uninterpreted binary */
185: HTBind_setBinding("oda", "application/oda", "binary", NULL, 1.0);
186: HTBind_setBinding("pdf", "application/pdf", "binary", NULL, 1.0);
187: HTBind_setBinding("ai", "application/postscript", "8bit", NULL, 0.5); /* Adobe Illustrator */
188: HTBind_setBinding("PS", "application/postscript", "8bit", NULL, 0.8); /* PostScript */
189: HTBind_setBinding("eps", "application/postscript", "8bit", NULL, 0.8);
190: HTBind_setBinding("ps", "application/postscript", "8bit", NULL, 0.8);
191: HTBind_setBinding("gtar", "application/x-gtar", "binary", NULL, 1.0); /* Gnu tar */
192: HTBind_setBinding("rtf", "application/x-rtf", "7bit", NULL, 1.0); /* RTF */
193: HTBind_setBinding("csh", "application/x-csh", "7bit", NULL, 0.5); /* C-shell script */
194: HTBind_setBinding("dvi", "application/x-dvi", "binary", NULL, 1.0); /* TeX DVI */
195: HTBind_setBinding("hdf", "application/x-hdf", "binary", NULL, 1.0); /* NCSA HDF data file */
196: HTBind_setBinding("latex", "application/x-latex", "8bit", NULL, 1.0); /* LaTeX source */
197: HTBind_setBinding("nc", "application/x-netcdf", "binary", NULL, 1.0); /* Unidata netCDF data */
198: HTBind_setBinding("cdf", "application/x-netcdf", "binary", NULL, 1.0);
199: HTBind_setBinding("sh", "application/x-sh", "7bit", NULL, 0.5); /* Shell-script */
200: HTBind_setBinding("tar", "application/x-tar", "binary", NULL, 1.0); /* 4.3BSD tar */
201: HTBind_setBinding("tcl", "application/x-tcl", "7bit", NULL, 0.5); /* TCL-script */
202: HTBind_setBinding("tex", "application/x-tex", "8bit", NULL, 1.0); /* TeX source */
203: HTBind_setBinding("texi", "application/x-texinfo", "7bit", NULL, 1.0); /* Texinfo */
204: HTBind_setBinding("texinfo","application/x-texinfo", "7bit", NULL, 1.0);
205: HTBind_setBinding("t", "application/x-troff", "7bit", NULL, 0.5); /* Troff */
206: HTBind_setBinding("roff", "application/x-troff", "7bit", NULL, 0.5);
207: HTBind_setBinding("tr", "application/x-troff", "7bit", NULL, 0.5);
208: HTBind_setBinding("man", "application/x-troff-man", "7bit", NULL, 0.5); /* Troff with man macros*/
209: HTBind_setBinding("me", "application/x-troff-me", "7bit", NULL, 0.5); /* Troff with me macros */
210: HTBind_setBinding("ms", "application/x-troff-ms", "7bit", NULL, 0.5); /* Troff with ms macros */
211: HTBind_setBinding("src", "application/x-wais-source", "7bit", NULL, 1.0); /* WAIS source */
212: HTBind_setBinding("bcpio", "application/x-bcpio", "binary", NULL, 1.0); /* Old binary CPIO */
213: HTBind_setBinding("cpio", "application/x-cpio", "binary", NULL, 1.0); /* POSIX CPIO */
214: HTBind_setBinding("shar", "application/x-shar", "8bit", NULL, 1.0); /* Shell archive */
215: HTBind_setBinding("sv4cpio","application/x-sv4cpio", "binary", NULL, 1.0); /* SVR4 CPIO */
216: HTBind_setBinding("sv4crc", "application/x-sv4crc", "binary", NULL, 1.0); /* SVR4 CPIO with CRC */
217: HTBind_setBinding("ustar", "application/x-ustar", "binary", NULL, 1.0); /* POSIX tar */
218: HTBind_setBinding("snd", "audio/basic", "binary", NULL, 1.0); /* Audio */
219: HTBind_setBinding("au", "audio/basic", "binary", NULL, 1.0);
220: HTBind_setBinding("aiff", "audio/x-aiff", "binary", NULL, 1.0);
221: HTBind_setBinding("aifc", "audio/x-aiff", "binary", NULL, 1.0);
222: HTBind_setBinding("aif", "audio/x-aiff", "binary", NULL, 1.0);
223: HTBind_setBinding("wav", "audio/x-wav", "binary", NULL, 1.0); /* Windows+ WAVE format */
224: HTBind_setBinding("gif", "image/gif", "binary", NULL, 1.0); /* GIF */
2.30 frystyk 225: HTBind_setBinding("png", "image/x-png", "binary", NULL, 1.0); /* PNG */
2.24 frystyk 226: HTBind_setBinding("ief", "image/ief", "binary", NULL, 1.0); /* Image Exchange fmt */
227: HTBind_setBinding("jpg", "image/jpeg", "binary", NULL, 1.0); /* JPEG */
228: HTBind_setBinding("JPG", "image/jpeg", "binary", NULL, 1.0);
229: HTBind_setBinding("JPE", "image/jpeg", "binary", NULL, 1.0);
230: HTBind_setBinding("jpe", "image/jpeg", "binary", NULL, 1.0);
231: HTBind_setBinding("JPEG", "image/jpeg", "binary", NULL, 1.0);
232: HTBind_setBinding("jpeg", "image/jpeg", "binary", NULL, 1.0);
233: HTBind_setBinding("tif", "image/tiff", "binary", NULL, 1.0); /* TIFF */
234: HTBind_setBinding("tiff", "image/tiff", "binary", NULL, 1.0);
235: HTBind_setBinding("ras", "image/cmu-raster", "binary", NULL, 1.0);
236: HTBind_setBinding("pnm", "image/x-portable-anymap", "binary", NULL, 1.0); /* PBM Anymap format */
237: HTBind_setBinding("pbm", "image/x-portable-bitmap", "binary", NULL, 1.0); /* PBM Bitmap format */
238: HTBind_setBinding("pgm", "image/x-portable-graymap", "binary", NULL, 1.0); /* PBM Graymap format */
239: HTBind_setBinding("ppm", "image/x-portable-pixmap", "binary", NULL, 1.0); /* PBM Pixmap format */
240: HTBind_setBinding("rgb", "image/x-rgb", "binary", NULL, 1.0);
241: HTBind_setBinding("xbm", "image/x-xbitmap", "binary", NULL, 1.0); /* X bitmap */
242: HTBind_setBinding("xpm", "image/x-xpixmap", "binary", NULL, 1.0); /* X pixmap format */
243: HTBind_setBinding("xwd", "image/x-xwindowdump", "binary", NULL, 1.0); /* X window dump (xwd) */
244: HTBind_setBinding("html", "text/html", "8bit", NULL, 1.0); /* HTML */
245: HTBind_setBinding("c", "text/plain", "7bit", NULL, 0.5); /* C source */
246: HTBind_setBinding("h", "text/plain", "7bit", NULL, 0.5); /* C headers */
247: HTBind_setBinding("C", "text/plain", "7bit", NULL, 0.5); /* C++ source */
248: HTBind_setBinding("cc", "text/plain", "7bit", NULL, 0.5); /* C++ source */
249: HTBind_setBinding("hh", "text/plain", "7bit", NULL, 0.5); /* C++ headers */
250: HTBind_setBinding("m", "text/plain", "7bit", NULL, 0.5); /* Objective-C source */
251: HTBind_setBinding("f90", "text/plain", "7bit", NULL, 0.5); /* Fortran 90 source */
252: HTBind_setBinding("txt", "text/plain", "7bit", NULL, 0.5); /* Plain text */
253: HTBind_setBinding("rtx", "text/richtext", "7bit", NULL, 1.0); /* MIME Richtext format */
254: HTBind_setBinding("tsv", "text/tab-separated-values", "7bit", NULL, 1.0); /* Tab-separated values */
255: HTBind_setBinding("etx", "text/x-setext", "7bit", NULL, 0.9); /* Struct Enchanced Txt */
256: HTBind_setBinding("MPG", "video/mpeg", "binary", NULL, 1.0); /* MPEG */
257: HTBind_setBinding("mpg", "video/mpeg", "binary", NULL, 1.0);
258: HTBind_setBinding("MPE", "video/mpeg", "binary", NULL, 1.0);
259: HTBind_setBinding("mpe", "video/mpeg", "binary", NULL, 1.0);
260: HTBind_setBinding("MPEG", "video/mpeg", "binary", NULL, 1.0);
261: HTBind_setBinding("mpeg", "video/mpeg", "binary", NULL, 1.0);
262: HTBind_setBinding("qt", "video/quicktime", "binary", NULL, 1.0); /* QuickTime */
263: HTBind_setBinding("mov", "video/quicktime", "binary", NULL, 1.0);
264: HTBind_setBinding("avi", "video/x-msvideo", "binary", NULL, 1.0); /* MS Video for Windows */
265: HTBind_setBinding("movie", "video/x-sgi-movie", "binary", NULL, 1.0); /* SGI "moviepalyer" */
266:
267: HTBind_setBinding("zip", NULL, "zip", NULL, 1.0); /* PKZIP */
268: HTBind_setBinding("Z", NULL, "compress", NULL, 1.0); /* Compressed data */
269: HTBind_setBinding("gz", NULL, "gzip", NULL, 1.0); /* Gnu Compressed data */
2.1 timbl 270:
2.24 frystyk 271: HTBind_setBinding("*.*", "www/unknown", "binary", NULL, 0.1); /* Unknown suffix */
2.26 frystyk 272: HTBind_setBinding("*", "www/unknown", "7bit", NULL, 0.5); /* No suffix */
2.1 timbl 273: }
2.23 frystyk 274: #endif /* !HT_NO_INIT */
2.1 timbl 275:
Webmaster