Annotation of gforth/wordlibs/unixlib.pri, revision 1.1
1.1 ! jwilke 1: alarm u -- unixlib
! 2: #include <unistd.h>
! 3: alarm(u);
! 4:
! 5: timeusec -- u_usec u_sec unixlib
! 6: #include <time.h>
! 7: struct timeval tv;
! 8: struct timezone zone1;
! 9: gettimeofday(&tv,&zone1);
! 10: u_usec=tv.tv_usec;
! 11: u_sec=tv.tv_sec;
! 12:
! 13: time -- u1 unixlib
! 14: u1=(long) time(NULL);
! 15:
! 16: \ Serial Interface
! 17:
! 18: setttyspeed u u2 -- wior unixlib
! 19: struct termios tm;
! 20: int BT[]={
! 21: 0,B0,50,B50,75,B75,110,B110,134,B134,150,B150,200,B200,300,B300,
! 22: 600,B600,1200,B1200,1800,B1800,2400,B2400,4800,B4800,9600,B9600,19200,B19200,38400,B38400,
! 23: #ifdef B57600
! 24: 57600,B57600,
! 25: #endif
! 26: #ifdef B115200
! 27: 115200,B115200,
! 28: #endif
! 29: #ifdef B230400
! 30: 230400,B230400,
! 31: #endif
! 32: 1};
! 33: speed_t br;
! 34: int i;
! 35: i=0; br=0;
! 36: while (BT[i]!=1)
! 37: { if (BT[i]==u)
! 38: { br=BT[i+1];
! 39: break;
! 40: }
! 41: i=i+2;
! 42: }
! 43: if (BT[i]!=1)
! 44: { tcgetattr(u2,&tm);
! 45: cfsetispeed(&tm, br);
! 46: cfsetospeed(&tm, br);
! 47: tcsetattr(u2,TCSANOW,&tm);
! 48: wior=0;
! 49: } else
! 50: { wior=-1;
! 51: }
! 52:
! 53: setttyraw u -- wior unixlib
! 54: struct termios tm;
! 55: tcgetattr(u,&tm);
! 56: cfmakeraw(&tm);
! 57: tcsetattr(u,TCSANOW,&tm);
! 58: wior=0;
! 59:
! 60: ttytostd c_addr1 u1 -- wior unixlib
! 61: int i;
! 62: wior=0;
! 63: close(0);
! 64: close(1);
! 65: close(2);
! 66: i=open(cstr(c_addr1,u1,0),O_RDWR|O_NOCTTY);
! 67: if ((i==-1) || (i!=0))
! 68: { wior=-1;
! 69: } else
! 70: { i= dup(0);
! 71: i= dup(0);
! 72: i=open("/dev/tty",O_RDWR);
! 73: if (i>=0) {
! 74: ioctl(i,TIOCNOTTY,0);
! 75: (void) close(i);
! 76: }
! 77: }
! 78:
! 79: uopen c_addr u uflags umode -- w2 wior file
! 80: w2 = open(tilde_cstr(c_addr, u, 1), uflags , (mode_t) umode);
! 81: if (w2 == -1) {
! 82: wior = -37;
! 83: } else {
! 84: wior = 0;
! 85: }
! 86:
! 87: uread c_addr u u1 -- u3 wior new
! 88: wior=0;
! 89: if ((u3 = read(u1, c_addr, u))==-1)
! 90: { if (errno==EWOULDBLOCK) u3=0;
! 91: else wior=-37;
! 92: } else
! 93: { if (u3==0) wior=-39;
! 94: }
! 95:
! 96: uwrite c_addr u u1 -- u3 wior new
! 97: wior=0;
! 98: if ((u3 = write(u1, c_addr, u))==-1)
! 99: { if (errno==EAGAIN) u3=0;
! 100: else wior=-37;
! 101: }
! 102:
! 103: uclose u -- wior new
! 104: wior=0;
! 105: if (close(u)) wior=-37;
! 106:
! 107: nonblock u1 -- wior new
! 108: fcntl(u1,F_SETFL,O_NONBLOCK);
! 109: wior=0;
! 110:
! 111: get_cconst c_addr u -- u1 wior new
! 112: static char CONST_NAMES[][32]={
! 113: "O_RDONLY",
! 114: "O_WRONLY",
! 115: "O_RDWR",
! 116: ""};
! 117: static unsigned int CONST_VALUES[]={
! 118: O_RDONLY,
! 119: O_WRONLY,
! 120: O_RDWR};
! 121: int i=0;
! 122: int contd=1;
! 123: u1=0;
! 124: wior=-1;
! 125: while (CONST_NAMES[i] && contd) {
! 126: if (strcmp(CONST_NAMES[i],cstr(c_addr,u,1))==0) {
! 127: contd=0; u1=CONST_VALUES[i]; wior=0;} ;
! 128: i++;
! 129: }
! 130:
! 131: fork -- u new
! 132: u=fork();
! 133:
! 134: wait a_addr -- u new I_wait
! 135: u=wait((int *) a_addr);
! 136:
! 137: waitpid u a_addr u2 -- u3 new I_waitpid
! 138: u3=waitpid((pid_t) u,(int *) a_addr,u2);
! 139:
! 140: execv c_addr1 u1 c_addr2 -- new
! 141: char *s1=cstr(c_addr1, u1, 0);
! 142: execv(s1, (void *) c_addr2);
! 143:
! 144: errno -- u new
! 145: u=errno;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>