Patch level : 2.0 476

Files correlati     : xvagaa.dll
Ricompilazione Demo : [ ]
Commento            :
Modifiche per Linux


git-svn-id: svn://10.65.10.50/trunk@11172 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2003-05-22 15:25:25 +00:00
parent 6055e4ab1a
commit 9d7cb84959
13 changed files with 1471 additions and 896 deletions

View File

@ -1,7 +1,10 @@
#include "wxinc.h" #include "wxinc.h"
#include <fstream.h> #include <fstream.h>
#ifdef LINUX
#include "xvt_type.h"
#endif
#include "agasys.h" #include "agasys.h"
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -9,7 +12,7 @@
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
#include <wx/wfstream.h> #include <wx/wfstream.h>
#include <wx/zipstrm.h> #include <wx/zipstrm.h>
#pragma pack(2) #pragma pack(2)
@ -35,7 +38,7 @@ struct ZipDirectoryFileHeader
unsigned short nStartDisk; unsigned short nStartDisk;
unsigned short nInternalAttr; unsigned short nInternalAttr;
unsigned long nExternalAttr; unsigned long nExternalAttr;
unsigned long nLocalHeaderOffset; unsigned long nLocalHeaderOffset;
}; };
struct ZipDirectoryEnd struct ZipDirectoryEnd
@ -44,8 +47,8 @@ struct ZipDirectoryEnd
unsigned short nStartDisk; unsigned short nStartDisk;
unsigned short nDiskEntries; unsigned short nDiskEntries;
unsigned short nTotalEntries; unsigned short nTotalEntries;
unsigned long nSize; unsigned long nSize;
unsigned long nStartOffset; unsigned long nStartOffset;
unsigned short nCommentLength; unsigned short nCommentLength;
}; };
@ -102,7 +105,7 @@ bool aga_unzip(const char* zipfile, const char* destdir)
strOutFile += '/'; strOutFile += '/';
strOutFile += strFileName; strOutFile += strFileName;
wxString strPath; wxString strPath;
::wxSplitPath(strOutFile, &strPath, NULL, NULL); ::wxSplitPath(strOutFile, &strPath, NULL, NULL);
if (!::wxDirExists(strPath)) if (!::wxDirExists(strPath))
::wxMkdir(strPath); ::wxMkdir(strPath);
@ -168,7 +171,7 @@ static int AddFilesToList(const wxString& strBase, const wxString& strMask, wxSt
return n; return n;
} }
static void AddFileToZip(const wxString& strPrefix, const wxString& strFile, static void AddFileToZip(const wxString& strPrefix, const wxString& strFile,
wxFileOutputStream& fout, wxFileOutputStream& fdir) wxFileOutputStream& fout, wxFileOutputStream& fdir)
{ {
if (!wxFileExists(strFile)) if (!wxFileExists(strFile))
@ -182,7 +185,7 @@ static void AddFileToZip(const wxString& strPrefix, const wxString& strFile,
if (!strRelName.IsEmpty()) if (!strRelName.IsEmpty())
strRelName += '/'; strRelName += '/';
strRelName += strName; strRelName += strName;
strRelName += '.'; strRelName += '.';
strRelName += strExt; strRelName += strExt;
const off_t nStartPos = fout.TellO(); // Memorizzo posizione const off_t nStartPos = fout.TellO(); // Memorizzo posizione
@ -190,11 +193,11 @@ static void AddFileToZip(const wxString& strPrefix, const wxString& strFile,
const unsigned long dwLocalSignature = 0x04034B50; const unsigned long dwLocalSignature = 0x04034B50;
fout.Write(&dwLocalSignature, sizeof(dwLocalSignature)); // Scrivo PK34 fout.Write(&dwLocalSignature, sizeof(dwLocalSignature)); // Scrivo PK34
ZipLocalFileHeader zlfh; memset(&zlfh, 0, sizeof(zlfh)); ZipLocalFileHeader zlfh; memset(&zlfh, 0, sizeof(zlfh));
zlfh.nVersionNeeded = 20; // You need at least pkunzip 2.0 zlfh.nVersionNeeded = 20; // You need at least pkunzip 2.0
zlfh.nFlags = 0x0002; // Deep Hacking ??? zlfh.nFlags = 0x0002; // Deep Hacking ???
zlfh.nMethod = 8; // Implode zlfh.nMethod = 8; // Implode
zlfh.nNameLength = strRelName.Length(); zlfh.nNameLength = strRelName.Length();
fout.Write(&zlfh, sizeof(zlfh)); // Scrivo header azzerato fout.Write(&zlfh, sizeof(zlfh)); // Scrivo header azzerato
fout.Write((const char*)strRelName, zlfh.nNameLength); // Scrivo nome file fout.Write((const char*)strRelName, zlfh.nNameLength); // Scrivo nome file
const off_t nDataStart = fout.TellO(); // Memorizzo posizione dati compressi const off_t nDataStart = fout.TellO(); // Memorizzo posizione dati compressi
@ -203,14 +206,14 @@ static void AddFileToZip(const wxString& strPrefix, const wxString& strFile,
{ {
wxFileInputStream fin(strFile); wxFileInputStream fin(strFile);
AgaZlibOutputStream zout(fout); AgaZlibOutputStream zout(fout);
zout.Write(fin); // Scrivo file compresso zout.Write(fin); // Scrivo file compresso
zlfh.dwUncompressedSize = fin.TellI(); zlfh.dwUncompressedSize = fin.TellI();
} }
fout.SeekO(nMagicOffset, wxFromEnd); fout.SeekO(nMagicOffset, wxFromEnd);
zlfh.dwCompressedSize = fout.TellO(); zlfh.dwCompressedSize = fout.TellO();
zlfh.dwCompressedSize -= nDataStart; zlfh.dwCompressedSize -= nDataStart;
zlfh.dwCRC = ComputeFileCRC32(strFile); zlfh.dwCRC = ComputeFileCRC32(strFile);
const time_t tMod = ::wxFileModificationTime(strFile); const time_t tMod = ::wxFileModificationTime(strFile);
@ -232,7 +235,7 @@ static void AddFileToZip(const wxString& strPrefix, const wxString& strFile,
fout.SeekO(nMagicOffset, wxFromEnd); fout.SeekO(nMagicOffset, wxFromEnd);
ZipDirectoryFileHeader zdfh; memset(&zdfh, 0, sizeof(zdfh)); ZipDirectoryFileHeader zdfh; memset(&zdfh, 0, sizeof(zdfh));
zdfh.nVersionUsed = zlfh.nVersionNeeded; zdfh.nVersionUsed = zlfh.nVersionNeeded;
memcpy(&zdfh.zlfh, &zlfh, sizeof(zlfh)); memcpy(&zdfh.zlfh, &zlfh, sizeof(zlfh));
zdfh.nLocalHeaderOffset = nStartPos; zdfh.nLocalHeaderOffset = nStartPos;
@ -304,7 +307,7 @@ bool aga_zip_filelist(const char* filelist, const char* zipfile)
ifstream fin(filelist); ifstream fin(filelist);
while (!fin.eof()) while (!fin.eof())
{ {
char name[MAX_PATH]; char name[_MAX_PATH];
fin.getline(name, sizeof(name)); fin.getline(name, sizeof(name));
if (*name) if (*name)
aFiles.Add(name); aFiles.Add(name);

View File

@ -8,7 +8,7 @@
#define XVTDLL __declspec(dllimport) #define XVTDLL __declspec(dllimport)
#endif #endif
#else #else
#define #define XVTDLL
#endif #endif
XVTDLL bool aga_unzip(const char* zipfile, const char* destdir); XVTDLL bool aga_unzip(const char* zipfile, const char* destdir);

261
xvaga/oslinux.cpp Executable file
View File

@ -0,0 +1,261 @@
#include "wxinc.h"
#include "wx/print.h"
#include "wx/printdlg.h"
#include "xvt.h"
#include "oslinux.h"
#include "xvt_menu.h"
#include "xvt_help.h"
#include "xvintern.h"
#include <wx/fontenum.h>
#include <wx/string.h>
#include <wx/snglinst.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <mntent.h>
#include <sys/vfs.h>
wxString OsLinux_File2App(const char* filename)
{
wxString app;
SORRY_BOX();
return app;
}
int OsLinux_EnumerateFamilies(char** families, int max_count)
{
wxFontEnumerator ef;
ef.EnumerateFacenames();
wxArrayString * fonts = ef.GetFacenames();
size_t items = fonts->GetCount();
size_t i;
for (i = 0; i < items; i++)
strcpy(families[i], (*fonts)[i].c_str());
return items;
}
int OsLinux_EnumerateSizes(const char* name, long* sizes, short* scalable, int max_count)
{
int i = 0;
TFontId f;
wxPrinter printer;
wxPostScriptDC dc(printer.GetPrintDialogData().GetPrintData());
f.SetFaceName(name);
for (int size = 7; size < 80; size++)
{
f.SetPointSize(size);
if (f.Font((wxDC *) &dc).Ok())
sizes[i++] = size;
}
return i;
}
void OsLinux_PlaceProcessInWindow(unsigned int instance, const char* name, unsigned int parent)
{
SORRY_BOX();
}
void OsLinux_UpdateWindow(unsigned int handle)
{
SORRY_BOX();
}
///////////////////////////////////////////////////////////
// Hardlock Support
///////////////////////////////////////////////////////////
#include "hlapi_c.h"
bool OsLinux_HL_Login(unsigned short address, const unsigned char* label, const unsigned char* password)
{
int err = HL_LOGIN(address, LOCAL_DEVICE, (unsigned char*)label, (unsigned char*)password);
return err == STATUS_OK;
}
bool OsLinux_HL_Logout()
{
HL_LOGOUT();
return TRUE;
}
bool OsLinux_HL_Read(unsigned short reg, unsigned short* data)
{
int err = HL_READ(reg, data);
return err == STATUS_OK;
}
bool OsLinux_HL_ReadBlock(unsigned char* data)
{
int err = HL_READBL(data);
return err == STATUS_OK;
}
bool OsLinux_HL_Write(unsigned short reg, unsigned short data)
{
int err = HL_WRITE(reg, data);
return err == STATUS_OK;
}
bool OsLinux_HL_Crypt(unsigned short* data) // Array di 4 words (8 bytes)
{
int err = HL_CODE(data, 1);
return err == STATUS_OK;
}
///////////////////////////////////////////////////////////
// Eutron Smartlink Support
///////////////////////////////////////////////////////////
#include "skeylink.h"
static KEY_NET _eutron_key;
static short smartlink(KEY_NET * key)
{
SKEY_DATA skey;
int i;
skey.lpt = key->lpt;
skey.command = key->command;
for (i = 0; i < LABEL_LENGTH; i++)
skey.label[i] = key->label[i];
for (i = 0; i < PASSWORD_LENGTH; i++)
skey.password[i] = key->password[i];
for (i = 0; i < DATA_LENGTH; i++)
skey.data[i] = key->data[i];
skey.fail_counter = key->fail_counter;
skey.status = key->status;
for (i = 0; i < EXTENDED_DATA_LENGTH; i++)
skey.ext_data[i] = key->ext_data[i];
short retval = clink(&skey);
key->lpt = skey.lpt;
key->command = skey.command;
for (i = 0; i < LABEL_LENGTH; i++)
key->label[i] = skey.label[i];
for (i = 0; i < PASSWORD_LENGTH; i++)
key->password[i] = skey.password[i];
for (i = 0; i < DATA_LENGTH; i++)
key->data[i] = skey.data[i];
key->fail_counter = skey.fail_counter;
key->status = skey.status;
for (i = 0; i < EXTENDED_DATA_LENGTH; i++)
key->ext_data[i] = skey.ext_data[i];
return retval;
}
bool OsLinux_SL_Crypt(unsigned short* data)
{
_eutron_key.net_command = NET_KEY_ACCESS;
_eutron_key.command = SCRAMBLING_MODE;
memcpy(_eutron_key.data, data, 8);
smartlink(&_eutron_key);
if (_eutron_key.status == ST_OK)
memcpy(data, _eutron_key.data, 8);
return _eutron_key.status == ST_OK;
}
bool OsLinux_SL_Login(const unsigned char* label, const unsigned char* password)
{
memset(&_eutron_key, 0, sizeof(KEY_NET));
_eutron_key.net_command = NET_KEY_OPEN;
_eutron_key.status = ST_HW_FAILURE; // Don't leave ST_OK = 0 here!
memcpy(_eutron_key.label, label, strlen((const char*)label));
memcpy(_eutron_key.password, password, strlen((const char*)password));
smartlink(&_eutron_key);
return _eutron_key.status == ST_OK;
}
bool OsLinux_SL_Logout()
{
_eutron_key.net_command = NET_KEY_CLOSE;
_eutron_key.command = 0;
smartlink(&_eutron_key);
return true;
}
bool OsLinux_SL_ReadBlock(unsigned short reg, unsigned short size, unsigned short* data)
{
_eutron_key.net_command = NET_KEY_ACCESS;
_eutron_key.command = BLOCK_READING_MODE;
unsigned short* pointer = (unsigned short*)(&_eutron_key.data[0]);
unsigned short* number = (unsigned short*)(&_eutron_key.data[2]);
*pointer = reg;
*number = size;
smartlink(&_eutron_key);
bool ok = _eutron_key.status == ST_OK;
if (ok)
memcpy(data, &_eutron_key.data[4], size*sizeof(unsigned short));
return ok;
}
bool OsLinux_SL_WriteBlock(unsigned short reg, unsigned short size, const unsigned short* data)
{
_eutron_key.net_command = NET_KEY_ACCESS;
_eutron_key.command = BLOCK_WRITING_MODE;
unsigned short* pointer = (unsigned short*)(&_eutron_key.data[0]);
unsigned short* number = (unsigned short*)(&_eutron_key.data[2]);
*pointer = reg;
*number = size;
memcpy(&_eutron_key.data[4], data, size*sizeof(unsigned short));
smartlink(&_eutron_key);
return _eutron_key.status == ST_OK;
}
void OsLinux_GetFileSys(const char* path, char * dev, char * dir, char * type)
{
struct mntent *m;
FILE *f = setmntent("/etc/mnttab", "r");
while ((m = getmntent(f)) && strncmp(path, m->mnt_dir, strlen(m->mnt_dir)) != 0);
if (m)
{
if (dev) strcpy(dev, m->mnt_fsname);
if (dir) strcpy(dir, m->mnt_dir);
if (type) strcpy(type, m->mnt_type);
}
else
{
if (dev) *dev = '\0';
if (dir) *dir = '\0';
if (type) *type = '\0';
}
endmntent(f);
}
bool OsLinux_IsNetworkDrive(const char * path)
{
struct statfs buf;
if (statfs(path, &buf) == -1)
return FALSE;
return (buf.f_type == 0x6969 /*NFS_SUPER_MAGIC */) ||
(buf.f_type == 0x517B /*SMB_SUPER_MAGIC)*/);
}
int64_t OsLinux_GetDiskFreeSpace(const char * path)
{
struct statfs buf;
int64_t nBytes = 0L;
if (statfs(path, &buf) != -1)
{
nBytes = buf.f_bsize;
nBytes *= buf.f_bavail;
nBytes *= 1024;
}
return nBytes;
}

22
xvaga/oslinux.h Executable file
View File

@ -0,0 +1,22 @@
wxString OsLinux_File2App(const char* filename);
int OsLinux_EnumerateFamilies(char** families, int max_count);
int OsLinux_EnumerateSizes(const char* name, long* sizes, short* scalable, int max_count);
void OsLinux_PlaceProcessInWindow(unsigned int instance, const char* name, unsigned int parent);
void OsLinux_UpdateWindow(unsigned int handle);
bool OsLinux_HL_Crypt(unsigned short* data);
bool OsLinux_HL_Login(unsigned short address, const unsigned char* label, const unsigned char* password);
bool OsLinux_HL_Logout() ;
bool OsLinux_HL_Read(unsigned short reg, unsigned short* data);
bool OsLinux_HL_ReadBlock(unsigned char* data);
bool OsLinux_HL_Write(unsigned short reg, unsigned short data);
bool OsLinux_SL_Crypt(unsigned short* data);
bool OsLinux_SL_Login(const unsigned char* label, const unsigned char* password);
bool OsLinux_SL_Logout() ;
bool OsLinux_SL_ReadBlock(unsigned short reg, unsigned short size, unsigned short* data);
bool OsLinux_SL_WriteBlock(unsigned short reg, unsigned short size, const unsigned short* data);
void OsLinux_GetFileSys(const char* path, char * dev, char * dir, char * type);
bool OsLinux_IsNetworkDrive(const char * path);
int64_t OsLinux_GetDiskFreeSpace(const char * path);

View File

@ -131,7 +131,7 @@ typedef struct __SKEY_DATA {
#define ST_NET_LOCAL_INIT_ERROR -25 /* Error inizializing the Local protocol */ #define ST_NET_LOCAL_INIT_ERROR -25 /* Error inizializing the Local protocol */
#define ST_NET_KEY_NOT_MAP -26 /* Not MAP programmed key found when MAP is requested */ #define ST_NET_KEY_NOT_MAP -26 /* Not MAP programmed key found when MAP is requested */
/* /*
Code returned in data[0] after NET_OPEN Code returned in data[0] after NET_OPEN
*/ */
#define NET_TYPE_LOCAL 0 #define NET_TYPE_LOCAL 0
@ -172,7 +172,12 @@ typedef struct __KEY_NET {
Call the driver. Call the driver.
Return key->k.status code Return key->k.status code
*/ */
#ifdef WIN32
short __cdecl smartlink(KEY_NET*); short __cdecl smartlink(KEY_NET*);
#else
int clink(SKEY_DATA *);
#endif
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -2,6 +2,7 @@
#ifndef __WXINC_H__ #ifndef __WXINC_H__
#define __WXINC_H__ #define __WXINC_H__
#ifdef WIN32 #ifdef WIN32
#define __WINDOWS__ #define __WINDOWS__
#define __WXMSW__ #define __WXMSW__
@ -10,9 +11,14 @@
#define WINVER 0x0400 #define WINVER 0x0400
#define STRICT #define STRICT
#define WXUSINGDLL 1 #define WXUSINGDLL 1
#include <wx/wxprec.h>
#else
#define _FILE_OFFSET_BITS 64
#define _LARGE_FILES
#define __WXGTK__
#define GTK_NO_CHECK_CASTS
#include <wx/wx.h>
#endif #endif
#include "wx/wxprec.h"
#endif #endif

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
#include "..\xvaga\wxinc.h" #include "../xvaga/wxinc.h"
extern int xvt_main(int argc, char** argv); extern int xvt_main(int argc, char** argv);
class TMainApp : public wxApp class TMainApp : public wxApp
{ {

View File

@ -37,13 +37,13 @@ public:
bool operator==(const TFontId& f) const { return IsEqual(f); } bool operator==(const TFontId& f) const { return IsEqual(f); }
bool operator!=(const TFontId& f) const { return !IsEqual(f); } bool operator!=(const TFontId& f) const { return !IsEqual(f); }
TFontId() : m_win(NULL_WIN), m_nSize(0), m_wMask(0) { } TFontId() : m_nSize(0), m_wMask(0), m_win(NULL_WIN) { }
TFontId(const TFontId& f) : m_win(NULL_WIN) { Copy(f); } TFontId(const TFontId& f) : m_win(NULL_WIN) { Copy(f); }
}; };
class TDC : public wxObject class TDC : public wxObject
{ {
wxWindow* _owner; wxWindow* _owner;
protected: protected:
wxDC* _dc; wxDC* _dc;

View File

@ -2,14 +2,12 @@
#define XVT_INCL_XVT #define XVT_INCL_XVT
#ifdef XVT_INCL_NATIVE #ifdef XVT_INCL_NATIVE
#ifdef WIN32 #ifdef WIN32
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#define WIN32_EXTRA_LEAN #define WIN32_EXTRA_LEAN
#define STRICT #define STRICT
#include <windows.h> #include <windows.h>
#endif #endif
#endif #endif
#ifdef WIN32 #ifdef WIN32
@ -18,6 +16,7 @@
#else #else
#define XVTDLL __declspec(dllimport) #define XVTDLL __declspec(dllimport)
#endif #endif
#include <io.h>
#else #else
#define XVTDLL #define XVTDLL
#endif #endif
@ -25,7 +24,6 @@
#define XVAGA 1 #define XVAGA 1
#include <ctype.h> #include <ctype.h>
#include <io.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -162,6 +160,11 @@ XVTDLL BOOLEAN xvt_fsys_is_removable_drive(const char* path);
XVTDLL BOOLEAN xvt_fsys_is_network_drive(const char* path); XVTDLL BOOLEAN xvt_fsys_is_network_drive(const char* path);
XVTDLL BOOLEAN xvt_fsys_is_fixed_drive(const char* path); XVTDLL BOOLEAN xvt_fsys_is_fixed_drive(const char* path);
XVTDLL BOOLEAN xvt_fsys_test_disk_free_space(const char* path, unsigned long filesize); XVTDLL BOOLEAN xvt_fsys_test_disk_free_space(const char* path, unsigned long filesize);
XVTDLL BOOLEAN xvt_fsys_mkdir(const char *pathname);
XVTDLL BOOLEAN xvt_fsys_rmdir(const char *pathname);
XVTDLL BOOLEAN xvt_fsys_removefile(const char *pathname);
XVTDLL BOOLEAN xvt_fsys_access(const char *pathname, int mode);
XVTDLL BOOLEAN xvt_fsys_file_exists(const char *pathname);
XVTDLL void xvt_help_close_helpfile(XVT_HELP_INFO hi); XVTDLL void xvt_help_close_helpfile(XVT_HELP_INFO hi);
XVTDLL XVT_HELP_INFO xvt_help_open_helpfile(FILE_SPEC *fs, unsigned long flags); XVTDLL XVT_HELP_INFO xvt_help_open_helpfile(FILE_SPEC *fs, unsigned long flags);
@ -255,7 +258,7 @@ XVTDLL void xvt_scr_set_focus_vobj(WINDOW win);
XVTDLL BOOLEAN xvt_slist_add_at_elt(SLIST x, SLIST_ELT e, const char *sx, long data); XVTDLL BOOLEAN xvt_slist_add_at_elt(SLIST x, SLIST_ELT e, const char *sx, long data);
XVTDLL int xvt_slist_count(SLIST x); XVTDLL int xvt_slist_count(SLIST x);
XVTDLL SLIST xvt_slist_create(); XVTDLL SLIST xvt_slist_create();
XVTDLL void xvt_slist_destroy(SLIST list); XVTDLL void xvt_slist_destroy(SLIST list);
XVTDLL char* xvt_slist_get(SLIST x, SLIST_ELT e, long *datap); XVTDLL char* xvt_slist_get(SLIST x, SLIST_ELT e, long *datap);
XVTDLL long* xvt_slist_get_data(SLIST_ELT elt); XVTDLL long* xvt_slist_get_data(SLIST_ELT elt);
@ -275,20 +278,20 @@ XVTDLL BOOLEAN xvt_sys_get_user_name(char* name, int maxlen);
XVTDLL BOOLEAN xvt_sys_goto_url(const char* url, const char* action); XVTDLL BOOLEAN xvt_sys_goto_url(const char* url, const char* action);
XVTDLL BOOLEAN xvt_sys_dongle_server_is_running(); XVTDLL BOOLEAN xvt_sys_dongle_server_is_running();
XVTDLL BOOLEAN xvt_sys_find_editor(const char* file, char* editor); XVTDLL BOOLEAN xvt_sys_find_editor(const char* file, char* editor);
XVTDLL int xvt_sys_get_profile_string(const char* file, const char* paragraph, const char* name, XVTDLL int xvt_sys_get_profile_string(const char* file, const char* paragraph, const char* name,
const char* defval, char* value, int maxsize); const char* defval, char* value, int maxsize);
XVTDLL BOOLEAN xvt_sys_set_profile_string(const char* file, const char* paragraph, const char* name, XVTDLL BOOLEAN xvt_sys_set_profile_string(const char* file, const char* paragraph, const char* name,
const char* value); const char* value);
XVTDLL unsigned long xvt_sys_get_free_memory(); XVTDLL unsigned long xvt_sys_get_free_memory();
XVTDLL unsigned long xvt_sys_get_free_memory_kb(); XVTDLL unsigned long xvt_sys_get_free_memory_kb();
XVTDLL int xvt_sys_get_os_version(); XVTDLL int xvt_sys_get_os_version();
XVTDLL unsigned int xvt_sys_load_icon(const char* file); XVTDLL unsigned int xvt_sys_load_icon(const char* file);
XVTDLL void xvt_sys_sleep(unsigned long msec); XVTDLL void xvt_sys_sleep(unsigned long msec);
XVTDLL BOOLEAN xvt_sys_test_network_version(); XVTDLL BOOLEAN xvt_sys_test_network_version();
XVTDLL void xvt_sys_searchenv(const char *filename, const char *varname, char *pathname);
XVTDLL long xvt_timer_create(WINDOW win, long interval); XVTDLL void xvt_sys_sorry_box(const char * file, int line);
XVTDLL void xvt_timer_destroy(long id); XVTDLL long xvt_timer_create(WINDOW win, long interval);
XVTDLL void xvt_timer_destroy(long id);
XVTDLL void xvt_vobj_destroy(WINDOW win); XVTDLL void xvt_vobj_destroy(WINDOW win);
XVTDLL long xvt_vobj_get_attr(WINDOW win, long data); XVTDLL long xvt_vobj_get_attr(WINDOW win, long data);
XVTDLL RCT* xvt_vobj_get_client_rect(WINDOW win, RCT *rctp); XVTDLL RCT* xvt_vobj_get_client_rect(WINDOW win, RCT *rctp);
@ -309,7 +312,6 @@ XVTDLL void xvt_vobj_set_palet(WINDOW win, XVT_PALETTE palet);
XVTDLL void xvt_vobj_set_title(WINDOW win, char *title); XVTDLL void xvt_vobj_set_title(WINDOW win, char *title);
XVTDLL void xvt_vobj_set_visible(WINDOW win, BOOLEAN show); XVTDLL void xvt_vobj_set_visible(WINDOW win, BOOLEAN show);
XVTDLL void xvt_vobj_translate_points(WINDOW from_win, WINDOW to_win, PNT *pntp, int npnts); XVTDLL void xvt_vobj_translate_points(WINDOW from_win, WINDOW to_win, PNT *pntp, int npnts);
XVTDLL WINDOW xvt_win_create(WIN_TYPE wtype, RCT *rct_p, char *title, int menu_rid, WINDOW parent_win, long win_flags, EVENT_MASK mask, EVENT_HANDLER eh, long app_data); XVTDLL WINDOW xvt_win_create(WIN_TYPE wtype, RCT *rct_p, char *title, int menu_rid, WINDOW parent_win, long win_flags, EVENT_MASK mask, EVENT_HANDLER eh, long app_data);
XVTDLL long xvt_win_dispatch_event(WINDOW win, EVENT* event_p); XVTDLL long xvt_win_dispatch_event(WINDOW win, EVENT* event_p);
XVTDLL void xvt_win_post_event(WINDOW win, EVENT* event_p); // Added by XVAGA XVTDLL void xvt_win_post_event(WINDOW win, EVENT* event_p); // Added by XVAGA
@ -325,4 +327,6 @@ XVTDLL void xvt_win_trap_pointer(WINDOW win);
} }
#endif #endif
#define SORRY_BOX() xvt_sys_sorry_box(__FILE__, __LINE__)
#endif #endif

View File

@ -30,4 +30,4 @@
#define ATTR_WIN_PM_TWIN_STARTUP_RCT (ATTR_WIN_BASE + 11) #define ATTR_WIN_PM_TWIN_STARTUP_RCT (ATTR_WIN_BASE + 11)
#define ATTR_WIN_PM_TWIN_STARTUP_STYLE (ATTR_WIN_BASE + 12) #define ATTR_WIN_PM_TWIN_STARTUP_STYLE (ATTR_WIN_BASE + 12)
#define main xvt_main #define main xvt_main

View File

@ -1,9 +1,19 @@
#ifndef BOOLEAN
#define BOOLEAN short #define BOOLEAN short
#endif
#ifndef FALSE #ifndef FALSE
#define FALSE 0 #define FALSE 0
#define TRUE 1 #define TRUE 1
#endif #endif
#ifdef LINUX
#define _MAX_PATH 512
#define _MAX_EXT 6
#define _MAX_DRIVE 6
#define _MAX_DIR 512
#define _MAX_FNAME 512
#endif
typedef unsigned long WINDOW; typedef unsigned long WINDOW;
typedef unsigned int UNIT_TYPE; typedef unsigned int UNIT_TYPE;
typedef unsigned long ULONG; typedef unsigned long ULONG;
@ -29,11 +39,11 @@ typedef unsigned long XVT_FONT_STYLE_MASK;
typedef long PICTURE; typedef long PICTURE;
typedef void* XVT_IMAGE; typedef void* XVT_IMAGE;
typedef enum { typedef enum {
XVT_IMAGE_NONE, XVT_IMAGE_NONE,
XVT_IMAGE_CL8, XVT_IMAGE_CL8,
XVT_IMAGE_RGB, XVT_IMAGE_RGB,
XVT_IMAGE_MONO, XVT_IMAGE_MONO,
} XVT_IMAGE_FORMAT; } XVT_IMAGE_FORMAT;
#define XVT_FNTID void* #define XVT_FNTID void*
@ -46,19 +56,19 @@ typedef enum e_display_type {
XVT_DISPLAY_MONO, /* monochromatic display */ XVT_DISPLAY_MONO, /* monochromatic display */
XVT_DISPLAY_GRAY_16, /* 16-entry grayscale */ XVT_DISPLAY_GRAY_16, /* 16-entry grayscale */
XVT_DISPLAY_GRAY_256, /* 256-entry grayscale */ XVT_DISPLAY_GRAY_256, /* 256-entry grayscale */
XVT_DISPLAY_COLOR_16, /* 16-entry color */ XVT_DISPLAY_COLOR_16, /* 16-entry color */
XVT_DISPLAY_COLOR_256, /* 256-entry color */ XVT_DISPLAY_COLOR_256, /* 256-entry color */
XVT_DISPLAY_DIRECT_COLOR, /* full color capabilities */ XVT_DISPLAY_DIRECT_COLOR, /* full color capabilities */
} XVT_DISPLAY_TYPE; } XVT_DISPLAY_TYPE;
typedef enum { typedef enum {
XVT_PALETTE_NONE, XVT_PALETTE_NONE,
XVT_PALETTE_STOCK, XVT_PALETTE_STOCK,
XVT_PALETTE_CURRENT, XVT_PALETTE_CURRENT,
XVT_PALETTE_CUBE16, XVT_PALETTE_CUBE16,
XVT_PALETTE_CUBE256, XVT_PALETTE_CUBE256,
XVT_PALETTE_USER XVT_PALETTE_USER
} XVT_PALETTE_TYPE; } XVT_PALETTE_TYPE;
typedef enum { /* response from ask fcn */ typedef enum { /* response from ask fcn */
@ -73,34 +83,34 @@ typedef enum { /* result from file open & save dialogs */
FL_OK, /* OK button clicked */ FL_OK, /* OK button clicked */
} FL_STATUS; } FL_STATUS;
typedef struct typedef struct
{ {
char path[_MAX_DIR]; char path[_MAX_DIR];
} DIRECTORY; } DIRECTORY;
typedef struct s_mitem { typedef struct s_mitem {
MENU_TAG tag; /* menu tag */ MENU_TAG tag; /* menu tag */
char *text; /* text to appear in menu */ char *text; /* text to appear in menu */
short mkey; /* mnemonic */ short mkey; /* mnemonic */
unsigned enabled: 1; /* enabled? */ unsigned enabled: 1; /* enabled? */
unsigned checked: 1; /* checked? */ unsigned checked: 1; /* checked? */
unsigned checkable: 1; /* checkable? */ unsigned checkable: 1; /* checkable? */
unsigned separator: 1; /* separator? */ unsigned separator: 1; /* separator? */
struct s_mitem *child; /* pointer to submenu */ struct s_mitem *child; /* pointer to submenu */
} MENU_ITEM; } MENU_ITEM;
#define SZ_FNAME _MAX_FNAME #define SZ_FNAME _MAX_FNAME
typedef struct { /* file specification */ typedef struct { /* file specification */
DIRECTORY dir; /* directory */ DIRECTORY dir; /* directory */
char type[6]; /* file type/extension */ char type[6]; /* file type/extension */
char name[_MAX_FNAME]; /* filename */ char name[_MAX_FNAME]; /* filename */
char creator[6]; /* file creator */ char creator[6]; /* file creator */
} FILE_SPEC; } FILE_SPEC;
typedef struct typedef struct
{ {
void* pr; void* pr;
} PRINT_RCD; } PRINT_RCD;
@ -115,42 +125,42 @@ typedef SLIST_ITEM* SLIST_ELT;
typedef struct { SLIST_ELT head; long count; } xvtList; typedef struct { SLIST_ELT head; long count; } xvtList;
typedef xvtList* SLIST; typedef xvtList* SLIST;
typedef enum { /* drawing (transfer) mode */ typedef enum { /* drawing (transfer) mode */
M_COPY, M_COPY,
M_OR, M_OR,
M_XOR, M_XOR,
M_CLEAR, M_CLEAR,
M_NOT_COPY, M_NOT_COPY,
M_NOT_OR, M_NOT_OR,
M_NOT_XOR, M_NOT_XOR,
M_NOT_CLEAR M_NOT_CLEAR
} DRAW_MODE; } DRAW_MODE;
typedef enum e_pen_style { /* pen style */ typedef enum e_pen_style { /* pen style */
P_SOLID, /* solid */ P_SOLID, /* solid */
P_DOT, /* dotted line */ P_DOT, /* dotted line */
P_DASH /* dashed line */ P_DASH /* dashed line */
} PEN_STYLE; } PEN_STYLE;
typedef enum { typedef enum {
PAT_NONE, /* no pattern */ PAT_NONE, /* no pattern */
PAT_HOLLOW, /* hollow */ PAT_HOLLOW, /* hollow */
PAT_SOLID, /* solid fill */ PAT_SOLID, /* solid fill */
PAT_HORZ, /* horizontal lines */ PAT_HORZ, /* horizontal lines */
PAT_VERT, /* vertical lines */ PAT_VERT, /* vertical lines */
PAT_FDIAG, /* diagonal lines -- top-left to bottom-right */ PAT_FDIAG, /* diagonal lines -- top-left to bottom-right */
PAT_BDIAG, /* diagonal lines -- top-right to bottom-left */ PAT_BDIAG, /* diagonal lines -- top-right to bottom-left */
PAT_CROSS, /* horizontal and vertical crossing lines */ PAT_CROSS, /* horizontal and vertical crossing lines */
PAT_DIAGCROSS, /* diagonol crossing lines */ PAT_DIAGCROSS, /* diagonol crossing lines */
PAT_RUBBER, /* rubber banding */ PAT_RUBBER, /* rubber banding */
PAT_SPECIAL PAT_SPECIAL
} PAT_STYLE; } PAT_STYLE;
typedef struct { /* color pen tool */ typedef struct { /* color pen tool */
short width; /* width */ short width; /* width */
PAT_STYLE pat; /* pattern */ PAT_STYLE pat; /* pattern */
PEN_STYLE style; /* style */ PEN_STYLE style; /* style */
COLOR color; /* color */ COLOR color; /* color */
} CPEN; } CPEN;
typedef struct typedef struct
@ -159,265 +169,265 @@ typedef struct
COLOR color; COLOR color;
} CBRUSH; } CBRUSH;
typedef struct { /* color drawing tools */ typedef struct { /* color drawing tools */
CPEN pen; /* color pen */ CPEN pen; /* color pen */
CBRUSH brush; /* color brush */ CBRUSH brush; /* color brush */
DRAW_MODE mode; /* drawing mode */ DRAW_MODE mode; /* drawing mode */
COLOR fore_color; /* foreground color */ COLOR fore_color; /* foreground color */
COLOR back_color; /* background color */ COLOR back_color; /* background color */
BOOLEAN opaque_text; /* is text opaque*/ BOOLEAN opaque_text; /* is text opaque*/
} DRAW_CTOOLS; } DRAW_CTOOLS;
typedef enum { /* scrollbar activity */ typedef enum { /* scrollbar activity */
SC_NONE, /* nowhere (ignore) */ SC_NONE, /* nowhere (ignore) */
SC_LINE_UP, /* one line up */ SC_LINE_UP, /* one line up */
SC_LINE_DOWN, /* one line down */ SC_LINE_DOWN, /* one line down */
SC_PAGE_UP, /* previous page */ SC_PAGE_UP, /* previous page */
SC_PAGE_DOWN, /* next page */ SC_PAGE_DOWN, /* next page */
SC_THUMB, /* thumb repositioning */ SC_THUMB, /* thumb repositioning */
SC_THUMBTRACK /* thumb tracking */ SC_THUMBTRACK /* thumb tracking */
} SCROLL_CONTROL; } SCROLL_CONTROL;
typedef enum { /* type of window */ typedef enum { /* type of window */
W_NONE, /* marker for end of WIN_DEF array */ W_NONE, /* marker for end of WIN_DEF array */
W_DOC, /* document window */ W_DOC, /* document window */
W_PLAIN, /* window with plain border */ W_PLAIN, /* window with plain border */
W_DBL, /* window with double border */ W_DBL, /* window with double border */
W_PRINT, /* XVT internal use only */ W_PRINT, /* XVT internal use only */
W_TASK, /* task window */ W_TASK, /* task window */
W_SCREEN, /* screen window */ W_SCREEN, /* screen window */
W_NO_BORDER, /* no border */ W_NO_BORDER, /* no border */
W_PIXMAP, /* pixmap */ W_PIXMAP, /* pixmap */
W_MODAL, /* modal window */ W_MODAL, /* modal window */
WD_MODAL, /* modal dialog */ WD_MODAL, /* modal dialog */
WD_MODELESS, /* modeless dialog */ WD_MODELESS, /* modeless dialog */
WC_PUSHBUTTON, /* button control */ WC_PUSHBUTTON, /* button control */
WC_RADIOBUTTON, /* radio button control */ WC_RADIOBUTTON, /* radio button control */
WC_CHECKBOX, /* check box control */ WC_CHECKBOX, /* check box control */
WC_HSCROLL, /* horizontal scrollbar control */ WC_HSCROLL, /* horizontal scrollbar control */
WC_VSCROLL, /* vertical scrollbar control */ WC_VSCROLL, /* vertical scrollbar control */
WC_EDIT, /* edit control */ WC_EDIT, /* edit control */
WC_TEXT, /* static text control */ WC_TEXT, /* static text control */
WC_LBOX, /* list box control */ WC_LBOX, /* list box control */
WC_LISTBUTTON, /* button with list */ WC_LISTBUTTON, /* button with list */
WC_LISTEDIT, /* edit with field list */ WC_LISTEDIT, /* edit with field list */
WC_GROUPBOX, /* group box */ WC_GROUPBOX, /* group box */
WC_TEXTEDIT, /* text edit object */ WC_TEXTEDIT, /* text edit object */
WC_ICON, /* icon control */ WC_ICON, /* icon control */
WO_TE, /* text edit */ WO_TE, /* text edit */
} WIN_TYPE; } WIN_TYPE;
typedef enum { typedef enum {
SEV_NONE, SEV_NONE,
SEV_WARNING, SEV_WARNING,
SEV_ERROR, SEV_ERROR,
SEV_FATAL, SEV_FATAL,
} XVT_ERRSEV; } XVT_ERRSEV;
typedef enum { /* type of scrollbar */ typedef enum { /* type of scrollbar */
HSCROLL, /* horizontal */ HSCROLL, /* horizontal */
VSCROLL, /* vertical */ VSCROLL, /* vertical */
HVSCROLL, /* either */ HVSCROLL, /* either */
} SCROLL_TYPE; } SCROLL_TYPE;
typedef struct s_ctlinfo { typedef struct s_ctlinfo {
WIN_TYPE type; WIN_TYPE type;
WINDOW win; WINDOW win;
union { union {
struct s_scroll { struct s_scroll {
SCROLL_CONTROL what; SCROLL_CONTROL what;
short pos; short pos;
} scroll; } scroll;
struct s_edit { struct s_edit {
BOOLEAN focus_change; BOOLEAN focus_change;
BOOLEAN active; BOOLEAN active;
} edit; } edit;
struct s_lbox { struct s_lbox {
BOOLEAN dbl_click; BOOLEAN dbl_click;
} lbox; } lbox;
struct s_listedit { struct s_listedit {
BOOLEAN focus_change; BOOLEAN focus_change;
BOOLEAN active; BOOLEAN active;
} listedit; } listedit;
} v; } v;
} CONTROL_INFO; } CONTROL_INFO;
typedef struct s_xvt_color_component { typedef struct s_xvt_color_component {
XVT_COLOR_TYPE type; /* color component being defined */ XVT_COLOR_TYPE type; /* color component being defined */
COLOR color; /* RGB color value */ COLOR color; /* RGB color value */
} XVT_COLOR_COMPONENT; } XVT_COLOR_COMPONENT;
typedef struct s_win_def { typedef struct s_win_def {
WIN_TYPE wtype; /* WC_* or WO_* type */ WIN_TYPE wtype; /* WC_* or WO_* type */
RCT rct; RCT rct;
char *text; char *text;
UNIT_TYPE units; UNIT_TYPE units;
XVT_COLOR_COMPONENT * ctlcolors; XVT_COLOR_COMPONENT * ctlcolors;
union { union {
struct s_win_def_win { /* WINDOW's */ struct s_win_def_win { /* WINDOW's */
short int menu_rid; /* menu resource id */ short int menu_rid; /* menu resource id */
MENU_ITEM *menu_p; /* pointer to menu tree */ MENU_ITEM *menu_p; /* pointer to menu tree */
long flags; /* WSF_* flags */ long flags; /* WSF_* flags */
XVT_FNTID ctl_font_id; /* control font id */ XVT_FNTID ctl_font_id; /* control font id */
} win; } win;
struct s_win_def_dlg { /* DIALOG's */ struct s_win_def_dlg { /* DIALOG's */
long flags; /* WSF_* flags */ long flags; /* WSF_* flags */
XVT_FNTID ctl_font_id; /* control font id */ XVT_FNTID ctl_font_id; /* control font id */
} dlg; } dlg;
struct s_win_def_ctl { /* CONTROL's */ struct s_win_def_ctl { /* CONTROL's */
short int ctrl_id; short int ctrl_id;
short int icon_id; /* for icons only */ short int icon_id; /* for icons only */
long flags; /* CTL_* flags */ long flags; /* CTL_* flags */
XVT_FNTID font_id; /* logical font */ XVT_FNTID font_id; /* logical font */
} ctl; } ctl;
struct s_win_def_tx { /* text edit objects */ struct s_win_def_tx { /* text edit objects */
unsigned short attrib; /* TX_* flags */ unsigned short attrib; /* TX_* flags */
XVT_FNTID font_id; /* logical font */ XVT_FNTID font_id; /* logical font */
short margin; /* right margin */ short margin; /* right margin */
short limit; /* max chars */ short limit; /* max chars */
short int tx_id; /* text ID */ short int tx_id; /* text ID */
} tx; } tx;
} v; } v;
} WIN_DEF; } WIN_DEF;
typedef enum { typedef enum {
E_CREATE, /* creation */ E_CREATE, /* creation */
E_DESTROY, /* destruction */ E_DESTROY, /* destruction */
E_FOCUS, /* window focus gain/loss */ E_FOCUS, /* window focus gain/loss */
E_SIZE, /* resize */ E_SIZE, /* resize */
E_UPDATE, /* update */ E_UPDATE, /* update */
E_CLOSE, /* close window request */ E_CLOSE, /* close window request */
E_MOUSE_DOWN, /* mouse down */ E_MOUSE_DOWN, /* mouse down */
E_MOUSE_UP, /* mouse up */ E_MOUSE_UP, /* mouse up */
E_MOUSE_MOVE, /* mouse move */ E_MOUSE_MOVE, /* mouse move */
E_MOUSE_DBL, /* mouse double click */ E_MOUSE_DBL, /* mouse double click */
E_CHAR, /* character typed */ E_CHAR, /* character typed */
E_VSCROLL, /* vert. window scrollbar activity */ E_VSCROLL, /* vert. window scrollbar activity */
E_HSCROLL, /* horz. window scrollbar activity */ E_HSCROLL, /* horz. window scrollbar activity */
E_COMMAND, /* menu command */ E_COMMAND, /* menu command */
E_FONT, /* font menu selection */ E_FONT, /* font menu selection */
E_CONTROL, /* control activity */ E_CONTROL, /* control activity */
E_TIMER, /* timer */ E_TIMER, /* timer */
E_QUIT, /* application shutdown request */ E_QUIT, /* application shutdown request */
E_HELP, /* help invoked */ E_HELP, /* help invoked */
E_USER, /* user defined */ E_USER, /* user defined */
} EVENT_TYPE; } EVENT_TYPE;
typedef struct s_event { typedef struct s_event {
EVENT_TYPE type; EVENT_TYPE type;
union { union {
struct s_mouse { struct s_mouse {
PNT where; PNT where;
BOOLEAN shift; BOOLEAN shift;
BOOLEAN control; BOOLEAN control;
short button; short button;
} mouse; } mouse;
struct s_char { struct s_char {
XVT_WCHAR ch; XVT_WCHAR ch;
BOOLEAN shift; BOOLEAN shift;
BOOLEAN control; BOOLEAN control;
BOOLEAN virtual_key; BOOLEAN virtual_key;
unsigned long modifiers; unsigned long modifiers;
} chr; } chr;
BOOLEAN active; BOOLEAN active;
BOOLEAN query; BOOLEAN query;
struct s_scroll_info { struct s_scroll_info {
SCROLL_CONTROL what; SCROLL_CONTROL what;
short pos; short pos;
} scroll; } scroll;
struct s_cmd { struct s_cmd {
MENU_TAG tag; MENU_TAG tag;
BOOLEAN shift; BOOLEAN shift;
BOOLEAN control; BOOLEAN control;
} cmd; } cmd;
struct s_size { struct s_size {
short height; short height;
short width; short width;
} size; } size;
struct s_efont { struct s_efont {
XVT_FNTID font_id; XVT_FNTID font_id;
} font; } font;
struct s_ctl { struct s_ctl {
short id; short id;
CONTROL_INFO ci; CONTROL_INFO ci;
} ctl; } ctl;
struct s_update { struct s_update {
RCT rct; RCT rct;
} update; } update;
struct s_timer { struct s_timer {
long id; long id;
} timer; } timer;
struct s_user { struct s_user {
long id; long id;
void *ptr; void *ptr;
} user; } user;
struct s_help { struct s_help {
WINDOW obj; WINDOW obj;
MENU_TAG tag; MENU_TAG tag;
XVT_HELP_TID tid; XVT_HELP_TID tid;
}help; }help;
} v; } v;
} EVENT; } EVENT;
@ -426,18 +436,18 @@ typedef long (* EVENT_HANDLER) (WINDOW win, EVENT *ep);
typedef BOOLEAN (* XVT_ERRMSG_HANDLER) (XVT_ERRMSG err, DATA_PTR context); typedef BOOLEAN (* XVT_ERRMSG_HANDLER) (XVT_ERRMSG err, DATA_PTR context);
typedef enum { /* std. clipboard format */ typedef enum { /* std. clipboard format */
CB_TEXT, /* ASCII text */ CB_TEXT, /* ASCII text */
CB_PICT, /* encapsulated picture */ CB_PICT, /* encapsulated picture */
CB_APPL /* app's own (must have name) */ CB_APPL /* app's own (must have name) */
} CB_FORMAT; } CB_FORMAT;
typedef struct s_xvt_config { typedef struct s_xvt_config {
short menu_bar_ID; /* task menubar ResID */ short menu_bar_ID; /* task menubar ResID */
short about_box_ID; /* default aboutbox ResID */ short about_box_ID; /* default aboutbox ResID */
char *base_appl_name; /* application's "filename" */ char *base_appl_name; /* application's "filename" */
char *appl_name; /* application's name */ char *appl_name; /* application's name */
char *taskwin_title; /* title for task window */ char *taskwin_title; /* title for task window */
} XVT_CONFIG; } XVT_CONFIG;

View File

@ -3,7 +3,12 @@
#include "wx/printdlg.h" #include "wx/printdlg.h"
#include "xvt.h" #include "xvt.h"
#ifdef WIN32
#include "oswin32.h" #include "oswin32.h"
#else
#include "oslinux.h"
#include <fstream.h>
#endif
#include "xvintern.h" #include "xvintern.h"
@ -31,9 +36,9 @@ void TPRINT_RCD::SetData(void* data, unsigned int nSize)
} }
} }
TPRINT_RCD::TPRINT_RCD() : m_size(0) TPRINT_RCD::TPRINT_RCD() : m_size(0)
{ {
pr = NULL; pr = NULL;
memset(m_data, 0, sizeof(m_data)); memset(m_data, 0, sizeof(m_data));
} }
@ -71,7 +76,7 @@ bool TwxPrintOut::OnPrintPage(int pageNum)
void TwxPrintOut::InitDC(TPRINT_RCD* prcd) void TwxPrintOut::InitDC(TPRINT_RCD* prcd)
{ {
wxDC* dc = GetDC(); wxDC* dc = GetDC();
if (dc != NULL) if (dc != NULL)
delete dc; delete dc;
@ -80,18 +85,22 @@ void TwxPrintOut::InitDC(TPRINT_RCD* prcd)
if (m_prcd == NULL) if (m_prcd == NULL)
{ {
wxPrinter printer; wxPrinter printer;
#ifdef WIN32
dc = new wxPrinterDC(printer.GetPrintDialogData().GetPrintData()); dc = new wxPrinterDC(printer.GetPrintDialogData().GetPrintData());
#else
dc = new wxPostScriptDC(printer.GetPrintDialogData().GetPrintData());
#endif
} }
else else
{ {
wxPrintData data; wxPrintData data;
#ifdef WIN32 #ifdef WIN32
data.SetNativeData(OsWin32_ConvertToNativePrinterInfo(prcd->m_data, prcd->m_size)); data.SetNativeData(OsWin32_ConvertToNativePrinterInfo(prcd->m_data, prcd->m_size));
#else
data.SetNativeData(prcd->m_data);
#endif
data.ConvertFromNative(); data.ConvertFromNative();
dc = new wxPrinterDC(data); dc = new wxPrinterDC(data);
#else
dc = new wxPostScriptDC(prcd->m_data);
#endif
} }
wxSize s = dc->GetPPI(); wxSize s = dc->GetPPI();
@ -104,13 +113,13 @@ void TwxPrintOut::InitDC(TPRINT_RCD* prcd)
} }
TwxPrintOut::TwxPrintOut(TPRINT_RCD* prcd) TwxPrintOut::TwxPrintOut(TPRINT_RCD* prcd)
{ {
InitDC(prcd); InitDC(prcd);
} }
TwxPrintOut::~TwxPrintOut() TwxPrintOut::~TwxPrintOut()
{ {
wxDC* dc = GetDC(); wxDC* dc = GetDC();
if (dc != NULL) if (dc != NULL)
delete dc; delete dc;
} }
@ -127,7 +136,7 @@ wxDC& TPrintDC::GetDC(bool)
return TDC::GetDC(false); return TDC::GetDC(false);
} }
TPrintDC::TPrintDC(wxWindow* owner) : TDC(owner) TPrintDC::TPrintDC(wxWindow* owner) : TDC(owner)
{ } { }
TPrintDC::~TPrintDC() TPrintDC::~TPrintDC()
@ -139,8 +148,8 @@ TPrintDC::~TPrintDC()
// Printing management :-((((( // Printing management :-(((((
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
BOOLEAN xvt_app_escape(int esc_code, PRINT_RCD* rcd, long* ph, long* pw, long* pvr, long* phr) BOOLEAN xvt_app_escape(int esc_code, PRINT_RCD* rcd, long* ph, long* pw, long* pvr, long* phr)
{ {
*ph = *pw = *pvr = *phr = 0; *ph = *pw = *pvr = *phr = 0;
switch (esc_code) switch (esc_code)
{ {
@ -163,14 +172,14 @@ BOOLEAN xvt_app_escape(int esc_code, PRINT_RCD* rcd, long* ph, long* pw, long* p
return TRUE; return TRUE;
} }
break; break;
default: default:
break; break;
} }
return FALSE; return FALSE;
} }
BOOLEAN xvt_dm_post_page_setup(PRINT_RCD* precp) BOOLEAN xvt_dm_post_page_setup(PRINT_RCD* precp)
{ {
wxPageSetupDialog dlg((wxWindow*)TASK_WIN); wxPageSetupDialog dlg((wxWindow*)TASK_WIN);
TPRINT_RCD* rcd = (TPRINT_RCD*)precp; TPRINT_RCD* rcd = (TPRINT_RCD*)precp;
@ -178,79 +187,83 @@ BOOLEAN xvt_dm_post_page_setup(PRINT_RCD* precp)
// pdd.EnablePrinter(false); // Vieta di cambiare stampante // pdd.EnablePrinter(false); // Vieta di cambiare stampante
wxPrintData& data = pdd.GetPrintData(); wxPrintData& data = pdd.GetPrintData();
#ifdef WIN32 #ifdef WIN32
data.SetNativeData(OsWin32_ConvertToNativePrinterInfo(rcd->m_data, rcd->m_size)); data.SetNativeData(OsWin32_ConvertToNativePrinterInfo(rcd->m_data, rcd->m_size));
#else
data.SetNativeData(rcd->m_data);
#endif
data.ConvertFromNative(); data.ConvertFromNative();
#endif
if (dlg.ShowModal() == wxID_OK) if (dlg.ShowModal() == wxID_OK)
{ {
#ifdef WIN32
data.ConvertToNative(); data.ConvertToNative();
void* pHandle = data.GetNativeData(); void* pHandle = data.GetNativeData();
#ifdef WIN32
unsigned int nSize = 0; unsigned int nSize = 0;
void* ptr = OsWin32_ConvertFromNativePrinterInfo(pHandle, nSize); void* ptr = OsWin32_ConvertFromNativePrinterInfo(pHandle, nSize);
rcd->SetData(ptr, nSize); rcd->SetData(ptr, nSize);
delete ptr; delete ptr;
#else #else
rcd->SetData(pHandle, 1024); rcd->SetData((void *) &data, (unsigned int) sizeof(data));
#endif #endif
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
} }
long xvt_fmap_get_family_sizes(PRINT_RCD *precp, char *family, long *size_array, BOOLEAN *scalable, long max_sizes) long xvt_fmap_get_family_sizes(PRINT_RCD *precp, char *family, long *size_array, BOOLEAN *scalable, long max_sizes)
{ {
long size = 1; long size = 1;
size_array[0] = 13; size_array[0] = 13;
*scalable = FALSE; *scalable = FALSE;
#ifdef WIN32
if (precp != NULL) if (precp != NULL)
{ {
#ifdef WIN32
TwxPrintOut* po = new TwxPrintOut((TPRINT_RCD*)precp); TwxPrintOut* po = new TwxPrintOut((TPRINT_RCD*)precp);
size = OsWin32_EnumerateSizes(po->GetDC()->GetHDC(), family, size_array, scalable, max_sizes); size = OsWin32_EnumerateSizes(po->GetDC()->GetHDC(), family, size_array, scalable, max_sizes);
#else
size = OsLinux_EnumerateSizes(family, size_array, scalable, max_sizes);
#endif
} }
#endif
return size; return size;
} }
long xvt_fmap_get_families(PRINT_RCD *precp, char **family_array, long max_families) long xvt_fmap_get_families(PRINT_RCD *precp, char **family_array, long max_families)
{ {
long size = 1; long size = 1;
family_array[0] = xvt_str_duplicate(XVT_FFN_COURIER); family_array[0] = xvt_str_duplicate(XVT_FFN_COURIER);
#ifdef WIN32
if (precp != NULL) if (precp != NULL)
{ {
#ifdef WIN32
TwxPrintOut* po = new TwxPrintOut((TPRINT_RCD*)precp); TwxPrintOut* po = new TwxPrintOut((TPRINT_RCD*)precp);
size = OsWin32_EnumerateFamilies(po->GetDC()->GetHDC(), family_array, max_families); size = OsWin32_EnumerateFamilies(po->GetDC()->GetHDC(), family_array, max_families);
#else
size = OsLinux_EnumerateFamilies(family_array, max_families);
#endif
} }
#endif return size;
return size;
} }
void xvt_print_close(void) void xvt_print_close(void)
{ {
// Nothing to do ? // Nothing to do ?
} }
BOOLEAN xvt_print_close_page(PRINT_RCD* /*precp*/) BOOLEAN xvt_print_close_page(PRINT_RCD* /*precp*/)
{ {
BOOLEAN ok = m_po != NULL; BOOLEAN ok = m_po != NULL;
if (ok) if (ok)
m_po->GetDC()->EndPage(); m_po->GetDC()->EndPage();
return ok; return ok;
} }
PRINT_RCD* xvt_print_create(int *sizep) PRINT_RCD* xvt_print_create(int *sizep)
{ {
TPRINT_RCD* pr = NULL; TPRINT_RCD* pr = NULL;
*sizep = 0; *sizep = 0;
@ -258,19 +271,26 @@ PRINT_RCD* xvt_print_create(int *sizep)
void* data = OsWin32_GetPrinterInfo(*sizep, NULL); void* data = OsWin32_GetPrinterInfo(*sizep, NULL);
if (data != NULL) if (data != NULL)
{ {
pr = new TPRINT_RCD; pr = new TPRINT_RCD;
pr->SetData(data, *sizep); pr->SetData(data, *sizep);
*sizep += 4; // Spazio per puntatore iniziale *sizep += 4; // Spazio per puntatore iniziale
delete data; delete data;
} }
#else
wxPrinter printer;
wxPrintData &data = printer.GetPrintDialogData().GetPrintData();
data.SetPrinterName(""); //verificare
pr = new TPRINT_RCD;
pr->SetData((void *) &data, (unsigned int) sizeof(data));
#endif #endif
return pr; return pr;
} }
// Nuova funzione inventata da Aga // Nuova funzione inventata da Aga
PRINT_RCD* xvt_print_create_by_name(int* sizep, const char* name) PRINT_RCD* xvt_print_create_by_name(int* sizep, const char* name)
{ {
TPRINT_RCD* pr = NULL; TPRINT_RCD* pr = NULL;
*sizep = 0; *sizep = 0;
@ -278,37 +298,45 @@ PRINT_RCD* xvt_print_create_by_name(int* sizep, const char* name)
void* data = OsWin32_GetPrinterInfo(*sizep, name); void* data = OsWin32_GetPrinterInfo(*sizep, name);
if (data != NULL) if (data != NULL)
{ {
pr = new TPRINT_RCD; pr = new TPRINT_RCD;
pr->SetData(data, *sizep); pr->SetData(data, *sizep);
*sizep += 4; // Spazio per puntatore iniziale *sizep += 4; // Spazio per puntatore iniziale
delete data; delete data;
} }
#else
wxPrinter printer;
wxPrintData &data = printer.GetPrintDialogData().GetPrintData();
wxString PrinterName(name);
data.SetPrinterName(PrinterName); //verificare
pr = new TPRINT_RCD;
pr->SetData((void *) &data, (unsigned int) sizeof(data));
#endif #endif
return pr; return pr;
} }
WINDOW xvt_print_create_win(PRINT_RCD* precp, char* /* title */) WINDOW xvt_print_create_win(PRINT_RCD* precp, char* /* title */)
{ {
WINDOW win = NULL_WIN; WINDOW win = NULL_WIN;
if (m_po != NULL) if (m_po != NULL)
{ {
m_po->InitDC((TPRINT_RCD*)precp); m_po->InitDC((TPRINT_RCD*)precp);
m_po->OnBeginPrinting(); m_po->OnBeginPrinting();
m_po->OnBeginDocument(1, 32000); m_po->OnBeginDocument(1, 32000);
win = _print_win; win = _print_win;
} }
return win; return win;
} }
void xvt_print_destroy(PRINT_RCD *precp) void xvt_print_destroy(PRINT_RCD *precp)
{ {
// Nothing to do! // Nothing to do!
} }
RCT* xvt_print_get_next_band(void) RCT* xvt_print_get_next_band(void)
{ {
static bool yes = false; static bool yes = false;
static RCT rct; static RCT rct;
yes = !yes; yes = !yes;
@ -322,30 +350,31 @@ RCT* xvt_print_get_next_band(void)
rct.right = w; rct.right = w;
rct.bottom = h; rct.bottom = h;
return &rct; return &rct;
} }
BOOLEAN xvt_print_is_valid(PRINT_RCD* precp) BOOLEAN xvt_print_is_valid(PRINT_RCD* precp)
{ {
BOOLEAN ok = precp != NULL && precp->pr == NULL; BOOLEAN ok = precp != NULL && precp->pr == NULL;
if (ok) if (ok)
{ {
#ifdef WIN32 #ifdef WIN32
TPRINT_RCD* rcd = (TPRINT_RCD*)precp; TPRINT_RCD* rcd = (TPRINT_RCD*)precp;
ok = OsWin32_CheckPrinterInfo(rcd->m_data, rcd->m_size); ok = OsWin32_CheckPrinterInfo(rcd->m_data, rcd->m_size);
#else
// verificare (c'e' da fare qualcosa ?)
#endif #endif
} }
return ok; return ok;
} }
BOOLEAN xvt_print_open(void) BOOLEAN xvt_print_open(void)
{ {
return m_po == NULL; return m_po == NULL;
} }
BOOLEAN xvt_print_start_thread(BOOLEAN(*print_fcn)(long), long data) BOOLEAN xvt_print_start_thread(BOOLEAN(*print_fcn)(long), long data)
{ {
wxWindow* tw = (wxWindow*)TASK_WIN;
m_po = new TwxPrintOut; m_po = new TwxPrintOut;
print_fcn(data); print_fcn(data);
@ -357,20 +386,31 @@ BOOLEAN xvt_print_start_thread(BOOLEAN(*print_fcn)(long), long data)
return TRUE; return TRUE;
} }
BOOLEAN xvt_print_open_page(PRINT_RCD* precp) BOOLEAN xvt_print_open_page(PRINT_RCD* precp)
{ {
BOOLEAN ok = m_po != NULL; BOOLEAN ok = m_po != NULL;
if (ok) if (ok)
{ {
m_po->GetDC()->StartPage(); m_po->GetDC()->StartPage();
} }
return ok; return ok;
} }
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// Added by XVAGA // Added by XVAGA
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
#ifdef LINUX
static bool is_cups()
{
static int printer_system = -1;
if (printer_system < 0)
printer_system = xvt_fsys_file_exists("/etc/cups/printer.conf") ? 1 : 2;
return (printer_system == 1);
}
#endif
SLIST xvt_print_list_devices() SLIST xvt_print_list_devices()
{ {
SLIST list = xvt_slist_create(); SLIST list = xvt_slist_create();
@ -381,19 +421,75 @@ SLIST xvt_print_list_devices()
for (int i = 0; i < sizeof(buf); i++) if (buf[i] == '\0') for (int i = 0; i < sizeof(buf); i++) if (buf[i] == '\0')
{ {
const char* pname = buf+start; const char* pname = buf+start;
if (*pname == '\0') if (*pname == '\0')
break; break;
xvt_slist_add_at_elt(list, NULL, pname, NULL); xvt_slist_add_at_elt(list, NULL, pname, NULL);
start = i+1; start = i+1;
} }
#else #else
xvt_slist_add_at_elt(list, NULL, "/dev/prn", NULL); // TBI if (is_cups())
{
ifstream p("/etc/cups/printer.conf"); // vedere
char line[4096];
while (p.getline(line, sizeof(line)))
{
if (line[0] == '<')
{
char * s = strstr(line, "Printer") ;
if (s != NULL)
{
s += 7;
while (isspace(*s))
s++;
if (*s)
{
char * l = s + strlen(s) - 1;
while (isspace(*l))
l--;
*(l + 1) = '\0';
xvt_slist_add_at_elt(list, NULL, s, 0L);
}
}
}
}
}
else
{
ifstream p("/etc/printcap"); // vedere
char line[4096];
while (p.getline(line, sizeof(line)))
{
if (line[0] != '#')
{
const int len = strlen(line);
int i;
for (i = 0; i < len; i++)
{
const char c = line[i];
if (!(isalpha(c) || isdigit(c) || isblank(c)))
break;
}
line[i] = '\0';
xvt_slist_add_at_elt(list, NULL, line, 0L);
}
}
}
#endif #endif
return list; return list;
} }
BOOLEAN xvt_print_set_default_device(const char* name) BOOLEAN xvt_print_set_default_device(const char* name)
{ {
BOOLEAN ok = name && *name > ' '; BOOLEAN ok = name && *name > ' ';
#ifdef WIN32 #ifdef WIN32
if (ok) if (ok)
@ -401,24 +497,59 @@ BOOLEAN xvt_print_set_default_device(const char* name)
wxString pdev(name); wxString pdev(name);
if (pdev.Find(',') < 0) if (pdev.Find(',') < 0)
{ {
char szDevice[256]; char szDevice[256];
::GetProfileString ("devices", pdev, "", szDevice, sizeof(szDevice)); ::GetProfileString ("devices", pdev, "", szDevice, sizeof(szDevice));
pdev << ',' << szDevice; pdev << ',' << szDevice;
} }
ok = ::WriteProfileString("windows", "device", pdev) != 0; ok = ::WriteProfileString("windows", "device", pdev) != 0;
} }
#endif
return ok;
}
BOOLEAN xvt_print_get_default_device(char* name, int namesize)
{
bool ok = TRUE;
#ifdef WIN32
ok = ::GetProfileString ("windows", "device", ",,,", name, namesize) != 0;
#else #else
strcpy(name, "/dev/prn"); SORRY_BOX(); //verificare
#endif #endif
return ok; return ok;
} }
BOOLEAN xvt_print_get_default_device(char* name, int namesize)
{
bool ok = FALSE;
#ifdef WIN32
ok = ::GetProfileString ("windows", "device", ",,,", name, namesize) != 0;
#else
*name = '\0';
if (is_cups())
{
ifstream p("/etc/cups/printer.conf"); // vedere
char line[4096];
while (p.getline(line, sizeof(line)))
{
if (line[0] == '<')
{
char * s = strstr(line, "ltPrinter") ;
if (s != NULL)
{
s += 9;
while (isspace(*s))
s++;
if (*s)
{
char * l = s + strlen(s) - 1;
while (isspace(*l))
l--;
*(l + 1) = '\0';
strcpy(name, s);
}
ok = TRUE;
}
}
}
}
#endif
return ok;
}