- 1
- 2
printf ("%d file%s processed", nfiles,
nfiles != 1 ? "s" : "");
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
printf ("%d file%s processed", nfiles,
nfiles != 1 ? "s" : "");
Из официального гайда "GNU" по написанию кода на "C".
+1
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void PasswordChecker(void);
void sub_BB4F(unsigned char* Password);//subroutine $BB4F and so on...
void sub_BB21(void);
void sub_BBE0(void);
void sub_BBEA(void);
void SEC_SBC_6502(unsigned char operand);
void ADC_6502_simplified(unsigned char operand);
unsigned char Password[8];//$0766 to $076D in RAM, when a player enters it
unsigned char Invalidity=0;//$0764 in RAM
unsigned char Level;//$$0070 in RAM
unsigned char TimeTens;//$04c5 in RAM
unsigned char TimeOnes;//$04c6 in RAM
unsigned char Byte4BF, Byte17, Byte18;
unsigned char a, x;
unsigned char c=0;//carry flag
//former char Byte76A is Password[4] now, former char Byte76C is Password[6] now
void PasswordGenerator(void);
void BuildORTable(void);
unsigned char* BuildParticularLevelsArray(unsigned char DesiredLevel);//will think of it later...
void SimplifiedLevelGenerator(unsigned char* PassToFill,unsigned char Level);//finds just one 2nd,3rd,6th,8th digit combo
int main()
{
int Choice;
printf("Enter g if you'd like to generate a new password.\nEnter a to analyze an existing password.\n");
Choice=fgetc(stdin);
flushall();
if (Choice=='a')
PasswordChecker();
if (Choice=='g')
PasswordGenerator();
if (Choice=='s')//'level function' is basic when generating a pass
BuildORTable();//so here a bit of 'hidden' investigation, which will be useful
//if I ever decide to rewrite this prog to output all passes possible, not just one
printf("Press any key to quit.\n");
getch();
return 0;
}
void PasswordChecker(void)
{
char InputString[9];//one extra byte needed due to fgets
int i;
printf("Please enter your password to test:\n");
fgets(InputString,9,stdin);
for(i=0;i<8;i++)
{
if ((InputString[i]>57)||(InputString[i]<48))
{
printf("This string contains non-digits.\n");
return;
}
else
Password[i]=InputString[i]-48;//ascii to digit
}
sub_BB4F(Password);
if (Invalidity==1)
{
printf("This password is invalid.\n");
return;
}
printf("%s%d","Level: ",Level);
printf("%s%d%d\n"," Time: ",TimeTens,TimeOnes);
if (Level==15)
printf("Level 15 doesn't exist. So-called level 15 passwords are programming mistakes and cause system hang.\n");
if (Level==16)
printf("Level 16 doesn't exist. So-called level 16 passwords are programming mistakes and lead you to a buggy screen where Prince can't move.\n");
return;
}
void sub_BB4F(unsigned char* Password)//$BB4F
{
a=0;
x=0;
while (x<8)
{
a=a+Password[x];
x++;
}
if(a==0)
{
Invalidity=1;//$BBC0
return;
}
Byte17=Password[4];//$BB63
Byte18=Password[6];
Password[4]=0;
Password[6]=0;
sub_BB21();//$BB72,calculates and writes 1st checksum to Password[4], 2nd checksum to Password[6]
if (Password[4]!=Byte17)
{
Invalidity=1;
return;
}
Генератор паролей для игры Prince Of Perisa. Пришлось немного повозиться...
if (Password[6]!=Byte18)//$BB7C
{
Invalidity=1;
return;
}
Invalidity=0;//$BB85
a=Password[7];
sub_BBEA();
a=a&3;//$BB8E
a=a*4;
Password[7]=a;
a=Password[1];
sub_BBE0();//$BB98
a=a|Password[7];
Level=a+1;//+1 is my insertion
//if (Level!=1)//I chose to omit this $BBA2-$BBA4 code b/c it's unknown what byte at $06EE means
a=Password[0];
sub_BBE0();//$BBAA
TimeTens=a;
a=Password[3];
sub_BBEA();
TimeOnes=a;
return;//$BBBF
}
void SEC_SBC_6502(unsigned char operand)
{
c=1;
if ((a-operand)>=0)
a=a-operand;
else
{
a=a-operand+256;
c=0;
};
}
void ADC_6502_simplified(unsigned char operand)
{
if ((a+operand)<256)
a=a+operand;
else a=a+operand-256;
}
void sub_BB21(void)
{
x=0;
BB23: a=Password[4];
a=a+Password[x];
if(a<10)
{
BB46: Password[4]=a;//$BB46
x++;
if (x!=8)
goto BB23;
else return;//$BB4E
}
else //$BB2E
{
Byte4BF=a;
a=Password[6];
a++;//we came here b/c c=1
if (a<10)
goto BB3D;
else
SEC_SBC_6502(10);//can we get here? I doubt...
BB3D: Password[6]=a;
a=Byte4BF;
SEC_SBC_6502(10);//$BB44, no danger of negative result
goto BB46;
}
}
0
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main ()
{
char address[128], fname[128], command[128];
FILE *tempfile;
strcpy(fname , tmpnam(NULL));
tempfile = fopen (fname, "w"); /* create temporary file */
if (tempfile == NULL) /* error - didn't create file */
{
printf("Internal failure #1 please report %d\n", errno);
exit (1);
}
fprintf(tempfile, "Thank you very much for caring about our cause\n");
fprintf(tempfile, "this letter is just to tell you how much we\n");
fprintf(tempfile, "really think you are wonderful for caring.\n\n");
fprintf(tempfile, "Sincerely,\n\n");
fprintf(tempfile, "Jane Doe, Executive Thanker\n");
fclose (tempfile);
gets(address); /* read in email address */
sprintf(command, "mail -s \"thanks for caring\" %s < %s\n",
address, fname); /* create the command */
system (command); /* execute command */
remove (fname); /* clean up */
exit (0);
}
Игра: найди вулна.
0
switch(argCount)
{
case 0: sprintf(dst, fmt); break;
case 1: sprintf(dst, fmt, args[0]); break;
case 2: sprintf(dst, fmt, args[0], args[1]); break;
case 3: sprintf(dst, fmt, args[0], args[1], args[2]); break;
case 4: sprintf(dst, fmt, args[0], args[1], args[2], args[3]); break;
case 5: sprintf(dst, fmt, args[0], args[1], args[2], args[3], args[4]); break;
case 6: sprintf(dst, fmt, args[0], args[1], args[2], args[3], args[4], args[5]); break;
case 7: sprintf(dst, fmt, args[0], args[1], args[2], args[3], args[4], args[5], args[6]); break;
case 8: sprintf(dst, fmt, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]); break;
...
0
if(((mFlags&0x80)==0)&&(mFlags&0x40)==0){if(samplesArr[_k]>dataAmplitudeHi) //‚믮«ï¥¬ ¨§¬¥à¥¨¥ ¨¬¯ã«ìᮢ-¤¥â¥ªâ®à®¢. ’ ª¦¥ ¬¥à塞 ¯ ã§ã{
while(1){if(samplesArr[_k]>=dataAmplitudeHi){++_k;++_j;}else{break;}}
dMin=dMax=wideTable[pulseCnt]=_j;
++pulseCnt;
dataStack(1,_k);
_i=_j;_j=0;pauseTrig=1;}
while(1)
{if(samplesArr[_k]<=invertSample){++_k;++_j;}else{break;}}
pMin=pMax=pauseTable[pauseCnt]=_j;
++pauseCnt;_i=_j;_j=0;
if(pauseTrig==0){
while(1){
if(samplesArr[_k]>=dataAmplitudeHi){
++_k;
++_j;}else{break;}}
dMin=dMax=wideTable[pulseCnt]=_j;
++pulseCnt;_i=_j;_j=0;}
else{_k=dataStack(0,0);}
pauseTrig=0;
for(uint32_t i=_k;i<bufferLength;++i){
//printf("iteration %d 0x%02X\n",i,samplesArr[i]);
if((samplesArr[i]>dataAmplitudeHi)&&(_j>_p)&&(pauseTrig==0)&&(signalTrig==1)){
//printf("trig pulse up %d",i);if(_j<pMin){pMin=_j;}else if(_j>pMax){pMax=_j;}pauseTrig=1;signalTrig=0;pauseTable[pauseCnt]=_j;++pauseCnt;trigPause=0;_p=_j;_j=0;//printf("\n");}
else if((samplesArr[i]>dataAmplitudeHi)&&(_j<_p)&&(pauseTrig==0)&&(signalTrig==1))
{//printf("trig pulse down %d",i);if(_j<pMin){pMin=_j;}else if(_j>pMax){pMax=_j;}pauseTrig=1;signalTrig=0;pauseTable[pauseCnt]=_j;++pauseCnt;trigPause=0;_p=_j;_j=0;//printf("\n");}
else if((samplesArr[i]>dataAmplitudeHi)&&(_j==_p)&&(pauseTrig==0)&&(signalTrig==1))
{//printf("trig pulse non-change %d",i);if(_j<pMin){pMin=_j;}else if(_j>pMax){pMax=_j;}pauseTrig=1;signalTrig=0;pauseTable[pauseCnt]=_j;++pauseCnt;trigPause=0;_p=_j;_j=0;//printf("\n");}
if((samplesArr[i]<invertSample)&&(_j>dMin-(dMin/4))&&(_j>_i)&&(pauseTrig==1)&&(signalTrig==0))
{//printf("trig pause up %d",i);if(_j<dMin){dMin=_j;}else if(_j>dMax){dMax=_j;}pauseTrig=0;signalTrig=1;wideTable[pulseCnt]=_j;++pulseCnt;_i=_j;_j=0;//printf("\n");}
else if((samplesArr[i]<invertSample)&&(_j>dMin-(dMin/4))&&(_j<_i)&&(pauseTrig==1)&&(signalTrig==0))
{//printf("trig pause down %d",i);if(_j<dMin){dMin=_j;}else if(_j>dMax){dMax=_j;}pauseTrig=0;signalTrig=1;wideTable[pulseCnt]=_j;++pulseCnt;_i=_j;_j=0;//printf("\n");}
else if((samplesArr[i]<invertSample)&&(_j>=dMin-(dMin/4))&&(_j==_i)&&(pauseTrig==1)&&(signalTrig==0))
{//printf("trig pause non-change %d",i);if(samplesArr[i]<invertSample)pauseTrig=0;signalTrig=1;wideTable[pulseCnt]=_j;++pulseCnt;_i=_j;_j=0;//printf("\n");}
if((samplesArr[i]>dataAmplitudeHi)&&(_j>dMax)&&(pauseTrig==1)&&(signalTrig==0)){trigPause++;}
else if(trigPause>2){_k=i-_j-skipsBeforeTrig;_ovct=_j;mFlags=mFlags|0xC0;break;}
if((samplesArr[i]>dataAmplitudeHi)&&(trigKey==0x00)){trigKey=0xFF;}
if((samplesArr[i]>dataAmplitudeHi)&&(trigKey==0xFF)){trigKey=0x00;}
else if((pauseTrig==1)&&(trigPause>skipsBeforeTrig)){trigPause=0;_k=i;_ovct=_i-_p;mFlags=mFlags|0xC0;break;}
else if(pauseTrig==1){trigPause++;}
if((samplesArr[i]>dataAmplitudeHi)&&(pauseTrig==1)&&(signalTrig==0)){++_j;}
if((samplesArr[i]<invertSample)&&(pauseTrig==0)&&(signalTrig==1)){++_j;}}_k=_k-_ovct;
for(uint8_t i=0;i<pulseCnt;i++){divl=divl+wideTable[i];}
divl=divl/pulseCnt;
compTim.tSPavg=round(divl);}
memset(wideTable,0x00,sizeof(wideTable));
Шизофрения
0
Ansi C++ Compiler
0
// https://github.com/flipperdevices/flipperzero-firmware/blob/2a6a3a1bf7ba1ecb42b8cbfc1b1856a54f2878b7/applications/plugins/music_player/music_player.c#L74
static bool is_white_note(uint8_t semitone, uint8_t id) {
switch(semitone) {
case 0:
if(id == 0) return true;
break;
case 2:
if(id == 1) return true;
break;
case 4:
if(id == 2) return true;
break;
case 5:
if(id == 3) return true;
break;
case 7:
if(id == 4) return true;
break;
case 9:
if(id == 5) return true;
break;
case 11:
if(id == 6) return true;
break;
default:
break;
}
return false;
}
static bool is_black_note(uint8_t semitone, uint8_t id) {
switch(semitone) {
case 1:
if(id == 0) return true;
break;
case 3:
if(id == 1) return true;
break;
case 6:
if(id == 3) return true;
break;
case 8:
if(id == 4) return true;
break;
case 10:
if(id == 5) return true;
break;
default:
break;
}
return false;
}
Хуйня какая-то. То ли дело "паттерн матчинг".
−2
int make_program_look_bigger[1000000];
+2
unsigned mul(unsigned a, unsigned b)
{
char arr[a][b];
return &arr[a][b] - (char *)arr;
}
Умножение через VLA
+5
// Heap memory allocate function (must not be used!)
caddr_t _sbrk(int incr) {
<...>
void some_bastard_called_sbrk();
some_bastard_called_sbrk(); // Produce linker error in case it is used
}
_ATTRIBUTE ((__format__ (__printf__, 1, 2)))
int printf (const char *__restrict format, ...)
{
<маленький трехколесный велосипед>
}
int putchar(int c)
{
<...>
}
int puts(const char *s)
{
<...>
}
_ATTRIBUTE ((__format__ (__printf__, 2, 3)))
int sprintf (char *__restrict s, const char *__restrict format, ...)
{
<...>
}
STM32. Я просто хочу использовать printf для вывода в последовательный порт и не течь. Ведь для этого нужно только реализовать int _write(int file, char *data, int len) и всё. Ой, а почему иногда программа падает где-то в кишках рантайма?
Может, стек переполняется? Да нет, проверил, значения в норме...
Просто стандартная библиотека от ST - это не курсовая ардуинщика, тут все системно, хендлы потоков, дескрипторы устройств и управляющие структуры. При первом обращении printf (и sprintf тоже!) выделяет себе в куче около 400 байт. Замечательное решение, помогающее сэкономить память, если мы не используем стандартный вывод! А куча тут - это просто последовательно заполняемая область памяти, размеры которой задаются в linker script (я вообще 0 указал, я ведь не использую malloc). Проверять выход за пределы кучи мы, конечно, не будем - зачем, когда рядом такая замечательная, никому не нужная область стека.
Да, и если забыть отключить буферизацию setvbuf(stdin/stdout/stderr, NULL, _IONBF, 0); , то он выделит не 400 байт, а килобайт (на контроллере с 8K RAM).
В общем, ах, оставьте меня, сам все напишу.
Только надо еще putchar и puts реализовать, а то компилятор любит printf'ы оптимизировать. И не забыть, что puts добавляет перевод строки. Уф, вроде все.