* - means n lines before end
* + means nth line from beginning
* type 'b' means tail n blocks, not lines
* type 'c' means tail n characters
* Type 'r' means in lines in reverse order from end
* (for -r, default is entire buffer )
int partial
,piped
,bylines
,bkwds
,fromend
,lastnl
;
if(argc
<=1 || *arg
!='-'&&*arg
!='+') {
write(2,"tail: can't open ",17);
write(2,argv
[2],strlen(argv
[2]));
bkwds
= 1; fromend
= 1; bylines
= 1;
if(piped
||(statb
.st_mode
&S_IFMT
)==S_IFCHR
)
while((i
=read(0,bin
,512))>0)
di
= !bylines
? n
: LBIN
-1;
j
= read(0,&bin
[i
],LBIN
-i
);
if(bkwds
&& bin
[i
==0?LBIN
-1:i
-1]!='\n'){ /* force trailing newline */
if(++i
>=LBIN
) {i
= 0; partial
= 0;}
if(bkwds
) write(1,bin
,lastnl
+1);
} while(bin
[k
]!='\n'&&k
!=i
);
if(k
<lastnl
) write(1,&bin
[k
+1],lastnl
-k
);
write(1,&bin
[k
+1],LBIN
-k
-1);
} while(bin
[k
]!='\n'&&k
!=i
);
write(1,&bin
[k
+1],i
-k
-1);
write(1,&bin
[k
+1],LBIN
-k
-1);
write(2,"usage: tail +\b_n[lbcr] [file]\n",30);