sadf
This commit is contained in:
parent
1a917de4e9
commit
f414c55608
203
source/main.c
203
source/main.c
@ -15,88 +15,167 @@
|
|||||||
#define STB_DS_IMPLEMENTATION
|
#define STB_DS_IMPLEMENTATION
|
||||||
#include "../include/stb_ds.h"
|
#include "../include/stb_ds.h"
|
||||||
|
|
||||||
int main(int ac, char** av, char** envp) {
|
typedef struct sl_insert {
|
||||||
(void)ac;
|
char *data;
|
||||||
(void)av;
|
size_t lenght;
|
||||||
(void)envp;
|
size_t index;
|
||||||
|
} sl_insert_t;
|
||||||
|
|
||||||
|
typedef struct sl_file {
|
||||||
|
FILE *file;
|
||||||
|
char *filename;
|
||||||
|
char *data;
|
||||||
|
size_t size;
|
||||||
|
int pos;//position of the cursor
|
||||||
|
sl_insert_t *ins;
|
||||||
|
size_t ins_number;//number of insert
|
||||||
|
char *ins_alloc;//buffer for all insert data;..not in position order
|
||||||
|
size_t ins_size;//total size of ins blob;
|
||||||
|
size_t ins_capacity;//total cap of ins data;
|
||||||
|
} sl_file_t;
|
||||||
|
|
||||||
|
typedef struct sl_cursor {
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
} sl_cursor_t;
|
||||||
|
|
||||||
|
typedef struct sl_buffer{
|
||||||
|
sl_cursor_t cursor;
|
||||||
|
WINDOW *win;
|
||||||
|
int height;
|
||||||
|
int width;
|
||||||
|
int y;
|
||||||
|
int x;
|
||||||
|
//other things to put in a focused buffer
|
||||||
|
} sl_buffer_t;
|
||||||
|
|
||||||
|
void file_save(sl_file *file) {
|
||||||
|
int size = file->ins_size + file->size;
|
||||||
|
char*new_data = calloc(size + 1);
|
||||||
|
assert(new_data);//may need to remove to not crash if an error appen
|
||||||
|
for (size_t i = 0; i < file->ins_number; i++) {
|
||||||
|
memcpy((void*)(new_data + file->ins[i].index), file->ins[i].data, file->ins[i].length);
|
||||||
|
|
||||||
|
}
|
||||||
|
//then how should i handle first file fragmenttion ?
|
||||||
|
size_t n = 0;
|
||||||
|
size_t k = 0;
|
||||||
|
for (size_t i = 0, k = 0; i < size && k < file->size; i += len) {
|
||||||
|
size_t len = file->ins[n]
|
||||||
|
memcpy(new_data + i, file->data + k += , fil);
|
||||||
|
k+= file->ins[n].index
|
||||||
|
n++
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
sl_buffer_t sl_buffer_create(int height, int width, int y, int x) {
|
||||||
|
sl_buffer_t ret = {0};
|
||||||
|
ret.cursor.x = 1;
|
||||||
|
ret.cursor.y = 1;
|
||||||
|
ret.height = height;
|
||||||
|
ret.width = width;
|
||||||
|
ret.y = y;
|
||||||
|
ret.x = x;
|
||||||
|
ret.win = subwin(stdscr, height, width, y, x);
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_help() {
|
||||||
|
printf("SterlingEditor Version %i.%i\n", 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int parse_args(int ac, char** av) {
|
||||||
|
for (int i = 1; i <= ac; i++) {
|
||||||
|
if (av[i]) {
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print_help();
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sl_buffer_update(sl_buffer_t *buff) {
|
||||||
|
if (buff->cursor.x < 1) buff->cursor.x = 1;
|
||||||
|
if (buff->cursor.x > COLS / 2 - 2) buff->cursor.x = COLS / 2 - 2;
|
||||||
|
if (buff->cursor.y < 1) buff->cursor.y = 1;
|
||||||
|
if (buff->cursor.y > LINES - 2) buff->cursor.y = LINES - 2;
|
||||||
|
wmove(buff->win, buff->cursor.y, buff->cursor.x);
|
||||||
|
wrefresh(buff->win);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sl_buffer_set_context(sl_buffer_t *buff, int idx) {
|
||||||
|
keypad(buff[idx].win, TRUE);
|
||||||
|
wmove(buff[idx].win, buff[idx].cursor.y, buff[idx].cursor.x);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int ac, char** av, char** envp) {
|
||||||
|
(void)envp;
|
||||||
|
bool running = true;
|
||||||
|
sl_buffer_t *buffers = NULL;
|
||||||
|
int current = 0;
|
||||||
|
if (parse_args(ac, av) == -1) {
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
if (!setlocale(LC_ALL, "")) {
|
if (!setlocale(LC_ALL, "")) {
|
||||||
printf("Unable to set local attributes from environment\n");
|
printf("Unable to set local attributes from environment\n");
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
bool running = true;
|
|
||||||
WINDOW* editor = 0;
|
|
||||||
WINDOW* edit_tab = 0;
|
|
||||||
WINDOW* edit_ruler = 0;
|
|
||||||
WINDOW* term = 0;
|
|
||||||
WINDOW* document = 0;
|
|
||||||
WINDOW* doc_tab = 0;
|
|
||||||
WINDOW* doc_ruler = 0;
|
|
||||||
initscr();
|
initscr();
|
||||||
cbreak();
|
cbreak();
|
||||||
noecho();
|
|
||||||
noqiflush();
|
noqiflush();
|
||||||
keypad(stdscr, TRUE);
|
keypad(stdscr, TRUE);
|
||||||
|
noecho();
|
||||||
start_color();
|
start_color();
|
||||||
timeout(20);
|
timeout(20);
|
||||||
|
//curs_set(1);
|
||||||
//nodelay(stdscr, TRUE);
|
//nodelay(stdscr, TRUE);
|
||||||
|
|
||||||
printf("%ix%i\n", LINES, COLS);
|
|
||||||
//2line for tab
|
//2line for tab
|
||||||
//1 colomn for middle sep
|
//1 colomn for middle sep
|
||||||
//1 line for terminput
|
//1 line for terminput
|
||||||
//2 line for sep
|
//2 line for sep
|
||||||
|
|
||||||
edit_tab = subwin(stdscr, 1, COLS / 2, 0, 0);
|
arrpush(buffers, sl_buffer_create(LINES, COLS >> 1, 0, 0));//editor
|
||||||
editor = subwin(stdscr, LINES - 4, COLS / 2, 2, 0);
|
arrpush(buffers, sl_buffer_create(LINES, COLS >> 1, 0, COLS >> 1));//document
|
||||||
edit_ruler = subwin(stdscr, 1, COLS / 2, 1, 0);
|
sl_buffer_set_context(buffers, current);
|
||||||
|
|
||||||
doc_tab = subwin(stdscr, 1, COLS / 2, 0, COLS / 2);
|
|
||||||
document = subwin(stdscr, LINES - 7, COLS / 2, 2, COLS / 2);
|
|
||||||
doc_ruler = subwin(stdscr, 1, COLS / 2, LINES - 2, COLS / 2);
|
|
||||||
|
|
||||||
term = subwin(stdscr, 3, COLS - COLS % 2, LINES - 3, 0);
|
for (int i = 0; i < arrlen(buffers); i++) {
|
||||||
|
box(buffers[i].win, ACS_VLINE, ACS_HLINE);
|
||||||
//terminfo();
|
|
||||||
|
|
||||||
rl_initialize();
|
|
||||||
rl_inhibit_completion = true;//non zero = bypasscompletion
|
|
||||||
//now need to have all my "window"
|
|
||||||
int i = 0;
|
|
||||||
while (running) {
|
|
||||||
clear();
|
|
||||||
wborder(editor, '|', '|', '-', '-', '-', '-', '-', '-');
|
|
||||||
wborder(document, '|', '|', '-', '-', '-', '-', '-', '-');
|
|
||||||
//box(editor, ACS_VLINE, ACS_HLINE);
|
|
||||||
//box(document, ACS_VLINE, ACS_HLINE);
|
|
||||||
box(term, ACS_VLINE, ACS_HLINE);
|
|
||||||
|
|
||||||
|
|
||||||
refresh();
|
|
||||||
wrefresh(edit_tab);
|
|
||||||
wrefresh(editor);
|
|
||||||
wrefresh(edit_ruler);
|
|
||||||
wrefresh(doc_tab);
|
|
||||||
wrefresh(document);
|
|
||||||
wrefresh(doc_ruler);
|
|
||||||
wrefresh(term);
|
|
||||||
//move();
|
|
||||||
int ch = getch();
|
|
||||||
if (ch != ERR) {
|
|
||||||
//process
|
|
||||||
running = false;
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
refresh();
|
||||||
|
// rl_initialize();
|
||||||
|
// rl_inhibit_completion = true;//non zero = bypasscompletion
|
||||||
|
int ch = 0;
|
||||||
|
while (running) {
|
||||||
|
ch = wgetch(buffers[current].win);
|
||||||
|
box(buffers[current].win, ACS_VLINE, ACS_HLINE);
|
||||||
|
switch (ch) {
|
||||||
|
case ('q'): {
|
||||||
|
running = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case (KEY_LEFT): {
|
||||||
|
buffers[current].cursor.x--;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case (KEY_RIGHT): {
|
||||||
|
buffers[current].cursor.x++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case (KEY_UP): {
|
||||||
|
buffers[current].cursor.y--;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case (KEY_DOWN): {
|
||||||
|
buffers[current].cursor.y++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
sl_buffer_update(&buffers[current]);
|
||||||
|
}
|
||||||
|
arrfree(buffers);
|
||||||
endwin();
|
endwin();
|
||||||
/* free(editor);
|
|
||||||
free(edit_tab);
|
|
||||||
free(edit_ruler);
|
|
||||||
free(term);
|
|
||||||
free(document);
|
|
||||||
free(doc_tab);
|
|
||||||
free(doc_ruler);
|
|
||||||
*/
|
|
||||||
printf("number of loop:%i\n", i);
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user