Subversion Repositories filter_foundry

Compare Revisions

Regard whitespace Rev 491 → Rev 492

/trunk/Makefile.mac
52,7 → 52,7
 
# list of source files
SRC_COMMON = main.c funcs.c process.c node.c symtab.c \
ui.c ui_build.c preview.c read.c save.c make.c obfusc.c ff_misc.c \
ui.c ui_build.c preview.c read.c save.c make.c obfusc.c ff_misc.c language.c \
scripting.c y.tab.c lex.yy.c str.c
SRC_OSX = dbg_mac.c ui_mac.c make_mac.c load_mac.c ui_compat_mac.c \
choosefile_nav.c preview_mac.c \
/trunk/Makefile.win
51,7 → 51,7
 
# list of source files
SRC_COMMON = main.c funcs.c process.c node.c symtab.c \
ui.c ui_build.c preview.c read.c save.c make.c obfusc.c ff_misc.c \
ui.c ui_build.c preview.c read.c save.c make.c obfusc.c ff_misc.c language.c \
scripting.c y.tab.c lex.yy.c str.c
SRC_W32 = dbg_win.c manifest.c ui_win.c make_win.c versioninfo_modify_win.c load_win.c ui_compat_win.c \
choosefile_win.c ui_build_win.c compat_string.c compat_win.c compat_win_resource.c \
/trunk/ff.h
34,6 → 34,7
#include "PARM.h"
#include "preview.h"
#include "ff_misc.h"
#include "language.h"
 
#define HOSTSIG_GIMP 'PMIG' // sic: NOT 'GIMP'
#define HOSTSIG_IRFANVIEW 'UP20'
95,7 → 96,7
#define NUM_CELLS 0x100
 
extern struct node *tree[4];
extern char *err[4];
extern TCHAR *err[4];
extern int errpos[4],errstart[4];//,nplanes;
extern uint8_t slider[8];
extern value_type cell[NUM_CELLS];
102,7 → 103,7
extern char *expr[4];
 
extern int tokpos,tokstart,varused[];
extern char *errstr;
extern TCHAR *errstr;
 
//#define DEBUG
 
126,13 → 127,13
void restoreInternalState(InternalState state);
 
// from read.c
Boolean readparams_afs_pff(Handle h,char **reason);
Boolean readparams_afs_pff(Handle h, TCHAR**reason);
void convert_premiere_to_photoshop(PARM_T* photoshop, PARM_T_PREMIERE* premiere);
Boolean readfile_8bf(StandardFileReply *sfr,char **reason);
Boolean readfile_8bf(StandardFileReply *sfr, TCHAR**reason);
Handle readfileintohandle(FILEREF r);
Boolean readfile_afs_pff(StandardFileReply* sfr, char** reason);
Boolean readfile_ffx(StandardFileReply* sfr, char** reason);
Boolean readfile_picotxt(StandardFileReply* sfr, char** reason);
Boolean readfile_afs_pff(StandardFileReply* sfr, TCHAR** reason);
Boolean readfile_ffx(StandardFileReply* sfr, TCHAR** reason);
Boolean readfile_picotxt(StandardFileReply* sfr, TCHAR** reason);
Boolean readPARM(PARM_T* parm,Ptr h);
 
// from save.c
160,8 → 161,8
void deobfusc(PARM_T* pparm);
 
// from loadfile_*.c
Boolean loadfile(StandardFileReply *sfr,char **reason);
Boolean readPARMresource(HMODULE hm,char **reason);
Boolean loadfile(StandardFileReply *sfr, TCHAR**reason);
Boolean readPARMresource(HMODULE hm, TCHAR**reason);
 
