[comp.sys.atari.st.tech] Possible Supexec/Laser C/other problem

ric@mcrware.UUCP (Ric Yeates) (07/19/90)

Netlanders:

    I have been doing some work lately with MIDI and have run across the
following strange behavior (not MIDI related).

Here is the code (please excuse the formatting [brevity]):

#include <osbind.h>
#include <stdio.h>

unsigned long tick;

gt() {   tick = *(long *)0x4ba;   }    /* get tick counter */

st() {   *(long *)0x4ba = tick;   }    /* set tick counter */

unsigned long get_tick()               /* get the tick counter from system */
{
    Supexec(gt);  return tick;
}

set_tick(ticks)                        /* set the system tick counter */
unsigned long ticks;
{
    tick = ticks;   Supexec(st);
}

wait(sec)                              /* wait for <sec> seconds */
float sec;
{
    long stop = (int)(sec * 200) + get_tick();
    while (get_tick() < stop);
}

main()
{
    register int i;
    for (i = 0; i < 20; i++) {
        wait(0.5);                     /* wait for half a second */
        set_tick((long)i);             /* set the tick counter to some value */
    }
}

    When I run this program, it seems to complete without a problem. 
The next time I access the hard disk (from Laser C) my mouse pointer
turns into a "bee" and never comes back.  The problem seems to also be
related to both calling wait and set_tick together (either alone will
not cause this). 

    What I'm asking is: Can someone else try this under Laser C? Can
someone try this under some other C Compiler? Is there really something
wrong (other than the fact that it's a polling loop [I'm aware of
evnt_timer])?

    Thanks for the consideration.
        Ric Yeates.