/***************************************************************************
Global include file for INI Copier
****************************************************************************/
#define INCL_DOSEXCEPTIONS
#define INCL_WINWINDOWMGR
#define INCL_WINSHELLDATA
#include <os2.h>
/* queste macro servono per garantire la compilazione con gli stessi effetti
sia con il Watcom che con il VisualAge */
#if (defined(__IBMC__) || defined (__IBMCPP__))
#define THREADFN _LNK_CONV
typedef void (* _LNK_CONV PTHREADFN)(void *);
#define LINKAGE
#endif
#ifdef __WATCOMC__
#define THREADFN
typedef void (* PTHREADFN)(void *);
#undef EXPENTRY
#define EXPENTRY __export __syscall
#ifdef __cplusplus
#define LINKAGE extern "C"
#else
#define LINKAGE
#endif
#endif
/* macro definitions */
/* Messaggi di comunicazione tra threads */
#define WM_FILENAME WM_USER+100
#define WM_PROFILE WM_USER+102
#define WM_PROFILECLOSED WM_USER+103
/* Costanti per identificare il profilo a cui si riferisce un messaggio */
#define PROFILE_A 1
#define PROFILE_B 2
/* Erroe in un thread */
#define FAILURE 3
/* dimensione dello stack per ciascun thread */
#define THREAD_STACK 0x2000
/* types definitions */
/* Questa struttura costituisce l'header dei blocchi di memoria in cui
vengono immagazzinati i nomi delle sezioni, tiene il conto dei nomi
presenti in modo da sapere quando si puo` liberare il blocco */
typedef struct _blockinfo
{
int Count;
} BlockInfo;
/* dati che vengono passati ai thread */
typedef struct _threaddata
{
HWND hWnd; /* Handle della finestra principale */
ULONG ListId; /* ID della lista delle application */
ULONG SubListId; /* ID della sottolista */
int Profile; /* numero identificativo del profilo */
PSZ fName; /* File name */
} ThreadData;
/* Struttura per memorizzare un elemento della sottolista */
typedef struct _prfsubitem
{
PSZ Name; /* Indirizzo Nome */
BlockInfo *Block; /* Indirizzo dell'inizio del blocco */
struct _prfsubitem *Next; /* Indirizzo nome succesivo */
} PrfSubItem;
/* Struttura per memorizzare un elemento della lista delle applicazioni */
typedef struct _prfitem
{
PSZ Name; /* Indirizzo Nome dell'applicazione */
BlockInfo *Block; /* Indirizzo dell'inizio del blocco */
PrfSubItem *SubList; /* Indirizzo d'inizio della sottolista */
struct _prfitem *Next; /* Indirizzo nome successivo */
} PrfItem;
/* Struttura passata quando e` stato aperto un nuovo profilo */
typedef struct _prfopen
{
HWND hWnd; /* Handle della finestra principale */
int Profile; /* numero identificativo del profilo */
PrfItem *List; /* Inizio della lista linkata */
} PrfOpen;
/* Struttura che contiene i dati relativi a ciascun profilo */
typedef struct _profileinfo
{
enum _status
{
closed, closing, opening, opened
} Status; /* stato attuale del profilo */
HINI hProfile; /* handle del profilo aperto */
PSZ FileName; /* nome del file di profilo */
ThreadData *pthData; /* Indirizzo dati passati al thread */
PrfItem *List; /* inizio lista linkata */
} ProfileInfo;
/* global variables */
extern HAB habMainThread; /* Handle dell HAb del Thread */
extern HWND hMainWindow; /* Handle finestra principale */
/* functions prototypes */
/* Funzioni di gestione della memoria da main.c */
void *Memory(int size); /* alloca la memoria */
void MemFree(void * pv); /* libera la memoria */
/* Funzioni di gestione degli errori da Error.c */
void ErrorBox(int msgid,BOOL fl); /* mostra il messaggi dalle risorse */
void PMErrorBox(HAB hab,BOOL fl); /* mostra l'errore riportato da PM */
void ExcptBox(PEXCEPTIONREPORTRECORD pReport);
char *LoadString(int strid); /* legge una stringa dalle risorse */
/* Funzioni della finestra principale da MainWnd.c */
LINKAGE MRESULT EXPENTRY MainWndProc(HWND hWnd,
ULONG msg,
MPARAM mParam1,
MPARAM mParam2);
LINKAGE MRESULT EXPENTRY SubFrameProc(HWND hWnd,
ULONG msg,
MPARAM mParam1,
MPARAM mParam2);
/* Funzione dell'About Box da about.c */
LINKAGE MRESULT EXPENTRY AboutWndProc(HWND hWnd,
ULONG msg,
MPARAM mParam1,
MPARAM mParam2);
/* Funzioni principali dei thread di apertura e chiusura del profilo
da threads.c */
VOID THREADFN OpenThread(ThreadData *data);
VOID THREADFN CloseThread(PrfOpen *data);
/* Funzioni per gestire le liste da list.c */
PrfItem *BuildLists(HINI hPrf); /* Costruisce la lista di un profilo */
BOOL ClearLists(PrfItem *Item); /* cancella una lista */
/* FillLists riempie la lista delle applicazioni e quella delle
sottosezioni */
void FillLists(HWND hList,HWND hSubList, PrfItem *Item);
/* FindItem trova un'applicazione nella lista */
PrfItem *FindItem(PrfItem *Head, PSZ Name);
/* FindSubItem trova una sottosezione */
PrfSubItem *FindSubItem(PrfSubItem *Head, PSZ Name);
/* FillSubList aggiorna la lista delle sottosezioni */
void FillSubList(HWND hSubList, PrfSubItem *Head);
/* DeleteItem cancella un'applicazione */
PrfItem *DeleteItem(PrfItem *Head, PSZ Name,HWND hList);
/* DeleteSubItem cancella un sottosezione */
PrfSubItem *DeleteSubItem(PrfSubItem *Head,PSZ Name,HWND hSubList);
/* AddItem aggiunge un'applicazione */
PrfItem *AddItem(PrfItem *Head, PSZ Name, HWND hList);
/* AddSubItem aggiunge una sottosezione */
PrfSubItem *AddSubItem(PrfSubItem *Head, PSZ Name);
/* fine di global.h */
Last modified 20-11-96 |