lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On Tue, Jun 23, 1998 at 01:29:36PM -0300, Luiz Henrique de Figueiredo wrote:
> >From Nick.Trout@psygnosis.co.uk Tue Jun 23 13:18:04 1998
> >
> >You have raised an interesting point there as well. Lua is designed as an
> >embedded language but the way it outputs text is not very convenient for
> >systems which can't trap the standard streams. ie. Windows (unless I'm
> >missing something).
> 
> Lua is designed as an embedded language for ANSI C programs.
> Any compiler that claims to support ANSI C *must* provide some implementation
> the standard streams.
> Think C on the Mac does this.
> I don't know about Windows. Can someone please enlighten me here?

Right, but on windows it's basically impossible to get Lua's printf stuff
to redirect into your console without overriding _all_ printf
functionality. I can override the lua internal 'print()' function, but
that isn't everywhere that lua uses printf. 

In Lua 2.5 I just changed the internal lua print stuff to use a different
C function (dolua_print) so I could redefine where it goes. However, in
3.1 there are quite a few printf()s in the lua code, so I redirected _all_
printf()s by writing a new version of it. However, I would much prefer if
all lua print stuff went through a feeder api which could easily be mapped
to the standard funtions. For example:

Lua would never use:

  printf(...)
  fprintf(stderr,...)

Instead it would do something like:

  lua_printf(...)
  lua_fprintf(stderr,...

So I could easily trap and redirect these without affecting my programs
output facilities. If someone didn't want to redirect them, it would be
easy enough to provide standard implementations.,

> >You have to go through the Lua code and alter every
> >printf, fprintf etc. to redirect the output to your buffer.
> 
> There are just a couple of such places:
> 	print in lbuiltin.c
> 	the standard error handler in ldo.c

Even if it's going to remain this way I would prefer it if Lua would
enforce some concept of 'in the box' and 'out of the box'. Namely, put all
the 'absolute' output functions in one file, and make a convention in lua
not to use printf() or fprintf() outside that file. 

I agree completely with the original poster that as an embedded language
it isn't necessarily that useful for it to print to stdout.

> I guess you can always write your own printf and fprintf and override the
> compiler's implementation.

Yeah, and I do this, but it redefines _all_ my printf and fprintf usage,
so now I have to go around those functions when I really want to output to
the screen.

-- 
David Jeske (N9LCA) + http://www.chat.net/~jeske/ + jeske@chat.net