1/* UAEGUI.rexx - A nice GUI for uae using MUIREXX
2 *
3 * How to use it: Open a shell a type "run rx UAEGUI.rexx".
4 * Then, run UAE. Once uae's window is opened, the GUI will
5 * popup.
6 *
7 * $VER: UAEGUI.rexx 0.3 (29.01.98) � by Samuel Devulder
8 *
9 * History:
10 *   v0.1: first try
11 *   v0.2: adaptation to MUIRexx3.0 (too bad, scripts for MUIRexx2.0 are
12 *         not fully compatible with MUIRexx3.0)
13 *   v0.3: added speed gauges
14 */
15
16TRUE = 1
17FALSE = 0
18MUIA_Application_Title = 0x804281b8
19MUIA_Application_Version = 0x8042b33f
20MUIA_Application_Copyright = 0x8042ef4d
21MUIA_Application_Author = 0x80424842
22MUIA_Application_Base = 0x8042e07a
23MUIA_Application_OpenConfigWindow = 0x804299ba
24MUIA_Application_AboutMUI = 0x8042d21d
25MUIA_Background    = 0x8042545b
26MUII_BACKGROUND    = 128
27MUII_SHADOWFILL    = 133
28MUIA_Image_FreeHoriz = 0x8042da84
29MUIA_Image_FontMatchWidth = 0x804239bf
30MUIA_Image_FontMatchHeight = 0x804239c0
31MUIA_Width         = 0x8042b59c
32MUIA_Image_FontMatch = 0x8042815d
33MUIA_Image_FontMatchHeight = 0x80429f26
34MUIA_FixWidthTxt   = 0x8042d044
35MUIA_Weight        = 0x80421d1f
36MUIA_Pressed       = 0x80423535
37MUIA_ShowMe        = 0x80429ba8
38MUIA_Slider_Horiz  = 0x8042fad1
39MUIA_Slider_Min    = 0x8042e404
40MUIA_Slider_Max    = 0x8042d78a
41MUIA_Slider_Level  = 0x8042ae3a
42MUIA_Frame         = 0x8042ac64
43MUIA_Gauge_Current = 0x8042f0dd
44MUIA_Gauge_Horiz   = 0x804232dd
45MUIA_Gauge_Max     = 0x8042bcdb
46MUIA_Gauge_Divide  = 0x8042d8df
47MUIV_Frame_Text    = 3
48MUIV_Frame_Group   = 9
49
50Cycle_Active      = 0x80421788
51Menuitem_Shortcut = 0x80422030
52Menuitem_Title    = 0x804218be
53Selected          = 0x8042654b
54Disabled          = 0x80423661
55
56options results
57
58ADDRESS COMMAND
59
60BLK = "\033I[2:00000000:00000000:00000000]"
61RED = "\033I[2:ffffffff:00000000:00000000]"
62GRN = "\033I[2:00000000:ffffffff:6f000000]"
63
64BLK = BLK||BLK||BLK||BLK
65RED = RED||RED||RED||RED
66GRN = GRN||GRN||GRN||GRN
67
68/* Setup STDERR */
69DO_STDERR = 0;
70IF OPEN(STDERR,"CON:////UAEGUI.rexx -- Error messages window/WAIT/AUTO","w") then DO_STDERR = 1
71
72/* Run MUIREXX */
73address command 'resident c:wait'
74if ~show('p','UAEGUI') then do
75   'run >nil: muirexx port UAEGUI'
76   cpt=0
77   do while ~show('p','UAEGUI')
78      'wait 1'
79      cpt=cpt+1
80      if cpt=60 then do
81        if DO_STDERR then do
82	  call writeln(STDERR,"Timeout while waiting MUIRexx to start.")
83        end
84        call quit
85      END
86   end
87end
88
89/* wait for UAE to setup */
90if ~show('p','UAE') then do
91/*   address command "run <>con: uae" */
92   cpt=0
93   do while ~show('p','UAE')
94      'wait 2'
95      cpt=cpt+1
96      if cpt=60 then do
97        if DO_STDERR then do
98	  call writeln(STDERR,"Timeout while waiting UAE to start.")
99	end
100        address UAEGUI quit
101        call quit
102      end
103   end
104end
105
106address UAEGUI
107
108window ID MAIN COMMAND """QUIT""" PORT UAEGUI TITLE """UAE Gui"""
109
110 menu LABEL "Project"
111  item COMMAND '"method 'MUIA_Application_AboutMUI' 0"',
112   PORT UAEGUI LABEL "About MUI"
113  menu LABEL "Settings"
114   item COMMAND '"method 'MUIA_Application_OpenConfigWindow'"',
115    PORT UAEGUI LABEL "MUI..."
116  endmenu
117  item ATTRS Menuitem_Title '-1'
118  item COMMAND '"quit"' PORT UAEGUI ATTRS Menuitem_Shortcut 'Q' LABEL "Quit"
119 endmenu
120
121 address UAE VERSION NUM;    NUM     = RESULT
122 address UAE VERSION AUTHOR; AUTHOR  = RESULT
123 address UAE VERSION PORT;   PORTAUT = RESULT
124
125 text ATTRS MUIA_Frame MUIV_Frame_Group MUIA_Background MUII_SHADOWFILL LABEL,
126   "\0338\033c\033bUAE v"||NUM%10000||"."||(NUM%100)//100||"."||NUM//100||,
127   "\033n - Un*x Amiga Emulator\n"||AUTHOR||"\n\n"||PORTAUT
128
129 group HORIZ
130  group FRAME HORIZ LABEL "Actions"
131   button PRESS HELP """This button makes UAE and the GUI exit""",
132    COMMAND """QUIT""" PORT UAE LABEL "Quit"
133   button PRESS HELP """This button makes UAE do a hard reset""",
134    COMMAND """RESET""" PORT UAE LABEL "Reset"
135   button PRESS HELP """This button makes UAE enter in debug mode""",
136    COMMAND """Debug""" PORT UAE LABEL "Debug"
137  endgroup
138  group FRAME HORIZ LABEL "Speed"
139   LABEL "fps:"
140   text ID FPS  ATTRS 0x8042a3f1 4 LABEL "0.00"
141   gauge ID SPD,
142    HELP """You can read here the approximated speed of\n"||,
143           "UAE relative to a real Amiga (50fps).""",
144    ATTRS MUIA_Gauge_Horiz TRUE MUIA_Gauge_Max 100 LABEL "%ld%%"
145  endgroup
146 endgroup
147
148 group  FRAME LABEL "Parameters"
149  group HORIZ
150   label "Display:"
151   address UAE QUERY DISPLAY
152   cycle ID DRAW,
153    HELP """This cycle button enables or disables the display output""",
154    COMMAND """DISPLAY %s""" PORT UAE ATTRS Cycle_Active RESULT labels "OFF,ON"
155   label "Sound:"
156   address UAE QUERY SOUND
157   IF RESULT = -1 THEN
158        cycle id sound ATTRS Disabled TRUE COMMAND """SOUND %s""",
159         PORT UAE LABELS "OFF,ON,BEST"
160   ELSE IF RESULT = 0 THEN
161        cycle id sound ATTRS Cycle_Active 0,
162         HELP """This cycle button enables or disables the sound output""",
163         COMMAND """SOUND %s""" PORT UAE LABELS "OFF,ON,BEST"
164   ELSE cycle id sound,
165         HELP """This cycle button enables or disables the sound output""",
166         ATTRS Cycle_Active RESULT-1 COMMAND """SOUND %s""",
167         PORT UAE LABELS "OFF,ON,BEST"
168/*   label "Joystick:"
169   address UAE QUERY FAKEJOYSTICK
170   cycle ID JOY,
171    HELP """This cycle button enables or disables the joystick emulation""",
172    COMMAND """FAKEJOYSTICK %s""" PORT UAE ATTRS Cycle_Active RESULT,
173    LABELS "OFF,ON" */
174  endgroup
175  group HORIZ
176   label "POW:"
177   address UAE QUERY LED_POW;if RESULT = 1 then COL = RED; else COL = BLK
178   button ID POW HELP """This image represents the power-led state""",
179    ATTRS MUIA_FixWidthTxt 1 label COL
180   label "Frame Rate:"
181   address UAE QUERY FRAMERATE
182   slider ID SLDR HELP """Use this slider gadget to select the frame rate""",
183    COMMAND """FRAMERATE %s""" PORT UAE ATTRS MUIA_Slider_Horiz TRUE,
184    MUIA_Slider_Min 1 MUIA_Slider_Max 20 MUIA_Weight 230,
185    MUIA_SLIDER_LEVEL RESULT
186  endgroup
187 endgroup
188
189 group FRAME LABEL "Disk files"
190  call SetDfx(0)
191  call SetDfx(1)
192  call SetDfx(2)
193  call SetDfx(3)
194 endgroup
195endwindow
196
197address UAE QUERY NAME_DF0;R0=RESULT
198address UAE QUERY NAME_DF1;R1=RESULT
199address UAE QUERY NAME_DF2;R2=RESULT
200address UAE QUERY NAME_DF3;R3=RESULT
201popasl ID NDF0 CONTENT R0
202popasl ID NDF1 CONTENT R1
203popasl ID NDF2 CONTENT R2
204popasl ID NDF3 CONTENT R3
205
206address UAE feedback LED_POW PORT UAEGUI,
207 CMD_ON  """button ID POW LABEL "RED"""",
208 CMD_OFF """button ID POW LABEL "BLK""""
209
210address UAE feedback LED_DF0 PORT UAEGUI,
211 CMD_ON  """button ID DF0 LABEL "GRN"""",
212 CMD_OFF """button ID DF0 LABEL "BLK""""
213
214address UAE feedback LED_DF1 PORT UAEGUI,
215 CMD_ON  """button ID DF1 LABEL "GRN"""",
216 CMD_OFF """button ID DF1 LABEL "BLK""""
217
218address UAE feedback LED_DF2 PORT UAEGUI,
219 CMD_ON  """button ID DF2 LABEL "GRN"""",
220 CMD_OFF """button ID DF2 LABEL "BLK""""
221
222address UAE feedback LED_DF3 PORT UAEGUI,
223 CMD_ON  """button ID DF3 LABEL "GRN"""",
224 CMD_OFF """button ID DF3 LABEL "BLK""""
225
226address UAE feedback NAME_DF0 PORT UAEGUI,
227 CMD """popasl ID NDF0 CONTENT %s"""
228
229address UAE feedback NAME_DF1 PORT UAEGUI,
230 CMD """popasl ID NDF1 CONTENT %s"""
231
232address UAE feedback NAME_DF2 PORT UAEGUI,
233 CMD """popasl ID NDF2 CONTENT %s"""
234
235address UAE feedback NAME_DF3 PORT UAEGUI,
236 CMD """popasl ID NDF3 CONTENT %s"""
237
238address UAE feedback ON_EXIT PORT UAEGUI,
239 CMD """quit"""
240
241address UAE QUERY LED_POW;if RESULT = 1 then COL = RED; else COL = BLK
242button ID POW label COL
243
244address UAE QUERY FRAMENUM;FN = RESULT; TN = time('r');
245
246/* in case UAEGUI exits */
247signal on syntax
248signal on error
249ok = 1
250gauge ID SPD ATTRS MUIA_Gauge_Horiz TRUE MUIA_Gauge_Max 100
251do while ok
252  address command wait 5
253  address UAE QUERY FRAMENUM;FN0=FN;FN=RESULT;TN = time('r');
254  if TN~=0 then TN = (FN-FN0)/TN
255  if show('p','UAEGUI') then do
256    text  id FPS label trunc(100*TN)/100
257    gauge ID SPD ATTRS MUIA_Gauge_Current trunc(TN*2)
258  end; else ok = 0
259end
260
261error:
262syntax:
263
264quit:
265
266if show('p','UAE') then do
267  address UAE feedback LED_POW PORT COMMAND CMD_ON  """"""
268  address UAE feedback LED_DF0 PORT COMMAND CMD_ON  """"""
269  address UAE feedback LED_DF1 PORT COMMAND CMD_ON  """"""
270  address UAE feedback LED_DF2 PORT COMMAND CMD_ON  """"""
271  address UAE feedback LED_DF3 PORT COMMAND CMD_ON  """"""
272  address UAE feedback LED_POW PORT COMMAND CMD_OFF """"""
273  address UAE feedback LED_DF0 PORT COMMAND CMD_OFF """"""
274  address UAE feedback LED_DF1 PORT COMMAND CMD_OFF """"""
275  address UAE feedback LED_DF2 PORT COMMAND CMD_OFF """"""
276  address UAE feedback LED_DF3 PORT COMMAND CMD_OFF """"""
277end
278
279if DO_STDERR then call close(STDERR);
280
281exit 0
282
283SetDFx:
284   PARSE ARG unit
285   group ID GDF||unit HORIZ
286    label LEFT DOUBLE "DF"||unit||":"
287    address UAE QUERY LED_DF||unit;if RESULT=1 then COL=GRN; else COL=BLK
288    button ID DF||unit,
289     HELP """This image represents the state of drive "||unit||"'s led""",
290     ATTRS MUIA_FixWidthTxt 1 label COL
291    button PRESS,
292     HELP """Use this button to eject the diskfile in drive DF"||unit||":""",
293     COMMAND """EJECT "||unit||"""" PORT UAE ATTRS MUIA_Weight 100,
294     LABEL "Eject"
295    popasl ID NDF||unit,
296     HELP """Select the name of diskfile for drive DF"||unit||":""",
297     COMMAND """INSERT "||unit||" '%s'""" PORT UAE ATTRS MUIA_Weight 300
298   endgroup ID GDF||unit
299return
300