forked from alexfru/dflat20
-
Notifications
You must be signed in to change notification settings - Fork 2
/
dfalloc.c
60 lines (54 loc) · 1.14 KB
/
dfalloc.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/* ---------- dfalloc.c ---------- */
#include "dflat.h"
static void AllocationError(void)
{
WINDOW wnd;
static BOOL OnceIn = FALSE;
extern jmp_buf AllocError;
extern BOOL AllocTesting;
static char *ErrMsg[] = {
"ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿",
"³ Out of Memory! ³",
"ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ"
};
int x, y;
char savbuf[108];
RECT rc = {30,11,47,13};
if (!OnceIn) {
OnceIn = TRUE;
/* ------ close all windows ------ */
SendMessage(ApplicationWindow, CLOSE_WINDOW, 0, 0);
getvideo(rc, savbuf);
for (x = 0; x < 18; x++) {
for (y = 0; y < 3; y++) {
int c = (255 & (*(*(ErrMsg+y)+x))) | 0x7000;
PutVideoChar(x+rc.lf, y+rc.tp, c);
}
}
getkey();
storevideo(rc, savbuf);
if (AllocTesting)
longjmp(AllocError, 1);
}
}
void *DFcalloc(size_t nitems, size_t size)
{
void *rtn = calloc(nitems, size);
if (size && rtn == NULL)
AllocationError();
return rtn;
}
void *DFmalloc(size_t size)
{
void *rtn = malloc(size);
if (size && rtn == NULL)
AllocationError();
return rtn;
}
void *DFrealloc(void *block, size_t size)
{
void *rtn = realloc(block, size);
if (size && rtn == NULL)
AllocationError();
return rtn;
}