--- gforth/prim 1998/12/08 22:02:49 1.16 +++ gforth/prim 1998/12/21 22:52:30 1.21 @@ -1369,15 +1369,23 @@ n=1; : 1 ; -\+os - key-file wfileid -- n gforth paren_key_file +#ifdef HAS_FILE fflush(stdout); n = key((FILE*)wfileid); +#else +n = key(stdin); +#endif key?-file wfileid -- n facility key_q_file +#ifdef HAS_FILE fflush(stdout); n = key_query((FILE*)wfileid); +#else +n = key_query(stdin); +#endif + +\+os stdin -- wfileid gforth wfileid = (Cell)stdin; @@ -1412,12 +1420,16 @@ FLUSH_ICACHE(c_addr,u); return (Label *)n; (system) c_addr u -- wretval wior gforth peren_system +#ifndef MSDOS int old_tp=terminal_prepped; deprep_terminal(); +#endif wretval=system(cstr(c_addr,u,1)); /* ~ expansion on first part of string? */ wior = IOR(wretval==-1 || (wretval==127 && errno != 0)); +#ifndef MSDOS if (old_tp) prep_terminal(); +#endif getenv c_addr1 u1 -- c_addr2 u2 gforth c_addr2 = getenv(cstr(c_addr1,u1,1)); @@ -1528,6 +1540,7 @@ delete-file c_addr u -- wior file delet wior = IOR(unlink(tilde_cstr(c_addr, u, 1))==-1); rename-file c_addr1 u1 c_addr2 u2 -- wior file-ext rename_file +""rename file c_addr1 u1 to new name c_addr2 u2"" char *s1=tilde_cstr(c_addr2, u2, 1); wior = IOR(rename(tilde_cstr(c_addr1, u1, 0), s1)==-1); @@ -1596,12 +1609,17 @@ write-file c_addr u1 wfileid -- wior fil clearerr((FILE *)wfileid); } +\+ + emit-file c wfileid -- wior gforth emit_file +#ifdef HAS_FILE wior = FILEIO(putc(c, (FILE *)wfileid)==EOF); if (wior) clearerr((FILE *)wfileid); +#else +putc(c, stdout); +#endif -\+ \+file flush-file wfileid -- wior file-ext flush_file @@ -1647,7 +1665,7 @@ r = d; f>d r -- d float f_to_d #ifdef BUGGY_LONG_LONG -d.hi = ldexp(r,-CELL_BITS) - (r<0); +d.hi = ldexp(r,-(int)(CELL_BITS)) - (r<0); d.lo = r-ldexp((Float)d.hi,CELL_BITS); #else d = r; @@ -1760,7 +1778,7 @@ int decpt; sig=ecvt(r, u, &decpt, &flag); n=(r==0 ? 1 : decpt); f1=FLAG(flag!=0); -f2=FLAG(isdigit(sig[0])!=0); +f2=FLAG(isdigit((unsigned)(sig[0]))!=0); memmove(c_addr,sig,u); >float c_addr u -- flag float to_float @@ -1768,7 +1786,7 @@ memmove(c_addr,sig,u); Float r; char *number=cstr(c_addr, u, 1); char *endconv; -while(isspace(number[--u]) && u>0); +while(isspace((unsigned)(number[--u])) && u>0); switch(number[u]) { case 'd': @@ -2041,7 +2059,7 @@ open-lib c_addr1 u1 -- u2 gforth open_li #endif u2=(UCell) dlopen(cstr(c_addr1, u1, 1), RTLD_GLOBAL | RTLD_LAZY); #else -# ifdef HAVE_LIBKERNEL32 +# ifdef _WIN32 u2 = (Cell) GetModuleHandle(cstr(c_addr1, u1, 1)); # else #warning Define open-lib! @@ -2053,7 +2071,7 @@ lib-sym c_addr1 u1 u2 -- u3 gforth lib_s #if defined(HAVE_LIBDL) || defined(HAVE_DLOPEN) u3 = (UCell) dlsym((void*)u2,cstr(c_addr1, u1, 1)); #else -# ifdef HAVE_LIBKERNEL32 +# ifdef _WIN32 u3 = (Cell) GetProcAddress((HMODULE)u2, cstr(c_addr1, u1, 1)); # else #warning Define lib-sym! @@ -2073,4 +2091,3 @@ UP=up=(char *)a_addr; : up ! ; Variable UP -