Page principale | Hiérarchie des classes | Liste alphabétique | Liste des classes | Liste des fichiers | Membres de classe | Membres de fichier | Pages associées

Surcouche.h

Aller à la documentation de ce fichier.
00001 /*! \file Surcouche.h
00002     \brief Surcouche pour reseau, multitache, console et temp.
00003 
00004     Redéfinie tout un tas de fonctions système pour les rendre portables unix et windows.
00005 
00006     \author     aerith (contact@aerith.biz - www.aerith.biz)
00007     \version    1.0
00008     \date       30/05/2006
00009 */
00010 
00011 #ifndef INCLUDE_RSRC_PORTAGE
00012 #define INCLUDE_RSRC_PORTAGE
00013 
00014 
00015 #include    <stdio.h>
00016 #include    <stdlib.h>
00017 
00018 //! Exécution de méthode
00019 /*! Exécute la méthode \a methode de la class \a class. */
00020 #define CALL(class, methode)    ((class).*(methode))
00021 
00022 #ifdef WIN32
00023     #include    <windows.h>
00024     #include    <winbase.h>
00025     #include    <conio.h>
00026     #include    <winsock.h>
00027     #include    <time.h>
00028 
00029     typedef HANDLE                  THREAD;
00030     typedef HANDLE                  MUTEX;
00031     typedef LPTHREAD_START_ROUTINE  ROUTINE;
00032     typedef LPVOID                  PARAMETRE;
00033 
00034     typedef HANDLE                  CONSOLE;
00035     typedef CHAR_INFO               CHARINFO;
00036 
00037     typedef HINSTANCE               MODULE;
00038 
00039     typedef HANDLE                  DIRECTORY;
00040 #else
00041     #include    <unistd.h>
00042     #include    <sys/socket.h>
00043     #include    <netinet/in.h>
00044     #include    <netdb.h>
00045     #include    <sys/types.h>
00046     #include    <arpa/inet.h>
00047     #include    <sys/time.h>
00048     #include    <pthread.h>
00049     #include    <dlfcn.h>
00050     #include    <signal.h>
00051     #include    <dirent.h>
00052     #include    <sys/stat.h>
00053 
00054     //! Socket
00055     /*! Redéfinie le type utilisé sous unix pour l'utiliser comme celui de windows. */
00056     typedef int                     SOCKET;
00057 
00058     //! Information sur socket
00059     /*! Redéfinie le type utilisé sous unix pour l'utiliser comme celui de windows. */
00060     typedef struct sockaddr_in      SOCKADDR_IN;
00061 
00062     //! Une tache
00063     /*! Crée une tache pour le multitache. */
00064     typedef pthread_t               THREAD;
00065 
00066     //! Une syncronisation
00067     /*! Crée un verou permétant de syncroniser des operations dans une application multitache. */
00068     typedef pthread_mutex_t         MUTEX;
00069 
00070     //! Nom de routine
00071     /*! Pointe sur une fonction. */
00072     typedef void *(*ROUTINE)(void *);
00073 
00074     //! Pointeur sur une variable quelquonque
00075     /*! Pointe sur une variable de n'importe quel type. */
00076     typedef void *                  PARAMETRE;
00077 
00078     //! Buffer de console
00079     /*! Crée un buffer d'affichage pour la console permétant des manipulations.
00080         \bug rechercher l'équivalent unix
00081     */
00082     typedef void *                  CONSOLE;
00083 
00084     //! Info sur carractere
00085     /*! Inforamation sur un carractere de console (couleur, attribut et char).
00086         \bug rechercher l'équivalent unix
00087     */
00088     typedef void *                  CHARINFO;
00089 
00090 
00091     //! Un module dynamique
00092     /*! Crée un module dynamique (dll ou so). */
00093     typedef void *                  MODULE;
00094 
00095     typedef DIR *                   DIRECTORY;
00096 
00097 
00098 #endif
00099 
00100 
00101 //****************************** Multitache ************************************
00102 //! Demare un thread
00103 /*! Demare une tache \a Process avec un parametre \a Param.
00104     \param pThread adresse memoire du thread
00105     \param Process nom de la routine à threader
00106     \param Param parametre a passer à la routine
00107     \return 1 si OK sinon 0
00108     \sa ThreadStop(), ThreadExit() et ThreadWait()
00109 */
00110 int     ThreadStart(THREAD *pThread, ROUTINE Process, PARAMETRE Param);
00111 
00112 //! Stop un thread
00113 /*! Force la fermeture d'une tache.
00114     \param pThread adresse memoire du thread
00115     \sa ThreadStart(), ThreadExit() et ThreadWait()
00116 */
00117 void    ThreadStop(THREAD *pThread);
00118 
00119 //! Sortie d'un thread
00120 /*! Sortie propre d'une tache et renvoie \a iExitCode au systeme.
00121     \param iExitCode code retourner au systeme
00122     \sa ThreadStart(), ThreadStop() et ThreadWait()
00123 */
00124 void    ThreadExit(int iExitCode);
00125 
00126 //! Attent un thread
00127 /*! Pause la tache en cour en attente de la fin de la tache donnée.
00128     \param pThread adresse memoire du thread
00129     \sa ThreadStart(), ThreadStop() et ThreadExit()
00130 */
00131 void    ThreadWait(THREAD *pThread);
00132 
00133 //! Initialise un mutex
00134 /*! Initialise un verou de syncronisation de tache
00135     \param pMutex adresse memoire du mutex
00136     \sa MutexLock(), MutexUnLock() et MutexStop()
00137 */
00138 void    MutexInit(MUTEX *pMutex);
00139 
00140 //! Attent un mutex
00141 /*! Pause la tache en cour en attente du déverouillage du mutex et va le verouillé.
00142     \param pMutex adresse memoire du mutex
00143     \sa MutexInit(), MutexUnLock() et MutexStop()
00144 */
00145 void    MutexLock(MUTEX *pMutex);
00146 
00147 //! Libere un mutex
00148 /*! Déverouille le mutex préalablement réservé.
00149     \param pMutex adresse memoire du mutex
00150     \sa MutexInit(), MutexLock() et ThreadExit()
00151 */
00152 void    MutexUnLock(MUTEX *pMutex);
00153 
00154 //! Stop un mutex
00155 /*! Déverouille et détrui un mutex.
00156     \param pMutex adresse memoire du mutex
00157     \sa MutexInit(), MutexLock() et MutexUnLock()
00158 */
00159 void    MutexStop(MUTEX *pMutex);
00160 
00161 
00162 //******************************* Module ***************************************
00163 //! Charge un module
00164 /*! Charge un module dynamique.
00165     \param pModule adresse mémoire du module chargé.
00166     \param pName fichier du module à charger.
00167     \return 1 si OK sinon 0
00168     \sa ModuleUnLoad() et ModuleImport()
00169 */
00170 int     ModuleLoad(MODULE *pModule, char *pName);
00171 
00172 //! Decharge un module
00173 /*! Decharge un module dynamique.
00174     \param pModule pointeur sur le module à decharger.
00175     \return
00176     \sa ModuleLoad() et ModuleImport()
00177 */
00178 int     ModuleUnload(MODULE *pModule);
00179 
00180 //! Importe une fonction
00181 /*! Importe une fonction depuis un module dynamique.
00182     \param Module pointeur sur module.
00183     \param pFonction adresse mémoir de la fonction importé.
00184     \param pName nom de la fonction à importer.
00185     \return 1 si OK sinon 0
00186     \sa ModuleLoad() et ModuleUnLoad()
00187 */
00188 int     ModuleImport(MODULE Module, ROUTINE *pFonction, char *pName);
00189 
00190 
00191 //******************************* Reseau ***************************************
00192 //! Configure le reseau
00193 /*! Configure l'os pour l'utilisation de socket.
00194     \return 1 si OK sinon 0
00195     \sa SocketUnLoad() et SocketClose()
00196 */
00197 int     SocketLoad(void);
00198 
00199 //! Libere le reseau
00200 /*! Relache la gestion du reseau.
00201     \sa SocketLoad() et SocketClose()
00202 */
00203 void    SocketUnLoad(void);
00204 
00205 //! Ferme un socket
00206 /*! Relache un socket proprement.
00207     \param Sock le socket à fermé
00208     \sa SocketLoad() et SocketUnLoad()
00209 */
00210 void    SocketClose(SOCKET Sock);
00211 
00212 
00213 //********************************** Temp **************************************
00214 //! Attend un certain delai
00215 /*! Fait rentrée la tache en cour d'éxécution en attente pendant \a Delai ms.
00216     \param Delai nombre de milliseconde a attendre
00217 */
00218 void    TempWait(unsigned int Delai);
00219 
00220 //! Marque une pause
00221 /*! Pause la tache en attente de la frappe d'une touche.
00222     \bug rechercher l'équivalent unix
00223 */
00224 void    TempPause();
00225 
00226 
00227 //******************************** Console *************************************
00228 //! Efface la console
00229 /*! Vide le buffer \a stdout et efface la console.
00230 */
00231 void    ConsoleClear();
00232 
00233 #define     COLOR_F_NOIR    0x0000      /*!< police noir        */
00234 #define     COLOR_F_BLEU    0x0001      /*!< police bleu foncé  */
00235 #define     COLOR_F_VERT    0x0002      /*!< police vert foncé  */
00236 #define     COLOR_F_BGRIS   0x0003      /*!< police bleu-gris   */
00237 #define     COLOR_F_MARRON  0x0004      /*!< police marron      */
00238 #define     COLOR_F_POUPRE  0x0005      /*!< police pourpre     */
00239 #define     COLOR_F_KAKI    0x0006      /*!< police kaki        */
00240 #define     COLOR_F_GCLAIR  0x0007      /*!< police gris clair  */
00241 #define     COLOR_F_GRIS    0x0008      /*!< police gris        */
00242 #define     COLOR_F_BCLAIR  0x0009      /*!< police bleu clair  */
00243 #define     COLOR_F_VCLAIR  0x000A      /*!< police vert clair  */
00244 #define     COLOR_F_CYAN    0x000B      /*!< police cyan        */
00245 #define     COLOR_F_ROUGE   0x000C      /*!< police rouge       */
00246 #define     COLOR_F_ROSE    0x000D      /*!< police rose        */
00247 #define     COLOR_F_JAUNE   0x000E      /*!< police jaune       */
00248 #define     COLOR_F_BLANC   0x000F      /*!< police blanc       */
00249 #define     COLOR_B_NOIR    0x0000      /*!< fond noir          */
00250 #define     COLOR_B_BLEU    0x0010      /*!< fond bleu foncé    */
00251 #define     COLOR_B_VERT    0x0020      /*!< fond vert foncé    */
00252 #define     COLOR_B_BGRIS   0x0030      /*!< fond bleu-gris     */
00253 #define     COLOR_B_MARRON  0x0040      /*!< fond marron        */
00254 #define     COLOR_B_POUPRE  0x0050      /*!< fond pourpre       */
00255 #define     COLOR_B_KAKI    0x0060      /*!< fond kaki          */
00256 #define     COLOR_B_GCLAIR  0x0070      /*!< fond gris clair    */
00257 #define     COLOR_B_GRIS    0x0080      /*!< fond gris          */
00258 #define     COLOR_B_BCLAIR  0x0090      /*!< fond bleu clair    */
00259 #define     COLOR_B_VCLAIR  0x00A0      /*!< fond vert clair    */
00260 #define     COLOR_B_CYAN    0x00B0      /*!< fond cyan          */
00261 #define     COLOR_B_ROUGE   0x00C0      /*!< fond rouge         */
00262 #define     COLOR_B_ROSE    0x00D0      /*!< fond rose          */
00263 #define     COLOR_B_JAUNE   0x00E0      /*!< fond jaune         */
00264 #define     COLOR_B_BLANC   0x00F0      /*!< fond blanc         */
00265 
00266 //! Change la couleur de la console
00267 /*! Définie la couleur de police et de fond de la console.
00268     \bug rechercher l'équivalent unix
00269     \param iColor couleur de la zone (ex : COLOR_B_BLANC|COLOR_F_BLEU)
00270     \sa COLOR_F_NOIR, COLOR_F_BLEU, COLOR_F_VERT, COLOR_F_BGRIS, COLOR_F_MARRON, COLOR_F_POUPRE,
00271         COLOR_F_KAKI, COLOR_F_GCLAIR, COLOR_F_GRIS, COLOR_F_BCLAIR, COLOR_F_VCLAIR, COLOR_F_CYAN,
00272         COLOR_F_ROUGE, COLOR_F_ROSE, COLOR_F_JAUNE, COLOR_F_BLANC, COLOR_B_NOIR, COLOR_B_BLEU,
00273         COLOR_B_VERT, COLOR_B_BGRIS, COLOR_B_MARRON, COLOR_B_POUPRE, COLOR_B_KAKI, COLOR_B_GCLAIR,
00274         COLOR_B_GRIS, COLOR_B_BCLAIR, COLOR_B_VCLAIR, COLOR_B_CYAN, COLOR_B_ROUGE, COLOR_B_ROSE,
00275         COLOR_B_JAUNE, COLOR_B_BLANC.
00276 */
00277 void    ConsoleSetColor(unsigned int iColor);
00278 
00279 //! Change la couleur de carracteres
00280 /*! Définie la couleur de police et de fond d'un certain nombre de carracteres.
00281     \bug rechercher l'équivalent unix
00282     \param pConsole pointeur sur le buffer de console
00283     \param iPosX colone du premier carractere
00284     \param iPosY ligne du premier carractere
00285     \param iColor couleur de la zone (ex : COLOR_B_BLANC|COLOR_F_BLEU)
00286     \param iLength nombre de carracteres à coloré
00287     \return 1 si OK sinon 0
00288     \sa COLOR_F_NOIR, COLOR_F_BLEU, COLOR_F_VERT, COLOR_F_BGRIS, COLOR_F_MARRON, COLOR_F_POUPRE,
00289         COLOR_F_KAKI, COLOR_F_GCLAIR, COLOR_F_GRIS, COLOR_F_BCLAIR, COLOR_F_VCLAIR, COLOR_F_CYAN,
00290         COLOR_F_ROUGE, COLOR_F_ROSE, COLOR_F_JAUNE, COLOR_F_BLANC, COLOR_B_NOIR, COLOR_B_BLEU,
00291         COLOR_B_VERT, COLOR_B_BGRIS, COLOR_B_MARRON, COLOR_B_POUPRE, COLOR_B_KAKI, COLOR_B_GCLAIR,
00292         COLOR_B_GRIS, COLOR_B_BCLAIR, COLOR_B_VCLAIR, COLOR_B_CYAN, COLOR_B_ROUGE, COLOR_B_ROSE,
00293         COLOR_B_JAUNE, COLOR_B_BLANC.
00294 */
00295 int     ConsoleCharColor(CONSOLE *pConsole, unsigned int iPosX, unsigned int iPosY, unsigned int iColor, unsigned int iLength);
00296 
00297 //! Ecrit dans le buffer des carracteres
00298 /*! Ecrit des carracteres a une position donnée dans la console
00299     \bug rechercher l'équivalent unix
00300     \param pConsole pointeur sur le buffer de console
00301     \param iPosX colone du premier carractere
00302     \param iPosY ligne du premier carractere
00303     \param pData carracteres à ecrire
00304     \param iLength nombre de carracteres à ecrire, si NULL la taille de \a pData sera prise
00305     \return 1 si OK sinon 0
00306     \sa ConsoleCharColor(), ConsoleCharRead().
00307 */
00308 int     ConsoleCharWrite(CONSOLE *pConsole, unsigned int iPosX, unsigned int iPosY, char *pData, unsigned int iLength);
00309 
00310 //! Lit dans le buffer des carracteres
00311 /*! Lit des carracteres a une position donnée dans la console.
00312     \bug rechercher l'équivalent unix
00313     \param pConsole pointeur sur le buffer de console
00314     \param iPosX colone du premier carractere
00315     \param iPosY ligne du premier carractere
00316     \param pData carracteres à ecrire
00317     \param iLength nombre de carracteres à lire, si NULL la taille de \a pData sera prise
00318     \return 1 si OK sinon 0
00319     \sa ConsoleCharColor(), ConsoleCharWrite().
00320 */
00321 int     ConsoleCharRead(CONSOLE *pConsole, unsigned int iPosX, unsigned int iPosY, char *pData, unsigned int iLength);
00322 
00323 //! Ecrit dans le buffer une zone
00324 /*! Ecrit dans une zone à une position donnée dans la console
00325     \bug rechercher l'équivalent unix
00326     \param pConsole pointeur sur le buffer de console
00327     \param iPosX colone du premier carractere
00328     \param iPosY ligne du premier carractere
00329     \param iLength largeur de la zone
00330     \param iHeight hauteur de la zone
00331     \param pData information sur les carracteres à ecrire
00332     \return 1 si OK sinon 0
00333     \sa ConsoleCharColor(), ConsoleCharRead() et ConsoleZoneRead().
00334 */
00335 int     ConsoleZoneWrite(CONSOLE *pConsole, unsigned int iPosX, unsigned int iPosY, unsigned int iLength, unsigned int iHeight, CHARINFO *pData);
00336 
00337 //! Lit dans le buffer une zone
00338 /*! Lit dans une zone à une position donnée dans la console
00339     \bug rechercher l'équivalent unix
00340     \param pConsole pointeur sur le buffer de console
00341     \param iPosX colone du premier carractere
00342     \param iPosY ligne du premier carractere
00343     \param iLength largeur de la zone
00344     \param iHeight hauteur de la zone
00345     \param pData information sur les carracteres à lire
00346     \return 1 si OK sinon 0
00347     \sa ConsoleCharColor(), ConsoleCharRead() et ConsoleZoneWrite().
00348 */
00349 int     ConsoleZoneRead(CONSOLE *pConsole, unsigned int iPosX, unsigned int iPosY, unsigned int iLength, unsigned int iHeight, CHARINFO *pData);
00350 
00351 
00352 //******************************** Touche **************************************
00353 //! Retourne une touche
00354 /*! Retourne la plus vielle touche du buffer \a stdin.
00355     \return code ascii de la touche
00356     \sa KeyGet2(), KeyWait() et KeyPressed()
00357 */
00358 int     KeyGet();
00359 
00360 //! Retourne une touche sans valider
00361 /*! Retourne la plus vielle touche du buffer \a stdin sans devoir presser 'entrée'.
00362     \bug rechercher l'équivalent unix
00363     \return code ascii de la touche
00364     \sa KeyGet(), KeyWait() et KeyPressed()
00365 */
00366 int     KeyGet2();
00367 
00368 //! Attend la frappe d'une touche et la retourne
00369 /*! Pause la tache en attente de la frappe d'une touche et retourne son code.
00370     \bug rechercher l'équivalent unix
00371     \return 0 code ascii de la touche
00372     \sa KeyGet(), KeyGet2() et KeyPressed()
00373 */
00374 int     KeyWait();
00375 
00376 //! Permet de savoir si une touche a été presser
00377 /*! Permet de savoir si une touche a été presser.
00378     \bug rechercher l'équivalent unix
00379     \return 0 si non presser sinon > 1
00380     \sa KeyGet(), KeyGet2() et KeyWait()
00381 */
00382 int     KeyPressed();
00383 
00384 
00385 //******************************** Fichier *************************************
00386 //! Supprime un fichier
00387 /*! Supprime un fichier via l'os.
00388     \bug rechercher l'équivalent unix
00389     \param pName nom du fichier (relatif ou absolu)
00390     \return 0 si reussi, sinon 1.
00391     \sa FileRename()
00392 */
00393 int     FileDelete(char *pName);
00394 
00395 //! Renome un fichier ou repertoire
00396 /*! Renome un fichier ou repertoire via l'os, permet aussi de le déplacé.
00397     \param pName nom du fichier ou repertoire (relatif ou absolu)
00398     \param pNewName nouveau nom du fichier ou repertoire
00399     \return 0 si reussi, sinon 1.
00400     \sa FileDelete()
00401 */
00402 int     FileRename(char *pName, char *pNewName);
00403 
00404 //******************************* Reperoire ************************************
00405 //! Ouvre un dossier
00406 /*! Ouvre un dossier pour l'explorer et recupère la première donnée.
00407     \param pDirName nom du dossier
00408     \param pFirstData nom de la première donnée du repertoire
00409     \param pIsFile seras mi à 1 si \a pFirstData est un fichier, sinon 0
00410     \return 0 si reussi, sinon 1.
00411     \sa DirClose(), DirGetNext(), DirCreate() et DirDelete()
00412 */
00413 DIRECTORY       DirOpen(char *pDirName, char *pFirstData, int *pIsFile);
00414 
00415 //! Ferme un dossier
00416 /*! Ferme un dossier explorer.
00417     \param pDir pointeur sur dossier
00418     \return 0 si reussi, sinon 1.
00419     \sa DirOpen(), DirGetNext(), DirCreate() et DirDelete()
00420 */
00421 int     DirClose(DIRECTORY *pDir);
00422 
00423 //! Récupère une donnée d'un dossier
00424 /*! Récupère la donnée suivante d'un dossier.
00425     \param pDir pointeur sur dossier
00426     \param pNextData nom de la donnée suivante du repertoire
00427     \param pIsFile seras mi à 1 si \a pNextData est un fichier, sinon 0
00428     \return 0 si reussi, sinon 1.
00429     \sa DirOpen(), DirClose(), DirCreate() et DirDelete()
00430 */
00431 int     DirGetNext(DIRECTORY *pDir, char *pNextData, int *pIsFile);
00432 
00433 //! Crée un repertoire
00434 /*! Crée un repertoire via l'os.
00435     \param pName nom du repertoire (relatif ou absolu)
00436     \return 0 si reussi, sinon 1.
00437     \sa DirOpen(), DirClose(), DirGetNext() et DirDelete()
00438 */
00439 int     DirCreate(char *pName);
00440 
00441 //! Supprime un repertoire
00442 /*! Supprime un repertoire vide via l'os.
00443     \param pName nom du repertoire (relatif ou absolu)
00444     \return 0 si reussi, sinon 1.
00445     \sa DirOpen(), DirClose(), DirGetNext() et DirCreate()
00446 */
00447 int     DirDelete(char *pName);
00448 
00449 #endif
00450 

Généré le Thu Oct 12 01:00:43 2006 pour GestionAsso par  doxygen 1.3.9.1