#define NULL 0 #define EOF -1 #define ERROR -1 #define TRUE 1 #define FALSE 0 typedef char *char_ptr; typedef int *int_ptr; char _INIT; typedef struct { char DSTR1; char FSTR1; char SSTR1; char LSTR1; char NSTR1; char NSTR2[10]; char HD00; int HD0B; int HD0D; int HD0F; int HD11; } FILE; FILE UFIA; int _RPT; char _MODE; #define _BSZ 5000 _append() { static char chr; char b[_BSZ]; int i, j; inline(221, 229, 221, 33, &UFIA, 207, 59, 56, 15, 221, 34); inline(&_RPT, 17, &UFIA.HD00, 6, 9, 207, 60, 18, 19, 16, 250); inline(221, 225); if (!_RPT) { inline(221, 229, 221, 33, &UFIA, 207, 53, 56, 4, 221, 34); inline(&_RPT, 221, 225); if (!_RPT) return NULL; return UFIA; } for (i = 0; i < _BSZ && UFIA.HD0B; i++) { inline(221, 229, 221, 42, &_RPT, 207, 60, 50, &chr, 221); inline(225); b[i] = chr; UFIA.HD0B--; } if (UFIA.HD0B) return NULL; inline(221, 229, 221, 33, &UFIA, 207, 65, 221, 33, &UFIA); inline(207, 53, 221, 34, &_RPT, 221, 225); for (j = 0; j < i; j++) { chr = b[j]; inline(221, 229, 221, 42, &_RPT, 58, &chr, 207, 54, 221); inline(225); UFIA.HD0B++; } return UFIA; } FILE *fopen(name, mode) char *name, *mode; { int i; if (_MODE) return NULL; UFIA.DSTR1 = 1; UFIA.FSTR1 = 0; UFIA.SSTR1 = 0; UFIA.LSTR1 = 'd'; UFIA.NSTR1 = 4; move(UFIA.NSTR2, " ", 10); for (i = 0; i < 10 && *name; UFIA.NSTR2[i++] = *name++); UFIA.HD00 = 3; UFIA.HD0B = 0; UFIA.HD0D = 0; UFIA.HD0F = 0; UFIA.HD11 = 0; _RPT = 0; switch (*mode) { case 'r': inline(221, 229, 221, 33, &UFIA, 207, 59, 56, 15, 221, 34); inline(&_RPT, 17, &UFIA.HD00, 6, 9, 207, 60, 18, 19, 16); inline(250, 221, 225); break; case 'w': inline(221, 229, 221, 33, &UFIA, 207, 65, 221, 33, &UFIA); inline(207, 53, 56, 4, 221, 34, &_RPT, 221, 225); break; case 'a': if (_append() == NULL) return NULL; _MODE = 'w'; return &UFIA; } if (!_RPT) return NULL; _MODE = *mode; return &UFIA; } fclose(fp) FILE *fp; { if (!_MODE) return EOF; if (_MODE == 'w') { inline(221, 229, 221, 42, &_RPT, 207, 56, 221, 33, &UFIA); inline(207, 59, 62, 3, 207, 54, 1, &UFIA.HD0B, 10); inline(207, 54, 3, 10, 207, 54, 207 62, 221, 225); } _MODE = 0; return 0; } remove(name) char *name; { int i; if (_MODE) return -1; UFIA.DSTR1 = 1; move(UFIA.NSTR2, " ", 10); for (i = 0; i < 10 && *name; UFIA.NSTR2[i++] = *name++); _RPT = 0; inline(221, 229, 221, 33, &UFIA, 207, 65, 56, 4); inline(221, 34, &_RPT, 221, 225); if (!_RPT) return -1; return 0; } rename(old, new) char *old, *new; { FILE *fp; static char a[10], b[10]; int i; if (_MODE) return -1; move(a, " ", 10); move(b, " ", 10); for (i = 0; i < 10 && *old; a[i++] = *old++); for (i = 0; i < 10 && *new; b[i++] = *new++); fp = fopen(a, "r"); fclose(fp); if (fp == NULL) return -1; fp = fopen(b, "r"); fclose(fp); if (fp != NULL) return -1; _RPT = 0; inline(221, 229, 22, 0, 30, 1, 207, 63, 207, 71, 58, 214, 59); inline(167, 40, 26, 6, 10, 33, 215, 59, 221, 33, a, 126, 221); inline(190, 0, 32, 11, 35, 221, 35, 16, 245, 213, 17, 215); inline(59, 24, 48, 58, 214, 60, 167, 40, 26, 6, 10, 33, 215); inline(60, 221, 33, a, 126, 221, 190, 0, 32, 11, 35, 221, 35); inline(16, 245, 213, 17, 215, 60, 24, 16, 28, 123, 254, 11); inline(32, 182, 20, 122, 254, 4, 32, 174, 211, 231, 24, 15); inline(33, b, 1, 10, 0, 237, 176, 209, 207, 62, 221, 34); inline(&_RPT, 221, 225); if (!_RPT) return -1; return 0; } #define _BSZ 65 fprintf(n) auto { int c, *v; char s[_BSZ]; c = n / 2 - 2; v = &n + c; switch (c) { case 1: sprintf(s, *v--); break; case 2: sprintf(s, *v--, *v--); break; case 3: sprintf(s, *v--, *v--, *v--); break; case 4: sprintf(s, *v--, *v--, *v--, *v--); break; case 5: sprintf(s, *v--, *v--, *v--, *v--, *v--); break; default: return -1; } if (fputs(s, &UFIA) == EOF) return -1; return strlen(s); } fgetc(fp) FILE *fp; { static char chr; if (_MODE != 'r' || UFIA.HD0B == 0) return EOF; inline(221, 229, 221, 42, &_RPT, 207, 60, 50, &chr); inline(221, 225); UFIA.HD0B--; return chr; } char *fgets(s, n, fp) char *s; FILE *fp; { char *t; int c; t = s; while (--n > 0 && (c = fgetc(fp)) != EOF) if ((*t++ = c) == '\n') break; *t = '\0'; return c == EOF && t == s ? NULL : s; } fputc(c, fp) int c; FILE *fp; { static char chr; if (_MODE != 'w') return EOF; chr = c; inline(221, 229, 221, 42, &_RPT, 58, &chr, 207, 54); inline(221, 225); UFIA.HD0B++; return chr; } fputs(s, fp) char *s; FILE *fp; { while (*s) if (fputc(*s++, fp) == EOF) return EOF; return 0; } char *gets(s) char *s; { char *t; int c; t = s; while ((c = getchar()) != '\n' && c != EOF) *t++ = c; *t = '\0'; return c == EOF && t == s ? NULL : s; } puts(s) char *s; { while (*s) putchar(*s++); putchar('\n'); return 0; } fread(p, s, n, fp) char *p; FILE *fp; { int i, c; for (i = 0; i < s * n && (c = fgetc(fp)) != EOF; i++) *p++ = c; return i / s; } fwrite(p, s, n, fp) char *p; FILE *fp; { int i; for (i = 0; i < s * n && fputc(*p++, fp) != EOF; i++); return i / s; } feof(fp) FILE *fp; { if (_MODE != 'r' || UFIA.HD0B == 0) return TRUE; return FALSE; }