(define title "On the Map")

 ; Inputs x,y are always strings or null, but we want integers
 (define (get-integer str)
   (round (string->number (or (brl-nonblank? str)

 ; Validate inputs x, y, descr
 (define-input (get-integer x)
               (get-integer y)
               (brl-nonblank? descr))

 ; Get a JDBC statement object that will be closed automatically
 ; when this page is finished with it.
 (define st (brl-sql-statement brl-context (db1 brl-context)))

 ; If given a new description, try to update.
 (define updates
   (if descr
     (sql-execute-update st
        ]update brlewis_map set descr = [(ss descr)]
where x=[x] and y=[y]

 ; If there was nothing to update, we need to insert
 (define inserts
   (if (and descr (zero? updates))
     (sql-execute-update st
        ]insert into brlewis_map(x, y, descr)
values([x], [y], [(ss descr)])

 (define descr-to-show
     (or descr
         (let ((results (sql-statement-results st
  ]select descr from brlewis_map where x=[x] and y=[y]
           (if (pair? results)
               (caar results)
]<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<meta name="ROBOTS" content="NOINDEX, NOFOLLOW" />
<link rel=stylesheet type="text/css" href="/brl.css">



[(if (positive? (+ updates inserts))
     "<p><strong>Description updated.</strong></p>"

<p>You are at location ([x], [y]) on the map.
[(brl-when (and (<= -99 x 99)
                (<= -99 y 99))]  You may go
<a rel="nofollow" href="map.brl?x=[x]&y=[(+ y 1)]">north</a>,
<a rel="nofollow" href="map.brl?x=[x]&y=[(- y 1)]">south</a>,
<a rel="nofollow" href="map.brl?x=[(+ x 1)]&y=[y]">east</a>, or
<a rel="nofollow" href="map.brl?x=[(- x 1)]&y=[y]">west</a>.</p>

<form action="map.brl" method="POST">
<input type="hidden" name="x" value="[x]">
<input type="hidden" name="y" value="[y]">

<table class="example"><tr><td>
<p>Here is what you see:</p>
<textarea name="descr" cols=50 rows=5>[descr-to-show]</textarea>
<input type="submit" value="Update">

<a href="[(brl-source-link brl-context)]">Show Source</a>