#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
struct LL {
char *line;
struct LL *next;
};
void stripnl(char *);
void push(char *);
void pop();
void pop_all();
void display();
struct LL *MyLinkList;
int main() {
FILE *inFile;
char fname[40];
char line[128];
printf("Enter filename to read: ");
fgets(fname, sizeof(fname), stdin);
stripnl(fname);
if((inFile = fopen(fname, "r")) == NULL)
_exit(1);
while(fgets(line, sizeof(line), inFile) != NULL)
push(line);
fclose(inFile);
display();
pop_all();
return 0;
}
void push(char *line) {
struct LL *current, *new;
new = (struct LL *)malloc(sizeof(struct LL));
memset(new, 0, sizeof(struct LL));
if(MyLinkList == (struct LL *)NULL) {
MyLinkList = (struct LL *)malloc(sizeof(struct LL));
current = MyLinkList;
} else {
current = MyLinkList;
while(current->next != NULL)
current = current->next;
}
current->line = (char *)malloc(strlen(line)+1);
strcpy(current->line, line);
current->next = new;
}
void display() {
struct LL *current;
if(MyLinkList == NULL)
return;
current = MyLinkList;
while(current->next != NULL) {
fprintf(stdout, "Line: %s", current->line);
current = current->next;
}
}
void pop() {
struct LL *current, *prev;
if(MyLinkList == NULL)
return;
prev = current = MyLinkList;
while(current->next != NULL) {
prev = current;
current = current->next;
}
free(current->line);
free(current);
memset(prev, 0, sizeof(struct LL));
}
void pop_all() {
if(MyLinkList == NULL)
return;
while(MyLinkList->next != NULL)
pop();
}
void stripnl(char *str) {
while(strlen(str) && ( (str[strlen(str) - 1] == 13) ||
( str[strlen(str) - 1] == 10 ))) {
str[strlen(str) - 1] = 0;
}
}