Listing 2 (lidar.h)
/* --- 
   Header for lidar tasks.  This header includes 
   the IDs for the message queues and shared memory,
   shared structures, and shared definitions.
--- */

#include 	<file.h>
#include 	<time.h>
#include	<types.h>
#include	<stat.h>
#include	<resource.h>
#include	<sys/ipc.h>
#include	<sys/msg.h>
#include	<sys/sem.h>
#include	<sys/shm.h>
#include	<sys/oscalls.h>
#include	<tclock.h>

/* --- queue keys --- */
#define AVAILABLE_Q     1
#define GRAPHICS_Q      2
#define READ_Q          3
#define WRITE_Q         4
/* --- shared memory key --- */
#define FB_KEY          10

/* --- semaphore keys --- */
#define ALIVE_KEY       "alive"

/* --- message structure containing frame buffer
       index (key) for shared memory access --- */
typedef struct message_rec {
        long type;     /* required  */
        int key;       /* index into shared memory */
        } message;

/* -- defines for messages -- */
#define MSG_SIZE 4

/* --- frame buffer number and size --- */
#define N_FRAMES        10
#define FRAME_SIZE      2560
#define WRITE_SIZE      2560
#define READ_SIZE       2070

/* --- number of runs to make for sample program --- */
#define N_RUNS 100

/* --- priorities for each process --- */
#define LIDAR_ACQ    19
#define LIDAR_READ   18
#define LIDAR_WRITE  17
#define LIDAR_GRAPH  16

/* --- useful defines --- */
#define TRUE     1
#define FALSE    0
#define QUIT    -1
#define NOFLAGS  0
#define ANYTYPE  0
