aboutsummaryrefslogtreecommitdiff
path: root/engines/avalanche/closing.cpp
diff options
context:
space:
mode:
authoruruk2013-06-17 10:38:38 +0200
committeruruk2013-06-17 10:38:38 +0200
commita2adda516bdf790651283201a666f253a8bfcc49 (patch)
treebdc6479a6889d15d1b25e47e28f0c86f093a9610 /engines/avalanche/closing.cpp
parent2f0e43bb2e402bbcf65175934d21ade6febaad60 (diff)
downloadscummvm-rg350-a2adda516bdf790651283201a666f253a8bfcc49.tar.gz
scummvm-rg350-a2adda516bdf790651283201a666f253a8bfcc49.tar.bz2
scummvm-rg350-a2adda516bdf790651283201a666f253a8bfcc49.zip
AVALANCHE: Initial PtoC output.
Diffstat (limited to 'engines/avalanche/closing.cpp')
-rw-r--r--engines/avalanche/closing.cpp119
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;
+}