1. Список говнокодов пользователя TarasB

    Всего: 95

  2. Pascal / Говнокод #7095

    +89

    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
    // qsort.inc:
    procedure SortRow(var A: array of T);
    
      procedure sort(l,r: integer);
      var
        i,j: integer;
        x,y: T;
      begin
        i := l;
        j := r;
        x := a[random(r-l+1)+l];
        repeat
          while LESS(a[i],x) do inc(i);
          while LESS(x,a[j]) do dec(j);
          if i<=j then begin
            y    := a[i];
            a[i] := a[j];
            a[j] := y;
            inc(i);
            dec(j);
          end;
        until i>=j;
        if l<j then sort(l,j);
        if i<r then sort(i,r);
      end;
    
    begin
      Sort(Low(A), High(A));
    end;
    
    // unit1.pas
      T = TPoint;
      function LESS(const a,b: T): boolean;
      begin
        result := a.x<b.x;
      end;
      {$I qsort.inc}
    
    var 
      a: array of TPoint;
    begin  
      ...
      SortRow(a);
      ...
    end;

    Я использую шаблоны в Дельфи-7 ололо.

    TarasB, 28 Июня 2011

    Комментарии (27)
  3. Pascal / Говнокод #6865

    +96

    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
    93. 93
    94. 94
    95. 95
    Assign(F, FileName);
      IOResult;
      Reset(F);
      if IOResult = 0 then begin
        for i := 0 to MaxModelNamesCount-1 do ModelKind[i] := mkVagon;
        Result := True;
        BlockRead(F, W, 2);
        if W = OldWDim then begin // старый формат
          // 20 строк пропущено
        end else if W = WDim then begin // новый формат
          BlockRead(F, FormatVersion, 4); // версия нового формата
          if FormatVersion <= 4 then begin
            BlockRead(F, EditorDate, 4);
            BlockRead(F, C, 4);
            LCount := C;
            for i := 0 to LCount - 1 do begin
              BlockReadLine(F, Lines[i], 16);
              if (FormatVersion <= 2) and (Lines[i].Attr[3] and $0F = 5) then Lines[i].Attr[0] := 0
              else if (Lines[i].Attr[3] and $0F = k3DObject) then ModelKind[Lines[i].IntAttr[1]] := mkStatic;
            end;
            if FormatVersion <= 1 then begin
              ModelNamesCount := 8;  // для 1й версии список жёстко задан
              ModelNames[0] := 'ГЗРВ-10';
              ModelNames[1] := 'ГЗРВ-10М';
              ModelNames[2] := 'КТМ-5М3';
              ModelNames[3] := 'ЛМ-68';
              ModelNames[4] := 'ЛМ-68М';
              ModelNames[5] := 'ЛМ-68ММ';
              ModelNames[6] := 'ЛВС-86';
              ModelNames[7] := 'ЛВС-97';
              for i := 8 to MaxModelNamesCount-1 do ModelNames[i] := '';
            end else if FormatVersion <= 3 then begin
              ModelNamesCount := 0;
              for i := 0 to 255 do begin
                j := 0;
                BlockRead(F, j, 1);
                SetLength(ModelNames[i], j);
                for j := 1 to Length(ModelNames[i]) do Read(F, byte(ModelNames[i, j]));
                if ModelNames[i] <> '' then Inc(ModelNamesCount);
              end;
            end else begin
              BlockRead(F, ModelNamesCount, 4); // кол-во моделей
              for i := 0 to MaxModelNamesCount - 1 do ModelNames[i] := '';
              for i := 0 to ModelNamesCount-1 do begin
                BlockRead(F, k, 4); // номер считываемой модели
                j := 0;
                BlockRead(F, j, 1); // длина имени, не более 255
                SetLength(ModelNames[k], j);
                for j := 1 to Length(ModelNames[k]) do Read(F, byte(ModelNames[k, j]));
              end;
            end;
    
            for i := 0 to 8 do
              for j := 0 to 12 + Byte(FormatVersion >= 2) do with Routes[i, j] do begin
                BlockRead(F, PCount, 2);
                SetAllowedModels(Routes[i,j], 0, -1);
                if FormatVersion <= 1 then begin      
                  BS := [];
                  BlockRead(F, BS, 4);
                  AllowedModelsCount := 0;
                  for k := 0 to 255 do if k in BS then begin
                    Inc(AllowedModelsCount);
                    AllowedModels[k] := True;
                  end;
                end else if FormatVersion <= 3 then begin
                  BlockRead(F, BS, 32);
                  AllowedModelsCount := 0;
                  for k := 0 to 255 do if k in BS then begin
                    Inc(AllowedModelsCount);
                    AllowedModels[k] := True;
                  end;
                end else begin
                  BlockRead(F, AllowedModelsCount, 4);
                  for k := 0 to AllowedModelsCount-1 do begin
                    BlockRead(F, n, 4);           // номер модели
                    AllowedModels[n] := True;
                  end;
                end;
    
                for k := 0 to PCount - 1 do begin
                  if FormatVersion >= 3 then BlockRead(F, c, 4)
                  else begin
                    c := 0;
                    BlockRead(F, c, 2);
                  end;
                  Points[k] := c;
                end;
                BlockRead(F, DefVagons, 1);
                SpeedRoute := boolean(DefVagons shr 4);
                DefVagons := DefVagons and $0F;
                BlockRead(F, Interval, 1);
              end;
          end else Result := False;
        end else Result := False;
        Close(F);

    Короче, лапша из if FormatVesion такой-то...
    Обратная совместимость формата файла.
    Формату уже 4 года.

    TarasB, 05 Июня 2011

    Комментарии (52)
  4. Си / Говнокод #6799

    +146

    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
    int main(argc,argv)
    int argc;
    char *argv[];
    {
    int raw=0,httpcont=0;
    int i,ilatex=0,ititle=1;
    char *spoint=0;
    char ttver[]=TTH_VERSION;
    char ttname[20];
    ...
        strcpy(ttname,"Tt");
        strcat(ttname,TTH_NAME);
        strncpy(spoint-10-strlen(ttname),ttname,strlen(ttname));

    Понадобился мне конвертёр TeX в HTML.
    Скачал (http://hutchinson.belmont.ma.us/tth/), всё работает, но оказалось, что он не умеет работать с командой \begin{cases}
    Ну я решил его подправить, благо исходник открыт.
    Открыл я исходник и... решил написать с нуля свой.

    ПС Посоны, что делает 13я строчка?
    ППС Си - говно.

    TarasB, 31 Мая 2011

    Комментарии (21)
  5. Pascal / Говнокод #6797

    +94

    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
    procedure rayxtriangle(Xa,Ya,Za, {Точка отправления луча}
                                        X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3 : real; {Координаты полигона (триангла)}
                                        Vx,Vy,Vz : real;{Вектор направления луча} Var Xc,Yc,Zc : real;{Точка пересечения}
                                        bol : boolean {Для проверки пересечения триангла});
    Var A,B,C,D : real;
          k : real;
          ac1,ac2,ac3 : real;
    begin
      A:=(Y2-Y1)*(Z3-Z1)-(Z2-Z1)*(Y3-Y1); //Вычисляем вектор нормали к треугольному полигону (векторное произведение)
      B:=(Z2-Z1)*(X3-X1)-(X2-X1)*(Z3-Z1);
      C:=(X2-X1)*(Y3-Y1)-(Y2-Y1)*(X3-X1);
      D:=-A*X1-B*Y1-C*Z1;
      k:=-(A*Xa+B*Ya+C*Za+D)/(A*Vx+B*Vy+C*Vz); //поскольку вектора луча (Vx Vy Vz) и вектор с даной
                                                                                  //точки к точке пересечения (Xc-Xa, Yc-Ya, Zc-Za) - колинеарны
                                                                                  //ето соотношение выведено мною, обьяснение было раньше (в предыдущем ответе)
      Xc:=k*Vx+Xa; //Вычисляем точку пересечения луча с полигоном
      Yc:=k*Vy+Ya;
      Zc:=k*Vz+Za;
                            //здесь проверяем лежыт ли даная точка в треугольном полигоне
                            //ac1,ac2,ac3 арккосинусы углов между векторами с точки пересечения (Xc Yc Zc)
                            //к вершинам треугольника (из скалярного произведения) 
                            //Для других полигонов (4,5,6... и т.д. угольных) надо побольше вычислений 
      ac1:=arccos(((x1-xc)*(x2-xc)+(y1-yc)*(y2-yc)+(z1-zc)*(z2-zc))/(sqrt(sqr(x1-xc)+sqr(y1-yc)+sqr(z1-zc))*sqrt(sqr(x2-xc)+sqr(y2-yc)+sqr(z2-zc))));
      ac2:=arccos(((x2-xc)*(x3-xc)+(y2-yc)*(y3-yc)+(z2-zc)*(z3-zc))/(sqrt(sqr(x2-xc)+sqr(y2-yc)+sqr(z2-zc))*sqrt(sqr(x3-xc)+sqr(y3-yc)+sqr(z3-zc)))); 
      ac3:=arccos(((x3-xc)*(x1-xc)+(y3-yc)*(y1-yc)+(z3-zc)*(z1-zc))/(sqrt(sqr(x3-xc)+sqr(y3-yc)+sqr(z3-zc))*sqrt(sqr(x1-xc)+sqr(y1-yc)+sqr(z1-zc)))); 
      if (ac1+ac2+ac3=pi) then bol:=true else bol:=false; //Если сума етих углов=360 градусов значит точка в треугольнике
      //Если точка пересечения найдена тогда bol=true и ее координаты Xc Yc Zc                              
    end;

    А всё потому, что векторную алгебру надо знать, любить и уважать, ибо иначе такая хрень выходит.
    Источник: http://www.gamedev.ru/code/forum/?id=148128

    TarasB, 31 Мая 2011

    Комментарии (13)
  6. Pascal / Говнокод #6676

    +112

    1. 1
    2. 2
    3. 3
    while (FilePos(SrcFile) <> FileSize(SrcFile)) do begin
        BlockRead(SrcFile,Res,1);
    ...

    Пытаюсь одному объяснить кое-что из основ. Мне плохо от его перлов.
    Нехорошо смеяться над новичками, но я уже не выдержал...

    http://www.gamedev.ru/flame/forum/?id=147021&page=10#m148

    TarasB, 15 Мая 2011

    Комментарии (26)
  7. Assembler / Говнокод #6475

    +212

    1. 1
    2. 2
    3. 3
    sub eax, edx
    test eax, eax
    jl +$04

    dcc32
    Нафига вторая строчка?

    TarasB, 26 Апреля 2011

    Комментарии (89)
  8. Pascal / Говнокод #6245

    +99

    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
    begin
      repeat
        if WSAStartup($101, Data) = SOCKET_ERROR then begin
          Writeln('Ошибка в WSAStrtup ' , WSAGetLastError);
          Break;
        end;
    
        repeat
          SetLength(Name, 256);
          if GetHostName(@Name[1], 256) = SOCKET_ERROR then begin
            WriteLn('Ошибка в GetHostName ', WSAGetLastError);
            Break;
          end;
    
          HE := GetHostByName(@Name[1]);
          if HE = nil then begin
            WriteLn('Ошибка в GetHostByName ', WSAGetLastError);
            Break;
          end;
    
          Write('Your inner IP:     ');
          WriteLn(inet_ntoa(PInAddr(HE.h_addr_list^)^));
    
          Write('Your inner name:   ');
          WriteLn(HE.h_name);
    
          repeat
            MainSocket := Socket(AF_Inet,Sock_Stream,0);
            if MainSocket = SOCKET_ERROR then begin
              Writeln('Ошибка в Socket ' , WSAGetLastError);
              Break;
            end;
            //
            CloseSocket(MainSocket);
          until false;
        until false;
        WSACleanUp;
      until false;
    end.

    Код, проверяющий все ошибки - он такой, да?

    TarasB, 06 Апреля 2011

    Комментарии (5)
  9. C++ / Говнокод #6027

    +170

    1. 1
    2. 2
    3. 3
    4. 4
    void Draw_Pixel_Memset(UINT color,    //color = _RGB32BIT(a,r,g,b) ((b) + ((g) << 8) + ((r) << 16) + ((a) << 24))
                          UINT *buffer){ //buffer =  (UINT*) ddsd.lpSurface
      memset(buffer, color,8); 
    }

    Рисование пикселя с помощью meset()

    Подскажите, пожалуйста, почему при использование этой функции в 32 битном режиме точка получается какового то серого цвета.
    С другой стороны если использовать 8 битный режим то пиксель будет нужного цвета.

    Источник: http://www.gamedev.ru/code/forum/?id=145274

    TarasB, 19 Марта 2011

    Комментарии (18)
  10. C++ / Говнокод #5914

    +171

    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
    bool BMPTextureLoader::Load (GraphicContent **content, string file_name)
    {
      int width, height;
      int bpp;
      unsigned char *pixels;
      ifstream file (file_name.c_str());
      char temp[4];
      long unsigned int data_shift;
    //Read BMP identifier (bfType)
      file.read(temp,2);
      temp[2] = '\0';
      if ((temp[0] != 'B') || (temp[1] != 'M'))
      {
        return false;
      }
    //Ignore file size and two reserved zero (bfSize, bfReserved1, bfReserved2)
      file.ignore(8);
    //Read pixel-data shift (bfOffBits)
      file.read(temp,4);
      data_shift = 0;
      for (int i=0; i<4; i++)
      {
        data_shift += (int)(temp[i]) * pow(256.0,i);
      }
      if (data_shift < 54)
      {
        return false;
      }
    //Ignore information data size (biSize)
      file.ignore(4);  
    //Read image width (biWidth)
      file.read(temp,4);
      width = 0;
      for (int i=0; i<4; i++)
      {
        width += (int)(temp[i]) * pow(256.0,i);
      }
      if (width < 0)
      {
        return false;
      }
    //Read image height (biHeight)
      file.read(temp,4);
      height = 0;  
      for (int i=0; i<4; i++)
      height += (int)(temp[i]) * pow(256.0,i);
      if (height < 0)
      {
        return false;
      }
    //Read mandatory 1 (biPlanes)
      file.ignore(2);
    //Read bite per pixel (biBitCount)
      file.read(temp,2);
      int bipp = 0;
      bipp += (int)(temp[0]) + (int)(temp[1])*256;
      if ((bipp <= 0) || (bipp / 8. != 3))
      {
        return false;
      }
      bpp = 3;
    //Read compression type (biCompression)
      file.read(temp,4);
      int c_type = 0;
      for (int i=0; i<4; i++)
      {
        c_type += (int)(temp[i]) * pow(256.0,i);
      }
      if (c_type != 0)
      {
        return false;
      }
      file.close();
      file.open(file_name);
      file.ignore (data_shift);
    //Read pixel data
      pixels = new unsigned char[width*height*bpp];
      for (int i=height-1; i>=0; i--)
      {
        for (int j=0; j<width; j++)
        {
          file.read(reinterpret_cast<char*>(&pixels[i*width*bpp + j*bpp + 2]), 1);
          file.read(reinterpret_cast<char*>(&pixels[i*width*bpp + j*bpp + 1]), 1);
          file.read(reinterpret_cast<char*>(&pixels[i*width*bpp + j*bpp]), 1);
        }
      }
    //Create texture
      Terminal terminal;

    Считываю BMP файл. Размеры, количество бит на пиксель и тип сжатия считываются нормально. Бит на пиксель 24, сжатия нет(0). Дальше я переоткрываю файл и отступаю нужное кол-во пикселей (смещение данных). После этого считываю данные о цветах пикселей. С рисунками нарисованными непосредственно мной всё проходит нормально. Но с картинками взятыми из интернета происходит сбой. После определённого пикселя считывание прекращается. По дебагу получается что при достижение этого пикселя наступает конец файла. Пробовал вырезать куски изображения из нета и переносить в свой файл. Одни куски переносятся и всё нормально, другие обрывают считывание. Наблюдал эту проблему у нескольких рисунков. Возможно кто-то сталкивался с такой проблемой?

    Источник: http://www.gamedev.ru/code/forum/?id=144831

    TarasB, 07 Марта 2011

    Комментарии (19)
  11. Pascal / Говнокод #5912

    +101

    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
    TLine = record
        X1, Y1, X2, Y2: smallint;
        Attr: array [0 .. 7] of byte;
      end;
    
    {rail:
        Attr[0]: Quality
        Attr[1]: ********
                 ||Weight of Station
                 ||10 = Station; 11 = Big Station
        Attr[2]: Count of passengers
        Real count = Attr[2] * (Attr[1] and $3F) / 63;
        Attr[3]: ****0100
                 ||||
                 |||for Selected
                 ||for "crossrail"
                 for MoveEndSel
      ===========================================
       bridge:
        Attr[0]: Quality
        Attr[1]: ********
                       ||
                       Z of ends
        Attr[2]:
        Attr[3]: ****1100
      ===========================================
       3d-object:
        Attr[0]: Number
        Attr[1-2]: RandSeed
        Attr[3]: ****1111
      ===========================================
      Attr[4..7] reserved, but not used
    
      }

    Это я был вынужден написать себе такую памятку после попыток понять свой код, начатый на 3 курсе.
    В будущем я учёл свои ошибки при написании http://govnokod.ru/5261

    TarasB, 06 Марта 2011

    Комментарии (13)