119 lines
2.5 KiB
C++
119 lines
2.5 KiB
C++
|
|
|
|
/*
|
|
ÛßÜ ÛßÜ ÜßßÜ ßÛß Ûßß Üß ßÛß ÜßÛßÜ ßÛß ÛÜ Û ÜÛßß ßÛß ÛßÜ Ûßß Û
|
|
Ûß ÛÛ Û Û Ü Û Ûßß ßÜ Û Û Û Û Û Û ÛÜÛ ßßßÜ Û ÛÛ Ûßß Û
|
|
ß ß ß ßß ßß ßßß ß ß ß ß ß ßßß ß ßß ßßß ß ß ß ßßß ßßß
|
|
|
|
CLOSING The closing screen and error handler. */
|
|
|
|
#define __closing_implementation__
|
|
|
|
|
|
#include "closing.h"
|
|
|
|
|
|
#include "gyro.h"
|
|
#include "Graph.h"
|
|
/*#include "Crt.h"*/
|
|
#include "lucerna.h"
|
|
|
|
|
|
typedef array<1,3840,char> scrtype;
|
|
|
|
scrtype q /*absolute $B8FA:0*/; /* Nobody's using the graphics memory now. */
|
|
file<scrtype> f;
|
|
pointer exitsave;
|
|
|
|
void get_screen(byte which)
|
|
{;
|
|
closegraph();
|
|
textattr=0; clrscr;
|
|
assign(f,string("text")+strf(which)+".scr"); reset(f); f >> q; close(f);
|
|
}
|
|
|
|
void show_screen()
|
|
{
|
|
byte fv,ff,fq, tl,bl;
|
|
scrtype a /*absolute $B800:0*/;
|
|
;
|
|
for( fv=1; fv <= 40; fv ++)
|
|
{;
|
|
if (fv>36) {; tl=1; bl=24; }
|
|
else {; tl=12-fv / 3; bl=12+fv / 3; }
|
|
for( fq=tl; fq <= bl; fq ++)
|
|
for( ff=80-fv*2; ff <= 80+fv*2; ff ++)
|
|
a[fq*160-ff]=q[fq*160-ff];
|
|
delay(5);
|
|
}
|
|
gotoxy(1,25); textattr=31; clreol; gotoxy(1,24);
|
|
}
|
|
|
|
void quit_with(byte which,byte errorlev)
|
|
{;
|
|
dusk();
|
|
get_screen(which);
|
|
show_screen(); /* No changes. */
|
|
exit(errorlev);
|
|
}
|
|
|
|
void put_in(string x, word where)
|
|
{
|
|
word fv;
|
|
;
|
|
for( fv=1; fv <= length(x); fv ++)
|
|
q[1+(where+fv)*2]=x[fv];
|
|
}
|
|
|
|
void end_of_program()
|
|
|
|
{
|
|
const array<0,11,varying_string<11> > nouns =
|
|
{{"sackbut","harpsichord","camel","conscience","ice-cream","serf",
|
|
"abacus","castle","carrots","megaphone","manticore","drawbridge"}};
|
|
|
|
const array<0,11,varying_string<9> > verbs =
|
|
{{"haunt","daunt","tickle","gobble","erase","provoke","surprise",
|
|
"ignore","stare at","shriek at","frighten","quieten"}};
|
|
|
|
string result;
|
|
;
|
|
nosound;
|
|
get_screen(scr_nagscreen);
|
|
result=nouns[Random(12)]+" will "+verbs[Random(12)]+" you";
|
|
put_in(result,1628);
|
|
show_screen(); /* No halt- it's already set up. */
|
|
}
|
|
|
|
/*$F+*/
|
|
|
|
void bug_handler()
|
|
{;
|
|
exitproc=exitsave;
|
|
|
|
if (erroraddr!=nil)
|
|
{; /* An error occurred! */
|
|
if (exitcode==203)
|
|
get_screen(scr_ramcram);
|
|
else
|
|
{;
|
|
get_screen(scr_bugalert);
|
|
put_in(strf(exitcode),678); /* 678 = [38,8]. */
|
|
put_in(strf(seg(erroraddr))+':'+strf(ofs(erroraddr)),758); /* 758 = [38,9]. */
|
|
}
|
|
show_screen();
|
|
erroraddr=nil;
|
|
}
|
|
}
|
|
|
|
/*$F-*/
|
|
|
|
class unit_closing_initialize {
|
|
public: unit_closing_initialize();
|
|
};
|
|
static unit_closing_initialize closing_constructor;
|
|
|
|
unit_closing_initialize::unit_closing_initialize() {;
|
|
exitsave=exitproc;
|
|
exitproc=&bug_handler;
|
|
}
|