|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.