Posted to tcl by colin at Wed Dec 14 18:50:11 GMT 2011view raw

  1. package provide mime-magic 1.0
  2. package require magiclib
  3.  
  4. namespace eval ::magic {}
  5.  
  6. proc ::magic::/magic.mime {} {
  7. switch -- [Nv I 0 ] 779248125 {emit audio/x-pn-realaudio} 442 {emit video/mpeg} 443 {emit video/mpeg} 432 {emit video/mp4v-es} 437 {emit video/mp4v-es} 435 {emit video/mpv} 324508366 {emit application/x-gdbm} 398689 {emit application/x-dbm} 235082497 {emit {Hierarchical Data Format \(version 4\) data}} 6656 {emit application/x-123} 512 {emit application/x-123} 834535424 {emit application/msword}
  8. if {[S 0 == .RMF ]} {emit application/vnd.rn-realmedia}
  9. if {[S 0 == MAS_UTrack_V00 ]} {
  10. if {[S 14 > /0 ]} {emit audio/x-mod}
  11. }
  12. if {[S 0 == {Extended\ Module:} ]} {emit audio/x-mod}
  13. if {[S 21 == !SCREAM! c]} {emit audio/x-mod}
  14. if {[S 21 == BMOD2STM ]} {emit audio/x-mod}
  15. if {[S 1080 == M.K. ]} {emit audio/x-mod}
  16. if {[S 1080 == M!K! ]} {emit audio/x-mod}
  17. if {[S 1080 == FLT4 ]} {emit audio/x-mod}
  18. if {[S 1080 == FLT8 ]} {emit audio/x-mod}
  19. if {[S 1080 == 4CHN ]} {emit audio/x-mod}
  20. if {[S 1080 == 6CHN ]} {emit audio/x-mod}
  21. if {[S 1080 == 8CHN ]} {emit audio/x-mod}
  22. if {[S 1080 == CD81 ]} {emit audio/x-mod}
  23. if {[S 1080 == OKTA ]} {emit audio/x-mod}
  24. if {[S 1080 == 16CN ]} {emit audio/x-mod}
  25. if {[S 1080 == 32CN ]} {emit audio/x-mod}
  26. if {[S 0 == IMPM ]} {emit audio/x-mod}
  27. if {[S 0 == <?xml ]} {
  28. if {[S 38 == {<\!DOCTYPE\040svg} ]} {emit image/svg+xml}
  29. }
  30. if {[S 0 == <?xml ]} {emit text/xml}
  31. switch -- [Nv S 0 ] -13570 {emit {}
  32. if {[N S 2 == 0xbabe ]} {emit application/java}
  33. } 7967 {emit application/octet-stream} 8191 {emit application/octet-stream} -13563 {emit application/octet-stream} 29127 {emit application/x-cpio} -14479 {emit {application/x-cpio swapped}} -4693 {emit {}
  34. if {[N S 2 == 0xeedb ]} {emit application/x-rpm}
  35. } -40 {emit image/jpeg} -26368 {emit {text/PGP key public ring}} -27391 {emit {text/PGP key security ring}} -27392 {emit {text/PGP key security ring}} -23040 {emit {text/PGP encrypted data}} -31487 {emit data} -26367 {emit {text/GnuPG key public ring}} -31487 {emit {text/OpenPGP data}}
  36. if {[S 0 == .snd ]} {switch -- [Nv I 12 ] 1 {emit audio/basic} 2 {emit audio/basic} 3 {emit audio/basic} 4 {emit audio/basic} 5 {emit audio/basic} 6 {emit audio/basic} 7 {emit audio/basic} 23 {emit audio/x-adpcm}
  37. }
  38. switch -- [Nv i 0 ] 6583086 {emit {}
  39. switch -- [Nv i 12 ] 1 {emit audio/x-dec-basic} 2 {emit audio/x-dec-basic} 3 {emit audio/x-dec-basic} 4 {emit audio/x-dec-basic} 5 {emit audio/x-dec-basic} 6 {emit audio/x-dec-basic} 7 {emit audio/x-dec-basic} 23 {emit audio/x-dec-adpcm}
  40. } 324508366 {emit application/x-gdbm} 574529400 {emit application/ms-tnef}
  41. if {[S 8 == AIFF ]} {emit {audio/x-aiff }}
  42. if {[S 8 == AIFC ]} {emit {audio/x-aiff }}
  43. if {[S 8 == 8SVX ]} {emit {audio/x-aiff }}
  44. if {[S 0 == MThd ]} {emit {audio/unknown }}
  45. if {[S 0 == CTMF ]} {emit {audio/unknown }}
  46. if {[S 0 == SBI ]} {emit {audio/unknown }}
  47. if {[S 0 == {Creative\ Voice\ File} ]} {emit {audio/unknown }}
  48. if {[S 0 == RIFF ]} {
  49. if {[S 8 == WAVE ]} {emit audio/x-wav}
  50. if {[S 8 == AVI B]} {emit video/x-msvideo}
  51. if {[S 8 == CDRA ]} {emit image/x-coreldraw}
  52. }
  53. if {[N S 0 == 0xfffa &0xfffe]} {emit audio/mpeg}
  54. if {[S 0 == ID3 ]} {emit audio/mpeg}
  55. if {[S 0 == OggS ]} {emit application/ogg}
  56. if {[S 0 == {/*\ XPM} ]} {emit {image/x-xpm 7bit}}
  57. if {[S 0 == {\#!/bin/sh} ]} {emit application/x-shellscript}
  58. if {[S 0 == {\#!\ /bin/sh} ]} {emit application/x-shellscript}
  59. if {[S 0 == {\#!/bin/csh} ]} {emit application/x-shellscript}
  60. if {[S 0 == {\#!\ /bin/csh} ]} {emit application/x-shellscript}
  61. if {[S 0 == {\#!/bin/ksh} ]} {emit application/x-shellscript}
  62. if {[S 0 == {\#!\ /bin/ksh} ]} {emit application/x-shellscript}
  63. if {[S 0 == {\#!/bin/tcsh} ]} {emit application/x-shellscript}
  64. if {[S 0 == {\#!\ /bin/tcsh} ]} {emit application/x-shellscript}
  65. if {[S 0 == {\#!/usr/local/tcsh} ]} {emit application/x-shellscript}
  66. if {[S 0 == {\#!\ /usr/local/tcsh} ]} {emit application/x-shellscript}
  67. if {[S 0 == {\#!/usr/local/bin/tcsh} ]} {emit application/x-shellscript}
  68. if {[S 0 == {\#!\ /usr/local/bin/tcsh} ]} {emit application/x-shellscript}
  69. if {[S 0 == {\#!/bin/bash} ]} {emit application/x-shellscript}
  70. if {[S 0 == {\#!\ /bin/bash} ]} {emit application/x-shellscript}
  71. if {[S 0 == {\#!/usr/local/bin/bash} ]} {emit application/x-shellscript}
  72. if {[S 0 == {\#!\ /usr/local/bin/bash} ]} {emit application/x-shellscript}
  73. if {[S 0 == {\#!/bin/zsh} ]} {emit application/x-shellscript}
  74. if {[S 0 == {\#!/usr/bin/zsh} ]} {emit application/x-shellscript}
  75. if {[S 0 == {\#!/usr/local/bin/zsh} ]} {emit application/x-shellscript}
  76. if {[S 0 == {\#!\ /usr/local/bin/zsh} ]} {emit application/x-shellscript}
  77. if {[S 0 == {\#!/usr/local/bin/ash} ]} {emit application/x-shellscript}
  78. if {[S 0 == {\#!\ /usr/local/bin/ash} ]} {emit application/x-shellscript}
  79. if {[S 0 == {\#!/bin/nawk} ]} {emit application/x-nawk}
  80. if {[S 0 == {\#!\ /bin/nawk} ]} {emit application/x-nawk}
  81. if {[S 0 == {\#!/usr/bin/nawk} ]} {emit application/x-nawk}
  82. if {[S 0 == {\#!\ /usr/bin/nawk} ]} {emit application/x-nawk}
  83. if {[S 0 == {\#!/usr/local/bin/nawk} ]} {emit application/x-nawk}
  84. if {[S 0 == {\#!\ /usr/local/bin/nawk} ]} {emit application/x-nawk}
  85. if {[S 0 == {\#!/bin/gawk} ]} {emit application/x-gawk}
  86. if {[S 0 == {\#!\ /bin/gawk} ]} {emit application/x-gawk}
  87. if {[S 0 == {\#!/usr/bin/gawk} ]} {emit application/x-gawk}
  88. if {[S 0 == {\#!\ /usr/bin/gawk} ]} {emit application/x-gawk}
  89. if {[S 0 == {\#!/usr/local/bin/gawk} ]} {emit application/x-gawk}
  90. if {[S 0 == {\#!\ /usr/local/bin/gawk} ]} {emit application/x-gawk}
  91. if {[S 0 == {\#!/bin/awk} ]} {emit application/x-awk}
  92. if {[S 0 == {\#!\ /bin/awk} ]} {emit application/x-awk}
  93. if {[S 0 == {\#!/usr/bin/awk} ]} {emit application/x-awk}
  94. if {[S 0 == {\#!\ /usr/bin/awk} ]} {emit application/x-awk}
  95. if {[S 0 == BEGIN ]} {emit application/x-awk}
  96. if {[S 0 == {\#!/bin/perl} ]} {emit application/x-perl}
  97. if {[S 0 == {\#!\ /bin/perl} ]} {emit application/x-perl}
  98. if {[S 0 == {eval\ \"exec\ /bin/perl} ]} {emit application/x-perl}
  99. if {[S 0 == {\#!/usr/bin/perl} ]} {emit application/x-perl}
  100. if {[S 0 == {\#!\ /usr/bin/perl} ]} {emit application/x-perl}
  101. if {[S 0 == {eval\ \"exec\ /usr/bin/perl} ]} {emit application/x-perl}
  102. if {[S 0 == {\#!/usr/local/bin/perl} ]} {emit application/x-perl}
  103. if {[S 0 == {\#!\ /usr/local/bin/perl} ]} {emit application/x-perl}
  104. if {[S 0 == {eval\ \"exec\ /usr/local/bin/perl} ]} {emit application/x-perl}
  105. if {[S 0 == {PK\003\004} ]} {emit application/x-zip}
  106. if {[S 0 == Rar! ]} {emit application/x-rar}
  107. if {[S 0 == {\037\036} ]} {emit application/octet-stream}
  108. if {[S 0 == {\377\037} ]} {emit application/octet-stream}
  109. if {[S 257 == {ustar\0} ]} {emit {application/x-tar posix}}
  110. if {[S 257 == {ustar\040\040\0} ]} {emit {application/x-tar gnu}}
  111. if {[S 0 == <ar> ]} {emit application/x-archive}
  112. if {[S 0 == !<arch> ]} {emit application/x-archive
  113. if {[S 8 == debian ]} {emit application/x-debian-package}
  114. }
  115. switch -- [Nv i 0 &0x8080ffff] 2074 {emit {application/x-arc lzw}} 2330 {emit {application/x-arc squashed}} 538 {emit {application/x-arc uncompressed}} 794 {emit {application/x-arc packed}} 1050 {emit {application/x-arc squeezed}} 1562 {emit {application/x-arc crunched}} 2074 {emit application/x-arc} 2330 {emit application/x-arc} 538 {emit application/x-arc} 794 {emit application/x-arc} 1050 {emit application/x-arc} 1562 {emit application/x-arc}
  116. switch -- [Nv s 0 ] -5536 {emit application/x-arj} 759 {emit application/x-dvi} -20719 {emit video/fli} -20718 {emit video/flc}
  117. if {[S 2 == -lh0- ]} {emit {application/x-lharc lh0}}
  118. if {[S 2 == -lh1- ]} {emit {application/x-lharc lh1}}
  119. if {[S 2 == -lz4- ]} {emit {application/x-lharc lz4}}
  120. if {[S 2 == -lz5- ]} {emit {application/x-lharc lz5}}
  121. if {[S 2 == -lzs- ]} {emit {application/x-lha lzs}}
  122. if {[S 2 == {-lh\ -} ]} {emit {application/x-lha lh}}
  123. if {[S 2 == -lhd- ]} {emit {application/x-lha lhd}}
  124. if {[S 2 == -lh2- ]} {emit {application/x-lha lh2}}
  125. if {[S 2 == -lh3- ]} {emit {application/x-lha lh3}}
  126. if {[S 2 == -lh4- ]} {emit {application/x-lha lh4}}
  127. if {[S 2 == -lh5- ]} {emit {application/x-lha lh5}}
  128. if {[S 2 == -lh6- ]} {emit {application/x-lha lh6}}
  129. if {[S 2 == -lh7- ]} {emit {application/x-lha lh7}}
  130. if {[S 10 == {\#\ This\ is\ a\ shell\ archive} ]} {emit {application/octet-stream x-shell}}
  131. if {[S 0 == <MakerFile ]} {emit application/x-frame}
  132. if {[S 0 == <MIFFile ]} {emit application/x-frame}
  133. if {[S 0 == <MakerDictionary ]} {emit application/x-frame}
  134. if {[S 0 == <MakerScreenFon ]} {emit application/x-frame}
  135. if {[S 0 == <MML ]} {emit application/x-frame}
  136. if {[S 0 == <Book ]} {emit application/x-frame}
  137. if {[S 0 == <Maker ]} {emit application/x-frame}
  138. if {[S 0 == {<!DOCTYPE\ html} cB]} {emit text/html}
  139. if {[S 0 == <head cb]} {emit text/html}
  140. if {[S 0 == <title cb]} {emit text/html}
  141. if {[S 0 == <html bc]} {emit text/html}
  142. if {[S 0 == <!-- ]} {emit text/html}
  143. if {[S 0 == <h1 c]} {emit text/html}
  144. if {[S 0 == <?xml ]} {emit text/xml}
  145. if {[S 0 == P1 ]} {emit {image/x-portable-bitmap 7bit}}
  146. if {[S 0 == P2 ]} {emit {image/x-portable-greymap 7bit}}
  147. if {[S 0 == P3 ]} {emit {image/x-portable-pixmap 7bit}}
  148. if {[S 0 == P4 ]} {emit image/x-portable-bitmap}
  149. if {[S 0 == P5 ]} {emit image/x-portable-greymap}
  150. if {[S 0 == P6 ]} {emit image/x-portable-pixmap}
  151. if {[S 0 == IIN1 ]} {emit image/x-niff}
  152. if {[S 0 == MM ]} {emit image/tiff}
  153. if {[S 0 == II ]} {emit image/tiff}
  154. if {[S 0 == GIF94z ]} {emit image/unknown}
  155. if {[S 0 == FGF95a ]} {emit image/unknown}
  156. if {[S 0 == PBF ]} {emit image/unknown}
  157. if {[S 0 == GIF ]} {emit image/gif}
  158. if {[S 0 == BM ]} {emit image/x-ms-bmp}
  159. if {[S 32769 == CD001 ]} {emit application/x-iso9660}
  160. if {[S 0 == StuffIt ]} {emit application/x-stuffit}
  161. if {[S 11 == {must\ be\ converted\ with\ BinHex\ 4} ]} {emit application/mac-binhex40}
  162. if {[S 0 == {;;} ]} {emit {text/plain 8bit}}
  163. if {[S 0 == {\012\(}]} {emit application/x-elc}
  164. if {[S 0 == {;ELC\023\000\000\000} ]} {emit application/x-elc}
  165. if {[S 0 == Relay-Version: ]} {emit {message/rfc822 7bit}}
  166. if {[S 0 == {\#!\ rnews} ]} {emit {message/rfc822 7bit}}
  167. if {[S 0 == {N\#!\ rnews} ]} {emit {message/rfc822 7bit}}
  168. if {[S 0 == {Forward\ to} ]} {emit {message/rfc822 7bit}}
  169. if {[S 0 == {Pipe\ to} ]} {emit {message/rfc822 7bit}}
  170. if {[S 0 == Return-Path: ]} {emit {message/rfc822 7bit}}
  171. if {[S 0 == Received: ]} {emit message/rfc822}
  172. if {[S 0 == Path: ]} {emit {message/news 8bit}}
  173. if {[S 0 == Xref: ]} {emit {message/news 8bit}}
  174. if {[S 0 == From: ]} {emit {message/rfc822 7bit}}
  175. if {[S 0 == Article ]} {emit {message/news 8bit}}
  176. if {[S 0 == {\376\067\0\043} ]} {emit application/msword}
  177. if {[S 0 == {\320\317\021\340\241\261} ]} {emit application/msword}
  178. if {[S 0 == {\333\245-\0\0\0} ]} {emit application/msword}
  179. if {[S 0 == %! ]} {emit application/postscript}
  180. if {[S 0 == {\004%!} ]} {emit application/postscript}
  181. if {[S 0 == %PDF- ]} {emit application/pdf}
  182. if {[S 38 == Spreadsheet ]} {emit application/x-sc}
  183. if {[S 0 == {\367\002} ]} {emit application/x-dvi}
  184. if {[S 2 == {\000\021} ]} {emit application/x-tex-tfm}
  185. if {[S 2 == {\000\022} ]} {emit application/x-tex-tfm}
  186. if {[S 0 == {\\input\ texinfo} ]} {emit text/x-texinfo}
  187. if {[S 0 == {This\ is\ Info\ file} ]} {emit text/x-info}
  188. if {[S 0 == {\{\\rtf} ]} {emit text/rtf}
  189. if {[N I 0 == 0x47400010 &0xFF5FFF1F]} {emit video/mp2t}
  190. if {[S 0 == MOVI ]} {emit video/sgi}
  191. if {[S 4 == moov ]} {emit video/quicktime}
  192. if {[S 4 == mdat ]} {emit video/quicktime}
  193. if {[S 4 == wide ]} {emit video/quicktime}
  194. if {[S 4 == skip ]} {emit video/quicktime}
  195. if {[S 4 == free ]} {emit video/quicktime}
  196. if {[S 4 == idsc ]} {emit image/x-quicktime}
  197. if {[S 4 == idat ]} {emit image/x-quicktime}
  198. if {[S 4 == pckg ]} {emit application/x-quicktime}
  199. if {[S 4 == jP B]} {emit image/jp2}
  200. if {[S 4 == ftyp ]} {emit application/octet-stream
  201. if {[S 8 == isom ]} {emit video/mp4}
  202. if {[S 8 == mp41 ]} {emit video/mp4}
  203. if {[S 8 == mp42 ]} {emit video/mp4}
  204. if {[S 8 == jp2 B]} {emit image/jp2}
  205. if {[S 8 == 3gp ]} {emit video/3gpp}
  206. if {[S 8 == mmp4 ]} {emit video/mp4}
  207. if {[S 8 == M4A B]} {emit audio/mp4}
  208. if {[S 8 == qt B]} {emit video/quicktime}
  209. }
  210. switch -- [Nv c 0 ] 1 {emit video/unknown} 2 {emit video/unknown}
  211. if {[S 0 == GDBM ]} {emit application/x-gdbm}
  212. if {[S 0 == {\177ELF} ]} {switch -- [Nv s 16 ] 0 {emit application/octet-stream} 1 {emit application/x-object} 2 {emit application/x-executable} 3 {emit application/x-sharedlib} 4 {emit application/x-coredump}
  213. switch -- [Nv S 16 ] 0 {emit application/octet-stream} 1 {emit application/x-object} 2 {emit application/x-executable} 3 {emit application/x-sharedlib} 4 {emit application/x-coredump}
  214. }
  215. if {[S 0 == MZ ]} {emit application/x-dosexec}
  216. if {[S 0 == {[KDE\ Desktop\ Entry]} ]} {emit application/x-kdelnk}
  217. if {[S 0 == {\\#\ KDE\ Config\ File} ]} {emit application/x-kdelnk}
  218. if {[S 0 == {\\#\ xmcd} ]} {emit text/xmcd}
  219. if {[S 0 == {\#\ PaCkAgE\ DaTaStReAm} ]} {emit application/x-svr4-package}
  220. if {[S 0 == {\x89PNG} ]} {emit image/png}
  221. if {[S 0 == {\x8aMNG} ]} {emit video/x-mng}
  222. if {[S 0 == {\x8aJNG} ]} {emit video/x-jng}
  223. if {[S 0 == {\211HDF\r\n\032} ]} {emit {Hierarchical Data Format \(version 5\) data}}
  224. if {[S 0 == 8BPS ]} {emit image/x-photoshop}
  225. if {[S 0 == d8:announce ]} {emit application/x-bittorrent}
  226. if {[S 4 == {Standard\ Jet\ DB} ]} {emit application/msaccess}
  227. if {[S 0 == {-----BEGIN\040PGP} ]} {emit {text/PGP armored data}
  228. if {[S 15 == {PUBLIC\040KEY\040BLOCK-} ]} {emit {public key block}}
  229. if {[S 15 == MESSAGE- ]} {emit message}
  230. if {[S 15 == {SIGNED\040MESSAGE-} ]} {emit {signed message}}
  231. if {[S 15 == {PGP\040SIGNATURE-} ]} {emit signature}
  232. }
  233. if {[S 0 == FWS ]} {
  234. if {[N c 3 x {} ]} {emit application/x-shockwave-flash}
  235. }
  236. if {[S 0 == BZh ]} {emit application/x-bzip2}
  237. if {[S 0 == {\#VRML\ V1.0\ ascii} ]} {emit model/vrml}
  238. if {[S 0 == {\#VRML\ V2.0\ utf8} ]} {emit model/vrml}
  239. if {[S 0 == DOC ]} {
  240. if {[N c 43 == 0x14 ]} {emit application/ichitaro4}
  241. if {[S 144 == JDASH ]} {emit application/ichitaro4}
  242. }
  243. if {[S 0 == DOC ]} {
  244. if {[N c 43 == 0x15 ]} {emit application/ichitaro5}
  245. }
  246. if {[S 0 == DOC ]} {
  247. if {[N c 43 == 0x16 ]} {emit application/ichitaro6}
  248. }
  249. if {[S 2080 == {Microsoft\ Excel\ 5.0\ Worksheet} ]} {emit application/excel}
  250. if {[S 2114 == Biff5 ]} {emit application/excel}
  251. if {[S 0 == {\224\246\056} ]} {emit application/msword}
  252. if {[S 0 == PO^Q` ]} {emit application/msword}
  253. if {[S 0 == {\320\317\021\340\241\261\032\341} ]} {
  254. if {[S 546 == bjbj ]} {emit application/msword}
  255. if {[S 546 == jbjb ]} {emit application/msword}
  256. }
  257. if {[S 512 == {R\0o\0o\0t\0\ \0E\0n\0t\0r\0y} ]} {emit application/msword}
  258. if {[S 2080 == {Microsoft\ Word\ 6.0\ Document} ]} {emit application/msword}
  259. if {[S 2080 == {Documento\ Microsoft\ Word\ 6} ]} {emit application/msword}
  260. if {[S 2112 == MSWordDoc ]} {emit application/msword}
  261. if {[S 0 == {\320\317\021\340\241\261\032\341} ]} {emit application/msword}
  262. if {[S 0 == {\#\ PaCkAgE\ DaTaStReAm} ]} {emit application/x-svr4-package}
  263. if {[S 128 == {PE\000\000} ]} {emit application/octet-stream}
  264. if {[S 0 == {PE\000\000} ]} {emit application/octet-stream}
  265. if {[S 0 == LZ ]} {emit application/octet-stream}
  266. if {[S 0 == MZ ]} {
  267. if {[S 24 == @ ]} {emit application/octet-stream}
  268. }
  269. if {[S 0 == MZ ]} {
  270. if {[S 30 == {Copyright\ 1989-1990\ PKWARE\ Inc.} ]} {emit application/x-zip}
  271. }
  272. if {[S 0 == MZ ]} {
  273. if {[S 30 == {PKLITE\ Copr.} ]} {emit application/x-zip}
  274. }
  275. if {[S 0 == MZ ]} {
  276. if {[S 36 == {LHa's\ SFX} ]} {emit application/x-lha}
  277. }
  278. if {[S 0 == MZ ]} {emit application/octet-stream}
  279. if {[S 2 == -lh ]} {
  280. if {[S 6 == - ]} {emit application/x-lha}
  281. }
  282. if {[N i 20 == 0xfdc4a7dc ]} {emit application/x-zoo}
  283. if {[S 0 == AT&TFORM ]} {emit image/x.djvu}
  284. if {[S 0 == {\0\0MMXPR3\0} ]} {emit application/x-quark-xpress-3}
  285. if {[S 0 == CWS ]} {emit application/x-shockwave-flash}
  286. if {[S 39 == <gmr:Workbook ]} {emit application/x-gnumeric}
  287.  
  288. result
  289.  
  290. return {}
  291. }