Artifact
ea92cc86d40b9b6ab3716be97f0c22b0c84a9f2a:
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 30 36 2d 32 30 31 32 2c right 2006-2012,
0060: 20 4d 61 74 74 68 65 77 20 57 65 6c 6c 61 6e 64 Matthew Welland
0070: 2e 0a 3b 3b 20 0a 3b 3b 20 54 68 69 73 20 66 69 ..;; .;; This fi
0080: 6c 65 20 69 73 20 70 61 72 74 20 6f 66 20 4d 65 le is part of Me
0090: 67 61 74 65 73 74 2e 0a 3b 3b 20 0a 3b 3b 20 20 gatest..;; .;;
00a0: 20 20 20 4d 65 67 61 74 65 73 74 20 69 73 20 66 Megatest is f
00b0: 72 65 65 20 73 6f 66 74 77 61 72 65 3a 20 79 6f ree software: yo
00c0: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75 u can redistribu
00d0: 74 65 20 69 74 20 61 6e 64 2f 6f 72 20 6d 6f 64 te it and/or mod
00e0: 69 66 79 0a 3b 3b 20 20 20 20 20 69 74 20 75 6e ify.;; it un
00f0: 64 65 72 20 74 68 65 20 74 65 72 6d 73 20 6f 66 der the terms of
0100: 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c the GNU General
0110: 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 Public License
0120: 61 73 20 70 75 62 6c 69 73 68 65 64 20 62 79 0a as published by.
0130: 3b 3b 20 20 20 20 20 74 68 65 20 46 72 65 65 20 ;; the Free
0140: 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 61 74 Software Foundat
0150: 69 6f 6e 2c 20 65 69 74 68 65 72 20 76 65 72 73 ion, either vers
0160: 69 6f 6e 20 33 20 6f 66 20 74 68 65 20 4c 69 63 ion 3 of the Lic
0170: 65 6e 73 65 2c 20 6f 72 0a 3b 3b 20 20 20 20 20 ense, or.;;
0180: 28 61 74 20 79 6f 75 72 20 6f 70 74 69 6f 6e 29 (at your option)
0190: 20 61 6e 79 20 6c 61 74 65 72 20 76 65 72 73 69 any later versi
01a0: 6f 6e 2e 0a 3b 3b 20 0a 3b 3b 20 20 20 20 20 4d on..;; .;; M
01b0: 65 67 61 74 65 73 74 20 69 73 20 64 69 73 74 72 egatest is distr
01c0: 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 68 6f ibuted in the ho
01d0: 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 pe that it will
01e0: 62 65 20 75 73 65 66 75 6c 2c 0a 3b 3b 20 20 20 be useful,.;;
01f0: 20 20 62 75 74 20 57 49 54 48 4f 55 54 20 41 4e but WITHOUT AN
0200: 59 20 57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 Y WARRANTY; with
0210: 6f 75 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 out even the imp
0220: 6c 69 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 lied warranty of
0230: 0a 3b 3b 20 20 20 20 20 4d 45 52 43 48 41 4e 54 .;; MERCHANT
0240: 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e 45 ABILITY or FITNE
0250: 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43 55 SS FOR A PARTICU
0260: 4c 41 52 20 50 55 52 50 4f 53 45 2e 20 20 53 65 LAR PURPOSE. Se
0270: 65 20 74 68 65 0a 3b 3b 20 20 20 20 20 47 4e 55 e the.;; GNU
0280: 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 General Public
0290: 4c 69 63 65 6e 73 65 20 66 6f 72 20 6d 6f 72 65 License for more
02a0: 20 64 65 74 61 69 6c 73 2e 0a 3b 3b 20 0a 3b 3b details..;; .;;
02b0: 20 20 20 20 20 59 6f 75 20 73 68 6f 75 6c 64 20 You should
02c0: 68 61 76 65 20 72 65 63 65 69 76 65 64 20 61 20 have received a
02d0: 63 6f 70 79 20 6f 66 20 74 68 65 20 47 4e 55 20 copy of the GNU
02e0: 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c General Public L
02f0: 69 63 65 6e 73 65 0a 3b 3b 20 20 20 20 20 61 6c icense.;; al
0300: 6f 6e 67 20 77 69 74 68 20 4d 65 67 61 74 65 73 ong with Megates
0310: 74 2e 20 20 49 66 20 6e 6f 74 2c 20 73 65 65 20 t. If not, see
0320: 3c 68 74 74 70 3a 2f 2f 77 77 77 2e 67 6e 75 2e <http://www.gnu.
0330: 6f 72 67 2f 6c 69 63 65 6e 73 65 73 2f 3e 2e 0a org/licenses/>..
0340: 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .;;=============
0350: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0360: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0370: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0380: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 3d 3d 3d =========..;;===
0390: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
03a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
03b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
03c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
03d0: 3d 3d 3d 0a 3b 3b 20 69 6d 70 6c 65 6d 65 6e 74 ===.;; implement
03e0: 61 74 69 6f 6e 20 6f 66 20 63 6f 6e 74 65 78 74 ation of context
03f0: 20 6d 65 6e 75 20 74 68 61 74 20 70 6f 70 73 20 menu that pops
0400: 75 70 20 6f 6e 0a 3b 3b 20 72 69 67 68 74 20 63 up on.;; right c
0410: 6c 69 63 6b 20 6f 6e 20 74 65 73 74 20 63 65 6c lick on test cel
0420: 6c 20 69 6e 20 52 75 6e 73 20 26 20 52 75 6e 73 l in Runs & Runs
0430: 20 53 75 6d 6d 61 72 79 20 54 61 62 73 0a 3b 3b Summary Tabs.;;
0440: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0450: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0460: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0470: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0480: 3d 3d 3d 3d 3d 3d 0a 0a 28 75 73 65 20 66 6f 72 ======..(use for
0490: 6d 61 74 20 66 6d 74 29 0a 28 72 65 71 75 69 72 mat fmt).(requir
04a0: 65 2d 6c 69 62 72 61 72 79 20 69 75 70 29 0a 28 e-library iup).(
04b0: 69 6d 70 6f 72 74 20 28 70 72 65 66 69 78 20 69 import (prefix i
04c0: 75 70 20 69 75 70 3a 29 29 0a 0a 28 75 73 65 20 up iup:))..(use
04d0: 63 61 6e 76 61 73 2d 64 72 61 77 29 0a 0a 28 75 canvas-draw)..(u
04e0: 73 65 20 73 72 66 69 2d 31 20 70 6f 73 69 78 20 se srfi-1 posix
04f0: 72 65 67 65 78 20 72 65 67 65 78 2d 63 61 73 65 regex regex-case
0500: 20 73 72 66 69 2d 36 39 29 0a 28 75 73 65 20 28 srfi-69).(use (
0510: 70 72 65 66 69 78 20 73 71 6c 69 74 65 33 20 73 prefix sqlite3 s
0520: 71 6c 69 74 65 33 3a 29 29 0a 0a 28 64 65 63 6c qlite3:))..(decl
0530: 61 72 65 20 28 75 6e 69 74 20 64 61 73 68 62 6f are (unit dashbo
0540: 61 72 64 2d 63 6f 6e 74 65 78 74 2d 6d 65 6e 75 ard-context-menu
0550: 29 29 0a 28 64 65 63 6c 61 72 65 20 28 75 73 65 )).(declare (use
0560: 73 20 63 6f 6d 6d 6f 6e 29 29 0a 28 64 65 63 6c s common)).(decl
0570: 61 72 65 20 28 75 73 65 73 20 64 62 29 29 0a 28 are (uses db)).(
0580: 64 65 63 6c 61 72 65 20 28 75 73 65 73 20 67 75 declare (uses gu
0590: 74 69 6c 73 29 29 0a 28 64 65 63 6c 61 72 65 20 tils)).(declare
05a0: 28 75 73 65 73 20 72 6d 74 29 29 0a 28 64 65 63 (uses rmt)).(dec
05b0: 6c 61 72 65 20 28 75 73 65 73 20 65 7a 73 74 65 lare (uses ezste
05c0: 70 73 29 29 0a 3b 3b 20 28 64 65 63 6c 61 72 65 ps)).;; (declare
05d0: 20 28 75 73 65 73 20 73 64 62 29 29 0a 3b 3b 20 (uses sdb)).;;
05e0: 28 64 65 63 6c 61 72 65 20 28 75 73 65 73 20 66 (declare (uses f
05f0: 69 6c 65 64 62 29 29 0a 28 64 65 63 6c 61 72 65 iledb)).(declare
0600: 20 28 75 73 65 73 20 73 75 62 72 75 6e 29 29 0a (uses subrun)).
0610: 0a 28 69 6e 63 6c 75 64 65 20 22 63 6f 6d 6d 6f .(include "commo
0620: 6e 5f 72 65 63 6f 72 64 73 2e 73 63 6d 22 29 0a n_records.scm").
0630: 28 69 6e 63 6c 75 64 65 20 22 64 62 5f 72 65 63 (include "db_rec
0640: 6f 72 64 73 2e 73 63 6d 22 29 0a 28 69 6e 63 6c ords.scm").(incl
0650: 75 64 65 20 22 72 75 6e 5f 72 65 63 6f 72 64 73 ude "run_records
0660: 2e 73 63 6d 22 29 0a 0a 28 64 65 66 69 6e 65 20 .scm")..(define
0670: 28 64 62 6f 61 72 64 3a 6c 61 75 6e 63 68 2d 74 (dboard:launch-t
0680: 65 73 74 70 61 6e 65 6c 20 72 75 6e 2d 69 64 20 estpanel run-id
0690: 74 65 73 74 2d 69 64 29 0a 20 20 28 6c 65 74 2a test-id). (let*
06a0: 20 28 28 64 62 6f 61 72 64 65 78 65 20 28 63 6f ((dboardexe (co
06b0: 6d 6d 6f 6e 3a 66 69 6e 64 2d 6c 6f 63 61 6c 2d mmon:find-local-
06c0: 6d 65 67 61 74 65 73 74 20 22 64 61 73 68 62 6f megatest "dashbo
06d0: 61 72 64 22 29 29 0a 20 20 20 20 20 20 20 20 20 ard")).
06e0: 28 63 6d 64 20 28 63 6f 6e 63 20 64 62 6f 61 72 (cmd (conc dboar
06f0: 64 65 78 65 0a 20 20 20 20 20 20 20 20 20 20 20 dexe.
0700: 20 20 20 20 20 20 20 20 20 22 20 2d 74 65 73 74 " -test
0710: 20 22 20 72 75 6e 2d 69 64 20 22 2c 22 20 74 65 " run-id "," te
0720: 73 74 2d 69 64 0a 20 20 20 20 20 20 20 20 20 20 st-id.
0730: 20 20 20 20 20 20 20 20 20 20 22 20 26 22 29 29 " &"))
0740: 29 0a 20 20 20 20 28 73 79 73 74 65 6d 20 63 6d ). (system cm
0750: 64 29 29 29 0a 0a 0a 28 64 65 66 69 6e 65 20 28 d)))...(define (
0760: 64 61 73 68 62 6f 61 72 64 3a 72 75 6e 2d 6d 65 dashboard:run-me
0770: 6e 75 2d 69 74 65 6d 73 20 20 72 75 6e 2d 69 64 nu-items run-id
0780: 20 74 65 73 74 2d 69 64 20 74 61 72 67 65 74 20 test-id target
0790: 72 75 6e 6e 61 6d 65 20 74 65 73 74 2d 6e 61 6d runname test-nam
07a0: 65 20 74 65 73 74 70 61 74 74 20 69 74 65 6d 2d e testpatt item-
07b0: 74 65 73 74 2d 70 61 74 68 20 74 65 73 74 2d 69 test-path test-i
07c0: 6e 66 6f 29 0a 20 20 28 6c 69 73 74 0a 20 20 20 nfo). (list.
07d0: 28 69 75 70 3a 6d 65 6e 75 2d 69 74 65 6d 0a 20 (iup:menu-item.
07e0: 20 20 20 28 63 6f 6e 63 20 22 52 65 72 75 6e 20 (conc "Rerun
07f0: 22 20 74 65 73 74 70 61 74 74 29 0a 20 20 20 20 " testpatt).
0800: 23 3a 61 63 74 69 6f 6e 0a 20 20 20 20 28 6c 61 #:action. (la
0810: 6d 62 64 61 20 28 6f 62 6a 29 0a 20 20 20 20 20 mbda (obj).
0820: 20 3b 3b 20 28 70 72 69 6e 74 20 20 22 20 72 75 ;; (print " ru
0830: 6e 2d 69 64 3a 20 22 20 72 75 6e 2d 69 64 20 22 n-id: " run-id "
0840: 20 74 65 73 74 2d 69 64 3a 20 22 20 74 65 73 74 test-id: " test
0850: 2d 69 64 20 22 20 74 61 72 67 65 74 3a 20 22 20 -id " target: "
0860: 74 61 72 67 65 74 20 22 20 72 75 6e 6e 61 6d 65 target " runname
0870: 3a 20 22 20 72 75 6e 6e 61 6d 65 20 22 20 74 65 : " runname " te
0880: 73 74 2d 6e 61 6d 65 3a 20 22 20 74 65 73 74 2d st-name: " test-
0890: 6e 61 6d 65 20 22 20 74 65 73 74 70 61 74 74 3a name " testpatt:
08a0: 20 22 20 74 65 73 74 70 61 74 74 20 22 69 74 65 " testpatt "ite
08b0: 6d 2d 70 61 74 68 20 3a 20 22 20 69 74 65 6d 2d m-path : " item-
08c0: 70 61 74 68 29 0a 20 20 20 20 20 20 28 63 6f 6d path). (com
08d0: 6d 6f 6e 3a 72 75 6e 2d 61 2d 63 6f 6d 6d 61 6e mon:run-a-comman
08e0: 64 0a 20 20 20 20 20 20 20 28 63 6f 6e 63 20 22 d. (conc "
08f0: 6d 65 67 61 74 65 73 74 20 2d 72 75 6e 20 2d 74 megatest -run -t
0900: 61 72 67 65 74 20 22 20 74 61 72 67 65 74 0a 20 arget " target.
0910: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 2d 72 " -r
0920: 75 6e 6e 61 6d 65 20 22 20 72 75 6e 6e 61 6d 65 unname " runname
0930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 . "
0940: 2d 74 65 73 74 70 61 74 74 20 22 20 74 65 73 74 -testpatt " test
0950: 70 61 74 74 0a 20 20 20 20 20 20 20 20 20 20 20 patt.
0960: 20 20 22 20 2d 70 72 65 63 6c 65 61 6e 20 2d 63 " -preclean -c
0970: 6c 65 61 6e 2d 63 61 63 68 65 22 29 0a 20 20 20 lean-cache").
0980: 20 20 20 20 29 29 29 0a 20 20 20 28 69 75 70 3a ))). (iup:
0990: 6d 65 6e 75 2d 69 74 65 6d 0a 20 20 20 20 22 52 menu-item. "R
09a0: 65 72 75 6e 20 43 6f 6d 70 6c 65 74 65 20 52 75 erun Complete Ru
09b0: 6e 22 0a 20 20 20 20 23 3a 61 63 74 69 6f 6e 0a n". #:action.
09c0: 20 20 20 20 28 6c 61 6d 62 64 61 20 28 6f 62 6a (lambda (obj
09d0: 29 0a 20 20 20 20 20 20 28 63 6f 6d 6d 6f 6e 3a ). (common:
09e0: 72 75 6e 2d 61 2d 63 6f 6d 6d 61 6e 64 0a 20 20 run-a-command.
09f0: 20 20 20 20 20 28 63 6f 6e 63 20 22 6d 65 67 61 (conc "mega
0a00: 74 65 73 74 20 2d 73 65 74 2d 73 74 61 74 65 2d test -set-state-
0a10: 73 74 61 74 75 73 20 4e 4f 54 5f 53 54 41 52 54 status NOT_START
0a20: 45 44 2c 6e 2f 61 20 2d 72 75 6e 20 2d 74 61 72 ED,n/a -run -tar
0a30: 67 65 74 20 22 20 74 61 72 67 65 74 0a 20 20 20 get " target.
0a40: 20 20 20 20 20 20 20 20 20 20 22 20 2d 72 75 6e " -run
0a50: 6e 61 6d 65 20 22 20 72 75 6e 6e 61 6d 65 0a 20 name " runname.
0a60: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 2d 74 " -t
0a70: 65 73 74 70 61 74 74 20 25 20 22 0a 20 20 20 20 estpatt % ".
0a80: 20 20 20 20 20 20 20 20 20 22 20 2d 70 72 65 63 " -prec
0a90: 6c 65 61 6e 20 2d 63 6c 65 61 6e 2d 63 61 63 68 lean -clean-cach
0aa0: 65 22 29 29 29 29 0a 20 20 20 28 69 75 70 3a 6d e")))). (iup:m
0ab0: 65 6e 75 2d 69 74 65 6d 0a 20 20 20 20 22 43 6c enu-item. "Cl
0ac0: 65 61 6e 20 43 6f 6d 70 6c 65 74 65 20 52 75 6e ean Complete Run
0ad0: 22 0a 20 20 20 20 23 3a 61 63 74 69 6f 6e 0a 20 ". #:action.
0ae0: 20 20 20 28 6c 61 6d 62 64 61 20 28 6f 62 6a 29 (lambda (obj)
0af0: 0a 20 20 20 20 20 20 28 63 6f 6d 6d 6f 6e 3a 72 . (common:r
0b00: 75 6e 2d 61 2d 63 6f 6d 6d 61 6e 64 0a 20 20 20 un-a-command.
0b10: 20 20 20 20 28 63 6f 6e 63 20 22 6d 65 67 61 74 (conc "megat
0b20: 65 73 74 20 2d 72 65 6d 6f 76 65 2d 72 75 6e 73 est -remove-runs
0b30: 20 2d 74 61 72 67 65 74 20 22 20 74 61 72 67 65 -target " targe
0b40: 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22 t. "
0b50: 20 2d 72 75 6e 6e 61 6d 65 20 22 20 72 75 6e 6e -runname " runn
0b60: 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 ame.
0b70: 20 22 20 2d 74 65 73 74 70 61 74 74 20 25 20 22 " -testpatt % "
0b80: 29 29 29 29 0a 20 20 20 28 69 75 70 3a 6d 65 6e )))). (iup:men
0b90: 75 2d 69 74 65 6d 20 0a 20 20 20 20 22 4b 69 6c u-item . "Kil
0ba0: 6c 20 43 6f 6d 70 6c 65 74 65 20 52 75 6e 22 0a l Complete Run".
0bb0: 20 20 20 20 23 3a 61 63 74 69 6f 6e 0a 20 20 20 #:action.
0bc0: 20 28 6c 61 6d 62 64 61 20 28 6f 62 6a 29 0a 20 (lambda (obj).
0bd0: 20 20 20 20 20 28 63 6f 6d 6d 6f 6e 3a 72 75 6e (common:run
0be0: 2d 61 2d 63 6f 6d 6d 61 6e 64 0a 20 20 20 20 20 -a-command.
0bf0: 20 20 28 63 6f 6e 63 20 22 6d 65 67 61 74 65 73 (conc "megates
0c00: 74 20 2d 73 65 74 2d 73 74 61 74 65 2d 73 74 61 t -set-state-sta
0c10: 74 75 73 20 4b 49 4c 4c 52 45 51 2c 6e 2f 61 20 tus KILLREQ,n/a
0c20: 2d 74 61 72 67 65 74 20 22 20 74 61 72 67 65 74 -target " target
0c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 . "
0c40: 2d 72 75 6e 6e 61 6d 65 20 22 20 72 75 6e 6e 61 -runname " runna
0c50: 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 me.
0c60: 22 20 2d 74 65 73 74 70 61 74 74 20 25 20 22 0a " -testpatt % ".
0c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 "
0c80: 2d 73 74 61 74 65 20 52 55 4e 4e 49 4e 47 2c 52 -state RUNNING,R
0c90: 45 4d 4f 54 45 48 4f 53 54 53 54 41 52 54 2c 4c EMOTEHOSTSTART,L
0ca0: 41 55 4e 43 48 45 44 2c 4e 4f 54 5f 53 54 41 52 AUNCHED,NOT_STAR
0cb0: 54 45 44 22 29 29 29 29 0a 20 20 20 28 69 75 70 TED")))). (iup
0cc0: 3a 6d 65 6e 75 2d 69 74 65 6d 20 0a 20 20 20 20 :menu-item .
0cd0: 22 44 65 6c 65 74 65 20 52 75 6e 20 44 61 74 61 "Delete Run Data
0ce0: 22 0a 20 20 20 20 23 3a 61 63 74 69 6f 6e 0a 20 ". #:action.
0cf0: 20 20 20 28 6c 61 6d 62 64 61 20 28 6f 62 6a 29 (lambda (obj)
0d00: 0a 20 20 20 20 20 20 28 63 6f 6d 6d 6f 6e 3a 72 . (common:r
0d10: 75 6e 2d 61 2d 63 6f 6d 6d 61 6e 64 0a 20 20 20 un-a-command.
0d20: 20 20 20 20 28 63 6f 6e 63 20 22 6d 65 67 61 74 (conc "megat
0d30: 65 73 74 20 2d 72 65 6d 6f 76 65 2d 72 75 6e 73 est -remove-runs
0d40: 20 2d 74 61 72 67 65 74 20 22 20 74 61 72 67 65 -target " targe
0d50: 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22 t. "
0d60: 20 2d 72 75 6e 6e 61 6d 65 20 22 20 72 75 6e 6e -runname " runn
0d70: 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 ame.
0d80: 20 22 20 2d 74 65 73 74 70 61 74 74 20 25 20 22 " -testpatt % "
0d90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 . "
0da0: 20 2d 6b 65 65 70 2d 72 65 63 6f 72 64 73 22 29 -keep-records")
0db0: 29 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 )))))..(define (
0dc0: 64 61 73 68 62 6f 61 72 64 3a 74 65 73 74 2d 6d dashboard:test-m
0dd0: 65 6e 75 2d 69 74 65 6d 73 20 20 72 75 6e 2d 69 enu-items run-i
0de0: 64 20 74 65 73 74 2d 69 64 20 74 61 72 67 65 74 d test-id target
0df0: 20 72 75 6e 6e 61 6d 65 20 74 65 73 74 2d 6e 61 runname test-na
0e00: 6d 65 20 74 65 73 74 70 61 74 74 20 69 74 65 6d me testpatt item
0e10: 2d 74 65 73 74 2d 70 61 74 68 20 74 65 73 74 2d -test-path test-
0e20: 69 6e 66 6f 29 0a 20 20 28 6c 69 73 74 0a 20 20 info). (list.
0e30: 20 28 69 75 70 3a 6d 65 6e 75 2d 69 74 65 6d 0a (iup:menu-item.
0e40: 20 20 20 20 28 63 6f 6e 63 20 22 52 65 72 75 6e (conc "Rerun
0e50: 20 22 20 69 74 65 6d 2d 74 65 73 74 2d 70 61 74 " item-test-pat
0e60: 68 29 0a 20 20 20 20 23 3a 61 63 74 69 6f 6e 0a h). #:action.
0e70: 20 20 20 20 28 6c 61 6d 62 64 61 20 28 6f 62 6a (lambda (obj
0e80: 29 0a 20 20 20 20 20 20 28 63 6f 6d 6d 6f 6e 3a ). (common:
0e90: 72 75 6e 2d 61 2d 63 6f 6d 6d 61 6e 64 0a 20 20 run-a-command.
0ea0: 20 20 20 20 20 28 63 6f 6e 63 20 22 6d 65 67 61 (conc "mega
0eb0: 74 65 73 74 20 2d 73 65 74 2d 73 74 61 74 65 2d test -set-state-
0ec0: 73 74 61 74 75 73 20 4e 4f 54 5f 53 54 41 52 54 status NOT_START
0ed0: 45 44 2c 6e 2f 61 20 2d 72 75 6e 20 2d 74 61 72 ED,n/a -run -tar
0ee0: 67 65 74 20 22 20 74 61 72 67 65 74 0a 20 20 20 get " target.
0ef0: 20 20 20 20 20 20 20 20 20 20 22 20 2d 72 75 6e " -run
0f00: 6e 61 6d 65 20 22 20 72 75 6e 6e 61 6d 65 0a 20 name " runname.
0f10: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 2d 74 " -t
0f20: 65 73 74 70 61 74 74 20 22 20 69 74 65 6d 2d 74 estpatt " item-t
0f30: 65 73 74 2d 70 61 74 68 0a 20 20 20 20 20 20 20 est-path.
0f40: 20 20 20 20 20 20 22 20 2d 70 72 65 63 6c 65 61 " -preclea
0f50: 6e 20 2d 63 6c 65 61 6e 2d 63 61 63 68 65 22 29 n -clean-cache")
0f60: 29 29 29 0a 20 20 20 28 69 75 70 3a 6d 65 6e 75 ))). (iup:menu
0f70: 2d 69 74 65 6d 0a 20 20 20 20 28 63 6f 6e 63 20 -item. (conc
0f80: 22 4b 69 6c 6c 20 22 20 69 74 65 6d 2d 74 65 73 "Kill " item-tes
0f90: 74 2d 70 61 74 68 29 0a 20 20 20 20 23 3a 61 63 t-path). #:ac
0fa0: 74 69 6f 6e 0a 20 20 20 20 28 6c 61 6d 62 64 61 tion. (lambda
0fb0: 20 28 6f 62 6a 29 0a 20 20 20 20 20 20 3b 3b 20 (obj). ;;
0fc0: 28 72 6d 74 3a 74 65 73 74 2d 73 65 74 2d 73 74 (rmt:test-set-st
0fd0: 61 74 65 2d 73 74 61 74 75 73 2d 62 79 2d 69 64 ate-status-by-id
0fe0: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 69 64 20 run-id test-id
0ff0: 22 4b 49 4c 4c 52 45 51 22 20 23 66 20 23 66 29 "KILLREQ" #f #f)
1000: 0a 20 20 20 20 20 20 28 63 6f 6d 6d 6f 6e 3a 72 . (common:r
1010: 75 6e 2d 61 2d 63 6f 6d 6d 61 6e 64 0a 20 20 20 un-a-command.
1020: 20 20 20 20 28 63 6f 6e 63 20 22 6d 65 67 61 74 (conc "megat
1030: 65 73 74 20 2d 73 65 74 2d 73 74 61 74 65 2d 73 est -set-state-s
1040: 74 61 74 75 73 20 4b 49 4c 4c 52 45 51 2c 6e 2f tatus KILLREQ,n/
1050: 61 20 2d 74 61 72 67 65 74 20 22 20 74 61 72 67 a -target " targ
1060: 65 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 et.
1070: 22 20 2d 72 75 6e 6e 61 6d 65 20 22 20 72 75 6e " -runname " run
1080: 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 name.
1090: 20 20 22 20 2d 74 65 73 74 70 61 74 74 20 22 20 " -testpatt "
10a0: 69 74 65 6d 2d 74 65 73 74 2d 70 61 74 68 20 0a item-test-path .
10b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 2d " -
10c0: 73 74 61 74 65 20 52 55 4e 4e 49 4e 47 2c 52 45 state RUNNING,RE
10d0: 4d 4f 54 45 48 4f 53 54 53 54 41 52 54 2c 4c 41 MOTEHOSTSTART,LA
10e0: 55 4e 43 48 45 44 22 29 29 29 29 0a 20 20 20 28 UNCHED")))). (
10f0: 69 75 70 3a 6d 65 6e 75 2d 69 74 65 6d 0a 20 20 iup:menu-item.
1100: 20 20 28 63 6f 6e 63 20 22 44 65 6c 65 74 65 20 (conc "Delete
1110: 64 61 74 61 20 3a 20 22 20 69 74 65 6d 2d 74 65 data : " item-te
1120: 73 74 2d 70 61 74 68 29 0a 20 20 20 20 23 3a 61 st-path). #:a
1130: 63 74 69 6f 6e 0a 20 20 20 20 28 6c 61 6d 62 64 ction. (lambd
1140: 61 20 28 6f 62 6a 29 0a 20 20 20 20 20 20 28 63 a (obj). (c
1150: 6f 6d 6d 6f 6e 3a 72 75 6e 2d 61 2d 63 6f 6d 6d ommon:run-a-comm
1160: 61 6e 64 0a 20 20 20 20 20 20 20 28 63 6f 6e 63 and. (conc
1170: 20 22 6d 65 67 61 74 65 73 74 20 2d 72 65 6d 6f "megatest -remo
1180: 76 65 2d 72 75 6e 73 20 2d 74 61 72 67 65 74 20 ve-runs -target
1190: 22 20 74 61 72 67 65 74 0a 20 20 20 20 20 20 20 " target.
11a0: 20 20 20 20 20 20 22 20 2d 72 75 6e 6e 61 6d 65 " -runname
11b0: 20 22 20 72 75 6e 6e 61 6d 65 0a 20 20 20 20 20 " runname.
11c0: 20 20 20 20 20 20 20 20 22 20 2d 74 65 73 74 70 " -testp
11d0: 61 74 74 20 22 20 69 74 65 6d 2d 74 65 73 74 2d att " item-test-
11e0: 70 61 74 68 20 0a 20 20 20 20 20 20 20 20 20 20 path .
11f0: 20 20 20 22 20 2d 6b 65 65 70 2d 72 65 63 6f 72 " -keep-recor
1200: 64 73 22 29 29 29 29 0a 20 20 20 28 69 75 70 3a ds")))). (iup:
1210: 6d 65 6e 75 2d 69 74 65 6d 0a 20 20 20 20 28 63 menu-item. (c
1220: 6f 6e 63 20 22 43 6c 65 61 6e 20 22 69 74 65 6d onc "Clean "item
1230: 2d 74 65 73 74 2d 70 61 74 68 29 0a 20 20 20 20 -test-path).
1240: 23 3a 61 63 74 69 6f 6e 0a 20 20 20 20 28 6c 61 #:action. (la
1250: 6d 62 64 61 20 28 6f 62 6a 29 0a 20 20 20 20 20 mbda (obj).
1260: 20 28 63 6f 6d 6d 6f 6e 3a 72 75 6e 2d 61 2d 63 (common:run-a-c
1270: 6f 6d 6d 61 6e 64 0a 20 20 20 20 20 20 20 28 63 ommand. (c
1280: 6f 6e 63 20 22 6d 65 67 61 74 65 73 74 20 2d 72 onc "megatest -r
1290: 65 6d 6f 76 65 2d 72 75 6e 73 20 2d 74 61 72 67 emove-runs -targ
12a0: 65 74 20 22 20 74 61 72 67 65 74 0a 20 20 20 20 et " target.
12b0: 20 20 20 20 20 20 20 20 20 22 20 2d 72 75 6e 6e " -runn
12c0: 61 6d 65 20 22 20 72 75 6e 6e 61 6d 65 0a 20 20 ame " runname.
12d0: 20 20 20 20 20 20 20 20 20 20 20 22 20 2d 74 65 " -te
12e0: 73 74 70 61 74 74 20 22 20 69 74 65 6d 2d 74 65 stpatt " item-te
12f0: 73 74 2d 70 61 74 68 29 29 29 29 0a 20 20 20 28 st-path)))). (
1300: 69 75 70 3a 6d 65 6e 75 2d 69 74 65 6d 0a 20 20 iup:menu-item.
1310: 20 20 22 53 74 61 72 74 20 78 74 65 72 6d 22 0a "Start xterm".
1320: 20 20 20 20 23 3a 61 63 74 69 6f 6e 0a 20 20 20 #:action.
1330: 20 28 6c 61 6d 62 64 61 20 28 6f 62 6a 29 0a 20 (lambda (obj).
1340: 20 20 20 20 20 28 64 63 6f 6d 6d 6f 6e 3a 65 78 (dcommon:ex
1350: 61 6d 69 6e 65 2d 78 74 65 72 6d 20 72 75 6e 2d amine-xterm run-
1360: 69 64 20 74 65 73 74 2d 69 64 29 29 29 0a 20 20 id test-id))).
1370: 20 3b 3b 28 6c 65 74 2a 20 28 28 63 6d 64 20 28 ;;(let* ((cmd (
1380: 63 6f 6e 63 20 28 63 61 72 20 28 61 72 67 76 29 conc (car (argv)
1390: 29 20 22 20 2d 78 74 65 72 6d 20 22 20 72 75 6e ) " -xterm " run
13a0: 2d 69 64 20 22 2c 22 20 74 65 73 74 2d 69 64 20 -id "," test-id
13b0: 22 26 22 29 29 29 0a 20 20 20 3b 3b 20 28 73 79 "&"))). ;; (sy
13c0: 73 74 65 6d 20 63 6d 64 29 29 29 29 0a 20 20 20 stem cmd)))).
13d0: 28 69 75 70 3a 6d 65 6e 75 2d 69 74 65 6d 0a 20 (iup:menu-item.
13e0: 20 20 20 22 45 64 69 74 20 74 65 73 74 63 6f 6e "Edit testcon
13f0: 66 69 67 22 0a 20 20 20 20 23 3a 61 63 74 69 6f fig". #:actio
1400: 6e 0a 20 20 20 20 28 6c 61 6d 62 64 61 20 28 6f n. (lambda (o
1410: 62 6a 29 0a 20 20 20 20 20 20 28 6c 65 74 2a 20 bj). (let*
1420: 28 28 61 6c 6c 2d 74 65 73 74 73 20 28 74 65 73 ((all-tests (tes
1430: 74 73 3a 67 65 74 2d 61 6c 6c 29 29 0a 20 20 20 ts:get-all)).
1440: 20 20 20 20 20 20 20 20 20 20 28 65 64 69 74 6f (edito
1450: 72 2d 72 78 20 28 6f 72 20 28 63 6f 6e 66 69 67 r-rx (or (config
1460: 66 3a 6c 6f 6f 6b 75 70 20 2a 63 6f 6e 66 69 67 f:lookup *config
1470: 64 61 74 2a 20 22 73 65 74 75 70 22 20 22 65 64 dat* "setup" "ed
1480: 69 74 6f 72 2d 72 65 67 65 78 22 29 20 0a 20 20 itor-regex") .
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 22 5c 5c 62 28 76 "\\b(v
14b0: 69 6d 3f 7c 6e 61 6e 6f 7c 70 69 63 6f 29 5c 5c im?|nano|pico)\\
14c0: 62 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 b")).
14d0: 20 20 28 65 64 69 74 6f 72 20 28 6f 72 20 28 63 (editor (or (c
14e0: 6f 6e 66 69 67 66 3a 6c 6f 6f 6b 75 70 20 2a 63 onfigf:lookup *c
14f0: 6f 6e 66 69 67 64 61 74 2a 20 22 73 65 74 75 70 onfigdat* "setup
1500: 22 20 22 65 64 69 74 6f 72 22 29 0a 20 20 20 20 " "editor").
1510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1520: 20 20 20 20 20 28 67 65 74 2d 65 6e 76 69 72 6f (get-enviro
1530: 6e 6d 65 6e 74 2d 76 61 72 69 61 62 6c 65 20 22 nment-variable "
1540: 56 49 53 55 41 4c 22 29 0a 20 20 20 20 20 20 20 VISUAL").
1550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1560: 20 20 28 67 65 74 2d 65 6e 76 69 72 6f 6e 6d 65 (get-environme
1570: 6e 74 2d 76 61 72 69 61 62 6c 65 20 22 45 44 49 nt-variable "EDI
1580: 54 4f 52 22 29 20 22 76 69 22 29 29 0a 20 20 20 TOR") "vi")).
1590: 20 20 20 20 20 20 20 20 20 20 28 74 63 6f 6e 66 (tconf
15a0: 69 67 20 28 63 6f 6e 63 20 28 68 61 73 68 2d 74 ig (conc (hash-t
15b0: 61 62 6c 65 2d 72 65 66 20 61 6c 6c 2d 74 65 73 able-ref all-tes
15c0: 74 73 20 74 65 73 74 2d 6e 61 6d 65 29 20 22 2f ts test-name) "/
15d0: 74 65 73 74 63 6f 6e 66 69 67 22 29 29 0a 20 20 testconfig")).
15e0: 20 20 20 20 20 20 20 20 20 20 20 28 63 6d 64 20 (cmd
15f0: 28 63 6f 6e 63 20 28 69 66 20 28 73 74 72 69 6e (conc (if (strin
1600: 67 2d 73 65 61 72 63 68 20 65 64 69 74 6f 72 2d g-search editor-
1610: 72 78 20 65 64 69 74 6f 72 29 0a 20 20 20 20 20 rx editor).
1620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1630: 20 20 20 20 20 20 20 28 63 6f 6e 63 20 22 78 74 (conc "xt
1640: 65 72 6d 20 2d 65 20 22 20 65 64 69 74 6f 72 29 erm -e " editor)
1650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1660: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 64 69 edi
1670: 74 6f 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 tor).
1680: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 22 " "
1690: 20 74 63 6f 6e 66 69 67 20 22 20 26 22 29 29 29 tconfig " &")))
16a0: 0a 20 20 20 20 20 20 20 20 28 73 79 73 74 65 6d . (system
16b0: 20 63 6d 64 29 29 29 29 29 29 0a 0a 28 64 65 66 cmd))))))..(def
16c0: 69 6e 65 20 28 64 61 73 68 62 6f 61 72 64 3a 73 ine (dashboard:s
16d0: 74 65 70 2d 6c 6f 67 73 2d 6d 65 6e 75 2d 69 74 tep-logs-menu-it
16e0: 65 6d 20 20 72 75 6e 2d 69 64 20 74 65 73 74 2d em run-id test-
16f0: 69 64 20 74 61 72 67 65 74 20 72 75 6e 6e 61 6d id target runnam
1700: 65 20 74 65 73 74 2d 6e 61 6d 65 20 74 65 73 74 e test-name test
1710: 70 61 74 74 20 69 74 65 6d 2d 74 65 73 74 2d 70 patt item-test-p
1720: 61 74 68 20 74 65 73 74 2d 69 6e 66 6f 29 0a 20 ath test-info).
1730: 20 28 6c 65 74 2a 20 28 28 73 74 65 70 73 20 28 (let* ((steps (
1740: 74 65 73 74 73 3a 67 65 74 2d 63 6f 6d 70 72 65 tests:get-compre
1750: 73 73 65 64 2d 73 74 65 70 73 20 72 75 6e 2d 69 ssed-steps run-i
1760: 64 20 74 65 73 74 2d 69 64 29 29 20 20 20 3b 3b d test-id)) ;;
1770: 20 23 3c 73 74 65 70 6e 61 6d 65 20 73 74 61 72 #<stepname star
1780: 74 20 65 6e 64 20 73 74 61 74 75 73 20 44 75 72 t end status Dur
1790: 61 74 69 6f 6e 20 4c 6f 67 66 69 6c 65 20 43 6f ation Logfile Co
17a0: 6d 6d 65 6e 74 20 69 64 3e 0a 20 20 20 20 20 20 mment id>.
17b0: 20 20 20 28 72 75 6e 64 69 72 20 28 64 62 3a 74 (rundir (db:t
17c0: 65 73 74 2d 67 65 74 2d 72 75 6e 64 69 72 20 74 est-get-rundir t
17d0: 65 73 74 2d 69 6e 66 6f 29 29 29 0a 20 20 20 20 est-info))).
17e0: 0a 20 20 20 20 28 69 75 70 3a 6d 65 6e 75 2d 69 . (iup:menu-i
17f0: 74 65 6d 0a 20 20 20 20 20 22 53 74 65 70 20 6c tem. "Step l
1800: 6f 67 73 22 0a 20 20 20 20 20 28 61 70 70 6c 79 ogs". (apply
1810: 20 69 75 70 3a 6d 65 6e 75 0a 20 20 20 20 20 20 iup:menu.
1820: 20 20 20 20 20 20 28 6d 61 70 20 28 6c 61 6d 62 (map (lamb
1830: 64 61 20 28 73 74 65 70 29 0a 20 20 20 20 20 20 da (step).
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 (le
1850: 74 20 28 28 73 74 65 70 6e 61 6d 65 20 28 76 65 t ((stepname (ve
1860: 63 74 6f 72 2d 72 65 66 20 73 74 65 70 20 30 29 ctor-ref step 0)
1870: 29 0a 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 28 6c 6f 67 66 (logf
1890: 69 6c 65 20 20 28 76 65 63 74 6f 72 2d 72 65 66 ile (vector-ref
18a0: 20 73 74 65 70 20 35 29 29 0a 20 20 20 20 20 20 step 5)).
18b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18c0: 20 20 20 28 73 74 61 74 75 73 20 20 20 28 76 65 (status (ve
18d0: 63 74 6f 72 2d 72 65 66 20 73 74 65 70 20 33 29 ctor-ref step 3)
18e0: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )).
18f0: 20 20 20 20 20 20 20 20 28 69 75 70 3a 6d 65 6e (iup:men
1900: 75 2d 69 74 65 6d 0a 20 20 20 20 20 20 20 20 20 u-item.
1910: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f (co
1920: 6e 63 20 73 74 65 70 6e 61 6d 65 20 22 2f 22 20 nc stepname "/"
1930: 28 69 66 20 28 73 74 72 69 6e 67 3d 3f 20 6c 6f (if (string=? lo
1940: 67 66 69 6c 65 20 22 22 29 20 22 6e 6f 20 6c 6f gfile "") "no lo
1950: 67 21 22 20 6c 6f 67 66 69 6c 65 29 20 22 20 28 g!" logfile) " (
1960: 22 20 73 74 61 74 75 73 20 22 29 22 29 0a 20 20 " status ")").
1970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1980: 20 20 20 20 23 3a 61 63 74 69 6f 6e 20 28 6c 61 #:action (la
1990: 6d 62 64 61 20 28 6f 62 6a 29 0a 20 20 20 20 20 mbda (obj).
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 28 6c 65 74 (let
19c0: 20 28 28 66 75 6c 6c 66 69 6c 65 20 28 63 6f 6e ((fullfile (con
19d0: 63 20 72 75 6e 64 69 72 20 22 2f 22 20 6c 6f 67 c rundir "/" log
19e0: 66 69 6c 65 29 29 29 0a 20 20 20 20 20 20 20 20 file))).
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 28 69 66 20 28 (if (
1a10: 63 6f 6d 6d 6f 6e 3a 66 69 6c 65 2d 65 78 69 73 common:file-exis
1a20: 74 73 3f 20 66 75 6c 6c 66 69 6c 65 29 0a 20 20 ts? fullfile).
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 28 64 63 6f 6d 6d 6f 6e 3a 72 75 (dcommon:ru
1a60: 6e 2d 68 74 6d 6c 2d 76 69 65 77 65 72 20 66 75 n-html-viewer fu
1a70: 6c 6c 66 69 6c 65 29 0a 20 20 20 20 20 20 20 20 llfile).
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 28 (
1aa0: 6d 65 73 73 61 67 65 2d 77 69 6e 64 6f 77 20 28 message-window (
1ab0: 63 6f 6e 63 20 22 66 69 6c 65 20 22 20 66 75 6c conc "file " ful
1ac0: 6c 66 69 6c 65 20 22 20 6e 6f 74 20 66 6f 75 6e lfile " not foun
1ad0: 64 22 29 29 29 29 29 29 29 29 0a 20 20 20 20 20 d")))))))).
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 65 70 step
1af0: 73 29 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 s)))))..(define
1b00: 28 64 61 73 68 62 6f 61 72 64 3a 74 6f 70 6c 65 (dashboard:tople
1b10: 76 65 6c 2d 6d 65 6e 75 2d 69 74 65 6d 73 20 20 vel-menu-items
1b20: 72 75 6e 2d 69 64 20 74 65 73 74 2d 69 64 20 74 run-id test-id t
1b30: 61 72 67 65 74 20 72 75 6e 6e 61 6d 65 20 74 65 arget runname te
1b40: 73 74 2d 6e 61 6d 65 20 74 65 73 74 70 61 74 74 st-name testpatt
1b50: 20 69 74 65 6d 2d 74 65 73 74 2d 70 61 74 68 20 item-test-path
1b60: 74 65 73 74 2d 69 6e 66 6f 29 0a 20 20 28 6c 69 test-info). (li
1b70: 73 74 0a 0a 20 20 20 28 69 75 70 3a 6d 65 6e 75 st.. (iup:menu
1b80: 2d 69 74 65 6d 0a 20 20 20 20 22 54 65 73 74 20 -item. "Test
1b90: 43 6f 6e 74 72 6f 6c 20 50 61 6e 65 6c 22 0a 20 Control Panel".
1ba0: 20 20 20 23 3a 61 63 74 69 6f 6e 0a 20 20 20 20 #:action.
1bb0: 28 6c 61 6d 62 64 61 20 28 6f 62 6a 29 0a 20 20 (lambda (obj).
1bc0: 20 20 20 20 28 64 62 6f 61 72 64 3a 6c 61 75 6e (dboard:laun
1bd0: 63 68 2d 74 65 73 74 70 61 6e 65 6c 20 72 75 6e ch-testpanel run
1be0: 2d 69 64 20 74 65 73 74 2d 69 64 29 29 29 0a 20 -id test-id))).
1bf0: 20 20 0a 20 20 20 28 64 61 73 68 62 6f 61 72 64 . (dashboard
1c00: 3a 73 74 65 70 2d 6c 6f 67 73 2d 6d 65 6e 75 2d :step-logs-menu-
1c10: 69 74 65 6d 20 20 72 75 6e 2d 69 64 20 74 65 73 item run-id tes
1c20: 74 2d 69 64 20 74 61 72 67 65 74 20 72 75 6e 6e t-id target runn
1c30: 61 6d 65 20 74 65 73 74 2d 6e 61 6d 65 20 74 65 ame test-name te
1c40: 73 74 70 61 74 74 20 69 74 65 6d 2d 74 65 73 74 stpatt item-test
1c50: 2d 70 61 74 68 20 74 65 73 74 2d 69 6e 66 6f 29 -path test-info)
1c60: 0a 0a 20 20 20 28 69 75 70 3a 6d 65 6e 75 2d 69 .. (iup:menu-i
1c70: 74 65 6d 0a 20 20 20 20 28 63 6f 6e 63 20 22 52 tem. (conc "R
1c80: 65 72 75 6e 20 22 20 69 74 65 6d 2d 74 65 73 74 erun " item-test
1c90: 2d 70 61 74 68 29 0a 20 20 20 20 23 3a 61 63 74 -path). #:act
1ca0: 69 6f 6e 0a 20 20 20 20 28 6c 61 6d 62 64 61 20 ion. (lambda
1cb0: 28 6f 62 6a 29 0a 20 20 20 20 20 20 28 63 6f 6d (obj). (com
1cc0: 6d 6f 6e 3a 72 75 6e 2d 61 2d 63 6f 6d 6d 61 6e mon:run-a-comman
1cd0: 64 0a 20 20 20 20 20 20 20 28 63 6f 6e 63 20 22 d. (conc "
1ce0: 6d 65 67 61 74 65 73 74 20 2d 73 65 74 2d 73 74 megatest -set-st
1cf0: 61 74 65 2d 73 74 61 74 75 73 20 4e 4f 54 5f 53 ate-status NOT_S
1d00: 54 41 52 54 45 44 2c 6e 2f 61 20 2d 72 75 6e 20 TARTED,n/a -run
1d10: 2d 74 61 72 67 65 74 20 22 20 74 61 72 67 65 74 -target " target
1d20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 . "
1d30: 2d 72 75 6e 6e 61 6d 65 20 22 20 72 75 6e 6e 61 -runname " runna
1d40: 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 me.
1d50: 22 20 2d 74 65 73 74 70 61 74 74 20 22 20 69 74 " -testpatt " it
1d60: 65 6d 2d 74 65 73 74 2d 70 61 74 68 0a 20 20 20 em-test-path.
1d70: 20 20 20 20 20 20 20 20 20 20 22 20 2d 70 72 65 " -pre
1d80: 63 6c 65 61 6e 20 2d 63 6c 65 61 6e 2d 63 61 63 clean -clean-cac
1d90: 68 65 22 29 29 29 29 0a 20 20 20 0a 20 20 20 28 he")))). . (
1da0: 69 75 70 3a 6d 65 6e 75 2d 69 74 65 6d 0a 20 20 iup:menu-item.
1db0: 20 20 22 53 74 61 72 74 20 78 74 65 72 6d 22 0a "Start xterm".
1dc0: 20 20 20 20 23 3a 61 63 74 69 6f 6e 0a 20 20 20 #:action.
1dd0: 20 28 6c 61 6d 62 64 61 20 28 6f 62 6a 29 0a 20 (lambda (obj).
1de0: 20 20 20 20 20 28 64 63 6f 6d 6d 6f 6e 3a 65 78 (dcommon:ex
1df0: 61 6d 69 6e 65 2d 78 74 65 72 6d 20 72 75 6e 2d amine-xterm run-
1e00: 69 64 20 74 65 73 74 2d 69 64 29 29 29 0a 20 20 id test-id))).
1e10: 20 0a 20 20 20 28 69 75 70 3a 6d 65 6e 75 2d 69 . (iup:menu-i
1e20: 74 65 6d 0a 20 20 20 20 28 63 6f 6e 63 20 22 4b tem. (conc "K
1e30: 69 6c 6c 20 22 20 69 74 65 6d 2d 74 65 73 74 2d ill " item-test-
1e40: 70 61 74 68 29 0a 20 20 20 20 23 3a 61 63 74 69 path). #:acti
1e50: 6f 6e 0a 20 20 20 20 28 6c 61 6d 62 64 61 20 28 on. (lambda (
1e60: 6f 62 6a 29 0a 20 20 20 20 20 20 3b 3b 20 28 72 obj). ;; (r
1e70: 6d 74 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 74 mt:test-set-stat
1e80: 65 2d 73 74 61 74 75 73 2d 62 79 2d 69 64 20 72 e-status-by-id r
1e90: 75 6e 2d 69 64 20 74 65 73 74 2d 69 64 20 22 4b un-id test-id "K
1ea0: 49 4c 4c 52 45 51 22 20 23 66 20 23 66 29 0a 20 ILLREQ" #f #f).
1eb0: 20 20 20 20 20 28 63 6f 6d 6d 6f 6e 3a 72 75 6e (common:run
1ec0: 2d 61 2d 63 6f 6d 6d 61 6e 64 0a 20 20 20 20 20 -a-command.
1ed0: 20 20 28 63 6f 6e 63 20 22 6d 65 67 61 74 65 73 (conc "megates
1ee0: 74 20 2d 73 65 74 2d 73 74 61 74 65 2d 73 74 61 t -set-state-sta
1ef0: 74 75 73 20 4b 49 4c 4c 52 45 51 2c 6e 2f 61 20 tus KILLREQ,n/a
1f00: 2d 74 61 72 67 65 74 20 22 20 74 61 72 67 65 74 -target " target
1f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 . "
1f20: 2d 72 75 6e 6e 61 6d 65 20 22 20 72 75 6e 6e 61 -runname " runna
1f30: 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 me.
1f40: 22 20 2d 74 65 73 74 70 61 74 74 20 22 20 69 74 " -testpatt " it
1f50: 65 6d 2d 74 65 73 74 2d 70 61 74 68 20 0a 20 20 em-test-path .
1f60: 20 20 20 20 20 20 20 20 20 20 20 22 20 2d 73 74 " -st
1f70: 61 74 65 20 52 55 4e 4e 49 4e 47 2c 52 45 4d 4f ate RUNNING,REMO
1f80: 54 45 48 4f 53 54 53 54 41 52 54 2c 4c 41 55 4e TEHOSTSTART,LAUN
1f90: 43 48 45 44 2c 4e 4f 54 5f 53 54 41 52 54 45 44 CHED,NOT_STARTED
1fa0: 22 29 29 29 29 0a 20 20 20 0a 20 20 20 28 6c 65 ")))). . (le
1fb0: 74 2a 20 28 28 72 75 6e 64 69 72 20 20 20 20 28 t* ((rundir (
1fc0: 64 62 3a 74 65 73 74 2d 67 65 74 2d 72 75 6e 64 db:test-get-rund
1fd0: 69 72 20 20 20 20 20 20 74 65 73 74 2d 69 6e 66 ir test-inf
1fe0: 6f 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 68 o)). (h
1ff0: 61 73 2d 73 75 62 72 75 6e 20 28 73 75 62 72 75 as-subrun (subru
2000: 6e 3a 73 75 62 72 75 6e 2d 74 65 73 74 2d 69 6e n:subrun-test-in
2010: 69 74 69 61 6c 69 7a 65 64 3f 20 72 75 6e 64 69 itialized? rundi
2020: 72 29 29 29 0a 20 20 20 20 20 28 69 66 20 68 61 r))). (if ha
2030: 73 2d 73 75 62 72 75 6e 0a 20 20 20 20 20 20 20 s-subrun.
2040: 20 20 28 69 75 70 3a 6d 65 6e 75 2d 69 74 65 6d (iup:menu-item
2050: 0a 20 20 20 20 20 20 20 20 20 20 22 4c 61 75 6e . "Laun
2060: 63 68 20 73 75 62 72 75 6e 20 64 61 73 68 62 6f ch subrun dashbo
2070: 61 72 64 22 0a 20 20 20 20 20 20 20 20 20 20 23 ard". #
2080: 3a 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 :action.
2090: 20 20 28 6c 61 6d 62 64 61 20 28 6f 62 6a 29 0a (lambda (obj).
20a0: 20 20 20 20 20 20 20 20 20 20 20 20 28 73 75 62 (sub
20b0: 72 75 6e 3a 6c 61 75 6e 63 68 2d 64 61 73 68 62 run:launch-dashb
20c0: 6f 61 72 64 20 72 75 6e 64 69 72 29 29 29 0a 20 oard rundir))).
20d0: 20 20 20 20 20 20 20 20 28 69 75 70 3a 76 62 6f (iup:vbo
20e0: 78 29 29 29 0a 20 20 20 20 0a 20 20 20 20 28 69 x))). . (i
20f0: 75 70 3a 6d 65 6e 75 2d 69 74 65 6d 0a 20 20 20 up:menu-item.
2100: 20 20 28 63 6f 6e 63 20 22 56 69 65 77 20 4c 6f (conc "View Lo
2110: 67 20 22 20 69 74 65 6d 2d 74 65 73 74 2d 70 61 g " item-test-pa
2120: 74 68 29 0a 20 20 20 20 20 23 3a 61 63 74 69 6f th). #:actio
2130: 6e 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 n. (lambda (
2140: 6f 62 6a 29 0a 20 20 20 20 20 20 20 28 6c 65 74 obj). (let
2150: 2a 20 28 28 72 75 6e 64 69 72 20 20 20 20 28 64 * ((rundir (d
2160: 62 3a 74 65 73 74 2d 67 65 74 2d 72 75 6e 64 69 b:test-get-rundi
2170: 72 20 20 20 20 20 20 74 65 73 74 2d 69 6e 66 6f r test-info
2180: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )).
2190: 20 28 6c 6f 67 66 20 20 20 20 20 20 28 64 62 3a (logf (db:
21a0: 74 65 73 74 2d 67 65 74 2d 66 69 6e 61 6c 5f 6c test-get-final_l
21b0: 6f 67 66 20 20 74 65 73 74 2d 69 6e 66 6f 29 29 ogf test-info))
21c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 . (
21d0: 66 75 6c 6c 66 69 6c 65 20 20 28 63 6f 6e 63 20 fullfile (conc
21e0: 72 75 6e 64 69 72 20 22 2f 22 20 6c 6f 67 66 29 rundir "/" logf)
21f0: 29 29 0a 20 20 20 20 20 20 20 20 20 28 69 66 20 )). (if
2200: 28 63 6f 6d 6d 6f 6e 3a 66 69 6c 65 2d 65 78 69 (common:file-exi
2210: 73 74 73 3f 20 66 75 6c 6c 66 69 6c 65 29 0a 20 sts? fullfile).
2220: 20 20 20 20 20 20 20 20 20 20 20 20 28 64 63 6f (dco
2230: 6d 6d 6f 6e 3a 72 75 6e 2d 68 74 6d 6c 2d 76 69 mmon:run-html-vi
2240: 65 77 65 72 20 66 75 6c 6c 66 69 6c 65 29 0a 20 ewer fullfile).
2250: 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 65 73 (mes
2260: 73 61 67 65 2d 77 69 6e 64 6f 77 20 28 63 6f 6e sage-window (con
2270: 63 20 22 66 69 6c 65 20 22 20 66 75 6c 6c 66 69 c "file " fullfi
2280: 6c 65 20 22 20 6e 6f 74 20 66 6f 75 6e 64 2e 22 le " not found."
2290: 29 29 29 29 29 0a 20 20 20 20 20 29 0a 20 20 20 ))))). ).
22a0: 20 29 29 0a 3b 3b 20 65 78 61 6d 70 6c 65 20 73 )).;; example s
22b0: 65 63 74 69 6f 6e 20 66 6f 72 20 6d 65 67 61 74 ection for megat
22c0: 65 73 74 2e 63 6f 6e 66 69 67 3a 0a 3b 3b 0a 3b est.config:.;;.;
22d0: 3b 20 0a 3b 3b 20 5b 63 75 73 74 6f 6d 2d 63 6f ; .;; [custom-co
22e0: 6e 74 65 78 74 2d 6d 65 6e 75 2d 69 74 65 6d 73 ntext-menu-items
22f0: 5d 0a 3b 3b 20 23 3c 75 6e 69 71 75 65 20 76 61 ].;; #<unique va
2300: 72 3e 20 3c 6d 65 6e 75 20 69 74 65 6d 20 74 65 r> <menu item te
2310: 78 74 2c 20 63 61 6e 20 68 61 76 65 20 74 65 6d xt, can have tem
2320: 70 6c 61 74 65 20 76 61 72 69 61 62 6c 65 73 3e plate variables>
2330: 20 3a 20 3c 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 : <command line
2340: 20 77 69 74 68 20 74 65 6d 70 6c 61 74 65 20 25 with template %
2350: 76 61 72 69 61 62 6c 65 25 73 3e 0a 3b 3b 20 69 variable%s>.;; i
2360: 74 65 6d 31 20 20 63 75 73 74 6f 6d 20 73 68 6f tem1 custom sho
2370: 77 20 72 75 6e 2d 69 64 20 28 25 72 75 6e 2d 69 w run-id (%run-i
2380: 64 25 29 3a 65 63 68 6f 20 22 25 72 75 6e 2d 69 d%):echo "%run-i
2390: 64 25 22 0a 3b 3b 20 69 74 65 6d 32 20 20 63 75 d%".;; item2 cu
23a0: 73 74 6f 6d 20 73 68 6f 77 20 74 65 73 74 2d 69 stom show test-i
23b0: 64 20 28 25 74 65 73 74 2d 69 64 25 29 3a 65 63 d (%test-id%):ec
23c0: 68 6f 20 22 25 74 65 73 74 2d 69 64 25 22 0a 3b ho "%test-id%".;
23d0: 3b 20 69 74 65 6d 33 20 20 63 75 73 74 6f 6d 20 ; item3 custom
23e0: 73 68 6f 77 20 74 61 72 67 65 74 20 28 25 74 61 show target (%ta
23f0: 72 67 65 74 25 29 3a 65 63 68 6f 20 22 25 74 61 rget%):echo "%ta
2400: 72 67 65 74 25 22 0a 3b 3b 20 69 74 65 6d 34 20 rget%".;; item4
2410: 20 63 75 73 74 6f 6d 20 73 68 6f 77 20 74 65 73 custom show tes
2420: 74 2d 6e 61 6d 65 20 28 25 74 65 73 74 2d 6e 61 t-name (%test-na
2430: 6d 65 25 29 3a 65 63 68 6f 20 22 25 74 65 73 74 me%):echo "%test
2440: 2d 6e 61 6d 65 25 22 0a 3b 3b 20 69 74 65 6d 35 -name%".;; item5
2450: 20 20 63 75 73 74 6f 6d 20 73 68 6f 77 20 74 65 custom show te
2460: 73 74 2d 70 61 74 74 20 28 25 74 65 73 74 2d 70 st-patt (%test-p
2470: 61 74 74 25 29 3a 65 63 68 6f 20 22 25 74 65 73 att%):echo "%tes
2480: 74 2d 70 61 74 74 25 22 0a 3b 3b 20 69 74 65 6d t-patt%".;; item
2490: 36 20 20 63 75 73 74 6f 6d 20 73 68 6f 77 20 74 6 custom show t
24a0: 65 73 74 2d 72 75 6e 2d 64 69 72 20 28 25 74 65 est-run-dir (%te
24b0: 73 74 2d 72 75 6e 2d 64 69 72 25 29 3a 65 63 68 st-run-dir%):ech
24c0: 6f 20 22 25 74 65 73 74 2d 72 75 6e 2d 64 69 72 o "%test-run-dir
24d0: 25 22 0a 3b 3b 20 69 74 65 6d 37 20 20 63 75 73 %".;; item7 cus
24e0: 74 6f 6d 20 73 68 6f 77 20 72 75 6e 2d 61 72 65 tom show run-are
24f0: 61 2d 68 6f 6d 65 20 28 25 72 75 6e 2d 61 72 65 a-home (%run-are
2500: 61 2d 68 6f 6d 65 25 29 3a 65 63 68 6f 20 22 25 a-home%):echo "%
2510: 72 75 6e 2d 61 72 65 61 2d 68 6f 6d 65 25 22 0a run-area-home%".
2520: 3b 3b 20 69 74 65 6d 38 20 20 63 75 73 74 6f 6d ;; item8 custom
2530: 20 73 68 6f 77 20 6d 65 67 61 74 65 73 74 20 72 show megatest r
2540: 6f 6f 74 20 28 25 6d 74 2d 72 6f 6f 74 25 29 3a oot (%mt-root%):
2550: 65 63 68 6f 20 22 25 6d 74 2d 72 6f 6f 74 25 22 echo "%mt-root%"
2560: 0a 3b 3b 20 69 74 65 6d 39 20 20 63 75 73 74 6f .;; item9 custo
2570: 6d 20 6c 73 20 3a 20 20 6c 73 20 2d 6c 72 74 0a m ls : ls -lrt.
2580: 3b 3b 20 69 74 65 6d 31 30 20 63 75 73 74 6f 6d ;; item10 custom
2590: 20 73 65 65 20 24 4d 54 5f 52 55 4e 5f 41 52 45 see $MT_RUN_ARE
25a0: 41 5f 48 4f 4d 45 20 28 6e 6f 74 20 79 65 74 20 A_HOME (not yet
25b0: 69 6d 70 6c 65 6d 65 6e 74 65 64 29 20 3a 20 20 implemented) :
25c0: 65 63 68 6f 20 24 4d 54 5f 52 55 4e 5f 41 52 45 echo $MT_RUN_ARE
25d0: 41 5f 48 4f 4d 45 0a 0a 28 64 65 66 69 6e 65 20 A_HOME..(define
25e0: 28 64 61 73 68 62 6f 61 72 64 3a 63 75 73 74 6f (dashboard:custo
25f0: 6d 2d 6d 65 6e 75 2d 69 74 65 6d 73 20 20 72 75 m-menu-items ru
2600: 6e 2d 69 64 20 74 65 73 74 2d 69 64 20 74 61 72 n-id test-id tar
2610: 67 65 74 20 72 75 6e 2d 6e 61 6d 65 20 74 65 73 get run-name tes
2620: 74 2d 6e 61 6d 65 20 74 65 73 74 70 61 74 74 20 t-name testpatt
2630: 69 74 65 6d 2d 74 65 73 74 2d 70 61 74 68 20 74 item-test-path t
2640: 65 73 74 2d 69 6e 66 6f 29 0a 20 20 28 6c 65 74 est-info). (let
2650: 2a 20 28 28 76 61 72 73 20 28 63 6f 6e 66 69 67 * ((vars (config
2660: 66 3a 73 65 63 74 69 6f 6e 2d 76 61 72 73 20 2a f:section-vars *
2670: 63 6f 6e 66 69 67 64 61 74 2a 20 22 63 75 73 74 configdat* "cust
2680: 6f 6d 2d 63 6f 6e 74 65 78 74 2d 6d 65 6e 75 2d om-context-menu-
2690: 69 74 65 6d 73 22 29 29 0a 20 20 20 20 20 20 20 items")).
26a0: 20 20 28 69 74 65 6d 2d 70 61 74 68 20 28 64 62 (item-path (db
26b0: 3a 74 65 73 74 2d 67 65 74 2d 69 74 65 6d 2d 70 :test-get-item-p
26c0: 61 74 68 20 74 65 73 74 2d 69 6e 66 6f 29 29 0a ath test-info)).
26d0: 20 20 20 20 20 20 20 20 20 28 6d 74 2d 72 6f 6f (mt-roo
26e0: 74 20 28 70 61 74 68 6e 61 6d 65 2d 64 69 72 65 t (pathname-dire
26f0: 63 74 6f 72 79 20 20 28 70 61 74 68 6e 61 6d 65 ctory (pathname
2700: 2d 64 69 72 65 63 74 6f 72 79 20 2a 63 6f 6d 6d -directory *comm
2710: 6f 6e 3a 74 68 69 73 2d 65 78 65 2d 64 69 72 2a on:this-exe-dir*
2720: 20 29 29 29 29 0a 20 20 20 20 28 66 69 6c 74 65 )))). (filte
2730: 72 2d 6d 61 70 0a 20 20 20 20 20 28 6c 61 6d 62 r-map. (lamb
2740: 64 61 20 28 76 61 72 29 0a 20 20 20 20 20 20 20 da (var).
2750: 28 6c 65 74 2a 20 28 28 76 61 6c 20 28 63 6f 6e (let* ((val (con
2760: 66 69 67 66 3a 6c 6f 6f 6b 75 70 20 2a 63 6f 6e figf:lookup *con
2770: 66 69 67 64 61 74 2a 20 22 63 75 73 74 6f 6d 2d figdat* "custom-
2780: 63 6f 6e 74 65 78 74 2d 6d 65 6e 75 2d 69 74 65 context-menu-ite
2790: 6d 73 22 20 76 61 72 29 29 0a 20 20 20 20 20 20 ms" var)).
27a0: 20 20 20 20 20 20 20 20 28 6d 20 20 20 28 73 74 (m (st
27b0: 72 69 6e 67 2d 6d 61 74 63 68 20 22 5e 5c 5c 73 ring-match "^\\s
27c0: 2a 28 5b 5e 3a 5d 2b 3f 29 5c 5c 73 2a 3a 5c 5c *([^:]+?)\\s*:\\
27d0: 73 2a 28 2e 2a 3f 29 5c 5c 73 2a 24 22 20 76 61 s*(.*?)\\s*$" va
27e0: 6c 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 69 l))). (i
27f0: 66 20 6d 0a 20 20 20 20 20 20 20 20 20 20 20 20 f m.
2800: 20 28 6c 65 74 2a 20 28 28 6d 65 6e 75 2d 69 74 (let* ((menu-it
2810: 65 6d 2d 74 65 78 74 2d 72 61 77 20 28 6c 69 73 em-text-raw (lis
2820: 74 2d 72 65 66 20 6d 20 31 29 29 0a 20 20 20 20 t-ref m 1)).
2830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2840: 28 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 2d 72 61 (command-line-ra
2850: 77 20 20 20 28 6c 69 73 74 2d 72 65 66 20 6d 20 w (list-ref m
2860: 32 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 2)).
2870: 20 20 20 20 20 20 20 20 28 73 75 62 73 74 2d 61 (subst-a
2880: 6c 69 73 74 20 3b 3b 20 74 65 6d 70 6c 61 74 65 list ;; template
2890: 20 76 61 72 73 0a 20 20 20 20 20 20 20 20 20 20 vars.
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28b0: 60 28 28 20 22 25 72 75 6e 2d 69 64 25 22 20 20 `(( "%run-id%"
28c0: 20 20 2e 20 2c 72 75 6e 2d 69 64 20 20 20 29 0a . ,run-id ).
28d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28e0: 20 20 20 20 20 20 20 20 20 20 20 20 28 20 22 25 ( "%
28f0: 74 65 73 74 2d 69 64 25 22 20 20 20 2e 20 2c 74 test-id%" . ,t
2900: 65 73 74 2d 69 64 20 20 29 0a 20 20 20 20 20 20 est-id ).
2910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2920: 20 20 20 20 20 20 28 20 22 25 74 61 72 67 65 74 ( "%target
2930: 25 22 20 20 20 20 2e 20 2c 74 61 72 67 65 74 20 %" . ,target
2940: 20 20 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ).
2950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2960: 28 20 22 25 74 65 73 74 2d 6e 61 6d 65 25 22 20 ( "%test-name%"
2970: 2e 20 2c 74 65 73 74 2d 6e 61 6d 65 29 0a 20 20 . ,test-name).
2980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2990: 20 20 20 20 20 20 20 20 20 20 28 20 22 25 74 65 ( "%te
29a0: 73 74 2d 70 61 74 74 25 22 20 2e 20 2c 74 65 73 st-patt%" . ,tes
29b0: 74 70 61 74 74 29 0a 20 20 20 20 20 20 20 20 20 tpatt).
29c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29d0: 20 20 20 28 20 22 25 74 65 73 74 2d 72 75 6e 2d ( "%test-run-
29e0: 64 69 72 25 22 20 2e 20 2c 28 64 62 3a 74 65 73 dir%" . ,(db:tes
29f0: 74 2d 67 65 74 2d 72 75 6e 64 69 72 20 74 65 73 t-get-rundir tes
2a00: 74 2d 69 6e 66 6f 29 29 0a 20 20 20 20 20 20 20 t-info)).
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a20: 20 20 20 20 20 28 20 22 25 6d 74 2d 72 6f 6f 74 ( "%mt-root
2a30: 25 22 20 2e 20 2c 6d 74 2d 72 6f 6f 74 29 0a 20 %" . ,mt-root).
2a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a50: 20 20 20 20 20 20 20 20 20 20 20 28 20 22 25 72 ( "%r
2a60: 75 6e 2d 6e 61 6d 65 25 22 20 2e 20 2c 72 75 6e un-name%" . ,run
2a70: 2d 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 -name).
2a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a90: 20 20 20 28 20 22 25 72 75 6e 2d 61 72 65 61 2d ( "%run-area-
2aa0: 68 6f 6d 65 25 22 20 2e 20 2c 2a 74 6f 70 70 61 home%" . ,*toppa
2ab0: 74 68 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20 th*).
2ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ad0: 20 28 20 22 25 69 74 65 6d 2d 70 61 74 68 25 22 ( "%item-path%"
2ae0: 20 2e 20 2c 69 74 65 6d 2d 70 61 74 68 29 0a 20 . ,item-path).
2af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b00: 20 20 20 20 20 20 20 20 20 20 20 28 20 22 25 69 ( "%i
2b10: 74 65 6d 2d 74 65 73 74 2d 70 61 74 74 25 22 20 tem-test-patt%"
2b20: 2e 20 2c 69 74 65 6d 2d 74 65 73 74 2d 70 61 74 . ,item-test-pat
2b30: 68 20 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 h ))).
2b40: 20 20 20 20 20 20 20 20 20 20 28 63 6f 6d 6d 61 (comma
2b50: 6e 64 2d 6c 69 6e 65 20 3b 3b 20 72 65 70 6c 61 nd-line ;; repla
2b60: 63 65 20 74 65 6d 70 6c 61 74 65 20 76 61 72 73 ce template vars
2b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2b80: 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 6c 64 (fold
2b90: 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 r.
2ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 (la
2bb0: 6d 62 64 61 20 28 78 20 69 29 0a 20 20 20 20 20 mbda (x i).
2bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2bd0: 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 2d (string-
2be0: 73 75 62 73 74 69 74 75 74 65 0a 20 20 20 20 20 substitute.
2bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c00: 20 20 20 20 20 20 20 20 20 28 63 61 72 20 78 29 (car x)
2c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
2c30: 2d 3e 73 74 72 69 6e 67 20 28 63 64 72 20 78 29 ->string (cdr x)
2c40: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
2c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c60: 69 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 i.
2c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c80: 23 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 #t)).
2c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ca0: 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 2d 72 61 77 command-line-raw
2cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2cc0: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 73 subs
2cd0: 74 2d 61 6c 69 73 74 29 29 0a 20 20 20 20 20 20 t-alist)).
2ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d (m
2cf0: 65 6e 75 2d 69 74 65 6d 2d 74 65 78 74 20 3b 3b enu-item-text ;;
2d00: 20 72 65 70 6c 61 63 65 20 74 65 6d 70 6c 61 74 replace templat
2d10: 65 20 76 61 72 73 0a 20 20 20 20 20 20 20 20 20 e vars.
2d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d30: 20 28 66 6f 6c 64 72 0a 20 20 20 20 20 20 20 20 (foldr.
2d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d50: 20 20 20 28 6c 61 6d 62 64 61 20 28 78 20 69 29 (lambda (x i)
2d60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 (s
2d80: 74 72 69 6e 67 2d 73 75 62 73 74 69 74 75 74 65 tring-substitute
2d90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
2db0: 63 61 72 20 78 29 0a 20 20 20 20 20 20 20 20 20 car x).
2dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2dd0: 20 20 20 20 20 28 2d 3e 73 74 72 69 6e 67 20 28 (->string (
2de0: 63 64 72 20 78 29 29 0a 20 20 20 20 20 20 20 20 cdr x)).
2df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e00: 20 20 20 20 20 20 69 0a 20 20 20 20 20 20 20 20 i.
2e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e20: 20 20 20 20 20 20 23 74 29 29 0a 20 20 20 20 20 #t)).
2e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e40: 20 20 20 20 20 20 6d 65 6e 75 2d 69 74 65 6d 2d menu-item-
2e50: 74 65 78 74 2d 72 61 77 0a 20 20 20 20 20 20 20 text-raw.
2e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e70: 20 20 20 20 73 75 62 73 74 2d 61 6c 69 73 74 29 subst-alist)
2e80: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )).
2e90: 20 20 28 69 75 70 3a 6d 65 6e 75 2d 69 74 65 6d (iup:menu-item
2ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2eb0: 20 28 63 6f 6e 63 20 22 2a 22 6d 65 6e 75 2d 69 (conc "*"menu-i
2ec0: 74 65 6d 2d 74 65 78 74 29 0a 20 20 20 20 20 20 tem-text).
2ed0: 20 20 20 20 20 20 20 20 20 20 23 3a 61 63 74 69 #:acti
2ee0: 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 on.
2ef0: 20 20 20 28 6c 61 6d 62 64 61 20 28 6f 62 6a 29 (lambda (obj)
2f00: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2f10: 20 20 20 20 28 6c 65 74 2a 20 28 28 73 63 68 65 (let* ((sche
2f20: 6d 65 2d 6d 61 74 63 68 20 28 73 74 72 69 6e 67 me-match (string
2f30: 2d 6d 61 74 63 68 20 22 5e 23 28 5c 5c 28 2e 2a -match "^#(\\(.*
2f40: 29 22 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 29 )" command-line)
2f50: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )).
2f60: 20 20 20 20 20 20 20 3b 3b 28 42 42 3e 20 22 63 ;;(BB> "c
2f70: 6d 64 6c 69 6e 65 20 69 73 20 3e 22 63 6f 6d 6d mdline is >"comm
2f80: 61 6e 64 2d 6c 69 6e 65 22 3c 22 29 0a 20 20 20 and-line"<").
2f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2fa0: 20 28 63 6f 6d 6d 6f 6e 3a 77 69 74 68 2d 65 6e (common:with-en
2fb0: 76 2d 76 61 72 73 0a 20 20 20 20 20 20 20 20 20 v-vars.
2fc0: 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 54 ;; T
2fd0: 4f 44 4f 3a 20 77 69 74 68 2d 65 6e 76 2d 76 61 ODO: with-env-va
2fe0: 72 73 20 3c 72 75 6e 63 6f 6e 66 69 67 20 74 61 rs <runconfig ta
2ff0: 72 67 65 74 20 76 61 72 73 2c 20 65 6e 76 2d 6f rget vars, env-o
3000: 76 65 72 72 69 64 65 20 76 61 72 73 20 66 72 6f verride vars fro
3010: 6d 20 6d 74 65 73 74 3e 0a 20 20 20 20 20 20 20 m mtest>.
3020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b ;;
3030: 20 54 4f 44 4f 3a 20 77 69 74 68 2d 65 6e 76 2d TODO: with-env-
3040: 76 61 72 73 20 4d 54 5f 2a 0a 20 20 20 20 20 20 vars MT_*.
3050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
3060: 72 75 6e 73 3a 67 65 74 2d 6d 74 2d 65 6e 76 2d runs:get-mt-env-
3070: 61 6c 69 73 74 20 72 75 6e 2d 69 64 20 72 75 6e alist run-id run
3080: 2d 6e 61 6d 65 20 74 61 72 67 65 74 20 74 65 73 -name target tes
3090: 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 t-name item-path
30a0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
30b0: 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 .
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 (la
30d0: 6d 62 64 61 20 28 29 0a 20 20 20 20 20 20 20 20 mbda ().
30e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
30f0: 69 66 20 73 63 68 65 6d 65 2d 6d 61 74 63 68 0a if scheme-match.
3100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3110: 20 20 20 20 20 20 20 20 20 20 20 28 62 65 67 69 (begi
3120: 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 n.
3130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
3140: 68 61 6e 64 6c 65 2d 65 78 63 65 70 74 69 6f 6e handle-exception
3150: 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 s.
3160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3170: 65 78 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 exn.
3180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3190: 20 20 28 70 72 69 6e 74 20 22 65 72 72 6f 72 20 (print "error
31a0: 77 69 74 68 20 63 75 73 74 6f 6d 20 6d 65 6e 75 with custom menu
31b0: 20 73 63 68 65 6d 65 22 29 0a 20 20 20 20 20 20 scheme").
31c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31d0: 20 20 20 20 20 20 20 20 28 62 65 67 69 6e 0a 20 (begin.
31e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b ;
3200: 3b 28 42 42 3e 20 22 67 6f 6e 6e 61 20 65 76 61 ;(BB> "gonna eva
3210: 6c 20 69 74 21 22 29 0a 20 20 20 20 20 20 20 20 l it!").
3220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3230: 20 20 20 20 20 20 20 20 28 65 76 61 6c 20 28 77 (eval (w
3240: 69 74 68 2d 69 6e 70 75 74 2d 66 72 6f 6d 2d 73 ith-input-from-s
3250: 74 72 69 6e 67 20 28 63 61 64 72 20 73 63 68 65 tring (cadr sche
3260: 6d 65 2d 6d 61 74 63 68 29 20 72 65 61 64 29 29 me-match) read))
3270: 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))).
3280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
3290: 63 6f 6d 6d 6f 6e 3a 72 75 6e 2d 61 2d 63 6f 6d common:run-a-com
32a0: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e mand command-lin
32b0: 65 20 77 69 74 68 2d 76 61 72 73 3a 20 23 74 29 e with-vars: #t)
32c0: 29 29 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 ))))))).
32d0: 20 20 20 20 20 23 66 29 29 29 0a 20 20 20 20 20 #f))).
32e0: 76 61 72 73 29 29 29 0a 0a 28 64 65 66 69 6e 65 vars)))..(define
32f0: 20 28 64 61 73 68 62 6f 61 72 64 3a 63 6f 6e 74 (dashboard:cont
3300: 65 78 74 2d 6d 65 6e 75 20 20 72 75 6e 2d 69 64 ext-menu run-id
3310: 20 74 65 73 74 2d 69 64 20 74 61 72 67 65 74 20 test-id target
3320: 72 75 6e 6e 61 6d 65 20 74 65 73 74 2d 6e 61 6d runname test-nam
3330: 65 20 74 65 73 74 70 61 74 74 20 69 74 65 6d 2d e testpatt item-
3340: 74 65 73 74 2d 70 61 74 68 20 74 65 73 74 2d 69 test-path test-i
3350: 6e 66 6f 29 0a 20 20 28 6c 65 74 2a 20 28 28 72 nfo). (let* ((r
3360: 75 6e 2d 6d 65 6e 75 2d 69 74 65 6d 73 0a 20 20 un-menu-items.
3370: 20 20 20 20 20 20 20 20 28 64 61 73 68 62 6f 61 (dashboa
3380: 72 64 3a 72 75 6e 2d 6d 65 6e 75 2d 69 74 65 6d rd:run-menu-item
3390: 73 20 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 69 s run-id test-i
33a0: 64 20 74 61 72 67 65 74 20 72 75 6e 6e 61 6d 65 d target runname
33b0: 20 74 65 73 74 2d 6e 61 6d 65 20 74 65 73 74 70 test-name testp
33c0: 61 74 74 20 69 74 65 6d 2d 74 65 73 74 2d 70 61 att item-test-pa
33d0: 74 68 20 74 65 73 74 2d 69 6e 66 6f 29 29 0a 20 th test-info)).
33e0: 20 20 20 20 20 20 20 20 28 74 65 73 74 2d 6d 65 (test-me
33f0: 6e 75 2d 69 74 65 6d 73 0a 20 20 20 20 20 20 20 nu-items.
3400: 20 20 20 28 64 61 73 68 62 6f 61 72 64 3a 74 65 (dashboard:te
3410: 73 74 2d 6d 65 6e 75 2d 69 74 65 6d 73 20 20 72 st-menu-items r
3420: 75 6e 2d 69 64 20 74 65 73 74 2d 69 64 20 74 61 un-id test-id ta
3430: 72 67 65 74 20 72 75 6e 6e 61 6d 65 20 74 65 73 rget runname tes
3440: 74 2d 6e 61 6d 65 20 74 65 73 74 70 61 74 74 20 t-name testpatt
3450: 69 74 65 6d 2d 74 65 73 74 2d 70 61 74 68 20 74 item-test-path t
3460: 65 73 74 2d 69 6e 66 6f 29 29 0a 20 20 20 20 20 est-info)).
3470: 20 20 20 20 28 63 75 73 74 6f 6d 2d 6d 65 6e 75 (custom-menu
3480: 2d 69 74 65 6d 73 0a 20 20 20 20 20 20 20 20 20 -items.
3490: 20 28 64 61 73 68 62 6f 61 72 64 3a 63 75 73 74 (dashboard:cust
34a0: 6f 6d 2d 6d 65 6e 75 2d 69 74 65 6d 73 20 72 75 om-menu-items ru
34b0: 6e 2d 69 64 20 74 65 73 74 2d 69 64 20 74 61 72 n-id test-id tar
34c0: 67 65 74 20 72 75 6e 6e 61 6d 65 20 74 65 73 74 get runname test
34d0: 2d 6e 61 6d 65 20 74 65 73 74 70 61 74 74 20 69 -name testpatt i
34e0: 74 65 6d 2d 74 65 73 74 2d 70 61 74 68 20 74 65 tem-test-path te
34f0: 73 74 2d 69 6e 66 6f 29 29 0a 20 20 20 20 20 20 st-info)).
3500: 20 20 20 28 74 6f 70 6c 65 76 65 6c 2d 6d 65 6e (toplevel-men
3510: 75 2d 69 74 65 6d 73 0a 20 20 20 20 20 20 20 20 u-items.
3520: 20 20 28 64 61 73 68 62 6f 61 72 64 3a 74 6f 70 (dashboard:top
3530: 6c 65 76 65 6c 2d 6d 65 6e 75 2d 69 74 65 6d 73 level-menu-items
3540: 20 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 69 64 run-id test-id
3550: 20 74 61 72 67 65 74 20 72 75 6e 6e 61 6d 65 20 target runname
3560: 74 65 73 74 2d 6e 61 6d 65 20 74 65 73 74 70 61 test-name testpa
3570: 74 74 20 69 74 65 6d 2d 74 65 73 74 2d 70 61 74 tt item-test-pat
3580: 68 20 74 65 73 74 2d 69 6e 66 6f 29 29 0a 20 20 h test-info)).
3590: 20 20 20 20 20 20 20 29 0a 20 20 20 20 28 61 70 ). (ap
35a0: 70 6c 79 20 69 75 70 3a 6d 65 6e 75 0a 20 20 20 ply iup:menu.
35b0: 20 20 20 20 20 20 20 20 60 28 2c 40 74 6f 70 6c `(,@topl
35c0: 65 76 65 6c 2d 6d 65 6e 75 2d 69 74 65 6d 73 0a evel-menu-items.
35d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2c 28 69 ,(i
35e0: 75 70 3a 6d 65 6e 75 2d 69 74 65 6d 0a 20 20 20 up:menu-item.
35f0: 20 20 20 20 20 20 20 20 20 20 20 22 52 75 6e 22 "Run"
3600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 . (
3610: 61 70 70 6c 79 20 69 75 70 3a 6d 65 6e 75 20 72 apply iup:menu r
3620: 75 6e 2d 6d 65 6e 75 2d 69 74 65 6d 73 29 29 0a un-menu-items)).
3630: 20 20 20 20 20 20 20 20 20 20 20 20 20 2c 28 69 ,(i
3640: 75 70 3a 6d 65 6e 75 2d 69 74 65 6d 0a 20 20 20 up:menu-item.
3650: 20 20 20 20 20 20 20 20 20 20 20 22 54 65 73 74 "Test
3660: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ".
3670: 28 61 70 70 6c 79 20 69 75 70 3a 6d 65 6e 75 20 (apply iup:menu
3680: 74 65 73 74 2d 6d 65 6e 75 2d 69 74 65 6d 73 29 test-menu-items)
3690: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 2c ). ,
36a0: 40 63 75 73 74 6f 6d 2d 6d 65 6e 75 2d 69 74 65 @custom-menu-ite
36b0: 6d 73 29 29 29 29 0a ms)))).