Subversion Repositories filter_foundry

Rev

Rev 374 | Rev 378 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
373 daniel-mar 1
#!/usr/bin/php
2
<?php
3
 
4
define('DESC_WIDTH', 55);
5
define('VENDOR_WIDTH', 15);
6
 
7
ob_start();
8
 
9
echo "OSTypes used in Filter Foundry\n";
10
echo "==============================\n";
11
echo "\n";
12
 
13
echo "Note: According to the Photoshop API guide:\n";
14
echo "- All IDs starting with an uppercase letter are reserved by Adobe.\n";
15
echo "- All IDs that are all uppercase are reserved by Apple.\n";
16
echo "- All IDs that are all lowercase are reserved by Apple.\n";
17
echo "- This leaves all IDs that begin with a lowercase letter and have at least\n";
18
echo "  one uppercase letter for you and other plug-in developers.\n";
19
echo "\n";
20
 
21
# ------------------------------------------------------------------------------
22
 
23
ostype_header("AppleScript related");
24
ostype_info('tELE', 'Plugin Suite ID', 'Telegraphics');
25
ostype_info('Fltr', 'Class ID "Filter" (PITerminology.h:eventFilter)', 'Adobe');
26
ostype_info('fiFo', 'Event ID (for non-standalone filter)', 'Telegraphics');
27
ostype_info('xprR', 'Expression "red" channel (for non-standalone filter)', 'Telegraphics');
28
ostype_info('xprG', 'Expression "green" channel (for non-standalone filter)', 'Telegraphics');
29
ostype_info('xprB', 'Expression "blue" channel (for non-standalone filter)', 'Telegraphics');
30
ostype_info('xprA', 'Expression "alpha" channel (for non-standalone filter)', 'Telegraphics');
31
ostype_info('cTl0', 'Slider 0 (for non-standalone filter)', 'Telegraphics');
32
ostype_info('cTl1', 'Slider 1 (for non-standalone filter)', 'Telegraphics');
33
ostype_info('cTl2', 'Slider 2 (for non-standalone filter)', 'Telegraphics');
34
ostype_info('cTl3', 'Slider 3 (for non-standalone filter)', 'Telegraphics');
35
ostype_info('cTl4', 'Slider 4 (for non-standalone filter)', 'Telegraphics');
36
ostype_info('cTl5', 'Slider 5 (for non-standalone filter)', 'Telegraphics');
37
ostype_info('cTl6', 'Slider 6 (for non-standalone filter)', 'Telegraphics');
38
ostype_info('cTl7', 'Slider 7 (for non-standalone filter)', 'Telegraphics');
39
ostype_footer();
40
 
375 daniel-mar 41
echo "Note: For standalone plugins, all FourCC codes above will be replaced ";
42
echo "by different hashes based on the parameter data of the filter (except `tELE` and `Fltr`).\n\n";
43
 
44
// TODO: also display Windows types, e.g. RT_RCDATA = 'DATA' ?
45
ostype_header("Resource fork types");
374 daniel-mar 46
ostype_info('aete', 'Apple Event Terminology', 'Apple'); // https://developer.apple.com/library/archive/documentation/mac/pdf/Interapplication_Communication/AE_Term_Resources.pdf
375 daniel-mar 47
//ostype_info('PiMI', 'Plug-in Meta Information', 'Adobe');
48
ostype_info('PiPL', 'PlugIn Property List', 'Adobe');
49
ostype_info('DATA', 'Generic data (replaced by `tpLT` and `obFS`)', '?');
50
ostype_info('tpLT', 'Template for standalone filter resources', 'Telegraphics'); // actually defined by ViaThinkSoft for Filter Foundry
51
ostype_info('obFS', 'Filter Foundry obfuscated data', 'Telegraphics'); // actually defined by ViaThinkSoft
373 daniel-mar 52
ostype_info('PARM', 'Filter Factory parameter data (PARM.h)', 'Adobe');
375 daniel-mar 53
// https://developer.apple.com/library/archive/documentation/mac/pdf/ResEditReference.pdf
373 daniel-mar 54
// https://developer.apple.com/library/archive/documentation/mac/pdf/MoreMacintoshToolbox.pdf
375 daniel-mar 55
ostype_info('ALRT', 'Alert (only Macintosh build)', 'Apple');
56
ostype_info('DITL', 'Dialog template (only Macintosh build)', 'Apple');
57
ostype_info('CNTL', 'Control (only Macintosh build)', 'Apple');
58
ostype_info('DLOG', 'Dialog (only Macintosh build)', 'Apple');
59
ostype_info('dlgx', 'Extended Dialog (only Macintosh build)', 'Apple');
60
ostype_info('dftb', 'Dialog Font Table (only Macintosh build)', 'Apple');
61
ostype_info('PICT', 'Picture (only Macintosh build)', 'Apple');
62
ostype_info('CURS', 'Cursor (only Macintosh build)', 'Apple');
63
ostype_info('vers', 'Version number (only Macintosh build)', 'Apple');
373 daniel-mar 64
ostype_footer();
65
 
