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