]> git.plutz.net Git - shellwiki/blob - db23.sh
use translatable page titles in page list
[shellwiki] / db23.sh
1 #!/bin/sh
2
3 . "$_EXEC/cgilite/storage.sh"
4
5 DB2() {
6   local call data file key val seq
7   data="${BR}${1}${BR}" call="$2"
8   shift 2
9
10   case $call in
11     new|discard)
12       printf ''
13       ;;
14     open|load) file="$1"
15       cat "$file" || return 1
16       ;;
17     check|contains) key="$(STRING "$1")" val=''
18       val="${data##*"${BR}${key}"       }" val="${val%%"${BR}"*}"
19       [ "$val" = '' ] && return 1
20       ;;
21     count) key="$(STRING "$1")" val='' seq=0
22       val="${data##*"${BR}${key}"       }" val="${val%%"${BR}"*}"
23       [ "$val" = '' ] || val="${val}    "
24       while [ "$val" != '' ]; do
25         seq=$((seq + 1)) val="${val#*   }"
26       done
27       printf "%i\n" "$seq"
28       [ $seq = 0 ] && return 1
29       ;;
30     get) key="$(STRING "$1")" seq="${2:-1}"
31       val="${data##*"${BR}${key}"       }" val="${val%%"${BR}"*}"
32       [ "$val" = '' ] && return 1 || val="${val}        "
33       while [ $seq -gt 1 ]; do
34         seq=$((seq - 1)) val="${val#*   }"
35       done
36       [ "$val" = '' ] && return 1
37       UNSTRING "${val%% *}"
38       ;;
39     iterate|raw) key="$(STRING "$1")"
40       val="${data##*"${BR}${key}"       }" val="${val%%"${BR}"*}"
41       [ "$val" = '' ] && return 1
42       printf '%s\n' $val
43       ;;
44     delete|remove) key="$(STRING "$1")"
45       val="${data#*"${BR}${key}"        *"${BR}"}"
46       key="${data%"${BR}${key}" *"${BR}"*}"
47       [ "${key}${BR}${val}" = "${data}" ] && return 1
48       printf '%s' "${key#"${BR}"}${BR}${val%"${BR}"}"
49       ;;
50     set|store) key="$(STRING "$1")" val=""
51       shift 1
52       val="$(for v in "$@"; do STRING "$v"; printf \\t; done)"
53       if [ "${data#*"${BR}${key}"       *}" != "$data" ]; then
54         data="${data%"${BR}${key}"      *"${BR}"*}${BR}${key}   ${val%  }${BR}${data#*"${BR}${key}"     *"${BR}"}"
55         data="${data#"${BR}"}" data="${data%"${BR}"}"
56       else
57         data="${data#"${BR}"}${key}     ${val%  }${BR}"
58         data="${data#"${BR}"}"
59       fi
60       printf %s\\n "${data}"
61       ;;
62     append) key="$(STRING "$1")" val=""
63       val="${data##*"${BR}${key}"       }" val="${val%%"${BR}"*}"
64       if [ "$val" = '' ]; then
65         printf %s\\n "${data}"
66         return 1
67       else
68         shift 1
69         val="${val}$(for v in "$@"; do printf \\t; STRING "$v"; done)"
70         data="${data%"${BR}${key}"      *"${BR}"*}${BR}${key}   ${val%  }${BR}${data#*"${BR}${key}"     *"${BR}"}"
71         data="${data#"${BR}"}" data="${data%"${BR}"}"
72         printf %s\\n "${data}"
73       fi
74       ;;
75     flush|save|write) file="$1"
76       data="${data#"${BR}"}" data="${data%"${BR}"}"
77       printf '%s\n' "$data" >"$file" || return 1
78       ;;
79   esac
80   return 0
81 }
82
83 DB3() {
84   # wrapper function that allows easyer use of DB2
85   # by always keeping file data in $db3_data
86
87   case "$1" in
88     new|discard|open|load|delete|remove|set|store|append)
89       db3_data="$(DB2 "$db3_data" "$@")"
90       return "$?"
91       ;;
92     get|count|check|contains|iterate|raw|flush|save|write)
93       DB2 "$db3_data" "$@"
94       return "$?"
95       ;;
96   esac
97 }