// from main.c
int64_t maxspace();
/trunk/language.c
0,0 → 1,46
/*
This file is part of "Filter Foundry", a filter plugin for Adobe Photoshop
Copyright (C) 2003-2009 Toby Thain, toby@telegraphics.com.au
Copyright (C) 2018-2022 Daniel Marschall, ViaThinkSoft
 
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
 
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
 
#include "ff.h"
 
// Attention: No bounds checking!
void FF_GetMsg(TCHAR* ret, int MsgId) {
#ifdef WIN_ENV
TCHAR* szMsg;
int len;
len = LoadString(hDllInstance, MsgId, (LPTSTR)&szMsg, 0);
LoadString(hDllInstance, MsgId, ret, len);
#else
Str255 msg;
GetIndString(msg, 1000, MsgId);
myp2cstrcpy(ret, msg);
#endif
}
 
TCHAR* FF_GetMsg_Cpy(int MsgId) {
TCHAR* szMsg;
int len;
TCHAR* ret;
len = LoadString(hDllInstance, MsgId, (LPTSTR)&szMsg, 0);
ret = (TCHAR*)malloc((len+1) * sizeof(TCHAR)); // TODO: This leaks memory! Like _strdup() does... Not a good design!
if (ret == NULL) return NULL;
LoadString(hDllInstance, MsgId, ret, len);
return ret;
}
/trunk/language.h
0,0 → 1,179
/*
This file is part of "Filter Foundry", a filter plugin for Adobe Photoshop
Copyright (C) 2003-2009 Toby Thain, toby@telegraphics.com.au
Copyright (C) 2018-2022 Daniel Marschall, ViaThinkSoft
 
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
 
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
 
// TODO: Search for more things to translate, e.g. in *_mac.*
// TODO: Translate "TODO: Translate" in *.c
// TODO: Translate dialogs
 
// TODO: Deutsche Umlaute sind kaputt (UTF8 Zeichen werden gezeigt)
// Hiermit geht es aber...
// Meldung "Unbekanntes Pragma" (trotzdem bringt es was?!)
#pragma code_page(65001)
 
#define MSG_PREMIERE_COMPAT_ID 1
#define MSG_PREMIERE_COMPAT_ENUS "This version of Filter Foundry is not compatible with Adobe Premiere!";
#define MSG_PREMIERE_COMPAT_DEDE "Diese Version von Filter Foundry ist mit Adobe Premiere nicht kompatibel!"
 
#define MSG_RUNDLL_ERR_ID 2
#define MSG_RUNDLL_ERR_ENUS "You tried to execute this DLL with RunDLL32. This is a Photoshop plugin!"
#define MSG_RUNDLL_ERR_DEDE "Es wurde versucht, diese DLL mit RunDLL32 aufzurufen, aber dies ist ein Photoshop-Plugin!"
 
#define MSG_INCOMPATIBLE_OBFUSCATION_ID 3
#define MSG_INCOMPATIBLE_OBFUSCATION_ENUS "Incompatible obfuscation."
#define MSG_INCOMPATIBLE_OBFUSCATION_DEDE "Inkompatible Verschlüsselung."
 
#define MSG_FILTER_PROTECTED_ID 4
#define MSG_FILTER_PROTECTED_ENUS "The filter is protected."
#define MSG_FILTER_PROTECTED_DEDE "Der Filter ist geschützt."
 
#define MSG_LOADFILE_UNKNOWN_FORMAT_ID 5
#define MSG_LOADFILE_UNKNOWN_FORMAT_ENUS "It is not a text parameter file, nor a standalone Mac/PC filter created by Filter Factory/Filter Foundry."
#define MSG_LOADFILE_UNKNOWN_FORMAT_DEDE "Dies ist keine gültige Paramter-Datei, und auch kein Mac/PC Filter, der mit Filter Factory oder Filter Foundry erstellt wurde."
 
#define MSG_INVALID_PARAMETER_DATA_ID 6
#define MSG_INVALID_PARAMETER_DATA_ENUS "Invalid parameter data."
#define MSG_INVALID_PARAMETER_DATA_DEDE "Ungültige Parameter-Daten."
 
#define MSG_CANNOT_ZOOM_ID 7
#define MSG_CANNOT_ZOOM_ENUS "Could not build preview at chosen zoom level."
#define MSG_CANNOT_ZOOM_DEDE "Die Vorschau konnte nicht in dieser Vergrößerung erstellt werden."
 
#define MSG_CANNOT_ZOOM_MEMFULL_ID 8
#define MSG_CANNOT_ZOOM_MEMFULL_ENUS "Could not build preview at chosen zoom level. The image is too large for available memory. Try zooming in.\nIf that does not help, cancel and retry the filter."
#define MSG_CANNOT_ZOOM_MEMFULL_DEDE "Die Vorschau konnte nicht in dieser Vergrößerung erstellt werden, da das Bild zu groß für den verfügbaren Speicher ist. Versuchen Sie, die Vorschau zu vergrößern.\nWenn dies nicht hilft, brechen Sie den Filter ab und starten Sie ihn neu."
 
#define MSG_BUILT32_ID 9
#define MSG_BUILT32_ENUS "32 bit standalone filter was successfully created"
#define MSG_BUILT32_DEDE "32-Bit Filter wurde erfolgreich erzeugt"
 
#define MSG_BUILT64_ID 10
#define MSG_BUILT64_ENUS "64 bit standalone filter was successfully created"
#define MSG_BUILT64_DEDE "64-Bit Filter wurde erfolgreich erzeugt"
 
#define MSG_CANNOT_OPEN_FILE_ID 11
#define MSG_CANNOT_OPEN_FILE_ENUS "Could not open the file."
#define MSG_CANNOT_OPEN_FILE_DEDE "Kann Datei nicht öffnen."
 
#define MSG_CANNOT_CREATE_FILE_ID 12
#define MSG_CANNOT_CREATE_FILE_ENUS "Could not create the file."
#define MSG_CANNOT_CREATE_FILE_DEDE "Kann Datei nicht erstellen."
 
#define MSG_EXPRESSION1024_FOUND_ID 13
#define MSG_EXPRESSION1024_FOUND_ENUS "Found an expression longer than 1024 characters."
#define MSG_EXPRESSION1024_FOUND_DEDE "Es wurde eine Formel gefunden, die länger als 1024 Zeichen ist."
 
#define MSG_EXPRESSION_OOM_ID 14
#define MSG_EXPRESSION_OOM_ENUS "Could not get memory for expression."
#define MSG_EXPRESSION_OOM_DEDE "Kann nicht genügend Speicher für die Formel erhalten."
 
#define MSG_FILTERS_UNLIMITED_WARNING_ID 15
#define MSG_FILTERS_UNLIMITED_WARNING_ENUS "Attention! You are loading a ""Filters Unlimited"" file. Please note that Filter Foundry only implements the basic Filter Factory functions. Therefore, most ""Filters Unlimited"" filters won't work with Filter Foundry."
#define MSG_FILTERS_UNLIMITED_WARNING_DEDE "Achtung! Sie laden ein Datei, die mit ""Filters Unlimited"" erstellt wurde. Bitte beachten Sie, dass Filter Foundry nur die grundlegenden Filter Factory-Funktionalitäten implementiert. Deswegen werden die meisten ""Filters Unlimited"" Filter nicht mit Filter Foundry funktionieren."
 
#define MSG_FORMULA_IR_1023_TRUNCATED_ID 16
#define MSG_FORMULA_IR_1023_TRUNCATED_ENUS "Attention! The formula for channel I/R was too long (longer than 1023 characters) and was truncated."
#define MSG_FORMULA_IR_1023_TRUNCATED_DEDE "Achtung! Die Formel für den Rot/Intro-Kanal ist zu lang (länger als 1023 Zeichen) und wurde deshalb abgeschnitten."
 
#define MSG_FORMULA_R_1023_TRUNCATED_ID 17
#define MSG_FORMULA_R_1023_TRUNCATED_ENUS "Attention! The formula for channel R was too long (longer than 1023 characters) and was truncated."
#define MSG_FORMULA_R_1023_TRUNCATED_DEDE "Achtung! Die Formel für den Rot-Kanal ist zu lang (länger als 1023 Zeichen) und wurde deshalb abgeschnitten."
 
#define MSG_FORMULA_G_1023_TRUNCATED_ID 18
#define MSG_FORMULA_G_1023_TRUNCATED_ENUS "Attention! The formula for channel G was too long (longer than 1023 characters) and was truncated."
#define MSG_FORMULA_G_1023_TRUNCATED_DEDE "Achtung! Die Formel für den Grün-Kanal ist zu lang (länger als 1023 Zeichen) und wurde deshalb abgeschnitten."
 
#define MSG_FORMULA_B_1023_TRUNCATED_ID 19
#define MSG_FORMULA_B_1023_TRUNCATED_ENUS "Attention! The formula for channel B was too long (longer than 1023 characters) and was truncated."
#define MSG_FORMULA_B_1023_TRUNCATED_DEDE "Achtung! Die Formel für den Blau-Kanal ist zu lang (länger als 1023 Zeichen) und wurde deshalb abgeschnitten."
 
#define MSG_FORMULA_A_1023_TRUNCATED_ID 20
#define MSG_FORMULA_A_1023_TRUNCATED_ENUS "Attention! The formula for channel A was too long (longer than 1023 characters) and was truncated."
#define MSG_FORMULA_A_1023_TRUNCATED_DEDE "Achtung! Die Formel für den Alpha-Kanal ist zu lang (länger als 1023 Zeichen) und wurde deshalb abgeschnitten."
 
#define MSG_CANNOT_CREATE_32BIT_FILTER_ID 21
#define MSG_CANNOT_CREATE_32BIT_FILTER_ENUS "Could not create 32 bit standalone filter"
#define MSG_CANNOT_CREATE_32BIT_FILTER_DEDE "Konnte keinen 32-Bit Filter erzeugen"
 
#define MSG_CANNOT_CREATE_64BIT_FILTER_ID 22
#define MSG_CANNOT_CREATE_64BIT_FILTER_ENUS "Could not create 64 bit standalone filter"
#define MSG_CANNOT_CREATE_64BIT_FILTER_DEDE "Konnte keinen 64-Bit Filter erzeugen"
 
#define MSG_CANNOT_SAVE_SETTINGS_ID 23
#define MSG_CANNOT_SAVE_SETTINGS_ENUS "Could not save settings."
#define MSG_CANNOT_SAVE_SETTINGS_DEDE "Einstellungen konnten nicht gespeichert werden."
 
#define MSG_CANNOT_LOAD_SETTINGS_ID 24
#define MSG_CANNOT_LOAD_SETTINGS_ENUS "Could not load settings."
#define MSG_CANNOT_LOAD_SETTINGS_DEDE "Einstellungen konnten nicht geladen werden."
 
#define MSG_SAVED_EXPR_ERR_ID 25
#define MSG_SAVED_EXPR_ERR_ENUS "Can't run this filter (there is a problem with the saved expressions)."
#define MSG_SAVED_EXPR_ERR_DEDE "Dieser Filter kann nicht ausgeführt werden, da es ein Problem mit den enthaltenen Formeln gibt."
 
#define MSG_CATEGORY_EMPTY_ERR_ID 26
#define MSG_CATEGORY_EMPTY_ERR_ENUS "Category must not be empty!"
#define MSG_CATEGORY_EMPTY_ERR_DEDE "Kategorie darf nicht leer sein!"
 
#define MSG_TITLE_EMPTY_ERR_ID 27
#define MSG_TITLE_EMPTY_ERR_ENUS "Title must not be empty!"
#define MSG_TITLE_EMPTY_ERR_DEDE "Titel darf nicht leer sein!"
 
#define MSG_UNICODE_DATA_WARNING_ID 28
#define MSG_UNICODE_DATA_WARNING_ENUS "The internal structures of Photoshop and Filter Factory are not compatible with Unicode characters. It is highly recommended that you only use characters of your current charset. Unicode characters will be converted into question mark symbols."
#define MSG_UNICODE_DATA_WARNING_DEDE "Die internen Strukturen von Photoshop und Filter Factory sind nicht kompatibel mit Unicode-Zeichen. Es wird sehr stark empfohlen, dass Sie nur Zeichen aus Ihrem aktuellen Zeichensatz verwenden. Unicode-Zeichen werden in Fragezeichen-Symbole umgewandelt werden."
 
#define MSG_EXTCHARSET_DATA_WARNING_ID 29
#define MSG_EXTCHARSET_DATA_WARNING_ENUS "You were using characters of an extended charset. The characters might look correct on your machine, but on a machine in a different country the characters might look wrong. Please consider using the ASCII character set only (i.e. Latin characters without accent marks)."
#define MSG_EXTCHARSET_DATA_WARNING_DEDE "Sie verwenden besondere Zeichen wie z.B. Umlaute. Diese Zeichen werden auf Ihrem System normal aussehen, jedoch werden sie auf einem fremdsprachigen Computer falsch dargestellt werden. Bitte ziehen Sie in Betracht, nur ASCII-Zeichen zu verwenden (A-Z, ohne Umlaute)."
 
#define MSG_SLIDER_UNAVAILABLE_ID 30
#define MSG_SLIDER_UNAVAILABLE_ENUS "Visual sliders are not available because neither PLUGIN.DLL (part of Photoshop), nor the Microsoft Trackbar Control (msctls_trackbar32) was found on your system."
#define MSG_SLIDER_UNAVAILABLE_DEDE "Schiebe-Regler sind nicht verfügbar, da weder PLUGIN.DLL (Bestandteil von Photoshop), noch die Microsoft Trackbar Control (msctls_trackbar32) auf Ihrem System gefunden wurden."
 
#define MSG_PICO_SAVED_ID 31
#define MSG_PICO_SAVED_ENUS "The file was successfully saved in the ""PluginCommander"" TXT format. The file will now be opened in a text editor, so that you can fill in the missing data: Category, Title, Copyright, Author, Filename, and Slider/Map names."
#define MSG_PICO_SAVED_DEDE "Die Datei wurde erfolgreich im ""PluginCommander"" TXT-Format gespeichert. Die Datei wird nun in einem Text-Editor geöffnet, sodass Sie die fehlenden Angaben ergänzen können: Kategorie, Titel, Copyright, Autor, Dateiname und Regler-Namen."
 
#define MSG_PLEASE_EDIT_MANUALLY_ID 32
#define MSG_PLEASE_EDIT_MANUALLY_ENUS "Please edit the file manually to enter the title, category, author, copyright, slider names, etc."
#define MSG_PLEASE_EDIT_MANUALLY_DEDE "Bitte bearbeiten Sie die Datei manuell und tragen Sie dort ein: Titel, Kategorie, Autor, Copyright, Regler-Namen, usw."
 
#define MSG_FIND_DOKU_HERE_ID 33
#define MSG_FIND_DOKU_HERE_ENUS "You can find the documentation here: https://github.com/danielmarschall/filter_foundry/tree/master/doc"
#define MSG_FIND_DOKU_HERE_DEDE "Sie können die englisch-sprachige Dokumentation hier finden: https://github.com/danielmarschall/filter_foundry/tree/master/doc"
 
#define MSG_ERROR_IN_EXPRESSION_CLICK_DETAILS_ID 34
#define MSG_ERROR_IN_EXPRESSION_CLICK_DETAILS_ENUS "Error in expression! Click to see details."
#define MSG_ERROR_IN_EXPRESSION_CLICK_DETAILS_DEDE "Fehler in der Formel! Klicken für mehr Details."
 
#define MSG_ZOOM_IN_ID 35
#define MSG_ZOOM_IN_ENUS "Zoom in"
#define MSG_ZOOM_IN_DEDE "Vergrößern"
 
#define MSG_ZOOM_OUT_ID 36
#define MSG_ZOOM_OUT_ENUS "Zoom out"
#define MSG_ZOOM_OUT_DEDE "Verkleinern"
 
#define MSG_FULLY_ZOOM_INOUT_ID 37
#define MSG_FULLY_ZOOM_INOUT_ENUS "Fully zoom in/out"
#define MSG_FULLY_ZOOM_INOUT_DEDE "Vollständig rein/raus-zoomen"
 
void FF_GetMsg(TCHAR* ret, int MsgId);
TCHAR* FF_GetMsg_Cpy(int MsgId);
/trunk/language_mac.r
0,0 → 1,64
/*
This file is part of "Filter Foundry", a filter plugin for Adobe Photoshop
Copyright (C) 2003-2009 Toby Thain, toby@telegraphics.com.au
Copyright (C) 2018-2022 Daniel Marschall, ViaThinkSoft
 
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
 
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
 
#include "language.h"
 
resource 'STR#' (1000, purgeable)
{
{
MSG_PREMIERE_COMPAT_ENUS,
MSG_RUNDLL_ERR_ENUS,
MSG_INCOMPATIBLE_OBFUSCATION_ENUS,
MSG_FILTER_PROTECTED_ENUS,
MSG_LOADFILE_UNKNOWN_FORMAT_ENUS,
MSG_INVALID_PARAMETER_DATA_ENUS,
MSG_CANNOT_ZOOM_ENUS,
MSG_CANNOT_ZOOM_MEMFULL_ENUS,
MSG_BUILT32_ENUS,
MSG_BUILT64_ENUS,
MSG_CANNOT_OPEN_FILE_ENUS,
MSG_CANNOT_CREATE_FILE_ENUS,
MSG_EXPRESSION1024_FOUND_ENUS,
MSG_EXPRESSION_OOM_ENUS,
MSG_FILTERS_UNLIMITED_WARNING_ENUS,
MSG_FORMULA_IR_1023_TRUNCATED_ENUS,
MSG_FORMULA_R_1023_TRUNCATED_ENUS,
MSG_FORMULA_G_1023_TRUNCATED_ENUS,
MSG_FORMULA_B_1023_TRUNCATED_ENUS,
MSG_FORMULA_A_1023_TRUNCATED_ENUS,
MSG_CANNOT_CREATE_32BIT_FILTER_ENUS,
MSG_CANNOT_CREATE_64BIT_FILTER_ENUS,
MSG_CANNOT_SAVE_SETTINGS_ENUS,
MSG_CANNOT_LOAD_SETTINGS_ENUS,
MSG_SAVED_EXPR_ERR_ENUS,
MSG_CATEGORY_EMPTY_ERR_ENUS,
MSG_TITLE_EMPTY_ERR_ENUS,
MSG_UNICODE_DATA_WARNING_ENUS,
MSG_EXTCHARSET_DATA_WARNING_ENUS,
MSG_SLIDER_UNAVAILABLE_ENUS,
MSG_PICO_SAVED_ENUS,
MSG_PLEASE_EDIT_MANUALLY_ENUS,
MSG_FIND_DOKU_HERE_ENUS,
MSG_ERROR_IN_EXPRESSION_CLICK_DETAILS_ENUS,
MSG_ZOOM_IN_ENUS,
MSG_ZOOM_OUT_ENUS,
MSG_FULLY_ZOOM_INOUT_ENUS
}
}
/trunk/language_win.rc
0,0 → 1,107
/*
This file is part of "Filter Foundry", a filter plugin for Adobe Photoshop
Copyright (C) 2003-2009 Toby Thain, toby@telegraphics.com.au
Copyright (C) 2018-2022 Daniel Marschall, ViaThinkSoft
 
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
 
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
 
#include "language.h"
 
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
STRINGTABLE
{
// TODO: mingw windres does not want the MSG_* defines here :-( Why?! Even Watcom can do it!
MSG_PREMIERE_COMPAT_ID, MSG_PREMIERE_COMPAT_ENUS
MSG_RUNDLL_ERR_ID, MSG_RUNDLL_ERR_ENUS
MSG_INCOMPATIBLE_OBFUSCATION_ID, MSG_INCOMPATIBLE_OBFUSCATION_ENUS
MSG_FILTER_PROTECTED_ID, MSG_FILTER_PROTECTED_ENUS
MSG_LOADFILE_UNKNOWN_FORMAT_ID, MSG_LOADFILE_UNKNOWN_FORMAT_ENUS
MSG_INVALID_PARAMETER_DATA_ID, MSG_INVALID_PARAMETER_DATA_ENUS
MSG_CANNOT_ZOOM_ID, MSG_CANNOT_ZOOM_ENUS
MSG_CANNOT_ZOOM_MEMFULL_ID, MSG_CANNOT_ZOOM_MEMFULL_ENUS
MSG_BUILT32_ID, MSG_BUILT32_ENUS
MSG_BUILT64_ID, MSG_BUILT64_ENUS
MSG_CANNOT_OPEN_FILE_ID, MSG_CANNOT_OPEN_FILE_ENUS
MSG_CANNOT_CREATE_FILE_ID, MSG_CANNOT_CREATE_FILE_ENUS
MSG_EXPRESSION1024_FOUND_ID, MSG_EXPRESSION1024_FOUND_ENUS
MSG_EXPRESSION_OOM_ID, MSG_EXPRESSION_OOM_ENUS
MSG_FILTERS_UNLIMITED_WARNING_ID, MSG_FILTERS_UNLIMITED_WARNING_ENUS
MSG_FORMULA_IR_1023_TRUNCATED_ID, MSG_FORMULA_IR_1023_TRUNCATED_ENUS
MSG_FORMULA_R_1023_TRUNCATED_ID, MSG_FORMULA_R_1023_TRUNCATED_ENUS
MSG_FORMULA_G_1023_TRUNCATED_ID, MSG_FORMULA_G_1023_TRUNCATED_ENUS
MSG_FORMULA_B_1023_TRUNCATED_ID, MSG_FORMULA_B_1023_TRUNCATED_ENUS
MSG_FORMULA_A_1023_TRUNCATED_ID, MSG_FORMULA_A_1023_TRUNCATED_ENUS
MSG_CANNOT_CREATE_32BIT_FILTER_ID, MSG_CANNOT_CREATE_32BIT_FILTER_ENUS
MSG_CANNOT_CREATE_64BIT_FILTER_ID, MSG_CANNOT_CREATE_64BIT_FILTER_ENUS
MSG_CANNOT_SAVE_SETTINGS_ID, MSG_CANNOT_SAVE_SETTINGS_ENUS
MSG_CANNOT_LOAD_SETTINGS_ID, MSG_CANNOT_LOAD_SETTINGS_ENUS
MSG_SAVED_EXPR_ERR_ID, MSG_SAVED_EXPR_ERR_ENUS
MSG_CATEGORY_EMPTY_ERR_ID, MSG_CATEGORY_EMPTY_ERR_ENUS
MSG_TITLE_EMPTY_ERR_ID, MSG_TITLE_EMPTY_ERR_ENUS
MSG_UNICODE_DATA_WARNING_ID, MSG_UNICODE_DATA_WARNING_ENUS
MSG_EXTCHARSET_DATA_WARNING_ID, MSG_EXTCHARSET_DATA_WARNING_ENUS
MSG_SLIDER_UNAVAILABLE_ID, MSG_SLIDER_UNAVAILABLE_ENUS
MSG_PICO_SAVED_ID, MSG_PICO_SAVED_ENUS
MSG_PLEASE_EDIT_MANUALLY_ID, MSG_PLEASE_EDIT_MANUALLY_ENUS
MSG_FIND_DOKU_HERE_ID, MSG_FIND_DOKU_HERE_ENUS
MSG_ERROR_IN_EXPRESSION_CLICK_DETAILS_ID, MSG_ERROR_IN_EXPRESSION_CLICK_DETAILS_ENUS
MSG_ZOOM_IN_ID, MSG_ZOOM_IN_ENUS
MSG_ZOOM_OUT_ID, MSG_ZOOM_OUT_ENUS
MSG_FULLY_ZOOM_INOUT_ID, MSG_FULLY_ZOOM_INOUT_ENUS
}
 
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
STRINGTABLE
{
// TODO: mingw windres does not want the MSG_* defines here :-( Why?! Even Watcom can do it!
MSG_PREMIERE_COMPAT_ID, MSG_PREMIERE_COMPAT_DEDE
MSG_RUNDLL_ERR_ID, MSG_RUNDLL_ERR_DEDE
MSG_INCOMPATIBLE_OBFUSCATION_ID, MSG_INCOMPATIBLE_OBFUSCATION_DEDE
MSG_FILTER_PROTECTED_ID, MSG_FILTER_PROTECTED_DEDE
MSG_LOADFILE_UNKNOWN_FORMAT_ID, MSG_LOADFILE_UNKNOWN_FORMAT_DEDE
MSG_INVALID_PARAMETER_DATA_ID, MSG_INVALID_PARAMETER_DATA_DEDE
MSG_CANNOT_ZOOM_ID, MSG_CANNOT_ZOOM_DEDE
MSG_CANNOT_ZOOM_MEMFULL_ID, MSG_CANNOT_ZOOM_MEMFULL_DEDE
MSG_BUILT32_ID, MSG_BUILT32_DEDE
MSG_BUILT64_ID, MSG_BUILT64_DEDE
MSG_CANNOT_OPEN_FILE_ID, MSG_CANNOT_OPEN_FILE_DEDE
MSG_CANNOT_CREATE_FILE_ID, MSG_CANNOT_CREATE_FILE_DEDE
MSG_EXPRESSION1024_FOUND_ID, MSG_EXPRESSION1024_FOUND_DEDE
MSG_EXPRESSION_OOM_ID, MSG_EXPRESSION_OOM_DEDE
MSG_FILTERS_UNLIMITED_WARNING_ID, MSG_FILTERS_UNLIMITED_WARNING_DEDE
MSG_FORMULA_IR_1023_TRUNCATED_ID, MSG_FORMULA_IR_1023_TRUNCATED_DEDE
MSG_FORMULA_R_1023_TRUNCATED_ID, MSG_FORMULA_R_1023_TRUNCATED_DEDE
MSG_FORMULA_G_1023_TRUNCATED_ID, MSG_FORMULA_G_1023_TRUNCATED_DEDE
MSG_FORMULA_B_1023_TRUNCATED_ID, MSG_FORMULA_B_1023_TRUNCATED_DEDE
MSG_FORMULA_A_1023_TRUNCATED_ID, MSG_FORMULA_A_1023_TRUNCATED_DEDE
MSG_CANNOT_CREATE_32BIT_FILTER_ID, MSG_CANNOT_CREATE_32BIT_FILTER_DEDE
MSG_CANNOT_CREATE_64BIT_FILTER_ID, MSG_CANNOT_CREATE_64BIT_FILTER_DEDE
MSG_CANNOT_SAVE_SETTINGS_ID, MSG_CANNOT_SAVE_SETTINGS_DEDE
MSG_CANNOT_LOAD_SETTINGS_ID, MSG_CANNOT_LOAD_SETTINGS_DEDE
MSG_SAVED_EXPR_ERR_ID, MSG_SAVED_EXPR_ERR_DEDE
MSG_CATEGORY_EMPTY_ERR_ID, MSG_CATEGORY_EMPTY_ERR_DEDE
MSG_TITLE_EMPTY_ERR_ID, MSG_TITLE_EMPTY_ERR_DEDE
MSG_UNICODE_DATA_WARNING_ID, MSG_UNICODE_DATA_WARNING_DEDE
MSG_EXTCHARSET_DATA_WARNING_ID, MSG_EXTCHARSET_DATA_WARNING_DEDE
MSG_SLIDER_UNAVAILABLE_ID, MSG_SLIDER_UNAVAILABLE_DEDE
MSG_PICO_SAVED_ID, MSG_PICO_SAVED_DEDE
MSG_PLEASE_EDIT_MANUALLY_ID, MSG_PLEASE_EDIT_MANUALLY_DEDE
MSG_FIND_DOKU_HERE_ID, MSG_FIND_DOKU_HERE_DEDE
MSG_ERROR_IN_EXPRESSION_CLICK_DETAILS_ID, MSG_ERROR_IN_EXPRESSION_CLICK_DETAILS_DEDE
MSG_ZOOM_IN_ID, MSG_ZOOM_IN_DEDE
MSG_ZOOM_OUT_ID, MSG_ZOOM_OUT_DEDE
MSG_FULLY_ZOOM_INOUT_ID, MSG_FULLY_ZOOM_INOUT_DEDE
}
/trunk/load_win.c
38,7 → 38,7
else return true;
}
 
Boolean readPARMresource(HMODULE hm, char** reason) {
Boolean readPARMresource(HMODULE hm, TCHAR** reason) {
HRSRC resinfo;
HANDLE h;
Ptr pparm;
69,7 → 69,7
deobfusc(copy);
res = readPARM(&gdata->parm, (Ptr)copy);
if (!res) {
*reason = _strdup("Incompatible obfuscation.");
*reason = FF_GetMsg_Cpy(MSG_INCOMPATIBLE_OBFUSCATION_ID);
}
free(copy);
gdata->obfusc = true;
85,7 → 85,7
return false;
}
 
Boolean loadfile(StandardFileReply* sfr, char** reason) {
Boolean loadfile(StandardFileReply* sfr, TCHAR** reason) {
HMODULE hm;
 
// The different read-functions will return true if the resource was successfully loaded,
107,7 → 107,7
if (hm = LoadLibraryEx(sfr->sfFile.szName, NULL, LOAD_LIBRARY_AS_DATAFILE)) {
if (readPARMresource(hm, reason)) {
if (gdata->parm.iProtected) {
*reason = _strdup("The filter is protected.");
*reason = FF_GetMsg_Cpy(MSG_FILTER_PROTECTED_ID);
//gdata->parmloaded = false;
}
else {
142,7 → 142,7
if (readfile_8bf(sfr, reason)) {
if (gdata->parm.iProtected) {
// This is for purely protected filters before the time when obfuscation and protection was merged
*reason = _strdup("The filter is protected.");
*reason = FF_GetMsg_Cpy(MSG_FILTER_PROTECTED_ID);
}
else {
gdata->parmloaded = true;
154,7 → 154,7
// We didn't had success. If we have a clear reason, return false and the reason.
// If we don't have a clear reason, set a generic reason and return false.
if (*reason == NULL) {
*reason = _strdup("It is not a text parameter file, nor a standalone Mac/PC filter created by Filter Factory/Filter Foundry.");
*reason = FF_GetMsg_Cpy(MSG_LOADFILE_UNKNOWN_FORMAT_ID);
}
return false;
}
/trunk/main.c
40,7 → 40,7
 
// Here are working variables:
struct node *tree[4];
char *err[4];
TCHAR *err[4];
int errpos[4],errstart[4],nplanes,cnvused,chunksize,toprow;
uint8_t slider[8]; // this is the "working data". We cannot always use gdata->parm, because parm will not be loaded if a AFS file is read
char* expr[4]; // this is the "working data". We cannot always use gdata->parm, because parm will not be loaded if a AFS file is read
135,7 → 135,8
}
*/
 
