Added files

This commit is contained in:
TriantaTV 2023-03-30 22:02:58 -05:00
commit b355e1400f
10 changed files with 229 additions and 0 deletions

BIN
Cat Executable file

Binary file not shown.

120
Cat.c Executable file
View File

@ -0,0 +1,120 @@
#include <stdio.h>
#include <stdbool.h>
bool CheckArgumentSet(int argc, char* argv[]);
void EchoBox();
void FileHandler(int argc, char* argv[]);
bool IsFileReadable(FILE* currentFile, char* fileName);
void PrintChosenFile(FILE* currentFile);
void PrintChosenFileNumbered(FILE* currentFile);
int lineNumber = 1;
int main(int argc, char* argv[])
{
if (argc == 1)
EchoBox();
if (argc > 1)
FileHandler(argc, argv);
return 0;
}
// Check if line number argument is set
bool CheckArgumentSet(int argc, char* argv[])
{
char argumentHyphen = '-';
char argumentLetter = 'b';
for (int i = 1; i < argc; i++)
{
if ((*(argv[i]) == argumentHyphen) && (*(argv[i]+1) == argumentLetter))
{
return 1;
}
}
return 0;
}
// Handling Cat without arguments
void EchoBox()
{
char inputText[100];
while (true)
{
scanf("%s", inputText);
printf("%s\n", inputText);
}
}
// Base function for passing work to other functions
void FileHandler(int argc, char* argv[])
{
FILE* currentFile;
bool argumentEnabled = CheckArgumentSet(argc, argv);
for (int i = 1; i < argc; i++)
{
if ((currentFile = fopen(argv[i], "r")) == NULL)
{
if (!argumentEnabled)
fprintf(stderr, "cat: %s: No such file or directory\n", argv[i]);
continue;
}
if (argumentEnabled)
PrintChosenFileNumbered(currentFile);
if (!argumentEnabled)
PrintChosenFile(currentFile);
fclose(currentFile);
}
}
// Print text of a chosen file without line numbers
void PrintChosenFile(FILE* currentFile)
{
char buffer[4];
while (fgets(buffer, sizeof(buffer), currentFile))
{
printf("%s", buffer);
}
}
// Print text of a chosen file with line numbers
void PrintChosenFileNumbered(FILE* currentFile)
{
bool isNewLine = 0;
char buffer[2];
printf(" %2d ", lineNumber);
lineNumber = lineNumber + 1;
while (fgets(buffer, sizeof(buffer), currentFile))
{
if (isNewLine && (buffer[0] == '\n'))
{
printf("%s", buffer);
continue;
}
if (isNewLine && (buffer[0] != '\n'))
{
printf(" %2d %s", lineNumber, buffer);
lineNumber = lineNumber + 1;
isNewLine = 0;
continue;
}
if (!isNewLine && (buffer[0] == '\n'))
{
isNewLine = 1;
printf("%s", buffer);
continue;
}
printf("%s", buffer);
}
}
// Check if file is readable
// Return true if readable, and false if not readable
// Todo: Fix function, breaks code if used
bool IsFileReadable(FILE* currentFile, char* fileName)
{
if((currentFile = fopen(fileName, "r")) == NULL)
{
fprintf(stderr, "cat: %s: No such file or directory\n", fileName);
return 0;
}
return 1;
}

19
CatOutput.txt Normal file
View File

@ -0,0 +1,19 @@
reowiajroewaj orijewaoi jreowaj rioejwa oirjeawioj rejoia rewa
rewijoaroiejwao ijrewaioj reoiwaj roiewja oirjewaoi jrewaoij rewajoirewa
r eiwjaoirjewoaijr eoiwjaio rejwaoi jrewaoij reoiwaj roeiwja
rewaoijrewoaijreowia jioj reiwoja riojewaio rjewaoijr ewa
rroiewjroiejwoi joirjew oirjewoijrewoij ewiojr ewio
oirjewoijreiow iojr oewij roiewj rioewjrwe
oirejwoirjew iorj woeijr ewoij riowej roeiwj
rioewjoirjewj ireowri jewiojr ewijo rewioj
reowij roiewjaori jewior jewioj rewiojr ewoijr iojwe
roiewjoirejw iorewioj ewiojr wieojr ioewjr iojewi
r oewijiorejwri oewior jewior jewiojr ewio
r oiewjroi ewjifoj ewijo rewjroiewji orjewiorew

19
CatOutputArguments.txt Normal file
View File

