mirror of
https://github.com/fadden/ciderpress.git
synced 2024-12-27 22:30:34 +00:00
Add Apple /// Business BASIC file support
This commit is contained in:
parent
f94d519657
commit
a4524898f9
5426
app/Main.cpp
5426
app/Main.cpp
File diff suppressed because it is too large
Load Diff
1238
app/Preferences.cpp
1238
app/Preferences.cpp
File diff suppressed because it is too large
Load Diff
@ -1,298 +1,299 @@
|
||||
/*
|
||||
* CiderPress
|
||||
* Copyright (C) 2007 by faddenSoft, LLC. All Rights Reserved.
|
||||
* See the file LICENSE for distribution terms.
|
||||
*/
|
||||
/*
|
||||
* Keep track of user preferences.
|
||||
*
|
||||
* How to add a new preference item:
|
||||
* - Add an entry to the PrefNum enum, below.
|
||||
* - Add a corresponding entry to Preferences::fPrefMaps, adding a new
|
||||
* section to the registry if appropriate.
|
||||
* - Add a default value to Preferences::Preferences. If not specified,
|
||||
* strings will be nil and numeric values will be zero.
|
||||
*/
|
||||
#ifndef __PREFERENCES__
|
||||
#define __PREFERENCES__
|
||||
|
||||
#include "MyApp.h"
|
||||
|
||||
class ContentList;
|
||||
|
||||
/*
|
||||
* Number of visible columns. (We no longer have "invisible" columns, so the
|
||||
* name is somewhat misleading.)
|
||||
*
|
||||
* This is used widely. Update with care.
|
||||
*/
|
||||
const int kNumVisibleColumns = 9;
|
||||
|
||||
/*
|
||||
* Used to save & restore column layout and sorting preferences for
|
||||
* the ContentList class.
|
||||
*/
|
||||
class ColumnLayout {
|
||||
public:
|
||||
ColumnLayout(void) {
|
||||
for (int i = 0; i < kNumVisibleColumns; i++)
|
||||
fColumnWidth[i] = kWidthDefaulted;
|
||||
fSortColumn = kNumVisibleColumns; // means "use original order"
|
||||
fAscending = true;
|
||||
}
|
||||
~ColumnLayout(void) {}
|
||||
|
||||
void LoadFromRegistry(const char* section);
|
||||
void SaveToRegistry(const char* section);
|
||||
|
||||
int GetColumnWidth(int col) const {
|
||||
ASSERT(col >= 0 && col < kNumVisibleColumns);
|
||||
return fColumnWidth[col];
|
||||
}
|
||||
void SetColumnWidth(int col, int width) {
|
||||
ASSERT(col >= 0 && col < kNumVisibleColumns);
|
||||
ASSERT(width >= 0 || width == kWidthDefaulted);
|
||||
fColumnWidth[col] = width;
|
||||
}
|
||||
|
||||
int GetSortColumn(void) const { return fSortColumn; }
|
||||
void SetSortColumn(int col) {
|
||||
ASSERT(col >= 0 && col <= kNumVisibleColumns);
|
||||
fSortColumn = col;
|
||||
}
|
||||
bool GetAscending(void) const { return fAscending; }
|
||||
void SetAscending(bool val) { fAscending = val; }
|
||||
|
||||
/* column width value used to flag "defaulted" status */
|
||||
enum { kWidthDefaulted = -1 };
|
||||
/* minimium width of column 0 (pathname) */
|
||||
enum { kMinCol0Width = 50 };
|
||||
|
||||
private:
|
||||
// Create a dummy list control to get default column widths.
|
||||
void DetermineDefaultWidths(ContentList* pList);
|
||||
|
||||
int fColumnWidth[kNumVisibleColumns];
|
||||
int fSortColumn;
|
||||
bool fAscending;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Preferences type enumeration.
|
||||
*
|
||||
* This is logically part of the Preferences object, but it's annoying to
|
||||
* have to specify the scope resolution operator everywhere.
|
||||
*/
|
||||
typedef enum {
|
||||
/**/ kPrefNumUnknown = 0,
|
||||
|
||||
/* these are saved in the registry */
|
||||
|
||||
// sticky settings for add file options
|
||||
kPrAddIncludeSubFolders, // bool
|
||||
kPrAddStripFolderNames, // bool
|
||||
kPrAddOverwriteExisting, // bool
|
||||
kPrAddTypePreservation, // long
|
||||
kPrAddConvEOL, // long
|
||||
|
||||
// sticky settings for file extraction
|
||||
//kPrExtractPath, // string
|
||||
kPrExtractConvEOL, // long
|
||||
kPrExtractConvHighASCII, // bool
|
||||
kPrExtractIncludeData, // bool
|
||||
kPrExtractIncludeRsrc, // bool
|
||||
kPrExtractIncludeDisk, // bool
|
||||
kPrExtractEnableReformat, // bool
|
||||
kPrExtractDiskTo2MG, // bool
|
||||
kPrExtractAddTypePreservation, // bool
|
||||
kPrExtractAddExtension, // bool
|
||||
kPrExtractStripFolderNames, // bool
|
||||
kPrExtractOverwriteExisting, // bool
|
||||
|
||||
// // view file options
|
||||
// kPrViewIncludeDataForks, // bool
|
||||
// kPrViewIncludeRsrcForks, // bool
|
||||
// kPrViewIncludeDiskImages, // bool
|
||||
// kPrViewIncludeComments, // bool
|
||||
|
||||
// convert disk image to file archive
|
||||
//kPrConvFileConvDOSText, // bool
|
||||
//kPrConvFileConvPascalText, // bool
|
||||
kPrConvFileEmptyFolders, // bool
|
||||
|
||||
// folders for CFileDialog initialization
|
||||
kPrOpenArchiveFolder, // string
|
||||
kPrConvertArchiveFolder, // string
|
||||
kPrAddFileFolder, // string
|
||||
kPrExtractFileFolder, // string
|
||||
|
||||
// logical/physical volume prefs
|
||||
kPrVolumeFilter, // long
|
||||
//kPrVolumeReadOnly, // bool
|
||||
|
||||
// cassette import/export prefs
|
||||
kPrCassetteAlgorithm, // long
|
||||
kPrOpenWAVFolder, // string
|
||||
|
||||
// items from the Preferences propertypages (must be saved/restored)
|
||||
kPrMimicShrinkIt, // bool
|
||||
kPrBadMacSHK, // bool
|
||||
kPrReduceSHKErrorChecks, // bool
|
||||
kPrCoerceDOSFilenames, // bool
|
||||
kPrSpacesToUnder, // bool
|
||||
kPrPasteJunkPaths, // bool
|
||||
kPrBeepOnSuccess, // bool
|
||||
|
||||
kPrQueryImageFormat, // bool
|
||||
kPrOpenVolumeRO, // bool
|
||||
kPrOpenVolumePhys0, // bool
|
||||
kPrProDOSAllowLower, // bool
|
||||
kPrProDOSUseSparse, // bool
|
||||
|
||||
kPrCompressionType, // long
|
||||
|
||||
kPrMaxViewFileSize, // long
|
||||
kPrNoWrapText, // bool
|
||||
|
||||
kPrHighlightHexDump, // bool
|
||||
kPrHighlightBASIC, // bool
|
||||
kPrConvHiResBlackWhite, // bool
|
||||
kPrConvDHRAlgorithm, // long
|
||||
kPrRelaxGfxTypeCheck, // bool
|
||||
kPrDisasmOneByteBrkCop, // bool
|
||||
//kPrEOLConvRaw, // bool
|
||||
kPrConvTextEOL_HA, // bool
|
||||
kPrConvPascalText, // bool
|
||||
kPrConvPascalCode, // bool
|
||||
kPrConvCPMText, // bool
|
||||
kPrConvApplesoft, // bool
|
||||
kPrConvInteger, // bool
|
||||
kPrConvGWP, // bool
|
||||
kPrConvText8, // bool
|
||||
kPrConvAWP, // bool
|
||||
kPrConvADB, // bool
|
||||
kPrConvASP, // bool
|
||||
kPrConvSCAssem, // bool
|
||||
kPrConvDisasm, // bool
|
||||
kPrConvHiRes, // bool
|
||||
kPrConvDHR, // bool
|
||||
kPrConvSHR, // bool
|
||||
kPrConvPrintShop, // bool
|
||||
kPrConvMacPaint, // bool
|
||||
kPrConvProDOSFolder, // bool
|
||||
kPrConvResources, // bool
|
||||
|
||||
kPrTempPath, // string
|
||||
kPrExtViewerExts, // string
|
||||
|
||||
// open file dialog
|
||||
kPrLastOpenFilterIndex, // long
|
||||
|
||||
/**/ kPrefNumLastRegistry,
|
||||
/* these are temporary settings, not saved in the registry */
|
||||
|
||||
// sticky settings for internal file viewer (ViewFilesDialog)
|
||||
kPrViewTextTypeFace, // string
|
||||
kPrViewTextPointSize, // long
|
||||
kPrFileViewerWidth, // long
|
||||
kPrFileViewerHeight, // long
|
||||
|
||||
// sticky setting for disk image creator
|
||||
kPrDiskImageCreateFormat, // long
|
||||
|
||||
/**/ kPrefNumLastEntry
|
||||
} PrefNum;
|
||||
|
||||
|
||||
/*
|
||||
* Container for preferences.
|
||||
*/
|
||||
class Preferences {
|
||||
public:
|
||||
Preferences(void);
|
||||
~Preferences(void) {
|
||||
FreeStringValues();
|
||||
}
|
||||
|
||||
// Load/save preferences from/to registry.
|
||||
int LoadFromRegistry(void);
|
||||
int SaveToRegistry(void);
|
||||
|
||||
ColumnLayout* GetColumnLayout(void) { return &fColumnLayout; }
|
||||
//bool GetShowToolbarText(void) const { return fShowToolbarText; }
|
||||
//void SetShowToolbarText(bool val) { fShowToolbarText = val; }
|
||||
|
||||
bool GetPrefBool(PrefNum num) const;
|
||||
void SetPrefBool(PrefNum num, bool val);
|
||||
long GetPrefLong(PrefNum num) const;
|
||||
void SetPrefLong(PrefNum num, long val);
|
||||
const char* GetPrefString(PrefNum num) const;
|
||||
void SetPrefString(PrefNum num, const char* str);
|
||||
|
||||
|
||||
private:
|
||||
void InitTempPath(void);
|
||||
void InitFolders(void);
|
||||
bool GetMyDocuments(CString* pPath);
|
||||
int DefaultCompressionType(void);
|
||||
void FreeStringValues(void);
|
||||
|
||||
/*
|
||||
* Internal data structure used to manage preferences.
|
||||
*/
|
||||
typedef enum { kPTNone, kBool, kLong, kString } PrefType;
|
||||
typedef struct PrefMap {
|
||||
PrefNum num;
|
||||
PrefType type;
|
||||
const char* registrySection;
|
||||
const char* registryKey;
|
||||
} PrefMap;
|
||||
static const PrefMap fPrefMaps[kPrefNumLastEntry];
|
||||
void ScanPrefMaps(void);
|
||||
|
||||
// this holds the actual values
|
||||
void* fValues[kPrefNumLastEntry];
|
||||
|
||||
// verify that the entry exists and has the expected type
|
||||
bool ValidateEntry(PrefNum num, PrefType type) const {
|
||||
if (num <= kPrefNumUnknown || num >= kPrefNumLastEntry) {
|
||||
ASSERT(false);
|
||||
return false;
|
||||
}
|
||||
if (fPrefMaps[num].type != type) {
|
||||
ASSERT(false);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// column widths for ContentList
|
||||
ColumnLayout fColumnLayout;
|
||||
|
||||
/*
|
||||
* Registry helpers.
|
||||
*/
|
||||
UINT GetInt(const char* section, const char* key, int dflt) {
|
||||
return gMyApp.GetProfileInt(section, key, dflt);
|
||||
}
|
||||
bool GetBool(const char* section, const char* key, bool dflt) {
|
||||
return (gMyApp.GetProfileInt(section, key, dflt) != 0);
|
||||
}
|
||||
CString GetString(const char* section, const char* key,
|
||||
const char* dflt)
|
||||
{
|
||||
return gMyApp.GetProfileString(section, key, dflt);
|
||||
}
|
||||
BOOL WriteInt(const char* section, const char* key, int value) {
|
||||
return gMyApp.WriteProfileInt(section, key, value);
|
||||
}
|
||||
BOOL WriteBool(const char* section, const char* key, bool value) {
|
||||
return gMyApp.WriteProfileInt(section, key, value);
|
||||
}
|
||||
BOOL WriteString(const char* section, const char* key, const char* value) {
|
||||
return gMyApp.WriteProfileString(section, key, value);
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
* CiderPress
|
||||
* Copyright (C) 2007, 2008 by faddenSoft, LLC. All Rights Reserved.
|
||||
* See the file LICENSE for distribution terms.
|
||||
*/
|
||||
/*
|
||||
* Keep track of user preferences.
|
||||
*
|
||||
* How to add a new preference item:
|
||||
* - Add an entry to the PrefNum enum, below.
|
||||
* - Add a corresponding entry to Preferences::fPrefMaps, adding a new
|
||||
* section to the registry if appropriate.
|
||||
* - Add a default value to Preferences::Preferences. If not specified,
|
||||
* strings will be nil and numeric values will be zero.
|
||||
*/
|
||||
#ifndef __PREFERENCES__
|
||||
#define __PREFERENCES__
|
||||
|
||||
#include "MyApp.h"
|
||||
|
||||
class ContentList;
|
||||
|
||||
/*
|
||||
* Number of visible columns. (We no longer have "invisible" columns, so the
|
||||
* name is somewhat misleading.)
|
||||
*
|
||||
* This is used widely. Update with care.
|
||||
*/
|
||||
const int kNumVisibleColumns = 9;
|
||||
|
||||
/*
|
||||
* Used to save & restore column layout and sorting preferences for
|
||||
* the ContentList class.
|
||||
*/
|
||||
class ColumnLayout {
|
||||
public:
|
||||
ColumnLayout(void) {
|
||||
for (int i = 0; i < kNumVisibleColumns; i++)
|
||||
fColumnWidth[i] = kWidthDefaulted;
|
||||
fSortColumn = kNumVisibleColumns; // means "use original order"
|
||||
fAscending = true;
|
||||
}
|
||||
~ColumnLayout(void) {}
|
||||
|
||||
void LoadFromRegistry(const char* section);
|
||||
void SaveToRegistry(const char* section);
|
||||
|
||||
int GetColumnWidth(int col) const {
|
||||
ASSERT(col >= 0 && col < kNumVisibleColumns);
|
||||
return fColumnWidth[col];
|
||||
}
|
||||
void SetColumnWidth(int col, int width) {
|
||||
ASSERT(col >= 0 && col < kNumVisibleColumns);
|
||||
ASSERT(width >= 0 || width == kWidthDefaulted);
|
||||
fColumnWidth[col] = width;
|
||||
}
|
||||
|
||||
int GetSortColumn(void) const { return fSortColumn; }
|
||||
void SetSortColumn(int col) {
|
||||
ASSERT(col >= 0 && col <= kNumVisibleColumns);
|
||||
fSortColumn = col;
|
||||
}
|
||||
bool GetAscending(void) const { return fAscending; }
|
||||
void SetAscending(bool val) { fAscending = val; }
|
||||
|
||||
/* column width value used to flag "defaulted" status */
|
||||
enum { kWidthDefaulted = -1 };
|
||||
/* minimium width of column 0 (pathname) */
|
||||
enum { kMinCol0Width = 50 };
|
||||
|
||||
private:
|
||||
// Create a dummy list control to get default column widths.
|
||||
void DetermineDefaultWidths(ContentList* pList);
|
||||
|
||||
int fColumnWidth[kNumVisibleColumns];
|
||||
int fSortColumn;
|
||||
bool fAscending;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Preferences type enumeration.
|
||||
*
|
||||
* This is logically part of the Preferences object, but it's annoying to
|
||||
* have to specify the scope resolution operator everywhere.
|
||||
*/
|
||||
typedef enum {
|
||||
/**/ kPrefNumUnknown = 0,
|
||||
|
||||
/* these are saved in the registry */
|
||||
|
||||
// sticky settings for add file options
|
||||
kPrAddIncludeSubFolders, // bool
|
||||
kPrAddStripFolderNames, // bool
|
||||
kPrAddOverwriteExisting, // bool
|
||||
kPrAddTypePreservation, // long
|
||||
kPrAddConvEOL, // long
|
||||
|
||||
// sticky settings for file extraction
|
||||
//kPrExtractPath, // string
|
||||
kPrExtractConvEOL, // long
|
||||
kPrExtractConvHighASCII, // bool
|
||||
kPrExtractIncludeData, // bool
|
||||
kPrExtractIncludeRsrc, // bool
|
||||
kPrExtractIncludeDisk, // bool
|
||||
kPrExtractEnableReformat, // bool
|
||||
kPrExtractDiskTo2MG, // bool
|
||||
kPrExtractAddTypePreservation, // bool
|
||||
kPrExtractAddExtension, // bool
|
||||
kPrExtractStripFolderNames, // bool
|
||||
kPrExtractOverwriteExisting, // bool
|
||||
|
||||
// // view file options
|
||||
// kPrViewIncludeDataForks, // bool
|
||||
// kPrViewIncludeRsrcForks, // bool
|
||||
// kPrViewIncludeDiskImages, // bool
|
||||
// kPrViewIncludeComments, // bool
|
||||
|
||||
// convert disk image to file archive
|
||||
//kPrConvFileConvDOSText, // bool
|
||||
//kPrConvFileConvPascalText, // bool
|
||||
kPrConvFileEmptyFolders, // bool
|
||||
|
||||
// folders for CFileDialog initialization
|
||||
kPrOpenArchiveFolder, // string
|
||||
kPrConvertArchiveFolder, // string
|
||||
kPrAddFileFolder, // string
|
||||
kPrExtractFileFolder, // string
|
||||
|
||||
// logical/physical volume prefs
|
||||
kPrVolumeFilter, // long
|
||||
//kPrVolumeReadOnly, // bool
|
||||
|
||||
// cassette import/export prefs
|
||||
kPrCassetteAlgorithm, // long
|
||||
kPrOpenWAVFolder, // string
|
||||
|
||||
// items from the Preferences propertypages (must be saved/restored)
|
||||
kPrMimicShrinkIt, // bool
|
||||
kPrBadMacSHK, // bool
|
||||
kPrReduceSHKErrorChecks, // bool
|
||||
kPrCoerceDOSFilenames, // bool
|
||||
kPrSpacesToUnder, // bool
|
||||
kPrPasteJunkPaths, // bool
|
||||
kPrBeepOnSuccess, // bool
|
||||
|
||||
kPrQueryImageFormat, // bool
|
||||
kPrOpenVolumeRO, // bool
|
||||
kPrOpenVolumePhys0, // bool
|
||||
kPrProDOSAllowLower, // bool
|
||||
kPrProDOSUseSparse, // bool
|
||||
|
||||
kPrCompressionType, // long
|
||||
|
||||
kPrMaxViewFileSize, // long
|
||||
kPrNoWrapText, // bool
|
||||
|
||||
kPrHighlightHexDump, // bool
|
||||
kPrHighlightBASIC, // bool
|
||||
kPrConvHiResBlackWhite, // bool
|
||||
kPrConvDHRAlgorithm, // long
|
||||
kPrRelaxGfxTypeCheck, // bool
|
||||
kPrDisasmOneByteBrkCop, // bool
|
||||
//kPrEOLConvRaw, // bool
|
||||
kPrConvTextEOL_HA, // bool
|
||||
kPrConvPascalText, // bool
|
||||
kPrConvPascalCode, // bool
|
||||
kPrConvCPMText, // bool
|
||||
kPrConvApplesoft, // bool
|
||||
kPrConvInteger, // bool
|
||||
kPrConvBusiness, // bool
|
||||
kPrConvGWP, // bool
|
||||
kPrConvText8, // bool
|
||||
kPrConvAWP, // bool
|
||||
kPrConvADB, // bool
|
||||
kPrConvASP, // bool
|
||||
kPrConvSCAssem, // bool
|
||||
kPrConvDisasm, // bool
|
||||
kPrConvHiRes, // bool
|
||||
kPrConvDHR, // bool
|
||||
kPrConvSHR, // bool
|
||||
kPrConvPrintShop, // bool
|
||||
kPrConvMacPaint, // bool
|
||||
kPrConvProDOSFolder, // bool
|
||||
kPrConvResources, // bool
|
||||
|
||||
kPrTempPath, // string
|
||||
kPrExtViewerExts, // string
|
||||
|
||||
// open file dialog
|
||||
kPrLastOpenFilterIndex, // long
|
||||
|
||||
/**/ kPrefNumLastRegistry,
|
||||
/* these are temporary settings, not saved in the registry */
|
||||
|
||||
// sticky settings for internal file viewer (ViewFilesDialog)
|
||||
kPrViewTextTypeFace, // string
|
||||
kPrViewTextPointSize, // long
|
||||
kPrFileViewerWidth, // long
|
||||
kPrFileViewerHeight, // long
|
||||
|
||||
// sticky setting for disk image creator
|
||||
kPrDiskImageCreateFormat, // long
|
||||
|
||||
/**/ kPrefNumLastEntry
|
||||
} PrefNum;
|
||||
|
||||
|
||||
/*
|
||||
* Container for preferences.
|
||||
*/
|
||||
class Preferences {
|
||||
public:
|
||||
Preferences(void);
|
||||
~Preferences(void) {
|
||||
FreeStringValues();
|
||||
}
|
||||
|
||||
// Load/save preferences from/to registry.
|
||||
int LoadFromRegistry(void);
|
||||
int SaveToRegistry(void);
|
||||
|
||||
ColumnLayout* GetColumnLayout(void) { return &fColumnLayout; }
|
||||
//bool GetShowToolbarText(void) const { return fShowToolbarText; }
|
||||
//void SetShowToolbarText(bool val) { fShowToolbarText = val; }
|
||||
|
||||
bool GetPrefBool(PrefNum num) const;
|
||||
void SetPrefBool(PrefNum num, bool val);
|
||||
long GetPrefLong(PrefNum num) const;
|
||||
void SetPrefLong(PrefNum num, long val);
|
||||
const char* GetPrefString(PrefNum num) const;
|
||||
void SetPrefString(PrefNum num, const char* str);
|
||||
|
||||
|
||||
private:
|
||||
void InitTempPath(void);
|
||||
void InitFolders(void);
|
||||
bool GetMyDocuments(CString* pPath);
|
||||
int DefaultCompressionType(void);
|
||||
void FreeStringValues(void);
|
||||
|
||||
/*
|
||||
* Internal data structure used to manage preferences.
|
||||
*/
|
||||
typedef enum { kPTNone, kBool, kLong, kString } PrefType;
|
||||
typedef struct PrefMap {
|
||||
PrefNum num;
|
||||
PrefType type;
|
||||
const char* registrySection;
|
||||
const char* registryKey;
|
||||
} PrefMap;
|
||||
static const PrefMap fPrefMaps[kPrefNumLastEntry];
|
||||
void ScanPrefMaps(void);
|
||||
|
||||
// this holds the actual values
|
||||
void* fValues[kPrefNumLastEntry];
|
||||
|
||||
// verify that the entry exists and has the expected type
|
||||
bool ValidateEntry(PrefNum num, PrefType type) const {
|
||||
if (num <= kPrefNumUnknown || num >= kPrefNumLastEntry) {
|
||||
ASSERT(false);
|
||||
return false;
|
||||
}
|
||||
if (fPrefMaps[num].type != type) {
|
||||
ASSERT(false);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// column widths for ContentList
|
||||
ColumnLayout fColumnLayout;
|
||||
|
||||
/*
|
||||
* Registry helpers.
|
||||
*/
|
||||
UINT GetInt(const char* section, const char* key, int dflt) {
|
||||
return gMyApp.GetProfileInt(section, key, dflt);
|
||||
}
|
||||
bool GetBool(const char* section, const char* key, bool dflt) {
|
||||
return (gMyApp.GetProfileInt(section, key, dflt) != 0);
|
||||
}
|
||||
CString GetString(const char* section, const char* key,
|
||||
const char* dflt)
|
||||
{
|
||||
return gMyApp.GetProfileString(section, key, dflt);
|
||||
}
|
||||
BOOL WriteInt(const char* section, const char* key, int value) {
|
||||
return gMyApp.WriteProfileInt(section, key, value);
|
||||
}
|
||||
BOOL WriteBool(const char* section, const char* key, bool value) {
|
||||
return gMyApp.WriteProfileInt(section, key, value);
|
||||
}
|
||||
BOOL WriteString(const char* section, const char* key, const char* value) {
|
||||
return gMyApp.WriteProfileString(section, key, value);
|
||||
}
|
||||
};
|
||||
|
||||
#endif /*__PREFERENCES__*/
|
@ -1,241 +1,242 @@
|
||||
/*
|
||||
* CiderPress
|
||||
* Copyright (C) 2007 by faddenSoft, LLC. All Rights Reserved.
|
||||
* See the file LICENSE for distribution terms.
|
||||
*/
|
||||
/*
|
||||
* Classes to support the Preferences property pages.
|
||||
*/
|
||||
#ifndef __PREFSDIALOG__
|
||||
#define __PREFSDIALOG__
|
||||
|
||||
#include "Preferences.h"
|
||||
#include "../util/UtilLib.h"
|
||||
#include "resource.h"
|
||||
|
||||
/*
|
||||
* The "general" page, which controls how we display information to the user.
|
||||
*/
|
||||
class PrefsGeneralPage : public CPropertyPage
|
||||
{
|
||||
public:
|
||||
PrefsGeneralPage(void) :
|
||||
CPropertyPage(IDD_PREF_GENERAL),
|
||||
fReady(false),
|
||||
fMimicShrinkIt(FALSE),
|
||||
fBadMacSHK(FALSE),
|
||||
fReduceSHKErrorChecks(FALSE),
|
||||
fCoerceDOSFilenames(FALSE),
|
||||
fSpacesToUnder(FALSE),
|
||||
fDefaultsPushed(FALSE),
|
||||
fOurAssociations(nil)
|
||||
{}
|
||||
virtual ~PrefsGeneralPage(void) {
|
||||
delete[] fOurAssociations;
|
||||
}
|
||||
|
||||
bool fReady;
|
||||
|
||||
// fields on this page
|
||||
BOOL fColumn[kNumVisibleColumns];
|
||||
BOOL fMimicShrinkIt;
|
||||
BOOL fBadMacSHK;
|
||||
BOOL fReduceSHKErrorChecks;
|
||||
BOOL fCoerceDOSFilenames;
|
||||
BOOL fSpacesToUnder;
|
||||
BOOL fPasteJunkPaths;
|
||||
BOOL fBeepOnSuccess;
|
||||
BOOL fDefaultsPushed;
|
||||
|
||||
// initialized if we opened the file associations edit page
|
||||
bool* fOurAssociations;
|
||||
|
||||
protected:
|
||||
virtual void DoDataExchange(CDataExchange* pDX);
|
||||
|
||||
afx_msg void OnChange(void);
|
||||
afx_msg void OnChangeRange(UINT);
|
||||
afx_msg void OnDefaults(void);
|
||||
afx_msg void OnAssociations(void);
|
||||
afx_msg LONG OnHelp(UINT wParam, LONG lParam);
|
||||
afx_msg LONG OnCommandHelp(UINT wParam, LONG lParam);
|
||||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
/*
|
||||
* The "disk image" page, for selecting disk image preferences.
|
||||
*/
|
||||
class PrefsDiskImagePage : public CPropertyPage
|
||||
{
|
||||
public:
|
||||
PrefsDiskImagePage(void) :
|
||||
CPropertyPage(IDD_PREF_DISKIMAGE),
|
||||
fReady(false),
|
||||
fQueryImageFormat(FALSE),
|
||||
fOpenVolumeRO(FALSE),
|
||||
fProDOSAllowLower(FALSE),
|
||||
fProDOSUseSparse(FALSE)
|
||||
{}
|
||||
|
||||
bool fReady;
|
||||
|
||||
BOOL fQueryImageFormat;
|
||||
BOOL fOpenVolumeRO;
|
||||
BOOL fOpenVolumePhys0;
|
||||
BOOL fProDOSAllowLower;
|
||||
BOOL fProDOSUseSparse;
|
||||
|
||||
protected:
|
||||
virtual BOOL OnInitDialog(void);
|
||||
virtual void DoDataExchange(CDataExchange* pDX);
|
||||
|
||||
afx_msg void OnChange(void);
|
||||
//afx_msg void OnChangeRange(UINT);
|
||||
afx_msg LONG OnHelp(UINT wParam, LONG lParam);
|
||||
afx_msg LONG OnCommandHelp(UINT wParam, LONG lParam);
|
||||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
/*
|
||||
* The "compression" page, which lets the user choose a default compression
|
||||
* method.
|
||||
*/
|
||||
class PrefsCompressionPage : public CPropertyPage
|
||||
{
|
||||
public:
|
||||
PrefsCompressionPage(void) :
|
||||
CPropertyPage(IDD_PREF_COMPRESSION), fReady(false)
|
||||
{}
|
||||
|
||||
bool fReady;
|
||||
|
||||
int fCompressType; // radio button index
|
||||
|
||||
protected:
|
||||
virtual BOOL OnInitDialog(void);
|
||||
virtual void DoDataExchange(CDataExchange* pDX);
|
||||
|
||||
afx_msg void OnChangeRange(UINT);
|
||||
afx_msg LONG OnHelp(UINT wParam, LONG lParam);
|
||||
afx_msg LONG OnCommandHelp(UINT wParam, LONG lParam);
|
||||
|
||||
private:
|
||||
void DisableWnd(int id);
|
||||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
/*
|
||||
* The "fview" page, for selecting preferences for the internal file viewer.
|
||||
*/
|
||||
class PrefsFviewPage : public CPropertyPage
|
||||
{
|
||||
public:
|
||||
PrefsFviewPage(void) :
|
||||
CPropertyPage(IDD_PREF_FVIEW), fReady(false)
|
||||
{}
|
||||
bool fReady;
|
||||
|
||||
BOOL fEOLConvRaw;
|
||||
BOOL fNoWrapText;
|
||||
BOOL fHighlightHexDump;
|
||||
BOOL fHighlightBASIC;
|
||||
BOOL fConvDisasmOneByteBrkCop;
|
||||
BOOL fConvHiResBlackWhite;
|
||||
int fConvDHRAlgorithm; // drop list
|
||||
|
||||
BOOL fConvTextEOL_HA;
|
||||
BOOL fConvCPMText;
|
||||
BOOL fConvPascalText;
|
||||
BOOL fConvPascalCode;
|
||||
BOOL fConvApplesoft;
|
||||
BOOL fConvInteger;
|
||||
BOOL fConvGWP;
|
||||
BOOL fConvText8;
|
||||
BOOL fConvAWP;
|
||||
BOOL fConvADB;
|
||||
BOOL fConvASP;
|
||||
BOOL fConvSCAssem;
|
||||
BOOL fConvDisasm;
|
||||
|
||||
BOOL fConvHiRes;
|
||||
BOOL fConvDHR;
|
||||
BOOL fConvSHR;
|
||||
BOOL fConvPrintShop;
|
||||
BOOL fConvMacPaint;
|
||||
BOOL fConvProDOSFolder;
|
||||
BOOL fConvResources;
|
||||
BOOL fRelaxGfxTypeCheck;
|
||||
|
||||
UINT fMaxViewFileSizeKB;
|
||||
|
||||
protected:
|
||||
virtual BOOL OnInitDialog(void);
|
||||
virtual void DoDataExchange(CDataExchange* pDX);
|
||||
|
||||
afx_msg void OnChange(void);
|
||||
afx_msg void OnChangeRange(UINT);
|
||||
afx_msg LONG OnHelp(UINT wParam, LONG lParam);
|
||||
afx_msg LONG OnCommandHelp(UINT wParam, LONG lParam);
|
||||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
/*
|
||||
* The "compression" page, which lets the user choose a default compression
|
||||
* method for NuFX archives.
|
||||
*/
|
||||
class PrefsFilesPage : public CPropertyPage
|
||||
{
|
||||
public:
|
||||
PrefsFilesPage(void) :
|
||||
CPropertyPage(IDD_PREF_FILES), fReady(false)
|
||||
{}
|
||||
|
||||
bool fReady;
|
||||
|
||||
CString fTempPath;
|
||||
CString fExtViewerExts;
|
||||
|
||||
protected:
|
||||
virtual BOOL OnInitDialog(void);
|
||||
virtual void DoDataExchange(CDataExchange* pDX);
|
||||
|
||||
afx_msg void OnChange(void);
|
||||
afx_msg void OnChooseFolder(void);
|
||||
afx_msg LONG OnHelp(UINT wParam, LONG lParam);
|
||||
afx_msg LONG OnCommandHelp(UINT wParam, LONG lParam);
|
||||
|
||||
MyBitmapButton fChooseFolderButton;
|
||||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Property sheet that wraps around the preferences pages.
|
||||
*/
|
||||
class PrefsSheet : public CPropertySheet
|
||||
{
|
||||
public:
|
||||
PrefsSheet(CWnd* pParentWnd = NULL);
|
||||
|
||||
PrefsGeneralPage fGeneralPage;
|
||||
PrefsDiskImagePage fDiskImagePage;
|
||||
PrefsCompressionPage fCompressionPage;
|
||||
PrefsFviewPage fFviewPage;
|
||||
PrefsFilesPage fFilesPage;
|
||||
|
||||
protected:
|
||||
BOOL OnNcCreate(LPCREATESTRUCT cs);
|
||||
|
||||
afx_msg void OnApplyNow();
|
||||
LONG OnHelp(UINT wParam, LONG lParam);
|
||||
void OnIDHelp(void);
|
||||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
/*
|
||||
* CiderPress
|
||||
* Copyright (C) 2007, 2008 by faddenSoft, LLC. All Rights Reserved.
|
||||
* See the file LICENSE for distribution terms.
|
||||
*/
|
||||
/*
|
||||
* Classes to support the Preferences property pages.
|
||||
*/
|
||||
#ifndef __PREFSDIALOG__
|
||||
#define __PREFSDIALOG__
|
||||
|
||||
#include "Preferences.h"
|
||||
#include "../util/UtilLib.h"
|
||||
#include "resource.h"
|
||||
|
||||
/*
|
||||
* The "general" page, which controls how we display information to the user.
|
||||
*/
|
||||
class PrefsGeneralPage : public CPropertyPage
|
||||
{
|
||||
public:
|
||||
PrefsGeneralPage(void) :
|
||||
CPropertyPage(IDD_PREF_GENERAL),
|
||||
fReady(false),
|
||||
fMimicShrinkIt(FALSE),
|
||||
fBadMacSHK(FALSE),
|
||||
fReduceSHKErrorChecks(FALSE),
|
||||
fCoerceDOSFilenames(FALSE),
|
||||
fSpacesToUnder(FALSE),
|
||||
fDefaultsPushed(FALSE),
|
||||
fOurAssociations(nil)
|
||||
{}
|
||||
virtual ~PrefsGeneralPage(void) {
|
||||
delete[] fOurAssociations;
|
||||
}
|
||||
|
||||
bool fReady;
|
||||
|
||||
// fields on this page
|
||||
BOOL fColumn[kNumVisibleColumns];
|
||||
BOOL fMimicShrinkIt;
|
||||
BOOL fBadMacSHK;
|
||||
BOOL fReduceSHKErrorChecks;
|
||||
BOOL fCoerceDOSFilenames;
|
||||
BOOL fSpacesToUnder;
|
||||
BOOL fPasteJunkPaths;
|
||||
BOOL fBeepOnSuccess;
|
||||
BOOL fDefaultsPushed;
|
||||
|
||||
// initialized if we opened the file associations edit page
|
||||
bool* fOurAssociations;
|
||||
|
||||
protected:
|
||||
virtual void DoDataExchange(CDataExchange* pDX);
|
||||
|
||||
afx_msg void OnChange(void);
|
||||
afx_msg void OnChangeRange(UINT);
|
||||
afx_msg void OnDefaults(void);
|
||||
afx_msg void OnAssociations(void);
|
||||
afx_msg LONG OnHelp(UINT wParam, LONG lParam);
|
||||
afx_msg LONG OnCommandHelp(UINT wParam, LONG lParam);
|
||||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
/*
|
||||
* The "disk image" page, for selecting disk image preferences.
|
||||
*/
|
||||
class PrefsDiskImagePage : public CPropertyPage
|
||||
{
|
||||
public:
|
||||
PrefsDiskImagePage(void) :
|
||||
CPropertyPage(IDD_PREF_DISKIMAGE),
|
||||
fReady(false),
|
||||
fQueryImageFormat(FALSE),
|
||||
fOpenVolumeRO(FALSE),
|
||||
fProDOSAllowLower(FALSE),
|
||||
fProDOSUseSparse(FALSE)
|
||||
{}
|
||||
|
||||
bool fReady;
|
||||
|
||||
BOOL fQueryImageFormat;
|
||||
BOOL fOpenVolumeRO;
|
||||
BOOL fOpenVolumePhys0;
|
||||
BOOL fProDOSAllowLower;
|
||||
BOOL fProDOSUseSparse;
|
||||
|
||||
protected:
|
||||
virtual BOOL OnInitDialog(void);
|
||||
virtual void DoDataExchange(CDataExchange* pDX);
|
||||
|
||||
afx_msg void OnChange(void);
|
||||
//afx_msg void OnChangeRange(UINT);
|
||||
afx_msg LONG OnHelp(UINT wParam, LONG lParam);
|
||||
afx_msg LONG OnCommandHelp(UINT wParam, LONG lParam);
|
||||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
/*
|
||||
* The "compression" page, which lets the user choose a default compression
|
||||
* method.
|
||||
*/
|
||||
class PrefsCompressionPage : public CPropertyPage
|
||||
{
|
||||
public:
|
||||
PrefsCompressionPage(void) :
|
||||
CPropertyPage(IDD_PREF_COMPRESSION), fReady(false)
|
||||
{}
|
||||
|
||||
bool fReady;
|
||||
|
||||
int fCompressType; // radio button index
|
||||
|
||||
protected:
|
||||
virtual BOOL OnInitDialog(void);
|
||||
virtual void DoDataExchange(CDataExchange* pDX);
|
||||
|
||||
afx_msg void OnChangeRange(UINT);
|
||||
afx_msg LONG OnHelp(UINT wParam, LONG lParam);
|
||||
afx_msg LONG OnCommandHelp(UINT wParam, LONG lParam);
|
||||
|
||||
private:
|
||||
void DisableWnd(int id);
|
||||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
/*
|
||||
* The "fview" page, for selecting preferences for the internal file viewer.
|
||||
*/
|
||||
class PrefsFviewPage : public CPropertyPage
|
||||
{
|
||||
public:
|
||||
PrefsFviewPage(void) :
|
||||
CPropertyPage(IDD_PREF_FVIEW), fReady(false)
|
||||
{}
|
||||
bool fReady;
|
||||
|
||||
BOOL fEOLConvRaw;
|
||||
BOOL fNoWrapText;
|
||||
BOOL fHighlightHexDump;
|
||||
BOOL fHighlightBASIC;
|
||||
BOOL fConvDisasmOneByteBrkCop;
|
||||
BOOL fConvHiResBlackWhite;
|
||||
int fConvDHRAlgorithm; // drop list
|
||||
|
||||
BOOL fConvTextEOL_HA;
|
||||
BOOL fConvCPMText;
|
||||
BOOL fConvPascalText;
|
||||
BOOL fConvPascalCode;
|
||||
BOOL fConvApplesoft;
|
||||
BOOL fConvInteger;
|
||||
BOOL fConvBusiness;
|
||||
BOOL fConvGWP;
|
||||
BOOL fConvText8;
|
||||
BOOL fConvAWP;
|
||||
BOOL fConvADB;
|
||||
BOOL fConvASP;
|
||||
BOOL fConvSCAssem;
|
||||
BOOL fConvDisasm;
|
||||
|
||||
BOOL fConvHiRes;
|
||||
BOOL fConvDHR;
|
||||
BOOL fConvSHR;
|
||||
BOOL fConvPrintShop;
|
||||
BOOL fConvMacPaint;
|
||||
BOOL fConvProDOSFolder;
|
||||
BOOL fConvResources;
|
||||
BOOL fRelaxGfxTypeCheck;
|
||||
|
||||
UINT fMaxViewFileSizeKB;
|
||||
|
||||
protected:
|
||||
virtual BOOL OnInitDialog(void);
|
||||
virtual void DoDataExchange(CDataExchange* pDX);
|
||||
|
||||
afx_msg void OnChange(void);
|
||||
afx_msg void OnChangeRange(UINT);
|
||||
afx_msg LONG OnHelp(UINT wParam, LONG lParam);
|
||||
afx_msg LONG OnCommandHelp(UINT wParam, LONG lParam);
|
||||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
/*
|
||||
* The "compression" page, which lets the user choose a default compression
|
||||
* method for NuFX archives.
|
||||
*/
|
||||
class PrefsFilesPage : public CPropertyPage
|
||||
{
|
||||
public:
|
||||
PrefsFilesPage(void) :
|
||||
CPropertyPage(IDD_PREF_FILES), fReady(false)
|
||||
{}
|
||||
|
||||
bool fReady;
|
||||
|
||||
CString fTempPath;
|
||||
CString fExtViewerExts;
|
||||
|
||||
protected:
|
||||
virtual BOOL OnInitDialog(void);
|
||||
virtual void DoDataExchange(CDataExchange* pDX);
|
||||
|
||||
afx_msg void OnChange(void);
|
||||
afx_msg void OnChooseFolder(void);
|
||||
afx_msg LONG OnHelp(UINT wParam, LONG lParam);
|
||||
afx_msg LONG OnCommandHelp(UINT wParam, LONG lParam);
|
||||
|
||||
MyBitmapButton fChooseFolderButton;
|
||||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Property sheet that wraps around the preferences pages.
|
||||
*/
|
||||
class PrefsSheet : public CPropertySheet
|
||||
{
|
||||
public:
|
||||
PrefsSheet(CWnd* pParentWnd = NULL);
|
||||
|
||||
PrefsGeneralPage fGeneralPage;
|
||||
PrefsDiskImagePage fDiskImagePage;
|
||||
PrefsCompressionPage fCompressionPage;
|
||||
PrefsFviewPage fFviewPage;
|
||||
PrefsFilesPage fFilesPage;
|
||||
|
||||
protected:
|
||||
BOOL OnNcCreate(LPCREATESTRUCT cs);
|
||||
|
||||
afx_msg void OnApplyNow();
|
||||
LONG OnHelp(UINT wParam, LONG lParam);
|
||||
void OnIDHelp(void);
|
||||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
#endif /*__PREFSDIALOG__*/
|
1277
reformat/BASIC.cpp
1277
reformat/BASIC.cpp
File diff suppressed because it is too large
Load Diff
108
reformat/BASIC.h
108
reformat/BASIC.h
@ -1,46 +1,64 @@
|
||||
/*
|
||||
* CiderPress
|
||||
* Copyright (C) 2007 by faddenSoft, LLC. All Rights Reserved.
|
||||
* See the file LICENSE for distribution terms.
|
||||
*/
|
||||
/*
|
||||
* Reformat BASIC programs.
|
||||
*/
|
||||
#ifndef __LR_BASIC__
|
||||
#define __LR_BASIC__
|
||||
|
||||
#include "ReformatBase.h"
|
||||
|
||||
/*
|
||||
* Reformat an Applesoft BASIC program into readable text.
|
||||
*/
|
||||
class ReformatApplesoft : public ReformatText {
|
||||
public:
|
||||
ReformatApplesoft(void) {}
|
||||
virtual ~ReformatApplesoft(void) {}
|
||||
|
||||
virtual void Examine(ReformatHolder* pHolder);
|
||||
virtual int Process(const ReformatHolder* pHolder,
|
||||
ReformatHolder::ReformatID id, ReformatHolder::ReformatPart part,
|
||||
ReformatOutput* pOutput);
|
||||
|
||||
/* share our token list with others */
|
||||
enum { kTokenLen = 8, kTokenCount = 107 };
|
||||
static const char* GetApplesoftTokens(void);
|
||||
};
|
||||
|
||||
/*
|
||||
* Reformat an Integer BASIC program into readable text.
|
||||
*/
|
||||
class ReformatInteger : public ReformatText {
|
||||
public:
|
||||
ReformatInteger(void) {}
|
||||
virtual ~ReformatInteger(void) {}
|
||||
|
||||
virtual void Examine(ReformatHolder* pHolder);
|
||||
virtual int Process(const ReformatHolder* pHolder,
|
||||
ReformatHolder::ReformatID id, ReformatHolder::ReformatPart part,
|
||||
ReformatOutput* pOutput);
|
||||
};
|
||||
|
||||
/*
|
||||
* CiderPress
|
||||
* Copyright (C) 2007, 2008 by faddenSoft, LLC. All Rights Reserved.
|
||||
* See the file LICENSE for distribution terms.
|
||||
*/
|
||||
/*
|
||||
* Reformat BASIC programs.
|
||||
*/
|
||||
#ifndef __LR_BASIC__
|
||||
#define __LR_BASIC__
|
||||
|
||||
#include "ReformatBase.h"
|
||||
|
||||
/*
|
||||
* Reformat an Applesoft BASIC program into readable text.
|
||||
*/
|
||||
class ReformatApplesoft : public ReformatText {
|
||||
public:
|
||||
ReformatApplesoft(void) {}
|
||||
virtual ~ReformatApplesoft(void) {}
|
||||
|
||||
virtual void Examine(ReformatHolder* pHolder);
|
||||
virtual int Process(const ReformatHolder* pHolder,
|
||||
ReformatHolder::ReformatID id, ReformatHolder::ReformatPart part,
|
||||
ReformatOutput* pOutput);
|
||||
|
||||
/* share our token list with others */
|
||||
enum { kTokenLen = 8, kTokenCount = 107 };
|
||||
static const char* GetApplesoftTokens(void);
|
||||
};
|
||||
|
||||
/*
|
||||
* Reformat an Integer BASIC program into readable text.
|
||||
*/
|
||||
class ReformatInteger : public ReformatText {
|
||||
public:
|
||||
ReformatInteger(void) {}
|
||||
virtual ~ReformatInteger(void) {}
|
||||
|
||||
virtual void Examine(ReformatHolder* pHolder);
|
||||
virtual int Process(const ReformatHolder* pHolder,
|
||||
ReformatHolder::ReformatID id, ReformatHolder::ReformatPart part,
|
||||
ReformatOutput* pOutput);
|
||||
};
|
||||
|
||||
/*
|
||||
* Reformat an Apple /// Business BASIC program into readable text.
|
||||
*/
|
||||
class ReformatBusiness : public ReformatText {
|
||||
public:
|
||||
ReformatBusiness(void) {}
|
||||
virtual ~ReformatBusiness(void) {}
|
||||
|
||||
virtual void Examine(ReformatHolder* pHolder);
|
||||
virtual int Process(const ReformatHolder* pHolder,
|
||||
ReformatHolder::ReformatID id, ReformatHolder::ReformatPart part,
|
||||
ReformatOutput* pOutput);
|
||||
|
||||
/* share our token list with others - but this won't really work in its current form... */
|
||||
enum { kTokenLen = 10, kTokenCount = 107 };
|
||||
static const char* GetBusinessTokens(void);
|
||||
};
|
||||
|
||||
#endif /*__LR_BASIC__*/
|
File diff suppressed because it is too large
Load Diff
1035
reformat/Reformat.h
1035
reformat/Reformat.h
File diff suppressed because it is too large
Load Diff
@ -1,387 +1,388 @@
|
||||
/*
|
||||
* CiderPress
|
||||
* Copyright (C) 2007 by faddenSoft, LLC. All Rights Reserved.
|
||||
* See the file LICENSE for distribution terms.
|
||||
*/
|
||||
/*
|
||||
* Reformatter base classes. The main app does not need this header file.
|
||||
*
|
||||
* Every converter turns the source into text or graphics. Currently it's
|
||||
* not possible to convert something into a mix of both. We could change
|
||||
* that, but we'd have to figure out what that means when extracting a file
|
||||
* (i.e. figure out the RTF embedded bitmap format).
|
||||
*/
|
||||
#ifndef __LR_REFORMAT_BASE__
|
||||
#define __LR_REFORMAT_BASE__
|
||||
|
||||
#include "Reformat.h"
|
||||
|
||||
#define BufPrintf fExpBuf.Printf
|
||||
|
||||
|
||||
/*
|
||||
* Abstract base class for reformatting a file into readable text.
|
||||
*
|
||||
* The transmuted version is written on top of the original, or is allocated
|
||||
* in new[]ed storage and replaces the original (which is delete[]d).
|
||||
*/
|
||||
class Reformat {
|
||||
public:
|
||||
Reformat(void) {}
|
||||
virtual ~Reformat(void) {}
|
||||
|
||||
enum {
|
||||
kTypePCD = 0x02,
|
||||
kTypePTX = 0x03,
|
||||
kTypeTXT = 0x04,
|
||||
kTypeBIN = 0x06,
|
||||
kTypeFOT = 0x08,
|
||||
kTypeDIR = 0x0f,
|
||||
kTypeADB = 0x19,
|
||||
kTypeAWP = 0x1a,
|
||||
kTypeASP = 0x1b,
|
||||
kType8OB = 0x2b,
|
||||
kTypeP8C = 0x2e,
|
||||
kTypeGWP = 0x50,
|
||||
kTypeOBJ = 0xb1,
|
||||
kTypeLIB = 0xb2,
|
||||
kTypeFST = 0xbd,
|
||||
kTypePNT = 0xc0,
|
||||
kTypePIC = 0xc1,
|
||||
kTypeCMD = 0xf0,
|
||||
kTypeDOS_B = 0xf4, // alternate 'B'
|
||||
kTypeOS = 0xf9,
|
||||
kTypeINT = 0xfa,
|
||||
kTypeBAS = 0xfc,
|
||||
kTypeSYS = 0xff,
|
||||
};
|
||||
|
||||
/* test applicability of all file parts */
|
||||
virtual void Examine(ReformatHolder* pHolder) = 0;
|
||||
|
||||
/* reformat appropriately; returns 0 on success, -1 on error */
|
||||
virtual int Process(const ReformatHolder* pHolder,
|
||||
ReformatHolder::ReformatID id, ReformatHolder::ReformatPart part,
|
||||
ReformatOutput* pOutput) = 0;
|
||||
|
||||
// grab the next 8 bits
|
||||
static inline unsigned char Read8(const unsigned char** pBuf, long* pLength) {
|
||||
if (*pLength > 0) {
|
||||
(*pLength)--;
|
||||
return *(*pBuf)++;
|
||||
} else {
|
||||
// ought to throw an exception here
|
||||
ASSERT(false);
|
||||
return (unsigned char) -1;
|
||||
}
|
||||
}
|
||||
// grab a 16-bit little-endian value
|
||||
static inline unsigned short Read16(const unsigned char** pBuf, long* pLength) {
|
||||
unsigned short val;
|
||||
if (*pLength >= 2) {
|
||||
val = *(*pBuf)++;
|
||||
val |= *(*pBuf)++ << 8;
|
||||
*pLength -= 2;
|
||||
} else {
|
||||
// ought to throw an exception here
|
||||
ASSERT(false);
|
||||
val = (unsigned short) -1;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
// grab a 16-bit little-endian value
|
||||
static inline unsigned long Read32(const unsigned char** pBuf, long* pLength) {
|
||||
unsigned long val;
|
||||
if (*pLength >= 4) {
|
||||
val = *(*pBuf)++;
|
||||
val |= *(*pBuf)++ << 8;
|
||||
val |= *(*pBuf)++ << 16;
|
||||
val |= *(*pBuf)++ << 24;
|
||||
*pLength -= 4;
|
||||
} else {
|
||||
// ought to throw an exception here
|
||||
ASSERT(false);
|
||||
val = (unsigned long) -1;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
static inline unsigned short Get16LE(const unsigned char* buf) {
|
||||
return *buf | *(buf+1) << 8;
|
||||
}
|
||||
static inline unsigned long Get32LE(const unsigned char* buf) {
|
||||
return *buf | *(buf+1) << 8 | *(buf+2) << 16 | *(buf+3) << 24;
|
||||
}
|
||||
static inline unsigned short Get16BE(const unsigned char* buf) {
|
||||
return *buf << 8 | *(buf+1);
|
||||
}
|
||||
static inline unsigned long Get32BE(const unsigned char* buf) {
|
||||
return *buf << 24 | *(buf+1) << 16 | *(buf+2) << 8 | *(buf+3);
|
||||
}
|
||||
static inline unsigned short Get16(const unsigned char* buf, bool littleEndian) {
|
||||
if (littleEndian)
|
||||
return Get16LE(buf);
|
||||
else
|
||||
return Get16BE(buf);
|
||||
}
|
||||
static inline unsigned long Get32(const unsigned char* buf, bool littleEndian) {
|
||||
if (littleEndian)
|
||||
return Get32LE(buf);
|
||||
else
|
||||
return Get32BE(buf);
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
* Abstract base class for reformatting a graphics file into a
|
||||
* device-independent bitmap..
|
||||
*/
|
||||
class ReformatGraphics: public Reformat {
|
||||
public:
|
||||
ReformatGraphics() {
|
||||
InitPalette();
|
||||
}
|
||||
|
||||
protected:
|
||||
void SetResultBuffer(ReformatOutput* pOutput, MyDIBitmap* pDib);
|
||||
|
||||
/*
|
||||
* Color palette to use for color conversions. We store it here
|
||||
* so it can be configured to suit the user's tastes.
|
||||
*/
|
||||
enum { kPaletteBlack, kPaletteRed, kPaletteDarkBlue,
|
||||
kPalettePurple, kPaletteDarkGreen, kPaletteDarkGrey,
|
||||
kPaletteMediumBlue, kPaletteLightBlue, kPaletteBrown,
|
||||
kPaletteOrange, kPaletteLightGrey, kPalettePink,
|
||||
kPaletteGreen, kPaletteYellow, kPaletteAqua,
|
||||
kPaletteWhite, kPaletteSize };
|
||||
RGBQUAD fPalette[kPaletteSize];
|
||||
|
||||
int UnpackBytes(unsigned char* dst, const unsigned char* src,
|
||||
long dstRem, long srcLen);
|
||||
void UnPackBits(const unsigned char** pSrcBuf, long* pSrcLen,
|
||||
unsigned char** pOutPtr, long dstLen, unsigned char xorVal);
|
||||
|
||||
private:
|
||||
void InitPalette();
|
||||
};
|
||||
|
||||
/*
|
||||
* Abstract base class for reformatting a file into readable text.
|
||||
*
|
||||
* Includes an expanding buffer that can be appended to, and a set of RTF
|
||||
* primitives for adding structure.
|
||||
*/
|
||||
class ReformatText : public Reformat {
|
||||
public:
|
||||
typedef enum ParagraphJustify {
|
||||
kJustifyLeft,
|
||||
kJustifyRight,
|
||||
kJustifyCenter,
|
||||
kJustifyFull,
|
||||
} ParagraphJustify;
|
||||
|
||||
ReformatText(void) {
|
||||
fUseRTF = true;
|
||||
fLeftMargin = fRightMargin = 0;
|
||||
fPointSize = fPreMultPointSize = 8;
|
||||
fGSFontSizeMult = 1.0;
|
||||
fJustified = kJustifyLeft;
|
||||
fBoldEnabled = fItalicEnabled = fUnderlineEnabled =
|
||||
fSuperscriptEnabled = fSubscriptEnabled = false;
|
||||
fTextColor = kColorNone;
|
||||
};
|
||||
virtual ~ReformatText(void) {}
|
||||
|
||||
/*
|
||||
* The numeric values are determined by the RTF header that we output.
|
||||
* If the header in RTFBegin() changes, update these values.
|
||||
*/
|
||||
typedef enum RTFFont {
|
||||
// basic fonts (one monospace, one proportional, Courier New default)
|
||||
kFontCourierNew = 0,
|
||||
kFontTimesRoman = 1,
|
||||
kFontArial = 2,
|
||||
kFontSymbol = 3,
|
||||
} RTFFont;
|
||||
typedef enum {
|
||||
kColorNone = 0,
|
||||
// full colors (RGB 0 or 255)
|
||||
kColorBlack = 1,
|
||||
kColorBlue = 2,
|
||||
kColorCyan = 3,
|
||||
kColorGreen = 4, // a little bright for white bkgnd
|
||||
kColorPink = 5,
|
||||
kColorRed = 6,
|
||||
kColorYellow = 7,
|
||||
kColorWhite = 8,
|
||||
// mixed colors
|
||||
kColorMediumBlue = 9,
|
||||
kColorMediumAqua = 10,
|
||||
kColorMediumGreen = 11,
|
||||
kColorMagena = 12,
|
||||
kColorMediumRed = 13,
|
||||
kColorOlive = 14,
|
||||
kColorMediumGrey = 15,
|
||||
kColorLightGrey = 16,
|
||||
kColorDarkGrey = 17,
|
||||
kColorOrange = 18,
|
||||
} TextColor;
|
||||
|
||||
/* Apple IIgs families */
|
||||
typedef enum GSFontFamily {
|
||||
// standard fonts, defined in toolbox ref
|
||||
kGSFontNewYork = 0x0002,
|
||||
kGSFontGeneva = 0x0003, // sans-sarif, like Arial
|
||||
kGSFontMonaco = 0x0004, // monospace
|
||||
kGSFontVenice = 0x0005, // script font
|
||||
kGSFontLondon = 0x0006,
|
||||
kGSFontAthens = 0x0007,
|
||||
kGSFontSanFran = 0x0008,
|
||||
kGSFontToronto = 0x0009,
|
||||
kGSFontCairo = 0x000b,
|
||||
kGSFontLosAngeles = 0x000c,
|
||||
kGSFontTimes = 0x0014, // sarif, equal to Times New Roman
|
||||
kGSFontHelvetica = 0x0015, // sans-sarif, equal to Arial
|
||||
kGSFontCourier = 0x0016, // monospace, sarif, Courier
|
||||
kGSFontSymbol = 0x0017,
|
||||
kGSFontTaliesin = 0x0018,
|
||||
// I had these installed, by apps or by Pointless
|
||||
kGSFontStarfleet = 0x078d,
|
||||
kGSFontWestern = 0x088e,
|
||||
kGSFontGenoa = 0x0bcb,
|
||||
kGSFontClassical = 0x2baa,
|
||||
kGSFontChicago = 0x3fff,
|
||||
kGSFontGenesys = 0x7530,
|
||||
kGSFontPCMonospace = 0x7fdc, // monospace, sans-sarif
|
||||
kGSFontAppleM = 0x7f58, // looks like classic Apple II font
|
||||
kGSFontUnknown1 = 0x9c50, // found in French AWGS doc "CONVSEC"
|
||||
kGSFontUnknown2 = 0x9c54, // found in French AWGS doc "CONVSEC"
|
||||
// ROM font
|
||||
kGSFontShaston = 0xfffe, // rounded sans-sarif
|
||||
} GSFontFamily;
|
||||
|
||||
/* QuickDraw II font styles; this is a bit mask */
|
||||
typedef enum QDFontStyle {
|
||||
kQDStyleBold = 0x01,
|
||||
kQDStyleItalic = 0x02,
|
||||
kQDStyleUnderline = 0x04,
|
||||
kQDStyleOutline = 0x08,
|
||||
kQDStyleShadow = 0x10,
|
||||
kQDStyleReserved = 0x20,
|
||||
kQDStyleSuperscript = 0x40, // not in QDII -- AWGS only
|
||||
kQDStyleSubscript = 0x80, // not in QDII -- AWGS only
|
||||
} QDFontStyle;
|
||||
|
||||
/* flags for RTFBegin */
|
||||
enum {
|
||||
kRTFFlagColorTable = 1, // include color table
|
||||
};
|
||||
|
||||
protected:
|
||||
void RTFBegin(int flags = 0);
|
||||
void RTFEnd(void);
|
||||
void RTFSetPara(void);
|
||||
void RTFNewPara(void);
|
||||
void RTFPageBreak(void);
|
||||
void RTFTab(void);
|
||||
void RTFBoldOn(void);
|
||||
void RTFBoldOff(void);
|
||||
void RTFItalicOn(void);
|
||||
void RTFItalicOff(void);
|
||||
void RTFUnderlineOn(void);
|
||||
void RTFUnderlineOff(void);
|
||||
void RTFParaLeft(void);
|
||||
void RTFParaRight(void);
|
||||
void RTFParaCenter(void);
|
||||
void RTFParaJustify(void);
|
||||
void RTFLeftMargin(int margin);
|
||||
void RTFRightMargin(int margin);
|
||||
//void RTFSetMargins(void);
|
||||
void RTFSubscriptOn(void);
|
||||
void RTFSubscriptOff(void);
|
||||
void RTFSuperscriptOn(void);
|
||||
void RTFSuperscriptOff(void);
|
||||
void RTFSetColor(TextColor color);
|
||||
void RTFSetFont(RTFFont font);
|
||||
void RTFSetFontSize(int points);
|
||||
void RTFSetGSFont(unsigned short family);
|
||||
void RTFSetGSFontSize(int points);
|
||||
void RTFSetGSFontStyle(unsigned char qdStyle);
|
||||
// void RTFProportionalOn(void);
|
||||
// void RTFProportionalOff(void);
|
||||
|
||||
void ConvertEOL(const unsigned char* srcBuf, long srcLen,
|
||||
bool stripHiBits);
|
||||
void BufHexDump(const unsigned char* srcBuf, long srcLen);
|
||||
void SetResultBuffer(ReformatOutput* pOutput, bool multiFont = false);
|
||||
|
||||
ExpandBuffer fExpBuf;
|
||||
bool fUseRTF;
|
||||
|
||||
// return a low-ASCII character so we can read high-ASCII files
|
||||
inline char PrintableChar(unsigned char ch) {
|
||||
if (ch < 0x20)
|
||||
return '.';
|
||||
else if (ch < 0x7f)
|
||||
return ch;
|
||||
else if (ch < 0xa0 || ch == 0xff) // 0xff becomes 0x7f
|
||||
return '.';
|
||||
else
|
||||
return ch & 0x7f;
|
||||
}
|
||||
// output an RTF-escaped char (do we want to trap Ctrl-Z?)
|
||||
// (only use this if we're in RTF mode)
|
||||
inline void RTFPrintChar(unsigned char ch) {
|
||||
ch = PrintableChar(ch);
|
||||
RTFPrintExtChar(ch);
|
||||
}
|
||||
// output an RTF-escaped char, allowing high ASCII
|
||||
// (only use this if we're in RTF mode)
|
||||
inline void RTFPrintExtChar(unsigned char ch) {
|
||||
if (ch == '\\')
|
||||
fExpBuf.Printf("\\\\");
|
||||
else if (ch == '{')
|
||||
fExpBuf.Printf("\\{");
|
||||
else if (ch == '}')
|
||||
fExpBuf.Printf("\\}");
|
||||
else
|
||||
fExpBuf.Printf("%c", ch);
|
||||
}
|
||||
// output a char, doubling up double quotes (for .CSV)
|
||||
inline void BufPrintQChar(unsigned char ch) {
|
||||
if (ch == '"')
|
||||
fExpBuf.Printf("\"\"");
|
||||
else
|
||||
fExpBuf.Printf("%c", ch);
|
||||
}
|
||||
|
||||
// convert IIgs documents
|
||||
unsigned char ConvertGSChar(unsigned char ch) {
|
||||
if (ch < 128)
|
||||
return ch;
|
||||
else
|
||||
return kGSCharConv[ch-128];
|
||||
}
|
||||
void CheckGSCharConv(void);
|
||||
|
||||
private:
|
||||
int CreateWorkBuf(void);
|
||||
enum { kRTFUnitsPerInch = 1440 }; // TWIPS
|
||||
|
||||
static const unsigned char kGSCharConv[];
|
||||
|
||||
int fLeftMargin, fRightMargin; // for documents, in 1/10th inch
|
||||
int fPointSize;
|
||||
int fPreMultPointSize;
|
||||
float fGSFontSizeMult;
|
||||
bool fBoldEnabled;
|
||||
bool fItalicEnabled;
|
||||
bool fUnderlineEnabled;
|
||||
bool fSuperscriptEnabled;
|
||||
bool fSubscriptEnabled;
|
||||
ParagraphJustify fJustified;
|
||||
TextColor fTextColor;
|
||||
};
|
||||
|
||||
#endif /*__LR_REFORMAT_BASE__*/
|
||||
/*
|
||||
* CiderPress
|
||||
* Copyright (C) 2007, 2008 by faddenSoft, LLC. All Rights Reserved.
|
||||
* See the file LICENSE for distribution terms.
|
||||
*/
|
||||
/*
|
||||
* Reformatter base classes. The main app does not need this header file.
|
||||
*
|
||||
* Every converter turns the source into text or graphics. Currently it's
|
||||
* not possible to convert something into a mix of both. We could change
|
||||
* that, but we'd have to figure out what that means when extracting a file
|
||||
* (i.e. figure out the RTF embedded bitmap format).
|
||||
*/
|
||||
#ifndef __LR_REFORMAT_BASE__
|
||||
#define __LR_REFORMAT_BASE__
|
||||
|
||||
#include "Reformat.h"
|
||||
|
||||
#define BufPrintf fExpBuf.Printf
|
||||
|
||||
|
||||
/*
|
||||
* Abstract base class for reformatting a file into readable text.
|
||||
*
|
||||
* The transmuted version is written on top of the original, or is allocated
|
||||
* in new[]ed storage and replaces the original (which is delete[]d).
|
||||
*/
|
||||
class Reformat {
|
||||
public:
|
||||
Reformat(void) {}
|
||||
virtual ~Reformat(void) {}
|
||||
|
||||
enum {
|
||||
kTypePCD = 0x02,
|
||||
kTypePTX = 0x03,
|
||||
kTypeTXT = 0x04,
|
||||
kTypeBIN = 0x06,
|
||||
kTypeFOT = 0x08,
|
||||
kTypeBA3 = 0x09,
|
||||
kTypeDIR = 0x0f,
|
||||
kTypeADB = 0x19,
|
||||
kTypeAWP = 0x1a,
|
||||
kTypeASP = 0x1b,
|
||||
kType8OB = 0x2b,
|
||||
kTypeP8C = 0x2e,
|
||||
kTypeGWP = 0x50,
|
||||
kTypeOBJ = 0xb1,
|
||||
kTypeLIB = 0xb2,
|
||||
kTypeFST = 0xbd,
|
||||
kTypePNT = 0xc0,
|
||||
kTypePIC = 0xc1,
|
||||
kTypeCMD = 0xf0,
|
||||
kTypeDOS_B = 0xf4, // alternate 'B'
|
||||
kTypeOS = 0xf9,
|
||||
kTypeINT = 0xfa,
|
||||
kTypeBAS = 0xfc,
|
||||
kTypeSYS = 0xff,
|
||||
};
|
||||
|
||||
/* test applicability of all file parts */
|
||||
virtual void Examine(ReformatHolder* pHolder) = 0;
|
||||
|
||||
/* reformat appropriately; returns 0 on success, -1 on error */
|
||||
virtual int Process(const ReformatHolder* pHolder,
|
||||
ReformatHolder::ReformatID id, ReformatHolder::ReformatPart part,
|
||||
ReformatOutput* pOutput) = 0;
|
||||
|
||||
// grab the next 8 bits
|
||||
static inline unsigned char Read8(const unsigned char** pBuf, long* pLength) {
|
||||
if (*pLength > 0) {
|
||||
(*pLength)--;
|
||||
return *(*pBuf)++;
|
||||
} else {
|
||||
// ought to throw an exception here
|
||||
ASSERT(false);
|
||||
return (unsigned char) -1;
|
||||
}
|
||||
}
|
||||
// grab a 16-bit little-endian value
|
||||
static inline unsigned short Read16(const unsigned char** pBuf, long* pLength) {
|
||||
unsigned short val;
|
||||
if (*pLength >= 2) {
|
||||
val = *(*pBuf)++;
|
||||
val |= *(*pBuf)++ << 8;
|
||||
*pLength -= 2;
|
||||
} else {
|
||||
// ought to throw an exception here
|
||||
ASSERT(false);
|
||||
val = (unsigned short) -1;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
// grab a 16-bit little-endian value
|
||||
static inline unsigned long Read32(const unsigned char** pBuf, long* pLength) {
|
||||
unsigned long val;
|
||||
if (*pLength >= 4) {
|
||||
val = *(*pBuf)++;
|
||||
val |= *(*pBuf)++ << 8;
|
||||
val |= *(*pBuf)++ << 16;
|
||||
val |= *(*pBuf)++ << 24;
|
||||
*pLength -= 4;
|
||||
} else {
|
||||
// ought to throw an exception here
|
||||
ASSERT(false);
|
||||
val = (unsigned long) -1;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
static inline unsigned short Get16LE(const unsigned char* buf) {
|
||||
return *buf | *(buf+1) << 8;
|
||||
}
|
||||
static inline unsigned long Get32LE(const unsigned char* buf) {
|
||||
return *buf | *(buf+1) << 8 | *(buf+2) << 16 | *(buf+3) << 24;
|
||||
}
|
||||
static inline unsigned short Get16BE(const unsigned char* buf) {
|
||||
return *buf << 8 | *(buf+1);
|
||||
}
|
||||
static inline unsigned long Get32BE(const unsigned char* buf) {
|
||||
return *buf << 24 | *(buf+1) << 16 | *(buf+2) << 8 | *(buf+3);
|
||||
}
|
||||
static inline unsigned short Get16(const unsigned char* buf, bool littleEndian) {
|
||||
if (littleEndian)
|
||||
return Get16LE(buf);
|
||||
else
|
||||
return Get16BE(buf);
|
||||
}
|
||||
static inline unsigned long Get32(const unsigned char* buf, bool littleEndian) {
|
||||
if (littleEndian)
|
||||
return Get32LE(buf);
|
||||
else
|
||||
return Get32BE(buf);
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
* Abstract base class for reformatting a graphics file into a
|
||||
* device-independent bitmap..
|
||||
*/
|
||||
class ReformatGraphics: public Reformat {
|
||||
public:
|
||||
ReformatGraphics() {
|
||||
InitPalette();
|
||||
}
|
||||
|
||||
protected:
|
||||
void SetResultBuffer(ReformatOutput* pOutput, MyDIBitmap* pDib);
|
||||
|
||||
/*
|
||||
* Color palette to use for color conversions. We store it here
|
||||
* so it can be configured to suit the user's tastes.
|
||||
*/
|
||||
enum { kPaletteBlack, kPaletteRed, kPaletteDarkBlue,
|
||||
kPalettePurple, kPaletteDarkGreen, kPaletteDarkGrey,
|
||||
kPaletteMediumBlue, kPaletteLightBlue, kPaletteBrown,
|
||||
kPaletteOrange, kPaletteLightGrey, kPalettePink,
|
||||
kPaletteGreen, kPaletteYellow, kPaletteAqua,
|
||||
kPaletteWhite, kPaletteSize };
|
||||
RGBQUAD fPalette[kPaletteSize];
|
||||
|
||||
int UnpackBytes(unsigned char* dst, const unsigned char* src,
|
||||
long dstRem, long srcLen);
|
||||
void UnPackBits(const unsigned char** pSrcBuf, long* pSrcLen,
|
||||
unsigned char** pOutPtr, long dstLen, unsigned char xorVal);
|
||||
|
||||
private:
|
||||
void InitPalette();
|
||||
};
|
||||
|
||||
/*
|
||||
* Abstract base class for reformatting a file into readable text.
|
||||
*
|
||||
* Includes an expanding buffer that can be appended to, and a set of RTF
|
||||
* primitives for adding structure.
|
||||
*/
|
||||
class ReformatText : public Reformat {
|
||||
public:
|
||||
typedef enum ParagraphJustify {
|
||||
kJustifyLeft,
|
||||
kJustifyRight,
|
||||
kJustifyCenter,
|
||||
kJustifyFull,
|
||||
} ParagraphJustify;
|
||||
|
||||
ReformatText(void) {
|
||||
fUseRTF = true;
|
||||
fLeftMargin = fRightMargin = 0;
|
||||
fPointSize = fPreMultPointSize = 8;
|
||||
fGSFontSizeMult = 1.0;
|
||||
fJustified = kJustifyLeft;
|
||||
fBoldEnabled = fItalicEnabled = fUnderlineEnabled =
|
||||
fSuperscriptEnabled = fSubscriptEnabled = false;
|
||||
fTextColor = kColorNone;
|
||||
};
|
||||
virtual ~ReformatText(void) {}
|
||||
|
||||
/*
|
||||
* The numeric values are determined by the RTF header that we output.
|
||||
* If the header in RTFBegin() changes, update these values.
|
||||
*/
|
||||
typedef enum RTFFont {
|
||||
// basic fonts (one monospace, one proportional, Courier New default)
|
||||
kFontCourierNew = 0,
|
||||
kFontTimesRoman = 1,
|
||||
kFontArial = 2,
|
||||
kFontSymbol = 3,
|
||||
} RTFFont;
|
||||
typedef enum {
|
||||
kColorNone = 0,
|
||||
// full colors (RGB 0 or 255)
|
||||
kColorBlack = 1,
|
||||
kColorBlue = 2,
|
||||
kColorCyan = 3,
|
||||
kColorGreen = 4, // a little bright for white bkgnd
|
||||
kColorPink = 5,
|
||||
kColorRed = 6,
|
||||
kColorYellow = 7,
|
||||
kColorWhite = 8,
|
||||
// mixed colors
|
||||
kColorMediumBlue = 9,
|
||||
kColorMediumAqua = 10,
|
||||
kColorMediumGreen = 11,
|
||||
kColorMagena = 12,
|
||||
kColorMediumRed = 13,
|
||||
kColorOlive = 14,
|
||||
kColorMediumGrey = 15,
|
||||
kColorLightGrey = 16,
|
||||
kColorDarkGrey = 17,
|
||||
kColorOrange = 18,
|
||||
} TextColor;
|
||||
|
||||
/* Apple IIgs families */
|
||||
typedef enum GSFontFamily {
|
||||
// standard fonts, defined in toolbox ref
|
||||
kGSFontNewYork = 0x0002,
|
||||
kGSFontGeneva = 0x0003, // sans-sarif, like Arial
|
||||
kGSFontMonaco = 0x0004, // monospace
|
||||
kGSFontVenice = 0x0005, // script font
|
||||
kGSFontLondon = 0x0006,
|
||||
kGSFontAthens = 0x0007,
|
||||
kGSFontSanFran = 0x0008,
|
||||
kGSFontToronto = 0x0009,
|
||||
kGSFontCairo = 0x000b,
|
||||
kGSFontLosAngeles = 0x000c,
|
||||
kGSFontTimes = 0x0014, // sarif, equal to Times New Roman
|
||||
kGSFontHelvetica = 0x0015, // sans-sarif, equal to Arial
|
||||
kGSFontCourier = 0x0016, // monospace, sarif, Courier
|
||||
kGSFontSymbol = 0x0017,
|
||||
kGSFontTaliesin = 0x0018,
|
||||
// I had these installed, by apps or by Pointless
|
||||
kGSFontStarfleet = 0x078d,
|
||||
kGSFontWestern = 0x088e,
|
||||
kGSFontGenoa = 0x0bcb,
|
||||
kGSFontClassical = 0x2baa,
|
||||
kGSFontChicago = 0x3fff,
|
||||
kGSFontGenesys = 0x7530,
|
||||
kGSFontPCMonospace = 0x7fdc, // monospace, sans-sarif
|
||||
kGSFontAppleM = 0x7f58, // looks like classic Apple II font
|
||||
kGSFontUnknown1 = 0x9c50, // found in French AWGS doc "CONVSEC"
|
||||
kGSFontUnknown2 = 0x9c54, // found in French AWGS doc "CONVSEC"
|
||||
// ROM font
|
||||
kGSFontShaston = 0xfffe, // rounded sans-sarif
|
||||
} GSFontFamily;
|
||||
|
||||
/* QuickDraw II font styles; this is a bit mask */
|
||||
typedef enum QDFontStyle {
|
||||
kQDStyleBold = 0x01,
|
||||
kQDStyleItalic = 0x02,
|
||||
kQDStyleUnderline = 0x04,
|
||||
kQDStyleOutline = 0x08,
|
||||
kQDStyleShadow = 0x10,
|
||||
kQDStyleReserved = 0x20,
|
||||
kQDStyleSuperscript = 0x40, // not in QDII -- AWGS only
|
||||
kQDStyleSubscript = 0x80, // not in QDII -- AWGS only
|
||||
} QDFontStyle;
|
||||
|
||||
/* flags for RTFBegin */
|
||||
enum {
|
||||
kRTFFlagColorTable = 1, // include color table
|
||||
};
|
||||
|
||||
protected:
|
||||
void RTFBegin(int flags = 0);
|
||||
void RTFEnd(void);
|
||||
void RTFSetPara(void);
|
||||
void RTFNewPara(void);
|
||||
void RTFPageBreak(void);
|
||||
void RTFTab(void);
|
||||
void RTFBoldOn(void);
|
||||
void RTFBoldOff(void);
|
||||
void RTFItalicOn(void);
|
||||
void RTFItalicOff(void);
|
||||
void RTFUnderlineOn(void);
|
||||
void RTFUnderlineOff(void);
|
||||
void RTFParaLeft(void);
|
||||
void RTFParaRight(void);
|
||||
void RTFParaCenter(void);
|
||||
void RTFParaJustify(void);
|
||||
void RTFLeftMargin(int margin);
|
||||
void RTFRightMargin(int margin);
|
||||
//void RTFSetMargins(void);
|
||||
void RTFSubscriptOn(void);
|
||||
void RTFSubscriptOff(void);
|
||||
void RTFSuperscriptOn(void);
|
||||
void RTFSuperscriptOff(void);
|
||||
void RTFSetColor(TextColor color);
|
||||
void RTFSetFont(RTFFont font);
|
||||
void RTFSetFontSize(int points);
|
||||
void RTFSetGSFont(unsigned short family);
|
||||
void RTFSetGSFontSize(int points);
|
||||
void RTFSetGSFontStyle(unsigned char qdStyle);
|
||||
// void RTFProportionalOn(void);
|
||||
// void RTFProportionalOff(void);
|
||||
|
||||
void ConvertEOL(const unsigned char* srcBuf, long srcLen,
|
||||
bool stripHiBits);
|
||||
void BufHexDump(const unsigned char* srcBuf, long srcLen);
|
||||
void SetResultBuffer(ReformatOutput* pOutput, bool multiFont = false);
|
||||
|
||||
ExpandBuffer fExpBuf;
|
||||
bool fUseRTF;
|
||||
|
||||
// return a low-ASCII character so we can read high-ASCII files
|
||||
inline char PrintableChar(unsigned char ch) {
|
||||
if (ch < 0x20)
|
||||
return '.';
|
||||
else if (ch < 0x7f)
|
||||
return ch;
|
||||
else if (ch < 0xa0 || ch == 0xff) // 0xff becomes 0x7f
|
||||
return '.';
|
||||
else
|
||||
return ch & 0x7f;
|
||||
}
|
||||
// output an RTF-escaped char (do we want to trap Ctrl-Z?)
|
||||
// (only use this if we're in RTF mode)
|
||||
inline void RTFPrintChar(unsigned char ch) {
|
||||
ch = PrintableChar(ch);
|
||||
RTFPrintExtChar(ch);
|
||||
}
|
||||
// output an RTF-escaped char, allowing high ASCII
|
||||
// (only use this if we're in RTF mode)
|
||||
inline void RTFPrintExtChar(unsigned char ch) {
|
||||
if (ch == '\\')
|
||||
fExpBuf.Printf("\\\\");
|
||||
else if (ch == '{')
|
||||
fExpBuf.Printf("\\{");
|
||||
else if (ch == '}')
|
||||
fExpBuf.Printf("\\}");
|
||||
else
|
||||
fExpBuf.Printf("%c", ch);
|
||||
}
|
||||
// output a char, doubling up double quotes (for .CSV)
|
||||
inline void BufPrintQChar(unsigned char ch) {
|
||||
if (ch == '"')
|
||||
fExpBuf.Printf("\"\"");
|
||||
else
|
||||
fExpBuf.Printf("%c", ch);
|
||||
}
|
||||
|
||||
// convert IIgs documents
|
||||
unsigned char ConvertGSChar(unsigned char ch) {
|
||||
if (ch < 128)
|
||||
return ch;
|
||||
else
|
||||
return kGSCharConv[ch-128];
|
||||
}
|
||||
void CheckGSCharConv(void);
|
||||
|
||||
private:
|
||||
int CreateWorkBuf(void);
|
||||
enum { kRTFUnitsPerInch = 1440 }; // TWIPS
|
||||
|
||||
static const unsigned char kGSCharConv[];
|
||||
|
||||
int fLeftMargin, fRightMargin; // for documents, in 1/10th inch
|
||||
int fPointSize;
|
||||
int fPreMultPointSize;
|
||||
float fGSFontSizeMult;
|
||||
bool fBoldEnabled;
|
||||
bool fItalicEnabled;
|
||||
bool fUnderlineEnabled;
|
||||
bool fSuperscriptEnabled;
|
||||
bool fSubscriptEnabled;
|
||||
ParagraphJustify fJustified;
|
||||
TextColor fTextColor;
|
||||
};
|
||||
|
||||
#endif /*__LR_REFORMAT_BASE__*/
|
||||
|
Loading…
Reference in New Issue
Block a user