Subversion Repositories filter_foundry

Rev

Rev 488 | Rev 519 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. #!/usr/bin/php
  2. <?php
  3.  
  4. /*
  5.     This file is part of "Filter Foundry", a filter plugin for Adobe Photoshop
  6.     Copyright (C) 2003-2009 Toby Thain, toby@telegraphics.com.au
  7.     Copyright (C) 2018-2022 Daniel Marschall, ViaThinkSoft
  8.  
  9.     This program is free software; you can redistribute it and/or modify
  10.     it under the terms of the GNU General Public License as published by
  11.     the Free Software Foundation; either version 2 of the License, or
  12.     (at your option) any later version.
  13.  
  14.     This program is distributed in the hope that it will be useful,
  15.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.     GNU General Public License for more details.
  18.  
  19.     You should have received a copy of the GNU General Public License
  20.     along with this program; if not, write to the Free Software
  21.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  22. */
  23.  
  24. // This script generates the documentation file os_types.md
  25.  
  26. define('DESC_WIDTH', 55);
  27. define('VENDOR_WIDTH', 15);
  28.  
  29. ob_start();
  30.  
  31. echo "OSTypes used in Filter Foundry\n";
  32. echo "==============================\n";
  33. echo "\n";
  34.  
  35. echo "Note: According to the Photoshop API guide:\n";
  36. echo "- All IDs starting with an uppercase letter are reserved by Adobe.\n";
  37. echo "- All IDs that are all uppercase are reserved by Apple.\n";
  38. echo "- All IDs that are all lowercase are reserved by Apple.\n";
  39. echo "- This leaves all IDs that begin with a lowercase letter and have at least\n";
  40. echo "  one uppercase letter for you and other plug-in developers.\n";
  41. echo "\n";
  42.  
  43. # ------------------------------------------------------------------------------
  44.  
  45. ostype_header("AppleScript related");
  46. ostype_info('tELE', 'Plugin Suite ID', 'Telegraphics');
  47. ostype_info('Fltr', 'Class ID "Filter" (PITerminology.h:eventFilter)', 'Adobe');
  48. ostype_info('fiFo', 'Event ID (for non-standalone filter)', 'Telegraphics');
  49. ostype_info('xprR', 'Expression "red" channel (for non-standalone filter)', 'Telegraphics');
  50. ostype_info('xprG', 'Expression "green" channel (for non-standalone filter)', 'Telegraphics');
  51. ostype_info('xprB', 'Expression "blue" channel (for non-standalone filter)', 'Telegraphics');
  52. ostype_info('xprA', 'Expression "alpha" channel (for non-standalone filter)', 'Telegraphics');
  53. ostype_info('cTl0', 'Slider 0 (for non-standalone filter)', 'Telegraphics');
  54. ostype_info('cTl1', 'Slider 1 (for non-standalone filter)', 'Telegraphics');
  55. ostype_info('cTl2', 'Slider 2 (for non-standalone filter)', 'Telegraphics');
  56. ostype_info('cTl3', 'Slider 3 (for non-standalone filter)', 'Telegraphics');
  57. ostype_info('cTl4', 'Slider 4 (for non-standalone filter)', 'Telegraphics');
  58. ostype_info('cTl5', 'Slider 5 (for non-standalone filter)', 'Telegraphics');
  59. ostype_info('cTl6', 'Slider 6 (for non-standalone filter)', 'Telegraphics');
  60. ostype_info('cTl7', 'Slider 7 (for non-standalone filter)', 'Telegraphics');
  61. ostype_footer();
  62.  
  63. echo "Note: For standalone plugins, all FourCC codes above will be replaced ";
  64. echo "by different hashes based on the parameter data of the filter (except `tELE` and `Fltr`).\n\n";
  65.  
  66. // TODO: also display Windows types, e.g. RT_RCDATA = 'DATA' ?
  67. ostype_header("Resource fork types");
  68. ostype_info('aete', 'Apple Event Terminology', 'Apple'); // https://developer.apple.com/library/archive/documentation/mac/pdf/Interapplication_Communication/AE_Term_Resources.pdf
  69. //ostype_info('PiMI', 'Plug-in Meta Information', 'Adobe');
  70. ostype_info('PiPL', 'PlugIn Property List', 'Adobe');
  71. ostype_info('DATA', 'Generic data (replaced by `tpLT` and `obFS`)', '?');
  72. ostype_info('tpLT', 'Template for standalone filter resources', 'ViaThinkSoft');
  73. ostype_info('obFS', 'Filter Foundry obfuscated data', 'ViaThinkSoft');
  74. ostype_info('PARM', 'Filter Factory parameter data (PARM.h)', 'Adobe');
  75. // https://developer.apple.com/library/archive/documentation/mac/pdf/ResEditReference.pdf
  76. // https://developer.apple.com/library/archive/documentation/mac/pdf/MoreMacintoshToolbox.pdf
  77. ostype_info('ALRT', 'Alert (only Macintosh build)', 'Apple');
  78. ostype_info('DITL', 'Dialog template (only Macintosh build)', 'Apple');
  79. ostype_info('CNTL', 'Control (only Macintosh build)', 'Apple');
  80. ostype_info('DLOG', 'Dialog (only Macintosh build)', 'Apple');
  81. ostype_info('dlgx', 'Extended Dialog (only Macintosh build)', 'Apple');
  82. ostype_info('dftb', 'Dialog Font Table (only Macintosh build)', 'Apple');
  83. ostype_info('PICT', 'Picture (only Macintosh build)', 'Apple');
  84. ostype_info('CURS', 'Cursor (only Macintosh build)', 'Apple');
  85. ostype_info('vers', 'Version number (only Macintosh build)', 'Apple');
  86. ostype_footer();
  87.  
  88. ostype_header("Creator codes");
  89. ostype_info('8BIM', 'Adobe Photoshop', 'Adobe');
  90. ostype_info('8BFM', 'Adobe Filter module (used in `kind` PiPL property)', 'Adobe');
  91. ostype_footer();
  92.  
  93. pipl_property_header("PlugIn Property List (PiPL) properties");
  94. pipl_property_info('8BIM', 'catg', 'PiPL property "Category"', 'Adobe');
  95. pipl_property_info('8BIM', 'name', 'PiPL property "Name"', 'Adobe');
  96. pipl_property_info('8BIM', 'hstm', 'PiPL property "Has terminology"', 'Adobe');
  97. pipl_property_info('8BIM', 'wx86', 'PiPL property PIWin32X86CodeProperty (PIGeneral.h)', 'Adobe');
  98. pipl_property_info('8BIM', '8664', 'PiPL property PIWin64X86CodeProperty (PIGeneral.h)', 'Adobe');
  99. pipl_property_info('8BIM', 'kind', 'PiPL property "Kind" (PIPL.r)', 'Adobe');
  100. pipl_property_info('8BIM', 'vers', 'PiPL property "Version" (PIPL.r)', 'Adobe');
  101. pipl_property_info('8BIM', 'mode', 'PiPL property "SupportedModes" (PIPL.r)', 'Adobe');
  102. pipl_property_info('8BIM', 'ms32', 'PiPL property "PlugInMaxSize" (PIPL.r)', 'Adobe');
  103. pipl_property_info('8BIM', 'fici', 'PiPL property "FilterCaseInfo" (PIPL.r)', 'Adobe');
  104. pipl_property_footer();
  105.  
  106. ostype_header("Host signatures");
  107. ostype_info('8BIM', 'Adobe Photoshop', 'Adobe', true);
  108. ostype_info('8BIM', 'PluginCommander (illegal usage of "8BIM")', 'ISV', true);
  109. ostype_info('8BIM', 'Serif Photoplus (illegal usage of "8BIM")', 'ISV', true);
  110. ostype_info('8B)M', 'Adobe Premiere', 'Adobe', true);
  111. ostype_info('PMIG', 'GIMP', 'ISV', true);
  112. ostype_info('UP20', 'IrfanView', 'ISV', true);
  113. ostype_info('PSP9', 'JASC PaintShop Pro X', 'ISV', true);
  114. ostype_info('NDP.', 'Paint.net', 'ISV', true);
  115. ostype_footer();
  116.  
  117. ostype_header("Miscellaneous / internal use");
  118. ostype_info('bNUL', 'No Nuffer Suite (BUFVERSION_NULL)', 'ViaThinkSoft');
  119. ostype_info('bST1', 'Standard Buffer Suite 32bit (BUFVERSION_STD32)', 'ViaThinkSoft');
  120. ostype_info('bST2', 'Standard Buffer Suite 64bit (BUFVERSION_STD64)', 'ViaThinkSoft');
  121. ostype_info('bSU1', 'PICA Buffer Suite 1.0 (BUFVERSION_SUITE32)', 'ViaThinkSoft');
  122. ostype_info('bSU2', 'PICA Buffer Suite 2.0 (BUFVERSION_SUITE64)', 'ViaThinkSoft');
  123. ostype_info('hNUL', 'No Handle Suite (HDLVERSION_NULL)', 'ViaThinkSoft');
  124. ostype_info('hSTD', 'Standard Handle Suite (HDLVERSION_STANDARD)', 'ViaThinkSoft');
  125. ostype_info('hSU1', 'PICA Handle Suite 1.0 (HDLVERSION_SUITE1)', 'ViaThinkSoft');
  126. ostype_info('hSU2', 'PICA Handle Suite 2.0 (HDLVERSION_SUITE2)', 'ViaThinkSoft');
  127. ostype_info('tDRW', 'Initial preview timer (IDT_TIMER_INITPREVIEW_DRAW)', 'ViaThinkSoft');
  128. ostype_footer();
  129.  
  130. # ------------------------------------------------------------------------------
  131.  
  132. $out = ob_get_contents();
  133. ob_end_clean();
  134.  
  135. echo $out;
  136.  
  137. file_put_contents(__DIR__.'/os_types.md', $out);
  138.  
  139. # ------------------------------------------------------------------------------
  140.  
  141. function ostype_info($type, $desc, $vendor, $no_legality_check=false) {
  142.         $dec = 0;
  143.         for ($i=0;$i<4;$i++) $dec = ($dec<<8) + ord($type[$i]);
  144.         $hex = "0x".str_pad(dechex($dec), 8, "0", STR_PAD_LEFT);
  145.         $dec = str_pad((string)$dec, strlen((string)hexdec('ffffffff')), " ", STR_PAD_LEFT);
  146.         $desc = str_pad($desc, DESC_WIDTH, " ", STR_PAD_RIGHT);
  147.  
  148.         $illegal = false;
  149.         if ($vendor != '?') {
  150.                 $is_all_uppercase = strtoupper($type) == $type;
  151.                 $is_all_lowercase = strtolower($type) == $type;
  152.                 $starts_with_uppercase = strtoupper($type[0]) == $type[0];
  153.                 if (($is_all_uppercase || $is_all_lowercase) && (strpos($vendor,'Apple') === false)) $illegal = true;
  154.                 else if (!($is_all_uppercase || $is_all_lowercase) && (strpos($vendor,'Apple') !== false)) $illegal = true;
  155.                 else if ($starts_with_uppercase && !$is_all_uppercase && (strpos($vendor,'Adobe') === false)) $illegal = true;
  156.                 else if (!$starts_with_uppercase && !$is_all_uppercase && (strpos($vendor,'Adobe') !== false)) $illegal = true;
  157.         }
  158.         // In re 8B##, we just assume that 8B## was legally assigned to Adobe by Apple
  159.         // Note: "8B" sounds like "Adobe"
  160.         if ((substr($type,0,2) === '8B') && (strpos($vendor,'Adobe') !== false)) $illegal = false;
  161.  
  162.         if ($no_legality_check) $illegal = false;
  163.  
  164.         if ($illegal) $vendor .= ' (illegal)';
  165.         $vendor = str_pad($vendor, VENDOR_WIDTH, " ", STR_PAD_RIGHT);
  166.  
  167.         echo "| `$type` | $dec | $hex | $desc | $vendor |\n";
  168. }
  169.  
  170. function ostype_footer() {
  171.         echo "\n";
  172. }
  173.  
  174. function ostype_header($title) {
  175.         echo "$title\n";
  176.         echo str_repeat('-',strlen($title))."\n";
  177.         echo "\n";
  178.         echo "| Type   | Dec        | Hex        | ".str_pad('Description', DESC_WIDTH, " ", STR_PAD_RIGHT)." | ".str_pad('Vendor', VENDOR_WIDTH, " ", STR_PAD_RIGHT)." |\n";
  179.         echo "|--------|------------|------------|".str_repeat('-', DESC_WIDTH+2)."|".str_repeat('-', VENDOR_WIDTH+2)."|\n";
  180. }
  181.  
  182. # ------------------------------------------------------------------------------
  183.  
  184. function pipl_property_info($ven, $type, $desc, $vendor) {
  185.         $vdec = 0;
  186.         for ($i=0;$i<4;$i++) $vdec = ($vdec<<8) + ord($ven[$i]);
  187.         $vhex = "0x".str_pad(dechex($vdec), 8, "0", STR_PAD_LEFT);
  188.         $vdec = str_pad((string)$vdec, strlen((string)hexdec('ffffffff')), " ", STR_PAD_LEFT);
  189.  
  190.         $dec = 0;
  191.         for ($i=0;$i<4;$i++) $dec = ($dec<<8) + ord($type[$i]);
  192.         $hex = "0x".str_pad(dechex($dec), 8, "0", STR_PAD_LEFT);
  193.         $dec = str_pad((string)$dec, strlen((string)hexdec('ffffffff')), " ", STR_PAD_LEFT);
  194.  
  195.         $desc = str_pad($desc, DESC_WIDTH, " ", STR_PAD_RIGHT);
  196.  
  197.         // In re 8B##, we just assume that 8B## was legally assigned to Adobe by Apple
  198.         // Note: "8B" sounds like "Adobe"
  199.         $illegal = (substr($ven,0,2) === '8B') != (strpos($vendor,'Adobe') !== false);
  200.  
  201.         if ($illegal) $vendor .= ' (illegal)';
  202.         $vendor = str_pad($vendor, VENDOR_WIDTH, " ", STR_PAD_RIGHT);
  203.  
  204.         echo "| `$ven` | `$type` | $vdec $dec | $vhex $hex | $desc | $vendor |\n";
  205. }
  206.  
  207. function pipl_property_footer() {
  208.         echo "\n";
  209. }
  210.  
  211. function pipl_property_header($title) {
  212.         echo "$title\n";
  213.         echo str_repeat('-',strlen($title))."\n";
  214.         echo "\n";
  215.         echo "| C.code | Prpty. | Dec                   | Hex                   | ".str_pad('Description', DESC_WIDTH, " ", STR_PAD_RIGHT)." | ".str_pad('Vendor', VENDOR_WIDTH, " ", STR_PAD_RIGHT)." |\n";
  216.         echo "|--------|--------|-----------------------|-----------------------|".str_repeat('-', DESC_WIDTH+2)."|".str_repeat('-', VENDOR_WIDTH+2)."|\n";
  217. }
  218.