home *** CD-ROM | disk | FTP | other *** search
/ Current Shareware 1994 January / SHAR194.ISO / textfile / vndinf.zip / STANDARD.DOC < prev    next >
Text File  |  1993-10-25  |  154KB  |  2,569 lines

  1. /*=================================================================*/
  2. /*              VENDINFO File-Format and Tools Standard            */
  3. /*                  Beta Test Version 0.93, 10/25/93               */
  4. /*                                                                 */
  5. /*   Copyright 1993, Rams' Island Software, Parker CO 80134-5904   */
  6. /*=================================================================*/
  7.  
  8. /*---------------------------------------- about the document -----*/
  9. /*  This "document" will probably look a bit strange to most eyes. */
  10. /*  That's because it's doing double duty.  It serves as a         */
  11. /*  human-readable standard for the file formats and tools         */
  12. /*  behavior associated with the VENDINFO system.  It also serves  */
  13. /*  as a C and C++ "include file", providing the necessary record  */
  14. /*  definitions and other information in compiler-readable form.   */
  15. /*                                                                 */
  16. /*  This unusual presentation is not being done out of laziness    */
  17. /*  (in fact, you'll notice that a fair amount of work has been    */
  18. /*  done to make the document serve both purposes well).  Rather,  */
  19. /*  it is being done in the interest of accuracy and error         */
  20. /*  minimization.  Because the compiler-readable portion of the    */
  21. /*  standard will have been verified by constructing actual tools  */
  22. /*  to create and use the records, the document should be rather   */
  23. /*  unambiguous, and free from at least some of the sorts of       */
  24. /*  errors that might have resulted from separating it into two    */
  25. /*  separate (human and compiler) parts and attempting to keep     */
  26. /*  them synchronized.                                             */
  27. /*-----------------------------------------------------------------*/
  28.  
  29. /*------------------------------------------- public standard -----*/
  30. /*  This VENDINFO standard is a copyrighted work.  That has been   */
  31. /*  done to insure that the development of the standard is well    */
  32. /*  controlled, and that multiple variations are prevented.  Many  */
  33. /*  standards in the computer industry have been damaged or        */
  34. /*  delayed by the existence of multiple, competing versions.      */
  35. /*  It is in the interest of the entire industry that we are       */
  36. /*  attempting to avoid such a development here.  This standard    */
  37. /*  has been developed "in public", with opportunities for public  */
  38. /*  comment on its general ideas and specific content.  That will  */
  39. /*  continue to be the case.                                       */
  40. /*                                                                 */
  41. /*  This standard is made available for free use by all parties,   */
  42. /*  including the development of tools other than -- or even in    */
  43. /*  competition with -- those of the developers of the standard.   */
  44. /*  This standard may also be distributed freely, provided it is   */
  45. /*  in its original form, not altered in any way.                  */
  46. /*-----------------------------------------------------------------*/
  47.  
  48. /*------------------------------------- contacting the author -----*/
  49. /*  The author can be reached in any of the following ways.        */
  50. /*                                                                 */
  51. /*  By mail:                        By electronic means:           */
  52. /*    H. Rudy Ramsey                  CompuServe: 76244,324        */
  53. /*    Rams' Island Software           FidoNet:    1:104/333        */
  54. /*    7644 E. Lakecliff Way           RIME:       RAMSISLE (1235)  */
  55. /*    Parker, CO 80134-5904 (USA)     Internet:                    */
  56. /*                                       76244.324@compuserve.com  */
  57. /*  By phone: 303-841-2848            BBS:        303-841-6269     */
  58. /*-----------------------------------------------------------------*/
  59.  
  60.                      /*****************************/
  61.                      /*        Background         */
  62.                      /*****************************/
  63.  
  64. /*------------------------------------------------ background -----*/
  65. /*  The VENDINFO system allows the author/publisher of a software  */
  66. /*  package to communicate a great deal of information to the      */
  67. /*  prospective distributors of that package.  The record          */
  68. /*  containing this information is included with the distributed   */
  69. /*  package.  The record is highly structured, compressed, and     */
  70. /*  useable via automated tools for convenience and reliability.   */
  71. /*                                                                 */
  72. /*  It is expected that the VENDINFO.DIZ record will replace the   */
  73. /*  VENDOR.DOC, SYSOP.DOC, LICENSE.DOC, WARRANTY.DOC,              */
  74. /*  SITELICE.DOC, FILE_ID.DIZ, and DESC.SDI commonly found in      */
  75. /*  shareware and public-domain software packages.  It may         */
  76. /*  eventually replace READ-ME.DOC and similar files, as well.     */
  77. /*                                                                 */
  78. /*  The VENDINFO system includes this file-format standard, which  */
  79. /*  defines the structure of the main VENDINFO.DIZ record and a    */
  80. /*  few minor related records, and it includes a number of tools   */
  81. /*  for creating and using the record.  It includes a centralized  */
  82. /*  product registry, which is a repository for VENDINFO records   */
  83. /*  and related material about currently available products.  It   */
  84. /*  also includes a software developer's library, for use in the   */
  85. /*  construction of BBS software, vendor database software, etc.   */
  86. /*                                                                 */
  87. /*  The VENDINFO system includes the following tools:              */
  88. /*    VendEdit -- Editor used by software author/publisher to      */
  89. /*                produce VENDINFO record and, if desired, to      */
  90. /*                "brand" executables with product information.    */
  91. /*    VendPrcs -- Processor used by distributor to extract, and to */
  92. /*                make decisions based on, VENDINFO information.   */
  93. /*    VendView -- VENDINFO record viewer for end users.            */
  94. /*                                                                 */
  95. /*  For more detailed information about the overall VENDINFO       */
  96. /*  concept, see the publicly distributed Concept Paper, which is  */
  97. /*  probably available from the same source from which you         */
  98. /*  obtained this document, or contact Rams' Island Software.      */
  99. /*-----------------------------------------------------------------*/
  100.  
  101. /*----------------------------------- a comment on complexity -----*/
  102. /*  A common initial reaction to the VENDINFO file format is that  */
  103. /*  it's rather complex.  This is true.  There is a great deal of  */
  104. /*  information to be conveyed from authors to distributors and    */
  105. /*  to end users, and to pretend otherwise would be to settle for  */
  106. /*  much less than the actually achievable benefits of VENDINFO.   */
  107. /*  The key is not to strive for an artificially simple VENDINFO   */
  108. /*  record, but to surround that record with tools that make it    */
  109. /*  easy to use.  Those who have seen the early version of the     */
  110. /*  toolset appear to be in unanimous agreement that this has been */
  111. /*  accomplished.                                                  */
  112. /*-----------------------------------------------------------------*/
  113.  
  114. /*-- please ignore the next few lines; they're for the compiler ---*/
  115. #if !defined (__VENDINFO_H)     /* excludes entire file if defined */
  116.  #define __VENDINFO_H
  117.  #define  VENDINFO_VERSION          "0.93"
  118.  #define  VENDINFO_VERSION_NUMERIC  93
  119.  #define  VENDINFO_VERSION_DATE     "10/25/93"
  120.  #ifdef VENDINFO_MAIN
  121.   #define EXTERN
  122.  #else
  123.   #define EXTERN extern
  124.  #endif
  125.  
  126.                      /*****************************/
  127.                      /*         The Plan          */
  128.                      /*****************************/
  129.  
  130. /*----------------------------------------- development plans -----*/
  131. /*  This (alpha-test version) file-format description is being     */
  132. /*  released now, slightly in advance of the software developer's  */
  133. /*  library and the toolset, in order to allow an evaluation of    */
  134. /*  structure and information content by those who may be          */
  135. /*  especially interested.  It will be a rare software developer   */
  136. /*  who needs to access the information in the VENDINFO structure  */
  137. /*  directly via the detailed mechanisms described in this         */
  138. /*  standard.  Through a combination of functions and preprocessor */
  139. /*  macros, the software developer's library will provide          */
  140. /*  considerably simplified access.                                */
  141. /*                                                                 */
  142. /*  We are working now to complete the first version of the        */
  143. /*  software developer's library, the VendEdit editor, and the     */
  144. /*  VendPrcs processor.  When these have been completed, they will */
  145. /*  be made available to selected persons for beta test, and that  */
  146. /*  testing activity will also constitute a beta test of the file  */
  147. /*  format itself.  When beta testing is complete, the final       */
  148. /*  version 1.00 of both the file format and the toolset will be   */
  149. /*  released.  Beta testing should start by early September 1993.  */
  150. /*                                                                 */
  151. /*  As soon as those tools have been released, we will then turn   */
  152. /*  our attention to the remaining tools and services, including   */
  153. /*  the (free) VendView viewer for end users, and VendPrcs Plus    */
  154. /*  enhanced processor for distributors, and the Product Registry. */
  155. /*-----------------------------------------------------------------*/
  156.  
  157.                /***************************************/
  158.                /*  Conventions Used in This Standard  */
  159.                /***************************************/
  160.  
  161. /*---------------------------------------- naming conventions -----*/
  162. /*  The naming conventions used in this standard and in the        */
  163. /*  software developer's library are intended to insure that the   */
  164. /*  programmer can tell the nature of an identifier (variable      */
  165. /*  name, function, bit mask, etc.) from its name, and can also    */
  166. /*  easily recognize those identifiers that are part of VENDINFO,  */
  167. /*  to avoid confusing them with others that are part of his/her   */
  168. /*  own program.  Lexical conventions for names are:               */
  169. /*    vibName -- bit mask (where "Name" can be anything).  These   */
  170. /*               should generally be used by ANDing them with the  */
  171. /*               appropriate variable.                             */
  172. /*    vivName -- preprocessor value other than bit mask.  These    */
  173. /*               should generally be used in equality tests (e.g., */
  174. /*                "=="), or as array indexes.                      */
  175. /*    vifName -- function.                                         */
  176. /*    vidName -- data (generally, a variable in the VENDINFO       */
  177. /*               structure).                                       */
  178. /*    vimName -- preprocessor macro (used in library, not in       */
  179. /*               file-format standard per se)                      */
  180. /*    viName  -- data type used within main record (may be         */
  181. /*               structure or special use of ordinary type).       */
  182. /*-----------------------------------------------------------------*/
  183.  
  184. /*----------------------------------------- "shorthand" names -----*/
  185. /*  Each field of the VENDINFO record has associated with it both  */
  186. /*  a "shorthand" name and a data type.  The shorthand name is     */
  187. /*  intended for use in testing or extracting field values by      */
  188. /*  means of the VendPrcs processor or other such tools.  For      */
  189. /*  example, one might extract the short product name using the    */
  190. /*  DOS command:                                                   */
  191. /*       vendprcs VENDINFO.DIZ -xpp                                */
  192. /*  where "x" represents extraction, and "pp" is the shorthand     */
  193. /*  string that represents the product name field.                 */
  194. /*                                                                 */
  195. /*  The shorthand strings used to name the various fields are a    */
  196. /*  part of this standard.  Wherever a field is defined in the     */
  197. /*  later sections of this standard, a comment will contain the    */
  198. /*  shorthand name associated with the field, as well as an        */
  199. /*  indication of its data type.  For example, the product name    */
  200. /*  field definition:                                              */
  201. /*    char         vidProdName[16];      ** pp  s **               */
  202. /*  contains a comment actually shown as:                          */
  203.                                          /* pp  s */
  204. /*  This comment indicates that the shorthand name of this field   */
  205. /*  is "pp", and that it is of type "s".  Types are:               */
  206. /*       b -- boolean                                              */
  207. /*       d -- date                                                 */
  208. /*       n -- number (integer)                                     */
  209. /*       s -- string (usually accessed as one line of text)        */
  210. /*       t -- text block (accessed as multiple lines of text,      */
  211. /*            each of which "behaves" as a string).  May be stored */
  212. /*            as string, string array, or "TextBlock".             */
  213. /*  Where internal structures are used, a question mark indicates  */
  214. /*  a placeholder character.  For example, in the author section,  */
  215. /*       viElectAddr  elec;              ** ae?   **               */
  216. /*  the author electronic addresses will have shorthand names      */
  217. /*  consisting of "ae", followed by an additional character found  */
  218. /*  in the documentation of the viElectAddr structure.             */
  219. /*-----------------------------------------------------------------*/
  220.  
  221.                /**************************************/
  222.                /*   VENDINFO Record and File Types   */
  223.                /**************************************/
  224.  
  225. /*----------------------------------------- VENDINFO.DIZ file -----*/
  226. /*  The main data object used in the VENDINFO system is the        */
  227. /*  VENDINFO.DIZ file.  This file contains a human-readable text   */
  228. /*  section in the front (terminated by 0x1A, also known as ^Z).   */
  229. /*  This text section contains a brief outline of major            */
  230. /*  information about the product, followed by paragraphs devoted  */
  231. /*  to information about warranty, trial use and distribution      */
  232. /*  licenses, a "packing list" of files in the package, etc.       */
  233. /*  Additional information can be provided by the author.          */
  234. /*                                                                 */
  235. /*  Following that section is a compressed data record containing  */
  236. /*  comprehensive information about the product and version,       */
  237. /*  author, ordering, technical support, prices and benefits,      */
  238. /*  and distribution policies.                                     */
  239. /*-----------------------------------------------------------------*/
  240.  
  241. /*------------------------------- secondary VENDINFO.DIZ file -----*/
  242. /*  In multipart products (i.e., products packaged in more than    */
  243. /*  one compressed file), only the first package contains a        */
  244. /*  complete VENDINFO.DIZ file.  Subsequent parts contain a        */
  245. /*  complete data record (to allow independent automatic           */
  246. /*  processing of each package), but highly abbreviated human-     */
  247. /*  readable text.                                                 */
  248. /*-----------------------------------------------------------------*/
  249.  
  250. /*---------------------------------- brief executable records -----*/
  251. /*  The VendEdit editor will have the capability of appending, to  */
  252. /*  executable programs, a brief VENDINFO record.  This record     */
  253. /*  will contain minimal product/version/author information and    */
  254. /*  either an abbreviated or a comprehensive distribution policy   */
  255. /*  section, all highly compressed for efficiency.  This would     */
  256. /*  allow, for example, automated detection of retail software,    */
  257. /*  registered versions, etc., if they showed up in BBS uploads,   */
  258. /*  CD-ROMs, and so on.                                            */
  259. /*                                                                 */
  260. /*  The VendPrcs processor will automatically check the            */
  261. /*  executables in a package for appropriate distribution          */
  262. /*  policies, if desired.                                          */
  263. /*-----------------------------------------------------------------*/
  264.  
  265.            /*   VENDINFO Record and File Types (cont.)  */
  266.  
  267. /*--------------------------------------- intermediate record -----*/
  268. /*  The VendEdit editor, and any similar program for creating      */
  269. /*  VENDINFO records, will maintain information about the product  */
  270. /*  in the form of an "intermediate" record, rather than in the    */
  271. /*  form of an actual VENDINFO.DIZ record.  This is necessary      */
  272. /*  for several reasons:                                           */
  273. /*     1. The  editor needs more information than is actually in   */
  274. /*        the VENDINFO.DIZ record itself.                          */
  275. /*     2, Multiple VENDINFO files may be produced from a single    */
  276. /*        intermediate record.                                     */
  277. /*     3. Portions of the VENDINFO.DIZ record are produced         */
  278. /*        automatically from other portions of the record.         */
  279. /*     4. It helps discourage hacking of VENDINFO.DIZ records if   */
  280. /*        the (readily available) editor that produces them cannot */
  281. /*        be used to modify them.                                  */
  282. /*  The exact content of an intermediate record would vary from    */
  283. /*  editor to editor, and is beyond the scope of this standard.    */
  284. /*  As an aid to developers, however, provision has been made in   */
  285. /*  the file-format standard for marking a particular VENDINFO     */
  286. /*  record as of "intermediate" type.  This would allow an editor  */
  287. /*  to utilize the standard uncompressed form of the VENDINFO      */
  288. /*  record as the first section of its intermediate record.        */
  289. /*-----------------------------------------------------------------*/
  290.  
  291.              /******************************************/
  292.              /*  Structure of the VENDINFO.DIZ Record  */
  293.              /******************************************/
  294.  
  295. /*----------------------- overall VENDINFO.DIZ file structure -----*/
  296. /*  The VENDINFO.DIZ file has the following components:            */
  297. /*                                                                 */
  298. /*     1. A readable text portion of indeterminate length,         */
  299. /*        terminated by a 0x1A (^Z) character.  This portion is    */
  300. /*        intended primarily for human consumption, but some       */
  301. /*        automated uses can be made of it.  For that reason, and  */
  302. /*        because of its legal significance in conveying trial-use */
  303. /*        and distribution rights, some properties of its internal */
  304. /*        structure are covered by this standard.                  */
  305. /*                                                                 */
  306. /*     2. A compressed data record, whose structure and content    */
  307. /*        are defined in this standard.  The compressed form of    */
  308. /*        this record is exactly that which would be produced if   */
  309. /*        it were a standalone ZIP compressed file containing one  */
  310. /*        single file ("VENDINFO.DTA") compressed using PKZIP 1.10 */
  311. /*        algorithms as implemented in TurboPower's Asynch for C++ */
  312. /*        library.                                                 */
  313. /*-----------------------------------------------------------------*/
  314.  
  315. /*---------- internal structure of the compressed data record -----*/
  316. /*  When uncompressed, the VENDINFO data record consists of two    */
  317. /*  parts:                                                         */
  318. /*                                                                 */
  319. /*     1. A fixed length record of type viVendinfoRecord, defined  */
  320. /*        below.                                                   */
  321. /*                                                                 */
  322. /*     2. Zero or more "record extensions", which are optional     */
  323. /*        additional records within the compression envelope, also */
  324. /*        defined below.                                           */
  325. /*-----------------------------------------------------------------*/
  326.  
  327. /*---------------------------- a comment on space utilization -----*/
  328. /*  The VENDINFO record contains many optional fields for which    */
  329. /*  fixed-length portions of the record have been allocated.  A    */
  330. /*  common initial reaction is that this is wasteful of space.     */
  331. /*  Please note, however, that fixed-length fields are easier to   */
  332. /*  use, and that any wasted space is actually reclaimed by the    */
  333. /*  compression algorithm.  Tools that create VENDINFO records are */
  334. /*  required to place zero (null) characters in all unused bytes.  */
  335. /*  As a result, the compression algorithm will be MORE effective  */
  336. /*  at avoiding waste than a variable-length record could be.      */
  337. /*-----------------------------------------------------------------*/
  338.  
  339.      /*************************************************************/
  340.      /*  Human-Readable Text Portion of the  VENDINFO.DIZ Record  */
  341.      /*************************************************************/
  342.  
  343. /*------------------------- overall structure of text portion -----*/
  344. /*  The text portion of the VENDINFO.DIZ record is intended to be  */
  345. /*  read by humans, though it also contains structure and format   */
  346. /*  constraints that allow limited use of its content by automated */
  347. /*  tools, which operate by searching for, and perhaps parsing,    */
  348. /*  specified text.  The text portion contains a VENDINFO          */
  349. /*  information header, which has an exact specified text, with    */
  350. /*  minor possible variations, followed by a generation line       */
  351. /*  indicating how and when this particular VENDINFO record was    */
  352. /*  created.  Then a series of sections appear, some created       */
  353. /*  automatically and some by user input, some mandatory and some  */
  354. /*  optional.  Each is preceded by a section label.  The details   */
  355. /*  of all these sections are presented below.                     */
  356. /*-----------------------------------------------------------------*/
  357.  
  358. /*------------------------------- VENDINFO information header -----*/
  359. /*  It will frequently happen that a user or distributor will      */
  360. /*  encounter the VENDINFO system for the first time by actually   */
  361. /*  receiving a package with a VENDINFO.DIZ record in it.  It is   */
  362. /*  important that the human-readable portion of the record begin  */
  363. /*  with sufficient information about VENDINFO, and about          */
  364. /*  obtaining the VENDINFO toolset, that the recipient is able to  */
  365. /*  make full, effective use of the system.  Accordingly, each     */
  366. /*  VENDINFO record will begin with the exact text shown below,    */
  367. /*  except that a developer of an alternative VENDINFO record      */
  368. /*  creation tool may add an additional paragraph at the end,      */
  369. /*  without removing any of the indicated text, and consistent in  */
  370. /*  style, format, and layout with the information already there.  */
  371. /*  This paragraph will allow the developer to advertise the       */
  372. /*  availability of his own tools.                                 */
  373. /*-----------------------------------------------------------------**
  374. ┌────────────────────────────────────────────────────────────────────┐
  375. │     VENDINFO Software Product Distribution Information Record      │
  376. │                                                                    │
  377. │ This record is a means of conveying information about a software   │
  378. │ product from the author to distributors and users.  It contains a  │
  379. │ normal, "human-readable" section (you're reading it now), followed │
  380. │ by a compressed data record.  The data record contains a great     │
  381. │ deal of information in a form useable by automated tools.  This    │
  382. │ allows BBSes, disk vendors, etc. to automatically test for         │
  383. │ permission to distribute, and to automatically extract product     │
  384. │ information for use in BBS files databases, vendor catalogs, etc.  │
  385. │                                                                    │
  386. │ The VENDINFO file standard is published and freely useable.        │
  387. │                                                                    │
  388. │ The VENDINFO toolset includes a free end-user viewer, processing   │
  389. │ tools for use by distributors (BBSes, shareware disk vendors,      │
  390. │ etc.), and the editor used by author/publishers to produce these   │
  391. │ records.  These tools are either free or low cost shareware.       │
  392. │ The toolset can be obtained from many sources, including the       │
  393. │ originators of VENDINFO:                                           │
  394. │                                                                    │
  395. │ Rams' Island Software   Voice: 303-841-2848  CompuServe: 76244,324 │
  396. │ 7644 E. Lakecliff Way     BBS: 303-841-6269     FidoNet: 1:104/333 │
  397. │ Parker, CO 80134-5904 USA                          RIME: RAMSISLE  │
  398. └────────────────────────────────────────────────────────────────────┘
  399.  
  400.               **  Human-Readable Text Portion (cont.) **
  401.  
  402. **---------------------------------- VENDINFO generation line -----*/
  403. /*  The next line following the header box, just above, will       */
  404. /*  indicate the version number of the VENDINFO standard used to   */
  405. /*  construct the record, the tool used to create it (and its      */
  406. /*  version number), and the date of creation.  The format must be */
  407. /*  exactly as shown, except for substitution of version numbers,  */
  408. /*  tool name (one word), and creation date.                       */
  409. /*-----------------------------------------------------------------**
  410. VENDINFO standard V1.00, produced by VendEdit V1.10, 12-Jun-93
  411.  
  412. **--------------------------- secondary record identification -----*/
  413. /*  In "secondary" VENDINFO files (in multipart products, the      */
  414. /*  VENDINFO.DIZ files in packages after the first, are secondary  */
  415. /*  files), some portions of the human-readable section are        */
  416. /*  omitted.  To warn the reader when this occurs, the following   */
  417. /*  text is added.                                                 */
  418. /*-----------------------------------------------------------------**
  419. ┌────────────────────────────────────────────────────────────────────┐
  420. │ Because this is not the primary package of this multi-package      │
  421. │ product, the readable-text portion of this VENDINFO record is      │
  422. │ somewhat abbreviated.  For complete information, see the VENDINFO  │
  423. │ file in the first package listed below under "Required Packages".  │
  424. └────────────────────────────────────────────────────────────────────┘
  425.  
  426. **------------------------------ standards for section labels -----*/
  427. /*  Section labels must be displayed exactly as shown in the       */
  428. /*  respective sections below, including the five equal-sign ('=') */
  429. /*  characters and a space before the label, and a space and at    */
  430. /*  least five equal-sign characters after the label.  The         */
  431. /*  spelling and capitalization of the labels must be exactly as   */
  432. /*  shown.  This will allow various automated tools to find the    */
  433. /*  relevant sections.  If additional sections are desired using   */
  434. /*  labels other than those shown here, those sections should      */
  435. /*  appear in the location indicated for "other information", and  */
  436. /*  their labels should be in the same format, but using the       */
  437. /*  minus ('-') character in place of the equal-sign character.    */
  438. /*  Each section label is preceded by two blank lines.             */
  439. /*-----------------------------------------------------------------*/
  440.  
  441.               /*  Human-Readable Text Portion (cont.) */
  442.  
  443. /*------------------------------- product information section -----*/
  444. /*  The "Product Information" section should contain enough basic  */
  445. /*  information about the product to allow the end-user or         */
  446. /*  distributor to determine the program's relevance, and to allow */
  447. /*  the end-user to order the product or obtain technical support  */
  448. /*  for it.  The information content of this section is not rigid. */
  449. /*  An example is shown below.  In a "secondary" VENDINFO.DIZ      */
  450. /*  file, this section might be somewhat briefer.                  */
  451. /*-----------------------------------------------------------------**
  452. ===== Product Information ============================================
  453.  
  454. Product:                InContext Work Environment Manager
  455.    Version:             1.10
  456.    Version Date:        03/19/93
  457.    Required Packages:    INCX110D INCX110P
  458.    This package is:     INCX110D
  459.    Product Description: <description appears here>
  460.  
  461. Minimal Required Configuration
  462.    CPU:                 8086 (IBM PC) or compatible
  463.    Operating System:    DOS 3.1 or later
  464.    Other requirements:  Hard disk
  465.  
  466. To Purchase Product
  467.    Author/Publisher:
  468.       Rams' Island Software
  469.       7644 E. Lakecliff Way
  470.       Parker, CO 80134-5904
  471.       USA
  472.    Order Phone: 303-841-2848
  473.    Electronic addresses:
  474.       CompuServe: 76244,324
  475.       FidoNet: 1:104/333
  476.       Internet: 76244.324@compuserve.com
  477.       RIME: RAMSISLE
  478.  
  479. For Technical Support
  480.    Address:
  481.       Rams' Island Software
  482.       7644 E. Lakecliff Way
  483.       Parker, CO 80134-5904
  484.       USA
  485.    Support Phone: 303-841-2848
  486.    Support BBS: Rams' Island BBS, 303-841-6269
  487.    Electronic addresses:
  488.       CompuServe: 76244,324
  489.       FidoNet: 1:104/333
  490.       Internet: 76244.324@compuserve.com
  491.       RIME: RAMSISLE
  492.  
  493.               **  Human-Readable Text Portion (cont.) **
  494.  
  495. **------------------------- information for users ("read-me") -----*/
  496. /*  This is an optional section which can be provided by the       */
  497. /*  author.  This allows the author to fully replace the "READ-ME" */
  498. /*  file with VENDINFO (though a single-line READ-ME.DOC file      */
  499. /*  pointing to VENDINFO.DIZ would probably be wise until folks    */
  500. /*  become accustomed to VENDINFO).  The content of this section   */
  501. /*  is entirely up to the author, except that it should not        */
  502. /*  contain information already covered in the required sections   */
  503. /*  of VENDINFO.  This section begins with the standard label      */
  504. /*  'Information for Users ("READ-ME")'.  This section is omitted  */
  505. /*  from secondary VENDINFO files.                                 */
  506. /*-----------------------------------------------------------------*/
  507.  
  508. /*---------------------------------------------- installation -----*/
  509. /*  This optional section ("Installation") allows the author to    */
  510. /*  include installation instructions for the product.  This       */
  511. /*  section is omitted from secondary VENDINFO files.              */
  512. /*-----------------------------------------------------------------*/
  513.  
  514. /*----------------------------------------- other information -----*/
  515. /*  This optional section ("Other Information", or other sections  */
  516. /*  named by the author using "-" section labels) allows the       */
  517. /*  author to include any other desired information, such as       */
  518. /*  advertisements for other products.  These sections are omitted */
  519. /*  from secondary VENDINFO files.                                 */
  520. /*-----------------------------------------------------------------*/
  521.  
  522. /*-------------------------------------- packing list section -----*/
  523. /*  This section ("Packing List") must be automatically generated  */
  524. /*  by any VENDINFO-record creation tool.  It lists the files in   */
  525. /*  the original package as created by the author, including file  */
  526. /*  names, date/time stamps, and CRCs.  This section must conform  */
  527. /*  EXACTLY to the format shown by example below, in order to      */
  528. /*  allow automatic detection of changes to the package.           */
  529. /*-----------------------------------------------------------------**
  530.  
  531. ===== Packing List ===================================================
  532.  
  533. As released by the author or publisher, this package contained the
  534. following files in addition to this VENDINFO.DIZ:
  535.  
  536.         Filename      Size     Date       Time     CRC32
  537.      register.doc    16396  31-Jan-1993  01:10a   481DB182
  538.      whatsnew.doc     7509  31-Jan-1993  01:10a   4A1DD6BC
  539.       install.exe    68291  31-Jan-1993  01:10a   9DD141C9
  540.           lha.exe    34283  20-Jul-1991  02:13a   2C68A172
  541.      inc-docs.lzh   130623  31-Jan-1993  01:10a   7138B4FC
  542.  
  543. **-------------------------------------------------- warranty -----*/
  544. /*  The "Warranty" section is optional, but should appear in all   */
  545. /*  VENDINFO files describing software products.  (Such a section  */
  546. /*  MIGHT be omitted for, say, clip art.)  The warranty should be  */
  547. /*  prepared by the author with appropriate legal study or advice. */
  548. /*  The warranty indicates -- and in many cases limits -- the      */
  549. /*  liability accepted by the author or publisher regarding the    */
  550. /*  product.  This section is omitted from secondary VENDINFO      */
  551. /*  files.                                                         */
  552. /*-----------------------------------------------------------------*/
  553.  
  554.               /*  Human-Readable Text Portion (cont.) */
  555.  
  556. /*-------------------------- license for use and distribution -----*/
  557. /*  The "License for Use and Distribution" section is optional,    */
  558. /*  but should appear in virtually all uses of VENDINFO.  The      */
  559. /*  license grants limited (or unlimited, for public-domain        */
  560. /*  products) rights to use and distribute the product, under      */
  561. /*  conditions specified by the author.  In the case of shareware  */
  562. /*  with distribution restrictions, this section should            */
  563. /*  "incorporate by reference" the distribution restrictions       */
  564. /*  described in the attached compressed data record.  It is       */
  565. /*  undesirable to also list the distribution rights and           */
  566. /*  restrictions in text form here, since that raises the issue of */
  567. /*  possible inconsistencies and weakens the ability of the        */
  568. /*  distributor to rely upon automated processing of the data      */
  569. /*  record for the conveyance of these distribution rights.        */
  570. /*-----------------------------------------------------------------*/
  571.  
  572.                    /********************************/
  573.                    /*  Data Types and Structures   */
  574.                    /*  Used as Building Blocks in  */
  575.                    /*  Later Record Definitions    */
  576.                    /********************************/
  577.  
  578. /*--------------------------------------------------- comment -----*/
  579. /*  Because some C compilers can't handle forward references, it   */
  580. /*  is necessary to define all special data structures here, ahead */
  581. /*  of the place in the main record structure at which they're     */
  582. /*  used.  The human reader of this file-format description may    */
  583. /*  wish to skip past this "Data Types and Structures" section on  */
  584. /*  first reading, returning to it only as the special structures  */
  585. /*  are encountered in the description of the main record.         */
  586. /*-----------------------------------------------------------------*/
  587.  
  588. /*------------------------------------------ byte, word, long -----*/
  589. /*  A byte is an (eight-bit) data unit such as is ordinarily used  */
  590. /*  to store an ASCII character or similar unsigned information.   */
  591. /*                                                                 */
  592. /*  A word consists of two adjacent bytes, stored low-byte-first,  */
  593. /*  as is normal on an Intel 80x86 processor.                      */
  594. /*                                                                 */
  595. /*  A long consists of two adjacent words, stored low-word-first,  */
  596. /*  as is normal on an Intel 80x86 processor.                      */
  597. /*                                                                 */
  598. /*  A character string consists of a specified number of adjacent  */
  599. /*  characters, terminated by a null (0x00).  For example the      */
  600. /*  specification:                                                 */
  601. /*       char         vidProdName[16];                             */
  602. /*  indicates that vidProdName is a 16-character text string, in   */
  603. /*  which one character position will contain a null termination   */
  604. /*  character.  Whenever a character string is used to hold a list */
  605. /*  of items, the list is blank-delimited (e.g., "PCX CGM FLM").   */
  606. /*                                                                 */
  607. /*  For some fields, an array of strings is used.  For example,    */
  608. /*       char         vidCompanyAddress[5][31];                    */
  609. /*  defines vidCompanyAddress as an array consisting of five       */
  610. /*  strings (i.e., five lines of text).  Each string is 31         */
  611. /*  characters long, including the terminating null.               */
  612. /*                                                                 */
  613. /*  The "typedef" statements below are defined as appropriate for  */
  614. /*  a standard C compiler used in an IBM PC (Intel 80x86)          */
  615. /*  environment.                                                   */
  616. /*-----------------------------------------------------------------*/
  617. typedef unsigned char byte;
  618. typedef unsigned int  word;
  619.  
  620.               /*  Data Types and Structures (cont.)   */
  621.  
  622. /*------------------------------------------------ date, time -----*/
  623. /*  Dates are stored in the form in which file dates are stored by */
  624. /*  MS-DOS.  That is, dates are words with the following layout:   */
  625. /*       FEDCBA98 76543210                                         */
  626. /*       xxxxxxx. ........     year - 1980                         */
  627. /*       .......x xxx.....     month (Jan = 1)                     */
  628. /*       ........ ...xxxxx     day of month (1st = 1)              */
  629. /*                                                                 */
  630. /*  To minimize confusion among various human-readable date        */
  631. /*  formats, dates which are displayed in the human-readable text  */
  632. /*  section of the VENDINFO record will be shown in the format:    */
  633. /*       28-Jun-1993                                               */
  634. /*  where the months of the year are:                              */
  635. /*       Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec           */
  636. /*                                                                 */
  637. /*  At present, no times are stored in the compressed data record. */
  638. /*  Times shown in the human-readable text section will be         */
  639. /*  displayed using leading zeroes and AM or PM indicators, to     */
  640. /*  eliminate ambiguity:                                           */
  641. /*       01:10a                                                    */
  642. /*-----------------------------------------------------------------*/
  643. typedef word          Date;
  644.  
  645. /*---------------------------------------------------- prices -----*/
  646. /*  Prices (registration, shipping and handling, etc.) are all     */
  647. /*  specified in a currency identified in the vidPriceWhatCurrency */
  648. /*  field.  The prices themselves are stored as longs, but are     */
  649. /*  interpreted as hundredths of a currency unit.  For example,    */
  650. /*  if the currency is US dollars, the price field would actually  */
  651. /*  contain the price in US cents.  Tools are expected to perform  */
  652. /*  the appropriate division, or provide an appropriately placed   */
  653. /*  decimal point.  Doing it this way eliminates all need for      */
  654. /*  floating point arithmetic in VENDINFO tools.                   */
  655. /*-----------------------------------------------------------------*/
  656. typedef long          Price;
  657.  
  658.               /*  Data Types and Structures (cont.)   */
  659.  
  660. /*=================================================================*/
  661. /*          TextBlock used to store paragraph-type text            */
  662. /*=================================================================*/
  663.  
  664. /*----------------------------------------- typedef TextBlock -----*/
  665. /*  The TextBlock is used to store text which may have embedded    */
  666. /*  formatting codes.  From the point of view of the record        */
  667. /*  structure, a TextBlock[81] is simply an 81-byte character      */
  668. /*  string, just like char[81].  However, the TextBlock is subject */
  669. /*  to some rules that make its use by both record-creating and    */
  670. /*  record-using software slightly special.                        */
  671. /*                                                                 */
  672. /*  The product descriptions and other TextBlocks in the VENDINFO  */
  673. /*  record are intended to be used by software which will, in      */
  674. /*  general, provide its own formatting, and may rearrange the     */
  675. /*  text, breaking lines at different places, etc.  The resulting  */
  676. /*  reformatted text may be printed in catalogs, used in BBS file  */
  677. /*  descriptions, etc.  Accordingly, the text may contain no       */
  678. /*  characters outside the normal ASCII printable set, except for  */
  679. /*  a small number of special format codes interpretable by the    */
  680. /*  VENDINFO software.  Thus, the user will be prevented from      */
  681. /*  entering text here that is in the high-ASCII character set     */
  682. /*  (above 0xFF) or below the normal printable set (0x20).         */
  683. /*                                                                 */
  684. /*  Please notice in particular that a TextBlock contains no       */
  685. /*  line feeds or carriage returns (word wrapping is done at the   */
  686. /*  time of extraction from the record), and that it is terminated */
  687. /*  by a 0x1A (^Z) character.                                      */
  688. /*                                                                 */
  689. /*  Special formatting characters which must be interpreted        */
  690. /*  by software that uses the VENDINFO record include the          */
  691. /*  following:                                                     */
  692. /*     0x01      -- Paragraph (detected because user skipped line) */
  693. /*     0x02      -- Number of current package (like the "1" in     */
  694. /*                  "part 1 of 4").                                */
  695. /*     0x03      -- Number of packages in product (like the "4" in */
  696. /*                  "part 1 of 4").                                */
  697. /*     0x1A (^Z) -- Used to terminate TextBlock                    */
  698. /*-----------------------------------------------------------------*/
  699. typedef char          TextBlock;
  700.  
  701.               /*  Data Types and Structures (cont.)   */
  702.  
  703. /*=================================================================*/
  704. /*          Field lengths for string and TextBlock fields          */
  705. /*=================================================================*/
  706. /*----- common string lengths -----------------*/
  707. #define  vivLenAddress                 31
  708. #define  vivLenPhone                   20
  709. #define  vivLenPrefix                  9
  710. #define  vivLenMisc1                   81
  711. #define  vivLenMisc2                   161
  712. #define  vivLenMisc3                   241
  713. #define  vivLenName                    41
  714.  
  715. /*----- product information -------------------*/
  716. #define  vivLenProdName                16
  717. #define  vivLenProdExt                 32
  718. #define  vivLenProdVers                5
  719. #define  vivLenCisList                 63
  720. #define  vivLenShotTypes               24
  721. #define  vivLenDesc1                   61
  722. #define  vivLenDesc2                   121
  723. #define  vivLenDesc3                   251
  724. #define  vivLenDesc4                   451
  725. #define  vivLenDesc5                   751
  726. #define  vivLenDesc6                   1501
  727.  
  728. /*----- prices information --------------------*/
  729. #define  vivLenCurrency                21
  730.  
  731. /*----- electronic addresses ------------------*/
  732. #define  vivLenBbsName                 31
  733. #define  vivLenBbsUserName             31
  734. #define  vivLenAmericaOnLine           11
  735. #define  vivLenCompuserve              13
  736. #define  vivLenDelphi                   15
  737. #define  vivLenGenie                       13
  738. #define  vivLenProdigy                 8
  739. #define  vivLenFidonet                 20
  740. #define  vivLenInternet                   81
  741. #define  vivLenRime                    13
  742.  
  743.               /*  Data Types and Structures (cont.)   */
  744.  
  745. /*=================================================================*/
  746. /*          Platform definitions (hardware/software)               */
  747. /*=================================================================*/
  748.  
  749. /*---------------------------------------- typedef viPlatform -----*/
  750. /*  This structure holds information about a particular            */
  751. /*  hardware/software platform.  The VENDINFO record contains two  */
  752. /*  of these structures, representing the minimal requirements of  */
  753. /*  the product, and the recommended configuration.                */
  754. /*                                                                 */
  755. /*  Notice that the vidPlatRam... variables indicate QUANTITIES of */
  756. /*  memory (standard, EMS, Extended, XMS).  In addition, there are */
  757. /*  several "Features" below (vidPlatFeatRam...) that affect the   */
  758. /*  interpretation of these quantities.                            */
  759. /*                                                                 */
  760. /*  The vidPlatDisk... variables indicate the amount of disk space */
  761. /*  required/recommended for a minimal installation and for a full */
  762. /*  installation of the product.  For most products, these values  */
  763. /*  will be identical.                                             */
  764. /*-----------------------------------------------------------------*/
  765. #define  vivPlatCpuCount               8
  766. #define  vivPlatOsCount                10
  767. typedef struct {
  768.    long         vidPlatCpu [ vivPlatCpuCount ];          /* p?c  s */
  769.    word         vidPlatClockSpeedMhz;                    /* p?s  n */
  770.    long         vidPlatOpSys [ vivPlatOsCount ];         /* p?o  s */
  771.    word         vidPlatRamStdKb;                         /* p?rs n */
  772.    word         vidPlatRamEmsKb;                         /* p?rm n */
  773.    word         vidPlatRamExtKb;                         /* p?re n */
  774.    word         vidPlatRamXmsKb;                         /* p?rx n */
  775.    word         vidPlatDiskMinKb;                        /* p?dm n */
  776.    word         vidPlatDiskFullKb;                       /* p?df n */
  777. } viPlatform;      /* 9 fields, 86 bytes */
  778.  
  779. /*--------------------------------------------- platform: CPU -----*/
  780. /*  The platform structure contains 8 words of storage dedicated   */
  781. /*  to specification of a single CPU.  Most of this storage is     */
  782. /*  presently unallocated, in order to allow handling of new       */
  783. /*  machines prior to publication of the next version of this      */
  784. /*  standard.  In general, exactly one bit of this 8-word area     */
  785. /*  will be set to 1.  If the required/recommended platform        */
  786. /*  involves a CPU not on (even the extended) list, zero bits will */
  787. /*  be set, and the required CPU should be indicated in the        */
  788. /*  "catch-all" text field, vidProdOtherRequirements.  If no CPU   */
  789. /*  is relevant (e.g., the product is a book), zero bits will be   */
  790. /*  be set, as well.                                               */
  791. /*-----------------------------------------------------------------*/
  792. #define  vivPlatCpuIntelPC                0
  793. #define  vivPlatCpuMacintosh              1
  794. #define  vivPlatCpuAppleII                2
  795. #define  vivPlatCpuUnalloc3               3
  796. #define  vivPlatCpuUnalloc4               4
  797. #define  vivPlatCpuUnalloc5               5
  798. #define  vivPlatCpuUnalloc6               6
  799. #define  vivPlatCpuUnalloc7               7
  800.  
  801.          /*  Data Types and Structures (Platforms, cont.)   */
  802.  
  803. /*--------------------------- Intel 80x86 -----*/
  804. #define  vibPlatCpu808x                   0x0001
  805. #define  vibPlatCpu80286                  0x0002
  806. #define  vibPlatCpu80386                  0x0004
  807. #define  vibPlatCpu80486                  0x0008
  808. #define  vibPlatCpuPentium                0x0010
  809.  
  810. /*--------------------------- Macintosh -------*/
  811. #define  vibPlatCpuMac68000               0x0001
  812. #define  vibPlatCpuMac68020               0x0002
  813. #define  vibPlatCpuMac68030               0x0004
  814. #define  vibPlatCpuMac68040               0x0008
  815. #define  vibPlatCpuMacPowerPC             0x0010
  816.  
  817. /*--------------------------- AppleII ---------*/
  818. #define  vibPlatCpuAp2                    0x0001
  819. #define  vibPlatCpuAp2Plus                0x0002
  820. #define  vibPlatCpuAp2e                   0x0004
  821. #define  vibPlatCpuAp2eEnhanced           0x0008
  822. #define  vibPlatCpuAp2c                   0x0010
  823. #define  vibPlatCpuAp2cPlus               0x0020
  824. #define  vibPlatCpuAp2gsRom0              0x0040
  825. #define  vibPlatCpuAp2gsRom1              0x0080
  826. #define  vibPlatCpuAp2gsRom3              0x0100
  827.  
  828. /*---------------------------------------------- platform: OS -----*/
  829. /*  This section indicates the required/recommended operating      */
  830. /*  system, and operates similarly to the CPU section described    */
  831. /*  above.                                                         */
  832. /*-----------------------------------------------------------------*/
  833. #define  vivPlatOsIntelMsdos              0
  834. #define  vivPlatOsIntelWindows            1
  835. #define  vivPlatOsIntelOs2                2
  836. #define  vivPlatOsMacSys                  3
  837. #define  vivPlatOsMacAux                  4
  838. #define  vivPlatOsApple2                  5
  839. #define  vivPlatOsUnalloc6                6
  840. #define  vivPlatOsUnalloc7                7
  841. #define  vivPlatOsUnalloc8                8
  842. #define  vivPlatOsUnalloc9                9
  843.  
  844. /*--------------------------- Intel MS-DOS ----*/
  845. #define  vibPlatOsDos10                   0x0001
  846. #define  vibPlatOsDos20                   0x0002
  847. #define  vibPlatOsDos21                   0x0004
  848. #define  vibPlatOsDos211                  0x0008
  849. #define  vibPlatOsDos30                   0x0010
  850. #define  vibPlatOsDos31                   0x0020
  851. #define  vibPlatOsDos32                   0x0040
  852. #define  vibPlatOsDos33                   0x0080 
  853. #define  vibPlatOsDos40                   0x0100
  854. #define  vibPlatOsDos50                   0x0200
  855. #define  vibPlatOsDos60                   0x0400
  856.  
  857.          /*  Data Types and Structures (Platforms, cont.)   */
  858.  
  859. /*--------------------------- Intel Windows ---*/
  860. #define  vibPlatOsWin10                   0x0001
  861. #define  vibPlatOsWin20                   0x0002
  862. #define  vibPlatOsWin30                   0x0004
  863. #define  vibPlatOsWin31                   0x0008       /* >= 286 */
  864. #define  vibPlatOsWinNT                   0x0100
  865. #define  vibPlatOsWinFW                   0x0800
  866. #define  vibPlatOsWinPen                  0x4000
  867.  
  868. /*--------------------------- Intel OS/2 ------*/
  869. #define  vibPlatOsOS2_10                  0x0001
  870. #define  vibPlatOsOS2_11                  0x0002
  871. #define  vibPlatOsOS2_12                  0x0004
  872. #define  vibPlatOsOS2_13                  0x0008
  873. #define  vibPlatOsOS2_20                  0x0010       /* >= 386 */
  874. #define  vibPlatOsOS2_21                  0x0020
  875.  
  876. /*--------------------------- Mac Sys ---------*/
  877. #define  vibPlatOsMacSys6_0_5             0x0001
  878. #define  vibPlatOsMacSys6_0_7             0x0002
  879. #define  vibPlatOsMacSys6_0_8             0x0004
  880. #define  vibPlatOsMacSys7_0               0x0008
  881. #define  vibPlatOsMacSys7_0_1             0x0010
  882. #define  vibPlatOsMacSys7_1               0x0020
  883.  
  884. /*--------------------------- Mac A/UX --------*/
  885. #define  vibPlatOsMacAux2_0_1             0x0001
  886. #define  vibPlatOsMacAux3_0               0x0002
  887.  
  888. /*--------------------------- AppleII ---------*/
  889. #define  vibPlatOsAp2Dos33                0x0001
  890. #define  vibPlatOsAp2Prodos81x            0x0002
  891. #define  vibPlatOsAp2Prodos82x            0x0004
  892. #define  vibPlatOsAp2Gsos4x               0x0100
  893. #define  vibPlatOsAp2Gsos5x               0x0200
  894. #define  vibPlatOsAp2Gsos60               0x0400
  895. #define  vibPlatOsAp2Gsos601              0x0800
  896.  
  897. /*--------------------------- Unix ------------*/
  898.  
  899.          /*  Data Types and Structures (Platforms, cont.)   */
  900.  
  901. /*---------------------------------------- typedef viPlatFeat -----*/
  902. /*  The VENDINFO record also contains ONE list of platform         */
  903. /*  features which may be associated with the product.  Each of    */
  904. /*  these is represented by one byte in the vidPlatFeatures array. */
  905. /*  Each such byte can have one of the following four values.      */
  906. /*  These values are defined this way:                             */
  907. /*       Irrelevant  -- Presence or absence of this feature will   */
  908. /*                      have no effect on whether or not this      */
  909. /*                      product works.                             */
  910. /*       Supported   -- This particular feature is specifically    */
  911. /*                      supported by the product.                  */
  912. /*       Recommended -- It is recommended that this feature be     */
  913. /*                      present if the product is used.            */
  914. /*       Required    -- This feature must be present, or the       */
  915. /*                      product won't work.                        */
  916. /*       WontWork    -- If this feature is present, the product    */
  917. /*                      won't work.                                */
  918. /*       Unknown     -- Self-explanatory.                          */
  919. /*-----------------------------------------------------------------*/
  920. #define  vivPlatFeatCount              55
  921. typedef struct {
  922.    byte         vidPlatFeatures [ vivPlatFeatCount ];     /* pf?   */
  923.                                              /* see vidPlatFeat... */
  924. } viPlatFeat;      /* 55 fields, 55 bytes */
  925.  
  926. /*--------------------------- field values ----*/
  927. #define  vibPlatFeatIrrelevant            0x0
  928. #define  vibPlatFeatSupported             0x1
  929. #define  vibPlatFeatRecommended           0x2
  930. #define  vibPlatFeatRequired              0x3
  931. #define  vibPlatFeatWontWork              0x4
  932. #define  vibPlatFeatUnknown               0x5
  933.  
  934. /*--------------------------- configuration ---*/
  935. #define  vivPlatFeatConfFpu               0             /* pfcf n */
  936. #define  vivPlatFeatConfLaptop            1             /* pfcl n */
  937. #define  vivPlatFeatConfMca               2             /* pfcm n */
  938.  
  939. /*--------------------------- RAM -------------*/
  940. #define  vivPlatFeatRamExpandOrExtend     3             /* pfro n */
  941. #define  vivPlatFeatRamEms                4             /* pfrm n */
  942. #define  vivPlatFeatRamExtended           5             /* pfre n */
  943. #define  vivPlatFeatRamXms                6             /* pfrx n */
  944. #define  vivPlatFeatRamHimem              7             /* pfrh n */
  945.  
  946. /*--------------------------- disk drives------*/
  947. #define  vivPlatFeatDiskHard              8             /* pfdh n */
  948. #define  vivPlatFeatDiskFloppyOnly        9             /* pfdf n */
  949. #define  vivPlatFeatDiskCdrom             10            /* pfdc n */
  950.  
  951. /*--------------------------- ports -----------*/
  952. #define  vivPlatFeatPortPar               11            /* pfop n */
  953. #define  vivPlatFeatPortSer               12            /* pfos n */
  954. #define  vivPlatFeatPortPcmcia            13            /* pfoc n */
  955. #define  vivPlatFeatPortGame              14            /* pfog n */
  956.  
  957.  
  958.          /*  Data Types and Structures (Platforms, cont.)   */
  959.  
  960. /*--------------------------- video -----------*/
  961. #define  vivPlatFeatVidMonoText           15            /* pfvm n */
  962. #define  vivPlatFeatVidHerc               16            /* pfvh n */
  963. #define  vivPlatFeatVidTandy              17            /* pfvt n */
  964. #define  vivPlatFeatVidCga                18            /* pfvc n */
  965. #define  vivPlatFeatVidEga                19            /* pfve n */
  966. #define  vivPlatFeatVidMcga               20            /* pfvn n */
  967. #define  vivPlatFeatVidMcga256            21            /* pfvo n */
  968. #define  vivPlatFeatVidVga                22            /* pfvv n */
  969. #define  vivPlatFeatVidSvgaVesa           23            /* pfvw n */
  970. #define  vivPlatFeatVidSvgaOther          24            /* pfvs n */
  971. #define  vivPlatFeatVid8514               25            /* pfv8 n */
  972. #define  vivPlatFeatVidXga                26            /* pfvx n */
  973. #define  vivPlatFeatVidMonoMonitor        27            /* pfva n */
  974. #define  vivPlatFeatVidColorMonitor       28            /* pfvb n */
  975.  
  976. /*--------------------------- input -----------*/
  977. #define  vivPlatFeatInpKeyboard           29            /* pfik n */
  978. #define  vivPlatFeatInpMouse              30            /* pfim n */
  979. #define  vivPlatFeatInpDigitizer          31            /* pfid n */
  980. #define  vivPlatFeatInpJoystick           32            /* pfij n */
  981.  
  982. /*--------------------------- scanner ---------*/
  983. #define  vivPlatFeatScanHandLogitech      33            /* pfal n */
  984. #define  vivPlatFeatScanHandGenius        34            /* pfag n */
  985. #define  vivPlatFeatScanFlatbedHP         35            /* pfaf n */
  986.  
  987. /*--------------------------- printer ---------*/
  988. #define  vivPlatFeatPrinterYes            36            /* pfpy n */
  989. #define  vivPlatFeatPrintText             37            /* pfpt n */
  990. #define  vivPlatFeatPrintGraphIbm         38            /* pfpi n */
  991. #define  vivPlatFeatPrintGraphEpson9      39            /* pfpe n */
  992. #define  vivPlatFeatPrintGraphEpson24     40            /* pfpf n */
  993. #define  vivPlatFeatPrintHpDeskjet        41            /* pfpd n */
  994. #define  vivPlatFeatPrintHpPaintjet       42            /* pfpp n */
  995. #define  vivPlatFeatPrintHpLaserjet       43            /* pfpl n */
  996. #define  vivPlatFeatPrintPostscript       44            /* pfps n */
  997. #define  vivPlatFeatPrintPlotter          45            /* pfpo n */
  998.  
  999. /*--------------------------- modem -----------*/
  1000. #define  vivPlatFeatModemAnySerial        46            /* pfma n */
  1001. #define  vivPlatFeatModemHayesCompat      47            /* pfmh n */
  1002. #define  vivPlatFeatModemFax              48            /* pfmf n */
  1003.  
  1004. /*--------------------------- sound card ------*/
  1005. #define  vivPlatFeatSoundCardYes          49            /* pfsy n */
  1006. #define  vivPlatFeatSoundAdlib            50            /* pfsa n */
  1007. #define  vivPlatFeatSoundCovox            51            /* pfsc n */
  1008. #define  vivPlatFeatSoundBlast            52            /* pfsb n */
  1009. #define  vivPlatFeatSoundMidi             53            /* pfsm n */
  1010.  
  1011. /*--------------------------- network ---------*/
  1012. #define  vivPlatFeatNetwork               54            /* pfne n */
  1013.  
  1014.               /*  Data Types and Structures (cont.)   */
  1015.  
  1016. /*--------------------------------------- typedef viElectAddr -----*/
  1017. /*          Electronic Addresses for Author/Support/Ordering       */
  1018. /*-----------------------------------------------------------------*/
  1019. typedef struct {
  1020.    char         vidBbsName       [ vivLenBbsName ];    /* ?en s */
  1021.    char         vidBbsPhone      [ vivLenPhone ];      /* ?eb s */
  1022.    char         vidBbsUserName   [ vivLenBbsUserName]; /* ?eu s */
  1023.    char         vidAmericaOnLine [vivLenAmericaOnLine];/* ?ea s */
  1024.    char         vidCompuserve    [ vivLenCompuserve ]; /* ?ec s */
  1025.    char         vidDelphi        [ vivLenDelphi ];     /* ?ed s */
  1026.    char         vidGenie         [ vivLenGenie ];      /* ?eg s */
  1027.    char         vidProdigy       [ vivLenProdigy ];    /* ?ep s */
  1028.    char         vidFidonet       [ vivLenFidonet ];    /* ?ef s */
  1029.    char         vidInternet      [ vivLenInternet ];   /* ?ei s */
  1030.    char         vidRime          [ vivLenRime ];       /* ?er s */
  1031.    TextBlock    vidOtherElect    [ vivLenMisc2 ];      /* ?eo s */
  1032. } viElectAddr;     /* 12 fields, 417 bytes */
  1033.  
  1034.               /*  Data Types and Structures (cont.)   */
  1035.  
  1036. /*------------------------------------------ typedef viRegPkg -----*/
  1037. /*  This structure contains information about the price and        */
  1038. /*  registration benefits associated with a shareware product.     */
  1039. /*  Two of these structures are in the VENDINFO record: one        */
  1040. /*  represents the minimum registration package, and one the       */
  1041. /*  maximum.  If there is only one registration price for a        */
  1042. /*  shareware product, the two structurea should be identical.     */
  1043. /*  If there's any price or benefits information not covered by    */
  1044. /*  the available fields, the "catch-all" vidRegPriceBenefitsOther */
  1045. /*  field can be used.                                             */
  1046. /*-----------------------------------------------------------------*/
  1047. typedef struct {
  1048.    Price        vidRegPrice;                             /* i?p  n */
  1049.    long         vidRegBenefits[2]; /* see vibBene... */  /* i?b?   */
  1050.    char         vidRegPriceBenefitsOther[81];            /* i?v  s */
  1051. } viRegPkg;        /* 37 fields, 93 bytes */
  1052.  
  1053. /*------------------------------------- registration benefits -----*/
  1054. /*  These boolean fields contain a list of possible registration   */
  1055. /*  benefits.                                                      */
  1056. /*-----------------------------------------------------------------*/
  1057. #define  vibBeneAddlData                  0x00000001L   /* i?bad b */
  1058. #define  vibBeneAddlProg                  0x00000002L   /* i?bap b */
  1059. #define  vibBeneBbsSupp                   0x00000004L   /* i?bbs b */
  1060. #define  vibBeneBranding                  0x00000008L   /* i?bbr b */
  1061. #define  vibBeneBugNotice                 0x00000010L   /* i?bbu b */
  1062. #define  vibBeneCheatCode                 0x00000020L   /* i?bcc b */
  1063. #define  vibBeneCommission                0x00000040L   /* i?bcm b */
  1064. #define  vibBeneContest                   0x00000080L   /* i?bcn b */
  1065. #define  vibBeneCustom                    0x00000100L   /* i?bcu b */
  1066. #define  vibBeneConvertOther              0x00000200L   /* i?bcr b */
  1067. #define  vibBeneConvertOld                0x00000400L   /* i?bcx b */
  1068. #define  vibBeneDiscount                  0x00000800L   /* i?bdi b */
  1069. #define  vibBeneEnhanced                  0x00001000L   /* i?ben b */
  1070. #define  vibBeneFreeGoodies               0x00002000L   /* i?bfg b */
  1071. #define  vibBeneFuture                    0x00004000L   /* i?bfu b */
  1072. #define  vibBeneGuarantee                 0x00008000L   /* i?bgu b */
  1073. #define  vibBeneHints                     0x00010000L   /* i?bhi b */
  1074. #define  vibBeneLatest                    0x00020000L   /* i?bla b */
  1075. #define  vibBeneLifetimeSupp              0x00040000L   /* i?bls b */
  1076. #define  vibBeneNewsletter                0x00080000L   /* i?bne b */
  1077. #define  vibBenePreprint                  0x00100000L   /* i?bpp b */
  1078. #define  vibBenePrintedManual             0x00200000L   /* i?bpm b */
  1079. #define  vibBeneQuickRef                  0x00400000L   /* i?bqr b */
  1080. #define  vibBeneRecordLimit               0x00800000L   /* i?brl b */
  1081. #define  vibBeneRrsElim                   0x01000000L   /* i?bre b */
  1082. #define  vibBeneRepeatDelay               0x02000000L   /* i?brd b */
  1083. #define  vibBeneSampleData                0x04000000L   /* i?bsd b */
  1084. #define  vibBeneSource                    0x08000000L   /* i?bso b */
  1085. #define  vibBeneSubscription              0x10000000L   /* i?bsu b */
  1086. #define  vibBeneTimeLimit                 0x20000000L   /* i?btl b */
  1087. #define  vibBeneTutorial                  0x40000000L   /* i?btu b */
  1088. #define  vibBeneUpdateNotice              0x80000000L   /* i?bun b */
  1089. #define  vibBeneUpdateFree                0x00000001L   /* i?buf b */
  1090. #define  vibBeneVoiceSupp                 0x00000002L   /* i?bvs b */
  1091. #define  vibBeneWatermark                 0x00000004L   /* i?bwa b */
  1092. #define  vivBeneCount                35
  1093.  
  1094.                      /*****************************/
  1095.                      /*  VENDINFO Header Section  */
  1096.                      /*****************************/
  1097.  
  1098. /*--------------------------------------------------- comment -----*/
  1099. /*  Because some C compilers can't handle forward references, it   */
  1100. /*  is necessary to define the individual sections of the fixed-   */
  1101. /*  length VENDINFO record before defining the record itself.  The */
  1102. /*  sections are:                                                  */
  1103. /*       header                                                    */
  1104. /*       product information                                       */
  1105. /*       author information                                        */
  1106. /*       ordering information                                      */
  1107. /*       prices and benefits information                           */
  1108. /*       support information                                       */
  1109. /*       general (channel-independent) distribution policy         */
  1110. /*       channel-specific distribution policy                      */
  1111. /*-----------------------------------------------------------------*/
  1112.  
  1113. /*=================================================================*/
  1114. /*          Header Section structure definition                    */
  1115. /*=================================================================*/
  1116.  
  1117. /*-------------------------------------- typedef viSectHeader -----*/
  1118. /*  This section of the record is used for identification and      */
  1119. /*  security, and contains information about the overall record,   */
  1120. /*  such as the date/time of its creation.                         */
  1121. /*-----------------------------------------------------------------*/
  1122. typedef struct {
  1123.    char         vidHeadString[12];      /* "VENDINFO" + 0x05040306 */
  1124.    word         vidHeadVersion;                                      /* hv n */
  1125.    byte         vidHeadViType; /* see vivRecType... */     /* ht n */
  1126.    Date         vidHeadPrepDate;                           /* hd d */
  1127.    long         vidHeadTextRecordSize;
  1128.    long         vidHeadTextRecordCRC;
  1129.    long         vidHeadDataRecordSize;             /* uncompressed */
  1130.    long         vidHeadDataRecordCRC;              /* uncompressed */
  1131.    long         vidHeadUserId;
  1132.    long         vidHeadAuthenticityKey1;
  1133.    long         vidHeadAuthenticityKey2;
  1134. } viSectHeader;    /* 11 fields, 45 bytes */
  1135.  
  1136. /*=================================================================*/
  1137. /*          Constants used in VENDINFO Header Section              */
  1138. /*=================================================================*/
  1139.  
  1140. /*----------------- VENDINFO record types (see vidHeadViType) -----*/
  1141. /*  There are several entirely different types of VENDINFO record, */
  1142. /*  with different structures.  The record-type field allows them  */
  1143. /*  to be differentiated.  These are the possible values.          */
  1144. /*-----------------------------------------------------------------*/
  1145. #define  vivRecTypePackageMain            1
  1146. #define  vivRecTypePackageSecondary       2
  1147. #define  vivRecTypeIntermed               99
  1148.  
  1149.                      /*****************************/
  1150.                      /*      Product Section      */
  1151.                      /*****************************/
  1152.  
  1153. /*=================================================================*/
  1154. /*          Product Section structure definition                   */
  1155. /*=================================================================*/
  1156.  
  1157. /*------------------------------------- typedef viSectProduct -----*/
  1158. /*  The Product Section describes the product and version,         */
  1159. /*  including names, descriptions, categories, keywords, and       */
  1160. /*  minimal and recommended platforms.                             */
  1161. /*-----------------------------------------------------------------*/
  1162. typedef struct {
  1163.    byte         vidProdType;    /* see vivProdType...*/   /* py  n */
  1164.    char         vidProdName [ vivLenProdName ];           /* pp  s */
  1165.    char         vidProdNameExtension [ vivLenProdExt ];   /* pe  s */
  1166.    char         vidProdVersion [ vivLenProdVers ];        /* pv  s */
  1167.    Date         vidProdVersionDate;                       /* pt  d */
  1168.    char         vidProdVersionReason [ vivLenMisc2 ];     /* pr  t */
  1169.    char         vidProdFileNamePrefix [ vivLenPrefix ];   /* pn  s */
  1170.    byte         vidProdNumberOfParts;                     /* ppn n */
  1171.    char         vidProdThisPart [ vivLenPrefix ];         /* ppt s */
  1172.    char         vidProdListOfParts [ vivLenMisc1 ];       /* ppl s */
  1173.    char         vidProdListOfCisParts [ vivLenCisList ];  /* ppc s */
  1174.    char         vidProdScreenshotTypes [vivLenShotTypes]; /* ph  s */
  1175.    char         vidProdOldPkgsReplaced [ vivLenMisc1 ];   /* px  s */
  1176.    TextBlock    vidProdDescription1 [ vivLenDesc1 ];      /* pd1 t */
  1177.    TextBlock    vidProdDescription2 [ vivLenDesc2 ];      /* pd2 t */
  1178.    TextBlock    vidProdDescription3 [ vivLenDesc3 ];      /* pd3 t */
  1179.    TextBlock    vidProdDescription4 [ vivLenDesc4 ];      /* pd4 t */
  1180.    TextBlock    vidProdDescription5 [ vivLenDesc5 ];      /* pd5 t */
  1181.    TextBlock    vidProdDescription6 [ vivLenDesc6 ];      /* pd6 t */
  1182.    viPlatform   platMin;                                  /* p1?   */
  1183.    viPlatform   platRec;                                  /* p2?   */
  1184.    viPlatFeat   platFeat;                                 /* pf?   */
  1185.    char         vidProdOtherRequiredSw [ vivLenMisc1 ];   /* ps  s */
  1186.    TextBlock    vidProdOtherRequirements [ vivLenMisc3 ]; /* po  t */
  1187.    long         vidProdCategories[5];                     /* pc? ? */
  1188.    char         vidProdKeywords [ vivLenMisc1 ];          /* pk  s */
  1189. } viSectProduct;   /* 100 fields, 4271 bytes */
  1190.  
  1191.  
  1192. /*=================================================================*/
  1193. /*          Constants used in Product Section                      */
  1194. /*=================================================================*/
  1195.  
  1196. /*---------------------------- product type (see vidProdType) -----*/
  1197. /*  While VENDINFO is primarily intended to describe software      */
  1198. /*  products, it can be used to describe various other types of    */
  1199. /*  computer-related products, especially those that can actually  */
  1200. /*  be distributed electronically.  Here are possible values of    */
  1201. /*  the product-type field.                                        */
  1202. /*-----------------------------------------------------------------*/
  1203. #define  vivProdTypeSoftware              0
  1204. #define  vivProdTypeHardware              1
  1205. #define  vivProdTypeDataFile              2
  1206. #define  vivProdTypeTextFile              3
  1207. #define  vivProdTypeBook                  4
  1208. #define  vivProdTypeMagazine              5
  1209. #define  vivProdTypeCatalog               6
  1210. #define  vivProdTypeVideo                 7
  1211.  
  1212.                  /*      Product Section (cont.)      */
  1213.  
  1214. /*=================================================================*/
  1215. /*          Notes on Product Section                               */
  1216. /*=================================================================*/
  1217.  
  1218. /*-------------------------- product name, extension, version -----*/
  1219. /*  In order to allow use of the information by automated tools,   */
  1220. /*  the product name and version are broken into components.  For  */
  1221. /*  example, the phrase "Lotus 1-2-3 Spreadsheet Processor, V2.20" */
  1222. /*  would be broken down as follows:                               */
  1223. /*    vidProdName          -- "Lotus 1-2-3"                        */
  1224. /*    vidProdNameExtension -- "Spreadsheet Processor"              */
  1225. /*    vidProdVersion       -- "2.20"                               */
  1226. /*-----------------------------------------------------------------*/
  1227.  
  1228. /*--------------------------- product package filenames, etc. -----*/
  1229. /*  Distribution packages are typically compressed files with the  */
  1230. /*  filename prefix indicating the specific product package, and   */
  1231. /*  the filename extension indicating the compression program used */
  1232. /*  to produce the package.  Except where shorter names are        */
  1233. /*  required (e.g., on CompuServe), the filename prefix should     */
  1234. /*  take one of the following forms:                               */
  1235. /*    AAAAA99P -- For multipart packages, the first five           */
  1236. /*                characters are alphabetic, and represent the     */
  1237. /*                product.  The next two are numeric, and          */
  1238. /*                represent the version.  The last is alphabetic,  */
  1239. /*                using the sequence { A, B, C, ... }, and         */
  1240. /*                indicates which part of the total product this   */
  1241. /*                particular package is.                           */
  1242. /*    AAAAA99  -- For single-part packages, any of the remaining   */
  1243. /*    AAAAA999    three forms is allowed, where the product name   */
  1244. /*    AAAAAA99    portion is strictly alphabetic, and the version  */
  1245. /*                portion is strictly numeric.                     */
  1246. /*                                                                 */
  1247. /*  vidProdNumberOfParts contains the number of packages making up */
  1248. /*  the product.                                                   */
  1249. /*                                                                 */
  1250. /*  vidProdListOfParts contains a blank-separated list of the      */
  1251. /*  filename prefixes of the packages making up the product.       */
  1252. /*  Similarly, vidProdListOfCisParts contains a list of the        */
  1253. /*  filename prefixes to be used on a system on which filename     */
  1254. /*  prefixes are restricted to six characters.  In each case, the  */
  1255. /*  first part listed will contain the main VENDINFO.DIZ files,    */
  1256. /*  while the others, if any, will contain secondary VENDINFO.DIZ  */
  1257. /*  files.  Finally,  vidProdOldPkgsReplaced contains a list of    */
  1258. /*  filename prefixes of previous versions packages replaced by    */
  1259. /*  this version.                                                  */
  1260. /*-----------------------------------------------------------------*/
  1261.  
  1262. /*-------------------------------------- product screen shots -----*/
  1263. /*  If the author/publisher makes available a set of screen shots  */
  1264. /*  of the product, on request and/or via the VENDINFO Product     */
  1265. /*  Registry, the filename extensions (e.g., graphical formats) of */
  1266. /*  the available screen shots should be listed in                 */
  1267. /*  vidProdScreenshotTypes.  Use the artificial filename           */
  1268. /*  extension "FLM" to indicate hardcopy photos available only     */
  1269. /*  from the author.  A sample value for this string is            */
  1270. /*  "PCX CGM FLM".                                                 */
  1271. /*-----------------------------------------------------------------*/
  1272.  
  1273.                  /*      Product Section (cont.)      */
  1274.  
  1275. /*---------------------------------------- other requirements -----*/
  1276. /*  Two "catch-all" variables are provided for recording platform  */
  1277. /*  requirements or recommendations that aren't covered in the     */
  1278. /*  viPlatform structure.  Wherever possible, requirements should  */
  1279. /*  be defined in the viPlatform structures, since that allows     */
  1280. /*  complete processing by automated tools.  These "catch-alls"    */
  1281. /*  are only for cases not covered.                                */
  1282. /*                                                                 */
  1283. /*  vidProdOtherRequiredSw is a simple string which might    */
  1284. /*  contain one or more (blank-separated) names of other software  */
  1285. /*  necessary to use the product.  Likely examples are run-time    */
  1286. /*  packages, such as VBRUN200.DLL, or main applications if the    */
  1287. /*  product is an add-on (e.g., "Lotus 1-2-3" for a spreadsheet    */
  1288. /*  macro package).                                                */
  1289. /*                                                                 */
  1290. /*  vidProdOtherRequirements is a TextBlock (defined earlier)      */
  1291. /*  in which to list hardware, operating systems, peripherals,     */
  1292. /*  etc., that are not covered in viPlatform, and in which to list */
  1293. /*  version numbers and other details of the requirements in       */
  1294. /*  viPlatform WHEN NECESSARY.  For example, a laser-printer       */
  1295. /*  product that works on HP LaserJets, but only starting with the */
  1296. /*  LaserJet II, should so indicate here (e.g., "LaserJet II and   */
  1297. /*  later"), but if it works with all LaserJets, no specification  */
  1298. /*  is necessary in this TextBlock.                                */
  1299. /*-----------------------------------------------------------------*/
  1300.  
  1301. /*--------------------------- product categories and keywords -----*/
  1302. /*  vidProdCategories is an array containing one primary and four  */
  1303. /*  secondary category codes, using the numbering scheme developed */
  1304. /*  by Rob Rosenberger for his ASP Catalog Entry Editor or a       */
  1305. /*  similar scheme.  VENDINFO editor and processor tools will      */
  1306. /*  probably use an external file to map categories into category  */
  1307. /*  codes, and vice versa.  A small example portion of such a file */
  1308. /*  is:                                                            */
  1309. /*     01000000 Utilities                                          */
  1310. /*        01010000 Disk utilities                                  */
  1311. /*           01010100 Disk cataloging                              */
  1312. /*           01010200 Hard disk utilities                          */
  1313. /*           01010300 Floppy disk utilities                        */
  1314. /*        01020000 File utilities                                  */
  1315. /*           01020100 Backup/restore                               */
  1316. /*           01020200 Encryption & security                        */
  1317. /*  Shorthand codes for product categories are "pc1", "pc2", etc.  */
  1318. /*                                                                 */
  1319. /*  vidProdKeywords is a blank-separated list of keywords          */
  1320. /*  describing the product.  In general, keywords should be listed */
  1321. /*  in order of importance, since it is possible that only a       */
  1322. /*  portion of the list will be used.  At present, no standardized */
  1323. /*  list of keywords is planned (i.e., the list is "free-form").   */
  1324. /*-----------------------------------------------------------------*/
  1325.  
  1326.                      /*****************************/
  1327.                      /*      Author Section       */
  1328.                      /*****************************/
  1329.  
  1330. /*=================================================================*/
  1331. /*          Author Section structure definition                    */
  1332. /*=================================================================*/
  1333.  
  1334. /*-------------------------------------- typedef viSectAuthor -----*/
  1335. /*  The Author section contains information about the product's    */
  1336. /*  author or publisher.  This is distinct from information about  */
  1337. /*  how to order, or how to obtain technical support.              */
  1338. /*-----------------------------------------------------------------*/
  1339. typedef struct {
  1340.    char         vidAuthorName [ vivLenName ];             /* an  s */
  1341.    char         vidAuthorCompanyName [ vivLenName ];      /* ac  s */
  1342.    char         vidAuthorCompanyAddress[5][vivLenAddress];/* aa  t */
  1343.    char         vidAuthorPhone [ vivLenPhone ];           /* ap  s */
  1344.    char         vidAuthorFax [ vivLenPhone ];             /* af  s */
  1345.    char         vidAuthorQueriesPhone [ vivLenPhone ];    /* aq  s */
  1346.    viElectAddr  elec;                                     /* ae?   */
  1347.    word         vidAuthorMembership; /* vibMember... */   /* am? b */
  1348.    char         vidAuthorMembershipOther [ vivLenMisc1 ]; /* amx s */
  1349. } viSectAuthor;    /* 25 fields, 797 bytes */
  1350.  
  1351. /*----------------------------------------------- memberships -----*/
  1352. /*  Author membership in trade associations may be relevant to     */
  1353. /*  users and distributors.  For example, ASP distributor members  */
  1354. /*  are required to mark products by ASP author/publisher members  */
  1355. /*  in their catalogs and files lists.  Trade associations not     */
  1356. /*  recognized in the current version of the standard can be       */
  1357. /*  handled via the vidAuthorMembershipOther string.  Known        */
  1358. /*  trade associations are:                                        */
  1359. /*       ASAD -- Association of Shareware Authors and              */
  1360. /*               Distributors                                      */
  1361. /*       ASP  -- Association of Shareware Professionals            */
  1362. /*       DSAH -- Deutschsprachige Shareware Authoren und           */
  1363. /*               Haendlervereinigung                               */
  1364. /*       ESC  -- Educational Software CoOperative                  */
  1365. /*       SPA  -- Software Publisher's Association                  */
  1366. /*       STAR -- Shareware Trade Association and Resources         */
  1367. /*-----------------------------------------------------------------*/
  1368. #define  vibMemberAsad                    0x00000001    /* amb b */
  1369. #define  vibMemberAsp                     0x00000002    /* ama b */
  1370. #define  vibMemberDsah                    0x00000004    /* amd b */
  1371. #define  vibMemberEsc                     0x00000008    /* ame b */
  1372. #define  vibMemberSpa                     0x00000010    /* amp b */
  1373. #define  vibMemberStar                    0x00000020    /* ams b */
  1374.  
  1375.  
  1376. /*=================================================================*/
  1377. /*          Notes on Author Section                                */
  1378. /*=================================================================*/
  1379.  
  1380. /*-------------------------------------- author, company name -----*/
  1381. /*  The vidAuthorName field is intended for the author's personal  */
  1382. /*  name, if that is to be included in the record.  The            */
  1383. /*  vidCompanyName field must not be omitted.  If no separate      */
  1384. /*  company name is used, the author's personal name will appear   */
  1385. /*  here.  This field is used as one of the keys in the VENDINFO   */
  1386. /*  security arrangements.  Changing it will invalidate any        */
  1387. /*  security and user-registration keys based on it.               */
  1388. /*-----------------------------------------------------------------*/
  1389.  
  1390.                      /*****************************/
  1391.                      /*      Order Section        */
  1392.                      /*****************************/
  1393.  
  1394. /*=================================================================*/
  1395. /*          Order Section structure definition                     */
  1396. /*=================================================================*/
  1397.  
  1398. /*--------------------------------------- typedef viSectOrder -----*/
  1399. /*  The Order section provides contact information for ordering    */
  1400. /*  the product or related products, as distinct from contact      */
  1401. /*  information about the author or technical support.             */
  1402. /*-----------------------------------------------------------------*/
  1403. typedef struct {
  1404.    char         vidOrderAddress [ 6 ] [ vivLenAddress ];  /* oa  t */
  1405.    char         vidOrderPhoneTollFree [ vivLenPhone ];    /* ot  s */
  1406.    char         vidOrderPhone [ vivLenPhone ];            /* op  s */
  1407.    char         vidOrderFax [ vivLenPhone ];              /* of  s */
  1408.    viElectAddr  elec;                                     /* oe?   */
  1409.    word         vidOrderCredit;  /* see vibCredit... */   /* oc? b */
  1410.    char         vidOrderCreditOther [ vivLenMisc1 ];      /* ocx s */
  1411.    long         vidOrderFunds;      /* see vibPay... */   /* ox? b */
  1412.    char         vidOrderFundsOther [ vivLenMisc1 ];       /* oxx s */
  1413.    char         vidOrderBankAccount [ vivLenMisc1 ];      /* ob  s */
  1414.    char         vidOrderOtherRegSources [ vivLenMisc2 ];  /* oo  t */
  1415. } viSectOrder;   /* 46 fields, 1073 bytes */
  1416.  
  1417. /*---------------------------------------------- credit cards -----*/
  1418. /*  The vidOrderCredit field allows specification of known credit  */
  1419. /*  cards that are acceptable.  Any additional cards and           */
  1420. /*  information about surcharges, etc.,  can be listed in the      */
  1421. /*  vidOrderCreditOther string.                                    */
  1422. /*-----------------------------------------------------------------*/
  1423. #define  vibCreditAccessEurocard          0x0001        /* oce b */
  1424. #define  vibCreditAmexOptima              0x0002        /* oca b */
  1425. #define  vibCreditDinersCard              0x0004        /* occ b */
  1426. #define  vibCreditDiscover                0x0008        /* ocd b */
  1427. #define  vibCreditMastercard              0x0010        /* ocm b */
  1428. #define  vibCreditVisa                    0x0020        /* ocv b */
  1429.  
  1430. /*---------------- acceptable currencies and forms of payment -----*/
  1431. /*  The vidOrderFunds field allows specification of the various    */
  1432. /*  forms of cash, check, and money order payment that may be      */
  1433. /*  used.  International banking practices and exchange rates make */
  1434. /*  this a somewhat complicated area.  Unfortunately, the fields   */
  1435. /*  therefore required detailed definition.                        */
  1436. /*    PmoSameCountry -- postal money order issued in recipient's   */
  1437. /*                      country.                                   */
  1438. /*    PmoInternational -- international postal money order         */
  1439. /*    CheckPersSame -- a personal check written in the currency of */
  1440. /*                     the recipient's country and drawn on a bank */
  1441. /*                     in the recipient's country.                 */
  1442. /*    CheckPersHardSender -- a personal check written in a stable, */
  1443. /*                     convertible, "hard" currency other than     */
  1444. /*                     that used in recipient's country, and drawn */
  1445. /*                     on a bank in the sender's, and not the      */
  1446. /*                     recipient's, country.                       */
  1447. /*    CheckPersHardRecip -- a personal check written in a stable,  */
  1448. /*                     convertible, "hard" currency other than     */
  1449. /*                     that used in recipient's country, and       */
  1450. /*                     drawn on a bank in the recipient's country. */
  1451.  
  1452.                  /*      Order Section (cont.)        */
  1453.  
  1454. /*    CheckPersOther -- a personal check other than those          */
  1455. /*                     described above, typically in a "soft"      */
  1456. /*                     currency.                                   */
  1457. /*    CheckBank... -- same as the four categories just listed,     */
  1458. /*                     but the check is a bank draft or cashier's  */
  1459. /*                     check.                                      */
  1460. /*    Cash... -- similar to check categories above, but involving  */
  1461. /*                     actual currency sent through the mail       */
  1462. /*    TravCheck... -- similar to categories above, but involving   */
  1463. /*                     traveller's checks.                         */
  1464. /*    AmexMoneyOrder -- American Express Money Order               */
  1465. /*    EuroChequeSenderGuar -- EuroCheque written in the currency   */
  1466. /*                     of the sender, with a valid cheque          */
  1467. /*                     guarantee card number written on the back.  */
  1468. /*    DirectBank -- Direct bank-to-bank electronic funds transfer, */
  1469. /*                     paid to the bank and account number         */
  1470. /*                     indicated in vidOrderBankAccount.           */
  1471. /*    PurchOrderNbrMost -- Purchase order numbers accepted in most */
  1472. /*                     cases from major firms.                     */
  1473. /*    PurchOrderHardcopyMost -- Purchase orders accepted in        */
  1474. /*                     hardcopy from most major firms.             */
  1475. /*-----------------------------------------------------------------*/
  1476. #define  vibPayPmoSameCountry             0x00000001     /* oxms b */
  1477. #define  vibPayPmoInternational           0x00000002     /* oxmi b */
  1478. #define  vibPayCheckPersSame              0x00000004     /* oxps b */
  1479. #define  vibPayCheckPersHardSender        0x00000008     /* oxph b */
  1480. #define  vibPayCheckPersHardRecip         0x00000010     /* oxpr b */
  1481. #define  vibPayCheckPersOther             0x00000020     /* oxpo b */
  1482. #define  vibPayCheckBankSame              0x00000040     /* oxbs b */
  1483. #define  vibPayCheckBankHardSender        0x00000080     /* oxbh b */
  1484. #define  vibPayCheckBankHardRecip         0x00000100     /* oxbr b */
  1485. #define  vibPayCheckBankOther             0x00000200     /* oxbo b */
  1486. #define  vibPayCashSame                   0x00000400     /* oxcs b */
  1487. #define  vibPayCashHard                   0x00000800     /* oxch b */
  1488. #define  vibPayCashOther                  0x00001000     /* oxco b */
  1489. #define  vibPayTravCheckSame              0x00002000     /* oxts b */
  1490. #define  vibPayTravCheckOther             0x00004000     /* oxto b */
  1491. #define  vibPayAmexMoneyOrder             0x00008000     /* oxa  b */
  1492. #define  vibPayEuroChequeOrigGuar         0x00010000     /* oxe  b */
  1493. #define  vibPayDirectBank                 0x00020000     /* oxd  b */
  1494. #define  vibPayPurchOrderNbrMost          0x00040000     /* oxon b */
  1495. #define  vibPayPurchOrderHardcopyMost     0x00080000     /* oxoh b */
  1496.  
  1497.                      /*****************************/
  1498.                      /*      Prices Section       */
  1499.                      /*****************************/
  1500.  
  1501. /*=================================================================*/
  1502. /*          Prices Section structure definition                    */
  1503. /*=================================================================*/
  1504.  
  1505. /*-------------------------------------- typedef viSectPrices -----*/
  1506. /*  The Prices structure contains information about prices and     */
  1507. /*  registration benefits for the product, including availability  */
  1508. /*  of site licenses and dealer discounts, royalty information,    */
  1509. /*  non-shareware versions, etc.                                   */
  1510. /*-----------------------------------------------------------------*/
  1511. #define  vivPriceShipCount               7
  1512. typedef struct {
  1513.    viRegPkg     mini;                                     /* i1?   */
  1514.    viRegPkg     maxi;                                     /* i2?   */
  1515.    char         vidPriceWhatCurrency [ vivLenCurrency ];  /* ic  s */
  1516.    Price        vidPriceShip [ vivPriceShipCount];        /* is?   */
  1517.                                 /* see vivPriceShip... */
  1518.    word         vidPriceMiscFlags;  /* vibPriceMisc... */ /* im?   */
  1519.    Price        vidPriceRoyaltyMin;                       /* irm n */
  1520.    char         vidPriceRoyaltyMinText [ vivLenMisc1 ];   /* irn s */
  1521.    Price        vidPriceRoyaltyMax;                       /* irx n */
  1522.    char         vidPriceRoyaltyMaxText [ vivLenMisc1 ];   /* iry s */
  1523.    char         vidPriceRoyaltyAgent [ vivLenMisc1 ];     /* ira s */
  1524. } viSectPrices;    /* 96 fields, 488 bytes */
  1525.  
  1526. /*------------------------------------- shipping and handling -----*/
  1527. /*  These fields allow separate shipping and handling charges by   */
  1528. /*  continent, and allow a separate rate for recipients in the     */
  1529. /*  same country as the order address.  These amounts are to be    */
  1530. /*  expressed in the same currency as the registration prices.     */
  1531. /*-----------------------------------------------------------------*/
  1532. #define  vivPriceShipSameCountry          0               /* isc n */
  1533. #define  vivPriceShipNorthAmerica         1               /* isn n */
  1534. #define  vivPriceShipSouthAmerica         2               /* iss n */
  1535. #define  vivPriceShipEurope               3               /* ise n */
  1536. #define  vivPriceShipAsia                 4               /* isa n */
  1537. #define  vivPriceShipAfrica               5               /* isf n */
  1538. #define  vivPriceShipPacificRim           6               /* isp n */
  1539.  
  1540. /*--------------------------------------------- pricing misc. -----*/
  1541. /*  vidPriceMiscFlags contains these binary flags.  The fields are */
  1542. /*  defined as follows:                                            */
  1543. /*      Sitelice -- site licenses are available                    */
  1544. /*      SiteliceSeeText -- actual site license rates are included  */
  1545. /*                     in the human-readable portion of the        */
  1546. /*                     VENDINFO record.                            */
  1547. /*      Discount -- dealer discount prices are available           */
  1548. /*      DiscountSeeText -- actual dealer discount rates are        */
  1549. /*                     included in the human-readable portion of   */
  1550. /*                     the VENDINFO record.                        */
  1551. /*      Royalty -- royalties are required for some forms of        */
  1552. /*                     distribution of this product.  Note that    */
  1553. /*                     royalty rates can be specified here in the  */
  1554. /*                     VENDINFO data record (e.g.,                 */
  1555. /*                     vidPriceRoyaltyMin), in the human-readable  */
  1556. /*                     portion of the record, or neither.          */
  1557. /*      RoyaltyNegot -- royalty rates are always negotiated on a   */
  1558. /*                     case-by-case basis.                         */
  1559.  
  1560.                      /*      Prices Section       */
  1561.  
  1562. /*      RoyaltySeeText -- royalty rates are included in the        */
  1563. /*                     human-readable portion of the VENDINFO      */
  1564. /*                     record.                                     */
  1565. /*      NsvAvailable -- a non-shareware (enhanced) version of this */
  1566. /*                     shareware product is available.             */
  1567. /*      LcrAvailable -- a low-cost retail version of this product  */
  1568. /*                     is available for distribution.              */
  1569. /*-----------------------------------------------------------------*/
  1570. #define  vibPriceMiscSitelice             0x00000001      /* ims b */
  1571. #define  vibPriceMiscSiteliceSeeText      0x00000002      /* imt b */
  1572. #define  vibPriceMiscDiscount             0x00000004      /* imd b */
  1573. #define  vibPriceMiscDiscountSeeText      0x00000008      /* ime b */
  1574. #define  vibPriceMiscRoyalty              0x00000010      /* imr b */
  1575. #define  vibPriceMiscRoyaltyNegot         0x00000020      /* imq b */
  1576. #define  vibPriceMiscRoyaltySeeText       0x00000040      /* imp b */
  1577. #define  vibPriceMiscNsvAvailable         0x00000080      /* imn b */
  1578. #define  vibPriceMiscLcrAvailable         0x00000100      /* iml b */
  1579. #define  vivPriceMiscCount           9
  1580.  
  1581.                      /*****************************/
  1582.                      /*     Support Section       */
  1583.                      /*****************************/
  1584.  
  1585. /*=================================================================*/
  1586. /*          Support Section structure definition                   */
  1587. /*=================================================================*/
  1588.  
  1589. /*------------------------------------- typedef viSectSupport -----*/
  1590. /*  The Support section contains contact information for technical */
  1591. /*  support for the product.                                       */
  1592. /*-----------------------------------------------------------------*/
  1593. typedef struct {
  1594.    char         vidSupportAddress [6] [vivLenAddress];    /* sa  t */
  1595.    char         vidSupportPhone [ vivLenPhone ];          /* sp  s */
  1596.    char         vidSupportFax [ vivLenPhone ];            /* sf  s */
  1597.    viElectAddr  elec;                                     /* se?   */
  1598.    TextBlock    vidSupportForums [ vivLenMisc1 ];         /* ss  t */
  1599. } viSectSupport;   /* 16 fields, 724 bytes */
  1600.  
  1601.                      /*****************************/
  1602.                      /*     General Section       */
  1603.                      /*****************************/
  1604.  
  1605. /*=================================================================*/
  1606. /*        General (channel-independent) Distribution Section       */
  1607. /*=================================================================*/
  1608.  
  1609. /*------------------------------------- typedef viSectGeneral -----*/
  1610. /*  The General section specifies information about the product's  */
  1611. /*  packaging and distribution that applies across all channels of */
  1612. /*  distribution.  Most of the information is in the form of       */
  1613. /*  binary flags, defined a bit later.  The various Text fields    */
  1614. /*  serve as additional-information "catch-all" fields for various */
  1615. /*  subjects that are discussed in connection with those binary    */
  1616. /*  flags.                                                         */
  1617. /*-----------------------------------------------------------------*/
  1618. typedef struct {
  1619.    word         vidGenlDistType; /* see vivDistType... */ /* gt  n */
  1620.    word         vidGenlMiscFlags;   /* vidGenlMisc... */  /* gm? b */
  1621.    char         vidGenlGeogText [ vivLenMisc1 ];          /* gg  s */
  1622.    char         vidGenlInstallText [ vivLenMisc1 ];       /* gi  s */
  1623.    char         vidGenlCompressText [ vivLenMisc1 ];      /* gc  s */
  1624.    char         vidGenlChangeText [ vivLenMisc1 ];        /* gh  s */
  1625.    char         vidGenlGroupSimText [ vivLenMisc1 ];      /* gs  s */
  1626.    char         vidGenlGroupDisText [ vivLenMisc1 ];      /* gd  s */
  1627.    char         vidGenlVendorUpgradeText [ vivLenMisc1 ]; /* gu  s */
  1628. } viSectGeneral;   /* 23 fields, 571 bytes */
  1629.  
  1630.                  /*     General Section (cont.)       */
  1631.  
  1632. /*-------------------------------- product distribution types -----*/
  1633. /*  The vidGenlDistType field allows the author to specify the     */
  1634. /*  basic distribution category into which the product falls.      */
  1635. /*  Definitions are:                                               */
  1636. /*       Commercial -- "commercial" product, not distributable     */
  1637. /*                     except through written permission/contract. */
  1638. /*       CommercialDist -- "commercial" product specifically       */
  1639. /*                     intended for use in distribution packages.  */
  1640. /*                     This code would probably appear only on an  */
  1641. /*                     executable program, not in a VENDINFO.DIZ.  */
  1642. /*       ShareRegistered -- registered version of shareware        */
  1643. /*                     program, not distributable.  This code      */
  1644. /*                     would probably appear only on an executable */
  1645. /*                     program, not in a VENDINFO.DIZ.             */
  1646. /*       ShareRegDist -- registered version of shareware program   */
  1647. /*                     specifically intended for use in            */
  1648. /*                     distribution packages (e.g., an install     */
  1649. /*                     program).  This code would probably appear  */
  1650. /*                     only on an executable program, not in a     */
  1651. /*                     VENDINFO.DIZ.                               */
  1652. /*       ShareRestricted -- shareware product, with distribution   */
  1653. /*                     restrictions expressed in the Distribution  */
  1654. /*                     section of the record.                      */
  1655. /*       ShareUnlimited -- shareware product, freely distributable */
  1656. /*                     by all channels without further permission. */
  1657. /*       CopyrUnlimFree -- copyrighted program, but freely         */
  1658. /*                     distributable by all channels, and freely   */
  1659. /*                     useable without charge or registration.     */
  1660. /*                     Sometimes called "freeware" or              */
  1661. /*                     "bannerware".                               */
  1662. /*       Demo -- demonstration program, not necessarily fully      */
  1663. /*                     functional, freely distributable by all     */
  1664. /*                     channels.                                   */
  1665. /*       Public -- public-domain product, no copyright retained,   */
  1666. /*                     freely distributable, useable, modifiable.  */
  1667. /*       Retired -- used in a VENDINFO-only distribution package,  */
  1668. /*                     to request removal of previous version(s).  */
  1669. /*       TestVersion -- Test version of product, further           */
  1670. /*                     distribution not allowed.                   */
  1671. /*-----------------------------------------------------------------*/
  1672. #define  vivGenlTypeCommercial            0
  1673. #define  vivGenlTypeCommercialDist        1
  1674. #define  vivGenlTypeShareRegistered       2
  1675. #define  vivGenlTypeShareRegDist          3
  1676. #define  vivGenlTypeShareRestricted       4
  1677. #define  vivGenlTypeShareUnlimited        5
  1678. #define  vivGenlTypeCopyrUnlimFree        6
  1679. #define  vivGenlTypeDemo                  7
  1680. #define  vivGenlTypePublic                8
  1681. #define  vivGenlTypeRetired               9
  1682. #define  vivGenlTypeTestVersion           10
  1683. #define  vivGenlTypeCount            11
  1684.  
  1685.                  /*     General Section (cont.)       */
  1686.  
  1687. /*------ channel-independent flags (see genl.viGenlMiscFlags) -----*/
  1688. /*  vidGenlMiscFlags contains various binary flags representing    */
  1689. /*  policies applicable to the product across all distribution     */
  1690. /*  channels.  Definitions are:                                    */
  1691. /*       GeogOnlyUS -- distribution outside the United States is   */
  1692. /*                     illegal because product includes encryption */
  1693. /*                     technology that cannot be exported (any     */
  1694. /*                     other geographical restrictions are placed  */
  1695. /*                     in vidGenlGeogText).                        */
  1696. /*       PkgNoMods -- no modifications whatever are permitted to   */
  1697. /*                     the compressed package as released by the   */
  1698. /*                     author/publisher.                           */
  1699. /*       FilesNoMods -- while addition of files may be allowed, no */
  1700. /*                     modifications of the original files are     */
  1701. /*                     allowed.                                    */
  1702. /*       HelpGoSeparate -- Help files, GO.BAT, etc. may be added.  */
  1703. /*       AdsSeparate -- advertisements may be added, but only as   */
  1704. /*                     separate files.                             */
  1705. /*       AdsAppended -- advertisements may be appended to the      */
  1706. /*                     author's original documentation files, but  */
  1707. /*                     the files must otherwise remain unchanged.  */
  1708. /*       Install -- a different installation program or procedure  */
  1709. /*                     may be substituted or added.                */
  1710. /*       InstallSeeText -- must see human-readable portion of      */
  1711. /*                     VENDINFO record for additional constraints  */
  1712. /*                     on installation changes.                    */
  1713. /*       Compress -- a different compression program can be used   */
  1714. /*                     to repackage the files in this package.     */
  1715. /*       CompressSeeText -- must see human-readable portion of     */
  1716. /*                     VENDINFO record for additional constraints  */
  1717. /*                     on compression changes.                     */
  1718. /*       GroupSim -- product can be distributed in a single        */
  1719. /*                     package with other similar products, as in  */
  1720. /*                     PsL's megadisks.                            */
  1721. /*       GroupSimPerm -- written permission is required for such   */
  1722. /*                     distribution.                               */
  1723. /*       GroupSimSeeText -- must see human-readable portion of     */
  1724. /*                     VENDINFO record for additional constraints  */
  1725. /*                     on such distribution.                       */
  1726. /*       GroupDis -- product can be distributed in a single        */
  1727. /*                     package with other dis-similar products, as */
  1728. /*                     in a "starter set".                         */
  1729. /*       GroupDisPerm -- written permission is required for such   */
  1730. /*                     distribution.                               */
  1731. /*       GroupDisSeeText -- must see human-readable portion of     */
  1732. /*                     VENDINFO record for additional constraints  */
  1733. /*                     on such distribution.                       */
  1734. /*-----------------------------------------------------------------*/
  1735. #define  vibGenlMiscGeogOnlyUS            0x00000001     /* gmu  b */
  1736. #define  vibGenlMiscPkgNoMods             0x00000002     /* gmp  b */
  1737. #define  vibGenlMiscFilesNoMods           0x00000004     /* gmf  b */
  1738. #define  vibGenlMiscHelpGoSeparate        0x00000008     /* gmhs b */
  1739. #define  vibGenlMiscAdsSeparate           0x00000010     /* gmas b */
  1740. #define  vibGenlMiscAdsAppended           0x00000020     /* gmaa b */
  1741. #define  vibGenlMiscInstall               0x00000040     /* gmi  b */
  1742. #define  vibGenlMiscInstallSeeText        0x00000080     /* gmit b */
  1743. #define  vibGenlMiscCompress              0x00000100     /* gmc  b */
  1744. #define  vibGenlMiscCompressSeeText       0x00000200     /* gmct b */
  1745.  
  1746.                  /*     General Section (cont.)       */
  1747.  
  1748. #define  vibGenlMiscGroupSim              0x00000400     /* gms  b */
  1749. #define  vibGenlMiscGroupSimPerm          0x00000800     /* gmsp b */
  1750. #define  vibGenlMiscGroupSimSeeText       0x00001000     /* gmst b */
  1751. #define  vibGenlMiscGroupDis              0x00002000     /* gmd  b */
  1752. #define  vibGenlMiscGroupDisPerm          0x00004000     /* gmdp b */
  1753. #define  vibGenlMiscGroupDisSeeText       0x00008000     /* gmdt b */
  1754. #define  vivGenlMiscCount        16
  1755.  
  1756.                      /*****************************/
  1757.                      /*   Distribution Section    */
  1758.                      /*****************************/
  1759.  
  1760. /*=================================================================*/
  1761. /*        (channel-specific) Distribution Section                  */
  1762. /*=================================================================*/
  1763.  
  1764. /*------------------------------------- typedef viSectDistrib -----*/
  1765. /*  For each defined distribution channel, one of these structures */
  1766. /*  specifies the distribution requirements of the product.        */
  1767. /*-----------------------------------------------------------------*/
  1768. #define  vivDistDataCount            6
  1769. typedef struct {
  1770.    long         vidDistFlags;                            /* d?m? b */
  1771.    word         vidDistData [ vivDistDataCount ];        /* d?d?   */
  1772.    char         vidDistAddlReqs [ vivLenMisc1 ];         /* d?a  s */
  1773. } viSectDistrib;   /* 36 fields, 97 bytes */
  1774.  
  1775. /*----------------- distribution types/channels (see dist[i]) -----*/
  1776. /*  The distribution channels currently defined are:               */
  1777. /*    Bbs  -- to End User by BBS                                   */
  1778. /*    Fdn  -- to BBSes by File-Distribution Network                */
  1779. /*    DiskVend  -- to End User by Mail-Order Disk Vendor           */
  1780. /*    Cdrom  -- by CD-ROM (other than File-Distribution Network)   */
  1781. /*    OneRack  -- to End User by Single-Site Rack                  */
  1782. /*    Rack  -- to Seller by Rackware Distributor                   */
  1783. /*    Book  -- to End User in Book Enclosure Diskette              */
  1784. /*    Subscrip  -- to End User by Subscription Service             */
  1785. /*    Magazine  -- to End User by Magazine "Cover" Disk            */
  1786. /*    Broadcast -- to End User by TV/Cable/Satellite Broadcast     */
  1787. /*    Phone900  -- to End User by 1-900-Type Phone Service         */
  1788. /*    Install  -- Installation by Distributor on User's Machine    */
  1789. /*    Undesc  -- Distribution by Substantially Different Means     */
  1790. /*-----------------------------------------------------------------*/
  1791. #define  vivDistChanBbs                   0               /* db... */
  1792. #define  vivDistChanFdn                   1               /* df... */
  1793. #define  vivDistChanDiskVend              2               /* dd... */
  1794. #define  vivDistChanCdrom                 3               /* dc... */
  1795. #define  vivDistChanOneRack               4               /* do... */
  1796. #define  vivDistChanRack                  5               /* dr... */
  1797. #define  vivDistChanBook                  6               /* dk... */
  1798. #define  vivDistChanSubscrip              7               /* ds... */
  1799. #define  vivDistChanMagazine              8               /* dm... */
  1800. #define  vivDistChanTvBroadcast           9               /* dt... */
  1801. #define  vivDistChanPhone900              10              /* dp... */
  1802. #define  vivDistChanInstall               11              /* di... */
  1803. #define  vivDistChanUndesc                12              /* du... */
  1804. #define  vivDistChanCount            13
  1805.  
  1806. /*----------------------- specific-channel distribution flags -----*/
  1807. /*  vidDistFlags records a set of boolean values indicating        */
  1808. /*  various distribution policies for a particular distribution    */
  1809. /*  channel.  The overall approach taken here is to allow the      */
  1810. /*  author to specify the following, in order:                     */
  1811. /*     1. Who falls in the "qualifying" distributor set?           */
  1812. /*     2. What actions remove a distributor from the "qualifiers"? */
  1813. /*     3. Do qualifiers still require written permission, or can   */
  1814. /*        they distribute the product based on being qualifiers?   */
  1815. /*     4. If qualifiers need no written permission, are other      */
  1816. /*        distributors allowed to distribute WITH PERMISSION, or   */
  1817. /*        are they prohibited from distributing altogether?        */
  1818. /*        (The point of this question is to help a non-qualifying  */
  1819. /*        distributor know whether to review a product and request */
  1820. /*        permission, or to ignore the product altogether.)        */
  1821.  
  1822.                  /*   Distribution Section (cont.)    */
  1823.  
  1824. /*  Definitions are:                                               */
  1825. /*     Prohib -- Distribution via this channel is prohibited.      */
  1826. /*     Any -- Any distributor falls in the "qualifying" set (but   */
  1827. /*                     may still drop out of that group if         */
  1828. /*                     engaged in disqualifying actions.)          */
  1829. /*     AnyAsp -- Any distributor who is an ASP member (in the      */
  1830. /*                     membership class relevant this channel)     */
  1831. /*                     qualifies.  The point of this choice is     */
  1832. /*                     that ASP distributor members agree to       */
  1833. /*                     certain advertising and business practices  */
  1834. /*                     (and are monitored for compliance), and     */
  1835. /*                     some authors (ASP members or not) therefore */
  1836. /*                     grant permission to these distributors      */
  1837. /*                     without further investigation.              */
  1838. /*     AnyDisclose -- Any distributor qualifies if he agrees to    */
  1839. /*                     inform customer: (1) that product is        */
  1840. /*                     shareware, (2) what shareware is, (3) that  */
  1841. /*                     he claims no ownership rights in the        */
  1842. /*                     product, and (4) that separate payment is   */
  1843. /*                     required if product is used other than for  */
  1844. /*                     author-specified evaluation period.         */
  1845. /*     AnyUG -- Any user group qualifies.                          */
  1846. /*     AnyNonProfUG -- Any non-profit user group qualifies.        */
  1847. /*     AnyConsult -- Any consultant, who charges user for software */
  1848. /*                     evaluation and installation services,       */
  1849. /*                     qualifies.                                  */
  1850. /*     AnyHardware -- Any hardware dealer, who charges user for    */
  1851. /*                     hardware and installs product on it,        */
  1852. /*                     qualifies.                                  */
  1853. /*     AnyRecFromAuth -- Any distributor who has received the      */
  1854. /*                     product directly from the author, or in a   */
  1855. /*                     mailing done by the author's direct agent,  */
  1856. /*                     qualifies.                                  */
  1857. /*     NoIfAnyCharge -- A distributor is disqualified if he        */
  1858. /*                     charges the customer in any way.            */
  1859. /*     NoIfPerYear -- A distributor is disqualified if he charges  */
  1860. /*                     a subscription fee exceeding the rate in    */
  1861. /*                     vivDistDataPerYear.                         */
  1862. /*     NoIfPerProg -- A distributor is disqualified if he charges  */
  1863. /*                     more per program than the rate in           */
  1864. /*                     vivDistDataPerProg.                         */
  1865. /*     NoIfPer360K -- A distributor is disqualified if he charges  */
  1866. /*                     by diskette, connect time hour, or other    */
  1867. /*                     volume measure, more than the rate          */
  1868. /*                     in vivDistDataPer360K.                      */
  1869. /*     NoIfPerCdrom -- A distributor is disqualified if he charges */
  1870. /*                     more for the CD-ROM on which product is     */
  1871. /*                     being distributed than the rate in          */
  1872. /*                     vivDistDataPerCdrom.                        */
  1873. /*     NoIfBbsMailDisk -- Distribution by this (BBS) channel is    */
  1874. /*                     prohibited if sysop mails disk in lieu of   */
  1875. /*                     download.                                   */
  1876. /*     NoIfCdrom -- Distribution by this channel is prohibited if  */
  1877. /*                     done by CD-ROM (FDN channel only).          */
  1878. /*     NoIfOtherMass -- Distribution by this channel is prohibited */
  1879. /*                     if done by mass medium other than CD-ROM,   */
  1880. /*                     such as bulk tape (FDN channel only).       */
  1881.  
  1882.                  /*   Distribution Section (cont.)    */
  1883.  
  1884. /*     NoIfTargetBbs -- Distribution by this (CD-ROM) channel is   */
  1885. /*                     prohibited if the CD-ROM is targetted at    */
  1886. /*                     BBS Sysops (e.g., set up to support         */
  1887. /*                     mounting of CD-ROM on BBS, marketed to      */
  1888. /*                     Sysops, etc.)                               */
  1889. /*     NoIfTargetDistrib -- Distribution by this (CD-ROM) channel  */
  1890. /*                     is prohibited if the CD-ROM is targetted at */
  1891. /*                     shareware distributors (e.g., "vendor in a  */
  1892. /*                     box" kits, retail-store vending machines,   */
  1893. /*                     etc.)                                       */
  1894. /*     NoIfTargetBbs -- Distribution by this (CD-ROM) channel is   */
  1895. /*                     prohibited if the CD-ROM is targetted at    */
  1896. /*                     End Users.                                  */
  1897. /*     PermIfQual -- Distributors in "qualifying" set must still   */
  1898. /*                     have written permission.                    */
  1899. /*     PermIfDisqual -- Distributors not in qualifying set may     */
  1900. /*                     still distribute product if they obtain     */
  1901. /*                     written permission.  Please note that the   */
  1902. /*                     author ALWAYS has the right to allow a      */
  1903. /*                     distribution by written permission,         */
  1904. /*                     regardless of the restrictions in the       */
  1905. /*                     VENDINFO record.  This field is here to     */
  1906. /*                     help the "non-qualifying" distributor       */
  1907. /*                     determine whether or not it's worth the     */
  1908. /*                     trouble to request written permission.      */
  1909. /*     NoIfDisqual -- Distributors not in qualifying set are not   */
  1910. /*                     allowed to distribute by this channel.      */
  1911. /*                     This field is actually redundant, but is in */
  1912. /*                     the record to remove any possible ambiguity */
  1913. /*                     regarding distribution rights.              */
  1914. /*     HiDensRequired -- Distribution on diskette may be done only */
  1915. /*                     on high-density diskettes.                  */
  1916. /*     NotifVersRequired -- Distributor who is operating without   */
  1917. /*                     written permission must notify author /     */
  1918. /*                     publisher of distribution and indicate the  */
  1919. /*                     version being distributed.                  */
  1920. /*     SampleRequired -- Distributor who is operating without      */
  1921. /*                     written permission must send an appropriate */
  1922. /*                     sample of the distributed product to the    */
  1923. /*                     author.  For mail-order disk vendors, this  */
  1924. /*                     means a copy of the catalog in which the    */
  1925. /*                     product is listed; for distribution by      */
  1926. /*                     other means it is a copy of the actual      */
  1927. /*                     material distributed, such as the rack      */
  1928. /*                     package, CD-ROM, magazine, book, etc.       */
  1929. /*     SampleRequested -- Author requests, but does not require,   */
  1930. /*                     a sample as described above.                */
  1931. /*     Royalty -- When distribution is done via this channel, a    */
  1932. /*                     royalty payment is required.  See royalty   */
  1933. /*                     information in the General section for more */
  1934. /*                     information about royalty amounts or        */
  1935. /*                     procedure.                                  */
  1936. /*     HasContactDate -- There is a date (vivDistDataContactDate)  */
  1937. /*                     beyond which distributor must check with    */
  1938. /*                     author for current version before           */
  1939. /*                     distributing by this channel.               */
  1940. /*     HasProhibDate -- There is a date beyond which distribution  */
  1941. /*                     of this version by this channel is not      */
  1942. /*                     allowed.                                    */
  1943. /*     HasAddlReqs -- There are additional requirements governing  */
  1944. /*                     distribution by this channel, in the        */
  1945. /*                     vidDistAddlReqs field.                      */
  1946.  
  1947.                  /*   Distribution Section (cont.)    */
  1948.  
  1949. /*     SeeText -- There are additional requirements governing      */
  1950. /*                     distribution by this channel in the human-  */
  1951. /*                     readable portion of the VENDINFO.DIZ file.  */
  1952. /*-----------------------------------------------------------------*/
  1953. #define  vibDistProhib                    0x00000001    /* d?mp  b */
  1954. #define  vibDistAny                       0x00000002    /* d?ma  b */
  1955. #define  vibDistAnyAsp                    0x00000004    /* d?maa b */
  1956. #define  vibDistAnyDisclose               0x00000008    /* d?mad b */
  1957. #define  vibDistAnyUG                     0x00000010    /* d?mau b */
  1958. #define  vibDistAnyNonProfUG              0x00000020    /* d?man b */
  1959. #define  vibDistAnyConsult                0x00000040    /* d?mac b */
  1960. #define  vibDistAnyHardware               0x00000080    /* d?mah b */
  1961. #define  vibDistAnyRecFromAuth            0x00000100    /* d?mar b */
  1962. #define  vibDistNoIfAnyCharge             0x00000200    /* d?mna b */
  1963. #define  vibDistNoIfPerYear               0x00000400    /* d?mny b */
  1964. #define  vibDistNoIfPerProg               0x00000800    /* d?mnp b */
  1965. #define  vibDistNoIfPer360K               0x00001000    /* d?mnk b */
  1966. #define  vibDistNoIfPerCdrom              0x00002000    /* d?mnc b */
  1967.  
  1968. /*----- The following fields are channel-specific, and are --------*/
  1969. /*----- allowed to have overlapping values                 --------*/
  1970. #define  vibDistNoIfBbsMailDisk           0x00004000    /* d?mnm b */
  1971. #define  vibDistNoIfCdrom                 0x00004000    /* d?mnr b */
  1972. #define  vibDistNoIfOtherMass             0x00008000    /* d?mno b */
  1973. #define  vibDistNoIfTargetBbs             0x00004000    /* d?mnb b */
  1974. #define  vibDistNoIfTargetDistrib         0x00008000    /* d?mng b */
  1975. #define  vibDistNoIfTargetUser            0x00010000    /* d?mnu b */
  1976.  
  1977. #define  vibDistPermIfQual                0x00020000    /* d?mpq b */
  1978. #define  vibDistPermIfDisqual             0x00040000    /* d?mpd b */
  1979. #define  vibDistNoIfDisqual               0x00080000    /* d?mnd b */
  1980. #define  vibDistHiDensRequired            0x00100000    /* d?mh  b */
  1981. #define  vibDistNotifVersRequired         0x00200000    /* d?mv  b */
  1982. #define  vibDistSampleRequired            0x00400000    /* d?msr b */
  1983. #define  vibDistSampleRequested           0x00800000    /* d?msq b */
  1984. #define  vibDistRoyalty                   0x01000000    /* d?mr  b */
  1985. #define  vibDistHasContactDate            0x02000000    /* d?mdc b */
  1986. #define  vibDistHasProhibDate             0x04000000    /* d?mdp b */
  1987. #define  vibDistHasAddlReqs               0x08000000    /* d?maq b */
  1988. #define  vibDistSeeText                   0x10000000    /* d?mst b */
  1989.  
  1990.                  /*   Distribution Section (cont.)    */
  1991.  
  1992. /*------------------specific-channel distribution data fields -----*/
  1993. /*  These constants indicate the meanings of the variables in the  */
  1994. /*  vidData array.  Definitions are:                               */
  1995. /*       PerYear -- subscription of membership charge made by      */
  1996. /*                     distributor to user, calculated on annual   */
  1997. /*                     basis no matter how charged, and expressed  */
  1998. /*                     in U.S. dollars.                            */
  1999. /*       PerProg -- charge made by distributor for individual      */
  2000. /*                     product, in U.S. dollars.                   */
  2001. /*       Per360K -- charge made by distributor to user by volume   */
  2002. /*                     of information conveyed, such as per        */
  2003. /*                     diskette or per download hour, calculated   */
  2004. /*                     on the basis of 360K units no matter how    */
  2005. /*                     charged, and expressed in U.S. dollars.     */
  2006. /*       PerCdrom -- retail price of CD-ROM on which program is    */
  2007. /*                     distributed, in U.S. dollars.               */
  2008. /*       ContactDate -- date after which distributor must contact  */
  2009. /*                     author for new version, or to verify that   */
  2010. /*                     this version is current, before initiating  */
  2011. /*                     any distribution of this product.           */
  2012. /*       ProhibDate -- date after which all distribution of this   */
  2013. /*                     version by the indicated channel is         */
  2014. /*                     prohibited.                                 */
  2015. /*-----------------------------------------------------------------*/
  2016. #define  vivDistDataPerYear               0              /* d?dy n */
  2017. #define  vivDistDataPerProg               1              /* d?dp n */
  2018. #define  vivDistDataPer360K               2              /* d?dk n */
  2019. #define  vivDistDataPerCdrom              3              /* d?dc n */
  2020. #define  vivDistDataContactDate           4              /* d?dt s */
  2021. #define  vivDistDataProhibDate            5              /* d?dd s */
  2022.  
  2023.                   /************************************/
  2024.                   /*  VENDINFO Main Record Structure  */
  2025.                   /************************************/
  2026.  
  2027. /*---------------------------------- typedef viVendinfoRecord -----*/
  2028. /*  This is the fixed-length portion of the compressed data        */
  2029. /*  record in VENDINFO.DIZ.  It contains sections corresponding    */
  2030. /*  to the various major categories of information in the record,  */
  2031. /*  and ends with a single byte that indicates the type, if any,   */
  2032. /*  of the first record extension.                                 */
  2033. /*-----------------------------------------------------------------*/
  2034. typedef struct {
  2035.    viSectHeader  head;                         /*  11 fields,    45 bytes */
  2036.    viSectProduct prod;                         /* 100 fields,  4271 bytes */
  2037.    viSectAuthor  auth;                         /*  25 fields,   797 bytes */
  2038.    viSectOrder   ordr;                         /*  46 fields,  1073 bytes */
  2039.    viSectPrices  pric;                         /*  96 fields,   488 bytes */
  2040.    viSectSupport supp;                         /*  16 fields,   724 bytes */
  2041.    viSectGeneral genl;                         /*  23 fields,   571 bytes */
  2042.    viSectDistrib dist [ vivDistChanCount ];    /* 438 fields,  1261 bytes */
  2043.    byte          vidRecExtensionType;          /*                 1 byte  */
  2044. } viVendinfoRecord;                            /* 755    fields,  9231 bytes */
  2045.  
  2046.                 /****************************************/
  2047.                 /*  Extensions to VENDINFO Main Record  */
  2048.                 /****************************************/
  2049.  
  2050. /*--------------------------- record extension identifiers () -----*/
  2051. /*  The last byte of the fixed-length data record is a record      */
  2052. /*  extension indicator.  If its value is zero, the data record    */
  2053. /*  has no extensions.  Otherwise, the byte represents the type of */
  2054. /*  the first extension record, which begins in the next byte.     */
  2055. /*  Each extension record is of fixed length, followed by a single */
  2056. /*  byte which is once again a record extension indicator.  By     */
  2057. /*  this means, any number of extensions, of potentially varying   */
  2058. /*  types, are possible.  At present, the only extension type is   */
  2059. /*  that concerned with defining a distributor for a specific      */
  2060. /*  geographical region.                                           */
  2061. /*-----------------------------------------------------------------*/
  2062. #define  vivRecExtensionNone              0     
  2063. #define  vivRecExtensionRegionalDist      1     
  2064.  
  2065. /*------------------------------------ typedef viRegionalDist -----*/
  2066. /*  Multiple instances of this record can appear as record         */
  2067. /*  extensions to the VENDINFO fixed-length data record.  Each of  */
  2068. /*  these represents information about a distributor authorized by */
  2069. /*  the author to represent the product in a specific geographical */
  2070. /*  area.  These arrangements need not be exclusive.  The point is */
  2071. /*  to make contact information available to potential customers   */
  2072. /*  (and perhaps other distributors, if applicable) in the region. */
  2073. /*-----------------------------------------------------------------*/
  2074. typedef struct {
  2075.    char         vidRegionCovered [ vivLenAddress ];      /* r?r  s */
  2076.    char         vidRegionAddress [ 6 ] [ vivLenAddress ];/* r?a  t */
  2077.    char         vidRegionPhone [ vivLenPhone ];          /* r?p  s */
  2078.    char         vidRegionFax [ vivLenPhone ];            /* r?f  s */
  2079.    byte         vidRegionMiscFlags;  /* vibRegion... */  /* r?m?   */
  2080.    word         vidRegionPrice[2];                       /* r?i? n */
  2081.    char         vidRegionCurrency [ vivLenCurrency ];    /* r?c  s */
  2082.    byte         vidRecExtensionType;
  2083. } viRegionalDist;   /* 11 fields, 284 bytes */
  2084.  
  2085. /*--------------------------------- regional distributor info -----*/
  2086. /*  vidRegionFlags contains several boolean variables defining     */
  2087. /*  specific aspects of the service provided by the regional       */
  2088. /*  distributor in his defined geographical region.                */
  2089. /*-----------------------------------------------------------------*/
  2090. #define  vibRegionHandlesSupport          0x0001         /* r?ms b */
  2091. #define  vibRegionHandlesSoleSupport      0x0002         /* r?mo b */
  2092. #define  vibRegionHandlesOtherDist        0x0004         /* r?md b */
  2093. #define  vibRegionHandlesPress            0x0008         /* r?mp b */
  2094.  
  2095.  
  2096.                 /***************************************/
  2097.                 /*  VENDINFO Secondary File Structure  */
  2098.                 /***************************************/
  2099.  
  2100. /*-------------------------------------- typedef viSectHeader -----*/
  2101. /*  Secondary VENDINFO records contain an abbreviated human-       */
  2102. /*  readable text portion (as discussed earlier).  Record          */
  2103. /*  extensions are omitted.  The entire fixed-length VENDINFO      */
  2104. /*  record is included, in its usual, compressed form.  This       */
  2105. /*  allows automated processing of the individual distribution     */
  2106. /*  packages independently of one another, while eliminating most  */
  2107. /*  of the truly redundant information from the secondary records. */
  2108. /*-----------------------------------------------------------------*/
  2109.  
  2110.                /******************************************/
  2111.                /*  VENDINFO Executable Record Structure  */
  2112.                /******************************************/
  2113.  
  2114. /*------------------------------- executable record structure -----*/
  2115. /*  This is a short VENDINFO record that can optionally be added   */
  2116. /*  to executable programs.  It is created by the editor, and      */
  2117. /*  either appended by the editor or output in source-includable   */
  2118. /*  form.  The processor can scan executables for the presence of  */
  2119. /*  such records, and can detect some types of inappropriate or    */
  2120. /*  illegal distributions.  There is also a security feature that  */
  2121. /*  allows the executable record to provide an extra layer of      */
  2122. /*  security for the VENDINFO.DIZ record.  Since the executable    */
  2123. /*  record is INSIDE any security provided for the executable      */
  2124. /*  program itself (e.g., a CRC check), this can be a substantial  */
  2125. /*  form of protection against hacking or elimination of the       */
  2126. /*  VENDINFO record itself, at a cost of four bytes.               */
  2127. /*                                                                 */
  2128. /*  There are three different forms of the VENDINFO executable     */
  2129. /*  record.  There is a basic record, present in all cases.  Then, */
  2130. /*  for products in the "Shareware, Restricted Distribution"       */
  2131. /*  category, there is an additional section containing the        */
  2132. /*  product's channel-specific distribution restrictions.  This    */
  2133. /*  second portion of the record can have either a very brief form */
  2134. /*  or a complete form, at the discretion of the author.           */
  2135. /*-----------------------------------------------------------------*/
  2136.  
  2137. /*-------------------------------- typedef viExePrimaryRecord -----*/
  2138. /*  This portion of the record is always present.  The last part   */
  2139. /*  of this record contains four character strings.  Those strings */
  2140. /*  are actually stored in byte-count-first form, and must be      */
  2141. /*  extracted from the record dynamically.  They are shown below   */
  2142. /*  (in a comment) as if they were fixed-length fields, just to    */
  2143. /*  make clear their meanings and length limits.  As a concrete    */
  2144. /*  example, the product name "InContext" would be stored starting */
  2145. /*  in the next byte after vidExeAuthentKeyVI, and would take 10   */
  2146. /*  bytes.  The first byte would be the length of the string (9)   */
  2147. /*  and the remaining 9 bytes would contain the string itself,     */
  2148. /*  with no terminating null.                                      */
  2149. /*                                                                 */
  2150. /*  The vidExeType field actually contains several pieces of type  */
  2151. /*  and status information.  It is a byte whose bit structure is:  */
  2152. /*       76543210                                                  */
  2153. /*       x.......  For shareware with distribution restrictions,   */
  2154. /*                 this bit indicates that the long version of the */
  2155. /*                 distribution policy is included.                */
  2156. /*       .x......  This bit indicates that this executable is not  */
  2157. /*                 to be distributed without an accompanying       */
  2158. /*                 VENDINFO.DIZ file.                              */
  2159. /*       ..x.....  This bit indicates that this VENDINFO record    */
  2160. /*                 contains an authenticity key identifying the    */
  2161. /*                 accompanying VENDINFO.DIZ file.                 */
  2162. /*       ...xxxxx  These bits indicate the product distribution    */
  2163. /*                 category in which this executable falls, as     */
  2164. /*                 outlined in the vidGenlDistType field in the    */
  2165. /*                 main VENDINFO record.                           */
  2166.  
  2167.           /*  VENDINFO Executable Record Structure (cont.)  */
  2168.  
  2169. /*  NOTE: if the author wishes to use an "executable branding"     */
  2170. /*  scheme, to mark an evaluation version as registered when the   */
  2171. /*  user enters a valid registration number, s/he need only change */
  2172. /*  the *5-bit* value of the distribution category field to        */
  2173. /*  vivGenlTypeShareRegistered.  Programs that interpret VENDINFO  */
  2174. /*  records are required to correctly handle such records, even if */
  2175. /*  the remainder of the executable record is that normally seen   */
  2176. /*  only for products in the vivGenlTypeShareRestricted category.  */
  2177. /*  The author should make appropriate corrections for any CRC     */
  2178. /*  or other security schemes protecting the executable.  Note     */
  2179. /*  also that the first three bits of the vidExeType field         */
  2180. /*  should not be altered.                                         */
  2181. /*-----------------------------------------------------------------*/
  2182. typedef struct {
  2183.    char          vidExeViString[12];
  2184.    word          vidExeViVersion;
  2185.    byte          vidExeType;
  2186.    Date          vidExeVersionDate;
  2187.    long          vidExeCrc;
  2188.    long          vidExeUserId;
  2189.    long          vidExeAuthentKey1;
  2190.    long          vidExeAuthentKey2;
  2191.    long          vidExeAuthentKeyVI;
  2192.    char          vidExeProdName[16];
  2193.    char          vidExeVersion[5];
  2194.    char          vidExeCompanyName[41];
  2195.    char          vidExeQueriesPhone[20];
  2196. } viExePrimaryRecord;        /* 119 bytes */
  2197.  
  2198. /*--------------------------------- typedef viExeDistribShort -----*/
  2199. /*  The brief version of the distribution record contains only a   */
  2200. /*  single bit of information for each distribution channel.       */
  2201. /*  That bit is obtainined by ORing the values, for the channel in */
  2202. /*  question, of vibDistProhib and vibDistPermIfQual.  Thus, the   */
  2203. /*  the bit is set if distribution is prohibited for the channel   */
  2204. /*  or if all qualifying distributors are still required to        */
  2205. /*  obtain written permission.  The meaning of this bit is thus:   */
  2206. /*  if you have written permission from the author, it's OK to     */
  2207. /*  distribute by this channel; otherwise, it's not.  If this bit  */
  2208. /*  is *not* set, then it's simply not possible to determine from  */
  2209. /*  this abbreviated information whether or not distribution is    */
  2210. /*  OK.  In order to convey substantially more detail about the    */
  2211. /*  permissions, a good deal more information is needed, so        */
  2212. /*  there's not a clearly useful alternative short of the full     */
  2213. /*  distribution record.  Most authors will probably choose the    */
  2214. /*  long version, but this version is provided for those highly    */
  2215. /*  concerned about the amount of information added to the         */
  2216. /*  executable record.                                             */
  2217. /*-----------------------------------------------------------------*/
  2218. typedef struct {
  2219.     word          vidExeDistChanPermReqd;
  2220. } viExeDistribShort;            /* 2 bytes */
  2221.  
  2222.           /*  VENDINFO Executable Record Structure (cont.)  */
  2223.  
  2224. /*---------------------------------- typedef viExeDistribLong -----*/
  2225. /*  The long version of the distribution record contains all the   */
  2226. /*  information in the distribution section of the main record,    */
  2227. /*  and the information is laid out in the same order.  However,   */
  2228. /*  the record is abbreviated because missing values are excluded, */
  2229. /*  and because strings, when present, are in byte-count-first     */
  2230. /*  format.  Specifically, the information about each channel      */
  2231. /*  appears together, in the order indicated in viSectDistrib.     */
  2232. /*  However, the six data values (vidDistData) and the             */
  2233. /*  vidDistAddlReqs string appear only if the corresponding bits   */
  2234. /*  (vibDistNoIfPerYear, vibDistNoIfPerProg, vibDistNoIfPer360K,   */
  2235. /*  vibDistNoIfPerCdrom, vibDistHasContactDate,                    */
  2236. /*  vibDistHasProhibDate, vibDistHasAddlReqs) are on.              */
  2237. /*-----------------------------------------------------------------*/
  2238. typedef struct {
  2239.    viSectDistrib dist [ vivDistChanCount ];
  2240. } viExeDistribLong;            /* 1261 bytes */
  2241.  
  2242.                      /*****************************/
  2243.                      /*  Distribution Flag Masks  */
  2244.                      /*****************************/
  2245.  
  2246. /*----------------------------------- distribution flag masks -----*/
  2247. /*  These words contain OR'd flags defining the applicability of   */
  2248. /*  the distribution flags to the various distribution types.  For */
  2249. /*  example, the "vidDistAnyConsult" flag is relevant to direct    */
  2250. /*  installation of the product on the user's machine, but not to  */
  2251. /*  BBS distribution.  Tools that create or use VENDINFO.DIZ files */
  2252. /*  are required to use these masks to eliminate from              */
  2253. /*  consideration any distribution flags that do not apply to the  */
  2254. /*  particular channel.                                            */
  2255. /*                                                                 */
  2256. /*  For clarity, the definitions of these flag masks are organized */
  2257. /*  in the following way, by line:                                 */
  2258. /*        Prohibited                                               */
  2259. /*        Qualifiers                                               */
  2260. /*        Disqualifiers                                            */
  2261. /*        Permission applicability                                 */
  2262. /*        Hi-density/notification/catalog requirements             */
  2263. /*        Royalties                                                */
  2264. /*        Dates                                                    */
  2265. /*        Additional requirements                                  */
  2266. /*-----------------------------------------------------------------*/
  2267. EXTERN   long   vidDistFlagMasks [ vivDistChanCount ]
  2268. #ifdef VENDINFO_MAIN
  2269.    = {
  2270.    /* BBS */
  2271.       vibDistProhib +
  2272.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose + vibDistAnyUG +
  2273.          vibDistAnyNonProfUG + vibDistAnyRecFromAuth +
  2274.       vibDistNoIfAnyCharge + vibDistNoIfPerYear + vibDistNoIfPerProg +
  2275.          vibDistNoIfPer360K + vibDistNoIfBbsMailDisk +
  2276.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2277.       vibDistNotifVersRequired +
  2278.       0 +
  2279.       vibDistHasContactDate + vibDistHasProhibDate +
  2280.       vibDistHasAddlReqs + vibDistSeeText,
  2281.  
  2282.    /* BBS file-distribution net */
  2283.       vibDistProhib +
  2284.       vibDistAny + vibDistAnyRecFromAuth +
  2285.       vibDistNoIfCdrom + vibDistNoIfOtherMass +
  2286.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2287.       vibDistNotifVersRequired +
  2288.       0 +
  2289.       vibDistHasContactDate + vibDistHasProhibDate +
  2290.       vibDistHasAddlReqs + vibDistSeeText,
  2291.  
  2292.    /* mail-order disk vendor */
  2293.       vibDistProhib +
  2294.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose + vibDistAnyUG +
  2295.          vibDistAnyNonProfUG + vibDistAnyRecFromAuth +
  2296.       vibDistNoIfPerProg + vibDistNoIfPer360K +
  2297.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2298.       vibDistHiDensRequired + vibDistNotifVersRequired +
  2299.          vibDistSampleRequired + vibDistSampleRequested +
  2300.       vibDistRoyalty +
  2301.       vibDistHasContactDate + vibDistHasProhibDate +
  2302.       vibDistHasAddlReqs + vibDistSeeText,
  2303.  
  2304.                  /*  Distribution Flag Masks (cont.)  */
  2305.  
  2306.    /* CD-ROM other than BBS file-distribution network */
  2307.       vibDistProhib +
  2308.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
  2309.          vibDistAnyRecFromAuth +
  2310.       vibDistNoIfPerCdrom + vibDistNoIfPerProg + vibDistNoIfPer360K +
  2311.          vibDistNoIfTargetBbs + vibDistNoIfTargetDistrib +
  2312.          vibDistNoIfTargetUser +
  2313.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2314.       vibDistNotifVersRequired + vibDistSampleRequired +
  2315.          vibDistSampleRequested +
  2316.       vibDistRoyalty +
  2317.       vibDistHasContactDate + vibDistHasProhibDate +
  2318.       vibDistHasAddlReqs + vibDistSeeText,
  2319.  
  2320.    /* one-site rack vendor */
  2321.       vibDistProhib +
  2322.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose + vibDistAnyUG +
  2323.          vibDistAnyNonProfUG + vibDistAnyRecFromAuth +
  2324.       vibDistNoIfPerProg + vibDistNoIfPer360K +
  2325.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2326.       vibDistHiDensRequired + vibDistNotifVersRequired +
  2327.          vibDistSampleRequired + vibDistSampleRequested +
  2328.       vibDistRoyalty +
  2329.       vibDistHasContactDate + vibDistHasProhibDate +
  2330.       vibDistHasAddlReqs + vibDistSeeText,
  2331.  
  2332.    /* rack distributor */
  2333.       vibDistProhib +
  2334.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
  2335.          vibDistAnyRecFromAuth +
  2336.       vibDistNoIfPerProg + vibDistNoIfPer360K +
  2337.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2338.       vibDistHiDensRequired + vibDistNotifVersRequired +
  2339.          vibDistSampleRequired + vibDistSampleRequested +
  2340.       vibDistRoyalty +
  2341.       vibDistHasContactDate + vibDistHasProhibDate +
  2342.       vibDistHasAddlReqs + vibDistSeeText,
  2343.  
  2344.    /* book enclosure */
  2345.       vibDistProhib +
  2346.       vibDistAny + vibDistAnyRecFromAuth +
  2347.       0 +
  2348.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2349.       vibDistHiDensRequired + vibDistNotifVersRequired +
  2350.          vibDistSampleRequired + vibDistSampleRequested +
  2351.       vibDistRoyalty +
  2352.       vibDistHasContactDate + vibDistHasProhibDate +
  2353.       vibDistHasAddlReqs + vibDistSeeText,
  2354.  
  2355.    /* subscription service */
  2356.       vibDistProhib +
  2357.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
  2358.          vibDistAnyRecFromAuth +
  2359.       vibDistNoIfPerYear + vibDistNoIfPerProg + vibDistNoIfPer360K +
  2360.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2361.       vibDistHiDensRequired + vibDistNotifVersRequired +
  2362.          vibDistSampleRequired + vibDistSampleRequested +
  2363.       vibDistRoyalty +
  2364.       vibDistHasContactDate + vibDistHasProhibDate +
  2365.       vibDistHasAddlReqs + vibDistSeeText,
  2366.  
  2367.                  /*  Distribution Flag Masks (cont.)  */
  2368.  
  2369.    /* magazine cover disk */
  2370.       vibDistProhib +
  2371.       vibDistAny + vibDistAnyRecFromAuth +
  2372.       0 +
  2373.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2374.       vibDistHiDensRequired + vibDistNotifVersRequired +
  2375.          vibDistSampleRequired + vibDistSampleRequested +
  2376.       vibDistRoyalty +
  2377.       vibDistHasContactDate + vibDistHasProhibDate +
  2378.       vibDistHasAddlReqs + vibDistSeeText,
  2379.  
  2380.    /* broadcast by TV/cable/satellite/etc. */
  2381.       vibDistProhib +
  2382.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
  2383.          vibDistAnyRecFromAuth +
  2384.       vibDistNoIfPerProg + vibDistNoIfPer360K +
  2385.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2386.       vibDistNotifVersRequired +
  2387.       vibDistRoyalty +
  2388.       vibDistHasContactDate + vibDistHasProhibDate +
  2389.       vibDistHasAddlReqs + vibDistSeeText,
  2390.  
  2391.    /* 1-900 phone-type service */
  2392.       vibDistProhib +
  2393.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
  2394.          vibDistAnyRecFromAuth +
  2395.       vibDistNoIfPerProg + vibDistNoIfPer360K +
  2396.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2397.       vibDistNotifVersRequired +
  2398.       vibDistRoyalty +
  2399.       vibDistHasContactDate + vibDistHasProhibDate +
  2400.       vibDistHasAddlReqs + vibDistSeeText,
  2401.  
  2402.    /* installation on user's machine by paid consultant, VAR, etc. */
  2403.       vibDistProhib +
  2404.       vibDistAny + vibDistAnyDisclose + vibDistAnyConsult +
  2405.          vibDistAnyHardware + vibDistAnyRecFromAuth +
  2406.       0 +
  2407.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2408.       vibDistNotifVersRequired +
  2409.       vibDistRoyalty +
  2410.       vibDistHasContactDate + vibDistHasProhibDate +
  2411.       vibDistHasAddlReqs + vibDistSeeText,
  2412.  
  2413.    /* distribution by substantially different method */
  2414.       vibDistProhib +
  2415.       vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
  2416.          vibDistAnyRecFromAuth +
  2417.       0 +
  2418.       vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
  2419.       vibDistNotifVersRequired +
  2420.          vibDistSampleRequired + vibDistSampleRequested +
  2421.       vibDistRoyalty +
  2422.       vibDistHasContactDate + vibDistHasProhibDate +
  2423.       vibDistHasAddlReqs + vibDistSeeText
  2424.    }
  2425. #endif
  2426.    ;
  2427. #endif   /* __VENDINFO_H */
  2428.  
  2429.               /****************************************/
  2430.               /*  Standards Applicable to Programs    */
  2431.               /*  that Create or Use VENDINFO Records */
  2432.               /****************************************/
  2433.  
  2434. /*------------------------------------------- tools standards -----*/
  2435. /*  This standard is mainly about the file format for VENDINFO.DIZ */
  2436. /*  files, with minor additional record-format information.  It is */
  2437. /*  also important, though, to establish some common understand-   */
  2438. /*  ings about tools.  In some cases, these understandings serve   */
  2439. /*  to clarify the division of responsibility between tools that   */
  2440. /*  create VENDINFO records and tools that use them.  In other     */
  2441. /*  cases, these tools standards specify tools behavior necessary  */
  2442. /*  to support the mutual understandings of the authors and the    */
  2443. /*  distributors who use the VENDINFO system.                      */
  2444. /*                                                                 */
  2445. /*  Software developers who create tools that use VENDINFO records */
  2446. /*  can automatically satisfy most of these requirements by using  */
  2447. /*  the standard VENDINFO software developer's library.            */
  2448. /*                                                                 */
  2449. /*  This section is still under development, and will probably     */
  2450. /*  be expanded in the final version.                              */
  2451. /*-----------------------------------------------------------------*/
  2452.  
  2453. /*------------------------------------------------ null bytes -----*/
  2454. /*  Tools that create VENDINFO records are required to place a     */
  2455. /*  null value (0x00) in all unused bytes of the compressed        */
  2456. /*  VENDINFO data record, in order to maximize the degree to which */
  2457. /*  the record can be compressed.  This means, for example, that a */
  2458. /*  fixed-length string field would have a null byte indicating    */
  2459. /*  the termination of the string, and additional null bytes as    */
  2460. /*  necessary to fill out the string to its full, fixed length.    */
  2461. /*  This also means that the default value for unused fields will  */
  2462. /*  be all zeroes.                                                 */
  2463. /*-----------------------------------------------------------------*/
  2464.  
  2465. /*-------------------------------------------- implied values -----*/
  2466. /*  Wherever a value in one field implies a particular value for   */
  2467. /*  another field, it is the responsibility of the creation tool,  */
  2468. /*  and not the processing tool, to fill the second field with     */
  2469. /*  that value.  For example, if the value of the vibDistAny bit   */
  2470. /*  is TRUE for a given distribution channel, the editor will also */
  2471. /*  set to TRUE the values of the vibDistAnyAsp bit, the           */
  2472. /*  vibDistAnyDisclose bit, etc., since these values are implied.  */
  2473. /*-----------------------------------------------------------------*/
  2474.  
  2475. /*-------------------------------------- equal values if same -----*/
  2476. /*  Whenever there is a provision for multiple sets of similar     */
  2477. /*  values (minimum/maximum, minimum/full, required/recommended,   */
  2478. /*  etc.), all values will be filled in in both sets, even if the  */
  2479. /*  second set can be seen to be inapplicable.  For example, if    */
  2480. /*  there is only one registration price for a shareware product,  */
  2481. /*  both the minimum and maximum viRegPkg structures will be       */
  2482. /*  filled in, using identical values.                             */
  2483. /*-----------------------------------------------------------------*/
  2484.  
  2485. /*--------------------------------------------- known version -----*/
  2486. /*  The VENDINFO file structure may change from version to         */
  2487. /*  version.  Any processing tool is required to check the version */
  2488. /*  field, and to make no attempt to use the record if the version */
  2489. /*  is not "known" to the processor.  An error message and a       */
  2490. /*  distinct return code are recommended in most cases.            */
  2491. /*-----------------------------------------------------------------*/
  2492.  
  2493.           /*  Standards Applicable to Programs (cont.) */
  2494.  
  2495. /*-------------------------- testing for allowed distribution -----*/
  2496. /*  Any program which evaluates the author's distribution policy   */
  2497. /*  for a particular channel is required to employ the following   */
  2498. /*  algorithm:                                                     */
  2499. /*                                                                 */
  2500. /*     1. Apply the channel's Distribution Flag Mask to that       */
  2501. /*        channel's vidDistFlags field, eliminating from all       */
  2502. /*        consideration those bits that do not apply to the        */
  2503. /*        channel in question.  (Also, editors that create the    */
  2504. /*        record are required to apply this mask, insuring that    */
  2505. /*        all irrelevant bits are set FALSE.)                      */
  2506. /*                                                                 */
  2507. /*     2. Determine whether or not the distributor "qualifies",    */
  2508. /*        based upon the distributor's explicit statements about   */
  2509. /*        the proposed distribution.  No assumptions are allowed   */
  2510. /*        here.  For example, in order to qualify via the          */
  2511. /*        vibDistAnyDisclose approach, the distributor must        */
  2512. /*        separately specify satisfaction of each of the defining  */
  2513. /*        conditions (e.g., claims no ownership of product).       */
  2514. /*                                                                 */
  2515. /*     3. If the distributor "qualifies", test all the disqualify- */
  2516. /*        ing conditions specified by the author against the       */
  2517. /*        distributor's explicit statements about the proposed     */
  2518. /*        distribution.  No assumptions are allowed here.  For     */
  2519. /*        example, if the author has specified a limit on          */
  2520. /*        subscription fees (vivDistNoIfPerYear), the distributor  */
  2521. /*        can satisfy this requirement only by specifying the      */
  2522. /*        amount (even if zero) that s/he actually charges per     */
  2523. /*        year.                                                    */
  2524. /*                                                                 */
  2525. /*     4. If the proposed distribution still meets the             */
  2526. /*        "qualifying" requirements, determine whether or not      */
  2527. /*        written permission is still required; if the proposed    */
  2528. /*        distribution lies outside the qualifying requirements,   */
  2529. /*        determine whether or not the distribution is still       */
  2530. /*        possible given written permission.  If either of these   */
  2531. /*        conditions applies and the distributor has not           */
  2532. /*        indicated that s/he has written permission, report the   */
  2533. /*        requirement for written permission.                      */
  2534. /*                                                                 */
  2535. /*     5. In addition to any unsatisfied conditions reported as a  */
  2536. /*        result of the preceding steps, report any additional     */
  2537. /*        author conditions (e.g., notification required) that     */
  2538. /*        cannot be seen to be inapplicable based on the explicit  */
  2539. /*        statements by the distributor.                           */
  2540. /*-----------------------------------------------------------------*/
  2541.  
  2542. /*------------------------------- verification of information -----*/
  2543. /*  Any tool that creates VENDINFO records is required to provide  */
  2544. /*  an active verification mechanism which gives feedback to the   */
  2545. /*  author about the choices selected, and provides an opportunity */
  2546. /*  to notice unintended choices or consequences.  This feature is */
  2547. /*  intended to increase the confidence with which a distributor   */
  2548. /*  can use the resulting VENDINFO information, and to reduce      */
  2549. /*  errors by authors.  This mechanism may take various forms:     */
  2550. /*  verification step in an interactive editor, a batch procedure  */
  2551. /*  that prints out the file contents and is well documented and   */
  2552. /*  recommended so the author is aware of the need to perform it,  */
  2553. /*  etc.                                                           */
  2554. /*-----------------------------------------------------------------*/
  2555.  
  2556.           /*  Standards Applicable to Programs (cont.) */
  2557.  
  2558. /*---------------------------------- authentication of record -----*/
  2559. /*  Any tool that processes VENDINFO records is required to test   */
  2560. /*  the records for correct CRC values, authenticity, etc., and to */
  2561. /*  report failures in a detectable way, unless the user has       */
  2562. /*  explicitly chosen to suppress such testing.                    */
  2563. /*-----------------------------------------------------------------*/
  2564.  
  2565. /*------------------------------------- other tools standards -----*/
  2566. /*  Standards for tools are also mentioned here and there through- */
  2567. /*  out the file-format portion of this standard.                  */
  2568. /*-----------------------------------------------------------------*/
  2569.