003 File Manager
Current Path:
/usr/src/contrib/tcsh
usr
/
src
/
contrib
/
tcsh
/
📁
..
📄
FAQ
(12.47 KB)
📄
FREEBSD-Xlist
(107 B)
📄
FREEBSD-upgrade
(312 B)
📄
Fixes
(94.98 KB)
📄
Imakefile
(13.63 KB)
📄
MAKEDIFFS
(928 B)
📄
MAKESHAR
(2.08 KB)
📄
Makefile.in
(22.77 KB)
📄
Makefile.std
(19.75 KB)
📄
Makefile.vms
(18.47 KB)
📄
NewThings
(6.37 KB)
📄
Ported
(23.67 KB)
📄
README.md
(664 B)
📄
WishList
(10.86 KB)
📄
Y2K
(555 B)
📄
complete.tcsh
(53.67 KB)
📁
config
📄
config.guess
(42.41 KB)
📄
config.h.in
(7.43 KB)
📄
config.rpath
(14.52 KB)
📄
config.sub
(34.69 KB)
📄
config_f.h
(5.45 KB)
📄
configure
(224.09 KB)
📄
csh-mode.el
(29.15 KB)
📄
dotlock.c
(4.47 KB)
📄
dotlock.h
(1.55 KB)
📄
ed.chared.c
(74.68 KB)
📄
ed.decls.h
(9.6 KB)
📄
ed.defns.c
(50.56 KB)
📄
ed.h
(9.09 KB)
📄
ed.init.c
(19.51 KB)
📄
ed.inputl.c
(22.96 KB)
📄
ed.refresh.c
(33.56 KB)
📄
ed.screen.c
(39.44 KB)
📄
ed.term.c
(26.61 KB)
📄
ed.term.h
(11.71 KB)
📄
ed.xmap.c
(17.13 KB)
📄
eight-bit.me
(4.31 KB)
📄
gethost.c
(9.03 KB)
📄
glob.3
(11.14 KB)
📄
glob.c
(19.62 KB)
📄
glob.h
(4.1 KB)
📄
host.defs
(30.42 KB)
📄
imake.config
(2 KB)
📄
install-sh
(13.34 KB)
📄
ma.setp.c
(13.76 KB)
📄
mi.termios.c
(10.85 KB)
📄
mi.varargs.h
(306 B)
📄
mi.wait.h
(1.41 KB)
📁
nls
📄
patchlevel.h
(215 B)
📄
pathnames.h
(5.08 KB)
📄
sh.c
(61.95 KB)
📄
sh.char.c
(41.56 KB)
📄
sh.char.h
(12.01 KB)
📄
sh.decls.h
(14.66 KB)
📄
sh.dir.c
(32.37 KB)
📄
sh.dir.h
(2.3 KB)
📄
sh.dol.c
(23.6 KB)
📄
sh.err.c
(19.62 KB)
📄
sh.exec.c
(28.26 KB)
📄
sh.exp.c
(21.67 KB)
📄
sh.file.c
(18.11 KB)
📄
sh.func.c
(58.03 KB)
📄
sh.glob.c
(20.96 KB)
📄
sh.h
(37.71 KB)
📄
sh.hist.c
(37.78 KB)
📄
sh.init.c
(27.5 KB)
📄
sh.lex.c
(37.45 KB)
📄
sh.misc.c
(12.35 KB)
📄
sh.parse.c
(13.14 KB)
📄
sh.print.c
(6.37 KB)
📄
sh.proc.c
(50.09 KB)
📄
sh.proc.h
(5.16 KB)
📄
sh.sem.c
(25.39 KB)
📄
sh.set.c
(28.51 KB)
📄
sh.time.c
(18.67 KB)
📄
sh.types.h
(8.1 KB)
📄
snames.h
(2.68 KB)
📄
src.desc
(2.89 KB)
📄
svn
(743 B)
📄
tc.alloc.c
(17.09 KB)
📄
tc.bind.c
(12.03 KB)
📄
tc.const.c
(24.16 KB)
📄
tc.decls.h
(10.49 KB)
📄
tc.disc.c
(5.09 KB)
📄
tc.func.c
(49.15 KB)
📄
tc.h
(2.64 KB)
📄
tc.nls.c
(4.29 KB)
📄
tc.nls.h
(2.18 KB)
📄
tc.os.c
(36.71 KB)
📄
tc.os.h
(15.6 KB)
📄
tc.printf.c
(9.99 KB)
📄
tc.prompt.c
(16.47 KB)
📄
tc.sched.c
(6.76 KB)
📄
tc.sig.c
(3.53 KB)
📄
tc.sig.h
(5.53 KB)
📄
tc.str.c
(14.67 KB)
📄
tc.vers.c
(4.29 KB)
📄
tc.wait.h
(4.63 KB)
📄
tc.who.c
(16.47 KB)
📄
tcsh.man
(202.17 KB)
📄
tcsh.man.new
(199.97 KB)
📄
tcsh.man2html
(21.72 KB)
📄
termcap.vms
(1.53 KB)
📄
tw.color.c
(12.45 KB)
📄
tw.comp.c
(14.38 KB)
📄
tw.decls.h
(4.84 KB)
📄
tw.h
(3.26 KB)
📄
tw.help.c
(5.85 KB)
📄
tw.init.c
(22.13 KB)
📄
tw.parse.c
(56.96 KB)
📄
tw.spell.c
(5.04 KB)
📄
vms.termcap.c
(8.07 KB)
Editing: tw.color.c
/* * tw.color.c: builtin color ls-F */ /*- * Copyright (c) 1998 The Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "sh.h" #include "tw.h" #include "ed.h" #include "tc.h" #ifdef COLOR_LS_F typedef struct { const char *s; size_t len; } Str; #define VAR(suffix,variable,defaultcolor) \ { \ suffix, variable, { defaultcolor, sizeof(defaultcolor) - 1 }, \ { defaultcolor, sizeof(defaultcolor) - 1 } \ } #define NOS '\0' /* no suffix */ typedef struct { const char suffix; const char *variable; Str color; Str defaultcolor; } Variable; static Variable variables[] = { VAR('/', "di", "01;34"), /* Directory */ VAR('@', "ln", "01;36"), /* Symbolic link */ VAR('&', "or", ""), /* Orphanned symbolic link (defaults to ln) */ VAR('|', "pi", "33"), /* Named pipe (FIFO) */ VAR('=', "so", "01;35"), /* Socket */ VAR('>', "do", "01;35"), /* Door (solaris fast ipc mechanism) */ VAR('#', "bd", "01;33"), /* Block device */ VAR('%', "cd", "01;33"), /* Character device */ VAR('*', "ex", "01;32"), /* Executable file */ VAR(NOS, "fi", "0"), /* Regular file */ VAR(NOS, "no", "0"), /* Normal (non-filename) text */ VAR(NOS, "mi", ""), /* Missing file (defaults to fi) */ #ifdef IS_ASCII VAR(NOS, "lc", "\033["), /* Left code (ASCII) */ #else VAR(NOS, "lc", "\x27["), /* Left code (EBCDIC)*/ #endif VAR(NOS, "rc", "m"), /* Right code */ VAR(NOS, "ec", ""), /* End code (replaces lc+no+rc) */ VAR(NOS, "su", ""), /* Setuid file (u+s) */ VAR(NOS, "sg", ""), /* Setgid file (g+s) */ VAR(NOS, "tw", ""), /* Sticky and other writable dir (+t,o+w) */ VAR(NOS, "ow", ""), /* Other writable dir (o+w) but not sticky */ VAR(NOS, "st", ""), /* Sticky dir (+t) but not other writable */ VAR(NOS, "rs", "0"), /* Reset to normal color */ VAR(NOS, "hl", "44;37"), /* Reg file extra hard links, obsolete? */ VAR(NOS, "mh", "44;37"), /* Reg file extra hard links */ VAR(NOS, "ca", "30;41"), /* File with capability */ }; #define nvariables (sizeof(variables)/sizeof(variables[0])) enum FileType { VDir, VSym, VOrph, VPipe, VSock, VDoor, VBlock, VChr, VExe, VFile, VNormal, VMiss, VLeft, VRight, VEnd, VSuid, VSgid, VSticky, VOther, Vstird, VReset, Vhard, Vhard2, VCap }; /* * Map from LSCOLORS entry index to Variable array index */ static const uint8_t map[] = { VDir, /* Directory */ VSym, /* Symbolic Link */ VSock, /* Socket */ VPipe, /* Named Pipe */ VExe, /* Executable */ VBlock, /* Block Special */ VChr, /* Character Special */ VSuid, /* Setuid Executable */ VSgid, /* Setgid Executable */ VSticky, /* Directory writable to others and sticky */ VOther, /* Directory writable to others but not sticky */ }; enum ansi { ANSI_RESET_ON = 0, /* reset colors/styles (white on black) */ ANSI_BOLD_ON = 1, /* bold on */ ANSI_ITALICS_ON = 3, /* italics on */ ANSI_UNDERLINE_ON = 4, /* underline on */ ANSI_INVERSE_ON = 7, /* inverse on */ ANSI_STRIKETHROUGH_ON = 9, /* strikethrough on */ ANSI_BOLD_OFF = 21, /* bold off */ ANSI_ITALICS_OFF = 23, /* italics off */ ANSI_UNDERLINE_OFF = 24, /* underline off */ ANSI_INVERSE_OFF = 27, /* inverse off */ ANSI_STRIKETHROUGH_OFF = 29,/* strikethrough off */ ANSI_FG_BLACK = 30, /* fg black */ ANSI_FG_RED = 31, /* fg red */ ANSI_FG_GREEN = 32, /* fg green */ ANSI_FG_YELLOW = 33, /* fg yellow */ ANSI_FG_BLUE = 34, /* fg blue */ ANSI_FG_MAGENTA = 35, /* fg magenta */ ANSI_FG_CYAN = 36, /* fg cyan */ ANSI_FG_WHITE = 37, /* fg white */ ANSI_FG_DEFAULT = 39, /* fg default (white) */ ANSI_BG_BLACK = 40, /* bg black */ ANSI_BG_RED = 41, /* bg red */ ANSI_BG_GREEN = 42, /* bg green */ ANSI_BG_YELLOW = 43, /* bg yellow */ ANSI_BG_BLUE = 44, /* bg blue */ ANSI_BG_MAGENTA = 45, /* bg magenta */ ANSI_BG_CYAN = 46, /* bg cyan */ ANSI_BG_WHITE = 47, /* bg white */ ANSI_BG_DEFAULT = 49, /* bg default (black) */ }; #define TCSH_BOLD 0x80 typedef struct { Str extension; /* file extension */ Str color; /* color string */ } Extension; static Extension *extensions = NULL; static size_t nextensions = 0; static char *colors = NULL; int color_context_ls = FALSE; /* do colored ls */ static int color_context_lsmF = FALSE; /* do colored ls-F */ static int getstring (char **, const Char **, Str *, int); static void put_color (const Str *); static void print_color (const Char *, size_t, Char); /* set_color_context(): */ void set_color_context(void) { struct varent *vp = adrof(STRcolor); if (vp == NULL || vp->vec == NULL) { color_context_ls = FALSE; color_context_lsmF = FALSE; } else if (!vp->vec[0] || vp->vec[0][0] == '\0') { color_context_ls = TRUE; color_context_lsmF = TRUE; } else { size_t i; color_context_ls = FALSE; color_context_lsmF = FALSE; for (i = 0; vp->vec[i]; i++) if (Strcmp(vp->vec[i], STRls) == 0) color_context_ls = TRUE; else if (Strcmp(vp->vec[i], STRlsmF) == 0) color_context_lsmF = TRUE; } } /* getstring(): */ static int getstring(char **dp, const Char **sp, Str *pd, int f) { const Char *s = *sp; char *d = *dp; eChar sc; while (*s && (*s & CHAR) != (Char)f && (*s & CHAR) != ':') { if ((*s & CHAR) == '\\' || (*s & CHAR) == '^') { if ((sc = parseescape(&s)) == CHAR_ERR) return 0; } else sc = *s++ & CHAR; d += one_wctomb(d, sc); } pd->s = *dp; pd->len = d - *dp; *sp = s; *dp = d; return *s == (Char)f; } static void init(size_t colorlen, size_t extnum) { size_t i; xfree(extensions); for (i = 0; i < nvariables; i++) variables[i].color = variables[i].defaultcolor; if (colorlen == 0 && extnum == 0) { extensions = NULL; colors = NULL; } else { extensions = xmalloc(colorlen + extnum * sizeof(*extensions)); colors = extnum * sizeof(*extensions) + (char *)extensions; } nextensions = 0; } static int color(Char x) { static const char ccolors[] = "abcdefghx"; char *p; if (Isupper(x)) { x = Tolower(x); } if (x == '\0' || (p = strchr(ccolors, x)) == NULL) return -1; return 30 + (p - ccolors); } static void makecolor(char **c, int fg, int bg, Str *v) { int l; if (fg & 0x80) l = xsnprintf(*c, 12, "%.2d;%.2d;%.2d;%.2d", ANSI_BOLD_ON, fg & ~TCSH_BOLD, (10 + bg) & ~TCSH_BOLD, ANSI_BOLD_OFF); l = xsnprintf(*c, 6, "%.2d;%.2d", fg & ~TCSH_BOLD, (10 + bg) & ~TCSH_BOLD); v->s = *c; v->len = l; *c += l + 1; } /* parseLSCOLORS(): * Parse the LSCOLORS environment variable */ static const Char *xv; /* setjmp clobbering */ void parseLSCOLORS(const Char *value) { size_t i, len, clen; jmp_buf_t osetexit; size_t omark; xv = value; if (xv == NULL) { init(0, 0); return; } len = Strlen(xv); len >>= 1; clen = len * 12; /* "??;??;??;??\0" */ init(clen, 0); /* Prevent from crashing if unknown parameters are given. */ omark = cleanup_push_mark(); getexit(osetexit); /* init pointers */ if (setexit() == 0) { const Char *v = xv; char *c = colors; int fg, bg; for (i = 0; i < len; i++) { fg = color(*v++); if (fg == -1) stderror(ERR_BADCOLORVAR, v[-1], '?'); bg = color(*v++); if (bg == -1) stderror(ERR_BADCOLORVAR, '?', v[-1]); makecolor(&c, fg, bg, &variables[map[i]].color); } } cleanup_pop_mark(omark); resexit(osetexit); } /* parseLS_COLORS(): * Parse the LS_COLORS environment variable */ void parseLS_COLORS(const Char *value) { size_t i, len; const Char *v; /* pointer in value */ char *c; /* pointer in colors */ Extension *volatile e; /* pointer in extensions */ jmp_buf_t osetexit; size_t omark; (void) &e; if (value == NULL) { init(0, 0); return; } len = Strlen(value); /* allocate memory */ i = 1; for (v = value; *v; v++) if ((*v & CHAR) == ':') i++; init(len, i); /* init pointers */ v = value; c = colors; e = extensions; /* Prevent from crashing if unknown parameters are given. */ omark = cleanup_push_mark(); getexit(osetexit); if (setexit() == 0) { /* parse */ while (*v) { switch (*v & CHAR) { case ':': v++; continue; case '*': /* :*ext=color: */ v++; if (getstring(&c, &v, &e->extension, '=') && 0 < e->extension.len) { v++; getstring(&c, &v, &e->color, ':'); e++; continue; } break; default: /* :vl=color: */ if (v[0] && v[1] && (v[2] & CHAR) == '=') { for (i = 0; i < nvariables; i++) if ((Char)variables[i].variable[0] == (v[0] & CHAR) && (Char)variables[i].variable[1] == (v[1] & CHAR)) break; if (i < nvariables) { v += 3; getstring(&c, &v, &variables[i].color, ':'); continue; } else stderror(ERR_BADCOLORVAR, v[0], v[1]); } break; } while (*v && (*v & CHAR) != ':') v++; } } cleanup_pop_mark(omark); resexit(osetexit); nextensions = e - extensions; } /* put_color(): */ static void put_color(const Str *colorp) { size_t i; const char *c = colorp->s; int original_output_raw = output_raw; output_raw = TRUE; cleanup_push(&original_output_raw, output_raw_restore); for (i = colorp->len; 0 < i; i--) xputchar(*c++); cleanup_until(&original_output_raw); } /* print_color(): */ static void print_color(const Char *fname, size_t len, Char suffix) { size_t i; char *filename = short2str(fname); char *last = filename + len; Str *colorp = &variables[VFile].color; switch (suffix) { case '>': /* File is a symbolic link pointing to * a directory */ colorp = &variables[VDir].color; break; case '+': /* File is a hidden directory [aix] or * context dependent [hpux] */ case ':': /* File is network special [hpux] */ break; default: for (i = 0; i < nvariables; i++) if (variables[i].suffix != NOS && (Char)variables[i].suffix == suffix) { colorp = &variables[i].color; break; } if (i == nvariables) { for (i = 0; i < nextensions; i++) if (len >= extensions[i].extension.len && strncmp(last - extensions[i].extension.len, extensions[i].extension.s, extensions[i].extension.len) == 0) { colorp = &extensions[i].color; break; } } break; } put_color(&variables[VLeft].color); put_color(colorp); put_color(&variables[VRight].color); } /* print_with_color(): */ void print_with_color(const Char *filename, size_t len, Char suffix) { if (color_context_lsmF && (haderr ? (didfds ? is2atty : isdiagatty) : (didfds ? is1atty : isoutatty))) { print_color(filename, len, suffix); xprintf("%S", filename); if (0 < variables[VEnd].color.len) put_color(&variables[VEnd].color); else { put_color(&variables[VLeft].color); put_color(&variables[VNormal].color); put_color(&variables[VRight].color); } } else xprintf("%S", filename); xputwchar(suffix); } #endif /* COLOR_LS_F */
Upload File
Create Folder