On Aug 20, 2010, at 6:00 AM, openbios-request(a)openbios.org wrote:
> On Thu, Aug 19, 2010 at 4:52 PM, Programmingkid
> <programmingkidx(a)gmail.com> wrote:
>> I am trying to use the fword and feval functions in the file "kernel/forth.c". I know the header file for these functions are located in "include/libopenbios/bindings.h". I used this code to include the bindings.h file:
>>
>> #include "libopenbios/bindings.h"
>>
>> For some reason, I still see these errors:
>>
>> Building OpenBIOS for x86
>> Building...error:
>> ?HOSTCC host/kernel/bootstrap.o
>> ?HOSTCC host/kernel/dict.o
>> ?HOSTCC host/kernel/primitives.o
>> ?HOSTCC host/kernel/stack.o
>> ?HOSTCC forthstrap
>> host/kernel/primitives.o: In function `setupLocalDictionary':
>> /home/user/Development/openbios-devel/obj-x86/../kernel/forth.c:1035: undefined reference to `_fword'
>> /home/user/Development/openbios-devel/obj-x86/../kernel/forth.c:1037: undefined reference to `_fword'
>> /home/user/Development/openbios-devel/obj-x86/../kernel/forth.c:1044: undefined reference to `feval'
>> /home/user/Development/openbios-devel/obj-x86/../kernel/forth.c:1045: undefined reference to `feval'
>> host/kernel/primitives.o: In function `loadLocalVariable':
>> /home/user/Development/openbios-devel/obj-x86/../kernel/forth.c:1072: undefined reference to `feval'
>> collect2: ld returned 1 exit status
>> make[1]: *** [forthstrap] Error 1
>> make[1]: Leaving directory `/home/user/Development/openbios-devel/obj-x86'
>> make: *** [build] Error 1
>>
>>
>> This is a simple function someone could use as an example to be used in the file forth.c
>>
>> static void test(void)
>> {
>> ? ? ? ?feval("banner");
>> }
>>
>> Anyone know what I am doing wrong or how to solve this problem?
>
> You are using the bootstrap compiler, which has only very limited set
> of basic Forth words defined and actually even some of those will not
> work during bootstrap time.
>
> Full set of words like 'feval' is available when the library compiled
> by bootstrap compiler is loaded into non-bootstrap kernel. Your
> example should compile in arch/x86/openbios.c or arch/unix/unix.c.
Thanks for the help, but I still run into problems. I want to be able to use the functions from the forth interpreter. I tried adding my functions to primitives.c and bootstrap.c, but openbios won't compile.
Here are the functions I am trying to make available to the interpreter:
static void setupLocalDictionary(void)
{
int localWordListID, standardDictionaryID;
#define NUMBER_OF_DICTIONARIES 2
char commandString[100];
fword("wordlist");
localWordListID = POP();
fword("get-order");
POP(); // removes the number of dictionaries
standardDictionaryID = POP();
sprintf(commandString, "%d %d %d", standardDictionaryID, localWordListID, NUMBER_OF_DICTIONARIES);
feval(commandString);
feval("set-order");
}
// (addr len -- )
// variable
static void loadLocalVariable(void)
{
int lengthOfVariableString, addressOfVariableString;
char variableString[WIDTH], defineVariableCommandString[WIDTH];
int stackSize;
#define NUMBER_OF_NEEDED_STACK_ITEMS 2
depth();
stackSize = POP();
if(stackSize < NUMBER_OF_NEEDED_STACK_ITEMS)
{
printk("\nSorry but loadLocalVarable needs stack in this format: (addr len -- )\n");
return;
}
lengthOfVariableString = POP();
addressOfVariableString = POP();
strncpy(variableString, (char *) addressOfVariableString, lengthOfVariableString);
variableString[lengthOfVariableString] = '\0';
sprintf(defineVariableCommandString, "variable %s", variableString);
feval(defineVariableCommandString);
//printk("variable = %s\t", variableString);
}
Any ideas as to where I can place them?