Guest User

boners v2.3

a guest
Jun 3rd, 2015
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.84 KB | None | 0 0
  1. /****************************************************************************************
  2. * usage: boners.exe <input_file> [-o output_filename] [-c] [-l num_of_blocks_in_1_line] *
  3. * -c is for turning on cheapAssMode where RGB code only has 4 chars                  *
  4. * TRUE and ORIGINAL code. DO NOT STEAL!                                              *
  5. ****************************************************************************************/
  6.  
  7. #include <string.h>
  8. #include <stdio.h>
  9.  
  10. char lowercase(char input) {
  11.     return (input > 64 && input < 91) ? input + 32 : input;
  12. }
  13.  
  14. int main(int argc, const char * argv[])
  15. {
  16.     if (argc < 2) {
  17.         printf("At least give me the input file, fucking idiot.\n");
  18.         return 9001;
  19.     }
  20.    
  21. //Read all params
  22.     const char* srzFileName = NULL;
  23.     char* trgFileName = NULL;
  24.     char cheapAssMode = 0;
  25.     int blockPerLine = 0;
  26.    
  27.     int argindex = 1;
  28.     const char* arg;
  29.     while (argindex < argc) {
  30.         arg = argv[argindex];
  31.         if (strcmp(arg, "-c") == 0)
  32.             cheapAssMode = 1;
  33.         else if (strcmp(arg, "-o") == 0 && argindex+1 < argc)
  34.             trgFileName = (char*)argv[++argindex];
  35.         else if (strcmp(arg, "-l") == 0 && argindex+1 < argc)
  36.             blockPerLine = atoi(argv[++argindex]);
  37.         else if (srzFileName == NULL)
  38.             srzFileName = arg;
  39.         argindex++;
  40.     }
  41.    
  42.     if (srzFileName == NULL) {
  43.         printf("At least give me the input file, fucking idiot.\n");
  44.         return 9001;
  45.     }
  46.  
  47. //Check if source file is accessible
  48.     FILE *srzFile = fopen(srzFileName, "r");
  49.     if (srzFile == NULL) {
  50.         printf("Unserious fraud input file detected.\n");
  51.         return 9002;
  52.     }
  53.    
  54. //Generate output filename if none is provided
  55.     char trgFileNameNeedFreed = 0;
  56.     if (trgFileName == NULL) {
  57.         trgFileNameNeedFreed = 1;
  58.         char* trgFileNamePostfix = ".bnr";
  59.         size_t trgFileNameLength = strlen(srzFileName) + strlen(trgFileNamePostfix);
  60.         trgFileName = (char*)calloc(trgFileNameLength+1, sizeof(char));
  61.        
  62.         char* dot = strrchr(argv[1], '.');
  63.         if (dot==NULL)
  64.             sprintf(trgFileName, "%s%s", srzFileName, trgFileNamePostfix);
  65.         else {
  66.             size_t extLen = strlen(dot);
  67.             char ext[extLen+1];
  68.             strncpy(ext, dot, extLen);
  69.             ext[extLen] = '\0';
  70.             size_t fileNameLen = dot - argv[1];
  71.             char fileName[fileNameLen+1];
  72.             strncpy(fileName, srzFileName, fileNameLen);
  73.             fileName[fileNameLen] = '\0';
  74.             sprintf(trgFileName, "%s%s%s", fileName, trgFileNamePostfix, ext);
  75.         }
  76.         trgFileName[trgFileNameLength] = '\0';
  77.     }
  78.    
  79. //Check if can create output file
  80.     FILE *trgFile = fopen(trgFileName,"w");
  81.     if (trgFile == NULL) {
  82.         printf("Stop being dead and start creating output file.\n");
  83.         return 9003;
  84.     }
  85.  
  86. //Start printing
  87.     int error = 0;
  88.     char *block = "█";
  89.     size_t blockLen = strlen(block);
  90.     char r[3];
  91.     char g[3];
  92.     char b[3];
  93.     size_t blockCount = 0;
  94.     size_t totalLenCount = 0;
  95.     size_t byteLen = cheapAssMode ? 1 : 2;
  96.     size_t rgbLen = 3 * byteLen;
  97.     char rgb[rgbLen+1];
  98.     char prevRgb[rgbLen+1];
  99.     char firstVal = 0;
  100.     memset(prevRgb, 0, rgbLen+1);
  101.    
  102.     fprintf(trgFile, "[aa]");
  103.     totalLenCount += 6;
  104.    
  105.     while (!feof(srzFile)) {
  106.         memset(r, 0, 3);
  107.         memset(g, 0, 3);
  108.         memset(b, 0, 3);
  109.         fscanf(srzFile, "%s %s %s", r, g, b);
  110.         if (ferror(srzFile)) {
  111.             error = 9004;
  112.             break;
  113.         }
  114.        
  115.         if (cheapAssMode) {
  116.             sprintf(rgb, "%c%c%c", lowercase(r[0]), lowercase(g[0]), lowercase(b[0]));
  117.             rgb[3] = '\0';
  118.         } else if (lowercase(r[0]) == lowercase(r[1]) && lowercase(g[0]) == lowercase(g[1]) && lowercase(b[0]) == lowercase(b[1])) {
  119.             sprintf(rgb, "%c%c%c", lowercase(r[0]), lowercase(g[0]), lowercase(b[0]));
  120.             rgb[3] = '\0';
  121.         } else {
  122.             sprintf(rgb, "%c%c%c%c%c%c", lowercase(r[0]), lowercase(r[1]), lowercase(g[0]), lowercase(g[1]), lowercase(b[0]), lowercase(b[1]));
  123.             rgb[6] = '\0';
  124.         }
  125.        
  126.         if (strcmp(rgb, prevRgb) != 0) {
  127.             if (firstVal == 0)
  128.                 firstVal = 1;
  129.             else {
  130.                 fprintf(trgFile, "[/color]");
  131.                 totalLenCount += 8;
  132.                 if (blockPerLine > 0 && blockCount >= blockPerLine) {
  133.                     fprintf(trgFile, "\n");
  134.                     blockCount = 0;
  135.                     totalLenCount++;
  136.                 }
  137.             }
  138.             fprintf(trgFile, "[color=#%s]", rgb);
  139.             totalLenCount += 9;
  140.             totalLenCount += rgbLen;
  141.            
  142.             strcpy(prevRgb, rgb);
  143.             prevRgb[rgbLen] = '\0';
  144.         }
  145.        
  146.         if (blockPerLine > 0 && blockCount >= blockPerLine) {
  147.             fprintf(trgFile, "\n");
  148.             blockCount = 0;
  149.             totalLenCount++;
  150.         }
  151.         fprintf(trgFile, "%s", block);
  152.         blockCount++;
  153.         totalLenCount += blockLen;
  154.     }
  155.    
  156.     if (error) {
  157. //Fission mailed
  158.         printf("CHECK. THE. GRAMMAR. OF. YOUR. INPUT. FILE. Jesus... ... ... ...\n");
  159.     } else {
  160. //Success!
  161.         if (firstVal > 0) {
  162.             fprintf(trgFile, "[/color]");
  163.             totalLenCount += 8;
  164.         }
  165.         fprintf(trgFile, "[/aa]");
  166.         totalLenCount += 7;
  167.         printf("Outputted to %s. Total length: %lu.\nNow how about some donations, you ungrateful piece of shit?\n", trgFileName, totalLenCount);
  168.     }
  169.    
  170. //Clean up
  171.     fclose(srzFile);
  172.     fclose(trgFile);
  173.     if (trgFileNameNeedFreed)
  174.         free(trgFileName);
  175.    
  176.     return error ? error : 0;
  177. }
Advertisement
Add Comment
Please, Sign In to add comment