### The Program Manager Eternity Edition Manual. (Extremely Rough Draft)

System Requirements:

	FreeDOS v1.1 Compatible Operating System
	1024K Free Disk Space.
	640K Memory (400K Free, 500K free is really, really, really recommended).
	VGA Compatible Video Card. 
	286 or Better CPU.
	Keyboard. 
	(Mouse is highly recommended, and when using default theme and keymap
	settings it is required).
	(Color monitor is recommended).
		
Known Issues (That I either can not or will not do anything about):
	
	Font's turned into TSRs with QFNT2TSR will not function in DosBox.
	Sounds cannot be heard in VMware.
	QScroll Smooth scrolling doesn't work in VMware.
	ATOM screen saver will not work in DosBox fullscreen mode.

To-Do (Sooner or later, maybe):
	
	Custom Color DAC Support.
	Menu Path Drive Scanning for Disc Insertion.
	User Interface Support for PGMVars.
	Option Sets and Option prompting before launching.
	Other Utilities.
	Some Theme and Font stuff.

Building PGME from source requires:
	
	PGME source trunk from http://pgme.sourceforce.net
	QuickCrt source trunk from http://quickcrt.sourceforge.net 
	( QuickCrt should be placed inside the PGME source file directory root)
	DOS compatible OS. FreeDOS or DosBox is fine.
	Borland Turbo Pascal 7.0. 
	Borland BCC Make (included with TP7)
	Run BUILD.BAT
	
By default, QuickCRT based programs: 
(These maybe changed in a custom KMP file)

	Alt-W closes a window and if it the main window the program will close.
	Alt-Q quits the program.
	Alt-H Shows a help screen.
	Alt-H, then Alt-H to Show Program's main Help Screen.

** REQUIRED FILES **

	PGM.EXE			The Program Manager Eternity Launcher.
	ETERNITY.BIN	Binary blob that contains most of PGME's program code.
	
** SUPPORTING FILES **

	ETERNITY.CFG	PGME's configuration file.
	EFNTDSGN.EXE	QuickCRT Font Designer. 
	EFNTDSGN.CFG	QuickCRT Font Designer configuration file.
	BLANKER.SCR		Screen Blanking Screen Saver for PGME.
	ATOM.SCR		The "Atom" screen saver for PGME.
	
** EXTRA UTILITIES **

	QFNTLOAD.EXE	QuickCrt Temporary Font Loader. Load use any size custom 
					font until the next video mode reset. 
	QFNT2RAW.EXE	Convert a QuickCRT font to a flat stripped-down raw 
					binary image contains only the character data from the 
					font. Losing all of the metadata and safty checks built 
					into a QuickCRT Font file.
	RAW2QFNT.EXE	Convert a raw flat binary into a QuickCRT font file.
	QFNT2TSR.EXE	Convert a QuickCRT font file into a Terminate-and-Stay-
					Resident executable COM program that will persist until
					the computer is rebooted. Use this to permanently load
					youe own fonts to use with DOS prompt and most Text-Mode
					programs. Please note, it will allow you to turn any FNT
					into a TSR. However, I have never seen a VGA system that
					will use any font that is not 8x16 using this technique. 
					But, you never know so it will complain and still make 
					the TSR font. 
	QDETUNE.EXE		(Not yet started) Program to aid in creating program tone
					sequences.
	QKEYS.EXE		(Not yet started) Program to aid in modifing keyboard and
					command mappings in KMP files.
	QSCROLL.EXE		Smooth scrolling text file viewer. Supporting, various
					character heights and DOS/UNIX line endings. Any keypress
					other than UP, Down, PageUp or PageDown quits the program.
	QCNFTOOL.EXE	Command line utility for manipulating PGME text based data
					files. Such as the MNU, CFG, THM, LNG, KMP and PMI files.
					These files are similar to, but very different from, a
					Windows INI file and this tool should not be used on 
					those types of files. For basic usage of QCNFTOOL see
					below. 

** FONT FILES **

	*.FNT			All Files ending in the *.FNT extension.
	
