/** coded by Raskolnikov July 1996 **/ #include <standard.h> #include <cmd.h> inherit CMD_BASE; void setup(){ position = 1; } static int cmd(string str, object me) { int i, which_file, check; mixed check1, check2; string file1, file2, *filename1, *filename2, *text1, *text2, *diffs1, *diffs2, output1, output2; if (!str) { notify_fail("Usage : compare -<which_file> file1 file2\n"); return 0; } check = sscanf(str, "-%d %s %s", which_file, file1, file2); if(check != 3) { which_file = 3; check = sscanf(str, "%s %s", file1, file2); if(!check || check != 2) { notify_fail("Usage : compare -<which_file> file1 file2\n"); return 0; } } if((which_file < 1) || (which_file > 3)) { notify_fail("Invalid -<which_file> value.\n\nOptions:\n" "-1 for file1\n-2 for file2\n-3 or nothing for both\n"); return 0; } filename1 = me->get_files(file1); filename2 = me->get_files(file2); if (!sizeof(filename1)) { notify_fail("Invalid file1.\n"); return 0; } if (!sizeof(filename2)) { notify_fail("Invalid file2.\n"); return 0; } check1 = read_file(filename1[0]); check2 = read_file(filename2[0]); if(!check1) { notify_fail("Not a file : "+filename1[0]+"\n"); return 0; } if(!check2) { notify_fail("Not a file : "+filename2[0]+"\n"); return 0; } diffs1 = ({ }); diffs2 = ({ }); text1 = explode(check1, "\n"); text2 = explode(check2, "\n"); if((which_file == 1) || (which_file == 3)) for(i=0;i<sizeof(text1);i++) if(member_array(text1[i], text2) == -1) diffs1 += ({ (i+1)+" "+text1[i] }); if((which_file == 2) || (which_file == 3)) for(i=0;i<sizeof(text2);i++) if(member_array(text2[i], text1) == -1) diffs2 += ({ (i+1)+" "+text2[i] }); output1 = implode(diffs1, "\n"); output2 = implode(diffs2, "\n"); if(which_file == 1) { me->more_string("Lines in "+filename1[0]+" not " "in "+filename2[0]+"\n\n"+output1+"\n\n"); return 1; } if(which_file == 2) { me->more_string("Lines in "+filename2[0]+" not " "in "+filename1[0]+"\n\n"+output2+"\n\n"); return 1; } me->more_string("Lines in "+filename1[0]+" not " "in "+filename2[0]+"\n\n"+output1+"\n\nLines " "in "+filename2[0]+" not in "+filename1[0]+"\n\n" ""+output2+"\n"); return 1; } /* compare_file() */ string query_short_help() { return "This command allows the user to compare two files. " "The command returns the lines of file1 that were " "not found in file2 if which_file is equal to 1 and " "vice-versa if which_file is equal to 2.\n\n" "Note: both file1 and file2 differences are returned if " "which_file is not entered."; } string query_usage() { return "compare -<which_file> file1 file2"; }