diff -urN cui1/Makefile cui2/Makefile --- cui1/Makefile Thu Jan 30 03:00:00 2014 +++ cui2/Makefile Thu Jan 30 03:20:00 2014 @@ -1,11 +1,14 @@ CC = gcc -Wall -TARG = key_test +TARG = key_test esc_test all: $(TARG) key_test: key_test.o key.o $(CC) -o $@ key_test.o key.o + +esc_test: esc_test.o esc.o + $(CC) -o $@ esc_test.o esc.o clean: rm -f $(TARG) *.o *~ diff -urN cui1/esc.c cui2/esc.c --- cui1/esc.c Thu Jan 1 09:00:00 1970 +++ cui2/esc.c Thu Jan 30 03:20:00 2014 @@ -0,0 +1,80 @@ +#include "esc.h" + +#include + +void +cui_esc(char *s) +{ + printf("\033[%s", s); + fflush(stdout); +} + +void +cui_esc_cls(void) +{ + cui_esc("2J"); +} + +void +cui_esc_loc(int x, int y) +{ + char buf[16]; + + sprintf(buf, "%d;%dH", y+1, x+1); + cui_esc(buf); +} + +void +cui_esc_attr(int attr) +{ + char buf[16]; + + sprintf(buf, "%dm", attr); + cui_esc(buf); +} + +void +cui_esc_cursor_pos_save(void) +{ + cui_esc("s"); +} + +void +cui_esc_cursor_pos_load(void) +{ + cui_esc("u"); +} + +void +cui_esc_exopt(int n, int onoff) +{ + char buf[16]; + + sprintf(buf, "?%d%c", n, onoff ? 'h' : 'l'); + cui_esc(buf); +} + +void +cui_esc_cursor(int onoff) +{ + cui_esc(onoff ? "?25h" : "?25l"); +} + +void +cui_esc_enter(void) +{ + cui_esc_cursor_pos_save(); + cui_esc_exopt(CUI_ESC_SCREEN_SAVE_LOAD, 1); + cui_esc_exopt(CUI_ESC_CURSOR_ONOFF, 0); +} + +void +cui_esc_exit(void) +{ + cui_esc_attr(CUI_ESC_NORMAL); + cui_esc_exopt(CUI_ESC_CURSOR_ONOFF, 1); + cui_esc_exopt(CUI_ESC_SCREEN_SAVE_LOAD, 0); + cui_esc_cursor_pos_load(); +} + +/* EOF */ diff -urN cui1/esc.h cui2/esc.h --- cui1/esc.h Thu Jan 1 09:00:00 1970 +++ cui2/esc.h Thu Jan 30 03:20:00 2014 @@ -0,0 +1,26 @@ +#ifndef __ESC_H__ +#define __ESC_H__ + +/* attr */ +#define CUI_ESC_NORMAL 0 +#define CUI_ESC_ULINE 4 +#define CUI_ESC_REVERSE 7 +#define CUI_ESC_ULINE_OFF 24 +#define CUI_ESC_REVERSE_OFF 27 + +/* exopt */ +#define CUI_ESC_CURSOR_ONOFF 25 +#define CUI_ESC_SCREEN_SAVE_LOAD 47 + +void cui_esc(char *s); +void cui_esc_cls(void); +void cui_esc_loc(int x, int y); +void cui_esc_attr(int attr); +void cui_esc_cursor_pos_save(void); +void cui_esc_cursor_pos_load(void); +void cui_esc_exopt(int n, int onoff); +void cui_esc_cursor(int onoff); +void cui_esc_enter(void); +void cui_esc_exit(void); + +#endif diff -urN cui1/esc_test.c cui2/esc_test.c --- cui1/esc_test.c Thu Jan 1 09:00:00 1970 +++ cui2/esc_test.c Thu Jan 30 03:00:00 2014 @@ -0,0 +1,30 @@ +#include +#include +#include "esc.h" + +int +main() +{ + cui_esc_enter(); + + cui_esc_cls(); + + cui_esc_loc(20, 10); + printf("foo"); + + cui_esc_attr(CUI_ESC_ULINE); + cui_esc_loc(20, 11); + printf("bar"); + + cui_esc_attr(CUI_ESC_REVERSE); + cui_esc_loc(10, 12); + printf("hoge"); + fflush(stdout); + + sleep(3); + + cui_esc_exit(); + return 0; +} + +/* EOF */