18 } ln;
19 char ltype;
20 short lnum;
21 short lflags;
22 short lnl;
23 short luid;
24 short lgid;
25 long lsize;
26 long lmtime;
27 };
28
29 int aflg, dflg, lflg, sflg, tflg, uflg, lflg, fflg, gflg, cflg;
30 int rflg = 1;
31 long year; /* ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅: ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ 0 */
32 int flags;
33 int lastuid = -1;
34 char tbuf[16];
35 long tblocks;
36 int statreq;
37 struct lbuf *flist[NFILES];
38 struct lbuf **lastp = flist;
39 struct lbuf **firstp = flist;
40 char *dotp = ".";
41
42 char *makename(); /* char *makename(char *dir, char *file); */
43 struct lbuf *gstat(); /* struct lbuf *gstat(char *file, int argfl); */
44 char *ctime(); /* char *ctime(time_t *t); */
45 long nblock(); /* long nblock(long size); */
46
47 #define ISARG 0100000
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² (ΡΡΡΠΎΠΊΠΈ 5β8) ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . struct lbuf (ΡΡΡΠΎΠΊΠΈ 14β27) ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ ΡΠ°ΡΡΠΈ struct stat, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Ρ ls. ΠΠΎΠ·ΠΆΠ΅ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ ΡΡΠ° ΡΡΡΡΠΊΡΡΡΠ° Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ aflg, dflg ΠΈ Ρ.Π΄. (ΡΡΡΠΎΠΊΠΈ 29 ΠΈ 30) Π²ΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΎΠΏΡΠΈΠΈ. Π’Π°ΠΊΠΎΠΉ ΡΡΠΈΠ»Ρ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΠΏΠΈΡΠ΅Π½ Π΄Π»Ρ ΠΊΠΎΠ΄Π° V7. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ flist, lastp ΠΈ firstp (ΡΡΡΠΎΠΊΠΈ 37β39) ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠ°ΠΉΠ»Ρ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ ls Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ flist ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 1024 ΡΠ°ΠΉΠ»ΠΎΠ². ΠΡΠΊΠΎΡΠ΅ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π²ΡΠ΅ ΡΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅.
ΠΠΎΡΠ»Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΠ΄ΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ (ΡΡΡΠΎΠΊΠΈ 42β45), Π° Π·Π°ΡΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ISARG, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ°Π΅Ρ ΡΠ°ΠΉΠ», ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅, ΠΎΡ ΡΠ°ΠΉΠ»Π°, Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°.
49 main(argc, argv) /* int main(int argc, char **argv) */
50 char *argv[];
51 {
52 int i;
53 register struct lbuf *ep, **ep1; /* ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ */
54 register struct lbuf **slastp;
55 struct lbuf **epp;
56 struct lbuf lb;
57 char *t;
58 int compar();
59
60 setbuf(stdout, stdbuf);
61 time(&lb.lmtime); /* ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ */
62 year = lb.lmtime - 6L*30L*24L*60L*60L; /* 6 ΠΌΠ΅ΡΡΡΠ΅Π² Π½Π°Π·Π°Π΄ */
Π€ΡΠ½ΠΊΡΠΈΡ main() Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ (ΡΡΡΠΎΠΊΠΈ 52β58), ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Ρ Π±ΡΡΠ΅Ρ Π΄Π»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π°, ΠΏΠΎΠ»ΡΡΠ°Ρ Π²ΡΠ΅ΠΌΡ Π΄Π½Ρ (ΡΡΡΠΎΠΊΠΈ 60β61) ΠΈ Π²ΡΡΠΈΡΠ»ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΠ½Π΄ Ρ Π½Π°ΡΠ°Π»Π° ΠΠΏΠΎΡ ΠΈ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ΅ΡΡΠΈ ΠΌΠ΅ΡΡΡΠ΅Π² (ΡΡΡΠΎΠΊΠ° 62). ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Ρ Π²ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Π΅ΡΡΡ ΡΡΡΡΠΈΠΊΡ L, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠΈ long.
63 if (--argc > 0 && *argv[1] == '-') {
64 argv++;
65 while (*++*argv) switch(**argv) { /* Π Π°Π·Π±ΠΎΡ ΠΎΠΏΡΠΈΠΉ */
66
67 case 'a': /* ΠΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° */
68 aflg++;
69 continue;
70
71 case 's': /* Π Π°Π·ΠΌΠ΅Ρ Π² Π±Π»ΠΎΠΊΠ°Ρ */
72 sflg++;
73 statreq++;
74 continue;
75
76 case 'd': /* Π‘Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ */
77 dflg++;
78 continue;
79
80 case 'g': /* ΠΠΌΡ Π³ΡΡΠΏΠΏΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π²Π»Π°Π΄Π΅Π»ΡΡΠ° */
81 gflg++;
82 continue;
83
84 case 'l': /* Π Π°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ Π»ΠΈΡΡΠΈΠ½Π³ */
85 lflg++;
86 statreq++;
87 continue;
88
89 case 'r': /* ΠΠ±ΡΠ°ΡΠ½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ */
90 rflg = -1;
91 continue;
92
93 case 't': /* Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π½Π΅ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ */
94 tflg++;
95 statreq++;
96 continue;
97
98 case 'u': /* ΠΡΠ΅ΠΌΡ Π΄ΠΎΡΡΡΠΏΠ°, Π° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ */
99 uflg++;
100 continue;
101
102 case 'c': /* ΠΡΠ΅ΠΌΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°, Π° Π½Π΅ ΡΠ°ΠΉΠ»Π° */
103 cflg++;
104 continue;
105
106 case 'i': /* ΠΠΊΠ»ΡΡΠΈΡΡ Π½ΠΎΠΌΠ΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ° */
107 iflg++;
108 continue;
109
110 case 'f': /* Π€ΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ arg ΠΊΠ°ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° */
111 fflg++;
112 continue;
113
114 default: /* ΠΠ΅Π·Π½Π°ΠΊΠΎΠΌΡΠ΅ Π±ΡΠΊΠ²Ρ ΠΎΠΏΡΠΈΠΉ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ */
115 continue;
116 }
117 argc--;
118 }
Π‘ΡΡΠΎΠΊΠΈ 63β118 ΡΠ°Π·Π±ΠΈΡΠ°ΡΡ ΠΎΠΏΡΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΡΡΠ½ΠΎΠΉ ΡΠ°Π·Π±ΠΎΡ ΠΊΠΎΠ΄Π°: getopt() Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ»Π° ΠΏΡΠΈΠ΄ΡΠΌΠ°Π½Π°. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ statreq ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² true, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΡΠΈΡ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° stat().
ΠΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ Π½Π΅Π½ΡΠΆΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° stat() Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄Π°Π΅Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ Π²ΡΠΈΠ³ΡΡΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΡΠ·ΠΎΠ² stat() Π±ΡΠ» ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ Π΄ΠΎΡΠΎΠ³ΠΈΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΠΌΠΎΠ³ Π²ΡΠ·Π²Π°ΡΡ ΠΏΠΎΠΈΡΠΊ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π½Π° ΡΠ°ΠΉΠ»Π΅, Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ΅ ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠΈΡΠΊ Π½Π° Π΄ΠΈΡΠΊΠ΅ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° (Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°).
Π ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² Π³ΡΡΠΏΠΏΠ°Ρ , ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΈΡ Π²ΠΌΠ΅ΡΡΠ΅ Π² Π½Π°ΡΠ°Π»Π΅. ΠΡΠΎ Π΄Π°Π΅Ρ Π·Π°ΠΌΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΈΡΠΎΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π²ΡΠ·ΠΎΠ²Ρ stat() Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ Π½Π΅ Π±Π΅ΡΠΏΠ»Π°ΡΠ½Ρ, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ Π»ΠΈΡΡ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ, Π½ΠΎ Π½Π΅ Π±ΠΎΠ»Π΅Π΅.
119 if (fflg) { /* -f Π°Π½Π½ΡΠ»ΠΈΡΡΠ΅Ρ -l, -s, -t, Π΄ΠΎΠ±Π°Π²Π»ΡΡ -a */
120 aflg++;
121 lflg = 0;
122 sflg = 0;
123 tflg = 0;
124 statreq = 0;
125 }
126 if (lflg) { /* ΠΡΠΊΡΡΡΡ ΡΠ°ΠΉΠ» ΠΏΠ°ΡΠΎΠ»Π΅ΠΉ ΠΈΠ»ΠΈ Π³ΡΡΠΏΠΏ */
127 t = "/etc/passwd";
128 if (gflg)
129 t = "/etc/group";
130 pwdf = fopen(t, "r");
131 }
132 if (argc==0) { /* ΠΡΠ»ΠΈ Π½Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ */
133 argc++;
134 argv = &dotp - 1;
135 }
Π‘ΡΡΠΎΠΊΠΈ 119β125 ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΎΠΏΡΠΈΡ -f, Π²ΡΠΊΠ»ΡΡΠ°Ρ -l, -s, -t ΠΈ statreq. Π‘ΡΡΠΎΠΊΠΈ 126β131 ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ -l, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Ρ Π΄Π»Ρ ΡΠ°ΠΉΠ»Π° ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΎ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ ΠΈΠ»ΠΈ Π³ΡΡΠΏΠΏΠ΅. ΠΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ V7 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π»ΠΈΡΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΡΠΈΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ, Π½ΠΎ Π½Π΅ ΠΎΠ±Π°.
ΠΡΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ, ΡΡΡΠΎΠΊΠΈ 132β135 ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ argv ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΡΡΠΎΠΊΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³. ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 'argr = &dotp - 1' Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, Ρ ΠΎΡΡ ΠΈ Π½Π΅ΠΎΠ±ΡΡΠ½ΠΎ. '- 1' ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡΡΠ΅Ρ '++argv' Π² ΡΡΡΠΎΠΊΠ΅ 137. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π² Π³Π»Π°Π²Π½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ Π΄Π»Ρ 'argc == 1'.
136 for (i=0; i < argc; i++) { /* ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ */
137 if ((Π΅Ρ = gstat(*++argv, 1))==NULL)
138 continue;
139 ep->ln.namep = *argv;
140 ep->lflags |= ISARG;
141 }
142 qsort(firstp, lastp - firstp, sizeof *lastp, compar);
143 slastp = lastp;
144 for (epp=firstp; epp<slastp; epp++) { /* ΠΠ»Π°Π². ΠΊΠΎΠ΄, ΡΠΌ. ΡΠ΅ΠΊΡΡ */
145 Π΅Ρ = *epp;
146 if (ep->ltype=='d' && dflg==0 || fflg) {
147 if (argc>1)
148 printf("\n%s:\n", ep->ln.namep);
149 lastp = slastp;
150 readdir(ep->ln.namep);
151 if (fflg==0)
152 qsort(slastp, lastp - slastp, sizeof *lastp, compar);
153 if (lflg || sflg)
154 printf("total %D\n", tblocks);
155 for (ep1=slastp; ep1<lastp; ep1++)
156 pentry(*ep1);
157 } else
158 pentry(ep);
159 }
160 exit(0);
161 } /* ΠΠΎΠ½Π΅Ρ main() */
Π‘ΡΡΠΎΠΊΠΈ 136β141 ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, ΡΠΎΠ±ΠΈΡΠ°Ρ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ. ΠΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ gstat() Π±ΡΠ»Π΅Π²ΡΠΉ: true, Π΅ΡΠ»ΠΈ ΠΈΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ false. Π‘ΡΡΠΎΠΊΠ° 140 Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΠ»Π°Π³ ISARG ΠΊ ΠΏΠΎΠ»Ρ lflags Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
Π€ΡΠ½ΠΊΡΠΈΡ gstat() Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΡΡ Π½ΠΎΠ²ΡΡ struct lbuf ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌΡ ΠΌΠ°ΡΡΠΈΠ²Ρ flist (ΡΡΡΠΎΠΊΠ° 137). ΠΠ½Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ lastp, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΡΠΊΠ°Π·ΡΠ²Π°Π» Π² ΡΡΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ.
Π‘ΡΡΠΎΠΊΠΈ 142β143 ΡΠΎΡΡΠΈΡΡΡΡ ΠΌΠ°ΡΡΠΈΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ qsort(), ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ lastp Π² slastp. Π‘ΡΡΠΎΠΊΠΈ 144β159 ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°ΡΡ Π² ΡΠΈΠΊΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π°, Π²ΡΠ²ΠΎΠ΄Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΠ°ΠΉΠ»Π΅ ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅.
ΠΠΎΠ΄ Π΄Π»Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² Π·Π°ΡΠ»ΡΠΆΠΈΠ²Π°Π΅Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΡ:
if (ep->ltype=='d' && dflg==0 || fflg) ...
Π‘ΡΡΠΎΠΊΠ° 146. ΠΡΠ»ΠΈ ΡΠ°ΠΉΠ» ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠΌ ΠΈ -d Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ ΠΈΠ»ΠΈ Π±ΡΠ»ΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ -f, ls Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΠ°ΠΌΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅.
if (argc>1) printf ("\n%s:\n", ep->ln.namep)
Π‘ΡΡΠΎΠΊΠΈ 147β148. ΠΡΠ²ΠΎΠ΄ΡΡ ΠΈΠΌΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΈ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅, Π΅ΡΠ»ΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ².
lastp = slastp;
readdir(ep->ln.namep)
Π‘ΡΡΠΎΠΊΠΈ 149β150. ΠΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ lastp ΠΈΠ· slastp. ΠΠ°ΡΡΠΈΠ² flist Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊ Π΄Π²ΡΡ ΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΡΡΠ΅ΠΊ ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»ΠΎΠ². ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Ρ ΡΠ°Π½ΡΡΡΡ Ρ firstp Π΄ΠΎ slastp - 1. ΠΠΎΠ³Π΄Π° readdir() ΡΠΈΡΠ°Π΅Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΠΎΠ½Π° ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΡΡΡΡΠΊΡΡΡΡ struct lbuf Π΄Π»Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π² ΡΡΠ΅ΠΊ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ slastp ΠΈ Π΄ΠΎ lastp. ΠΡΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡ. 7.1.