home *** CD-ROM | disk | FTP | other *** search
/ PC Extra Super CD 1998 January / PCPLUS131.iso / DJGPP / V2 / DJLSR201.ZIP / src / libc / posix / utsname / uname.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-10-05  |  988 b   |  45 lines

  1. /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
  2. #include <libc/stubs.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <sys/utsname.h>
  6. #include <errno.h>
  7. #include <dpmi.h>
  8. #include <go32.h>
  9. #include <dos.h>
  10.  
  11. int uname(struct utsname *u)
  12. {
  13.   __dpmi_regs r;
  14.   unsigned short dos_version;
  15.  
  16.   if (!u)
  17.   {
  18.     errno = EFAULT;
  19.     return -1;
  20.   }
  21.  
  22.   dos_version = _get_dos_version(1);
  23.   strncpy(u->sysname, _os_flavor, sizeof(u->sysname) - 1);
  24.   u->sysname[sizeof(u->sysname) - 1] = '\0';
  25.   sprintf(u->release, "%d", dos_version >> 8);
  26.   sprintf(u->version, "%02d", dos_version & 0xff);
  27.   strcpy(u->machine, "pc");
  28.  
  29.   r.x.ax = 0x5e00;
  30.   r.x.ds = __tb >> 4;
  31.   r.x.dx = __tb & 15;
  32.   __dpmi_int(0x21, &r);
  33.   if ((r.x.flags & 1) || (r.h.ch == 0))
  34.     strcpy(u->nodename, "pc");
  35.   else
  36.   {
  37.     int i = 8;
  38.     dosmemget(__tb, 8, u->nodename);
  39.     do {
  40.       u->nodename[i--] = 0;
  41.     } while (i && u->nodename[i] <= ' ');
  42.   }
  43.   return 0;
  44. }
  45.