seperate some functions into multiple files
This commit is contained in:
1 parent
decc178599
commit
f7d319ad09
14 files changed
+196
-159
No files matched your search
Vendored
+3
-2
@@ -3,6 +3,7 @@
|
|||||||
"*.ejs": "html",
|
"*.ejs": "html",
|
||||||
"ncurses.h": "c",
|
"ncurses.h": "c",
|
||||||
"stdio.h": "c",
|
"stdio.h": "c",
|
||||||
"string.h": "c"
|
"string.h": "c",
|
||||||
|
"cursormovement.h": "c"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,7 +4,7 @@ full:
|
|||||||
|
|
||||||
build:
|
build:
|
||||||
mkdir -p bin
|
mkdir -p bin
|
||||||
gcc -o bin/mte *.c -lncurses
|
gcc -o bin/mte *.c -lncurses -Wall -Wextra -Werror -pedantic -std=c99
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf bin
|
rm -rf bin
|
||||||
@@ -1 +1 @@
|
|||||||
char programName[] = "My Text Editor";
|
char programName[] = "My Text Editor";
|
||||||
@@ -3,4 +3,4 @@
|
|||||||
|
|
||||||
extern char programName[];
|
extern char programName[];
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
#include "cursorMovement.h"
|
||||||
|
#include "openFile.h"
|
||||||
|
#include "lengths.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void cursorMovement(char choice, struct FileData *fileData, char **content, int *across, int *stop)
|
||||||
|
{
|
||||||
|
int cursorLineLength;
|
||||||
|
int lineWidth;
|
||||||
|
switch (choice)
|
||||||
|
{
|
||||||
|
case 3:
|
||||||
|
if ((*fileData).cursor_y > 0)
|
||||||
|
{
|
||||||
|
(*fileData).cursor_y--;
|
||||||
|
int cursorLineLength = lineLength(*content, (*fileData).cursor_y);
|
||||||
|
(*fileData).cursor_x = *across;
|
||||||
|
if ((*fileData).cursor_x > cursorLineLength)
|
||||||
|
{
|
||||||
|
(*fileData).cursor_x = cursorLineLength;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*stop = 1;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if ((*fileData).cursor_y < (*fileData).numLines - 1)
|
||||||
|
{
|
||||||
|
(*fileData).cursor_y++;
|
||||||
|
int cursorLineLength = lineLength(*content, (*fileData).cursor_y);
|
||||||
|
(*fileData).cursor_x = *across;
|
||||||
|
if ((*fileData).cursor_x > cursorLineLength)
|
||||||
|
{
|
||||||
|
(*fileData).cursor_x = cursorLineLength;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*stop = 1;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
if ((*fileData).cursor_x > 0)
|
||||||
|
{
|
||||||
|
(*fileData).cursor_x--;
|
||||||
|
*across = (*fileData).cursor_x;
|
||||||
|
}
|
||||||
|
else if ((*fileData).cursor_y > 0)
|
||||||
|
{
|
||||||
|
(*fileData).cursor_y--;
|
||||||
|
*across = lineLength(*content, (*fileData).cursor_y);
|
||||||
|
}
|
||||||
|
cursorLineLength = lineLength(*content, (*fileData).cursor_y);
|
||||||
|
(*fileData).cursor_x = *across;
|
||||||
|
if ((*fileData).cursor_x > cursorLineLength)
|
||||||
|
{
|
||||||
|
(*fileData).cursor_x = cursorLineLength;
|
||||||
|
}
|
||||||
|
*stop = 1;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
lineWidth = lineLength(*content, (*fileData).cursor_y);
|
||||||
|
if (*across < lineWidth)
|
||||||
|
{
|
||||||
|
*across += 1;
|
||||||
|
}
|
||||||
|
else if ((*fileData).cursor_y < (*fileData).numLines - 1)
|
||||||
|
{
|
||||||
|
*across = 0;
|
||||||
|
(*fileData).cursor_y++;
|
||||||
|
}
|
||||||
|
cursorLineLength = lineLength(*content, (*fileData).cursor_y);
|
||||||
|
(*fileData).cursor_x = *across;
|
||||||
|
if ((*fileData).cursor_x > cursorLineLength)
|
||||||
|
{
|
||||||
|
(*fileData).cursor_x = cursorLineLength;
|
||||||
|
}
|
||||||
|
*stop = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#ifndef CURSORMOVEMENT_H
|
||||||
|
#define CURSORMOVEMENT_H
|
||||||
|
|
||||||
|
#include "openFile.h"
|
||||||
|
|
||||||
|
void cursorMovement(char choice, struct FileData *fileData, char **content, int *across, int *stop);
|
||||||
|
|
||||||
|
#endif // CURSORMOVEMENT_H
|
||||||
Whitespace-only changes.
@@ -0,0 +1,64 @@
|
|||||||
|
#include "lengths.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
struct lineAndCharNum getLineAndCharNum(char *content)
|
||||||
|
{
|
||||||
|
int numLines = 1;
|
||||||
|
int numChars = strlen(content);
|
||||||
|
for (int i = 0; i < numChars; i++)
|
||||||
|
{
|
||||||
|
if (content[i] == '\n')
|
||||||
|
{
|
||||||
|
numLines++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (struct lineAndCharNum){numLines, numChars};
|
||||||
|
}
|
||||||
|
|
||||||
|
int lineLength(char *content, int cursor_y)
|
||||||
|
{
|
||||||
|
int numLines = 0;
|
||||||
|
int numChars = strlen(content);
|
||||||
|
int across = 0;
|
||||||
|
for (int i = 0; i < numChars; i++)
|
||||||
|
{
|
||||||
|
if (content[i] == '\n')
|
||||||
|
{
|
||||||
|
if (numLines == cursor_y)
|
||||||
|
{
|
||||||
|
return across;
|
||||||
|
}
|
||||||
|
numLines++;
|
||||||
|
across = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
across++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return across;
|
||||||
|
}
|
||||||
|
|
||||||
|
int cursorToCharPos(char *content, int cursor_x, int cursor_y)
|
||||||
|
{
|
||||||
|
if (cursor_y == 0)
|
||||||
|
{
|
||||||
|
return cursor_x;
|
||||||
|
}
|
||||||
|
int numLines = 0;
|
||||||
|
int numChars = strlen(content);
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < numChars; i++)
|
||||||
|
{
|
||||||
|
if (content[i] == '\n')
|
||||||
|
{
|
||||||
|
numLines++;
|
||||||
|
if (numLines == cursor_y)
|
||||||
|
{
|
||||||
|
return i + cursor_x + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return i;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
#ifndef LENGTHS_H
|
||||||
|
#define LENGTHS_H
|
||||||
|
|
||||||
|
struct lineAndCharNum
|
||||||
|
{
|
||||||
|
int lineNum;
|
||||||
|
int charNum;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct lineAndCharNum getLineAndCharNum(char *content);
|
||||||
|
|
||||||
|
int lineLength(char *content, int cursor_y);
|
||||||
|
|
||||||
|
int cursorToCharPos(char *content, int cursor_x, int cursor_y);
|
||||||
|
|
||||||
|
#endif // LENGTHS_H
|
||||||
@@ -5,13 +5,15 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "openFile.h"
|
#include "openFile.h"
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
signal(SIGINT, SIG_IGN);
|
||||||
char *path = "";
|
char *path = "";
|
||||||
if (argc > 1)
|
if (argc > 1)
|
||||||
{
|
{
|
||||||
path = argv[1];
|
path = argv[1];
|
||||||
}
|
}
|
||||||
return openFile(path);
|
return openFile(path);
|
||||||
}
|
}
|
||||||
+18
-151
@@ -1,6 +1,8 @@
|
|||||||
#include "openFile.h"
|
#include "openFile.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "render.h"
|
#include "render.h"
|
||||||
|
#include "cursorMovement.h"
|
||||||
|
#include "lengths.h"
|
||||||
|
|
||||||
#include <ncurses.h>
|
#include <ncurses.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -9,85 +11,15 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
|
||||||
struct lineAndCharNum
|
|
||||||
{
|
|
||||||
int lineNum;
|
|
||||||
int charNum;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct lineAndCharNum getLineAndCharNum(char *content)
|
|
||||||
{
|
|
||||||
int numLines = 1;
|
|
||||||
int numChars = strlen(content);
|
|
||||||
for (int i = 0; i < numChars; i++)
|
|
||||||
{
|
|
||||||
if (content[i] == '\n')
|
|
||||||
{
|
|
||||||
numLines++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return (struct lineAndCharNum){numLines, numChars};
|
|
||||||
}
|
|
||||||
|
|
||||||
int lineLength(char *content, int cursor_y)
|
|
||||||
{
|
|
||||||
int numLines = 0;
|
|
||||||
int numChars = strlen(content);
|
|
||||||
int across = 0;
|
|
||||||
for (int i = 0; i < numChars; i++)
|
|
||||||
{
|
|
||||||
if (content[i] == '\n')
|
|
||||||
{
|
|
||||||
if (numLines == cursor_y)
|
|
||||||
{
|
|
||||||
return across;
|
|
||||||
}
|
|
||||||
numLines++;
|
|
||||||
across = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
across++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return across;
|
|
||||||
}
|
|
||||||
|
|
||||||
int cursorToCharPos(char *content, int cursor_x, int cursor_y)
|
|
||||||
{
|
|
||||||
if (cursor_y == 0)
|
|
||||||
{
|
|
||||||
return cursor_x;
|
|
||||||
}
|
|
||||||
int numLines = 0;
|
|
||||||
int numChars = strlen(content);
|
|
||||||
int across = 0;
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < numChars; i++)
|
|
||||||
{
|
|
||||||
if (content[i] == '\n')
|
|
||||||
{
|
|
||||||
numLines++;
|
|
||||||
if (numLines == cursor_y)
|
|
||||||
{
|
|
||||||
return i + cursor_x + 1;
|
|
||||||
}
|
|
||||||
across = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
across++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
int openFile(char *Path)
|
int openFile(char *Path)
|
||||||
{
|
{
|
||||||
char *path = malloc(strlen(Path) + 1);
|
char *path = malloc(strlen(Path) + 1);
|
||||||
|
char *message = malloc(1);
|
||||||
|
message[0] = '\0';
|
||||||
strcpy(path, Path);
|
strcpy(path, Path);
|
||||||
ESCDELAY = 0;
|
ESCDELAY = 0;
|
||||||
char *content = malloc(0);
|
char *content = malloc(1);
|
||||||
|
content[0] = '\0';
|
||||||
|
|
||||||
if (strlen(path) != 0)
|
if (strlen(path) != 0)
|
||||||
{
|
{
|
||||||
@@ -105,6 +37,8 @@ int openFile(char *Path)
|
|||||||
fclose(fptr);
|
fclose(fptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
char *content_COPY = malloc(strlen(content) + 1);
|
||||||
|
strcpy(content_COPY, content);
|
||||||
// path = malloc(100);
|
// path = malloc(100);
|
||||||
int mode = 0;
|
int mode = 0;
|
||||||
char *command = malloc(1);
|
char *command = malloc(1);
|
||||||
@@ -125,9 +59,7 @@ int openFile(char *Path)
|
|||||||
int across = 0;
|
int across = 0;
|
||||||
|
|
||||||
int choice;
|
int choice;
|
||||||
int cursorLineLength;
|
|
||||||
char *newContent;
|
char *newContent;
|
||||||
int lineWidth;
|
|
||||||
int running = 1;
|
int running = 1;
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
@@ -136,73 +68,7 @@ int openFile(char *Path)
|
|||||||
int stop = 0;
|
int stop = 0;
|
||||||
if (mode != 2)
|
if (mode != 2)
|
||||||
{
|
{
|
||||||
switch (choice)
|
cursorMovement(choice, &fileData, &content, &across, &stop);
|
||||||
{
|
|
||||||
case KEY_UP:
|
|
||||||
if (fileData.cursor_y > 0)
|
|
||||||
{
|
|
||||||
fileData.cursor_y--;
|
|
||||||
int cursorLineLength = lineLength(content, fileData.cursor_y);
|
|
||||||
fileData.cursor_x = across;
|
|
||||||
if (fileData.cursor_x > cursorLineLength)
|
|
||||||
{
|
|
||||||
fileData.cursor_x = cursorLineLength;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stop = 1;
|
|
||||||
break;
|
|
||||||
case KEY_DOWN:
|
|
||||||
if (fileData.cursor_y < fileData.numLines - 1)
|
|
||||||
{
|
|
||||||
fileData.cursor_y++;
|
|
||||||
int cursorLineLength = lineLength(content, fileData.cursor_y);
|
|
||||||
fileData.cursor_x = across;
|
|
||||||
if (fileData.cursor_x > cursorLineLength)
|
|
||||||
{
|
|
||||||
fileData.cursor_x = cursorLineLength;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stop = 1;
|
|
||||||
break;
|
|
||||||
case KEY_LEFT:
|
|
||||||
if (fileData.cursor_x > 0)
|
|
||||||
{
|
|
||||||
fileData.cursor_x--;
|
|
||||||
across = fileData.cursor_x;
|
|
||||||
}
|
|
||||||
else if (fileData.cursor_y > 0)
|
|
||||||
{
|
|
||||||
fileData.cursor_y--;
|
|
||||||
across = lineLength(content, fileData.cursor_y);
|
|
||||||
}
|
|
||||||
cursorLineLength = lineLength(content, fileData.cursor_y);
|
|
||||||
fileData.cursor_x = across;
|
|
||||||
if (fileData.cursor_x > cursorLineLength)
|
|
||||||
{
|
|
||||||
fileData.cursor_x = cursorLineLength;
|
|
||||||
}
|
|
||||||
stop = 1;
|
|
||||||
break;
|
|
||||||
case KEY_RIGHT:
|
|
||||||
lineWidth = lineLength(content, fileData.cursor_y);
|
|
||||||
if (across < lineWidth)
|
|
||||||
{
|
|
||||||
across++;
|
|
||||||
}
|
|
||||||
else if (fileData.cursor_y < fileData.numLines - 1)
|
|
||||||
{
|
|
||||||
across = 0;
|
|
||||||
fileData.cursor_y++;
|
|
||||||
}
|
|
||||||
cursorLineLength = lineLength(content, fileData.cursor_y);
|
|
||||||
fileData.cursor_x = across;
|
|
||||||
if (fileData.cursor_x > cursorLineLength)
|
|
||||||
{
|
|
||||||
fileData.cursor_x = cursorLineLength;
|
|
||||||
}
|
|
||||||
stop = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (!stop)
|
if (!stop)
|
||||||
{
|
{
|
||||||
@@ -281,11 +147,10 @@ int openFile(char *Path)
|
|||||||
if (strlen(content) > 0)
|
if (strlen(content) > 0)
|
||||||
{
|
{
|
||||||
int cursorPos = cursorToCharPos(content, fileData.cursor_x, fileData.cursor_y);
|
int cursorPos = cursorToCharPos(content, fileData.cursor_x, fileData.cursor_y);
|
||||||
if (cursorPos == strlen(content))
|
if (cursorPos == (int)strlen(content))
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
int length = lineLength(content, fileData.cursor_y);
|
|
||||||
char *newContent = malloc(strlen(content));
|
char *newContent = malloc(strlen(content));
|
||||||
strncpy(newContent, content, cursorPos);
|
strncpy(newContent, content, cursorPos);
|
||||||
strncpy(newContent + cursorPos, content + cursorPos + 1, strlen(content) - cursorPos);
|
strncpy(newContent + cursorPos, content + cursorPos + 1, strlen(content) - cursorPos);
|
||||||
@@ -353,18 +218,18 @@ int openFile(char *Path)
|
|||||||
case 's':
|
case 's':
|
||||||
if (strlen(command) > 2)
|
if (strlen(command) > 2)
|
||||||
{
|
{
|
||||||
char *newPath = malloc(strlen(command) - 2);
|
path = realloc(path, strlen(command) - 2);
|
||||||
strncpy(newPath, command + 2, strlen(command) - 2);
|
strncpy(path, command + 2, strlen(command) - 2);
|
||||||
newPath[strlen(command) - 2] = '\0';
|
path[strlen(command) - 2] = '\0';
|
||||||
FILE *fptr;
|
FILE *fptr;
|
||||||
fptr = fopen(newPath, "w");
|
fptr = fopen(path, "w");
|
||||||
if (fptr != NULL)
|
if (fptr != NULL)
|
||||||
{
|
{
|
||||||
fwrite(content, 1, strlen(content), fptr);
|
fwrite(content, 1, strlen(content), fptr);
|
||||||
fclose(fptr);
|
fclose(fptr);
|
||||||
|
content_COPY = realloc(content_COPY, strlen(content) + 1);
|
||||||
|
strcpy(content_COPY, content);
|
||||||
}
|
}
|
||||||
free(path);
|
|
||||||
path = newPath;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'o':
|
case 'o':
|
||||||
@@ -466,7 +331,9 @@ int openFile(char *Path)
|
|||||||
|
|
||||||
free(content);
|
free(content);
|
||||||
free(command);
|
free(command);
|
||||||
|
free(content_COPY);
|
||||||
free(path);
|
free(path);
|
||||||
|
free(message);
|
||||||
// Clean up and exit ncurses
|
// Clean up and exit ncurses
|
||||||
endwin();
|
endwin();
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -19,4 +19,4 @@ struct FileData
|
|||||||
// Function to open a file
|
// Function to open a file
|
||||||
int openFile(char *path);
|
int openFile(char *path);
|
||||||
|
|
||||||
#endif // OPENFILE_H
|
#endif // OPENFILE_H
|
||||||
Reference in new issue
Block a user