diff --git a/AppleWin/help/cfg-advanced.html b/AppleWin/help/cfg-advanced.html
index 01abb88f..40533482 100644
--- a/AppleWin/help/cfg-advanced.html
+++ b/AppleWin/help/cfg-advanced.html
@@ -1,50 +1,68 @@
-
-
-
-
-
- Advanced Settings
-
-
-
-
-
-
-
-Advanced Settings
-
-
-Save State File Name:
-
-This is the file name to use for save-state files. The default
-directory is the same as where your AppleWin.exe program is stored.
-
-Save State on Exit:
-
-Checking this box will automatically save the current state of the
-emulator upon exit. The state will be saved to the file
-specified above (SaveState.aws by default).
-
-Save State:
-
-Press this button to save the current state of the emulator to the file
-specified. You can also save the system state during
-emulation by pressing the F11 key.
-
-Load State:
-
-Press this button to load the specified state file into
-the emulator. You can also load the system state during
-emulation by pressing the F12 key.
-
-Clone:
-
-If you have specified Computer as 'Clone' on the main Configuration page, then this drop-down menu can be used to specify the clone type.
-NB. Pravets 82 and 8A are Bulgarian Apple II clones.
-
-
The Freeze's non-autostart F8 rom:
-If you have specified Computer as 'Apple ][' or 'Apple ][+' on the main Configuration page, then you will be able to enable this setting.
-The Freeze F8 rom is a hacker's rom that replaces the normal 2K rom at $F800. Here's the original release note
-
-
-
+
+
+Advanced Settings
+
+Advanced Settings
+
+Save State File Name:
+This is the file name to use for save-state files. The default
+directory is the same as where your AppleWin.exe program is stored.
+Save State on Exit:
+Checking this box will automatically save the current state of the
+emulator upon exit. The state will be saved to the file
+specified above (SaveState.aws by default).
+Save State:
+Press this button to save the current state of the emulator to the file
+specified. You can also save the system state during
+emulation by pressing the F11 key.
+Load State:
+Press this button to load the specified state file into
+the emulator. You can also load the system state during
+emulation by pressing the F12 key.
+Clone:
+If you have specified Computer as 'Clone' on the main Configuration
+page, then this drop-down menu can be used to specify the clone type.
+NB. Pravets 82 and 8A are Bulgarian Apple II clones.
+
+Printer settings (Printer is
+emulated at slot 1)
+Printer dump filename:
+Data sent to the printer is stored in a text file. Use
+this setting to select its location.
+
+Dump to printer:
+Use
+with caution! Enables dumping to a real printer. If
+disabled, the
+printout is stored only in printer.txt file in the AppleWin folder.
+This probably works properly (not tested) when using a printer
+compatible with the printer selected in the Apple II applications. In
+modern printers trying to print images will result in printing tens of
+pages with nonsense.
+
+Encoding conversion for clones:
+Characters are encoded from the character set used in
+the real hardware to ASCII. For Pravets 8 this converts MIK to ASCII.
+Enabling this could cause problems when printing images.
+Filter unprintable characters:
+Some characters represent commands for the printer and
+shall not be printed. When saving them to the printer dump file they
+may appear as some strange symbols. I may want to disable filtering
+when dumping to printer.
Append to printfile:
+When disabled previous print file is replaced (unless it has a
+different name) by the newly created print file. Otherwise newly
+printed data is added to the existing print file. I should better
+disable appending
+when dumping to printer.
Terminate printing after idle:
+Whan printing is started a printer file is created and it is
+closed either after the selected by this widget time expires, or when
+the emulator is reset. This setting is emulation speed dependend.
+
+The Freeze's non-autostart F8 rom:
+If you have specified Computer as 'Apple ][' or 'Apple ][+' on the main
+Configuration page, then you will be able to enable this setting.
+The Freeze F8 rom is a hacker's rom that replaces the normal 2K rom at
+$F800. Here's the
+original release note
+
+
\ No newline at end of file
diff --git a/AppleWin/help/img/advanced.png b/AppleWin/help/img/advanced.png
index fd2069f2..788e34e9 100644
Binary files a/AppleWin/help/img/advanced.png and b/AppleWin/help/img/advanced.png differ
diff --git a/AppleWin/resource/Applewin.rc b/AppleWin/resource/Applewin.rc
index 8dd092eb..a1906490 100644
--- a/AppleWin/resource/Applewin.rc
+++ b/AppleWin/resource/Applewin.rc
@@ -60,18 +60,22 @@ DRIVE1_BUTTON BITMAP "DRIVE1.BMP"
DRIVE2_BUTTON BITMAP "DRIVE2.BMP"
SETUP_BUTTON BITMAP "SETUP.BMP"
CHARSET40 BITMAP "CHARSET4.BMP"
-CHARSET8C BITMAP "CHARSET8C.BMP"
-CHARSET82 BITMAP "CHARSET82.BMP"
DISKOFF_BITMAP BITMAP "DISKOFF.BMP"
DISKREAD_BITMAP BITMAP "DISKREAD.BMP"
DISKWRITE_BITMAP BITMAP "DISKWRIT.BMP"
DISKPROT_BITMAP BITMAP "DISKPROT.BMP"
CAPSOFF_BITMAP BITMAP "CAPSOFF.BMP"
CAPSON_BITMAP BITMAP "CAPSON.BMP"
+//Pravets8 appendices
LATOFF_BITMAP BITMAP "LATOFF.BMP"
LATON_BITMAP BITMAP "LATON.BMP"
CAPSOFF_P8_BITMAP BITMAP "CAPSOFF_P8.BMP"
CAPSON_P8_BITMAP BITMAP "CAPSON_P8.BMP"
+CHARSET82 BITMAP "CHARSET82.BMP"
+//CHARSET8M BITMAP "CHARSET8M.BMP" //Still the exact charset of Pravets 8M is unknown
+CHARSET8M BITMAP "CHARSET8C.BMP"
+CHARSET8C BITMAP "CHARSET8C.BMP"
+///////////////////////////////////////////////////////////////////////////
HELP_BUTTON BITMAP "HELP.BMP"
DRIVESWAP_BUTTON BITMAP "DRIVESWAP.BMP"
IDB_APPLEWIN BITMAP "Applewin.bmp"
@@ -198,19 +202,32 @@ STYLE DS_SETFONT | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_CAPTION | WS_SYSMENU
CAPTION "Advanced"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
- LTEXT "&Clone:",IDC_STATIC,5,165,40,8
- COMBOBOX IDC_CLONETYPE,45,163,100,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+
+ LTEXT "Save State file name:",IDC_STATIC,5,2,74,8
+ GROUPBOX "Save State Control",IDC_STATIC,5,27,200,63
+ CONTROL "Save State on exit",IDC_SAVESTATE_ON_EXIT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,38,74,10
+ PUSHBUTTON "Save State",IDC_SAVESTATE,16,50,85,15
+ PUSHBUTTON "Load State",IDC_LOADSTATE,16,67,85,15
+ EDITTEXT IDC_SAVESTATE_FILENAME,5,23,143,12,ES_AUTOHSCROLL | ES_READONLY
+ LTEXT "(F11 during emulation)",IDC_STATIC,110,53,90,8
+ LTEXT "(F12 during emulation)",IDC_STATIC,110,70,90,8
+ PUSHBUTTON "Browse...",IDC_SAVESTATE_BROWSE,154,12,50,14
+ LTEXT "Printer dump filename:",IDC_STATIC,5,98,74,8
+ PUSHBUTTON "Browse...",IDC_DUMP_FILENAME_BROWSE,154,107,50,14
+ EDITTEXT IDC_DUMP_FILENAME,5,108,143,12,ES_AUTOHSCROLL
+ CONTROL "Dump to printer (use with caution)",IDC_DUMPTOPRINTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,123,180,10
+ CONTROL "Encoding conversion for clones",IDC_PRINTER_CONVERT_ENCODING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,133,180,10
+ CONTROL "Filter unprintable characters",IDC_PRINTER_FILTER_UNPRINTABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,143,180,10
+ CONTROL "Append to print file",IDC_PRINTER_APPEND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,153,180,10
+
+ LTEXT "Teminate printing after idle (in seconds):",IDC_STATIC,3,167,160,8
+ CTEXT "10",IDC_STATIC,155,160,24,20,SS_CENTERIMAGE
+ CONTROL "Spin1",IDC_SPIN_PRINTER_IDLE,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNLEFT | UDS_AUTOBUDDY,161,164,10,14
+
+ LTEXT "&Clone:",IDC_STATIC,5,185,40,8
+ COMBOBOX IDC_CLONETYPE,45,185,100,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "The Freeze's non-autostart F8 rom (Apple ][ or ][+ only)",IDC_THE_FREEZES_F8_ROM_FW,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,206,182,10
- LTEXT "Save State file name:",IDC_STATIC,5,12,74,8
- GROUPBOX "Save State Control",IDC_STATIC,5,57,200,73
- CONTROL "Save State on exit",IDC_SAVESTATE_ON_EXIT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,68,74,10
- PUSHBUTTON "Save State",IDC_SAVESTATE,16,85,85,15
- PUSHBUTTON "Load State",IDC_LOADSTATE,16,107,85,15
- EDITTEXT IDC_SAVESTATE_FILENAME,5,23,143,12,ES_AUTOHSCROLL | ES_READONLY
- LTEXT "(F11 during emulation)",IDC_STATIC,110,88,74,8
- LTEXT "(F12 during emulation)",IDC_STATIC,110,110,90,8
- PUSHBUTTON "Browse...",IDC_SAVESTATE_BROWSE,154,22,50,14
END
@@ -251,7 +268,7 @@ BEGIN
VALUE "FileDescription", "Apple //e Emulator for Windows"
VALUE "FileVersion", "1, 15, 0, 4"
VALUE "InternalName", "APPLEWIN"
- VALUE "LegalCopyright", "© 1994-2008 Michael O'Brien, Oliver Schmidt, Tom Charlesworth, Michael Pohoreski, Nick Westgate, Linards Ticmanis"
+ VALUE "LegalCopyright", " 1994-2008 Michael O'Brien, Oliver Schmidt, Tom Charlesworth, Michael Pohoreski, Nick Westgate, Linards Ticmanis"
VALUE "OriginalFilename", "APPLEWIN.EXE"
VALUE "ProductName", "Apple //e Emulator"
VALUE "ProductVersion", "1, 15, 0, 4"
@@ -294,13 +311,14 @@ IDR_THUNDERCLOCKPLUS_FW FIRMWARE "ThunderClockPlus.rom"
// ROM
//
-IDR_APPLE2_ROM ROM "Apple2.rom"
-IDR_APPLE2_PLUS_ROM ROM "Apple2_Plus.rom"
-IDR_APPLE2E_ROM ROM "Apple2e.rom"
-IDR_APPLE2E_ENHANCED_ROM ROM "Apple2e_Enhanced.rom"
-IDR_PRAVETS_82_ROM ROM "Pravets82.rom"
-IDR_PRAVETS_8C_ROM ROM "Pravets8C.rom"
-IDR_FREEZES_F8_ROM ROM "FREEZES_NON-AUTOSTART_F8_ROM.rom"
+IDR_APPLE2_ROM ROM "Apple2.rom"
+IDR_APPLE2_PLUS_ROM ROM "Apple2_Plus.rom"
+IDR_APPLE2E_ROM ROM "Apple2e.rom"
+IDR_APPLE2E_ENHANCED_ROM ROM "Apple2e_Enhanced.rom"
+IDR_PRAVETS_82_ROM ROM "Pravets82.rom"
+IDR_PRAVETS_8M_ROM ROM "Pravets8M.rom"
+IDR_PRAVETS_8C_ROM ROM "Pravets8C.rom"
+IDR_FREEZES_F8_ROM ROM "FREEZES_NON-AUTOSTART_F8_ROM.rom"
/////////////////////////////////////////////////////////////////////////////
//
diff --git a/AppleWin/resource/CHARSET82.bmp b/AppleWin/resource/CHARSET82.bmp
index 36847980..0396611b 100644
Binary files a/AppleWin/resource/CHARSET82.bmp and b/AppleWin/resource/CHARSET82.bmp differ
diff --git a/AppleWin/resource/CHARSET8M.bmp b/AppleWin/resource/CHARSET8M.bmp
new file mode 100644
index 00000000..53efbb33
Binary files /dev/null and b/AppleWin/resource/CHARSET8M.bmp differ
diff --git a/AppleWin/resource/PRAVETS8M.ROM b/AppleWin/resource/PRAVETS8M.ROM
new file mode 100644
index 00000000..e8e057c9
Binary files /dev/null and b/AppleWin/resource/PRAVETS8M.ROM differ
diff --git a/AppleWin/resource/resource.h b/AppleWin/resource/resource.h
index 9cae4537..02767d11 100644
--- a/AppleWin/resource/resource.h
+++ b/AppleWin/resource/resource.h
@@ -42,7 +42,8 @@
#define IDR_THUNDERCLOCKPLUS_FW 137
#define IDR_FREEZES_F8_ROM 138
#define IDR_PRAVETS_82_ROM 139
-#define IDR_PRAVETS_8C_ROM 140
+#define IDR_PRAVETS_8M_ROM 140
+#define IDR_PRAVETS_8C_ROM 142
#define IDC_KEYB_BUFFER_ENABLE 1005
#define IDC_SAVESTATE 1006
#define IDC_SAVESTATE_ON_EXIT 1007
@@ -86,13 +87,21 @@
#define IDC_CIDERPRESS_BROWSE 1049
#define IDC_CIDERPRESS_FILENAME 1050
#define IDC_Z80_IN_SLOT5 1051
+#define IDC_DUMPTOPRINTER 1052
+#define IDC_DUMP_FILENAME 1053
+#define IDC_DUMP_FILENAME_BROWSE 1054
+#define IDC_PRINTER_CONVERT_ENCODING 1055
+#define IDC_PRINTER_FILTER_UNPRINTABLE 1056
+#define IDC_PRINTER_APPEND 1057
+#define IDC_SPIN_PRINTER_IDLE 1058
+
#define IDM_EXIT 40001
#define IDM_HELP 40002
#define IDM_ABOUT 40003
#define ID_DISKMENU_EJECT 40004
#define ID_DISKMENU_WRITEPROTECTION_ON 40005
#define ID_DISKMENU_WRITEPROTECTION_OFF 40006
-#define ID_DISKMENU_SENDTO_CIDERPRESS 40007
+#define ID_DISKMENU_SENDTO_CIDERPRESS 40007
// Next default values for new objects
//
diff --git a/AppleWin/source/Applewin.cpp b/AppleWin/source/Applewin.cpp
index 1d62b4fd..cabb6a94 100644
--- a/AppleWin/source/Applewin.cpp
+++ b/AppleWin/source/Applewin.cpp
@@ -387,7 +387,8 @@ void LoadConfiguration ()
switch (g_uCloneType)
{
case 0: g_Apple2Type = A2TYPE_PRAVETS82; break;
- case 1: g_Apple2Type = A2TYPE_PRAVETS8A; break;
+ case 1: g_Apple2Type = A2TYPE_PRAVETS8M; break;
+ case 2: g_Apple2Type = A2TYPE_PRAVETS8A; break;
default: g_Apple2Type = A2TYPE_APPLE2EEHANCED; break;
}
}
@@ -417,6 +418,7 @@ void LoadConfiguration ()
case A2TYPE_APPLE2EEHANCED: g_nCharsetType = 0; break;
case A2TYPE_PRAVETS82: g_nCharsetType = 1; break;
case A2TYPE_PRAVETS8A: g_nCharsetType = 2; break;
+ case A2TYPE_PRAVETS8M: g_nCharsetType = 3; break; //This charset has a very small difference with the PRAVETS82 one an probably has some misplaced characters. Still the Pravets82 charset is used, because settiong charset to 3 results in some problems.
}
@@ -455,6 +457,20 @@ void LoadConfiguration ()
if(LOAD(TEXT(REGVALUE_SAVE_STATE_ON_EXIT), &dwTmp))
g_bSaveStateOnExit = dwTmp ? true : false;
+
+ if(LOAD(TEXT(REGVALUE_DUMP_TO_PRINTER), &dwTmp))
+ g_bDumpToPrinter = dwTmp ? true : false;
+
+ if(LOAD(TEXT(REGVALUE_CONVERT_ENCODING), &dwTmp))
+ g_bConvertEncoding = dwTmp ? true : false;
+
+ if(LOAD(TEXT(REGVALUE_FILTER_UNPRINTABLE), &dwTmp))
+ g_bFilterUnprintable = dwTmp ? true : false;
+
+ if(LOAD(TEXT(REGVALUE_PRINTER_APPEND), &dwTmp))
+ g_bPrinterAppend = dwTmp ? true : false;
+
+
if(LOAD(TEXT(REGVALUE_HDD_ENABLED), &dwTmp))
HD_SetEnabled(dwTmp ? true : false);
@@ -496,10 +512,13 @@ void LoadConfiguration ()
//
char szFilename[MAX_PATH] = {0};
-
RegLoadString(TEXT(REG_CONFIG),TEXT(REGVALUE_SAVESTATE_FILENAME),1,szFilename,sizeof(szFilename));
Snapshot_SetFilename(szFilename); // If not in Registry than default will be used
+ szFilename[0] = 0;
+ RegLoadString(TEXT(REG_CONFIG),TEXT(REGVALUE_PRINTER_FILENAME),1,szFilename,sizeof(szFilename));
+ Printer_SetFilename(szFilename); // If not in Registry than default will be used
+
// Current/Starting Dir is the "root" of where the user keeps his disk images
RegLoadString(TEXT(REG_PREFS),TEXT(REGVALUE_PREF_START_DIR),1,g_sCurrentDir,MAX_PATH);
SetCurrentImageDir();
@@ -507,6 +526,10 @@ void LoadConfiguration ()
Disk_LoadLastDiskImage(0);
Disk_LoadLastDiskImage(1);
+ dwTmp = 10;
+ LOAD(TEXT(REGVALUE_PRINTER_IDLE_LIMIT), &dwTmp);
+ Printer_SetIdleLimit(dwTmp);
+
char szUthernetInt[MAX_PATH] = {0};
RegLoadString(TEXT(REG_CONFIG),TEXT("Uthernet Interface"),1,szUthernetInt,MAX_PATH);
update_tfe_interface(szUthernetInt,NULL);
diff --git a/AppleWin/source/Common.h b/AppleWin/source/Common.h
index 2ec3da1a..cea6812c 100644
--- a/AppleWin/source/Common.h
+++ b/AppleWin/source/Common.h
@@ -60,6 +60,7 @@ enum AppMode_e
#define TITLE_APPLE_2E TEXT("Apple //e Emulator")
#define TITLE_APPLE_2E_ENHANCED TEXT("Enhanced Apple //e Emulator")
#define TITLE_PRAVETS_82 TEXT("Pravets 82 Emulator")
+#define TITLE_PRAVETS_8M TEXT("Pravets 8M Emulator")
#define TITLE_PRAVETS_8A TEXT("Pravets 8A Emulator")
#define TITLE_PAUSED TEXT(" Paused ")
@@ -89,6 +90,12 @@ enum AppMode_e
#define REGVALUE_CLONETYPE "Clone Type"
#define REGVALUE_CIDERPRESSLOC "CiderPress Location"
#define REGVALUE_Z80_IN_SLOT5 "Z80 in slot 5"
+#define REGVALUE_DUMP_TO_PRINTER "Dump to printer"
+#define REGVALUE_CONVERT_ENCODING "Convert printer encoding for clones"
+#define REGVALUE_FILTER_UNPRINTABLE "Filter unprintable characters"
+#define REGVALUE_PRINTER_FILENAME "Printer Filename"
+#define REGVALUE_PRINTER_APPEND "Append to printer file"
+#define REGVALUE_PRINTER_IDLE_LIMIT "Printer idle limit"
// Preferences
#define REG_PREFS "Preferences"
@@ -134,6 +141,7 @@ enum eApple2Type {
// Clones start here:
A2TYPE_CLONE=APPLECLONE_MASK,
A2TYPE_PRAVETS82=APPLECLONE_MASK|APPLE2E_MASK,
+ A2TYPE_PRAVETS8M,
A2TYPE_PRAVETS8A,
A2TYPE_MAX
};
diff --git a/AppleWin/source/Frame.cpp b/AppleWin/source/Frame.cpp
index 25c3ea74..ee092a00 100644
--- a/AppleWin/source/Frame.cpp
+++ b/AppleWin/source/Frame.cpp
@@ -56,7 +56,7 @@ static HBITMAP capsbitmap[2];
//Pravets8 only
static HBITMAP capsbitmapP8[2];
static HBITMAP latbitmap[2];
-static HBITMAP charsetbitmap [3];
+//static HBITMAP charsetbitmap [4]; //The idea was to add a charset indicator on the front panel, but it was given up. All charsetbitmap occurences must be REMOVED!
//===========================
static HBITMAP diskbitmap[ NUM_DISK_STATUS ];
@@ -176,6 +176,7 @@ switch (g_Apple2Type)
case A2TYPE_APPLE2E: buttonbitmap[BTN_RUN ] =(HBITMAP)LOADBUTTONBITMAP(TEXT("RUN_BUTTON")); break;
case A2TYPE_APPLE2EEHANCED: buttonbitmap[BTN_RUN ] =(HBITMAP)LOADBUTTONBITMAP(TEXT("RUN_BUTTON")); break;
case A2TYPE_PRAVETS82: buttonbitmap[BTN_RUN ] = (HBITMAP)LOADBUTTONBITMAP(TEXT("RUNP_BUTTON")); break;
+ case A2TYPE_PRAVETS8M: buttonbitmap[BTN_RUN ] = (HBITMAP)LOADBUTTONBITMAP(TEXT("RUNP_BUTTON")); break;
case A2TYPE_PRAVETS8A: buttonbitmap[BTN_RUN ] = (HBITMAP)LOADBUTTONBITMAP(TEXT("RUNP_BUTTON")); break;
}
@@ -193,9 +194,11 @@ switch (g_Apple2Type)
capsbitmapP8[1] = (HBITMAP)LOADBUTTONBITMAP(TEXT("CAPSON_P8_BITMAP"));
latbitmap[0] = (HBITMAP)LOADBUTTONBITMAP(TEXT("LATOFF_BITMAP"));
latbitmap[1] = (HBITMAP)LOADBUTTONBITMAP(TEXT("LATON_BITMAP"));
- charsetbitmap[0] = (HBITMAP)LOADBUTTONBITMAP(TEXT("CHARSET_APPLE_BITMAP"));
+ /*charsetbitmap[0] = (HBITMAP)LOADBUTTONBITMAP(TEXT("CHARSET_APPLE_BITMAP"));
charsetbitmap[1] = (HBITMAP)LOADBUTTONBITMAP(TEXT("CHARSET_82_BITMAP"));
charsetbitmap[2] = (HBITMAP)LOADBUTTONBITMAP(TEXT("CHARSET_8A_BITMAP"));
+ charsetbitmap[3] = (HBITMAP)LOADBUTTONBITMAP(TEXT("CHARSET_8M_BITMAP"));
+ */
//===========================
diskbitmap[ DISK_STATUS_OFF ] = (HBITMAP)LOADBUTTONBITMAP(TEXT("DISKOFF_BITMAP"));
diskbitmap[ DISK_STATUS_READ ] = (HBITMAP)LOADBUTTONBITMAP(TEXT("DISKREAD_BITMAP"));
@@ -486,6 +489,7 @@ static void DrawStatusArea (HDC passdc, int drawflags)
case A2TYPE_APPLE2E: DrawBitmapRect(dc,x+7,y+19,&rect,capsbitmap[bCaps != 0]); break;
case A2TYPE_APPLE2EEHANCED: DrawBitmapRect(dc,x+7,y+19,&rect,capsbitmap[bCaps != 0]); break;
case A2TYPE_PRAVETS82: DrawBitmapRect(dc,x+15,y+19,&rect,latbitmap[bCaps != 0]); break;
+ case A2TYPE_PRAVETS8M: DrawBitmapRect(dc,x+15,y+19,&rect,latbitmap[bCaps != 0]); break;
case A2TYPE_PRAVETS8A: DrawBitmapRect(dc,x+2,y+19,&rect,latbitmap[bCaps != 0]); break;
}
if (g_Apple2Type == A2TYPE_PRAVETS8A) //Toggles Pravets 8A/C Caps lock LED
@@ -513,6 +517,7 @@ static void DrawStatusArea (HDC passdc, int drawflags)
case A2TYPE_APPLE2E: _tcscpy(title, TITLE_APPLE_2E); break;
case A2TYPE_APPLE2EEHANCED: _tcscpy(title, TITLE_APPLE_2E_ENHANCED); break;
case A2TYPE_PRAVETS82: _tcscpy(title, TITLE_PRAVETS_82); break;
+ case A2TYPE_PRAVETS8M: _tcscpy(title, TITLE_PRAVETS_8M); break;
case A2TYPE_PRAVETS8A: _tcscpy(title, TITLE_PRAVETS_8A); break;
}
@@ -739,7 +744,7 @@ LRESULT CALLBACK FrameWndProc (
}
else if (wparam == VK_F9)
{
- if (GetKeyState(VK_CONTROL) < 0)
+ if (GetKeyState(VK_CONTROL) < 0) //CTRL+F9
{
g_nCharsetType++; // Cycle through available charsets (Ctrl + F9)
if (g_nCharsetType >= 3)
@@ -1537,6 +1542,7 @@ void FrameCreateWindow ()
case A2TYPE_APPLE2E: g_pAppTitle = TITLE_APPLE_2E; break;
case A2TYPE_APPLE2EEHANCED: g_pAppTitle = TITLE_APPLE_2E_ENHANCED; break;
case A2TYPE_PRAVETS82: g_pAppTitle = TITLE_PRAVETS_82; break;
+ case A2TYPE_PRAVETS8M: g_pAppTitle = TITLE_PRAVETS_8M; break;
case A2TYPE_PRAVETS8A: g_pAppTitle = TITLE_PRAVETS_8A; break;
}
diff --git a/AppleWin/source/Keyboard.cpp b/AppleWin/source/Keyboard.cpp
index 878dc7eb..40c32979 100644
--- a/AppleWin/source/Keyboard.cpp
+++ b/AppleWin/source/Keyboard.cpp
@@ -209,19 +209,34 @@ void KeybQueueKeypress (int key, BOOL bASCII)
if (key == '^')
keycode = '~';
- if (g_bCapsLock == false) //i.e. cyrillic letters
+ if (g_bCapsLock == false) //cyrillic letters
{
if (key == '`') keycode = '^';
if (key == 92) keycode = '@'; // \ to @
if (key == 124) keycode = 92;
}
- else //(g_bCapsLock == true) //i.e. latin letters
+ else //(g_bCapsLock == true) //latin letters
{
if (key == 91) keycode = 123;
if (key == 93) keycode = 125;
if (key == 124) keycode = 92;
}
}
+ if (g_Apple2Type == A2TYPE_PRAVETS8M) //Pravets 8M charset is still uncertain
+ {
+ if (g_bCapsLock == false) //cyrillic letters
+ {
+ if (key == '[') keycode = '{';
+ if (key == ']') keycode = '}';
+ if (key == '`') keycode = '~'; //96= key `~
+ if (key == 92) keycode = 96;
+ }
+ else //latin letters
+ {
+ if (key == '`')
+ keycode = '^'; //96= key `~
+ }
+ }
//Remap some keys for Pravets8A/C, which has a different charset for Pravtes82/M, whose keys MUST NOT be remapped.
if (g_Apple2Type == A2TYPE_PRAVETS8A) //&& (g_bCapsLock == false))
{
diff --git a/AppleWin/source/Memory.cpp b/AppleWin/source/Memory.cpp
index 9adefdb2..0bcd6f07 100644
--- a/AppleWin/source/Memory.cpp
+++ b/AppleWin/source/Memory.cpp
@@ -963,6 +963,7 @@ void MemInitialize()
case A2TYPE_APPLE2E: hResInfo = FindResource(NULL, MAKEINTRESOURCE(IDR_APPLE2E_ROM), "ROM"); ROM_SIZE = Apple2eRomSize; break;
case A2TYPE_APPLE2EEHANCED: hResInfo = FindResource(NULL, MAKEINTRESOURCE(IDR_APPLE2E_ENHANCED_ROM), "ROM"); ROM_SIZE = Apple2eRomSize; break;
case A2TYPE_PRAVETS82: hResInfo = FindResource(NULL, MAKEINTRESOURCE(IDR_PRAVETS_82_ROM), "ROM"); ROM_SIZE = Apple2RomSize; break;
+ case A2TYPE_PRAVETS8M: hResInfo = FindResource(NULL, MAKEINTRESOURCE(IDR_PRAVETS_8M_ROM), "ROM"); ROM_SIZE = Apple2RomSize; break;
case A2TYPE_PRAVETS8A: hResInfo = FindResource(NULL, MAKEINTRESOURCE(IDR_PRAVETS_8C_ROM), "ROM"); ROM_SIZE = Apple2eRomSize; break;
}
@@ -975,7 +976,8 @@ void MemInitialize()
case A2TYPE_APPLE2PLUS: _tcscpy(sRomFileName, TEXT("APPLE2_PLUS.ROM")); break;
case A2TYPE_APPLE2E: _tcscpy(sRomFileName, TEXT("APPLE2E.ROM")); break;
case A2TYPE_APPLE2EEHANCED: _tcscpy(sRomFileName, TEXT("APPLE2E_ENHANCED.ROM")); break;
- case A2TYPE_PRAVETS82: _tcscpy(sRomFileName, TEXT("PRAVETS82.ROM")); break; //Rom to be changed. Currently an Apple 2E Rom is used, because of the lack of a genuine Pravets82 one.
+ case A2TYPE_PRAVETS82: _tcscpy(sRomFileName, TEXT("PRAVETS82.ROM")); break;
+ case A2TYPE_PRAVETS8M: _tcscpy(sRomFileName, TEXT("PRAVETS8M.ROM")); break;
case A2TYPE_PRAVETS8A: _tcscpy(sRomFileName, TEXT("PRAVETS8C.ROM")); break;
}
diff --git a/AppleWin/source/ParallelPrinter.cpp b/AppleWin/source/ParallelPrinter.cpp
index 41515950..2bcc80d9 100644
--- a/AppleWin/source/ParallelPrinter.cpp
+++ b/AppleWin/source/ParallelPrinter.cpp
@@ -29,16 +29,28 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include "StdAfx.h"
#pragma hdrstop
#include "..\resource\resource.h"
+#include
static DWORD inactivity = 0;
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;
//===========================================================================
static BYTE __stdcall PrintStatus(WORD, WORD, BYTE, BYTE, ULONG);
static BYTE __stdcall PrintTransmit(WORD, WORD, BYTE, BYTE value, ULONG);
+
+
+
VOID PrintLoadRom(LPBYTE pCxRomPeripheral, const UINT uSlot)
{
HRSRC hResInfo = FindResource(NULL, MAKEINTRESOURCE(IDR_PRINTDRVR_FW), "FIRMWARE");
@@ -70,10 +82,14 @@ static BOOL CheckPrint()
inactivity = 0;
if (file == NULL)
{
- TCHAR filepath[MAX_PATH * 2];
- _tcsncpy(filepath, g_sProgramDir, MAX_PATH);
- _tcsncat(filepath, _T("Printer.txt"), MAX_PATH);
- file = fopen(filepath, "wb");
+ //TCHAR filepath[MAX_PATH * 2];
+ //_tcsncpy(filepath, g_sProgramDir, MAX_PATH);
+ //_tcsncat(filepath, _T("Printer.txt"), MAX_PATH);
+ //file = fopen(filepath, "wb");
+ if (g_bPrinterAppend )
+ file = fopen(Printer_GetFilename(), "ab");
+ else
+ file = fopen(Printer_GetFilename(), "wb");
}
return (file != NULL);
}
@@ -85,6 +101,13 @@ static void ClosePrint()
{
fclose(file);
file = NULL;
+ string ExtendedFileName = "copy \"";
+ ExtendedFileName.append (Printer_GetFilename());
+ ExtendedFileName.append ("\" prn");
+ //if (g_bDumpToPrinter) ShellExecute(NULL, "print", Printer_GetFilename(), NULL, NULL, 0); //Print through Notepad
+ if (g_bDumpToPrinter)
+ system (ExtendedFileName.c_str ()); //Print through console. This is supposed to be the better way, because it shall print images (with older printers only).
+
}
inactivity = 0;
}
@@ -102,9 +125,10 @@ void PrintUpdate(DWORD totalcycles)
{
return;
}
- if ((inactivity += totalcycles) > (10 * 1000 * 1000)) // around 10 seconds
+// if ((inactivity += totalcycles) > (Printer_GetIdleLimit () * 1000 * 1000)) //This line seems to give a very big deviation
+ if ((inactivity += totalcycles) > (Printer_GetIdleLimit () * 710000))
{
- // inactive, so close the file (next print will overwrite it)
+ // inactive, so close the file (next print will overwrite or append to it, according to the settings made)
ClosePrint();
}
}
@@ -125,13 +149,99 @@ static BYTE __stdcall PrintStatus(WORD, WORD, BYTE, BYTE, ULONG)
//===========================================================================
static BYTE __stdcall PrintTransmit(WORD, WORD, BYTE, BYTE value, ULONG)
{
+ char Lat8A[]= "abwgdevzijklmnoprstufhc~{}yx`q|]";
+ char Lat82[]= "abwgdevzijklmnoprstufhc^[]yx@q{}~`";
+ char Kir82[]= "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÜÞß[]^@";
+ char Kir8ACapital[]= "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÜÞßÝ";
+ char Kir8ALowerCase[]= "àáâãäåæçèéêëìíîïðñòóôõö÷øùúüþÿý";
+ bool Pres = false;
if (!CheckPrint())
{
return 0;
}
- char c = value & 0x7F;
+
+ char c = NULL;
+ if ((g_Apple2Type == A2TYPE_PRAVETS8A) && g_bConvertEncoding) //This is print conversion for Pravets 8A/C. Print conversion for Pravets82/M is still to be done.
+ {
+ if ((value > 90) && (value < 128)) //This range shall be set more precisely
+ {
+ c = value;
+ int loop = 0;
+ while (loop < 31)
+ {
+ if (c== Lat8A[loop])
+ c= 0 + Kir8ALowerCase [loop] ;
+ loop++;
+ } //End loop
+ }//End if (value < 128)
+ else if ((value >64) && (value <91))
+ {
+ c = value + 32;
+ }
+ else
+ {
+ c = value & 0x7F;
+ int loop = 0;
+ while (loop < 31)
+ {
+ if (c== Lat8A[loop]) c= 0 + Kir8ACapital [loop];
+ loop++;
+ }
+ }
+ } //End if (g_Apple2Type == A2TYPE_PRAVETS8A)
+ else if (((g_Apple2Type == A2TYPE_PRAVETS82) || (g_Apple2Type == A2TYPE_PRAVETS8M)) && g_bConvertEncoding)
+ {
+ c = value & 0x7F;
+ int loop = 0;
+ while (loop < 34)
+ {
+ if (c == Lat82[loop])
+ c= Kir82 [loop];
+ loop++;
+ } //end while
+ }
+ else //Apple II
+ {
+ c = value & 0x7F;
+ }
+ if ((g_bFilterUnprintable == false) || (c>31) || (c==13) || (c==10) || (c<0)) //c<0 is needed for cyrillic characters
+ fwrite(&c, 1, 1, file); //break;
+
+
+ /*else
+ {
+ char c = value & 0x7F;
fwrite(&c, 1, 1, file);
- return 0;
+ }*/
+ return 0;
}
//===========================================================================
+
+char* Printer_GetFilename()
+{
+ return g_szPrintFilename;
+}
+
+void Printer_SetFilename(char* prtFilename)
+{
+ if(*prtFilename)
+ strcpy(g_szPrintFilename, (const char *) prtFilename);
+ else //No registry entry is available
+ {
+ _tcsncpy(g_szPrintFilename, g_sProgramDir, MAX_PATH);
+ _tcsncat(g_szPrintFilename, _T(DEFAULT_PRINT_FILENAME), MAX_PATH);
+ RegSaveString(TEXT("Configuration"),REGVALUE_PRINTER_FILENAME,1,g_szPrintFilename);
+ }
+}
+
+unsigned int Printer_GetIdleLimit()
+{
+ return g_iPrinterIdleLimit;
+}
+
+//unsigned int
+void Printer_SetIdleLimit(unsigned int Duration)
+{
+ g_iPrinterIdleLimit = Duration;
+}
diff --git a/AppleWin/source/ParallelPrinter.h b/AppleWin/source/ParallelPrinter.h
index b4c57fd8..f1c2715d 100644
--- a/AppleWin/source/ParallelPrinter.h
+++ b/AppleWin/source/ParallelPrinter.h
@@ -1,6 +1,18 @@
#pragma once
-void PrintDestroy();
-void PrintLoadRom(LPBYTE pCxRomPeripheral, UINT uSlot);
-void PrintReset();
-void PrintUpdate(DWORD);
+void PrintDestroy();
+void PrintLoadRom(LPBYTE pCxRomPeripheral, UINT uSlot);
+void PrintReset();
+void PrintUpdate(DWORD);
+void Printer_SetFilename(char* pszFilename);
+char* Printer_GetFilename();
+void Printer_SetIdleLimit(unsigned int Duration);
+unsigned int Printer_GetIdleLimit();
+extern bool g_bDumpToPrinter;
+extern bool g_bConvertEncoding;
+extern bool g_bFilterUnprintable;
+extern bool g_bPrinterAppend;
+extern int g_iPrinterIdleLimit;
+extern bool g_bFilterUnprintable;
+extern bool g_bPrinterAppend;
+
diff --git a/AppleWin/source/PropertySheetPage.cpp b/AppleWin/source/PropertySheetPage.cpp
index bc0bfd52..0c6bd466 100644
--- a/AppleWin/source/PropertySheetPage.cpp
+++ b/AppleWin/source/PropertySheetPage.cpp
@@ -125,12 +125,14 @@ static UINT g_bEnableFreezeDlgButton = UNDEFINED;
enum {
CLONETYPE_PRAVETS82=0,
+ CLONETYPE_PRAVETS8M,
CLONETYPE_PRAVETS8A,
CLONETYPE_NUM
};
DWORD g_uCloneType = CLONETYPE_PRAVETS82 ;
static TCHAR g_CloneChoices[] = TEXT("Pravets 82\0") // Bulgarian
+ TEXT("Pravets 8M\0") // Bulgarian
TEXT("Pravets 8A\0"); // Bulgarian
@@ -247,7 +249,8 @@ static eApple2Type GetApple2Type(DWORD NewCompType, DWORD NewCloneType)
switch (NewCloneType)
{
case 0: return A2TYPE_PRAVETS82; break;
- case 1: return A2TYPE_PRAVETS8A; break;
+ case 1: return A2TYPE_PRAVETS8M; break;
+ case 2: return A2TYPE_PRAVETS8A; break;
}
default: return A2TYPE_APPLE2EEHANCED;
}
@@ -303,7 +306,7 @@ static void ConfigDlg_OK(HWND window, UINT afterclose)
if (NewApple2Type > A2TYPE_CLONE)
NewCloneType = NewApple2Type - A2TYPE_CLONE;
- if ((NewApple2Type == A2TYPE_PRAVETS82) || (NewApple2Type == A2TYPE_PRAVETS8A))
+ if ((NewApple2Type == A2TYPE_PRAVETS82) || (NewApple2Type == A2TYPE_PRAVETS8A) || (NewApple2Type == A2TYPE_PRAVETS8M))
SAVE(TEXT(REGVALUE_APPLE2_TYPE),A2TYPE_CLONE );
else
SAVE(TEXT(REGVALUE_APPLE2_TYPE),NewApple2Type );
@@ -414,7 +417,7 @@ static BOOL CALLBACK ConfigDlgProc (HWND window,
CheckRadioButton(window, IDC_AUTHENTIC_SPEED, IDC_CUSTOM_SPEED, IDC_CUSTOM_SPEED); // FirstButton, LastButton, CheckButton
break;
- case WM_INITDIALOG:
+ case WM_INITDIALOG: //Init general settings dialog
{
g_nLastPage = PG_CONFIG;
@@ -426,10 +429,11 @@ static BOOL CALLBACK ConfigDlgProc (HWND window,
case A2TYPE_APPLE2E: iApple2String = 2; break;
case A2TYPE_APPLE2EEHANCED: iApple2String = 3; break;
case A2TYPE_PRAVETS82: iApple2String = 4; break;
- case A2TYPE_PRAVETS8A: iApple2String = 5; break;
+ case A2TYPE_PRAVETS8M: iApple2String = 5; break;
+ case A2TYPE_PRAVETS8A: iApple2String = 6; break;
}
- if ((iApple2String == 4) || (iApple2String == 5))
+ if (iApple2String > 3)
FillComboBox(window,IDC_COMPUTER,computerchoices,4);
else
FillComboBox(window,IDC_COMPUTER,computerchoices,iApple2String);
@@ -675,7 +679,7 @@ static BOOL CALLBACK InputDlgProc (HWND window,
}
break;
- case WM_INITDIALOG:
+ case WM_INITDIALOG: //Init input settings dialog
{
g_nLastPage = PG_INPUT;
@@ -959,7 +963,7 @@ static BOOL CALLBACK DiskDlgProc (HWND window,
case IDC_CIDERPRESS_BROWSE:
{
- string CiderPressLoc = BrowseToCiderPress(window, TEXT("Select path to CiderPress"));
+ string CiderPressLoc = BrowseToFile(window, TEXT("Select path to CiderPress"), REGVALUE_CIDERPRESSLOC, TEXT("Applications (*.exe)\0*.exe\0") TEXT("All Files\0*.*\0") );
RegSaveString(TEXT("Configuration"),REGVALUE_CIDERPRESSLOC,1,CiderPressLoc.c_str());
SendDlgItemMessage(window, IDC_CIDERPRESS_FILENAME, WM_SETTEXT, 0, (LPARAM) CiderPressLoc.c_str());
}
@@ -967,7 +971,7 @@ static BOOL CALLBACK DiskDlgProc (HWND window,
}
break;
- case WM_INITDIALOG:
+ case WM_INITDIALOG: //Init disk settings dialog
{
g_nLastPage = PG_DISK;
@@ -1002,6 +1006,7 @@ static BOOL CALLBACK DiskDlgProc (HWND window,
//===========================================================================
static bool g_bSSNewFilename = false;
+static char g_szNewFilename[MAX_PATH];
static char g_szSSNewDirectory[MAX_PATH];
static char g_szSSNewFilename[MAX_PATH];
@@ -1014,7 +1019,7 @@ static void SaveStateUpdate()
RegSaveString(TEXT(REG_CONFIG),REGVALUE_SAVESTATE_FILENAME,1,Snapshot_GetFilename());
if(g_szSSNewDirectory[0])
- RegSaveString(TEXT(REG_PREFS),REGVALUE_PREF_START_DIR,1,g_szSSNewDirectory);
+ RegSaveString(TEXT("Preferences"),REGVALUE_PREF_START_DIR,1,g_szSSNewDirectory); RegSaveString(TEXT("Preferences"),REGVALUE_PREF_START_DIR,1,g_szSSNewDirectory);
}
}
@@ -1106,17 +1111,31 @@ static void AdvancedDlg_OK(HWND window, UINT afterclose)
szFilename[nLineLength] = 0x00;
SaveStateUpdate();
+ RegSaveString(TEXT("Configuration"),REGVALUE_PRINTER_FILENAME,1,Printer_GetFilename());
+// PrinterStateUpdate();
g_bSaveStateOnExit = IsDlgButtonChecked(window, IDC_SAVESTATE_ON_EXIT) ? true : false;
SAVE(TEXT(REGVALUE_SAVE_STATE_ON_EXIT), g_bSaveStateOnExit ? 1 : 0);
+ g_bDumpToPrinter = IsDlgButtonChecked(window, IDC_DUMPTOPRINTER ) ? true : false;
+ SAVE(TEXT(REGVALUE_DUMP_TO_PRINTER), g_bDumpToPrinter ? 1 : 0);
+ g_bConvertEncoding = IsDlgButtonChecked(window, IDC_PRINTER_CONVERT_ENCODING ) ? true : false;
+ SAVE(TEXT(REGVALUE_CONVERT_ENCODING), g_bConvertEncoding ? 1 : 0);
+ g_bFilterUnprintable = IsDlgButtonChecked(window, IDC_PRINTER_FILTER_UNPRINTABLE ) ? true : false;
+ SAVE(TEXT(REGVALUE_FILTER_UNPRINTABLE), g_bFilterUnprintable ? 1 : 0);
+
+ g_bPrinterAppend = IsDlgButtonChecked(window, IDC_PRINTER_APPEND) ? true : false;
+ SAVE(TEXT(REGVALUE_PRINTER_APPEND), g_bPrinterAppend ? 1 : 0);
//
DWORD NewCloneType = (DWORD)SendDlgItemMessage(window, IDC_CLONETYPE, CB_GETCURSEL, 0, 0);
SAVE(TEXT(REGVALUE_CLONETYPE), NewCloneType);
SAVE(TEXT(REGVALUE_THE_FREEZES_F8_ROM),g_uTheFreezesF8Rom); // NB. Can also be disabled on Config page (when Apple2Type changes)
+
+ Printer_SetIdleLimit((short)SendDlgItemMessage(window, IDC_SPIN_PRINTER_IDLE , UDM_GETPOS, 0, 0));
+ SAVE(TEXT(REGVALUE_PRINTER_IDLE_LIMIT),Printer_GetIdleLimit());
eApple2Type NewApple2Clone = GetApple2Type(4, NewCloneType);
@@ -1215,6 +1234,15 @@ static BOOL CALLBACK AdvancedDlgProc (HWND window,
if(SaveStateSelectImage(window, TEXT("Select Save State file"), true))
SendDlgItemMessage(window, IDC_SAVESTATE_FILENAME, WM_SETTEXT, 0, (LPARAM) g_szSSNewFilename);
break;
+ case IDC_DUMP_FILENAME_BROWSE:
+ {
+ char PrinterDumpLoc[MAX_PATH] = {0};
+ strcpy(PrinterDumpLoc, BrowseToFile (window, TEXT("Select printer dump file"), REGVALUE_PRINTER_FILENAME, TEXT("Text files (*.txt)\0*.txt\0") TEXT("All Files\0*.*\0")).c_str());
+ RegSaveString(TEXT("Configuration"),REGVALUE_PRINTER_FILENAME,1,PrinterDumpLoc);
+ SendDlgItemMessage(window, IDC_DUMP_FILENAME, WM_SETTEXT, 0, (LPARAM) PrinterDumpLoc);
+ Printer_SetFilename (PrinterDumpLoc);
+ }
+ break;
case IDC_SAVESTATE_ON_EXIT:
break;
case IDC_SAVESTATE:
@@ -1249,13 +1277,20 @@ static BOOL CALLBACK AdvancedDlgProc (HWND window,
}
break;
- case WM_INITDIALOG:
+ case WM_INITDIALOG: //Init advanced settings dialog
{
g_nLastPage = PG_ADVANCED;
SendDlgItemMessage(window,IDC_SAVESTATE_FILENAME,WM_SETTEXT,0,(LPARAM)Snapshot_GetFilename());
CheckDlgButton(window, IDC_SAVESTATE_ON_EXIT, g_bSaveStateOnExit ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(window, IDC_DUMPTOPRINTER, g_bDumpToPrinter ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(window, IDC_PRINTER_CONVERT_ENCODING, g_bConvertEncoding ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(window, IDC_PRINTER_FILTER_UNPRINTABLE, g_bFilterUnprintable ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(window, IDC_PRINTER_APPEND, g_bPrinterAppend ? BST_CHECKED : BST_UNCHECKED);
+ SendDlgItemMessage(window, IDC_SPIN_PRINTER_IDLE, UDM_SETRANGE, 0, MAKELONG(999,0));
+ SendDlgItemMessage(window, IDC_SPIN_PRINTER_IDLE, UDM_SETPOS, 0, MAKELONG(Printer_GetIdleLimit (),0));
+ SendDlgItemMessage(window,IDC_DUMP_FILENAME,WM_SETTEXT,0,(LPARAM)Printer_GetFilename());
FillComboBox(window, IDC_CLONETYPE, g_CloneChoices, g_uCloneType);
InitFreezeDlgButton(window);
@@ -1587,39 +1622,50 @@ bool PSP_SaveStateSelectImage(HWND hWindow, bool bSave)
//===========================================================================
-static string BrowseToCiderPress (HWND hWindow, TCHAR* pszTitle)
+string BrowseToFile(HWND hWindow, TCHAR* pszTitle, TCHAR* REGVALUE,TCHAR* FILEMASKS)
{
+ static char PathToFile[MAX_PATH] = {0}; //This is a really awkward way to prevent mixing CiderPress and SaveStated values (RAPCS), but it seem the quickest. Here is its Line 1.
+ strcpy(PathToFile, Snapshot_GetFilename()); //RAPCS, line 2.
TCHAR szDirectory[MAX_PATH] = TEXT("");
- TCHAR szCPFilename[MAX_PATH] = TEXT("");
- RegLoadString(TEXT("Configuration"), REGVALUE_CIDERPRESSLOC, 1, szCPFilename ,MAX_PATH);
- string PathName = szCPFilename;
+ TCHAR szFilename[MAX_PATH];
+ strcpy(szFilename, "");
+ RegLoadString(TEXT("Configuration"), REGVALUE, 1, szFilename ,MAX_PATH);
+ string PathName = szFilename;
OPENFILENAME ofn;
ZeroMemory(&ofn,sizeof(OPENFILENAME));
-
+
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hWindow;
ofn.hInstance = g_hInstance;
- ofn.lpstrFilter = TEXT("Applications (*.exe)\0*.exe\0")
- TEXT("All Files\0*.*\0");
- ofn.lpstrFile = szCPFilename;
+ ofn.lpstrFilter = FILEMASKS;
+ /*ofn.lpstrFilter = TEXT("Applications (*.exe)\0*.exe\0")
+ TEXT("Text files (*.txt)\0*.txt\0")
+ TEXT("All Files\0*.*\0");*/
+ ofn.lpstrFile = szFilename;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrInitialDir = szDirectory;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;
ofn.lpstrTitle = pszTitle;
-
+
int nRes = GetOpenFileName(&ofn);
if(nRes) //Okay is pressed
{
- SetCurrentImageDir(); // Reset, since GetOpenFileName() will've changed curr dir
- PathName = szCPFilename;
+ strcpy(g_szNewFilename, &szFilename[ofn.nFileOffset]);
+
+ szFilename[ofn.nFileOffset] = 0;
+ if (_tcsicmp(szDirectory, szFilename))
+ strcpy(g_szSSNewDirectory, szFilename);
+
+ PathName = szFilename;
+ PathName.append (g_szNewFilename);
}
else //Cancel is pressed.
{
- RegLoadString(TEXT("Configuration"), REGVALUE_CIDERPRESSLOC, 1, szCPFilename, MAX_PATH);
- PathName = szCPFilename;
+ RegLoadString(TEXT("Configuration"), REGVALUE, 1, szFilename,MAX_PATH);
+ PathName = szFilename;
}
-
+ strcpy(g_szNewFilename, PathToFile); //RAPCS, line 3 (last).
return PathName;
}
diff --git a/AppleWin/source/PropertySheetPage.h b/AppleWin/source/PropertySheetPage.h
index 27838f99..a7da7ce7 100644
--- a/AppleWin/source/PropertySheetPage.h
+++ b/AppleWin/source/PropertySheetPage.h
@@ -6,7 +6,7 @@ bool PSP_SaveStateSelectImage(HWND hWindow, bool bSave);
void ui_tfe_settings_dialog(HWND hwnd);
void * get_tfe_interface(void);
void get_tfe_enabled(int *tfe_enabled);
-string BrowseToCiderPress (HWND hWindow, TCHAR* pszTitle);
+string BrowseToFile(HWND hWindow, TCHAR* pszTitle, TCHAR* REGVALUE, TCHAR* FILEMASKS);
extern UINT g_uScrollLockToggle;
extern UINT g_uMouseInSlot4;
diff --git a/AppleWin/source/Video.cpp b/AppleWin/source/Video.cpp
index c62ad006..ca8d7a57 100644
--- a/AppleWin/source/Video.cpp
+++ b/AppleWin/source/Video.cpp
@@ -1047,12 +1047,13 @@ HBRUSH CreateCustomBrush(COLORREF nColor)
//===========================================================================
void DrawMonoTextSource (HDC hDstDC)
{
- static HBITMAP hCharBitmap[3];
+ static HBITMAP hCharBitmap[4];
HDC hSrcDC = CreateCompatibleDC(hDstDC);
hCharBitmap[0] = LoadBitmap(g_hInstance,TEXT("CHARSET40"));
hCharBitmap[1] = LoadBitmap(g_hInstance,TEXT("CHARSET82"));
- hCharBitmap[2] = LoadBitmap(g_hInstance,TEXT("CHARSET8C"));
+ hCharBitmap[2] = LoadBitmap(g_hInstance,TEXT("CHARSET8C")); //Pravets 8M probably has the same charset as Pravets 8C
+ hCharBitmap[3] = LoadBitmap(g_hInstance,TEXT("CHARSET8C"));
HBRUSH hBrush;
switch (videotype)
@@ -1081,11 +1082,12 @@ void DrawMonoTextSource (HDC hDstDC)
void DrawTextSource (HDC dc)
{
HDC memdc = CreateCompatibleDC(dc);
- static HBITMAP hCharBitmap[3];
+ static HBITMAP hCharBitmap[4];
//The charset is set below
hCharBitmap[0] = LoadBitmap(g_hInstance,TEXT("CHARSET40"));
hCharBitmap[1] = LoadBitmap(g_hInstance,TEXT("CHARSET82"));
- hCharBitmap[2] = LoadBitmap(g_hInstance,TEXT("CHARSET8C"));
+ hCharBitmap[2] = LoadBitmap(g_hInstance,TEXT("CHARSET8C")); //Pravets 8M probably has the same charset as Pravets 8C
+ hCharBitmap[3] = LoadBitmap(g_hInstance,TEXT("CHARSET8C"));
SelectObject(memdc,hCharBitmap[g_nCharsetType]);
BitBlt(