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
+ }
+ }
+
+