Annotation of uae/src/md-i386-linux/penguin.h, revision 1.1

1.1     ! root        1:  /*
        !             2:   * UAE - The Un*x Amiga Emulator
        !             3:   * 
        !             4:   * "SSSSSYYYMMMETTTTTRIICCC MMMMMMULTIIIIIII PPPPPPENGGGGUIIIIN!!!!!"
        !             5:   *   -- David S. Miller
        !             6:   * 
        !             7:   * Symmetric Multi Penguin support - of course this also works on single
        !             8:   * penguin machines, but it's kind of pointless there.
        !             9:   * 
        !            10:   * This is a rough, simpleminded draft - expect changes when it gets ported 
        !            11:   * to other systems, and/or rewritten by someone who has experience with this
        !            12:   * kind of thing. This is just to get started and to see how this works out.
        !            13:   * 
        !            14:   * We currently use only some simple system calls. You won't need special
        !            15:   * thread libraries for this.
        !            16:   * 
        !            17:   * Copyright 1997 Bernd Schmidt
        !            18:   */
        !            19: 
        !            20: #ifdef SUPPORT_PENGUINS
        !            21: /* We use normal pipes for communication. These are also abused as a kind
        !            22:  * of cheapo semaphores - I don't like SYSV semaphores because they don't
        !            23:  * go away when the program exits - and that's [insert your favourite curse]
        !            24:  * (yes of course you can clean up behind you, but what if someone SIGKILLs
        !            25:  * you?)
        !            26:  */
        !            27: typedef int smp_comm_pipe[2];
        !            28: 
        !            29: static __inline__ void init_comm_pipe (smp_comm_pipe *p)
        !            30: {
        !            31:     pipe (*p);
        !            32: }
        !            33: 
        !            34: static __inline__ void write_comm_pipe_int (smp_comm_pipe *p, int data)
        !            35: {
        !            36:     write((*p)[1], &data, sizeof (int));
        !            37: }
        !            38: 
        !            39: static __inline__ int read_comm_pipe_int_blocking (smp_comm_pipe *p)
        !            40: {
        !            41:     int data;
        !            42:     for (;;) {
        !            43:        if (read ((*p)[0], &data, sizeof (int)) == sizeof (int))
        !            44:            return data;
        !            45:        /* Should never get here. */
        !            46:     }
        !            47: }
        !            48: 
        !            49: typedef int penguin_id;
        !            50: #define BAD_PENGUIN -1
        !            51: extern penguin_id start_penguin (void (*f) (void));
        !            52: #endif

unix.superglobalmegacorp.com

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