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

    Всего: 1

  2. Си / Говнокод #4530

    +106

    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
    // процедура ввода новой даты в RTC
    long __new_date()
    	{
    	date sysdate;
    	unsigned long str,i;
    	unsigned char tmpbuf[16];
    
    // ...
    
    nextda:	__putsV("\n\rВведите новую дату: ");
    	__getsV(tmpbuf,10); 
    	if(tmpbuf[0]==0) goto daok;
    	//проверка строки на допустимые символы '0'-'9' и '.'
    	for(i=0; tmpbuf[i]!=0; i++)
    	 { if((tmpbuf[i]>0x39 || tmpbuf[i]<0x30) && tmpbuf[i]!=0x2e) goto baddat;
    	 }
    	//проверка числа в диапазоне 01-31
    	if(((tmpbuf[0]==0x33)&&(tmpbuf[1]>0x31)) || (tmpbuf[0]>0x33) 
    		|| (tmpbuf[1]==0x2e) || ((tmpbuf[0]==0x30)&&(tmpbuf[1]==0x30)) ) goto baddat;
    	//проверка точки после числа
    	if((tmpbuf[2]!=0x2e) && (tmpbuf[2]!=0x0)) goto baddat; 
    	if((tmpbuf[2]==0x0) || (tmpbuf[3]==0x00)) 
    		{ sysdate.ti_date=(tmpbuf[1]-0x30)+((tmpbuf[0]-0x30)<<4);
    		  goto fordok; }
    	//проверка месяца в диапазоне 01-12
    	if(((tmpbuf[3]==0x31)&&(tmpbuf[4]>0x32)) || (tmpbuf[3]>0x31) 
    		|| (tmpbuf[4]==0x2e) || ((tmpbuf[3]==0x30)&&(tmpbuf[4]==0x30)) ) goto baddat;
    	//проверка точки после месяца
    	if((tmpbuf[5]!=0x2e) && (tmpbuf[5]!=0x0)) goto baddat; 
    	if((tmpbuf[5]==0x0) || (tmpbuf[6]==0x00)) 
    		{ sysdate.ti_date=(tmpbuf[1]-0x30)+((tmpbuf[0]-0x30)<<4);
    		  sysdate.ti_month=(tmpbuf[4]-0x30)+((tmpbuf[3]-0x30)<<4); 
    		  goto fordok; }
    	//проверка года в диапазоне 00-99
    	if((tmpbuf[6]==0x2e) || (tmpbuf[7]==0x2e)) goto baddat;
    	if(tmpbuf[7]==0x00) goto baddat; 
    	if(tmpbuf[8]==0x0)  
    		{ sysdate.ti_date=(tmpbuf[1]-0x30)+((tmpbuf[0]-0x30)<<4);
    		  sysdate.ti_month=(tmpbuf[4]-0x30)+((tmpbuf[3]-0x30)<<4); 
    		  sysdate.ti_year=(tmpbuf[7]-0x30)+((tmpbuf[6]-0x30)<<4); 
    		  goto fordok; }
    baddat:	__putsV("\n\rДата введена неверно (дд.мм.гг)");
    	goto nextda;
    	//установка новой даты
    fordok: 
    	__set_date(&sysdate);
    daok: 
       return 0;
    	}

    Из ПО отечественного шифродевайса. Функция получает от "оператора" время (дд.мм.гг), проверяет его на корректность и пишет в Real Time Clock.

    greyspy, 03 Ноября 2010

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