kemi, tudnál nekem C-ben egy "kicsit" segíteni? Az alábbi pár függvényt akarom átírni Pascalra, de a struct pointer kapcsolatokban egy csomó dolog nem tiszta.struct timerequest *create_timer(ULONG unit)
{
LONG error;
struct MsgPort *timerport;
struct timerequest *TimerIO;
timerport = CreatePort(0, 0);
if (timerport == NULL)
{
return(NULL);
}
TimerIO = (struct timerequest *);
CreateExtIO(timerport, sizeof(struct timerequest));
if (TimerIO == NULL)
{
DeletePort(timerport);
return(NULL);
}
error = OpenDevice(TIMERNAME, unit,(struct IORequest *) TimerIO, 0L);
if (error != 0)
{
delete_timer(TimerIO);
return(NULL);
}
return( TimerIO );
}
void wait_for_timer(struct timerequest *tr, struct timeval *tv)
{
tr->tr_node.io_Command = TR_ADDREQUEST;
tr->tr_time = *tv;
DoIO((struct IORequest *) tr);
}
void delete_timer(struct timerequest *tr )
{
struct MsgPort *tp;
if (tr != 0 )
{
tp = tr->tr_node.io_Message.mn_ReplyPort;
if (tp != 0)
{
DeletePort(tp);
}
CloseDevice( (struct IORequest *) tr);
DeleteExtIO( (struct IORequest *) tr);
}
}
LONG time_delay(struct timeval *tv, LONG unit)
{
struct timerequest *tr;
tr = create_timer(unit);
if (tr == NULL)
{
return(-1L);
}
wait_for_timer(tr, tv);
delete_timer(tr);
return (0L);
} |