simplealert((TCHAR*)TEXT("You tried to execute this DLL with RunDLL32. This is a Photoshop plugin!"));
simplealert_id(MSG_RUNDLL_ERR_ID);
 
return;
}
 
202,7 → 203,7
void ENTRYPOINT(short selector, FilterRecordPtr pb, intptr_t *data, short *result){
static Boolean wantdialog = false;
static Boolean premiereWarnedOnce = false;
char *reason;
TCHAR*reason;
 
#ifdef SHOW_HOST_DEBUG
char* tmp;
275,7 → 276,7
// but the filter is not applied when you click "OK" (because it crashes internally; only the debugger sees it)...
// Probably the canvas structure is different (maybe it contains frames to achieve transitions?)
if (!premiereWarnedOnce) {
simplealert((TCHAR*)TEXT("This version of Filter Foundry is not compatible with Adobe Premiere!"));
simplealert_id(MSG_PREMIERE_COMPAT_ID);
}
premiereWarnedOnce = true;
*result = errPlugInHostInsufficient;
314,10 → 315,10
gdata->standalone = gdata->parmloaded = readPARMresource((HMODULE)hDllInstance,&reason);
if (gdata->parmloaded && (gdata->parm.cbSize != PARM_SIZE) && (gdata->parm.cbSize != PARM_SIZE_PREMIERE) && (gdata->parm.cbSize != PARM_SIG_MAC)) {
if (gdata->obfusc) {
simplealert((TCHAR*)TEXT("Incompatible obfuscation."));
simplealert_id(MSG_INCOMPATIBLE_OBFUSCATION_ID);
}
else {
simplealert((TCHAR*)TEXT("Invalid parameter data."));
simplealert_id(MSG_INVALID_PARAMETER_DATA_ID);
}
}
else {
448,7 → 449,7
}
 
int checkandinitparams(Handle params){
char *reasonstr,*reason;
TCHAR*reasonstr,*reason;
int i;
Boolean bUninitializedParams;
Boolean showdialog;
470,10 → 471,10
isStandalone = readPARMresource((HMODULE)hDllInstance, &reason);
if (isStandalone && (gdata->parm.cbSize != PARM_SIZE) && (gdata->parm.cbSize != PARM_SIZE_PREMIERE) && (gdata->parm.cbSize != PARM_SIG_MAC)) {
if (gdata->obfusc) {
simplealert((TCHAR*)TEXT("Incompatible obfuscation."));
simplealert_id(MSG_INCOMPATIBLE_OBFUSCATION_ID);
}
else {
simplealert((TCHAR*)TEXT("Invalid parameter data."));
simplealert_id(MSG_INVALID_PARAMETER_DATA_ID);
}
gdata->parmloaded = false;
return false;
516,10 → 517,10
gdata->standalone = gdata->parmloaded = readPARMresource((HMODULE)hDllInstance,&reason);
if (gdata->parmloaded && (gdata->parm.cbSize != PARM_SIZE) && (gdata->parm.cbSize != PARM_SIZE_PREMIERE) && (gdata->parm.cbSize != PARM_SIG_MAC)) {
if (gdata->obfusc) {
simplealert((TCHAR*)TEXT("Incompatible obfuscation."));
simplealert_id(MSG_INCOMPATIBLE_OBFUSCATION_ID);
}
else {
simplealert((TCHAR*)TEXT("Invalid parameter data."));
simplealert_id(MSG_INVALID_PARAMETER_DATA_ID);
}
gdata->parmloaded = false;
return false;
/trunk/make_win.c
42,7 → 42,7
TCHAR s[0x300] = {0};
 
xstrcpy(&s[0],func);
xstrcat(&s[0],TEXT(" failed: "));
xstrcat(&s[0],TEXT(" failed: ")); // TODO (Not so important): TRANSLATE
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, s + xstrlen(s), 0x300 - (DWORD)xstrlen(s), NULL);
simplealert(&s[0]);
}
454,7 → 454,7
// ====== Change version attributes
 
if (changeVersionInfo(dst, hupdate, pparm, bits) != NOERROR) {
simplewarning((TCHAR*)TEXT("changeVersionInfo failed"));
simplewarning((TCHAR*)TEXT("changeVersionInfo failed")); // TODO (Not so important): TRANSLATE
}
 
// ====== Obfuscate pparm!
514,17 → 514,17
if ((binary_replace_file(dst, cObfuscSeed, obfuscseed, /*align to 4*/1, /*maxamount=*/1) == 0) &&
(binary_replace_file(dst, cObfuscSeed, obfuscseed, /*align to 1*/0, /*maxamount=*/1) == 0))
{
simplewarning((TCHAR*)TEXT("binary_replace_file failed"));
simplewarning((TCHAR*)TEXT("binary_replace_file failed")); // TODO (Not so important): TRANSLATE
discard = true;
}
}
 
if (!update_pe_timestamp(dst, (__time32_t)time(0))) {
simplewarning((TCHAR*)TEXT("update_pe_timestamp failed"));
simplewarning((TCHAR*)TEXT("update_pe_timestamp failed")); // TODO (Not so important): TRANSLATE
}
 
if (!repair_pe_checksum(dst)) {
simplewarning((TCHAR*)TEXT("repair_pe_checksum failed"));
simplewarning((TCHAR*)TEXT("repair_pe_checksum failed")); // TODO (Not so important): TRANSLATE
}
}else showLastError((TCHAR*)TEXT("EndUpdateResource"));
 
