亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cfls.c

?? OXCC is a multipass, interpreting C compiler with several language extensions. It generates an Archi
?? C
?? 第 1 頁 / 共 5 頁
字號:
            len += 4;
      }
    }
    else
      len += 1;
  }

  if (indicator_style != none)
  {
    if (filetype == S_IFREG)
    {
      if (indicator_style == all
        && (f->stats.st_mode & (S_IEXEC | S_IEXEC >> 3 | S_IEXEC >> 6)))
        len += 1;
    }
    else if (filetype & S_IFDIR
#ifdef S_IFLNK
         || filetype == S_IFLNK
#endif
#ifdef S_IFIFO
         || filetype == S_IFIFO
#endif
#ifdef S_IFSOCK
         || filetype == S_IFSOCK
#endif
      ) len += 1;
  }
#ifdef PCDOS
  if(format == many_per_line)
  {
    if(filetype == S_IFDIR)
    {
      len += 2;
      if(indicator_style != none) --len;
    }
  }
#endif
  return len;
}

void
print_many_per_line ()

{
  int filesno;      /* Index into files. */
  int row;      /* Current row. */
  int max_name_length;    /* Length of longest file name + frills. */
  int name_length;    /* Length of each file name + frills. */
  int pos;      /* Current character column. */
  int cols;     /* Number of files across. */
  int rows;     /* Maximum number of files down. */

  /* Compute the maximum file name length.  */
  max_name_length = 0;
  for (filesno = 0; filesno < files_index; filesno++)
  {
    name_length = length_of_file_name_and_frills (files + filesno);
    if (name_length > max_name_length)
      max_name_length = name_length;
  }

  /* Allow at least two spaces between names.  */
  max_name_length += 2;

  /* Calculate the maximum number of columns that will fit. */
  cols = line_length / max_name_length;
  if (cols == 0)
    cols = 1;
  /* Calculate the number of rows that will be in each column except possibly
     for a short column on the right. */
  rows = files_index / cols + (files_index % cols != 0);
  /* Recalculate columns based on rows. */
  cols = files_index / rows + (files_index % rows != 0);

  for (row = 0; row < rows; row++)
  {
    filesno = row;
    pos = 0;
      /* Print the next row.  */
    while (1)
    {
      print_file_name_and_frills (files + filesno);
      name_length = length_of_file_name_and_frills (files + filesno);

      filesno += rows;
      if (filesno >= files_index)
        break;

      indent (pos + name_length, pos + max_name_length);
      pos += max_name_length;
    }
    putchar ('\n');
  }
}

void
print_horizontal ()

{
  int filesno;
  int max_name_length;
  int name_length;
  int cols;
  int pos;

  /* Compute the maximum file name length.  */
  max_name_length = 0;
  for (filesno = 0; filesno < files_index; filesno++)
  {
    name_length = length_of_file_name_and_frills (files + filesno);
    if (name_length > max_name_length)
      max_name_length = name_length;
  }

  /* Allow two spaces between names.  */
  max_name_length += 2;

  cols = line_length / max_name_length;
  if (cols == 0)
    cols = 1;

  pos = 0;
  name_length = 0;

  for (filesno = 0; filesno < files_index; filesno++)
  {
    if (filesno != 0)
    {
      if (filesno % cols == 0)
      {
        putchar ('\n');
        pos = 0;
      }
      else
      {
        indent (pos + name_length, pos + max_name_length);
        pos += max_name_length;
      }
    }

    print_file_name_and_frills (files + filesno);

    name_length = length_of_file_name_and_frills (files + filesno);
  }
  putchar ('\n');
}

void
print_with_commas ()

{
  int filesno;
  int pos, old_pos;

  pos = 0;

  for (filesno = 0; filesno < files_index; filesno++)
  {
    old_pos = pos;

    pos += length_of_file_name_and_frills (files + filesno);
    if (filesno + 1 < files_index)
      pos += 2;   /* For the comma and space */

    if (old_pos != 0 && pos >= line_length)
    {
      putchar ('\n');
      pos -= old_pos;
    }

    print_file_name_and_frills (files + filesno);
    if (filesno + 1 < files_index)
    {
      putchar (',');
      putchar (' ');
    }
  }
  putchar ('\n');
}

