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