/************************************************************************ * "Epsilon", "EEL" and "Lugaru" are trademarks of Lugaru Software, Ltd. * * * * Copyright (C) 1985, 1989 Lugaru Software Ltd. All rights reserved. * * * * Limited permission is hereby granted to reproduce and modify this * * copyrighted material provided that the resulting code is used only in * * conjunction with Lugaru products and that this notice is retained in * * any such reproduction or modification. * ************************************************************************/ #include "eel.h" keytable dired_tab; /* key table for dired mode */ #ifdef UNIX #define NAME_START 39 /* column file name starts in */ #define AFTER_DIR "/" /* char after name of directory */ #else #define NAME_START 2 #define AFTER_DIR " " #endif when_loading() { int i; for (i = 0; i < NUMKEYS; i++) if (reg_tab[i] == (short) normal_character) dired_tab[i] = -1; } char dired_buffname[8]; do_dired_n (dir) char *dir; { int result; char *obufname = bufname; zap(dired_buffname); zap("dired"); result = do_dired(dir); if (!result) { int i; bufname = "dired"; i = size(); bufname = dired_buffname; xfer("dired", 0, i); bufname = obufname; } delete_buffer ("dired"); return (result); } char * dired_buffer_name () { int i; strcpy (dired_buffname, "dired"); for (i = 1; ; i++) { sprintf (dired_buffname + 5, "%d", i); if (!exist (dired_buffname)) break; } return (dired_buffname); } dired_examine() on dired_tab[' '], dired_tab['\n'], dired_tab['e'] { char fname[FNAMELEN], *p; to_begin_line(); dired_getname(fname); if (dired_isdir()) { /* directory */ dired_one(fname); p = get_tail(fname, 0); point = 0; /* for .., go to right place */ if (p > fname && strcmp(p, "..") == 0) { strcpy(p - 1, AFTER_DIR); col_search(get_tail(fname, 0), NAME_START); build_first = 1; } } else find_it(fname, !has_arg); /* regular file */ iter = 0; } dired_repl(ifchar, thenchar) { to_begin_line(); if (curchar() == ifchar) replace(point, thenchar); nl_forward(); } dired_mark() on dired_tab['d'] { dired_repl(' ', 'D'); } dired_unmark() on dired_tab['u'] { dired_repl('D', ' '); } dired_delete() on dired_tab['q'], dired_tab['x'] { char name[FNAMELEN], msg[80]; char *obufname = bufname; int firstbad = 0, save; iter = 0; point = 0; zap("help"); say("Delete these files? "); do { if (curchar() != 'D') continue; dired_getname(name); bufname = "help"; bprintf("%s\n", name); bufname = obufname; } while (nl_forward()); point = 0; view_buffer("help"); get_string(msg, "Delete these files? "); if (toupper(*msg) != 'Y') return; do { if (user_abort) { if (!firstbad) firstbad = point; break; } if (curchar() != 'D') { nl_forward(); continue; } dired_getname(name); sayput("Delete %s.", name); if (dired_isdir() ? rmdir(name) : delete_file(name)) { if (!firstbad) /* error occurred */ firstbad = point; nl_forward(); } else { /* no error */ save = point; nl_forward(); delete(save, point); } } while (point < size()); point = firstbad; say(""); if (firstbad) error("Files not deleted"); else modified = 0; } dired_next() on dired_tab['n'] { nl_forward(); } dired_prev() on dired_tab['p'] { nl_reverse(); to_begin_line(); } dired_getname(fullname) char *fullname; { int orig = point, i; char *p; point = 0; dired_getindex(fullname, 18); /* the directory */ p = fullname + (i = strlen(fullname)); if (i > 0 && !is_path_separator(fullname[i - 1])) *p++ = path_sep; /* add final / if none */ point = orig; dired_getindex(p, NAME_START); /* the file name */ #ifdef UNIX p += strlen(p) - 1; if (*p == '/' || *p == '*') *p = 0; #endif } dired_isdir() { char siz[50]; #ifdef UNIX dired_getindex(siz, 2); return *siz == 'd'; #else dired_getindex(siz,15); return !strcmp(siz,"