Finished my homework on cat
I made a cat which takes option flag input as well. It's fairly basic and pretty poor performance.
I only have one minor bug that I can find. If using the "-e" flag and they're multiple newlines in a row, it'll print this as output:
Instead of just:
Here's the code:
Code:
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int8_t FileData, FlagIndicator, sFlag, eFlag, tFlag, seFlag;
uint64_t NewLineCounter, TabCounter;
FILE *fp = NULL;
sFlag = eFlag = tFlag = seFlag = 0;
if(argc < 2) {
fprintf(stderr, "Enter a file name\n");
return 1;
}
while((FlagIndicator = getopt(argc, argv, "set")) != -1)
switch(FlagIndicator) {
case 's':
sFlag = 1;
break;
case 'e':
eFlag = 1;
break;
case 't':
tFlag = 1;
break;
default:
(void)fprintf(stderr, "Usage: [-set] [file...]\n");
return 1;
}
if(sFlag || eFlag || tFlag)
fp = fopen(argv[2], "r");
else
fp = fopen(argv[1], "r");
if(sFlag && eFlag)
seFlag = 1;
if(fp == NULL) {
fprintf(stderr, "No file found.\n");
return 1;
}
FileData = getc(fp);
while(1) {
if(seFlag) {
for(NewLineCounter = 0; FileData == '\n'; NewLineCounter++) {
if(NewLineCounter < 2)
printf("$\n");
FileData = getc(fp);
}
}
if(sFlag && !seFlag) {
for(NewLineCounter = 0; FileData == '\n'; NewLineCounter++) {
if(NewLineCounter < 2)
printf("\n");
FileData = getc(fp);
}
}
if(eFlag && !seFlag) {
if(FileData == '\n') {
printf("$%c", FileData);
FileData = getc(fp);
}
}
if(tFlag) {
for(TabCounter = 0; FileData == '\t'; TabCounter++) {
printf("^I");
FileData = getc(fp);
}
}
if(FileData == EOF)
break;
printf("%c", FileData);
FileData = getc(fp);
}
fclose(fp);
return 0;
}