/trunk/BUILDING.md |
---|
104,7 → 104,7 |
* IMPORTANT: Building with MINGW32/64 is currently NOT possible |
because the resoure compiler doesn't resolve the compiler (windres) constants of language.h in |
language_win.rc and shows a syntax error. You can compile if you replace the constants by hand. |
Reported bug in May 8, 2022 via email, because the bugtracker doesn't allow user account creation. |
Bugreport: https://sourceware.org/bugzilla/show_bug.cgi?id=29133 |
* Mingw32 can be hosted on virtually any UNIX or Linux system, or under Windows. |
* Download: http://mingw-w64.org/doku.php/download/mingw-builds |
* Do NOT install mingw32 to a directory that contains white spaces (i.e. "C:\Program Files (x86)\")! |
/trunk/CHANGELOG.md |
---|
8,8 → 8,10 |
- Windows: Standalone filters containing a `&` in Name or Category now have the correct "Visual Themes", as the Manifest XML is not broken anymore. |
- Introduced obfuscation version 7, which is more secure. |
- Windows: Handling of ampersand characters ("&") in Title, Category, Author, Copyright, and Controller/Map labels fixed. |
- Support for "Filter layers" added (not fully tested). |
- FilterFoundry can now work correctly with Duotone and Lab color spaces (PiPL 'mode' entry was wrong) |
- Support for "Filter layers" added (not fully tested; PiPL attribute `'flly'`) (*) |
- FilterFoundry can now work correctly with Duotone and Lab color spaces (PiPL `'mode'` entry was wrong) |
- Internal change: PiPL resource now contains `'8BIM':'cmpt'` (Component) (*) |
- Internal change: PiPL resource now contains `'ViaT':'ObId'` (Object Identifier) (*) |
(*) This bug/solution was tested on Windows but needs to be verified and/or implemented on Mac. |
/trunk/PiPL.rc |
---|
38,11 → 38,15 |
BEGIN |
0x0001, /* Reserved (for Photoshop) */ |
0L, /* kCurrentPiPLVersion */ |
11L, /* Property Count */ |
13L, /* Property Count */ |
VENDORID, LC(c,a,t,g), NULLID, 16L, "\014Telegraphics\0\0\0", /* PString */ |
VENDORID, LC(n,a,m,e), NULLID, 20L, "\021Filter Foundry...\0\0", /* PString */ |
/* "Component". Values taken from Clouds.8BF */ |
/* Note: Length 20 must be divisible by 4 */ |
VENDORID, LC(c,m,p,t), NULLID, 20L, MainComponentVersion, "Filter Foundry\0\0", |
/* HasTerminology { plugInClassID, plugInEventID, AETE_ID, vendorName " " plugInName }, */ |
VENDORID, LC(h,s,t,m), NULLID, 16L, /* = 3*4 + 2 + sizeof(c string) + padding */ |
0L, /* version */ |
49,7 → 53,6 |
LC(F,l,t,r), /* Class ID, always required. Must be eventFilter='Fltr' to show up in "Actions" tab. */ |
LC(f,i,F,o), /* Event ID, or typeNULL if not Filter/Color Picker/Selection. */ |
AETE_ID, /* Dictionary ('AETE') resource ID. (only 2 bytes long!) */ |
/*"Telegraphics FilterFoundry\0\0\0\0"*/ |
/* Unique scope string, C format, long padded. If set, the plugin will only communicate with the host (Photoshop), not with AppleScript. */ |
/* Beginning with 1.7.0.2, we accept AppleScript, since the AETE keys are now randomly chosen for each standalone plugin. */ |
70,7 → 73,7 |
BEGIN |
0x0001, /* Reserved (for Photoshop) */ |
0L, /* kCurrentPiPLVersion */ |
8L, /* Property Count */ |
9L, /* Property Count */ |
VENDORID, LC(w,x,8,6), NULLID, 12L, "PluginMain\0\0", /* Entrypoint Name (Long Word padded C String) */ |
#include "PiPL_body.rc" |
END |
80,7 → 83,7 |
BEGIN |
0x0001, /* Reserved (for Photoshop) */ |
0L, /* kCurrentPiPLVersion */ |
8L, /* Property Count */ |
9L, /* Property Count */ |
VENDORID, LC(8,6,6,4), NULLID, 12L, "PluginMain\0\0", /* Entrypoint Name (Long Word padded C String) */ |
#include "PiPL_body.rc" |
END |
/trunk/PiPL_body.rc |
---|
21,7 → 21,7 |
// This RC file is for Windows only. |
// The PiPL_body contains the properties which are added to PIPL and TPLT (PIPL-Template). |
// PIPL will additionally receive name, catg and hstm |
// Attention: This file may only contain 7 properties. If this number changes, |
// Attention: This file may only contain 8 properties. If this number changes, |
// please also change PiPL.rc |
/* Filter module */ |
69,13 → 69,15 |
VENDORID, LC(f,l,l,y), NULLID, 4L, 0x80L, |
/* Enable info */ |
/* Note: 136 must divisible by 4 */ |
/* Note: Length 136 must be divisible by 4 */ |
/* "Plug-in Resource Guide.pdf", pages 61-62 */ |
VENDORID, LC(e,n,b,l), NULLID, 136L, "in (PSHOP_ImageMode, GrayScaleMode, IndexedColorMode, RGBMode, CMYKMode, HSLMode, HSBMode, MultichannelMode, DuotoneMode, LabMode)\0\0\0\0\0\0", |
/* "Component". Values taken from Clouds.8BF */ |
/* TODO: What is this? Commented out to be sure */ |
/* Note: 20 must divisible by 4 */ |
//VENDORID, LC(c,m,p,t), NULLID, 20L, 0x00170301L, "FilterFoundry\0\0\0", |
/* Object Identifier attribute */ |
/* Note that 'ViaT' is not a official creator code for ViaThinkSoft and it is unclear where a creator code can be aquired from... */ |
/* TODO: In the future, create individual OIDs for standalone filters, i.e. via hash */ |
/* Note: Length 24 must be divisible by 4 */ |
LC(V,i,a,T), LC(O,b,I,d), NULLID, 24L, "1.3.6.1.4.1.37476.2.72\0\0", |
/* MonitorScalingAware */ |
/* TODO: Do we support it? For now, commented out */ |
/trunk/RELEASE.md |
---|
3,7 → 3,7 |
------------------------------ |
1. Fix version information: |
- version.h (3 times) |
- version.h (3 times cleartext + MainComponentVersion) |
- manifest32.xml and manifest64.xml |
- README.md |
- CHANGELOG.md |
/trunk/ff.h |
---|
158,7 → 158,7 |
// from make.c |
unsigned long printablehash(unsigned long hash); |
size_t fixpipl(PIPropertyList *pipl,size_t origsize,char* title, char* category, long *event_id); |
size_t fixpipl(PIPropertyList *pipl,size_t origsize,char* title, char* component, char* category, long *event_id); |
size_t aete_generate(void* aeteptr, PARM_T *pparm, long event_id); |
// from obfusc.c |
/trunk/make.c |
---|
21,6 → 21,7 |
#include <stddef.h> |
#include <stdint.h> |
#include <assert.h> |
#include <time.h> |
#include "ff.h" |
#include "symtab.h" |
153,7 → 154,7 |
return x + pad; |
} |
size_t fixpipl(PIPropertyList *pipl, size_t origsize, char* title, char* category, long *event_id) { |
size_t fixpipl(PIPropertyList *pipl, size_t origsize, char* title, char* component, char* category, long *event_id) { |
PIProperty *prop; |
char *p; |
struct hstm_data { |
169,9 → 170,11 |
unsigned long hash; |
size_t realLength; |
size_t roundedLength; |
unsigned long componentVersion; |
time_t curTime; |
char szScope[0x300]; |
pipl->count += 3; // 3 more keys in PiPL: name, catg, hstm |
pipl->count += 4; // 4 more keys in PiPL: catg, name, cmpt, hstm |
p = (char*)pipl + origsize; |
prop = (PIProperty*)p; |
192,6 → 195,17 |
Photoshop (tested with Photoshop 7) will crash if the propertyLength follows the definition of PICA. |
*/ |
/* add Category property key */ |
prop->vendorID = kPhotoshopSignature; |
prop->propertyKey = PICategoryProperty; |
prop->propertyID = 0; |
prop->propertyLength = (SPInt32)roundToNext4(strlen(category) + 1); |
memset(prop->propertyData, 0x00, prop->propertyLength); // fill padding with 00h bytes (cosmetics) |
myc2pstrcpy((StringPtr)prop->propertyData, category); |
p += offsetof(PIProperty, propertyData) + prop->propertyLength; // skip past new property record, and any padding |
prop = (PIProperty*)p; |
/* add Title/Name property key */ |
prop->vendorID = kPhotoshopSignature; |
200,22 → 214,21 |
prop->propertyLength = (SPInt32)roundToNext4(strlen(title) + 1); |
memset(prop->propertyData, 0x00, prop->propertyLength); // fill padding with 00h bytes (cosmetics) |
myc2pstrcpy((StringPtr)prop->propertyData, title); |
// skip past new property record, and any padding |
p += offsetof(PIProperty, propertyData) + prop->propertyLength; |
p += offsetof(PIProperty, propertyData) + prop->propertyLength; // skip past new property record, and any padding |
prop = (PIProperty*)p; |
/* add Category property key */ |
/* add Component property key */ |
prop->vendorID = kPhotoshopSignature; |
prop->propertyKey = PICategoryProperty; |
prop->propertyKey = PIComponentProperty; |
prop->propertyID = 0; |
prop->propertyLength = (SPInt32)roundToNext4(strlen(category) + 1); |
time(&curTime); |
componentVersion = (unsigned long)curTime - 946681200/*01.Jan.2000 00:00:00*/; |
prop->propertyLength = (SPInt32)roundToNext4(strlen(component) + 1 + sizeof(componentVersion)); |
memset(prop->propertyData, 0x00, prop->propertyLength); // fill padding with 00h bytes (cosmetics) |
myc2pstrcpy((StringPtr)prop->propertyData, category); |
p += offsetof(PIProperty, propertyData) + prop->propertyLength; |
memcpy(prop->propertyData, &componentVersion, sizeof(componentVersion)); |
strcpy((char*)(prop->propertyData+sizeof(componentVersion)), component); |
p += offsetof(PIProperty, propertyData) + prop->propertyLength; // skip past new property record, and any padding |
prop = (PIProperty*)p; |
/* add HasTerminology property key */ |
/trunk/make_mac.c |
---|
84,7 → 84,7 |
origsize = GetHandleSize(hpipl); |
SetHandleSize(hpipl,origsize+0x300); /* some slop for fixup to work with */ |
HLock(hpipl); |
newsize = fixpipl((PIPropertyList*) *hpipl,origsize,title,category,&event_id); |
newsize = fixpipl((PIPropertyList*) *hpipl,origsize,title,gdata->parm.szCategory,category,&event_id); |
HUnlock(hpipl); |
SetHandleSize(hpipl,newsize); |
/trunk/make_win.c |
---|
437,7 → 437,7 |
memcpy(newpipl,datap,origsize); |
/* note that Windows PiPLs have 2 byte version datum in front |
that isn't reflected in struct definition or Mac resource template: */ |
piplsize = fixpipl((PIPropertyList*)(newpipl+2),origsize-2,&title[0],&category[0],&event_id) + 2; |
piplsize = fixpipl((PIPropertyList*)(newpipl+2),origsize-2,&title[0],&gdata->parm.szTitle[0],&category[0],&event_id) + 2; |
/* set up the PARM resource with saved parameters */ |
memcpy(pparm,&gdata->parm,sizeof(PARM_T)); |
/trunk/manifest32.xml |
---|
5,7 → 5,7 |
<assemblyIdentity |
name="Telegraphics.FilterFoundry" |
processorArchitecture="x86" |
version="1.7.0.16" |
version="1.7.0.17" |
type="win32"/> |
<description>Filter Foundry</description> |
<dependency> |
/trunk/manifest64.xml |
---|
5,7 → 5,7 |
<assemblyIdentity |
name="Telegraphics.FilterFoundry" |
processorArchitecture="amd64" |
version="1.7.0.16" |
version="1.7.0.17" |
type="win32"/> |
<description>Filter Foundry</description> |
<dependency> |
/trunk/os_types.md |
---|
75,6 → 75,7 |
| `8BIM` | `mode` | 943868237 1836016741 | 0x3842494d 0x6d6f6465 | PiPL property "SupportedModes" (PIPL.r) | Adobe | |
| `8BIM` | `ms32` | 943868237 1836266290 | 0x3842494d 0x6d733332 | PiPL property "PlugInMaxSize" (PIPL.r) | Adobe | |
| `8BIM` | `fici` | 943868237 1718182761 | 0x3842494d 0x66696369 | PiPL property "FilterCaseInfo" (PIPL.r) | Adobe | |
| `ViaT` | `ObId` | 1449746772 1331841380 | 0x56696154 0x4f624964 | PiPL property "Object Identifier" | ViaThinkSoft | |
Host signatures |
--------------- |
/trunk/os_types.php |
---|
101,6 → 101,7 |
pipl_property_info('8BIM', 'mode', 'PiPL property "SupportedModes" (PIPL.r)', 'Adobe'); |
pipl_property_info('8BIM', 'ms32', 'PiPL property "PlugInMaxSize" (PIPL.r)', 'Adobe'); |
pipl_property_info('8BIM', 'fici', 'PiPL property "FilterCaseInfo" (PIPL.r)', 'Adobe'); |
pipl_property_info('ViaT', 'ObId', 'PiPL property "Object Identifier"', 'ViaThinkSoft'); |
pipl_property_footer(); |
ostype_header("Host signatures"); |
/trunk/version.h |
---|
26,7 → 26,7 |
Note: Changelog has been moved into the file CHANGELOG.md |
For a NEW VERSION, please change: |
- version.h (3 times) |
- version.h (3 times cleartext + MainComponentVersion) |
- manifest32.xml and manifest64.xml |
- README.md |
- CHANGELOG.md |
35,8 → 35,8 |
#define plugInName "FilterFoundry" |
#define VERSION_STR "1.7.0.16" |
#define VERSION_NUM 1,7,0,1 |
#define VERSION_STR "1.7.0.17" |
#define VERSION_NUM 1,7,0,17 |
#define VERS_RSRC VERSION_NUM,verUS,VERSION_STR,"Filter Foundry " VERSION_STR |
44,8 → 44,11 |
#define PROJECT_URL "https://github.com/danielmarschall/filter_foundry" |
/* For the 'cmpt' PIPL attribute */ |
#define MainComponentVersion 0x01070011L // 1.7.0.17 |
/* formatted for Win32 VERSIONINFO resource */ |
#define VI_VERS_NUM 1,7,0,16 |
#define VI_VERS_NUM 1,7,0,17 |
#define VI_FLAGS 0 /* 0 for final, or any of VS_FF_DEBUG,VS_FF_PATCHED,VS_FF_PRERELEASE,VS_FF_PRIVATEBUILD,VS_FF_SPECIALBUILD */ |
#define VI_COMMENTS "Download the latest version here: " PROJECT_URL "\0" /* null terminated Comments field */ |
#define VI_COMPANY_NAME "ViaThinkSoft, Telegraphics Pty Ltd\0" |