0000: 3b 3b 20 43 6f 70 79 72 69 67 68 74 20 32 30 30 ;; Copyright 200
0010: 37 2d 32 30 30 38 2c 20 4d 61 74 74 68 65 77 20 7-2008, Matthew
0020: 57 65 6c 6c 61 6e 64 2e 0a 3b 3b 20 0a 3b 3b 20 Welland..;; .;;
0030: 20 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 This program is
0040: 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 20 made available
0050: 75 6e 64 65 72 20 74 68 65 20 47 4e 55 20 47 50 under the GNU GP
0060: 4c 20 76 65 72 73 69 6f 6e 20 32 2e 30 20 6f 72 L version 2.0 or
0070: 0a 3b 3b 20 20 67 72 65 61 74 65 72 2e 20 53 65 .;; greater. Se
0080: 65 20 74 68 65 20 61 63 63 6f 6d 70 61 6e 79 69 e the accompanyi
0090: 6e 67 20 66 69 6c 65 20 43 4f 50 59 49 4e 47 20 ng file COPYING
00a0: 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 3b 3b 20 for details..;;
00b0: 0a 3b 3b 20 20 54 68 69 73 20 70 72 6f 67 72 61 .;; This progra
00c0: 6d 20 69 73 20 64 69 73 74 72 69 62 75 74 65 64 m is distributed
00d0: 20 57 49 54 48 4f 55 54 20 41 4e 59 20 57 41 52 WITHOUT ANY WAR
00e0: 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 74 20 65 RANTY; without e
00f0: 76 65 6e 20 74 68 65 0a 3b 3b 20 20 69 6d 70 6c ven the.;; impl
0100: 69 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 20 ied warranty of
0110: 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59 20 MERCHANTABILITY
0120: 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41 or FITNESS FOR A
0130: 20 50 41 52 54 49 43 55 4c 41 52 0a 3b 3b 20 20 PARTICULAR.;;
0140: 50 55 52 50 4f 53 45 2e 0a 0a 3b 3b 3d 3d 3d 3d PURPOSE...;;====
0150: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0160: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0170: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0180: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0190: 3d 3d 0a 3b 3b 20 54 68 65 20 6d 65 74 61 20 64 ==.;; The meta d
01a0: 61 74 61 20 6b 65 79 20 73 74 6f 72 65 2c 20 6a ata key store, j
01b0: 75 73 74 20 61 20 67 65 6e 65 72 61 6c 20 64 75 ust a general du
01c0: 6d 70 69 6e 67 20 67 72 6f 75 6e 64 20 66 6f 72 mping ground for
01d0: 20 76 61 6c 75 65 73 0a 3b 3b 20 6f 6e 6c 79 20 values.;; only
01e0: 75 73 65 64 20 6f 63 63 61 73 69 6f 6e 61 6c 6c used occasionall
01f0: 79 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d y.;;============
0200: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0220: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0230: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 ==========..(def
0240: 69 6e 65 20 28 6b 65 79 73 74 6f 72 65 3a 67 65 ine (keystore:ge
0250: 74 20 64 62 20 6b 65 79 29 0a 20 20 28 64 62 69 t db key). (dbi
0260: 3a 67 65 74 2d 6f 6e 65 20 64 62 20 22 53 45 4c :get-one db "SEL
0270: 45 43 54 20 76 61 6c 75 65 20 46 52 4f 4d 20 6d ECT value FROM m
0280: 65 74 61 64 61 74 61 20 57 48 45 52 45 20 6b 65 etadata WHERE ke
0290: 79 3d 3f 3b 22 20 6b 65 79 29 29 0a 0a 28 64 65 y=?;" key))..(de
02a0: 66 69 6e 65 20 28 6b 65 79 73 74 6f 72 65 3a 73 fine (keystore:s
02b0: 65 74 21 20 64 62 20 6b 65 79 20 76 61 6c 75 65 et! db key value
02c0: 29 0a 20 20 28 6c 65 74 20 28 28 63 75 72 72 2d ). (let ((curr-
02d0: 76 61 6c 20 28 6b 65 79 73 74 6f 72 65 3a 67 65 val (keystore:ge
02e0: 74 20 64 62 20 6b 65 79 29 29 29 0a 20 20 20 20 t db key))).
02f0: 28 69 66 20 63 75 72 72 2d 76 61 6c 0a 09 28 64 (if curr-val..(d
0300: 62 69 3a 65 78 65 63 20 64 62 20 22 55 50 44 41 bi:exec db "UPDA
0310: 54 45 20 6d 65 74 61 64 61 74 61 20 53 45 54 20 TE metadata SET
0320: 76 61 6c 75 65 3d 3f 20 57 48 45 52 45 20 6b 65 value=? WHERE ke
0330: 79 3d 3f 3b 22 20 76 61 6c 75 65 20 6b 65 79 29 y=?;" value key)
0340: 0a 09 28 64 62 69 3a 65 78 65 63 20 64 62 20 22 ..(dbi:exec db "
0350: 49 4e 53 45 52 54 20 49 4e 54 4f 20 6d 65 74 61 INSERT INTO meta
0360: 64 61 74 61 20 28 6b 65 79 2c 76 61 6c 75 65 29 data (key,value)
0370: 20 56 41 4c 55 45 53 20 28 3f 2c 3f 29 3b 22 20 VALUES (?,?);"
0380: 6b 65 79 20 76 61 6c 75 65 29 29 29 29 0a 0a 28 key value))))..(
0390: 64 65 66 69 6e 65 20 28 6b 65 79 73 74 6f 72 65 define (keystore
03a0: 3a 64 65 6c 21 20 64 62 20 6b 65 79 29 0a 20 20 :del! db key).
03b0: 28 64 62 69 3a 65 78 65 63 20 64 62 20 22 44 45 (dbi:exec db "DE
03c0: 4c 45 54 45 20 46 52 4f 4d 20 6d 65 74 61 64 61 LETE FROM metada
03d0: 74 61 20 57 48 45 52 45 20 6b 65 79 3d 3f 3b 22 ta WHERE key=?;"
03e0: 20 6b 65 79 29 29 0a key)).