aboutsummaryrefslogtreecommitdiff
path: root/engines/avalanche/spread2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/avalanche/spread2.cpp')
-rw-r--r--engines/avalanche/spread2.cpp1001
1 files changed, 0 insertions, 1001 deletions
diff --git a/engines/avalanche/spread2.cpp b/engines/avalanche/spread2.cpp
deleted file mode 100644
index b2faed3508..0000000000
--- a/engines/avalanche/spread2.cpp
+++ /dev/null
@@ -1,1001 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-/*
- * This code is based on the original source code of Lord Avalot d'Argent version 1.3.
- * Copyright (c) 1994-1995 Mike, Mark and Thomas Thurman.
- */
-
-#include "graph.h"
-/*#include "Crt.h"*/
-/*#include "Squeak.h"*/
-
-/*$V-,R+*/
-
-namespace Avalanche {
-
-const integer pattern = 12; /* Pattern for transparencies. */
-const fillpatterntype grey50 = {{
- 0xaa, 0x55, 0xaa,
- 0x55, 0xaa, 0x55, 0xaa, 0x55
- }
-};
-
-struct adxtype {
- varying_string<12> name; /* name of character */
- varying_string<16> comment; /* comment */
- byte num; /* number of pictures */
- byte xl, yl; /* x & y lengths of pictures */
- byte seq; /* how many in one stride */
- word size; /* the size of one picture */
- byte fgc, bgc; /* foreground & background bubble colours */
- byte accinum; /* the number according to Acci (1=Avvy, etc.) */
-};
-
-untyped_file sf;
-adxtype a;
-char r;
-boolean adxmodi, picmodi;
-array<5, 2053, byte> mani;
-matrix<0, 99, 0, 10, byte> sil;
-array<1, 16000, byte> aa;
-word soa;
-byte xw;
-byte leftc, rightc;
-boolean lmo;
-array<1, 2, pointer> clip;
-integer clipx, clipy;
-boolean boardfull;
-integer xofs, yofs; /* Distance of TL corner of cut from TL corner of pic. */
-
-byte bigpix_size, bigpix_gap; /* Size & gap betwixt big pixels. */
-
-void setup() {
- const integer shouldid = -1317732048;
- boolean ok;
- longint id;
- varying_string<2> sn;
- output << "Sprite Editor 2 (c) 1993, Thomas Thurman." << NL;
- bigpix_size = 3;
- bigpix_gap = 5;
- do {
- ok = true;
- output << "Number of sprite?";
- input >> sn >> NL;
- assign(sf, string("v:\\sprite") + sn + ".avd");
- reset(sf, 1);
- seek(sf, 177);
- blockread(sf, id, 4);
- if (id != shouldid) {
- output << "That isn't a valid Trip5 spritefile." << NL;
- output << "Please choose another." << NL;
- output << NL;
- ok = false;
- close(sf);
- } else {
- blockread(sf, soa, 2);
- if (soa != (cardinal)sizeof(a)) { /* to change this, just change the "type adx=" bit.*/
- output << "That spritefile contains an unknown ADX field type." << NL;
- output << "Please choose another." << NL;
- output << NL;
- ok = false;
- close(sf);
- }
- }
- } while (!ok);
- blockread(sf, a, soa);
- output << filepos(sf) << NL;
- adxmodi = false;
- picmodi = false;
- getmem(clip[1], a.size);
- getmem(clip[2], a.size);
- boardfull = false;
-}
-
-string strf(longint x) {
- string q;
- string strf_result;
- str(x, q);
- strf_result = q;
- return strf_result;
-}
-
-void centre(byte y, string z) {
- gotoxy(40 - length(z) / 2, y);
- output << z;
-}
-
-void info(byte x, byte y, string p, string q) {
- gotoxy(x, y);
- textattr = 6;
- output << p + ":ú";
- textattr = 11;
- output << q;
- textattr = 8;
- output << 'ú';
-}
-
-void colours(byte f, byte b) {
- gotoxy(35, 11);
- textattr = 6;
- output << "Bubbles";
- textattr = b * 16 + f;
- output << " like this! ";
-}
-
-void adxinfo() {
- {
- info(5, 8, "Name", a.name);
- info(35, 8, "Comment", a.comment);
- info(5, 9, "Width", strf(a.xl));
- info(15, 9, "Height", strf(a.yl));
- info(35, 9, "Size of one pic", strf(a.size));
- info(5, 10, "Number in a stride", strf(a.seq));
- info(35, 10, "Number of strides", strf(a.num / a.seq));
- info(5, 11, "Total number", strf(a.num));
- info(5, 12, "Acci number", strf(a.accinum));
- colours(a.fgc, a.bgc);
- }
-}
-
-void status() {
- textattr = 7;
- clrscr;
- textattr = 10;
- centre(3, "Sprite Editor 2 (c) 1993, Thomas Thurman.");
- textattr = 6;
- gotoxy(3, 7);
- output << "ADX information:";
- adxinfo();
- textattr = 6;
- gotoxy(3, 14);
- output << "Options:";
- gotoxy(5, 15);
- output << "A) edit ADX information";
- gotoxy(5, 16);
- output << "P) edit pictures";
- gotoxy(5, 17);
- output << "S) save the ADX info (pics are saved automatically)";
-}
-
-void enterstring(string w, byte l, string &q) {
- string t;
- textattr = 13;
- clrscr;
- output << NL;
- output << "Press Return for no change, Space+Return for a blank." << NL;
- do {
- output << "New value for " << w << " (max length " << l << ")?";
- input >> t >> NL;
- } while (!(length(t) <= l));
- if (t == ' ') q = "";
- else if (t != "") q = t;
- adxmodi = true;
-}
-
-void entercolour(string w, byte &c);
-static byte fv;
-
-static void loseold() {
- output << string('\10') + '\377';
-}
-
-
-static void drawnew() {
- gotoxy(3 + fv * 5, 11);
- output << '\30';
-}
-
-void entercolour(string w, byte &c) {
- textattr = 13;
- clrscr;
- output << NL;
- output << "New value for " << w << '?' << NL;
- output << " Use \32\33 to move about, Enter=OK, Esc=Cancel." << NL;
- for (fv = 1; fv <= 15; fv ++) {
- gotoxy(3 + fv * 5, 10);
- textattr = fv;
- output << 'þ';
- }
- fv = c;
- do {
- drawnew();
- r = readkey();
- switch (r) {
- case '\33':
- return;
- break; /* no change to c */
- case '\15': {
- c = fv;
- adxmodi = true;
- return;
- }
- break;
- case '\0':
- switch (readkey()) {
- case 'G': {
- loseold();
- fv = 0;
- drawnew();
- }
- break; /* home */
- case 'O': {
- loseold();
- fv = 15;
- drawnew();
- }
- break; /* end */
- case 'K':
- if (fv > 0) {
- loseold();
- fv -= 1;
- drawnew();
- }
- break; /* left */
- case 'M':
- if (fv < 15) {
- loseold();
- fv += 1;
- drawnew();
- }
- break; /* right */
- }
- break;
- }
- } while (!false);
-}
-
-void enternum(string w, byte &q) {
- string t;
- integer e;
- byte r;
- textattr = 13;
- clrscr;
- output << NL;
- output << "Press Return for no change." << NL;
- do {
- output << "New value for " << w << '?';
- input >> t >> NL;
- if (t == "") return; /* No change... */
- val(t, r, e);
- } while (!(e == 0));
- q = r; /* Update variable. */
- adxmodi = true;
-}
-
-void editadx() {
- char r;
- do {
- clrscr;
- textattr = 10;
- centre(3, "ADX Editor:");
- textattr = 9;
- centre(5, "N: Name, C: Comment, F: Foreground, B: Background, A: Accinum, X: eXit.");
- adxinfo();
- r = upcase(readkey());
- switch (r) {
- case 'N':
- enterstring("Name", 12, a.name);
- break;
- case 'C':
- enterstring("Comment", 16, a.comment);
- break;
- case 'F':
- entercolour("Foreground", a.fgc);
- break;
- case 'B':
- entercolour("Background", a.bgc);
- break;
- case 'A':
- enternum("Accinum", a.accinum);
- break;
- case 'X':
- case '\33':
- return;
- break;
- default:
- output << '\7';
- }
- } while (!false);
-}
-
-void saveit() {
- char pak;
- integer oldsoa;
- textattr = 10;
- clrscr;
- centre(7, "Saving!");
- if (adxmodi) {
- centre(10, "ADX information being saved...");
- seek(sf, 181); /* start of ADX info */
- soa = sizeof(a);
- blockread(sf, oldsoa, 2);
- /* if soa=oldsoa then
- begin;*/
- seek(sf, 181);
- blockwrite(sf, soa, 2);
- blockwrite(sf, a, soa);
- adxmodi = false;
- /* end else write(#7);*/
- } else centre(10, "No changes were made to ADX...");
- centre(25, "Press any key...");
- pak = readkey();
-}
-
-void quit() {
- close(sf);
- exit(0);
-}
-
-void getsilmani() { /* Reclaims original sil & mani arrays */
- byte x, y, z;
- word offs;
-
- /* Sil... */
-
- getimage(500, 150, 500 + a.xl, 150 + a.yl, aa);
-
- for (x = 0; x <= 3; x ++)
- for (y = 0; y <= a.yl; y ++)
- for (z = 0; z <= (a.xl / 8); z ++) {
- offs = 5 + y * xw * 4 + xw * x + z;
- sil[y][z] = aa[offs];
- }
-
- /* ...Mani. */
-
- getimage(500, 50, 500 + a.xl, 50 + a.yl, aa);
-
- move(aa[5], mani, sizeof(mani));
-
-}
-
-void explode(byte which) /* 0 is the first one! */
-/* Each character takes five-quarters of (a.size-6) on disk. */
-{
- byte fv, ff;
- word so1; /* size of one */
- {
- so1 = a.size - 6;
- so1 += so1 / 4;
- seek(sf, 183 + soa + so1 * which); /* First is at 221 */
- /* where:=filepos(sf);*/
- xw = a.xl / 8;
- if ((a.xl % 8) > 0) xw += 1;
-
- for (fv = 0; fv <= a.yl; fv ++)
- blockread(sf, sil[fv], xw);
- blockread(sf, mani, a.size - 6);
- aa[a.size - 1] = 0;
- aa[a.size] = 0; /* footer */
- }
-}
-
-void implode(byte which) { /* Writes a pic back onto the disk */
- byte fv, ff;
- word so1; /* size of one */
- {
-
- getsilmani(); /* Restore original arrays */
-
- so1 = a.size - 6;
- so1 += so1 / 4;
- seek(sf, 183 + soa + so1 * which); /* First is at 221 */
-
- xw = a.xl / 8;
- if ((a.xl % 8) > 0) xw += 1;
-
- for (fv = 0; fv <= a.yl; fv ++)
- blockwrite(sf, sil[fv], xw);
- blockwrite(sf, mani, a.size - 6);
- aa[a.size - 1] = 0;
- aa[a.size] = 0; /* footer */
- }
-}
-
-void plotat(integer xx, integer yy) { /* Does NOT cameo the picture!*/
- move(mani, aa[5], sizeof(mani));
- {
- aa[1] = a.xl;
- aa[2] = 0;
- aa[3] = a.yl;
- aa[4] = 0; /* set up x&y codes */
- }
- putimage(xx, yy, aa, 0);
-}
-
-void plotsil(integer xx, integer yy) { /* Plots silhouette- rarely used */
- byte x, y, z;
- word offs;
- for (x = 0; x <= 3; x ++)
- for (y = 0; y <= a.yl; y ++)
- for (z = 0; z <= (a.xl / 8); z ++) {
- offs = 5 + y * xw * 4 + xw * x + z;
- aa[offs] = sil[y][z];
- }
-
- {
- aa[1] = a.xl;
- aa[2] = 0;
- aa[3] = a.yl;
- aa[4] = 0; /* set up x&y codes */
- }
-
- putimage(xx, yy, aa, 0);
-
-}
-
-void style(byte x) {
- if (x == 16)
- /*setfillstyle(pattern,8)*/setfillpattern(grey50, 8);
- else
- setfillstyle(1, x);
-}
-
-void bigpixel(integer x, integer y) {
- if (getpixel(500 + x, 150 + y) == 15)
- /*setfillstyle(pattern,8)*/setfillpattern(grey50, 8);
- else
- setfillstyle(1, getpixel(500 + x, 50 + y));
-
- bar(x * bigpix_gap, y * bigpix_gap,
- x * bigpix_gap + bigpix_size, y * bigpix_gap + bigpix_size);
-}
-
-void subplot(byte y, integer x, char c) {
- setfillstyle(1, 0);
- bar(x, 0, x + 9, 170);
- outtextxy(x + 5, y * 10 + 5, c);
-}
-
-void plotleft() {
- ; /* palette arrows */
- subplot(leftc, 239, '\32');
-}
-void plotright() {
- subplot(rightc, 351, '\33');
-}
-
-void plotbig(byte x, byte y, byte c) {
- style(c);
- bar(x * bigpix_gap, y * bigpix_gap,
- x * bigpix_gap + bigpix_size, y * bigpix_gap + bigpix_size);
- if (c == 16) {
- putpixel(500 + x, 150 + y, 15);
- putpixel(500 + x, 50 + y, 0);
- } else {
- putpixel(500 + x, 150 + y, 0);
- putpixel(500 + x, 50 + y, c);
- }
-}
-
-void changepic() {
- mx = mx / bigpix_gap;
- my = my / bigpix_gap;
- if ((mx > a.xl) || (my > a.yl)) return;
- if (mkey == left)
- plotbig(mx, my, leftc);
- else
- plotbig(mx, my, rightc);
-}
-
-void changecol() {
- my = my / 10;
- if (my > 16) return;
- if (mkey == left) {
- leftc = my;
- plotleft();
- } else {
- rightc = my;
- plotright();
- }
-}
-
-void showcutpic() {
- setfillstyle(5, 1);
- bar(20, 160, 40 + clipx, 180 + clipy);
- putimage(30, 170, clip[2], andput);
- putimage(30, 170, clip[1], xorput);
-}
-
-void movesquare(integer &xc, integer &yc, integer xl, integer yl) {
- integer x2, y2;
- do {
- x2 = xl + xc;
- y2 = yl + yc;
- setcolor(15);
- do {
- rectangle(xc * bigpix_gap - 1, yc * bigpix_gap - 1,
- x2 * (bigpix_gap + 1) - 1, y2 * (bigpix_gap + 1) - 1);
- } while (!keypressed());
- setcolor(0);
- rectangle(xc * bigpix_gap - 1, yc * bigpix_gap - 1,
- x2 * (bigpix_gap + 1) - 1, y2 * (bigpix_gap + 1) - 1);
- switch (readkey()) {
- case '\0':
- switch (readkey()) {
- case '\110':
- yc -= 1;
- break;
- case '\113':
- xc -= 1;
- break;
- case '\115':
- xc += 1;
- break;
- case '\120':
- yc += 1;
- break;
- }
- break;
- case '\15':
- return;
- break;
- }
- while ((xl + xc) > a.xl) xc -= 1;
- while ((yl + yc) > a.yl) yc -= 1;
- if (xc < 0) xc = 0;
- if (yc < 0) yc = 0;
- } while (!false);
-}
-
-void switch_(integer &v1, integer &v2)
-/* Swaps over the values of v1 and v2. */
-{
- integer temp;
- temp = v1;
- v1 = v2;
- v2 = temp;
-}
-
-void choosesquare(integer &x1, integer &y1, integer &x2, integer &y2) {
- boolean tl;
- do {
- setcolor(15);
- do {
- rectangle(x1 * bigpix_gap - 1, y1 * bigpix_gap - 1,
- (x2 + 1)*bigpix_gap - 1, (y2 + 1)*bigpix_gap - 1);
- } while (!keypressed());
- setcolor(0);
- rectangle(x1 * bigpix_gap - 1, y1 * bigpix_gap - 1,
- (x2 + 1)*bigpix_gap - 1, (y2 + 1)*bigpix_gap - 1);
- switch (readkey()) {
- case '\0':
- switch (readkey()) {
- case '\110':
- if (tl) y1 -= 1;
- else y2 -= 1;
- break;
- case '\113':
- if (tl) x1 -= 1;
- else x2 -= 1;
- break;
- case '\115':
- if (tl) x1 += 1;
- else x2 += 1;
- break;
- case '\120':
- if (tl) y1 += 1;
- else y2 += 1;
- break;
- }
- break;
- case '\11':
- tl = ! tl;
- break;
- case '\15': {
- if (x1 > x2) switch_(x1, x2); /* Get the square the right way up. */
- if (y1 > y2) switch_(y1, y2);
- y2 -= y1;
- x2 -= x1; /* y1 & y2 have to be the OFFSETS! */
- return;
- }
- break;
- }
- if (x1 < 0) x1 = 0;
- if (y1 < 0) y1 = 0;
- {
- if (y2 > a.yl) y2 = a.yl;
- if (x2 > a.xl) x2 = a.xl;
- }
- } while (!false);
-}
-
-void paste() {
- byte x, y;
- if (! boardfull) {
- output << '\7';
- return;
- }
- if (!((clipx == a.xl) && (clipy == a.yl)))
- movesquare(xofs, yofs, clipx, clipy);
- putimage(500 + xofs, 50 + yofs, clip[1], 0);
- putimage(500 + xofs, 150 + yofs, clip[2], 0);
- for (x = 0; x <= a.xl; x ++)
- for (y = 0; y <= a.yl; y ++) {
- bigpixel(x, y);
- }
-}
-
-void cut() {
- xofs = 0;
- yofs = 0; /* From the TL. */
- {
- getimage(500, 50, 500 + a.xl, 50 + a.yl, clip[1]);
- getimage(500, 150, 500 + a.xl, 150 + a.yl, clip[2]);
- clipx = a.xl;
- clipy = a.yl;
- }
- showcutpic();
- boardfull = true;
-}
-
-void cutsome() {
- {
- choosesquare(xofs, yofs, clipx, clipy);
- getimage(500 + xofs, 50 + yofs, 500 + xofs + clipx, 50 + yofs + clipy, clip[1]);
- getimage(500 + xofs, 150 + yofs, 500 + xofs + clipx, 150 + yofs + clipy, clip[2]);
- }
- showcutpic();
- boardfull = true;
-}
-
-boolean confirm(char c, string x) {
- byte col;
- char groi;
- boolean confirm_result;
- while (keypressed()) groi = readkey();
- x = x + "? " + c + " to confirm.";
- col = 1;
- do {
- setcolor(col);
- outtextxy(555, 5, x);
- col += 1;
- if (col == 16) col = 1;
- } while (!keypressed());
- confirm_result = upcase(readkey()) == c;
- setfillstyle(1, 0);
- bar(470, 0, 640, 10);
- return confirm_result;
-}
-
-void checkbutton(byte which) {
- my = (my - 12) / 25;
- switch (my) {
- case 0:
- if (confirm('S', "Save")) {
- implode(which);
- lmo = true;
- }
- break;
- case 1:
- if (confirm('C', "Cancel")) lmo = true;
- break;
- case 4:
- cut();
- break;
- case 5:
- if (confirm('P', "Paste")) paste();
- break;
- case 6:
- cutsome();
- break;
- }
-}
-
-void animate() {
-}
-
-void undo() {
-}
-
-void fliplr();
-
-static void flipline(integer x1, integer x2, integer y) {
- integer fv, ff;
- for (fv = x1; fv <= x2; fv ++) putpixel(fv, 0, getpixel(fv, y));
- ff = x2;
- for (fv = x1; fv <= x2; fv ++) {
- putpixel(fv, y, getpixel(ff, 0));
- ff -= 1;
- }
-}
-
-void fliplr() { /* Flips left-to-right. */
- integer fv, ff;
- for (fv = 0; fv <= a.yl; fv ++) {
- flipline(500, 500 + a.xl, 50 + fv);
- flipline(500, 500 + a.xl, 150 + fv);
- }
- for (fv = 0; fv <= a.xl; fv ++)
- for (ff = 0; ff <= a.yl; ff ++)
- bigpixel(fv, ff);
-}
-
-void change_colours() { /* Swaps one colour with another. */
- byte fv, ff;
-
- if ((leftc == 16) || (rightc == 16)) { /* See-through can't be one of the colours. */
- output << '\7'; /* Bleep! */
- return;
- }
-
- for (fv = 0; fv <= a.yl; fv ++)
- for (ff = 0; ff <= a.xl; ff ++)
- if (getpixel(500 + ff, 50 + fv) == leftc)
- putpixel(500 + ff, 50 + fv, rightc);
-
- for (fv = 0; fv <= a.xl; fv ++)
- for (ff = 0; ff <= a.yl; ff ++)
- bigpixel(fv, ff);
-}
-
-void redraw() {
- byte x, y;
- setfillstyle(1, 0);
- bar(0, 0, 250, 200);
-
- for (x = 0; x <= a.xl; x ++)
- for (y = 0; y <= a.yl; y ++) {
- bigpixel(x, y);
- }
-}
-
-void parse(char c) { /* Parses keystrokes */
- switch (upcase(c)) {
- case '\26':
- case 'P':
- paste();
- break;
- case '\3':
- case 'C':
- cut();
- break;
- case '\30':
- case 'X':
- cutsome();
- break;
- case 'A':
- animate();
- break;
- case 'U':
- undo();
- break;
- case '@':
- fliplr();
- break;
- case '!':
- change_colours();
- break;
- case '<':
- if (bigpix_size > 1) {
- bigpix_size -= 1;
- bigpix_gap -= 1;
- redraw();
- }
- break;
- case '>':
- if (bigpix_size < 8) {
- bigpix_size += 1;
- bigpix_gap += 1;
- redraw();
- }
- break;
- case '\33':
- if (confirm('X', "Exit")) lmo = true;
- break;
- }
-}
-
-void editone(byte which) {
- byte x, y;
- cleardevice();
- explode(which);
- plotat(500, 50);
- plotsil(500, 150);
- for (x = 0; x <= a.xl; x ++)
- for (y = 0; y <= a.yl; y ++) {
- bigpixel(x, y);
- }
- for (y = 0; y <= 16; y ++) {
- style(y);
- bar(251, y * 10 + 1, 349, y * 10 + 9);
- rectangle(250, y * 10, 350, y * 10 + 10);
- }
-
- settextstyle(0, 0, 1);
- leftc = 15;
- rightc = 16;
- plotleft();
- plotright();
- lmo = false;
-
- outtextxy(410, 25, "Save");
- outtextxy(410, 50, "Cancel");
- outtextxy(410, 75, "Animate");
- outtextxy(410, 100, "Undo");
- outtextxy(410, 125, "Cut");
- outtextxy(410, 150, "Paste");
- outtextxy(410, 175, "X: Cut Some");
- if (boardfull) showcutpic();
- setfillstyle(6, 15);
- for (y = 0; y <= 7; y ++)
- bar(370, y * 25 + 12, 450, y * 25 + 12);
-
- do {
- on;
- do {
- if (keypressed()) parse(readkey());
- } while (!(anyo | lmo));
- off;
-
- if (! lmo) {
- getbuttonstatus;
-
- switch (mx) {
- case 1 ... 249:
- changepic();
- break;
- case 250 ... 350:
- changecol();
- break;
- case 370 ... 450:
- checkbutton(which);
- break;
- }
- }
- } while (!lmo);
- settextstyle(2, 0, 7);
- setcolor(15);
-}
-
-void editstride(byte which);
-
-static char whichc;
-
-static shortint first;
-
-static void drawup(byte &which) {
- byte fv;
- whichc = chr(which + 48);
- cleardevice();
- outtextxy(320, 10, string("Edit stride ") + whichc);
- first = (which - 1) * a.seq - 1;
- for (fv = 1; fv <= a.seq; fv ++) {
- explode(fv + first);
- plotat(fv * 73, 77);
- outtextxy(17 + fv * 73, 64, chr(fv + 48));
- }
- outtextxy(320, 177, "Which?");
-}
-
-void editstride(byte which) {
- char r;
- drawup(which);
- do {
- r = readkey();
- if ((r > '0') && (r <= chr(a.seq + 48))) {
- editone(ord(r) - 48 + first);
- drawup(which);
- }
- } while (!(r == '\33'));
-}
-
-void editpics();
-
-static byte nds; /* num div seq */
-
-static void drawup1() {
- byte fv;
- setgraphmode(0);
- directvideo = false;
- settextjustify(1, 1);
- nds = a.num / a.seq;
- settextstyle(2, 0, 7);
- outtextxy(320, 10, "Edit pictures...");
- outtextxy(320, 40, "(Usually, 1=away, 2=right, 3=towards, 4=left.)");
- for (fv = 1; fv <= nds; fv ++) {
- explode((fv - 1)*a.seq);
- plotat(fv * 73, 100);
- outtextxy(17 + fv * 73, 87, chr(fv + 48));
- }
- outtextxy(320, 60, string("There are ") + strf(nds) + " strides available.");
- outtextxy(320, 177, "Which do you want?");
-}
-
-void editpics() {
- char r;
- byte which;
- integer e;
- drawup1();
- do {
- r = readkey();
- if ((r > '0') && (r <= chr(nds + 48))) {
- editstride(ord(r) - 48);
- drawup1();
- }
- } while (!(r == '\33'));
- restorecrtmode();
-}
-
-void titles() {
- integer gd, gm;
- char pak;
- word wait;
- gd = 3;
- gm = 1;
- initgraph(gd, gm, "c:\\bp\\bgi");
- settextstyle(5, 0, 10);
- settextjustify(1, 1);
- gm = getmaxy() / 2;
- wait = 0;
- do {
- for (gm = 0; gm <= 15; gm ++) {
- setcolor(15 - gm);
- for (gd = 0; gd <= (150 - gm * 10); gd ++) {
- outtextxy(320, 124 - gd, "Spread 2");
- outtextxy(320, 125 + gd, "Spread 2");
- if ((gd == 5) && (gm == 0)) wait = 2345;
- if ((gd == 6) && (gm == 0)) wait = 0;
- do {
- if (keypressed()) {
- while (keypressed()) pak = readkey();
- restorecrtmode();
- return;
- }
- if (wait > 0) {
- wait -= 1;
- delay(1);
- }
- } while (!(wait == 0));
- }
- }
- } while (!false);
-}
-
-int main(int argc, const char *argv[]) {
- pio_initialize(argc, argv);
- titles();
- setup();
- do {
- status();
- r = upcase(readkey());
- switch (r) {
- case 'A':
- editadx();
- break;
- case 'P':
- editpics();
- break;
- case 'S':
- saveit();
- break;
- case 'X':
- case '\33':
- quit();
- break;
- }
- } while (!false);
- return EXIT_SUCCESS;
-}
-
-} // End of namespace Avalanche. \ No newline at end of file