home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-08-31 | 150.0 KB | 2,556 lines |
- /*=================================================================*/
- /* VENDINFO File-Format and Tools Standard */
- /* Alpha Test Version 0.90, 8/31/93 */
- /* */
- /* Copyright 1993, Rams' Island Software, Parker CO 80134-5904 */
- /*=================================================================*/
-
- /*---------------------------------------- about the document -----*/
- /* This "document" will probably look a bit strange to most eyes. */
- /* That's because it's doing double duty. It serves as a */
- /* human-readable standard for the file formats and tools */
- /* behavior associated with the VENDINFO system. It also serves */
- /* as a C and C++ "include file", providing the necessary record */
- /* definitions and other information in compiler-readable form. */
- /* */
- /* This unusual presentation is not being done out of laziness */
- /* (in fact, you'll notice that a fair amount of work has been */
- /* done to make the document serve both purposes well). Rather, */
- /* it is being done in the interest of accuracy and error */
- /* minimization. Because the compiler-readable portion of the */
- /* standard will have been verified by constructing actual tools */
- /* to create and use the records, the document should be rather */
- /* unambiguous, and free from at least some of the sorts of */
- /* errors that might have resulted from separating it into two */
- /* separate (human and compiler) parts and attempting to keep */
- /* them synchronized. */
- /*-----------------------------------------------------------------*/
-
- /*------------------------------------------- public standard -----*/
- /* This VENDINFO standard is a copyrighted work. That has been */
- /* done to insure that the development of the standard is well */
- /* controlled, and that multiple variations are prevented. Many */
- /* standards in the computer industry have been damaged or */
- /* delayed by the existence of multiple, competing versions. */
- /* It is in the interest of the entire industry that we are */
- /* attempting to avoid such a development here. This standard */
- /* has been developed "in public", with opportunities for public */
- /* comment on its general ideas and specific content. That will */
- /* continue to be the case. */
- /* */
- /* This standard is made available for free use by all parties, */
- /* including the development of tools other than -- or even in */
- /* competition with -- those of the developers of the standard. */
- /* This standard may also be distributed freely, provided it is */
- /* in its original form, not altered in any way. */
- /*-----------------------------------------------------------------*/
-
- /*------------------------------------- contacting the author -----*/
- /* The author can be reached in any of the following ways. */
- /* */
- /* By mail: By electronic means: */
- /* H. Rudy Ramsey CompuServe: 76244,324 */
- /* Rams' Island Software FidoNet: 1:104/333 */
- /* 7644 E. Lakecliff Way RIME: RAMSISLE (1235) */
- /* Parker, CO 80134-5904 (USA) Internet: */
- /* 76244.324@compuserve.com */
- /* By phone: 303-841-2848 BBS: 303-841-6269 */
- /*-----------------------------------------------------------------*/
-
- /*****************************/
- /* Background */
- /*****************************/
-
- /*------------------------------------------------ background -----*/
- /* The VENDINFO system allows the author/publisher of a software */
- /* package to communicate a great deal of information to the */
- /* prospective distributors of that package. The record */
- /* containing this information is included with the distributed */
- /* package. The record is highly structured, compressed, and */
- /* useable via automated tools for convenience and reliability. */
- /* */
- /* It is expected that the VENDINFO.DIZ record will replace the */
- /* VENDOR.DOC, SYSOP.DOC, LICENSE.DOC, WARRANTY.DOC, */
- /* SITELICE.DOC, FILE_ID.DIZ, and DESC.SDI commonly found in */
- /* shareware and public-domain software packages. It may */
- /* eventually replace READ-ME.DOC and similar files, as well. */
- /* */
- /* The VENDINFO system includes this file-format standard, which */
- /* defines the structure of the main VENDINFO.DIZ record and a */
- /* few minor related records, and it includes a number of tools */
- /* for creating and using the record. It includes a centralized */
- /* product registry, which is a repository for VENDINFO records */
- /* and related material about currently available products. It */
- /* also includes a software developer's library, for use in the */
- /* construction of BBS software, vendor database software, etc. */
- /* */
- /* The VENDINFO system includes the following tools: */
- /* VendEdit -- Editor used by software author/publisher to */
- /* produce VENDINFO record and, if desired, to */
- /* "brand" executables with product information. */
- /* VendPrcs -- Processor used by distributor to extract, and to */
- /* make decisions based on, VENDINFO information. */
- /* VendView -- VENDINFO record viewer for end users. */
- /* */
- /* For more detailed information about the overall VENDINFO */
- /* concept, see the publicly distributed Concept Paper, which is */
- /* probably available from the same source from which you */
- /* obtained this document, or contact Rams' Island Software. */
- /*-----------------------------------------------------------------*/
-
- /*----------------------------------- a comment on complexity -----*/
- /* A common initial reaction to the VENDINFO file format is that */
- /* it's rather complex. This is true. There is a great deal of */
- /* information to be conveyed from authors to distributors and */
- /* to end users, and to pretend otherwise would be to settle for */
- /* much less than the actually achievable benefits of VENDINFO. */
- /* The key is not to strive for an artificially simple VENDINFO */
- /* record, but to surround that record with tools that make it */
- /* easy to use. Those who have seen the early version of the */
- /* toolset appear to be in unanimous agreement that this has been */
- /* accomplished. */
- /*-----------------------------------------------------------------*/
-
- /*-- please ignore the next few lines; they're for the compiler ---*/
- #if !defined (__VENDINFO_H) /* excludes entire file if defined */
- #define __VENDINFO_H
- #define VENDINFO_VERSION "0.90"
- #define VENDINFO_VERSION_DATE "8/31/93"
- #ifdef VENDINFO_MAIN
- #define EXTERN
- #else
- #define EXTERN extern
- #endif
-
- /*****************************/
- /* The Plan */
- /*****************************/
-
- /*----------------------------------------- development plans -----*/
- /* This (alpha-test version) file-format description is being */
- /* released now, slightly in advance of the software developer's */
- /* library and the toolset, in order to allow an evaluation of */
- /* structure and information content by those who may be */
- /* especially interested. It will be a rare software developer */
- /* who needs to access the information in the VENDINFO structure */
- /* directly via the detailed mechanisms described in this */
- /* standard. Through a combination of functions and preprocessor */
- /* macros, the software developer's library will provide */
- /* considerably simplified access. */
- /* */
- /* We are working now to complete the first version of the */
- /* software developer's library, the VendEdit editor, and the */
- /* VendPrcs processor. When these have been completed, they will */
- /* be made available to selected persons for beta test, and that */
- /* testing activity will also constitute a beta test of the file */
- /* format itself. When beta testing is complete, the final */
- /* version 1.00 of both the file format and the toolset will be */
- /* released. Beta testing should start by early September 1993. */
- /* */
- /* As soon as those tools have been released, we will then turn */
- /* our attention to the remaining tools and services, including */
- /* the (free) VendView viewer for end users, and VendPrcs Plus */
- /* enhanced processor for distributors, and the Product Registry. */
- /*-----------------------------------------------------------------*/
-
- /***************************************/
- /* Conventions Used in This Standard */
- /***************************************/
-
- /*---------------------------------------- naming conventions -----*/
- /* The naming conventions used in this standard and in the */
- /* software developer's library are intended to insure that the */
- /* programmer can tell the nature of an identifier (variable */
- /* name, function, bit mask, etc.) from its name, and can also */
- /* easily recognize those identifiers that are part of VENDINFO, */
- /* to avoid confusing them with others that are part of his/her */
- /* own program. Lexical conventions for names are: */
- /* vibName -- bit mask (where "Name" can be anything). These */
- /* should generally be used by ANDing them with the */
- /* appropriate variable. */
- /* vivName -- preprocessor value other than bit mask. These */
- /* should generally be used in equality tests (e.g., */
- /* "=="), or as array indexes. */
- /* vifName -- function. */
- /* vidName -- data (generally, a variable in the VENDINFO */
- /* structure). */
- /* vimName -- preprocessor macro (used in library, not in */
- /* file-format standard per se) */
- /* viName -- data type used within main record (may be */
- /* structure or special use of ordinary type). */
- /*-----------------------------------------------------------------*/
-
- /*----------------------------------------- "shorthand" names -----*/
- /* Each field of the VENDINFO record has associated with it both */
- /* a "shorthand" name and a data type. The shorthand name is */
- /* intended for use in testing or extracting field values by */
- /* means of the VendPrcs processor or other such tools. For */
- /* example, one might extract the short product name using the */
- /* DOS command: */
- /* vendprcs VENDINFO.DIZ -xpn */
- /* where "x" represents extraction, and "pn" is the shorthand */
- /* string that represents the product name field. */
- /* */
- /* The shorthand strings used to name the various fields are a */
- /* part of this standard. Wherever a field is defined in the */
- /* later sections of this standard, a comment will contain the */
- /* shorthand name associated with the field, as well as an */
- /* indication of its data type. For example, the product name */
- /* field definition: */
- /* char vidProdName[16]; ** pn s ** */
- /* contains a comment actually shown as: */
- /* pn s */
- /* This comment indicates that the shorthand name of this field */
- /* is "pn", and that it is of type "s". Types are: */
- /* b -- boolean */
- /* d -- date */
- /* n -- number (integer) */
- /* s -- string */
- /* t -- text block (accessed as multiple lines of text, */
- /* each of which "behaves" as a string). */
- /* Where internal structures are used, a question mark indicates */
- /* a placeholder character. For example, in the author section, */
- /* viElectAddr elec; ** ae? ** */
- /* the author electronic addresses will have shorthand names */
- /* consisting of "ae", followed by an additional character found */
- /* in the documentation of the viElectAddr structure. */
- /*-----------------------------------------------------------------*/
-
- /**************************************/
- /* VENDINFO Record and File Types */
- /**************************************/
-
- /*----------------------------------------- VENDINFO.DIZ file -----*/
- /* The main data object used in the VENDINFO system is the */
- /* VENDINFO.DIZ file. This file contains a human-readable text */
- /* section in the front (terminated by 0x1A, also known as ^Z). */
- /* This text section contains a brief outline of major */
- /* information about the product, followed by paragraphs devoted */
- /* to information about warranty, trial use and distribution */
- /* licenses, a "packing list" of files in the package, etc. */
- /* Additional information can be provided by the author. */
- /* */
- /* Following that section is a compressed data record containing */
- /* comprehensive information about the product and version, */
- /* author, ordering, technical support, prices and benefits, */
- /* and distribution policies. */
- /*-----------------------------------------------------------------*/
-
- /*------------------------------- secondary VENDINFO.DIZ file -----*/
- /* In multipart products (i.e., products packaged in more than */
- /* one compressed file), only the first package contains a */
- /* complete VENDINFO.DIZ file. Subsequent parts contain a */
- /* complete data record (to allow independent automatic */
- /* processing of each package), but highly abbreviated human- */
- /* readable text. */
- /*-----------------------------------------------------------------*/
-
- /*---------------------------------- brief executable records -----*/
- /* The VendEdit editor will have the capability of appending, to */
- /* executable programs, a brief VENDINFO record. This record */
- /* will contain minimal product/version/author information and */
- /* either an abbreviated or a comprehensive distribution policy */
- /* section, all highly compressed for efficiency. This would */
- /* allow, for example, automated detection of retail software, */
- /* registered versions, etc., if they showed up in BBS uploads, */
- /* CD-ROMs, and so on. */
- /* */
- /* The VendPrcs processor will automatically check the */
- /* executables in a package for appropriate distribution */
- /* policies, if desired. */
- /*-----------------------------------------------------------------*/
-
- /* VENDINFO Record and File Types (cont.) */
-
- /*--------------------------------------- intermediate record -----*/
- /* The VendEdit editor, and any similar program for creating */
- /* VENDINFO records, will maintain information about the product */
- /* in the form of an "intermediate" record, rather than in the */
- /* form of an actual VENDINFO.DIZ record. This is necessary */
- /* for several reasons: */
- /* 1. The editor needs more information than is actually in */
- /* the VENDINFO.DIZ record itself. */
- /* 2, Multiple VENDINFO files may be produced from a single */
- /* intermediate record. */
- /* 3. Portions of the VENDINFO.DIZ record are produced */
- /* automatically from other portions of the record. */
- /* 4. It helps discourage hacking of VENDINFO.DIZ records if */
- /* the (readily available) editor that produces them cannot */
- /* be used to modify them. */
- /* The exact content of an intermediate record would vary from */
- /* editor to editor, and is beyond the scope of this standard. */
- /* As an aid to developers, however, provision has been made in */
- /* the file-format standard for marking a particular VENDINFO */
- /* record as of "intermediate" type. This would allow an editor */
- /* to utilize the standard uncompressed form of the VENDINFO */
- /* record as the first section of its intermediate record. */
- /*-----------------------------------------------------------------*/
-
- /******************************************/
- /* Structure of the VENDINFO.DIZ Record */
- /******************************************/
-
- /*----------------------- overall VENDINFO.DIZ file structure -----*/
- /* The VENDINFO.DIZ file has the following components: */
- /* */
- /* 1. A readable text portion of indeterminate length, */
- /* terminated by a 0x1A (^Z) character. This portion is */
- /* intended primarily for human consumption, but some */
- /* automated uses can be made of it. For that reason, and */
- /* because of its legal significance in conveying trial-use */
- /* and distribution rights, some properties of its internal */
- /* structure are covered by this standard. */
- /* */
- /* 2. A compressed data record, whose structure and content */
- /* are defined in this standard. The compressed form of */
- /* this record is exactly that which would be produced if */
- /* it were a standalone ZIP compressed file containing one */
- /* single file ("VENDINFO.DTA") compressed using PKZIP 1.10 */
- /* algorithms as implemented in TurboPower's Asynch for C++ */
- /* library. */
- /*-----------------------------------------------------------------*/
-
- /*---------- internal structure of the compressed data record -----*/
- /* When uncompressed, the VENDINFO data record consists of two */
- /* parts: */
- /* */
- /* 1. A fixed length record of type viVendinfoRecord, defined */
- /* below. */
- /* */
- /* 2. Zero or more "record extensions", which are optional */
- /* additional records within the compression envelope, also */
- /* defined below. */
- /*-----------------------------------------------------------------*/
-
- /*---------------------------- a comment on space utilization -----*/
- /* The VENDINFO record contains many optional fields for which */
- /* fixed-length portions of the record have been allocated. A */
- /* common initial reaction is that this is wasteful of space. */
- /* Please note, however, that fixed-length fields are easier to */
- /* use, and that any wasted space is actually reclaimed by the */
- /* compression algorithm. Tools that create VENDINFO records are */
- /* required to place zero (null) characters in all unused bytes. */
- /* As a result, the compression algorithm will be MORE effective */
- /* at avoiding waste than a variable-length record could be. */
- /*-----------------------------------------------------------------*/
-
- /*************************************************************/
- /* Human-Readable Text Portion of the VENDINFO.DIZ Record */
- /*************************************************************/
-
- /*------------------------- overall structure of text portion -----*/
- /* The text portion of the VENDINFO.DIZ record is intended to be */
- /* read by humans, though it also contains structure and format */
- /* constraints that allow limited use of its content by automated */
- /* tools, which operate by searching for, and perhaps parsing, */
- /* specified text. The text portion contains a VENDINFO */
- /* information header, which has an exact specified text, with */
- /* minor possible variations, followed by a generation line */
- /* indicating how and when this particular VENDINFO record was */
- /* created. Then a series of sections appear, some created */
- /* automatically and some by user input, some mandatory and some */
- /* optional. Each is preceded by a section label. The details */
- /* of all these sections are presented below. */
- /*-----------------------------------------------------------------*/
-
- /*------------------------------- VENDINFO information header -----*/
- /* It will frequently happen that a user or distributor will */
- /* encounter the VENDINFO system for the first time by actually */
- /* receiving a package with a VENDINFO.DIZ record in it. It is */
- /* important that the human-readable portion of the record begin */
- /* with sufficient information about VENDINFO, and about */
- /* obtaining the VENDINFO toolset, that the recipient is able to */
- /* make full, effective use of the system. Accordingly, each */
- /* VENDINFO record will begin with the exact text shown below, */
- /* except that a developer of an alternative VENDINFO record */
- /* creation tool may add an additional paragraph at the end, */
- /* without removing any of the indicated text, and consistent in */
- /* style, format, and layout with the information already there. */
- /* This paragraph will allow the developer to advertise the */
- /* availability of his own tools. */
- /*-----------------------------------------------------------------**
- ┌────────────────────────────────────────────────────────────────────┐
- │ VENDINFO Software Product Distribution Information Record │
- │ │
- │ This record is a means of conveying information about a software │
- │ product from the author to distributors and users. It contains a │
- │ normal, "human-readable" section (you're reading it now), followed │
- │ by a compressed data record. The data record contains a great │
- │ deal of information in a form useable by automated tools. This │
- │ allows BBSes, disk vendors, etc. to automatically test for │
- │ permission to distribute, and to automatically extract product │
- │ information for use in BBS files databases, vendor catalogs, etc. │
- │ │
- │ The VENDINFO file standard is published and freely useable. │
- │ │
- │ The VENDINFO toolset includes a free end-user viewer, processing │
- │ tools for use by distributors (BBSes, shareware disk vendors, │
- │ etc.), and the editor used by author/publishers to produce these │
- │ records. These tools are either free or low cost shareware. │
- │ The toolset can be obtained from many sources, including the │
- │ originators of VENDINFO: │
- │ │
- │ Rams' Island Software Voice: 303-841-2848 CompuServe: 76244,324 │
- │ 7644 E. Lakecliff Way BBS: 303-841-6269 FidoNet: 1:104/333 │
- │ Parker, CO 80134-5904 USA RIME: RAMSISLE │
- └────────────────────────────────────────────────────────────────────┘
-
- ** Human-Readable Text Portion (cont.) **
-
- **---------------------------------- VENDINFO generation line -----*/
- /* The next line following the header box, just above, will */
- /* indicate the version number of the VENDINFO standard used to */
- /* construct the record, the tool used to create it (and its */
- /* version number), and the date of creation. The format must be */
- /* exactly as shown, except for substitution of version numbers, */
- /* tool name (one word), and creation date. */
- /*-----------------------------------------------------------------**
- VENDINFO standard V1.00, produced by VendEdit V1.10, 12-Jun-93
-
- **--------------------------- secondary record identification -----*/
- /* In "secondary" VENDINFO files (in multipart products, the */
- /* VENDINFO.DIZ files in packages after the first, are secondary */
- /* files), some portions of the human-readable section are */
- /* omitted. To warn the reader when this occurs, the following */
- /* text is added. */
- /*-----------------------------------------------------------------**
- ┌────────────────────────────────────────────────────────────────────┐
- │ Because this is not the primary package of this multi-package │
- │ product, the readable-text portion of this VENDINFO record is │
- │ somewhat abbreviated. For complete information, see the VENDINFO │
- │ file in the first package listed below under "Required Packages". │
- └────────────────────────────────────────────────────────────────────┘
-
- **------------------------------ standards for section labels -----*/
- /* Section labels must be displayed exactly as shown in the */
- /* respective sections below, including the five equal-sign ('=') */
- /* characters and a space before the label, and a space and at */
- /* least five equal-sign characters after the label. The */
- /* spelling and capitalization of the labels must be exactly as */
- /* shown. This will allow various automated tools to find the */
- /* relevant sections. If additional sections are desired using */
- /* labels other than those shown here, those sections should */
- /* appear in the location indicated for "other information", and */
- /* their labels should be in the same format, but using the */
- /* minus ('-') character in place of the equal-sign character. */
- /* Each section label is preceded by two blank lines. */
- /*-----------------------------------------------------------------*/
-
- /* Human-Readable Text Portion (cont.) */
-
- /*------------------------------- product information section -----*/
- /* The "Product Information" section should contain enough basic */
- /* information about the product to allow the end-user or */
- /* distributor to determine the program's relevance, and to allow */
- /* the end-user to order the product or obtain technical support */
- /* for it. The information content of this section is not rigid. */
- /* An example is shown below. In a "secondary" VENDINFO.DIZ */
- /* file, this section might be somewhat briefer. */
- /*-----------------------------------------------------------------**
- ===== Product Information ============================================
-
- Product: InContext Work Environment Manager
- Version: 1.10
- Version Date: 03/19/93
- Required Packages: INCX110D INCX110P
- This package is: INCX110D
- Product Description: <description appears here>
-
- Minimal Required Configuration
- CPU: 8086 (IBM PC) or compatible
- Operating System: DOS 3.1 or later
- Other requirements: Hard disk
-
- To Purchase Product
- Author/Publisher:
- Rams' Island Software
- 7644 E. Lakecliff Way
- Parker, CO 80134-5904
- USA
- Order Phone: 303-841-2848
- Electronic addresses:
- CompuServe: 76244,324
- FidoNet: 1:104/333
- Internet: 76244.324@compuserve.com
- RIME: RAMSISLE
-
- For Technical Support
- Address:
- Rams' Island Software
- 7644 E. Lakecliff Way
- Parker, CO 80134-5904
- USA
- Support Phone: 303-841-2848
- Support BBS: Rams' Island BBS, 303-841-6269
- Electronic addresses:
- CompuServe: 76244,324
- FidoNet: 1:104/333
- Internet: 76244.324@compuserve.com
- RIME: RAMSISLE
-
- ** Human-Readable Text Portion (cont.) **
-
- **------------------------- information for users ("read-me") -----*/
- /* This is an optional section which can be provided by the */
- /* author. This allows the author to fully replace the "READ-ME" */
- /* file with VENDINFO (though a single-line READ-ME.DOC file */
- /* pointing to VENDINFO.DIZ would probably be wise until folks */
- /* become accustomed to VENDINFO). The content of this section */
- /* is entirely up to the author, except that it should not */
- /* contain information already covered in the required sections */
- /* of VENDINFO. This section begins with the standard label */
- /* 'Information for Users ("READ-ME")'. This section is omitted */
- /* from secondary VENDINFO files. */
- /*-----------------------------------------------------------------*/
-
- /*---------------------------------------------- installation -----*/
- /* This optional section ("Installation") allows the author to */
- /* include installation instructions for the product. This */
- /* section is omitted from secondary VENDINFO files. */
- /*-----------------------------------------------------------------*/
-
- /*----------------------------------------- other information -----*/
- /* This optional section ("Other Information", or other sections */
- /* named by the author using "-" section labels) allows the */
- /* author to include any other desired information, such as */
- /* advertisements for other products. These sections are omitted */
- /* from secondary VENDINFO files. */
- /*-----------------------------------------------------------------*/
-
- /*-------------------------------------- packing list section -----*/
- /* This section ("Packing List") must be automatically generated */
- /* by any VENDINFO-record creation tool. It lists the files in */
- /* the original package as created by the author, including file */
- /* names, date/time stamps, and CRCs. This section must conform */
- /* EXACTLY to the format shown by example below, in order to */
- /* allow automatic detection of changes to the package. */
- /*-----------------------------------------------------------------**
-
- ===== Packing List ===================================================
-
- As released by the author or publisher, this package contained the
- following files in addition to this VENDINFO.DIZ:
-
- Filename Size Date Time CRC32
- register.doc 16396 31-Jan-1993 01:10a 481DB182
- whatsnew.doc 7509 31-Jan-1993 01:10a 4A1DD6BC
- install.exe 68291 31-Jan-1993 01:10a 9DD141C9
- lha.exe 34283 20-Jul-1991 02:13a 2C68A172
- inc-docs.lzh 130623 31-Jan-1993 01:10a 7138B4FC
-
- **-------------------------------------------------- warranty -----*/
- /* The "Warranty" section is optional, but should appear in all */
- /* VENDINFO files describing software products. (Such a section */
- /* MIGHT be omitted for, say, clip art.) The warranty should be */
- /* prepared by the author with appropriate legal study or advice. */
- /* The warranty indicates -- and in many cases limits -- the */
- /* liability accepted by the author or publisher regarding the */
- /* product. This section is omitted from secondary VENDINFO */
- /* files. */
- /*-----------------------------------------------------------------*/
-
- /* Human-Readable Text Portion (cont.) */
-
- /*-------------------------- license for use and distribution -----*/
- /* The "License for Use and Distribution" section is optional, */
- /* but should appear in virtually all uses of VENDINFO. The */
- /* license grants limited (or unlimited, for public-domain */
- /* products) rights to use and distribute the product, under */
- /* conditions specified by the author. In the case of shareware */
- /* with distribution restrictions, this section should */
- /* "incorporate by reference" the distribution restrictions */
- /* described in the attached compressed data record. It is */
- /* undesirable to also list the distribution rights and */
- /* restrictions in text form here, since that raises the issue of */
- /* possible inconsistencies and weakens the ability of the */
- /* distributor to rely upon automated processing of the data */
- /* record for the conveyance of these distribution rights. */
- /*-----------------------------------------------------------------*/
-
- /********************************/
- /* Data Types and Structures */
- /* Used as Building Blocks in */
- /* Later Record Definitions */
- /********************************/
-
- /*--------------------------------------------------- comment -----*/
- /* Because some C compilers can't handle forward references, it */
- /* is necessary to define all special data structures here, ahead */
- /* of the place in the main record structure at which they're */
- /* used. The human reader of this file-format description may */
- /* wish to skip past this "Data Types and Structures" section on */
- /* first reading, returning to it only as the special structures */
- /* are encountered in the description of the main record. */
- /*-----------------------------------------------------------------*/
-
- /*------------------------------------------ byte, word, long -----*/
- /* A byte is an (eight-bit) data unit such as is ordinarily used */
- /* to store an ASCII character or similar unsigned information. */
- /* */
- /* A word consists of two adjacent bytes, stored low-byte-first, */
- /* as is normal on an Intel 80x86 processor. */
- /* */
- /* A long consists of two adjacent words, stored low-word-first, */
- /* as is normal on an Intel 80x86 processor. */
- /* */
- /* A character string consists of a specified number of adjacent */
- /* characters, terminated by a null (0x00). For example the */
- /* specification: */
- /* char vidProdName[16]; */
- /* indicates that vidProdName is a 16-character text string, in */
- /* which one character position will contain a null termination */
- /* character. Whenever a character string is used to hold a list */
- /* of items, the list is blank-delimited (e.g., "PCX CGM FLM"). */
- /* */
- /* For some fields, an array of strings is used. For example, */
- /* char vidCompanyAddress[5][31]; */
- /* defines vidCompanyAddress as an array consisting of five */
- /* strings (i.e., five lines of text). Each string is 31 */
- /* characters long, including the terminating null. */
- /* */
- /* The "typedef" statements below are defined as appropriate for */
- /* a standard C compiler used in an IBM PC (Intel 80x86) */
- /* environment. */
- /*-----------------------------------------------------------------*/
- typedef unsigned char byte;
- typedef unsigned int word;
-
- /* Data Types and Structures (cont.) */
-
- /*------------------------------------------------ date, time -----*/
- /* Dates are stored in the form in which file dates are stored by */
- /* MS-DOS. That is, dates are words with the following layout: */
- /* FEDCBA98 76543210 */
- /* xxxxxxx. ........ year - 1980 */
- /* .......x xxx..... month (Jan = 1) */
- /* ........ ...xxxxx day of month (1st = 1) */
- /* */
- /* To minimize confusion among various human-readable date */
- /* formats, dates which are displayed in the human-readable text */
- /* section of the VENDINFO record will be shown in the format: */
- /* 28-Jun-1993 */
- /* where the months of the year are: */
- /* Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec */
- /* */
- /* At present, no times are stored in the compressed data record. */
- /* Times shown in the human-readable text section will be */
- /* displayed using leading zeroes and AM or PM indicators, to */
- /* eliminate ambiguity: */
- /* 01:10a */
- /*-----------------------------------------------------------------*/
- typedef word Date;
-
- /*---------------------------------------------------- prices -----*/
- /* Prices (registration, shipping and handling, etc.) are all */
- /* specified in a currency identified in the vidPriceWhatCurrency */
- /* field. The prices themselves are stored as longs, but are */
- /* interpreted as hundredths of a currency unit. For example, */
- /* if the currency is US dollars, the price field would actually */
- /* contain the price in US cents. Tools are expected to perform */
- /* the appropriate division, or provide an appropriately placed */
- /* decimal point. Doing it this way eliminates all need for */
- /* floating point arithmetic in VENDINFO tools. */
- /*-----------------------------------------------------------------*/
- typedef long Price;
-
- /* Data Types and Structures (cont.) */
-
- /*=================================================================*/
- /* TextBlock used to store paragraph-type text */
- /*=================================================================*/
-
- /*----------------------------------------- typedef TextBlock -----*/
- /* The TextBlock is used to store text which may have embedded */
- /* formatting codes. From the point of view of the record */
- /* structure, a TextBlock[81] is simply an 81-byte character */
- /* string, just like char[81]. However, the TextBlock is subject */
- /* to some rules that make its use by both record-creating and */
- /* record-using software special. */
- /* */
- /* The product descriptions and other TextBlocks in the VENDINFO */
- /* record are intended to be used by software which will, in */
- /* general, provide its own formatting, and may rearrange the */
- /* text, breaking lines at different places, etc. The resulting */
- /* reformatted text may be printed in catalogs, used in BBS file */
- /* descriptions, etc. Accordingly, the text may contain no */
- /* characters outside the normal ASCII printable set, except for */
- /* a small number of special format codes interpretable by the */
- /* VENDINFO software. Thus, the user will be prevented from */
- /* entering text here that is in the high-ASCII character set */
- /* (above 0xFF) or below the normal printable set (0x20). */
- /* */
- /* Please notice in particular that a TextBlock contains no */
- /* line feeds or carriage returns (word wrapping is done at the */
- /* time of extraction from the record), and that it is terminated */
- /* by a 0x1A (^Z) character. */
- /* */
- /* Special formatting characters which must be interpreted */
- /* by software that uses the VENDINFO record include the */
- /* following: */
- /* 0x01 -- Paragraph (detected because user skipped line) */
- /* 0x02 -- Number of current package (like the "1" in */
- /* "part 1 of 4"). */
- /* 0x03 -- Number of packages in product (like the "4" in */
- /* "part 1 of 4"). */
- /* 0x1A (^Z) -- Used to terminate TextBlock */
- /*-----------------------------------------------------------------*/
- typedef char TextBlock;
-
- /* Data Types and Structures (cont.) */
-
- /*=================================================================*/
- /* Field lengths for string and TextBlock fields */
- /*=================================================================*/
- /*----- common string lengths -----------------*/
- #define vivLenAddress 31
- #define vivLenPhone 20
- #define vivLenPrefix 9
- #define vivLenMisc1 81
- #define vivLenMisc2 161
- #define vivLenMisc3 241
- #define vivLenName 41
-
- /*----- product information -------------------*/
- #define vivLenProdName 16
- #define vivLenProdExt 32
- #define vivLenProdVers 5
- #define vivLenCisList 63
- #define vivLenShotTypes 24
- #define vivLenDesc1 61
- #define vivLenDesc2 121
- #define vivLenDesc3 251
- #define vivLenDesc4 451
- #define vivLenDesc5 751
- #define vivLenDesc6 1501
-
- /*----- prices information --------------------*/
- #define vivLenCurrency 21
-
- /*----- electronic addresses ------------------*/
- #define vivLenBbsName 31
- #define vivLenBbsUserName 31
- #define vivLenAmericaOnLine 11
- #define vivLenCompuserve 13
- #define vivLenDelphi 15
- #define vivLenGenie 13
- #define vivLenProdigy 8
- #define vivLenFidonet 20
- #define vivLenInternet 81
- #define vivLenRime 13
-
- /* Data Types and Structures (cont.) */
-
- /*=================================================================*/
- /* Platform definitions (hardware/software) */
- /*=================================================================*/
-
- /*---------------------------------------- typedef viPlatform -----*/
- /* This structure holds information about a particular */
- /* hardware/software platform. The VENDINFO record contains two */
- /* of these structures, representing the minimal requirements of */
- /* the product, and the recommended configuration. */
- /* */
- /* Notice that the vidPlatRam... variables indicate QUANTITIES of */
- /* memory (standard, EMS, Extended, XMS). In addition, there are */
- /* several "Features" below (vidPlatFeatRam...) that affect the */
- /* interpretation of these quantities. */
- /* */
- /* The vidPlatDisk... variables indicate the amount of disk space */
- /* required/recommended for a minimal installation and for a full */
- /* installation of the product. For most products, these values */
- /* will be identical. */
- /*-----------------------------------------------------------------*/
- #define vivPlatCpuCount 8
- #define vivPlatOsCount 10
- typedef struct {
- long vidPlatCpu [ vivPlatCpuCount ]; /* p?c s */
- word vidPlatClockSpeedMhz; /* p?s n */
- long vidPlatOpSys [ vivPlatOsCount ]; /* p?o s */
- word vidPlatRamStdKb; /* p?rs n */
- word vidPlatRamEmsKb; /* p?rm n */
- word vidPlatRamExtKb; /* p?re n */
- word vidPlatRamXmsKb; /* p?rx n */
- word vidPlatDiskMinKb; /* p?dm n */
- word vidPlatDiskFullKb; /* p?df n */
- } viPlatform; /* 9 fields, 86 bytes */
-
- /*--------------------------------------------- platform: CPU -----*/
- /* The platform structure contains 8 words of storage dedicated */
- /* to specification of a single CPU. Most of this storage is */
- /* presently unallocated, in order to allow handling of new */
- /* machines prior to publication of the next version of this */
- /* standard. In general, exactly one bit of this 8-word area */
- /* will be set to 1. If the required/recommended platform */
- /* involves a CPU not on (even the extended) list, zero bits will */
- /* be set, and the required CPU should be indicated in the */
- /* "catch-all" text field, vidProdOtherRequirements. If no CPU */
- /* is relevant (e.g., the product is a book), zero bits will be */
- /* be set, as well. */
- /*-----------------------------------------------------------------*/
- #define vivPlatCpuIntelPC 0
- #define vivPlatCpuMacintosh 1
- #define vivPlatCpuAppleII 2
- #define vivPlatCpuUnalloc3 3
- #define vivPlatCpuUnalloc4 4
- #define vivPlatCpuUnalloc5 5
- #define vivPlatCpuUnalloc6 6
- #define vivPlatCpuUnalloc7 7
-
- /* Data Types and Structures (Platforms, cont.) */
-
- /*--------------------------- Intel 80x86 -----*/
- #define vibPlatCpu808x 0x0001
- #define vibPlatCpu80286 0x0002
- #define vibPlatCpu80386 0x0004
- #define vibPlatCpu80486 0x0008
- #define vibPlatCpuPentium 0x0010
-
- /*--------------------------- Macintosh -------*/
- #define vibPlatCpuMac68000 0x0001
- #define vibPlatCpuMac68020 0x0002
- #define vibPlatCpuMac68030 0x0004
- #define vibPlatCpuMac68040 0x0008
- #define vibPlatCpuMacPowerPC 0x0010
-
- /*--------------------------- AppleII ---------*/
- #define vibPlatCpuAp2 0x0001
- #define vibPlatCpuAp2Plus 0x0002
- #define vibPlatCpuAp2e 0x0004
- #define vibPlatCpuAp2eEnhanced 0x0008
- #define vibPlatCpuAp2c 0x0010
- #define vibPlatCpuAp2cPlus 0x0020
- #define vibPlatCpuAp2gsRom0 0x0040
- #define vibPlatCpuAp2gsRom1 0x0080
- #define vibPlatCpuAp2gsRom3 0x0100
-
- /*---------------------------------------------- platform: OS -----*/
- /* This section indicates the required/recommended operating */
- /* system, and operates similarly to the CPU section described */
- /* above. */
- /*-----------------------------------------------------------------*/
- #define vivPlatOsIntelMsdos 0
- #define vivPlatOsIntelWindows 1
- #define vivPlatOsIntelOs2 2
- #define vivPlatOsMacSys 3
- #define vivPlatOsMacAux 4
- #define vivPlatOsApple2 5
- #define vivPlatOsUnalloc6 6
- #define vivPlatOsUnalloc7 7
- #define vivPlatOsUnalloc8 8
- #define vivPlatOsUnalloc9 9
-
- /*--------------------------- Intel MS-DOS ----*/
- #define vibPlatOsDos10 0x0001
- #define vibPlatOsDos20 0x0002
- #define vibPlatOsDos21 0x0004
- #define vibPlatOsDos211 0x0008
- #define vibPlatOsDos30 0x0010
- #define vibPlatOsDos31 0x0020
- #define vibPlatOsDos32 0x0040
- #define vibPlatOsDos33 0x0080
- #define vibPlatOsDos40 0x0100
- #define vibPlatOsDos50 0x0200
- #define vibPlatOsDos60 0x0400
-
- /* Data Types and Structures (Platforms, cont.) */
-
- /*--------------------------- Intel Windows ---*/
- #define vibPlatOsWin10 0x0001
- #define vibPlatOsWin20 0x0002
- #define vibPlatOsWin30 0x0004
- #define vibPlatOsWin31 0x0008 /* >= 286 */
- #define vibPlatOsWinNT 0x0100
- #define vibPlatOsWinFW 0x0800
- #define vibPlatOsWinPen 0x4000
-
- /*--------------------------- Intel OS/2 ------*/
- #define vibPlatOsOS2_10 0x0001
- #define vibPlatOsOS2_11 0x0002
- #define vibPlatOsOS2_12 0x0004
- #define vibPlatOsOS2_13 0x0008
- #define vibPlatOsOS2_20 0x0010 /* >= 386 */
- #define vibPlatOsOS2_21 0x0020
-
- /*--------------------------- Mac Sys ---------*/
- #define vibPlatOsMacSys6_0_5 0x0001
- #define vibPlatOsMacSys6_0_7 0x0002
- #define vibPlatOsMacSys6_0_8 0x0004
- #define vibPlatOsMacSys7_0 0x0008
- #define vibPlatOsMacSys7_0_1 0x0010
- #define vibPlatOsMacSys7_1 0x0020
-
- /*--------------------------- Mac A/UX --------*/
- #define vibPlatOsMacAux2_0_1 0x0001
- #define vibPlatOsMacAux3_0 0x0002
-
- /*--------------------------- AppleII ---------*/
- #define vibPlatOsAp2Dos33 0x0001
- #define vibPlatOsAp2Prodos81x 0x0002
- #define vibPlatOsAp2Prodos82x 0x0004
- #define vibPlatOsAp2Gsos4x 0x0100
- #define vibPlatOsAp2Gsos5x 0x0200
- #define vibPlatOsAp2Gsos60 0x0400
- #define vibPlatOsAp2Gsos601 0x0800
-
- /*--------------------------- Unix ------------*/
-
- /* Data Types and Structures (Platforms, cont.) */
-
- /*---------------------------------------- typedef viPlatFeat -----*/
- /* The VENDINFO record also contains ONE list of platform */
- /* features which may be associated with the product. Each of */
- /* these is represented by one byte in the vidPlatFeatures array. */
- /* Each such byte can have one of the following four values. */
- /* These values are defined this way: */
- /* Irrelevant -- Presence or absence of this feature will */
- /* have no effect on whether or not this */
- /* product works. */
- /* Supported -- This particular feature is specifically */
- /* supported by the product. */
- /* Recommended -- It is recommended that this feature be */
- /* present if the product is used. */
- /* Required -- This feature must be present, or the */
- /* product won't work. */
- /* WontWork -- If this feature is present, the product */
- /* won't work. */
- /*-----------------------------------------------------------------*/
- #define vivPlatFeatCount 55
- typedef struct {
- byte vidPlatFeatures [ vivPlatFeatCount ]; /* pf? */
- /* see vidPlatFeat... */
- } viPlatFeat; /* 55 fields, 55 bytes */
-
- /*--------------------------- field values ----*/
- #define vibPlatFeatIrrelevant 0x0
- #define vibPlatFeatSupported 0x1
- #define vibPlatFeatRecommended 0x2
- #define vibPlatFeatRequired 0x3
- #define vibPlatFeatWontWork 0x4
-
- /*--------------------------- configuration ---*/
- #define vivPlatFeatConfFpu 0 /* p?fcf n */
- #define vivPlatFeatConfLaptop 1 /* p?fcl n */
- #define vivPlatFeatConfMca 2 /* p?fcm n */
-
- /*--------------------------- RAM -------------*/
- #define vivPlatFeatRamExpandOrExtend 3 /* p?fro n */
- #define vivPlatFeatRamEms 4 /* p?frm n */
- #define vivPlatFeatRamExtended 5 /* p?fre n */
- #define vivPlatFeatRamXms 6 /* p?frx n */
- #define vivPlatFeatRamHimem 7 /* p?frh n */
-
- /*--------------------------- disk drives------*/
- #define vivPlatFeatDiskHard 8 /* p?fdh n */
- #define vivPlatFeatDiskFloppyOnly 9 /* p?fdf n */
- #define vivPlatFeatDiskCdrom 10 /* p?fdc n */
-
- /*--------------------------- ports -----------*/
- #define vivPlatFeatPortPar 11 /* p?fop n */
- #define vivPlatFeatPortSer 12 /* p?fos n */
- #define vivPlatFeatPortPcmcia 13 /* p?foc n */
- #define vivPlatFeatPortGame 14 /* p?fog n */
-
-
- /* Data Types and Structures (Platforms, cont.) */
- /*--------------------------- video -----------*/
- #define vivPlatFeatVidMonoText 15 /* p?fvm n */
- #define vivPlatFeatVidHerc 16 /* p?fvh n */
- #define vivPlatFeatVidTandy 17 /* p?fvt n */
- #define vivPlatFeatVidCga 18 /* p?fvc n */
- #define vivPlatFeatVidEga 19 /* p?fve n */
- #define vivPlatFeatVidMcga 20 /* p?fvn n */
- #define vivPlatFeatVidMcga256 21 /* p?fvo n */
- #define vivPlatFeatVidVga 22 /* p?fvv n */
- #define vivPlatFeatVidSvgaVesa 23 /* p?fvw n */
- #define vivPlatFeatVidSvgaOther 24 /* p?fvs n */
- #define vivPlatFeatVid8514 25 /* p?fv8 n */
- #define vivPlatFeatVidXga 26 /* p?fvx n */
- #define vivPlatFeatVidMonoMonitor 27 /* p?fva n */
- #define vivPlatFeatVidColorMonitor 28 /* p?fvb n */
-
- /*--------------------------- input -----------*/
- #define vivPlatFeatInpKeyboard 29 /* p?fik n */
- #define vivPlatFeatInpMouse 30 /* p?fim n */
- #define vivPlatFeatInpDigitizer 31 /* p?fid n */
- #define vivPlatFeatInpJoystick 32 /* p?fij n */
-
- /*--------------------------- scanner ---------*/
- #define vivPlatFeatScanHandLogitech 33 /* p?fal n */
- #define vivPlatFeatScanHandGenius 34 /* p?fag n */
- #define vivPlatFeatScanFlatbedHP 35 /* p?faf n */
-
- /*--------------------------- printer ---------*/
- #define vivPlatFeatPrinterYes 36 /* p?fpy n */
- #define vivPlatFeatPrintText 37 /* p?fpt n */
- #define vivPlatFeatPrintGraphIbm 38 /* p?fpi n */
- #define vivPlatFeatPrintGraphEpson9 39 /* p?fpe n */
- #define vivPlatFeatPrintGraphEpson24 40 /* p?fpf n */
- #define vivPlatFeatPrintHpDeskjet 41 /* p?fpd n */
- #define vivPlatFeatPrintHpPaintjet 42 /* p?fpp n */
- #define vivPlatFeatPrintHpLaserjet 43 /* p?fpl n */
- #define vivPlatFeatPrintPostscript 44 /* p?fps n */
- #define vivPlatFeatPrintPlotter 45 /* p?fpo n */
-
- /*--------------------------- modem -----------*/
- #define vivPlatFeatModemAnySerial 46 /* p?fma n */
- #define vivPlatFeatModemHayesCompat 47 /* p?fmh n */
- #define vivPlatFeatModemFax 48 /* p?fmf n */
-
- /*--------------------------- sound card ------*/
- #define vivPlatFeatSoundCardYes 49 /* p?fsy n */
- #define vivPlatFeatSoundAdlib 50 /* p?fsa n */
- #define vivPlatFeatSoundCovox 51 /* p?fsc n */
- #define vivPlatFeatSoundBlast 52 /* p?fsb n */
- #define vivPlatFeatSoundMidi 53 /* p?fsm n */
-
- /*--------------------------- network ---------*/
- #define vivPlatFeatNetwork 54 /* p?fne n */
-
- /* Data Types and Structures (cont.) */
-
- /*--------------------------------------- typedef viElectAddr -----*/
- /* Electronic Addresses for Author/Support/Ordering */
- /*-----------------------------------------------------------------*/
- typedef struct {
- char vidBbsName [ vivLenBbsName ]; /* ?en s */
- char vidBbsPhone [ vivLenPhone ]; /* ?eb s */
- char vidBbsUserName [ vivLenBbsUserName]; /* ?eu s */
- char vidAmericaOnLine [vivLenAmericaOnLine];/* ?ea s */
- char vidCompuserve [ vivLenCompuserve ]; /* ?ec s */
- char vidDelphi [ vivLenDelphi ]; /* ?ed s */
- char vidGenie [ vivLenGenie ]; /* ?eg s */
- char vidProdigy [ vivLenProdigy ]; /* ?ep s */
- char vidFidonet [ vivLenFidonet ]; /* ?ef s */
- char vidInternet [ vivLenInternet ]; /* ?ei s */
- char vidRime [ vivLenRime ]; /* ?er s */
- TextBlock vidOtherElect [ vivLenMisc2 ]; /* ?eo s */
- } viElectAddr; /* 12 fields, 417 bytes */
-
- /* Data Types and Structures (cont.) */
-
- /*------------------------------------------ typedef viRegPkg -----*/
- /* This structure contains information about the price and */
- /* registration benefits associated with a shareware product. */
- /* Two of these structures are in the VENDINFO record: one */
- /* represents the minimum registration package, and one the */
- /* maximum. If there is only one registration price for a */
- /* shareware product, the two structurea should be identical. */
- /* If there's any price or benefits information not covered by */
- /* the available fields, the "catch-all" vidRegPriceBenefitsOther */
- /* field can be used. */
- /*-----------------------------------------------------------------*/
- typedef struct {
- Price vidRegPrice; /* i?p n */
- long vidRegBenefits[2]; /* see vibBene... */ /* i?b? */
- char vidRegPriceBenefitsOther[81]; /* i?v s */
- } viRegPkg; /* 37 fields, 93 bytes */
-
- /*------------------------------------- registration benefits -----*/
- /* These boolean fields contain a list of possible registration */
- /* benefits. */
- /*-----------------------------------------------------------------*/
- #define vibBeneAddlData 0x00000001L /* i?bad b */
- #define vibBeneAddlProg 0x00000002L /* i?bap b */
- #define vibBeneBbsSupp 0x00000004L /* i?bbs b */
- #define vibBeneBranding 0x00000008L /* i?bbr b */
- #define vibBeneBugNotice 0x00000010L /* i?bbu b */
- #define vibBeneCheatCode 0x00000020L /* i?bcc b */
- #define vibBeneCommission 0x00000040L /* i?bcm b */
- #define vibBeneContest 0x00000080L /* i?bcn b */
- #define vibBeneCustom 0x00000100L /* i?bcu b */
- #define vibBeneConvertOther 0x00000200L /* i?bcr b */
- #define vibBeneConvertOld 0x00000400L /* i?bcx b */
- #define vibBeneDiscount 0x00000800L /* i?bdi b */
- #define vibBeneEnhanced 0x00001000L /* i?ben b */
- #define vibBeneFreeGoodies 0x00002000L /* i?bfg b */
- #define vibBeneFuture 0x00004000L /* i?bfu b */
- #define vibBeneGuarantee 0x00008000L /* i?bgu b */
- #define vibBeneHints 0x00010000L /* i?bhi b */
- #define vibBeneLatest 0x00020000L /* i?bla b */
- #define vibBeneLifetimeSupp 0x00040000L /* i?bls b */
- #define vibBeneNewsletter 0x00080000L /* i?bne b */
- #define vibBenePreprint 0x00100000L /* i?bpp b */
- #define vibBenePrintedManual 0x00200000L /* i?bpm b */
- #define vibBeneQuickRef 0x00400000L /* i?bqr b */
- #define vibBeneRecordLimit 0x00800000L /* i?brl b */
- #define vibBeneRrsElim 0x01000000L /* i?bre b */
- #define vibBeneRepeatDelay 0x02000000L /* i?brd b */
- #define vibBeneSampleData 0x04000000L /* i?bsd b */
- #define vibBeneSource 0x08000000L /* i?bso b */
- #define vibBeneSubscription 0x10000000L /* i?bsu b */
- #define vibBeneTimeLimit 0x20000000L /* i?btl b */
- #define vibBeneTutorial 0x40000000L /* i?btu b */
- #define vibBeneUpdateNotice 0x80000000L /* i?bun b */
- #define vibBeneUpdateFree 0x00000001L /* i?buf b */
- #define vibBeneVoiceSupp 0x00000002L /* i?bvs b */
- #define vibBeneWatermark 0x00000004L /* i?bwa b */
- #define vivBeneCount 35
-
- /*****************************/
- /* VENDINFO Header Section */
- /*****************************/
-
- /*--------------------------------------------------- comment -----*/
- /* Because some C compilers can't handle forward references, it */
- /* is necessary to define the individual sections of the fixed- */
- /* length VENDINFO record before defining the record itself. The */
- /* sections are: */
- /* header */
- /* product information */
- /* author information */
- /* ordering information */
- /* prices and benefits information */
- /* support information */
- /* general (channel-independent) distribution policy */
- /* channel-specific distribution policy */
- /*-----------------------------------------------------------------*/
-
- /*=================================================================*/
- /* Header Section structure definition */
- /*=================================================================*/
-
- /*-------------------------------------- typedef viSectHeader -----*/
- /* This section of the record is used for identification and */
- /* security, and contains information about the overall record, */
- /* such as the date/time of its creation. */
- /*-----------------------------------------------------------------*/
- typedef struct {
- char vidHeadString[12]; /* "VENDINFO" + 2 words */
- word vidHeadVersion;
- byte vidHeadViType; /* see vivRecType... */
- Date vidHeadPrepDate;
- long vidHeadTextRecordSize;
- long vidHeadTextRecordCRC;
- long vidHeadDataRecordSize; /* uncompressed */
- long vidHeadDataRecordCRC; /* uncompressed */
- long vidHeadUserId;
- long vidHeadAuthenticityKey1;
- long vidHeadAuthenticityKey2;
- } viSectHeader; /* 11 fields, 45 bytes */
-
- /*=================================================================*/
- /* Constants used in VENDINFO Header Section */
- /*=================================================================*/
-
- /*----------------- VENDINFO record types (see vidHeadViType) -----*/
- /* There are several entirely different types of VENDINFO record, */
- /* with different structures. The record-type field allows them */
- /* to be differentiated. These are the possible values. */
- /*-----------------------------------------------------------------*/
- #define vivRecTypePackageMain 1
- #define vivRecTypePackageSecondary 2
- #define vivRecTypeIntermed 99
-
- /*****************************/
- /* Product Section */
- /*****************************/
-
- /*=================================================================*/
- /* Product Section structure definition */
- /*=================================================================*/
-
- /*------------------------------------- typedef viSectProduct -----*/
- /* The Product Section describes the product and version, */
- /* including names, descriptions, categories, keywords, and */
- /* minimal and recommended platforms. */
- /*-----------------------------------------------------------------*/
- typedef struct {
- byte vidProdType; /* see vivProdType...*/ /* py n */
- char vidProdName [ vivLenProdName ]; /* pp s */
- char vidProdNameExtension [ vivLenProdExt ]; /* pe s */
- char vidProdVersion [ vivLenProdVers ]; /* pv s */
- Date vidProdVersionDate; /* pt d */
- char vidProdVersionReason [ vivLenMisc2 ]; /* pr t */
- char vidProdFileNamePrefix [ vivLenPrefix ]; /* pn s */
- byte vidProdNumberOfParts; /* ppn n */
- char vidProdThisPart [ vivLenPrefix ]; /* ppt s */
- char vidProdListOfParts [ vivLenMisc1 ]; /* ppl s */
- char vidProdListOfCisParts [ vivLenCisList ]; /* ppc s */
- char vidProdScreenshotTypes [vivLenShotTypes]; /* ph s */
- char vidProdOldPkgsReplaced [ vivLenMisc1 ]; /* px s */
- TextBlock vidProdDescription1 [ vivLenDesc1 ]; /* pd1 t */
- TextBlock vidProdDescription2 [ vivLenDesc2 ]; /* pd2 t */
- TextBlock vidProdDescription3 [ vivLenDesc3 ]; /* pd3 t */
- TextBlock vidProdDescription4 [ vivLenDesc4 ]; /* pd4 t */
- TextBlock vidProdDescription5 [ vivLenDesc5 ]; /* pd5 t */
- TextBlock vidProdDescription6 [ vivLenDesc6 ]; /* pd6 t */
- viPlatform platMin; /* p1? */
- viPlatform platRec; /* p2? */
- viPlatFeat platFeat; /* pf? */
- char vidProdOtherRequiredSw [ vivLenMisc1 ]; /* ps s */
- TextBlock vidProdOtherRequirements [ vivLenMisc3 ]; /* po t */
- long vidProdCategories[5]; /* pc? ? */
- char vidProdKeywords [ vivLenMisc1 ]; /* pk s */
- } viSectProduct; /* 100 fields, 4271 bytes */
-
-
- /*=================================================================*/
- /* Constants used in Product Section */
- /*=================================================================*/
-
- /*---------------------------- product type (see vidProdType) -----*/
- /* While VENDINFO is primarily intended to describe software */
- /* products, it can be used to describe various other types of */
- /* computer-related products, especially those that can actually */
- /* be distributed electronically. Here are possible values of */
- /* the product-type field. */
- /*-----------------------------------------------------------------*/
- #define vivProdTypeSoftware 0
- #define vivProdTypeHardware 1
- #define vivProdTypeDataFile 2
- #define vivProdTypeTextFile 3
- #define vivProdTypeBook 4
- #define vivProdTypeMagazine 5
- #define vivProdTypeCatalog 6
- #define vivProdTypeVideo 7
-
- /* Product Section (cont.) */
-
- /*=================================================================*/
- /* Notes on Product Section */
- /*=================================================================*/
-
- /*-------------------------- product name, extension, version -----*/
- /* In order to allow use of the information by automated tools, */
- /* the product name and version are broken into components. For */
- /* example, the phrase "Lotus 1-2-3 Spreadsheet Processor, V2.20" */
- /* would be broken down as follows: */
- /* vidProdName -- "Lotus 1-2-3" */
- /* vidProdNameExtension -- "Spreadsheet Processor" */
- /* vidProdVersion -- "2.20" */
- /*-----------------------------------------------------------------*/
-
- /*--------------------------- product package filenames, etc. -----*/
- /* Distribution packages are typically compressed files with the */
- /* filename prefix indicating the specific product package, and */
- /* the filename extension indicating the compression program used */
- /* to produce the package. Except where shorter names are */
- /* required (e.g., on CompuServe), the filename prefix should */
- /* take one of the following forms: */
- /* AAAAA99P -- For multipart packages, the first five */
- /* characters are alphabetic, and represent the */
- /* product. The next two are numeric, and */
- /* represent the version. The last is alphabetic, */
- /* using the sequence { A, B, C, ... }, and */
- /* indicates which part of the total product this */
- /* particular package is. */
- /* AAAAA99 -- For single-part packages, any of the remaining */
- /* AAAAA999 three forms is allowed, where the product name */
- /* AAAAAA99 portion is strictly alphabetic, and the version */
- /* portion is strictly numeric. */
- /* */
- /* vidProdNumberOfParts contains the number of packages making up */
- /* the product. */
- /* */
- /* vidProdListOfParts contains a blank-separated list of the */
- /* filename prefixes of the packages making up the product. */
- /* Similarly, vidProdListOfCisParts contains a list of the */
- /* filename prefixes to be used on a system on which filename */
- /* prefixes are restricted to six characters. In each case, the */
- /* first part listed will contain the main VENDINFO.DIZ files, */
- /* while the others, if any, will contain secondary VENDINFO.DIZ */
- /* files. Finally, vidProdOldPkgsReplaced contains a list of */
- /* filename prefixes of previous versions packages replaced by */
- /* this version. */
- /*-----------------------------------------------------------------*/
-
- /*-------------------------------------- product screen shots -----*/
- /* If the author/publisher makes available a set of screen shots */
- /* of the product, on request and/or via the VENDINFO Product */
- /* Registry, the filename extensions (e.g., graphical formats) of */
- /* the available screen shots should be listed in */
- /* vidProdScreenshotTypes. Use the artificial filename */
- /* extension "FLM" to indicate hardcopy photos available only */
- /* from the author. A sample value for this string is */
- /* "PCX CGM FLM". */
- /*-----------------------------------------------------------------*/
-
- /* Product Section (cont.) */
-
- /*---------------------------------------- other requirements -----*/
- /* Two "catch-all" variables are provided for recording platform */
- /* requirements or recommendations that aren't covered in the */
- /* viPlatform structure. Wherever possible, requirements should */
- /* be defined in the viPlatform structures, since that allows */
- /* complete processing by automated tools. These "catch-alls" */
- /* are only for cases not covered. */
- /* */
- /* vidProdOtherRequiredSw is a simple string which might */
- /* contain one or more (blank-separated) names of other software */
- /* necessary to use the product. Likely examples are run-time */
- /* packages, such as VBRUN200.DLL, or main applications if the */
- /* product is an add-on (e.g., "Lotus 1-2-3" for a spreadsheet */
- /* macro package). */
- /* */
- /* vidProdOtherRequirements is a TextBlock (defined earlier) */
- /* in which to list hardware, operating systems, peripherals, */
- /* etc., that are not covered in viPlatform, and in which to list */
- /* version numbers and other details of the requirements in */
- /* viPlatform WHEN NECESSARY. For example, a laser-printer */
- /* product that works on HP LaserJets, but only starting with the */
- /* LaserJet II, should so indicate here (e.g., "LaserJet II and */
- /* later"), but if it works with all LaserJets, no specification */
- /* is necessary in this TextBlock. */
- /*-----------------------------------------------------------------*/
-
- /*--------------------------- product categories and keywords -----*/
- /* vidProdCategories is an array containing one primary and four */
- /* secondary category codes, using the numbering scheme developed */
- /* by Rob Rosenberger for his ASP Catalog Entry Editor or a */
- /* similar scheme. VENDINFO editor and processor tools will */
- /* probably use an external file to map categories into category */
- /* codes, and vice versa. A small example portion of such a file */
- /* is: */
- /* 01000000 Utilities */
- /* 01010000 Disk utilities */
- /* 01010100 Disk cataloging */
- /* 01010200 Hard disk utilities */
- /* 01010300 Floppy disk utilities */
- /* 01020000 File utilities */
- /* 01020100 Backup/restore */
- /* 01020200 Encryption & security */
- /* Shorthand codes for product categories are "pc1", "pc2", etc. */
- /* */
- /* vidProdKeywords is a blank-separated list of keywords */
- /* describing the product. In general, keywords should be listed */
- /* in order of importance, since it is possible that only a */
- /* portion of the list will be used. At present, no standardized */
- /* list of keywords is planned (i.e., the list is "free-form"). */
- /*-----------------------------------------------------------------*/
-
- /*****************************/
- /* Author Section */
- /*****************************/
-
- /*=================================================================*/
- /* Author Section structure definition */
- /*=================================================================*/
-
- /*-------------------------------------- typedef viSectAuthor -----*/
- /* The Author section contains information about the product's */
- /* author or publisher. This is distinct from information about */
- /* how to order, or how to obtain technical support. */
- /*-----------------------------------------------------------------*/
- typedef struct {
- char vidAuthorName [ vivLenName ]; /* an s */
- char vidAuthorCompanyName [ vivLenName ]; /* ac s */
- char vidAuthorCompanyAddress[5][vivLenAddress];/* aa t */
- char vidAuthorPhone [ vivLenPhone ]; /* ap s */
- char vidAuthorFax [ vivLenPhone ]; /* af s */
- char vidAuthorQueriesPhone [ vivLenPhone ]; /* aq s */
- viElectAddr elec; /* ae? */
- word vidAuthorMembership; /* vibMember... */ /* am? b */
- char vidAuthorMembershipOther [ vivLenMisc1 ]; /* amx s */
- } viSectAuthor; /* 25 fields, 797 bytes */
-
- /*----------------------------------------------- memberships -----*/
- /* Author membership in trade associations may be relevant to */
- /* users and distributors. For example, ASP distributor members */
- /* are required to mark products by ASP author/publisher members */
- /* in their catalogs and files lists. Trade associations not */
- /* recognized in the current version of the standard can be */
- /* handled via the vidAuthorMembershipOther string. Known */
- /* trade associations are: */
- /* ASAD -- Association of Shareware Authors and */
- /* Distributors */
- /* ASP -- Association of Shareware Professionals */
- /* DSAH -- Deutschsprachige Shareware Authoren und */
- /* Haendlervereinigung */
- /* ESC -- Educational Shareware Cooperative */
- /* SPA -- Software Publisher's Association */
- /* STAR -- Shareware Trade Association and Resources */
- /*-----------------------------------------------------------------*/
- #define vibMemberAsad 0x00000001 /* amb b */
- #define vibMemberAsp 0x00000002 /* ama b */
- #define vibMemberDsah 0x00000004 /* amd b */
- #define vibMemberEsc 0x00000008 /* ame b */
- #define vibMemberSpa 0x00000010 /* amp b */
- #define vibMemberStar 0x00000020 /* ams b */
-
-
- /*=================================================================*/
- /* Notes on Author Section */
- /*=================================================================*/
-
- /*-------------------------------------- author, company name -----*/
- /* The vidAuthorName field is intended for the author's personal */
- /* name, if that is to be included in the record. The */
- /* vidCompanyName field must not be omitted. If no separate */
- /* company name is used, the author's personal name will appear */
- /* here. This field is used as one of the keys in the VENDINFO */
- /* security arrangements. Changing it will invalidate any */
- /* security and user-registration keys based on it. */
- /*-----------------------------------------------------------------*/
-
- /*****************************/
- /* Order Section */
- /*****************************/
-
- /*=================================================================*/
- /* Order Section structure definition */
- /*=================================================================*/
-
- /*--------------------------------------- typedef viSectOrder -----*/
- /* The Order section provides contact information for ordering */
- /* the product or related products, as distinct from contact */
- /* information about the author or technical support. */
- /*-----------------------------------------------------------------*/
- typedef struct {
- char vidOrderAddress [ 6 ] [ vivLenAddress ]; /* oa t */
- char vidOrderPhoneTollFree [ vivLenPhone ]; /* ot s */
- char vidOrderPhone [ vivLenPhone ]; /* op s */
- char vidOrderFax [ vivLenPhone ]; /* of s */
- viElectAddr elec; /* oe? */
- word vidOrderCredit; /* see vibCredit... */ /* oc? b */
- char vidOrderCreditOther [ vivLenMisc1 ]; /* ocx s */
- long vidOrderFunds; /* see vibPay... */ /* ox? b */
- char vidOrderFundsOther [ vivLenMisc1 ]; /* oxx s */
- char vidOrderBankAccount [ vivLenMisc1 ]; /* ob s */
- char vidOrderOtherRegSources [ vivLenMisc2 ]; /* oo t */
- } viSectOrder; /* 46 fields, 1073 bytes */
-
- /*---------------------------------------------- credit cards -----*/
- /* The vidOrderCredit field allows specification of known credit */
- /* cards that are acceptable. Any additional cards and */
- /* information about surcharges, etc., can be listed in the */
- /* vidOrderCreditOther string. */
- /*-----------------------------------------------------------------*/
- #define vibCreditAccessEurocard 0x0001 /* oce b */
- #define vibCreditAmexOptima 0x0002 /* oca b */
- #define vibCreditDinersCard 0x0004 /* occ b */
- #define vibCreditDiscover 0x0008 /* ocd b */
- #define vibCreditMastercard 0x0010 /* ocm b */
- #define vibCreditVisa 0x0020 /* ocv b */
-
- /*---------------- acceptable currencies and forms of payment -----*/
- /* The vidOrderFunds field allows specification of the various */
- /* forms of cash, check, and money order payment that may be */
- /* used. International banking practices and exchange rates make */
- /* this a somewhat complicated area. Unfortunately, the fields */
- /* therefore required detailed definition. */
- /* PmoSameCountry -- postal money order issued in recipient's */
- /* country. */
- /* PmoInternational -- international postal money order */
- /* CheckPersSame -- a personal check written in the currency of */
- /* the recipient's country and drawn on a bank */
- /* in the recipient's country. */
- /* CheckPersHardSender -- a personal check written in a stable, */
- /* convertible, "hard" currency other than */
- /* that used in recipient's country, and drawn */
- /* on a bank in the sender's, and not the */
- /* recipient's, country. */
- /* CheckPersHardRecip -- a personal check written in a stable, */
- /* convertible, "hard" currency other than */
- /* that used in recipient's country, and */
- /* drawn on a bank in the recipient's country. */
-
- /* Order Section (cont.) */
-
- /* CheckPersOther -- a personal check other than those */
- /* described above, typically in a "soft" */
- /* currency. */
- /* CheckBank... -- same as the four categories just listed, */
- /* but the check is a bank draft or cashier's */
- /* check. */
- /* Cash... -- similar to check categories above, but involving */
- /* actual currency sent through the mail */
- /* TravCheck... -- similar to categories above, but involving */
- /* traveller's checks. */
- /* AmexMoneyOrder -- American Express Money Order */
- /* EuroChequeSenderGuar -- EuroCheque written in the currency */
- /* of the sender, with a valid cheque */
- /* guarantee card number written on the back. */
- /* DirectBank -- Direct bank-to-bank electronic funds transfer, */
- /* paid to the bank and account number */
- /* indicated in vidOrderBankAccount. */
- /* PurchOrderNbrMost -- Purchase order numbers accepted in most */
- /* cases from major firms. */
- /* PurchOrderHardcopyMost -- Purchase orders accepted in */
- /* hardcopy from most major firms. */
- /*-----------------------------------------------------------------*/
- #define vibPayPmoSameCountry 0x00000001 /* oxms b */
- #define vibPayPmoInternational 0x00000002 /* oxmi b */
- #define vibPayCheckPersSame 0x00000004 /* oxps b */
- #define vibPayCheckPersHardSender 0x00000008 /* oxph b */
- #define vibPayCheckPersHardRecip 0x00000010 /* oxpr b */
- #define vibPayCheckPersOther 0x00000020 /* oxpo b */
- #define vibPayCheckBankSame 0x00000040 /* oxbs b */
- #define vibPayCheckBankHardSender 0x00000080 /* oxbh b */
- #define vibPayCheckBankHardRecip 0x00000100 /* oxbr b */
- #define vibPayCheckBankOther 0x00000200 /* oxbo b */
- #define vibPayCashSame 0x00000400 /* oxcs b */
- #define vibPayCashHard 0x00000800 /* oxch b */
- #define vibPayCashOther 0x00001000 /* oxco b */
- #define vibPayTravCheckSame 0x00002000 /* oxts b */
- #define vibPayTravCheckOther 0x00004000 /* oxto b */
- #define vibPayAmexMoneyOrder 0x00008000 /* oxa b */
- #define vibPayEuroChequeOrigGuar 0x00010000 /* oxe b */
- #define vibPayDirectBank 0x00020000 /* oxd b */
- #define vibPayPurchOrderNbrMost 0x00040000 /* oxon b */
- #define vibPayPurchOrderHardcopyMost 0x00080000 /* oxoh b */
-
- /*****************************/
- /* Prices Section */
- /*****************************/
-
- /*=================================================================*/
- /* Prices Section structure definition */
- /*=================================================================*/
-
- /*-------------------------------------- typedef viSectPrices -----*/
- /* The Prices structure contains information about prices and */
- /* registration benefits for the product, including availability */
- /* of site licenses and dealer discounts, royalty information, */
- /* non-shareware versions, etc. */
- /*-----------------------------------------------------------------*/
- #define vivPriceShipCount 7
- typedef struct {
- viRegPkg mini; /* i1? */
- viRegPkg maxi; /* i2? */
- char vidPriceWhatCurrency [ vivLenCurrency ]; /* ic s */
- Price vidPriceShip [ vivPriceShipCount]; /* is? */
- /* see vivPriceShip... */
- word vidPriceMiscFlags; /* vibPriceMisc... */ /* im? */
- Price vidPriceRoyaltyMin; /* irm n */
- char vidPriceRoyaltyMinText [ vivLenMisc1 ]; /* irn s */
- Price vidPriceRoyaltyMax; /* irx n */
- char vidPriceRoyaltyMaxText [ vivLenMisc1 ]; /* iry s */
- char vidPriceRoyaltyAgent [ vivLenMisc1 ]; /* ira s */
- } viSectPrices; /* 96 fields, 488 bytes */
-
- /*------------------------------------- shipping and handling -----*/
- /* These fields allow separate shipping and handling charges by */
- /* continent, and allow a separate rate for recipients in the */
- /* same country as the order address. These amounts are to be */
- /* expressed in the same currency as the registration prices. */
- /*-----------------------------------------------------------------*/
- #define vivPriceShipSameCountry 0 /* isc n */
- #define vivPriceShipNorthAmerica 1 /* isn n */
- #define vivPriceShipSouthAmerica 2 /* iss n */
- #define vivPriceShipEurope 3 /* ise n */
- #define vivPriceShipAsia 4 /* isa n */
- #define vivPriceShipAfrica 5 /* isf n */
- #define vivPriceShipPacificRim 6 /* isp n */
-
- /*--------------------------------------------- pricing misc. -----*/
- /* vidPriceMiscFlags contains these binary flags. The fields are */
- /* defined as follows: */
- /* Sitelice -- site licenses are available */
- /* SiteliceSeeText -- actual site license rates are included */
- /* in the human-readable portion of the */
- /* VENDINFO record. */
- /* Discount -- dealer discount prices are available */
- /* DiscountSeeText -- actual dealer discount rates are */
- /* included in the human-readable portion of */
- /* the VENDINFO record. */
- /* Royalty -- royalties are required for some forms of */
- /* distribution of this product. Note that */
- /* royalty rates can be specified here in the */
- /* VENDINFO data record (e.g., */
- /* vidPriceRoyaltyMin), in the human-readable */
- /* portion of the record, or neither. */
- /* RoyaltyNegot -- royalty rates are always negotiated on a */
- /* case-by-case basis. */
-
- /* Prices Section */
-
- /* RoyaltySeeText -- royalty rates are included in the */
- /* human-readable portion of the VENDINFO */
- /* record. */
- /* NsvAvailable -- a non-shareware (enhanced) version of this */
- /* shareware product is available. */
- /* LcrAvailable -- a low-cost retail version of this product */
- /* is available for distribution. */
- /*-----------------------------------------------------------------*/
- #define vibPriceMiscSitelice 0x00000001 /* ims b */
- #define vibPriceMiscSiteliceSeeText 0x00000002 /* imt b */
- #define vibPriceMiscDiscount 0x00000004 /* imd b */
- #define vibPriceMiscDiscountSeeText 0x00000008 /* ime b */
- #define vibPriceMiscRoyalty 0x00000010 /* imr b */
- #define vibPriceMiscRoyaltyNegot 0x00000020 /* imq b */
- #define vibPriceMiscRoyaltySeeText 0x00000040 /* imp b */
- #define vibPriceMiscNsvAvailable 0x00000080 /* imn b */
- #define vibPriceMiscLcrAvailable 0x00000100 /* iml b */
- #define vivPriceMiscCount 9
-
- /*****************************/
- /* Support Section */
- /*****************************/
-
- /*=================================================================*/
- /* Support Section structure definition */
- /*=================================================================*/
-
- /*------------------------------------- typedef viSectSupport -----*/
- /* The Support section contains contact information for technical */
- /* support for the product. */
- /*-----------------------------------------------------------------*/
- typedef struct {
- char vidSupportAddress [6] [vivLenAddress]; /* sa t */
- char vidSupportPhone [ vivLenPhone ]; /* sp s */
- char vidSupportFax [ vivLenPhone ]; /* sf s */
- viElectAddr elec; /* se? */
- TextBlock vidSupportForums [ vivLenMisc1 ]; /* ss t */
- } viSectSupport; /* 16 fields, 724 bytes */
-
- /*****************************/
- /* General Section */
- /*****************************/
-
- /*=================================================================*/
- /* General (channel-independent) Distribution Section */
- /*=================================================================*/
-
- /*------------------------------------- typedef viSectGeneral -----*/
- /* The General section specifies information about the product's */
- /* packaging and distribution that applies across all channels of */
- /* distribution. Most of the information is in the form of */
- /* binary flags, defined a bit later. The various Text fields */
- /* serve as additional-information "catch-all" fields for various */
- /* subjects that are discussed in connection with those binary */
- /* flags. */
- /*-----------------------------------------------------------------*/
- typedef struct {
- word vidGenlDistType; /* see vivDistType... */ /* gt n */
- word vidGenlMiscFlags; /* vidGenlMisc... */ /* gm? b */
- char vidGenlGeogText [ vivLenMisc1 ]; /* gg s */
- char vidGenlInstallText [ vivLenMisc1 ]; /* gi s */
- char vidGenlCompressText [ vivLenMisc1 ]; /* gc s */
- char vidGenlChangeText [ vivLenMisc1 ]; /* gh s */
- char vidGenlGroupSimText [ vivLenMisc1 ]; /* gs s */
- char vidGenlGroupDisText [ vivLenMisc1 ]; /* gd s */
- char vidGenlVendorUpgradeText [ vivLenMisc1 ]; /* gu s */
- } viSectGeneral; /* 23 fields, 571 bytes */
-
- /* General Section (cont.) */
-
- /*-------------------------------- product distribution types -----*/
- /* The vidGenlDistType field allows the author to specify the */
- /* basic distribution category into which the product falls. */
- /* Definitions are: */
- /* Commercial -- "commercial" product, not distributable */
- /* except through written permission/contract. */
- /* CommercialDist -- "commercial" product specifically */
- /* intended for use in distribution packages. */
- /* This code would probably appear only on an */
- /* executable program, not in a VENDINFO.DIZ. */
- /* ShareRegistered -- registered version of shareware */
- /* program, not distributable. This code */
- /* would probably appear only on an executable */
- /* program, not in a VENDINFO.DIZ. */
- /* ShareRegDist -- registered version of shareware program */
- /* specifically intended for use in */
- /* distribution packages (e.g., an install */
- /* program). This code would probably appear */
- /* only on an executable program, not in a */
- /* VENDINFO.DIZ. */
- /* ShareRestricted -- shareware product, with distribution */
- /* restrictions expressed in the Distribution */
- /* section of the record. */
- /* ShareUnlimited -- shareware product, freely distributable */
- /* by all channels without further permission. */
- /* CopyrUnlimFree -- copyrighted program, but freely */
- /* distributable by all channels, and freely */
- /* useable without charge or registration. */
- /* Sometimes called "freeware" or */
- /* "bannerware". */
- /* Demo -- demonstration program, not necessarily fully */
- /* functional, freely distributable by all */
- /* channels. */
- /* Public -- public-domain product, no copyright retained, */
- /* freely distributable, useable, modifiable. */
- /* Retired -- used in a VENDINFO-only distribution package, */
- /* to request removal of previous version(s). */
- /*-----------------------------------------------------------------*/
- #define vivGenlTypeCommercial 0
- #define vivGenlTypeCommercialDist 1
- #define vivGenlTypeShareRegistered 2
- #define vivGenlTypeShareRegDist 3
- #define vivGenlTypeShareRestricted 4
- #define vivGenlTypeShareUnlimited 5
- #define vivGenlTypeCopyrUnlimFree 6
- #define vivGenlTypeDemo 7
- #define vivGenlTypePublic 8
- #define vivGenlTypeRetired 9
- #define vivGenlTypeCount 10
-
- /* General Section (cont.) */
-
- /*------ channel-independent flags (see genl.viGenlMiscFlags) -----*/
- /* vidGenlMiscFlags contains various binary flags representing */
- /* policies applicable to the product across all distribution */
- /* channels. Definitions are: */
- /* GeogOnlyUS -- distribution outside the United States is */
- /* illegal because product includes encryption */
- /* technology that cannot be exported (any */
- /* other geographical restrictions are placed */
- /* in vidGenlGeogText). */
- /* PkgNoMods -- no modifications whatever are permitted to */
- /* the compressed package as released by the */
- /* author/publisher. */
- /* FilesNoMods -- while addition of files may be allowed, no */
- /* modifications of the original files are */
- /* allowed. */
- /* HelpGoSeparate -- Help files, GO.BAT, etc. may be added. */
- /* AdsSeparate -- advertisements may be added, but only as */
- /* separate files. */
- /* AdsAppended -- advertisements may be appended to the */
- /* author's original documentation files, but */
- /* the files must otherwise remain unchanged. */
- /* Install -- a different installation program or procedure */
- /* may be substituted or added. */
- /* InstallSeeText -- must see human-readable portion of */
- /* VENDINFO record for additional constraints */
- /* on installation changes. */
- /* Compress -- a different compression program can be used */
- /* to repackage the files in this package. */
- /* CompressSeeText -- must see human-readable portion of */
- /* VENDINFO record for additional constraints */
- /* on compression changes. */
- /* GroupSim -- product can be distributed in a single */
- /* package with other similar products, as in */
- /* PsL's megadisks. */
- /* GroupSimPerm -- written permission is required for such */
- /* distribution. */
- /* GroupSimSeeText -- must see human-readable portion of */
- /* VENDINFO record for additional constraints */
- /* on such distribution. */
- /* GroupDis -- product can be distributed in a single */
- /* package with other dis-similar products, as */
- /* in a "starter set". */
- /* GroupDisPerm -- written permission is required for such */
- /* distribution. */
- /* GroupDisSeeText -- must see human-readable portion of */
- /* VENDINFO record for additional constraints */
- /* on such distribution. */
- /*-----------------------------------------------------------------*/
- #define vibGenlMiscGeogOnlyUS 0x00000001 /* gmu b */
- #define vibGenlMiscPkgNoMods 0x00000002 /* gmp b */
- #define vibGenlMiscFilesNoMods 0x00000004 /* gmf b */
- #define vibGenlMiscHelpGoSeparate 0x00000008 /* gmhs b */
- #define vibGenlMiscAdsSeparate 0x00000010 /* gmas b */
- #define vibGenlMiscAdsAppended 0x00000020 /* gmaa b */
- #define vibGenlMiscInstall 0x00000040 /* gmi b */
- #define vibGenlMiscInstallSeeText 0x00000080 /* gmit b */
- #define vibGenlMiscCompress 0x00000100 /* gmc b */
- #define vibGenlMiscCompressSeeText 0x00000200 /* gmct b */
-
- /* General Section (cont.) */
-
- #define vibGenlMiscGroupSim 0x00000400 /* gms b */
- #define vibGenlMiscGroupSimPerm 0x00000800 /* gmsp b */
- #define vibGenlMiscGroupSimSeeText 0x00001000 /* gmst b */
- #define vibGenlMiscGroupDis 0x00002000 /* gmd b */
- #define vibGenlMiscGroupDisPerm 0x00004000 /* gmdp b */
- #define vibGenlMiscGroupDisSeeText 0x00008000 /* gmdt b */
- #define vivGenlMiscCount 16
-
- /*****************************/
- /* Distribution Section */
- /*****************************/
-
- /*=================================================================*/
- /* (channel-specific) Distribution Section */
- /*=================================================================*/
-
- /*------------------------------------- typedef viSectDistrib -----*/
- /* For each defined distribution channel, one of these structures */
- /* specifies the distribution requirements of the product. */
- /*-----------------------------------------------------------------*/
- #define vivDistDataCount 6
- typedef struct {
- long vidDistFlags; /* d?m? b */
- word vidDistData [ vivDistDataCount ]; /* d?d? */
- char vidDistAddlReqs [ vivLenMisc1 ]; /* d?a s */
- } viSectDistrib; /* 36 fields, 97 bytes */
-
- /*----------------- distribution types/channels (see dist[i]) -----*/
- /* The distribution channels currently defined are: */
- /* Bbs -- to End User by BBS */
- /* Fdn -- to BBSes by File-Distribution Network */
- /* DiskVend -- to End User by Mail-Order Disk Vendor */
- /* Cdrom -- by CD-ROM (other than File-Distribution Network) */
- /* OneRack -- to End User by Single-Site Rack */
- /* Rack -- to Seller by Rackware Distributor */
- /* Book -- to End User in Book Enclosure Diskette */
- /* Subscrip -- to End User by Subscription Service */
- /* Magazine -- to End User by Magazine "Cover" Disk */
- /* Broadcast -- to End User by TV/Cable/Satellite Broadcast */
- /* Phone900 -- to End User by 1-900-Type Phone Service */
- /* Install -- Installation by Distributor on User's Machine */
- /* Undesc -- Distribution by Substantially Different Means */
- /*-----------------------------------------------------------------*/
- #define vivDistChanBbs 0 /* db... */
- #define vivDistChanFdn 1 /* df... */
- #define vivDistChanDiskVend 2 /* dd... */
- #define vivDistChanCdrom 3 /* dc... */
- #define vivDistChanOneRack 4 /* do... */
- #define vivDistChanRack 5 /* dr... */
- #define vivDistChanBook 6 /* dk... */
- #define vivDistChanSubscrip 7 /* ds... */
- #define vivDistChanMagazine 8 /* dm... */
- #define vivDistChanTvBroadcast 9 /* dt... */
- #define vivDistChanPhone900 10 /* dp... */
- #define vivDistChanInstall 11 /* di... */
- #define vivDistChanUndesc 12 /* du... */
- #define vivDistChanCount 13
-
- /*----------------------- specific-channel distribution flags -----*/
- /* vidDistFlags records a set of boolean values indicating */
- /* various distribution policies for a particular distribution */
- /* channel. The overall approach taken here is to allow the */
- /* author to specify the following, in order: */
- /* 1. Who falls in the "qualifying" distributor set? */
- /* 2. What actions remove a distributor from the "qualifiers"? */
- /* 3. Do qualifiers still require written permission, or can */
- /* they distribute the product based on being qualifiers? */
- /* 4. If qualifiers need no written permission, are other */
- /* distributors allowed to distribute WITH PERMISSION, or */
- /* are they prohibited from distributing altogether? */
- /* (The point of this question is to help a non-qualifying */
- /* distributor know whether to review a product and request */
- /* permission, or to ignore the product altogether.) */
-
- /* Distribution Section (cont.) */
-
- /* Definitions are: */
- /* Prohib -- Distribution via this channel is prohibited. */
- /* Any -- Any distributor falls in the "qualifying" set (but */
- /* may still drop out of that group if */
- /* engaged in disqualifying actions.) */
- /* AnyAsp -- Any distributor who is an ASP member (in the */
- /* membership class relevant this channel) */
- /* qualifies. The point of this choice is */
- /* that ASP distributor members agree to */
- /* certain advertising and business practices */
- /* (and are monitored for compliance), and */
- /* some authors (ASP members or not) therefore */
- /* grant permission to these distributors */
- /* without further investigation. */
- /* AnyDisclose -- Any distributor qualifies if he agrees to */
- /* inform customer: (1) that product is */
- /* shareware, (2) what shareware is, (3) that */
- /* he claims no ownership rights in the */
- /* product, and (4) that separate payment is */
- /* required if product is used other than for */
- /* author-specified evaluation period. */
- /* AnyUG -- Any user group qualifies. */
- /* AnyNonProfUG -- Any non-profit user group qualifies. */
- /* AnyConsult -- Any consultant, who charges user for software */
- /* evaluation and installation services, */
- /* qualifies. */
- /* AnyHardware -- Any hardware dealer, who charges user for */
- /* hardware and installs product on it, */
- /* qualifies. */
- /* AnyRecFromAuth -- Any distributor who has received the */
- /* product directly from the author, or in a */
- /* mailing done by the author's direct agent, */
- /* qualifies. */
- /* NoIfAnyCharge -- A distributor is disqualified if he */
- /* charges the customer in any way. */
- /* NoIfPerYear -- A distributor is disqualified if he charges */
- /* a subscription fee exceeding the rate in */
- /* vivDistDataPerYear. */
- /* NoIfPerProg -- A distributor is disqualified if he charges */
- /* more per program than the rate in */
- /* vivDistDataPerProg. */
- /* NoIfPer360K -- A distributor is disqualified if he charges */
- /* by diskette, connect time hour, or other */
- /* volume measure, more than the rate */
- /* in vivDistDataPer360K. */
- /* NoIfPerCdrom -- A distributor is disqualified if he charges */
- /* more for the CD-ROM on which product is */
- /* being distributed than the rate in */
- /* vivDistDataPerCdrom. */
- /* NoIfCdrom -- Distribution by this channel is prohibited if */
- /* done by CD-ROM (FDN channel only). */
- /* NoIfOtherMass -- Distribution by this channel is prohibited */
- /* if done by mass medium other than CD-ROM, */
- /* such as bulk tape (FDN channel only). */
- /* NoIfTargetBbs -- Distribution by this (CD-ROM) channel is */
- /* prohibited if the CD-ROM is targetted at */
- /* BBS Sysops (e.g., set up to support */
- /* mounting of CD-ROM on BBS, marketed to */
- /* Sysops, etc.) */
-
- /* Distribution Section (cont.) */
-
- /* NoIfTargetDistrib -- Distribution by this (CD-ROM) channel */
- /* is prohibited if the CD-ROM is targetted at */
- /* shareware distributors (e.g., "vendor in a */
- /* box" kits, retail-store vending machines, */
- /* etc.) */
- /* NoIfTargetBbs -- Distribution by this (CD-ROM) channel is */
- /* prohibited if the CD-ROM is targetted at */
- /* End Users. */
- /* PermIfQual -- Distributors in "qualifying" set must still */
- /* have written permission. */
- /* PermIfDisqual -- Distributors not in qualifying set may */
- /* still distribute product if they obtain */
- /* written permission. Please note that the */
- /* author ALWAYS has the right to allow a */
- /* distribution by written permission, */
- /* regardless of the restrictions in the */
- /* VENDINFO record. This field is here to */
- /* help the "non-qualifying" distributor */
- /* determine whether or not it's worth the */
- /* trouble to request written permission. */
- /* NoIfDisqual -- Distributors not in qualifying set are not */
- /* allowed to distribute by this channel. */
- /* This field is actually redundant, but is in */
- /* the record to remove any possible ambiguity */
- /* regarding distribution rights. */
- /* HiDensRequired -- Distribution on diskette may be done only */
- /* on high-density diskettes. */
- /* NotifVersRequired -- Distributor who is operating without */
- /* written permission must notify author / */
- /* publisher of distribution and indicate the */
- /* version being distributed. */
- /* SampleRequired -- Distributor who is operating without */
- /* written permission must send an appropriate */
- /* sample of the distributed product to the */
- /* author. For mail-order disk vendors, this */
- /* means a copy of the catalog in which the */
- /* product is listed; for distribution by */
- /* other means it is a copy of the actual */
- /* material distributed, such as the rack */
- /* package, CD-ROM, magazine, book, etc. */
- /* SampleRequested -- Author requests, but does not require, */
- /* a sample as described above. */
- /* Royalty -- When distribution is done via this channel, a */
- /* royalty payment is required. See royalty */
- /* information in the General section for more */
- /* information about royalty amounts or */
- /* procedure. */
- /* HasContactDate -- There is a date (vivDistDataContactDate) */
- /* beyond which distributor must check with */
- /* author for current version before */
- /* distributing by this channel. */
- /* HasProhibDate -- There is a date beyond which distribution */
- /* of this version by this channel is not */
- /* allowed. */
- /* HasAddlReqs -- There are additional requirements governing */
- /* distribution by this channel, in the */
- /* vidDistAddlReqs field. */
-
- /* Distribution Section (cont.) */
-
- /* SeeText -- There are additional requirements governing */
- /* distribution by this channel in the human- */
- /* readable portion of the VENDINFO.DIZ file. */
- /*-----------------------------------------------------------------*/
- #define vibDistProhib 0x00000001 /* d?mp b */
- #define vibDistAny 0x00000002 /* d?ma b */
- #define vibDistAnyAsp 0x00000004 /* d?maa b */
- #define vibDistAnyDisclose 0x00000008 /* d?mad b */
- #define vibDistAnyUG 0x00000010 /* d?mau b */
- #define vibDistAnyNonProfUG 0x00000020 /* d?man b */
- #define vibDistAnyConsult 0x00000040 /* d?mac b */
- #define vibDistAnyHardware 0x00000080 /* d?mah b */
- #define vibDistAnyRecFromAuth 0x00000100 /* d?mar b */
- #define vibDistNoIfAnyCharge 0x00000200 /* d?mna b */
- #define vibDistNoIfPerYear 0x00000400 /* d?mny b */
- #define vibDistNoIfPerProg 0x00000800 /* d?mnp b */
- #define vibDistNoIfPer360K 0x00001000 /* d?mnk b */
- #define vibDistNoIfPerCdrom 0x00002000 /* d?mnc b */
-
- /*----- The following fields are channel-specific, and are --------*/
- /*----- allowed to have overlapping values --------*/
- #define vibDistNoIfCdrom 0x00004000 /* d?mnr b */
- #define vibDistNoIfOtherMass 0x00008000 /* d?mno b */
- #define vibDistNoIfTargetBbs 0x00004000 /* d?mnb b */
- #define vibDistNoIfTargetDistrib 0x00008000 /* d?mnd b */
- #define vibDistNoIfTargetUser 0x00010000 /* d?mnu b */
-
- #define vibDistPermIfQual 0x00020000 /* d?mpq b */
- #define vibDistPermIfDisqual 0x00040000 /* d?mpd b */
- #define vibDistNoIfDisqual 0x00080000 /* d?mnd b */
- #define vibDistHiDensRequired 0x00100000 /* d?mh b */
- #define vibDistNotifVersRequired 0x00200000 /* d?mv b */
- #define vibDistSampleRequired 0x00400000 /* d?msr b */
- #define vibDistSampleRequested 0x00800000 /* d?msq b */
- #define vibDistRoyalty 0x01000000 /* d?mr b */
- #define vibDistHasContactDate 0x02000000 /* d?mdc b */
- #define vibDistHasProhibDate 0x04000000 /* d?mdp b */
- #define vibDistHasAddlReqs 0x08000000 /* d?mar b */
- #define vibDistSeeText 0x10000000 /* d?m?? ? */
-
- /* Distribution Section (cont.) */
-
- /*------------------specific-channel distribution data fields -----*/
- /* These constants indicate the meanings of the variables in the */
- /* vidData array. Definitions are: */
- /* PerYear -- subscription of membership charge made by */
- /* distributor to user, calculated on annual */
- /* basis no matter how charged, and expressed */
- /* in U.S. dollars. */
- /* PerProg -- charge made by distributor for individual */
- /* product, in U.S. dollars. */
- /* Per360K -- charge made by distributor to user by volume */
- /* of information conveyed, such as per */
- /* diskette or per download hour, calculated */
- /* on the basis of 360K units no matter how */
- /* charged, and expressed in U.S. dollars. */
- /* PerCdrom -- retail price of CD-ROM on which program is */
- /* distributed, in U.S. dollars. */
- /* ContactDate -- date after which distributor must contact */
- /* author for new version, or to verify that */
- /* this version is current, before initiating */
- /* any distribution of this product. */
- /* ProhibDate -- date after which all distribution of this */
- /* version by the indicated channel is */
- /* prohibited. */
- /*-----------------------------------------------------------------*/
- #define vivDistDataPerYear 0 /* d?dy n */
- #define vivDistDataPerProg 1 /* d?dp n */
- #define vivDistDataPer360K 2 /* d?dk n */
- #define vivDistDataPerCdrom 3 /* d?dc n */
- #define vivDistDataContactDate 4 /* d?dt s */
- #define vivDistDataProhibDate 5 /* d?dd s */
-
- /************************************/
- /* VENDINFO Main Record Structure */
- /************************************/
-
- /*---------------------------------- typedef viVendinfoRecord -----*/
- /* This is the fixed-length portion of the compressed data */
- /* record in VENDINFO.DIZ. It contains sections corresponding */
- /* to the various major categories of information in the record, */
- /* and ends with a single byte that indicates the type, if any, */
- /* of the first record extension. */
- /*-----------------------------------------------------------------*/
- typedef struct {
- viSectHeader head; /* 11 fields, 45 bytes */
- viSectProduct prod; /* 100 fields, 4271 bytes */
- viSectAuthor auth; /* 25 fields, 797 bytes */
- viSectOrder ordr; /* 46 fields, 1073 bytes */
- viSectPrices pric; /* 96 fields, 488 bytes */
- viSectSupport supp; /* 16 fields, 724 bytes */
- viSectGeneral genl; /* 23 fields, 571 bytes */
- viSectDistrib dist [ vivDistChanCount ]; /* 438 fields, 1261 bytes */
- byte viRecExtensionType; /* 1 byte */
- } viVendinfoRecord; /* 755 fields, 9231 bytes */
-
- /****************************************/
- /* Extensions to VENDINFO Main Record */
- /****************************************/
-
- /*--------------------------- record extension identifiers () -----*/
- /* The last byte of the fixed-length data record is a record */
- /* extension indicator. If its value is zero, the data record */
- /* has no extensions. Otherwise, the byte represents the type of */
- /* the first extension record, which begins in the next byte. */
- /* Each extension record is of fixed length, followed by a single */
- /* byte which is once again a record extension indicator. By */
- /* this means, any number of extensions, of potentially varying */
- /* types, are possible. At present, the only extension type is */
- /* that concerned with defining a distributor for a specific */
- /* geographical region. */
- /*-----------------------------------------------------------------*/
- #define vivRecExtensionNone 0
- #define vivRecExtensionRegionalDist 1
-
- /*------------------------------------ typedef viRegionalDist -----*/
- /* Multiple instances of this record can appear as record */
- /* extensions to the VENDINFO fixed-length data record. Each of */
- /* these represents information about a distributor authorized by */
- /* the author to represent the product in a specific geographical */
- /* area. These arrangements need not be exclusive. The point is */
- /* to make contact information available to potential customers */
- /* (and perhaps other distributors, if applicable) in the region. */
- /*-----------------------------------------------------------------*/
- typedef struct {
- char vidRegionCovered [ vivLenAddress ]; /* r?r s */
- char vidRegionAddress [ 6 ] [ vivLenAddress ];/* r?a t */
- char vidRegionPhone [ vivLenPhone ]; /* r?p s */
- char vidRegionFax [ vivLenPhone ]; /* r?f s */
- byte vidRegionMiscFlags; /* vibRegion... */ /* r?m? */
- word vidRegionPrice[2]; /* r?i? n */
- char vidRegionCurrency [ vivLenCurrency ]; /* r?c s */
- } viRegionalDist; /* 11 fields, 283 bytes */
-
- /*--------------------------------- regional distributor info -----*/
- /* vidRegionFlags contains several boolean variables defining */
- /* specific aspects of the service provided by the regional */
- /* distributor in his defined geographical region. */
- /*-----------------------------------------------------------------*/
- #define vibRegionHandlesSupport 0x0001 /* r?ms b */
- #define vibRegionHandlesSoleSupport 0x0002 /* r?mo b */
- #define vibRegionHandlesOtherDist 0x0004 /* r?md b */
- #define vibRegionHandlesPress 0x0008 /* r?mp b */
-
-
- /***************************************/
- /* VENDINFO Secondary File Structure */
- /***************************************/
-
- /*-------------------------------------- typedef viSectHeader -----*/
- /* Secondary VENDINFO records contain an abbreviated human- */
- /* readable text portion (as discussed earlier). Record */
- /* extensions are omitted. The entire fixed-length VENDINFO */
- /* record is included, in its usual, compressed form. This */
- /* allows automated processing of the individual distribution */
- /* packages independently of one another, while eliminating most */
- /* of the truly redundant information from the secondary records. */
- /*-----------------------------------------------------------------*/
-
- /******************************************/
- /* VENDINFO Executable Record Structure */
- /******************************************/
-
- /*------------------------------- executable record structure -----*/
- /* This is a short VENDINFO record that can optionally be added */
- /* to executable programs. It is created by the editor, and */
- /* either appended by the editor or output in source-includable */
- /* form. The processor can scan executables for the presence of */
- /* such records, and can detect some types of inappropriate or */
- /* illegal distributions. There is also a security feature that */
- /* allows the executable record to provide an extra layer of */
- /* security for the VENDINFO.DIZ record. Since the executable */
- /* record is INSIDE any security provided for the executable */
- /* program itself (e.g., a CRC check), this can be a substantial */
- /* form of protection against hacking or elimination of the */
- /* VENDINFO record itself, at a cost of four bytes. */
- /* */
- /* There are three different forms of the VENDINFO executable */
- /* record. There is a basic record, present in all cases. Then, */
- /* for products in the "Shareware, Restricted Distribution" */
- /* category, there is an additional section containing the */
- /* product's channel-specific distribution restrictions. This */
- /* second portion of the record can have either a very brief form */
- /* or a complete form, at the discretion of the author. */
- /*-----------------------------------------------------------------*/
-
- /*-------------------------------- typedef viExePrimaryRecord -----*/
- /* This portion of the record is always present. The last part */
- /* of this record contains four character strings. Those strings */
- /* are actually stored in byte-count-first form, and must be */
- /* extracted from the record dynamically. They are shown below */
- /* (in a comment) as if they were fixed-length fields, just to */
- /* make clear their meanings and length limits. As a concrete */
- /* example, the product name "InContext" would be stored starting */
- /* in the next byte after vidExeAuthentKeyVI, and would take 10 */
- /* bytes. The first byte would be the length of the string (9) */
- /* and the remaining 9 bytes would contain the string itself, */
- /* with no terminating null. */
- /* */
- /* The vidExeType field actually contains several pieces of type */
- /* and status information. It is a byte whose bit structure is: */
- /* 76543210 */
- /* x....... For shareware with distribution restrictions, */
- /* this bit indicates that the long version of the */
- /* distribution policy is included. */
- /* .x...... This bit indicates that this executable is not */
- /* to be distributed without an accompanying */
- /* VENDINFO.DIZ file. */
- /* ..x..... This bit indicates that this VENDINFO record */
- /* contains an authenticity key identifying the */
- /* accompanying VENDINFO.DIZ file. */
- /* ...xxxxx These bits indicate the product distribution */
- /* category in which this executable falls, as */
- /* outlined in the vidGenlDistType field in the */
- /* main VENDINFO record. */
-
- /* VENDINFO Executable Record Structure (cont.) */
-
- /* NOTE: if the author wishes to use an "executable branding" */
- /* scheme, to mark an evaluation version as registered when the */
- /* user enters a valid registration number, s/he need only change */
- /* the *5-bit* value of the distribution category field to */
- /* vivGenlTypeShareRegistered. Programs that interpret VENDINFO */
- /* records are required to correctly handle such records, even if */
- /* the remainder of the executable record is that normally seen */
- /* only for products in the vivGenlTypeShareRestricted category. */
- /* The author should make appropriate corrections for any CRC */
- /* or other security schemes protecting the executable. Note */
- /* also that the first three bits of the vidExeType field */
- /* should not be altered. */
- /*-----------------------------------------------------------------*/
- typedef struct {
- char vidExeViString[12];
- word vidExeViVersion;
- byte vidExeType;
- Date vidExeVersionDate;
- long vidExeCrc;
- long vidExeUserId;
- long vidExeAuthentKey1;
- long vidExeAuthentKey2;
- long vidExeAuthentKeyVI;
- char vidExeProdName[16];
- char vidExeVersion[5];
- char vidExeCompanyName[41];
- char vidExeQueriesPhone[20];
- } viExePrimaryRecord; /* 119 bytes */
-
- /*--------------------------------- typedef viExeDistribShort -----*/
- /* The brief version of the distribution record contains only a */
- /* single bit of information for each distribution channel. */
- /* That bit is obtainined by ORing the values, for the channel in */
- /* question, of vibDistProhib and vibDistPermIfQual. Thus, the */
- /* the bit is set if distribution is prohibited for the channel */
- /* or if all qualifying distributors are still required to */
- /* obtain written permission. The meaning of this bit is thus: */
- /* if you have written permission from the author, it's OK to */
- /* distribute by this channel; otherwise, it's not. If this bit */
- /* is *not* set, then it's simply not possible to determine from */
- /* this abbreviated information whether or not distribution is */
- /* OK. In order to convey substantially more detail about the */
- /* permissions, a good deal more information is needed, so */
- /* there's not a clearly useful alternative short of the full */
- /* distribution record. Most authors will probably choose the */
- /* long version, but this version is provided for those highly */
- /* concerned about the amount of information added to the */
- /* executable record. */
- /*-----------------------------------------------------------------*/
- typedef struct {
- word vidExeDistChanPermReqd;
- } viExeDistribShort; /* 2 bytes */
-
- /* VENDINFO Executable Record Structure (cont.) */
-
- /*---------------------------------- typedef viExeDistribLong -----*/
- /* The long version of the distribution record contains all the */
- /* information in the distribution section of the main record, */
- /* and the information is laid out in the same order. However, */
- /* the record is abbreviated because missing values are excluded, */
- /* and because strings, when present, are in byte-count-first */
- /* format. Specifically, the information about each channel */
- /* appears together, in the order indicated in viSectDistrib. */
- /* However, the six data values (vidDistData) and the */
- /* vidDistAddlReqs string appear only if the corresponding bits */
- /* (vibDistNoIfPerYear, vibDistNoIfPerProg, vibDistNoIfPer360K, */
- /* vibDistNoIfPerCdrom, vibDistHasContactDate, */
- /* vibDistHasProhibDate, vibDistHasAddlReqs) are on. */
- /*-----------------------------------------------------------------*/
- typedef struct {
- viSectDistrib dist [ vivDistChanCount ];
- } viExeDistribLong; /* 1261 bytes */
-
- /*****************************/
- /* Distribution Flag Masks */
- /*****************************/
-
- /*----------------------------------- distribution flag masks -----*/
- /* These words contain OR'd flags defining the applicability of */
- /* the distribution flags to the various distribution types. For */
- /* example, the "vidDistAnyConsult" flag is relevant to direct */
- /* installation of the product on the user's machine, but not to */
- /* BBS distribution. Tools that create or use VENDINFO.DIZ files */
- /* are required to use these masks to eliminate from */
- /* consideration any distribution flags that do not apply to the */
- /* particular channel. */
- /* */
- /* For clarity, the definitions of these flag masks are organized */
- /* in the following way, by line: */
- /* Prohibited */
- /* Qualifiers */
- /* Disqualifiers */
- /* Permission applicability */
- /* Hi-density/notification/catalog requirements */
- /* Royalties */
- /* Dates */
- /* Additional requirements */
- /*-----------------------------------------------------------------*/
- EXTERN long vidDistFlagMasks [ vivDistChanCount ]
- #ifdef VENDINFO_MAIN
- = {
- /* BBS */
- vibDistProhib +
- vibDistAny + vibDistAnyAsp + vibDistAnyDisclose + vibDistAnyUG +
- vibDistAnyNonProfUG + vibDistAnyRecFromAuth +
- vibDistNoIfAnyCharge + vibDistNoIfPerYear + vibDistNoIfPerProg +
- vibDistNoIfPer360K +
- vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
- vibDistNotifVersRequired +
- 0 +
- vibDistHasContactDate + vibDistHasProhibDate +
- vibDistHasAddlReqs + vibDistSeeText,
-
- /* BBS file-distribution net */
- vibDistProhib +
- vibDistAny + vibDistAnyRecFromAuth +
- vibDistNoIfCdrom + vibDistNoIfOtherMass +
- vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
- vibDistNotifVersRequired +
- 0 +
- vibDistHasContactDate + vibDistHasProhibDate +
- vibDistHasAddlReqs + vibDistSeeText,
-
- /* mail-order disk vendor */
- vibDistProhib +
- vibDistAny + vibDistAnyAsp + vibDistAnyDisclose + vibDistAnyUG +
- vibDistAnyNonProfUG + vibDistAnyRecFromAuth +
- vibDistNoIfPerProg + vibDistNoIfPer360K +
- vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
- vibDistHiDensRequired + vibDistNotifVersRequired +
- vibDistSampleRequired + vibDistSampleRequested +
- vibDistRoyalty +
- vibDistHasContactDate + vibDistHasProhibDate +
- vibDistHasAddlReqs + vibDistSeeText,
-
- /* Distribution Flag Masks (cont.) */
-
- /* CD-ROM other than BBS file-distribution network */
- vibDistProhib +
- vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
- vibDistAnyRecFromAuth +
- vibDistNoIfPerCdrom + vibDistNoIfPerProg + vibDistNoIfPer360K +
- vibDistNoIfTargetBbs + vibDistNoIfTargetDistrib +
- vibDistNoIfTargetUser +
- vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
- vibDistNotifVersRequired + vibDistSampleRequired +
- vibDistSampleRequested +
- vibDistRoyalty +
- vibDistHasContactDate + vibDistHasProhibDate +
- vibDistHasAddlReqs + vibDistSeeText,
-
- /* one-site rack vendor */
- vibDistProhib +
- vibDistAny + vibDistAnyAsp + vibDistAnyDisclose + vibDistAnyUG +
- vibDistAnyNonProfUG + vibDistAnyRecFromAuth +
- vibDistNoIfPerProg + vibDistNoIfPer360K +
- vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
- vibDistHiDensRequired + vibDistNotifVersRequired +
- vibDistSampleRequired + vibDistSampleRequested +
- vibDistRoyalty +
- vibDistHasContactDate + vibDistHasProhibDate +
- vibDistHasAddlReqs + vibDistSeeText,
-
- /* rack distributor */
- vibDistProhib +
- vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
- vibDistAnyRecFromAuth +
- vibDistNoIfPerProg + vibDistNoIfPer360K +
- vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
- vibDistHiDensRequired + vibDistNotifVersRequired +
- vibDistSampleRequired + vibDistSampleRequested +
- vibDistRoyalty +
- vibDistHasContactDate + vibDistHasProhibDate +
- vibDistHasAddlReqs + vibDistSeeText,
-
- /* book enclosure */
- vibDistProhib +
- vibDistAny + vibDistAnyRecFromAuth +
- 0 +
- vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
- vibDistHiDensRequired + vibDistNotifVersRequired +
- vibDistSampleRequired + vibDistSampleRequested +
- vibDistRoyalty +
- vibDistHasContactDate + vibDistHasProhibDate +
- vibDistHasAddlReqs + vibDistSeeText,
-
- /* subscription service */
- vibDistProhib +
- vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
- vibDistAnyRecFromAuth +
- vibDistNoIfPerYear + vibDistNoIfPerProg + vibDistNoIfPer360K +
- vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
- vibDistHiDensRequired + vibDistNotifVersRequired +
- vibDistSampleRequired + vibDistSampleRequested +
- vibDistRoyalty +
- vibDistHasContactDate + vibDistHasProhibDate +
- vibDistHasAddlReqs + vibDistSeeText,
-
- /* Distribution Flag Masks (cont.) */
-
- /* magazine cover disk */
- vibDistProhib +
- vibDistAny + vibDistAnyRecFromAuth +
- 0 +
- vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
- vibDistHiDensRequired + vibDistNotifVersRequired +
- vibDistSampleRequired + vibDistSampleRequested +
- vibDistRoyalty +
- vibDistHasContactDate + vibDistHasProhibDate +
- vibDistHasAddlReqs + vibDistSeeText,
-
- /* broadcast by TV/cable/satellite/etc. */
- vibDistProhib +
- vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
- vibDistAnyRecFromAuth +
- vibDistNoIfPerProg + vibDistNoIfPer360K +
- vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
- vibDistNotifVersRequired +
- vibDistRoyalty +
- vibDistHasContactDate + vibDistHasProhibDate +
- vibDistHasAddlReqs + vibDistSeeText,
-
- /* 1-900 phone-type service */
- vibDistProhib +
- vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
- vibDistAnyRecFromAuth +
- vibDistNoIfPerProg + vibDistNoIfPer360K +
- vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
- vibDistNotifVersRequired +
- vibDistRoyalty +
- vibDistHasContactDate + vibDistHasProhibDate +
- vibDistHasAddlReqs + vibDistSeeText,
-
- /* installation on user's machine by paid consultant, VAR, etc. */
- vibDistProhib +
- vibDistAny + vibDistAnyDisclose + vibDistAnyConsult +
- vibDistAnyHardware + vibDistAnyRecFromAuth +
- 0 +
- vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
- vibDistNotifVersRequired +
- vibDistRoyalty +
- vibDistHasContactDate + vibDistHasProhibDate +
- vibDistHasAddlReqs + vibDistSeeText,
-
- /* distribution by substantially different method */
- vibDistProhib +
- vibDistAny + vibDistAnyAsp + vibDistAnyDisclose +
- vibDistAnyRecFromAuth +
- 0 +
- vibDistPermIfQual + vibDistPermIfDisqual + vibDistNoIfDisqual +
- vibDistNotifVersRequired +
- vibDistSampleRequired + vibDistSampleRequested +
- vibDistRoyalty +
- vibDistHasContactDate + vibDistHasProhibDate +
- vibDistHasAddlReqs + vibDistSeeText
- }
- #endif
- ;
- #endif /* __VENDINFO_H */
-
- /****************************************/
- /* Standards Applicable to Programs */
- /* that Create or Use VENDINFO Records */
- /****************************************/
-
- /*------------------------------------------- tools standards -----*/
- /* This standard is mainly about the file format for VENDINFO.DIZ */
- /* files, with minor additional record-format information. It is */
- /* also important, though, to establish some common understand- */
- /* ings about tools. In some cases, these understandings serve */
- /* to clarify the division of responsibility between tools that */
- /* create VENDINFO records and tools that use them. In other */
- /* cases, these tools standards specify tools behavior necessary */
- /* to support the mutual understandings of the authors and the */
- /* distributors who use the VENDINFO system. */
- /* */
- /* Software developers who create tools that use VENDINFO records */
- /* can automatically satisfy most of these requirements by using */
- /* the standard VENDINFO software developer's library. */
- /* */
- /* This section is still under development, and will probably */
- /* be expanded in the final version. */
- /*-----------------------------------------------------------------*/
-
- /*------------------------------------------------ null bytes -----*/
- /* Tools that create VENDINFO records are required to place a */
- /* null value (0x00) in all unused bytes of the compressed */
- /* VENDINFO data record, in order to maximize the degree to which */
- /* the record can be compressed. This means, for example, that a */
- /* fixed-length string field would have a null byte indicating */
- /* the termination of the string, and additional null bytes as */
- /* necessary to fill out the string to its full, fixed length. */
- /* This also means that the default value for unused fields will */
- /* be all zeroes. */
- /*-----------------------------------------------------------------*/
-
- /*-------------------------------------------- implied values -----*/
- /* Wherever a value in one field implies a particular value for */
- /* another field, it is the responsibility of the creation tool, */
- /* and not the processing tool, to fill the second field with */
- /* that value. For example, if the value of the vibDistAny bit */
- /* is TRUE for a given distribution channel, the editor will also */
- /* set to TRUE the values of the vibDistAnyAsp bit, the */
- /* vibDistAnyDisclose bit, etc., since these values are implied. */
- /*-----------------------------------------------------------------*/
-
- /*-------------------------------------- equal values if same -----*/
- /* Whenever there is a provision for multiple sets of similar */
- /* values (minimum/maximum, minimum/full, required/recommended, */
- /* etc.), all values will be filled in in both sets, even if the */
- /* second set can be seen to be inapplicable. For example, if */
- /* there is only one registration price for a shareware product, */
- /* both the minimum and maximum viRegPkg structures will be */
- /* filled in, using identical values. */
- /*-----------------------------------------------------------------*/
-
- /*--------------------------------------------- known version -----*/
- /* The VENDINFO file structure may change from version to */
- /* version. Any processing tool is required to check the version */
- /* field, and to make no attempt to use the record if the version */
- /* is not "known" to the processor. An error message and a */
- /* distinct return code are recommended in most cases. */
- /*-----------------------------------------------------------------*/
-
- /* Standards Applicable to Programs (cont.) */
-
- /*-------------------------- testing for allowed distribution -----*/
- /* Any program which evaluates the author's distribution policy */
- /* for a particular channel is required to employ the following */
- /* algorithm: */
- /* */
- /* 1. Apply the channel's Distribution Flag Mask to that */
- /* channel's vidDistFlags field, eliminating from all */
- /* consideration those bits that do not apply to the */
- /* channel in question. (Also, editors that create the */
- /* record are required to apply this mask, insuring that */
- /* all irrelevant bits are set FALSE.) */
- /* */
- /* 2. Determine whether or not the distributor "qualifies", */
- /* based upon the distributor's explicit statements about */
- /* the proposed distribution. No assumptions are allowed */
- /* here. For example, in order to qualify via the */
- /* vibDistAnyDisclose approach, the distributor must */
- /* separately specify satisfaction of each of the defining */
- /* conditions (e.g., claims no ownership of product). */
- /* */
- /* 3. If the distributor "qualifies", test all the disqualify- */
- /* ing conditions specified by the author against the */
- /* distributor's explicit statements about the proposed */
- /* distribution. No assumptions are allowed here. For */
- /* example, if the author has specified a limit on */
- /* subscription fees (vivDistNoIfPerYear), the distributor */
- /* can satisfy this requirement only by specifying the */
- /* amount (even if zero) that s/he actually charges per */
- /* year. */
- /* */
- /* 4. If the proposed distribution still meets the */
- /* "qualifying" requirements, determine whether or not */
- /* written permission is still required; if the proposed */
- /* distribution lies outside the qualifying requirements, */
- /* determine whether or not the distribution is still */
- /* possible given written permission. If either of these */
- /* conditions applies and the distributor has not */
- /* indicated that s/he has written permission, report the */
- /* requirement for written permission. */
- /* */
- /* 5. In addition to any unsatisfied conditions reported as a */
- /* result of the preceding steps, report any additional */
- /* author conditions (e.g., notification required) that */
- /* cannot be seen to be inapplicable based on the explicit */
- /* statements by the distributor. */
- /*-----------------------------------------------------------------*/
-
- /*------------------------------- verification of information -----*/
- /* Any tool that creates VENDINFO records is required to provide */
- /* an active verification mechanism which gives feedback to the */
- /* author about the choices selected, and provides an opportunity */
- /* to notice unintended choices or consequences. This feature is */
- /* intended to increase the confidence with which a distributor */
- /* can use the resulting VENDINFO information, and to reduce */
- /* errors by authors. This mechanism may take various forms: */
- /* verification step in an interactive editor, a batch procedure */
- /* that prints out the file contents and is well documented and */
- /* recommended so the author is aware of the need to perform it, */
- /* etc. */
- /*-----------------------------------------------------------------*/
-
- /* Standards Applicable to Programs (cont.) */
-
- /*---------------------------------- authentication of record -----*/
- /* Any tool that processes VENDINFO records is required to test */
- /* the records for correct CRC values, authenticity, etc., and to */
- /* report failures in a detectable way, unless the user has */
- /* explicitly chosen to suppress such testing. */
- /*-----------------------------------------------------------------*/
-
- /*------------------------------------- other tools standards -----*/
- /* Standards for tools are also mentioned here and there through- */
- /* out the file-format portion of this standard. */
- /*-----------------------------------------------------------------*/