1. Лучший говнокод

    В номинации:
    За время:
  2. Куча / Говнокод #3693

    +129

    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
    for i in 14 15 27 29 38; do # make a sed string to replace special characters
        hexval=$(printf \\\\x%02x $i)
        sedstr=$sedstr"s/'$hexval/chr($i)||'/g;s/$hexval'/'||chr($i)/g;s/$hexval/'||chr($i)||'/g;"
    done
    
    cat <<EOF | sqlplus -S $DB_LOGIN | sed $sedstr | awk -v dbdir=db/data '{print > dbdir"/"$3".sql"}'
    $SPINIT
    BEGIN
      FOR i IN (SELECT * FROM USER_OBJECTS WHERE OBJECT_TYPE='TABLE' ORDER BY OBJECT_NAME) LOOP
        DECLARE
          all_cols VARCHAR2(32767) := '';
          TYPE data_cur_type IS REF CURSOR;
          data_cur data_cur_type;
          ins_str VARCHAR2(32767);
        BEGIN
          FOR j IN (SELECT DISTINCT(COLUMN_NAME) FROM USER_TAB_COLUMNS
                    WHERE TABLE_NAME=i.OBJECT_NAME AND
                    DATA_TYPE IN ('VARCHAR2', 'CHAR', 'NUMBER', 'DATE')
                    ORDER BY COLUMN_NAME) LOOP
            all_cols := all_cols || j.column_name || ',';
          END LOOP;
          IF all_cols is null THEN GOTO end_of_loop; END IF;
          all_cols := RTRIM(all_cols,',');
        
          OPEN data_cur FOR 'select ' ||
           '''INSERT INTO ' || i.object_name || ' (' || all_cols || ') VALUES (' || '''''''||' || replace(all_cols, ',', '||'''''',''''''||') || '||'''''');''' ||
           ' from ' || i.object_name || ' order by ' || all_cols;
          LOOP
            FETCH data_cur INTO ins_str;
            EXIT WHEN data_cur%NOTFOUND;
            dbms_output.put_line(ins_str);
          END LOOP;
          CLOSE data_cur;
        END;
    <<end_of_loop>> NULL;
      END LOOP;
    END;
    /
    EOF

    Проблеме экранирования посвящается.
    На стыке технологий: экспорт данных из БД в виде insert-ов. Там еще есть awk-шный код по разбору всего, что получилось, но он не такой ужасный.
    Автор я, если чо:)

    nil, 13 Июля 2010

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

    +129

    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
    #include <iostream>
    #include <string.h>
    using namespace std;
    int strsearch(char* from, char* what);
    int getnumberafter(char* from, char* what);
    int strch(char* a, char* b, int pos);
    
    int strsearch(char* from, char* what)
    {
        int n=strlen(from)-strlen(what)+1;
        int i;
        for(i=0; i<n; i++)
    	if(strch(from, what, i)==strlen(what)) return i;
        return 0;
    }
    int getnumberafter(char* from, char* what)
    {
        int p, ret=0;
        if((p=strsearch(from,what))==0) return 0;
        p+=strlen(what);
        while(from[p]<'0'&&from[p]>'9')
        {
    	p++;
    	if(p>=strlen(from)) return 0;
        }
        while(from[p]>='0'&&from[p]<='9'&&p<strlen(from))
        {
    	ret=ret*10+(from[p++]-'0');
        }
        return ret;
    }
    int strch(char* a, char* b, int pos)
    {
        int i,n=min(strlen(a)-pos,strlen(b));
        for(i=0; i<n; i++)
    	if(a[i+pos]!=b[i]) return i;
        return i;
    }
    int main(int argc, char* argv[])
    {
        int i;
        double max=1,vol=0;
        for(i=0; i<argc; i++)
        {
    	cout << i << ": " << argv[i] << endl;
    	if(strch(argv[i],"type",0)==4) {  max=getnumberafter(argv[i],"max=");}
    	if(strch(argv[i],"values",0)==6) { vol=(getnumberafter(argv[i],"=")+getnumberafter(argv[i],","))/2;}
        }
        cout << vol/max << endl;
        return 0;
    }

    Задача из чего-то типа этого:
    numid=2,iface=MIXER,name='Master Playback Volume'
    ; type=INTEGER,access=rw---R--,values=2,min=0,max=31,step=0
    : values=31,31
    | dBscale-min=-46.50dB,step=1.50dB,mute=0
    Получить значение в процентах.
    #./a.out `amixer cget numid=2`
    0,67

    Tanger, 08 Июня 2010

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

    +129

    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
    @echo off
    if exist 3.txt del 3.txt
    : begin
    if "%1"=="" goto end
    echo %1 >> 3.txt
    copy 3.txt "%1" >4.txt
    shift
    goto begin
    : end
    dir *. /O-S /B  
    del *.
    del 3.txt
    del 4.txt

    Batch файл под DOS, студенческое задание было: написать *.bat файл, который выводит список аргументов в обратном порядке, например, на команду foo.bat qwe sdf fgh ty должен быть ответ ty fgh sdf qwe. Как-то не додумался я прибавлять аргументы в обратном порядке. и придумал, как это сделать средствами бат файла.

    dj_quake, 26 Мая 2010

    Комментарии (13)
  5. Си / Говнокод #3130

    +129

    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
    #define SPI_BUF_SIZE                                0x400
    #define SDRAM_SPI_0_BUF_MISO           (void*)0x100000
    #define SDRAM_SPI_0_BUF_MOSI           SDRAM_SPI_0_BUF_MISO - SPI_BUF_SIZE
    #define SDRAM_SPI_1_BUF_MISO           SDRAM_SPI_0_BUF_MOSI - SPI_BUF_SIZE
    #define SDRAM_SPI_1_BUF_MOSI           SDRAM_SPI_1_BUF_MISO - SPI_BUF_SIZE
    #define SDRAM_SPI_2_BUF_MISO           SDRAM_SPI_1_BUF_MOSI - SPI_BUF_SIZE
    #define SDRAM_SPI_2_BUF_MOSI           SDRAM_SPI_2_BUF_MISO - SPI_BUF_SIZE
    #define SDRAM_SPI_3_BUF_MISO           SDRAM_SPI_2_BUF_MOSI - SPI_BUF_SIZE
    #define SDRAM_SPI_3_BUF_MOSI           SDRAM_SPI_3_BUF_MISO - SPI_BUF_SIZE
    
    void test()
    {
    void *buf = SDRAM_SPI_3_BUF_MOSI;
    void *buf1 = (void*)0x100000 - 0x400*7;
    *buf = *buf1 = 0xAA;
    
    printf("buf=%.2x \tbuf1=%.2x\n ",*buf, buf1);
    return;
    }

    Расскажу преамбулу. Код писался под проц atmel at91sam7x
    В этом процессоре есть звено SPI (serial pereferial interface). Но так как звено было спроектировано с небольшим косячком (который кстати в эррате был явно описан) буффер для каждой линии нужно было выделять в сдраме.
    Сказано - сделано. Выделили. а так как средства отладки только DBGU и JTAG.
    Все волосы на жопе вырвал пока нашел в чем ошибка.
    Внимание, вопрос. В чем гавно?

    ursus, 29 Апреля 2010

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

    +129

    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
    public Int32 SectionType
            {
                get
                {
                    if (this.StaticRecord) return -1;
                    if ((!this.SectionIsReference) && this.SectionDoNotMakeUp) return 4;
                    if (this.SectionIsSlave)
                    {
                        switch (this.SectionUnionMode)
                        {
                            case 1:
                                return 2;
                            case 2:
                                return 0;
                            default:
                                return 1;
                        }
                    }
                    if (this.SectionIsReference) return 5;
                    if (this.SectionIsUnion) return 3;
                    return 0;
                }
            }

    Собственноручно нагадил...

    Behemoth, 06 Ноября 2009

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

    +129

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    private string              fEmail;
    ...
    public string Email  
    { 
        get {return fEmail = fEmail != null ? fEmail: string.Empty;}
        set {fEmail=value;}
    }

    чтобы проверить на нулл переменную fEmail, ее нужно зачем то присвоить самой же себе, долго вкуривал, но менять не стал. Наверное это заморочки с энхибернэйт

    З.Ы. версия фреймворка для которого было написано это чудо 1.1

    jackman, 21 Августа 2009

    Комментарии (15)
  8. Си / Говнокод #2331

    +128.8

    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
    #define MAX_FILE_LENGHT PAGE_SIZE                                                
    #define TYPE(dev) ( MINOR(dev) >> 4)                                             
    #define NUM(dev)  ( MINOR(dev) & 0xf )                                           
    #define IRQ_NUM 1                                                                
    #define DEV_NAME "keyboard"                                                      
    #define MAX_DEV_COUNT 5                                                          
    #define PORT_START 0xff30                                                        
    int devno,err;
    int mj,min;   
    struct cdev *mydev;
    static char *devbuff;
    struct dev_state{               
    int dev_open;   
    ssize_t dev_read;
    ssize_t dev_write;
    };                
    int mydev_ioctl(struct inode *in,struct file *filp,unsigned int ioctl,unsigned long param);                                                                                                     
    int mydev_open(struct inode *in,struct file* filp);                                                                                                                                                                                                   
    ssize_t mydev_read(struct file *filp,char *buff,ssize_t len,loff_t pos);                                                                                                                        
    ssize_t mydev_write(struct file *filp, const char *buff, ssize_t len,loff_t pos);                                                                                                               
    loff_t mydev_llseek(struct file *filp,loff_t pos, int dist);                                                                                                                                    
    int mydev_close(struct inode *in , struct file *filp);                                                                                                                                          
    static struct dev_state STATE[MAX_DEV_COUNT+1];                                                                                                                               
    struct resource *my_res;                                                                                                                                                                        
    struct file_operations fop_s={
      .owner = THIS_MODULE,       
      .open = mydev_open,         
      .release = mydev_close,     
      .read = mydev_read,         
      .write = mydev_write,       
      .ioctl = mydev_ioctl,       
      .llseek = mydev_llseek,     
    };                            
    static int module3_init(void){                            
      mj=1;                      
      min=1;                     
      my_res->start=0xff30;      
      my_res->name="myres";      
      my_res->flags=IORESOURCE_IO | IORESOURCE_IO_FIXED;
      my_res->parent=NULL;                              
      my_res->sibling=NULL;                             
      my_res->child=NULL;                               
      struct resource *myres=request_region(200,300,"myreg");
      devbuff=(char*)vmalloc(MAX_FILE_LENGHT);               
      memset(devbuff,0x20,sizeof(devbuff));                  
      devno=MKDEV(mj,min);                                   
      mydev=cdev_alloc();                                    
      mydev->owner=THIS_MODULE;                                                              
      cdev_init(mydev,&fop_s);                               
      err=cdev_add(mydev,devno,1);                           
      if(err){                                                      
        printk(KERN_INFO"Invaid devno %d\n",devno);          
        return -EFAULT;                                      
      };                                                     
      printk(KERN_INFO"Device"DEV_NAME"was created\n");      
      return 0;                                              
    };

    Alice, 25 Декабря 2009

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

    +128.8

    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
    public static T Parse<T>(string txt)
            {
                if (string.IsNullOrEmpty(txt))
                    return default(T);
    
                txt = txt.Trim();
    
                Type[] typeArray = new Type[] {
                    typeof(string),
                    typeof(T).MakeByRefType()};
    
                MethodInfo mi = typeof(T).GetMethod("TryParse", typeArray);
    
                T value = default(T);
    
                if (mi != null)
                {
                    object[] prms = new object[]{
                    txt,
                    value};
    
                    if ((bool)mi.Invoke(null, prms) && prms[1] != null)
                        value = (T)prms[1];
                }
    
                return value;
            }

    Не скажу что это такой уж говнокод, но что то говнистое в нем есть =)

    sven47, 26 Ноября 2009

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

    +128.5

    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
    program kot;
    
    var r,i,j, z : integer ;
     famnom: array[1..11,1..26] of char;
    Label lb1, lb2;
    
        begin
    
    Assign(input, 'c:\pascal\kot.txt');
    Reset(input);
     Assign(output, 'c:\pascal\tok.txt');
    Rewrite(output);
    for j:=1 to 10 do
    for i:=1 to 26 do           (*каждому символу присваивается свой номер в массиве*)
    
     begin
     read(input,famnom[j,i]);
     write(famnom[j,i]);        (*исходные данные копируются в файл*)
     end;
    
    writeln('');
    writeln('');
    close(input);
    
    Assign(input, 'c:\pascal\kot.txt');
    Reset(input);
    begin
    
    
    lb1 :   for j:=1 to 10 do
    begin
          i:= 16;                            
    while famnom[j,i]=famnom[j+1,i] do      
    i:=i+1;                               (*блабла*)
    if  famnom[j,i]<famnom[j+1,i] then    
    begin
    for i := 1 to 26 do
    begin
    famnom[11,i]:=famnom[j,i];            (*сравниваются символы короч*)
    famnom[j,i]:=famnom[j+1,i];
    famnom[j+1,i]:=famnom[11,i];
    
    
    end;
    goto lb1;
    end;
    end;
    end;
    
    for j:=1 to 10 do                
    for i:= 1 to 26 do
    begin
    write(famnom[j,i]);
    
    end;
    close(input);
    close(output);
    end.

    Ужас какойто

    guest, 23 Июля 2009

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

    +128.4

    1. 1
    incr var - 1

    Из рабочей программы на TCL/Tk. Без коментариев =)

    guest, 24 Марта 2009

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