/* ÛßÜ ÛßÜ ÜßßÜ ßÛß Ûßß Üß ßÛß ÜßÛßÜ ßÛß ÛÜ Û ÜÛßß ßÛß ÛßÜ Ûßß Û Ûß ÛÛ Û Û Ü Û Ûßß ßÜ Û Û Û Û Û Û ÛÜÛ ßßßÜ Û ÛÛ Ûßß Û ß ß ß ßß ßß ßßß ß ß ß ß ß ßßß ß ßß ßßß ß ß ß ßßß ßßß 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 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; }