1
0
mirror of https://gitlab.com/80486DX2-66/gists synced 2024-12-26 11:30:03 +05:30
gists/c-programming/jokes/extol.c

100 lines
1.8 KiB
C
Raw Normal View History

2024-03-09 14:12:06 +05:30
/*
* extol.c [joke!]
*
* Author: Intel A80486DX2-66
* License: Creative Commons Zero 1.0 Universal
*/
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
enum
{
EXTOL_NORMAL,
EXTOL_QUIET
} EXTOL_MODE;
#define EXTOL_PROTOTYPE "int extol(FILE* f)"
2024-03-09 14:44:56 +05:30
#define EXTOL_FILE_NAME "extol.txt"
#define EXTOL_FILE_LIMIT 128
2024-03-09 14:12:06 +05:30
int
extol (FILE *f)
{
static bool spec_run = true;
int result;
2024-03-09 14:44:56 +05:30
off_t size;
2024-03-09 14:12:06 +05:30
if (spec_run == false)
{
printf ("\n");
return !(spec_run = true) - spec_run;
}
if (f == NULL)
{
FILE *fs = fopen (EXTOL_FILE_NAME, "a+");
if (fs == NULL)
{
perror ("fopen");
exit (EXIT_FAILURE);
}
2024-03-09 14:12:06 +05:30
fseek (fs, 0L, SEEK_END);
2024-03-09 14:44:56 +05:30
size = ftello (fs);
if (size == -1)
{
perror ("ftello");
exit (EXIT_FAILURE);
}
else if (size > EXTOL_FILE_LIMIT)
{
FILE *new_fs = freopen (EXTOL_FILE_NAME, "w", fs);
if (new_fs == NULL)
{
perror ("freopen");
exit (EXIT_FAILURE);
}
fs = new_fs;
2024-03-09 14:44:56 +05:30
}
2024-03-09 14:12:06 +05:30
result = extol (fs);
for (result <<= 4, result &= ~15;
(result & 15) != 15 || (result >>= 4, 0); result++)
2024-03-09 14:12:06 +05:30
fputc ('=', fs);
fprintf (fs, "\n");
fclose (fs);
2024-03-09 14:12:06 +05:30
}
else
{
result = fprintf (f, "PRAISE THE USER!\n");
}
spec_run = false;
return result;
}
int
extol_interface (signed char type)
{
FILE *f;
f = type == EXTOL_NORMAL ? stdout : NULL;
return printf (EXTOL_PROTOTYPE " returns %d\n", extol (f));
}
void
extol_quiet (void)
{
extol_interface (EXTOL_QUIET);
}
int
main (void)
{
int i;
for (i = 0; i < 2; i++)
printf (EXTOL_PROTOTYPE ": %d\n", extol_interface (EXTOL_NORMAL));
atexit (&extol_quiet);
return 0;
}