Annotation of sbbs/xpdev/semwrap.h, revision 1.1

1.1     ! root        1: /* semwrap.h */
        !             2: 
        !             3: /* Semaphore-related cross-platform development wrappers */
        !             4: 
        !             5: /* $Id: semwrap.h,v 1.10 2004/11/10 23:13:09 rswindell Exp $ */
        !             6: 
        !             7: /****************************************************************************
        !             8:  * @format.tab-size 4          (Plain Text/Source Code File Header)                    *
        !             9:  * @format.use-tabs true       (see http://www.synchro.net/ptsc_hdr.html)              *
        !            10:  *                                                                                                                                                     *
        !            11:  * Copyright 2004 Rob Swindell - http://www.synchro.net/copyright.html         *
        !            12:  *                                                                                                                                                     *
        !            13:  * This library is free software; you can redistribute it and/or                       *
        !            14:  * modify it under the terms of the GNU Lesser General Public License          *
        !            15:  * as published by the Free Software Foundation; either version 2                      *
        !            16:  * of the License, or (at your option) any later version.                                      *
        !            17:  * See the GNU Lesser General Public License for more details: lgpl.txt or     *
        !            18:  * http://www.fsf.org/copyleft/lesser.html                                                                     *
        !            19:  *                                                                                                                                                     *
        !            20:  * Anonymous FTP access to the most recent released source is available at     *
        !            21:  * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net     *
        !            22:  *                                                                                                                                                     *
        !            23:  * Anonymous CVS access to the development source and modification history     *
        !            24:  * is available at cvs.synchro.net:/cvsroot/sbbs, example:                                     *
        !            25:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs login                       *
        !            26:  *     (just hit return, no password is necessary)                                                     *
        !            27:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src                *
        !            28:  *                                                                                                                                                     *
        !            29:  * For Synchronet coding style and modification guidelines, see                                *
        !            30:  * http://www.synchro.net/source.html                                                                          *
        !            31:  *                                                                                                                                                     *
        !            32:  * You are encouraged to submit any modifications (preferably in Unix diff     *
        !            33:  * format) via e-mail to [email protected]                                                                      *
        !            34:  *                                                                                                                                                     *
        !            35:  * Note: If this box doesn't appear square, then you need to fix your tabs.    *
        !            36:  ****************************************************************************/
        !            37: 
        !            38: #ifndef _SEMWRAP_H
        !            39: #define _SEMWRAP_H
        !            40: 
        !            41: #include "gen_defs.h"
        !            42: 
        !            43: #if defined(__cplusplus)
        !            44: extern "C" {
        !            45: #endif
        !            46: 
        !            47: #if defined(__unix__)
        !            48:        #if defined(USE_XP_SEMAPHORES)
        !            49:                #include "xpsem.h"
        !            50:                #define         sem_init(x, y, z)       xp_sem_init(x, y, z)
        !            51:                #define         sem_destroy(x)          xp_sem_destroy(x)
        !            52:                #define         sem_close(x)            xp_sem_close(x)
        !            53:                #define         sem_unlink(x)           xp_sem_unlink(x)
        !            54:                #define         sem_wait(x)                     xp_sem_wait(x)
        !            55:                #define         sem_trywait(x)          xp_sem_trywait(x)
        !            56:                #define         sem_post(x)                     xp_sem_post(x)
        !            57:                #define         sem_getvalue(x,y)               xp_sem_getvalue(x,y)
        !            58:                #define         sem_timedwait(x,y)      xp_sem_timedwait(x,y)
        !            59:                #define         sem_t                           xp_sem_t
        !            60:        #else
        !            61:                #include <semaphore.h>  /* POSIX semaphores */
        !            62:        #endif
        !            63: 
        !            64: #elif defined(_WIN32)  
        !            65: 
        !            66:        #include <process.h>    /* _beginthread */
        !            67: 
        !            68:        /* POSIX semaphores */
        !            69:        typedef HANDLE sem_t;
        !            70:        int sem_init(sem_t*, int pshared, unsigned int value);
        !            71:        int sem_post(sem_t*);
        !            72:        int sem_getvalue(sem_t*, int* value);
        !            73:        int sem_destroy(sem_t*);
        !            74:        #define sem_wait(psem)                          sem_trywait_block(psem,INFINITE)
        !            75:        #define sem_trywait(psem)                       sem_trywait_block(psem,0)
        !            76: 
        !            77: #elif defined(__OS2__) /* These have *not* been tested! */
        !            78: 
        !            79:        /* POSIX semaphores */
        !            80:        typedef HEV sem_t;
        !            81:        #define sem_init(psem,ps,v)                     DosCreateEventSem(NULL,psem,0,0);
        !            82:        #define sem_wait(psem)                          DosWaitEventSem(*(psem),-1)
        !            83:        #define sem_post(psem)                          DosPostEventSem(*(psem))
        !            84:        #define sem_destroy(psem)                       DosCloseEventSem(*(psem))
        !            85: 
        !            86: #else
        !            87: 
        !            88:        #error "Need semaphore wrappers."
        !            89: 
        !            90: #endif
        !            91: 
        !            92: /* NOT POSIX */
        !            93: int sem_trywait_block(sem_t* psem, unsigned long timeout);
        !            94: 
        !            95: 
        !            96: /* Change semaphore to "unsignaled" (NOT POSIX) */
        !            97: #define sem_reset(psem)                                        while(sem_trywait(psem)==0)
        !            98: 
        !            99: #if defined(__cplusplus)
        !           100: }
        !           101: #endif
        !           102: 
        !           103: #endif /* Don't add anything after this line */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.