-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbootstrap.c
99 lines (88 loc) · 1.75 KB
/
bootstrap.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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <windows.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <fileapi.h>
#pragma warning(disable : 4996)
extern uint64_t Fwf_internal_main(void);
uint64_t Fwf_internal_malloc(uint64_t s)
{
uint64_t * ret = (uint64_t*) malloc(sizeof(uint64_t) + s);
*ret = s;
return &ret[1];
}
uint64_t Fwf_internal_free(uint64_t ptr)
{
if(ptr==0)
return 0;
free(((uint64_t*)ptr) - 1);
return 0;
}
uint64_t Fwf_internal_sizeof(uint64_t ptr)
{
return ((uint64_t*)ptr)[-1];
}
uint64_t Fwf_internal_realloc(uint64_t ptr, uint64_t newsize)
{
newsize += sizeof(uint64_t);
uint64_t* result = (uint64_t*) realloc(((uint64_t*)ptr)-1, newsize);
result[0] = newsize;
return (uint64_t)&result[1];
}
uint64_t Fwf_internal_putchar(uint64_t x) {
putc((char)x,stdout);
return 0;
}
FILE * files[63];
uint64_t location[63];
FILE* tof(uint64_t in) {
if (in > 62) {
return NULL;
} else {
return files[in];
}
}
uint64_t Fwf_internal_fclose(uint64_t f) {
fclose(tof(f));
location[f] = 0;
return 0;
}
uint64_t Fwf_internal_fread(uint64_t f) {
location[f] ++;
uint64_t result = fgetc(tof(f));
return result;
}
uint64_t Fwf_internal_fwrite(uint64_t f, uint64_t cha) {
fputc(cha, tof(f));
return 0;
}
uint64_t Fwf_internal_fflush(uint64_t f) {
fflush(tof(f));
return 0;
}
uint64_t Fwf_internal_favail(uint64_t f) {
return GetFileSize(tof(f),NULL)-location[f];
}
uint64_t Fwf_internal_getc() {
return getchar();
}
uint64_t Fwf_internal_fopen(const char* filename) {
for (int q = 0; q < 63; q++) {
if (files[q] == NULL)
{
files[q] = fopen(filename, "r+");
location[q] = 0;
return q;
}
}
return 255;
}
int main()
{
for (int q = 0; q < 63; q++) {
files[q] = NULL;
}
uint64_t result = Fwf_internal_main();
fflush(stdout);
return result;
}