⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frontend.cc

📁 Small Device C Compiler 面向Inter8051
💻 CC
字号:
/****************************************************************************** * to emulate the serial input and output of an 8051 controller               * * frontend.cc - the ncurses frontend                                         * ******************************************************************************/#include <sys/types.h>#include <iostream>#include <stdlib.h>#include <sys/stat.h>#include <fcntl.h>#include <curses.h>#include <errno.h>#include <string.h>#include <unistd.h>#include "frontend.hh"Viewer::Viewer(){	/* initalise the output screen */	initscr();	cbreak();	noecho();	nl();	intrflush(stdscr,FALSE);	keypad(stdscr, TRUE);		/* clear the screen and off you go */	refresh();	// get the coordinates for the box	/* create the subwindow */	win_c.min_x = win_c.min_y = 0;	getmaxyx(stdscr, win_c.max_y, win_c.max_x);	/* define the boxed size */	topleft.x = win_c.min_x + 1;	bottomright.x = win_c.max_x - 2;	topleft.y = win_c.min_y + 1;	bottomright.y = win_c.max_y - 2;	middle_y = (int)((bottomright.y-topleft.y)/2)+1;	middle_x = (int)((bottomright.x-topleft.x)/2)+1;	// draw the two subwindows	inp_c.min_x = outp_c.min_x = topleft.x;	inp_c.max_x = outp_c.max_x = bottomright.x;	inp_c.min_y = topleft.y;	inp_c.max_y = middle_y-topleft.y;	outp_c.min_y = middle_y+1;	outp_c.max_y = bottomright.y-middle_y;	inp = subwin(stdscr, inp_c.max_y, inp_c.max_x, inp_c.min_y, inp_c.min_x);	outp = subwin(stdscr, outp_c.max_y, outp_c.max_x, outp_c.min_y,outp_c.min_x);	// initalise the windows	touchwin(inp);	werase(inp);	wrefresh(inp);	scrollok(inp, TRUE);	touchwin(outp);	werase(outp);	wrefresh(outp);	scrollok(outp, TRUE);	refresh();	nodelay(inp, TRUE);	// flush the input buffers	flushinp();		move(topleft.x,topleft.y);	DrawBox();}Viewer::~Viewer(){	delwin(inp);	delwin(outp);	erase();	refresh();	endwin();}void Viewer::DrawBox(void){	int height, width;	COORDINATES current;	// save the current position	getyx(stdscr, current.y, current.x);	height = (bottomright.y - topleft.y)+1;	width = (bottomright.x - topleft.y)+1;	mvaddch(topleft.y-1, topleft.x-1, ACS_ULCORNER);	mvaddch(topleft.y-1, bottomright.x+1, ACS_URCORNER);	mvaddch(bottomright.y+1, bottomright.x+1, ACS_LRCORNER);	mvaddch(bottomright.y+1, topleft.x-1, ACS_LLCORNER);	/* wmove (screen, y, x) */	/* top */	move(topleft.y-1, topleft.x);	hline(ACS_HLINE, width);	/* bottom */	move(bottomright.y+1, topleft.x);	hline(ACS_HLINE, width);	move(bottomright.y+1, topleft.x);	hline(ACS_HLINE, width);		/* left */	move(topleft.y, topleft.x-1);	vline(ACS_VLINE, height);	/* right */	move(topleft.y, bottomright.x+1);	vline(ACS_VLINE, height);	/* the divider */	mvaddch(middle_y, bottomright.x+1, ACS_RTEE);	mvaddch(middle_y, topleft.x-1, ACS_LTEE);	hline(ACS_HLINE, width);	// the window titles	mvaddstr(inp_c.min_y-1, middle_x-(strlen("Input")/2), "Input");	mvaddstr(middle_y, middle_x-(strlen("Output")/2), "Output");	move(current.y, current.x);	refresh();}void Viewer::AddStrOutWin(char *string){	waddstr(outp, string);	wrefresh(outp);}void Viewer::GetStrInWin(char *string){	if(wgetstr(inp, string) == ERR) {		string[0] = 0;	} else {		waddstr(inp, string);		wrefresh(inp);	}}void Viewer::AddChOutWin(char b){	waddch(outp, b);	wrefresh(outp);}char Viewer::GetChInWin(void){	int b = wgetch(inp);	if(b==ERR) {		b=0;	} else {		waddch(inp, (chtype)b);		wrefresh(inp);	}	return((char)b);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -