Format of CLARION .APP file:
- fixed header
- procedure bodies
- file descriptions
- procedure directory

Fixed header format:
000	W 5008
002	B flags? (87,07 seen)
003	L offset of first file definition
007	W 1 0
	  1 3
	  ^ ^- procedure count
	  +- file count (1-memory only)
00B	S[13] Base procedure name (blank fill)
018	S[79] help file name
067	S[79] model file name
0B6	S[31] (blanks) - reserved for application description?
0D5	end of the header

File definition format:
 - fixed header
 - fields in file
 - keys in file

File definition header:
	B 0, S[13] filename (e.g. "MEMORY", zero fill)
	S[2] drive (with terminating zero)
	S[60] pathname (blank fill, last zero)
	S[4] prefix (last zero)
	S[256] (zeros or blanks, last zero)
	B ?(0,5 seen)
	W (how many fields)
	W (how many keys? 3 when 1 key... 3 records used to describe it?)
Field definition format:
	W 1 (field type? 1-string, 2-dec, 3-byte, 4-short, 5-long)
	B[13] field name(zero or blank fill)
	W field size,0,0,0,0,decimals
	C[16] (zeros or blanks), B 0
	B[8] low value (R*8),B[8] high value (R*8) (even decimals!)
	B flags? (0,02h,28h,08h,...)
	B len(description),len(picture),0?,len(init value)
	B[*] description,B[*] picture,B[0?],B[*] init value
Key description record:
	S[13] name
	B ?,? - what these 2 bytes mean?

Immediately following last file definition:
	S[13] "procname"(terminated by zero, blank fill, last zero)
	S[31] description (last char zero),
	B type (1=menu,2=table,3=form,4=report?,5=other)
	L pointer - where info about the procedure is
	W length - the definition size,
	B 1(modified, Other is always modified) or 0(old).

R*8 format:	normalized, highest bit is sign, next 11 are used by
		exponent, remaining 52 are mantissa w/o highest bit;
		note negating a number changes its highest bit only!

E_BAZE_PROC  000D5..00139 (l=065)
E_MENU       0013A..00604 (l=4CB)
             (R=06h,C=22h,R=0Ah,C=30h, white on black)
E_TABLE      00605..00B50 (l=54C)
             (R=03h,C=34h,R=17h,C=41h, white on blue)
E_FORM       00B51..0175F (l=C0F)
             (R=08h,C=13h,R=12h,C=3Eh, white on blue)
E_BAZE_PROC_ 01760..017C4 (l=065)
E_MENU_      017C5..01C8F (l=4CB)
E_TABLE_     01C90..021DB (l=54C)
E_FORM_      021DC..02DEA (l=C0F)
F_MENU       02DEB..036B3 (l=8C9)
F_TABLE      036B4..04F15 (l=1862)

Procedure:
 -	type = Other
	"filename"(8 char, blank fill, and terminating zero),
	"No " (Binary), "No " (Return Value),
	C[6] Data Type name: "      ","Long  ","Real  ","String",
	6*S[13] procedure names (called in the file).
 - common header for Menu, Table and Form:
+000       B row0+fix_flag(80h if fixed),col0,row1,col1
+004       B color1,color2 (?)
+006       W field#, paint#
+00A       S[11] help id in ''
+015       S[13] model procedure name
+022       S[256] setup procedure
+122       S[13] combine with name
+12F       S[13]*6 hot key definitions 3*(key,proc)
+17D       end of header, remaining data depends on type:
 -	type = Menu, header followed by:
	screen field definitions and screen definition
 -	type = Table, header followed by:
	S[17] access key, S[256] update proc,
	S[256] filter expression, S[17] selector,
	screen field definitions and screen definition
 -	type = Form, header followed by:
	S[17] filename
	S[256] next proc
	3*S[9] related files
	screen field definitions and screen definition
 -	type = Report, (header? followed by?):

Screen field definitions:
	B type, row, col (coordinates on entire screen, not in window),
	B len, color1, color2 [select1, select2]
	type 01=entry: 8-byte field header (sometimes the byte before
	               last is 0) followed by
	               S[256] edit proc, S[17] variable name,
	               S[13] table hot key, e.g. AUTOMATIC,ENTER_KEY,
		       S[13] table procedure, S[17] file access key,
		       S[17] access key field, B[17] (zeros)
	type 03=locator: 6-byte header followed by S[17] name, B[17] 0
	type 04=display field: 6-byte header (last byte 4) followed by
	               S[17] variable name, B[17] 0
	type 05=computed field: 6-byte header, S[17] name (SCR:x),
	                        S[256] picture, S[256] expression,
	                        S[17] result field
	type 06=scrolling display: 6-byte header, S[17] name, 17*0
	type 07=scrolling computed: 6-byte header, S[17] name,
	                            S[256] picture, expression,
	                            S[17] result
	type 08=scrolling lookup: 6-byte header, S[17]: field to display,
	                          related field, file access key,
	                          new field name, access key field

	type 09=pause: 8-byte field header, S[13] edit proc
	type 0A=menu item: 8-byte field header followed by S[13] procname
	type 0F=conditional field: 6-byte header, S[17] name (SCR:x),
	                           S[256] picture, S[17] result,
	                           B l1,l2,l3, S[l1] expr,
	                           S[l2] 'true',S[l3] 'false'
	type 10=total: 6-byte header, S[17] name (SCR:x), S[256] picture,
	               S[256] type ("Count  ","Sum    ","Average")
	               S[17] field to total
	type 11=scrolling conditional: 6-byte header,
	                               S[17] name (SCR:x),
	                               S[256] picture, S[17] result
	                               B l1,l2,l3,S[l1],S[l2],S[L3]
	type 12=lookup field: 6-byte header, S[17]: field to display,
	                      related field, file access key,
	                      new field name, access key field
	type 13=choice field: 8-byte field header, B choice index
	                      S[17] variable name

