Annotation of sbbs/src/xpdev/ini_file.txt, revision 1.1.1.1

1.1       root        1: $Id: ini_file.txt,v 1.2 2005/10/13 10:16:07 rswindell Exp $
                      2: 
                      3: Synchronet/xpdev ini_file module
                      4: --------------------------------
                      5: The basic format of the files supported by the xpdev ini_file module is that
                      6: of the Windows .ini file, with some additional features.
                      7: 
                      8: The basic Windows .ini file format is as follows:
                      9: 
                     10: 1. The file contains ASCII text only with LF or CR/LF-terminated lines.
                     11: 
                     12: 2. The file is separated into logical "sections". Each section may have its
                     13:    own list of keys with associated values, one per line.
                     14: 
                     15: 3. A section begins with a line consisting only of "[" <section name> "]".
                     16: 
                     17: 4. White space before or after the section name is ignored.
                     18: 
                     19: 5. A section ends when the end of file is reached or a new section begins.
                     20:  
                     21: 6. Keys and associated values within a section are specified, each on their
                     22:    line, in the format: <key_name> "=" <value>
                     23: 
                     24: 7. White space before and after the key/value separator ("=") is ignored.
                     25: 
                     26: 8. Comments are lines with a semicolon (";") as the first non-whitespace
                     27:    character.
                     28: 
                     29: 9. Blank lines between or within sections are ignored.
                     30: 
                     31: Example basic Windows .ini file content:
                     32: 
                     33: ; for 16-bit app support
                     34: [fonts]
                     35: [extensions]
                     36: [Mail]
                     37: MAPI=1
                     38: CMCDLLNAME32=mapi32.dll
                     39: CMCDLLNAME=mapi.dll
                     40: CMC=1
                     41: MAPIX=1
                     42: MAPIXVER=1.0.0.1
                     43: OLEMessaging=1
                     44: [SciCalc]
                     45: layout=0
                     46: [MSUCE]
                     47: Advanced=1
                     48: CodePage=Unicode
                     49: Font=Terminal
                     50: 
                     51: 
                     52: Synchronet/xpdev extended-ini_file format
                     53: =========================================
                     54: The Synchronet/xpdev ini_file module supports a somewhat "extended" .ini file
                     55: format with the following additions:
                     56: 
                     57: Filenames
                     58: ---------
                     59: INI filenames typically end in a ".ini" suffix, but that is not a requirement.
                     60: 
                     61: If the application uses the ini_file module's iniFileName() function to
                     62: determine the correct ini filename for the current system, different ini files
                     63: may be used for different systems on the same network, reading from the same
                     64: directory.
                     65: 
                     66: The different ini filename permutations supported (assuming "file.ini" is the
                     67: base filename) are:
                     68: 
                     69:     path/file.<host>.<domain>.ini
                     70:     path/file.<host>.ini
                     71:     path/file.<platform>.ini
                     72:     path/file.ini
                     73: 
                     74: Root section
                     75: ------------
                     76: Key/value pairs in the file *before* the first section definition are
                     77: considered part of the "root" section. This section is often used to define
                     78: key/value pairs that apply globally to all the following sections. The root
                     79: section may have other uses as well.
                     80: 
                     81: Section Prefixes
                     82: ----------------
                     83: Section names may be include a section "prefix", a fixed portion of the
                     84: section name that may be used be the application to logically group
                     85: related sections. Section pre-fixes typically end in a colon, but that is
                     86: not a requirement.   
                     87: 
                     88: Literal string values
                     89: ---------------------
                     90: String values separated by the key name with a colon (':') instead of an
                     91: equals sign ('='), are parsed as "literal" strings, which means the string
                     92: will retain any trailing white-space on the line. This may be enhanced in
                     93: the future to support C escape sequences, multiple/broken lines, etc.
                     94: 
                     95: Section name list
                     96: -----------------
                     97: If one wishes to specify a list of sections for all values to be applied to
                     98: they may specify a list of section names, separated by '|', where a single
                     99: section name would normally be specified. Example:
                    100: "[telnet|rlogin]"
                    101: 
                    102: Boolean values
                    103: --------------
                    104: Values with an either true or false (1 or 0) state can have their value
                    105: specified as a number (0, or non-zero), or the following strings (yes,
                    106: English only): "true", "yes", or "on" (interpretted as 1), or "false",
                    107: "no", or "off" (interpretted as 0). Any otherwise unrecognized text strings
                    108: will be interpretted as 0 (false).
                    109: 
                    110: Integer values
                    111: --------------
                    112: Integer values may be negative or positive whole numbers of up to 
                    113: (at least) 32-bits in size.
                    114: 
                    115: Integer values may be specified in octal (base 8), decimal (base 10),
                    116: hexadecimal (base 16), or base 36 formats based on the following
                    117: interpretation of the specified value text:
                    118: 
                    119: If the first character is 0 and the second character is not 'x' or 'X', the
                    120: string is interpreted as an octal integer; otherwise, it is interpreted as
                    121: a decimal number. If the first character is '0' and the second character is
                    122: 'x' or 'X', the string is interpreted as a hexadecimal integer. If the
                    123: first character is '1' through '9', the string is interpreted as a decimal
                    124: integer. The letters 'a' through 'z' (or 'A' through 'Z') are assigned the
                    125: values 10 through 35.
                    126: 
                    127: The exception to this rule are the values of "true", "yes", or "on",
                    128: always interpretted as the value of 1 (one).
                    129: 
                    130: Long integer values
                    131: -------------------
                    132: Long integer values may be positive whole numbers of up to (at least)
                    133: 32-bits in size. Otherwise, long integer values are interpretted the same as
                    134: normal integer values.
                    135: 
                    136: Log levels
                    137: ----------
                    138: The ini_file module includes built-in support for the standard Unix syslog
                    139: levels: Emergency (0), Alert (1), Critical (2), Error (3), Warning (4), 
                    140: Notice (5), Informational (6), and Debugging (7).
                    141: 
                    142: The higher the log level, the more log output will be generated.
                    143: 
                    144: Partial or complete log level names may be specified for the log level
                    145: value, or the numeric equivalent.
                    146: 
                    147: Byte counts
                    148: -----------
                    149: Byte count values (e.g. file sizes) may be specified as positive numbers
                    150: (fractional numbers are supported), optionally with a 'T', 'G', 'M', or 'K'
                    151: suffix to specify terabytes, gigabytes, megabytes, or kilobytes, respectively.
                    152: 
                    153: Date/Time stamps
                    154: ----------------
                    155: Date and time values may be specified in any of the following formats:
                    156: 
                    157: ISO-8601 date and time format:                  "CCYYMMDDThhmmss" 
                    158: Euro/Canadian numeric date format:              "DD.MM.[CC]YY [time] [p]"
                    159: American numeric date format:                   "MM/DD/[CC]YY [time] [p]"
                    160: Perversion of RFC822 date format:               "DD[-]Mon [CC]YY [time] [p]"
                    161: IETF standard (RFC2822) date format:            "Wday, DD Mon [CC]YY [time]"
                    162: Preferred date format:                          "Mon DD[,] [CC]YY [time] [p]"
                    163: JavaScript Date.toString() format:              "Wday Mon DD [CC]YY [time]"
                    164: ctime() format:                                 "Wday Mon DD [time] [CC]YY"
                    165: time_t format:                                  seconds since Jan 1, 1970 UTC
                    166: 
                    167: where:
                    168:             CC      = Century (i.e. "19" or "20")
                    169:             YY      = Year number (e.g. "05")
                    170:             MM      = Month number (1-12)
                    171:             DD      = Day of month (1-31)
                    172:             hh      = Hour of day (0-23)
                    173:             mm      = Minute of hour (0-59)
                    174:             ss      = Second of minute (0-59)
                    175:             p       = AM/PM designation
                    176:             time    = Time of day specified as "hh[:mm[:ss]]"
                    177:             Mon     = Month name (e.g. "Jan", "Feb", etc.)
                    178:             Wday    = Weekday name (e.g. "Mon", "Tue", etc.)
                    179:             []      = Optional parameter
                    180: 
                    181: Bit-fields
                    182: ----------
                    183: Bit-field values may be specified as a positive number (same rules of
                    184: interpretation as integer values), a bit-name, or a list of numbers or
                    185: bit-names separated by the '|' character.
                    186: 
                    187: Bit-fields are often used to specify multiple boolean-type values in
                    188: a single key/value pair.
                    189: 
                    190: Include directive
                    191: -----------------
                    192: An ini file may be include/imported/inserted into a another with the 
                    193: "!include" directive. The line must begin with "!include", followed by 
                    194: white space, and then a filename to include (optionally with a path). 
                    195: Sections may span files.
                    196: 
                    197: file1.ini:
                    198: [section_one]
                    199:     key1 = value1
                    200: !include file2.ini
                    201: 
                    202: file2.ini:
                    203:     key2 = value2
                    204: 
                    205: In the above example, both key1 and key2 are part of section_one.
                    206: 
                    207: End-of-file directive
                    208: ---------------------
                    209: An ini file may be prematurely terminated with the "!eof" directive. This
                    210: stops the ini_file module functions from processing any lines following this
                    211: directive.
                    212: 
                    213: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.