Skip to content

Commit d899b7d

Browse files
committed
CONSOLE: console DELAY now does event processing
1 parent d510239 commit d899b7d

File tree

5 files changed

+239
-238
lines changed

5 files changed

+239
-238
lines changed

configure.ac

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,6 @@ function buildSDL() {
217217
AC_DEFINE(_SDL, 1, [Defined when building SDL version])
218218
AC_DEFINE(_UnixOS, 1, [Building under Unix like systems.])
219219
AC_DEFINE(IMPL_DEV_READ, 1, [Implement dev_read()])
220-
AC_DEFINE(IMPL_DEV_DELAY, 1, [Driver implements dev_delay()])
221220
AC_DEFINE(IMPL_LOG_WRITE, 1, [Driver implements lwrite()])
222221

223222
BUILD_SUBDIRS="src/common src/platform/sdl"
@@ -233,7 +232,6 @@ function buildAndroid() {
233232
AC_DEFINE(_UnixOS, 1, [Building under Unix like systems.])
234233
AC_DEFINE(_ANDROID, 1, [Defined for Android build.])
235234
AC_DEFINE(IMPL_DEV_READ, 1, [Implement dev_read()])
236-
AC_DEFINE(IMPL_DEV_DELAY, 1, [Driver implements dev_delay()])
237235
AC_DEFINE(IMPL_LOG_WRITE, 1, [Driver implements lwrite()])
238236

239237
BUILD_SUBDIRS="src/platform/android"
@@ -258,7 +256,6 @@ function buildConsole() {
258256
)
259257

260258
AM_CONDITIONAL(WITH_CYGWIN_CONSOLE, test $win32 = yes)
261-
AC_DEFINE(BUILD_CONSOLE, 1, [Building a console based system.])
262259

263260
if test $win32 = yes; then
264261
dnl test whether to build using mingw
@@ -318,7 +315,6 @@ function buildWeb() {
318315
BUILD_SUBDIRS="src/common src/platform/web"
319316
AM_CONDITIONAL(WITH_CYGWIN_CONSOLE, false)
320317
AC_DEFINE(_UnixOS, 1, [Building under Unix like systems.])
321-
AC_DEFINE(IMPL_DEV_DELAY, 1, [Driver implements dev_delay()])
322318
AC_DEFINE(IMPL_LOG_WRITE, 1, [Driver implements lwrite()])
323319
AC_DEFINE(USE_TERM_IO, 0, [dont use the termios library.])
324320
AC_DEFINE(IMPL_DEV_ENV, 1, [Driver implements dev_env funcs])
@@ -372,7 +368,6 @@ function buildFLTK() {
372368
AC_DEFINE(_UnixOS, 1, [Building under Unix like systems.])
373369
AC_DEFINE(_FLTK, 1, [Defined for FLTK build.])
374370
AC_DEFINE(IMPL_DEV_READ, 1, [Implement dev_read()])
375-
AC_DEFINE(IMPL_DEV_DELAY, 1, [Driver implements dev_delay()])
376371
AC_DEFINE(IMPL_LOG_WRITE, 1, [Driver implements lwrite()])
377372

378373
BUILD_SUBDIRS="src/common src/platform/fltk"

src/common/device.c

Lines changed: 0 additions & 233 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@
1616
#include "common/keymap.h"
1717
#include "common/inet.h"
1818

19-
#ifdef __MINGW32__
20-
#define usleep(s) Sleep((DWORD)((s+500)/1000))
21-
#endif
22-
2319
/**
2420
* initialize all drivers
2521
*/
@@ -75,236 +71,13 @@ int dev_events(int wait_flag) {
7571
return osd_events(wait_flag);
7672
}
7773

78-
#ifndef IMPL_DEV_DELAY
79-
80-
/**
81-
* delay for a specified amount of milliseconds
82-
*/
83-
void dev_delay(uint32_t ms) {
84-
#if defined(_Win32)
85-
Sleep(ms);
86-
#elif defined(_DOS)
87-
delay(ms);
88-
#else // Unix
89-
usleep(ms * 1000);
90-
#endif
91-
}
92-
#endif
93-
94-
#if defined(BUILD_CONSOLE)
95-
96-
/**
97-
* return the character (multibyte charsets support)
98-
*/
99-
int dev_input_char2str(int ch, byte * cstr) {
100-
memset(cstr, 0, 3);
101-
102-
switch (os_charset) {
103-
case enc_sjis: // Japan
104-
if (IsJISFont(ch)) {
105-
cstr[0] = ch >> 8;
106-
}
107-
cstr[1] = ch & 0xFF;
108-
break;
109-
case enc_big5: // China/Taiwan (there is another charset for
110-
// China but I don't know the difference)
111-
if (IsBig5Font(ch)) {
112-
cstr[0] = ch >> 8;
113-
}
114-
cstr[1] = ch & 0xFF;
115-
break;
116-
case enc_gmb: // Generic multibyte
117-
if (IsGMBFont(ch)) {
118-
cstr[0] = ch >> 8;
119-
}
120-
cstr[1] = ch & 0xFF;
121-
break;
122-
case enc_unicode: // Unicode
123-
cstr[0] = ch >> 8;
124-
cstr[1] = ch & 0xFF;
125-
break;
126-
default:
127-
cstr[0] = ch;
128-
};
129-
return strlen((char *)cstr);
130-
}
131-
132-
/**
133-
* return the character size at pos! (multibyte charsets support)
134-
*/
135-
int dev_input_count_char(byte *buf, int pos) {
136-
int count, ch;
137-
byte cstr[3];
138-
139-
if (os_charset != enc_utf8) {
140-
ch = buf[0];
141-
ch = ch << 8;
142-
ch = ch + buf[1];
143-
count = dev_input_char2str(ch, cstr);
144-
} else {
145-
count = 1;
146-
}
147-
return count;
148-
}
149-
150-
/**
151-
* stores a character at 'pos' position
152-
*/
153-
int dev_input_insert_char(int ch, char *dest, int pos, int replace_mode) {
154-
byte cstr[3];
155-
int count, remain;
156-
char *buf;
157-
158-
count = dev_input_char2str(ch, cstr);
159-
160-
// store character into buffer
161-
if (replace_mode) {
162-
// overwrite mode
163-
remain = strlen((dest + pos));
164-
buf = malloc(remain + 1);
165-
strcpy(buf, dest + pos);
166-
memcpy(dest + pos, cstr, count);
167-
dest[pos + count] = '\0';
168-
169-
if (os_charset != enc_utf8) {
170-
count = dev_input_char2str(((buf[0] << 8) | buf[1]), cstr);
171-
} else {
172-
count = 1;
173-
}
174-
if (buf[0]) { // not a '\0'
175-
strcat(dest, (buf + count));
176-
}
177-
free(buf);
178-
} else {
179-
// insert mode
180-
remain = strlen((dest + pos));
181-
buf = malloc(remain + 1);
182-
strcpy(buf, dest + pos);
183-
memcpy(dest + pos, cstr, count);
184-
dest[pos + count] = '\0';
185-
strcat(dest, buf);
186-
free(buf);
187-
}
188-
189-
return count;
190-
}
191-
192-
/**
193-
* removes the character at 'pos' position
194-
*/
195-
int dev_input_remove_char(char *dest, int pos) {
196-
byte cstr[3];
197-
int count, remain;
198-
char *buf;
199-
200-
if (dest[pos]) {
201-
if (os_charset != enc_utf8) {
202-
count = dev_input_char2str(((dest[pos] << 8) | dest[pos + 1]), cstr);
203-
} else {
204-
count = 1;
205-
}
206-
remain = strlen((dest + pos + 1));
207-
buf = malloc(remain + 1);
208-
strcpy(buf, dest + pos + count);
209-
210-
dest[pos] = '\0';
211-
strcat(dest, buf);
212-
free(buf);
213-
return count;
214-
}
215-
return 0;
216-
}
217-
218-
/**
219-
* gets a string (INPUT)
220-
*/
221-
char *dev_gets(char *dest, int size) {
222-
long int ch = 0;
223-
uint16_t pos, len = 0;
224-
int replace_mode = 0;
225-
226-
*dest = '\0';
227-
pos = 0;
228-
do {
229-
len = strlen(dest);
230-
ch = fgetc(stdin);
231-
switch (ch) {
232-
case -1:
233-
case -2:
234-
case 0xFFFF:
235-
dest[pos] = '\0';
236-
return dest;
237-
case 0:
238-
case 10:
239-
case 13: // ignore
240-
break;
241-
case SB_KEY_HOME:
242-
pos = 0;
243-
break;
244-
case SB_KEY_END:
245-
pos = len;
246-
break;
247-
case SB_KEY_BACKSPACE: // backspace
248-
if (pos > 0) {
249-
pos -= dev_input_remove_char(dest, pos - 1);
250-
len = strlen(dest);
251-
} else {
252-
dev_beep();
253-
}
254-
break;
255-
case SB_KEY_DELETE: // delete
256-
if (pos < len) {
257-
dev_input_remove_char(dest, pos);
258-
len = strlen(dest);
259-
} else
260-
dev_beep();
261-
break;
262-
case SB_KEY_INSERT:
263-
replace_mode = !replace_mode;
264-
break;
265-
case SB_KEY_LEFT:
266-
if (pos > 0) {
267-
pos -= dev_input_count_char((byte *)dest, pos);
268-
} else {
269-
dev_beep();
270-
}
271-
break;
272-
case SB_KEY_RIGHT:
273-
if (pos < len) {
274-
pos += dev_input_count_char((byte *)dest, pos);
275-
} else {
276-
dev_beep();
277-
}
278-
break;
279-
default:
280-
if ((ch & 0xFF00) != 0xFF00) { // Not an hardware key
281-
pos += dev_input_insert_char(ch, dest, pos, replace_mode);
282-
} else {
283-
ch = 0;
284-
}
285-
// check the size
286-
len = strlen(dest);
287-
if (len >= (size - 2)) {
288-
break;
289-
}
290-
}
291-
} while (ch != '\n' && ch != '\r');
292-
dest[len] = '\0';
293-
dev_print(dest);
294-
return dest;
295-
}
296-
297-
#endif // #if defined BUILD_CONSOLE
298-
29974
/**
30075
* BEEP
30176
*/
30277
void dev_beep() {
303-
#if !defined(BUILD_CONSOLE)
30478
if (!opt_mute_audio) {
30579
osd_beep();
30680
}
307-
#endif
30881
}
30982

31083
/**
@@ -385,12 +158,6 @@ void log_printf(const char *format, ...) {
385158
}
386159
}
387160

388-
#if defined(BUILD_CONSOLE)
389-
void v_create_form(var_p_t var) {}
390-
void v_create_window(var_p_t var) {}
391-
void dev_show_page() {}
392-
#endif
393-
394161
#if !defined(_SDL)
395162
void dev_trace_line(int lineNo) {
396163
dev_printf("<%d>", lineNo);

src/platform/console/Makefile.am

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ bin_PROGRAMS = sbasic
1212
sbasic_SOURCES = \
1313
../../lib/lodepng/lodepng.cpp ../../lib/lodepng/lodepng.h \
1414
main.cpp \
15+
input.cpp \
1516
device.cpp \
1617
image.cpp \
1718
decomp.c

src/platform/console/device.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
#include "common/extlib.h"
1414
#include "common/smbas.h"
1515

16+
#define WAIT_INTERVAL 5
17+
1618
typedef void (*settextcolor_fn)(long fg, long bg);
1719
typedef void (*setpenmode_fn)(int enable);
1820
typedef int (*getpen_fn)(int code);
@@ -331,5 +333,27 @@ int osd_textheight(const char *str) {
331333
return result;
332334
}
333335

336+
// delay while pumping events
337+
void dev_delay(uint32_t timeout) {
338+
uint32_t slept = 0;
339+
uint32_t now = dev_get_millisecond_count();
340+
while (1) {
341+
if (osd_events(0) == -2) {
342+
break;
343+
}
344+
if (dev_get_millisecond_count() - now > timeout) {
345+
break;
346+
}
347+
usleep(WAIT_INTERVAL * 1000);
348+
slept += WAIT_INTERVAL;
349+
if (timeout > 0 && slept > timeout) {
350+
break;
351+
}
352+
}
353+
}
354+
334355
// unused
335356
void dev_log_stack(const char *keyword, int type, int line) {}
357+
void v_create_form(var_p_t var) {}
358+
void v_create_window(var_p_t var) {}
359+
void dev_show_page() {}

0 commit comments

Comments
 (0)