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.