Artifact
f8cd7b37890a13c1bf7f6167889588c01f529819:
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 28 64 65 63 6c 61 PURPOSE...(decla
0150: 72 65 20 28 75 6e 69 74 20 73 65 74 75 70 29 29 re (unit setup))
0160: 0a 28 64 65 63 6c 61 72 65 20 28 75 73 65 73 20 .(declare (uses
0170: 73 65 73 73 69 6f 6e 29 29 0a 28 72 65 71 75 69 session)).(requi
0180: 72 65 2d 65 78 74 65 6e 73 69 6f 6e 20 73 72 66 re-extension srf
0190: 69 2d 36 39 29 0a 28 72 65 71 75 69 72 65 2d 65 i-69).(require-e
01a0: 78 74 65 6e 73 69 6f 6e 20 72 65 67 65 78 29 0a xtension regex).
01b0: 0a 3b 3b 20 6d 61 63 72 6f 73 20 69 6e 20 73 75 .;; macros in su
01c0: 67 61 72 20 64 6f 6e 27 74 20 77 6f 72 6b 2c 20 gar don't work,
01d0: 68 61 76 65 20 74 6f 20 6c 6f 61 64 20 69 6e 20 have to load in
01e0: 61 6c 6c 20 66 69 6c 65 73 20 6f 72 20 75 73 65 all files or use
01f0: 20 63 6f 6d 70 69 6c 65 64 20 6d 6f 64 65 3f 0a compiled mode?.
0200: 3b 3b 0a 3b 3b 20 28 69 6e 63 6c 75 64 65 20 22 ;;.;; (include "
0210: 73 75 67 61 72 2e 73 63 6d 22 29 0a 0a 3b 3b 20 sugar.scm")..;;
0220: 75 73 65 20 74 68 69 73 20 66 6f 72 20 67 65 74 use this for get
0230: 74 69 6e 67 20 64 61 74 61 20 66 72 6f 6d 20 70 ting data from p
0240: 61 67 65 20 74 6f 20 70 61 67 65 20 77 68 65 6e age to page when
0250: 20 73 63 6f 70 65 20 61 6e 64 20 65 76 61 6c 73 scope and evals
0260: 0a 3b 3b 20 67 65 74 20 69 6e 20 74 68 65 20 77 .;; get in the w
0270: 61 79 0a 28 64 65 66 69 6e 65 20 73 3a 6c 6f 63 ay.(define s:loc
0280: 61 6c 2d 76 61 72 73 20 28 6d 61 6b 65 2d 68 61 al-vars (make-ha
0290: 73 68 2d 74 61 62 6c 65 29 29 0a 0a 28 64 65 66 sh-table))..(def
02a0: 69 6e 65 20 28 73 3a 6c 6f 63 61 6c 2d 73 65 74 ine (s:local-set
02b0: 21 20 6b 20 76 29 0a 20 20 28 68 61 73 68 2d 74 ! k v). (hash-t
02c0: 61 62 6c 65 2d 73 65 74 21 20 73 3a 6c 6f 63 61 able-set! s:loca
02d0: 6c 2d 76 61 72 73 20 6b 20 76 29 29 0a 0a 28 64 l-vars k v))..(d
02e0: 65 66 69 6e 65 20 28 73 3a 6c 6f 63 61 6c 2d 67 efine (s:local-g
02f0: 65 74 20 6b 29 0a 20 20 28 68 61 73 68 2d 74 61 et k). (hash-ta
0300: 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c 74 20 ble-ref/default
0310: 73 3a 6c 6f 63 61 6c 2d 76 61 72 73 20 6b 20 23 s:local-vars k #
0320: 66 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 73 3a f))..(define (s:
0330: 6c 6f 67 20 2e 20 6d 73 67 29 0a 20 20 28 61 70 log . msg). (ap
0340: 70 6c 79 20 73 65 73 73 69 6f 6e 3a 6c 6f 67 20 ply session:log
0350: 73 3a 73 65 73 73 69 6f 6e 20 6d 73 67 29 29 0a s:session msg)).
0360: 0a 28 64 65 66 69 6e 65 20 28 73 3a 73 65 74 2d .(define (s:set-
0370: 65 72 72 20 2e 20 61 72 67 73 29 0a 20 20 28 73 err . args). (s
0380: 64 61 74 2d 73 65 74 2d 63 75 72 72 2d 65 72 72 dat-set-curr-err
0390: 21 20 73 3a 73 65 73 73 69 6f 6e 20 61 72 67 73 ! s:session args
03a0: 29 29 0a 0a 3b 3b 20 55 73 61 67 65 3a 20 28 73 ))..;; Usage: (s
03b0: 3a 67 65 74 2d 65 72 72 20 73 3a 62 69 67 29 0a :get-err s:big).
03c0: 28 64 65 66 69 6e 65 20 28 73 3a 67 65 74 2d 65 (define (s:get-e
03d0: 72 72 20 77 72 61 70 70 65 72 66 75 6e 63 29 0a rr wrapperfunc).
03e0: 20 20 28 6c 65 74 20 28 28 65 72 72 6d 73 67 20 (let ((errmsg
03f0: 28 73 64 61 74 2d 67 65 74 2d 63 75 72 72 2d 65 (sdat-get-curr-e
0400: 72 72 20 73 3a 73 65 73 73 69 6f 6e 29 29 29 0a rr s:session))).
0410: 20 20 20 20 28 69 66 20 65 72 72 6d 73 67 20 28 (if errmsg (
0420: 28 69 66 20 77 72 61 70 70 65 72 66 75 6e 63 0a (if wrapperfunc.
0430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0440: 20 20 20 20 77 72 61 70 70 65 72 66 75 6e 63 0a wrapperfunc.
0450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0460: 20 20 20 20 73 3a 73 74 72 6f 6e 67 29 20 65 72 s:strong) er
0470: 72 6d 73 67 29 20 27 28 29 29 29 29 0a 0a 28 64 rmsg) '())))..(d
0480: 65 66 69 6e 65 20 28 73 3a 63 75 72 72 65 6e 74 efine (s:current
0490: 2d 70 61 67 65 29 0a 20 20 28 73 64 61 74 2d 67 -page). (sdat-g
04a0: 65 74 2d 70 61 67 65 20 73 3a 73 65 73 73 69 6f et-page s:sessio
04b0: 6e 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 73 3a n))..(define (s:
04c0: 64 65 6c 65 74 65 2d 73 65 73 73 69 6f 6e 29 0a delete-session).
04d0: 20 20 28 73 65 73 73 69 6f 6e 3a 64 65 6c 65 74 (session:delet
04e0: 65 2d 73 65 73 73 69 6f 6e 20 73 3a 73 65 73 73 e-session s:sess
04f0: 69 6f 6e 20 28 73 64 61 74 2d 67 65 74 2d 73 65 ion (sdat-get-se
0500: 73 73 69 6f 6e 2d 6b 65 79 20 73 3a 73 65 73 73 ssion-key s:sess
0510: 69 6f 6e 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 ion)))..(define
0520: 28 73 3a 63 61 6c 6c 20 70 61 67 65 20 2e 20 70 (s:call page . p
0530: 61 72 74 73 6c 29 0a 20 20 28 69 66 20 28 6e 75 artsl). (if (nu
0540: 6c 6c 3f 20 70 61 72 74 73 6c 29 0a 20 20 20 20 ll? partsl).
0550: 20 20 28 73 65 73 73 69 6f 6e 3a 63 61 6c 6c 20 (session:call
0560: 73 3a 73 65 73 73 69 6f 6e 20 70 61 67 65 20 23 s:session page #
0570: 66 29 0a 20 20 20 20 20 20 28 73 65 73 73 69 6f f). (sessio
0580: 6e 3a 63 61 6c 6c 20 73 3a 73 65 73 73 69 6f 6e n:call s:session
0590: 20 70 61 67 65 20 28 63 61 72 20 70 61 72 74 73 page (car parts
05a0: 6c 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 l))))..(define (
05b0: 73 3a 6c 69 6e 6b 2d 74 6f 20 70 61 67 65 20 2e s:link-to page .
05c0: 20 70 61 72 61 6d 73 29 0a 20 20 28 73 65 73 73 params). (sess
05d0: 69 6f 6e 3a 6c 69 6e 6b 2d 74 6f 20 73 3a 73 65 ion:link-to s:se
05e0: 73 73 69 6f 6e 20 70 61 67 65 20 70 61 72 61 6d ssion page param
05f0: 73 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 73 3a s))..(define (s:
0600: 67 65 74 2d 70 61 72 61 6d 20 6b 65 79 20 2e 20 get-param key .
0610: 74 79 70 65 2d 70 61 72 61 6d 73 29 0a 20 20 28 type-params). (
0620: 73 65 73 73 69 6f 6e 3a 67 65 74 2d 70 61 72 61 session:get-para
0630: 6d 20 73 3a 73 65 73 73 69 6f 6e 20 6b 65 79 20 m s:session key
0640: 74 79 70 65 2d 70 61 72 61 6d 73 29 29 0a 0a 3b type-params))..;
0650: 3b 20 74 68 65 73 65 20 61 72 65 20 70 61 67 65 ; these are page
0660: 20 6c 6f 63 61 6c 0a 28 64 65 66 69 6e 65 20 28 local.(define (
0670: 73 3a 67 65 74 20 6b 65 79 29 20 0a 20 20 28 73 s:get key) . (s
0680: 65 73 73 69 6f 6e 3a 70 61 67 65 2d 67 65 74 20 ession:page-get
0690: 73 3a 73 65 73 73 69 6f 6e 20 6b 65 79 29 29 0a s:session key)).
06a0: 0a 28 64 65 66 69 6e 65 20 28 73 3a 73 65 74 21 .(define (s:set!
06b0: 20 6b 65 79 20 76 61 6c 29 0a 20 20 28 73 65 73 key val). (ses
06c0: 73 69 6f 6e 3a 63 75 72 72 2d 70 61 67 65 2d 73 sion:curr-page-s
06d0: 65 74 21 20 73 3a 73 65 73 73 69 6f 6e 20 6b 65 et! s:session ke
06e0: 79 20 76 61 6c 29 29 0a 0a 28 64 65 66 69 6e 65 y val))..(define
06f0: 20 28 73 3a 64 65 6c 21 20 6b 65 79 29 0a 20 20 (s:del! key).
0700: 28 73 65 73 73 69 6f 6e 3a 70 61 67 65 2d 76 61 (session:page-va
0710: 72 2d 64 65 6c 21 20 73 3a 73 65 73 73 69 6f 6e r-del! s:session
0720: 20 6b 65 79 29 29 0a 0a 28 64 65 66 69 6e 65 20 key))..(define
0730: 28 73 3a 67 65 74 2d 6e 2d 64 65 6c 21 20 6b 65 (s:get-n-del! ke
0740: 79 29 0a 20 20 28 6c 65 74 20 28 28 76 61 6c 20 y). (let ((val
0750: 28 73 65 73 73 69 6f 6e 3a 70 61 67 65 2d 67 65 (session:page-ge
0760: 74 20 73 3a 73 65 73 73 69 6f 6e 20 6b 65 79 29 t s:session key)
0770: 29 29 0a 20 20 20 20 28 73 65 73 73 69 6f 6e 3a )). (session:
0780: 64 65 6c 21 20 73 3a 73 65 73 73 69 6f 6e 20 6b del! s:session k
0790: 65 79 29 0a 20 20 20 20 76 61 6c 29 29 0a 0a 3b ey). val))..;
07a0: 3b 20 74 68 65 73 65 20 61 72 65 20 73 65 73 73 ; these are sess
07b0: 69 6f 6e 20 77 69 64 65 0a 28 64 65 66 69 6e 65 ion wide.(define
07c0: 20 28 73 3a 73 65 73 73 69 6f 6e 2d 76 61 72 2d (s:session-var-
07d0: 67 65 74 20 6b 65 79 20 2e 20 70 61 72 61 6d 73 get key . params
07e0: 29 20 0a 20 20 28 73 65 73 73 69 6f 6e 3a 67 65 ) . (session:ge
07f0: 74 20 73 3a 73 65 73 73 69 6f 6e 20 22 2a 73 65 t s:session "*se
0800: 73 73 69 6f 6e 76 61 72 73 2a 22 20 6b 65 79 20 ssionvars*" key
0810: 70 61 72 61 6d 73 29 29 0a 0a 28 64 65 66 69 6e params))..(defin
0820: 65 20 28 73 3a 73 65 73 73 69 6f 6e 2d 76 61 72 e (s:session-var
0830: 2d 73 65 74 21 20 6b 65 79 20 76 61 6c 29 0a 20 -set! key val).
0840: 20 28 73 65 73 73 69 6f 6e 3a 73 65 74 21 20 73 (session:set! s
0850: 3a 73 65 73 73 69 6f 6e 20 22 2a 73 65 73 73 69 :session "*sessi
0860: 6f 6e 76 61 72 73 2a 22 20 6b 65 79 20 76 61 6c onvars*" key val
0870: 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 73 3a 73 ))..(define (s:s
0880: 65 73 73 69 6f 6e 2d 76 61 72 2d 67 65 74 2d 6e ession-var-get-n
0890: 2d 64 65 6c 21 20 6b 65 79 29 0a 20 20 28 6c 65 -del! key). (le
08a0: 74 20 28 28 76 61 6c 20 28 73 65 73 73 69 6f 6e t ((val (session
08b0: 3a 70 61 67 65 2d 67 65 74 20 73 3a 73 65 73 73 :page-get s:sess
08c0: 69 6f 6e 20 6b 65 79 29 29 29 0a 20 20 20 20 20 ion key))).
08d0: 28 73 65 73 73 69 6f 6e 3a 64 65 6c 21 20 73 3a (session:del! s:
08e0: 73 65 73 73 69 6f 6e 20 22 2a 73 65 73 73 69 6f session "*sessio
08f0: 6e 76 61 72 73 2a 22 20 6b 65 79 29 0a 20 20 20 nvars*" key).
0900: 20 20 76 61 6c 29 29 0a 0a 28 64 65 66 69 6e 65 val))..(define
0910: 20 28 73 3a 73 65 73 73 69 6f 6e 2d 76 61 72 2d (s:session-var-
0920: 64 65 6c 21 20 6b 65 79 29 0a 20 20 28 73 65 73 del! key). (ses
0930: 73 69 6f 6e 3a 64 65 6c 21 20 73 3a 73 65 73 73 sion:del! s:sess
0940: 69 6f 6e 20 22 2a 73 65 73 73 69 6f 6e 76 61 72 ion "*sessionvar
0950: 73 2a 22 20 6b 65 79 29 29 0a 0a 28 64 65 66 69 s*" key))..(defi
0960: 6e 65 20 73 3a 73 65 73 73 69 6f 6e 2d 76 61 72 ne s:session-var
0970: 2d 64 65 6c 65 74 65 21 20 73 3a 73 65 73 73 69 -delete! s:sessi
0980: 6f 6e 2d 76 61 72 2d 64 65 6c 21 29 0a 0a 3b 3b on-var-del!)..;;
0990: 20 75 74 69 6c 69 74 79 20 74 6f 20 67 65 74 20 utility to get
09a0: 61 6c 6c 20 76 61 72 73 20 61 73 20 68 61 73 68 all vars as hash
09b0: 20 74 61 62 6c 65 0a 28 64 65 66 69 6e 65 20 28 table.(define (
09c0: 73 3a 73 65 73 73 69 6f 6e 2d 67 65 74 2d 73 65 s:session-get-se
09d0: 73 73 69 6f 6e 76 61 72 73 29 0a 20 20 28 73 64 ssionvars). (sd
09e0: 61 74 2d 67 65 74 2d 73 65 73 73 69 6f 6e 76 61 at-get-sessionva
09f0: 72 73 20 73 3a 73 65 73 73 69 6f 6e 29 29 0a 0a rs s:session))..
0a00: 3b 3b 20 69 6e 70 75 74 73 0a 3b 3b 0a 3b 3b 20 ;; inputs.;;.;;
0a10: 70 61 72 61 6d 3a 20 28 64 74 79 70 65 20 5b 74 param: (dtype [t
0a20: 61 67 31 20 74 61 67 32 20 2e 2e 2e 5d 29 0a 3b ag1 tag2 ...]).;
0a30: 3b 20 64 74 79 70 65 3a 0a 3b 3b 20 20 20 20 27 ; dtype:.;; '
0a40: 72 61 77 20 20 20 20 20 3a 20 64 6f 20 6e 6f 20 raw : do no
0a50: 63 6f 6e 76 65 72 73 69 6f 6e 0a 3b 3b 20 20 20 conversion.;;
0a60: 20 27 6e 75 6d 62 65 72 20 20 3a 20 63 6f 6e 76 'number : conv
0a70: 65 72 74 20 74 6f 20 6e 75 6d 62 65 72 2c 20 72 ert to number, r
0a80: 65 74 75 72 6e 20 23 66 20 69 66 20 66 61 69 6c eturn #f if fail
0a90: 73 0a 3b 3b 20 20 20 20 27 65 73 63 61 70 65 64 s.;; 'escaped
0aa0: 20 3a 20 75 73 65 20 68 74 6d 6c 2d 65 73 63 61 : use html-esca
0ab0: 70 65 20 74 6f 20 70 72 6f 74 65 63 74 20 74 68 pe to protect th
0ac0: 65 20 69 6e 70 75 74 0a 3b 3b 0a 28 64 65 66 69 e input.;;.(defi
0ad0: 6e 65 20 28 73 3a 67 65 74 2d 69 6e 70 75 74 20 ne (s:get-input
0ae0: 6b 65 79 20 2e 20 70 61 72 61 6d 73 29 0a 20 20 key . params).
0af0: 28 73 65 73 73 69 6f 6e 3a 67 65 74 2d 69 6e 70 (session:get-inp
0b00: 75 74 20 73 3a 73 65 73 73 69 6f 6e 20 6b 65 79 ut s:session key
0b10: 20 70 61 72 61 6d 73 29 29 0a 0a 28 64 65 66 69 params))..(defi
0b20: 6e 65 20 28 73 3a 67 65 74 2d 69 6e 70 75 74 2d ne (s:get-input-
0b30: 6b 65 79 73 29 0a 20 20 28 73 65 73 73 69 6f 6e keys). (session
0b40: 3a 67 65 74 2d 69 6e 70 75 74 2d 6b 65 79 73 20 :get-input-keys
0b50: 73 3a 73 65 73 73 69 6f 6e 29 29 0a 0a 28 64 65 s:session))..(de
0b60: 66 69 6e 65 20 28 73 3a 6c 6f 61 64 2d 6d 6f 64 fine (s:load-mod
0b70: 65 6c 20 6d 6f 64 65 6c 29 0a 20 20 28 73 65 73 el model). (ses
0b80: 73 69 6f 6e 3a 6c 6f 61 64 2d 6d 6f 64 65 6c 20 sion:load-model
0b90: 73 3a 73 65 73 73 69 6f 6e 20 6d 6f 64 65 6c 29 s:session model)
0ba0: 29 0a 0a 28 64 65 66 69 6e 65 20 28 73 3a 6d 6f )..(define (s:mo
0bb0: 64 65 6c 2d 70 61 74 68 20 6d 6f 64 65 6c 29 0a del-path model).
0bc0: 20 20 28 73 65 73 73 69 6f 6e 3a 6d 6f 64 65 6c (session:model
0bd0: 2d 70 61 74 68 20 73 3a 73 65 73 73 69 6f 6e 20 -path s:session
0be0: 6d 6f 64 65 6c 29 29 0a 0a 3b 3b 20 73 68 61 72 model))..;; shar
0bf0: 65 20 64 61 74 61 20 62 65 74 77 65 65 6e 20 70 e data between p
0c00: 61 67 65 73 20 63 61 6c 6c 73 2e 20 4e 4f 54 45 ages calls. NOTE
0c10: 3a 20 54 68 69 73 20 69 73 20 6e 6f 74 20 70 65 : This is not pe
0c20: 72 73 69 73 74 65 6e 74 0a 3b 3b 20 62 65 74 77 rsistent.;; betw
0c30: 65 65 6e 20 63 67 69 20 63 61 6c 6c 73 2e 20 55 een cgi calls. U
0c40: 73 65 20 73 65 73 73 69 6f 6e 76 61 72 73 20 66 se sessionvars f
0c50: 6f 72 20 74 68 61 74 2e 0a 3b 3b 0a 28 64 65 66 or that..;;.(def
0c60: 69 6e 65 20 28 73 3a 73 68 61 72 65 64 2d 68 61 ine (s:shared-ha
0c70: 73 68 29 0a 20 20 28 73 64 61 74 2d 67 65 74 2d sh). (sdat-get-
0c80: 73 68 61 72 65 64 2d 68 61 73 68 20 73 3a 73 65 shared-hash s:se
0c90: 73 73 69 6f 6e 29 29 0a 0a 28 64 65 66 69 6e 65 ssion))..(define
0ca0: 20 28 73 3a 73 68 61 72 65 64 2d 73 65 74 21 20 (s:shared-set!
0cb0: 6b 65 79 20 76 61 6c 29 0a 20 20 28 68 61 73 68 key val). (hash
0cc0: 2d 74 61 62 6c 65 2d 73 65 74 21 20 28 73 64 61 -table-set! (sda
0cd0: 74 2d 67 65 74 2d 73 68 61 72 65 64 2d 68 61 73 t-get-shared-has
0ce0: 68 20 73 3a 73 65 73 73 69 6f 6e 29 20 6b 65 79 h s:session) key
0cf0: 20 76 61 6c 29 29 0a 0a 3b 3b 20 57 68 61 74 20 val))..;; What
0d00: 74 6f 20 72 65 74 75 72 6e 20 77 68 65 6e 20 6e to return when n
0d10: 6f 20 76 61 6c 75 65 20 66 6f 72 20 6b 65 79 3f o value for key?
0d20: 0a 3b 3b 0a 28 64 65 66 69 6e 65 20 28 73 3a 73 .;;.(define (s:s
0d30: 68 61 72 65 64 2d 67 65 74 20 6b 65 79 29 0a 20 hared-get key).
0d40: 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 (hash-table-ref
0d50: 2f 64 65 66 61 75 6c 74 20 28 73 64 61 74 2d 67 /default (sdat-g
0d60: 65 74 2d 73 68 61 72 65 64 2d 68 61 73 68 20 73 et-shared-hash s
0d70: 3a 73 65 73 73 69 6f 6e 29 20 6b 65 79 20 23 66 :session) key #f
0d80: 29 29 0a 0a 3b 3b 20 68 74 74 70 3a 2f 2f 66 6f ))..;; http://fo
0d90: 6f 2e 62 61 72 2e 63 6f 6d 2f 70 61 67 65 6e 61 o.bar.com/pagena
0da0: 6d 65 2f 70 31 2f 70 32 20 3d 3e 20 27 28 22 70 me/p1/p2 => '("p
0db0: 31 22 20 22 70 32 22 29 0a 3b 3b 20 20 23 23 23 1" "p2").;; ###
0dc0: 23 20 44 45 50 52 45 43 41 54 45 44 20 23 23 23 # DEPRECATED ###
0dd0: 23 0a 28 64 65 66 69 6e 65 20 28 73 3a 67 65 74 #.(define (s:get
0de0: 2d 70 61 67 65 2d 70 61 72 61 6d 73 29 0a 20 20 -page-params).
0df0: 28 73 64 61 74 2d 67 65 74 2d 70 61 74 68 2d 70 (sdat-get-path-p
0e00: 61 72 61 6d 73 20 73 3a 73 65 73 73 69 6f 6e 29 arams s:session)
0e10: 29 0a 0a 28 64 65 66 69 6e 65 20 28 73 3a 67 65 )..(define (s:ge
0e20: 74 2d 70 61 74 68 2d 70 61 72 61 6d 73 29 0a 20 t-path-params).
0e30: 20 28 73 64 61 74 2d 67 65 74 2d 70 61 74 68 2d (sdat-get-path-
0e40: 70 61 72 61 6d 73 20 73 3a 73 65 73 73 69 6f 6e params s:session
0e50: 29 29 0a 09 0a 0a 28 64 65 66 69 6e 65 20 28 73 ))....(define (s
0e60: 3a 64 62 29 0a 20 20 28 73 64 61 74 2d 67 65 74 :db). (sdat-get
0e70: 2d 63 6f 6e 6e 20 73 3a 73 65 73 73 69 6f 6e 29 -conn s:session)
0e80: 29 0a 0a 28 64 65 66 69 6e 65 20 28 73 3a 6e 65 )..(define (s:ne
0e90: 76 65 72 2d 63 61 6c 6c 65 64 2d 70 61 67 65 3f ver-called-page?
0ea0: 20 70 61 67 65 29 0a 20 20 28 73 65 73 73 69 6f page). (sessio
0eb0: 6e 3a 6e 65 76 65 72 2d 63 61 6c 6c 65 64 2d 70 n:never-called-p
0ec0: 61 67 65 3f 20 73 3a 73 65 73 73 69 6f 6e 20 70 age? s:session p
0ed0: 61 67 65 29 29 0a 0a 3b 3b 20 66 69 6e 64 20 6f age))..;; find o
0ee0: 75 74 20 69 66 20 77 65 20 61 72 65 20 69 6e 20 ut if we are in
0ef0: 64 65 62 75 67 6d 6f 64 65 0a 28 64 65 66 69 6e debugmode.(defin
0f00: 65 20 28 73 3a 64 65 62 75 67 2d 6d 6f 64 65 3f e (s:debug-mode?
0f10: 29 0a 20 20 28 73 64 61 74 2d 67 65 74 2d 64 65 ). (sdat-get-de
0f20: 62 75 67 6d 6f 64 65 20 73 3a 73 65 73 73 69 6f bugmode s:sessio
0f30: 6e 29 29 0a 0a n))..