621,10 → 621,6
}
 
OSErr do_make_standalone(FSSpec* dst, int bits) {
char errA[MAX_PATH + 200];
#ifdef UNICODE
TCHAR errW[MAX_PATH + 200];
#endif
Boolean res;
 
//DeleteFile(dstname);
638,14 → 634,7
res = doresources(dst, bits);
if (!res) {
DeleteFile(&dst->szName[0]);
 
sprintf(errA, "Could not create %d bit standalone plugin (doresources failed).", bits);
#ifdef UNICODE
mbstowcs(errW, errA, MAX_PATH + 200);
simplealert(&errW[0]);
#else
simplealert(&errA[0]);
#endif
alertuser_id(bits == 32 ? MSG_CANNOT_CREATE_32BIT_FILTER_ID : MSG_CANNOT_CREATE_64BIT_FILTER_ID, (TCHAR*)TEXT("doresources failed"));
}
}
else {
653,13 → 642,7
res = false;
//DeleteFile(dstname);
 
sprintf(errA, "Could not create %d bit standalone plugin (File extraction failed).", bits);
#ifdef UNICODE
mbstowcs(errW, errA, MAX_PATH + 200);
simplealert(&errW[0]);
#else
simplealert(&errA[0]);
#endif
alertuser_id(bits == 32 ? MSG_CANNOT_CREATE_32BIT_FILTER_ID : MSG_CANNOT_CREATE_64BIT_FILTER_ID, (TCHAR*)TEXT("extract_file failed"));
}
 
return res ? noErr : ioErr;
679,7 → 662,7
if (tmpErr != noErr)
outErr = tmpErr;
else
showmessage((TCHAR*)TEXT("32 bit standalone filter was successfully created"));
showmessage_id(MSG_BUILT32_ID);
 
// Make 64 bit:
// Destfile = no64_or_32(chosenname) + 64
690,7 → 673,7
if (tmpErr != noErr)
outErr = tmpErr;
else
showmessage((TCHAR*)TEXT("64 bit standalone filter was successfully created"));
showmessage_id(MSG_BUILT64_ID);
 
return outErr;
}
/trunk/parser.y
23,6 → 23,16
#include <stdio.h>
#include <string.h>
 
#ifdef WIN_ENV
#include <windows.h> // for TCHAR
#else
#ifdef UNICODE
#define TCHAR wchar_t
#else
#define TCHAR char
#endif
#endif
 
#ifndef false
#define false 0
#define true 1
35,7 → 45,12
int yyparse(void);
int yylex(void); // hack. correct prototype is buried in lex output
//#endif
void yyerror(char*);
 
// DM 29.04.2022
#define YY_(Msg) ((TCHAR*)TEXT(Msg))
 
 
void yyerror(TCHAR*);
int pushflag(int x);
struct node *parseexpr(char *s);
 
42,7 → 57,7
#define DPARSE
 
struct node *parsetree;
char *errstr;
TCHAR *errstr;
 
enum{ PARENSTACK = 100 };
 
52,7 → 67,7
if(arglistptr < (PARENSTACK-1))
inarglist[++arglistptr] = x;
else{
yyerror(_strdup("too many nested parentheses or function calls"));
yyerror((TCHAR*)TEXT("too many nested parentheses or function calls"));
return true;
}
return false;
144,8 → 159,8
| '-' expr %prec NEG { $$ = $1; $$->child[0] = 0; $$->child[1] = $2; }
| '+' expr %prec NEG { $$ = $2; }
/* error tokens */
| TOK_UNKNOWN { yyerror(_strdup("unknown name")); YYERROR; }
| TOK_BADCHAR { yyerror(_strdup("disallowed character")); YYERROR; }
| TOK_UNKNOWN { yyerror((TCHAR*)TEXT("unknown name")); YYERROR; }
| TOK_BADCHAR { yyerror((TCHAR*)TEXT("disallowed character")); YYERROR; }
;
 
%%
171,10 → 186,10
else /* ensure we don't leak memory, on an unsuccessful parse */
freeallnodes();
}else
yyerror(_strdup("null string???"));
yyerror((TCHAR*)TEXT("null string???"));
return 0;
}
 
void yyerror(char *msg){
void yyerror(TCHAR *msg){
errstr = msg;
}
/trunk/preview.c
335,8 → 335,7
}
 
if (e && !previewerr) {
alertuser((TCHAR*)TEXT("Could not build preview at chosen zoom level."),
e == memFullErr && !needall ? (TCHAR*)TEXT("The image is too large for available memory. Try zooming in.\nIf that does not help, cancel and retry the filter.") : (TCHAR*)TEXT(""));
simplealert_id(e == memFullErr && !needall ? MSG_CANNOT_ZOOM_MEMFULL_ID : MSG_CANNOT_ZOOM_ID);
previewerr = true;
}
 
470,8 → 469,7
}
 
if (e && !previewerr) {
alertuser((TCHAR*)TEXT("Could not build preview at chosen zoom level."),
e == memFullErr && !needall ? (TCHAR*)TEXT("The image is too large for available memory. Try zooming in.\nIf that does not help, cancel and retry the filter.") : (TCHAR*)TEXT(""));
simplealert_id(e == memFullErr && !needall ? MSG_CANNOT_ZOOM_MEMFULL_ID : MSG_CANNOT_ZOOM_ID);
previewerr = true;
}
 
/trunk/read.c
38,7 → 38,7
MAXLINE = 0x200,
};
 
