home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / misc / emu / AROSdev.lha / AROS / workbench / c / version.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-01-27  |  2.7 KB  |  151 lines

  1. /*
  2.     (C) 1995-96 AROS - The Amiga Replacement OS
  3.     $Id: version.c,v 1.2 1997/01/27 00:22:38 ldp Exp $
  4.  
  5.     Desc: Version CLI command
  6.     Lang: english
  7. */
  8. #include <exec/memory.h>
  9. #include <proto/exec.h>
  10. #include <dos/dos.h>
  11. #include <dos/exall.h>
  12. #include <dos/datetime.h>
  13. #include <proto/dos.h>
  14. #include <proto/utility.h>
  15. #include <utility/tagitem.h>
  16. #include <utility/utility.h>
  17. #include <proto/aros.h>
  18. #include <stdio.h>
  19.  
  20. static const char version[] = "$VER: Version 1.1 (4.10.96)\n";
  21.  
  22. UBYTE Buffer[256];
  23. UBYTE Name[64];
  24. ULONG Version;
  25. ULONG Revision;
  26. ULONG Day;
  27. ULONG Month;
  28. ULONG Year;
  29.  
  30. int main (int argc, char ** argv)
  31. {
  32.     IPTR args[1] = { 0L };
  33. #define ARG_File    ((UBYTE *)args[0])
  34.  
  35.     struct RDArgs *rda;
  36.     LONG error=0;
  37.     IPTR pargs[6];
  38.  
  39.     rda = ReadArgs ("File", (IPTR *)&args, NULL);
  40.  
  41.     if (rda != NULL)
  42.     {
  43.     BPTR file;
  44.  
  45.     if (ARG_File)
  46.     {
  47.         file = Open (ARG_File, MODE_OLDFILE);
  48.  
  49.         if (file)
  50.         {
  51.         LONG c;
  52.         LONG len;
  53.  
  54.         while ((c = FGetC (file)) != EOF)
  55.         {
  56.             if (c == '$')
  57.             {
  58.  
  59.     #define NEXT_CHAR(expect)                               \
  60.             if ((c = FGetC (file)) == EOF)      \
  61.                 break;                \
  62.                                 \
  63.             if (c != expect)                    \
  64.                 continue
  65.  
  66.             NEXT_CHAR('V');
  67.             NEXT_CHAR('E');
  68.             NEXT_CHAR('R');
  69.             NEXT_CHAR(':');
  70.  
  71.             while ((c = FGetC (file)) != EOF)
  72.                 if (c != ' ' && c != '\t')
  73.                 break;
  74.  
  75.             UnGetC (file, c);
  76.             Flush (file);
  77.             Read (file, Buffer, sizeof (Buffer));
  78.  
  79.             for (len=0; len<sizeof(Name)-1; len ++)
  80.             {
  81.                 if (Buffer[len] == ' ' || Buffer[len] == '\t')
  82.                 break;
  83.  
  84.                 Name[len] = Buffer[len];
  85.             }
  86.  
  87.             Name[len] = 0;
  88.  
  89.             while (Buffer[len] != ' ' && Buffer[len] != '\t')
  90.                 len ++;
  91.  
  92.             c = StrToLong (&Buffer[len], &Version);
  93.             len += c+1;
  94.             c = StrToLong (&Buffer[len], &Revision);
  95.             len += c+1;
  96.  
  97.             while (Buffer[len] != '(' && len < sizeof(Buffer))
  98.                 len ++;
  99.  
  100.             if (Buffer[len] == '(')
  101.                 len ++;
  102.  
  103.             c = StrToLong (&Buffer[len], &Day);
  104.             len += c+1;
  105.             c = StrToLong (&Buffer[len], &Month);
  106.             len += c+1;
  107.             c = StrToLong (&Buffer[len], &Year);
  108.             len += c+1;
  109.  
  110.             if (Year < 85)
  111.                 Year += 2000;
  112.             else if (Year < 100)
  113.                 Year += 1900;
  114.  
  115.             pargs[0] = (IPTR) Name;
  116.             pargs[1] = Version;
  117.             pargs[2] = Revision;
  118.             pargs[3] = Day;
  119.             pargs[4] = Month;
  120.             pargs[5] = Year;
  121.  
  122.             VPrintf ("%s %ld.%ld (%ld.%ld.%ld)\n", pargs);
  123.             break;
  124.             }
  125.         }
  126.  
  127.         Close (file);
  128.         }
  129.         else
  130.         error = RETURN_FAIL;
  131.     }
  132.     else
  133.     {
  134.         pargs[0] = SysBase->LibNode.lib_Version;
  135.         pargs[1] = SysBase->LibNode.lib_Revision;
  136.  
  137.         VPrintf ("Kickstart %ld.%ld\n", pargs);
  138.     }
  139.  
  140.     FreeArgs (rda);
  141.     }
  142.     else
  143.     error = RETURN_FAIL;
  144.  
  145.     if (error)
  146.     PrintFault (IoErr (), "Dir");
  147.  
  148.     return error;
  149. } /* main */
  150.  
  151.