#ifndef PCDOS
struct userid
{
  unsigned short uid;
  char *name;
  struct userid *next;
};

struct userid *user_alist;

/* Translate `uid' to a login name, with cache.  */

char *
getuser (uid)
     unsigned short uid;

{
  register struct userid *tail;
  struct passwd *pwent;
  char usernum_string[20];

  for (tail = user_alist; tail; tail = tail->next)
    if (tail->uid == uid)
      return tail->name;

  pwent = getpwuid (uid);
  tail = (struct userid *) xmalloc (sizeof (struct userid));
  tail->uid = uid;
  tail->next = user_alist;
  if (pwent == NULL)
  {
    sprintf (usernum_string, "%u", (unsigned short) uid);
    tail->name = copystring (usernum_string);
  }
  else
    tail->name = copystring (pwent->pw_name);
  user_alist = tail;
  return tail->name;
}

/* We use the same struct as for userids.  */
struct userid *group_alist;

/* Translate `gid' to a group name, with cache.  */

char *
getgroup (gid)
     unsigned short gid;

{
  register struct userid *tail;
  struct group *grent;
  char groupnum_string[20];

  for (tail = group_alist; tail; tail = tail->next)
    if (tail->uid == gid)
      return tail->name;

  grent = getgrgid (gid);
  tail = (struct userid *) xmalloc (sizeof (struct userid));
  tail->uid = gid;
  tail->next = group_alist;
  if (grent == NULL)
  {
    sprintf (groupnum_string, "%u", (unsigned int) gid);
    tail->name = copystring (groupnum_string);
  }
  else
    tail->name = copystring (grent->gr_name);
  group_alist = tail;
  return tail->name;
}
#endif
/* Assuming cursor is at position `from', indent up to position `to'.  */

void
indent (from, to)
     int from, to;

{
  while (from < to)
  {
    if (to / tabsize > from / tabsize)
    {
      putchar ('\t');
      from += tabsize - from % tabsize;
    }
    else
    {
      putchar (' ');
      from++;
    }
  }
}

/* Low level subroutines of general use,
   not specifically related to the task of listing a directory.  */

char *
xrealloc (obj, size)
void *obj;
int size;

{
  char *val = realloc (obj, size);

  if (!val)
    error (1, 0, "virtual memory exhausted");

  return val;
}

char *
xmalloc (size)
     int size;

{
  char *val = malloc (size);

  if (!val)
    error (1, 0, "virtual memory exhausted");

  return val;
}

/* Return a newly allocated copy of `string'. */

char *
copystring (string)
     char *string;

{
  return strcpy ((char *) xmalloc (strlen (string) + 1), string);
}

/* Put `dirname/name' into `dest', handling `.' and `/' properly. */

void
attach (dest, dirname, name)
     char *dest, *dirname, *name;

{
  char *dirnamep = dirname;

  /* Copy dirname if it is not ".". */
  if (dirname[0] != '.' || dirname[1] != 0)
  {
    while (*dirnamep)
      *dest++ = *dirnamep++;
      /* Add '/' if `dirname' doesn't already end with it. */
    if (dirnamep > dirname && (dirnamep[-1] != '/'
#ifdef PCDOS
          && dirnamep[-1] != ':'
#endif
          ))
      *dest++ = '/';
  }
  while (*name)
    *dest++ = *name++;
  *dest = 0;
}

/* Check for a globbing pattern in an explicit argument, the shell may
  have passed it along, always for PCDOS. */

int
if_pattern(name)
register char *name;

{
  register char ch;
  while (ch = *name++)
    if (ch == '*' || ch == '?' || ch == '[')
      return 1;
  return 0;
}
#ifdef PCDOS
void lose_backslashes(char *path)

