1212
1313#include "term.h"
1414#include "termbox.h"
15- #include "memstream .h"
15+ #include "bytebuffer .h"
1616
1717struct cellbuf {
1818 unsigned int width ;
@@ -29,8 +29,7 @@ static struct termios orig_tios;
2929
3030static struct cellbuf back_buffer ;
3131static struct cellbuf front_buffer ;
32- static unsigned char write_buffer_data [32 * 1024 ];
33- static struct memstream write_buffer ;
32+ static struct bytebuffer output_buffer ;
3433
3534static unsigned int termw ;
3635static unsigned int termh ;
@@ -128,11 +127,11 @@ int tb_init(void)
128127 tios .c_cc [VTIME ] = 0 ;
129128 tcsetattr (out_fileno , TCSAFLUSH , & tios );
130129
131- memstream_init ( & write_buffer , out_fileno , write_buffer_data , sizeof ( write_buffer_data ) );
130+ init_bytebuffer ( & output_buffer , 32 * 1024 );
132131
133- memstream_puts ( & write_buffer , funcs [T_ENTER_CA ]);
134- memstream_puts ( & write_buffer , funcs [T_ENTER_KEYPAD ]);
135- memstream_puts ( & write_buffer , funcs [T_HIDE_CURSOR ]);
132+ bytebuffer_puts ( & output_buffer , funcs [T_ENTER_CA ]);
133+ bytebuffer_puts ( & output_buffer , funcs [T_ENTER_KEYPAD ]);
134+ bytebuffer_puts ( & output_buffer , funcs [T_HIDE_CURSOR ]);
136135 send_clear ();
137136
138137 update_term_size ();
@@ -147,12 +146,12 @@ int tb_init(void)
147146
148147void tb_shutdown (void )
149148{
150- memstream_puts ( & write_buffer , funcs [T_SHOW_CURSOR ]);
151- memstream_puts ( & write_buffer , funcs [T_SGR0 ]);
152- memstream_puts ( & write_buffer , funcs [T_CLEAR_SCREEN ]);
153- memstream_puts ( & write_buffer , funcs [T_EXIT_CA ]);
154- memstream_puts ( & write_buffer , funcs [T_EXIT_KEYPAD ]);
155- memstream_flush ( & write_buffer );
149+ bytebuffer_puts ( & output_buffer , funcs [T_SHOW_CURSOR ]);
150+ bytebuffer_puts ( & output_buffer , funcs [T_SGR0 ]);
151+ bytebuffer_puts ( & output_buffer , funcs [T_CLEAR_SCREEN ]);
152+ bytebuffer_puts ( & output_buffer , funcs [T_EXIT_CA ]);
153+ bytebuffer_puts ( & output_buffer , funcs [T_EXIT_KEYPAD ]);
154+ flush_bytebuffer ( & output_buffer , out_fileno );
156155 tcsetattr (out_fileno , TCSAFLUSH , & orig_tios );
157156
158157 shutdown_term ();
@@ -193,16 +192,16 @@ void tb_present(void)
193192 }
194193 if (!IS_CURSOR_HIDDEN (cursor_x , cursor_y ))
195194 write_cursor (cursor_x , cursor_y );
196- memstream_flush ( & write_buffer );
195+ flush_bytebuffer ( & output_buffer , out_fileno );
197196}
198197
199198void tb_set_cursor (int cx , int cy )
200199{
201200 if (IS_CURSOR_HIDDEN (cursor_x , cursor_y ) && !IS_CURSOR_HIDDEN (cx , cy ))
202- memstream_puts ( & write_buffer , funcs [T_SHOW_CURSOR ]);
201+ bytebuffer_puts ( & output_buffer , funcs [T_SHOW_CURSOR ]);
203202
204203 if (!IS_CURSOR_HIDDEN (cursor_x , cursor_y ) && IS_CURSOR_HIDDEN (cx , cy ))
205- memstream_puts ( & write_buffer , funcs [T_HIDE_CURSOR ]);
204+ bytebuffer_puts ( & output_buffer , funcs [T_HIDE_CURSOR ]);
206205
207206 cursor_x = cx ;
208207 cursor_y = cy ;
@@ -286,8 +285,8 @@ void tb_set_clear_attributes(uint16_t fg, uint16_t bg)
286285
287286/* -------------------------------------------------------- */
288287
289- static unsigned convertnum (uint32_t num , char * buf ) {
290- unsigned i , l = 0 ;
288+ static int convertnum (uint32_t num , char * buf ) {
289+ int i , l = 0 ;
291290 int ch ;
292291 do {
293292 buf [l ++ ] = '0' + (num % 10 );
@@ -301,8 +300,8 @@ static unsigned convertnum(uint32_t num, char* buf) {
301300 return l ;
302301}
303302
304- #define WRITE_LITERAL (X ) memstream_write(&write_buffer , (X), sizeof(X) -1)
305- #define WRITE_INT (X ) memstream_write(&write_buffer , buf, convertnum((X), buf))
303+ #define WRITE_LITERAL (X ) bytebuffer_append(&output_buffer , (X), sizeof(X)-1)
304+ #define WRITE_INT (X ) bytebuffer_append(&output_buffer , buf, convertnum((X), buf))
306305
307306static void write_cursor (unsigned x , unsigned y ) {
308307 char buf [32 ];
@@ -414,14 +413,14 @@ static void send_attr(uint16_t fg, uint16_t bg)
414413#define LAST_ATTR_INIT 0xFFFF
415414 static uint16_t lastfg = LAST_ATTR_INIT , lastbg = LAST_ATTR_INIT ;
416415 if (fg != lastfg || bg != lastbg ) {
417- memstream_puts ( & write_buffer , funcs [T_SGR0 ]);
416+ bytebuffer_puts ( & output_buffer , funcs [T_SGR0 ]);
418417 write_sgr (fg & 0x0F , bg & 0x0F );
419418 if (fg & TB_BOLD )
420- memstream_puts ( & write_buffer , funcs [T_BOLD ]);
419+ bytebuffer_puts ( & output_buffer , funcs [T_BOLD ]);
421420 if (bg & TB_BOLD )
422- memstream_puts ( & write_buffer , funcs [T_BLINK ]);
421+ bytebuffer_puts ( & output_buffer , funcs [T_BLINK ]);
423422 if (fg & TB_UNDERLINE )
424- memstream_puts ( & write_buffer , funcs [T_UNDERLINE ]);
423+ bytebuffer_puts ( & output_buffer , funcs [T_UNDERLINE ]);
425424
426425 lastfg = fg ;
427426 lastbg = bg ;
@@ -437,16 +436,16 @@ static void send_char(unsigned int x, unsigned int y, uint32_t c)
437436 write_cursor (x , y );
438437 lastx = x ; lasty = y ;
439438 if (!c ) buf [0 ] = ' ' ; // replace 0 with whitespace
440- memstream_puts ( & write_buffer , buf );
439+ bytebuffer_puts ( & output_buffer , buf );
441440}
442441
443442static void send_clear (void )
444443{
445444 send_attr (foreground , background );
446- memstream_puts ( & write_buffer , funcs [T_CLEAR_SCREEN ]);
445+ bytebuffer_puts ( & output_buffer , funcs [T_CLEAR_SCREEN ]);
447446 if (!IS_CURSOR_HIDDEN (cursor_x , cursor_y ))
448447 write_cursor (cursor_x , cursor_y );
449- memstream_flush ( & write_buffer );
448+ flush_bytebuffer ( & output_buffer , out_fileno );
450449
451450 /* we need to invalidate cursor position too and these two vars are
452451 * used only for simple cursor positioning optimization, cursor
0 commit comments