Exemplo n.º 1
0
/*
 * Take the full line (lf) including the command and split it into a
 * sub-line (returned) and a completion context (cmplarray).
 */
static LineInfo *
split_line(const char **cmplarray, const LineInfo *lf)
{
	static LineInfo li;
	const struct cmd *c;
	char *cmdname;
	char line[LINESIZE];
	char *cp;
	size_t len;

	len = lf->cursor - lf->buffer;
	if (len + 1 > sizeof(line))
		return NULL;

	(void)strlcpy(line, lf->buffer, len + 1);

	li.cursor   = line + len;
	li.lastchar = line + len;

	cp = skip_WSP(line);
	cmdname = get_cmdname(cp);
	cp += strlen(cmdname);

	if (cp == li.cursor) {
		*cmplarray = "c";
		li.buffer = cmdname;
		return &li;
	}

	c = lex(cmdname);
	if (c == NULL)
		return NULL;

	*cmplarray = c->c_complete;
	if (c->c_pipe) {
		char *cp2;
		if ((cp2 = shellpr(cp)) != NULL) {
			cp = cp2;
# define XX(a)  ((a) + ((a)[1] == '>' ? 2 : 1))
			while ((cp2 = shellpr(XX(cp))) != NULL)
				cp = cp2;

			if (*cp == '|') {
				*cmplarray = "xF";
				cp = skip_WSP(cp + 1);
			}
			else {
				assert(*cp == '>');
				cp = skip_WSP(XX(cp));
				*cmplarray = "f";
			}
# undef XX
		}
	}
	li.buffer = cp;
	return &li;
}
Exemplo n.º 2
0
void draw_UI(void){
	int i;

	wclear(ui.plane_list);	
	wclear(ui.cmds);
	wclear(ui.map);
	wclear(ui.score);
	
	for (i = 0; i < state.airports_num; i++){
		mvwprintw(ui.map, (state.airports[i].y/(float)MAX_HEIGHT)*(MAP_HEIGHT), (state.airports[i].x/(float)MAX_LEN)*(MAP_WIDTH), "@");
	}

	for (i = 0; i < state.planes_num; i++){
		mvwprintw(ui.map, (state.planes[i].y/(float)MAX_HEIGHT)*(MAP_HEIGHT), (state.planes[i].x/(float)MAX_LEN)*(MAP_WIDTH), "%d", i);
		if (i >= ui.cur_page*PLANES_PER_PAGE && i < PLANES_PER_PAGE*(ui.cur_page+1)){
			mvwprintw(ui.plane_list, (i%PLANES_PER_PAGE)*2, 0, "%d: %s (%d, %d, %d)", i, state.planes[i].id, state.planes[i].x, state.planes[i].y, state.planes[i].z);
			mvwchgat(ui.plane_list, (i%PLANES_PER_PAGE)*2, 0, -1, A_BOLD, 0, NULL);
			if (ui.cur_plane >= 0 && i == ui.cur_page*PLANES_PER_PAGE+ui.cur_plane){
				mvwchgat(ui.plane_list, (i%PLANES_PER_PAGE)*2, 0, -1, A_REVERSE, 0, NULL);
			}
			mvwprintw(ui.plane_list, (i%PLANES_PER_PAGE)*2+1, 0, "%s E:%d S:%d H:%d", get_status(state.planes[i].status), state.planes[i].elevation, (state.planes[i].speed/14)*50, state.planes[i].heading);
		}		
	}

	for (i = 0; i < CMDS_NUM; i++){
		mvwprintw(ui.cmds, i, 0, "%d: %s", i, get_cmdname(i));
		if (ui.cur_cmd != -1){
			mvwchgat(ui.cmds, ui.cur_cmd, 0, -1, A_REVERSE, 0, NULL);
		}
	}

	mvwprintw(ui.score, 0, 0, "Landed:%d Crashed:%d", state.landed_planes, state.crashed_planes);

	wrefresh(ui.map);
	wrefresh(ui.cmds);
	wrefresh(ui.plane_list);	
	wrefresh(ui.score);
}