375 daniel-mar 66
ostype_header("Creator codes");
67
ostype_info('8BIM', 'Adobe Photoshop', 'Adobe');
68
ostype_info('8BFM', 'Adobe Filter module (used in `kind` PiPL property)', 'Adobe');
69
ostype_footer();
373 daniel-mar 70
 
375 daniel-mar 71
pipl_property_header("PlugIn Property List (PiPL) properties");
72
pipl_property_info('8BIM', 'catg', 'PiPL property "Category"', 'Adobe');
73
pipl_property_info('8BIM', 'name', 'PiPL property "Name"', 'Adobe');
74
pipl_property_info('8BIM', 'hstm', 'PiPL property "Has terminology"', 'Adobe');
75
pipl_property_info('8BIM', 'wx86', 'PiPL property PIWin32X86CodeProperty (PIGeneral.h)', 'Adobe');
76
pipl_property_info('8BIM', '8664', 'PiPL property PIWin64X86CodeProperty (PIGeneral.h)', 'Adobe');
77
pipl_property_info('8BIM', 'kind', 'PiPL property "Kind" (PIPL.r)', 'Adobe');
78
pipl_property_info('8BIM', 'vers', 'PiPL property "Version" (PIPL.r)', 'Adobe');
79
pipl_property_info('8BIM', 'mode', 'PiPL property "SupportedModes" (PIPL.r)', 'Adobe');
80
pipl_property_info('8BIM', 'ms32', 'PiPL property "PlugInMaxSize" (PIPL.r)', 'Adobe');
81
pipl_property_info('8BIM', 'fici', 'PiPL property "FilterCaseInfo" (PIPL.r)', 'Adobe');
82
pipl_property_footer();
83
 
373 daniel-mar 84
# ------------------------------------------------------------------------------
85
 
86
$out = ob_get_contents();
87
ob_end_clean();
88
 
89
echo $out;
90
 
91
file_put_contents(__DIR__.'/os_types.md', $out);
92
 
93
# ------------------------------------------------------------------------------
94
 
95
function ostype_info($type, $desc, $vendor) {
96
        $dec = 0;
97
        for ($i=0;$i<4;$i++) $dec = ($dec<<8) + ord($type[$i]);
98
        $hex = "0x".str_pad(dechex($dec), 8, "0", STR_PAD_LEFT);
99
        $dec = str_pad($dec, strlen(hexdec('ffffffff')), " ", STR_PAD_LEFT);
100
        $desc = str_pad($desc, DESC_WIDTH, " ", STR_PAD_RIGHT);
101
 
375 daniel-mar 102
        $illegal = false;
373 daniel-mar 103
        if ($vendor != '?') {
104
                $is_all_uppercase = strtoupper($type) == $type;
105
                $is_all_lowercase = strtolower($type) == $type;
106
                $starts_with_uppercase = strtoupper($type[0]) == $type[0];
375 daniel-mar 107
                if (($is_all_uppercase || $is_all_lowercase) && (strpos($vendor,'Apple') === false)) $illegal = true;
108
                else if (!($is_all_uppercase || $is_all_lowercase) && (strpos($vendor,'Apple') !== false)) $illegal = true;
109
                else if ($starts_with_uppercase && !$is_all_uppercase && (strpos($vendor,'Adobe') === false)) $illegal = true;
110
                else if (!$starts_with_uppercase && !$is_all_uppercase && (strpos($vendor,'Adobe') !== false)) $illegal = true;
373 daniel-mar 111
        }
375 daniel-mar 112
        // In re 8B##, we just assume that 8B## was legally assigned to Adobe by Apple
113
        // Note: "8B" sounds like "Adobe"
114
        if ((substr($type,0,2) === '8B') && (strpos($vendor,'Adobe') !== false)) $illegal = false;
373 daniel-mar 115
 
375 daniel-mar 116
        if ($illegal) $vendor .= ' (illegal)';
373 daniel-mar 117
        $vendor = str_pad($vendor, VENDOR_WIDTH, " ", STR_PAD_RIGHT);
118
 
119
        echo "| `$type` | $dec | $hex | $desc | $vendor |\n";
120
}
121
 
122
function ostype_footer() {
123
        echo "\n";
124
}
125
 
126
function ostype_header($title) {
127
        echo "$title\n";
128
        echo str_repeat('-',strlen($title))."\n";
129
        echo "\n";
130
        echo "| Type   | Dec        | Hex        | ".str_pad('Description', DESC_WIDTH, " ", STR_PAD_RIGHT)." | ".str_pad('Vendor', VENDOR_WIDTH, " ", STR_PAD_RIGHT)." |\n";
131
        echo "|--------|------------|------------|".str_repeat('-', DESC_WIDTH+2)."|".str_repeat('-', VENDOR_WIDTH+2)."|\n";
375 daniel-mar 132
}
373 daniel-mar 133
 
375 daniel-mar 134
# ------------------------------------------------------------------------------
135
 
136
function pipl_property_info($ven, $type, $desc, $vendor) {
137
        $vdec = 0;
138
        for ($i=0;$i<4;$i++) $vdec = ($vdec<<8) + ord($ven[$i]);
139
        $vhex = "0x".str_pad(dechex($vdec), 8, "0", STR_PAD_LEFT);
140
        $vdec = str_pad($vdec, strlen(hexdec('ffffffff')), " ", STR_PAD_LEFT);
141
 
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($dec, strlen(hexdec('ffffffff')), " ", STR_PAD_LEFT);
146
 
147
        $desc = str_pad($desc, DESC_WIDTH, " ", STR_PAD_RIGHT);
148
 
149
        // In re 8B##, we just assume that 8B## was legally assigned to Adobe by Apple
150
        // Note: "8B" sounds like "Adobe"
151
        $illegal = (substr($ven,0,2) === '8B') != (strpos($vendor,'Adobe') !== false);
152
 
153
        if ($illegal) $vendor .= ' (illegal)';
154
        $vendor = str_pad($vendor, VENDOR_WIDTH, " ", STR_PAD_RIGHT);
155
 
156
        echo "| `$ven` | `$type` | $vdec $dec | $vhex $hex | $desc | $vendor |\n";
373 daniel-mar 157
}
375 daniel-mar 158
 
159
function pipl_property_footer() {
160
        echo "\n";
161
}
162
 
163
function pipl_property_header($title) {
164
        echo "$title\n";
165
        echo str_repeat('-',strlen($title))."\n";
166
        echo "\n";
167
        echo "| C.code | Prpty. | Dec                   | Hex                   | ".str_pad('Description', DESC_WIDTH, " ", STR_PAD_RIGHT)." | ".str_pad('Vendor', VENDOR_WIDTH, " ", STR_PAD_RIGHT)." |\n";
168
        echo "|--------|--------|-----------------------|-----------------------|".str_repeat('-', DESC_WIDTH+2)."|".str_repeat('-', VENDOR_WIDTH+2)."|\n";
169
}
170