** QCNFTOOL.EXE **
					Basic usage of QCNFTOOL. First, please note that if you
					do not issue a /W or /X (/WRITE or /EXPORT) command, no
					changes or files will be written to disk.
					
					The output file. When this utility starts, the output 
					filename is unassigned and if a /W or /X comand is 
					issued the "NONAME.CFG" filename will be used. However,
					the first file you /READ will set the output name
					to the same filename that is read. Any future changes to
					the output filename will reguire setting it using the 
					/OUTPUT switch.
					
					Also to issue many or extremely long commands, us the
					/FILE option. The file will be process the same as one
					single set of commands. See the incleuded KIOSK.OFF and 
					KIOSK.ON files for an example. 
					
	
** TEMPLATE and Config files files***

	TEMPLATE.*		All files the start with TEMPLATE regardless of there
					extension.
					
					These are auto-generated at compile time using the
					defaults that are built into their respective programs. 
					For *.THM (Theme) and *.LNG (Language) files, you should 
					remove any item you do not wish to override. This can help
					speed up performance when the program starts. *.KMP 
					(Keyboard Mapping) files are a little different. If it is
					present, all items you wish to work in the ASSIMILATE and
					COMMAND sections must be present. Other sections in a KMP
					file can be removed.
			
					Also, the * section should be included. But, at present is
					not required.
			
					The # section is ignored. 
					
					Value entries are a single line and everything (including
					white-spaces) after the = symbol is part of the value.
					However, there are some multi-line entries. Simply put, a
					+= adds a line to the previous value. Only value's that
					support multi-line entries will use the extra lines.
					
					One more general note on these files. In the * section is 
					a MERGE entry. If it has a value, then that file is merged
					over the current and any values in the new file will
					override previous values. There is no limit on how many
					merges can take place. I don't recommend doing more than a
					couple. Anyhow, the final merge will be considered the
					actual config file and if it is	saved then all settings
					will be written only to it. In theory, all real config
					files could reside on a read-only filesystem and user
					changes written to a different one.
					
					
					Oh, another thing. Indent's and blank lines don't matter
					and any KEY or section it doesn't understand is ignored.
					
** A KMP Keymap file **
	
	ASSIMILATE Section ( I may move this section out of this file )
				
		This section contains an extremely low level keyboard scancode mapping
		table. You probably shouldn't mess with it unless you have a weird
		keyboard. Anyhow, all keys should translate to their basic value. For
		example take the letter a has the scancode of $0061. All possible
		combinations of Shift, Control and Alt must be mapped to $0061. So, 
		the line $0061=$0041:A,$0001:C+$0104,$1E00:A does just that. Broken
		down like this:
		
			target=original:mode+shiftcode,....
			
			Target is the desired code.
			Original is the incoming original code.
			Mode is the matching algorithm used. 
				(A, M, or C for Any, Match or Contains)
			Shift is the original shiftcode to match.

		Any will result in a match regardless of the shiftcode state.
		Match will only match if it is exactly the same shiftcode.
		Contains will match if it contains any of the bits in the shiftcode.
		
		The shiftcode values should be or'd together into a hex value. 
		
		They are:
		
			kbRightShift  = $0001;
			kbLeftShift	  = $0002;
			kbEitherShift = kbRightShift or kbLeftShift;
			kbEitherCtrl  = $0004;
			kbEitherAlt	  = $0008;
			kbScrollLock  = $0010;
			kbNumsLock	  = $0020;
			kbCapsLock	  = $0040;
			kbInsertLock  = $0080;
			kbLeftCtrl	  = $0100;
			kbLeftAlt	  = $0200;
			kbSysDown	  = $0400;
			kbPauseFlag	  = $0800;
			kbScrollDown  = $1000;
			kbNumsDown	  = $2000;
			kbCapsDown	  = $4000;
			kbInsertDown  = $8000;

	COMMANDS Section
			
			This section does a low level direct map of some keystroke
			combinations straight to commands and can be used to change some
			default behavior of the program. It works like the key mapping
			Assimilate section. But, it is for direct key to command mapping.
			For example you could use this section to change the Quit from
			using Alt+Q to use Alt+X. FYI, for best result use the +M for
			exact matching. 
			
	EVENTS Section
			
			When an object in the program is clicked it will generate these
			commands when triggered.
			
	KEYSTROKES Section
	
			An Object will respond to keystrokes listed here.
						
