Annotation of uae/src/md-i386-linux/penguin.h, revision 1.1.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.