diff --git a/src/add-ons/kernel/generic/mime_table/Jamfile b/src/add-ons/kernel/generic/mime_table/Jamfile new file mode 100644 index 0000000000..6980d19ec7 --- /dev/null +++ b/src/add-ons/kernel/generic/mime_table/Jamfile @@ -0,0 +1,7 @@ +SubDir OBOS_TOP src add-ons kernel generic mime_table ; + +R5KernelAddon mime_table : kernel generic : + mime_table.c + module.c +; + diff --git a/src/add-ons/kernel/generic/mime_table/makefile b/src/add-ons/kernel/generic/mime_table/makefile new file mode 100644 index 0000000000..aa334c4965 --- /dev/null +++ b/src/add-ons/kernel/generic/mime_table/makefile @@ -0,0 +1,120 @@ +## BeOS Generic Makefile v2.2 ## + +## Fill in this file to specify the project being created, and the referenced +## makefile-engine will do all of the hard work for you. This handles both +## Intel and PowerPC builds of the BeOS. + +## Application Specific Settings --------------------------------------------- + +# specify the name of the binary +NAME= mime_table + +# specify the type of binary +# APP: Application +# SHARED: Shared library or add-on +# STATIC: Static library archive +# DRIVER: Kernel Driver +TYPE= DRIVER + +# add support for new Pe and Eddie features +# to fill in generic makefile + +#%{ +# @src->@ + +# specify the source files to use +# full paths or paths relative to the makefile can be included +# all files, regardless of directory, will have their object +# files created in the common object directory. +# Note that this means this makefile will not work correctly +# if two source files with the same name (source.c or source.cpp) +# are included from different directories. Also note that spaces +# in folder names do not work well with this makefile. +SRCS= mime_table.c module.c + +# specify the resource files to use +# full path or a relative path to the resource file can be used. +RSRCS= + +# @<-src@ +#%} + +# end support for Pe and Eddie + +# specify additional libraries to link against +# there are two acceptable forms of library specifications +# - if your library follows the naming pattern of: +# libXXX.so or libXXX.a you can simply specify XXX +# library: libbe.so entry: be +# +# - if your library does not follow the standard library +# naming scheme you need to specify the path to the library +# and it's name +# library: my_lib.a entry: my_lib.a or path/my_lib.a +LIBS= + +# specify additional paths to directories following the standard +# libXXX.so or libXXX.a naming scheme. You can specify full paths +# or paths relative to the makefile. The paths included may not +# be recursive, so include all of the paths where libraries can +# be found. Directories where source files are found are +# automatically included. +LIBPATHS= + +# additional paths to look for system headers +# thes use the form: #include
+# source file directories are NOT auto-included here +SYSTEM_INCLUDE_PATHS = ../../../../../headers/os/drivers/ + +# additional paths to look for local headers +# thes use the form: #include "header" +# source file directories are automatically included +LOCAL_INCLUDE_PATHS = + +# specify the level of optimization that you desire +# NONE, SOME, FULL +OPTIMIZE= + +# specify any preprocessor symbols to be defined. The symbols will not +# have their values set automatically; you must supply the value (if any) +# to use. For example, setting DEFINES to "DEBUG=1" will cause the +# compiler option "-DDEBUG=1" to be used. Setting DEFINES to "DEBUG" +# would pass "-DDEBUG" on the compiler's command line. +DEFINES= + +# specify special warning levels +# if unspecified default warnings will be used +# NONE = supress all warnings +# ALL = enable all warnings +WARNINGS = + +# specify whether image symbols will be created +# so that stack crawls in the debugger are meaningful +# if TRUE symbols will be created +SYMBOLS = + +# specify debug settings +# if TRUE will allow application to be run from a source-level +# debugger. Note that this will disable all optimzation. +DEBUGGER = + +# specify additional compiler flags for all files +COMPILER_FLAGS = + +# specify additional linker flags +LINKER_FLAGS = + +# specify the version of this particular item +# (for example, -app 3 4 0 d 0 -short 340 -long "340 "`echo -n -e '\302\251'`"1999 GNU GPL") +# This may also be specified in a resource. +APP_VERSION = + +# (for TYPE == DRIVER only) Specify desired location of driver in the /dev +# hierarchy. Used by the driverinstall rule. E.g., DRIVER_PATH = video/usb will +# instruct the driverinstall rule to place a symlink to your driver's binary in +# ~/add-ons/kernel/drivers/dev/video/usb, so that your driver will appear at +# /dev/video/usb when loaded. Default is "misc". +DRIVER_PATH = + +## include the makefile-engine +include $(BUILDHOME)/etc/makefile-engine diff --git a/src/add-ons/kernel/generic/mime_table/mime_table.c b/src/add-ons/kernel/generic/mime_table/mime_table.c new file mode 100644 index 0000000000..3ef761e71c --- /dev/null +++ b/src/add-ons/kernel/generic/mime_table/mime_table.c @@ -0,0 +1,102 @@ +/* + Copyright 1999-2001, Be Incorporated. All Rights Reserved. + This file may be used under the terms of the Be Sample Code License. + + extended: 2001-12-11 by Marcus Overhagen +*/ + +#include + +struct ext_mime mimes[] = { + { "gz", "application/x-gzip" }, + { "hqx", "application/x-binhex40" }, + { "lha", "application/x-lharc" }, + { "lzh", "application/x-lharc" }, + { "pcl", "application/x-pcl" }, + { "pdf", "application/pdf" }, + { "ps", "application/postscript" }, + { "sit", "application/x-stuff-it" }, + { "tar", "application/x-tar" }, + { "tgz", "application/x-gzip" }, + { "uue", "application/x-uuencode" }, + { "z", "application/x-compress" }, + { "zip", "application/zip" }, + { "zoo", "application/x-zoo" }, + { "pkg", "application/x-scode-UPkg" }, + { "vdwn", "application/x-scode-UPkg" }, + { "proj", "application/x-mw-project" }, + { "swf", "application/x-shockwave-flash" }, + { "clp", "application/x-codeliege-project" }, + + { "aif", "audio/x-aiff" }, + { "aifc", "audio/x-aifc" }, + { "aiff", "audio/x-aiff" }, + { "au", "audio/basic" }, + { "mid", "audio/x-midi" }, + { "midi", "audio/x-midi" }, + { "mod", "audio/mod" }, + { "ra", "audio/x-real-audio" }, + { "wav", "audio/x-wav" }, + { "mp2", "audio/x-mpeg" }, + { "mp3", "audio/x-mpeg" }, + { "ogg", "audio/x-vorbis" }, + { "mpc", "audio/x-mpc" }, + { "asf", "application/x-asf" }, + { "riff", "application/x-riff" }, + { "wma", "audio/x-ms-wma" }, + + { "bmp", "image/x-bmp" }, + { "fax", "image/g3fax" }, + { "gif", "image/gif" }, + { "iff", "image/x-iff" }, + { "jpg", "image/jpeg" }, + { "jpeg", "image/jpeg" }, + { "pbm", "image/x-portable-bitmap" }, + { "pcx", "image/x-pcx" }, + { "pgm", "image/x-portable-graymap" }, + { "png", "image/png" }, + { "ppm", "image/x-portable-pixmap" }, + { "rgb", "image/x-rgb" }, + { "tga", "image/x-targa" }, + { "tif", "image/tiff" }, + { "tiff", "image/tiff" }, + { "xbm", "image/x-xbitmap" }, + + { "txt", "text/plain" }, + { "ini", "text/plain" }, + { "log", "text/plain" }, + { "bat", "text/plain" }, + { "doc", "text/plain" }, + { "cfg", "text/plain" }, + { "inf", "text/plain" }, + { "htm", "text/html" }, + { "html", "text/html" }, + { "rtf", "text/rtf" }, + { "c", "text/x-source-code" }, + { "cc", "text/x-source-code" }, + { "c++", "text/x-source-code" }, + { "h", "text/x-source-code" }, + { "h++", "text/x-source-code" }, + { "hh", "text/x-source-code" }, + { "hpp", "text/x-source-code" }, + { "pl", "text/x-source-code" }, + { "py", "text/x-source-code" }, + { "cxx", "text/x-source-code" }, + { "cpp", "text/x-source-code" }, + { "S", "text/x-source-code" }, + { "asm", "text/x-source-code" }, + { "bas", "text/x-source-code" }, + { "pas", "text/x-source-code" }, + { "java", "text/x-source-code" }, + + { "avi", "video/x-msvideo" }, + { "mov", "video/quicktime" }, + { "mpg", "video/mpeg" }, + { "mpeg", "video/mpeg" }, + { "ogm", "video/x-ogm" }, + { "wmv", "video/x-ms-wmv" }, + { "rm", "application/vnd.rn-realmedia" }, + { "rn", "application/vnd.rn-realmedia" }, + + { 0, 0 } +}; diff --git a/src/add-ons/kernel/generic/mime_table/module.c b/src/add-ons/kernel/generic/mime_table/module.c new file mode 100644 index 0000000000..e308c38afb --- /dev/null +++ b/src/add-ons/kernel/generic/mime_table/module.c @@ -0,0 +1,96 @@ +/******************************************************************************* +/ +/ File: mime_table.c +/ +/ Description: Kernel module implementing kernel-space mime_table API +/ +/ Copyright 1999, Be Incorporated, All Rights Reserved. +/ This file may be used under the terms of the Be Sample Code License. +/ +*******************************************************************************/ + +#include +#include +#include +#include + +#include +extern struct ext_mime mimes[]; + +#if DEBUG > 0 +#define ddprintf(x) dprintf x +#else +#define ddprintf(x) +#endif + +/* Module static data */ +const char mime_table_module_name[] = B_MIME_TABLE_MODULE_NAME; + +static status_t +std_ops(int32 op, ...) +{ + switch(op) { + case B_MODULE_INIT: + return B_OK; + case B_MODULE_UNINIT: + return B_OK; + default: + /* do nothing */ + ; + } + return -1; +} + +status_t get_table(struct ext_mime **table) +{ + if (!table) + return EINVAL; + /* no need to malloc & copy yet */ + *table = mimes; + return B_OK; +} + +void free_table(struct ext_mime *table) +{ + /* do nothing yet */ +} + +const char *mime_for_ext(const char *ext) +{ + int i; + /* should probably be optimized */ + for (i = 0; mimes[i].extension; i++) { + if (!strcmp(ext, mimes[i].extension)) + return mimes[i].mime; + } + return NULL; +} + +const char *ext_for_mime(const char *mime) +{ + int i; + /* should probably be optimized */ + for (i = 0; mimes[i].mime; i++) { + if (!strcmp(mime, mimes[i].mime)) + return mimes[i].extension; + } + return NULL; +} + +static mime_table_module_info mime_table = { + { + mime_table_module_name, + 0, + std_ops + }, + get_table, + free_table, + mime_for_ext, + ext_for_mime +}; + +_EXPORT mime_table_module_info *modules[] = { + &mime_table, + NULL +}; +