diff options
Diffstat (limited to 'engines/avalanche/closing.cpp')
-rw-r--r-- | engines/avalanche/closing.cpp | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/engines/avalanche/closing.cpp b/engines/avalanche/closing.cpp new file mode 100644 index 0000000000..b2af98740f --- /dev/null +++ b/engines/avalanche/closing.cpp @@ -0,0 +1,119 @@ +#include "ptoc.h" + +/* + ÛßÜ ÛßÜ ÜßßÜ ßÛß Ûßß Üß ßÛß ÜßÛßÜ ßÛß ÛÜ Û ÜÛßß ßÛß ÛßÜ Ûßß Û + Ûß ÛÛ Û Û Ü Û Ûßß ßÜ Û Û Û Û Û Û ÛÜÛ ßßßÜ Û ÛÛ Ûßß Û + ß ß ß ßß ßß ßßß ß ß ß ß ß ßßß ß ßß ßßß ß ß ß ßßß ßßß + + 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; +} |