Boolean readparams_afs_pff(Handle h,char **reason){
Boolean readparams_afs_pff(Handle h, TCHAR**reason){
Boolean res = false;
char linebuf[MAXLINE + 1] = { 0 };
char curexpr[MAXEXPR + 1] = { 0 };
54,7 → 54,7
q = curexpr;
linecnt = exprcnt = lineptr = 0;
 
//*reason = _strdup("File was too short.");
//*reason = _strdup("File was too short."); // TODO (Not so important): TRANSLATE
while(p < dataend){
 
c = *p++;
70,7 → 70,7
/* process complete line */
if(linecnt==0){
if(strcmp(linebuf,"%RGB-1.0")){
// *reason = _strdup("This doesn't look like a Filter Factory file (first line is not \"%RGB-1.0\").");
// *reason = _strdup("This doesn't look like a Filter Factory file (first line is not \"%RGB-1.0\")."); // TODO (Not so important): TRANSLATE
break;
}
}else if(linecnt<=8){
83,7 → 83,8
if(lineptr){
/* it's not an empty line; append it to current expr string */
if( q+lineptr > curexpr+MAXEXPR ){
*reason = _strdup("Found an expression longer than 1024 characters.");
// TODO: isn't the limit 1024?! (because we need to have the NUL too?)
*reason = FF_GetMsg_Cpy(MSG_EXPRESSION1024_FOUND_ID);
break;
}
q = cat(q,linebuf);
93,7 → 94,7
free(expr[exprcnt]);
*q = 0;
if(!(expr[exprcnt] = my_strdup(curexpr))){
*reason = _strdup("Could not get memory for expression.");
*reason = FF_GetMsg_Cpy(MSG_EXPRESSION_OOM_ID);
break;
}
 
126,9 → 127,9
break;
case '\\': break;
//default:
// if(alerts) alertuser((TCHAR*)TEXT("Warning:"),TEXT("Unknown escape sequence in input."));
// if(alerts) alertuser((TCHAR*)TEXT("Warning:"),TEXT("Unknown escape sequence in input.")); // TODO (Not so important): TRANSLATE
}
}//else if(alerts) alertuser((TCHAR*)TEXT("Warning:"),TEXT("truncated escape sequence ends input"));
}//else if(alerts) alertuser((TCHAR*)TEXT("Warning:"),TEXT("truncated escape sequence ends input")); // TODO (Not so important): TRANSLATE
}
 
if(lineptr < MAXLINE)
194,7 → 195,7
return val;
}
 
Boolean readfile_ffx(StandardFileReply* sfr, char** reason) {
Boolean readfile_ffx(StandardFileReply* sfr, TCHAR** reason) {
Handle h;
Boolean res = false;
FILEREF refnum;
217,7 → 218,7
else if (strcmp(val, "FFX1.2") == 0) format_version = 12;
free(val);
if (format_version > 0) {
simplewarning((TCHAR*)TEXT("Attention! You are loading a \"Filters Unlimited\" file. Please note that Filter Foundry only implements the basic Filter Factory functions. Therefore, most \"Filters Unlimited\" filters won't work with Filter Foundry."));
simplewarning_id(MSG_FILTERS_UNLIMITED_WARNING_ID);
 
val = _ffx_read_str(&q);
strcpy(gdata->parm.szTitle, val);
259,16 → 260,16
}
if (strlen(val) >= sizeof(gdata->parm.szFormula[i])) {
if (i == 0) {
simplealert((TCHAR*)TEXT("Attention! The formula for channel I/R was too long (longer than 1023 characters) and was truncated."));
simplealert_id(MSG_FORMULA_IR_1023_TRUNCATED_ID);
}
else if (i == 1) {
simplealert((TCHAR*)TEXT("Attention! The formula for channel G was too long (longer than 1023 characters) and was truncated."));
simplealert_id(MSG_FORMULA_G_1023_TRUNCATED_ID);
}
else if (i == 2) {
simplealert((TCHAR*)TEXT("Attention! The formula for channel B was too long (longer than 1023 characters) and was truncated."));
simplealert_id(MSG_FORMULA_B_1023_TRUNCATED_ID);
}
else if (i == 3) {
simplealert((TCHAR*)TEXT("Attention! The formula for channel A was too long (longer than 1023 characters) and was truncated."));
simplealert_id(MSG_FORMULA_A_1023_TRUNCATED_ID);
}
// C++ wrong warning: Buffer overflow (C6386)
#pragma warning(suppress : 6386)
321,7 → 322,7
return res;
}
 
Boolean readfile_8bf(StandardFileReply *sfr,char **reason){
Boolean readfile_8bf(StandardFileReply *sfr, TCHAR**reason){
unsigned char magic[2];
FILECOUNT count;
Handle h;
350,7 → 351,7
} // else no point in proceeding
FSClose(refnum);
}else
*reason = _strdup("Could not open file.");
*reason = FF_GetMsg_Cpy(MSG_CANNOT_OPEN_FILE_ID);
 
if (res) gdata->obfusc = false;
return res;
701,7 → 702,7
return true;
}
 
Boolean readfile_picotxt(StandardFileReply* sfr, char** reason) {
Boolean readfile_picotxt(StandardFileReply* sfr, TCHAR** reason) {
extern int ctls[], maps[];
 
Handle h;
790,7 → 791,7
return res;
}
 
Boolean readfile_afs_pff(StandardFileReply *sfr,char **reason){
Boolean readfile_afs_pff(StandardFileReply *sfr, TCHAR**reason){
FILEREF r;
Handle h;
Boolean res = false;
813,8 → 814,9
PIDISPOSEHANDLE(h);
}
FSClose(r);
}else
*reason = _strdup("Could not open the file.");
}
else
*reason = FF_GetMsg_Cpy(MSG_CANNOT_OPEN_FILE_ID);
 
return res;
}
/trunk/save.c
213,7 → 213,7
FILEREF r;
Handle h;
Boolean res = false;
char *reasonstr = _strdup("");
TCHAR *reasonstr = NULL;
 
FSpDelete(&sfr->sfFile);
if(FSpCreate(&sfr->sfFile,SIG_SIMPLETEXT,TEXT_FILETYPE,sfr->sfScript) == noErr)
252,17 → 252,11
}
 
FSClose(r);
}else reasonstr = _strdup("Could not open the file.");
else reasonstr = _strdup("Could not create the file.");
}else reasonstr = FF_GetMsg_Cpy(MSG_CANNOT_OPEN_FILE_ID);
else reasonstr = FF_GetMsg_Cpy(MSG_CANNOT_CREATE_FILE_ID);
 
if (!res) {
#ifdef UNICODE
TCHAR reasonstrW[0x300];
mbstowcs(reasonstrW, reasonstr, 0x300);
alertuser((TCHAR*)TEXT("Could not save settings."), reasonstrW);
#else
alertuser((TCHAR*)TEXT("Could not save settings."), reasonstr);
#endif
alertuser_id(MSG_CANNOT_SAVE_SETTINGS_ID, reasonstr);
}
 
return res;
/trunk/slider_win.c
164,7 → 164,7
clx.lpszClassName = targetClass;
if (RegisterClass(&clx) == 0) {
TCHAR s[0x300];
xstrcpy(s, (TCHAR*)TEXT("RegisterClass failed: "));
xstrcpy(s, (TCHAR*)TEXT("RegisterClass failed: ")); // TODO (Not so important): TRANSLATE
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, s + xstrlen(s), 0x300 - (DWORD)xstrlen(s), NULL);
simplealert(&s[0]);
return false;
190,7 → 190,7
 
if (RegisterClass(&clx) == 0) {
TCHAR s[0x300];
xstrcpy(s, (TCHAR*)TEXT("RegisterClass failed: "));
xstrcpy(s, (TCHAR*)TEXT("RegisterClass failed: ")); // TODO (Not so important): TRANSLATE
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, s + xstrlen(s), 0x300 - (DWORD)xstrlen(s), NULL);
simplealert(&s[0]);
return false;
200,7 → 200,7
}
}
else {
simplealert((TCHAR*)TEXT("GetClassInfo failed"));
simplealert((TCHAR*)TEXT("GetClassInfo failed")); // TODO (Not so important): TRANSLATE
}
return false;
}
246,7 → 246,7
if (!gdata->pluginDllSliderInfo.initialized) return;
 
if (!PluginDll_UnRegisterSlider(hDllInstance)) {
simplealert((TCHAR*)TEXT("UnRegisterSlider failed"));
simplealert((TCHAR*)TEXT("UnRegisterSlider failed")); // TODO (Not so important): TRANSLATE
return;
}
 
/trunk/telegraphics_common/tt/dbg_win.c
22,7 → 22,7
 
