#include #include #include #include #include #include #include #include #include unsigned int buffer[2000]; void printgoodbye() { _setbkcolor(0); _settextcolor(7); _settextcursor(0x0607); _clearscreen(_GCLEARSCREEN); _outtext("\n C'est fi-ni!\n"); } void printslide(int handle, int n, int nmax) { int i; unsigned int *p = buffer; char s[10]; __segment screen; unsigned int __based(void) *scrptr; screen = 0xB800; scrptr = 0; lseek(handle, 0, SEEK_SET); for (i = 0; i < n; i++) lseek(handle, 4000, SEEK_CUR); read(handle, buffer, 4000); for (i = 0; i < 2000; i++) *(screen:>scrptr + i) = buffer[i]; _settextcursor(0x2000); _setbkcolor((buffer[1998]>>12)&0xF); _settextcolor((buffer[1998]>>8)&0xF); sprintf(s, "%d / %d", n + 1, nmax); _settextposition(25, (80-strlen(s))/2); _outtext(s); } int main(int argc, char **argv) { int i; int slide, nslides; int handle; int c; if (argc != 2) { printf("Usage: %s \n", argv[0]); exit(1); } handle = open(argv[1], O_RDONLY); if (handle < 0) { printf("Cannot open %s...\n", argv[1]); exit(1); } nslides = filelength(handle) / 4000; slide = 0; while (1) { if (slide == nslides) { printgoodbye(); } else { printslide(handle, slide, nslides); } c = getch(); if (c == 27 || c == 'q') break; if (c == 'j') slide++; if (c == 'k') slide--; if (c == 'h') slide -= 5; if (c == 'l') slide += 5; if (c == 'z') slide = nslides - 1; if (c == 'a') slide = 0; if (slide < 0) slide = 0; if (slide > nslides) slide = nslides; } printgoodbye(); close(handle); return 0; }