Megatest

Hex Artifact Content
Login

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)))).