Example #1
0
int closeElf(elf_t *elf)
{
	int res;

	if (elf == NULL)
		return EINVAL;

	while (elf->orgShnum) {
		elf->orgShnum--;
		if (elf->scns[elf->orgShnum].content != NULL)
			free(elf->scns[elf->orgShnum].content);
	}

	free(elf->scns);
	res = freeSegs(elf->segs, elf->ehdr.e_phnum);

	if (fclose(elf->fp)) {
		perror(elf->path);
		return errno;
	}

	return res;
}
Example #2
0
void RenderTreeIntoWindow(comment_item_tree* tree)
{
	zlog_info(c, "Rendering window %dX%d", win->_maxy, win->_maxx);
	wbkgd(win, COLOR_PAIR(1));
	refresh();
	wmove(win, 2, 1);
	//wattron(win, A_BOLD | A_BLINK);
	wattron(win,  A_BOLD);
	wattron(win, COLOR_PAIR(2));
	zlog_info(c, "Starting to parse the tree");
	if(mode == MODE_LOADING){
		wprintw(win, "Loading in articles...one moment please  ");
	}else{
		wprintw(win, "News Comments for article ( %d in total) ", TotalSize(tree) );
	}
	wattroff(win, COLOR_PAIR(2));

	wattroff(win, A_BOLD);



	int row = 4;
	while (row < 30) {
		wmove(win, row, 1);  wprintw(win, "%*s", 120, "");
		row++;
	}
	if(msg1 != NULL && mode == MODE_LOADING){
		wmove(win, LINES - 4, 1);
		wprintw(win, "%s", msg1);
	}

	row = 4;
	int txcol = 7;
	if(_flat != NULL){
		free(_flat);
	}
	ResetFlatTree(tree);
	_flat = ToFlatTree(tree, &_total_tree_size);

	zlog_info(c, "Rendering total of  %d rows", _total_tree_size);

	while (true) {
		if ( (row - 4) == _total_tree_size || (row - 4) >= WINDOW_SIZE) {
			break;
		}
		int chosen_element = MAX(row + start_row - 4, 0);
		if(chosen_element >= _total_tree_size){
			zlog_info(c, "Hit Max, stopping iteration..");
			break;
		}
		zlog_info(c, ">>Rendering  row  %d, ray elem %d - real elem/index %d ", row, row + start_row - 4, chosen_element);
		RenderRow(win, _flat[chosen_element], &row, txcol, row - 4, 0, -1);
	}


	mvwhline(win, 4 + WINDOW_SIZE + 1,  1, ACS_HLINE, COLS  );

	int _text_start = (int)(LINES/2);
	if(_selected > -1){
		row = _text_start;
		while (row < LINES - 2) {
			wmove(win, row, 2);  wprintw(win, "%*s", 120, "");
			row++;
		}

		wmove(win, _text_start, 1);
		s_segments* segs = splitIntoSegments(_flat[_selected]->text, 90);
		int _p = 0;
		for (_p = 0; _p < segs->count; _p++) {
			wmove(win, _text_start + _p, 4);
			wprintw(win, "%s", segs->segments[_p]->string);
		}
		freeSegs(segs);
		if(msg1 != NULL){
			free(msg1);
		}
		msg1 = malloc(50);
		memset(msg1, 0, 50);
		sprintf(msg1, "ID: %d", _flat[_selected]->id);
		wmove(win, LINES - 4, 1);
		wprintw(win, "%120s", "");
		wmove(win, LINES - 4, 1);
		wprintw(win, "%s", msg1);
	}

	/*

	int BOX_W = 11;
	int BOX_H = 3;
	int _stx = 1;
	int _sty = 21;


	while (_sty < 35) {
		while (_stx < 120) {
			//wattron(win, A_BOLD | A_BLINK);
			DrawBox(win, BOX_H, BOX_W,  _sty, _stx, _stx == 1, _stx > 68);
			//wattroff(win, A_BOLD | A_BLINK);
			_stx += BOX_W;
		}
		_sty += BOX_H;
		_stx = 1;
	}

	*/

}
Example #3
0
void PrintTreeItem(const ND* node, int offset, int *counter,  node_method method)
{
	int newoffset = offset + 1;
	int i = 0;
	ND* tmp = (ND*)node;

	if (tmp == NULL)
		return;
	bool firstChild = true;
	while (tmp != NULL) {
		(*counter)++;
		char* prefix = calloc(20, sizeof(char));
		i++;
		if (offset == 0) {
			strcpy(prefix, "|");
			int y = 0;
			while (y < 18) {
				prefix = strcat(prefix, " ");
				y++;
			}
		}else{
			int y = 0;
			while (y < offset) {
				prefix = strcat(prefix, "  ");
				y++;
			}
			if (firstChild) {
				prefix = strcat(prefix, "\\");
			}else{
				prefix = strcat(prefix, "|_");
			}
			y = strlen(prefix);

			while (y < 18) {
				prefix = strcat(prefix, " ");
				y++;
			}
		}
		/*
		   printf("[%d] %s %d(%10p,nx=%10p, prev=%10p,Parent=%10p,F/%d) -> %30s (CC=%d)\n"
		                                              , offset
		                                              , prefix
		                                              , isExpanded(tmp)
		                                              , tmp
		                                              , tmp->next
		                                              , tmp->previous
		                                              , tmp->parent
		                                              , tmp->flags
		                                              , tmp->text
		                                              ,ChildCount(tmp, false)
		                                                );
		   printf("[%d - %d -  %2d] %s %-25s TS=%4d (id=%d) F=%d) (CC_nr=%d, CC_R=%d, T=%d)\n"
		       , offset
		       , isExpanded(tmp)
		       , *counter
		       , prefix
		       , substring(tmp->text,10)
		       , TotalSize(tmp)
		       , tmp->id
		       , tmp->flags
		       , ChildCount(tmp, false)
		       , ChildCount(tmp, true)
		       , TotalNodeCount(tmp)
		       );
		 */
		s_segments* segs = splitIntoSegments(tmp->text, 60);
		int y = 0;
		if (tmp->text != NULL) {
		///	printf("||%s||@%zu||\n", tmp->text, strlen(tmp->text));
		}
		if (segs->segments[0] == NULL || segs->segments[0]->string == NULL) {
			printf("Weird....first segment was zero... %s\n", segs->debugText);
			exit(0);
		}
		int c =0;
		
		while(c < strlen(segs->segments[0]->string)){
			//printf("char at %d (%d) => %c\n", c, (segs->segments[0]->string)[c], (segs->segments[0]->string)[c]);
			c++;
		}
		printf("[depth=%d-id/%d-count/%2d] %s %s \n"
		       , offset
		       , tmp->id
		       , *counter
		       , prefix
		       , segs->segments[y]->string
		       );
		if (segs->count > 1) {
			for (y = 1; y < segs->count; y++) {
				printf("[%d]%40s%s\n",
					y,
				       " ",
				       segs->segments[y]->string
				       );
			}
		}
		if(tmp->linkcount > 0){
			int lc=0;
			for(lc = 0;lc < tmp->linkcount;lc += 2){
				printf("%20s Link at %d is (%s)\n"," ", lc, tmp->links[lc]);
			}
		}
		freeSegs(segs);

		if (ChildCount(tmp, false) > 0 && (method == PRINT_ALL_TREE || isExpanded(tmp))) {
			PrintTreeItem(tmp->children, newoffset, counter, method);
		}
		tmp = tmp->next;
		firstChild = false;
		free(prefix);
	}


}