sysdep.c revision 40843
168651Skris/*******************************************************************
268651Skris** s y s d e p . c
368651Skris** Forth Inspired Command Language
468651Skris** Author: John Sadler (john_sadler@alum.mit.edu)
568651Skris** Created: 16 Oct 1997
668651Skris** Implementations of FICL external interface functions...
768651Skris**
868651Skris** (simple) port to Linux, Skip Carter 26 March 1998
968651Skris**
1068651Skris*******************************************************************/
11160814Ssimon
1268651Skris#include <stdlib.h>
1368651Skris#include <stdio.h>
1468651Skris
1568651Skris#include "ficl.h"
1668651Skris
1768651Skris/*
1868651Skris*******************  FreeBSD  P O R T   B E G I N S   H E R E ******************** Michael Smith
1968651Skris*/
2079998Skris
2179998SkrisUNS64 ficlLongMul(UNS32 x, UNS32 y)
2289837Skris{
2379998Skris    UNS64 q;
2479998Skris    u_int64_t qx;
2579998Skris
2668651Skris    qx = (u_int64_t)x * (u_int64_t) y;
2768651Skris
2868651Skris    q.hi = (u_int32_t)( qx >> 32 );
2968651Skris    q.lo = (u_int32_t)( qx & 0xFFFFFFFFL);
3068651Skris
3168651Skris    return q;
3276866Skris}
3368651Skris
3468651SkrisUNSQR ficlLongDiv(UNS64 q, UNS32 y)
3568651Skris{
3668651Skris    UNSQR result;
3768651Skris    u_int64_t qx, qh;
3868651Skris
3968651Skris    qh = q.hi;
4068651Skris    qx = (qh << 32) | q.lo;
4168651Skris
4268651Skris    result.quot = qx / y;
4368651Skris    result.rem  = qx % y;
4468651Skris
4568651Skris    return result;
4668651Skris}
4768651Skris
4868651Skrisvoid  ficlTextOut(FICL_VM *pVM, char *msg, int fNewline)
4968651Skris{
5068651Skris    IGNORE(pVM);
5168651Skris
5279998Skris    while(*msg != 0)
5379998Skris	putchar(*(msg++));
5468651Skris    if (fNewline)
5568651Skris	putchar('\n');
56
57   return;
58}
59
60void *ficlMalloc (size_t size)
61{
62    return malloc(size);
63}
64
65void  ficlFree   (void *p)
66{
67    free(p);
68}
69
70/*
71** Stub function for dictionary access control - does nothing
72** by default, user can redefine to guarantee exclusive dict
73** access to a single thread for updates. All dict update code
74** is guaranteed to be bracketed as follows:
75** ficlLockDictionary(TRUE);
76** <code that updates dictionary>
77** ficlLockDictionary(FALSE);
78**
79** Returns zero if successful, nonzero if unable to acquire lock
80** befor timeout (optional - could also block forever)
81*/
82#if FICL_MULTITHREAD
83int ficlLockDictionary(short fLock)
84{
85	IGNORE(fLock);
86	return 0;
87}
88#endif /* FICL_MULTITHREAD */
89
90
91