Index: ossp-pkg/tabea/tabea-brainstorming RCS File: /v/ossp/cvs/ossp-pkg/tabea/tabea-brainstorming,v co -q -kk -p'1.1' '/v/ossp/cvs/ossp-pkg/tabea/tabea-brainstorming,v' | diff -u /dev/null - -L'ossp-pkg/tabea/tabea-brainstorming' 2>/dev/null --- ossp-pkg/tabea/tabea-brainstorming +++ - 2025-04-11 21:55:40.709604798 +0200 @@ -0,0 +1,547 @@ + + Terminology + + structure - structure of the user interface + template - skeleton(s) of the output file(s) with variables which need expansion using the choices + data - file that contains the data chosen by the user + output - file(s) actually written out by tabea. + + Files + + - output + + One or more files being written out by tabea. It is/they are build + from template(s) by expanding the embedded variables using lib_var + with data from the choices file. The output files are usually + write-only except an import function is provided to build a baseline + of choice from a pre-existing output, which is typically the case + when someone has maintained such a file manually before it was taken + under tabea control or such a file is received from an external + source. + + - data + + A single file containing all data chosen by the user. Format is one + record per logical line. A physical line be extended to a long + logical line using a trailing BACKSLASH just before the NEWLINE. + Fields are separated by SPACE. Unused optional fields must be filled + using a DASH. The following fields exist: + + name (mandatory) + value (optional) + + A name might end with SQUARE BRACKET OPEN, any integer and SQUARE + BRACKET CLOSE, indicating an array. If the integer or the wholly + squre bracket construct is omited, [0] is assumed. + + - template + + Any ASCII file using lib_var syntax for variable expansion. + + - structure of a item block + + Menu structure of the user interface. Format is one record per + logical line. A physical line be extended to a long logical line + using a trailing BACKSLASH just before the NEWLINE. Fields are + separated by SPACE. Unused optional fields must be filled using a + DASH. The following fields exist: + + block { + name (mandatory) + visible + description + helptext + helpurl + activate + item { + name (mandatory) + namevisible + description + helptext + helpurl + type + defaultvalue + value { + name (mandatory) + visible + description + helptext + helpurl + verify + } + } + } + + A name might end with SQUARE BRACKET OPEN, any integer and SQUARE + BRACKET CLOSE, indicating an array. If the integer or the wholly + squre bracket construct is omited, [0] is assumed. + + A description is a human readable text for name. If omited, name is + used verbatim. + + A helptext is a human readable text for the word "help". If omitted + and "helpurl" is set, it defaults to "help". If "helpurl" is omitted + no help link is shown at all. + + The helpurl is the URL to a help page describing the item. + + The defaultvalue is taken if the name is omitted in the data file, + i.e. the data file did not previously exist, was modfied through an + external mechanism or an updated structure added a name which did + not exist in previous versions. It is also used if the + structure validation failed. + + A valuehelptext is a human readable text for the word "help". If omitted + and "valuehelpurl" is set, it defaults to "help". If "valuehelpurl" is omitted + no help link is shown at all. + + The valuehelpurl is the URL to a help page describing the value. + + The "verify" is a regex. + + The "eval" is a little perl program and uses perl's "eval" to find + out the result. + Possible types are taken from RFC1866, Section 8.1.2 - 8.1.4 + + 8.1.2.1. Text Field: INPUT TYPE=TEXT + +

Street Address:
+ Postal City code:
+ Zip Code:
+ + item { + name street + visible "Street Address:" + type text + } + item { + name city + visible "Postal City code:" + type text[16][16] + } + item { + name zip + visible "Zip Code:" + type text[10][10] + value { + name "99999-9999" + } + } + + 8.1.2.2. Password Field: INPUT TYPE=PASSWORD + +

Name: Password: + + item { + name login + visible "Name:" + type text + } + item { + name passwd + visible "Password:" + type password + } + + + 8.1.2.3. Check Box: INPUT TYPE=CHECKBOX + +

What flavors do you like? + Vanilla
+ Strawberry
+ Chocolate
+ + item { + name flavor + visible "What flavors do you like?" + type checkbox + value { + name vanilla + visible "Vanilla" + checked + } + value { + name strawberry + visible "Strawberry" + } + value { + name chocolate + visible "Chocolate" + checked + } + } + + 8.1.2.4. Radio Button: INPUT TYPE=RADIO + +

