@@ -38,7 +38,12 @@ pub export fn compile_program() u32 {
38
38
// Call the TCC Compiler
39
39
_ = main (argc , & args_ptrs );
40
40
41
- return 123 ;
41
+ // Dump the generated `a.out`
42
+ debug ("a.out: {} bytes" , .{write_buflen });
43
+ hexdump .hexdump (@ptrCast (& write_buf ), write_buflen );
44
+
45
+ // Return size of `a.out` to JavaScript
46
+ return write_buflen ;
42
47
}
43
48
44
49
/// Main Function from tcc.c
@@ -84,12 +89,21 @@ export fn read(fd0: c_int, buf: [*:0]u8, nbyte: size_t) isize {
84
89
85
90
export fn fputc (c : c_int , stream : * FILE ) c_int {
86
91
debug ("fputc: c=0x{X:0>2}, stream={*}" , .{ @as (u8 , @intCast (c )), stream });
92
+
93
+ // Copy to the Write Buffer. TODO: Support more than one `stream`
94
+ @memset (write_buf [write_buflen .. write_buflen + 1 ], @intCast (c ));
95
+ write_buflen += 1 ;
87
96
return c ;
88
97
}
89
98
90
99
export fn fwrite (ptr : [* :0 ]const u8 , size : usize , nmemb : usize , stream : * FILE ) usize {
91
100
debug ("fwrite: size={}, nmemb={}, stream={*}" , .{ size , nmemb , stream });
92
101
hexdump .hexdump (ptr , size * nmemb );
102
+
103
+ // Copy to the Write Buffer. TODO: Support more than one `stream`
104
+ const len = size * nmemb ;
105
+ @memcpy (write_buf [write_buflen .. write_buflen + len ], ptr [0.. ]);
106
+ write_buflen += len ;
93
107
return nmemb ;
94
108
}
95
109
@@ -108,6 +122,11 @@ export fn unlink(path: [*:0]const u8) c_int {
108
122
return 0 ;
109
123
}
110
124
125
+ /// Write Buffer for fputc and fwrite
126
+ var write_buf = std .mem .zeroes ([8192 ]u8 );
127
+ var write_buflen : usize = 0 ;
128
+
129
+ /// Next File Descriptor
111
130
var fd : c_int = 3 ;
112
131
var first_read : bool = true ;
113
132
0 commit comments