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

    Всего: 18

  2. C++ / Говнокод #1846

    +60.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
    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
    void CExeTuner::ResFill2Tree(uchar *baddr, uchar *addr, TRes *now, int level)
    {
    	int len;
    	now->size1=*(uword *)(addr+0x0C); now->size2=*(uword *)(addr+0x0E);
    	if (now->size1+now->size2) now->mas=new TRes * [(now->size1+now->size2)];
    	ulong long1,long2;
    	for (int i=0; i<(now->size1+now->size2); i++)
    	{
    		now->mas[i]=new TRes;
    		now->mas[i]->back=now;
    		now->mas[i]->name=new char [32];
    		now->mas[i]->mas=NULL; now->mas[i]->data=NULL;
    		long1=*(ulong *)(addr+0x10+(i<<3));
    		long2=*(ulong *)(addr+0x14+(i<<3));
    		if (long1&0x80000000) {
    			long1&=0x7FFFFFFF;
    			now->mas[i]->isname=true;
    			len=*(uword *)(baddr+long1);
    			now->mas[i]->rname1=new uchar [len*2+2+1];
    				now->mas[i]->rname1[len*2+2]=0;
    				memcpy(now->mas[i]->rname1,baddr+long1,len*2+2);
    			now->mas[i]->name=new char [len+1];
    				now->mas[i]->name[len]=0;
    				for (int j=0; j<=len; j++)
    				now->mas[i]->name[j]=now->mas[i]->rname1[(j+1)*2];
    		} else {
    			now->mas[i]->isname=false;
    			now->mas[i]->rname2=long1;
    			if (!ResNumToStr(long1,now->mas[i]->name,level)) _itoa(long1,now->mas[i]->name,10);
    		}
    		if (long2&0x80000000) {
    			long2&=0x7FFFFFFF;
    			now->mas[i]->isdir=true;
    			ResFill2Tree(baddr, baddr+long2, now->mas[i], level+1);
    		} else {
    			now->mas[i]->isdir=false;
    			now->mas[i]->size1=*(ulong *)(baddr+long2+4);
    			now->mas[i]->data=new uchar [now->mas[i]->size1];
    			if ((*(ulong *)(baddr+long2)+now->mas[i]->size1)>(*ExeMain.ResDirAddrOBJ+*ObjMas[ExeMain.ResPosInObj].size))
    			{ now->mas[i]->data=NULL; now->mas[i]->size1=0;
    			} else memcpy(now->mas[i]->data,baddr-*ExeMain.ResDirAddrOBJ+*(ulong *)(baddr+long2),now->mas[i]->size1);
    		}
    	}
    }

    Древнющий проект откопал))
    Метод извлекает все ресурсы из PE файла в структуру типа дерево))

    k06a, 15 Сентября 2009

    Комментарии (3)
  3. C# / Говнокод #1695

    +127.7

    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
    ...
    
    // Импорт функций для работы с MailSlot
    [DllImport("kernel32.dll")]
    static extern int CreateMailslot(
    	string name,
    	int maxMessageSize,
    	int readTimeout,
    	int securityAttributes);
    [DllImport("kernel32.dll")]
    static extern int GetMailslotInfo(
    	int hFile,			// mailslot handle
    	int maxMsgSize,		// maximum message size
    	int* lpcbMessage,	// size of next message
    	int* lpcMessage,	// number of messages
    	int timeout);		// read time-out
    [DllImport("kernel32.dll")]
    static extern int ReadFile(
    	int hFile,
    	void* lpBuffer,
    	int nNumberOfBytesToRead,
    	int* lpNumberOfBytesRead,
    	int overlapped);
    
    ...
    
    // Чтение входящего пакета
    private void readMessage(int cbMessage)
    {
    	int bytesReaden, fResult;
    	byte[] buf = new byte [102400];
    
    	fixed (byte* data = buf)
    	{
    		fResult = ReadFile(
    			handleServer,
    			data,
    			cbMessage,
    			&bytesReaden,
    			0);
    	}
    
    	if (fResult == 0)
    	{
    		textBox_chat.AppendText("--< Невозможно прочесть данные >--\n");
    		return;
    	}
    
    	string str = "";
    	MsgType type = (MsgType)'e';
    	if (buf.Length > 0)
    	{
    		type = (MsgType)buf[0];
    		for (int i = 0; i < bytesReaden; i++)
    			str += BitConverter.ToChar(buf,i*2);
    		//str = buf.ToString();
    		str = str.Remove(0, 1);
    	}
    
    	switch (type)
    	{
    		...
    	}		
    }
    
    ...

    Учебная задача: чат на MailSlot.
    Битва с шарпом за указатели, за массивы и т.д.

    k06a, 26 Августа 2009

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

    +48

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    while( !InputFileStream.atEnd() )
    {
    	QString Qstrtmp;
    	InputFileStream >> Qstrtmp;
    	ReadButton.bTag =  QString(QObject::tr( (Qstrtmp.toStdString()).c_str() ));
    	InputFileStream >> Qstrtmp;
    	ReadButton.iTag =  QString(QObject::tr( (Qstrtmp.toStdString()).c_str() ));
    	InputFileStream >> Qstrtmp;
    	ReadButton.Popup =  QString(QObject::tr( (Qstrtmp.toStdString()).c_str() ));
    	ReadButton.PartitionId = *iVar;
    	this->Buttons.push_back( ReadButton );
    }

    Код взят из совместного проекта 5-ти студентов.
    Это был начальный период нашего изучения Qt.

    k06a, 26 Августа 2009

    Комментарии (4)
  5. Java / Говнокод #1688

    +70.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
    import javax.microedition.lcdui.*;
    import java.lang.*;
    import java.io.*;
    
    public class LNRES
    {
    	public InputStream is=null;
    	public String lines[]=null;
    	
    	LNRES(String name,int size) 
    	{
    		int x=0;
    		is=getClass().getResourceAsStream(name);
    		byte mb[]=new byte[size];
    		try { x=is.read(mb); } catch (Exception ex) { }
    		char mc[]=new char[x];
    		for (int i=0; i<x; i++) mc[i]=(char)mb[i];
    		
    		int n=0,a=0,l=0;
    		String mas2[]=null;
    		for (int i=0; i<mc.length; i++) {
    			if ((mb[i]==13)||(i==mc.length-1)) {
    				mas2=new String[n+1];
    				for (int j=0; j<n; j++) mas2[j]=new String(lines[j]);
    				mas2[n]=new String(mc,a,l+((i==mc.length-1)?1:0)); n++; lines=new String[n];
    				for (int k=0; k<n; k++) lines[k]=new String(mas2[k]);
    				a=i+2; l=0; i++;
    			} else l++;
    		}
    		lines=new String[n];
    		for (int i=0; i<n; i++) lines[i]=new String(mas2[i]);		
    	}	
    }

    Писалось под j2me. Класс считывает весь файл и превращает его в массив строк.

    k06a, 26 Августа 2009

    Комментарии (6)
  6. Куча / Говнокод #1592

    +144.8

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    rem = 1;/*
    @cls
    @cscript %~s0 //E:JScript //Nologo
    @exit /b
    */
    
    str = WScript.StdIn.ReadLine();
    WScript.StdOut.Write(1+2+3);

    Файл сохранять в *.BAT
    Это мой первый полиглот полиглот BAT и JScript.
    Про полиглоты на вики: http://en.wikipedia.org/wiki/Polyglot_(computing)

    k06a, 15 Августа 2009

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

    +57.7

    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
    @echo off
    cls
    pushd "%~d0%~p0"
    echo Current DIR: "%CD%"
    if "%~1" == "talk_widget" goto talker
    
    
    rem ////////////////////
    :auth
    echo Enter chat filename to connect ("abc" for example):
    set /p chat=^>
    echo Enter your nick:
    set /p nick=^>
    start call %0 talk_widget %chat% %nick%
    
    rem ////////////////////
    :listener
    cls
    call title "| Chat: %chat% | User: %nick% |"
    if exist %chat%_history type %chat%_history
    
    :list_go
    ping 127.0.0.1 -n 1 -w 20 > nul
    set oldtext=%text%
    set /p text=<%chat%
    if not "%text%" == "%oldtext%" echo %text%
    goto list_go
    rem ////////////////////
    
    
    rem ////////////////////
    rem // %2 - chat name //
    rem // %3 - user nick //
    rem ////////////////////
    :talker
    set chat=%~2
    set nick=%~3
    cls
    call title "| Chat: %chat% | User: %nick% |"
    call ::cs_in
    echo (%TIME% %nick% connected)>%chat%
    call ::cs_out
    echo (%TIME% %nick% connected)>>%chat%_history
    
    :talkloop
    cls
    echo Dear %nick%, type message to send:
    set /p msg=^>
    rem call ::cs_in
    echo [%TIME% %nick%]: %msg%>%chat%
    rem call ::cs_out
    echo [%TIME% %nick%]: %msg%>>%chat%_history
    goto talkloop
    rem ////////////////////
    
    
    rem ////////////////////
    :cs_in
    if exist "%chat%_cs" ping 127.0.0.1 -n 1 -w 50 > nul
    set cs_value=%RANDOM%
    
    :cs_in_loop
    echo %cs_value%>%chat%_cs
    set /p ret=<%chat%_cs
    if "%ret%" == "%cs_value%" exit /b
    ping 127.0.0.1 -n 1 -w 10 > nul
    goto :cs_in_loop
    rem ////////////////////
    
    
    rem ////////////////////
    :cs_out
    del %chat%_cs
    exit /b
    rem ////////////////////
    
    
    rem =========================================================

    Чат на BAT. Сколько угодно народу.
    Выложите батник в сетевую папку и оттуда запускайте с разных ПК.
    Статья с тонкостями: http://k06a.blogspot.com/2009/06/blog-post_27.html

    k06a, 15 Августа 2009

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

    +6.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
    #ifndef SOCHET_H
    #define SOCHET_H
    
    // Сдвигает самую младшую единицу в сторону младшего разряда
    #define shiftLast1Right(x) ( (x-1)^((x^(x-1)) >> 2) )
    
    // Дописывает 1 после самой младшей единицы
    #define add1AfterLast1(x) ( x | ((x^(x-1))+1) >> 2 )
    
    template<class T>
    class Sochet
    {
    public:
    	T value;
    
    	//////////////////////////////////////////////////////////////////////////
    
    	Sochet():value(0) { }
    	Sochet(int n, int k) {
    		firstTurn(n, k);
    	}
    	~Sochet() {
    		value = 0;
    	}
    
    	//////////////////////////////////////////////////////////////////////////
    
    	// Первая комбинация
    	// В первоначальной ситуации все К единиц располагаются в старших битах
    	void firstTurn(int n, int k) {
    		value = ( ( T(1) << k ) - 1 ) << (n - k);
    	}
    
    	// Нахождение следующей комбинации
    	// Возвращает false в случае последней комбинации
    	bool nextTurn()
    	{
    		// Отлов последней комбинации
    		if (value & (value+1) == 0)
    			return false;
    		
    		// Условие по младшему биту: 1 или 0
    		if (value & 1)
    		{
    			value >>= 1;
    			nextTurn();
    			value = add1AfterLast1(value << 1);
    		} else
    			value = shiftLast1Right(value);
    		
    		return true;
    	}
    }
    
    #endif // SOCHET_H

    Шаблон перебора всех сочетаний/выборок в много разрядных числах.
    Пример перебираемых чисел для N=5, K=3:
    11100
    11010
    11001
    10110
    10101
    10011
    01110
    01101
    01011
    00111

    // Код выглядит сочно(особенно дефайны), зато всё работает максимально быстро.
    // Статья про этот алгоритм: http://k06a.blogspot.com/2009/04/blog-post_08.html

    k06a, 15 Августа 2009

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

    +46.3

    1. 1
    delete ptr + int(ptr=0);

    Освобождение памяти и обнуление указателя.

    k06a, 11 Августа 2009

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