{
  while(*path)
  {
    if(*path == '\\') *path = '/';
    ++path;
  }
}
#endif

void
usage ()

{
  fprintf (stdout, "\
Usage: ls [-abdgiklnpqrstxABCFNQRSUX1] [path...]\n");
  fprintf (stdout, "\n\
  Switch-------------------Meaning\n\
  a, +all                  List all files.\n\
  b, +escape               Quote nongraphic characters.\n\
  d, +directory            List directory name, not contents.\n\
  g,                       Ignored for Unix compatibility.\n\
  i, +inode                Print index number of each file.\n\
  k, +kilobytes            Print file sizes in kilobyte blocks.\n\
  l, +format=long          Print in long format.\n\
  m, +format=commas        List files horizontally, separated by commas.\n\
  p                        Put '/' after each directory, if not multi-col.\n\
  r, +reverse              Sort in reverse order.\n\
  s, +size                 Print the size of each file in blocks allocated.\n\
  t, +sort=time            Sort directory contents by timestamp.\n\
  x, +format=across        Multi-column, sorted horizontally.\n\
  A, +almost-all           List all files except for '.' and '..'.\n\
  B, +ignore-backups       Do not list files that end with '~'.\n\
  C, +format=vertical      Multi-column, sorted vertically.\n\
  F, +classify             Tag the file type of each file.\n\
  N, +literal              Do not quote file names.\n\
  Q, +quote-name           Enclose file names in double quotes.\n\
  R, +recursive            List the contents of directories recursively.\n\
  S, +sort=size            Sort directory contents by file size.\n\
  U, +sort=none            Do not sort directory contents.\n\
  X, +sort=extension       Sort directory contents by file extension.\n\
  1, +format=single-column List one file per line.\n\
  w, +width cols           Assume screen width to be 'cols' wide.\n\
  T. +tabsize cols         Assume that each tabstop is 'cols' wide.\n\
  I, +ignore pattern       Do not list files that match 'pattern'.\n");

  exit (1);
}
/* Getopt for GNU.
   Copyright (C) 1987, 1989, 1990 Free Software Foundation, Inc.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 1, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */

#ifdef __STDC__
#define CONST const
#else
#define CONST
#endif

/* This version of `getopt' appears to the caller like standard Unix `getopt'
   but it behaves differently for the user, since it allows the user
   to intersperse the options with the other arguments.

   As `getopt' works, it permutes the elements of `argv' so that,
   when it is done, all the options precede everything else.  Thus
   all application programs are extended to handle flexible argument order.

   Setting the environment variable _POSIX_OPTION_ORDER disables permutation.
   Then the behavior is completely standard.

   GNU application programs can use a third alternative mode in which
   they can distinguish the relative order of options and other arguments.  */


/* For communication from `getopt' to the caller.
   When `getopt' finds an option that takes an argument,
   the argument value is returned here.
   Also, when `ordering' is RETURN_IN_ORDER,
   each non-option ARGV-element is returned here.  */

char *optarg = 0;

/* Index in ARGV of the next element to be scanned.
   This is used for communication to and from the caller
   and for communication between successive calls to `getopt'.

   On entry to `getopt', zero means this is the first call; initialize.

   When `getopt' returns EOF, this is the index of the first of the
   non-option elements that the caller should itself scan.

   Otherwise, `optind' communicates from one call to the next
   how much of ARGV has been scanned so far.  */

int optind = 0;

/* The next char to be scanned in the option-element
   in which the last option character we returned was found.
   This allows us to pick up the scan where we left off.

   If this is zero, or a null string, it means resume the scan
   by advancing to the next ARGV-element.  */

static char *nextchar;

/* Callers store zero here to inhibit the error message
   for unrecognized options.  */

int opterr = 1;

