ftp.nice.ch/pub/next/unix/communication/pcomm.NIHS.bs.tar.gz#/pcomm/Source/list_dir.c

This is list_dir.c in view mode; [Download] [Up]

/*
 * Do a shell escape with the "ls" command.  Additional command line options
 * are allowed at run time.
 */

#define LS_CMD "ls -aC"

#include <stdio.h>
#include <curses.h>
#include "config.h"
#include "misc.h"

void
list_dir()
{
	extern int fd;
	WINDOW *ls_win, *newwin();
	FILE *pfp, *n_popen();
	int lines, oops;
	char *ans, *cwd, *getcwd(), buf[200], *get_str();

	ls_win = newwin(6, 70, 8, 5);

	cwd = getcwd(buf, 200);

	mvwprintw(ls_win, 2, 4, "Current directory: %s", cwd);
	mvwaddstr(ls_win, 3, 4, "File spec (wildcards allowed): ");
	box(ls_win, VERT, HORZ);

	mvwattrstr(ls_win, 0, 3, A_BOLD, " List Directory ");
	wmove(ls_win, 3, 35);
	wrefresh(ls_win);

	if ((ans = get_str(ls_win, 80, "", "\n")) == NULL) {
		if (fd == -1) {
			werase(ls_win);
			wrefresh(ls_win);
		}
		delwin(ls_win);
		return;
	}
					/* popen() an ls */
	sprintf(buf, "%s %s", LS_CMD, ans);
	pfp = n_popen(buf, "r");
					/* make a bigger window */
	werase(ls_win);
	wrefresh(ls_win);
	delwin(ls_win);
	ls_win = newwin(LINES-1, COLS, 0, 0);
	touchwin(ls_win);
					/* a crude kind of paging */
	oops = 0;
	lines = 0;
	while (fgets(buf, BUFSIZ, pfp) != NULL) {
		waddstr(ls_win, buf);
		lines++;
		if (lines == LINES-2) {
			lines = 0;
			mvwaddstr(ls_win, LINES-2, 28, "Press any key for more");
			wrefresh(ls_win);
			if (wgetch(ls_win) == ESC) {
				oops++;
				break;
			}
			werase(ls_win);
			wrefresh(ls_win);
		}
	}
	n_pclose(pfp);

	if (!oops) {
		mvwaddstr(ls_win, LINES-2, 25, "Press any key to continue");
		wrefresh(ls_win);
		wgetch(ls_win);
	}
	if (fd == -1) {
		werase(ls_win);
		wrefresh(ls_win);
	}
	delwin(ls_win);
	return;
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.