1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <unixio.h> 5 #include "vim.h" 6 int main(int argc, char *argv[]) 7 { 8 FILE *fpi, *fpo; 9 char cmd[132], buf[BUFSIZ], *argp, *error_file, target[132], *mms; 10 int err = 0, err_line = 0; 11 12 mms = "mms"; 13 argc--; 14 argv++; 15 while (argc-- > 0) 16 { 17 argp = *argv++; 18 if (*argp == '-') 19 { 20 switch (*++argp) 21 { 22 case 'm': 23 mms = ++argp; 24 break; 25 case 'e': 26 if (!*(error_file = ++argp)) 27 { 28 error_file = *argv++; 29 argc--; 30 } 31 break; 32 default: 33 break; 34 } 35 } 36 else 37 { 38 if (*target) 39 strcat(target, " "); 40 strcat(target, argp); 41 } 42 } 43 vim_snprintf(cmd, sizeof(cmd), "%s/output=tmp:errors.vim_tmp %s", 44 mms, target); 45 system(cmd); 46 fpi = fopen("tmp:errors.vim_tmp", "r"); 47 fpo = fopen(error_file, "w"); 48 while (fgets(buf, BUFSIZ, fpi)) 49 { 50 if (!memcmp(buf, "%CC-", 4)) 51 { 52 err_line++; 53 buf[strlen(buf)-1] = '\0'; 54 err++; 55 } 56 else 57 { 58 if (err_line) 59 { 60 if (strstr(buf, _("At line"))) 61 { 62 err_line = 0; 63 fprintf(fpo, "@"); 64 } 65 else 66 buf[strlen(buf)-1] = '\0'; 67 } 68 } 69 fprintf(fpo, "%s", buf); 70 } 71 fclose(fpi); 72 fclose(fpo); 73 while (!delete("tmp:errors.vim_tmp")) 74 /*nop*/; 75 exit(err ? 44 : 1); 76 return(0); 77 } 78