9p / who / tweedy / 9C / 1
Longest Line (external variables)
Code
#include <u.h>
#include <libc.h>
#include <bio.h>
#define STDIN 0
#define MAXLINE 1000 /* maximum input line size */
int max; /* maximum length so far */
char line[MAXLINE]; /* current input line */
char longest[MAXLINE]; /* longest line saved here */
Biobuf *bstdin;
int getline(void);
void copy(void);
/* print longest input line; specialized version */
void
main()
{
int len;
extern int max;
extern char longest[];
extern Biobuf *bstdin;
bstdin = Bfdopen(STDIN, OREAD);
max = 0;
while((len = getline()) > 0)
if(len > max) {
max = len;
copy();
}
if(max > 0) /* there was a line */
print("%s", longest);
exits(0);
}
/* getline: specialized version */
int getline()
{
int c, i;
extern char line[];
for(i = 0; i < MAXLINE - 1
&& (c=Bgetc(bstdin)) >= 0 && c != '\n'; ++i)
line[i] = c;
if(c == '\n'){
line[i] = c;
++i;
}
line[i] = '\0';
return i;
}
/* copy: specialized version */
void copy()
{
int i;
extern char line[], longest[];
i = 0;
while((longest[i] = line[i]) != '\0')
++i;
}
Output
$ 9c longest_ext.c; 9l longest_ext.o -o longest_ext
$ ./longest_ext < longest_ext.c
char longest[MAXLINE]; /* longest line saved here */
tweedy