(fwd) Re: FICL and setting BTX variables

Andrey Gerzhov (kittle@freeland.alex-ua.com)
Mon, 11 Jan 1999 04:45:02 +0200 (EET)

-- forwarded message --
Path: freeland.alex-ua.com!news.alexradio.kiev.ua!not-for-mail
Message-ID: <36982AA2.3F0FBE1B@newsguy.com>
Date: Sun, 10 Jan 1999 13:20:50 +0900
From: "Daniel C. Sobral" <dcs@newsguy.com>
To: Duncan Barclay <dmlb@ragnet.demon.co.uk>
Subject: Re: FICL and setting BTX variables
Newsgroups: alex.gated.freebsd.hackers
Lines: 90
Xref: freeland.alex-ua.com alex.gated.freebsd.hackers:5615

Duncan Barclay wrote:
>
> However, I can't work out what the voodoo is to set BTX (I think) variables
> from with ficl. I need to set curdev based upon which drive I want to boot
> from, the example code below falls over.
>
> /usr/share/examples/.../menu.4th ...
> dup 49 = if
> drop
> 1 25 at-xy cr
> ." Loading 2.2.6 kernel. Please wait..." cr
> set num_ide_disks=1
> set curdev=disk2s1a:
> boot
> then
>
> I tried a few of the obvious things like
> s" disk2s1a constant curdev
> but it doesn't work.
>
> Once I get it working I'll submit my menu's as another example. Thanks

This is being worked on. Well, it would be being worked on if I had
got a single second opinion on how to proceed, but...

Right now you can get around the problem in a somewhat clumsy way.
We intend to let you do it in a non-clumsy way, we just haven't
decided what way would that be.

For now, you can do the following:

s" set num_ide_disks=1" evaluate drop
s" set currdev=disk2s1a:" evaluate drop
s" boot" evaluate drop

Better yet, though would be:

s" load ${kernelname}" evaluate if s" boot" evaluate abort else
...

Notes:

* Right now, all builtins return 1 if no error happened, 0
otherwise (btw, Jordan, ANS specifies all bits 1 as the "true" value
:). It is my intention to change this behavior. In fact, I have
already submitted the patches. If I have it my way, errors will use
THROW instead.

* Right now, you can't set a variable to the name of another
variable. For instance, the default value of prompt is "${currdev}".
Well, you'll find there is no way to set it to that value. There is
no escape character in the parser, and \ are silently removed with a
few exceptions (\\ is translated to \, but still does not escape
anything). Quotes also won't help you there, as they only have
impact on how spaces are interpreted. I have also submitted patches
to deal with this.

* Right now (yeah, I'm emphasizing it :), EVALUATE doesn't work
according to specs. It will silently ignore the count passed, and
will process the string as a null-terminated string. Needless to
say, I hope :-), I intend to fix this too. Alas, I haven't submitted
this patch yet. Anyway, if you want to create strings to be
evaluated, remember to zero terminate them.

You can create a wrapper for the builtin commands to make things a
little bit easier. I have submitted such a hack to... to -current, I
think. Search for my messages to -current in december and you'll
find it easily. With it, you can then do something like:

s" /etc" s" -l" 2 wrap" ls" \ That is, pass parameters
\ as separate strings,
\ instead of having to
\ evaluate a single string

Notice, this hack is entirely in Forth, and has been tested against
the loader, so you don't have to patch loader's source to use it.

I hope this helped. Feel free to forward me any questions concerning
ficl.

--
Daniel C. Sobral			(8-DCS)
dcs@newsguy.com

"Heart like a Gabriel, pure and white as ivory, soul like a lucifer, black and cold as a piece of lead."

To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message -- end of forwarded message --

-- 
С тем, что не помешает никогда,
                                               Kittle