00001  def new global shared var prog-started as log.
00002  def new global shared var u-name as char.
00003  
00004  def new shared var screen-title as char.
00005  
00006  def new shared var total-floor-no as int init 4.
00007  def new shared var room-types as char extent 5.
00008  
00009  def new shared var res-state as char extent 4.
00010  def new shared var res-state-ch as char extent 4.
00011  
00012  def new shared var res-state-placed as int init 1.
00013  def new shared var res-state-canceled as int init 2.
00014  def new shared var res-state-checked-in as int init 3.
00015  def new shared var res-state-checked-out as int init 4.
00016  
00017  prog-started = true. 
00018  
00019  room-types[1] = "1 bed king".
00020  room-types[2] = "1 bed queen".
00021  room-types[3] = "2 beds".
00022  room-types[4] = "1 room apt".
00023  room-types[5] = "2 room apt".
00024  
00025  res-state[1] = "Placed".
00026  res-state[2] = "Canceled".
00027  res-state[3] = "Checked in".
00028  res-state[4] = "Checked out".
00029  
00030  res-state-ch[1] = "P".
00031  res-state-ch[2] = "C".
00032  res-state-ch[3] = "I".
00033  res-state-ch[4] = "O".
00034  
00035  def var cur-prog as char no-undo extent 10.
00036  def var cur-prog-idx as int no-undo.
00037  def var start-prog as char init "menu.p" no-undo.
00038  
00039  /*
00040  TODO: determine start-prog based on rights/entry-point/authenticated user
00041  TODO: help
00042  */
00043  
00044  procedure push-program.
00045     def input param prog as char.
00046     cur-prog-idx = cur-prog-idx + 1.
00047     cur-prog[cur-prog-idx] = prog.
00048  end.
00049  
00050  procedure pop-program.
00051     cur-prog[cur-prog-idx] = ?.
00052     cur-prog-idx = cur-prog-idx - 1.
00053  end.
00054  
00055  function peek-program returns char.
00056     return cur-prog[cur-prog-idx].
00057  end.
00058  
00059  procedure set-room-types-combo.
00060     def input param h as handle.
00061     def var ch as char.
00062     def var i as int.
00063     do i = 1 to extent(room-types):
00064        ch = ch + (if i = 1 then "" else ",") + room-types[i] + "," + string(i).
00065     end.
00066     
00067     h:list-item-pairs = ch.
00068  end.
00069  
00070  session:add-super-procedure(this-procedure).
00071  
00072  subscribe procedure this-procedure to "push-program" anywhere.
00073  subscribe procedure this-procedure to "pop-program" anywhere.
00074  
00075  publish "push-program" (start-prog).
00076  
00077  repeat on endkey undo, retry
00078         on stop undo, retry
00079         on error undo, retry
00080         on quit undo, leave:
00081  
00082     hide all no-pause.
00083     hide message no-pause.
00084  
00085     def var v-stop as log.
00086     
00087     v-stop = true.
00088     
00089     prog-started = false.
00090     
00091     do on stop undo, leave:
00092  
00093        do on error undo, leave
00094           on endkey undo, leave:
00095           /* ignore error/endkey, as the program was able to be run */
00096           run value(peek-program()).
00097        end.
00098  
00099        v-stop = false.
00100     end.
00101     
00102     if v-stop then do:
00103  
00104        if prog-started then do:
00105           /* re-init the program */
00106           
00107           cur-prog = ?.
00108           cur-prog-idx = 0.
00109           publish "push-program" (start-prog).
00110           
00111        end.
00112        else do:
00113           message "Program" peek-program() "could not be executed." view-as alert-box.
00114     
00115           hide message no-pause.
00116           hide all no-pause.
00117           status default.
00118           put screen color normal row screen-lines + 1 fill(" ", 78).
00119           put screen color normal row screen-lines + 2 fill(" ", 78).
00120     
00121           next.
00122        end.
00123     end.
00124  end.
00125  
00126  quit.