Updated plugins
This commit is contained in:
parent
d49af89fbc
commit
95201c660c
12 changed files with 327 additions and 133 deletions
5
Makefile
5
Makefile
|
@ -9,8 +9,11 @@ all: install
|
||||||
$(CC) src/utils.c -o utils.o -c
|
$(CC) src/utils.c -o utils.o -c
|
||||||
$(CC) src/commands.c -o commands.o -c
|
$(CC) src/commands.c -o commands.o -c
|
||||||
$(CC) src/editor.c -o editor.o -c
|
$(CC) src/editor.c -o editor.o -c
|
||||||
$(CC) $(FLAGS) -o $(EXE) src/ped.c tty.o utils.o commands.o editor.o
|
$(CC) src/session.c -o session.o -c
|
||||||
|
$(CC) src/plugins.c -o plugins.o -c
|
||||||
|
$(CC) $(FLAGS) -o $(EXE) src/ped.c tty.o utils.o commands.o editor.o session.o plugins.o
|
||||||
gcc src/plugins/zifty.c -o zifty.o -shared -fPIC
|
gcc src/plugins/zifty.c -o zifty.o -shared -fPIC
|
||||||
|
gcc src/plugins/reload.c -o reload.o -shared -fPIC
|
||||||
|
|
||||||
test: clean all
|
test: clean all
|
||||||
./bin/ped test
|
./bin/ped test
|
||||||
|
|
|
@ -42,7 +42,7 @@ char** getCommand(char* str)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void runCommand(char* str, struct Session* session)
|
void runCommand(char* str, struct Editor* editor)
|
||||||
{
|
{
|
||||||
/* TODO: Split the string by first space */
|
/* TODO: Split the string by first space */
|
||||||
/* TODO: First item is command, after space is args */
|
/* TODO: First item is command, after space is args */
|
||||||
|
@ -63,16 +63,17 @@ void runCommand(char* str, struct Session* session)
|
||||||
}
|
}
|
||||||
else if(strcmp(command, "quit") == 0)
|
else if(strcmp(command, "quit") == 0)
|
||||||
{
|
{
|
||||||
session->isActive = 0;
|
editor->currentSession->isActive = 0;
|
||||||
}
|
}
|
||||||
else if(strcmp(command, "w") == 0)
|
else if(strcmp(command, "w") == 0)
|
||||||
{
|
{
|
||||||
write(session->fd, session->data, session->size);
|
write(editor->currentSession->fd, editor->currentSession->data, editor->currentSession->size);
|
||||||
}
|
}
|
||||||
/* TODO: Replace with file mapping */
|
/* TODO: Replace with file mapping */
|
||||||
/* This tries to load the object file provided */
|
/* This tries to load the object file provided */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
//return;
|
||||||
/* Generate the object file name */
|
/* Generate the object file name */
|
||||||
char* objectFile = malloc(strlen(str)+3);
|
char* objectFile = malloc(strlen(str)+3);
|
||||||
strcpy(objectFile, command);
|
strcpy(objectFile, command);
|
||||||
|
@ -82,11 +83,11 @@ void runCommand(char* str, struct Session* session)
|
||||||
|
|
||||||
if(dynObjHandle)
|
if(dynObjHandle)
|
||||||
{
|
{
|
||||||
void (*funcPtr)(struct Session*) = dlsym(dynObjHandle, "dispatch");
|
unsigned char (*funcPtr)(struct Editor*, char*, void*) = dlsym(dynObjHandle, "dispatch");
|
||||||
|
|
||||||
if(funcPtr)
|
if(funcPtr)
|
||||||
{
|
{
|
||||||
funcPtr(session);
|
funcPtr(editor, "onCommand", NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
118
src/ped.c
118
src/ped.c
|
@ -24,6 +24,7 @@ int main(int argc, char** args)
|
||||||
{
|
{
|
||||||
/* Create a new editor instance */
|
/* Create a new editor instance */
|
||||||
newEditor2(&editor);
|
newEditor2(&editor);
|
||||||
|
loadPlugins(&editor);
|
||||||
|
|
||||||
/* Make sure we have only two arguments */
|
/* Make sure we have only two arguments */
|
||||||
if(argc == 2)
|
if(argc == 2)
|
||||||
|
@ -42,7 +43,7 @@ int main(int argc, char** args)
|
||||||
if(session)
|
if(session)
|
||||||
{
|
{
|
||||||
/* Open the editor */
|
/* Open the editor */
|
||||||
newEditor(session);
|
newEditor();
|
||||||
|
|
||||||
/* Free the session */
|
/* Free the session */
|
||||||
free(session);
|
free(session);
|
||||||
|
@ -154,23 +155,18 @@ void statusDraw(struct Session* session)
|
||||||
ttyPut(session, 13);
|
ttyPut(session, 13);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadPlugins()
|
void runDrawPlugins()
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void runDrawPlugins(struct Session* session)
|
|
||||||
{
|
{
|
||||||
/* TODO: This is to load zifty, this should be a loop form a file */
|
/* TODO: This is to load zifty, this should be a loop form a file */
|
||||||
void* dynObjHandle = dlopen("zifty.o", RTLD_NOW);
|
void* dynObjHandle = dlopen("zifty.o", RTLD_NOW);
|
||||||
void (*funcPtr)(struct Session*) = dlsym(dynObjHandle, "dispatch");
|
unsigned char (*funcPtr)(struct Editor*, char*, void*) = dlsym(dynObjHandle, "dispatch");
|
||||||
funcPtr(session);
|
funcPtr(&editor, "onRedraw", NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void redraw(struct Session* session)
|
void redraw(struct Session* session)
|
||||||
{
|
{
|
||||||
/* Run all plugins that run on draw */
|
/* Run all plugins that run on draw */
|
||||||
runDrawPlugins(session);
|
runDrawPlugins();
|
||||||
|
|
||||||
/* Draw the status line */
|
/* Draw the status line */
|
||||||
statusDraw(session);
|
statusDraw(session);
|
||||||
|
@ -269,8 +265,11 @@ void ring()
|
||||||
output(&bell, 1);
|
output(&bell, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void newEditor(struct Session* session)
|
void newEditor()
|
||||||
{
|
{
|
||||||
|
/* The current session */
|
||||||
|
struct Session* session = editor.currentSession;
|
||||||
|
|
||||||
/* Setup the tty */
|
/* Setup the tty */
|
||||||
startTTY();
|
startTTY();
|
||||||
|
|
||||||
|
@ -357,38 +356,43 @@ void newEditor(struct Session* session)
|
||||||
/* Ctrl+D is command key */
|
/* Ctrl+D is command key */
|
||||||
else if(s == 4)
|
else if(s == 4)
|
||||||
{
|
{
|
||||||
|
/* Allocate a byte */
|
||||||
|
char* str = malloc(1);
|
||||||
|
|
||||||
char* str = malloc(20);
|
/* Receive input till next Ctrl+D */
|
||||||
*str = 0;
|
|
||||||
unsigned int i = 0;
|
unsigned int i = 0;
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
|
/* Get next character */
|
||||||
s=getChar();
|
s=getChar();
|
||||||
|
|
||||||
if(s==4)
|
if(s==4)
|
||||||
{
|
{
|
||||||
|
/* Null terminate the string */
|
||||||
|
*(str+i) = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
strncat(str, &s, 1);
|
/* Append new character */
|
||||||
|
*(str+i) = s;
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
if(i==20)
|
str = realloc(str, i+1);
|
||||||
{
|
|
||||||
str=realloc(str, i+20);
|
|
||||||
i=0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//output(str,strlen(str));
|
//output(str,strlen(str));
|
||||||
|
|
||||||
if(strlen(str) > 0)
|
if(strlen(str) > 0)
|
||||||
{
|
{
|
||||||
runCommand(str, session);
|
runCommand(str, &editor);
|
||||||
|
}
|
||||||
|
if(str==0)
|
||||||
|
{
|
||||||
|
/* TODO: Bug here, this if statement never runs and is useless */
|
||||||
|
free(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(str);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -439,8 +443,8 @@ void newEditor(struct Session* session)
|
||||||
redraw(session);
|
redraw(session);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* bye = "\nBye mate!\n";
|
//char* bye = "\nBye mate!\n";
|
||||||
output(bye, strlen(bye));
|
//output(bye, strlen(bye));
|
||||||
|
|
||||||
/* Clean up commands */
|
/* Clean up commands */
|
||||||
|
|
||||||
|
@ -457,71 +461,3 @@ struct TTY* newTTY()
|
||||||
|
|
||||||
return tty;
|
return tty;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Session* newSession(char* filename)
|
|
||||||
{
|
|
||||||
/* Allocate the session */
|
|
||||||
struct Session* session = malloc(sizeof(struct Session));
|
|
||||||
|
|
||||||
/* Make sure it allocated */
|
|
||||||
if(session)
|
|
||||||
{
|
|
||||||
/* Open the file */
|
|
||||||
int fd = open(filename, O_CREAT|O_RDWR);
|
|
||||||
|
|
||||||
if(fd >= 0)
|
|
||||||
{
|
|
||||||
/* Set the file descriptor */
|
|
||||||
session->fd = fd;
|
|
||||||
|
|
||||||
/* Set name */
|
|
||||||
session->name = filename;
|
|
||||||
|
|
||||||
/* Get the stat struct */
|
|
||||||
struct stat statStruct;
|
|
||||||
|
|
||||||
/* Fill stat struct */
|
|
||||||
fstat(fd, &statStruct);
|
|
||||||
|
|
||||||
/* Set the initial size */
|
|
||||||
session->size = statStruct.st_size;
|
|
||||||
|
|
||||||
/* Allocate initial space for buffer */
|
|
||||||
/* TODO: Remove and be dynamic */
|
|
||||||
session->data = malloc(session->size+69);
|
|
||||||
|
|
||||||
/* Set the initial characters */
|
|
||||||
read(fd, session->data, session->size);
|
|
||||||
|
|
||||||
char* temp = malloc(session->size+1);
|
|
||||||
strncpy(temp, session->data, session->size);
|
|
||||||
//printf("%s", temp);
|
|
||||||
|
|
||||||
|
|
||||||
/* TODO: Use xy :: Set initial position to 0 */
|
|
||||||
//session->fileX = session->size;
|
|
||||||
session->fileX = 0;
|
|
||||||
session->fileY = 0;
|
|
||||||
//session->fileY = linefeedCount(session->data, session->size);
|
|
||||||
/* Set the tty */
|
|
||||||
session->teletype = newTTY();
|
|
||||||
//session->teletype->cursorX = session->fileX;
|
|
||||||
|
|
||||||
|
|
||||||
/* Set the session to active */
|
|
||||||
session->isActive = 1;
|
|
||||||
|
|
||||||
/* Set the plugins to 0 */
|
|
||||||
|
|
||||||
|
|
||||||
/* On success, return the pointer to the session */
|
|
||||||
return session;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* On successful malloc, but file failure */
|
|
||||||
free(session);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* On error */
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
11
src/ped.h
11
src/ped.h
|
@ -1,3 +1,10 @@
|
||||||
void output(char *string, unsigned int length);
|
void output(char*, unsigned int);
|
||||||
struct Session *newSession(char*);
|
struct Session *newSession(char*);
|
||||||
void newEditor(struct Session* session);
|
void newEditor();
|
||||||
|
|
||||||
|
void startTTY();
|
||||||
|
void stopTTY();
|
||||||
|
|
||||||
|
char getChar();
|
||||||
|
|
||||||
|
void loadPlugins(struct Editor*);
|
|
@ -1,10 +1,30 @@
|
||||||
|
#include "types.h"
|
||||||
|
#include<unistd.h>
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<fcntl.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Plugins
|
* Plugins
|
||||||
*
|
*
|
||||||
* Manages the plugin system.
|
* Manages the plugin system.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void addPlugin(struct Session* session)
|
void loadPlugins(struct Editor* editor)
|
||||||
|
{
|
||||||
|
/* Look through file ted.conf */
|
||||||
|
int fd = open("ted.conf", O_RDWR);
|
||||||
|
|
||||||
|
if(fd>=0)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void addPlugin(struct Editor* editor, char* pluginName)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,12 +1,12 @@
|
||||||
#include "../types.h"
|
#include "../types.h"
|
||||||
#include<stdio.h>
|
#include<stdio.h>
|
||||||
|
|
||||||
void dispatch(struct Session* session)
|
void dispatch(struct Editor* editor)
|
||||||
{
|
{
|
||||||
//session->position = 5;
|
//session->position = 5;
|
||||||
int g = 1;
|
int g = 1;
|
||||||
g++;
|
g++;
|
||||||
printf("EXAAAAACTLY!\n");
|
printf("EXAAAAACTLasdfhfdjhjfasdhfkjasdhfaskhfdskjhsadfkjY!\n");
|
||||||
session->isActive=0;
|
editor->currentSession->isActive=0;
|
||||||
|
|
||||||
}
|
}
|
45
src/plugins/collide.c
Normal file
45
src/plugins/collide.c
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
#include "../types.h"
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Collide
|
||||||
|
*
|
||||||
|
* Ring the terminal bell when we hit the edge
|
||||||
|
* of the screen.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void dispatch(struct Session* session)
|
||||||
|
{
|
||||||
|
/* Get dimensions */
|
||||||
|
unsigned int columns = session->teletype->columns;
|
||||||
|
unsigned int rows = session->teletype->rows;
|
||||||
|
|
||||||
|
/* General counter */
|
||||||
|
unsigned int i = 0;
|
||||||
|
|
||||||
|
/* STatus line */
|
||||||
|
session->status = malloc(columns);
|
||||||
|
*session->status=0;
|
||||||
|
|
||||||
|
/* Add name */
|
||||||
|
strcat(session->status, "{🐻}️️[");
|
||||||
|
strcat(session->status, session->name);
|
||||||
|
strcat(session->status, "]");
|
||||||
|
|
||||||
|
strcat(session->status, "(");
|
||||||
|
char* temp = malloc(20);
|
||||||
|
sprintf(temp, "%u", session->size);
|
||||||
|
strcat(session->status, temp);
|
||||||
|
strcat(session->status, ")");
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while(i < columns-strlen(session->name)-2-strlen(temp)-2-2-2)
|
||||||
|
{
|
||||||
|
strcat(session->status, "-");
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
//free(temp);
|
||||||
|
}
|
47
src/plugins/reload.c
Normal file
47
src/plugins/reload.c
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
#include "../types.h"
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
#include<unistd.h>
|
||||||
|
#include<fcntl.h>
|
||||||
|
#include<sys/stat.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reload
|
||||||
|
*
|
||||||
|
* Closes the currently open fd, reopens it and
|
||||||
|
* reads from it into the data buffer.
|
||||||
|
*/
|
||||||
|
|
||||||
|
unsigned char dispatch(struct Editor* editor, char* callType, void* args)
|
||||||
|
{
|
||||||
|
if(strcmp(callType, "onCommand") == 0)
|
||||||
|
{
|
||||||
|
/* Close the current file */
|
||||||
|
close(editor->currentSession->fd);
|
||||||
|
|
||||||
|
/* TODO: Error check */
|
||||||
|
|
||||||
|
/* Reopen */
|
||||||
|
editor->currentSession->fd = open(editor->currentSession->name, O_RDWR);
|
||||||
|
|
||||||
|
/* Get the stat struct */
|
||||||
|
struct stat statStruct;
|
||||||
|
|
||||||
|
/* Fill stat struct */
|
||||||
|
fstat(editor->currentSession->fd, &statStruct);
|
||||||
|
|
||||||
|
/* Set the file size */
|
||||||
|
editor->currentSession->size = statStruct.st_size;
|
||||||
|
|
||||||
|
/* Free the old file data */
|
||||||
|
free(editor->currentSession->data);
|
||||||
|
|
||||||
|
/* Allocate new data */
|
||||||
|
editor->currentSession->data = malloc(editor->currentSession->size);
|
||||||
|
|
||||||
|
/* Set the initial characters */
|
||||||
|
read(editor->currentSession->fd, editor->currentSession->data, editor->currentSession->size);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
24
src/plugins/sessions.c
Normal file
24
src/plugins/sessions.c
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
#include "../types.h"
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sessions
|
||||||
|
*
|
||||||
|
* Session management by Tristan and Stephen.
|
||||||
|
*/
|
||||||
|
unsigned char dispatch(struct Editor* editor, char* callType, void* args)
|
||||||
|
{
|
||||||
|
/* Check for what we are being called */
|
||||||
|
if(strcmp(callType, "onCommand") == 0)
|
||||||
|
{
|
||||||
|
/* Get arguments */
|
||||||
|
char** actualArgs = (char**)args;
|
||||||
|
|
||||||
|
/* TODO: Continue here */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
|
@ -10,35 +10,39 @@
|
||||||
* is default as Tristan knows best.
|
* is default as Tristan knows best.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void dispatch(struct Session* session)
|
unsigned char dispatch(struct Editor* editor, char* callType, void* args)
|
||||||
{
|
{
|
||||||
/* Get dimensions */
|
if(strcmp(callType, "onRedraw") == 0)
|
||||||
unsigned int columns = session->teletype->columns;
|
|
||||||
|
|
||||||
/* General counter */
|
|
||||||
unsigned int i = 0;
|
|
||||||
|
|
||||||
/* STatus line */
|
|
||||||
session->status = malloc(columns);
|
|
||||||
*session->status=0;
|
|
||||||
|
|
||||||
/* Add name */
|
|
||||||
strcat(session->status, "{🐻}️️[");
|
|
||||||
strcat(session->status, session->name);
|
|
||||||
strcat(session->status, "]");
|
|
||||||
|
|
||||||
strcat(session->status, "(");
|
|
||||||
char* temp = malloc(20);
|
|
||||||
sprintf(temp, "%u", session->size);
|
|
||||||
strcat(session->status, temp);
|
|
||||||
strcat(session->status, ")");
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
while(i < columns-strlen(session->name)-2-strlen(temp)-2-2-2)
|
|
||||||
{
|
{
|
||||||
strcat(session->status, "-");
|
/* Get dimensions */
|
||||||
i++;
|
unsigned int columns = editor->currentSession->teletype->columns;
|
||||||
|
|
||||||
|
/* General counter */
|
||||||
|
unsigned int i = 0;
|
||||||
|
|
||||||
|
/* STatus line */
|
||||||
|
editor->currentSession->status = malloc(columns);
|
||||||
|
*editor->currentSession->status=0;
|
||||||
|
|
||||||
|
/* Add name */
|
||||||
|
strcat(editor->currentSession->status, "{🐻}️️[");
|
||||||
|
strcat(editor->currentSession->status, editor->currentSession->name);
|
||||||
|
strcat(editor->currentSession->status, "]");
|
||||||
|
|
||||||
|
strcat(editor->currentSession->status, "(");
|
||||||
|
char* temp = malloc(20);
|
||||||
|
sprintf(temp, "%u", editor->currentSession->size);
|
||||||
|
strcat(editor->currentSession->status, temp);
|
||||||
|
strcat(editor->currentSession->status, ")");
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while(i < columns-strlen(editor->currentSession->name)-2-strlen(temp)-2-2-2)
|
||||||
|
{
|
||||||
|
strcat(editor->currentSession->status, "-");
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
//free(temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
//free(temp);
|
|
||||||
}
|
}
|
78
src/session.c
Normal file
78
src/session.c
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
#include<stdlib.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<fcntl.h>
|
||||||
|
#include<sys/stat.h>
|
||||||
|
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocates a new struct Session on the heap
|
||||||
|
* and associates a new file with it and all.
|
||||||
|
*/
|
||||||
|
struct Session* newSession(char* filename)
|
||||||
|
{
|
||||||
|
/* Allocate the session */
|
||||||
|
struct Session* session = malloc(sizeof(struct Session));
|
||||||
|
|
||||||
|
/* Make sure it allocated */
|
||||||
|
if(session)
|
||||||
|
{
|
||||||
|
/* Open the file */
|
||||||
|
int fd = open(filename, O_CREAT|O_RDWR);
|
||||||
|
|
||||||
|
if(fd >= 0)
|
||||||
|
{
|
||||||
|
/* Set the file descriptor */
|
||||||
|
session->fd = fd;
|
||||||
|
|
||||||
|
/* Set name */
|
||||||
|
session->name = filename;
|
||||||
|
|
||||||
|
/* Get the stat struct */
|
||||||
|
struct stat statStruct;
|
||||||
|
|
||||||
|
/* Fill stat struct */
|
||||||
|
fstat(fd, &statStruct);
|
||||||
|
|
||||||
|
/* Set the initial size */
|
||||||
|
session->size = statStruct.st_size;
|
||||||
|
|
||||||
|
/* Allocate initial space for buffer */
|
||||||
|
/* TODO: Remove and be dynamic */
|
||||||
|
session->data = malloc(session->size+69);
|
||||||
|
|
||||||
|
/* Set the initial characters */
|
||||||
|
read(fd, session->data, session->size);
|
||||||
|
|
||||||
|
char* temp = malloc(session->size+1);
|
||||||
|
strncpy(temp, session->data, session->size);
|
||||||
|
//printf("%s", temp);
|
||||||
|
|
||||||
|
|
||||||
|
/* TODO: Use xy :: Set initial position to 0 */
|
||||||
|
//session->fileX = session->size;
|
||||||
|
session->fileX = 0;
|
||||||
|
session->fileY = 0;
|
||||||
|
//session->fileY = linefeedCount(session->data, session->size);
|
||||||
|
/* Set the tty */
|
||||||
|
session->teletype = newTTY();
|
||||||
|
//session->teletype->cursorX = session->fileX;
|
||||||
|
|
||||||
|
|
||||||
|
/* Set the session to active */
|
||||||
|
session->isActive = 1;
|
||||||
|
|
||||||
|
/* Set the plugins to 0 */
|
||||||
|
|
||||||
|
|
||||||
|
/* On success, return the pointer to the session */
|
||||||
|
return session;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* On successful malloc, but file failure */
|
||||||
|
free(session);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* On error */
|
||||||
|
return 0;
|
||||||
|
}
|
29
src/types.h
29
src/types.h
|
@ -27,6 +27,35 @@ struct Plugin
|
||||||
//void (*dispatch)(struct Session*)
|
//void (*dispatch)(struct Session*)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a line as part of a Map
|
||||||
|
*/
|
||||||
|
struct Line
|
||||||
|
{
|
||||||
|
char* data;
|
||||||
|
unsigned int length;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents (x,y) whereby (x,y) exists in file and does not
|
||||||
|
*/
|
||||||
|
struct EditMap
|
||||||
|
{
|
||||||
|
char** flags;
|
||||||
|
unsigned int rows;
|
||||||
|
unsigned int columns;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the mapping of a file to a text editor screen
|
||||||
|
*/
|
||||||
|
struct Map
|
||||||
|
{
|
||||||
|
struct Edit* editMap;
|
||||||
|
struct Line* lines;
|
||||||
|
unsigned int lineCount;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents an open editor session.
|
* Represents an open editor session.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue