mirror of
https://github.com/AppleWin/AppleWin.git
synced 2026-04-20 15:17:50 +00:00
New save-state (.aws) v2:
. Format now extensible for supporting new hardware types in the future . Include missing items like Apple2Type, CyclesThisVideoFrame (#255) Continue to support loading of old v1 format. Added card save/load for: . Mouse (#260) . HDD (#260) . Printer Extended card support for: . SSC Other: . Added save-state v1 struct size checks . Create SaveState_Structs_v2.h and split out common into SaveState_Structs_common.h . Refactor HardDisk.cpp to use imagehandle; and consolidate with Disk.cpp . Fix Disk/HD_GetFullPathName() which wasn't always returning full pathname . Consolidate common GetImageTitle() and move into DiskImage.cpp
This commit is contained in:
+108
-3
@@ -36,18 +36,19 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "..\resource\resource.h"
|
||||
|
||||
static DWORD inactivity = 0;
|
||||
static int g_iPrinterIdleLimit = 10;
|
||||
static FILE* file = NULL;
|
||||
DWORD const PRINTDRVR_SIZE = APPLE_SLOT_SIZE;
|
||||
TCHAR filepath[MAX_PATH * 2];
|
||||
#define DEFAULT_PRINT_FILENAME "Printer.txt"
|
||||
static char g_szPrintFilename[MAX_PATH] = {0};
|
||||
bool g_bDumpToPrinter = false;
|
||||
bool g_bConvertEncoding = true;
|
||||
bool g_bFilterUnprintable = true;
|
||||
bool g_bPrinterAppend = false;
|
||||
int g_iPrinterIdleLimit = 10;
|
||||
bool g_bEnableDumpToRealPrinter = false;
|
||||
|
||||
static UINT g_uSlot = 0;
|
||||
|
||||
//===========================================================================
|
||||
|
||||
static BYTE __stdcall PrintStatus(WORD, WORD, BYTE, BYTE, ULONG);
|
||||
@@ -79,6 +80,8 @@ VOID PrintLoadRom(LPBYTE pCxRomPeripheral, const UINT uSlot)
|
||||
//
|
||||
|
||||
RegisterIoHandler(uSlot, PrintStatus, PrintTransmit, NULL, NULL, NULL, NULL);
|
||||
|
||||
g_uSlot = uSlot;
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
@@ -245,8 +248,110 @@ unsigned int Printer_GetIdleLimit()
|
||||
return g_iPrinterIdleLimit;
|
||||
}
|
||||
|
||||
//unsigned int
|
||||
void Printer_SetIdleLimit(unsigned int Duration)
|
||||
{
|
||||
g_iPrinterIdleLimit = Duration;
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
||||
struct PrinterCard_Unit
|
||||
{
|
||||
DWORD Inactivity;
|
||||
UINT PrinterIdleLimit;
|
||||
char PrintFilename[MAX_PATH];
|
||||
BOOL IsFileOpen;
|
||||
BOOL DumpToPrinter;
|
||||
BOOL ConvertEncoding;
|
||||
BOOL FilterUnprintable;
|
||||
BOOL PrinterAppend;
|
||||
BOOL EnableDumpToRealPrinter;
|
||||
};
|
||||
|
||||
struct SS_CARD_PRINTER
|
||||
{
|
||||
SS_CARD_HDR Hdr;
|
||||
PrinterCard_Unit Unit;
|
||||
};
|
||||
|
||||
void Printer_GetSnapshot(const HANDLE hFile)
|
||||
{
|
||||
SS_CARD_PRINTER CardPrinter;
|
||||
|
||||
SS_CARD_PRINTER* const pSS = &CardPrinter;
|
||||
|
||||
pSS->Hdr.UnitHdr.hdr.v2.Length = sizeof(SS_CARD_PRINTER);
|
||||
pSS->Hdr.UnitHdr.hdr.v2.Type = UT_Card;
|
||||
pSS->Hdr.UnitHdr.hdr.v2.Version = 1;
|
||||
|
||||
pSS->Hdr.Slot = g_uSlot;
|
||||
pSS->Hdr.Type = CT_GenericPrinter;
|
||||
|
||||
CardPrinter.Unit.Inactivity = inactivity;
|
||||
CardPrinter.Unit.PrinterIdleLimit = g_iPrinterIdleLimit;
|
||||
memcpy(CardPrinter.Unit.PrintFilename, g_szPrintFilename, sizeof(CardPrinter.Unit.PrintFilename));
|
||||
CardPrinter.Unit.IsFileOpen = (file != NULL);
|
||||
CardPrinter.Unit.DumpToPrinter = g_bDumpToPrinter;
|
||||
CardPrinter.Unit.ConvertEncoding = g_bConvertEncoding;
|
||||
CardPrinter.Unit.FilterUnprintable = g_bFilterUnprintable;
|
||||
CardPrinter.Unit.PrinterAppend = g_bPrinterAppend;
|
||||
CardPrinter.Unit.EnableDumpToRealPrinter = g_bEnableDumpToRealPrinter;
|
||||
|
||||
//
|
||||
|
||||
DWORD dwBytesWritten;
|
||||
BOOL bRes = WriteFile( hFile,
|
||||
&CardPrinter,
|
||||
CardPrinter.Hdr.UnitHdr.hdr.v2.Length,
|
||||
&dwBytesWritten,
|
||||
NULL);
|
||||
|
||||
if(!bRes || (dwBytesWritten != CardPrinter.Hdr.UnitHdr.hdr.v2.Length))
|
||||
{
|
||||
//dwError = GetLastError();
|
||||
throw std::string("Save error: Printer Card");
|
||||
}
|
||||
}
|
||||
|
||||
void Printer_SetSnapshot(const HANDLE hFile)
|
||||
{
|
||||
SS_CARD_PRINTER CardPrinter;
|
||||
|
||||
DWORD dwBytesRead;
|
||||
BOOL bRes = ReadFile( hFile,
|
||||
&CardPrinter,
|
||||
sizeof(CardPrinter),
|
||||
&dwBytesRead,
|
||||
NULL);
|
||||
|
||||
if (dwBytesRead != sizeof(CardPrinter))
|
||||
throw std::string("Card: file corrupt");
|
||||
|
||||
if (CardPrinter.Hdr.Slot != 1) // fixme
|
||||
throw std::string("Card: wrong slot");
|
||||
|
||||
if (CardPrinter.Hdr.UnitHdr.hdr.v2.Version > 1)
|
||||
throw std::string("Card: wrong version");
|
||||
|
||||
if (CardPrinter.Hdr.UnitHdr.hdr.v2.Length != sizeof(SS_CARD_PRINTER))
|
||||
throw std::string("Card: unit size mismatch");
|
||||
|
||||
ClosePrint(); // Close current print session (and close file handle)
|
||||
|
||||
inactivity = CardPrinter.Unit.Inactivity;
|
||||
g_iPrinterIdleLimit = CardPrinter.Unit.PrinterIdleLimit;
|
||||
memcpy(g_szPrintFilename, CardPrinter.Unit.PrintFilename, sizeof(g_szPrintFilename));
|
||||
if (CardPrinter.Unit.IsFileOpen)
|
||||
{
|
||||
g_bPrinterAppend = true; // Re-open print-file in append mode
|
||||
BOOL bRes = CheckPrint();
|
||||
if (!bRes)
|
||||
throw std::string("Printer Card: Unable to resume printing to file");
|
||||
}
|
||||
|
||||
g_bDumpToPrinter = CardPrinter.Unit.DumpToPrinter == TRUE;
|
||||
g_bConvertEncoding = CardPrinter.Unit.ConvertEncoding == TRUE;
|
||||
g_bFilterUnprintable = CardPrinter.Unit.FilterUnprintable == TRUE;
|
||||
g_bPrinterAppend = CardPrinter.Unit.PrinterAppend == TRUE;
|
||||
g_bEnableDumpToRealPrinter = CardPrinter.Unit.EnableDumpToRealPrinter == TRUE;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user