1/******************************************************************* 2** s y s d e p . c 3** Forth Inspired Command Language 4** Author: John Sadler (john_sadler@alum.mit.edu) 5** Created: 16 Oct 1997 6** Implementations of FICL external interface functions... 7** 8*******************************************************************/ 9 10/* $FreeBSD$ */ 11 12#ifdef TESTMAIN 13#include <stdio.h> 14#include <stdlib.h> 15#else 16#include <stand.h> 17#endif 18#include "ficl.h" 19 20#include "../x86/sysdep.c" 21 22/* 23******************* FreeBSD P O R T B E G I N S H E R E ******************** Michael Smith 24*/ 25 26#if PORTABLE_LONGMULDIV == 0 27DPUNS ficlLongMul(FICL_UNS x, FICL_UNS y) 28{ 29 DPUNS q; 30 uint64_t qx; 31 32 qx = (uint64_t)x * (uint64_t) y; 33 34 q.hi = (uint32_t)( qx >> 32 ); 35 q.lo = (uint32_t)( qx & 0xFFFFFFFFL); 36 37 return q; 38} 39 40UNSQR ficlLongDiv(DPUNS q, FICL_UNS y) 41{ 42 UNSQR result; 43 uint64_t qx, qh; 44 45 qh = q.hi; 46 qx = (qh << 32) | q.lo; 47 48 result.quot = qx / y; 49 result.rem = qx % y; 50 51 return result; 52} 53#endif 54 55void ficlTextOut(FICL_VM *pVM, char *msg, int fNewline) 56{ 57 IGNORE(pVM); 58 59 while(*msg != 0) 60 putchar((unsigned char)*(msg++)); 61 if (fNewline) 62 putchar('\n'); 63 64 return; 65} 66 67void *ficlMalloc (size_t size) 68{ 69 return malloc(size); 70} 71 72void *ficlRealloc (void *p, size_t size) 73{ 74 return realloc(p, size); 75} 76 77void ficlFree (void *p) 78{ 79 free(p); 80} 81 82 83/* 84** Stub function for dictionary access control - does nothing 85** by default, user can redefine to guarantee exclusive dict 86** access to a single thread for updates. All dict update code 87** is guaranteed to be bracketed as follows: 88** ficlLockDictionary(TRUE); 89** <code that updates dictionary> 90** ficlLockDictionary(FALSE); 91** 92** Returns zero if successful, nonzero if unable to acquire lock 93** befor timeout (optional - could also block forever) 94*/ 95#if FICL_MULTITHREAD 96int ficlLockDictionary(short fLock) 97{ 98 IGNORE(fLock); 99 return 0; 100} 101#endif /* FICL_MULTITHREAD */ 102