DataMuseum.dk

Presents historical artifacts from the history of:

Commodore CBM-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Commodore CBM-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦466df219a⟧

    Length: 13993 (0x36a9)
    Notes: UNIX file
    Names: »find.y«

Derivation

└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
    └─⟦f4b8d8c84⟧ UNIX V7 Filesystem
        └─ ⟦this⟧ »cmd/find/find.y« 

Hex Dump

0x0000…0020 25 7b 0a 2f 2a 0a 20 2a 20 46 69 6e 64 20 61 6c 6c 20 66 69 6c 65 73 20 69 6e 20 74 68 65 20 67   ┆%{ /*  * Find all files in the g┆
0x0020…0040 69 76 65 6e 0a 20 2a 20 64 69 72 65 63 74 6f 72 79 20 68 69 65 72 61 72 63 68 69 65 73 20 74 68   ┆iven  * directory hierarchies th┆
0x0040…0060 61 74 0a 20 2a 20 73 61 74 69 73 66 79 20 74 68 65 20 67 69 76 65 6e 20 65 78 70 72 65 73 73 69   ┆at  * satisfy the given expressi┆
0x0060…0080 6f 6e 0a 20 2a 20 70 72 69 6d 61 72 69 65 73 2e 0a 20 2a 2f 0a 0a 23 69 6e 63 6c 75 64 65 20 3c   ┆on  * primaries.  */  #include <┆
0x0080…00a0 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 61 74 2e 68 3e 0a 23 69 6e 63 6c   ┆stdio.h> #include <stat.h> #incl┆
0x00a0…00c0 75 64 65 20 3c 64 69 72 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 70 77 64 2e 68 3e 0a 23 69 6e   ┆ude <dir.h> #include <pwd.h> #in┆
0x00c0…00e0 63 6c 75 64 65 20 3c 67 72 70 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 22 66 69 6e 64 6e 6f 64 65   ┆clude <grp.h> #include "findnode┆
0x00e0…0100 2e 68 22 0a 0a 23 64 65 66 69 6e 65 09 4e 50 52 49 4d 09 28 73 69 7a 65 6f 66 28 70 72 69 6d 61   ┆.h"  #define NPRIM (sizeof(prima┆
0x0100…0120 72 69 65 73 29 2f 73 69 7a 65 6f 66 28 70 72 69 6d 61 72 69 65 73 5b 30 5d 29 29 0a 23 64 65 66   ┆ries)/sizeof(primaries[0])) #def┆
0x0120…0140 69 6e 65 09 4e 41 52 47 09 35 30 0a 23 64 65 66 69 6e 65 09 4e 52 45 43 55 52 09 31 34 09 09 2f   ┆ine NARG 50 #define NRECUR 14  /┆
0x0140…0160 2a 20 4d 61 78 69 6d 75 6d 20 72 65 63 75 72 73 69 6f 6e 20 64 65 70 74 68 20 62 65 66 6f 72 65   ┆* Maximum recursion depth before┆
0x0160…0180 20 66 6f 72 6b 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 09 4e 46 4e 41 4d 45 09 36 30 30 09 09   ┆ forking */ #define NFNAME 600  ┆
0x0180…01a0 2f 2a 20 73 69 7a 65 20 6f 66 20 66 69 6c 65 6e 61 6d 65 20 62 75 66 66 65 72 20 2a 2f 0a 23 64   ┆/* size of filename buffer */ #d┆
0x01a0…01c0 65 66 69 6e 65 09 46 49 4c 45 41 52 47 09 28 28 63 68 61 72 20 2a 29 45 4f 46 29 0a 23 64 65 66   ┆efine FILEARG ((char *)EOF) #def┆
0x01c0…01e0 69 6e 65 09 44 41 59 53 45 43 09 28 36 30 4c 2a 36 30 4c 2a 32 34 4c 29 09 2f 2a 20 73 65 63 6f   ┆ine DAYSEC (60L*60L*24L) /* seco┆
0x01e0…0200 6e 64 73 20 69 6e 20 61 20 64 61 79 20 2a 2f 0a 23 64 65 66 69 6e 65 09 69 6e 6f 64 65 28 66 2c   ┆nds in a day */ #define inode(f,┆
0x0200…0220 76 29 09 6c 6e 6f 64 65 28 46 55 4e 2c 66 2c 76 2c 4e 55 4c 4c 29 0a 23 64 65 66 69 6e 65 09 73   ┆v) lnode(FUN,f,v,NULL) #define s┆
0x0220…0240 6e 6f 64 65 28 66 2c 73 29 09 6c 6e 6f 64 65 28 46 55 4e 2c 66 2c 30 2c 73 29 0a 25 7d 0a 25 73   ┆node(f,s) lnode(FUN,f,0,s) %} %s┆
0x0240…0260 74 61 72 74 09 63 6f 6d 6d 61 6e 64 0a 0a 25 75 6e 69 6f 6e 09 7b 0a 09 4e 4f 44 45 20 20 2a 6e   ┆tart command  %union {  NODE  *n┆
0x0260…0280 6f 64 65 70 74 72 3b 0a 09 7d 0a 0a 25 6c 65 66 74 09 4f 52 0a 25 6c 65 66 74 09 41 4e 44 0a 25   ┆odeptr;  }  %left OR %left AND %┆
0x0280…02a0 6c 65 66 74 09 27 21 27 0a 25 74 6f 6b 65 6e 09 3c 6e 6f 64 65 70 74 72 3e 20 4e 41 4d 45 20 50   ┆left '!' %token <nodeptr> NAME P┆
0x02a0…02c0 45 52 4d 20 54 59 50 45 20 4c 49 4e 4b 53 20 55 53 45 52 20 47 52 4f 55 50 20 53 49 5a 45 20 49   ┆ERM TYPE LINKS USER GROUP SIZE I┆
0x02c0…02e0 4e 55 4d 0a 25 74 6f 6b 65 6e 09 3c 6e 6f 64 65 70 74 72 3e 20 41 54 49 4d 45 20 43 54 49 4d 45   ┆NUM %token <nodeptr> ATIME CTIME┆
0x02e0…0300 20 4d 54 49 4d 45 20 45 58 45 43 20 4f 4b 20 50 52 49 4e 54 20 4e 45 57 45 52 20 46 55 4e 20 4e   ┆ MTIME EXEC OK PRINT NEWER FUN N┆
0x0300…0320 4f 50 0a 25 74 79 70 65 09 3c 6e 6f 64 65 70 74 72 3e 20 65 78 70 0a 0a 25 25 0a 0a 63 6f 6d 6d   ┆OP %type <nodeptr> exp  %%  comm┆
0x0320…0340 61 6e 64 3a 0a 09 65 78 70 20 27 5c 6e 27 09 09 7b 20 69 66 20 28 73 65 66 6c 61 67 29 0a 09 09   ┆and:  exp '\n'  { if (seflag)   ┆
0x0340…0360 09 09 09 63 6f 64 65 20 3d 20 24 31 3b 20 65 6c 73 65 0a 09 09 09 09 09 63 6f 64 65 20 3d 20 62   ┆   code = $1; else      code = b┆
0x0360…0380 6e 6f 64 65 28 41 4e 44 2c 24 31 2c 73 6e 6f 64 65 28 78 70 72 69 6e 74 2c 4e 55 4c 4c 29 29 3b   ┆node(AND,$1,snode(xprint,NULL));┆
0x0380…03a0 0a 09 09 09 09 20 20 72 65 74 75 72 6e 3b 0a 09 09 09 09 7d 0a 20 20 20 20 20 20 7c 20 27 5c 6e   ┆       return;     }       | '\n┆
0x03a0…03c0 27 09 09 09 7b 20 63 6f 64 65 20 3d 20 73 6e 6f 64 65 28 78 70 72 69 6e 74 2c 20 4e 55 4c 4c 29   ┆'   { code = snode(xprint, NULL)┆
0x03c0…03e0 3b 20 72 65 74 75 72 6e 3b 20 7d 0a 09 3b 0a 0a 65 78 70 3a 0a 20 20 20 20 20 20 20 20 27 28 27   ┆; return; }  ;  exp:         '('┆
0x03e0…0400 20 65 78 70 20 27 29 27 09 09 7b 20 24 24 20 3d 20 24 32 3b 20 7d 0a 20 20 20 20 20 20 7c 20 27   ┆ exp ')'  { $$ = $2; }       | '┆
0x0400…0420 21 27 20 65 78 70 09 09 09 7b 20 24 24 20 3d 20 62 6e 6f 64 65 28 27 21 27 2c 20 24 32 2c 20 4e   ┆!' exp   { $$ = bnode('!', $2, N┆
0x0420…0440 55 4c 4c 29 3b 20 7d 0a 20 20 20 20 20 20 7c 20 65 78 70 20 4f 52 20 65 78 70 09 09 7b 20 24 24   ┆ULL); }       | exp OR exp  { $$┆
0x0440…0460 20 3d 20 62 6e 6f 64 65 28 4f 52 2c 20 24 31 2c 20 24 33 29 3b 20 7d 0a 20 20 20 20 20 20 7c 20   ┆ = bnode(OR, $1, $3); }       | ┆
0x0460…0480 65 78 70 20 41 4e 44 20 65 78 70 09 09 7b 20 24 24 20 3d 20 62 6e 6f 64 65 28 41 4e 44 2c 20 24   ┆exp AND exp  { $$ = bnode(AND, $┆
0x0480…04a0 31 2c 20 24 33 29 3b 20 7d 0a 20 20 20 20 20 20 7c 20 4e 41 4d 45 20 20 09 09 09 7b 20 24 24 20   ┆1, $3); }       | NAME     { $$ ┆
0x04a0…04c0 3d 20 73 6e 6f 64 65 28 78 6e 61 6d 65 2c 20 6e 65 78 74 28 29 29 3b 20 7d 0a 20 20 20 20 20 20   ┆= snode(xname, next()); }       ┆
0x04c0…04e0 7c 20 50 45 52 4d 09 09 09 7b 20 24 24 20 3d 20 6f 6e 6f 64 65 28 78 70 65 72 6d 29 3b 20 7d 0a   ┆| PERM   { $$ = onode(xperm); } ┆
0x04e0…0500 20 20 20 20 20 20 7c 20 54 59 50 45 09 09 09 7b 20 24 24 20 3d 20 73 6e 6f 64 65 28 78 74 79 70   ┆      | TYPE   { $$ = snode(xtyp┆
0x0500…0520 65 2c 20 6e 65 78 74 28 29 29 3b 20 7d 0a 20 20 20 20 20 20 7c 20 4c 49 4e 4b 53 09 09 09 7b 20   ┆e, next()); }       | LINKS   { ┆
0x0520…0540 24 24 20 3d 20 6e 6e 6f 64 65 28 78 6c 69 6e 6b 73 29 3b 20 7d 0a 20 20 20 20 20 20 7c 20 55 53   ┆$$ = nnode(xlinks); }       | US┆
0x0540…0560 45 52 09 09 09 7b 20 24 24 20 3d 20 67 65 74 75 73 65 72 28 29 3b 20 7d 0a 20 20 20 20 20 20 7c   ┆ER   { $$ = getuser(); }       |┆
0x0560…0580 20 47 52 4f 55 50 09 09 09 7b 20 24 24 20 3d 20 67 65 74 67 72 6f 75 70 28 29 3b 20 7d 0a 20 20   ┆ GROUP   { $$ = getgroup(); }   ┆
0x0580…05a0 20 20 20 20 7c 20 53 49 5a 45 09 09 09 7b 20 24 24 20 3d 20 6e 6e 6f 64 65 28 78 73 69 7a 65 29   ┆    | SIZE   { $$ = nnode(xsize)┆
0x05a0…05c0 3b 20 7d 0a 20 20 20 20 20 20 7c 20 49 4e 55 4d 09 09 09 7b 20 24 24 20 3d 20 6e 6e 6f 64 65 28   ┆; }       | INUM   { $$ = nnode(┆
0x05c0…05e0 78 69 6e 75 6d 29 3b 20 7d 0a 20 20 20 20 20 20 7c 20 41 54 49 4d 45 09 09 09 7b 20 24 24 20 3d   ┆xinum); }       | ATIME   { $$ =┆
0x05e0…0600 20 6e 6e 6f 64 65 28 78 61 74 69 6d 65 29 3b 20 7d 0a 20 20 20 20 20 20 7c 20 43 54 49 4d 45 09   ┆ nnode(xatime); }       | CTIME ┆
0x0600…0620 09 09 7b 20 24 24 20 3d 20 6e 6e 6f 64 65 28 78 63 74 69 6d 65 29 3b 20 7d 0a 20 20 20 20 20 20   ┆  { $$ = nnode(xctime); }       ┆
0x0620…0640 7c 20 4d 54 49 4d 45 09 09 09 7b 20 24 24 20 3d 20 6e 6e 6f 64 65 28 78 6d 74 69 6d 65 29 3b 20   ┆| MTIME   { $$ = nnode(xmtime); ┆
0x0640…0660 7d 0a 20 20 20 20 20 20 7c 20 45 58 45 43 09 09 09 7b 20 24 24 20 3d 20 65 6e 6f 64 65 28 30 29   ┆}       | EXEC   { $$ = enode(0)┆
0x0660…0680 3b 20 7d 0a 20 20 20 20 20 20 7c 20 4f 4b 09 09 09 7b 20 24 24 20 3d 20 65 6e 6f 64 65 28 31 29   ┆; }       | OK   { $$ = enode(1)┆
0x0680…06a0 3b 20 7d 0a 20 20 20 20 20 20 7c 20 50 52 49 4e 54 09 09 09 7b 20 24 24 20 3d 20 73 6e 6f 64 65   ┆; }       | PRINT   { $$ = snode┆
0x06a0…06c0 28 78 70 72 69 6e 74 2c 20 4e 55 4c 4c 29 3b 20 73 65 66 6c 61 67 2b 2b 3b 20 7d 0a 20 20 20 20   ┆(xprint, NULL); seflag++; }     ┆
0x06c0…06e0 20 20 7c 20 4e 45 57 45 52 09 09 09 7b 20 24 24 20 3d 20 67 65 74 6e 65 77 65 72 28 29 3b 20 7d   ┆  | NEWER   { $$ = getnewer(); }┆
0x06e0…0700 0a 20 20 20 20 20 20 7c 20 4e 4f 50 09 09 09 7b 20 24 24 20 3d 20 73 6e 6f 64 65 28 78 6e 6f 70   ┆       | NOP   { $$ = snode(xnop┆
0x0700…0720 2c 20 4e 55 4c 4c 29 3b 20 73 65 66 6c 61 67 2b 2b 3b 20 7d 0a 09 3b 0a 0a 25 25 0a 73 74 72 75   ┆, NULL); seflag++; }  ;  %% stru┆
0x0720…0740 63 74 09 70 72 69 6d 61 72 79 09 7b 0a 09 63 68 61 72 09 2a 70 5f 6e 61 6d 65 3b 0a 09 69 6e 74   ┆ct primary {  char *p_name;  int┆
0x0740…0760 09 70 5f 6c 76 61 6c 3b 0a 7d 09 70 72 69 6d 61 72 69 65 73 5b 5d 20 3d 20 7b 0a 09 22 2d 6e 61   ┆ p_lval; } primaries[] = {  "-na┆
0x0760…0780 6d 65 22 2c 20 4e 41 4d 45 2c 0a 09 22 2d 70 65 72 6d 22 2c 20 50 45 52 4d 2c 0a 09 22 2d 74 79   ┆me", NAME,  "-perm", PERM,  "-ty┆
0x0780…07a0 70 65 22 2c 20 54 59 50 45 2c 0a 09 22 2d 6c 69 6e 6b 73 22 2c 20 4c 49 4e 4b 53 2c 0a 09 22 2d   ┆pe", TYPE,  "-links", LINKS,  "-┆
0x07a0…07c0 75 73 65 72 22 2c 20 55 53 45 52 2c 0a 09 22 2d 67 72 6f 75 70 22 2c 20 47 52 4f 55 50 2c 0a 09   ┆user", USER,  "-group", GROUP,  ┆
0x07c0…07e0 22 2d 73 69 7a 65 22 2c 20 53 49 5a 45 2c 0a 09 22 2d 69 6e 75 6d 22 2c 20 49 4e 55 4d 2c 0a 09   ┆"-size", SIZE,  "-inum", INUM,  ┆
0x07e0…0800 22 2d 61 74 69 6d 65 22 2c 20 41 54 49 4d 45 2c 0a 09 22 2d 63 74 69 6d 65 22 2c 20 43 54 49 4d   ┆"-atime", ATIME,  "-ctime", CTIM┆
0x0800…0820 45 2c 0a 09 22 2d 6d 74 69 6d 65 22 2c 20 4d 54 49 4d 45 2c 0a 09 22 2d 65 78 65 63 22 2c 20 45   ┆E,  "-mtime", MTIME,  "-exec", E┆
0x0820…0840 58 45 43 2c 0a 09 22 2d 6f 6b 22 2c 20 4f 4b 2c 0a 09 22 2d 70 72 69 6e 74 22 2c 20 50 52 49 4e   ┆XEC,  "-ok", OK,  "-print", PRIN┆
0x0840…0860 54 2c 0a 09 22 2d 6e 65 77 65 72 22 2c 20 4e 45 57 45 52 2c 0a 09 22 2d 6e 6f 70 22 2c 20 4e 4f   ┆T,  "-newer", NEWER,  "-nop", NO┆
0x0860…0880 50 2c 0a 09 22 2d 6f 22 2c 20 4f 52 2c 0a 09 22 2d 61 22 2c 20 41 4e 44 2c 0a 7d 3b 0a 0a 63 68   ┆P,  "-o", OR,  "-a", AND, };  ch┆
0x0880…08a0 61 72 09 2a 2a 67 61 76 3b 0a 69 6e 74 09 67 61 63 3b 0a 69 6e 74 09 64 65 70 74 68 3b 09 09 09   ┆ar **gav; int gac; int depth;   ┆
0x08a0…08c0 2f 2a 20 52 65 63 75 72 73 69 76 65 20 64 65 70 74 68 20 2a 2f 0a 0a 73 74 72 75 63 74 09 73 74   ┆/* Recursive depth */  struct st┆
0x08c0…08e0 61 74 09 73 62 3b 0a 63 68 61 72 09 66 6e 61 6d 65 5b 4e 46 4e 41 4d 45 5d 3b 0a 63 68 61 72 09   ┆at sb; char fname[NFNAME]; char ┆
0x08e0…0900 2a 70 72 6f 6d 70 74 3b 0a 0a 63 68 61 72 09 74 6f 6f 64 65 65 70 5b 5d 20 3d 20 22 64 69 72 65   ┆*prompt;  char toodeep[] = "dire┆
0x0900…0920 63 74 6f 72 79 20 73 74 72 75 63 74 75 72 65 20 74 6f 6f 20 64 65 65 70 20 74 6f 20 74 72 61 76   ┆ctory structure too deep to trav┆
0x0920…0940 65 72 73 65 22 3b 0a 63 68 61 72 09 6e 6f 73 70 61 63 65 5b 5d 20 3d 20 22 6f 75 74 20 6f 66 20   ┆erse"; char nospace[] = "out of ┆
0x0940…0960 6d 65 6d 6f 72 79 22 3b 0a 0a 74 69 6d 65 5f 74 09 63 75 72 74 69 6d 65 3b 0a 0a 4e 4f 44 45 09   ┆memory";  time_t curtime;  NODE ┆
0x0960…0980 2a 63 6f 64 65 3b 0a 69 6e 74 09 73 65 66 6c 61 67 3b 09 09 09 2f 2a 20 53 65 74 20 69 66 20 61   ┆*code; int seflag;   /* Set if a┆
0x0980…09a0 20 73 69 64 65 20 65 66 66 65 63 74 20 28 70 72 69 6e 74 2c 20 65 78 65 63 29 20 66 6f 75 6e 64   ┆ side effect (print, exec) found┆
0x09a0…09c0 20 2a 2f 0a 0a 63 68 61 72 09 2a 6e 65 78 74 28 29 3b 0a 4e 4f 44 45 09 2a 62 6e 6f 64 65 28 29   ┆ */  char *next(); NODE *bnode()┆
0x09c0…09e0 3b 0a 4e 4f 44 45 09 2a 65 6e 6f 64 65 28 29 3b 0a 4e 4f 44 45 09 2a 6c 6e 6f 64 65 28 29 3b 0a   ┆; NODE *enode(); NODE *lnode(); ┆
0x09e0…0a00 4e 4f 44 45 09 2a 6e 6e 6f 64 65 28 29 3b 0a 4e 4f 44 45 09 2a 6f 6e 6f 64 65 28 29 3b 0a 4e 4f   ┆NODE *nnode(); NODE *onode(); NO┆
0x0a00…0a20 44 45 09 2a 67 65 74 75 73 65 72 28 29 3b 0a 4e 4f 44 45 09 2a 67 65 74 67 72 6f 75 70 28 29 3b   ┆DE *getuser(); NODE *getgroup();┆
0x0a20…0a40 0a 4e 4f 44 45 09 2a 67 65 74 6e 65 77 65 72 28 29 3b 0a 69 6e 74 09 78 6e 61 6d 65 28 29 3b 0a   ┆ NODE *getnewer(); int xname(); ┆
0x0a40…0a60 69 6e 74 09 78 70 65 72 6d 28 29 3b 0a 69 6e 74 09 78 74 79 70 65 28 29 3b 0a 69 6e 74 09 78 6c   ┆int xperm(); int xtype(); int xl┆
0x0a60…0a80 69 6e 6b 73 28 29 3b 0a 69 6e 74 09 78 75 73 65 72 28 29 3b 0a 69 6e 74 09 78 67 72 6f 75 70 28   ┆inks(); int xuser(); int xgroup(┆
0x0a80…0aa0 29 3b 0a 69 6e 74 09 78 73 69 7a 65 28 29 3b 0a 69 6e 74 09 78 69 6e 75 6d 28 29 3b 0a 69 6e 74   ┆); int xsize(); int xinum(); int┆
0x0aa0…0ac0 09 78 61 74 69 6d 65 28 29 3b 0a 69 6e 74 09 78 63 74 69 6d 65 28 29 3b 0a 69 6e 74 09 78 6d 74   ┆ xatime(); int xctime(); int xmt┆
0x0ac0…0ae0 69 6d 65 28 29 3b 0a 69 6e 74 09 78 6e 65 77 65 72 28 29 3b 0a 69 6e 74 09 78 65 78 65 63 28 29   ┆ime(); int xnewer(); int xexec()┆
0x0ae0…0b00 3b 0a 69 6e 74 09 78 70 72 69 6e 74 28 29 3b 0a 69 6e 74 09 78 6e 6f 70 28 29 3b 0a 63 68 61 72   ┆; int xprint(); int xnop(); char┆
0x0b00…0b20 09 2a 67 65 74 65 6e 76 28 29 3b 0a 0a 6d 61 69 6e 28 61 72 67 63 2c 20 61 72 67 76 29 0a 63 68   ┆ *getenv();  main(argc, argv) ch┆
0x0b20…0b40 61 72 20 2a 61 72 67 76 5b 5d 3b 0a 7b 0a 09 72 65 67 69 73 74 65 72 20 69 6e 74 20 69 3b 0a 09   ┆ar *argv[]; {  register int i;  ┆
0x0b40…0b60 72 65 67 69 73 74 65 72 20 63 68 61 72 20 2a 61 70 3b 0a 09 72 65 67 69 73 74 65 72 20 69 6e 74   ┆register char *ap;  register int┆
0x0b60…0b80 20 65 61 72 67 63 3b 0a 0a 09 66 6f 72 20 28 69 3d 31 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29   ┆ eargc;   for (i=1; i<argc; i++)┆
0x0b80…0ba0 20 7b 0a 09 09 61 70 20 3d 20 61 72 67 76 5b 69 5d 3b 0a 09 09 69 66 20 28 2a 61 70 20 3d 3d 20   ┆ {   ap = argv[i];   if (*ap == ┆
0x0ba0…0bc0 27 2d 27 29 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 69 66 20 28 61 70 5b 31 5d 3d 3d 27 5c 30 27   ┆'-')    break;   if (ap[1]=='\0'┆
0x0bc0…0be0 20 26 26 20 28 2a 61 70 3d 3d 27 21 27 20 7c 7c 20 2a 61 70 3d 3d 27 28 27 29 29 0a 09 09 09 62   ┆ && (*ap=='!' || *ap=='('))    b┆
0x0be0…0c00 72 65 61 6b 3b 0a 09 7d 0a 09 69 66 20 28 28 65 61 72 67 63 3d 69 29 20 3c 20 32 29 0a 09 09 75   ┆reak;  }  if ((eargc=i) < 2)   u┆
0x0c00…0c20 73 61 67 65 28 29 3b 0a 09 67 61 76 20 3d 20 61 72 67 76 2b 69 3b 0a 09 67 61 63 20 3d 20 61 72   ┆sage();  gav = argv+i;  gac = ar┆
0x0c20…0c40 67 63 2d 69 3b 0a 09 79 79 70 61 72 73 65 28 29 3b 0a 09 74 69 6d 65 28 26 63 75 72 74 69 6d 65   ┆gc-i;  yyparse();  time(&curtime┆
0x0c40…0c60 29 3b 0a 09 69 66 20 28 28 70 72 6f 6d 70 74 20 3d 20 67 65 74 65 6e 76 28 22 50 53 31 22 29 29   ┆);  if ((prompt = getenv("PS1"))┆
0x0c60…0c80 20 3d 3d 20 4e 55 4c 4c 29 0a 09 09 70 72 6f 6d 70 74 20 3d 20 22 3e 20 22 3b 0a 09 66 6f 72 20   ┆ == NULL)   prompt = "> ";  for ┆
0x0c80…0ca0 28 69 3d 31 3b 20 69 3c 65 61 72 67 63 3b 20 69 2b 2b 29 0a 09 09 66 69 6e 64 28 61 72 67 76 5b   ┆(i=1; i<eargc; i++)   find(argv[┆
0x0ca0…0cc0 69 5d 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 4c 65 78 69 63 61 6c 20 61 6e 61 6c 79 73 65 72 0a 20   ┆i]); }  /*  * Lexical analyser  ┆
0x0cc0…0ce0 2a 2f 0a 79 79 6c 65 78 28 29 0a 7b 0a 09 73 74 61 74 69 63 20 69 6e 74 20 62 69 6e 6f 70 20 3d   ┆*/ yylex() {  static int binop =┆
0x0ce0…0d00 20 30 3b 0a 09 73 74 61 74 69 63 20 69 6e 74 20 6e 74 6f 6b 65 6e 20 3d 20 30 3b 0a 09 72 65 67   ┆ 0;  static int ntoken = 0;  reg┆
0x0d00…0d20 69 73 74 65 72 20 63 68 61 72 20 2a 61 70 3b 0a 09 73 74 72 75 63 74 20 70 72 69 6d 61 72 79 20   ┆ister char *ap;  struct primary ┆
0x0d20…0d40 2a 70 70 3b 0a 09 72 65 67 69 73 74 65 72 20 69 6e 74 20 74 6f 6b 65 6e 3b 0a 0a 09 69 66 20 28   ┆*pp;  register int token;   if (┆
0x0d40…0d60 6e 74 6f 6b 65 6e 29 20 7b 0a 09 09 74 6f 6b 65 6e 20 3d 20 6e 74 6f 6b 65 6e 3b 0a 09 09 6e 74   ┆ntoken) {   token = ntoken;   nt┆
0x0d60…0d80 6f 6b 65 6e 20 3d 20 30 3b 0a 09 7d 20 65 6c 73 65 20 69 66 20 28 28 61 70 20 3d 20 6e 65 78 74   ┆oken = 0;  } else if ((ap = next┆
0x0d80…0da0 28 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a 09 09 74 6f 6b 65 6e 20 3d 20 27 5c 6e 27 3b 0a 09 65 6c   ┆()) == NULL)   token = '\n';  el┆
0x0da0…0dc0 73 65 20 69 66 20 28 61 70 5b 31 5d 20 3d 3d 20 27 5c 30 27 29 0a 09 09 74 6f 6b 65 6e 20 3d 20   ┆se if (ap[1] == '\0')   token = ┆
0x0dc0…0de0 61 70 5b 30 5d 3b 0a 09 65 6c 73 65 20 69 66 20 28 2a 61 70 20 3d 3d 20 27 2d 27 29 20 7b 0a 09   ┆ap[0];  else if (*ap == '-') {  ┆
0x0de0…0e00 09 66 6f 72 20 28 70 70 20 3d 20 70 72 69 6d 61 72 69 65 73 3b 20 70 70 20 3c 20 26 70 72 69 6d   ┆ for (pp = primaries; pp < &prim┆
0x0e00…0e20 61 72 69 65 73 5b 4e 50 52 49 4d 5d 3b 20 70 70 2b 2b 29 0a 09 09 09 69 66 20 28 73 74 72 63 6d   ┆aries[NPRIM]; pp++)    if (strcm┆
0x0e20…0e40 70 28 70 70 2d 3e 70 5f 6e 61 6d 65 2c 20 61 70 29 20 3d 3d 20 30 29 20 7b 0a 09 09 09 09 74 6f   ┆p(pp->p_name, ap) == 0) {     to┆
0x0e40…0e60 6b 65 6e 20 3d 20 70 70 2d 3e 70 5f 6c 76 61 6c 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09   ┆ken = pp->p_lval;     break;    ┆
0x0e60…0e80 7d 0a 09 09 69 66 20 28 70 70 20 3e 3d 20 26 70 72 69 6d 61 72 69 65 73 5b 4e 50 52 49 4d 5d 29   ┆}   if (pp >= &primaries[NPRIM])┆
0x0e80…0ea0 0a 09 09 09 66 65 72 72 28 22 60 25 73 27 20 69 73 20 61 6e 20 69 6c 6c 65 67 61 6c 20 70 72 69   ┆    ferr("`%s' is an illegal pri┆
0x0ea0…0ec0 6d 61 72 79 22 2c 20 61 70 29 3b 0a 09 7d 20 65 6c 73 65 0a 09 09 66 65 72 72 28 22 49 6c 6c 65   ┆mary", ap);  } else   ferr("Ille┆
0x0ec0…0ee0 67 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 22 29 3b 0a 09 69 66 20 28 62 69 6e 6f 70 20 26 26 20   ┆gal expression");  if (binop && ┆
0x0ee0…0f00 74 6f 6b 65 6e 21 3d 27 29 27 20 26 26 20 74 6f 6b 65 6e 21 3d 27 5c 6e 27 20 26 26 20 74 6f 6b   ┆token!=')' && token!='\n' && tok┆
0x0f00…0f20 65 6e 21 3d 4f 52 20 26 26 20 74 6f 6b 65 6e 21 3d 41 4e 44 29 20 7b 0a 09 09 62 69 6e 6f 70 20   ┆en!=OR && token!=AND) {   binop ┆
0x0f20…0f40 3d 20 30 3b 0a 09 09 6e 74 6f 6b 65 6e 20 3d 20 74 6f 6b 65 6e 3b 0a 09 09 72 65 74 75 72 6e 20   ┆= 0;   ntoken = token;   return ┆
0x0f40…0f60 28 41 4e 44 29 3b 0a 09 7d 0a 09 69 66 20 28 74 6f 6b 65 6e 21 3d 4f 52 20 26 26 20 74 6f 6b 65   ┆(AND);  }  if (token!=OR && toke┆
0x0f60…0f80 6e 21 3d 41 4e 44 20 26 26 20 74 6f 6b 65 6e 21 3d 27 21 27 20 26 26 20 74 6f 6b 65 6e 21 3d 27   ┆n!=AND && token!='!' && token!='┆
0x0f80…0fa0 5c 6e 27 20 26 26 20 74 6f 6b 65 6e 21 3d 27 28 27 29 0a 09 09 62 69 6e 6f 70 20 3d 20 31 3b 20   ┆\n' && token!='(')   binop = 1; ┆
0x0fa0…0fc0 65 6c 73 65 0a 09 09 62 69 6e 6f 70 20 3d 20 30 3b 0a 09 72 65 74 75 72 6e 20 28 74 6f 6b 65 6e   ┆else   binop = 0;  return (token┆
0x0fc0…0fe0 29 3b 0a 7d 0a 0a 79 79 65 72 72 6f 72 28 29 0a 7b 0a 09 66 70 72 69 6e 74 66 28 73 74 64 65 72   ┆); }  yyerror() {  fprintf(stder┆
0x0fe0…1000 72 2c 20 22 50 72 69 6d 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e 20 73 79 6e 74 61 78 20 65 72   ┆r, "Primary expression syntax er┆
0x1000…1020 72 6f 72 5c 6e 22 29 3b 0a 09 75 73 61 67 65 28 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 52 65 74 75   ┆ror\n");  usage(); }  /*  * Retu┆
0x1020…1040 72 6e 20 74 68 65 20 6e 65 78 74 20 61 72 67 75 6d 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 61 72   ┆rn the next argument from the ar┆
0x1040…1060 67 20 6c 69 73 74 2e 0a 20 2a 2f 0a 63 68 61 72 20 2a 0a 6e 65 78 74 28 29 0a 7b 0a 09 69 66 20   ┆g list.  */ char * next() {  if ┆
0x1060…1080 28 67 61 63 20 3c 20 31 29 0a 09 09 72 65 74 75 72 6e 20 28 4e 55 4c 4c 29 3b 0a 09 67 61 63 2d   ┆(gac < 1)   return (NULL);  gac-┆
0x1080…10a0 2d 3b 0a 09 72 65 74 75 72 6e 20 28 2a 67 61 76 2b 2b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 50 72   ┆-;  return (*gav++); }  /*  * Pr┆
0x10a0…10c0 6f 64 75 63 65 20 61 20 6e 6f 64 65 20 63 6f 6e 73 69 73 74 69 6e 67 0a 20 2a 20 6f 66 20 61 6e   ┆oduce a node consisting  * of an┆
0x10c0…10e0 20 6f 63 74 61 6c 20 6e 75 6d 62 65 72 2e 0a 20 2a 2f 0a 4e 4f 44 45 20 2a 0a 6f 6e 6f 64 65 28   ┆ octal number.  */ NODE * onode(┆
0x10e0…1100 66 75 6e 29 0a 69 6e 74 20 28 2a 66 75 6e 29 28 29 3b 0a 7b 0a 09 72 65 67 69 73 74 65 72 20 63   ┆fun) int (*fun)(); {  register c┆
0x1100…1120 68 61 72 20 2a 61 70 3b 0a 09 72 65 67 69 73 74 65 72 20 69 6e 74 20 6e 75 6d 3b 0a 09 72 65 67   ┆har *ap;  register int num;  reg┆
0x1120…1140 69 73 74 65 72 20 4e 4f 44 45 20 2a 6e 70 3b 0a 09 72 65 67 69 73 74 65 72 20 69 6e 74 20 74 79   ┆ister NODE *np;  register int ty┆
0x1140…1160 70 65 3b 0a 09 63 68 61 72 20 2a 61 61 70 3b 0a 0a 09 69 66 20 28 28 61 70 20 3d 20 6e 65 78 74   ┆pe;  char *aap;   if ((ap = next┆
0x1160…1180 28 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a 09 09 66 65 72 72 28 22 4d 69 73 73 69 6e 67 20 6f 63 74   ┆()) == NULL)   ferr("Missing oct┆
0x1180…11a0 61 6c 20 70 65 72 6d 69 73 73 69 6f 6e 22 29 3b 0a 09 61 61 70 20 3d 20 61 70 3b 0a 09 69 66 20   ┆al permission");  aap = ap;  if ┆
0x11a0…11c0 28 2a 61 70 20 3d 3d 20 27 2d 27 29 20 7b 0a 09 09 61 70 2b 2b 3b 0a 09 09 74 79 70 65 20 3d 20   ┆(*ap == '-') {   ap++;   type = ┆
0x11c0…11e0 2d 31 3b 0a 09 7d 20 65 6c 73 65 0a 09 09 74 79 70 65 20 3d 20 30 3b 0a 09 6e 75 6d 20 3d 20 30   ┆-1;  } else   type = 0;  num = 0┆
0x11e0…1200 3b 0a 09 77 68 69 6c 65 20 28 2a 61 70 3e 3d 27 30 27 20 26 26 20 2a 61 70 3c 3d 27 37 27 29 0a   ┆;  while (*ap>='0' && *ap<='7') ┆
0x1200…1220 09 09 6e 75 6d 20 3d 20 6e 75 6d 2a 38 20 2b 20 2a 61 70 2b 2b 2d 27 30 27 3b 0a 09 69 66 20 28   ┆  num = num*8 + *ap++-'0';  if (┆
0x1220…1240 2a 61 70 20 21 3d 20 27 5c 30 27 29 0a 09 09 66 65 72 72 28 22 25 73 3a 20 62 61 64 20 6f 63 74   ┆*ap != '\0')   ferr("%s: bad oct┆
0x1240…1260 61 6c 20 70 65 72 6d 69 73 73 69 6f 6e 22 2c 20 61 61 70 29 3b 0a 09 6e 70 20 3d 20 69 6e 6f 64   ┆al permission", aap);  np = inod┆
0x1260…1280 65 28 66 75 6e 2c 20 6e 75 6d 29 3b 0a 09 6e 70 2d 3e 6e 5f 75 6e 2e 6e 5f 76 61 6c 20 3d 20 6e   ┆e(fun, num);  np->n_un.n_val = n┆
0x1280…12a0 75 6d 3b 0a 09 6e 70 2d 3e 6e 5f 74 79 70 65 20 3d 20 74 79 70 65 3b 0a 09 72 65 74 75 72 6e 20   ┆um;  np->n_type = type;  return ┆
0x12a0…12c0 28 6e 70 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 47 65 74 20 61 20 6e 75 6d 62 65 72 20 2d 2d 20 69   ┆(np); }  /*  * Get a number -- i┆
0x12c0…12e0 74 20 61 6c 73 6f 20 6d 61 79 20 62 65 0a 20 2a 20 70 72 65 66 69 78 65 64 20 62 79 20 60 2b 27   ┆t also may be  * prefixed by `+'┆
0x12e0…1300 20 6f 72 20 60 2d 27 20 74 6f 0a 20 2a 20 72 65 70 72 65 73 65 6e 74 20 71 75 61 6e 74 69 74 69   ┆ or `-' to  * represent quantiti┆
0x1300…1320 65 73 20 67 72 65 61 74 65 72 20 6f 72 0a 20 2a 20 6c 65 73 73 2e 0a 20 2a 2f 0a 4e 4f 44 45 20   ┆es greater or  * less.  */ NODE ┆
0x1320…1340 2a 0a 6e 6e 6f 64 65 28 66 75 6e 29 0a 69 6e 74 20 28 2a 66 75 6e 29 3b 0a 7b 0a 09 72 65 67 69   ┆* nnode(fun) int (*fun); {  regi┆
0x1340…1360 73 74 65 72 20 63 68 61 72 20 2a 61 70 3b 0a 09 72 65 67 69 73 74 65 72 20 69 6e 74 20 6e 75 6d   ┆ster char *ap;  register int num┆
0x1360…1380 20 3d 20 30 3b 0a 09 72 65 67 69 73 74 65 72 20 69 6e 74 20 74 79 70 65 20 3d 20 30 3b 0a 09 72   ┆ = 0;  register int type = 0;  r┆
0x1380…13a0 65 67 69 73 74 65 72 20 4e 4f 44 45 20 2a 6e 70 3b 0a 09 63 68 61 72 20 2a 61 61 70 3b 0a 0a 09   ┆egister NODE *np;  char *aap;   ┆
0x13a0…13c0 69 66 20 28 28 61 70 20 3d 20 6e 65 78 74 28 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a 09 09 66 65 72   ┆if ((ap = next()) == NULL)   fer┆
0x13c0…13e0 72 28 22 4d 69 73 73 69 6e 67 20 6e 75 6d 62 65 72 22 29 3b 0a 09 61 61 70 20 3d 20 61 70 3b 0a   ┆r("Missing number");  aap = ap; ┆
0x13e0…1400 09 69 66 20 28 2a 61 70 20 3d 3d 20 27 2b 27 29 20 7b 0a 09 09 74 79 70 65 20 3d 20 31 3b 0a 09   ┆ if (*ap == '+') {   type = 1;  ┆
0x1400…1420 09 61 70 2b 2b 3b 0a 09 7d 20 65 6c 73 65 20 69 66 20 28 2a 61 70 20 3d 3d 20 27 2d 27 29 20 7b   ┆ ap++;  } else if (*ap == '-') {┆
0x1420…1440 0a 09 09 74 79 70 65 20 3d 20 2d 31 3b 0a 09 09 61 70 2b 2b 3b 0a 09 7d 0a 09 77 68 69 6c 65 20   ┆   type = -1;   ap++;  }  while ┆
0x1440…1460 28 2a 61 70 3e 3d 27 30 27 20 26 26 20 2a 61 70 3c 3d 27 39 27 29 0a 09 09 6e 75 6d 20 3d 20 6e   ┆(*ap>='0' && *ap<='9')   num = n┆
0x1460…1480 75 6d 2a 31 30 20 2b 20 2a 61 70 2b 2b 20 2d 20 27 30 27 3b 0a 09 69 66 20 28 2a 61 70 20 21 3d   ┆um*10 + *ap++ - '0';  if (*ap !=┆
0x1480…14a0 20 27 5c 30 27 29 0a 09 09 66 65 72 72 28 22 25 73 3a 20 69 6e 76 61 6c 69 64 20 6e 75 6d 62 65   ┆ '\0')   ferr("%s: invalid numbe┆
0x14a0…14c0 72 22 2c 20 61 61 70 29 3b 0a 09 6e 70 20 3d 20 69 6e 6f 64 65 28 66 75 6e 2c 20 6e 75 6d 29 3b   ┆r", aap);  np = inode(fun, num);┆
0x14c0…14e0 0a 09 6e 70 2d 3e 6e 5f 74 79 70 65 20 3d 20 74 79 70 65 3b 0a 09 72 65 74 75 72 6e 20 28 6e 70   ┆  np->n_type = type;  return (np┆
0x14e0…1500 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 47 65 74 20 61 20 75 73 65 72 20 6e 61 6d 65 20 6f 72 20 6e   ┆); }  /*  * Get a user name or n┆
0x1500…1520 75 6d 62 65 72 2e 0a 20 2a 2f 0a 4e 4f 44 45 20 2a 0a 67 65 74 75 73 65 72 28 29 0a 7b 0a 09 72   ┆umber.  */ NODE * getuser() {  r┆
0x1520…1540 65 67 69 73 74 65 72 20 73 74 72 75 63 74 20 70 61 73 73 77 64 20 2a 70 77 70 3b 0a 09 72 65 67   ┆egister struct passwd *pwp;  reg┆
0x1540…1560 69 73 74 65 72 20 63 68 61 72 20 2a 63 70 3b 0a 09 72 65 67 69 73 74 65 72 20 69 6e 74 20 75 69   ┆ister char *cp;  register int ui┆
0x1560…1580 64 3b 0a 0a 09 69 66 20 28 28 63 70 20 3d 20 6e 65 78 74 28 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a   ┆d;   if ((cp = next()) == NULL) ┆
0x1580…15a0 09 09 66 65 72 72 28 22 4d 69 73 73 69 6e 67 20 75 73 65 72 6e 61 6d 65 22 29 3b 0a 09 69 66 20   ┆  ferr("Missing username");  if ┆
0x15a0…15c0 28 2a 63 70 3e 3d 27 30 27 20 26 26 20 2a 63 70 3c 3d 27 39 27 29 0a 09 09 75 69 64 20 3d 20 61   ┆(*cp>='0' && *cp<='9')   uid = a┆
0x15c0…15e0 74 6f 69 28 63 70 29 3b 0a 09 65 6c 73 65 20 7b 0a 09 09 69 66 20 28 28 70 77 70 20 3d 20 67 65   ┆toi(cp);  else {   if ((pwp = ge┆
0x15e0…1600 74 70 77 6e 61 6d 28 63 70 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a 09 09 09 66 65 72 72 28 22 25 73   ┆tpwnam(cp)) == NULL)    ferr("%s┆
0x1600…1620 3a 20 62 61 64 20 75 73 65 72 20 6e 61 6d 65 22 2c 20 63 70 29 3b 0a 09 09 75 69 64 20 3d 20 70   ┆: bad user name", cp);   uid = p┆
0x1620…1640 77 70 2d 3e 70 77 5f 75 69 64 3b 0a 09 7d 0a 09 72 65 74 75 72 6e 20 28 6c 6e 6f 64 65 28 46 55   ┆wp->pw_uid;  }  return (lnode(FU┆
0x1640…1660 4e 2c 20 78 75 73 65 72 2c 20 75 69 64 2c 20 4e 55 4c 4c 29 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20   ┆N, xuser, uid, NULL)); }  /*  * ┆
0x1660…1680 47 65 74 20 67 72 6f 75 70 0a 20 2a 2f 0a 4e 4f 44 45 20 2a 0a 67 65 74 67 72 6f 75 70 28 29 0a   ┆Get group  */ NODE * getgroup() ┆
0x1680…16a0 7b 0a 09 72 65 67 69 73 74 65 72 20 73 74 72 75 63 74 20 67 72 6f 75 70 20 2a 67 72 70 3b 0a 09   ┆{  register struct group *grp;  ┆
0x16a0…16c0 72 65 67 69 73 74 65 72 20 63 68 61 72 20 2a 63 70 3b 0a 09 72 65 67 69 73 74 65 72 20 69 6e 74   ┆register char *cp;  register int┆
0x16c0…16e0 20 67 69 64 3b 0a 0a 09 69 66 20 28 28 63 70 20 3d 20 6e 65 78 74 28 29 29 20 3d 3d 20 4e 55 4c   ┆ gid;   if ((cp = next()) == NUL┆
0x16e0…1700 4c 29 0a 09 09 66 65 72 72 28 22 4d 69 73 73 69 6e 67 20 67 72 6f 75 70 20 6e 61 6d 65 22 29 3b   ┆L)   ferr("Missing group name");┆
0x1700…1720 0a 09 69 66 20 28 2a 63 70 3e 3d 27 30 27 20 26 26 20 2a 63 70 3c 3d 27 39 27 29 0a 09 09 67 69   ┆  if (*cp>='0' && *cp<='9')   gi┆
0x1720…1740 64 20 3d 20 61 74 6f 69 28 63 70 29 3b 0a 09 65 6c 73 65 20 7b 0a 09 09 69 66 20 28 28 67 72 70   ┆d = atoi(cp);  else {   if ((grp┆
0x1740…1760 20 3d 20 67 65 74 67 72 6e 61 6d 28 63 70 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a 09 09 09 66 65 72   ┆ = getgrnam(cp)) == NULL)    fer┆
0x1760…1780 72 28 22 25 73 3a 20 62 61 64 20 67 72 6f 75 70 20 6e 61 6d 65 22 2c 20 63 70 29 3b 0a 09 09 67   ┆r("%s: bad group name", cp);   g┆
0x1780…17a0 69 64 20 3d 20 67 72 70 2d 3e 67 72 5f 67 69 64 3b 0a 09 7d 0a 09 72 65 74 75 72 6e 20 28 6c 6e   ┆id = grp->gr_gid;  }  return (ln┆
0x17a0…17c0 6f 64 65 28 46 55 4e 2c 20 78 67 72 6f 75 70 2c 20 67 69 64 2c 20 4e 55 4c 4c 29 29 3b 0a 7d 0a   ┆ode(FUN, xgroup, gid, NULL)); } ┆
0x17c0…17e0 0a 2f 2a 0a 20 2a 20 47 65 74 20 74 68 65 20 74 69 6d 65 20 66 6f 72 20 74 68 65 20 66 69 6c 65   ┆ /*  * Get the time for the file┆
0x17e0…1800 20 75 73 65 64 20 69 6e 0a 20 2a 20 74 68 65 20 60 2d 6e 65 77 65 72 27 20 70 72 69 6d 61 72 79   ┆ used in  * the `-newer' primary┆
0x1800…1820 2e 0a 20 2a 2f 0a 4e 4f 44 45 20 2a 0a 67 65 74 6e 65 77 65 72 28 29 0a 7b 0a 09 72 65 67 69 73   ┆.  */ NODE * getnewer() {  regis┆
0x1820…1840 74 65 72 20 4e 4f 44 45 20 2a 6e 70 3b 0a 09 72 65 67 69 73 74 65 72 20 63 68 61 72 20 2a 66 6e   ┆ter NODE *np;  register char *fn┆
0x1840…1860 3b 0a 0a 09 69 66 20 28 28 66 6e 20 3d 20 6e 65 78 74 28 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a 09   ┆;   if ((fn = next()) == NULL)  ┆
0x1860…1880 09 66 65 72 72 28 22 4d 69 73 73 69 6e 67 20 66 69 6c 65 6e 61 6d 65 20 66 6f 72 20 60 2d 6e 65   ┆ ferr("Missing filename for `-ne┆
0x1880…18a0 77 65 72 27 22 29 3b 0a 09 69 66 20 28 73 74 61 74 28 66 6e 2c 20 26 73 62 29 20 3c 20 30 29 0a   ┆wer'");  if (stat(fn, &sb) < 0) ┆
0x18a0…18c0 09 09 66 65 72 72 28 22 25 73 3a 20 6e 6f 6e 65 78 69 73 74 65 6e 74 22 2c 20 66 6e 29 3b 0a 09   ┆  ferr("%s: nonexistent", fn);  ┆
0x18c0…18e0 6e 70 20 3d 20 69 6e 6f 64 65 28 78 6e 65 77 65 72 2c 20 30 29 3b 0a 09 6e 70 2d 3e 6e 5f 75 6e   ┆np = inode(xnewer, 0);  np->n_un┆
0x18e0…1900 2e 6e 5f 74 69 6d 65 20 3d 20 73 62 2e 73 74 5f 6d 74 69 6d 65 3b 0a 09 72 65 74 75 72 6e 20 28   ┆.n_time = sb.st_mtime;  return (┆
0x1900…1920 6e 70 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 42 75 69 6c 64 20 61 6e 20 65 78 70 72 65 73 73 69 6f   ┆np); }  /*  * Build an expressio┆
[…truncated at 200 lines…]