DLPI Programmer's Guide

168 Appendix A
Sample Programs
Raw Mode
#define GOT_DATA 2
#define GOT_BOTH 3
#define GOT_INTR 4
/*-=-* get a message from a stream; return type of message *-=-*/
int
get_msg(fd)
int fd;
{
int flags = 0;
int res, ret;
ctl_area[0] = 0;
dat_area[0] = 0;
ret = 0;
res = getmsg(fd, &ctl, &dat, &flags);
if(res < 0) {
if(errno == EINTR) {
return(GOT_INTR);
} else {
printf(”%s,get_msg: getmsg failed, errno = %d\n”, tag, errno);
exit(1);
}
}
if(ctl.len > 0) {
ret |= GOT_CTRL;
}
if(dat.len > 0) {
ret |= GOT_DATA;
}
return(ret);
}
/*-=-* verify that dl_primitive in ctl_area = prim *-=-*/
int
check_ctrl(prim)
int prim;
{
dl_error_ack_t *err_ack = (dl_error_ack_t *)ctl_area;
if(err_ack->dl_primitive != prim) {
if(err_ack->dl_primitive == DL_ERROR_ACK) {
printf(”%s,check_ctrl: got DL_ERROR_ACK\n”,tag);
printf(” dl_error_primitive = 0x%02x\n”,
err_ack->dl_error_primitive);