added some experimental code
This commit is contained in:
parent
cba78a7ec0
commit
ff00284426
@ -55,6 +55,36 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#class MyConsole(Console)
|
||||||
|
{
|
||||||
|
#method box: origin corner: corner
|
||||||
|
{
|
||||||
|
| tmp |
|
||||||
|
self setCursor: origin.
|
||||||
|
self write: '+'.
|
||||||
|
(corner x - origin x - 2) timesRepeat: [self write: '-'].
|
||||||
|
self write: '+'.
|
||||||
|
|
||||||
|
tmp := Point new.
|
||||||
|
|
||||||
|
(origin y + 1) to: (corner y - 1) by: 1 do: [ :i |
|
||||||
|
tmp x: origin x y: i.
|
||||||
|
self setCursor: tmp.
|
||||||
|
self write: '|'.
|
||||||
|
|
||||||
|
tmp x: corner x.
|
||||||
|
self setCursor: tmp.
|
||||||
|
self write: '|'.
|
||||||
|
].
|
||||||
|
|
||||||
|
tmp x: origin x y: corner y.
|
||||||
|
self setCursor: tmp.
|
||||||
|
self write: '+'.
|
||||||
|
(corner x - origin x - 2) timesRepeat: [self write: '-'].
|
||||||
|
self write: '+'.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#class MyObject(TestObject)
|
#class MyObject(TestObject)
|
||||||
{
|
{
|
||||||
#method(#class) main
|
#method(#class) main
|
||||||
@ -62,8 +92,9 @@
|
|||||||
| v1 v2 |
|
| v1 v2 |
|
||||||
System logNl: 'START OF MAIN'.
|
System logNl: 'START OF MAIN'.
|
||||||
|
|
||||||
v1 := Console output.
|
v1 := MyConsole output.
|
||||||
|
v1 clear.
|
||||||
|
v1 box: 0@0 corner: 80@20.
|
||||||
v1 write: S'hello, 월드 이거 좋지 않니\n'.
|
v1 write: S'hello, 월드 이거 좋지 않니\n'.
|
||||||
v1 write: S'하하하하하하하하 좋아좋아 可愛くってしょうがない(^o^) ほのかちゃん、しおりちゃん元気そうだね! 久しぶりに見た。しおりちゃんどうしたのかな?좋아 하라하하\n'.
|
v1 write: S'하하하하하하하하 좋아좋아 可愛くってしょうがない(^o^) ほのかちゃん、しおりちゃん元気そうだね! 久しぶりに見た。しおりちゃんどうしたのかな?좋아 하라하하\n'.
|
||||||
v1 close.
|
v1 close.
|
||||||
|
@ -265,7 +265,7 @@ static void* mod_open (stix_t* stix, const stix_ooch_t* name)
|
|||||||
stix_oow_t len;
|
stix_oow_t len;
|
||||||
void* handle;
|
void* handle;
|
||||||
|
|
||||||
/* TODO: using MODPREFIX isn't a good idean for all kind of modules.
|
/* TODO: using MODPREFIX isn't a good idea for all kind of modules.
|
||||||
* OK to use it for a primitive module.
|
* OK to use it for a primitive module.
|
||||||
* NOT OK to use it for a FFI target.
|
* NOT OK to use it for a FFI target.
|
||||||
* Attempting /home/hyung-hwan/xxx/lib/libstix-libc.so.6 followed by libc.so.6 is bad.
|
* Attempting /home/hyung-hwan/xxx/lib/libstix-libc.so.6 followed by libc.so.6 is bad.
|
||||||
@ -284,16 +284,18 @@ static void* mod_open (stix_t* stix, const stix_ooch_t* name)
|
|||||||
|
|
||||||
stix_copybcstr (&buf[bcslen + len], STIX_COUNTOF(buf) - bcslen - len, STIX_DEFAULT_MODPOSTFIX);
|
stix_copybcstr (&buf[bcslen + len], STIX_COUNTOF(buf) - bcslen - len, STIX_DEFAULT_MODPOSTFIX);
|
||||||
|
|
||||||
printf ("MOD_OPEN %s\n", buf);
|
|
||||||
handle = lt_dlopenext (buf);
|
handle = lt_dlopenext (buf);
|
||||||
if (!handle)
|
if (!handle)
|
||||||
{
|
{
|
||||||
buf[bcslen + len] = '\0';
|
buf[bcslen + len] = '\0';
|
||||||
printf ("MOD_OPEN %s\n", &buf[len]);
|
|
||||||
handle = lt_dlopenext (&buf[len]);
|
handle = lt_dlopenext (&buf[len]);
|
||||||
|
if (handle) STIX_DEBUG2 (stix, "Opened module file %s handle %p\n", &buf[len], handle);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
STIX_DEBUG2 (stix, "Opened module file %s handle %p\n", buf, handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf ("MOD_OPEN RET=>%p\n", handle);
|
|
||||||
return handle;
|
return handle;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
@ -304,6 +306,7 @@ printf ("MOD_OPEN RET=>%p\n", handle);
|
|||||||
|
|
||||||
static void mod_close (stix_t* stix, void* handle)
|
static void mod_close (stix_t* stix, void* handle)
|
||||||
{
|
{
|
||||||
|
STIX_DEBUG1 (stix, "Closed module handle %p\n", handle);
|
||||||
#if defined(USE_LTDL)
|
#if defined(USE_LTDL)
|
||||||
lt_dlclose (handle);
|
lt_dlclose (handle);
|
||||||
#elif defined(_WIN32)
|
#elif defined(_WIN32)
|
||||||
@ -323,32 +326,35 @@ static void* mod_getsym (stix_t* stix, void* handle, const stix_ooch_t* name)
|
|||||||
stix_bch_t buf[1024]; /* TODO: use a proper buffer. dynamically allocated if conversion result in too a large value */
|
stix_bch_t buf[1024]; /* TODO: use a proper buffer. dynamically allocated if conversion result in too a large value */
|
||||||
stix_oow_t ucslen, bcslen;
|
stix_oow_t ucslen, bcslen;
|
||||||
void* sym;
|
void* sym;
|
||||||
|
const char* symname;
|
||||||
|
|
||||||
buf[0] = '_';
|
buf[0] = '_';
|
||||||
|
|
||||||
ucslen = ~(stix_oow_t)0;
|
ucslen = ~(stix_oow_t)0;
|
||||||
bcslen = STIX_COUNTOF(buf) - 2;
|
bcslen = STIX_COUNTOF(buf) - 2;
|
||||||
stix_ucstoutf8 (name, &ucslen, &buf[1], &bcslen);
|
stix_ucstoutf8 (name, &ucslen, &buf[1], &bcslen);
|
||||||
printf ("MOD_GETSYM [%s]\n", &buf[1]);
|
symname = &buf[1];
|
||||||
sym = lt_dlsym (handle, &buf[1]);
|
sym = lt_dlsym (handle, symname);
|
||||||
if (!sym)
|
if (!sym)
|
||||||
{
|
{
|
||||||
printf ("MOD_GETSYM [%s]\n", &buf[0]);
|
symname = &buf[0];
|
||||||
sym = lt_dlsym (handle, &buf[0]);
|
sym = lt_dlsym (handle, symname);
|
||||||
if (!sym)
|
if (!sym)
|
||||||
{
|
{
|
||||||
buf[bcslen + 1] = '_';
|
buf[bcslen + 1] = '_';
|
||||||
buf[bcslen + 2] = '\0';
|
buf[bcslen + 2] = '\0';
|
||||||
printf ("MOD_GETSYM [%s]\n", &buf[1]);
|
|
||||||
sym = lt_dlsym (handle, &buf[1]);
|
symname = &buf[1];
|
||||||
|
sym = lt_dlsym (handle, symname);
|
||||||
if (!sym)
|
if (!sym)
|
||||||
{
|
{
|
||||||
printf ("MOD_GETSYM [%s]\n", &buf[0]);
|
symname = &buf[0];
|
||||||
sym = lt_dlsym (handle, &buf[0]);
|
sym = lt_dlsym (handle, symname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sym) STIX_DEBUG2 (stix, "Loaded module symbol %s from handle %p\n", symname, handle);
|
||||||
return sym;
|
return sym;
|
||||||
#else
|
#else
|
||||||
/* TODO: IMPLEMENT THIS */
|
/* TODO: IMPLEMENT THIS */
|
||||||
|
@ -187,18 +187,37 @@ static int prim_write (stix_t* stix, stix_ooi_t nargs)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int prim_clear (stix_t* stix, stix_ooi_t nargs)
|
||||||
|
{
|
||||||
|
console_t* con;
|
||||||
|
|
||||||
|
con = STIX_OOP_TO_SMOOI(STIX_STACK_GETARG(stix, nargs, 0));
|
||||||
|
|
||||||
|
write (con->fd, con->clear, strlen(con->clear));
|
||||||
|
|
||||||
|
STIX_STACK_SETRETTORCV (stix, nargs);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int prim_setcursor (stix_t* stix, stix_ooi_t nargs)
|
static int prim_setcursor (stix_t* stix, stix_ooi_t nargs)
|
||||||
{
|
{
|
||||||
console_t* con;
|
console_t* con;
|
||||||
stix_ooi_t x, y;
|
stix_oop_oop_t point;
|
||||||
char* cup;
|
char* cup;
|
||||||
|
|
||||||
con = STIX_OOP_TO_SMOOI(STIX_STACK_GETARG(stix, nargs, 0));
|
con = STIX_OOP_TO_SMOOI(STIX_STACK_GETARG(stix, nargs, 0));
|
||||||
point = STIX_OOP_TO_SMOOI(STIX_STACK_GETARG(stix, nargs, 1));
|
point = STIX_STACK_GETARG(stix, nargs, 1);
|
||||||
|
|
||||||
cup = tiparm (con->cup, point->slot[0], point->slot[1]);
|
/* TODO: error check, class check, size check.. */
|
||||||
|
if (STIX_OBJ_GET_SIZE(point) != 2)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
cup = tiparm (con->cup, STIX_OOP_TO_SMOOI(point->slot[1]), STIX_OOP_TO_SMOOI(point->slot[0]));
|
||||||
write (con->fd, cup, strlen(cup)); /* TODO: error check */
|
write (con->fd, cup, strlen(cup)); /* TODO: error check */
|
||||||
free (cup);
|
|
||||||
|
STIX_STACK_SETRETTORCV (stix, nargs);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,6 +232,7 @@ struct fnctab_t
|
|||||||
|
|
||||||
static fnctab_t fnctab[] =
|
static fnctab_t fnctab[] =
|
||||||
{
|
{
|
||||||
|
{ "clear", prim_clear },
|
||||||
{ "close", prim_close },
|
{ "close", prim_close },
|
||||||
{ "open", prim_open },
|
{ "open", prim_open },
|
||||||
{ "setcursor", prim_setcursor },
|
{ "setcursor", prim_setcursor },
|
||||||
|
Loading…
Reference in New Issue
Block a user