Annotation of sbbs/src/sbbs3/gtkmonitor/util_funcs.c, revision 1.1.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.