void dbg(TCHAR *s){
#ifdef DEBUG
MessageBox(NULL,s,TEXT("plugin debug"),0);
MessageBox(NULL,s,TEXT("plugin debug"),0); // TODO (Not so important): TRANSLATE
#else
UNREFERENCED_PARAMETER(s);
#endif
/trunk/telegraphics_common/tt/ui_compat_win.c
86,7 → 86,7
 
return true;
}else
dbg((TCHAR*)TEXT("CreateDIBSection FAILED"));
dbg((TCHAR*)TEXT("CreateDIBSection FAILED")); // TODO (Not so important): TRANSLATE
}
return false;
}
/trunk/ui.c
229,7 → 229,7
/* uh oh, couldn't parse one of the saved expressions...this is fatal */
DISABLEDLGITEM(dp,IDOK);
if(gdata->standalone){
simplealert((TCHAR*)TEXT("Can't run this filter (there is a problem with the saved expressions)."));
simplealert_id(MSG_SAVED_EXPR_ERR_ID);
}else{
DISABLEDLGITEM(dp,SAVEITEM);
DISABLEDLGITEM(dp,MAKEITEM);
343,7 → 343,7
StandardFileReply sfr;
NavReplyRecord reply;
static OSType types[] = {TEXT_FILETYPE,PS_FILTER_FILETYPE};
char *reason;
TCHAR*reason;
HINSTANCE hShellRes;
InternalState bakState;
 
360,13 → 360,13
case OPENITEM:
if(!gdata->standalone && choosefiletypes(
#ifdef MAC_ENV
(StringPtr)_strdup("\pChoose filter settings"), // "\p" means "Pascal string"
(StringPtr)_strdup("\pChoose filter settings"), // "\p" means "Pascal string" // TODO: TRANSLATE
& sfr, & reply, types, 2,
"All supported files (*.afs, *.8bf, *.pff, *.prm, *.bin, *.rsrc, *.txt, *.ffx)\0*.afs;*.8bf;*.pff;*.prm;*.bin;*.rsrc;*.txt;*.ffx\0Filter Factory Settings (*.afs, *.txt)\0*.afs;*.txt\0PluginCommander or FFDecomp TXT file (*.txt)\0*.txt\0Filter Factory for Windows, Standalone Filter (*.8bf)\0*.8bf\0Premiere TF/FF Settings (*.pff)\0*.pff\0Premiere TT/FF for Windows, Standalone Filter (*.prm)\0*.prm\0FilterFactory for MacOS, Standalone Filter (*.bin, *.rsrc)\0*.bin\0\"Filters Unlimited\" filter (*.ffx)\0*.ffx\0All files (*.*)\0*.*\0\0"
"All supported files (*.afs, *.8bf, *.pff, *.prm, *.bin, *.rsrc, *.txt, *.ffx)\0*.afs;*.8bf;*.pff;*.prm;*.bin;*.rsrc;*.txt;*.ffx\0Filter Factory Settings (*.afs, *.txt)\0*.afs;*.txt\0PluginCommander or FFDecomp TXT file (*.txt)\0*.txt\0Filter Factory for Windows, Standalone Filter (*.8bf)\0*.8bf\0Premiere TF/FF Settings (*.pff)\0*.pff\0Premiere TT/FF for Windows, Standalone Filter (*.prm)\0*.prm\0FilterFactory for MacOS, Standalone Filter (*.bin, *.rsrc)\0*.bin\0\"Filters Unlimited\" filter (*.ffx)\0*.ffx\0All files (*.*)\0*.*\0\0" // TODO: TRANSLATE
#else
TEXT("Choose filter settings"),
TEXT("Choose filter settings"), // TODO: TRANSLATE
& sfr, & reply, types, 2,
TEXT("All supported files (*.afs, *.8bf, *.pff, *.prm, *.bin, *.rsrc, *.txt, *.ffx)\0*.afs;*.8bf;*.pff;*.prm;*.bin;*.rsrc;*.txt;*.ffx\0Filter Factory Settings (*.afs, *.txt)\0*.afs;*.txt\0PluginCommander or FFDecomp TXT file (*.txt)\0*.txt\0Filter Factory for Windows, Standalone Filter (*.8bf)\0*.8bf\0Premiere TF/FF Settings (*.pff)\0*.pff\0Premiere TT/FF for Windows, Standalone Filter (*.prm)\0*.prm\0FilterFactory for MacOS, Standalone Filter (*.bin, *.rsrc)\0*.bin\0\"Filters Unlimited\" filter (*.ffx)\0*.ffx\0All files (*.*)\0*.*\0\0")
TEXT("All supported files (*.afs, *.8bf, *.pff, *.prm, *.bin, *.rsrc, *.txt, *.ffx)\0*.afs;*.8bf;*.pff;*.prm;*.bin;*.rsrc;*.txt;*.ffx\0Filter Factory Settings (*.afs, *.txt)\0*.afs;*.txt\0PluginCommander or FFDecomp TXT file (*.txt)\0*.txt\0Filter Factory for Windows, Standalone Filter (*.8bf)\0*.8bf\0Premiere TF/FF Settings (*.pff)\0*.pff\0Premiere TT/FF for Windows, Standalone Filter (*.prm)\0*.prm\0FilterFactory for MacOS, Standalone Filter (*.bin, *.rsrc)\0*.bin\0\"Filters Unlimited\" filter (*.ffx)\0*.ffx\0All files (*.*)\0*.*\0\0") // TODO: TRANSLATE
,gdata->hWndMainDlg
#endif
)){
378,13 → 378,7
maindlgupdate(dp);
}
else {
#ifdef UNICODE
TCHAR reasonW[0x300];
mbstowcs(reasonW, reason, 0x300);
alertuser((TCHAR*)TEXT("Could not load settings."), reasonW);
#else
alertuser((TCHAR*)TEXT("Could not load settings."), reason);
#endif
alertuser_id(MSG_CANNOT_LOAD_SETTINGS_ID, reason);
 
// Restore
restoreInternalState(bakState);
394,17 → 388,17
case SAVEITEM:
if(!gdata->standalone && putfile(
#ifdef MAC_ENV
(StringPtr)_strdup("\pSave filter settings"), // "\p" means "Pascal string"
(StringPtr)_strdup("\pSave filter settings"), // "\p" means "Pascal string" // TODO: TRANSLATE
(StringPtr)_strdup("\0"),
TEXT_FILETYPE, SIG_SIMPLETEXT, & reply, & sfr,
"afs",
"All supported files (.afs, *.pff, .txt)\0*.afs;*.pff;*.txt\0Filter Factory Settings (*.afs)\0*.afs\0Premiere TF/FF Settings (*.pff)\0*.pff\0PluginCommander TXT file (*.txt)\0*.txt\0All files (*.*)\0*.*\0\0", 1
"All supported files (.afs, *.pff, .txt)\0*.afs;*.pff;*.txt\0Filter Factory Settings (*.afs)\0*.afs\0Premiere TF/FF Settings (*.pff)\0*.pff\0PluginCommander TXT file (*.txt)\0*.txt\0All files (*.*)\0*.*\0\0", 1 // TODO: TRANSLATE
#else
TEXT("Save filter settings"),
TEXT("Save filter settings"), // TODO: TRANSLATE
TEXT("\0"),
TEXT_FILETYPE, SIG_SIMPLETEXT, & reply, & sfr,
TEXT("afs"),
TEXT("All supported files (.afs, *.pff, .txt)\0*.afs;*.pff;*.txt\0Filter Factory Settings (*.afs)\0*.afs\0Premiere TF/FF Settings (*.pff)\0*.pff\0PluginCommander TXT file (*.txt)\0*.txt\0All files (*.*)\0*.*\0\0"), 1
TEXT("All supported files (.afs, *.pff, .txt)\0*.afs;*.pff;*.txt\0Filter Factory Settings (*.afs)\0*.afs\0Premiere TF/FF Settings (*.pff)\0*.pff\0PluginCommander TXT file (*.txt)\0*.txt\0All files (*.*)\0*.*\0\0"), 1 // TODO: TRANSLATE
,gdata->hWndMainDlg
#endif
)){
412,11 → 406,11
completesave(&reply);
 
if (fileHasExtension(&sfr, TEXT(".txt"))) {
showmessage((TCHAR*)TEXT("The file was successfully saved in the \"PluginCommander\" TXT format. The file will now be opened in a text editor, so that you can fill in the missing data: Category, Title, Copyright, Author, Filename, Slider/Map names."));
showmessage_id(MSG_PICO_SAVED_ID);
 
#ifdef MAC_ENV
// TODO: Open text file instead
showmessage((TCHAR*)TEXT("Please edit the file manually to enter the title, category, authorname, copyright, slidernames etc."));
showmessage_id(MSG_PLEASE_EDIT_MANUALLY_ID);
#else
hShellRes = ShellExecute(
gdata->hWndMainDlg,
430,11 → 424,11
// MSDN states: "If the function succeeds, it returns a value greater than 32."
 
TCHAR s[0x300];
xstrcpy(s, (TCHAR*)TEXT("ShellExecute failed: "));
xstrcpy(s, (TCHAR*)TEXT("ShellExecute failed: ")); // TODO (Not so important): TRANSLATE
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, s + xstrlen(s), 0x300 - (DWORD)xstrlen(s), NULL);
simplealert(&s[0]);
 
showmessage((TCHAR*)TEXT("Please edit the file manually to enter the title, category, author, copyright, filename, slidernames etc."));
showmessage_id(MSG_PLEASE_EDIT_MANUALLY_ID);
}
#endif
}
451,7 → 445,7
case HELPITEM:
#ifdef MAC_ENV
// TODO: Open web-browser instead
showmessage((TCHAR*)TEXT("You can find the documentation here: https://github.com/danielmarschall/filter_foundry/tree/master/doc"));
showmessage_id(MSG_FIND_DOKU_HERE_ID);
#else
hShellRes = ShellExecute(
gdata->hWndMainDlg,
469,11 → 463,11
// MSDN states: "If the function succeeds, it returns a value greater than 32."
 
TCHAR s[0x300];
xstrcpy(s, (TCHAR*)TEXT("ShellExecute failed: "));
xstrcpy(s, (TCHAR*)TEXT("ShellExecute failed: ")); // TODO (Not so important): TRANSLATE
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, s + xstrlen(s), 0x300 - (DWORD)xstrlen(s), NULL);
simplealert(&s[0]);
 
showmessage((TCHAR*)TEXT("You can find the documentation here: https://github.com/danielmarschall/filter_foundry/tree/master/doc"));
showmessage_id(MSG_FIND_DOKU_HERE_ID);
}
#endif
break;
525,13 → 519,7
case FIRSTICONITEM+3:
item -= FIRSTICONITEM;
{
#ifdef UNICODE
TCHAR errW[0x300];
mbstowcs(errW, err[item], 0x300);
simplealert(errW);
#else
simplealert(err[item]);
#endif
}
SELECTCTLTEXT(dp,FIRSTEXPRITEM+item,errstart[item],errpos[item]);
break;
554,6 → 542,10
Boolean res;
size_t i;
 
if (more == NULL) {
return simplealert(err);
}
 
s = (TCHAR*)malloc((xstrlen(err) + xstrlen(more) + 3) * sizeof(TCHAR)); // 3=CR+LF+NUL
if (s == NULL) return false;
578,3 → 570,27
free(s);
return res;
}
 
Boolean alertuser_id(int MsgId, TCHAR* more) {
TCHAR msg[1000];
FF_GetMsg(&msg[0], MsgId);
return alertuser(&msg[0], more);
}
 
Boolean simplealert_id(int MsgId) {
TCHAR msg[1000];
FF_GetMsg(&msg[0], MsgId);
return simplealert(&msg[0]);
}
 
Boolean simplewarning_id(int MsgId) {
TCHAR msg[1000];
FF_GetMsg(&msg[0], MsgId);
return simplewarning(&msg[0]);
}
 
Boolean showmessage_id(int MsgId) {
TCHAR msg[1000];
FF_GetMsg(&msg[0], MsgId);
return showmessage(&msg[0]);
}
/trunk/ui.h
104,12 → 104,16
void DoAbout(AboutRecordPtr prec);
Boolean maindialog(FilterRecordPtr pb);
Boolean builddialog(FilterRecordPtr pb);
 
Boolean simplealert(TCHAR* s);
Boolean simplealert_id(int MsgId);
Boolean simplewarning(TCHAR* s);
Boolean simplewarning_id(int MsgId);
Boolean showmessage(TCHAR *s);
Boolean showmessage_id(int MsgId);
Boolean alertuser(TCHAR *err, TCHAR* more);
Boolean alertuser_id(int MsgId, TCHAR* more);
 
// platform independent
Boolean alertuser(TCHAR *err, TCHAR*more);
void maindlginit(DIALOGREF dp);
Boolean maindlgitem(DIALOGREF dp,int item);
void maindlgupdate(DIALOGREF dp);
/trunk/ui_build.c
143,12 → 143,12
// Do a few checks first
GetDlgItemTextA(dp, CATEGORYITEM, s, MAXFIELD);
if (strlen(s) == 0) {
simplealert((TCHAR*)TEXT("Category must not be empty!"));
simplealert_id(MSG_CATEGORY_EMPTY_ERR_ID);
return true; // don't continue (i.e. don't call EndDialog). Let the user correct the input
}
GetDlgItemTextA(dp, TITLEITEM, s, MAXFIELD);
if (strlen(s) == 0) {
simplealert((TCHAR*)TEXT("Title must not be empty!"));
simplealert_id(MSG_TITLE_EMPTY_ERR_ID);
return true; // don't continue (i.e. don't call EndDialog). Let the user correct the input
}
 
186,12 → 186,14
 
#ifdef UNICODE
if (unicode) {
simplewarning((TCHAR*)TEXT("The internal structures of Photoshop and Filter Factory are not compatible with Unicode characters. It is highly recommended that you only use characters of your current charset. Unicode characters will be converted into question mark symbols."));
// TODO: In this message, we recommend that the user chooses character of his own charset.
// BUT: The user should actually only choose A-Z, otherwise stuff might be displayed wrong on foreign computers?!
simplewarning_id(MSG_UNICODE_DATA_WARNING_ID);
}
else
#endif
if (extCharset) {
simplewarning((TCHAR*)TEXT("You were using characters of an extended charset. The characters might look correct on your machine, but on a machine in a different country the characters might look wrong. Please consider using the ASCII character set only (i.e. Latin characters without accent marks)."));
simplewarning_id(MSG_EXTCHARSET_DATA_WARNING_ID);
}
 
