1. Assembler / Говнокод #2617

    +260.9

    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
    7855BD60 55               push        ebp  
    7855BD61 8B EC            mov         ebp,esp 
    7855BD63 56               push        esi  
    7855BD64 33 C0            xor         eax,eax 
    7855BD66 50               push        eax  
    7855BD67 50               push        eax  
    7855BD68 50               push        eax  
    7855BD69 50               push        eax  
    7855BD6A 50               push        eax  
    7855BD6B 50               push        eax  
    7855BD6C 50               push        eax  
    7855BD6D 50               push        eax  
    7855BD6E 8B 55 0C         mov         edx,dword ptr [ebp+0Ch] 
    7855BD71 8D 49 00         lea         ecx,[ecx] 
    7855BD74 8A 02            mov         al,byte ptr [edx] 
    7855BD76 0A C0            or          al,al 
    7855BD78 74 09            je          7855BD83 
    7855BD7A 83 C2 01         add         edx,1 
    7855BD7D 0F AB 04 24      bts         dword ptr [esp],eax 
    7855BD81 EB F1            jmp         7855BD74 
    7855BD83 8B 75 08         mov         esi,dword ptr [ebp+8] 
    7855BD86 8B FF            mov         edi,edi 
    7855BD88 8A 06            mov         al,byte ptr [esi] 
    7855BD8A 0A C0            or          al,al 
    7855BD8C 74 0C            je          7855BD9A 
    7855BD8E 83 C6 01         add         esi,1 
    7855BD91 0F A3 04 24      bt          dword ptr [esp],eax 
    7855BD95 73 F1            jae         7855BD88 
    7855BD97 8D 46 FF         lea         eax,[esi-1] 
    7855BD9A 83 C4 20         add         esp,20h 
    7855BD9D 5E               pop         esi  
    7855BD9E C9               leave            
    7855BD9F C3               ret

    чудеса оптимизации

    GovnocoderJr, 14 Февраля 2010

    Комментарии (30)
  2. JavaScript / Говнокод #2616

    +160.6

    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
    // всё ещё Wakaba Extension http://userscripts.org/scripts/review/23705
    function optionValue(optionName)
    {
    	var optionsString = (doOptionsPanel) ? get_cookie('wkExtOptions') : '';
    	if (optionsString == '')
    	{
    		switch (optionName)
    		{
    			case 'doQuickReply':
    				return doQuickReply;
    				break;
    			case 'doThreadExpansion':
    				return doThreadExpansion;
    				break;
    			case 'doPostExpansion':
    				return doPostExpansion;
    				break;
    /*... еще 12 условий ... */
    			default:
    				return 0;
    		}
    	}
    	else
    	{
    		var optionsArray = optionsString.split(/,/);
    		switch (optionName)
    		{
    			case 'doQuickReply':
    				return parseInt(optionsArray[0]); // parseInt ensures that 0 is handled as an integer. lol, weak types
    				break;
    			case 'doThreadExpansion':
    				return parseInt(optionsArray[1]);
    				break;
    			case 'doPostExpansion':
    				return parseInt(optionsArray[2]);
    				break;
    /*... еще 12 условий ... */
    			default:
    				return 0;
    		}
    	}
    }

    Естественно, я бы сделал это хэшами.
    Но кому-то код, что выше понятнее...
    function optionValue(optionName)
    {
    var optionsString = (doOptionsPanel) ? get_cookie('wkExtOptions') : '';
    if(!optionsString){
    return options[optionName]; // не установлена опция - возвращается undefined
    }else{
    return defaultOptions[optionName];
    }
    }

    m1el, 14 Февраля 2010

    Комментарии (5)
  3. JavaScript / Говнокод #2615

    +170.3

    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
    // http://userscripts.org/scripts/review/23705
    		var replyBoxContentPostAreaTableSubjectRowRightColumnSubmitButton = document.createElement("input");
    
    		replyBoxContentPostAreaTableSubjectRowRightColumnSubmitButton.setAttribute("type", "submit");
    
    		replyBoxContentPostAreaTableSubjectRowRightColumnSubmitButton.setAttribute("value", "Submit");
    
    		replyBoxContentPostAreaTableSubjectRowRightColumn.appendChild(replyBoxContentPostAreaTableSubjectRowRightColumnSubmitButton);
    
    		replyBoxContentPostAreaTableSubjectRow.appendChild(replyBoxContentPostAreaTableSubjectRowLeftColumn);
    
    		replyBoxContentPostAreaTableSubjectRow.appendChild(replyBoxContentPostAreaTableSubjectRowRightColumn);
    
    		replyBoxContentPostAreaTBody.appendChild(replyBoxContentPostAreaTableSubjectRow);

    Грустно. Очень грустно.

    m1el, 14 Февраля 2010

    Комментарии (7)
  4. C# / Говнокод #2614

    +112.1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    public IEnumerator GetEnumerator()
                {
                    for (int CurID = 0; CurID < (controls.Count + animations.Count) / 2; CurID++)
                    {
                        KeyValuePair<Control, Animation> kvp = new KeyValuePair<Control, Animation>(controls[CurID], animations[CurID]);
                        yield return kvp;
                    }       
                }

    Писал я код, и задумался. А когда очнулся - уже было это.
    ЗЫ. controls.Count == animations.Count

    psina-from-ua, 14 Февраля 2010

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

    +66.9

    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
    // Компилировать: g++ -o test reghead.cpp object1.cpp regtail.cpp main.cpp
    
    //================== object.h: ==================
    struct Object {
    	const char *name;
    	unsigned char props[0];
    };
    
    extern Object *head, *tail;
    enum {PROPTYPE_BYTE = 0x40, PROPTYPE_WORD = 0x80};
    enum {PROP_DESC = 1, PROP_LASTSTRING, PROP_COLOR, PROP_MASS, PROP_END = 0};
    
    #define DECLARE_OBJECT(name) \
    extern Object Object_##name, *name##_reg; \
    Object *name##_reg __attribute__((section("oreg"))) = &Object_##name;\
    Object Object_##name = {#name}; \
    namespace name##_props {
    
    #define PROP_BYTE(id, value) unsigned char id##_1 = id | PROPTYPE_BYTE, id##_2 = value;
    #define PROP_WORD(id, value) unsigned char id##_1 = id | PROPTYPE_WORD, id##_2[2] = {value & 0xff, value >> 8};
    #define PROP_STRING(id, value) unsigned char id##_1 = id; unsigned char id##_2[] = value;
    #define END_PROPS unsigned char final = PROP_END; }
    
    //================== reghead.cpp: ==================
    #include "object.h"
    Object *head __attribute__((section("oreg"))) = 0;
    
    //================== regtail.cpp: ==================
    #include "object.h"
    Object *tail __attribute__((section("oreg"))) = 0;
    
    //================== object1.cpp: ==================
    #include "object.h"
    
    DECLARE_OBJECT(object1)
    PROP_BYTE(PROP_COLOR, 14)
    PROP_WORD(PROP_MASS, 300)
    PROP_STRING(PROP_DESC, "description")
    END_PROPS
    
    //================== main.cpp: ==================
    #include <stdio.h>
    #include <string.h>
    #include "object.h"
    
    int main()
    {
    	Object **obj = &head;
    	while (++obj <= &tail) {
    		if (*obj == NULL)
    			continue;
    		printf("Object: %s\n", (*obj)->name);
    		unsigned char *props = (*obj)->props;
    		int id;
    		while ((id = *props) != PROP_END) {
    			if (id < PROP_LASTSTRING) {
    				char *value = (char *)props+1;
    				props = (unsigned char *)value + strlen(value) + 1;
    				switch (id) {
    				case PROP_DESC:
    					printf("    Description: %s\n", value);
    					break;
    				}
    			} else {
    				int value;
    				switch (id >> 6) {
    				case 1:
    					value = *((unsigned char *)(props+1));
    					props += 2;
    					break;
    				case 2:
    					value = *((unsigned short *)(props+1));
    					props += 3;
    					break;
    				}
    				switch (id & 63) {
    					case PROP_COLOR:
    						printf("    Color: %d\n", value);
    						break;
    					case PROP_MASS:
    						printf("    Mass:%d\n", value);
    						break;
    				}
    			}
    		}
    	}
    }

    Прошу прощения за длинный пример, но не мог не поделиться. Написано по мотивом кода из того же ZDaemon – примерно так там задаются и обрабатываются свойства объектов. Работает только с компилятором GCC. Если вы поняли, как это работает, а также почему подобный говнокод работает с gcc версии 3.2 и может зависать с более поздними версиями – можете по праву гордиться собой.

    Arseniy, 13 Февраля 2010

    Комментарии (11)
  6. Си / Говнокод #2612

    +135.2

    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
    inline void clearbufshort (void *buff, unsigned int count, WORD clear)
    {
            if (!count)
                    return;
            SWORD *b2 = (SWORD *)buff;
            if ((int)b2 & 2)
            {
                    *b2++ = clear;
                    if (--count == 0)
                            return;
            }
            do
            {
                    *b2++ = clear;
            } while (--count);
    }

    Наткнулся на такой вот шедевр в коде ZDaemon. Это аналог memset, только заполняет не байтами, а словами.

    Кстати, там же рядом есть функция, запполняющая двойными словами:

    inline void clearbuf (void *buff, int count, SDWORD clear)
    {
    SDWORD *b2 = (SDWORD *)buff;
    while (count--)
    *b2++ = clear;
    }

    Arseniy, 13 Февраля 2010

    Комментарии (6)
  7. Си / Говнокод #2611

    +137.6

    1. 1
    w = (GtkWidget*)(*((int*)(lw->data)));

    Объект для медитаций

    mutanabbi, 13 Февраля 2010

    Комментарии (20)
  8. C++ / Говнокод #2610

    +68.1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    void TInputTID::AvWnd(GtkWidget* w, char* name, int bOut, void (*cb) (int wnd, int data))
    {
        // Тут объявления локальных переменных и не относящиеся к делу манипуляции
        if(((int)cb) != -1) // Шедевр
        {
          gtk_signal_connect ((GtkObject*)hButOK,
                               "clicked",GTK_SIGNAL_FUNC(cb),hOutWndBox);
        }
    }

    Вечное сияние чистого разума. Новое слово в арифметике указателей.

    mutanabbi, 13 Февраля 2010

    Комментарии (10)
  9. Objective C / Говнокод #2609

    −112.9

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    NSString *s_diskUsage = [NSString localizedStringWithFormat:@"Unavailable"];;
    float f_vaultUsage = 0;
      
    if (inData == NULL || inData.loggedIn != 0)
    {
        [s_diskUsage release];
        s_diskUsage = [NSString localizedStringWithFormat:@"Unavailable"];
        f_vaultUsage = (float)0;
    }

    Продолжение эпопеи с проектом на Objective-C. Я не знаю, может это стандарт кодирования такой, когда нужно как можно чаще переинициализировать переменные одними и теми же значениями... на случай если им надоест и они самоуничтожатся...

    Highlander, 13 Февраля 2010

    Комментарии (6)
  10. Objective C / Говнокод #2608

    −357.8

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    -(bool)hasInternetConnection
    {
        return true;
    }
    
    -(void)checkInternetConnection
    {
        NSLog(@"checking connection");
        mTmp.loggedIn = ([self hasInternetConnection]==YES) ? 0 : -1;
    }

    Мой начальник-тимлид, американский индус по происхождению, узнав, что я уже несколько часов потратил на попытки неизвращенной реализации нужного нам "простого" функционала, сказал, что поможет мне, хоть я и не просил.
    Уже через несколько минут я увидел у себя вот эти строки...

    P.S. если кто не знает, то код на Objective-C

    Highlander, 13 Февраля 2010

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