|
|
@@ -0,0 +1,155 @@ |
|
|
|
#include <xolatile/xyntax.h> |
|
|
|
#include <xolatile/xyntax.c> |
|
|
|
#include <xolatile/xurses.h> |
|
|
|
#include <xolatile/xurses.c> |
|
|
|
|
|
|
|
static int active = 1; |
|
|
|
static char prompt [144] = ""; |
|
|
|
|
|
|
|
static int command_count = 0; |
|
|
|
static int * command_copy = NULL; |
|
|
|
static char * * command_nick = NULL; |
|
|
|
static char * * command_name = NULL; |
|
|
|
static char * command_argument = NULL; |
|
|
|
static void (* * command_function) (void) = NULL; |
|
|
|
|
|
|
|
static void command_define (int copy, char * nick, char * name, void (* function) (void)) { |
|
|
|
command_copy = reallocate (command_copy, (command_count + 1) * (int) sizeof (* command_copy)); |
|
|
|
command_nick = reallocate (command_nick, (command_count + 1) * (int) sizeof (* command_nick)); |
|
|
|
command_name = reallocate (command_name, (command_count + 1) * (int) sizeof (* command_name)); |
|
|
|
command_function = reallocate (command_function, (command_count + 1) * (int) sizeof (* command_function)); |
|
|
|
|
|
|
|
command_copy [command_count] = copy; |
|
|
|
command_function [command_count] = function; |
|
|
|
|
|
|
|
command_nick [command_count] = allocate (string_length (nick) + 1); |
|
|
|
command_name [command_count] = allocate (string_length (name) + 1); |
|
|
|
|
|
|
|
string_copy (command_nick [command_count], nick); |
|
|
|
string_copy (command_name [command_count], name); |
|
|
|
|
|
|
|
++command_count; |
|
|
|
} |
|
|
|
|
|
|
|
static void echo_help (void) { |
|
|
|
echo ("-h --help | Print help information to standard output.\n"); |
|
|
|
echo ("-v --version | Print version information to standard output.\n"); |
|
|
|
echo ("-l --license | Print license information to standard output.\n"); |
|
|
|
} |
|
|
|
|
|
|
|
static void echo_version (void) { |
|
|
|
echo ("xd : Non-standard text editor (v6.6.6)\n"); |
|
|
|
} |
|
|
|
|
|
|
|
static void echo_license (void) { |
|
|
|
echo ("xd : Non-standard text editor (GNU/GPLv3)\n"); |
|
|
|
} |
|
|
|
|
|
|
|
static void quit (void) { |
|
|
|
active = 0; |
|
|
|
} |
|
|
|
|
|
|
|
static void echoes (void) { |
|
|
|
int offset = 0; |
|
|
|
int index = 0; |
|
|
|
int length = 0; |
|
|
|
|
|
|
|
if (file_list_active >= file_list_count) { |
|
|
|
echo ("Unknown active file (out of range)...\n"); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if (file_list_data [file_list_active] == NULL) { |
|
|
|
echo ("Null pointer for file data...\n"); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
for (offset = 0; file_list_data [file_list_active] [offset] != '\0'; offset += length) { |
|
|
|
syntax_select (& file_list_data [file_list_active] [offset], & index, & length); |
|
|
|
|
|
|
|
if (index >= syntax_count) { |
|
|
|
curses_style (EFFECT_NORMAL, COLOUR_WHITE); |
|
|
|
} else { |
|
|
|
curses_style (syntax_effect [index], syntax_colour [index]); |
|
|
|
} |
|
|
|
|
|
|
|
out (& file_list_data [file_list_active] [offset], length); |
|
|
|
|
|
|
|
curses_style (-1, -1); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static void import (void) { |
|
|
|
echo ("Importing file \""); |
|
|
|
echo (command_argument); |
|
|
|
echo ("\"...\n"); |
|
|
|
|
|
|
|
file_list_import (command_argument); |
|
|
|
} |
|
|
|
|
|
|
|
int main (int argc, char * * argv) { |
|
|
|
int command_index; |
|
|
|
|
|
|
|
argument_define ("-h", "--help", echo_help); |
|
|
|
argument_define ("-v", "--version", echo_version); |
|
|
|
argument_define ("-l", "--license", echo_license); |
|
|
|
|
|
|
|
argument_select (argc, argv); |
|
|
|
|
|
|
|
command_define (0, "q", "quit", quit); |
|
|
|
command_define (0, "e", "echo", echoes); |
|
|
|
command_define (1, "o", "open", import); |
|
|
|
|
|
|
|
do { |
|
|
|
int index; |
|
|
|
|
|
|
|
command_index = -1; |
|
|
|
|
|
|
|
string_delete (prompt, (int) sizeof (prompt)); |
|
|
|
|
|
|
|
in (prompt, (int) sizeof (prompt)); |
|
|
|
|
|
|
|
if (prompt [0] == '`') { |
|
|
|
echo ("Executing shell command (this is so fucking unsafe I'm almost ashamed)...\n"); |
|
|
|
(void) system (& prompt [1]); |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
(void) string_split_space (prompt); |
|
|
|
|
|
|
|
for (index = 0; index != command_count; ++index) { |
|
|
|
/*if ((string_compare_limit (prompt, command_nick [index], string_length (command_nick [index])) != 0) |
|
|
|
|| (string_compare_limit (prompt, command_name [index], string_length (command_name [index])) != 0)) {*/ |
|
|
|
if ((string_compare (prompt, command_nick [index]) != 0) |
|
|
|
|| (string_compare (prompt, command_name [index]) != 0)) { |
|
|
|
command_index = index; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (command_copy [command_index] != 0) { |
|
|
|
command_argument = & prompt [string_length (prompt) + 1]; |
|
|
|
} |
|
|
|
|
|
|
|
if (command_index != -1) { |
|
|
|
command_function [command_index] (); |
|
|
|
} else { |
|
|
|
echo ("Unknown command!\n"); |
|
|
|
} |
|
|
|
} while (active != 0); |
|
|
|
|
|
|
|
file_list_delete (); |
|
|
|
|
|
|
|
for (command_index = 0; command_index != command_count; ++command_index) { |
|
|
|
command_nick [command_index] = deallocate (command_nick [command_index]); |
|
|
|
command_name [command_index] = deallocate (command_name [command_index]); |
|
|
|
} |
|
|
|
|
|
|
|
command_copy = deallocate (command_copy); |
|
|
|
command_nick = deallocate (command_nick); |
|
|
|
command_name = deallocate (command_name); |
|
|
|
command_function = deallocate (command_function); |
|
|
|
|
|
|
|
argument_delete (); |
|
|
|
|
|
|
|
return (EXIT_SUCCESS); |
|
|
|
} |