home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / mint / mntlib16.lzh / MNTLIB16 / UNAME.C < prev    next >
C/C++ Source or Header  |  1993-08-03  |  2KB  |  83 lines

  1. /*
  2.  * uname() emulation by Dave Gymer. In the public domain.
  3.  * Bugs:
  4.  *    The MiNT version stuff is in the release field. According to the GNU
  5.  *    shell utils this is the way SunOS does it, so we put the TOS
  6.  *    version number in the 'version' field (even under MiNT).
  7.  *
  8.  * (Modified slightly by ERS.)
  9.  */
  10.  
  11. #include <stdlib.h>
  12. #include <unistd.h>
  13. #include <sys/utsname.h>
  14. #include <osbind.h>
  15. #include <stdio.h>
  16. #include <string.h>
  17.  
  18. extern int __mint;
  19. __EXTERN int gethostname __PROTO((char *buf, size_t len));
  20.  
  21. static long _mch;    /* value of the _MCH cookie, if any */
  22. static int tosvers;    /* TOS version number */
  23.  
  24. /*
  25.  * get operating system information; must execute in supervisor mode
  26.  */
  27.  
  28. static void
  29. getinfo()
  30. {
  31.     long *cookie, *sysbase;
  32.  
  33. /* get _MCH cookie value */
  34.     cookie = *((long **) 0x5a0);
  35.     if (cookie) {
  36.         while (*cookie) {
  37.             if (*cookie == 0x5f4d4348L) {    /* _MCH */
  38.                 _mch = cookie[1];
  39.                 break;
  40.             }
  41.             cookie += 2;
  42.         }
  43.     }
  44.  
  45. /* get TOS version number */
  46.     sysbase = *((long **)(0x4f2));
  47.     tosvers = sysbase[0] & 0x0000ffff;
  48. }
  49.  
  50. int
  51. uname(buf)
  52.     struct utsname *buf;
  53. {
  54.     if (!tosvers)
  55.         (void)Supexec(getinfo);
  56.  
  57.     strcpy(buf->sysname, __mint ? "MiNT" : "TOS");
  58.  
  59.     if (gethostname(buf->nodename, 15))
  60.         strcpy(buf->nodename, "??node??");
  61.  
  62.     if (__mint)
  63.         sprintf(buf->release, "%d.%d",
  64.                   (__mint >> 8) & 255L, __mint & 255L);
  65.     else
  66.         buf->release[0] = 0;
  67.  
  68.     sprintf(buf->version, "%d.%d", (tosvers >> 8) & 255, tosvers & 255);
  69.  
  70.     switch( (_mch >> 16) & 0x0ffffL) {
  71.     case 0:
  72.         strcpy(buf->machine, "atarist"); break;
  73.     case 1:
  74.         strcpy(buf->machine, "atariste"); break;
  75.     case 2:
  76.         strcpy(buf->machine, "ataritt"); break;
  77.     default:
  78.         strcpy(buf->machine, "atari");
  79.     }
  80.  
  81.     return 0;
  82. }
  83.