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

📄 pic_dirent.frm

📁 CForms, by Lars Berntzon (Stockholm, Sweden), is a tool for building interactive forms-driven applic
💻 FRM
字号:
/* * Library picture: let user select a file. * * @(#) pic_dirent.frm,v 1.6 1993/07/20 23:05:55 lasse Exp */Viewport view {    Pos 0,0;    Size 80, 23;}Event Key ESC   { pic_leave(); }Event Key DOWN  { fld_move(fld_down(NULL));  }Event Key UP    { fld_move(fld_up(NULL));    }Event Key TAB   { fld_move(fld_next(NULL)); }Event Key CR    {    char *p = fld_get_trimmed(NULL);    if (strcmp(p, "../") == 0)    {	p = strrchr(dirname, '/');	if (p != NULL)	{	    /* Remove concatenated slashes */	    while ((p > dirname) && (p[-1] == '/')) {		p--;	    }	    if (p == dirname) {		p++; /* Never remove root slash */	    }	    *p = 0;	}    }    else if (strcmp(p, "./") != 0)    {	strcat(dirname, "/");	strcat(dirname, p);	if (dirname[strlen(dirname) - 1] == '/') {	    dirname[strlen(dirname) - 1] = 0;	}	if (!isadir(dirname, NULL))	{	    fld_set(field("Return"), dirname);	    pic_leave();	    return;	}    }    fld_set(field("Dir"), dirname);    redraw_dir();    fld_move(field("Row0"));}Picture pic_dirent Viewport View{    Event Draw {	extern char *getcwd(char *buf, int size);	if (fld_isempty(field("Dir"))) {	    getcwd(dirname, sizeof dirname);	    fld_set(field("Dir"), dirname);	}	redraw_dir();	fld_move(field("Row0"));    }    Field Title {	Pos Center, 1;	Type Char(30);	Forbidden;	Value "Choose file";    }    Field Dir {	Event Key CR { fld_move(fld_down(NULL)); }	Event Exit {	    if (fld_ismodified(NULL)) {		redraw_dir();	    }	}	Pos 12, +2; Type Char(60);    }    Field DirLabel {	Type Char(12);	Pos 0, +0;	Forbidden;	Value " Directory: ";    }    Field Row0  {Pos 0,    5; Type Char(19); Protected; }    Field Row1  {Pos +20, +0; Type Char(19); Protected; }    Field Row2  {Pos +20, +0; Type Char(19); Protected; }    Field Row3  {Pos +20, +0; Type Char(19); Protected; }    Field Row4  {Pos 0,   +1; Type Char(19); Protected; }    Field Row5  {Pos +20, +0; Type Char(19); Protected; }    Field Row6  {Pos +20, +0; Type Char(19); Protected; }    Field Row7  {Pos +20, +0; Type Char(19); Protected; }    Field Row8  {Pos 0,   +1; Type Char(19); Protected; }    Field Row9  {Pos +20, +0; Type Char(19); Protected; }    Field Row10  {Pos +20, +0; Type Char(19); Protected; }    Field Row11  {Pos +20, +0; Type Char(19); Protected; }    Field Row12  {Pos 0,   +1; Type Char(19); Protected; }    Field Row13  {Pos +20, +0; Type Char(19); Protected; }    Field Row14  {Pos +20, +0; Type Char(19); Protected; }    Field Row15  {Pos +20, +0; Type Char(19); Protected; }    Field Row16  {Pos 0,   +1; Type Char(19); Protected; }    Field Row17  {Pos +20, +0; Type Char(19); Protected; }    Field Row18  {Pos +20, +0; Type Char(19); Protected; }    Field Row19  {Pos +20, +0; Type Char(19); Protected; }    Field Row20  {Pos 0,   +1; Type Char(19); Protected; }    Field Row21  {Pos +20, +0; Type Char(19); Protected; }    Field Row22  {Pos +20, +0; Type Char(19); Protected; }    Field Row23  {Pos +20, +0; Type Char(19); Protected; }    Field Row24  {Pos 0,   +1; Type Char(19); Protected; }    Field Row25  {Pos +20, +0; Type Char(19); Protected; }    Field Row26  {Pos +20, +0; Type Char(19); Protected; }    Field Row27  {Pos +20, +0; Type Char(19); Protected; }    Field Row28  {Pos 0,   +1; Type Char(19); Protected; }    Field Row29  {Pos +20, +0; Type Char(19); Protected; }    Field Row30  {Pos +20, +0; Type Char(19); Protected; }    Field Row31  {Pos +20, +0; Type Char(19); Protected; }    Field Row32  {Pos 0,   +1; Type Char(19); Protected; }    Field Row33  {Pos +20, +0; Type Char(19); Protected; }    Field Row34  {Pos +20, +0; Type Char(19); Protected; }    Field Row35  {Pos +20, +0; Type Char(19); Protected; }    Field Row36  {Pos 0,   +1; Type Char(19); Protected; }    Field Row37  {Pos +20, +0; Type Char(19); Protected; }    Field Row38  {Pos +20, +0; Type Char(19); Protected; }    Field Row39  {Pos +20, +0; Type Char(19); Protected; }    Field Row40  {Pos 0,   +1; Type Char(19); Protected; }    Field Row41  {Pos +20, +0; Type Char(19); Protected; }    Field Row42  {Pos +20, +0; Type Char(19); Protected; }    Field Row43  {Pos +20, +0; Type Char(19); Protected; }    Field Row44  {Pos 0,   +1; Type Char(19); Protected; }    Field Row45  {Pos +20, +0; Type Char(19); Protected; }    Field Row46  {Pos +20, +0; Type Char(19); Protected; }    Field Row47  {Pos +20, +0; Type Char(19); Protected; }    Field Row48  {Pos 0,   +1; Type Char(19); Protected; }    Field Row49  {Pos +20, +0; Type Char(19); Protected; }    Field Row50  {Pos +20, +0; Type Char(19); Protected; }    Field Row51  {Pos +20, +0; Type Char(19); Protected; }    Field Row52  {Pos 0,   +1; Type Char(19); Protected; }    Field Row53  {Pos +20, +0; Type Char(19); Protected; }    Field Row54  {Pos +20, +0; Type Char(19); Protected; }    Field Row55  {Pos +20, +0; Type Char(19); Protected; }    Field Help  {Pos Center, +2; Type Char(20); Forbidden; }    Field Return {Pos 0, +1; Type Char(80); Forbidden; Invisible; }}CCode {#include <sys/types.h>#include <sys/stat.h>#include <dirent.h>#include <string.h>#include <stdlib.h>#include "../src/config.h"#define MAXROWS 56     static int n_entries = 0;    static int cur_entry = 0;    static char dirname[1024];    static int read_dir(char *dir);    static void showdir(void);    static int isadir(char *dir, char *fname);    /*     * List of entries.     */    static struct direlem {	struct direlem *next;	char *name;    } *first = NULL;    static int read_dir(char *dirname)    {	struct direlem *p, *next, **pp;	struct dirent *dent;	DIR *d;		if ((d = opendir(dirname)) == NULL) return -1;	/*	 * Free old list.	 */	for (p = first; p != NULL; p = next)	{	    next = p->next;	    if (p->name) free(p->name);	    free(p);	}	first = NULL;	/*	 * Read the whole directory into list.	 */	while(dent = readdir(d))	{	    /*	     * Allocate space for entry.	     */	    if ((p = malloc(sizeof *p)) == NULL) return -1;	    /* Add 2 for tackle on trailing slash */	    if ((p->name = malloc(dent->d_reclen + 2)) == NULL) return -1;	    /*	     * Setup entry.	     */	    memcpy(p->name, dent->d_name, dent->d_reclen);	    p->name[dent->d_reclen] = 0;	    if (isadir(dirname, p->name)) {		strcat(p->name, "/");	    }	    /*	     * Link entry.	     */	    for(pp = &first; *pp != NULL; pp = &(*pp)->next)	    {		if (strcmp((*pp)->name, p->name) > 0) break;	    }	    p->next = *pp;	    *pp = p;	    n_entries++;	}	return 0;    }    static void showdir(void)    {	int i;	struct direlem *p;	fld_set(field("Dir"), dirname);	p = first;	for(i = 0; (i < cur_entry) && (p != NULL); i++) {	    p = p->next;	}	for(i = 0; (i < MAXROWS) && (p != NULL); i++)	{	    fld_set(field("Row%d", i), p->name);	    p = p->next;	}	for(; i < MAXROWS; i++)	{	    fld_set(field("Row%d", i), "");	}    }    static void redraw_dir(void)    {	strcpy(dirname, fld_get_trimmed(field("Dir")));	if (read_dir(dirname) != 0) {	    message("Can't open directory: %s", dirname);	    return;	}	showdir();    }    static int isadir(char *dir, char *fname)    {	static char buf[1024];	struct stat stat_buf;	strcpy(buf, dir);	if (fname) {	    strcat(buf, "/");	    strcat(buf, fname);	}	stat_buf.st_mode = 0;	stat(buf, &stat_buf);	return (stat_buf.st_mode & S_IFDIR) != 0;    }}

⌨️ 快捷键说明

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