** A LNG Language File **
		
	Should mostly be self evident by now.  Except for formatting values.
	
			FileDate
				0 : 4-digit year
				1 : Month
				2 : Day
			FileTime:
				0 : 24-hour Clock Hour
				1 : 12-hour Clock Hour
				2 : Minutes
				3 : Seconds
				4 : 0/1 (False/True) AM or PM

	Formatted strings are Formatting data ; then string to display.
	
	Example '0[Z2.1,C10]{One,Two,Three},1[U,C10,X1-10,T],0[L5,Z3];Hi %2%1%0!'

		0-9 Value to use
		[] Formating Options
		{} String Set, if value is not in set than value is used 
			{boolean & integer}
		Z ZeroPad Before.after decimal point { integer & real }
		T Trim Spaces from string (before padding or cutting) 
		C, L or R Space padding Center, Left and Right
		X Crop string to not excede Specified Length.{if it is n.c then n is
			start c is count}
		U, D or W Change Case to Upper, Lower or by Words
	
		; ends format definitions and begins string to format
		%0-9 Format definition to insert. 

					
** A THM Theme File **
		
	ALIGN Caption Text Alignment. 
		High Byte is Horizontal Alignment, Lo Byte is Vertical Alignment.  
			Top		$0000
			Middle	$0001
			Bottom	$0002
			Left	$0000
			Center	$0100
			Right	$0200
				
	ANCHORS Control Anchoring and Alignment.
	
		Use care when Mixing Anchors and Alignment within the same value.
			
			Anchors:
			abNone	 = $0000;
			abLeft	 = $0001;
			abRight	 = $0002;
			abTop	 = $0004;
			abBottom = $0008;
			abAll	 = abLeft or abRight or abTop or abBottom;
			
			Alignment:
			alNone	 = abNone;
			alLeft	 = $0100;
			alRight	 = $0200;
			alTop	 = $0400;
			alBottom = $0800;
			alClient = alLeft or alRight or alTop or alBottom;
	
	DISPLAY Usually a hex string that is used by an object for its display.
	
	COLORS The main colors of an object.
	
		Note: Buttons and several other objects will not function if their
		Normal and Hover colors are the same.

		Comma Separated in this order. Normal, Disabled, Hover, Click, 
		and Focused.

	BOUNDS The position of a child object based on it's parent.
	
	OUTSIDE When True, the object can been drawn outside of it parent.
		Otherwise, it cannot. Bounds are still relative to its parent.
		
	MARGINS The amount a child will need to be indented.

** A CFG Config Files **

	The Programs Section:
	
		CLEAR,	Clear the screen prior to program drawing.
	
		USE_DAC, Use the VGA color DAC pallet. (May have compatiblility 
		issues)
		
		USE_FADER, When USE_DAC is also true, fades the color pallete in and
		out at startup and shutdown of the program.
	
		USE_SOUND, Allows PC Speaker tones to be generated.
	
** ETERNITY.CFG File, Special Options **
	
	CANQUIT, Unless this is installed in a KIOSK, leave it True. If it is
		false, you can only launch other programs and return to PGME. You will
		not be able to exit PGME to a command prompt.
		
	READONLY, This option is probably only usefull for a KIOSK as well. If 
		PGME is running in readonly mode, menus cannot be modified.
		
	PATH.MENU, Like the DOS PATH environment variable, this is the locations
		that PGME will search for and include menus from. If left blank, only
		the path of the PGME program will be searched. If it is set, only the
		specified fixed disk locations will be included. Probably not usefull
		unless PGME is installed to and run from a readonly filesystem.

** Language Translations and other Credits **
	
	PGME's native language is US English. However, here are some credits
	for the included language translations. 
	
	Spanish:
		Google Translate, German Ivani, Andrs Miguel Pitcovsky