Which is your favorite? + Vanilla
+ Strawberry
+ Chocolate
+ + item { + name flavor + visible "Which is your favorite?" + type radio + value { + name vanilla + visible "Vanilla" + checked + } + value { + name strawberry + visible "Strawberry" + } + value { + name chocolate + visible "Chocolate" + } + } + + 8.1.2.5. Image Pixel: INPUT TYPE=IMAGE + + item { + name point + visible "Choose a point on the map:" + type image + value { + name "map.gif" + } + } + + 8.1.2.6. Hidden Field: INPUT TYPE=HIDDEN (FIXME do we really need this?) + + + + item { + name context + type hidden + value { + name "l2k3j4l2k3j4l2k3j4lk23" + } + } + + 8.1.2.7. Submit Button: INPUT TYPE=SUBMIT + +
+ + + item { + name recipient + type submit + value { + name internal + } + value { + name world + } + } + + 8.1.2.8. Reset Button: INPUT TYPE=RESET + + You may clear the form and start over at any time: + + item { + description "You may clear the form and start over at any time:" + type reset + } + + 8.1.3. Selection: SELECT + 8.1.3.1. Option: OPTION + + + + item { + name flavor + type select[2] //or type selectmultipe[2] + value { + name "Vanilla" + } + value { + name "Strawberry" + } + value { + name RumRasin + visible "Rum and Raisin" + } + value { + name "Peach and Orange" + selected + } + + } + + 8.1.4. Text Area: TEXTAREA + + + + item { + name "address" + type textarea[64][6] + value { + name "HaL Computer Systems\n1315 Dell Avenue\nCampbell, California 95008" + } + } + + Example: Generic RAID configuration + + block { + name BEGIN + visible "RAID configurator" + description "Please configure your redundant array of independent disks now" + helptext info + helpurl http://www.raid.org + activate #always + item { + name numdrives + visible "Number of drives [1...9]" + description "enter the total number of drives in the array including redundant and spare drives" + helptext ? + helpurl http://www.counting.org/basics + activate #always + type text[1] + defaultvalue 1 + verify ^[123456789]$ + eval $numdrives ~= ^[123456789]$ + } + item { + name raidlevel + activate numdrives~=. + type radio + defaultvalue 0 + value { + name 0 + visible "RAID 0" + } + value { + name 1 + activate numdrives~=^[2468]$ #even + } + value { + name 4 + activate numdrives~=^[3456789]$ #>=3 + } + value { + name 5 + activate numdrives~=^[3456789]$ #>=3 + } + value { + name 10 + activate numdrives~=^[48]$ #multiple of 4 + } + value { + name 1+HOT + activate numdrives~=^[3579]$ #odd AND >=3 + } + value { + name 4+HOT + activate numdrives~=^[456789]$ #>=4 + } + value { + name 5+HOT + activate numdrives~=^[456789]$ #>=4 + } + } + } + block { + name END + visible "commit suicide now" + activate numdrives~=. && raidlevel~=^[0145](+HOT)?$ + item { + name "Finish" + type button + } + } + +Example: Jumpstart Disk and Raid Configuration + + block { + name BEGIN + visible "Disk Configuration" + description "Please configure the number of disks and the RAID" + helptext info + helpurl + activate #always + item { + name numdrives + visible "Number of drives [1...9]" + description "enter the total number of drives in the array including redundant and spare drives" + helptext ? + helpurl http://www.counting.org/basics + activate #always + type text[1] + (type popup_menu[1] ) + defaultvalue 1 + verify ^[12]$ + } + item { + name raidlevel + activate numdrives~=. + type radio + defaultvalue 0 + item + value { + name 0 + visible "RAID 0" + } + value { + name 1 + activate numdrives~=^[2]$ #even + } + } + item { + name sizeofdisk + + } + item { + name slices + visible 'Slice definition' + item { + name slice0 + visible "Definition of slice0" + item { + name size + visible "Define the size of sclice" + verify sizeofdisk - size0 - size1 ..... -size7 >= 0 + } + item { + name moutpoint + visible "Define the mount point of slice" + type popup_menu[7} # Dependencies to other slice types + verify # Depencies to other slices + } + + item { + name slice1 + visible "Definition of slice1" + item { + name size + visible "Define the size of sclice" + } + item { + name moutpoint + visible "Define the mount point of slice" + type popup_menu[7} # Dependencies to other slice types + verify # + } + + item { + name slice2 + visible "Definition of slice2" + item { + name size + visible "Define the size of sclice" + } + item { + name moutpoint + visible "Define the mount point of slice" + type popup_menu[7} # Dependencies to other slice types + verify # + } + item { + name slice3 + visible "Definition of slice3" + item { + name size + visible "Define the size of sclice" + } + item { + name moutpoint + visible "Define the mount point of slice" + type popup_menu[7} # Dependencies to other slice types + verify # + } + item { + name slice4 + visible "Definition of slice4" + item { + name size + visible "Define the size of sclice" + } + item { + name moutpoint + visible "Define the mount point of slice" + type popup_menu[7} # Dependencies to other slice types + verify # + } + item { + name slice5 + visible "Definition of slice5" + item { + name size + visible "Define the size of sclice" + } + item { + name moutpoint + visible "Define the mount point of slice" + type popup_menu[7} # Dependencies to other slice types + verify # + } + item { + name slice6 + visible "Definition of slice6" + item { + name size + visible "Define the size of sclice" + } + item { + name moutpoint + visible "Define the mount point of slice" + type popup_menu[7} # Dependencies to other slice types + verify # + } + item { + name slice7 + visible "Definition of slice7" + item { + name size + visible "Define the size of sclice" + + } + item { + name moutpoint + visible "Define the mount point of slice" + type popup_menu[7} # Dependencies to other slice types + verify # + } + + + + + + + } + + + } + + } + + } + block { + name pruefen + type submit + } + block { + name clean + type reset + } + block { + name END + visible "commit suicide now" + activate numdrives~=. && raidlevel~=^[0145](+HOT)?$ + item { + name "Finish" + type button + } + } + +