diff --git a/src/sbbs3/umonitor/GNUmakefile b/src/sbbs3/umonitor/GNUmakefile index bb00f9d52f8285214c46cb93c1ddb1f9eb231d5f..91501fde4e2c2412bfdfc077e1b83767341bb6d5 100644 --- a/src/sbbs3/umonitor/GNUmakefile +++ b/src/sbbs3/umonitor/GNUmakefile @@ -1,11 +1,11 @@ -CFLAGS += -I../ -I../../xpdev -I../../uifc -DUSE_CURSES -DUSE_SIGNALS +CFLAGS += -I../ -I../../xpdev -I../../uifc -DUSE_CURSES -DUSE_SIGNALS -g LFLAGS += -lcurses CC ?= gcc LD ?= gcc vpath %.c ../../xpdev ../../uifc -OBJS := filewrap.o uifcc.o uifcx.o umonitor.o sockwrap.o +OBJS := filewrap.o uifcc.o uifcx.o umonitor.o sockwrap.o dirwrap.o genwrap.o umonitor: $(OBJS) $(CC) $(LFLAGS) $(OBJS) -o umonitor diff --git a/src/sbbs3/umonitor/umonitor.c b/src/sbbs3/umonitor/umonitor.c index c510e98582ee57c8fd25b33063c8e1207faa08cf..29d2e664643f506fa7149dc0746f955aef1c3608 100644 --- a/src/sbbs3/umonitor/umonitor.c +++ b/src/sbbs3/umonitor/umonitor.c @@ -8,8 +8,10 @@ #include "uifc.h" #include "sbbsdefs.h" #include "genwrap.h" /* stricmp */ +#include "dirwrap.h" /* lock/unlock/sopen */ #include "filewrap.h" /* lock/unlock/sopen */ #include "sockwrap.h" +#include "genwrap.h" enum { MODE_LIST @@ -531,12 +533,15 @@ int main(int argc, char** argv) { int server=0; char revision[16]; char str[256],ctrl_dir[41],*p,debug=0; + char title[256]; int sys_nodes,node_num=0,onoff=0; int i,j,mode=0,misc; int modify=0; int loop=0; long value=0; node_t node; + char *buf; + int buffile; sscanf("$Revision$", "%*s %s", revision); @@ -619,8 +624,8 @@ int main(int argc, char** argv) { if((mopt[i]=(char *)MALLOC(MAX_OPLN))==NULL) allocfail(MAX_OPLN); - sprintf(str,"Synchronet UNIX Monitor %s-%s",revision,PLATFORM_DESC); - if(uifc.scrn(str)) { + sprintf(title,"Synchronet UNIX Monitor %s-%s",revision,PLATFORM_DESC); + if(uifc.scrn(title)) { printf(" USCRN (len=%d) failed!\n",uifc.scrn_len+1); bail(1); } @@ -636,8 +641,37 @@ int main(int argc, char** argv) { "\nToDo: Add help."; j=uifc.list(WIN_ORG|WIN_MID|WIN_ESC|WIN_ACT|WIN_DYN,0,0,70,&main_dflt,&main_bar - ,str,mopt); - if(j==-2) + ,title,mopt); + + if(j==-7) { /* CTRL-E */ + /* ToDo must get the logs dir from the config */ + sprintf(str,"%s../data/error.log",ctrl_dir); + if(fexist(str)) { + if((buffile=sopen(str,O_RDONLY,SH_DENYRW))>=0) { + j=filelength(buffile); + if((buf=(char *)MALLOC(j+1))!=NULL) { + read(buffile,buf,j); + close(buffile); + *(buf+j)=0; + uifc.helpbuf=buf; + uifc.helptitle="Error Log"; + uifc.showhelp(); + uifc.helptitle=NULL; + free(buf); + continue; + } + close(buffile); + continue; + } + uifc.msg("Error reading error log"); + } + else { + uifc.msg("Error log does not exist"); + } + continue; + } + + if(j <= -2) continue; if(j==-1) { diff --git a/src/uifc/uifc.h b/src/uifc/uifc.h index 8565a37825f0329f212d04522ab32e46c461b178..e13bb2b14d036153474c8f58e273d9627bf8c07d 100644 --- a/src/uifc/uifc.h +++ b/src/uifc/uifc.h @@ -351,6 +351,11 @@ typedef struct { /* Shows the current help text */ /****************************************************************************/ void (*showhelp)(void); + +/****************************************************************************/ +/* Shows help title text */ +/****************************************************************************/ + char *helptitle; #endif } uifcapi_t; diff --git a/src/uifc/uifcc.c b/src/uifc/uifcc.c index 8923bf08936cebdc8d353429b9c90012e3308800..d7b1371ab4b7426805ccdc8a05814ca17c50f698 100644 --- a/src/uifc/uifcc.c +++ b/src/uifc/uifcc.c @@ -135,11 +135,18 @@ static void upop(char *str); static void sethelp(int line, char* file); /* Dynamic menu support */ -static int *last_menu_cur; -static int *last_menu_bar; +static int *last_menu_cur=NULL; +static int *last_menu_bar=NULL; static int save_menu_cur=-1; static int save_menu_bar=-1; +void reset_dynamic(void) { + *last_menu_cur=NULL; + *last_menu_bar=NULL; + save_menu_cur=-1; + save_menu_bar=-1; +} + int inkey(int mode) { if(mode) @@ -175,6 +182,7 @@ int uifcinic(uifcapi_t* uifcapi) api->sethelp=sethelp; #ifdef __unix__ api->showhelp=help; + api->helptitle=NULL; #endif #if defined(LOCALE) @@ -341,6 +349,7 @@ int uscrn(char *str) gotoxy(1,api->scrn_len+1); clrtoeol(); refresh(); + reset_dynamic(); return(0); } @@ -1631,6 +1640,7 @@ void upop(char *str) char buf[26*3*2]; int i,j,k; + reset_dynamic(); hidemouse(); if(!str) { puttext(28,12,53,14,sav); @@ -1707,22 +1717,40 @@ void help() for(i=1;i<76*21*2;i+=2) buf[i]=(hclr|(bclr<<4)); buf[0]='ฺ'; - for(i=2;i<30*2;i+=2) - buf[i]='ฤ'; - buf[i]='ด'; i+=4; - buf[i]='O'; i+=2; - buf[i]='n'; i+=2; - buf[i]='l'; i+=2; - buf[i]='i'; i+=2; - buf[i]='n'; i+=2; - buf[i]='e'; i+=4; - buf[i]='H'; i+=2; - buf[i]='e'; i+=2; - buf[i]='l'; i+=2; - buf[i]='p'; i+=4; - buf[i]='ร'; i+=2; - for(j=i;j<i+(30*2);j+=2) - buf[j]='ฤ'; + if(api->helptitle==NULL) { + for(i=2;i<30*2;i+=2) + buf[i]='ฤ'; + buf[i]='ด'; i+=4; + buf[i]='O'; i+=2; + buf[i]='n'; i+=2; + buf[i]='l'; i+=2; + buf[i]='i'; i+=2; + buf[i]='n'; i+=2; + buf[i]='e'; i+=4; + buf[i]='H'; i+=2; + buf[i]='e'; i+=2; + buf[i]='l'; i+=2; + buf[i]='p'; i+=4; + buf[i]='ร'; i+=2; + for(j=i;j<i+(30*2);j+=2) + buf[j]='ฤ'; + } + else { + j=strlen(api->helptitle); + if(j>70) + *(api->helptitle+70)=0; + for(i=2;i<(35-(j/2))*2;i+=2) + buf[i]='ฤ'; + buf[i]='ด'; i+=4; + for(p=api->helptitle;*p;p++) { + buf[i]=*p; + i+=2; + } + i+=2; + buf[i]='ร'; i+=2; + for(j=i;j<(75*2);j+=2) + buf[j]='ฤ'; + } i=j; buf[i]='ฟ'; i+=2; j=i; /* leave i alone */