Artifact 67e8c1f054a08bb21194b752713c0867bd67edff:


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 3b 3b 0a 0a 3b 3b 20  PURPOSE..;;..;; 
0150: 49 20 75 73 65 64 20 74 68 69 73 20 74 6f 20 67  I used this to g
0160: 65 74 20 61 20 73 69 6d 70 6c 65 20 69 6e 74 65  et a simple inte
0170: 72 61 63 74 69 76 65 20 73 71 6c 69 74 65 20 65  ractive sqlite e
0180: 64 69 74 6f 72 20 6f 6e 20 74 68 65 20 6e 6f 6b  ditor on the nok
0190: 69 61 20 6e 38 30 30 0a 3b 3b 20 73 69 6e 63 65  ia n800.;; since
01a0: 20 49 20 63 6f 75 6c 64 6e 27 74 20 67 65 74 20   I couldn't get 
01b0: 73 71 6c 69 74 65 33 20 74 6f 20 69 6e 73 74 61  sqlite3 to insta
01c0: 6c 6c 20 28 66 6f 72 20 72 65 61 73 6f 6e 73 20  ll (for reasons 
01d0: 49 20 63 61 6e 27 74 20 72 65 6d 65 6d 62 65 72  I can't remember
01e0: 29 2e 0a 0a 28 75 73 65 20 73 71 6c 69 74 65 33  )...(use sqlite3
01f0: 29 0a 0a 28 64 65 66 69 6e 65 20 61 72 67 73 20  )..(define args 
0200: 28 61 72 67 76 29 29 0a 28 64 65 66 69 6e 65 20  (argv)).(define 
0210: 6e 75 6d 2d 61 72 67 73 20 28 6c 65 6e 67 74 68  num-args (length
0220: 20 61 72 67 73 29 29 0a 0a 28 64 65 66 69 6e 65   args))..(define
0230: 20 64 62 6e 61 6d 65 20 23 66 29 0a 28 64 65 66   dbname #f).(def
0240: 69 6e 65 20 63 6d 64 20 20 20 20 23 66 29 0a 0a  ine cmd    #f)..
0250: 28 69 66 20 28 3e 20 6e 75 6d 2d 61 72 67 73 20  (if (> num-args 
0260: 31 29 0a 20 20 28 73 65 74 21 20 64 62 6e 61 6d  1).  (set! dbnam
0270: 65 20 28 63 61 64 72 20 61 72 67 73 29 29 0a 20  e (cadr args)). 
0280: 20 28 65 78 69 74 20 30 29 29 0a 0a 28 69 66 20   (exit 0))..(if 
0290: 28 3e 20 6e 75 6d 2d 61 72 67 73 20 32 29 0a 20  (> num-args 2). 
02a0: 20 28 73 65 74 21 20 63 6d 64 20 28 63 61 64 64   (set! cmd (cadd
02b0: 72 20 61 72 67 73 29 29 29 0a 0a 28 64 65 66 69  r args)))..(defi
02c0: 6e 65 20 64 62 20 28 73 71 6c 69 74 65 33 3a 6f  ne db (sqlite3:o
02d0: 70 65 6e 20 64 62 6e 61 6d 65 29 29 0a 0a 28 64  pen dbname))..(d
02e0: 65 66 69 6e 65 20 28 69 6e 74 65 72 61 63 74 69  efine (interacti
02f0: 76 65 20 64 62 29 0a 20 20 28 6c 65 74 20 28 28  ve db).  (let ((
0300: 70 72 6f 6d 70 74 20 22 20 3e 20 22 29 29 0a 20  prompt " > ")). 
0310: 20 20 20 28 64 69 73 70 6c 61 79 20 70 72 6f 6d     (display prom
0320: 70 74 29 0a 20 20 28 6c 65 74 20 6c 6f 6f 70 20  pt).  (let loop 
0330: 28 28 63 6d 64 20 28 72 65 61 64 2d 6c 69 6e 65  ((cmd (read-line
0340: 29 29 29 0a 20 20 20 20 28 63 6f 6e 64 20 0a 20  ))).    (cond . 
0350: 20 20 20 20 20 28 28 3e 20 28 73 74 72 69 6e 67       ((> (string
0360: 2d 6c 65 6e 67 74 68 20 63 6d 64 29 20 30 29 0a  -length cmd) 0).
0370: 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d         (process-
0380: 63 6d 64 20 64 62 20 63 6d 64 29 0a 20 20 20 20  cmd db cmd).    
0390: 20 20 20 28 64 69 73 70 6c 61 79 20 70 72 6f 6d     (display prom
03a0: 70 74 29 0a 20 20 20 20 20 20 20 28 6c 6f 6f 70  pt).       (loop
03b0: 20 28 72 65 61 64 2d 6c 69 6e 65 29 29 29 0a 20   (read-line))). 
03c0: 20 20 20 20 20 28 65 6c 73 65 0a 09 28 6c 6f 6f       (else..(loo
03d0: 70 20 28 72 65 61 64 2d 6c 69 6e 65 29 29 29 29  p (read-line))))
03e0: 29 29 29 0a 20 0a 28 64 65 66 69 6e 65 20 28 70  ))). .(define (p
03f0: 72 6f 63 65 73 73 2d 63 6d 64 20 64 62 20 63 6d  rocess-cmd db cm
0400: 64 29 0a 20 20 28 73 71 6c 69 74 65 33 3a 66 6f  d).  (sqlite3:fo
0410: 72 2d 65 61 63 68 2d 72 6f 77 0a 20 20 20 20 28  r-each-row.    (
0420: 6c 61 6d 62 64 61 20 28 61 20 2e 20 62 29 0a 20  lambda (a . b). 
0430: 20 20 20 20 20 28 70 72 69 6e 74 20 61 20 22 20       (print a " 
0440: 22 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73  " (string-inters
0450: 70 65 72 73 65 20 62 20 22 20 22 29 29 29 0a 20  perse b " "))). 
0460: 20 20 20 64 62 20 63 6d 64 29 29 0a 0a 28 69 66     db cmd))..(if
0470: 20 63 6d 64 0a 20 20 28 70 72 6f 63 65 73 73 2d   cmd.  (process-
0480: 63 6d 64 20 64 62 20 63 6d 64 29 0a 20 20 28 69  cmd db cmd).  (i
0490: 6e 74 65 72 61 63 74 69 76 65 20 64 62 29 29 0a  nteractive db)).
04a0: 0a 28 73 71 6c 69 74 65 33 3a 66 69 6e 61 6c 69  .(sqlite3:finali
04b0: 7a 65 21 20 64 62 29 20 20 20 20 0a 0a           ze! db)    ..