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