/* Describe how to deal with options that follow non-option ARGV-elements.

   If the caller did not specify anything,
   the default is REQUIRE_ORDER if the environment variable
   _POSIX_OPTION_ORDER is defined, PERMUTE otherwise.

   REQUIRE_ORDER means don't recognize them as options;
   stop option processing when the first non-option is seen.
   This is what Unix does.
   This mode of operation is selected by either setting the environment
   variable _POSIX_OPTION_ORDER, or using `+' as the first character
   of the list of option characters.

   PERMUTE is the default.  We permute the contents of ARGV as we scan,
   so that eventually all the non-options are at the end.  This allows options
   to be given in any order, even with programs that were not written to
   expect this.

   RETURN_IN_ORDER is an option available to programs that were written
   to expect options and other ARGV-elements in any order and that care about
   the ordering of the two.  We describe each non-option ARGV-element
   as if it were the argument of an option with character code 1.
   Using `-' as the first character of the list of option characters
   selects this mode of operation.

   The special argument `--' forces an end of option-scanning regardless
   of the value of `ordering'.  In the case of RETURN_IN_ORDER, only
   `--' can cause `getopt' to return EOF with `optind' != ARGC.  */

static enum
{
  REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
} ordering;

/* Describe the long-named options requested by the application.
   _GETOPT_LONG_OPTIONS is a vector of `struct option' terminated by an
   element containing a name which is zero.
   The field `has_arg' is 1 if the option takes an argument,
   2 if it takes an optional argument.  */


CONST struct option *_getopt_long_options;

