home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / nspr30-v.zip / nspr30-v / include / prvrsion.h < prev    next >
C/C++ Source or Header  |  1998-09-25  |  4KB  |  109 lines

  1. /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  2. /*
  3.  * The contents of this file are subject to the Netscape Public License
  4.  * Version 1.0 (the "NPL"); you may not use this file except in
  5.  * compliance with the NPL.  You may obtain a copy of the NPL at
  6.  * http://www.mozilla.org/NPL/
  7.  * 
  8.  * Software distributed under the NPL is distributed on an "AS IS" basis,
  9.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
  10.  * for the specific language governing rights and limitations under the
  11.  * NPL.
  12.  * 
  13.  * The Initial Developer of this code under the NPL is Netscape
  14.  * Communications Corporation.  Portions created by Netscape are
  15.  * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
  16.  * Reserved.
  17.  */
  18.  
  19.  
  20. /* author: jstewart */
  21.  
  22. #if defined(_PRVERSION_H)
  23. #else
  24. #define _PRVERSION_H
  25.  
  26. #include "prtypes.h"
  27.  
  28. PR_BEGIN_EXTERN_C
  29.  
  30. /* All components participating in the PR version protocol must expose
  31.  * a structure and a function. The structure is defined below and named
  32.  * according to the naming conventions outlined further below.  The function
  33.  * is called libVersionPoint and returns a pointer to this structure.
  34.  */
  35.  
  36. /* on NT, always pack the structure the same. */
  37. #ifdef _WIN32
  38. #pragma pack(push, 8)
  39. #endif
  40.  
  41. typedef struct {
  42.     /*
  43.      * The first field defines which version of this structure is in use.
  44.      * At this time, only version 2 is specified. If this value is not 
  45.      * 2, you must read no further into the structure.
  46.      */
  47.     PRInt32    version; 
  48.   
  49.     /* for Version 2, this is the body format. */
  50.     PRInt64         buildTime;      /* 64 bits - usecs since midnight, 1/1/1970 */
  51.     char *          buildTimeString;/* a human readable version of the time */
  52.   
  53.     PRUint8   vMajor;               /* Major version of this component */
  54.     PRUint8   vMinor;               /* Minor version of this component */
  55.     PRUint8   vPatch;               /* Patch level of this component */
  56.   
  57.     PRBool          beta;           /* true if this is a beta component */
  58.     PRBool          debug;          /* true if this is a debug component */
  59.     PRBool          special;        /* true if this component is a special build */
  60.   
  61.     char *          filename;       /* The original filename */
  62.     char *          description;    /* description of this component */
  63.     char *          security;       /* level of security in this component */
  64.     char *          copyright;      /* The copyright for this file */
  65.     char *          comment;        /* free form field for misc usage */
  66.     char *          specialString;  /* the special variant for this build */
  67. } PRVersionDescription;
  68.  
  69. /* on NT, restore the previous packing */
  70. #ifdef _WIN32
  71. #pragma pack(pop)
  72. #endif
  73.  
  74. /*
  75.  * All components must define an entrypoint named libVersionPoint which
  76.  * is of type versionEntryPointType.
  77.  */
  78. PR_EXTERN(const PRVersionDescription *) libVersionPoint(void);
  79.  
  80. typedef const PRVersionDescription *(*versionEntryPointType)(void);
  81.  
  82. /* 
  83.  * Where you declare your libVersionPoint, do it like this: 
  84.  * PR_IMPLEMENT(const PRVersionDescription *) libVersionPoint(void) {
  85.  *  fill it in...
  86.  * }
  87.  */
  88.  
  89. /*
  90.  * NAMING CONVENTION FOR struct
  91.  *
  92.  * all components should also expose a static PRVersionDescription
  93.  * The name of the struct should be calculated as follows:
  94.  * Take the value of filename. (If filename is not specified, calculate
  95.  * a short, unique string.)  Convert all non-alphanumeric characters
  96.  * to '_'.  To this, prepend "PRVersionDescription_".  Thus for libfoo.so,
  97.  * the symbol name is "PRVersionDescription_libfoo_so".
  98.  * so the file should have
  99.  * PRVersionDescription PRVersionDescription_libfoo_so { fill it in };
  100.  * on NT, this file should be declspec export.
  101.  */
  102.  
  103. PR_END_EXTERN_C
  104.  
  105. #endif  /* defined(_PRVERSION_H) */
  106.  
  107. /* prvrsion.h */
  108.  
  109.