// Now begin
220,16 → 222,16
for (i = 0; i < 4; ++i) {
if (strlen(expr[i]) >= sizeof(gdata->parm.szFormula[i])) {
if (i == 0) {
simplealert((TCHAR*)TEXT("Attention! The formula for channel R was too long (longer than 1023 characters) and was truncated."));
simplealert_id(MSG_FORMULA_R_1023_TRUNCATED_ID);
}
else if (i == 1) {
simplealert((TCHAR*)TEXT("Attention! The formula for channel G was too long (longer than 1023 characters) and was truncated."));
simplealert_id(MSG_FORMULA_G_1023_TRUNCATED_ID);
}
else if (i == 2) {
simplealert((TCHAR*)TEXT("Attention! The formula for channel B was too long (longer than 1023 characters) and was truncated."));
simplealert_id(MSG_FORMULA_B_1023_TRUNCATED_ID);
}
else if (i == 3) {
simplealert((TCHAR*)TEXT("Attention! The formula for channel A was too long (longer than 1023 characters) and was truncated."));
simplealert_id(MSG_FORMULA_A_1023_TRUNCATED_ID);
}
expr[i][sizeof(gdata->parm.szFormula[i]) - 1] = '\0';
}
255,16 → 257,16
#endif
if (putfile(
#ifdef MAC_ENV
(StringPtr)_strdup("\pMake standalone filter"), // "\p" means "Pascal string"
(StringPtr)_strdup("\pMake standalone filter"), // "\p" means "Pascal string" // TODO: TRANSLATE
(StringPtr)myc2pstr(_strdup(fname)),
PS_FILTER_FILETYPE, kPhotoshopSignature, & reply, & sfr,
"8bf", "Filter plugin file (.8bf)\0*.8bf\0\0", 1
"8bf", "Filter plugin file (.8bf)\0*.8bf\0\0", 1 // TODO: TRANSLATE
#else
TEXT("Make standalone filter"),
TEXT("Make standalone filter"), // TODO: TRANSLATE
fname,
PS_FILTER_FILETYPE, kPhotoshopSignature, & reply, & sfr,
TEXT("8bf"),
TEXT("Filter plugin file (.8bf)\0*.8bf\0\0"), 1
TEXT("Filter plugin file (.8bf)\0*.8bf\0\0"), 1 // TODO: TRANSLATE
, (HWND)dp
#endif
)) {
/trunk/ui_build_win.c
67,11 → 67,11
res = DialogBoxParam(hDllInstance,MAKEINTRESOURCE(ID_BUILDDLG),
gdata->hWndMainDlg ? gdata->hWndMainDlg : (HWND)p->hwnd,builddlgproc,0);
if (res == 0) {
simplealert((TCHAR*)TEXT("DialogBoxParam invalid parent window handle"));
simplealert((TCHAR*)TEXT("DialogBoxParam invalid parent window handle")); // TODO (Not so important): TRANSLATE
}
if (res == -1) {
TCHAR s[0x300];
xstrcpy(s, (TCHAR*)TEXT("DialogBoxParam failed: "));
xstrcpy(s, (TCHAR*)TEXT("DialogBoxParam failed: ")); // TODO (Not so important): TRANSLATE
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, s + xstrlen(s), 0x300 - (DWORD)xstrlen(s), NULL);
simplealert(&s[0]);
}
/trunk/ui_mac.c
62,6 → 62,16
return i == ok;
}
 
Boolean simplewarning(char *s){
int i;
 
myc2pstr(_strdup(s));
ParamText((StringPtr)s,NULL,NULL,NULL);
i = Alert(ID_SYNTAXALERT,NULL);
myp2cstr((StringPtr)s);
return i == ok;
}
 
Boolean showmessage(char *s){
int i;
 
/trunk/ui_win.c
284,12 → 284,20
SetClassLongPtr(GetDlgItem(hDlg, FIRSTICONITEM), GCLP_HCURSOR, (LONG_PTR)hCurHandQuestion);
 
for(i = 0; i < 4; ++i){
CreateToolTip(FIRSTICONITEM + i, hDlg, (TCHAR*)TEXT("Error in expression! Click to see details."));
TCHAR msg[0x100];
LoadString(hDllInstance, MSG_ERROR_IN_EXPRESSION_CLICK_DETAILS_ID, &msg[0], 0x100);
CreateToolTip(FIRSTICONITEM + i, hDlg, msg);
}
 
CreateToolTip(ZOOMINITEM, hDlg, (TCHAR*)TEXT("Zoom in"));
CreateToolTip(ZOOMOUTITEM, hDlg, (TCHAR*)TEXT("Zoom out"));
CreateToolTip(ZOOMLEVELITEM, hDlg, (TCHAR*)TEXT("Fully zoom in/out"));
{
TCHAR msg[0x100];
LoadString(hDllInstance, MSG_ZOOM_IN_ID, &msg[0], 0x100);
CreateToolTip(ZOOMINITEM, hDlg, msg);
LoadString(hDllInstance, MSG_ZOOM_OUT_ID, &msg[0], 0x100);
CreateToolTip(ZOOMOUTITEM, hDlg, msg);
LoadString(hDllInstance, MSG_FULLY_ZOOM_INOUT_ID, &msg[0], 0x100);
CreateToolTip(ZOOMLEVELITEM, hDlg, msg);
}
 
for(i = 0; i < 8; ++i){
FF_SetSliderRange(hDlg, FIRSTCTLITEM+i, 0, 255);
416,7 → 424,7
//return false;
 
// We simply hide the sliders and let the user enter the numeric values in the edit-box.
simplewarning((TCHAR*)TEXT("Visual sliders are not available because neither PLUGIN.DLL, nor the Microsoft Trackbar Control (msctls_trackbar32) was found on your system."));
simplewarning_id(MSG_SLIDER_UNAVAILABLE_ID);
Slider_Init_None(TEXT("FoundrySlider"));
}
}
432,11 → 440,11
res = DialogBoxParam(hDllInstance,MAKEINTRESOURCE(gdata->standalone ? ID_PARAMDLG : ID_MAINDLG),
(HWND)p->hwnd,maindlgproc,0);
if (res == 0) {
simplealert((TCHAR*)TEXT("DialogBoxParam invalid parent window handle"));
simplealert((TCHAR*)TEXT("DialogBoxParam invalid parent window handle")); // TODO (Not so important): TRANSLATE
}
if (res == -1) {
TCHAR s[0x300];
xstrcpy(s, (TCHAR*)TEXT("DialogBoxParam failed: "));
xstrcpy(s, (TCHAR*)TEXT("DialogBoxParam failed: ")); // TODO (Not so important): TRANSLATE
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, s + xstrlen(s), 0x300 - (DWORD)xstrlen(s), NULL);
simplealert(&s[0]);
}
/trunk/visual_studio/FilterFoundry.vcxproj
253,6 → 253,7
<ClInclude Include="..\c.h" />
<ClInclude Include="..\ff.h" />
<ClInclude Include="..\funcs.h" />
<ClInclude Include="..\language.h" />
<ClInclude Include="..\manifest.h" />
<ClInclude Include="..\ff_misc.h" />
<ClInclude Include="..\node.h" />
279,6 → 280,7
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\ff_misc.c" />
<ClCompile Include="..\language.c" />
<ClCompile Include="..\obfusc.c" />
<ClCompile Include="..\slider_win.c" />
<ClCompile Include="..\telegraphics_common\adobeplugin\dllmain.c" />
/trunk/visual_studio/FilterFoundry.vcxproj.filters
93,6 → 93,9
<ClInclude Include="..\slider_win.h">
<Filter>Headerdateien</Filter>
</ClInclude>
<ClInclude Include="..\language.h">
<Filter>Headerdateien</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\telegraphics_common\adobeplugin\dllmain.c">
188,6 → 191,9
<ClCompile Include="..\ff_misc.c">
<Filter>Quelldateien</Filter>
</ClCompile>
<ClCompile Include="..\language.c">
<Filter>Quelldateien</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\win_res.rc">
/trunk/visual_studio/nmake.mak
64,7 → 64,7
BISON = win_flex_bison\win_bison
 
OBJ = ..\main.obj ..\funcs.obj ..\process.obj ..\node.obj ..\symtab.obj \
..\ui.obj ..\ui_build.obj ..\preview.obj ..\read.obj ..\save.obj ..\make.obj ..\obfusc.obj ..\ff_misc.ob ..\slider_win.obj \
..\ui.obj ..\ui_build.obj ..\preview.obj ..\read.obj ..\save.obj ..\make.obj ..\obfusc.obj ..\ff_misc.ob ..\language.obj ..\slider_win.obj \
..\scripting.obj ..\lex.yy.obj ..\manifest.obj ..\ui_win.obj ..\make_win.obj ..\versioninfo_modify_win.obj ..\load_win.obj \
..\telegraphics_common\tt\dbg_win.obj ..\telegraphics_common\tt\ui_compat_win.obj \
..\telegraphics_common\tt\choosefile_win.obj ..\ui_build_win.obj \
/trunk/visual_studio/nmake64.mak
64,7 → 64,7
BISON = win_flex_bison\win_bison
 
OBJ = ..\main.obj ..\funcs.obj ..\process.obj ..\node.obj ..\symtab.obj \
..\ui.obj ..\ui_build.obj ..\preview.obj ..\read.obj ..\save.obj ..\make.obj ..\obfusc.obj ..\ff_misc.obj ..\slider_win.obj \
..\ui.obj ..\ui_build.obj ..\preview.obj ..\read.obj ..\save.obj ..\make.obj ..\obfusc.obj ..\ff_misc.obj ..\language.obj ..\slider_win.obj \
..\scripting.obj ..\lex.yy.obj ..\manifest.obj ..\ui_win.obj ..\make_win.obj ..\versioninfo_modify_win.obj ..\load_win.obj \
..\telegraphics_common\tt\dbg_win.obj ..\telegraphics_common\tt\ui_compat_win.obj \
..\telegraphics_common\tt\choosefile_win.obj ..\ui_build_win.obj \
/trunk/win_res.rc
25,5 → 25,6
#include "ui_win.rc"
#include "manifest.rc"
#include "version_win.rc"
#include "language_win.rc"
 
// "1032 TPLT", "1064 TPLT", "3032 TPLT", and "3064 TPLT" will be added by the 3264_mixer tool
/trunk/wpj/before.bat
7,4 → 7,3
ren y.tab.c y_tab.c
ren lex.yy.c lex_yy.c
cd wpj
 
/trunk/wpj/filterfoundry.tgt
90,7 → 90,7
 
22
WPickList
75
77
23
MItem
3
336,8 → 336,8
 
83
MItem
11
..\lex_yy.c
13
..\language.c
84
WString
4
354,8 → 354,8
 
87
MItem
13
..\load_win.c
11
..\lex_yy.c
88
WString
4
372,8 → 372,8
 
91
MItem
9
..\main.c
13
..\load_win.c
92
WString
4
391,7 → 391,7
95
MItem
9
..\make.c
..\main.c
96
WString
4
408,8 → 408,8
 
99
MItem
13
..\make_win.c
9
..\make.c
100
WString
4
427,7 → 427,7
103
MItem
13
..\manifest.c
..\make_win.c
104
WString
4
444,8 → 444,8
 
107
MItem
9
..\node.c
13
..\manifest.c
108
WString
4
462,8 → 462,8
 
111
MItem
11
..\obfusc.c
9
..\node.c
112
WString
4
480,8 → 480,8
 
115
MItem
12
..\preview.c
11
..\obfusc.c
116
WString
4
499,7 → 499,7
119
MItem
12
..\process.c
..\preview.c
120
WString
4
516,8 → 516,8
 
123
MItem
9
..\read.c
12
..\process.c
124
WString
4
535,7 → 535,7
127
MItem
9
..\save.c
..\read.c
128
WString
4
552,8 → 552,8
 
131
MItem
14
..\scripting.c
9
..\save.c
132
WString
4
570,8 → 570,8
 
135
MItem
15
..\slider_win.c
14
..\scripting.c
136
WString
4
588,8 → 588,8
 
139
MItem
11
..\symtab.c
15
..\slider_win.c
140
WString
4
606,8 → 606,8
 
143
MItem
44
..\telegraphics_common\adobeplugin\dllmain.c
11
..\symtab.c
144
WString
4
617,31 → 617,31
 
146
WVList
1
147
ActionStates
148
WString
5
&Make
149
WVList
 
23
1
1
 
