From 0f2314edac42a23e6e732be22c128395defbbd2f Mon Sep 17 00:00:00 2001 From: Andrew Pamment Date: Tue, 28 Mar 2017 19:47:41 +1000 Subject: [PATCH] More work on ccenter --- utils/ccenter/Makefile | 2 +- utils/ccenter/ccenter.h | 1 + utils/ccenter/main.c | 42 +++++++---- utils/ccenter/textfiles.c | 142 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 172 insertions(+), 15 deletions(-) create mode 100644 utils/ccenter/textfiles.c diff --git a/utils/ccenter/Makefile b/utils/ccenter/Makefile index 929a947..847b8ac 100644 --- a/utils/ccenter/Makefile +++ b/utils/ccenter/Makefile @@ -26,7 +26,7 @@ CC=cc CFLAGS=-I/usr/local/include DEPS = main.c -OBJ = main.o load_ini.o systemconfig.o systempaths.o mailconfs.o mailareas.o filedirs.o filesubs.o ../../inih/ini.o +OBJ = main.o load_ini.o systemconfig.o systempaths.o mailconfs.o mailareas.o filedirs.o filesubs.o textfiles.o ../../inih/ini.o %.o: %.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS) -I../../deps/cdk-5.0-20161210/include/ diff --git a/utils/ccenter/ccenter.h b/utils/ccenter/ccenter.h index 3102c83..cce25fa 100644 --- a/utils/ccenter/ccenter.h +++ b/utils/ccenter/ccenter.h @@ -178,4 +178,5 @@ extern void mail_conferences(); extern void edit_mail_areas(int confer); extern void file_directories(); extern void edit_file_subdirs(int fdir); +extern void textfiles(); #endif diff --git a/utils/ccenter/main.c b/utils/ccenter/main.c index 797f290..c63cbaa 100644 --- a/utils/ccenter/main.c +++ b/utils/ccenter/main.c @@ -46,17 +46,22 @@ int main(int argc, char **argv) { int selection; int doexit = 0; char *menuItems[MAX_MENU_ITEMS][MAX_SUB_ITEMS]; - int menuLength[] = {7, 2}; + int menuLength[] = {2, 9, 2}; menuItems[0][0] = strdup("Main"); - menuItems[0][1] = strdup("System Config"); - menuItems[0][2] = strdup("System Paths"); - menuItems[0][3] = strdup("Mail Conferences"); - menuItems[0][4] = strdup("File Directories"); - menuItems[0][5] = strdup("Text Files"); - menuItems[0][6] = strdup("Exit"); - menuItems[1][0] = strdup("Misc"); - menuItems[1][1] = strdup("About"); - int locations[2] = {LEFT, RIGHT}; + menuItems[0][1] = strdup("Exit"); + menuItems[1][0] = strdup("Configuration"); + menuItems[1][1] = strdup("System Config"); + menuItems[1][2] = strdup("System Paths"); + menuItems[1][3] = strdup("Mail Conferences"); + menuItems[1][4] = strdup("File Directories"); + menuItems[1][5] = strdup("Text Files"); + menuItems[1][6] = strdup("Archivers"); + menuItems[1][7] = strdup("Protocols"); + menuItems[1][8] = strdup("Doors"); + menuItems[2][0] = strdup("Misc"); + menuItems[2][1] = strdup("About"); + + int locations[3] = {LEFT, LEFT, RIGHT}; CDKparseParams(argc, argv, ¶ms, "c:" CDK_CLI_PARAMS); if (!load_ini_file(CDKparamString (¶ms, 'c'))) { fprintf(stderr, "Error opening ini file: %s\n", CDKparamString (¶ms, 'c')); @@ -69,7 +74,7 @@ int main(int argc, char **argv) { displayLabel(); - mainMenu = newCDKMenu(cdkscreen, menuItems, 2, menuLength, locations, TOP, A_NORMAL, A_NORMAL); + mainMenu = newCDKMenu(cdkscreen, menuItems, 3, menuLength, locations, TOP, A_NORMAL, A_NORMAL); setCDKMenuTitleHighlight(mainMenu, A_STANDOUT); setCDKMenuSubTitleHighlight(mainMenu, A_STANDOUT); @@ -80,6 +85,13 @@ int main(int argc, char **argv) { } else if (mainMenu->exitType == vNORMAL) { switch(selection / 100) { case 0: + switch (selection % 100) { + case 5: + doexit = 1; + break; + } + break; + case 1: switch (selection % 100) { case 0: system_config(); @@ -93,12 +105,14 @@ int main(int argc, char **argv) { case 3: file_directories(); break; - case 5: - doexit = 1; + case 4: + textfiles(); + break; + default: break; } break; - case 1: + case 2: switch (selection % 100) { case 0: displayAbout(); diff --git a/utils/ccenter/textfiles.c b/utils/ccenter/textfiles.c new file mode 100644 index 0000000..f811db1 --- /dev/null +++ b/utils/ccenter/textfiles.c @@ -0,0 +1,142 @@ +#include +#include +#include "ccenter.h" + +extern struct bbs_config conf; +extern CDKSCREEN *cdkscreen; + +void edit_txtfile_name(int txtfile) { + char *entrytext; + CDKENTRY *txtFileName = newCDKEntry(cdkscreen, 7, 7, "Text File Name", NULL, A_NORMAL, ' ', vMIXED, 48, 1, 64, TRUE, FALSE); + + setCDKEntry(txtFileName, conf.text_files[txtfile]->name, 1, 64, TRUE); + + entrytext = activateCDKEntry(txtFileName, 0); + + if (txtFileName->exitType == vNORMAL) { + if (conf.text_files[txtfile]->name != NULL) { + free(conf.text_files[txtfile]->name); + } + conf.text_files[txtfile]->name = strdup(entrytext); + } + destroyCDKEntry(txtFileName); +} + +void edit_txtfile_file(int txtfile) { + char *entrytext; + CDKENTRY *txtFileFile = newCDKEntry(cdkscreen, 7, 7, "Text File Filename", NULL, A_NORMAL, ' ', vMIXED, 48, 1, 1024, TRUE, FALSE); + + setCDKEntry(txtFileFile, conf.text_files[txtfile]->path, 1, 1024, TRUE); + + entrytext = activateCDKEntry(txtFileFile, 0); + + if (txtFileFile->exitType == vNORMAL) { + if (conf.text_files[txtfile]->path != NULL) { + free(conf.text_files[txtfile]->path); + } + conf.text_files[txtfile]->path = strdup(entrytext); + } + destroyCDKEntry(txtFileFile); +} + +void delete_txtfile(int txtfile) { + int i; + free(conf.text_files[txtfile]->name); + free(conf.text_files[txtfile]->path); + free(conf.text_files[txtfile]); + + for (i=txtfile;i%s", conf.text_files[txtfile]->name); + CDKSCROLL *editTxtFiles = newCDKScroll(cdkscreen, 5, 5, RIGHT, 6, 30, buffer, itemList, 3, FALSE, A_STANDOUT, TRUE, FALSE); + + while (1) { + selection = activateCDKScroll(editTxtFiles, 0); + if (editTxtFiles->exitType == vESCAPE_HIT) { + break; + } + switch(selection) { + case 0: + edit_txtfile_name(txtfile); + break; + case 1: + edit_txtfile_file(txtfile); + break; + case 2: + delete_txtfile(txtfile); + break; + default: + break; + } + } + + destroyCDKScroll(editTxtFiles); +} + +void add_new_text_file() { + char filepath[PATH_MAX]; + conf.text_files = (struct text_file **)realloc(conf.text_files, sizeof(struct text_file *) * (conf.text_file_count + 1)); + conf.text_files[conf.text_file_count] = (struct text_file *)malloc(sizeof(struct text_file)); + conf.text_files[conf.text_file_count]->name = strdup("New Text File"); + snprintf(filepath, PATH_MAX, "%s/newfile.ans", conf.ansi_path); + conf.text_files[conf.text_file_count]->path = strdup(filepath); + conf.text_file_count++; + + edit_text_file(conf.text_file_count - 1); +} + +void textfiles() { + char **itemlist; + int selection; + int i; + int txtcount; + + while (1) { + itemlist = (char **)malloc(sizeof(char *) * (conf.text_file_count + 1)); + txtcount = conf.text_file_count; + itemlist[0] = strdup("Add Text File"); + + for (i=0;iname); + } + + CDKSCROLL *txtFileList = newCDKScroll(cdkscreen, 3, 3, RIGHT, 12, 30, "Text Files", itemlist, txtcount + 1, FALSE, A_STANDOUT, TRUE, FALSE); + + selection = activateCDKScroll(txtFileList, 0); + if (txtFileList->exitType == vESCAPE_HIT) { + destroyCDKScroll(txtFileList); + for (i=0;i