<!SGML  "ISO 8879:1986" 
--  			       hform.dtd 
  ============================================================================= 
                              Version 1.2 
 
  This is the SGML declaration *and* DTD to be used with Hform files. 
  Hform's are interpreted by the rpm http server.  What is and what isn't 
  allowed is hardcoded into the rpm program.  This DTD allows you to validate 
  your Hform file *before* you send it to rpm, to make sure you're not 
  feeding it something bogus.  You do not have to understand the syntax of 
  this file to be able to make use of it! 
 
  It's easiest to teach computers the syntax of an hform with this here 
  file, but for humans, here would be a better place to look: 
 
       http://rpm.cfht.hawaii.edu/RPM/HForm/index.html 
 
  To verify a file with this Hform dtd, you need "nsgmls" from www.jclark.com, 
  or some other SGML validator that understands the various options given in 
  the SGML declaration below.  Either from the command line, or in emacs (to 
  make use of emacs' parsing of the error messages) you can "compile" with: 
 
		   nsgmls -s hform.dtd yourfile.rpm 
 
  ============================================================================= 
-- 
			       CHARSET 
	BASESET	  "ISO 646:1983//CHARSET 
                  International Reference Version (IRV)//ESC 2/5 4/0"  
        DESCSET   0   9 UNUSED	  9   2 9 
                  11  2 UNUSED	 13  1 13 
		  14 18 UNUSED	 32 95 32 
                 127  1 UNUSED 
	CAPACITY SGMLREF	TOTALCAP 150000		GRPCAP 150000 
	SCOPE    DOCUMENT 
	SYNTAX 
        SHUNCHAR CONTROLS  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 
                           19 20 21 22 23 24 25 26 27 28 29 30 31 127 255 
        BASESET  "ISO 646:1983//CHARSET 
                  International Reference Version (IRV)//ESC 2/5 4/0" 
        DESCSET  0 128 0 
        FUNCTION RE 13  	   RS 10   	SPACE 32	 TAB SEPCHAR 9 
        NAMING   LCNMSTRT "_"	   UCNMSTRT "_" 
		 LCNMCHAR ".-[]/"  UCNMCHAR ".-[]/" 
                 NAMECASE GENERAL  YES	        ENTITY   NO 
        DELIM    GENERAL  SGMLREF  STAGO "{"    ETAGO    "{/"    TAGC     "}" 
  		 SHORTREF SGMLREF 
        NAMES    SGMLREF 
        QUANTITY SGMLREF 
                 NAMELEN 100	TAGLVL   100	LITLEN   1024	GRPGTCNT 150 
                 GRPCNT   64 
 
			       FEATURES 
       MINIMIZE	 DATATAG  NO	OMITTAG  YES	RANK      NO	SHORTTAG YES 
       LINK	 SIMPLE   NO	IMPLICIT  NO	EXPLICIT  NO 
       OTHER	 CONCUR   NO	SUBDOC    NO	FORMAL   YES 
 
			     APPINFO NONE 
 
-- end of sgml declaration --> 
 
<!DOCTYPE Hform [ 
 
<!-- ******** Value-types that the various attributes accept ******** --> 
 
<!ENTITY % VAR		'ID'						> 
<!ENTITY % VARREF	'IDREF'						> 
<!ENTITY % LOC		'CDATA'						> 
<!ENTITY % METHOD	'(env|opt|longopt|par|rpm|genh|status)'		> 
<!ENTITY % FLOAT	'NMTOKEN'					> 
<!ENTITY % INTEGER	'NUMBER'					> 
<!ENTITY % STRING	'CDATA'						> 
<!ENTITY % URL		'CDATA'						> 
 
<!-- 
        ******************** Global Tags ******************** 
 
  Every {Hform} must contain a {Head} section, and then a {Body} section. 
  The {Include} tag may apear anywhere in the document, although the 
  validator will not open the included file (or URL) to for testing. 
--> 
 
<!ELEMENT Hform - - (Head, Body)					> 
<!ELEMENT Include - o EMPTY       -- allowed in the Head AND the Body --> 
<!ATTLIST Include 
	file	%STRING; #IMPLIED -- include file local on the server -- 
	src	%URL;	 #IMPLIED -- or fetch a file from another URL --> 
 
<!-- 
        ******************** {Head} Section ******************** 
 
  The {Head}...{/Head} section of an Hform contains all the information 
  that the parser would need to initialize variables and allocate space. 
  In addition, the required {Window}...{/Window} section within the Head 
  contains all the information (either in its attributes or the in text 
  contained by the tags) that the hform program needs. 
--> 
 
<!ELEMENT Head  - o (Window, Meta*, CardDef*, Private?, Public?)	> 
 
<!ELEMENT Window - - (#PCDATA)     -- title bar string for hform --	> 
<!ATTLIST Window 
	refresh %INTEGER; #IMPLIED -- is the form self-updating? -- 
	width	%INTEGER; #IMPLIED -- window size (pixels)       -- 
	height	%INTEGER; #IMPLIED -- window size (pixels)       --	> 
 
<!ELEMENT Meta - o EMPTY -- allows document to add an http header --	> 
<!ATTLIST Meta 
	name	%STRING;	#REQUIRED 
	content	%STRING;	#IMPLIED				> 
 
<!ELEMENT CardDef - o EMPTY -- card tab definition                 --   > 
<!ATTLIST CardDef 
	id	ID		#REQUIRED 
	label	%STRING;	#IMPLIED 
	help	%STRING;	#IMPLIED				> 
 
<!ELEMENT Public - o ((Var*, Action+) & Include*)			> 
<!ELEMENT Private - o (Var+ & Include*)					> 
 
<!ELEMENT Var - o EMPTY -- variable declaration and initialization --	> 
<!ATTLIST Var 
	name	  %VAR;		#REQUIRED 
	pubName	  %STRING;	#IMPLIED -- (if different from name) -- 
	value	  %STRING;	#IMPLIED 
	loc	  %LOC;		#IMPLIED -- sticky -- 
	method	  %METHOD;	#IMPLIED -- sticky -- 
	prefix	  %STRING;	#IMPLIED -- add prefix to all names -- 
	min	  %FLOAT;	#IMPLIED 
	max	  %FLOAT;	#IMPLIED 
	maxLength %INTEGER;	#IMPLIED 
        delim     %STRING;      #IMPLIED 
	type	(integer|float|string)	string				> 
 
<!ELEMENT Action - o (Set* | Load* | Save* | Exec* | Transmit*)+  
                                          -- contain action sequences --> 
<!ATTLIST Action 
	id	ID		#REQUIRED 
	default	(default)	#IMPLIED 
	onGet	(onGet)		#IMPLIED				> 
 
<!ELEMENT Set - o EMPTY -- change the value of a Var --                 > 
<!ATTLIST Set 
        name      %VARREF;      #REQUIRED 
        value     %STRING;      #REQUIRED                               > 
 
<!ELEMENT (Load|Save) - o EMPTY -- action items --			> 
<!ATTLIST (Load|Save) -- see Var attlist -- 
	name	%VARREF;	#IMPLIED 
	pubName	%STRING;	#IMPLIED 
	value	%STRING;	#IMPLIED 
	loc	%LOC;		#IMPLIED 
	method	%METHOD;	#IMPLIED 
	prefix	%STRING;	#IMPLIED				> 
 
<!ELEMENT Exec - o EMPTY                                                > 
<!ATTLIST Exec 
	loc	%STRING;	#REQUIRED 
	method	%METHOD;	#IMPLIED				 
        stdout  %STRING;        #IMPLIED -- === default is "parse" -- 
        stderr  %STRING;        #IMPLIED -- === default is logonly -- 
        demo    (demo)          #IMPLIED				> 
 
<!ELEMENT Transmit - o EMPTY                                            > 
<!ATTLIST Transmit 
	filename %STRING	#IMPLIED 
	content-type %STRING	#IMPLIED				> 
<!-- 
        ******************** {Body} Section ******************** 
    
  The {Body}...{/Body} section of an Hform is parsed everytime the form 
  is updated.  The types of tags that can appear in the Body section are 
  divided into the categories below: 
--> 
 
<!ENTITY % conds "CardFile|Custom|Force|If" 
    -- 
    All of these must have ending tags.  There can be multiple help 
    sections.  In this case all blocks of help text will be displayed 
    whenever help is turned on. 
    --> 
 
<!ENTITY % disps "Icon|Option|Value|Img" 
    -- 
    These display the value of a variable, or a corresponding icon for 
    a variable, or a corresponding option (description) for a variable's 
    current state. 
    --> 
 
<!ENTITY % widgets "Checkbox|Delta|Entry|Hidden|Menu|FileMenu|Radio|Subimg|Submit|PSM" 
    -- 
    These sort of parallel the parameters given to the TYPE= attribute of 
    the HTML INPUT tag. 
    --> 
 
<!ENTITY % butts "Apply|Reset|Cancel|Close|Open|Help" 
    -- 
    These appear inside a "Buttons" tag and generate the standard pegasus 
    button panel. 
    --> 
 
<!ENTITY % text "#PCDATA"						> 
<!ENTITY % main "%text; | %conds; | %disps; | %widgets; | Include"	> 
 
<!ELEMENT Body  - o ((%main;) | Buttons?)*				> 
<!ATTLIST Body 
	bgcolor	%STRING;	#IMPLIED 
	text	%STRING;	#IMPLIED 
	alink	%STRING;	#IMPLIED 
	vlink	%STRING;	#IMPLIED 
	link	%STRING;	#IMPLIED 
	background %STRING;	#IMPLIED				> 
 
<!--      ******************** Conditionals ********************      --> 
 
<!ELEMENT If	- -	((%main;)* , Else?)				> 
<!ELEMENT Else	- o	(%main;)*					> 
<!ELEMENT Custom - -	(%main;)*					> 
<!ELEMENT Force	- -	(%main;)*					> 
 
<!ATTLIST (Custom|If) 
	var		%VARREF;	#REQUIRED			> 
 
<!ELEMENT Card - o	(%main;)*					> 
<!ATTLIST Card 
	id		IDREF		#REQUIRED			> 
 
<!ELEMENT CardFile - -  (Card+)						> 
<!ATTLIST CardFile 
	font		%STRING;	#IMPLIED			> 
 
<!--      ******************** Displays ********************	      --> 
 
<!ELEMENT Value	- o	EMPTY						> 
<!ATTLIST Value 
	var		%VARREF;	#REQUIRED			> 
 
<!ELEMENT Option - o	EMPTY						> 
<!ATTLIST Option 
	var		%VARREF;	#REQUIRED 
	choices		%STRING;	#IMPLIED -- default: VARNAME    -- 
	prefix		%STRING;	#IMPLIED -- sticky, same as Menu-- 
	postfix		%STRING;	#IMPLIED -- sticky, same as Menu-- 
	value		%STRING;	#IMPLIED -- override, this only --> 
 
<!ELEMENT Icon - o	EMPTY						> 
<!ATTLIST Icon 
	var		%VARREF;	#IMPLIED 
	src		%URL;		#IMPLIED -- instead of var         -- 
	choices		%STRING;	#IMPLIED -- default: "VARNAME_icon"-- 
	prefix		%STRING;	#IMPLIED -- sticky                 -- 
	postfix		%STRING;	#IMPLIED -- sticky                 -- 
	width		%INTEGER;	#IMPLIED -- default: 35, sticky    -- 
	height		%INTEGER;	#IMPLIED -- default: 35, sticky    -- 
	base		%URL;		#IMPLIED -- sticky                 -- 
	ext		%STRING;	#IMPLIED -- default: "gif", sticky -- 
	value		%STRING;	#IMPLIED -- overrid, this only     --> 
 
<!ELEMENT Img - o       EMPTY						> 
<!ATTLIST Img 
	id		IDREF		#REQUIRED 
	nocache		(nocache)	#IMPLIED 
	width		%INTEGER;	#IMPLIED 
	height		%INTEGER;	#IMPLIED 
	alt		%STRING;	#IMPLIED 
	align		%STRING;	#IMPLIED			> 
	 
<!--      ******************** Widgets ********************           --> 
 
<!ELEMENT (Checkbox|Delta|Entry|Hidden|Radio) - o (#PCDATA)		> 
 
<!ATTLIST (Radio) 
	var		%VARREF;	#REQUIRED 
	onChange	IDREF		#IMPLIED -- default: none       -- 
	option		%STRING;	#REQUIRED -- 
          option contains the the value that var gets whenever this 
          radio button is checked. --					> 
 
<!ATTLIST (Checkbox|Hidden) 
	var		%VARREF;	#REQUIRED 
	onChange	IDREF		#IMPLIED -- default: none      --> 
 
<!ATTLIST (Entry) 
	var		%VARREF;	#REQUIRED 
	onChange	IDREF		#IMPLIED -- default: none       -- 
	size		%INTEGER;	#IMPLIED -- sticky, see maxLength --> 
 
<!ATTLIST (Delta) 
	var		%VARREF;	#REQUIRED 
	size		%INTEGER;	#IMPLIED -- sticky, see maxLength -- 
        deltaval        %FLOAT;         #IMPLIED -- default +/- increment --> 
 
<!ELEMENT Menu - o EMPTY						> 
<!ATTLIST Menu -- see Option for comments -- 
	var		%VARREF;	#REQUIRED 
        multiple        (multiple)      #IMPLIED 
	onChange	IDREF		#IMPLIED -- default: none       -- 
	choices		%STRING;	#IMPLIED			 
	prefix		%STRING;	#IMPLIED -- sticky, same as Option -- 
	postfix		%STRING;	#IMPLIED -- sticky, same as Option --> 
 
<!ELEMENT Buttons - o (%butts; | Submit | %conds;)*			> 
 
<!ELEMENT Submit - o EMPTY						> 
<!ATTLIST Submit 
	id		IDREF		#REQUIRED -- see also: Action tag -- 
	label		%STRING;	#IMPLIED  -- either put some text -- 
        fork            (fork)          #IMPLIED  -- doesn't reload screen -- 
	image		%STRING;	#IMPLIED  -- or picture on button --> 
 
<!ELEMENT (%butts;) - o	EMPTY					> 
<!ATTLIST (%butts;) 
	label		%STRING;	#IMPLIED 
	confirm		(confirm)	#IMPLIED 
	fake		(fake)		#IMPLIED			> 
 
<!-- end of hform.dtd --> 
]>