Listing 1. x10codes Function in gpm.c

static int x10codes( char *data )
{
    static int nCode, nPrevCode = 0;
    static int fd = 0;
    static struct timeval tv1={0,0}, tv2;
    if( (data[0] >= 0x44) && (data[0]<=0x47) &&
      (data[2]==0x3f) )
    {
    /* X10 Mouse Remote *may* be activated!  */
    /* printf("%02X %02X %02X %02X \n",
       data[0], data[1], data[2], data[3] ); */
    /* Assign the action code and the current
       time */
    nCode = ((int)data[0])*256+data[1];
    GET_TIME(tv2);
    /* If the code is the same as the last one,
    for some codes do not allow immediate
    repetition */
    if( (nCode!=X10_VOLUP) && (nCode!=X10_VOLDOWN)
        && (nCode==nPrevCode)
        && (DIF_TIME(tv1,tv2)<opt_time) );
    else {
        /* Open the pipe to write. Since the reader
           is creating it, this will fail if the
           reader is not ready to accept codes */
        if(!fd) fd = open("/dev/x10", O_WRONLY );
        if( fd > 0 )
        {
            /* Great! Pipe is there and we can
               write to it */
            write(fd, &nCode, sizeof(int) );
        }
    }
    tv1 = tv2;
    nPrevCode = nCode;
    /* Return non-zero to avoid further
       processing */
    return( 1 );
    }
return( 0 );
}