First commit, everything finished and ready.

This commit is contained in:
Ricardo
2022-05-28 00:30:18 +00:00
parent 441f79afe4
commit bc0099c013
6 changed files with 220 additions and 0 deletions

83
Makefile Normal file
View File

@@ -0,0 +1,83 @@
# GNU/Linux specific Make directives.
# Declare tools.
SHELL = /bin/sh
CC = clang
LD = clang
ECHO = @echo
CFLAGS = -std=c17 -Wall -Wextra -O0 -Wno-unused-variable -Wno-unused-parameter -I./include
LDFLAGS =
EXECUTABLE = inverT
SOURCES = main.c functions.c
OBJECTS = $(SOURCES:.c=.o)
CLEANFILES = main.o functions.o
# To get a fully verbose make output do declare 'AT' at the command line like so: 'make AT='.
# By default AT is undefined and thus assigned the string '@' which suppresses output from commands.
AT ?= @
# Colors and efects
#######################################
NORMAL = \033[m
FG_BLACK = \033[30m
FG_DKRED = \033[31m
FG_DKGREEN = \033[32;7m
FG_DKYELLOW = \033[33m
FG_DKBLUE = \033[34m
FG_DKMAGENTA = \033[35m
FG_DKCYAN = \033[36m
FG_GRAY = \033[37m
FG_DKGRAY = \033[30;1m
FG_REDFULL = \033[31;7m
FG_GREEN = \033[32;1m
FG_YELLOW = \033[33;7m
FG_BLUE = \033[34;7m
FG_MAGENTA = \033[35;1m
FG_CYAN = \033[36;1m
FG_WHITE = \033[37;1m
BG_BLACK = \033[40m
BG_DKRED = \033[41m
BG_DKGREEN = \033[42m
BG_DKYELLOW = \033[43m
BG_DKBLUE = \033[44m
BG_DKMAGENTA = \033[45m
BG_DKCYAN = \033[46m
BG_GRAY = \033[47m
BG_DKGRAY = \033[40;1m
BG_RED = \033[41;1m
BG_GREEN = \033[42;1m
BG_YELLOW = \033[43;1m
BG_BLUE = \033[44;1m
BG_MAGENTA = \033[45;1m
BG_CYAN = \033[46;1m
BG_WHITE = \033[47;1m
##########################################
.SUFFIXES: .c .o
.PHONY: clean
# Compile
all: clean $(EXECUTABLE)
.c.o:
$(ECHO) "[$(FG_BLUE)COMPILING$(NORMAL)] $@"
$(AT) $(CC) $(CFLAGS) -o $*.o -c $<
$(EXECUTABLE): $(OBJECTS)
$(ECHO) "[$(FG_YELLOW)LINKING$(NORMAL)] $(EXECUTABLE)"
$(AT) $(LD) $(LDFLAGS) $(OBJECTS) -o $(EXECUTABLE)
$(ECHO) "[$(FG_DKGREEN)SUCCESS$(NORMAL)] Run ./$(EXECUTABLE) to start your application, Enjoy :)"
clean:
$(ECHO) "[$(FG_REDFULL)CLEANED$(NORMAL)] $(CLEANFILES)"
$(AT) rm -rf $(CLEANFILES)

43
functions.c Normal file
View File

@@ -0,0 +1,43 @@
#include <main.h>
int ask_file() {
printf ("Insert name of the file to be read : ");
fgets(info.filename, info.fileNameSize, stdin);
info.filename[strlen(info.filename)-1] = '\0';
invert_file();
return 0;
}
int get_file(char *fileName) {
strcpy(info.filename, fileName);
invert_file();
return 0;
}
int invert_file(void) {
if ((info.fd= fopen(info.filename, "r")) != NULL){
int ft, i = 0;
fseek(info.fd, 0, SEEK_END);
ft = ftell(info.fd);
while(i < ft)
{
i++;
fseek(info.fd, -i, SEEK_END);
printf("%c", fgetc(info.fd));
}
printf("\n");
fclose(info.fd);
}
else {
perror(info.filename);
}
return 0;
}

28
include/main.h Normal file
View File

@@ -0,0 +1,28 @@
#ifndef __CHCOUNT_H__
#define __CHCOUNT_H__
#include <stdio.h>
#include <errno.h>
#include <ctype.h>
#include <string.h>
//Function declarations
int ask_file(); // It has no flags, it just prompts for filename
int get_file(char *fileName); // Gets the filename passed on has an argument
int invert_file(void); // Invert the file stored in the variable info.filename
//This are general parameters for the program
struct parameters {
char filename[100]; // Filename where the text is
FILE *fd; // File descriptor for the text file
char version[5]; // Holds the software version
int fileNameSize; // File maximum name size
char help[]; // Help menu to be printed on screen
};
struct parameters info;
#endif

BIN
inverT Normal file

Binary file not shown.

65
main.c Normal file
View File

@@ -0,0 +1,65 @@
/**
This program inverts the caracters in a
given text file, using command line arguments
or by prompting the question to the user.
By Joni Silva, 27/05/2022.
*/
#include <main.h>
// Necessary to initalize my struct with all the info
struct parameters info = {
.filename = "EMPTY",
.fd = NULL,
.version = "1.0",
.fileNameSize = 80,
// Below is the variable that olds the text to dislpay for help
.help = "\n\
------------------------------------------------\n\
Usage: ./chcount -c [<some.text.file>]\n\
-help Print help and exit.\n\
-v Print application version and exit.\n\
-i Invert text caracters.\n\
Example: ./chcount -c test.txt\n",
};
int main (int argc, char *argv[]) {
if (argc == 1) {
ask_file();
}
else if (argc == 2) {
if (strncmp(argv[1], "-help", 5) == 0) {
printf("%s\n", info.help);
}
else if (strncmp(argv[1], "-v", 2) == 0) {
printf("Version %s\n", info.version);
}
else {
get_file(argv[1]);
}
}
else if (argc == 3) {
if(strncmp(argv[1], "-i", 2) == 0) {
get_file(argv[2]);
}
else {
printf("\nInvalid flag!!!");
printf("%s\n", info.help);
}
}
else {
printf("\nTo many parameters!!!");
printf("%s\n", info.help);
}
return 0;
}

1
text Normal file
View File

@@ -0,0 +1 @@
Murder for a jar of red rum