int _getopt_long_only = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲电影第三页| av网站免费线看精品| 国产成人免费av在线| 在线视频国内自拍亚洲视频| 精品成人佐山爱一区二区| 亚洲综合色在线| 成人av免费在线观看| 精品国产乱码久久久久久1区2区| 一区二区三区资源| www.欧美色图| 国产午夜精品美女毛片视频| 日韩av网站免费在线| 欧美亚洲国产一区二区三区va| 精品国产一区二区三区忘忧草| 亚洲高清久久久| 色94色欧美sute亚洲线路一久| 国产午夜一区二区三区| 久久国产精品露脸对白| 在线不卡中文字幕| 亚洲综合色视频| 一本高清dvd不卡在线观看| 日本一区二区免费在线| 国产一区 二区| www亚洲一区| 国产在线乱码一区二区三区| 日韩一区二区电影| 午夜影院久久久| 欧美日韩国产成人在线免费| 一区二区三区欧美在线观看| 色综合久久久久综合体| 亚洲欧美日韩在线不卡| 91婷婷韩国欧美一区二区| 国产精品久久久久7777按摩| 国产99久久久国产精品潘金| 国产午夜精品一区二区三区四区| 精品在线视频一区| 2022国产精品视频| 国产精品18久久久久久久久| 国产三级一区二区| 99re亚洲国产精品| 一区二区三区在线免费| 欧美综合色免费| 天涯成人国产亚洲精品一区av| 欧美日韩一区二区欧美激情| 视频一区二区三区中文字幕| 日韩亚洲欧美高清| 精品一区二区三区免费视频| 久久影院视频免费| 国产成人在线视频播放| 亚洲日本在线观看| 欧美日韩中文精品| 久久99精品一区二区三区三区| 久久久国产一区二区三区四区小说 | 欧美r级在线观看| 国产一区二区毛片| 最近中文字幕一区二区三区| 欧美三级电影在线看| 奇米影视一区二区三区| 欧美激情综合在线| 在线观看一区二区视频| 免费一级片91| 中文字幕一区二区不卡| 欧美日韩视频在线观看一区二区三区| 免费看欧美女人艹b| 国产亚洲一区二区三区| 91论坛在线播放| 久久精品国产亚洲一区二区三区 | 欧美二区在线观看| 国产成人在线影院| 亚洲va在线va天堂| 国产免费成人在线视频| 欧美日免费三级在线| 国产一区视频导航| 一区二区三区四区在线免费观看| 欧美一区二区三区爱爱| kk眼镜猥琐国模调教系列一区二区| 亚洲国产裸拍裸体视频在线观看乱了| 欧美变态tickling挠脚心| 99久久精品免费看国产免费软件| 免费成人美女在线观看.| 亚洲日本在线天堂| 精品国产精品网麻豆系列| 色88888久久久久久影院野外| 免费不卡在线视频| 亚洲乱码日产精品bd| 久久在线免费观看| 91精品国产综合久久精品麻豆| 成人av网站免费观看| 久久精品999| 午夜精品一区二区三区三上悠亚| 国产精品国产成人国产三级 | 欧美一区二区三区系列电影| 菠萝蜜视频在线观看一区| 久久成人av少妇免费| 亚洲自拍偷拍图区| 亚洲精品视频免费看| 久久精品视频免费| 欧美成人性福生活免费看| 欧美伦理电影网| 在线观看免费一区| 91在线观看成人| 成人免费看视频| 国产剧情av麻豆香蕉精品| 日本sm残虐另类| 偷拍一区二区三区四区| 亚洲一区二区综合| 亚洲一区自拍偷拍| 亚洲一区二区三区四区五区黄| 亚洲免费观看在线观看| 自拍偷拍欧美精品| 亚洲精品成人悠悠色影视| 国产精品不卡在线观看| 国产精品人妖ts系列视频| 中文字幕欧美区| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美一区二区三区性视频| 5858s免费视频成人| 日韩一级黄色大片| 欧美不卡视频一区| 国产午夜三级一区二区三| 欧美激情艳妇裸体舞| 国产精品每日更新| 一区二区国产盗摄色噜噜| 亚洲国产一区在线观看| 日韩电影在线看| 久久99久久精品| 国产成人在线视频免费播放| 波多野结衣一区二区三区| 97国产精品videossex| 91福利国产成人精品照片| 欧美午夜精品久久久| 宅男噜噜噜66一区二区66| 日韩免费电影一区| 国产午夜亚洲精品午夜鲁丝片| 亚洲欧美影音先锋| 亚洲大片在线观看| 国产永久精品大片wwwapp| 99re在线视频这里只有精品| 欧美喷水一区二区| 欧美sm美女调教| 亚洲人成精品久久久久久| 亚洲午夜激情网页| 国内偷窥港台综合视频在线播放| 成人a免费在线看| 欧美日韩高清在线| 亚洲国产高清在线观看视频| 亚洲国产色一区| 精品无人码麻豆乱码1区2区| 99久久99久久免费精品蜜臀| 欧美精品xxxxbbbb| 国产精品嫩草影院com| 亚洲成av人片在www色猫咪| 国产精品影视天天线| 91福利国产精品| 久久一区二区三区四区| 亚洲最大成人综合| 激情偷乱视频一区二区三区| av亚洲产国偷v产偷v自拍| 日韩欧美色电影| 亚洲激情图片小说视频| 国产曰批免费观看久久久| 在线观看视频一区二区欧美日韩| 日韩精品一区国产麻豆| 亚洲欧美电影一区二区| 精品一区精品二区高清| 色域天天综合网| 久久蜜桃香蕉精品一区二区三区| 亚洲国产精品尤物yw在线观看| 国产精品18久久久久久久网站| 欧美久久免费观看| 国产精品美日韩| 国内欧美视频一区二区| 欧美理论电影在线| 一区二区三区欧美在线观看| 成人免费视频caoporn| 久久影视一区二区| 免费观看久久久4p| 欧美日韩高清在线播放| 亚洲黄色片在线观看| 成人黄色av网站在线| 久久夜色精品国产噜噜av| 日韩高清一区在线| 欧美专区亚洲专区| 亚洲精品日产精品乱码不卡| 国产不卡在线视频| 久久综合色8888| 青娱乐精品视频| 69堂精品视频| 日韩精品一二三四| 欧美精品精品一区| 五月天欧美精品| 欧美色视频一区| 亚洲综合激情网| 欧美性猛交一区二区三区精品| 亚洲乱码日产精品bd| 欧美在线观看一区| 亚洲一区二区欧美激情| 欧美日韩夫妻久久| 日韩成人午夜电影| 精品成人一区二区|