@ -0,0 +1,19 @@
1 reowiajroewaj orijewaoi jreowaj rioejwa oirjeawioj rejoia rewa
2 rewijoaroiejwao ijrewaioj reoiwaj roiewja oirjewaoi jrewaoij rewajoirewa
3 r eiwjaoirjewoaijr eoiwjaio rejwaoi jrewaoij reoiwaj roeiwja
4 rewaoijrewoaijreowia jioj reiwoja riojewaio rjewaoijr ewa
5 rroiewjroiejwoi joirjew oirjewoijrewoij ewiojr ewio
6 oirjewoijreiow iojr oewij roiewj rioewjrwe
7 oirejwoirjew iorj woeijr ewoij riowej roeiwj
8 rioewjoirjewj ireowri jewiojr ewijo rewioj
9 reowij roiewjaori jewior jewioj rewiojr ewoijr iojwe
10 roiewjoirejw iorewioj ewiojr wieojr ioewjr iojewi
11 r oewijiorejwri oewior jewior jewiojr ewio
12 r oiewjroi ewjifoj ewijo rewjroiewji orjewiorew

19
CatSystem.txt Normal file
View File

@ -0,0 +1,19 @@
reowiajroewaj orijewaoi jreowaj rioejwa oirjeawioj rejoia rewa
rewijoaroiejwao ijrewaioj reoiwaj roiewja oirjewaoi jrewaoij rewajoirewa
r eiwjaoirjewoaijr eoiwjaio rejwaoi jrewaoij reoiwaj roeiwja
rewaoijrewoaijreowia jioj reiwoja riojewaio rjewaoijr ewa
rroiewjroiejwoi joirjew oirjewoijrewoij ewiojr ewio
oirjewoijreiow iojr oewij roiewj rioewjrwe
oirejwoirjew iorj woeijr ewoij riowej roeiwj
rioewjoirjewj ireowri jewiojr ewijo rewioj
reowij roiewjaori jewior jewioj rewiojr ewoijr iojwe
roiewjoirejw iorewioj ewiojr wieojr ioewjr iojewi
r oewijiorejwri oewior jewior jewiojr ewio
r oiewjroi ewjifoj ewijo rewjroiewji orjewiorew

19
CatSystemArguments.txt Normal file
View File

@ -0,0 +1,19 @@
1 reowiajroewaj orijewaoi jreowaj rioejwa oirjeawioj rejoia rewa
2 rewijoaroiejwao ijrewaioj reoiwaj roiewja oirjewaoi jrewaoij rewajoirewa
3 r eiwjaoirjewoaijr eoiwjaio rejwaoi jrewaoij reoiwaj roeiwja
4 rewaoijrewoaijreowia jioj reiwoja riojewaio rjewaoijr ewa
5 rroiewjroiejwoi joirjew oirjewoijrewoij ewiojr ewio
6 oirjewoijreiow iojr oewij roiewj rioewjrwe
7 oirejwoirjew iorj woeijr ewoij riowej roeiwj
8 rioewjoirjewj ireowri jewiojr ewijo rewioj
9 reowij roiewjaori jewior jewioj rewiojr ewoijr iojwe
10 roiewjoirejw iorewioj ewiojr wieojr ioewjr iojewi
11 r oewijiorejwri oewior jewior jewiojr ewio
12 r oiewjroi ewjifoj ewijo rewjroiewji orjewiorew

7
Test1.txt Normal file
View File

@ -0,0 +1,7 @@
reowiajroewaj orijewaoi jreowaj rioejwa oirjeawioj rejoia rewa
rewijoaroiejwao ijrewaioj reoiwaj roiewja oirjewaoi jrewaoij rewajoirewa
r eiwjaoirjewoaijr eoiwjaio rejwaoi jrewaoij reoiwaj roeiwja
rewaoijrewoaijreowia jioj reiwoja riojewaio rjewaoijr ewa

4
Test2.txt Normal file
View File

@ -0,0 +1,4 @@
rroiewjroiejwoi joirjew oirjewoijrewoij ewiojr ewio
oirjewoijreiow iojr oewij roiewj rioewjrwe
oirejwoirjew iorj woeijr ewoij riowej roeiwj
rioewjoirjewj ireowri jewiojr ewijo rewioj

8
Test3.txt Normal file
View File

@ -0,0 +1,8 @@
reowij roiewjaori jewior jewioj rewiojr ewoijr iojwe
roiewjoirejw iorewioj ewiojr wieojr ioewjr iojewi
r oewijiorejwri oewior jewior jewiojr ewio
r oiewjroi ewjifoj ewijo rewjroiewji orjewiorew

14
TestCat.sh Executable file
View File

@ -0,0 +1,14 @@
#!/bin/bash
echo "Compiling..."
gcc -o Cat Cat.c
echo "Running difference tests..."
./Cat Test1.txt Test2.txt Test3.txt > CatOutput.txt
./Cat -b Test1.txt Test2.txt Test3.txt > CatOutputArguments.txt
cat Test1.txt Test2.txt Test3.txt > CatSystem.txt
cat -b Test1.txt Test2.txt Test3.txt > CatSystemArguments.txt
diff -w CatOutput.txt CatSystem.txt
diff -w CatOutputArguments.txt CatSystemArguments.txt
echo "Testing opening fake files..."
./Cat waoirjewa.txt
cat waoirjewa.txt
echo "If above lines match, successfully failed opening fake files."