Subversion Repositories filter_foundry

Compare Revisions

Regard whitespace Rev 514 → Rev 515

/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"