1. Си / Говнокод #13918

    +128

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    #include "unpacker.h"
    
    Unpacker::Unpacker(char *name) {
        _splitString = new char*[16];
        _ctx = SDL_RWFromFile(name, "rb");
    }
    
    Unpacker::~Unpacker() {
        delete _splitString;
        SDL_RWclose(_ctx);
        SDL_FreeRW(_ctx);
    }
    
    Dir *Unpacker::getDir(char *path) {;
        int index = 1;
        char pth[256];
        char name[80];
        char *str = "";
        if (!path)
            return NULL;
        _split(path);
        SDL_RWseek(_ctx, 2, SEEK_SET);
        pth[0] = '/'; pth[1] = '\0';
        while (_splitString[index]) {    
            Uint16 count;
            Uint32 hash;
            str = _splitString[index];
            hash = _hash(str);
            count = SDL_ReadLE16(_ctx);
            for (int i=0; i<count; i++) {
                Uint32 h;
                Uint32 offset;
                h = SDL_ReadLE32(_ctx);
                offset = SDL_ReadLE32(_ctx);
                if (hash == h) {
                    Uint8 size;
                    Uint32 curPos = SDL_RWtell(_ctx);
                    SDL_RWseek(_ctx, offset, SEEK_SET);
                    SDL_RWread(_ctx, &size, 1, 1);
                    SDL_RWread(_ctx, name, size, 1);
                    name[size] = '\0';
                    if (!strcmp(str, name)) {
                        if (_splitString[index+1]) {
                             strcat(pth, str);
                             strcat(pth, "/");
                        }
                        break;
                    } else {
                        if (i == count-1)
                            return NULL;
                        SDL_RWseek(_ctx, curPos, SEEK_SET);
                    }
                }
            }
            index++;
        }
        Dir *dir = new Dir;
        strcpy(dir->name,  str);
        strcpy(dir->path, pth);
        dir->dirsCount = SDL_ReadLE16(_ctx);
        dir->dirsOffset = SDL_RWtell(_ctx);
        SDL_RWseek(_ctx, dir->dirsCount*8, SEEK_CUR);
        dir->filesCount = SDL_ReadLE16(_ctx);;
        dir->filesOffset = SDL_RWtell(_ctx);
        return dir;
    }
    
    File *Unpacker::getFile(char *path) {
        char pth[256];
        char nm[80];
        int index = 2;
        _split(path);
        if (!_splitString[1])
            return NULL;
        if (_splitString[2]) {
            strcpy(pth, "/");
            strcpy(pth, _splitString[1]);
            strcat(pth, "/");
        } else {
            Dir *dir = getDir("/");
            return getFile(dir, _splitString[1]);
        }
        while (1) {
            if (_splitString[index+1]) {;
                strcat(pth, _splitString[index]);
                strcat(pth, "/");
            } else {
                strcpy(nm, _splitString[index]);
                break;
            }
            index++;
        }

    Нашел у себя на диске - старое творенье, когда я был мал и глуп... Распаковщик архива на своего формата на основе zlib.

    Запостил: Pythoner, 09 Октября 2013

    Комментарии (32) RSS

    • Блин, все не влезло:(
      Ответить
    • где тут %languagename%, %username%?
      Ответить
      • Синтаксис сильно напоминает MSVC, конкретно - с++
        Ответить
        • Да здесь от крестов только оператор new, да то, что функции в класс упихали. Голимая сишка...
          Ответить
          • Бля как же это все таки трудно, кодить на сишках.! Посмотрел я как Страуструп танцует, почитал доки, и сделал для себя вывод: в сишку мне путь закрыт.
            Ответить
            • C#, кстати, внезапно оказался годным. Делегаты и синглтоны вообще сама шикарность. Не за чем следить особо не надо.
              Ответить
              • Следи за жопой, патенты на C# анально оккупированы.
                Ответить
                • Не пишеш на C#, не понимаешь всю прелесть анального рабства.
                  Ответить
                • Как и на жабе
                  Ответить
                • И каким образом это ебет пишущего на нем?
                  Ответить
                  • Ебать не ебет, бля но ведь возбуждает.
                    Ответить
                    • Может, я тоже когда-нибудь поучу, когда разберусь с дельфей. Больше всего пугает работа со строками в шарпах, еще переучиваться, извращаться и тп.
                      ...
                      Ответить
                      • Шарп сделал автор дельфей. Так что особо переучиваться не придется.
                        Ответить
                        • Вот это логика.А еще у него есть дети. И они на делфи похожи.

                          Нет, я конечно понимаю, что если нихрена не знаешь, то все языки похожи как 2 капли, но все же...
                          Ответить
                          • Пацаненок с идексацией от единицы.
                            Ответить
                            • От -1
                              Ответить
                              • показать все, что скрыто
                                ~Клуб знакомств для геев~
                                     Познакомлюсь с парнем
                                     Сделаю миньет, подставлю попку парню кавказской внешности.
                                     Прут наглые хуястые самцы, желательно с большим членом, так как  
                                     очко сильно раздолблено. Могу принять сразу до 3-х парней.
                                        Пишите [email protected]  /Тарас/
                                Ответить
                                • показать все, что скрыто
                                  ~Клуб знакомств для геев~
                                       Познакомлюсь с парнем
                                       Сделаю миньет, подставлю попку парню кавказской внешности.
                                       Прут наглые хуястые самцы, желательно с большим членом, так как  
                                       очко сильно раздолблено. Могу принять сразу до 3-х парней.
                                          Пишите [email protected]  /Тарас/
                                  Ответить
    • показать все, что скрыто[b]ОТСОСУ У КАВКАЗЦА, ДАМ В ЖОПУ ТАДЖИКУ, ВЫЛИЖУ АНУС УЗБЕКУ vk.com/id29482‎[/b
      ]
      Ответить
      • показать все, что скрыто
        ~Клуб знакомств для геев~
             Познакомлюсь с парнем
             Сделаю миньет, подставлю попку парню кавказской внешности.
             Прут наглые хуястые самцы, желательно с большим членом, так как  
             очко сильно раздолблено. Могу принять сразу до 3-х парней.
                Пишите [email protected]  /Тарас/
        Ответить
        • показать все, что скрыто
          ~Клуб знакомств для геев~
               Познакомлюсь с парнем
               Сделаю миньет, подставлю попку парню кавказской внешности.
               Прут наглые хуястые самцы, желательно с большим членом, так как  
               очко сильно раздолблено. Могу принять сразу до 3-х парней.
                  Пишите [email protected]  /Тарас/
          Ответить
    • Я так и думал, что опять спамят.
      Ответить

    Добавить комментарий