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

    +1

    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
    #define SWITCHCALL                                                         \
      dtrick                                                                   \
      switch(cnt){                                                             \
      case 0:  r = fp(); break;                                                \
      case 1:  r = fp(d[0]); break;                                            \
      case 2:  r = fp(d[0], d[1]); break;                                      \
      case 3:  r = fp(d[0], d[1], d[2]); break;                                \
      case 4:  r = fp(d[0], d[1], d[2], d[3]); break;                          \
      case 5:  r = fp(d[0], d[1], d[2], d[3], d[4]); break;                    \
      case 6:  r = fp(d[0], d[1], d[2], d[3], d[4], d[5]); break;              \
      case 7:  r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6]); break;        \
      case 8:  r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7]); break;  \
      case 9:  r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8]); break;                                            \
      case 10: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9]); break;                                      \
      case 11: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10]); break;                               \
      case 12: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11]); break;                         \
      case 13: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11],d[12]); break;                   \
      case 14: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11],d[12],d[13]); break;             \
      case 15: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11],d[12],d[13],d[14]); break;       \
      case 16: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11],d[12],d[13],d[14],d[15]); break; \
      case 17: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11],d[12],d[13],d[14],d[15],         \
                      d[16]); break;                                           \
      case 18: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11],d[12],d[13],d[14],d[15],         \
                      d[16],d[17]); break;                                     \
      case 19: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11],d[12],d[13],d[14],d[15],         \
                      d[16],d[17],d[18]); break;                               \
      case 20: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11],d[12],d[13],d[14],d[15],         \
                      d[16],d[17],d[18],d[19]); break;                         \
      case 21: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11],d[12],d[13],d[14],d[15],         \
                      d[16],d[17],d[18],d[19],d[20]); break;                   \
      case 22: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11],d[12],d[13],d[14],d[15],         \
                      d[16],d[17],d[18],d[19],d[20],d[21]); break;             \
      case 23: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11],d[12],d[13],d[14],d[15],         \
                      d[16],d[17],d[18],d[19],d[20],d[21],d[22]); break;       \
      case 24: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11],d[12],d[13],d[14],d[15],         \
                      d[16],d[17],d[18],d[19],d[20],d[21],d[22],d[23]); break; \
      case 25: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11],d[12],d[13],d[14],d[15],         \
                      d[16],d[17],d[18],d[19],d[20],d[21],d[22],d[23],         \
                      d[24]);break;                                            \
      case 26: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11],d[12],d[13],d[14],d[15],         \
                      d[16],d[17],d[18],d[19],d[20],d[21],d[22],d[23],         \
                      d[24],d[25]);break;                                      \
      case 27: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11],d[12],d[13],d[14],d[15],         \
                      d[16],d[17],d[18],d[19],d[20],d[21],d[22],d[23],         \
                      d[24],d[25],d[26]);break;                                \
      case 28: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11],d[12],d[13],d[14],d[15],         \
                      d[16],d[17],d[18],d[19],d[20],d[21],d[22],d[23],         \
                      d[24],d[25],d[26],d[27]);break;                          \
      case 29: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11],d[12],d[13],d[14],d[15],         \
                      d[16],d[17],d[18],d[19],d[20],d[21],d[22],d[23],         \
                      d[24],d[25],d[26],d[27],d[28]);break;                    \
      case 30: r = fp(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],          \
                      d[8], d[9], d[10],d[11],d[12],d[13],d[14],d[15],         \
                      d[16],d[17],d[18],d[19],d[20],d[21],d[22],d[23],         \
                      d[24],d[25],d[26],d[27],d[28],d[29]);break;              \
    
    
      /******* ну вы понели *******/

    Какой кавай )))
    https://github.com/jsoftware/jsource/blob/master/jsrc/x15.c

    Запостил: KaBauHblu_nemyx, 08 Июля 2019

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

    • static I     NOOPTIMIZE stdcalli(STDCALLI fp,I*d,I cnt,DoF*dd,I dcnt){I r;
       SWITCHCALL;
       R r;
      }  /* I result */
      static I     NOOPTIMIZE altcalli(ALTCALLI fp,I*d,I cnt,DoF*dd,I dcnt){I r;
       SWITCHCALL;
       R r;
      }
      static D     NOOPTIMIZE stdcalld(STDCALLD fp,I*d,I cnt,DoF*dd,I dcnt){D r;
       SWITCHCALL;
       R r;
      }  /* D result */
      static D     NOOPTIMIZE altcalld(ALTCALLD fp,I*d,I cnt,DoF*dd,I dcnt){D r;
       SWITCHCALL;
       R r;
      }
      Ответить
      • Выглядит, как хуй исходники «J». Погодите...
        Ответить
        • Выглядит как попытка писать на си низкоуровневое говно переносимо. С асмовставками можно было бы большую часть этого заменить на суслика с пушкой.

          Это часть реализации глагола cd (или 15!:0 —– вызов функции из длл), после загрузки длл, парсинга сигнатуры и подготовки данных всё попадает сюда. Судя по всему вызвать функцию с >64 аргументов без патчинга интерпретатора не получится.
          Ответить
      • Оптимизация: ALTCALLI и ALTCALLD (это cdecl) можно всегда вызывать с 64 аргументами.
        Ответить
    • Интересно, как это реализовано в других языках? Например в том же петоне. Я пробовал найти, но не смог, ничего не понял.

      То ли дело 'J', смотрим на список файлов: a.c a.h ab.c af.c ... x.c x.h x15.c xa.c xb.c ...
      и сразу понятно, что файли x* —– это реализация !: (xenos или foreign), а x15.c это реализация 15!: —– работа с длл и памятью. Всё чётко и ясно! Именно поэтому я за 'J'.
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • The dll call stack frame is built entirely with I values.
      All the int types (char, unicode, short etc) are stacked as I valued.
      Pointers are stacked as I values.
      Short floats are stacked as I values.
      Doubles are stacked as I values (2 for J32 and 1 for J64).

      The Sky is stacked as I value.
      Allah is stacked as I value.
      Ответить
    • k='_'==*proc?-strtoI(1+proc,0L,10):strtoI(proc,0L,10);
      CDASSERT(k&&'0'==*lib||0<=k&&'1'==*lib,DEBADFN);
      
      
      static I cdjtype(C c){R c=='c'?LIT:c=='w'?C2T:c=='u'?C4T:(c=='j'||c=='z')?CMPX:(c=='f'||c=='d')?FL:c?INT:0;}


      Как такой кодстайл называется?
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Я использую встроенный поиск Vuze (Azureus) + DHT + PEX + в каждый торрент добавляю вручную ретрекеры, которые можно получить отсюда:
        http://internetwarriors.net/

        P.S. Почему вопрос задан в этом говнокоде?
        Ответить
        • > встроенный поиск
          Но это поди такое же говнище с кучей наебалова, как и во всяких ослах?
          Ответить
          • Ну я ж не мобильником торренты качаю. Мне не жало скачать что-то лишнее, чтобы потом проверить.

            Кстати, в Kad/ed2k говна стало меньше. Вероятно, копирасты признали эти протоколы бесперспективными и прекратили срать.

            А вот некоторые антикварные сети вроде Gnutella 1 засраны выше крыши (Gnutella 2 почему-то чище). Вероятно, в доисторические времена засрали настолько, что до сих пор не выветривается.
            Ответить
            • P.S. А самые чистые сети — GNUnet, Freenet и прочие новые... потому что в них почти никого нет.
              Ответить
            • > проверить
              Пираты должны страдать, да?

              Имхо, в торрентах самое ценное - это именно сайт с нормальными описаниями, комьюнити и какой-никакой модерацией. А встроенный поиск - это возврат в каменный век.
              Ответить
    • Царские пор-тянки?
      Ответить
    • https://github.com/philburk/pforth/blob/master/csrc/pf_cglue.c#L24
      cell_t CallUserFunction( cell_t Index, int32_t ReturnMode, int32_t NumParams )
      {
          cell_t P1, P2, P3, P4, P5;
          cell_t Result = 0;
          CFunc0 CF;
      
      DBUG(("CallUserFunction: Index = %d, ReturnMode = %d, NumParams = %d\n",
          Index, ReturnMode, NumParams ));
      
          CF = CustomFunctionTable[Index];
      
          switch( NumParams )
          {
          case 0:
              Result = ((CFunc0) CF) ( );
              break;
          case 1:
              P1 = POP_DATA_STACK;
              Result = ((CFunc1) CF) ( P1 );
              break;
          case 2:
              P2 = POP_DATA_STACK;
              P1 = POP_DATA_STACK;
              Result = ((CFunc2) CF) ( P1, P2 );
              break;
          case 3:
              P3 = POP_DATA_STACK;
              P2 = POP_DATA_STACK;
              P1 = POP_DATA_STACK;
              Result = ((CFunc3) CF) ( P1, P2, P3 );
              break;
          case 4:
              P4 = POP_DATA_STACK;
              P3 = POP_DATA_STACK;
              P2 = POP_DATA_STACK;
              P1 = POP_DATA_STACK;
              Result = ((CFunc4) CF) ( P1, P2, P3, P4 );
              break;
          case 5:
              P5 = POP_DATA_STACK;
              P4 = POP_DATA_STACK;
              P3 = POP_DATA_STACK;
              P2 = POP_DATA_STACK;
              P1 = POP_DATA_STACK;
              Result = ((CFunc5) CF) ( P1, P2, P3, P4, P5 );
              break;
          default:
              pfReportError("CallUserFunction", PF_ERR_NUM_PARAMS);
              EXIT(1);
          }
      
      /* Push result on Forth stack if requested. */
          if(ReturnMode == C_RETURNS_VALUE) PUSH_DATA_STACK( Result );
      
          return Result;
      }
      Блядь, и этот туда же...
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • <?php
          function CallUserFunction( $Index, $ReturnMode, $NumParams )
          {
              global $CustomFunctionTable;
              $Result = 0;
          
          DBUG(("CallUserFunction: Index = %d, ReturnMode = %d, NumParams = %d\n",
              $Index, $ReturnMode, $NumParams ));
          
              $CF = $CustomFunctionTable[$Index];
          
              switch( $NumParams )
              {
              case 0:
                  $Result = $CF ( );
                  break;
              case 1:
                  $P1 = POP_DATA_STACK;
                  $Result = $CF ( $P1 );
                  break;
              case 2:
                  $P2 = POP_DATA_STACK;
                  $P1 = POP_DATA_STACK;
                  $Result = $CF ( $P1, $P2 );
                  break;
              case 3:
                  $P3 = POP_DATA_STACK;
                  $P2 = POP_DATA_STACK;
                  $P1 = POP_DATA_STACK;
                  $Result = $CF ( $P1, $P2, $P3 );
                  break;
              case 4:
                  $P4 = POP_DATA_STACK;
                  $P3 = POP_DATA_STACK;
                  $P2 = POP_DATA_STACK;
                  $P1 = POP_DATA_STACK;
                  $Result = $CF ( $P1, $P2, $P3, $P4 );
                  break;
              case 5:
                  $P5 = POP_DATA_STACK;
                  $P4 = POP_DATA_STACK;
                  $P3 = POP_DATA_STACK;
                  $P2 = POP_DATA_STACK;
                  $P1 = POP_DATA_STACK;
                  $Result = $CF ( $P1, $P2, $P3, $P4, $P5 );
                  break;
              default:
                  pfReportError("CallUserFunction", PF_ERR_NUM_PARAMS);
                  EXIT(1);
              }
          
          /* Push result on Forth stack if requested. */
              if($ReturnMode == C_RETURNS_VALUE) PUSH_DATA_STACK( $Result );
          
              return $Result;
          }
          Ответить

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