150
147
MItem
42
..\telegraphics_common\tt\choosefile_win.c
151
44
..\telegraphics_common\adobeplugin\dllmain.c
148
WString
4
COBJ
152
149
WVList
 
150
WVList
1
151
ActionStates
152
WString
5
&Make
153
WVList
 
651,8 → 651,8
 
154
MItem
41
..\telegraphics_common\tt\compat_string.c
42
..\telegraphics_common\tt\choosefile_win.c
155
WString
4
669,8 → 669,8
 
158
MItem
38
..\telegraphics_common\tt\compat_win.c
41
..\telegraphics_common\tt\compat_string.c
159
WString
4
687,8 → 687,8
 
162
MItem
47
..\telegraphics_common\tt\compat_win_resource.c
38
..\telegraphics_common\tt\compat_win.c
163
WString
4
705,8 → 705,8
 
166
MItem
35
..\telegraphics_common\tt\dbg_win.c
47
..\telegraphics_common\tt\compat_win_resource.c
167
WString
4
723,8 → 723,8
 
170
MItem
43
..\telegraphics_common\tt\file_compat_win.c
35
..\telegraphics_common\tt\dbg_win.c
171
WString
4
741,8 → 741,8
 
174
MItem
40
..\telegraphics_common\tt\sprintf_tiny.c
43
..\telegraphics_common\tt\file_compat_win.c
175
WString
4
759,8 → 759,8
 
178
MItem
31
..\telegraphics_common\tt\str.c
40
..\telegraphics_common\tt\sprintf_tiny.c
179
WString
4
777,8 → 777,8
 
182
MItem
41
..\telegraphics_common\tt\ui_compat_win.c
31
..\telegraphics_common\tt\str.c
183
WString
4
795,8 → 795,8
 
186
MItem
7
..\ui.c
41
..\telegraphics_common\tt\ui_compat_win.c
187
WString
4
813,8 → 813,8
 
190
MItem
13
..\ui_build.c
7
..\ui.c
191
WString
4
831,8 → 831,8
 
194
MItem
17
..\ui_build_win.c
13
..\ui_build.c
195
WString
4
849,8 → 849,8
 
198
MItem
11
..\ui_win.c
17
..\ui_build_win.c
199
WString
4
867,8 → 867,8
 
202
MItem
27
..\versioninfo_modify_win.c
11
..\ui_win.c
203
WString
4
885,8 → 885,8
 
206
MItem
10
..\y_tab.c
27
..\versioninfo_modify_win.c
207
WString
4
903,12 → 903,12
 
210
MItem
3
*.h
10
..\y_tab.c
211
WString
3
NIL
4
COBJ
212
WVList
 
915,14 → 915,14
213
WVList
 
-1
23
1
1
 
214
MItem
6
..\c.h
3
*.h
215
WString
3
933,14 → 933,14
217
WVList
 
210
-1
1
1
 
218
MItem
13
..\cwprefix.h
6
..\c.h
219
WString
3
951,14 → 951,14
221
WVList
 
210
214
1
1
 
222
MItem
7
..\ff.h
13
..\cwprefix.h
223
WString
3
969,14 → 969,14
225
WVList
 
210
214
1
1
 
226
MItem
12
..\ff_misc.h
7
..\ff.h
227
WString
3
987,14 → 987,14
229
WVList
 
210
214
1
1
 
230
MItem
10
..\funcs.h
12
..\ff_misc.h
231
WString
3
1005,14 → 1005,14
233
WVList
 
210
214
1
1
 
234
MItem
13
..\manifest.h
10
..\funcs.h
235
WString
3
1023,14 → 1023,14
237
WVList
 
210
214
1
1
 
238
MItem
9
..\node.h
13
..\language.h
239
WString
3
1041,14 → 1041,14
241
WVList
 
210
214
1
1
 
242
MItem
9
..\PARM.h
13
..\manifest.h
243
WString
3
1059,14 → 1059,14
245
WVList
 
210
214
1
1
 
246
MItem
12
..\preview.h
9
..\node.h
247
WString
3
1077,14 → 1077,14
249
WVList
 
210
214
1
1
 
250
MItem
14
..\scripting.h
9
..\PARM.h
251
WString
3
1095,14 → 1095,14
253
WVList
 
210
214
1
1
 
254
MItem
15
..\slider_win.h
12
..\preview.h
255
WString
3
1113,14 → 1113,14
257
WVList
 
210
214
1
1
 
258
MItem
11
..\symtab.h
14
..\scripting.h
259
WString
3
1131,14 → 1131,14
261
WVList
 
210
214
1
1
 
262
MItem
44
..\telegraphics_common\adobeplugin\A4Stuff.h
15
..\slider_win.h
263
WString
3
1149,14 → 1149,14
265
WVList
 
210
214
1
1
 
266
MItem
42
..\telegraphics_common\adobeplugin\entry.h
11
..\symtab.h
267
WString
3
1167,14 → 1167,14
269
WVList
 
210
214
1
1
 
270
MItem
42
..\telegraphics_common\adobeplugin\world.h
44
..\telegraphics_common\adobeplugin\A4Stuff.h
271
WString
3
1185,7 → 1185,7
273
WVList
 
210
214
1
1
 
1192,7 → 1192,7
274
MItem
42
..\telegraphics_common\tt\calc_std_state.h
..\telegraphics_common\adobeplugin\entry.h
275
WString
3
1203,14 → 1203,14
277
WVList
 
210
214
1
1
 
278
MItem
39
..\telegraphics_common\tt\carbonstuff.h
42
..\telegraphics_common\adobeplugin\world.h
279
WString
3
1221,14 → 1221,14
281
WVList
 
210
214
1
1
 
282
MItem
38
..\telegraphics_common\tt\choosefile.h
42
..\telegraphics_common\tt\calc_std_state.h
283
WString
3
1239,14 → 1239,14
285
WVList
 
210
214
1
1
 
286
MItem
41
..\telegraphics_common\tt\compat_string.h
39
..\telegraphics_common\tt\carbonstuff.h
287
WString
3
1257,7 → 1257,7
289
WVList
 
210
214
1
1
 
1264,7 → 1264,7
290
MItem
38
..\telegraphics_common\tt\compat_win.h
..\telegraphics_common\tt\choosefile.h
291
WString
3
1275,14 → 1275,14
293
WVList
 
210
214
1
1
 
294
MItem
47
..\telegraphics_common\tt\compat_win_resource.h
41
..\telegraphics_common\tt\compat_string.h
295
WString
3
1293,14 → 1293,14
297
WVList
 
210
214
1
1
 
298
MItem
31
..\telegraphics_common\tt\dbg.h
38
..\telegraphics_common\tt\compat_win.h
299
WString
3
1311,14 → 1311,14
301
WVList
 
210
214
1
1
 
302
MItem
31
..\telegraphics_common\tt\dlg.h
47
..\telegraphics_common\tt\compat_win_resource.h
303
WString
3
1329,14 → 1329,14
305
WVList
 
210
214
1
1
 
306
MItem
39
..\telegraphics_common\tt\file_compat.h
31
..\telegraphics_common\tt\dbg.h
307
WString
3
1347,14 → 1347,14
309
WVList
 
210
214
1
1
 
310
MItem
32
..\telegraphics_common\tt\menu.h
31
..\telegraphics_common\tt\dlg.h
311
WString
3
1365,14 → 1365,14
313
WVList
 
210
214
1
1
 
314
MItem
36
..\telegraphics_common\tt\misc-mac.h
39
..\telegraphics_common\tt\file_compat.h
315
WString
3
1383,7 → 1383,7
317
WVList
 
210
214
1
1
 
1390,7 → 1390,7
318
MItem
32
..\telegraphics_common\tt\misc.h
..\telegraphics_common\tt\menu.h
319
WString
3
1401,14 → 1401,14
321
WVList
 
210
214
1
1
 
322
MItem
30
..\telegraphics_common\tt\qd.h
36
..\telegraphics_common\tt\misc-mac.h
323
WString
3
1419,14 → 1419,14
325
WVList
 
210
214
1
1
 
326
MItem
34
..\telegraphics_common\tt\scroll.h
32
..\telegraphics_common\tt\misc.h
327
WString
3
1437,14 → 1437,14
329
WVList
 
210
214
1
1
 
330
MItem
40
..\telegraphics_common\tt\sprintf_tiny.h
30
..\telegraphics_common\tt\qd.h
331
WString
3
1455,14 → 1455,14
333
WVList
 
210
214
1
1
 
334
MItem
31
..\telegraphics_common\tt\str.h
34
..\telegraphics_common\tt\scroll.h
335
WString
3
1473,14 → 1473,14
337
WVList
 
210
214
1
1
 
338
MItem
37
..\telegraphics_common\tt\ui_compat.h
40
..\telegraphics_common\tt\sprintf_tiny.h
339
WString
3
1491,14 → 1491,14
341
WVList
 
210
214
1
1
 
342
MItem
32
..\telegraphics_common\tt\wind.h
31
..\telegraphics_common\tt\str.h
343
WString
3
1509,14 → 1509,14
345
WVList
 
210
214
1
1
 
346
MItem
7
..\ui.h
37
..\telegraphics_common\tt\ui_compat.h
347
WString
3
1527,14 → 1527,14
349
WVList
 
210
214
1
1
 
350
MItem
11
..\unistd.h
32
..\telegraphics_common\tt\wind.h
351
WString
3
1545,14 → 1545,14
353
WVList
 
210
214
1
1
 
354
MItem
12
..\version.h
7
..\ui.h
355
WString
3
1563,14 → 1563,14
357
WVList
 
210
214
1
1
 
358
MItem
27
..\versioninfo_modify_win.h
11
..\unistd.h
359
WString
3
1581,14 → 1581,14
361
WVList
 
210
214
1
1
 
362
MItem
10
..\y.tab.h
12
..\version.h
363
WString
3
1599,54 → 1599,90
365
WVList
 
210
214
1
1
 
366
MItem
27
..\versioninfo_modify_win.h
367
WString
3
NIL
368
WVList
 
369
WVList
 
214
1
1
 
370
MItem
10
..\y.tab.h
371
WString
3
NIL
372
WVList
 
373
WVList
 
214
1
1
 
374
MItem
4
*.rc
367
375
WString
5
NRESC
368
376
WVList
2
369
377
MVState
370
378
WString
3
WRC
371
379
WString
23
n????Macro definitions:
1
372
380
WString
61
WIN32 _WIN32 __NT__ WIN_ENV=1 INSIDE_PHOTOSHOP=1 MSWindows=1
 
373
381
MVState
374
382
WString
3
WRC
375
383
WString
25
n????Include directories:
1
376
384
WString
73
$[:;$(%watcom)\h;$(%watcom)\h\nt;$(%PSAPI)\Photoshop;$(%PSAPI)\Pica_sp;.\
 
377
385
WVList
 
-1
1653,21 → 1689,21
1
1
 
378
386
MItem
13
..\win_res.rc
379
387
WString
5
NRESC
380
388
WVList
 
381
389
WVList
 
366
374
1
1
 
/trunk/wpj/filterfoundry.wpj
31,7 → 31,7
8
WRect
64
75
66
6656
6656
 
40,6 → 40,6
WFileName
17
filterfoundry.tgt
 
 
5
26
7
/trunk/wpj/make_watcom.bat
1,5 → 1,9
echo off
 
rem Call before.bat now, otherwise we might get the error message that y.tab.h is missing
rem It is NOT enough to let Watcom call before.bat, because before.bat is executed too late.
call before.bat
 
cd /d "%~dp0"
 
del *.mk *.mk1 *.obj *.lib *.map *.dll *.8bf *.err *.lk1 *.res