Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/stand/ficl/i386/sysdep.c
34865 views
1
/*******************************************************************
2
** s y s d e p . c
3
** Forth Inspired Command Language
4
** Author: John Sadler ([email protected])
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
26
DPUNS 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
39
UNSQR 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
54
void 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
66
void *ficlMalloc (size_t size)
67
{
68
return malloc(size);
69
}
70
71
void *ficlRealloc (void *p, size_t size)
72
{
73
return realloc(p, size);
74
}
75
76
void 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
95
int ficlLockDictionary(short fLock)
96
{
97
IGNORE(fLock);
98
return 0;
99
}
100
#endif /* FICL_MULTITHREAD */
101
102