Artifact 1e4a5aef9c0c2be863e6a66e5fc0efe55801d6c7:


0000: 3b 3b 20 43 6f 70 79 72 69 67 68 74 20 32 30 30  ;; Copyright 200
0010: 37 2d 32 30 31 31 2c 20 4d 61 74 74 68 65 77 20  7-2011, 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 63  ==========..(dec
0240: 6c 61 72 65 20 28 75 6e 69 74 20 6b 65 79 73 74  lare (unit keyst
0250: 6f 72 65 29 29 0a 0a 28 64 65 66 69 6e 65 20 28  ore))..(define (
0260: 6b 65 79 73 74 6f 72 65 3a 67 65 74 20 64 62 20  keystore:get db 
0270: 6b 65 79 29 0a 20 20 28 64 62 69 3a 67 65 74 2d  key).  (dbi:get-
0280: 6f 6e 65 20 64 62 20 22 53 45 4c 45 43 54 20 76  one db "SELECT v
0290: 61 6c 75 65 20 46 52 4f 4d 20 6d 65 74 61 64 61  alue FROM metada
02a0: 74 61 20 57 48 45 52 45 20 6b 65 79 3d 3f 3b 22  ta WHERE key=?;"
02b0: 20 6b 65 79 29 29 0a 0a 28 64 65 66 69 6e 65 20   key))..(define 
02c0: 28 6b 65 79 73 74 6f 72 65 3a 73 65 74 21 20 64  (keystore:set! d
02d0: 62 20 6b 65 79 20 76 61 6c 75 65 29 0a 20 20 28  b key value).  (
02e0: 6c 65 74 20 28 28 63 75 72 72 2d 76 61 6c 20 28  let ((curr-val (
02f0: 6b 65 79 73 74 6f 72 65 3a 67 65 74 20 64 62 20  keystore:get db 
0300: 6b 65 79 29 29 29 0a 20 20 20 20 28 69 66 20 63  key))).    (if c
0310: 75 72 72 2d 76 61 6c 0a 09 28 64 62 69 3a 65 78  urr-val..(dbi:ex
0320: 65 63 20 64 62 20 22 55 50 44 41 54 45 20 6d 65  ec db "UPDATE me
0330: 74 61 64 61 74 61 20 53 45 54 20 76 61 6c 75 65  tadata SET value
0340: 3d 3f 20 57 48 45 52 45 20 6b 65 79 3d 3f 3b 22  =? WHERE key=?;"
0350: 20 76 61 6c 75 65 20 6b 65 79 29 0a 09 28 64 62   value key)..(db
0360: 69 3a 65 78 65 63 20 64 62 20 22 49 4e 53 45 52  i:exec db "INSER
0370: 54 20 49 4e 54 4f 20 6d 65 74 61 64 61 74 61 20  T INTO metadata 
0380: 28 6b 65 79 2c 76 61 6c 75 65 29 20 56 41 4c 55  (key,value) VALU
0390: 45 53 20 28 3f 2c 3f 29 3b 22 20 6b 65 79 20 76  ES (?,?);" key v
03a0: 61 6c 75 65 29 29 29 29 0a 0a 28 64 65 66 69 6e  alue))))..(defin
03b0: 65 20 28 6b 65 79 73 74 6f 72 65 3a 64 65 6c 21  e (keystore:del!
03c0: 20 64 62 20 6b 65 79 29 0a 20 20 28 64 62 69 3a   db key).  (dbi:
03d0: 65 78 65 63 20 64 62 20 22 44 45 4c 45 54 45 20  exec db "DELETE 
03e0: 46 52 4f 4d 20 6d 65 74 61 64 61 74 61 20 57 48  FROM metadata WH
03f0: 45 52 45 20 6b 65 79 3d 3f 3b 22 20 6b 65 79 29  ERE key=?;" key)
0400: 29 0a                                            ).