Artifact
f43ad9b3a3d61d65779ebfbe9fb69e1bd2e5b8b9:
0000: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;==============
0010: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 43 6f 70 79 ========.;; Copy
0050: 72 69 67 68 74 20 32 30 31 37 2c 20 4d 61 74 74 right 2017, Matt
0060: 68 65 77 20 57 65 6c 6c 61 6e 64 2e 0a 3b 3b 20 hew Welland..;;
0070: 0a 3b 3b 20 20 54 68 69 73 20 70 72 6f 67 72 61 .;; This progra
0080: 6d 20 69 73 20 6d 61 64 65 20 61 76 61 69 6c 61 m is made availa
0090: 62 6c 65 20 75 6e 64 65 72 20 74 68 65 20 47 4e ble under the GN
00a0: 55 20 47 50 4c 20 76 65 72 73 69 6f 6e 20 32 2e U GPL version 2.
00b0: 30 20 6f 72 0a 3b 3b 20 20 67 72 65 61 74 65 72 0 or.;; greater
00c0: 2e 20 53 65 65 20 74 68 65 20 61 63 63 6f 6d 70 . See the accomp
00d0: 61 6e 79 69 6e 67 20 66 69 6c 65 20 43 4f 50 59 anying file COPY
00e0: 49 4e 47 20 66 6f 72 20 64 65 74 61 69 6c 73 2e ING for details.
00f0: 0a 3b 3b 20 0a 3b 3b 20 20 54 68 69 73 20 70 72 .;; .;; This pr
0100: 6f 67 72 61 6d 20 69 73 20 64 69 73 74 72 69 62 ogram is distrib
0110: 75 74 65 64 20 57 49 54 48 4f 55 54 20 41 4e 59 uted WITHOUT ANY
0120: 20 57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f WARRANTY; witho
0130: 75 74 20 65 76 65 6e 20 74 68 65 0a 3b 3b 20 20 ut even the.;;
0140: 69 6d 70 6c 69 65 64 20 77 61 72 72 61 6e 74 79 implied warranty
0150: 20 6f 66 20 4d 45 52 43 48 41 4e 54 41 42 49 4c of MERCHANTABIL
0160: 49 54 59 20 6f 72 20 46 49 54 4e 45 53 53 20 46 ITY or FITNESS F
0170: 4f 52 20 41 20 50 41 52 54 49 43 55 4c 41 52 0a OR A PARTICULAR.
0180: 3b 3b 20 20 50 55 52 50 4f 53 45 2e 0a 3b 3b 3d ;; PURPOSE..;;=
0190: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
01a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
01b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
01c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
01d0: 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 20 28 =====..(define (
01e0: 70 61 67 65 73 3a 68 6f 6d 65 20 73 65 73 73 69 pages:home sessi
01f0: 6f 6e 20 64 62 20 73 68 61 72 65 64 29 0a 20 20 on db shared).
0200: 0a 20 20 28 6c 65 74 2a 20 28 28 64 62 68 20 20 . (let* ((dbh
0210: 20 20 20 20 20 20 20 28 73 3a 64 62 29 29 0a 20 (s:db)).
0220: 20 20 20 20 20 20 20 20 28 6c 69 6d 69 74 20 35 (limit 5
0230: 30 29 0a 20 20 20 20 20 20 20 20 20 28 63 75 72 0). (cur
0240: 72 2d 70 61 67 65 20 20 20 28 69 66 20 28 6f 72 r-page (if (or
0250: 20 28 65 71 75 61 6c 3f 20 28 73 3a 67 65 74 2d (equal? (s:get-
0260: 70 61 72 61 6d 20 22 70 67 22 29 20 22 22 29 20 param "pg") "")
0270: 28 65 71 75 61 6c 3f 20 28 73 3a 67 65 74 2d 70 (equal? (s:get-p
0280: 61 72 61 6d 20 22 70 67 22 29 20 23 66 29 29 0a aram "pg") #f)).
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
02a0: 20 20 20 20 20 20 31 0a 20 20 20 20 20 20 20 20 1.
02b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
02c0: 28 73 74 72 69 6e 67 2d 3e 6e 75 6d 62 65 72 20 (string->number
02d0: 28 73 3a 67 65 74 2d 70 61 72 61 6d 20 22 70 67 (s:get-param "pg
02e0: 22 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 0a ")))). .
02f0: 20 20 20 20 20 20 20 20 20 28 6f 66 66 73 65 74 (offset
0300: 20 28 2d 20 28 2a 20 6c 69 6d 69 74 20 20 63 75 (- (* limit cu
0310: 72 72 2d 70 61 67 65 29 20 6c 69 6d 69 74 29 29 rr-page) limit))
0320: 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 28 . (
0330: 64 6f 74 20 20 20 20 28 69 66 20 28 73 3a 67 65 dot (if (s:ge
0340: 74 2d 70 61 72 61 6d 20 22 64 6f 74 22 29 0a 20 t-param "dot").
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0360: 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e (strin
0370: 67 2d 3e 6e 75 6d 62 65 72 20 28 73 3a 67 65 74 g->number (s:get
0380: 2d 70 61 72 61 6d 20 22 64 6f 74 22 29 29 0a 20 -param "dot")).
0390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
03a0: 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 61 (if (a
03b0: 6e 64 20 20 28 73 3a 67 65 74 20 22 64 6f 74 22 nd (s:get "dot"
03c0: 29 20 28 6e 6f 74 20 28 65 71 75 61 6c 3f 20 28 ) (not (equal? (
03d0: 73 3a 67 65 74 20 22 64 6f 74 22 29 20 22 61 6c s:get "dot") "al
03e0: 6c 22 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 l"))).
03f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0400: 20 20 20 28 73 74 72 69 6e 67 2d 3e 6e 75 6d 62 (string->numb
0410: 65 72 20 28 73 3a 67 65 74 20 22 64 6f 74 22 29 er (s:get "dot")
0420: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
0430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0440: 22 61 6c 6c 22 29 29 29 0a 20 20 20 20 20 20 20 "all"))).
0450: 20 20 28 74 79 70 65 20 20 20 20 28 69 66 20 28 (type (if (
0460: 73 3a 67 65 74 2d 70 61 72 61 6d 20 22 74 79 70 s:get-param "typ
0470: 65 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 e").
0480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
0490: 73 3a 67 65 74 2d 70 61 72 61 6d 20 22 74 79 70 s:get-param "typ
04a0: 65 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 e").
04b0: 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 (if (
04c0: 61 6e 64 20 28 73 3a 67 65 74 20 22 74 79 70 65 and (s:get "type
04d0: 22 29 20 28 6e 6f 74 20 28 65 71 75 61 6c 3f 20 ") (not (equal?
04e0: 28 73 3a 67 65 74 20 22 74 79 70 65 22 29 20 22 (s:get "type") "
04f0: 61 6c 6c 22 29 29 29 0a 20 20 20 20 20 20 20 20 all"))).
0500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0510: 20 20 20 20 20 20 28 73 3a 67 65 74 20 22 74 79 (s:get "ty
0520: 70 65 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 pe").
0530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0540: 20 20 20 22 61 6c 6c 22 29 29 29 0a 20 20 20 20 "all"))).
0550: 20 20 20 20 20 20 28 62 70 20 20 20 20 28 69 66 (bp (if
0560: 20 28 73 3a 67 65 74 2d 70 61 72 61 6d 20 22 62 (s:get-param "b
0570: 70 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 p").
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
0590: 73 3a 67 65 74 2d 70 61 72 61 6d 20 22 62 70 22 s:get-param "bp"
05a0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
05b0: 20 20 20 20 20 20 20 20 20 28 69 66 20 28 73 3a (if (s:
05c0: 67 65 74 20 22 62 70 22 29 20 0a 20 20 20 20 20 get "bp") .
05d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
05e0: 20 20 20 20 20 20 20 20 20 28 73 3a 67 65 74 20 (s:get
05f0: 22 62 70 22 29 0a 20 20 20 20 20 20 20 20 20 20 "bp").
0600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0610: 20 20 20 20 22 70 31 32 37 33 22 29 29 29 0a 20 "p1273"))).
0620: 20 20 20 20 20 20 20 20 20 20 28 72 65 6c 20 20 (rel
0630: 20 20 28 69 66 20 28 73 3a 67 65 74 2d 70 61 72 (if (s:get-par
0640: 61 6d 20 22 72 65 6c 22 29 0a 20 20 20 20 20 20 am "rel").
0650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0660: 20 20 20 20 20 28 73 3a 67 65 74 2d 70 61 72 61 (s:get-para
0670: 6d 20 22 72 65 6c 22 29 0a 20 20 20 20 20 20 20 m "rel").
0680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0690: 28 69 66 20 28 61 6e 64 20 20 28 73 3a 67 65 74 (if (and (s:get
06a0: 20 22 72 65 6c 22 29 20 28 6e 6f 74 20 28 65 71 "rel") (not (eq
06b0: 75 61 6c 3f 20 28 73 3a 67 65 74 20 22 72 65 6c ual? (s:get "rel
06c0: 22 29 20 22 61 6c 6c 22 29 29 29 0a 20 20 20 20 ") "all"))).
06d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
06e0: 20 20 20 20 20 20 20 20 20 20 28 73 3a 67 65 74 (s:get
06f0: 20 22 72 65 6c 22 29 0a 20 20 20 20 20 20 20 20 "rel").
0700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0710: 20 20 20 20 20 20 22 22 29 29 29 20 0a 20 20 20 ""))) .
0720: 20 20 20 20 20 20 20 28 70 61 74 74 65 72 6e 20 (pattern
0730: 20 28 70 67 64 62 3a 6d 6b 2d 70 61 74 74 65 72 (pgdb:mk-patter
0740: 6e 20 64 6f 74 20 74 79 70 65 20 62 70 20 72 65 n dot type bp re
0750: 6c 29 29 20 09 20 0a 09 3b 20 28 74 61 72 67 65 l)) . ..; (targe
0760: 74 73 20 20 20 20 20 28 70 67 64 62 3a 67 65 74 ts (pgdb:get
0770: 2d 74 61 72 67 65 74 73 2d 6f 66 2d 74 79 70 65 -targets-of-type
0780: 20 64 62 68 20 73 65 6c 65 63 74 65 64 20 74 66 dbh selected tf
0790: 69 6c 74 65 72 29 29 0a 09 20 20 20 20 20 20 20 ilter))..
07a0: 20 20 20 20 20 0a 09 20 28 61 6c 6c 2d 64 61 74 .. (all-dat
07b0: 61 20 20 20 20 20 20 20 28 70 67 64 62 3a 67 65 a (pgdb:ge
07c0: 74 2d 6c 61 74 65 73 74 2d 72 75 6e 2d 73 74 61 t-latest-run-sta
07d0: 74 73 2d 67 69 76 65 6e 2d 70 61 74 74 65 72 6e ts-given-pattern
07e0: 20 64 62 68 20 70 61 74 74 65 72 6e 20 20 6c 69 dbh pattern li
07f0: 6d 69 74 20 6f 66 66 73 65 74 29 29 0a 20 20 20 mit offset)).
0800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0810: 20 20 20 20 20 20 20 20 3b 27 28 29 20 20 29 0a ;'() ).
0820: 09 09 09 20 3b 20 28 70 67 64 62 3a 67 65 74 2d ... ; (pgdb:get-
0830: 73 74 61 74 73 2d 67 69 76 65 6e 2d 74 79 70 65 stats-given-type
0840: 2d 74 61 72 67 65 74 20 64 62 68 20 73 65 6c 65 -target dbh sele
0850: 63 74 65 64 20 74 66 69 6c 74 65 72 29 0a 09 09 cted tfilter)...
0860: 09 20 3b 20 28 70 67 64 62 3a 67 65 74 2d 73 74 . ; (pgdb:get-st
0870: 61 74 73 2d 67 69 76 65 6e 2d 74 61 72 67 65 74 ats-given-target
0880: 20 64 62 68 20 74 66 69 6c 74 65 72 29 0a 09 09 dbh tfilter)...
0890: 09 20 20 0a 20 20 20 20 20 20 20 20 20 28 63 6e . . (cn
08a0: 74 20 20 20 20 20 28 70 67 64 62 3a 67 65 74 2d t (pgdb:get-
08b0: 6c 61 74 65 73 74 2d 72 75 6e 2d 63 6e 74 2d 62 latest-run-cnt-b
08c0: 79 2d 70 61 74 74 65 72 6e 20 64 62 68 20 70 61 y-pattern dbh pa
08d0: 74 74 65 72 6e 29 29 0a 20 20 20 20 20 20 20 20 ttern)).
08e0: 20 28 74 6f 74 61 6c 2d 70 61 67 65 73 20 28 63 (total-pages (c
08f0: 65 69 6c 69 6e 67 20 28 2f 20 63 6e 74 20 20 6c eiling (/ cnt l
0900: 69 6d 69 74 29 29 29 20 0a 20 20 20 20 20 20 20 imit))) .
0910: 20 20 28 70 61 67 65 2d 6c 73 74 20 28 70 67 64 (page-lst (pgd
0920: 62 3a 67 65 74 2d 70 67 2d 6c 73 74 20 74 6f 74 b:get-pg-lst tot
0930: 61 6c 2d 70 61 67 65 73 29 29 0a 20 20 20 20 20 al-pages)).
0940: 20 20 20 20 28 6f 72 64 65 72 65 64 2d 64 61 74 (ordered-dat
0950: 61 20 28 70 67 64 62 3a 63 6f 61 6c 65 73 63 65 a (pgdb:coalesce
0960: 2d 72 75 6e 73 31 20 61 6c 6c 2d 64 61 74 61 29 -runs1 all-data)
0970: 29 0a 20 20 20 20 20 20 20 20 20 28 72 65 6c 2d ). (rel-
0980: 76 61 6c 20 28 69 66 20 28 65 71 75 61 6c 3f 20 val (if (equal?
0990: 72 65 6c 20 22 22 29 0a 20 20 20 20 20 20 20 20 rel "").
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
09b0: 25 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 %".
09c0: 20 20 20 20 20 20 20 20 20 20 20 72 65 6c 29 29 rel))
09d0: 29 0a 20 20 20 28 73 3a 64 69 76 20 27 63 6c 61 ). (s:div 'cla
09e0: 73 73 20 22 63 6f 6c 5f 31 32 22 20 0a 20 20 20 ss "col_12" .
09f0: 20 20 20 20 20 28 73 3a 75 6c 20 27 63 6c 61 73 (s:ul 'clas
0a00: 73 20 22 74 61 62 73 20 6c 65 66 74 22 0a 20 20 s "tabs left".
0a10: 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 .
0a20: 20 28 6d 61 70 20 28 6c 61 6d 62 64 61 20 28 78 (map (lambda (x
0a30: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 09 28 ). .(
0a40: 73 3a 6c 69 20 28 73 3a 61 20 27 68 72 65 66 20 s:li (s:a 'href
0a50: 28 63 6f 6e 63 20 22 23 22 20 78 29 20 78 29 29 (conc "#" x) x))
0a60: 29 0a 09 20 20 2a 70 72 6f 63 65 73 73 2a 29 29 ).. *process*))
0a70: 0a 20 20 20 20 20 20 20 28 6d 61 70 20 28 6c 61 . (map (la
0a80: 6d 62 64 61 20 28 78 29 0a 20 20 20 20 20 20 20 mbda (x).
0a90: 20 0a 20 20 20 20 20 20 20 28 73 3a 64 69 76 20 . (s:div
0aa0: 27 69 64 20 20 78 20 27 63 6c 61 73 73 20 22 74 'id x 'class "t
0ab0: 61 62 2d 63 6f 6e 74 65 6e 74 22 0a 20 20 20 20 ab-content".
0ac0: 20 20 28 73 3a 64 69 76 20 27 63 6c 61 73 73 20 (s:div 'class
0ad0: 22 63 6f 6c 5f 31 31 22 0a 09 20 20 20 28 73 3a "col_11".. (s:
0ae0: 66 69 65 6c 64 73 65 74 20 20 20 20 22 41 72 65 fieldset "Are
0af0: 61 20 74 79 70 65 20 61 6e 64 20 74 61 72 67 65 a type and targe
0b00: 74 20 66 69 6c 74 65 72 22 0a 09 20 20 20 20 28 t filter".. (
0b10: 73 3a 66 6f 72 6d 0a 09 20 20 20 20 20 27 61 63 s:form.. 'ac
0b20: 74 69 6f 6e 20 28 63 6f 6e 63 20 22 68 6f 6d 65 tion (conc "home
0b30: 2e 66 69 6c 74 65 72 23 22 20 78 29 20 27 6d 65 .filter#" x) 'me
0b40: 74 68 6f 64 20 22 70 6f 73 74 22 0a 09 20 20 20 thod "post"..
0b50: 20 20 28 73 3a 64 69 76 20 27 63 6c 61 73 73 20 (s:div 'class
0b60: 22 63 6f 6c 5f 31 32 22 0a 20 20 20 20 20 20 20 "col_12".
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0b80: 20 28 73 3a 64 69 76 20 27 63 6c 61 73 73 20 22 (s:div 'class "
0b90: 63 6f 6c 5f 33 22 0a 09 09 09 20 20 20 28 73 3a col_3".... (s:
0ba0: 6c 61 62 65 6c 20 22 52 65 6c 65 61 73 65 20 54 label "Release T
0bb0: 79 70 65 22 29 20 28 73 3a 73 65 6c 65 63 74 20 ype") (s:select
0bc0: 28 6d 61 70 20 28 6c 61 6d 62 64 61 20 28 78 29 (map (lambda (x)
0bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 (if
0c00: 28 65 71 75 61 6c 3f 20 20 78 20 74 79 70 65 29 (equal? x type)
0c10: 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
0c40: 6c 69 73 74 20 78 20 78 20 78 20 23 74 29 0a 20 list x x x #t).
0c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0c70: 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 (list
0c80: 20 78 20 78 20 78 20 23 66 29 29 20 29 0a 09 09 x x x #f)) )...
0c90: 09 09 09 20 20 2a 6b 69 74 2d 74 79 70 65 73 2a ... *kit-types*
0ca0: 29 0a 09 09 09 09 20 20 20 20 20 27 6e 61 6d 65 )..... 'name
0cb0: 20 22 6b 69 74 2d 74 79 70 65 22 29 29 0a 20 20 "kit-type")).
0cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0cd0: 20 28 73 3a 64 69 76 20 27 63 6c 61 73 73 20 22 (s:div 'class "
0ce0: 63 6f 6c 5f 33 22 0a 09 09 09 20 20 20 28 73 3a col_3".... (s:
0cf0: 6c 61 62 65 6c 20 22 44 6f 74 22 29 20 28 73 3a label "Dot") (s:
0d00: 73 65 6c 65 63 74 20 28 6d 61 70 20 28 6c 61 6d select (map (lam
0d10: 62 64 61 20 28 78 29 0a 20 20 20 20 20 20 20 20 bda (x).
0d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0d40: 20 20 20 20 28 69 66 20 28 65 71 75 61 6c 3f 20 (if (equal?
0d50: 20 78 20 64 6f 74 29 20 20 0a 20 20 20 20 20 20 x dot) .
0d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0d80: 20 20 20 20 20 20 28 6c 69 73 74 20 78 20 78 20 (list x x
0d90: 78 20 23 74 29 0a 20 20 20 20 20 20 20 20 20 20 x #t).
0da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0dc0: 20 20 28 6c 69 73 74 20 78 20 78 20 78 20 23 66 (list x x x #f
0dd0: 29 29 29 0a 09 09 09 09 09 20 20 2a 64 6f 74 73 )))...... *dots
0de0: 2a 29 0a 09 09 09 09 20 20 20 20 20 27 6e 61 6d *)..... 'nam
0df0: 65 20 22 64 6f 74 22 29 29 0a 0a 09 09 20 20 20 e "dot"))....
0e00: 28 73 3a 64 69 76 20 27 63 6c 61 73 73 20 22 63 (s:div 'class "c
0e10: 6f 6c 5f 33 22 0a 20 20 20 20 20 20 20 20 20 20 ol_3".
0e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0e30: 20 20 28 73 3a 69 6e 70 75 74 20 27 74 79 70 65 (s:input 'type
0e40: 20 22 68 69 64 64 65 6e 22 20 27 76 61 6c 75 65 "hidden" 'value
0e50: 20 78 20 27 6e 61 6d 65 20 22 62 70 22 29 0a 09 x 'name "bp")..
0e60: 09 09 20 20 20 28 73 3a 6c 61 62 65 6c 20 22 52 .. (s:label "R
0e70: 65 6c 65 61 73 65 20 23 22 29 20 28 73 3a 69 6e elease #") (s:in
0e80: 70 75 74 20 27 74 79 70 65 20 22 74 65 78 74 22 put 'type "text"
0e90: 20 27 6e 61 6d 65 20 22 72 65 6c 2d 6e 75 6d 22 'name "rel-num"
0ea0: 20 27 76 61 6c 75 65 20 72 65 6c 2d 76 61 6c 29 'value rel-val)
0eb0: 29 0a 09 09 20 20 20 20 28 73 3a 64 69 76 20 27 )... (s:div '
0ec0: 63 6c 61 73 73 20 22 63 6f 6c 5f 32 22 0a 09 09 class "col_2"...
0ed0: 09 20 20 20 28 73 3a 69 6e 70 75 74 20 27 74 79 . (s:input 'ty
0ee0: 70 65 20 22 73 75 62 6d 69 74 22 20 27 6e 61 6d pe "submit" 'nam
0ef0: 65 20 22 73 65 74 2d 66 69 6c 74 65 72 2d 76 61 e "set-filter-va
0f00: 6c 73 22 20 27 76 61 6c 75 65 20 22 53 75 62 6d ls" 'value "Subm
0f10: 69 74 22 29 29 29 29 29 0a 20 20 20 20 20 20 20 it"))))).
0f20: 20 20 20 20 28 73 3a 62 72 29 0a 20 20 20 20 20 (s:br).
0f30: 20 20 20 20 20 20 3b 28 73 3a 70 20 28 63 6f 6e ;(s:p (con
0f40: 63 20 64 6f 74 28 73 74 72 69 6e 67 3f 20 64 6f c dot(string? do
0f50: 74 29 20 29 29 20 0a 20 20 20 20 20 20 20 20 20 t) )) .
0f60: 20 20 20 20 28 73 3a 70 20 28 6d 61 70 0a 20 20 (s:p (map.
0f70: 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 (lambd
0f80: 61 20 28 69 29 20 0a 20 20 20 20 20 20 20 20 20 a (i) .
0f90: 20 28 73 3a 73 70 61 6e 20 28 73 3a 61 20 27 68 (s:span (s:a 'h
0fa0: 72 65 66 20 28 73 3a 6c 69 6e 6b 2d 74 6f 20 22 ref (s:link-to "
0fb0: 68 6f 6d 65 22 20 27 70 67 20 69 20 29 20 22 50 home" 'pg i ) "P
0fc0: 41 47 45 20 22 20 69 20 20 29 22 26 6e 62 73 70 AGE " i )" 
0fd0: 3b 7c 26 6e 62 73 70 3b 22 29 29 20 20 0a 20 20 ;| ")) .
0fe0: 20 20 20 20 20 20 20 20 70 61 67 65 2d 6c 73 74 page-lst
0ff0: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 73 )). (s
1000: 3a 70 20 22 26 6e 62 73 70 3b 26 6e 62 73 70 3b :p "
1010: 52 65 73 75 6c 74 20 46 6f 72 6d 61 74 3a 20 26 Result Format: &
1020: 6e 62 73 70 3b 26 6e 62 73 70 3b 74 6f 74 61 6c nbsp; total
1030: 20 2f 20 70 61 73 73 20 2f 20 66 61 69 6c 20 2f / pass / fail /
1040: 20 6f 74 68 65 72 22 29 0a 20 20 20 20 20 20 20 other").
1050: 20 20 20 20 20 28 69 66 20 28 65 71 75 61 6c 3f (if (equal?
1060: 20 78 20 62 70 29 0a 20 20 20 20 20 20 20 20 20 x bp).
1070: 20 20 20 20 28 62 65 67 69 6e 20 0a 20 20 20 20 (begin .
1080: 20 20 20 20 20 20 20 28 73 3a 66 69 65 6c 64 73 (s:fields
1090: 65 74 09 20 20 20 20 28 63 6f 6e 63 20 22 52 75 et. (conc "Ru
10a0: 6e 73 20 64 61 74 61 20 66 6f 72 20 22 20 70 61 ns data for " pa
10b0: 74 74 65 72 6e 29 0a 09 20 20 20 20 20 20 28 6c ttern).. (l
10c0: 65 74 2a 20 28 28 61 2d 6b 65 79 73 20 28 70 67 et* ((a-keys (pg
10d0: 64 62 3a 6f 72 64 65 72 65 64 2d 64 61 74 61 2d db:ordered-data-
10e0: 3e 61 2d 6b 65 79 73 20 6f 72 64 65 72 65 64 2d >a-keys ordered-
10f0: 64 61 74 61 29 29 0a 09 09 20 20 20 28 62 2d 6b data))... (b-k
1100: 65 79 73 20 28 70 67 64 62 3a 6f 72 64 65 72 65 eys (pgdb:ordere
1110: 64 2d 64 61 74 61 2d 3e 62 2d 6b 65 79 73 20 6f d-data->b-keys o
1120: 72 64 65 72 65 64 2d 64 61 74 61 20 61 2d 6b 65 rdered-data a-ke
1130: 79 73 29 29 29 0a 20 20 09 09 20 20 28 73 3a 74 ys))). .. (s:t
1140: 61 62 6c 65 20 20 27 63 6c 61 73 73 20 22 73 74 able 'class "st
1150: 72 69 70 65 64 22 0a 09 09 20 20 20 28 73 3a 74 riped"... (s:t
1160: 72 20 20 28 73 3a 74 68 20 20 27 63 6c 61 73 73 r (s:th 'class
1170: 20 22 68 65 61 64 69 6e 67 22 20 29 20 0a 20 09 "heading" ) . .
1180: 09 09 28 6d 61 70 0a 20 20 20 20 20 20 20 20 20 ..(map.
1190: 20 20 20 20 20 20 20 09 28 6c 61 6d 62 64 61 20 .(lambda
11a0: 28 74 68 2d 6b 65 79 29 20 0a 20 20 20 20 20 20 (th-key) .
11b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11c0: 20 20 20 28 73 3a 74 68 20 27 63 6c 61 73 73 20 (s:th 'class
11d0: 22 68 65 61 64 69 6e 67 22 20 74 68 2d 6b 65 79 "heading" th-key
11e0: 20 29 29 20 0a 20 20 20 20 20 20 20 20 20 20 20 )) .
11f0: 20 20 20 20 20 20 20 20 20 61 2d 6b 65 79 73 29 a-keys)
1200: 29 0a 09 09 20 20 20 28 6d 61 70 0a 09 09 20 20 )... (map...
1210: 20 20 28 6c 61 6d 62 64 61 20 28 72 6f 77 2d 6b (lambda (row-k
1220: 65 79 29 0a 09 09 20 20 20 20 20 20 28 73 3a 74 ey)... (s:t
1230: 72 20 28 73 3a 74 64 20 72 6f 77 2d 6b 65 79 29 r (s:td row-key)
1240: 0a 09 09 09 20 20 20 20 28 6d 61 70 0a 09 09 09 .... (map....
1250: 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 63 6f (lambda (co
1260: 6c 2d 6b 65 79 29 0a 09 09 09 20 20 20 20 20 20 l-key)....
1270: 20 28 6c 65 74 20 28 28 76 61 6c 20 28 6c 65 74 (let ((val (let
1280: 2a 20 28 28 68 74 20 20 28 68 61 73 68 2d 74 61 * ((ht (hash-ta
1290: 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c 74 20 ble-ref/default
12a0: 6f 72 64 65 72 65 64 2d 64 61 74 61 20 63 6f 6c ordered-data col
12b0: 2d 6b 65 79 20 23 66 29 29 29 0a 09 09 09 09 09 -key #f)))......
12c0: 20 20 20 20 28 69 66 20 68 74 20 28 68 61 73 68 (if ht (hash
12d0: 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 -table-ref/defau
12e0: 6c 74 20 68 74 20 72 6f 77 2d 6b 65 79 20 23 66 lt ht row-key #f
12f0: 29 29 29 29 29 0a 09 09 09 09 20 28 69 66 20 76 )))))..... (if v
1300: 61 6c 0a 09 09 09 09 20 20 20 20 20 28 6c 65 74 al..... (let
1310: 2a 20 28 28 74 6f 74 61 6c 20 28 76 65 63 74 6f * ((total (vecto
1320: 72 2d 72 65 66 20 76 61 6c 20 32 29 29 0a 20 20 r-ref val 2)).
1330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1350: 20 20 20 20 20 20 20 20 20 20 28 65 76 65 6e 74 (event
1360: 2d 74 69 6d 65 20 28 76 65 63 74 6f 72 2d 72 65 -time (vector-re
1370: 66 20 76 61 6c 20 31 29 29 20 0a 09 09 09 09 09 f val 1)) ......
1380: 20 20 20 20 28 70 61 73 73 20 20 28 76 65 63 74 (pass (vect
1390: 6f 72 2d 72 65 66 20 76 61 6c 20 33 29 29 0a 09 or-ref val 3))..
13a0: 09 09 09 09 20 20 20 20 28 66 61 69 6c 20 20 28 .... (fail (
13b0: 76 65 63 74 6f 72 2d 72 65 66 20 76 61 6c 20 34 vector-ref val 4
13c0: 29 29 0a 09 09 09 09 09 20 20 20 20 28 6f 74 68 ))...... (oth
13d0: 65 72 20 28 76 65 63 74 6f 72 2d 72 65 66 20 76 er (vector-ref v
13e0: 61 6c 20 35 29 29 0a 20 20 20 20 20 20 20 20 20 al 5)).
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1410: 20 20 20 28 69 64 20 28 76 65 63 74 6f 72 2d 72 (id (vector-r
1420: 65 66 20 76 61 6c 20 36 29 29 20 0a 09 09 09 09 ef val 6)) .....
1430: 09 20 20 20 20 28 70 61 73 73 70 65 72 20 28 72 . (passper (r
1440: 6f 75 6e 64 20 28 2a 20 28 2f 20 70 61 73 73 20 ound (* (/ pass
1450: 74 6f 74 61 6c 29 20 31 30 30 29 29 29 0a 09 09 total) 100)))...
1460: 09 09 09 20 20 20 20 28 66 61 69 6c 70 65 72 20 ... (failper
1470: 28 2d 20 31 30 30 20 70 61 73 73 70 65 72 29 29 (- 100 passper))
1480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 (h
14b0: 69 73 74 6f 72 79 20 28 70 67 64 62 3a 67 65 74 istory (pgdb:get
14c0: 2d 72 75 6e 2d 73 74 61 74 73 2d 68 69 73 74 6f -run-stats-histo
14d0: 72 79 2d 67 69 76 65 6e 2d 74 61 72 67 65 74 20 ry-given-target
14e0: 64 62 68 20 31 20 28 63 6f 6e 63 20 63 6f 6c 2d dbh 1 (conc col-
14f0: 6b 65 79 20 22 2f 22 20 72 6f 77 2d 6b 65 79 29 key "/" row-key)
1500: 29 29 20 20 0a 20 20 20 20 20 20 20 20 20 09 09 )) . ..
1510: 09 09 20 20 20 20 20 28 68 69 73 74 6f 72 79 2d .. (history-
1520: 68 61 73 68 20 28 70 67 64 62 3a 67 65 74 2d 68 hash (pgdb:get-h
1530: 69 73 74 6f 72 79 2d 68 61 73 68 20 68 69 73 74 istory-hash hist
1540: 6f 72 79 29 29 0a 20 20 20 20 20 20 20 20 20 20 ory)).
1550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1570: 20 20 20 28 68 69 73 74 6f 72 79 2d 6b 65 79 73 (history-keys
1580: 20 28 73 6f 72 74 20 28 68 61 73 68 2d 74 61 62 (sort (hash-tab
1590: 6c 65 2d 6b 65 79 73 20 68 69 73 74 6f 72 79 2d le-keys history-
15a0: 68 61 73 68 29 20 73 74 72 69 6e 67 3e 3d 3f 29 hash) string>=?)
15b0: 29 0a 09 09 09 09 09 20 20 20 20 28 72 75 6e 2d )...... (run-
15c0: 6b 65 79 20 28 73 74 72 69 6e 67 2d 73 75 62 73 key (string-subs
15d0: 74 69 74 75 74 65 20 22 5b 2f 5d 22 20 22 5f 78 titute "[/]" "_x
15e0: 5f 22 20 28 63 6f 6e 63 20 63 6f 6c 2d 6b 65 79 _" (conc col-key
15f0: 20 22 2f 22 20 72 6f 77 2d 6b 65 79 29 20 27 61 "/" row-key) 'a
1600: 6c 6c 29 29 29 0a 09 09 09 09 20 20 20 20 20 20 ll))).....
1610: 20 28 73 3a 74 64 20 20 20 27 73 74 79 6c 65 20 (s:td 'style
1620: 28 63 6f 6e 63 20 22 62 61 63 6b 67 72 6f 75 6e (conc "backgroun
1630: 64 3a 20 2d 77 65 62 6b 69 74 2d 6c 69 6e 65 61 d: -webkit-linea
1640: 72 2d 67 72 61 64 69 65 6e 74 28 6c 65 66 74 2c r-gradient(left,
1650: 20 67 72 65 65 6e 20 22 20 70 61 73 73 70 65 72 green " passper
1660: 20 22 25 2c 20 72 65 64 29 3b 20 62 61 63 6b 67 "%, red); backg
1670: 72 6f 75 6e 64 3a 20 2d 6f 2d 6c 69 6e 65 61 72 round: -o-linear
1680: 2d 67 72 61 64 69 65 6e 74 28 72 69 67 68 74 2c -gradient(right,
1690: 20 67 72 65 65 6e 20 22 20 70 61 73 73 70 65 72 green " passper
16a0: 20 22 25 2c 20 72 65 64 29 3b 20 62 61 63 6b 67 "%, red); backg
16b0: 72 6f 75 6e 64 3a 20 2d 6d 6f 7a 2d 6c 69 6e 65 round: -moz-line
16c0: 61 72 2d 67 72 61 64 69 65 6e 74 28 72 69 67 68 ar-gradient(righ
16d0: 74 2c 20 67 72 65 65 6e 20 22 20 70 61 73 73 70 t, green " passp
16e0: 65 72 20 22 25 2c 20 72 65 64 29 3b 20 62 61 63 er "%, red); bac
16f0: 6b 67 72 6f 75 6e 64 3a 20 6c 69 6e 65 61 72 2d kground: linear-
1700: 67 72 61 64 69 65 6e 74 28 74 6f 20 72 69 67 68 gradient(to righ
1710: 74 2c 20 67 72 65 65 6e 20 22 20 70 61 73 73 70 t, green " passp
1720: 65 72 20 22 25 2c 20 72 65 64 29 3b 22 29 0a 20 er "%, red);").
1730: 20 20 20 20 20 09 09 09 09 20 20 20 20 20 20 28 .... (
1740: 73 3a 61 20 27 63 6c 61 73 73 20 22 77 68 69 74 s:a 'class "whit
1750: 65 22 20 20 27 68 72 65 66 20 28 73 3a 6c 69 6e e" 'href (s:lin
1760: 6b 2d 74 6f 20 22 72 75 6e 22 20 27 74 61 72 67 k-to "run" 'targ
1770: 65 74 20 72 75 6e 2d 6b 65 79 29 0a 09 09 09 09 et run-key).....
1780: 09 20 20 28 63 6f 6e 63 20 22 4c 61 74 65 73 74 . (conc "Latest
1790: 3a 22 20 74 6f 74 61 6c 20 22 2f 22 20 70 61 73 :" total "/" pas
17a0: 73 20 22 2f 22 20 66 61 69 6c 20 22 2f 22 20 6f s "/" fail "/" o
17b0: 74 68 65 72 29 29 20 28 73 3a 73 70 61 6e 20 22 ther)) (s:span "
17c0: 20 20 7c 20 22 29 20 28 73 3a 61 20 27 69 64 20 | ") (s:a 'id
17d0: 69 64 20 27 63 6c 61 73 73 20 22 76 69 65 77 6d id 'class "viewm
17e0: 6f 64 61 6c 22 20 20 27 74 69 74 6c 65 20 22 43 odal" 'title "C
17f0: 6c 69 63 6b 20 74 6f 20 73 65 65 20 64 65 73 63 lick to see desc
1800: 72 69 70 74 69 6f 6e 22 20 20 22 48 69 73 74 6f ription" "Histo
1810: 72 79 22 29 20 28 73 3a 62 72 29 0a 20 20 20 20 ry") (s:br).
1820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
1840: 73 3a 64 69 76 20 27 69 64 20 28 63 6f 6e 63 20 s:div 'id (conc
1850: 22 6d 79 4d 6f 64 61 6c 22 20 69 64 29 20 27 63 "myModal" id) 'c
1860: 6c 61 73 73 20 22 6d 6f 64 61 6c 22 0a 20 20 20 lass "modal".
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1890: 20 20 20 20 20 28 73 3a 64 69 76 20 27 63 6c 61 (s:div 'cla
18a0: 73 73 20 22 6d 6f 64 61 6c 2d 63 6f 6e 74 65 6e ss "modal-conten
18b0: 74 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 t".
18c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18e0: 28 73 3a 73 70 61 6e 20 27 69 64 20 69 64 20 27 (s:span 'id id '
18f0: 63 6c 61 73 73 20 22 63 6c 6f 73 65 22 20 22 26 class "close" "&
1900: 74 69 6d 65 73 3b 22 29 20 0a 20 20 20 20 09 09 times;") . ..
1910: 09 09 09 09 3b 28 73 3a 70 20 28 63 6f 6e 63 20 ....;(s:p (conc
1920: 22 4d 6f 64 61 6c 20 22 20 69 64 20 22 2e 2e 22 "Modal " id ".."
1930: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )).
1940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1960: 20 20 20 20 28 73 3a 64 69 76 20 20 20 20 20 20 (s:div
1970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1990: 20 20 20 20 20 20 20 20 20 20 20 20 0a 20 20 20 .
19a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19d0: 20 20 20 20 20 20 20 28 73 3a 74 61 62 6c 65 20 (s:table
19e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 (s
1a20: 3a 74 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 :tr.
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a60: 20 20 20 28 73 3a 74 68 20 22 52 75 6e 61 6d 65 (s:th "Runame
1a70: 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ").
1a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ab0: 20 20 28 73 3a 74 68 20 22 52 65 73 75 6c 74 22 (s:th "Result"
1ac0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
1ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b00: 20 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
1b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
1b40: 6d 61 70 0a 09 09 09 20 20 20 20 09 09 09 09 09 map.... .....
1b50: 28 6c 61 6d 62 64 61 20 28 68 69 73 74 6f 72 79 (lambda (history
1b60: 2d 6b 65 79 29 0a 20 20 20 20 20 20 20 20 20 20 -key).
1b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ba0: 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 68 (let* ((h
1bb0: 69 73 74 6f 72 79 2d 72 6f 77 20 28 68 61 73 68 istory-row (hash
1bc0: 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 -table-ref/defau
1bd0: 6c 74 20 68 69 73 74 6f 72 79 2d 68 61 73 68 20 lt history-hash
1be0: 68 69 73 74 6f 72 79 2d 6b 65 79 20 23 66 29 29 history-key #f))
1bf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c30: 20 20 20 20 20 20 20 20 20 20 28 68 74 6f 74 61 (htota
1c40: 6c 20 28 76 65 63 74 6f 72 2d 72 65 66 20 68 69 l (vector-ref hi
1c50: 73 74 6f 72 79 2d 72 6f 77 20 31 29 29 0a 20 20 story-row 1)).
1c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ca0: 20 20 20 20 20 20 20 28 68 70 61 73 73 20 28 76 (hpass (v
1cb0: 65 63 74 6f 72 2d 72 65 66 20 68 69 73 74 6f 72 ector-ref histor
1cc0: 79 2d 72 6f 77 20 32 29 29 0a 20 20 20 20 20 20 y-row 2)).
1cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d10: 20 20 20 28 68 66 61 69 6c 20 28 76 65 63 74 6f (hfail (vecto
1d20: 72 2d 72 65 66 20 68 69 73 74 6f 72 79 2d 72 6f r-ref history-ro
1d30: 77 20 33 29 29 0a 20 20 20 20 20 20 20 20 20 20 w 3)).
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
1d80: 68 6f 74 68 65 72 20 28 76 65 63 74 6f 72 2d 72 hother (vector-r
1d90: 65 66 20 68 69 73 74 6f 72 79 2d 72 6f 77 20 34 ef history-row 4
1da0: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )).
1db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1de0: 20 20 20 20 20 20 20 20 20 20 20 20 28 70 61 73 (pas
1df0: 73 70 65 72 20 28 72 6f 75 6e 64 20 28 2a 20 28 sper (round (* (
1e00: 2f 20 68 70 61 73 73 20 68 74 6f 74 61 6c 29 20 / hpass htotal)
1e10: 31 30 30 29 29 29 29 0a 20 20 20 20 20 20 20 20 100)))).
1e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e50: 20 20 20 20 20 20 20 20 28 73 3a 74 72 20 28 73 (s:tr (s
1e60: 3a 74 64 20 20 68 69 73 74 6f 72 79 2d 6b 65 79 :td history-key
1e70: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
1e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1eb0: 20 20 20 20 20 20 20 20 28 73 3a 74 64 20 27 73 (s:td 's
1ec0: 74 79 6c 65 20 28 63 6f 6e 63 20 22 62 61 63 6b tyle (conc "back
1ed0: 67 72 6f 75 6e 64 3a 20 2d 77 65 62 6b 69 74 2d ground: -webkit-
1ee0: 6c 69 6e 65 61 72 2d 67 72 61 64 69 65 6e 74 28 linear-gradient(
1ef0: 6c 65 66 74 2c 20 67 72 65 65 6e 20 22 20 70 61 left, green " pa
1f00: 73 73 70 65 72 20 22 25 2c 20 72 65 64 29 3b 20 ssper "%, red);
1f10: 62 61 63 6b 67 72 6f 75 6e 64 3a 20 2d 6f 2d 6c background: -o-l
1f20: 69 6e 65 61 72 2d 67 72 61 64 69 65 6e 74 28 72 inear-gradient(r
1f30: 69 67 68 74 2c 20 67 72 65 65 6e 20 22 20 70 61 ight, green " pa
1f40: 73 73 70 65 72 20 22 25 2c 20 72 65 64 29 3b 20 ssper "%, red);
1f50: 62 61 63 6b 67 72 6f 75 6e 64 3a 20 2d 6d 6f 7a background: -moz
1f60: 2d 6c 69 6e 65 61 72 2d 67 72 61 64 69 65 6e 74 -linear-gradient
1f70: 28 72 69 67 68 74 2c 20 67 72 65 65 6e 20 22 20 (right, green "
1f80: 70 61 73 73 70 65 72 20 22 25 2c 20 72 65 64 29 passper "%, red)
1f90: 3b 20 62 61 63 6b 67 72 6f 75 6e 64 3a 20 6c 69 ; background: li
1fa0: 6e 65 61 72 2d 67 72 61 64 69 65 6e 74 28 74 6f near-gradient(to
1fb0: 20 72 69 67 68 74 2c 20 67 72 65 65 6e 20 22 20 right, green "
1fc0: 70 61 73 73 70 65 72 20 22 25 2c 20 72 65 64 29 passper "%, red)
1fd0: 3b 22 29 0a 28 63 6f 6e 63 20 20 68 74 6f 74 61 ;").(conc htota
1fe0: 6c 20 22 2f 22 20 68 70 61 73 73 20 22 2f 22 20 l "/" hpass "/"
1ff0: 68 66 61 69 6c 20 22 2f 22 20 68 6f 74 68 65 72 hfail "/" hother
2000: 20 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 ))))).
2010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2040: 20 20 20 20 20 68 69 73 74 6f 72 79 2d 6b 65 79 history-key
2050: 73 29 29 29 29 29 29 29 0a 09 09 09 09 20 20 20 s))))))).....
2060: 20 20 28 73 3a 74 64 20 22 22 29 29 29 29 0a 09 (s:td ""))))..
2070: 09 09 20 20 20 20 20 61 2d 6b 65 79 73 29 29 29 .. a-keys)))
2080: 0a 09 09 20 20 20 20 62 2d 6b 65 79 73 29 29 29 ... b-keys)))
2090: 29 0a 29 0a 28 62 65 67 69 6e 20 0a 28 73 3a 70 ).).(begin .(s:p
20a0: 20 22 22 29 29 29 29 29 29 0a 20 2a 70 72 6f 63 "")))))). *proc
20b0: 65 73 73 2a 29 29 29 29 0a ess*)))).