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

📄 dir.c

📁 Graphviz - Graph Drawing Programs from AT&T Research and Lucent Bell Labs See doc/build.html for
💻 C
字号:
/* $Id: Dir.c,v 1.2 2005/04/08 20:45:34 erg Exp $ $Revision: 1.2 $ *//* vim:set shiftwidth=4 ts=8: *//***********************************************************      This software is part of the graphviz package      **                http://www.graphviz.org/                 **                                                         **            Copyright (c) 1994-2004 AT&T Corp.           **                and is licensed under the                **            Common Public License, Version 1.0           **                      by AT&T Corp.                      **                                                         **        Information and Software Systems Research        **              AT&T Research, Florham Park NJ             ***********************************************************/#ifdef FEATURE_CS#include <ast.h>#endif/* * Copyright 1989 Software Research Associates, Inc., Tokyo, Japan * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Software Research Associates not be used * in advertising or publicity pertaining to distribution of the software * without specific, written prior permission.  Software Research Associates * makes no representations about the suitability of this software for any * purpose.  It is provided "as is" without express or implied warranty. * * SOFTWARE RESEARCH ASSOCIATES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, * IN NO EVENT SHALL SOFTWARE RESEARCH ASSOCIATES BE LIABLE FOR ANY SPECIAL, * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. * * Author: Erik M. van der Poel *         Software Research Associates, Inc., Tokyo, Japan *         erik@sra.co.jp */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <stdio.h>#ifdef SEL_FILE_IGNORE_CASE#include <ctype.h>#endif /* def SEL_FILE_IGNORE_CASE */#include "SFinternal.h"#if HAVE_DIRENT_H#include <dirent.h>#define DIRENT_DONE#else#define dirent direct#  if HAVE_SYS_NDIR_H#  include <sys/ndir.h>#  define DIRENT_DONE#  endif#  if HAVE_NDIR_H#  include <ndir.h>#  define DIRENT_DONE#  endif#endif#ifndef DIRENT_DONE#if defined (SVR4) || defined (SYSV) || defined (USG) || defined (__osf__) || defined (__svr4__) || defined (__FreeBSD__) || defined (SCO)#include <dirent.h>#else /* defined (SVR4) || defined (SYSV) || defined (USG) */#include <sys/dir.h>#define dirent direct#endif /* defined (SVR4) || defined (SYSV) || defined (USG) */#endif#include <sys/stat.h>#if defined (SVR4) || defined (SYSV) || defined (USG)extern void qsort ();#endif /* defined (SVR4) || defined (SYSV) || defined (USG) */#ifdef HAVE_STDLIB_H# include <stdlib.h>#endif#include "SFDecls.h"#ifdef SEL_FILE_IGNORE_CASEint SFcompareEntries (const void *vp, const void *vq) {    SFEntry *p = (SFEntry *) vp, *q = (SFEntry *) vq;    char *r, *s;    char c1, c2;    r = p->real;    s = q->real;    c1 = *r++;    if (islower (c1)) {        c1 = toupper (c1);    }    c2 = *s++;    if (islower (c2)) {        c2 = toupper (c2);    }    while (c1 == c2) {        if (!c1) {            return strcmp (p->real, q->real);        }        c1 = *r++;        if (islower (c1)) {            c1 = toupper (c1);        }        c2 = *s++;        if (islower (c2)) {            c2 = toupper (c2);        }    }    return c1 - c2;}#else /* def SEL_FILE_IGNORE_CASE */int SFcompareEntries (const void *vp, const void *vq) {    SFEntry *p = (SFEntry *) vp, *q = (SFEntry *) vq;    return strcmp (p->real, q->real);}#endif /* def SEL_FILE_IGNORE_CASE */int SFgetDir (SFDir *dir) {    SFEntry       *result = NULL;    int           alloc = 0;    int           i;    DIR           *dirp;    struct dirent *dp;    char          *str;    int           len;    int           maxChars;    struct stat   statBuf;    maxChars = strlen (dir->dir) - 1;    dir->entries = NULL;    dir->nEntries = 0;    dir->nChars = 0;    result = NULL;    i = 0;    dirp = opendir (".");    if (!dirp) {        return 1;    }    stat (".", &statBuf);    dir->mtime = statBuf.st_mtime;    readdir (dirp);    /* throw away "." */#ifndef S_IFLNK    readdir (dirp);    /* throw away ".." */#endif /* ndef S_IFLNK */    while ((dp = readdir (dirp))) {        if (i >= alloc) {            alloc = 2 * (alloc + 1);            result = (SFEntry *) XtRealloc (                (char *) result, (unsigned) (alloc * sizeof (SFEntry))            );        }        result[i].statDone = 0;        str = dp->d_name;        len = strlen (str);        result[i].real = XtMalloc ((unsigned) (len + 2));        strcat (strcpy (result[i].real, str), " ");        if (len > maxChars) {            maxChars = len;        }        result[i].shown = result[i].real;        i++;    }#if defined (SVR4) || defined (SYSV) || defined (USG)    qsort ((char *) result, (unsigned) i, sizeof (SFEntry), SFcompareEntries);#else /* defined (SVR4) || defined (SYSV) || defined (USG) */    qsort ((char *) result, i, sizeof (SFEntry), SFcompareEntries);#endif /* defined (SVR4) || defined (SYSV) || defined (USG) */    dir->entries = result;    dir->nEntries = i;    dir->nChars = maxChars + 1;    closedir (dirp);    return 0;}

⌨️ 快捷键说明

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