Color specification:
 07 00 - normal
 FE 00 - normal
 07 02 - reversed
 FE 02 - reversed
 07 04 - enhanced
 FE 05 - blink yellow on white
 FE 08 - blink
 1E 03 - yellow on blue
 5A 0B - light green on magenta
 29 03 - light blue on green
 39 09 - light blue on cyan
 1B 03 - light cyan on blue
 2F 09 - bright white on green
 78 03 - gray on white
 3E 09 - yellow on cyan
 0E 09 - yellow on black
 1E 09 - yeallow on blue
 34 09 - red on cyan
 34 00 - normal
(second byte bit flags: 1=first byte is color; 2=reverse;
4=enhanced; 8=blink; 20h=transparent; seems other not used)

Scrolling fields:
- (lookup: f. to displ, new f. name, file acc key, acc k. f. related f.)
- conditional: (7,30,30) name SCR:MSG, pic S30, cond MEM:MESSAGE='',
               T:'* no message *', F:MEM:MESSAGE, result SCR:S7.
Lookup field: Field to display T1:S, new f. name SCR:S, file
              access key T1:KL, access key field T1:L, related
              f. MEM:B, attribute normal; T1:D,SCR:D,T1:KL,T1:L,
              MEM:L, reversed.
Display field: MEM:MESSAGE, normal/enhanced/blink yellow on white
Computed field: name SCR:CFx, picture S3, expression mem:message,
                result MEM:L, attribute reversed/blink
Conditional field: name SCR:VF, pic S30, cond MEM:L=0, result MEM:B

Entry field (F_TABLE): (5,18,30) name MEM:S_255, edit F_T_ENT_E, attr
                       normal, select yellow on blue, file lookup yes,
                       file access key T1:KL, access key field T1:L,
                       table procedure F_LOOK_TABLE, hot key AUTO;
                       (5,49,3) MEM:B, F_T_ent_e, light green on
                       magenta, light blue on green, file lookup yes,
                       T1:KL, T1:L, F_LOOK_TABLE, ENTER_KEY;
                       (5,53,1) MEM:D, f_t_ent_e, light blue on cyan,
                       light cyan on blue, file lookup yes w/o table;
                       (5,55,1) T1:B, f_t_ent_e, bright white on
                       green, gray on white, no file lookup.
Locator field (F_TABLE): (5,57,3) name T1:L, yellow on cyan.
Display field (F_TABLE): (6,18,6) name MEM:W, attr yellow on black.
Computed field (F_TABLE): (6,25,6) name SCR:CF1, pic S6, expr MEM:W+1,
                          result MEM:W, attr yellow on blue.
Conditional field (F_TABLE): (6,32,5), name SCR:VF, pic S5, condition
                             MEM:MESSAGE='', T:'empty', F:'*full'
                             result field (none), attrib red on cyan.
Total field (F_TABLE): (6,38,5), type Count, field to total T1:S,
                       new f. name SCR:TF, pic N_5, attr normal;
                       (6,44,8), Sum, T1:L, SCR:TFS, N_8, normal;
                       (6,54,12), Average, T1:L, SRC:TFA, N_12.3;
Scrolling fields:
- display: (7,18,3) name T1:L
- (lookup: f. to displ, new f. name, file acc key, acc k. f. related f.)
- computed: (7,22,7) name SCR:S7, pic S7, expr S_255, res SCR:CF1
- conditional: (7,30,30) name SCR:MSG, pic S30, cond MEM:MESSAGE='',
               T:'* no message *', F:MEM:MESSAGE, result SCR:S7.
Painting: (4,18..63,white on black), (23,16..65,gray on green).

Screen definition:
	Paintings,each: B row_min,row_max,col_min,col_max,color,01
	                (last byte 21h - transparent area)
	B 01, screen image (repeated data compressed by using
	prefix FF before repeated char and count after it),
	B 01, screen colors (again data compressed same way),
	B 01, (compressed data of screen size, were all 0-s, seems
	       only in case track has same color as screen, otherwise
	       the data is 3 on track, 0 elsewhere)

Report procedures:
RPT_L: 1781 l=04BD
TR1,M: 253B l=04C6
TR2,F: 2A01 l=04C8
       2EC9 l=0372
+000,+2 B ? (was 1 or 51h)
+001    B page length
+003    B 50h (width)
+004    B 0,0
+006    W fields on screen
+008    W (1+lines on report design screen)
+00A    S[11] always was 0 (help id)
+015    S[13] model proc
+022    S[256] setup
+122    S[13] combine with
+12F    W report line of cursor (top=2)
+131    B screem line of cursor (top=1)
+132    S[17] record selector
+143    S[6]? report device "Yes"/"No" (zero fill)
+149    S[17] access key
+15A    S[256] record filter
+25A    end of header
report fields:
 6-byte field header, first byte is type;
 type 0B=field, header followed by S[17] name, B[17] 0
report lines (first is empty, not shown on screen):
 W length of record (not counting the length word),
 W type (some standard lines have assigned types: 1=title,
  2=pg hdr, 3=body, 4=totals, 5=pg end, 6=gr hdr, 7=gr end)
 C[length-2] data to the line (string terminated by zero,
  can be two strings, first left justified, second centered,
  or fields encoding may follow: B 80h, flags, and repeated
  { col, lng, W field_index (1..max)} for each field in line).
