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-11-04 07:59:58.138151055 +0100 @@ -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
+        }
+    }
+
+