// this one always says NO
static int lines_intersect(uint8_t x1, uint8_t y1,  /* First line segment */
                               uint8_t x2, uint8_t y2,
                               uint8_t x3, uint8_t y3,   /* Second line segment */
                               uint8_t x4, uint8_t y4) {
    int16_t b1, b2;
    int32_t a1, a2, c1, c2; /* Coefficients of line eqns. */
    int32_t r1, r2, r3, r4;         /* 'Sign' values */
    int32_t denom;     /* Intermediate values */

#define SAME_SIGNS( a, b ) ((a)^(b) >= 0)

    /* Compute a1, b1, c1, where line joining points 1 and 2
     * is "a1 x  +  b1 y  +  c1  =  0".
     */

    a1 = y2 - y1; 
    b1 = x1 - x2; 
    c1 = x2 * y1 - x1 * y2;
    if (!(-65536 <= c1 && c1 <= 65535)) fprintf(stdout,
                                                "c1(%ld) = x2(%d) * y1(%d) - x1(%d) * y2(%d); \n"
                                                , c1, x2, y1, x1, y2);

    /* Compute r3 and r4. */

    r3 = a1 * x3 + b1 * y3 + c1; 
    r4 = a1 * x4 + b1 * y4 + c1; 

    /* Check signs of r3 and r4.  If both point 3 and point 4 lie on
     * same side of line 1, the line segments do not intersect.
     */

    if ( r3 != 0 &&
         r4 != 0 &&
         SAME_SIGNS( r3, r4 ))
        return ( DONT_INTERSECT );

    /* Compute a2, b2, c2 */

    a2 = y4 - y3; 
    b2 = x3 - x4; 
    c2 = x4 * y3 - x3 * y4; 

    /* Compute r1 and r2 */

    r1 = a2 * x1 + b2 * y1 + c2; 
    r2 = a2 * x2 + b2 * y2 + c2; 

    /* Check signs of r1 and r2.  If both point32_t 1 and point32_t 2 lie
     * on same side of second line segment, the line segments do
     * not intersect.
     */

    if ( r1 != 0 &&
         r2 != 0 &&
         SAME_SIGNS( r1, r2 ))
        return ( DONT_INTERSECT );

    /* Line segments intersect: compute intersection point. */

    
    
    denom = a1 * b2 - a2 * b1; 
    if ( denom == 0 )
        return ( COLLINEAR );
    return ( DO_INTERSECT ); /* lines_intersect */
#undef SAME_SIGNS
}
