This commit was generated by cvs2svn to compensate for changes in r5942,
which included commits to RCS files with non-trunk default branches. git-svn-id: svn://10.65.10.50/trunk@5943 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
a03d73406e
commit
0c0abd6589
BIN
support/dll/al100.dll
Executable file
BIN
support/dll/al100.dll
Executable file
Binary file not shown.
BIN
support/dll/cb5.dll
Executable file
BIN
support/dll/cb5.dll
Executable file
Binary file not shown.
BIN
support/dll/devprn.dll
Executable file
BIN
support/dll/devprn.dll
Executable file
Binary file not shown.
BIN
support/dll/dllgfm.dll
Executable file
BIN
support/dll/dllgfm.dll
Executable file
Binary file not shown.
BIN
support/dll/hardlock.vxd
Executable file
BIN
support/dll/hardlock.vxd
Executable file
Binary file not shown.
BIN
support/dll/prochook.dll
Executable file
BIN
support/dll/prochook.dll
Executable file
Binary file not shown.
BIN
support/dll/raw.drv
Executable file
BIN
support/dll/raw.drv
Executable file
Binary file not shown.
22
support/dll/readme
Executable file
22
support/dll/readme
Executable file
@ -0,0 +1,22 @@
|
||||
Posizionamento e descrizione di DRV, DLL e VXD
|
||||
----------------------------------------------
|
||||
|
||||
I seguenti files vanno installati nel direttorio PRASSI:
|
||||
|
||||
AL100.DLL Libreria per compressione/decompressione/archiviazione
|
||||
CB5.DLL Libreria per accesso ai files in formato FoxPRO
|
||||
DEVPRN.DLL Libreria per eseguire la stampa di una singola riga senza form-feed (Windows 3.1 e Windows95)
|
||||
DLLGFM.DLL Libreria per accesso alle funzioni matematiche Green-Leaf
|
||||
PROCHOOK.DLL Libreria per eseguire piu' istanze di una stessa applicazione a 16-bit (Windows 3.1 e Windows95)
|
||||
RAW.DRV Driver per l'accesso "grezzo" ai device di stampa (usata da DEVPRN.DLL)
|
||||
WINSOCK.DLL Libreria per accesso alle funzioni di rete (Win sockets: Windows 3.1 e Windows95)
|
||||
XWMBA403.DLL Libreria per accesso alle funzioni XVT
|
||||
XWMHN403.DLL Libreria per accesso alle funzioni XVT
|
||||
XWMTE403.DLL Libreria per accesso alle funzioni XVT
|
||||
|
||||
I seguenti files vanno installati nel direttorio WINDOWS\SYSTEM:
|
||||
|
||||
HARDLOCK.VXD Device Driver per accedere alla chiave di protezione (Windows 3.1 e Windows95)
|
||||
Nota: i programmi PRASSI sotto Windows 3.1 non necessitano di HARDLOCK.VXD
|
||||
ma tutti quelli che fanno uso di HARDLOCK.FLL (Nota Integrativa) SI'.
|
||||
|
BIN
support/dll/winsock.dll
Executable file
BIN
support/dll/winsock.dll
Executable file
Binary file not shown.
BIN
support/dll/xwmba403.dll
Executable file
BIN
support/dll/xwmba403.dll
Executable file
Binary file not shown.
BIN
support/dll/xwmhn403.dll
Executable file
BIN
support/dll/xwmhn403.dll
Executable file
Binary file not shown.
BIN
support/dll/xwmte403.dll
Executable file
BIN
support/dll/xwmte403.dll
Executable file
Binary file not shown.
BIN
support/esterni/dummy.ldb
Executable file
BIN
support/esterni/dummy.ldb
Executable file
Binary file not shown.
BIN
support/esterni/dummy.mdb
Executable file
BIN
support/esterni/dummy.mdb
Executable file
Binary file not shown.
BIN
support/esterni/msaes110.dll
Executable file
BIN
support/esterni/msaes110.dll
Executable file
Binary file not shown.
BIN
support/esterni/msajt112.dll
Executable file
BIN
support/esterni/msajt112.dll
Executable file
Binary file not shown.
BIN
support/esterni/msajt200.dll
Executable file
BIN
support/esterni/msajt200.dll
Executable file
Binary file not shown.
42
support/esterni/readme
Executable file
42
support/esterni/readme
Executable file
@ -0,0 +1,42 @@
|
||||
Posizionamento e descrizione dei files in installazione
|
||||
-------------------------------------------------------
|
||||
I seguenti files vanno installati nel direttorio PRASSI
|
||||
|
||||
CB0000.EXE
|
||||
TRRICE.EXE
|
||||
VCOPIA.EXE
|
||||
DUMMY.LDB
|
||||
DUMMY.MDB
|
||||
MSAES110.DLL
|
||||
MSAJT112.DLL
|
||||
MSAJT200.DLL
|
||||
VBDB300.DLL
|
||||
VBRUN300.DLL
|
||||
XBS200.DLL
|
||||
|
||||
Inoltre per ogni file exe qui presente, va creato nel direttorio
|
||||
WINDOWS, il rispettivo file INI. Pertanto avremo:
|
||||
|
||||
CB0000.INI
|
||||
TRRICE.INI
|
||||
VCOPIA.INI
|
||||
|
||||
Il contenuto di questi 3 file e' lo stesso per tutti e 3:
|
||||
|
||||
[Installable ISAMs]
|
||||
FoxPro 2.0=<<<DIRETTORIO PRASSI>>>xbs200.dll
|
||||
FoxPro 2.5=<<<DIRETTORIO PRASSI>>>xbs200.dll
|
||||
dBASE III=<<<DIRETTORIO PRASSI>>>xbs200.dll
|
||||
dBASE IV=<<<DIRETTORIO PRASSI>>>xbs200.dll
|
||||
|
||||
[dBase ISAM]
|
||||
Deleted=On
|
||||
|
||||
[Paradox ISAM]
|
||||
ParadoxNetStyle=3.x
|
||||
|
||||
|
||||
Il parametro <<<DIRETTORIO PRASSI>>> va sostituito con
|
||||
il path corretto in installazione. La creazione di questi
|
||||
files va effettuata SEMPRE, anche in aggiunta posto di lavoro.
|
||||
|
BIN
support/esterni/vbdb300.dll
Executable file
BIN
support/esterni/vbdb300.dll
Executable file
Binary file not shown.
BIN
support/esterni/vbrun300.dll
Executable file
BIN
support/esterni/vbrun300.dll
Executable file
Binary file not shown.
BIN
support/esterni/xbs200.dll
Executable file
BIN
support/esterni/xbs200.dll
Executable file
Binary file not shown.
BIN
support/faxman/class1.dat
Executable file
BIN
support/faxman/class1.dat
Executable file
Binary file not shown.
BIN
support/faxman/class2.dat
Executable file
BIN
support/faxman/class2.dat
Executable file
Binary file not shown.
BIN
support/faxman/class20.dat
Executable file
BIN
support/faxman/class20.dat
Executable file
Binary file not shown.
BIN
support/faxman/cover1.pg
Executable file
BIN
support/faxman/cover1.pg
Executable file
Binary file not shown.
BIN
support/faxman/cover2.pg
Executable file
BIN
support/faxman/cover2.pg
Executable file
Binary file not shown.
BIN
support/faxman/faxdll.dll
Executable file
BIN
support/faxman/faxdll.dll
Executable file
Binary file not shown.
BIN
support/faxman/faxman.fmf
Executable file
BIN
support/faxman/faxman.fmf
Executable file
Binary file not shown.
BIN
support/faxman/fmfaxdrv.drv
Executable file
BIN
support/faxman/fmfaxdrv.drv
Executable file
Binary file not shown.
BIN
support/faxman/im10bmp.dil
Executable file
BIN
support/faxman/im10bmp.dil
Executable file
Binary file not shown.
BIN
support/faxman/im10fax.dil
Executable file
BIN
support/faxman/im10fax.dil
Executable file
Binary file not shown.
BIN
support/faxman/im10pcx.dil
Executable file
BIN
support/faxman/im10pcx.dil
Executable file
Binary file not shown.
BIN
support/faxman/im10tif.dil
Executable file
BIN
support/faxman/im10tif.dil
Executable file
Binary file not shown.
BIN
support/faxman/im10xfax.del
Executable file
BIN
support/faxman/im10xfax.del
Executable file
Binary file not shown.
48
support/faxman/readme
Executable file
48
support/faxman/readme
Executable file
@ -0,0 +1,48 @@
|
||||
Posizionamento e descrizione per installazione di FAXMAN
|
||||
--------------------------------------------------------
|
||||
|
||||
Aggiunte da fare al file WIN.INI per installare il
|
||||
programma di gestione fax:
|
||||
|
||||
[ports]
|
||||
EASYFAX=
|
||||
|
||||
[FaxMan,EASYFAX]
|
||||
Application=<<<<DIRETTORIO PRASSI>>>>bafax.exe
|
||||
|
||||
[Printer Ports]
|
||||
FaxMan=fmfaxdrv,EASYFAX,5,5
|
||||
|
||||
[devices]
|
||||
FaxMan=fmfaxdrv,EASYFAX
|
||||
|
||||
Nota: BAFAX.EXE e' un programma sviluppato internamente, che si occupa
|
||||
dello spooling e della gestione dei documenti da inviare a FAXMAN.EXE.
|
||||
I suoi sorgenti sono in BA
|
||||
|
||||
|
||||
I seguenti files vanno installati nel direttorio PRASSI
|
||||
|
||||
FAXMAN.EXE
|
||||
FAXMAN.FMF
|
||||
COVER1.PG
|
||||
COVER2.PG
|
||||
FAXDLL.DLL
|
||||
IM10XFAX.DEL
|
||||
IM10FAX.DIL
|
||||
IM10TIF.DIL
|
||||
IM10BMP.DIL
|
||||
IM10PCX.DIL
|
||||
CLASS2.DAT
|
||||
CLASS20.DAT
|
||||
CLASS1.DAT
|
||||
|
||||
|
||||
I seguenti files vanno installati in WINDOWS\SYSTEM
|
||||
|
||||
FMFAXDRV.DRV
|
||||
|
||||
|
||||
La directory di faxman (c:\prassi) deve essere nel path.
|
||||
|
||||
|
BIN
support/interni/aga.fll
Executable file
BIN
support/interni/aga.fll
Executable file
Binary file not shown.
BIN
support/interni/aga16.dll
Executable file
BIN
support/interni/aga16.dll
Executable file
Binary file not shown.
BIN
support/interni/aga32.dll
Executable file
BIN
support/interni/aga32.dll
Executable file
Binary file not shown.
BIN
support/interni/agaexec.dll
Executable file
BIN
support/interni/agaexec.dll
Executable file
Binary file not shown.
BIN
support/interni/agalight.fll
Executable file
BIN
support/interni/agalight.fll
Executable file
Binary file not shown.
BIN
support/interni/dumb.dll
Executable file
BIN
support/interni/dumb.dll
Executable file
Binary file not shown.
BIN
support/interni/dumb.fll
Executable file
BIN
support/interni/dumb.fll
Executable file
Binary file not shown.
BIN
support/interni/dumbvb.dll
Executable file
BIN
support/interni/dumbvb.dll
Executable file
Binary file not shown.
BIN
support/interni/hardlock.dll
Executable file
BIN
support/interni/hardlock.dll
Executable file
Binary file not shown.
BIN
support/interni/hardlock.fll
Executable file
BIN
support/interni/hardlock.fll
Executable file
Binary file not shown.
55
support/interni/readme
Executable file
55
support/interni/readme
Executable file
@ -0,0 +1,55 @@
|
||||
Descrizione dei files
|
||||
---------------------
|
||||
I seguenti files sono files di supporto per applicaazioni esterne
|
||||
realizzate in Visual Basic, FoxPro, Visual FoxPro e altri.
|
||||
Vanno installati nel direttorio PRASSI.
|
||||
|
||||
Libreria Descrizione Usata da...
|
||||
|
||||
aga.fll Libreria FoxPro (16 bit) per leggere files Vecchie applicazioni
|
||||
dichiarazioni; Automaz.Ufficio
|
||||
|
||||
aga16.dll Libreria Thunking per win32s (va con aga32.dll)
|
||||
per eseguire lo spawn sincrono dei programmi Applicazioni SESA, MIVA
|
||||
|
||||
aga32.dll Libreria 32bit con aga_exec() esportata
|
||||
per piattaforme solo 32 bit (win95 winnt) Applicazioni SESA, MIVA
|
||||
|
||||
agaexec.dll Libreria 16 bit aga_exec() esportata Cespiti PRASSI
|
||||
|
||||
agalight.fll Libreria FoxPro con aga_exec() esportata Dichiarazioni Automaz.Ufficio,
|
||||
GICI PRASSI
|
||||
|
||||
hardlock.dll Libreria per leggere autorizzazioni chiave Programmi VisualBasic: VCOPIA.EXE,
|
||||
(vecchio metodo tramite GetAut()) TRRICE.EXE, CB0000.EXE
|
||||
|
||||
hardlock.fll Libreria FoxPro per legegre autorizzazioni Tutte le applicazioni FoxPro/VisualFoxPro
|
||||
chiave (vecchio metodo tramite GetAut()) tranne quelle PROCOM.
|
||||
|
||||
dumb.dll Libreria per leggere autorizzazioni moduli Nessuno
|
||||
memorizzati sulla chiave (nuovo metodo con
|
||||
crittografazione e un poco di scramble)
|
||||
|
||||
dumb.fll Libreria FoxPro per leggere autorizzazione Applicazioni PROCOM
|
||||
moduli memorizzati sulla chiave (nuovo
|
||||
metodo con crittografazione)
|
||||
|
||||
dumbvb.dll Liberia Visual Basic per leggere autorizzaz- Applicazioni PROCOM
|
||||
zioni moduli (nuovo metodo con crittografazione)
|
||||
|
||||
dump16.exe Applicazione MFC 16-bit ODBC per leggere i Cespiti PRASSI tramite CE0.EXE
|
||||
dati ditta per collegamento CESPITI SESA
|
||||
|
||||
dump32.exe Applicazione MFC 32-bit ODBC per leggere i Cespiti PRASSI tramite CE0.EXE
|
||||
dati ditta per collegamanto CESPITI SESA
|
||||
|
||||
I sorgenti per tutte le DLL/FLL sono nel direttorio SRC qui presente:
|
||||
il direttorio AGA contiene i sorgenti per DLL/FLL che iniziano con AGA
|
||||
il direttorio DUMB contiene i sorgenti per DLL/FLL che iniziano con DUMB o HARDLOCK.
|
||||
I sorgenti per dump16.exe dump32.exe sono nel modulo CE.
|
||||
dump16.exe viene compilato con Visual C++ 1.5, dump32.exe deve venire compilato
|
||||
con Visual C++ 5.0; per creare un progetto basta entrare nel wizard ed
|
||||
aggiungere i files settare la versione di RELEASE e lanciare la compilazione.
|
||||
Analogamente per AGA32.DLL: entrare nel wizard, settare il progetto di RELEASE
|
||||
per una DLL a 32 bits, settare le macro: /DDLL /DLIGHT. La macro /DWIN32 e'
|
||||
settata automaticamente.
|
1094
support/interni/src/aga/aga.cpp
Executable file
1094
support/interni/src/aga/aga.cpp
Executable file
File diff suppressed because it is too large
Load Diff
96
support/interni/src/aga/aga16.c
Executable file
96
support/interni/src/aga/aga16.c
Executable file
@ -0,0 +1,96 @@
|
||||
/* Aga16.dll. 16 bit side of the thunk for aga32.dll */
|
||||
|
||||
#ifndef APYENTRY
|
||||
#define APYENTRY
|
||||
#endif
|
||||
|
||||
#define W32SUT_16
|
||||
|
||||
#include <windows.h>
|
||||
#include <toolhelp.h>
|
||||
#include <stdio.h>
|
||||
#include <malloc.h>
|
||||
|
||||
#include "w32sut.h"
|
||||
|
||||
#define SYNCHSPAWN 1
|
||||
|
||||
UT16CBPROC glpfnUT16CallBack;
|
||||
|
||||
int FAR PASCAL LibMain (HANDLE hLibInst, WORD wDataSeg, WORD cbHeapSize, LPSTR lpszCmdLine)
|
||||
{
|
||||
return (1);
|
||||
}
|
||||
|
||||
DWORD FAR PASCAL UTInit (UT16CBPROC lpfnUT16CallBack, LPVOID lpBuf)
|
||||
{
|
||||
glpfnUT16CallBack = lpfnUT16CallBack;
|
||||
return (1);
|
||||
}
|
||||
|
||||
DWORD FAR PASCAL UTProc (LPVOID lpBuf, DWORD dwFunc)
|
||||
{
|
||||
switch (dwFunc)
|
||||
{
|
||||
case SYNCHSPAWN:
|
||||
{
|
||||
WORD WM_WAKEUP = RegisterWindowMessage("WAKEUP");
|
||||
UINT nCmdShow;
|
||||
LPCSTR lpszCmdLine;
|
||||
HINSTANCE inst;
|
||||
HTASK child = NULL;
|
||||
TASKENTRY te;
|
||||
BOOL ok;
|
||||
BOOL again = TRUE;
|
||||
BYTE i;
|
||||
MSG msg;
|
||||
|
||||
lpszCmdLine = (LPSTR) ((LPDWORD)lpBuf)[0];
|
||||
nCmdShow = (UINT) ((LPDWORD)lpBuf)[1];
|
||||
|
||||
|
||||
inst = WinExec(lpszCmdLine, nCmdShow);
|
||||
|
||||
te.dwSize = sizeof(TASKENTRY);
|
||||
for (ok = TaskFirst(&te); ok && child == NULL; ok = TaskNext(&te))
|
||||
if (te.hInst == inst)
|
||||
{
|
||||
child = te.hTask;
|
||||
break;
|
||||
}
|
||||
|
||||
for (i = 0; again; i++)
|
||||
{/* Esegue la TaskFindHandle ogni 256 cicli */
|
||||
if (i == 0 && ok && TaskFindHandle(&te, child) == FALSE)
|
||||
break;
|
||||
|
||||
/* Questo (utilizzato in agalight.dll) metodo non funziona in Win32s.
|
||||
|
||||
GetMessage(&msg, (HWND)NULL, 0, 0);
|
||||
TranslateMessage(&msg);
|
||||
if (msg.message == WM_WAKEUP && msg.wParam == child)
|
||||
break;
|
||||
|
||||
*/
|
||||
|
||||
while (PeekMessage(&msg, NULL, 0,0, PM_REMOVE) && again)
|
||||
{
|
||||
if (msg.message == WM_QUIT ||
|
||||
(msg.message == WM_WAKEUP && msg.wParam == child))
|
||||
again=FALSE;
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
return inst >= 32;
|
||||
}
|
||||
}
|
||||
return ((DWORD) -1L);
|
||||
}
|
||||
|
||||
int FAR PASCAL _WEP(int bSystemExit)
|
||||
{
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
9
support/interni/src/aga/aga16.def
Executable file
9
support/interni/src/aga/aga16.def
Executable file
@ -0,0 +1,9 @@
|
||||
LIBRARY AGA16
|
||||
EXETYPE WINDOWS
|
||||
CODE PRELOAD MOVEABLE DISCARDABLE
|
||||
DATA PRELOAD MOVEABLE SINGLE
|
||||
HEAPSIZE 1024
|
||||
EXPORTS
|
||||
|
||||
UTInit @1
|
||||
UTProc @2
|
9
support/interni/src/aga/aga16.lrf
Executable file
9
support/interni/src/aga/aga16.lrf
Executable file
@ -0,0 +1,9 @@
|
||||
aga16
|
||||
..\..\aga16.dll
|
||||
nul
|
||||
w32sut16+
|
||||
toolhelp+
|
||||
libw+
|
||||
/NOD:llibce ldllcew
|
||||
aga16.def
|
||||
|
135
support/interni/src/aga/agadll.txt
Executable file
135
support/interni/src/aga/agadll.txt
Executable file
@ -0,0 +1,135 @@
|
||||
INFORMAZIONI SULL'UTILIZZO DELLE DLL PER CHIAMARE PROGRAMMI ESTERNI
|
||||
===================================================================
|
||||
|
||||
Le DLL utilizzabili sono 2:
|
||||
|
||||
AGAEXEC.DLL (Analoga alla AGALIGHT.FLL)
|
||||
AGA32.DLL : questa DLL necessita di un secondo componente: AGA16.DLL (vedi sotto la spiegazione)
|
||||
|
||||
|
||||
|
||||
AGALIGHT.DLL viene utilizzata per programmi a 16 bit
|
||||
AGA32.DLL viene utilizzata per programmi a 32 bit su piattaforme a 32 bit (Win95 WinNT)
|
||||
AGA16.DLL viene utilizzata per programmi a 32 bit su piattaforme con Win32s (Windows 3.11 + Win32s)
|
||||
|
||||
AGA32.DLL e AGA16.DLL vanno SEMPRE in coppia in quanto inerenti a programmi a 32 bit.
|
||||
|
||||
Quindi per programmi a 16 bit si utilizza AGAEXEC.DLL, mentre per programmi a 32
|
||||
si utilizza AGA32.DLL, la quale a sua volta si accorgera' automaticamente di quale
|
||||
tipo di piattaforma si tratti, collegandosi ad AGA16.DLL nel caso vi siano chiamate a funzione
|
||||
Aga_exec(). Il motivo per il quale e' stata realizzata la versione per Win32s e' che le funzioni del
|
||||
Kernel di Windows a 32 bit utilizzate in AGA32.DLL non hanno un corretto funzionamento in Win32s.
|
||||
Pertanto e' stato necessario un thunking a 16 bit.
|
||||
|
||||
FUNZIONI ESPORTATE
|
||||
------------------
|
||||
|
||||
int Aga_setvar(const char* p, const char* u, const char* t)
|
||||
const char* Aga_workdir()
|
||||
int Aga_wakeup()
|
||||
int Aga_exec(const char* p)
|
||||
|
||||
|
||||
|
||||
|
||||
*******************************************************
|
||||
Aga_setvar(const char* p, const char* u, const char* t)
|
||||
*******************************************************
|
||||
|
||||
Serve per inizializzare alcune variabili interne alla DLL.
|
||||
Le stringhe da passare sono, in ordine, le seguenti:
|
||||
|
||||
p : contenuto della variabile d'ambiente PREFPATH
|
||||
u : nome dell'utente con il quale viene chiamato il programma PRASSI
|
||||
t : contenuto della variabile d'ambiente TMP o TEMP se non esiste la precedente
|
||||
|
||||
La sua chiamata e' obbligatoria se si intende utilizzare anche AGA_WORKDIR(),
|
||||
solitamente la si applica all'inizio del programma. Se si utilizzano solo
|
||||
Aga_wakeup() o Aga_exec() non e' necessario il suo utilizzo.
|
||||
|
||||
Esempio.
|
||||
...
|
||||
strcpy(a,"");
|
||||
strcpy(a,getenv("PREFPATH"));
|
||||
if (!strlen(a))
|
||||
strcpy(a,"PREFIX.TXT");
|
||||
strcpy(b,"PRASSI");
|
||||
strcpy(c,"c:\\tmp");
|
||||
Aga_setvar(a,b,c);
|
||||
...
|
||||
|
||||
|
||||
|
||||
|
||||
**************************
|
||||
const char* Aga_workdir()
|
||||
**************************
|
||||
|
||||
Serve a ritornare il prefisso dati corrente dei programmi PRASSI, composto
|
||||
tramite i contenuti di PATHPREF.INI e il file identificato dal contenuto della
|
||||
variabile d'ambiente PREFPATH.
|
||||
|
||||
Esempio:
|
||||
|
||||
Il file PATHPREF.INI presente sotto il direttorio programmi PRASSI contiene f:\dati
|
||||
La variabile PREFPATH vale c:\prassi\prefix.txt
|
||||
Il file C:\PRASSI\PREFIX.TXT identificato da PREFPATH contiene 00001a come ditta corrente.
|
||||
Il risultato della chiamata a AGA_WORKDIR sara'
|
||||
|
||||
f:\dati\00001a
|
||||
|
||||
|
||||
|
||||
|
||||
****************
|
||||
int Aga_wakeup()
|
||||
****************
|
||||
|
||||
Serve per togliere dall'attesa il programma chiamante. La chiamata
|
||||
va effettuata prima dell'uscita del programma. Questa funzione
|
||||
viene utilizzata all'interno del programma chiamato; e' tipico
|
||||
l'utilizzo in coppia con la Aga_exec(), che permette di eseguire un
|
||||
programma figlio e di attendere la fine della sua esecuzione.
|
||||
Tutti i programmi PRASSI effettuano le stesse istruzioni della Aga_wakeup()
|
||||
prima della fine, in modo che eventuali programmi chiamanti possano poi
|
||||
ripristinare il loro stato.
|
||||
|
||||
Esempio:
|
||||
|
||||
Programma padre Programma figlio
|
||||
|
||||
START
|
||||
|
|
||||
Istruzione 1
|
||||
|
|
||||
Aga_exec()---------------> INIZIO
|
||||
|
|
||||
Istruzione 1
|
||||
|
|
||||
Aga_wakeup()
|
||||
|
|
||||
Istruzione 2 <------------- FINE
|
||||
|
|
||||
FINE
|
||||
|
||||
|
||||
|
||||
|
||||
***************************
|
||||
int Aga_exec(const char* p)
|
||||
***************************
|
||||
|
||||
Serve per eseguire un programma figlio ed attendere la sua fine (effettua
|
||||
una WinExec() sincrona).
|
||||
Il parametro p contiene il pathname completo del programma da eseguire.
|
||||
|
||||
|
||||
Esempio:
|
||||
|
||||
Aga_exec("ba1.exe /uPRASSI");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
12
support/interni/src/aga/agaexec.def
Executable file
12
support/interni/src/aga/agaexec.def
Executable file
@ -0,0 +1,12 @@
|
||||
LIBRARY AGAEXEC
|
||||
EXETYPE WINDOWS 3.0
|
||||
CODE PRELOAD MOVABLE SHARED
|
||||
DATA SHARED PRELOAD
|
||||
|
||||
|
||||
EXPORTS
|
||||
|
||||
AGA_SETVAR @1
|
||||
AGA_EXEC @2
|
||||
AGA_WAKEUP @3
|
||||
AGA_WORKDIR @4
|
8
support/interni/src/aga/agaexec.lrf
Executable file
8
support/interni/src/aga/agaexec.lrf
Executable file
@ -0,0 +1,8 @@
|
||||
agaexec
|
||||
..\..\agaexec.dll
|
||||
nul
|
||||
libw+
|
||||
toolhelp+
|
||||
/NOD:llibce ldllcew
|
||||
agaexec.def
|
||||
|
7
support/interni/src/aga/agafll.def
Executable file
7
support/interni/src/aga/agafll.def
Executable file
@ -0,0 +1,7 @@
|
||||
LIBRARY AGAFLL
|
||||
EXETYPE WINDOWS 3.0
|
||||
CODE PRELOAD MOVABLE SHARED
|
||||
DATA SHARED PRELOAD
|
||||
|
||||
INCLUDE CB5IMP.DEF
|
||||
|
BIN
support/interni/src/aga/agafll.doc
Executable file
BIN
support/interni/src/aga/agafll.doc
Executable file
Binary file not shown.
12
support/interni/src/aga/agafll.lrf
Executable file
12
support/interni/src/aga/agafll.lrf
Executable file
@ -0,0 +1,12 @@
|
||||
agafll+ccustio+cfiles+codeb+csort+
|
||||
getaut+hlprot+ioresult+upstring+tmpfname+
|
||||
array+checks+files+date+isam+object+
|
||||
prefix+scanner+stdtypes+strings+utility+
|
||||
..\foxlck\libentry
|
||||
..\..\aga.fll
|
||||
nul
|
||||
..\foxlck\proapiml+
|
||||
libw+
|
||||
/NOD:llibce ldllcew
|
||||
agafll.def
|
||||
|
7
support/interni/src/aga/agalight.def
Executable file
7
support/interni/src/aga/agalight.def
Executable file
@ -0,0 +1,7 @@
|
||||
LIBRARY AGALIGHT
|
||||
EXETYPE WINDOWS 3.0
|
||||
CODE PRELOAD MOVABLE SHARED
|
||||
DATA SHARED PRELOAD
|
||||
|
||||
|
||||
|
10
support/interni/src/aga/agalight.lrf
Executable file
10
support/interni/src/aga/agalight.lrf
Executable file
@ -0,0 +1,10 @@
|
||||
agalight+
|
||||
..\foxlck\libentry.obj
|
||||
..\..\agalight.fll
|
||||
nul
|
||||
..\foxlck\proapiml+
|
||||
toolhelp+
|
||||
libw+
|
||||
/NOD:llibce ldllcew
|
||||
agalight.def
|
||||
|
462
support/interni/src/aga/cb5imp.def
Executable file
462
support/interni/src/aga/cb5imp.def
Executable file
@ -0,0 +1,462 @@
|
||||
|
||||
IMPORTS
|
||||
C4ATOD = CB5.1
|
||||
C4ATOI = CB5.2
|
||||
C4ATOL = CB5.3
|
||||
C4DESCEND = CB5.4
|
||||
C4DESCEND_DATE = CB5.5
|
||||
C4DESCEND_NUM = CB5.6
|
||||
C4DESCEND_STR = CB5.7
|
||||
C4ENCODE = CB5.8
|
||||
CODE4ALLOC = CB5.9
|
||||
|
||||
D4ALIAS = CB5.10
|
||||
D4ALIAS_SET = CB5.11
|
||||
D4APPEND = CB5.12
|
||||
D4APPEND_BLANK = CB5.13
|
||||
D4APPEND_DATA = CB5.14
|
||||
D4APPEND_START = CB5.15
|
||||
D4BLANK = CB5.16
|
||||
D4BOF = CB5.17
|
||||
D4BOTTOM = CB5.18
|
||||
D4CHANGED = CB5.19
|
||||
D4CHECK = CB5.20
|
||||
D4CLOSE = CB5.21
|
||||
D4CLOSE_ALL = CB5.22
|
||||
D4CREATE = CB5.23
|
||||
D4DATA = CB5.24
|
||||
D4DELETE = CB5.25
|
||||
D4DELETED = CB5.26
|
||||
D4EOF = CB5.27
|
||||
D4FIELD = CB5.28
|
||||
D4FIELD_INFO = CB5.29
|
||||
D4FIELD_J = CB5.30
|
||||
D4FIELD_NUMBER = CB5.31
|
||||
D4FLUSH = CB5.32
|
||||
D4FLUSH_DATA = CB5.33
|
||||
D4FLUSH_FILES = CB5.34
|
||||
D4FREE_BLOCKS = CB5.35
|
||||
D4GO = CB5.36
|
||||
D4GO_DATA = CB5.37
|
||||
D4GO_EOF = CB5.38
|
||||
D4INDEX = CB5.39
|
||||
D4INIT = CB5.40
|
||||
D4INIT_UNDO = CB5.41
|
||||
D4LOCK = CB5.42
|
||||
D4LOCK_ALL = CB5.43
|
||||
D4LOCK_APPEND = CB5.44
|
||||
D4LOCK_FILE = CB5.45
|
||||
D4LOCK_GROUP = CB5.46
|
||||
D4LOCK_INDEX = CB5.47
|
||||
D4LOCK_TEST = CB5.48
|
||||
D4LOCK_TEST_APPEND = CB5.49
|
||||
D4LOCK_TEST_FILE = CB5.50
|
||||
D4LOCK_TEST_INDEX = CB5.51
|
||||
D4MEMO_COMPRESS = CB5.52
|
||||
D4NUM_FIELDS = CB5.53
|
||||
D4OPEN = CB5.54
|
||||
D4OPT_START = CB5.55
|
||||
D4OPT_SUSPEND = CB5.56
|
||||
D4OPTIMIZE = CB5.57
|
||||
D4OPTIMIZE_WRITE = CB5.58
|
||||
D4PACK = CB5.59
|
||||
D4PACK_DATA = CB5.60
|
||||
D4POSITION = CB5.61
|
||||
D4POSITION_SET = CB5.62
|
||||
D4READ = CB5.63
|
||||
D4READ_OLD = CB5.64
|
||||
D4RECALL = CB5.65
|
||||
D4RECCOUNT = CB5.66
|
||||
D4RECNO = CB5.67
|
||||
D4RECORD = CB5.68
|
||||
D4RECORD_POSITION = CB5.69
|
||||
D4RECORD_WIDTH = CB5.70
|
||||
D4REFRESH = CB5.71
|
||||
D4REFRESH_RECORD = CB5.72
|
||||
D4REINDEX = CB5.73
|
||||
D4SEEK = CB5.74
|
||||
D4SEEK_DOUBLE = CB5.75
|
||||
D4SKIP = CB5.76
|
||||
D4TAG = CB5.77
|
||||
D4TAG_DEFAULT = CB5.78
|
||||
D4TAG_NEXT = CB5.79
|
||||
D4TAG_PREV = CB5.80
|
||||
D4TAG_SELECT = CB5.81
|
||||
D4TAG_SELECTED = CB5.82
|
||||
D4TOP = CB5.83
|
||||
D4UNLOCK = CB5.84
|
||||
D4UNLOCK_FILES = CB5.85
|
||||
D4VALIDATE_MEMO_IDS = CB5.86
|
||||
D4WRITE = CB5.87
|
||||
D4WRITE_DATA = CB5.88
|
||||
D4WRITE_KEYS = CB5.89
|
||||
D4ZAP = CB5.90
|
||||
D4ZAP_DATA = CB5.91
|
||||
|
||||
DATE4ASSIGN = CB5.92
|
||||
DATE4CDOW = CB5.93
|
||||
DATE4CMONTH = CB5.94
|
||||
DATE4DAY = CB5.95
|
||||
DATE4DOW = CB5.96
|
||||
DATE4FORMAT = CB5.97
|
||||
DATE4FORMAT_MDX = CB5.98
|
||||
DATE4INIT = CB5.99
|
||||
DATE4LONG = CB5.100
|
||||
DATE4MONTH = CB5.101
|
||||
DATE4TIME_NOW = CB5.102
|
||||
DATE4TODAY = CB5.103
|
||||
DATE4YEAR = CB5.104
|
||||
|
||||
E4 = CB5.105
|
||||
E4CODE = CB5.106
|
||||
E4DESCRIBE = CB5.107
|
||||
E4EXIT = CB5.108
|
||||
E4EXIT_TEST = CB5.109
|
||||
E4HOOK = CB5.110
|
||||
E4SET = CB5.111
|
||||
E4SEVERE = CB5.112
|
||||
E4TEXT = CB5.113
|
||||
|
||||
EXPR4CALC_CREATE = CB5.114
|
||||
EXPR4DOUBLE = CB5.115
|
||||
EXPR4FREE = CB5.116
|
||||
EXPR4KEY = CB5.117
|
||||
EXPR4KEY_LEN = CB5.118
|
||||
EXPR4LEN = CB5.119
|
||||
EXPR4PARSE = CB5.120
|
||||
EXPR4SOURCE = CB5.121
|
||||
EXPR4TRUE = CB5.122
|
||||
EXPR4TYPE = CB5.123
|
||||
EXPR4VARY = CB5.124
|
||||
|
||||
F4ASSIGN = CB5.125
|
||||
F4ASSIGN_CHAR = CB5.126
|
||||
F4ASSIGN_DOUBLE = CB5.127
|
||||
F4ASSIGN_FIELD = CB5.128
|
||||
F4ASSIGN_INT = CB5.129
|
||||
F4ASSIGN_LONG = CB5.130
|
||||
F4ASSIGN_N = CB5.131
|
||||
F4ASSIGN_PTR = CB5.132
|
||||
F4BLANK = CB5.133
|
||||
F4CHAR = CB5.134
|
||||
F4DATA = CB5.135
|
||||
F4DECIMALS = CB5.136
|
||||
F4DOUBLE = CB5.137
|
||||
F4INT = CB5.138
|
||||
F4LEN = CB5.139
|
||||
F4LONG = CB5.140
|
||||
F4MEMO_ASSIGN = CB5.150
|
||||
F4MEMO_ASSIGN_N = CB5.151
|
||||
F4MEMO_FREE = CB5.152
|
||||
F4MEMO_LEN = CB5.153
|
||||
F4MEMO_NCPY = CB5.154
|
||||
F4MEMO_PTR = CB5.155
|
||||
F4MEMO_STR = CB5.156
|
||||
F4NAME = CB5.157
|
||||
F4NCPY = CB5.158
|
||||
F4PTR = CB5.159
|
||||
F4STR = CB5.160
|
||||
F4TRUE = CB5.161
|
||||
F4TYPE = CB5.162
|
||||
|
||||
FILE4CLOSE = CB5.163
|
||||
FILE4CREATE = CB5.164
|
||||
FILE4FLUSH = CB5.165
|
||||
FILE4LEN = CB5.166
|
||||
FILE4LEN_SET = CB5.167
|
||||
FILE4LOCK = CB5.168
|
||||
FILE4LOCK_HOOK = CB5.169
|
||||
FILE4OPEN = CB5.170
|
||||
FILE4OPTIMIZE = CB5.171
|
||||
FILE4OPTIMIZE_WRITE = CB5.172
|
||||
FILE4READ = CB5.173
|
||||
FILE4READ_ALL = CB5.174
|
||||
FILE4READ_ERROR = CB5.175
|
||||
FILE4REFRESH = CB5.176
|
||||
FILE4REPLACE = CB5.177
|
||||
FILE4TEMP = CB5.178
|
||||
FILE4UNLOCK = CB5.179
|
||||
FILE4WRITE = CB5.180
|
||||
FILE4SEQ_READ = CB5.181
|
||||
FILE4SEQ_READ_ALL = CB5.182
|
||||
FILE4SEQ_READ_INIT = CB5.183
|
||||
FILE4SEQ_WRITE = CB5.184
|
||||
FILE4SEQ_WRITE_FLUSH = CB5.185
|
||||
FILE4SEQ_WRITE_INIT = CB5.186
|
||||
FILE4SEQ_WRITE_REPEAT = CB5.187
|
||||
|
||||
I4CLOSE = CB5.188
|
||||
I4CREATE = CB5.189
|
||||
I4LOCK = CB5.190
|
||||
I4OPEN = CB5.191
|
||||
I4REINDEX = CB5.192
|
||||
I4TAG = CB5.193
|
||||
I4TAG_INFO = CB5.194
|
||||
I4UNLOCK = CB5.195
|
||||
|
||||
L4ADD = CB5.196
|
||||
L4ADD_AFTER = CB5.197
|
||||
L4ADD_BEFORE = CB5.198
|
||||
L4FIRST = CB5.199
|
||||
L4LAST = CB5.200
|
||||
L4NEXT = CB5.201
|
||||
L4POP = CB5.202
|
||||
L4PREV = CB5.203
|
||||
L4REMOVE = CB5.204
|
||||
|
||||
MEM4ALLOC = CB5.205
|
||||
MEM4CREATE = CB5.206
|
||||
MEM4FREE = CB5.207
|
||||
MEM4RELEASE = CB5.208
|
||||
MEM4RESET = CB5.209
|
||||
|
||||
RELATE4BOTTOM = CB5.210
|
||||
RELATE4CHANGED = CB5.211
|
||||
RELATE4CREATE_SLAVE = CB5.212
|
||||
RELATE4DO = CB5.213
|
||||
RELATE4DO_ONE = CB5.214
|
||||
RELATE4ERROR_ACTION = CB5.215
|
||||
RELATE4FREE = CB5.216
|
||||
RELATE4INIT = CB5.217
|
||||
RELATE4LOCK = CB5.218
|
||||
RELATE4MATCH_LEN = CB5.219
|
||||
RELATE4NEXT = CB5.220
|
||||
RELATE4QUERY_SET = CB5.221
|
||||
RELATE4SKIP = CB5.222
|
||||
RELATE4SKIP_ENABLE = CB5.223
|
||||
RELATE4SORT_SET = CB5.224
|
||||
RELATE4TOP = CB5.225
|
||||
RELATE4TYPE = CB5.226
|
||||
RELATE4UNLOCK = CB5.227
|
||||
|
||||
SORT4FREE = CB5.229
|
||||
SORT4GET = CB5.230
|
||||
SORT4GET_INIT = CB5.231
|
||||
SORT4INIT = CB5.232
|
||||
SORT4PUT = CB5.233
|
||||
|
||||
T4ADD = CB5.234
|
||||
T4ADD_CALC = CB5.235
|
||||
T4BOTTOM = CB5.236
|
||||
T4DOWN = CB5.237
|
||||
T4DUMP = CB5.238
|
||||
T4EOF = CB5.239
|
||||
T4FLUSH = CB5.240
|
||||
T4FREE_ALL = CB5.241
|
||||
T4GO = CB5.242
|
||||
T4KEY = CB5.243
|
||||
T4OPEN = CB5.244
|
||||
T4POSITION = CB5.245
|
||||
T4POSITION_SET = CB5.246
|
||||
T4RECNO = CB5.247
|
||||
T4REMOVE = CB5.248
|
||||
T4REMOVE_CALC = CB5.249
|
||||
T4SEEK = CB5.250
|
||||
T4SKIP = CB5.251
|
||||
T4TOP = CB5.252
|
||||
T4UP = CB5.253
|
||||
T4UP_TO_ROOT = CB5.254
|
||||
|
||||
U4ALLOC = CB5.255
|
||||
U4ALLOC_AGAIN = CB5.256
|
||||
U4ALLOC_ER = CB5.257
|
||||
U4ALLOC_FREE = CB5.258
|
||||
U4FREE = CB5.259
|
||||
U4NAME_CHAR = CB5.260
|
||||
U4NAME_EXT = CB5.261
|
||||
U4NAME_PIECE = CB5.262
|
||||
U4NCPY = CB5.263
|
||||
U4YYMMDD = CB5.264
|
||||
|
||||
EXPR4CALC_LOOKUP = CB5.265
|
||||
C4TRIM_N = CB5.266
|
||||
EXPR4FUNCTIONS = CB5.267
|
||||
C4DTOA45 = CB5.268
|
||||
EXPR4CALC_DELETE = CB5.269
|
||||
E4LOOKUP = CB5.270
|
||||
C4UPPER = CB5.271
|
||||
EXPR4CALC_NAME_CHANGE = CB5.272
|
||||
EXPR4CALC_MODIFY = CB5.273
|
||||
RELATE4FREE_RELATE = CB5.274
|
||||
EXPR4CALC_MASSAGE = CB5.275
|
||||
D4UPDATE_HEADER = CB5.276
|
||||
U4SWITCH = CB5.277
|
||||
DATE4FORMAT_MDX2 = CB5.278
|
||||
EXPR4DOUBLE2 = CB5.279
|
||||
D4POSITION2 = CB5.280
|
||||
F4DOUBLE2 = CB5.281
|
||||
T4POSITION2 = CB5.282
|
||||
F4MEMO_SET_LEN = CB5.283
|
||||
C4LTOA45 = CB5.284
|
||||
I4ADD_TAG = CB5.285
|
||||
EXPR4CALC_RESET = CB5.286
|
||||
T4IS_DESCENDING = CB5.287
|
||||
I4IS_PRODUCTION = CB5.288
|
||||
T4UNIQUE = CB5.289
|
||||
D4SEEK_N = CB5.290
|
||||
C4DLL_INST = CB5.291
|
||||
C4ATOD2 = CB5.292
|
||||
F4MEMO_CHECK = CB5.293
|
||||
D4UNLOCK_APPEND = CB5.294
|
||||
D4UNLOCK_DATA = CB5.295
|
||||
D4UNLOCK_FILE = CB5.296
|
||||
D4UNLOCK_RECORDS = CB5.297
|
||||
C4LOWER = CB5.298
|
||||
I4CHECK = CB5.299
|
||||
U4REMOVE = CB5.300
|
||||
|
||||
AREA4CREATE = CB5.301
|
||||
AREA4FREE = CB5.302
|
||||
AREA4NUMOBJECTS = CB5.303
|
||||
AREA4OBJFIRST = CB5.304
|
||||
AREA4OBJLAST = CB5.305
|
||||
AREA4OBJNEXT = CB5.306
|
||||
AREA4OBJPREV = CB5.307
|
||||
AREA4PAGEBREAK = CB5.308
|
||||
GROUP4CREATE = CB5.309
|
||||
GROUP4FOOTERFIRST = CB5.310
|
||||
GROUP4FOOTERNEXT = CB5.311
|
||||
GROUP4FOOTERPREV = CB5.312
|
||||
GROUP4FREE = CB5.313
|
||||
GROUP4HEADERFIRST = CB5.314
|
||||
GROUP4HEADERNEXT = CB5.315
|
||||
GROUP4HEADERPREV = CB5.316
|
||||
GROUP4NUMFOOTERS = CB5.317
|
||||
GROUP4NUMHEADERS = CB5.318
|
||||
GROUP4REPEATHEADER = CB5.319
|
||||
GROUP4RESETEXPRSET = CB5.320
|
||||
GROUP4RESETPAGE = CB5.321
|
||||
GROUP4RESETPAGENUM = CB5.322
|
||||
GROUP4SWAPFOOTER = CB5.323
|
||||
GROUP4SWAPHEADER = CB5.324
|
||||
OBJ4BITMAPSTATICCREATE = CB5.325
|
||||
OBJ4BITMAPSTATICFREE = CB5.326
|
||||
OBJ4BITMAPFILECREATE = CB5.327
|
||||
OBJ4BITMAPFILEFREE = CB5.328
|
||||
OBJ4BITMAPFIELDCREATE = CB5.329
|
||||
OBJ4BITMAPFIELDFREE = CB5.330
|
||||
OBJ4BRACKETS = CB5.331
|
||||
OBJ4CALCCREATE = CB5.332
|
||||
OBJ4CALCFREE = CB5.333
|
||||
OBJ4DATEFORMAT = CB5.334
|
||||
OBJ4DECIMALS = CB5.335
|
||||
OBJ4DELETE = CB5.336
|
||||
OBJ4DISPLAYONCE = CB5.337
|
||||
OBJ4DISPLAYZERO = CB5.338
|
||||
OBJ4EXPRCREATE = CB5.339
|
||||
OBJ4EXPRFREE = CB5.340
|
||||
OBJ4FIELDCREATE = CB5.341
|
||||
OBJ4FIELDFREE = CB5.342
|
||||
OBJ4FRAMECORNERS = CB5.343
|
||||
OBJ4FRAMECREATE = CB5.344
|
||||
OBJ4FRAMEFILL = CB5.345
|
||||
OBJ4FRAMEFREE = CB5.346
|
||||
OBJ4JUSTIFY = CB5.347
|
||||
OBJ4LEADINGZERO = CB5.348
|
||||
OBJ4LINECREATE = CB5.349
|
||||
OBJ4LINEFREE = CB5.350
|
||||
OBJ4LINEWIDTH = CB5.351
|
||||
OBJ4LOOKAHEAD = CB5.352
|
||||
OBJ4NUMERICTYPE = CB5.353
|
||||
OBJ4STYLE = CB5.354
|
||||
OBJ4TEXTCREATE = CB5.355
|
||||
OBJ4TEXTFREE = CB5.356
|
||||
OBJ4TOTALCREATE = CB5.357
|
||||
OBJ4TOTALFREE = CB5.358
|
||||
RELATE4RETRIEVE = CB5.359
|
||||
RELATE4SAVE = CB5.360
|
||||
REPORT4CAPTION = CB5.361
|
||||
REPORT4CURRENCY = CB5.362
|
||||
REPORT4DATEFORMAT = CB5.363
|
||||
REPORT4DECIMAL = CB5.364
|
||||
REPORT4DO = CB5.365
|
||||
REPORT4FREE = CB5.366
|
||||
REPORT4GENERATEPAGE = CB5.367
|
||||
REPORT4GROUPFIRST = CB5.368
|
||||
REPORT4GROUPLAST = CB5.369
|
||||
REPORT4GROUPLOOKUP = CB5.370
|
||||
REPORT4GROUPNEXT = CB5.371
|
||||
REPORT4GROUPPREV = CB5.372
|
||||
REPORT4GROUPHARDRESETS = CB5.373
|
||||
REPORT4INIT = CB5.374
|
||||
REPORT4MARGINS = CB5.375
|
||||
REPORT4NUMGROUPS = CB5.376
|
||||
REPORT4NUMSTYLES = CB5.377
|
||||
REPORT4OUTPUT = CB5.378
|
||||
REPORT4PAGEFREE = CB5.379
|
||||
REPORT4PAGEHEADERFOOTER = CB5.380
|
||||
REPORT4PAGEINIT = CB5.381
|
||||
REPORT4PAGEMARGINSGET = CB5.382
|
||||
REPORT4PAGEOBJFIRST = CB5.383
|
||||
REPORT4PAGEOBJNEXT = CB5.384
|
||||
REPORT4PAGESIZE = CB5.385
|
||||
REPORT4PAGESIZEGET = CB5.386
|
||||
REPORT4PARENT = CB5.387
|
||||
REPORT4PRINTERSELECT = CB5.388
|
||||
REPORT4PRINTERDC = CB5.389
|
||||
REPORT4QUERYSET = CB5.390
|
||||
REPORT4RETRIEVE = CB5.391
|
||||
REPORT4SAVE = CB5.392
|
||||
REPORT4SEPARATOR = CB5.393
|
||||
REPORT4SORTSET = CB5.394
|
||||
REPORT4STYLEFIRST = CB5.395
|
||||
REPORT4STYLELAST = CB5.396
|
||||
REPORT4STYLENEXT = CB5.397
|
||||
REPORT4STYLESELECT = CB5.398
|
||||
REPORT4STYLESELECTED = CB5.399
|
||||
REPORT4STYLESHEETLOAD = CB5.400
|
||||
REPORT4STYLESHEETSAVE = CB5.401
|
||||
REPORT4TITLEPAGE = CB5.402
|
||||
REPORT4TITLESUMMARY = CB5.403
|
||||
REPORT4TOSCREEN = CB5.404
|
||||
STYLE4COLOR = CB5.405
|
||||
STYLE4CREATE = CB5.406
|
||||
STYLE4DELETE = CB5.407
|
||||
STYLE4FREE = CB5.408
|
||||
STYLE4INDEX = CB5.409
|
||||
STYLE4LOOKUP = CB5.410
|
||||
TOTAL4CREATE = CB5.411
|
||||
TOTAL4FREE = CB5.412
|
||||
REPORT4DATADO = CB5.413
|
||||
TOTAL4ADDCONDITION = CB5.414
|
||||
REPORT4DATAFILESET = CB5.415
|
||||
REPORT4DATAGROUP = CB5.416
|
||||
OBJ4DATAFIELDSET = CB5.417
|
||||
WRITEDIB = CB5.418
|
||||
GETDIB = CB5.419
|
||||
PALETTESIZE = CB5.420
|
||||
FINDDIBBITS = CB5.421
|
||||
REPORT4INDEX_TYPE = CB5.422
|
||||
AREA4ADD_OBJECT = CB5.423
|
||||
OBJ4REMOVE = CB5.424
|
||||
GROUP4POSITIONSET = CB5.425
|
||||
REPORT4GET_PRINTERIC = CB5.426
|
||||
TOTAL4LOOKUP = CB5.427
|
||||
AREA4SORT_OBJ_TREE = CB5.428
|
||||
RELATE4LOOKUP_DATA = CB5.429
|
||||
REPORT4RETRIEVE2 = CB5.430
|
||||
RELATE4SAVE2 = CB5.431
|
||||
RELATE4RETRIEVE2 = CB5.432
|
||||
U4DELAY_SEC = CB5.433
|
||||
|
||||
T4BLOCK = CB5.451
|
||||
T4CHECK = CB5.452
|
||||
|
||||
CTRL4ADDCODE = CB5.500
|
||||
CTRL4CODELISTINIT = CB5.501
|
||||
CTRL4FREECTRLNODE = CB5.502
|
||||
CTRL4FREECODELIST = CB5.503
|
||||
CTRL4GETCTRLCODE = CB5.504
|
||||
CTRL4INITVBX = CB5.505
|
||||
CTRL4INITVBXUNDO = CB5.506
|
||||
|
||||
|
||||
X4BOTTOM = CB5.600
|
||||
X4INIT_WORK = CB5.601
|
||||
X4FILTER_TEST = CB5.602
|
||||
X4GO = CB5.603
|
||||
X4SEEK = CB5.604
|
||||
X4SEEK_DOUBLE = CB5.605
|
||||
X4SKIP = CB5.606
|
||||
X4TOP = CB5.607
|
||||
I4CHANGED = CB5.608
|
142
support/interni/src/aga/makefile
Executable file
142
support/interni/src/aga/makefile
Executable file
@ -0,0 +1,142 @@
|
||||
#
|
||||
# Comando per avere le versioni di DEBUG:
|
||||
# nmake DBG=D
|
||||
#
|
||||
#
|
||||
# Per compilare aga.fll scommentare tutte le dipendenze di aga.fll
|
||||
|
||||
#
|
||||
# Compiler setup
|
||||
#
|
||||
CC = cl
|
||||
CFLAGS = /nologo /c /ALw # large memory model; SS != DS; DS not loaded at fn entry
|
||||
CFLAGS = $(CFLAGS) /GD # fn entry code optimized for Windows DLLs
|
||||
CFLAGS = $(CFLAGS) /G2 #
|
||||
CFLAGS = $(CFLAGS) /O # optimizations (optional)
|
||||
CFLAGS = $(CFLAGS) /W3 # set warning level as desired
|
||||
CFLAGS = $(CFLAGS) /Zp2 # pack 2 bytes
|
||||
! if "$(DBG)" == "D"
|
||||
CFLAGS = $(CFLAGS) /DDBG
|
||||
CFLAGS = $(CFLAGS) /Zi
|
||||
! endif
|
||||
|
||||
#
|
||||
# Link setup
|
||||
#
|
||||
LINKER = link
|
||||
LFLAGS = /ONERROR:NOEXE/NOFARCALL/NOE
|
||||
! if "$(DBG)" == "D"
|
||||
LFLAGS = $(LFLAGS) /CO
|
||||
! endif
|
||||
|
||||
SUPP=$(SROOT)/support/interni
|
||||
ICPP=$(SROOT)/include
|
||||
|
||||
DLL=\
|
||||
$(SUPP)/agaexec.dll $(SUPP)/aga16.dll
|
||||
|
||||
FLL=\
|
||||
$(SUPP)/agalight.fll
|
||||
# $(SUPP)/agalight.fll $(SUPP)/aga.fll
|
||||
|
||||
CLEAN=dummy
|
||||
|
||||
.PRECIOUS: $(DLL) $(FLL)
|
||||
|
||||
main: $(FLL) $(DLL) $(CLEAN)
|
||||
|
||||
dummy: agalight.obj
|
||||
del *.obj
|
||||
|
||||
#ccustio.obj: $(ICPP)\ccustio.c
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Foccustio.obj /DDOS /DFOXPRO $(ICPP)/ccustio.c
|
||||
|
||||
#cfiles.obj: $(ICPP)\cfiles.c
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Focfiles.obj /DDOS /DFOXPRO $(ICPP)/cfiles.c
|
||||
|
||||
#codeb.obj: $(ICPP)\codeb.c
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Focodeb.obj /DDOS /DFOXPRO $(ICPP)/codeb.c
|
||||
|
||||
#csort.obj: $(ICPP)\csort.c
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Focsort.obj /DDOS /DFOXPRO $(ICPP)/csort.c
|
||||
|
||||
#getaut.obj: $(ICPP)\getaut.c
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Fogetaut.obj /DDOS /DFOXPRO $(ICPP)/getaut.c
|
||||
|
||||
#hlprot.obj: $(ICPP)\hlprot.c
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Fohlprot.obj /DDOS /DFOXPRO $(ICPP)/hlprot.c
|
||||
|
||||
#ioresult.obj: $(ICPP)\ioresult.c
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Foioresult.obj /DDOS /DFOXPRO $(ICPP)/ioresult.c
|
||||
|
||||
#upstring.obj: $(ICPP)\upstring.c
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Foupstring.obj /DDOS /DFOXPRO $(ICPP)/upstring.c
|
||||
|
||||
#tmpfname.obj: $(ICPP)\tmpfname.c
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Fotmpfname.obj /DDOS /DFOXPRO $(ICPP)/tmpfname.c
|
||||
|
||||
#agafll.obj: aga.c
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Foagafll.obj /DFOXPRO aga.c
|
||||
|
||||
#array.obj: $(ICPP)/array.cpp
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Foarray.obj /DFOXPRO $(ICPP)/array.cpp
|
||||
|
||||
#checks.obj: $(ICPP)/checks.cpp
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Fochecks.obj /DFOXPRO $(ICPP)/checks.cpp
|
||||
|
||||
#files.obj: $(ICPP)/files.cpp
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Fofiles.obj /DFOXPRO $(ICPP)/files.cpp
|
||||
|
||||
#date.obj: $(ICPP)/date.cpp
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Fodate.obj /DFOXPRO $(ICPP)/date.cpp
|
||||
|
||||
#isam.obj: $(ICPP)/isam.cpp
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Foisam.obj /DFOXPRO $(ICPP)/isam.cpp
|
||||
|
||||
#object.obj: $(ICPP)/object.cpp
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Foobject.obj /DFOXPRO $(ICPP)/object.cpp
|
||||
|
||||
#prefix.obj: $(ICPP)/prefix.cpp
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Foprefix.obj /DFOXPRO $(ICPP)/prefix.cpp
|
||||
|
||||
#scanner.obj: $(ICPP)/scanner.cpp
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Foscanner.obj /DFOXPRO $(ICPP)/scanner.cpp
|
||||
|
||||
#stdtypes.obj: stdtypes.cpp
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Fostdtypes.obj /DFOXPRO stdtypes.cpp
|
||||
|
||||
#strings.obj: $(ICPP)/strings.cpp
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Fostrings.obj /DFOXPRO $(ICPP)/strings.cpp
|
||||
|
||||
#utility.obj: $(ICPP)/utility.cpp
|
||||
# $(CC) $(CFLAGS) /I$(ICPP) /Foutility.obj /DFOXPRO $(ICPP)/utility.cpp
|
||||
|
||||
#XOBJS=\
|
||||
# ccustio.obj cfiles.obj codeb.obj csort.obj getaut.obj hlprot.obj \
|
||||
# ioresult.obj upstring.obj tmpfname.obj \
|
||||
# array.obj checks.obj files.obj date.obj isam.obj object.obj \
|
||||
# prefix.obj scanner.obj stdtypes.obj strings.obj utility.obj
|
||||
|
||||
#$(SUPP)aga.fll: agafll.obj $(XOBJS)
|
||||
# $(LINKER) $(LFLAGS) @agafll.lrf
|
||||
|
||||
agalight.obj: aga.cpp
|
||||
$(CC) $(CFLAGS) /Foagalight.obj /DLIGHT aga.cpp
|
||||
|
||||
agaexec.obj: aga.cpp
|
||||
$(CC) $(CFLAGS) /I$(ICPP) /Foagaexec.obj /DLIGHT /DDLL aga.cpp
|
||||
|
||||
aga16.obj: aga16.c
|
||||
$(CC) $(CFLAGS) /Foaga16.obj aga16.c
|
||||
|
||||
$(SUPP)/agalight.fll: agalight.obj
|
||||
$(LINKER) $(LFLAGS) @agalight.lrf
|
||||
|
||||
$(SUPP)/agaexec.dll: agaexec.obj
|
||||
$(LINKER) $(LFLAGS) @agaexec.lrf
|
||||
|
||||
$(SUPP)/aga16.dll: aga16.obj
|
||||
$(LINKER) $(LFLAGS) @aga16.lrf
|
||||
|
||||
|
||||
|
125
support/interni/src/aga/stdtypes.cpp
Executable file
125
support/interni/src/aga/stdtypes.cpp
Executable file
@ -0,0 +1,125 @@
|
||||
#define __STDTYPES_CPP
|
||||
|
||||
#include <stdtypes.h>
|
||||
#include <extcdecl.h>
|
||||
|
||||
#include <isam.h>
|
||||
#include <prefix.h>
|
||||
#include <utility.h>
|
||||
#include <codeb.h>
|
||||
|
||||
short CHARY,CHARX;
|
||||
|
||||
void init_global_vars()
|
||||
{
|
||||
prefix_init();
|
||||
CGetPref();
|
||||
prefix().set("");
|
||||
|
||||
FileDes d;
|
||||
CGetFile(LF_DIR, &d, _nolock, NORDIR);
|
||||
long maxfdir = d.EOX;
|
||||
prefix().set("DEF");
|
||||
|
||||
CGetFile(LF_DIR, &d, _nolock, NORDIR);
|
||||
if (d.EOD > maxfdir) maxfdir = d.EOD;
|
||||
|
||||
openf = new isfdptr[maxfdir];
|
||||
openrec = new TRectype*[maxfdir];
|
||||
|
||||
for (long i = 0; i < maxfdir; i++)
|
||||
{
|
||||
openf[i] = NULL;
|
||||
openrec[i] = NULL;
|
||||
}
|
||||
DB_init();
|
||||
}
|
||||
|
||||
void free_global_vars()
|
||||
{
|
||||
delete openrec;
|
||||
delete openf;
|
||||
prefix_destroy();
|
||||
DB_exit();
|
||||
}
|
||||
|
||||
|
||||
#include <pro_ext.h>
|
||||
|
||||
void* operator new(size_t size)
|
||||
{
|
||||
MHANDLE hnd = _AllocHand(size+2);
|
||||
if (hnd == 0) fatal_box("Out of memory handles");
|
||||
_HLock(hnd);
|
||||
MHANDLE * phnd = (MHANDLE *) _HandToPtr(hnd);
|
||||
*phnd = hnd;
|
||||
return (void*) (phnd+1);
|
||||
}
|
||||
|
||||
void operator delete(void* ptr)
|
||||
{
|
||||
if (ptr == NULL) fatal_box("Can't delete NULL handle");
|
||||
MHANDLE * phnd = ((MHANDLE *) ptr) - 1;
|
||||
_HUnLock(*phnd);
|
||||
_FreeHand(*phnd);
|
||||
}
|
||||
|
||||
static bool get_fox(const char* var, char* val)
|
||||
{
|
||||
*val = '\0';
|
||||
|
||||
const NTI nti = _NameTableIndex((char*)var);
|
||||
if (nti >= 0)
|
||||
{
|
||||
Locator loc;
|
||||
if (_FindVar(nti, -1, &loc)) // Find memory variable
|
||||
{
|
||||
Value value;
|
||||
_Load(&loc, &value);
|
||||
if (value.ev_type == 'C')
|
||||
{
|
||||
const char* p = (const char*)_HandToPtr(value.ev_handle);
|
||||
if (*p > ' ')
|
||||
strcpy(val, p);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return *val != '\0';
|
||||
}
|
||||
|
||||
static char _tmp[256];
|
||||
|
||||
char* prefname()
|
||||
{
|
||||
if (!get_fox("PREFPATH", _tmp))
|
||||
strcpy(_tmp, "prefix.txt");
|
||||
|
||||
return _tmp;
|
||||
}
|
||||
|
||||
const char* username()
|
||||
{
|
||||
if (!get_fox("USER", _tmp))
|
||||
strcpy(_tmp, "PRASSI");
|
||||
return _tmp;
|
||||
}
|
||||
|
||||
const char* tempdir()
|
||||
{
|
||||
char user[16];
|
||||
strncpy(user, username(), 16);
|
||||
|
||||
if (!get_fox("TEMPDIR", _tmp))
|
||||
strcpy(_tmp, "\\tmp");
|
||||
if (!fexist(_tmp))
|
||||
make_dir(_tmp);
|
||||
|
||||
strcat(_tmp, "\\"); strcat(_tmp, user);
|
||||
if (!fexist(_tmp))
|
||||
make_dir(_tmp);
|
||||
|
||||
return _tmp;
|
||||
}
|
||||
|
||||
|
68
support/interni/src/aga/w32sut.h
Executable file
68
support/interni/src/aga/w32sut.h
Executable file
@ -0,0 +1,68 @@
|
||||
/***
|
||||
*w32sut.h -
|
||||
*
|
||||
* Copyright (c) 1987-1992, Microsoft Corporation. All rights reserved.
|
||||
*
|
||||
*Purpose:
|
||||
* This file declares the constants, structures, and functions
|
||||
* used for accessing and using the Universal Thunk mechanism.
|
||||
*
|
||||
* This file should be compiled either with constants W32SUT_16 or
|
||||
* W32SUT_32 defined.
|
||||
*
|
||||
****/
|
||||
|
||||
/* Check that one of the 2 constants is defined */
|
||||
#ifdef W32SUT_16
|
||||
#ifdef W32SUT_32
|
||||
#error W32SUT_16 and W32SUT_32 cannot be defined simultaneously
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef W32SUT_16
|
||||
#ifndef W32SUT_32
|
||||
#error Either W32SUT_16 or W32SUT_32 should be defined
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
/**** Prototypes for 32 bit DLL ***********/
|
||||
#ifdef W32SUT_32
|
||||
|
||||
typedef DWORD ( WINAPI * UT32PROC)( LPVOID lpBuff,
|
||||
DWORD dwUserDefined,
|
||||
LPVOID *lpTranslationList
|
||||
);
|
||||
|
||||
BOOL WINAPI UTRegister( HANDLE hModule,
|
||||
LPCSTR lpsz16BitDLL,
|
||||
LPCSTR lpszInitName,
|
||||
LPCSTR lpszProcName,
|
||||
UT32PROC * ppfn32Thunk,
|
||||
FARPROC pfnUT32Callback,
|
||||
LPVOID lpBuff
|
||||
);
|
||||
|
||||
|
||||
VOID WINAPI UTUnRegister(HANDLE hModule);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/**** Prototypes for 16 bit DLL ***********/
|
||||
#ifdef W32SUT_16
|
||||
|
||||
typedef DWORD (FAR PASCAL * UT16CBPROC)( LPVOID lpBuff,
|
||||
DWORD dwUserDefined,
|
||||
LPVOID FAR *lpTranslationList
|
||||
);
|
||||
|
||||
|
||||
LPVOID WINAPI UTLinearToSelectorOffset(LPBYTE lpByte);
|
||||
LPVOID WINAPI UTSelectorOffsetToLinear(LPBYTE lpByte);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
BIN
support/interni/src/aga/w32sut16.lib
Executable file
BIN
support/interni/src/aga/w32sut16.lib
Executable file
Binary file not shown.
BIN
support/interni/src/aga/w32sut32.lib
Executable file
BIN
support/interni/src/aga/w32sut32.lib
Executable file
Binary file not shown.
301
support/interni/src/dumb/dumb.c
Executable file
301
support/interni/src/dumb/dumb.c
Executable file
@ -0,0 +1,301 @@
|
||||
#ifdef DUMBFLL
|
||||
#include "../foxlck/pro_ext.h"
|
||||
#else
|
||||
#include <windows.h>
|
||||
|
||||
/* Visual Basic interface with OLE 2 */
|
||||
#ifdef DUMBDLLVB
|
||||
#include <compobj.h>
|
||||
#include <dispatch.h>
|
||||
#include <variant.h>
|
||||
#include <olenls.h>
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#define _BreakPoint() __asm \
|
||||
{ \
|
||||
int 3h \
|
||||
}
|
||||
#endif
|
||||
|
||||
#include "hlapi_c.h"
|
||||
|
||||
#define MODULE 26952
|
||||
#define REFKEY "CAMPOKEY"
|
||||
#define VERKEY "ìpÙˆ¬cê<"
|
||||
|
||||
unsigned int getser();
|
||||
int CGetAut(int);
|
||||
|
||||
#ifdef DUMBFLL
|
||||
int FAR Fox_HL_LOGIN()
|
||||
#else
|
||||
int far pascal _export hl_login()
|
||||
#endif
|
||||
{
|
||||
int status;
|
||||
#ifdef DBG
|
||||
_BreakPoint();
|
||||
#endif
|
||||
status = HL_LOGIN(MODULE, DONT_CARE, REFKEY, VERKEY);
|
||||
getser();
|
||||
#ifdef DUMBFLL
|
||||
_RetInt(status,10);
|
||||
#endif
|
||||
return status;
|
||||
}
|
||||
|
||||
#ifdef DUMBFLL
|
||||
int FAR Fox_HL_LOGOUT()
|
||||
#else
|
||||
int far pascal _export hl_logout()
|
||||
#endif
|
||||
{
|
||||
HL_LOGOUT();
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef DUMBFLL
|
||||
static void load_string(char * str_to_load, ParamBlk far * param)
|
||||
{
|
||||
Value val;
|
||||
Locator loc;
|
||||
int i;
|
||||
|
||||
loc = param->p[0].loc;
|
||||
loc.l_subs = _ALen(param->p[0].loc.l_NTI, AL_ELEMENTS);
|
||||
for (i = 0; i < 16; i++)
|
||||
{
|
||||
loc.l_sub1 = i+1;
|
||||
_Load(&loc,&val);
|
||||
if (val.ev_type == 'N')
|
||||
str_to_load[i] = (char) (long)val.ev_real;
|
||||
}
|
||||
str_to_load[16] = '\0';
|
||||
}
|
||||
|
||||
|
||||
static void store_string(char * str_to_store, ParamBlk far * param)
|
||||
{
|
||||
Value val;
|
||||
Locator loc;
|
||||
int i;
|
||||
|
||||
loc = param->p[0].loc;
|
||||
loc.l_subs = _ALen(param->p[0].loc.l_NTI, AL_ELEMENTS);
|
||||
|
||||
for (i = 0; i < 16 ; i++)
|
||||
{
|
||||
loc.l_sub1 = i+1;
|
||||
_Load(&loc,&val);
|
||||
if (val.ev_type == 'N')
|
||||
{
|
||||
val.ev_long = (unsigned char)str_to_store[i];
|
||||
val.ev_real = (double) val.ev_long;
|
||||
_Store(&loc,&val);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef DUMBDLLVB
|
||||
static void load_string(char * str_to_load, SAFEARRAY FAR** sa)
|
||||
{
|
||||
long lLb, lUlb,l;
|
||||
int i;
|
||||
unsigned char element;
|
||||
|
||||
if (*sa == NULL)
|
||||
return ;
|
||||
|
||||
if ((*sa)->cDims != 1)
|
||||
return ;
|
||||
|
||||
if (FAILED(SafeArrayGetLBound(*sa, 1, &lLb)) ||
|
||||
FAILED(SafeArrayGetUBound(*sa, 1, &lUlb)))
|
||||
return ;
|
||||
|
||||
for (l = lLb, i = 0; l <= lUlb && i < 18; l++, i++)
|
||||
if (FAILED(SafeArrayGetElement(*sa, &l, &element)))
|
||||
return;
|
||||
else
|
||||
str_to_load[i] = element;
|
||||
}
|
||||
|
||||
|
||||
static void store_string(char * str_to_store, SAFEARRAY FAR** sa)
|
||||
{
|
||||
long lLb, lUlb,l;
|
||||
int i;
|
||||
unsigned char element;
|
||||
|
||||
if (*sa == NULL)
|
||||
return ;
|
||||
|
||||
if ((*sa)->cDims != 1)
|
||||
return ;
|
||||
|
||||
if (FAILED(SafeArrayGetLBound(*sa, 1, &lLb)) ||
|
||||
FAILED(SafeArrayGetUBound(*sa, 1, &lUlb)))
|
||||
return ;
|
||||
|
||||
for (l = lLb, i = 0; l <= lUlb && i < 18; l++, i++)
|
||||
if (FAILED(SafeArrayPutElement(*sa, &l, &str_to_store[i])))
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef DUMBFLL
|
||||
int FAR Fox_HL_CODE(ParamBlk far *param)
|
||||
#else
|
||||
#ifdef DUMBDLLVB
|
||||
int far pascal _export hl_code(SAFEARRAY FAR** sa)
|
||||
#else
|
||||
int far pascal _export hl_code(char * kk)
|
||||
#endif
|
||||
#endif
|
||||
{
|
||||
char data [18];
|
||||
|
||||
#ifdef DUMBFLL
|
||||
load_string(data, param);
|
||||
#else
|
||||
#ifdef DUMBDLLVB
|
||||
load_string(data, sa);
|
||||
#else
|
||||
strncpy(data,kk,18);
|
||||
#endif
|
||||
#endif
|
||||
HL_CODE(EYECAST data,2);
|
||||
#ifdef DUMBFLL
|
||||
store_string(data, param);
|
||||
#else
|
||||
#ifdef DUMBDLLVB
|
||||
store_string(data, sa);
|
||||
#else
|
||||
strncpy(kk,data,18);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifdef DUMBFLL
|
||||
int FAR Fox_GETSER()
|
||||
#else
|
||||
int far pascal _export hl_getser()
|
||||
#endif
|
||||
{
|
||||
int r;
|
||||
r = getser();
|
||||
#ifdef DUMBFLL
|
||||
_RetInt(r, 10);
|
||||
#endif
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
#ifdef DUMBFLL
|
||||
int FAR Fox_GETSTR(ParamBlk FAR *parm)
|
||||
#else
|
||||
#ifdef DUMBDLLVB
|
||||
int far pascal _export hl_getstr(SAFEARRAY FAR ** sa)
|
||||
#else
|
||||
int far pascal _export hl_getstr(char * kk)
|
||||
#endif
|
||||
#endif
|
||||
{
|
||||
char chiave[18];
|
||||
char tmp_str[18];
|
||||
char chiave_segreta[8];
|
||||
int i;
|
||||
int j;
|
||||
int module;
|
||||
int ok ;
|
||||
|
||||
#ifdef DUMBFLL
|
||||
load_string(chiave, parm);
|
||||
#else
|
||||
#ifdef DUMBDLLVB
|
||||
load_string(chiave, sa);
|
||||
#else
|
||||
strncpy(chiave,kk,18);
|
||||
#endif
|
||||
#endif
|
||||
HL_CODE(EYECAST chiave, 2);
|
||||
|
||||
strcpy(chiave_segreta,"P39S41");
|
||||
module = 0;
|
||||
ok = 0;
|
||||
for (i = 0; i<9;i++)
|
||||
if (i>5)
|
||||
chiave[i] = chiave[i] - chiave[i-6];
|
||||
else
|
||||
chiave[i] = chiave[i] - chiave_segreta[i];
|
||||
strncpy(tmp_str,chiave+6,3);
|
||||
tmp_str[3] = '\0';
|
||||
module = atoi(tmp_str);
|
||||
ok = CGetAut(module);
|
||||
strcpy(tmp_str,chiave);
|
||||
for (i = 0, j=5;i<6; i++, j--)
|
||||
chiave[i] = tmp_str[j];
|
||||
chiave[6] = '0';chiave[7] = '0';
|
||||
chiave[8] = ok ? '1': '0';
|
||||
for (i=8;i>=0;i--)
|
||||
if (i>5)
|
||||
chiave[i] = chiave[i] + chiave[i-6];
|
||||
else
|
||||
chiave[i] = chiave[i] + chiave_segreta[i];
|
||||
for (i=9;i<16;i++) chiave[i] = ' ';
|
||||
chiave[16] = '\0';
|
||||
HL_CODE(EYECAST chiave,2);
|
||||
#ifdef DUMBFLL
|
||||
store_string(chiave, parm);
|
||||
#else
|
||||
#ifdef DUMBDLLVB
|
||||
store_string(chiave, sa);
|
||||
#else
|
||||
strncpy(kk,chiave,18);
|
||||
#endif
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef DUMBFLL
|
||||
|
||||
FoxInfo DumbFoxInfo[] =
|
||||
{
|
||||
{ "HL_LOGIN", (FPFI)Fox_HL_LOGIN, CALLONLOAD, "" },
|
||||
{ "HL_LOGOUT", (FPFI)Fox_HL_LOGOUT, CALLONUNLOAD, "" },
|
||||
{ "HL_CODE", (FPFI)Fox_HL_CODE, 1, "R" },
|
||||
{ "HL_GETSER", (FPFI)Fox_GETSER, 0, "" },
|
||||
{ "HL_GETSTR", (FPFI)Fox_GETSTR, 1, "R" }
|
||||
};
|
||||
|
||||
FoxTable _FoxTable =
|
||||
{
|
||||
(FoxTable FAR *)0,
|
||||
sizeof(DumbFoxInfo)/sizeof(FoxInfo),
|
||||
DumbFoxInfo
|
||||
};
|
||||
|
||||
|
||||
#else
|
||||
|
||||
int CALLBACK LibMain (HINSTANCE hinst, WORD wDataSeg, WORD cbHeapSize, LPSTR lpszCmdLine)
|
||||
{
|
||||
int rt = hl_login();
|
||||
return rt == STATUS_OK;
|
||||
}
|
||||
|
||||
int CALLBACK WEP (int nExitType)
|
||||
{
|
||||
if (nExitType == WEP_FREE_DLL)
|
||||
hl_logout();
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
16
support/interni/src/dumb/dumbdll.def
Executable file
16
support/interni/src/dumb/dumbdll.def
Executable file
@ -0,0 +1,16 @@
|
||||
LIBRARY DUMBDLL
|
||||
DESCRIPTION 'DUMB DLL'
|
||||
EXETYPE WINDOWS
|
||||
CODE PRELOAD MOVEABLE DISCARDABLE
|
||||
DATA PRELOAD FIXED SINGLE
|
||||
|
||||
HEAPSIZE 4096
|
||||
|
||||
EXPORTS
|
||||
|
||||
HL_LOGIN @1
|
||||
HL_LOGOUT @2
|
||||
HL_CODE @3
|
||||
HL_GETSER @4
|
||||
HL_GETSTR @5
|
||||
|
8
support/interni/src/dumb/dumbdll.lrf
Executable file
8
support/interni/src/dumb/dumbdll.lrf
Executable file
@ -0,0 +1,8 @@
|
||||
dumbdll+getaut
|
||||
..\..\dumb.dll
|
||||
nul
|
||||
libw+
|
||||
/NOD:llibce ldllcew+
|
||||
hlapi_cd
|
||||
dumbdll.def
|
||||
|
6
support/interni/src/dumb/dumbfll.def
Executable file
6
support/interni/src/dumb/dumbfll.def
Executable file
@ -0,0 +1,6 @@
|
||||
LIBRARY DUMBFLL
|
||||
EXETYPE WINDOWS 3.0
|
||||
CODE PRELOAD MOVABLE SHARED
|
||||
DATA SHARED PRELOAD
|
||||
|
||||
|
9
support/interni/src/dumb/dumbfll.lrf
Executable file
9
support/interni/src/dumb/dumbfll.lrf
Executable file
@ -0,0 +1,9 @@
|
||||
dumbfll+getaut+..\foxlck\libentry
|
||||
..\..\dumb.fll
|
||||
nul
|
||||
..\foxlck\proapiml+
|
||||
libw+
|
||||
/NOD:llibce ldllcew+
|
||||
hlapi_cd
|
||||
dumbfll.def
|
||||
|
16
support/interni/src/dumb/dumbvb.def
Executable file
16
support/interni/src/dumb/dumbvb.def
Executable file
@ -0,0 +1,16 @@
|
||||
LIBRARY DUMBVB
|
||||
DESCRIPTION 'DUMBVB DLL'
|
||||
EXETYPE WINDOWS
|
||||
CODE PRELOAD MOVEABLE DISCARDABLE
|
||||
DATA PRELOAD FIXED SINGLE
|
||||
|
||||
HEAPSIZE 4096
|
||||
|
||||
EXPORTS
|
||||
|
||||
HL_LOGIN @1
|
||||
HL_LOGOUT @2
|
||||
HL_CODE @3
|
||||
HL_GETSER @4
|
||||
HL_GETSTR @5
|
||||
|
8
support/interni/src/dumb/dumbvb.lrf
Executable file
8
support/interni/src/dumb/dumbvb.lrf
Executable file
@ -0,0 +1,8 @@
|
||||
dumbvb+getaut
|
||||
..\..\dumbvb.dll
|
||||
nul
|
||||
libw+
|
||||
/NOD:llibce ldllcew+
|
||||
ole2disp+hlapi_cd
|
||||
dumbvb.def
|
||||
|
96
support/interni/src/dumb/esempi/dumb.bas
Executable file
96
support/interni/src/dumb/esempi/dumb.bas
Executable file
@ -0,0 +1,96 @@
|
||||
Attribute VB_Name = "Modulo1"
|
||||
Private Declare Function hl_getstr Lib "dumbvb.dll" (ByRef b() As Byte) As Integer
|
||||
Private Declare Function hl_code Lib "dumbvb.dll" (ByRef b() As Byte) As Integer
|
||||
Function GetAut(Modulo As Integer) As Boolean
|
||||
|
||||
Dim risultato(18) As Byte
|
||||
Dim tmp_res(18) As Byte
|
||||
Dim chiave(18) As Byte
|
||||
Dim terzo_carattere As Byte
|
||||
Dim ultimo_carattere As Byte
|
||||
Dim stringa_segreta As String
|
||||
Dim stringa_tmp As String
|
||||
|
||||
stringa_segreta = "P39S41"
|
||||
' Genera un numero casuale di 6 cifre...
|
||||
' Questo e' solo un esempio, ma in realta
|
||||
' Andrebbe generato un numero veramente casuale...
|
||||
' La Randomize e' chiamata una sola volta al
|
||||
' caricamento della form
|
||||
|
||||
stringa_tmp = Format(Modulo, "000")
|
||||
For i = 0 To 14
|
||||
If (i < 6) Then
|
||||
chiave(i) = Asc(Mid(stringa_segreta, i + 1, 1)) ' I primi 6 chars sono la stringa segreta
|
||||
ElseIf (i < 12) Then
|
||||
chiave(i) = Int((10 * Rnd)) ' Questo e' il numero casuale generato
|
||||
' chiave(i) = 9
|
||||
Else
|
||||
chiave(i) = Asc(Mid(stringa_tmp, i - 11, 1)) ' Questo e' il numero del modulo (zerofilled)
|
||||
End If
|
||||
Next i
|
||||
|
||||
|
||||
' Codifica la stringa chiave tramite la stringa casuale
|
||||
' Esegue la somma algebrica dei valori ASCII dei singoli caratteri
|
||||
For i = 0 To 17
|
||||
If i > 8 Then
|
||||
risultato(i) = Asc(" ") ' I caratteri in eccesso diventano blanks
|
||||
Else
|
||||
risultato(i) = chiave(i) + chiave(i + 6)
|
||||
End If
|
||||
Next i
|
||||
|
||||
' Chiama la funzione hl_code(), che effettua una ulteriore crittografazione
|
||||
copia_array tmp_res, risultato
|
||||
hl_code risultato
|
||||
If compara_array(risultato, tmp_res) Then
|
||||
GetAut = False ' Se le stringhe sono uguali significa che la chiave non c'e' o che qualcuno sta
|
||||
Exit Function ' cercando di sproteggere il programma
|
||||
End If
|
||||
|
||||
' Ora passiamo la stringa criptata alla DLL per farci restituire l'autorizzazione
|
||||
copia_array tmp_res, risultato
|
||||
hl_getstr risultato
|
||||
|
||||
' Chiama la funzione hl_code(), che effettua la crittografazione al contrario
|
||||
copia_array tmp_res, risultato
|
||||
hl_code risultato
|
||||
If compara_array(risultato, tmp_res) Then
|
||||
GetAut = False ' Se le stringhe sono uguali significa che la chiave non c'e' o che qualcuno sta
|
||||
Exit Function ' cercando di sproteggere il programma
|
||||
End If
|
||||
|
||||
' Adesso possiamo estrarre l'autorizzazione
|
||||
' Ricodifichiamo seguendo il procedimento inverso:
|
||||
' Sottraiamo i valori ASCII dal risultato carattere per carattere
|
||||
' In realta' l'autorizzazione e' codificata nel terzo carattere della stringa
|
||||
terzo_carattere = risultato(2) - Asc(Mid(stringa_segreta, 3, 1))
|
||||
ultimo_carattere = Chr(risultato(8) - terzo_carattere)
|
||||
|
||||
If ultimo_carattere = "1" Then
|
||||
GetAut = True
|
||||
Else
|
||||
GetAut = False
|
||||
End If
|
||||
|
||||
End Function
|
||||
|
||||
Public Function compara_array(b1() As Byte, b2() As Byte) As Boolean
|
||||
' confronta gli elementi di b1 e b2 e ritorna True se gli elementi sono tutti
|
||||
' uguali. Sono significativi solo i primi 16 bytes
|
||||
compara_array = True
|
||||
For i = 0 To 15
|
||||
If b1(i) <> b2(i) Then
|
||||
compara_array = False
|
||||
Exit For
|
||||
End If
|
||||
Next i
|
||||
End Function
|
||||
Sub copia_array(b1() As Byte, b2() As Byte)
|
||||
' copia gli elementi di b2 in b1
|
||||
For i = 0 To 15
|
||||
b1(i) = b2(i)
|
||||
Next i
|
||||
End Sub
|
||||
|
94
support/interni/src/dumb/esempi/dumb.frm
Executable file
94
support/interni/src/dumb/esempi/dumb.frm
Executable file
@ -0,0 +1,94 @@
|
||||
VERSION 4.00
|
||||
Begin VB.Form Form1
|
||||
BorderStyle = 1 'Fixed Single
|
||||
Caption = "DUMB Test"
|
||||
ClientHeight = 2040
|
||||
ClientLeft = 1140
|
||||
ClientTop = 1512
|
||||
ClientWidth = 3708
|
||||
Height = 2460
|
||||
Left = 1092
|
||||
LinkTopic = "Form1"
|
||||
MaxButton = 0 'False
|
||||
MinButton = 0 'False
|
||||
ScaleHeight = 2040
|
||||
ScaleWidth = 3708
|
||||
Top = 1140
|
||||
Width = 3804
|
||||
Begin VB.CommandButton Command2
|
||||
Caption = "Esci"
|
||||
Height = 375
|
||||
Left = 2160
|
||||
TabIndex = 4
|
||||
Top = 1440
|
||||
Width = 1335
|
||||
End
|
||||
Begin VB.CheckBox Check1
|
||||
Enabled = 0 'False
|
||||
Height = 252
|
||||
Left = 1920
|
||||
TabIndex = 3
|
||||
Top = 600
|
||||
Width = 252
|
||||
End
|
||||
Begin VB.TextBox Text1
|
||||
Height = 288
|
||||
Left = 840
|
||||
TabIndex = 1
|
||||
Top = 600
|
||||
Width = 372
|
||||
End
|
||||
Begin VB.CommandButton Command1
|
||||
Caption = "Test"
|
||||
Height = 375
|
||||
Left = 120
|
||||
TabIndex = 0
|
||||
Top = 1440
|
||||
Width = 1335
|
||||
End
|
||||
Begin VB.Label Label2
|
||||
Caption = "Autorizzazione"
|
||||
Height = 252
|
||||
Left = 2280
|
||||
TabIndex = 5
|
||||
Top = 600
|
||||
Width = 1092
|
||||
End
|
||||
Begin VB.Label Label1
|
||||
Caption = "Modulo"
|
||||
Height = 255
|
||||
Left = 120
|
||||
TabIndex = 2
|
||||
Top = 600
|
||||
Width = 615
|
||||
End
|
||||
End
|
||||
Attribute VB_Name = "Form1"
|
||||
Attribute VB_Creatable = False
|
||||
Attribute VB_Exposed = False
|
||||
|
||||
Private Sub Command1_Click()
|
||||
' Prende il modulo inserito e chiama la funzione
|
||||
' GetAut(), settando il checkbox se il modulo
|
||||
' e' abilitato o meno
|
||||
If (GetAut(Val(Text1.Text))) Then
|
||||
Check1.Value = Checked
|
||||
Else
|
||||
Check1.Value = Unchecked
|
||||
End If
|
||||
End Sub
|
||||
|
||||
|
||||
Private Sub Command2_Click()
|
||||
End
|
||||
End Sub
|
||||
|
||||
|
||||
Private Sub Form_Load()
|
||||
' Questo e' solo un esempio, ma in realta
|
||||
' Andrebbe generato un numero veramente casuale...
|
||||
Randomize Timer
|
||||
|
||||
End Sub
|
||||
|
||||
|
22
support/interni/src/dumb/esempi/dumb.vbp
Executable file
22
support/interni/src/dumb/esempi/dumb.vbp
Executable file
@ -0,0 +1,22 @@
|
||||
Form=DUMB.FRM
|
||||
Module=Modulo1; DUMB.BAS
|
||||
Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.0#0; COMDLG16.OCX
|
||||
Object={BDC217C8-ED16-11CD-956C-0000C04E4C0A}#1.0#0; TABCTL16.OCX
|
||||
Object={FAEEE763-117E-101B-8933-08002B2F4F5A}#1.0#0; DBLIST16.OCX
|
||||
Object={00028C01-0000-0000-0000-000000000046}#1.0#0; DBGRID16.OCX
|
||||
Reference=*\G{BEF6E001-A874-101A-8BBA-00AA00300CAB}#1.0#0#C:\WINDOWS\SYSTEM\OC25.DLL#Standard OLE Types
|
||||
Reference=*\G{00025E01-0000-0000-C000-000000000046}#2.5#0#C:\WINDOWS\SYSTEM\DAO2516.DLL#Microsoft DAO 2.5 Object Library
|
||||
ProjWinSize=127,687,233,129
|
||||
ProjWinShow=2
|
||||
IconForm="Form1"
|
||||
ExeName="DUMB.EXE"
|
||||
Name="Proget1"
|
||||
HelpContextID="0"
|
||||
StartMode=0
|
||||
VersionCompatible="0"
|
||||
MajorVer=1
|
||||
MinorVer=0
|
||||
RevisionVer=0
|
||||
AutoIncrementVer=0
|
||||
ServerSupportFiles=0
|
||||
VersionCompanyName="Aga Informatica"
|
178
support/interni/src/dumb/esempi/es_dllvb.txt
Executable file
178
support/interni/src/dumb/esempi/es_dllvb.txt
Executable file
@ -0,0 +1,178 @@
|
||||
=================================
|
||||
4: Passaggio e restituzione di stringhe
|
||||
=================================
|
||||
|
||||
Le stringhe a lunghezza variabile vengono mantenute all'interno di Visual Basic
|
||||
come BSTR. Nei file di intestazione OLE, i BSTR vengono definiti come
|
||||
OLECHAR FAR *. Un OLECHAR corrisponde ad un carattere UNICODE
|
||||
nell'OLE a 32 bit e ad un carattere ANSI nell'OLE a 16 bit. Un BSTR può
|
||||
contenere valori NULL, in quanto nel BSTR viene mantenuto, tra gli altri,
|
||||
un'attributo che specifica la lunghezza della variabile. I BSTR contengono
|
||||
un valore NULL come valore terminale e possono pertanto essere trattati
|
||||
come LPSTR. L'attributo relativo alla lunghezza viene attualmente
|
||||
memorizzato nella posizione che precede immediatamente la stringa.
|
||||
Questa caratteristica, tuttavia, potrebbe essere modificata in futuro
|
||||
in modo da consentire di accedere alla lunghezza della stringa
|
||||
utilizzando le API OLE.
|
||||
|
||||
Il passaggio di una stringa da Visual Basic ad una DLL può essere
|
||||
eseguito in due modi. È possibile passare la stringa "per valore"
|
||||
(ByVal) o "per riferimento". Se si passa una stringa ByVal,
|
||||
Visual Basic passa un puntatore che fa riferimento all'inizio dei dati
|
||||
della stringa, ovvero passa un BSTR. Quando una stringa viene passata
|
||||
per riferimento, Visual Basic passa un puntatore al puntatore
|
||||
che fa riferimento ai dati della stringa, ovvero passa un BSTR *.
|
||||
|
||||
La seguente tabella indica quali attributi vengono passati da Visual Basic
|
||||
ad una DLL durante il passaggio di una stringa.
|
||||
|
||||
Versione Per valore Per riferimento
|
||||
------------------------------------
|
||||
3.0 LPSTR HLSTR
|
||||
4.0 BSTR BSTR *
|
||||
|
||||
In Visual Basic 3.0, era possibile utilizzare le routine API di Visual Basic
|
||||
per accedere ad un HLSTR e modificarlo. In Visual Basic 4.0, è necessario
|
||||
utilizzare le API OLE per accedere ad un BSTR. Nella seguente tabella
|
||||
vengono riportate le API per la gestione delle stringhe in Visual Basic
|
||||
3.0 e gli equilvalenti OLE.
|
||||
|
||||
|
||||
API di Visual Basic API OLE
|
||||
--------------------------------------------------------
|
||||
VBCreateHlstr SysAllocString/SysAllocStringLen
|
||||
VBCreateTempHlstr SysAllocString/SysAllocStringLen
|
||||
VBDerefHlstr* N/A
|
||||
VBDerefHlstrLen* N/A
|
||||
VBDerefZeroTermHlstr N/A
|
||||
VBDestroyHlstr SysFreeString
|
||||
VBGetHlstrLen SysStringLen
|
||||
VBResizeHlstr SysReAllocStringLen
|
||||
VBSetHlstr SysReAllocString
|
||||
|
||||
NOTA: Il BTSR è un puntatore che fa riferimento alla stringa,
|
||||
pertanto non è necessario eliminare i riferimenti contenuti in tale puntatore.
|
||||
|
||||
|
||||
Esempio per le versioni a 16\32 bit
|
||||
-----------------
|
||||
|
||||
La prima funzione considerata in questo esempio accetta una stringa
|
||||
Visual Basic per riferimento e restituisce una copia a lettere maiuscole
|
||||
di tale stringa. La seconda funzione accetta una stringa Visual Basic per
|
||||
valore e restituisce, analogamente, una copia a lettere maiuscole di tale
|
||||
stringa. Queste funzioni sono dunque simili alla funzione UCase di
|
||||
Visual Basic. In entrambi i casi, la funzione della DLL modifica la stringa
|
||||
passata, che viene quindi restituita a VB. Ciò accade inoltre quando la
|
||||
stringa di VB viene passata "ByVal", in quanto alla funzione DLL viene
|
||||
passato un BSTR che corrisponde ad un char far *. Sarà pertanto possibile
|
||||
accedere direttamente al buffer della memoria a cui punta il BTSR.
|
||||
|
||||
|
||||
#include <windows.h>
|
||||
#include <ole2.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#define CCONV _stdcall
|
||||
#define NOMANGLE
|
||||
#else
|
||||
#define CCONV FAR PASCAL _export
|
||||
#define NOMANGLE EXTERN_C
|
||||
#include <stdlib.h>
|
||||
#include <compobj.h>
|
||||
#include <dispatch.h>
|
||||
#include <variant.h>
|
||||
#include <olenls.h>
|
||||
#endif
|
||||
|
||||
NOMANGLE BSTR CCONV UpperCaseByRef(BSTR *pbstrOriginal)
|
||||
{
|
||||
BSTR bstrUpperCase;
|
||||
int i;
|
||||
int cbOriginalLen;
|
||||
LPSTR strSrcByRef, strDst;
|
||||
|
||||
#if !defined(_WIN32)
|
||||
cbOriginalLen = SysStringLen(*pbstrOriginal);
|
||||
#else
|
||||
cbOriginalLen = SysStringByteLen(*pbstrOriginal);
|
||||
#endif
|
||||
|
||||
bstrUpperCase = SysAllocStringLen(NULL, cbOriginalLen);
|
||||
|
||||
strSrcByRef = (LPSTR)*pbstrOriginal;
|
||||
strDst = (LPSTR)bstrUpperCase;
|
||||
|
||||
for(i=0; i<=cbOriginalLen; i++)
|
||||
*strDst++ = toupper(*strSrcByRef++);
|
||||
|
||||
SysReAllocString (pbstrOriginal, (BSTR)"Arrivederci");
|
||||
|
||||
return bstrUpperCase;
|
||||
}
|
||||
|
||||
NOMANGLE BSTR CCONV UpperCaseByVal(BSTR bstrOriginal)
|
||||
{
|
||||
BSTR bstrUpperCase;
|
||||
int i;
|
||||
int cbOriginalLen;
|
||||
LPSTR strSrcByVal, strDst;
|
||||
|
||||
#if !defined(_WIN32)
|
||||
cbOriginalLen = SysStringLen(bstrOriginal);
|
||||
#else
|
||||
cbOriginalLen = SysStringByteLen(bstrOriginal);
|
||||
#endif
|
||||
|
||||
bstrUpperCase = SysAllocStringLen(NULL, cbOriginalLen);
|
||||
|
||||
strSrcByVal = (LPSTR)bstrOriginal;
|
||||
strDst = (LPSTR)bstrUpperCase;
|
||||
|
||||
for(i=0; i<=cbOriginalLen; i++)
|
||||
*strDst++ = toupper(*strSrcByVal++);
|
||||
|
||||
SysReAllocString (&bstrOriginal, (BSTR)"Arrivederci");
|
||||
|
||||
return bstrUpperCase;
|
||||
}
|
||||
|
||||
|
||||
Il seguente codice Visual Basic richiama le due funzioni UpperCase illustrate
|
||||
in precedenza:
|
||||
|
||||
|
||||
#If Win32 Then
|
||||
|
||||
Private Declare Function UpperCaseByRef Lib "vb4dll32.dll" (Str _
|
||||
As String) As String
|
||||
Private Declare Function UpperCaseByVal Lib "vb4dll32.dll" _
|
||||
(ByVal Str As String) As String
|
||||
|
||||
#Else
|
||||
|
||||
Private Declare Function UpperCaseByRef Lib "vb4dll16.dll" (Str _
|
||||
As String) As String
|
||||
Private Declare Function UpperCaseByVal Lib "vb4dll16.dll" _
|
||||
(ByVal Str As String) As String
|
||||
|
||||
#End If
|
||||
|
||||
|
||||
Private Sub StringTest ()
|
||||
|
||||
Dim Str As String, NewStr As String
|
||||
|
||||
Str = "Salve gente!"
|
||||
MsgBox "In VB, Prima: " & Str
|
||||
NewStr = UpperCaseByRef(Str)
|
||||
MsgBox "In VB, Dopo: " & Str
|
||||
MsgBox "In VB, StrMaiuscola: " & NewStr
|
||||
|
||||
Str = "Salve gente!"
|
||||
MsgBox "In VB, Prima: " & Str
|
||||
NewStr = UpperCaseByVal(Str)
|
||||
MsgBox "In VB, Dopo: " & Str
|
||||
MsgBox "In VB, StrMaiuscola: " & NewStr
|
||||
|
||||
End Sub
|
83
support/interni/src/dumb/esempi/prassi.prg
Executable file
83
support/interni/src/dumb/esempi/prassi.prg
Executable file
@ -0,0 +1,83 @@
|
||||
* programma principale
|
||||
* includere dumb.fll all'inizio del programma
|
||||
* per effettuare automaticamente le operazioni
|
||||
* di HL_LOGIN sulla chiave
|
||||
|
||||
SET LIBR TO DUMB.FLL
|
||||
|
||||
|
||||
? HL_GETAUT(41)
|
||||
? HL_GETAUT(42)
|
||||
? HL_GETAUT(45)
|
||||
? HL_GETAUT(5)
|
||||
? HL_GETAUT(11)
|
||||
? HL_GETAUT(18)
|
||||
? HL_GETAUT(21)
|
||||
|
||||
************ Funzione HL_GETAUT
|
||||
************ prende in input il numero del modulo
|
||||
************ di cui si vuole sapere l'abilitazione
|
||||
************ restituisce:
|
||||
************ 0 se non abilitato
|
||||
************ 1 se abilitato
|
||||
FUNCTION HL_GETAUT
|
||||
PARAMETER MODULO
|
||||
|
||||
DIMENSION RISULTATO(18)
|
||||
DIMENSION TMP_RES(18)
|
||||
OLD_DECIMALS = INT(VAL(SYS(2001,'DECIMALS')))
|
||||
SET DECIMALS TO 6
|
||||
STORE 0 TO ABILITAZIONE
|
||||
STORE "P39S41" TO STRINGA_SEGRETA
|
||||
** Cripta la chiave di ricerca casualmente
|
||||
CASUALE = STR(INT(RAND(-1) * 1000000),6,0)
|
||||
CASUALE = CASUALE + TRANSFORM(MODULO,"@L 999")
|
||||
CHIAVE = STRINGA_SEGRETA + LEFT(CASUALE,3)
|
||||
|
||||
FOR I = 1 TO 16
|
||||
IF I > 9 THEN
|
||||
RISULTATO (I) = 32 && PAD a 16 bytes
|
||||
ELSE
|
||||
RISULTATO(I) = ASC(SUBSTR(CHIAVE,I,1)) + ASC(SUBSTR(CASUALE,I,1))
|
||||
ENDIF
|
||||
ENDFOR
|
||||
|
||||
** Controlla che la chiave codificata non sia uguale
|
||||
=ACOPY(RISULTATO,TMP_RES)
|
||||
=HL_CODE(@RISULTATO)
|
||||
STORE .T. TO UGUALI
|
||||
FOR I = 1 TO 16
|
||||
IF RISULTATO(I) <> TMP_RES(I) THEN
|
||||
UGUALI = .F.
|
||||
ENDIF
|
||||
ENDFOR
|
||||
IF UGUALI THEN
|
||||
SET DECIMALS TO OLD_DECIMALS
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
** Passa alla FLL la stringa da analizzare
|
||||
=HL_GETSTR(@RISULTATO)
|
||||
|
||||
** Ora analizza la stringa ritornata, prima la ricodifica
|
||||
=ACOPY(RISULTATO,TMP_RES)
|
||||
=HL_CODE(@RISULTATO)
|
||||
STORE .T. TO UGUALI
|
||||
FOR I = 1 TO 16
|
||||
IF RISULTATO(I) <> TMP_RES(I) THEN
|
||||
UGUALI = .F.
|
||||
ENDIF
|
||||
ENDFOR
|
||||
IF UGUALI THEN
|
||||
SET DECIMALS TO OLD_DECIMALS
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
** Infine estrae... l'autorizzazione
|
||||
TERZO_CARATTERE = CHR(RISULTATO(3) - ASC(SUBSTR(STRINGA_SEGRETA,3,1)))
|
||||
ULTIMO_CARATTERE = CHR(RISULTATO(9) - ASC(TERZO_CARATTERE))
|
||||
|
||||
ABILITAZIONE = INT(VAL(ULTIMO_CARATTERE))
|
||||
|
||||
SET DECIMALS TO OLD_DECIMALS
|
||||
RETURN ABILITAZIONE
|
89
support/interni/src/dumb/esempi/procom.c
Executable file
89
support/interni/src/dumb/esempi/procom.c
Executable file
@ -0,0 +1,89 @@
|
||||
#include <windows.h>
|
||||
#include <time.h>
|
||||
|
||||
/*
|
||||
Funzione HL_GETAUT
|
||||
prende in input il numero del modulo
|
||||
di cui si vuole sapere l'abilitazione
|
||||
restituisce:
|
||||
0 se non abilitato
|
||||
1 se abilitato
|
||||
*/
|
||||
int hl_getaut(int modulo)
|
||||
{
|
||||
char risultato[18];
|
||||
char tmp_res[18]
|
||||
char stringa_segreta[18]
|
||||
char casuale[36]
|
||||
char chiave[18]
|
||||
int abilitazione = 0,i;
|
||||
|
||||
strcpy(stringa_segreta,"P39S41");
|
||||
/* Generare un numero casuale di 6 cifre... */
|
||||
srand( (unsigned)time( NULL ) );
|
||||
sprintf(casuale,"%d%d%d%d%d%d", rand(),rand(),rand(),rand(),rand(),rand() );
|
||||
casuale[6] = '\0'; /* Tronca a 6 la stringa casuale */
|
||||
/* Gli ultimi 3 caratteri della stringa sara' il modulo zerofilled (ex: 21 -> 021, 7 -> 007 ecc */
|
||||
sprintf(casuale,"%s%03d",casuale,modulo);
|
||||
/* Compone la chiave: stringa_segreta + i primi 3 caratteri della stringa casuale */
|
||||
strcpy(chiave,stringa_segreta);
|
||||
strcat(chiave,casuale);
|
||||
chiave[9] = '\0';
|
||||
|
||||
/* Codifica la stringa chiave tramite la stringa casuale */
|
||||
/* Esegue la somma algebrica dei valori ASCII dei singoli caratteri */
|
||||
for (i=0; i < 16; i++)
|
||||
{
|
||||
if (i>8)
|
||||
risultato[i] = ' '; /* I caratteri in eccesso diventano blanks */
|
||||
else
|
||||
risultato[i] = chiave[i] + casuale[i];
|
||||
}
|
||||
|
||||
/* Chiama la funzione hl_code(), che effettua una ulteriore crittografazione */
|
||||
strcpy(tmp_res,risultato);
|
||||
hl_code(risultato);
|
||||
if (strcmp(risultato,tmp_res) == 0)
|
||||
return 0; /* Se le stringhe sono uguali significa che la chiave non c'e' o che qualcuno sta
|
||||
cercando di sproteggere il programma */
|
||||
|
||||
/* Ora passiamo la stringa criptata alla DLL per farci restituire l'autorizzazione */
|
||||
hl_getstr(risultato);
|
||||
|
||||
/* Chiama la funzione hl_code(), che effettua la crittografazione al contrario */
|
||||
strcpy(tmp_res,risultato);
|
||||
hl_code(risultato);
|
||||
if (strcmp(risultato,tmp_res) == 0)
|
||||
return 0; /* Se le stringhe sono uguali significa che la chiave non c'e' o che qualcuno sta
|
||||
cercando di sproteggere il programma */
|
||||
|
||||
/* Adesso possiamo estrarre l'autorizzazione */
|
||||
/* Ricodifichiamo seguendo il procedimento inverso: */
|
||||
/* Sottraiamo i valori ASCII dal risultato carattere per carattere */
|
||||
terzo_carattere = risultato[2] - stringa_segreta[2];
|
||||
ultimo_carattere = risultato[8] - terzo_carattere;
|
||||
|
||||
abilitazione = ultimo_carattere;
|
||||
|
||||
return abilitazione;
|
||||
}
|
||||
|
||||
int PASCAL WinMain(HINSTANCE cur, HINSTANCE prev, LPSTR cmd, int i)
|
||||
{
|
||||
char m[128];
|
||||
|
||||
/* Visualizza l'autorizzazione per il Modulo 21 */
|
||||
wsprintf(m,"Module %d: %d",21,hl_getaut(21));
|
||||
MessageBox(NULL,m,"API",MB_OK);
|
||||
|
||||
/* Visualizza l'autorizzazione per il Modulo 33 */
|
||||
wsprintf(m,"Module %d: %d",33,hl_getaut(33));
|
||||
MessageBox(NULL,m,"API",MB_OK);
|
||||
|
||||
/* Visualizza l'autorizzazione per il Modulo 7 */
|
||||
wsprintf(m,"Module %d: %d",7,hl_getaut(7));
|
||||
MessageBox(NULL,m,"API",MB_OK);
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
83
support/interni/src/dumb/esempi/procom.prg
Executable file
83
support/interni/src/dumb/esempi/procom.prg
Executable file
@ -0,0 +1,83 @@
|
||||
* programma principale
|
||||
* includere dumb.fll all'inizio del programma
|
||||
* per effettuare automaticamente le operazioni
|
||||
* di HL_LOGIN sulla chiave
|
||||
|
||||
SET LIBR TO DUMB.FLL
|
||||
|
||||
|
||||
? HL_GETAUT(41)
|
||||
? HL_GETAUT(42)
|
||||
? HL_GETAUT(45)
|
||||
? HL_GETAUT(5)
|
||||
? HL_GETAUT(11)
|
||||
? HL_GETAUT(18)
|
||||
? HL_GETAUT(21)
|
||||
|
||||
************ Funzione HL_GETAUT
|
||||
************ prende in input il numero del modulo
|
||||
************ di cui si vuole sapere l'abilitazione
|
||||
************ restituisce:
|
||||
************ 0 se non abilitato
|
||||
************ 1 se abilitato
|
||||
FUNCTION HL_GETAUT
|
||||
PARAMETER MODULO
|
||||
|
||||
DIMENSION RISULTATO(18)
|
||||
DIMENSION TMP_RES(18)
|
||||
OLD_DECIMALS = INT(VAL(SYS(2001,'DECIMALS')))
|
||||
SET DECIMALS TO 6
|
||||
STORE 0 TO ABILITAZIONE
|
||||
STORE "P39S41" TO STRINGA_SEGRETA
|
||||
** Cripta la chiave di ricerca casualmente
|
||||
CASUALE = STR(INT(RAND(-1) * 1000000),6,0)
|
||||
CASUALE = CASUALE + TRANSFORM(MODULO,"@L 999")
|
||||
CHIAVE = STRINGA_SEGRETA + LEFT(CASUALE,3)
|
||||
|
||||
FOR I = 1 TO 16
|
||||
IF I > 9 THEN
|
||||
RISULTATO (I) = 32 && PAD a 16 bytes
|
||||
ELSE
|
||||
RISULTATO(I) = ASC(SUBSTR(CHIAVE,I,1)) + ASC(SUBSTR(CASUALE,I,1))
|
||||
ENDIF
|
||||
ENDFOR
|
||||
|
||||
** Controlla che la chiave codificata non sia uguale
|
||||
=ACOPY(RISULTATO,TMP_RES)
|
||||
=HL_CODE(@RISULTATO)
|
||||
STORE .T. TO UGUALI
|
||||
FOR I = 1 TO 16
|
||||
IF RISULTATO(I) <> TMP_RES(I) THEN
|
||||
UGUALI = .F.
|
||||
ENDIF
|
||||
ENDFOR
|
||||
IF UGUALI THEN
|
||||
SET DECIMALS TO OLD_DECIMALS
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
** Passa alla FLL la stringa da analizzare
|
||||
=HL_GETSTR(@RISULTATO)
|
||||
|
||||
** Ora analizza la stringa ritornata, prima la ricodifica
|
||||
=ACOPY(RISULTATO,TMP_RES)
|
||||
=HL_CODE(@RISULTATO)
|
||||
STORE .T. TO UGUALI
|
||||
FOR I = 1 TO 16
|
||||
IF RISULTATO(I) <> TMP_RES(I) THEN
|
||||
UGUALI = .F.
|
||||
ENDIF
|
||||
ENDFOR
|
||||
IF UGUALI THEN
|
||||
SET DECIMALS TO OLD_DECIMALS
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
** Infine estrae... l'autorizzazione
|
||||
TERZO_CARATTERE = CHR(RISULTATO(3) - ASC(SUBSTR(STRINGA_SEGRETA,3,1)))
|
||||
ULTIMO_CARATTERE = CHR(RISULTATO(9) - ASC(TERZO_CARATTERE))
|
||||
|
||||
ABILITAZIONE = INT(VAL(ULTIMO_CARATTERE))
|
||||
|
||||
SET DECIMALS TO OLD_DECIMALS
|
||||
RETURN ABILITAZIONE
|
64
support/interni/src/dumb/getaut.c
Executable file
64
support/interni/src/dumb/getaut.c
Executable file
@ -0,0 +1,64 @@
|
||||
#include "hlapi_c.h"
|
||||
|
||||
#define BOOLEAN int
|
||||
#define FALSE 0
|
||||
#define TRUE 1
|
||||
#define HLBLOCK 1
|
||||
#define CBITTEST(w,p) (((w) & (0x0001 << (p))) != 0)
|
||||
|
||||
Word _int_tab0[4] = {0xFFFF, 0xFFFF, 0xFFFF, 0x0000};
|
||||
Word SerNo = -1;
|
||||
|
||||
/*
|
||||
Restituisce il numero di serie della chiave
|
||||
*/
|
||||
|
||||
Word getser()
|
||||
|
||||
{
|
||||
Word Val[4];
|
||||
BOOLEAN ok;
|
||||
int i;
|
||||
|
||||
SerNo = -1;
|
||||
if (HL_AVAIL() == STATUS_OK)
|
||||
{
|
||||
SerNo = 0;
|
||||
HL_READ(0, &Val[0]);
|
||||
HL_READ(1, &Val[1]);
|
||||
HL_READ(2, &Val[2]);
|
||||
HL_READ(3, &Val[3]);
|
||||
HL_CODE(EYECAST &Val[0], HLBLOCK);
|
||||
if (Val[0] == 0xFAE8)
|
||||
{
|
||||
SerNo = Val[1];
|
||||
return(Val[1]);
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
Restituisce l'autorizzazione ad utilizzare un modulo
|
||||
*/
|
||||
|
||||
BOOLEAN CGetAut(af)
|
||||
int af; /* numero del modulo */
|
||||
{
|
||||
int i;
|
||||
BOOLEAN ok;
|
||||
|
||||
if (!af) return(!af);
|
||||
if (af > 48) return(FALSE);
|
||||
if (!SerNo) return(!getser());
|
||||
HL_READ(48, &_int_tab0[0]);
|
||||
HL_READ(49, &_int_tab0[1]);
|
||||
HL_READ(50, &_int_tab0[2]);
|
||||
HL_READ(51, &_int_tab0[3]);
|
||||
HL_CODE(EYECAST &_int_tab0[0], HLBLOCK);
|
||||
for (i = 0; i < 4; i++) _int_tab0[i] ^= SerNo;
|
||||
if (_int_tab0[3]) return(FALSE);
|
||||
af--;
|
||||
return(CBITTEST(_int_tab0[af / 16], af % 16));
|
||||
}
|
||||
|
16
support/interni/src/dumb/harddll.def
Executable file
16
support/interni/src/dumb/harddll.def
Executable file
@ -0,0 +1,16 @@
|
||||
LIBRARY HARDDLL
|
||||
DESCRIPTION 'Hardlock DLL'
|
||||
EXETYPE WINDOWS
|
||||
CODE PRELOAD MOVEABLE DISCARDABLE
|
||||
DATA PRELOAD FIXED SINGLE
|
||||
|
||||
HEAPSIZE 4096
|
||||
|
||||
EXPORTS
|
||||
|
||||
H_LOGIN @1
|
||||
H_LOGOUT @2
|
||||
H_GETAUT @3
|
||||
H_GETSER @4
|
||||
|
||||
|
8
support/interni/src/dumb/harddll.lrf
Executable file
8
support/interni/src/dumb/harddll.lrf
Executable file
@ -0,0 +1,8 @@
|
||||
harddll+getaut
|
||||
..\..\hardlock.dll
|
||||
nul
|
||||
libw+
|
||||
/NOD:llibce ldllcew+
|
||||
hlapi_cd
|
||||
harddll.def
|
||||
|
6
support/interni/src/dumb/hardfll.def
Executable file
6
support/interni/src/dumb/hardfll.def
Executable file
@ -0,0 +1,6 @@
|
||||
LIBRARY HARDFLL
|
||||
EXETYPE WINDOWS 3.0
|
||||
CODE PRELOAD MOVABLE SHARED
|
||||
DATA SHARED PRELOAD
|
||||
|
||||
|
9
support/interni/src/dumb/hardfll.lrf
Executable file
9
support/interni/src/dumb/hardfll.lrf
Executable file
@ -0,0 +1,9 @@
|
||||
hardfll+getaut+..\foxlck\libentry
|
||||
..\..\hardlock.fll
|
||||
nul
|
||||
..\foxlck\proapiml+
|
||||
libw+
|
||||
/NOD:llibce ldllcew+
|
||||
hlapi_cd
|
||||
hardfll.def
|
||||
|
137
support/interni/src/dumb/hardlock.c
Executable file
137
support/interni/src/dumb/hardlock.c
Executable file
@ -0,0 +1,137 @@
|
||||
#ifdef FLL
|
||||
#include "../foxlck/pro_ext.h"
|
||||
#else
|
||||
#include <windows.h>
|
||||
#ifdef _MSC_VER
|
||||
#define _BreakPoint() __asm \
|
||||
{ \
|
||||
int 3h \
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "hlapi_c.h"
|
||||
|
||||
#define MODULE 26952
|
||||
#define REFKEY "CAMPOKEY"
|
||||
#define VERKEY "ìpÙˆ¬cê<"
|
||||
|
||||
unsigned int getser();
|
||||
int CGetAut(int);
|
||||
|
||||
#ifdef FLL
|
||||
int FAR Fox_HL_LOGIN()
|
||||
{
|
||||
#ifdef DBG
|
||||
_BreakPoint();
|
||||
#endif
|
||||
/* Questa riga e' solo temporanea! 11.3.1996, per ovviare a problemi sul alcuni PC */
|
||||
/* con la parallela non compatibile */
|
||||
HL_LOGIN(MODULE, DONT_CARE, REFKEY, VERKEY);
|
||||
getser();
|
||||
return 1;
|
||||
}
|
||||
|
||||
int FAR Fox_HL_LOGOUT()
|
||||
{
|
||||
/* Questa riga e' solo temporanea! 11.3.1996, per ovviare a problemi sul alcuni PC */
|
||||
/* con la parallela non compatibile */
|
||||
HL_LOGOUT();
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
long getlong(ParamBlk FAR *parm, int pos)
|
||||
{
|
||||
long val = 0;
|
||||
|
||||
if (pos < parm->pCount && parm->p[pos].val.ev_type == 'I')
|
||||
val = parm->p[pos].val.ev_long;
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
|
||||
int FAR Fox_getser()
|
||||
{
|
||||
int r;
|
||||
/* Questa riga e' solo temporanea! 11.3.1996, per ovviare a problemi sul alcuni PC */
|
||||
/* con la parallela non compatibile */
|
||||
/*r = 1;*/
|
||||
r = getser();
|
||||
_RetInt(r, 10);
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
int FAR Fox_CGetAut(ParamBlk FAR *parm)
|
||||
{
|
||||
int module = getlong(parm, 0);
|
||||
int ok;
|
||||
/* Questa riga e' solo temporanea! 11.3.1996, per ovviare a problemi sul alcuni PC */
|
||||
/* con la parallela non compatibile */
|
||||
/*if (module == 21 || module == 22) ok = 1;*/
|
||||
ok = CGetAut(module);
|
||||
_RetLogical(ok);
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
||||
FoxInfo hardlockFoxInfo[] =
|
||||
{
|
||||
{ "HL_LOGIN", (FPFI)Fox_HL_LOGIN, CALLONLOAD, "" },
|
||||
{ "HL_LOGOUT", (FPFI)Fox_HL_LOGOUT, CALLONUNLOAD, "" },
|
||||
{ "HL_GETSER", (FPFI)Fox_getser, 0, "" },
|
||||
{ "HL_GETAUT", (FPFI)Fox_CGetAut, 1, "I" }
|
||||
};
|
||||
|
||||
FoxTable _FoxTable =
|
||||
{
|
||||
(FoxTable FAR *)0,
|
||||
sizeof(hardlockFoxInfo)/sizeof(FoxInfo),
|
||||
hardlockFoxInfo
|
||||
};
|
||||
|
||||
#else
|
||||
int far pascal _export h_login()
|
||||
{
|
||||
#ifdef DBG
|
||||
_BreakPoint();
|
||||
#endif
|
||||
|
||||
return HL_LOGIN(MODULE, DONT_CARE, REFKEY, VERKEY);
|
||||
}
|
||||
|
||||
int far pascal _export h_logout()
|
||||
{
|
||||
HL_LOGOUT();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int far pascal _export h_getser()
|
||||
{
|
||||
int a ;
|
||||
a = getser();
|
||||
return a;
|
||||
}
|
||||
|
||||
|
||||
int far pascal _export h_getaut(int module)
|
||||
{
|
||||
int ok = CGetAut(module);
|
||||
return ok;
|
||||
}
|
||||
|
||||
int CALLBACK LibMain (HINSTANCE hinst, WORD wDataSeg, WORD cbHeapSize, LPSTR lpszCmdLine)
|
||||
{
|
||||
int rt = h_login();
|
||||
return rt == STATUS_OK;
|
||||
}
|
||||
|
||||
int CALLBACK WEP (int nExitType)
|
||||
{
|
||||
if (nExitType == WEP_FREE_DLL)
|
||||
h_logout();
|
||||
return 1;
|
||||
}
|
||||
#endif
|
172
support/interni/src/dumb/hlapi_c.h
Executable file
172
support/interni/src/dumb/hlapi_c.h
Executable file
@ -0,0 +1,172 @@
|
||||
#ifndef __HLAPI_H
|
||||
#define __HLAPI_H
|
||||
|
||||
/****************************************************************************/
|
||||
/** **/
|
||||
/** Hardlock E-Y-E **/
|
||||
/** API-Structures and definitions **/
|
||||
/** **/
|
||||
/** This file contains some helpful defines to access a Hardlock using **/
|
||||
/** the application programing interface (API) for Hardlock E-Y-E. **/
|
||||
/** **/
|
||||
/** (c) 1992 by ///FAST Electronic **/
|
||||
/** **/
|
||||
/** **/
|
||||
/** Authors : Thomas Schr”ter **/
|
||||
/** Henri Volk **/
|
||||
/** Version : 3.0 **/
|
||||
/** Date : 01-Sep-1992 **/
|
||||
/** **/
|
||||
/****************************************************************************/
|
||||
|
||||
#define EYECAST (char huge *)
|
||||
|
||||
/* -------------------------------- */
|
||||
/* Definitions and API structures : */
|
||||
/* -------------------------------- */
|
||||
typedef unsigned char Byte;
|
||||
typedef signed short Word;
|
||||
typedef unsigned long Long;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Word Use_Key;
|
||||
Byte Key[8];
|
||||
}
|
||||
DES_MODE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Word ModAd; /* Moduleaddress EYE */
|
||||
Word Register; /* Memory register adress */
|
||||
Word Value; /* Memory value */
|
||||
Byte Reserved[4];
|
||||
}
|
||||
EYE_MODE;
|
||||
|
||||
typedef union
|
||||
{
|
||||
DES_MODE Des;
|
||||
EYE_MODE Eye;
|
||||
}
|
||||
HARDWARE;
|
||||
|
||||
typedef struct hl_api
|
||||
{
|
||||
Byte API_Version_ID[2]; /* Version */
|
||||
Word API_Options[2]; /* API Optionflags */
|
||||
Word ModID; /* Modul-ID (EYE = 0...) */
|
||||
HARDWARE Module; /* Hardware type */
|
||||
void far *Data; /* Pointer to cipher data */
|
||||
Word Bcnt; /* Number of blocks */
|
||||
Word Function; /* Function number */
|
||||
Word Status; /* Actual status */
|
||||
Word Remote; /* Remote or local?? */
|
||||
Word Port; /* Port address if local */
|
||||
Word Speed; /* Speed of port if local */
|
||||
Word NetUsers; /* Current Logins (HLSERVER) */
|
||||
Byte ID_Ref[8]; /* Referencestring */
|
||||
Byte ID_Verify[8]; /* Encrypted ID_Ref */
|
||||
Long Task_ID; /* Multitasking program ID */
|
||||
Byte Reserved[200]; /* Reserved area */
|
||||
}
|
||||
HL_API;
|
||||
|
||||
/* ------------- */
|
||||
/* Module-ID's : */
|
||||
/* ------------- */
|
||||
#define EYE_DONGLE 0 /* Hardlock E-Y-E */
|
||||
#define DES_DONGLE 1 /* FAST DES */
|
||||
|
||||
/* --------------------- */
|
||||
/* API function calls : */
|
||||
/* --------------------- */
|
||||
#define API_INIT 0 /* Init API structure */
|
||||
#define API_DOWN 1 /* Free API structure */
|
||||
#define API_FORCE_DOWN 31 /* Force deinintialization */
|
||||
#define API_MULTI_SHELL_ON 2 /* MTS is enabled */
|
||||
#define API_MULTI_SHELL_OFF 3 /* MTS is disabled */
|
||||
#define API_MULTI_ON 4 /* Enable MTS */
|
||||
#define API_MULTI_OFF 5 /* Disable MTS */
|
||||
#define API_AVAIL 6 /* Dongle available? */
|
||||
#define API_LOGIN 7 /* Login dongle server */
|
||||
#define API_LOGOUT 8 /* Logout dongle server */
|
||||
#define API_INFO 9 /* Get API informations */
|
||||
|
||||
/* --------------------------- */
|
||||
/* Data and memory functions : */
|
||||
/* --------------------------- */
|
||||
#define API_KEYE 11 /* Use KEYE for encryption */
|
||||
#define API_READ 20 /* Read one word of dongle EEPROM */
|
||||
#define API_WRITE 21 /* Write one word of dongle EEPROM */
|
||||
#define API_READ_BLOCK 23 /* Read EEPROM in one block */
|
||||
#define API_WRITE_BLOCK 24 /* Write EEPROM in one block */
|
||||
#define API_GET_ID_KEY 30 /* Encrypt ID_Ref to ID_Verify */
|
||||
#define API_ABORT 53 /* Critical Error Abort */
|
||||
|
||||
/* -------------------- */
|
||||
/* Dongle access mode : */
|
||||
/* -------------------- */
|
||||
#define LOCAL_DEVICE 1 /* Query local HL only */
|
||||
#define NET_DEVICE 2 /* Query remote HL only */
|
||||
#define DONT_CARE 3 /* Query local or remote HL */
|
||||
|
||||
/* ------------------ */
|
||||
/* API Status Codes : */
|
||||
/* ------------------ */
|
||||
#define STATUS_OK 0 /* API call was succesfull */
|
||||
#define NOT_INIT 1 /* DONGLE not initialized */
|
||||
#define ALREADY_INIT 2 /* Already initialized */
|
||||
#define UNKNOWN_DONGLE 3 /* Device not supported */
|
||||
#define UNKNOWN_FUNCTION 4 /* Function not supported */
|
||||
#define NO_DONGLE 7 /* No device available */
|
||||
#define NETWORK_ERROR 8 /* A network error occured */
|
||||
#define NO_ACCESS 9 /* No device available */
|
||||
#define INVALID_PARAM 10 /* A wrong parameter occured */
|
||||
#define VERSION_MISMATCH 11 /* HL-Server not API version */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* --------------------- */
|
||||
/* Function prototypes : */
|
||||
/* --------------------- */
|
||||
static int CALL_API (HL_API far *as);
|
||||
Word far HL_LOGIN (Word ModAd, Word Access, char * RefKey, char * VerKey);
|
||||
Word far HL_LOGOUT (void);
|
||||
Word far HL_AVAIL (void);
|
||||
Word far HL_PORTINF (void);
|
||||
Word far HL_ACCINF (void);
|
||||
Word far HL_USERINF (void);
|
||||
Word far HL_MAXUSER (void);
|
||||
Word far HL_MEMINF (void);
|
||||
Word far HL_CODE (void far *Data, Word Count);
|
||||
Word far HL_WRITE (Word Register, Word Value);
|
||||
Word far HL_READ (Word Register, int far *Value);
|
||||
char far * HL_GET_ID (char * id_ref);
|
||||
Word far HL_READBL (char * Eeprom);
|
||||
Word far HL_WRITEBL (char * Eeprom);
|
||||
Word far HL_ABORT (void);
|
||||
Word far HL_VERSION (void);
|
||||
|
||||
/****************************************************************************/
|
||||
/****************************************************************************/
|
||||
/* The following functions map the old Hardlock Calls on the new API. These */
|
||||
/* functions are defined only for compatibility reasons. */
|
||||
/* !!! Don't mix old and new functions. Don't use if it is not necessary.!!!*/
|
||||
/****************************************************************************/
|
||||
/****************************************************************************/
|
||||
void far HL_ON (int Port, Word ModAd);
|
||||
void far HL_OFF (int Port);
|
||||
int far K_EYE (int Port, char huge *Inp, int BlkCnt);
|
||||
void far HL_WR (int Port, int Register, Word Val);
|
||||
Word far HL_RD (int Port, int Register);
|
||||
void far INT_ON (void);
|
||||
void far INT_OFF (void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
BIN
support/interni/src/dumb/hlapi_cd.lib
Executable file
BIN
support/interni/src/dumb/hlapi_cd.lib
Executable file
Binary file not shown.
82
support/interni/src/dumb/makefile
Executable file
82
support/interni/src/dumb/makefile
Executable file
@ -0,0 +1,82 @@
|
||||
#
|
||||
# Comand per avere le versioni di DEBUG:
|
||||
# nmake DBG=D
|
||||
#
|
||||
#
|
||||
|
||||
#
|
||||
# Compiler setup
|
||||
#
|
||||
CC = cl
|
||||
CFLAGS = /nologo /c /ALw # large memory model; SS != DS; DS not loaded at fn entry
|
||||
CFLAGS = $(CFLAGS) /DWINVER=0x0300
|
||||
CFLAGS = $(CFLAGS) /FPc # calls floating point emulator library
|
||||
CFLAGS = $(CFLAGS) /GD # fn entry code optimized for Windows DLLs
|
||||
CFLAGS = $(CFLAGS) /Gs # suppress stack checking (see GP p. 483)
|
||||
CFLAGS = $(CFLAGS) /Oegs # optimizations (optional)
|
||||
CFLAGS = $(CFLAGS) /W2 # set warning level as desired
|
||||
! if "$(DBG)" == "D"
|
||||
CFLAGS = $(CFLAGS) /DDBG
|
||||
CFLAGS = $(CFLAGS) /Zi
|
||||
! endif
|
||||
|
||||
#
|
||||
# Link setup
|
||||
#
|
||||
LINKER = link
|
||||
LFLAGS = /ONERROR:NOEXE/NOFARCALL/NOE
|
||||
! if "$(DBG)" == "D"
|
||||
LFLAGS = $(LFLAGS) /CO
|
||||
! endif
|
||||
|
||||
SUPP=$(SROOT)/support/interni
|
||||
|
||||
DLL=\
|
||||
$(SUPP)/hardlock.dll $(SUPP)/dumb.dll $(SUPP)/dumbvb.dll
|
||||
|
||||
FLL=\
|
||||
$(SUPP)/hardlock.fll $(SUPP)/dumb.fll
|
||||
|
||||
CLEAN=dummy
|
||||
|
||||
.PRECIOUS: $(DLL) $(FLL)
|
||||
|
||||
main: $(DLL) $(FLL) $(CLEAN)
|
||||
|
||||
dummy: getaut.obj
|
||||
del *.obj
|
||||
|
||||
getaut.obj: getaut.c
|
||||
$(CC) $(CFLAGS) getaut.c
|
||||
|
||||
dumbdll.obj: dumb.c
|
||||
$(CC) $(CFLAGS) /Fodumbdll.obj /DDUMBDLL dumb.c
|
||||
|
||||
dumbvb.obj: dumb.c
|
||||
$(CC) $(CFLAGS) /Fodumbvb.obj /DDUMBDLLVB dumb.c
|
||||
|
||||
dumbfll.obj: dumb.c
|
||||
$(CC) $(CFLAGS) /Fodumbfll.obj /DDUMBFLL dumb.c
|
||||
|
||||
harddll.obj: hardlock.c
|
||||
$(CC) $(CFLAGS) /Foharddll.obj /DDLL hardlock.c
|
||||
|
||||
hardfll.obj: hardlock.c
|
||||
$(CC) $(CFLAGS) /Fohardfll.obj /DFLL hardlock.c
|
||||
|
||||
$(SUPP)/hardlock.dll: harddll.obj getaut.obj
|
||||
$(LINKER) $(LFLAGS) @harddll.lrf
|
||||
|
||||
$(SUPP)/dumb.dll: dumbdll.obj getaut.obj
|
||||
$(LINKER) $(LFLAGS) @dumbdll.lrf
|
||||
|
||||
$(SUPP)/dumbvb.dll: dumbvb.obj getaut.obj
|
||||
$(LINKER) $(LFLAGS) @dumbvb.lrf
|
||||
|
||||
$(SUPP)/hardlock.fll: hardfll.obj getaut.obj
|
||||
$(LINKER) $(LFLAGS) @hardfll.lrf
|
||||
|
||||
$(SUPP)/dumb.fll: dumbfll.obj getaut.obj
|
||||
$(LINKER) $(LFLAGS) @dumbfll.lrf
|
||||
|
||||
|
51
support/interni/src/dumb/readme
Executable file
51
support/interni/src/dumb/readme
Executable file
@ -0,0 +1,51 @@
|
||||
Istruzioni per l'uso della libreria HARDLOCK.FLL
|
||||
|
||||
La libreria HARDLOCK.FLL per Foxpro per Windows fornisce il supporto per
|
||||
l'uso delle chiavi di protezione HARDLOCK-EYE.
|
||||
|
||||
Le funzioni contenute nella libreria sono quattro:
|
||||
|
||||
HL_LOGIN Chiamata automaticamente da SET LIBRARY
|
||||
HL_LOGOUT Chiamata automaticamente da RELEASE LIBRARY
|
||||
HL_GETSER Ritorna il numero di serie della chiave
|
||||
HL_GETAUT Controlla l'autorizzazione di un modulo
|
||||
|
||||
Per utilizzare le suddette funzioni basta inserire la seguente linea di
|
||||
codice all'inizio del programma Foxpro:
|
||||
SET LIBRARY TO HARDLOCK.FLL
|
||||
|
||||
Alla fine bisogna invece inserire la riga:
|
||||
RELEASE LIBRARY HARDLOCK.FLL
|
||||
|
||||
*** HL_GETSER ***
|
||||
Questa funzione ritorna un valore intero:
|
||||
-1 Chiave non presente
|
||||
0 Chiave speciale per sviluppatori solamente
|
||||
>0 Numero di serie della chiave
|
||||
|
||||
Esempio:
|
||||
? HL_GETSER()
|
||||
|
||||
*** HL_GETAUT ***
|
||||
Questa funzione ritorna un valore booleano e richiede un argomento di tipo
|
||||
intero corrispondente al numero del modulo di cui si vuole verificare la
|
||||
autorizzazione.
|
||||
|
||||
N.B. Il numero del modulo della NOTA INTEGRATIVA e' 21.
|
||||
|
||||
Esempio:
|
||||
? HL_GETAUT(21)
|
||||
|
||||
|
||||
SEARCHING
|
||||
==================================
|
||||
|
||||
Le chiamate di funzione sono rimaste invariate.
|
||||
Per i personal PS/2 con architettura Microchannel
|
||||
e' necessario settare questa variabile d'ambiente:
|
||||
|
||||
SET HL_SEARCH=378i,278i,3BCi,IPX,NETBIOS
|
||||
|
||||
Naturalmente e' necessario caricare anche la nuova
|
||||
versione di HARDLOCK.FLL.
|
||||
|
BIN
support/interni/src/foxlck/api_mc.lib
Executable file
BIN
support/interni/src/foxlck/api_mc.lib
Executable file
Binary file not shown.
BIN
support/interni/src/foxlck/api_ml.lib
Executable file
BIN
support/interni/src/foxlck/api_ml.lib
Executable file
Binary file not shown.
BIN
support/interni/src/foxlck/api_mm.lib
Executable file
BIN
support/interni/src/foxlck/api_mm.lib
Executable file
Binary file not shown.
BIN
support/interni/src/foxlck/api_ms.lib
Executable file
BIN
support/interni/src/foxlck/api_ms.lib
Executable file
Binary file not shown.
58
support/interni/src/foxlck/dosc7.mak
Executable file
58
support/interni/src/foxlck/dosc7.mak
Executable file
@ -0,0 +1,58 @@
|
||||
#
|
||||
# Sample MS C/C++ 7 makefile for building a DOS API from a single C
|
||||
# module. Also works with Microsoft's Visual C++. Usage:
|
||||
#
|
||||
# >nmake PLBNAME=<source without extension> MODEL=<model> /F dosc7.mak
|
||||
#
|
||||
# The following two lines must be edited to reflect the directory
|
||||
# structure of your machine.
|
||||
#
|
||||
C7DIR = c:\windev # where Microsoft C7 is installed
|
||||
FOXDIR = c:\foxlck # location of FoxPro API
|
||||
|
||||
CC = cl
|
||||
#
|
||||
# Uppercase MODEL because cl options are case sensitive
|
||||
#
|
||||
!IF "$(MODEL)" == "s"
|
||||
MM = S
|
||||
!ELSE IF "$(MODEL)" == "m"
|
||||
MM = M
|
||||
!ELSE IF "$(MODEL)" == "l"
|
||||
MM = L
|
||||
!ELSE IF "$(MODEL)" == "" # default to large if memory model not spec'd
|
||||
MM = L
|
||||
!ELSE
|
||||
MM = $(MODEL)
|
||||
!ENDIF
|
||||
|
||||
CFLAGS = /A$(MM)w /Zp /GW /I$(FOXDIR) /I$(C7DIR)\include /Fs$(PLBNAME).lst
|
||||
|
||||
LINKER = $(C7DIR)\bin\link
|
||||
# LFLAGS = /ONERROR:NOEXE /NOF
|
||||
LFLAGS = /ONERROR:NOEXE /NOE /NONULLS
|
||||
|
||||
OBJS = $(FOXDIR)\api_m$(MM).obj $(PLBNAME).obj
|
||||
LIBS = $(FOXDIR)\api_m$(MM).lib
|
||||
MAPFILE = NUL
|
||||
DEPENDS = $(PLBNAME).obj
|
||||
|
||||
all: $(PLBNAME).plb
|
||||
|
||||
$(PLBNAME).obj : $(PLBNAME).C $(FOXDIR)\pro_ext.h
|
||||
set PATH=$(C7DIR)\bin;%PATH%
|
||||
@$(CC) /c $(CFLAGS) /Fo$(PLBNAME).obj $(PLBNAME).C
|
||||
|
||||
$(PLBNAME).plb : $(DEPENDS)
|
||||
set PATH=$(C7DIR)\bin;%PATH%
|
||||
set LIB=$(C7DIR)\lib
|
||||
echo > NUL @<<$(PLBNAME).lrf
|
||||
$(OBJS: = +^
|
||||
)
|
||||
$@
|
||||
$(MAPFILE)
|
||||
$(LIBS: = +^
|
||||
)
|
||||
$(LFLAGS)
|
||||
<<
|
||||
$(LINKER) @$(PLBNAME).lrf
|
1051
support/interni/src/foxlck/pro_ext.h
Executable file
1051
support/interni/src/foxlck/pro_ext.h
Executable file
File diff suppressed because it is too large
Load Diff
BIN
support/interni/src/foxlck/proapiml.lib
Executable file
BIN
support/interni/src/foxlck/proapiml.lib
Executable file
Binary file not shown.
320
support/interni/src/foxlck/readme.txt
Executable file
320
support/interni/src/foxlck/readme.txt
Executable file
@ -0,0 +1,320 @@
|
||||
README.TXT
|
||||
**********************************************************
|
||||
Microsoft(R) FoxPro(R) Version 2.5
|
||||
Library Construction Kit for Windows(TM)and MS-DOS(R)
|
||||
|
||||
(C)1993 Microsoft Corporation. All Rights Reserved.
|
||||
|
||||
This file contains additions and corrections to the
|
||||
FoxPro Library Construction Kit Developer's Guide.
|
||||
|
||||
**********************************************************
|
||||
========
|
||||
CONTENTS
|
||||
========
|
||||
|
||||
Part Description
|
||||
---- -----------
|
||||
|
||||
1 Additions to Documentation Since Printing
|
||||
2 Corrections to Documentation Since Printing
|
||||
|
||||
----------------------------------------------------------
|
||||
=================================================
|
||||
Part 1: Additions to Documentation Since Printing
|
||||
=================================================
|
||||
|
||||
The EXAMPLES directory contains a FoxPro database with all
|
||||
the example code that is used in the manual. Simply
|
||||
search for the function with example code you wish to
|
||||
copy and then extract the code from the memo field. You
|
||||
are free to use this code in your own applications.
|
||||
|
||||
-----------------------------------------------------------
|
||||
|
||||
The following function has been added:
|
||||
|
||||
WHANDLE _WMainWindow( )
|
||||
|
||||
Description:
|
||||
_WMainWindow( ) returns the WHANDLE of the main FoxPro
|
||||
window in FoxPro for Windows or of the FoxPro desktop
|
||||
in FoxPro for MS-DOS.
|
||||
|
||||
Example:
|
||||
The following example writes a message to the main FoxPro
|
||||
window in FoxPro for Windows or to the FoxPro desktop in
|
||||
FoxPro for MS-DOS.
|
||||
|
||||
FoxPro Code:
|
||||
|
||||
SET LIBRARY TO WMAIN
|
||||
= EXWMAIN()
|
||||
|
||||
C Code:
|
||||
|
||||
#include <pro_ext.h>
|
||||
|
||||
void FAR example(ParamBlk FAR *parm)
|
||||
{
|
||||
WHANDLE wh = _WMainWindow();
|
||||
_WPutStr(wh, "\nThis is the main FoxPro window or desktop.");
|
||||
}
|
||||
|
||||
FoxInfo myFoxInfo[] = {
|
||||
{"EXWMAIN", example, 0, ""},
|
||||
};
|
||||
|
||||
FoxTable _FoxTable = {
|
||||
(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
|
||||
};
|
||||
|
||||
----------------------------------------------------------
|
||||
===================================================
|
||||
Part 2: Corrections to Documentation Since Printing
|
||||
===================================================
|
||||
|
||||
Page 2: In the Reverse.C example:
|
||||
|
||||
The comment "/* Check to see if we can allocate the memory
|
||||
needed. */" is missing the end comment marker */.
|
||||
|
||||
The three-line comment "Since this routine doesn't call
|
||||
any functions that cause memory reorganization . . .
|
||||
prior to de-referencing them (_HandToPtr)" is missing the
|
||||
single line comment marker // in the second and third
|
||||
lines.
|
||||
|
||||
This statement:
|
||||
|
||||
for (i = 0; i << parm->p[0].val.ev_length; i++)
|
||||
*(out_string--) = *(in_string++);
|
||||
|
||||
should be:
|
||||
|
||||
for (i = 0; i < parm->p[0].val.ev_length; i++)
|
||||
*(out_string--) = *(in_string++);
|
||||
|
||||
Change the "<<" in the original example to "<".
|
||||
|
||||
----------------------------------------------------------
|
||||
Page 5: The Value Structure Fields table should include
|
||||
the General FoxPro data type. The applicable fields and
|
||||
their values are listed below:
|
||||
|
||||
val.ev_type = 'G'
|
||||
val.ev_width = FCHAN
|
||||
val.ev_long = length of general field
|
||||
val.ev_real = offset of general field
|
||||
|
||||
----------------------------------------------------------
|
||||
Page 6: The data type FPFI, a FAR pointer to a function
|
||||
returning Int, is mistakenly listed as "FPDI".
|
||||
|
||||
----------------------------------------------------------
|
||||
|
||||
Page 7: In addition to the Point, Rect and EventRec data
|
||||
structures, PointP and RectP should be included. PointP
|
||||
and RectP are identical to Point and Rect except that
|
||||
Point and Rect coordinates are in rows and columns while
|
||||
PointP and RectP coordinates are in pixels.
|
||||
|
||||
----------------------------------------------------------
|
||||
Page 12: The example
|
||||
|
||||
if (parm->p[0].val.ev_type='C'
|
||||
x=parm->p[0].val.ev_length
|
||||
|
||||
should be:
|
||||
|
||||
if (parm->p[0].val.ev_type=='C')
|
||||
x=parm->p[0].val.ev_length;
|
||||
|
||||
Use an expression ==, a closed parenthesis at the end of
|
||||
the first line, and a semicolon at the end of the second
|
||||
line.
|
||||
|
||||
----------------------------------------------------------
|
||||
|
||||
Page 22: When compiling a .PLB library in Microsoft C7 or
|
||||
Visual C/C++, you need to use the following command line:
|
||||
|
||||
CL /O /ALw /Zp /GW
|
||||
|
||||
When linking a .PLB library in Microsoft C7 or C8, you
|
||||
need to use the /NOE and /NONULLS switches.
|
||||
|
||||
Leaving out /NOE can cause redefinition errors. Leaving
|
||||
out /NONULLS will cause FoxPro not to recognize the .PLB
|
||||
as a valid library.
|
||||
|
||||
----------------------------------------------------------
|
||||
|
||||
Page 25: The section heading for the makefile on this page
|
||||
is incorrect. It should say "Microsoft C/C++ Makefile for
|
||||
MS-DOS" instead of "WATCOM C Makefile for MS-DOS."
|
||||
|
||||
----------------------------------------------------------
|
||||
|
||||
Page 26: The makefile on this page should have the
|
||||
following section heading: "WATCOM C Makefile for MS-DOS."
|
||||
|
||||
----------------------------------------------------------
|
||||
|
||||
Page 39: The example doesn't work as intended in all
|
||||
cases. To have it work, you need to change the following
|
||||
line:
|
||||
|
||||
(( char FAR *) _HandToPtr(p1.ev_handle))[p1.ev_length] = '\0';
|
||||
|
||||
to:
|
||||
|
||||
(( char FAR *) _HandToPtr(p0.ev_handle))[p0.ev_length - 1] = '\0';
|
||||
(( char FAR *) _HandToPtr(p1.ev_handle))[p1.ev_length - 1] = '\0';
|
||||
|
||||
----------------------------------------------------------
|
||||
|
||||
Page 85: The following information applies to the
|
||||
_DBSeek( ) function: The struct Value passed to _DBSeek( )
|
||||
(via a pointer) must be of ev_type == 'N' when seeking a
|
||||
numeric field even if that field has 0 decimal digits.
|
||||
If the struct Value has an ev_type of 'I', _DBSeek( )will
|
||||
return the internal error number -302, "Data type
|
||||
mismatch."
|
||||
|
||||
----------------------------------------------------------
|
||||
|
||||
Page 109: The struct EDENV documented with _EdGetEnv( ) isn't
|
||||
correct. The actual structure from PRO_EXT.H appears
|
||||
as follows:
|
||||
|
||||
NOTE: (R) indicates that this member is read-only and
|
||||
can't be set using _EdSetEnv( ).
|
||||
|
||||
(B) indicates that these members takes on one of
|
||||
two Boolean values: 1 = true or 0 = false.
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char filename[MAXFILENAME]; // (R)
|
||||
EDPOS length; // # of bytes in text. (R)
|
||||
unsigned short lenLimit; // Max allowable length. 0 = infinite.
|
||||
|
||||
unsigned short dirty, // Has the file been changed? (R, B)
|
||||
autoIndent, // Auto indent? (B)
|
||||
backup, // Make backup files? (B)
|
||||
addLineFeeds, // Add line feeds when saving? (B)
|
||||
autoCompile, // Shall we auto compile this thing? (B)
|
||||
addCtrlZ, // Add end of file ctrl-z? (B)
|
||||
savePrefs, // Save edit preferences? (B)
|
||||
dragAndDrop, // Allow drag-and-drop. (B)
|
||||
readOnly, // 0 = not r/o, 1 = file is r/o,
|
||||
// 2 = file is r/w, opened r/o,
|
||||
// 3 = file is r/o, opened r/o. (R)
|
||||
status, // Display status bar? (B)
|
||||
lockPrefs, // Can update the preferences ? (B)
|
||||
insertMode; // (B)
|
||||
|
||||
short wrap; // If < 0, new line at Return only.
|
||||
EDPOS selStart; // Selection start. (R)
|
||||
EDPOS selEnd; // Selection end. (R)
|
||||
EDPOS selAnchor; // Selection anchor point. (R)
|
||||
short justMode; // Justification (0 = left, 1 = right, 2 = center).
|
||||
short tabWidth; // TAB size in spaces.
|
||||
|
||||
char fontName[MAXFONTNAME];
|
||||
short fontSize;
|
||||
short fontStyle; // 0 = plain, 1 = bold, 2 = italic, 3 = bold italic.
|
||||
short kind; // Kind of editor session; EDCOMMAND, EDPROGRAM, etc.
|
||||
// defined in pro_ext.h. (R)
|
||||
} EDENV;
|
||||
|
||||
|
||||
----------------------------------------------------------
|
||||
|
||||
Page 122: The syntax for _EdOpenFile() is missing the
|
||||
"mode" argument. It should read:
|
||||
|
||||
_EdOpenFile(TEXT *filename, int mode)
|
||||
|
||||
TEXT *filename; /* File to open. */
|
||||
int mode; /* Mode option. */
|
||||
|
||||
The following Mode options are available:
|
||||
FO_READONLY, FO_WRITEONLY, FO_READWRITE.
|
||||
|
||||
----------------------------------------------------------
|
||||
|
||||
Page 315: zoomEvent is a FoxPro for MS-DOS event. You
|
||||
can't trap for this event in FoxPro for Windows.
|
||||
|
||||
----------------------------------------------------------
|
||||
|
||||
In an EventHandler in the FoxPro for Windows Library
|
||||
Construction Kit, if you make a call to FoxPro which
|
||||
generates another event, the original event record may be
|
||||
changed. This won't happen in the FoxPro for MS-DOS
|
||||
Library Construction Kit. The following example
|
||||
illustrates this:
|
||||
|
||||
#include <pro_ext.h>
|
||||
|
||||
int g_eventid = 0; // Our event handler.
|
||||
|
||||
FAR EventHandler(WHandle theWindow, EventRec FAR *ev)
|
||||
{
|
||||
Point pt;
|
||||
switch (ev->what) // Determine the event type.
|
||||
{
|
||||
case keyDownEvent:
|
||||
if (theWindow == _WMainWindow())
|
||||
return NO;
|
||||
else
|
||||
{
|
||||
pt.h = 35;
|
||||
pt.v = 10;
|
||||
|
||||
// This causes the event handler to be re-entered.
|
||||
_WSize(theWindow, pt);
|
||||
}
|
||||
_PutStr("\nDone with the keyDownEvent");
|
||||
break;
|
||||
|
||||
case sizeEvent:
|
||||
_PutStr("\nSize Event received.");
|
||||
break;
|
||||
|
||||
default:
|
||||
return NO;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
FAR EventExit()
|
||||
{
|
||||
_DeActivateHandler(g_eventid); // Get rid of our event handler.
|
||||
}
|
||||
|
||||
|
||||
FAR Quotes(ParamBlk FAR *parm)
|
||||
{
|
||||
// Set up our event handler.
|
||||
g_eventid = _ActivateHandler(EventHandler);
|
||||
}
|
||||
|
||||
|
||||
FoxInfo myFoxInfo[] = {
|
||||
{"QUOTES", Quotes, 0, ""},
|
||||
{"EVENTEXIT", EventExit, CALLONUNLOAD, ""}
|
||||
};
|
||||
|
||||
FoxTable _FoxTable = {
|
||||
(FoxTable FAR *)0, sizeof(myFoxInfo) / sizeof(FoxInfo), myFoxInfo
|
||||
};
|
||||
|
||||
----------------------------------------------------------
|
||||
|
||||
=================
|
||||
End of README.TXT
|
||||
=================
|
75
support/interni/src/foxlck/winc7.mak
Executable file
75
support/interni/src/foxlck/winc7.mak
Executable file
@ -0,0 +1,75 @@
|
||||
#
|
||||
# Sample MS C/C++ 7 makefile for building an FLL from a single C
|
||||
# module. Also works with Microsoft Visual C++. Usage:
|
||||
#
|
||||
# >nmake FLLNAME=<source without extension> /F winc7.mak
|
||||
#
|
||||
# For further information on building DLLs and the contents of
|
||||
# this make file consult the MS C/C++ 7 E&T and Guide to
|
||||
# Programming (Ch. 20 DLLs) manuals.
|
||||
#
|
||||
# The following two lines must be edited to reflect the directory
|
||||
# structure of your machine.
|
||||
#
|
||||
C7DIR = c:\c700 # where Microsoft C7 is installed
|
||||
FOXDIR = c;\foxlck # location of FoxPro API libraries and PRO_EXT.H
|
||||
|
||||
LIBENTRY = $(C7DIR)\lib\libentry.obj
|
||||
#
|
||||
# Compile setup
|
||||
#
|
||||
CC = cl
|
||||
CFLAGS = /c /ALw # large memory model; SS != DS; DS not loaded at fn entry
|
||||
CFLAGS = $(CFLAGS) /DWINVER=0x0300
|
||||
CFLAGS = $(CFLAGS) /FPc # calls floating point emulator library
|
||||
CFLAGS = $(CFLAGS) /GD # fn entry code optimized for Windows DLLs
|
||||
CFLAGS = $(CFLAGS) /Gs # suppress stack checking (see GP p. 483)
|
||||
CFLAGS = $(CFLAGS) /I$(FOXDIR)
|
||||
CFLAGS = $(CFLAGS) /I$(C7DIR)\include
|
||||
CFLAGS = $(CFLAGS) /Oegs # optimizations (optional)
|
||||
CFLAGS = $(CFLAGS) /W2 # set warning level as desired
|
||||
#
|
||||
# Link setup
|
||||
#
|
||||
MAPFILE = NUL
|
||||
|
||||
LINKER = $(C7DIR)\bin\link
|
||||
LFLAGS = /ONERROR:NOEXE # do not write EXE on error
|
||||
LFLAGS = $(LFLAGS) /NOF # no far call optimization
|
||||
|
||||
OBJS = $(FLLNAME).obj $(LIBENTRY)
|
||||
|
||||
LIBS = $(FOXDIR)\proAPImL.LIB
|
||||
LIBS = $(LIBS) LIBW.LIB
|
||||
LIBS = $(LIBS) /NOD:LLIBCE LDLLCEW # use DLL library
|
||||
|
||||
DEF_FILE = c7.DEF
|
||||
FILES = $(OBJS) $(DEF_FILE) # link depends
|
||||
|
||||
#
|
||||
# The pieces come together
|
||||
#
|
||||
all: $(FLLNAME).fll
|
||||
|
||||
$(FLLNAME).obj : $(FLLNAME).C $(FOXDIR)\pro_ext.h
|
||||
set PATH=$(C7DIR)\bin;%PATH%
|
||||
@$(CC) @<<$(FLLNAME).rsp
|
||||
$(CFLAGS) /Fo$(FLLNAME).obj $(FLLNAME).C
|
||||
<<
|
||||
|
||||
$(FLLNAME).fll : $(FILES)
|
||||
set PATH=$(C7DIR)\bin;%PATH%
|
||||
set LIB=$(C7DIR)\lib
|
||||
#
|
||||
# Write linker arguments to response file
|
||||
#
|
||||
echo > NUL @<<$(FLLNAME).lrf
|
||||
$(OBJS: = +^
|
||||
)
|
||||
$@
|
||||
$(MAPFILE)
|
||||
$(LIBS: = +^
|
||||
)
|
||||
$(DEF_FILE) $(LFLAGS);
|
||||
<<
|
||||
$(LINKER) @$(FLLNAME).lrf
|
Loading…
x
Reference in New Issue
Block a user