Annotation of sbbs/src/sbbs3/gtkmonitor/util_funcs.c, revision 1.1

1.1     ! root        1: #include <stdlib.h>
        !             2: #include "util_funcs.h"
        !             3: #include "dirwrap.h"
        !             4: #include "threadwrap.h"
        !             5: #include "gtkmonitor.h"
        !             6: #include "semwrap.h"
        !             7: 
        !             8: int run_cmd_mutex_initalized=0;
        !             9: pthread_mutex_t        run_cmd_mutex;
        !            10: 
        !            11: /*****************************************************************************/
        !            12: /* Returns command line generated from instr with %c replacments             */
        !            13: /*****************************************************************************/
        !            14: char *mycmdstr(char *instr, char *fpath)
        !            15: {
        !            16:     char str[256],str2[128];
        !            17:     int i,j,len;
        !            18: #if 0
        !            19:     char       cmd[MAX_PATH+1];
        !            20: #else
        !            21:        char    *cmd;
        !            22: #endif
        !            23: 
        !            24:        cmd=(char *)malloc(MAX_PATH+1);
        !            25:        if(cmd==NULL) {
        !            26:                display_message("malloc() Error", "Cannot allocate enough memory for the message", "gtk-dialog-error");
        !            27:                return(NULL);
        !            28:        }
        !            29:        len=strlen(instr);
        !            30:        for(i=j=0;i<len && j<128;i++) {
        !            31:                if(instr[i]=='%') {
        !            32:                        i++;
        !            33:                        cmd[j]=0;
        !            34:                        switch(toupper(instr[i])) {
        !            35:                                case 'F':   /* File path */
        !            36:                                        strcat(cmd,fpath);
        !            37:                                        break;
        !            38:                                case 'G':   /* Temp directory */
        !            39:                                        if(cfg.temp_dir[0]!='\\' 
        !            40:                                                        && cfg.temp_dir[0]!='/' 
        !            41:                                                        && cfg.temp_dir[1]!=':') {
        !            42:                                                strcpy(str,cfg.ctrl_dir);
        !            43:                                                strcat(str,cfg.temp_dir);
        !            44:                                                if(FULLPATH(str2,str,40))
        !            45:                                                        strcpy(str,str2);
        !            46:                                                backslash(str);
        !            47:                                                strcat(cmd,str);
        !            48:                                        }
        !            49:                                        else
        !            50:                                                strcat(cmd,cfg.temp_dir);
        !            51:                                        break;
        !            52:                                case 'J':
        !            53:                                        if(cfg.data_dir[0]!='\\' 
        !            54:                                                        && cfg.data_dir[0]!='/' 
        !            55:                                                        && cfg.data_dir[1]!=':') {
        !            56:                                                strcpy(str,cfg.ctrl_dir);
        !            57:                                                strcat(str,cfg.data_dir);
        !            58:                                                if(FULLPATH(str2,str,40))
        !            59:                                                        strcpy(str,str2);
        !            60:                                                backslash(str);
        !            61:                                                strcat(cmd,str);
        !            62:                                        }
        !            63:                                        else
        !            64:                                                strcat(cmd,cfg.data_dir);
        !            65:                                        break;
        !            66:                                case 'K':
        !            67:                                        strcat(cmd,cfg.ctrl_dir);
        !            68:                                        break;
        !            69:                                case 'O':   /* SysOp */
        !            70:                                        strcat(cmd,cfg.sys_op);
        !            71:                                        break;
        !            72:                                case 'Q':   /* QWK ID */
        !            73:                                        strcat(cmd,cfg.sys_id);
        !            74:                                        break;
        !            75:                                case '!':   /* EXEC Directory */
        !            76:                                        strcat(cmd,cfg.exec_dir);
        !            77:                                        break;
        !            78:                 case '@':   /* EXEC Directory for DOS/OS2/Win32, blank for Unix */
        !            79: #ifndef __unix__
        !            80:                     strcat(cmd,cfg.exec_dir);
        !            81: #endif
        !            82:                     break;
        !            83:                                case '%':   /* %% for percent sign */
        !            84:                                        strcat(cmd,"%");
        !            85:                                        break;
        !            86:                                case '.':       /* .exe for DOS/OS2/Win32, blank for Unix */
        !            87: #ifndef __unix__
        !            88:                                        strcat(cmd,".exe");
        !            89: #endif
        !            90:                                        break;
        !            91:                                case '?':       /* Platform */
        !            92: #ifdef __OS2__
        !            93:                                        strcpy(str,"OS2");
        !            94: #else
        !            95:                                        strcpy(str,PLATFORM_DESC);
        !            96: #endif
        !            97:                                        strlwr(str);
        !            98:                                        strcat(cmd,str);
        !            99:                                        break;
        !           100:                                default:    /* unknown specification */
        !           101:                                        sprintf(cmd,"ERROR Checking Command Line '%s'",instr);
        !           102:                                        display_message("Command line Error",cmd,"gtk-dialog-error");
        !           103:                                        free(cmd);
        !           104:                                        return(NULL);
        !           105:                        }
        !           106:                        j=strlen(cmd);
        !           107:                }
        !           108:                else
        !           109:                        cmd[j++]=instr[i];
        !           110:        }
        !           111:        cmd[j]=0;
        !           112: 
        !           113:        return(cmd);
        !           114: }
        !           115: 
        !           116: void exec_cmdline(void *cmdline)
        !           117: {
        !           118:        GtkWidget       *w;
        !           119: 
        !           120:        if(cmdline==NULL)
        !           121:                return;
        !           122:        if(!run_cmd_mutex_initalized) {
        !           123:                pthread_mutex_init(&run_cmd_mutex, NULL);
        !           124:                run_cmd_mutex_initalized=1;
        !           125:        }
        !           126:        pthread_mutex_lock(&run_cmd_mutex);
        !           127:        system((char *)cmdline);
        !           128:        free(cmdline);
        !           129:        w=glade_xml_get_widget(xml, "MainWindow");
        !           130:        gtk_widget_set_sensitive(GTK_WIDGET(w), TRUE);
        !           131:        pthread_mutex_unlock(&run_cmd_mutex);
        !           132: }
        !           133: 
        !           134: char *complete_path(char *dest, char *path, char *filename)
        !           135: {
        !           136:        if(path != NULL) {
        !           137:                strcpy(dest, path);
        !           138:                backslash(dest);
        !           139:        }
        !           140:        else
        !           141:                dest[0]=0;
        !           142: 
        !           143:        if(filename != NULL)
        !           144:                strcat(dest, filename);
        !           145:        fexistcase(dest);                       /* TODO: Hack: Fixes upr/lwr case fname */
        !           146:        return(dest);
        !           147: }
        !           148: 
        !           149: void run_external(char *path, char *filename)
        !           150: {
        !           151:        static char     cmdline[MAX_PATH*2];
        !           152:        GtkWidget       *w;
        !           153: 
        !           154:        w=glade_xml_get_widget(xml, "MainWindow");
        !           155:        gtk_widget_set_sensitive(GTK_WIDGET(w), FALSE);
        !           156:        complete_path(cmdline,path,filename);
        !           157:        _beginthread(exec_cmdline, 0, strdup(cmdline));
        !           158: }
        !           159: 
        !           160: void exec_cmdstr(char *cmdstr, char *path, char *filename)
        !           161: {
        !           162:        char    p[MAX_PATH+1];
        !           163:        GtkWidget       *w;
        !           164: 
        !           165:        complete_path(p,path,filename);
        !           166:        w=glade_xml_get_widget(xml, "MainWindow");
        !           167:        gtk_widget_set_sensitive(GTK_WIDGET(w), FALSE);
        !           168:        _beginthread(exec_cmdline, 0, mycmdstr(cmdstr, p));
        !           169: }
        !           170: 
        !           171: void touch_sem(char *path, char *filename)
        !           172: {
        !           173:        char    fn[MAX_PATH*2];
        !           174: 
        !           175:        ftouch(complete_path(fn,path,filename));
        !           176: }
        !           177: 
        !           178: /* Assumes a 12 char outstr */
        !           179: char *getsizestr(char *outstr, long size, BOOL bytes) {
        !           180:        if(bytes) {
        !           181:                if(size < 1000) {       /* Bytes */
        !           182:                        snprintf(outstr,12,"%ld bytes",size);
        !           183:                        return(outstr);
        !           184:                }
        !           185:                if(size<10000) {        /* Bytes with comma */
        !           186:                        snprintf(outstr,12,"%ld,%03ld bytes",(size/1000),(size%1000));
        !           187:                        return(outstr);
        !           188:                }
        !           189:                size = size/1024;
        !           190:        }
        !           191:        if(size<1000) { /* KB */
        !           192:                snprintf(outstr,12,"%ld KB",size);
        !           193:                return(outstr);
        !           194:        }
        !           195:        if(size<999999) { /* KB With comma */
        !           196:                snprintf(outstr,12,"%ld,%03ld KB",(size/1000),(size%1000));
        !           197:                return(outstr);
        !           198:        }
        !           199:        size = size/1024;
        !           200:        if(size<1000) { /* MB */
        !           201:                snprintf(outstr,12,"%ld MB",size);
        !           202:                return(outstr);
        !           203:        }
        !           204:        if(size<999999) { /* MB With comma */
        !           205:                snprintf(outstr,12,"%ld,%03ld MB",(size/1000),(size%1000));
        !           206:                return(outstr);
        !           207:        }
        !           208:        size = size/1024;
        !           209:        if(size<1000) { /* GB */
        !           210:                snprintf(outstr,12,"%ld GB",size);
        !           211:                return(outstr);
        !           212:        }
        !           213:        if(size<999999) { /* GB With comma */
        !           214:                snprintf(outstr,12,"%ld,%03ld GB",(size/1000),(size%1000));
        !           215:                return(outstr);
        !           216:        }
        !           217:        size = size/1024;
        !           218:        if(size<1000) { /* TB (Yeah, right) */
        !           219:                snprintf(outstr,12,"%ld TB",size);
        !           220:                return(outstr);
        !           221:        }
        !           222:        sprintf(outstr,"Plenty");
        !           223:        return(outstr);
        !           224: }
        !           225: 
        !           226: /* Assumes a 12 char outstr */
        !           227: char *getnumstr(char *outstr, ulong size) {
        !           228:        if(size < 1000) {
        !           229:                snprintf(outstr,12,"%ld",size);
        !           230:                return(outstr);
        !           231:        }
        !           232:        if(size<1000000) {
        !           233:                snprintf(outstr,12,"%ld,%03ld",(size/1000),(size%1000));
        !           234:                return(outstr);
        !           235:        }
        !           236:        if(size<1000000000) {
        !           237:                snprintf(outstr,12,"%ld,%03ld,%03ld",(size/1000000),((size/1000)%1000),(size%1000));
        !           238:                return(outstr);
        !           239:        }
        !           240:        size=size/1000000;
        !           241:        if(size<1000000) {
        !           242:                snprintf(outstr,12,"%ld,%03ld M",(size/1000),(size%1000));
        !           243:                return(outstr);
        !           244:        }
        !           245:        if(size<10000000) {
        !           246:                snprintf(outstr,12,"%ld,%03ld,%03ld M",(size/1000000),((size/1000)%1000),(size%1000));
        !           247:                return(outstr);
        !           248:        }
        !           249:        sprintf(outstr,"Plenty");
        !           250:        return(outstr);
        !           251: }
        !           252: 
        !           253: void display_message(char *title, char *message, char *icon)
        !           254: {
        !           255:        GtkWidget *dialog, *label;
        !           256: 
        !           257:        dialog=gtk_dialog_new_with_buttons(title
        !           258:                        ,GTK_WINDOW(glade_xml_get_widget(xml, "MainWindow"))
        !           259:                        ,GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT
        !           260:                        ,GTK_STOCK_OK
        !           261:                        ,GTK_RESPONSE_NONE
        !           262:                        ,NULL);
        !           263:        if(icon==NULL)
        !           264:                icon="gtk-info";
        !           265:        gtk_window_set_icon_name(GTK_WINDOW(dialog), icon);
        !           266:        label = gtk_label_new (message);
        !           267: 
        !           268:        g_signal_connect_swapped (dialog
        !           269:                        ,"response"
        !           270:                        ,G_CALLBACK(gtk_widget_destroy)
        !           271:             ,dialog);
        !           272:        gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox),
        !           273:                        label);
        !           274:        gtk_widget_show_all (dialog);
        !           275:        gtk_dialog_run(GTK_DIALOG(dialog));
        !           276: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.