aboutsummaryrefslogtreecommitdiff
path: root/engines/avalanche/filer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/avalanche/filer.cpp')
-rw-r--r--engines/avalanche/filer.cpp903
1 files changed, 0 insertions, 903 deletions
diff --git a/engines/avalanche/filer.cpp b/engines/avalanche/filer.cpp
deleted file mode 100644
index a98161796b..0000000000
--- a/engines/avalanche/filer.cpp
+++ /dev/null
@@ -1,903 +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 "Dos.h"*/
-/*#include "Crt.h"*/
-/*#include "Tommys.h"*/
-#include "lucerna.h"
-
-/*$V-*/
-
-namespace Avalanche {
-
-struct windowtype {
- integer x1, y1, x2, y2;
- varying_string<20> title;
-};
-
-struct ednahead { /* Edna header */
- /* This header starts at byte offset 177 in the .ASG file. */
- array<1, 9, char> id; /* signature */
- word revision; /* EDNA revision, here 2 (1=dna256) */
- varying_string<50> game; /* Long name, eg Lord Avalot D'Argent */
- varying_string<15> shortname; /* Short name, eg Avalot */
- word number; /* Game's code number, here 2 */
- word ver; /* Version number as integer (eg 1.00 = 100) */
- varying_string<5> verstr; /* Vernum as string (eg 1.00 = "1.00" */
- varying_string<12> filename; /* Filename, eg AVALOT.EXE */
- byte osbyte; /* Saving OS (here 1=DOS. See below for others.*/
- varying_string<5> os; /* Saving OS (here 1=DOS. See below for others.*/
-
- /* Info on this particular game */
-
- varying_string<8> fn; /* Filename (not extension ('cos that's .ASG)) */
- byte d, m; /* D, M, Y are the Day, Month & Year this game was... */
- word y; /* ...saved on. */
- varying_string<40> desc; /* Description of game (same as in Avaricius!) */
- word len; /* Length of DNA (it's not going to be above 65535!) */
-
- /* Quick reference & miscellaneous */
-
- word saves; /* no. of times this game has been saved */
- integer cash; /* contents of your wallet in numerical form */
- varying_string<20> money; /* ditto in string form (eg 5/-, or 1 denarius)*/
- word points; /* your score */
-
- /* DNA values follow, then footer (which is ignored) */
-};
-
-const integer border = 1; /* size of border on shadowboxes */
-
-const array<1, 4, varying_string<7> > buttons = {{"Okay", "Wipe", "Cancel", "Info..."}};
-
-const integer files = 3;
-const integer dirs = 4;
-
-const integer drlen = 15; /* no. of drives on one line */
-
-const array<1, 4, windowtype> threewins = {
- { {155, 12, 630, 22, "Name"},
- {15, 25, 410, 70, "Drives"},
- {15, 83, 480, 179, "Files (*.ASG)"},
- {490, 83, 630, 179, "Subdirectories"}
- }
-};
-
-const integer name_win = 1;
-const integer drive_win = 2;
-const integer file_win = 3;
-const integer subdir_win = 4;
-
-matrix<3, 4, 1, 77, varying_string<12> > lists;
-array<1, 77, varying_string<40> > descs;
-array<3, 4, byte> nums, where, top;
-searchrec s;
-boolean loading;
-varying_string<26> drives;
-pathstr current;
-byte nowwin;
-varying_string<17> doing;
-
-pathstr filename;
-boolean filefound;
-
-void shadow(integer x1, integer y1, integer x2, integer y2, byte hc, byte sc) {
- byte fv;
- for (fv = 0; fv <= border; fv ++) {
- setfillstyle(1, hc);
- bar(x1 + fv, y1 + fv, x1 + fv, y2 - fv);
- bar(x1 + fv, y1 + fv, x2 - fv, y1 + fv);
-
- setfillstyle(1, sc);
- bar(x2 - fv, y1 + fv, x2 - fv, y2 - fv);
- bar(x1 + fv, y2 - fv, x2 - fv, y2 - fv);
- }
-}
-
-void shbox(integer x1, integer y1, integer x2, integer y2, string t) {
- const integer fc = 7;
- shadow(x1, y1, x2, y2, 15, 8);
- setfillstyle(1, fc);
- bar(x1 + border + 1, y1 + border + 1, x2 - border - 1, y2 - border - 1);
- setcolor(1);
- x1 = (x2 - x1) / 2 + x1;
- y1 = (y2 - y1) / 2 + y1;
- outtextxy(x1, y1, t);
- if (length(t) > 1) {
- fillchar(t[2], length(t) - 1, '\40');
- t[1] = '_';
- outtextxy(x1 - 1, y1 + 1, t);
- }
-}
-
-void show_drives() {
- byte fv;
- settextjustify(1, 1);
- for (fv = 0; fv <= length(drives) - 1; fv ++)
- shbox((fv % drlen) * 25 + 25, (fv / drlen) * 19 + 31,
- (fv % drlen) * 25 + 40, 45 + (fv / drlen) * 19, drives[fv + 1]);
- setcolor(11);
- settextjustify(0, 2);
-}
-
-void box(integer x1, integer y1, integer x2, integer y2, string z) {
- rectangle(x1, y1, x2, y2);
- outtextxy(x1 + 1, y1 - 10, z + ':');
- outtextxy(x1, y1 - 9, "_");
-}
-
-string lowstr(string x) {
- byte fv;
- string lowstr_result;
- for (fv = 1; fv <= length(x); fv ++)
- if (set::of(range('A', 'Z'), eos).has(x[fv])) x[fv] += 32;
- lowstr_result = x;
- return lowstr_result;
-}
-
-char lowchar(char x) {
- char lowchar_result;
- if (set::of(range('A', 'Z'), eos).has(x)) x -= 32;
- lowchar_result = x;
- return lowchar_result;
-}
-
-void getcurrent() {
- current = lowstr(fexpand("*.asg"));
-}
-
-void setup() {
- integer gd, gm;
- registers r;
- byte floppies;
- gd = 3;
- gm = 0;
- initgraph(gd, gm, "c:\\bp\\bgi");
- dusk();
- setfillstyle(1, 1);
- bar(2, 2, 637, 197);
- shadow(0, 0, 639, 199, 15, 7);
-
- if (loading) doing = "LOAD";
- else doing = "SAV";
- doing = doing + "ING a file...";
-
- /* Now... find all drives that exist. */
- drives = "";
- intr(0x11, r);
- floppies = (((cardinal)r.ax >> 6) & 0x3) + 1; /* useful bit of code! */
- for (gm = 1; gm <= floppies; gm ++) drives = drives + chr(64 + gm);
- /* Winchesters, etc., can be found the easy way... */
- for (gd = 3; gd <= 26; gd ++) /* C: to Z: */
- if (disksize(gd) > -1) drives = drives + chr(64 + gd);
-
- fillchar(where, sizeof(where), '\1');
- fillchar(top, sizeof(top), '\1');
-
- settextstyle(0, 0, 0);
- settextjustify(1, 1);
- for (gd = 1; gd <= 2; gd ++)
- for (gm = 0; gm <= 1; gm ++)
- shbox(420 + gm * 110, gd * 25, 520 + gm * 110, gd * 25 + 20, buttons[gm * 2 + gd]);
- shbox(15, 182, 350, 196, "Help... (press f1)");
- settextjustify(0, 2);
- setcolor(11);
- setcolor(15);
- outtextxy(15, 5, "The Avvy Filer...");
- setcolor(11);
- outtextxy(317, 3, string('(') + doing + ')');
- outtextxy(357, 185, "Copyright (c) 1993, Thomas Thurman.");
-
- /* Draw the boxes and names */
- setcolor(3);
- for (gm = 1; gm <= 4; gm ++) {
- windowtype &with = threewins[gm];
- box(with.x1, with.y1, with.x2, with.y2, with.title);
- }
- nowwin = 1;
- getcurrent();
-}
-
-void quicksort(byte whichlist, integer lo, integer hi);
-
-
-static void sort(integer l, integer r, byte &whichlist) {
- integer i, j;
- varying_string<12> x, y;
-
- i = l;
- j = r;
- x = lists[whichlist][(l + r) / 2];
- do {
- while (lists[whichlist][i] < x) i = i + 1;
- while (x < lists[whichlist][j]) j = j - 1;
- if (i <= j) {
- y = lists[whichlist][i];
- lists[whichlist][i] = lists[whichlist][j];
- lists[whichlist][j] = y;
- i = i + 1;
- j = j - 1;
- }
- } while (!(i > j));
- if (l < j) sort(l, j, whichlist);
- if (i < r) sort(i, r, whichlist);
-}
-
-void quicksort(byte whichlist, integer lo, integer hi)
-
-{
- /*QuickSort*/;
- sort(lo, hi, whichlist);
-}
-
-void scandir() {
- pathstr nix;
- namestr name;
- untyped_file f;
- ednahead eh;
- array<1, 4, char> dna_type;
-
- nums[files] = 0;
- findfirst("*.asg", archive + hidden + readonly, s);
-
- while (doserror == 0) {
- fsplit(s.name, nix, name, nix);
- nums[files] += 1;
- lists[files][nums[files]] = lowstr(name);
-
- assign(f, s.name);
- reset(f, 1);
- seek(f, 11);
- blockread(f, dna_type, 4);
-
- if (dna_type == "Avvy") {
- ; /* A DNA256 file. */
- descs[nums[files]] = "* Saved by Avaricius!";
- } else {
- ; /* EDNA-based files. */
- if (dna_type == "EDNA") {
- seek(f, 177);
- blockread(f, eh, sizeof(eh));
-
- if (eh.revision != 2)
- descs[nums[files]] = "* Unknown EDNA type!";
- else {
-
- if (eh.number != 2)
- descs[nums[files]] = string("* Saved by ") + eh.shortname + '!';
- else {
- ; /* Well... everything seems to have gone OK! */
- descs[nums[files]] = eh.desc;
- }
- }
- } else
- descs[nums[files]] = "* Not an Avvy saved game!";
- }
- close(f);
- findnext(s);
- }
- nums[dirs] = 0;
- findfirst("*.*", directory, s);
- while (doserror == 0) {
- if (((s.attr & directory) > 0) && ((length(s.name)) > 1)) {
- nums[dirs] += 1;
- lists[dirs][nums[dirs]] = lowstr(s.name);
- }
- findnext(s);
- }
-
- /* Now sort 'em! */
-
- quicksort(dirs, 1, nums[ dirs]);
- quicksort(files, 1, nums[files]);
-
- where[dirs] = 1;
- where[files] = 1;
- top[dirs] = 1;
- top[files] = 1;
-}
-
-void show_file(integer x, integer y, byte which) {
- varying_string<58> z;
- fillchar(z[1], 13, '\40');
- z = lists[files][which] + ".asg";
- z[0] = '\15';
- z = z + descs[which];
-
- if (descs[which][1] == '*') /* Can't load these! */
- setcolor(red);
- else
- setcolor(lightcyan);
-
- outtextxy(x, y, z);
-}
-
-void showfiles() {
- byte fv;
- if (loading) setcolor(11);
- else setcolor(3);
- if (nums[3] == 0) {
- outtextxy(22, 86, "(None here!)");
- return;
- }
- for (fv = 0; fv <= 8; fv ++)
- if (where[3] + fv <= nums[3])
- show_file(19, 87 + fv * 10, where[3] + fv);
-}
-
-void showdirs() {
- byte fv;
- setcolor(11);
- for (fv = 0; fv <= 8; fv ++)
- if (where[4] + fv <= nums[4])
- outtextxy(497, 87 + fv * 10, string('[') + lists[dirs][fv + where[4]] + ']');
-}
-
-void show() {
- byte fv;
- dirstr d;
- namestr n;
- extstr e;
- setfillstyle(1, 1);
- for (fv = 1; fv <= 4; fv ++)
- if (fv != 2) {
- windowtype &with = threewins[fv];
- bar(with.x1 + 1, with.y1 + 1, with.x2 - 1, with.y2 - 1);
- }
- showfiles();
- showdirs();
- setcolor(7);
- outtextxy(159, 14, current);
-}
-
-void blip() {
- sound(177);
- delay(77);
- nosound;
-}
-
-void invert(integer x1, integer y1, integer x2, integer y2) {
- pointer p, restore;
- word s;
- s = imagesize(x1, y1, x2, y2);
- mark(restore);
- getmem(p, s);
- getimage(x1, y1, x2, y2, p);
- putimage(x1, y1, p, notput);
- release(restore);
-}
-
-void changedrive(char drive) {
- byte fv;
- fv = pos(drive, drives);
- if (fv == 0) {
- blip();
- return;
- }
- fv -= 1;
- shadow((fv % drlen) * 25 + 25, (fv / drlen) * 19 + 31,
- (fv % drlen) * 25 + 40, 45 + (fv / drlen) * 19, 8, 7);
- chdir(string(drive) + ':');
- getcurrent();
- scandir();
- show();
- shadow((fv % drlen) * 25 + 25, (fv / drlen) * 19 + 31,
- (fv % drlen) * 25 + 40, 45 + (fv / drlen) * 19, 15, 8);
-}
-
-void highlight(byte win, byte line) {
- switch (win) {
- case 3:
- invert(16, 75 + line * 10, 479, 85 + line * 10);
- break;
- case 4:
- invert(491, 75 + line * 10, 619, 85 + line * 10);
- break;
- }
-}
-
-void repaint(byte whichwindow) {
- setfillstyle(1, 1);
- {
- windowtype &with = threewins[whichwindow];
- bar(with.x1 + 1, with.y1 + 1, with.x2 - 1, with.y2 - 1);
- }
- switch (whichwindow) {
- case file_win:
- showfiles();
- break;
- case subdir_win:
- showdirs();
- break;
- }
- highlight(whichwindow, 1);
- top[whichwindow] = where[whichwindow];
-}
-
-void fileblit(word xpos, word xlen, word y1, word y2, shortint dir, word ylen) {
- word fv;
- byte bit;
- for (bit = 0; bit <= 3; bit ++) {
- fv = 0;
- while (fv < ylen) {
- port[0x3c4] = 2;
- port[0x3ce] = 4;
- port[0x3c5] = 1 << bit;
- port[0x3cf] = bit;
- move(mem[0xa000 * (y1 + fv * dir) * 80 + xpos], mem[0xa000 * (y2 + fv * dir) * 80 + xpos], xlen);
- fv += 1;
- }
- }
- bit = getpixel(0, 0);
-}
-
-void seekthrough(byte whichlist, byte &wherenow, char whatfor) {
- byte startedat;
-
- startedat = wherenow;
- do {
- wherenow += 1;
- if (wherenow > nums[whichlist]) wherenow = 1;
- } while (!((startedat == wherenow) || (lists[whichlist][wherenow][1] == whatfor)));
- repaint(whichlist);
-}
-
-void gotohome(byte whichlist) {
- where[whichlist] = 1;
- repaint(whichlist);
-}
-
-void gotoend(byte whichlist) {
- where[whichlist] = nums[whichlist];
- repaint(whichlist);
-}
-
-void pageup(byte whichlist) {
- if (where[whichlist] > 9) {
- where[whichlist] -= 9;
- repaint(whichlist);
- }
-}
-
-void pagedown(byte whichlist) {
- if (where[whichlist] < nums[whichlist] - 9) {
- where[whichlist] += 9;
- repaint(whichlist);
- }
-}
-
-void subdirparse(string r);
-
-static void movehl(byte which, shortint howmuch) {
- highlight(4, where[4] - top[4] + 1);
- if (((where[which] + howmuch) > 0) && ((where[which] + howmuch) <= (unsigned char)nums[4]))
- where[which] = where[which] + howmuch;
- highlight(4, where[4] - top[4] + 1);
-}
-
-
-
-static void change_dir() {
- dusk();
- /*$I-*/ chdir(lists[4][where[4]]);
- /*$I+*/
- if (ioresult != 0) {
- dawn();
- blip();
- return;
- }
- where[4] = 1;
- top[4] = 1;
- getcurrent();
- scandir();
- show();
- highlight(4, 1);
- dawn();
-}
-
-void subdirparse(string r)
-
-{
- switch (r[1]) {
- case creturn:
- change_dir();
- break;
-
- case '\0':
- switch (r[2]) {
- case cup:
- if (where[4] - top[4] > 0) /* Up */
- movehl(4, -1); /* Within range */
- else if (top[4] > 1) {
- ; /* Outside range- must scroll */
- highlight(4, 1);
- top[4] -= 1;
- where[4] -= 1;
- fileblit(61, 18, 166, 176, -1, 80);
- setfillstyle(1, 1);
- bar(490, 85, 630, 95);
- setcolor(11);
- outtextxy(497, 87, string('[') + lists[dirs][where[4]] + ']');
- highlight(4, 1);
- }
- break;
- case cdown:
- if (where[4] - top[4] < 8) /* Down */
- movehl(4, 1);
- else if (top[4] + 8 < nums[4]) {
- highlight(4, 9);
- top[4] += 1;
- where[4] += 1;
- fileblit(60, 18, 97, 87, 1, 80);
- setfillstyle(1, 1);
- bar(490, 165, 630, 175);
- setcolor(11);
- outtextxy(497, 167, string('[') + lists[dirs][where[4]] + ']');
- highlight(4, 9);
- }
- break;
- case chome:
- gotohome(4);
- break;
- case cend:
- gotoend(4);
- break;
- case cpgup:
- pageup(4);
- break;
- case cpgdn:
- pagedown(4);
- break;
- case c_ao:
- change_dir();
- break;
- }
- break;
- default:
- seekthrough(4, where[4], lowchar(r[1]));
- }
-}
-
-void fileinfo(byte which);
-
-
-static void display(integer y, string left, string right) {
- y = 17 + y * 12;
- settextjustify(2, 1);
- setcolor(11);
- outtextxy(315, y, left);
- settextjustify(0, 1);
- setcolor(15);
- outtextxy(325, y, right);
-}
-
-void fileinfo(byte which)
-/* This gives information on the file whose name is in lists[files,which]. */
-{
- ednahead eh;
- untyped_file f;
- varying_string<4> os;
- char r;
-
-
- /* Firstly, we must check whether or not it's an Avalot file. This is easily
- done, since the descriptions of all others always begin with a star. */
-
- if ((descs[which][1] == '*') || (descs[which][1] == '(')) {
- ; /* it is. */
- blip(); /* Naaaarghh! */
- return;
- }
-
- /* Anyway... it wasn't. */
-
- assign(f, lists[files][which] + ".asg");
- reset(f, 1);
- seek(f, 177);
- blockread(f, eh, sizeof(eh));
- close(f);
-
- /* We now hold its EDNA record. */
-
- setfillstyle(1, 1);
- bar(2, 2, 637, 197); /* Interesting information coming up! */
-
- {
- display(2, "Saved by:", eh.game);
- display(3, "version:", eh.verstr);
-
- /* display(4,'under', os);*/
-
- display(6, "Saved on ", strf(eh.d) + '-' + strf(eh.m) + '-' + strf(eh.y));
-
- display(9, "No. of times saved:", strf(eh.saves));
-
- display(11, "Money:", eh.money);
- display(12, "Score:", strf(eh.points));
- }
-
- shbox(500, 177, 650, 200, "Press any key...");
- r = readkey();
-
- setfillstyle(1, 1);
- bar(2, 2, 637, 197);
-}
-
-void filer_help()
-/* This gives general help. */
-{
- char r;
- outtextxy(100, 100, "Just general help here.");
- shbox(500, 177, 650, 200, "Press any key...");
- r = readkey();
-
- setfillstyle(1, 1);
- bar(2, 2, 637, 197);
-}
-
-void wipe()
-/* This allows you to delete files. */
-{
- char r;
- outtextxy(100, 100, "Are you sure you want to delete \"foo.bar\"?");
- shbox(500, 177, 650, 200, "[Y/N]");
- r = readkey();
-
- setfillstyle(1, 1);
- bar(2, 2, 637, 197);
-}
-
-void filesparse(string r);
-
-static void movehl1(byte which, shortint howmuch) {
- highlight(3, where[3] - top[3] + 1);
- if (((where[which] + howmuch) > 0) && ((where[which] + howmuch) <= (unsigned char)nums[3]))
- where[which] = where[which] + howmuch;
- highlight(3, where[3] - top[3] + 1);
-}
-
-
-
-static boolean selected_file() {
- boolean selected_file_result;
- if (descs[where[file_win]][1] == '*') {
- blip();
- selected_file_result = false;
- } else {
- filename = lists[file_win][where[file_win]];
- filefound = true;
- selected_file_result = true;
- }
- return selected_file_result;
-}
-
-void filesparse(string r)
-
-{
- switch (r[1]) {
- case creturn:
- if (selected_file()) return;
- break;
- case '\0':
- switch (r[2]) {
- case cup:
- if (where[3] - top[3] > 0) /* Up */
- movehl1(3, -1); /* Within range */
- else if (top[3] > 1) {
- ; /* Outside range- must scroll */
- highlight(3, 1);
- top[3] -= 1;
- where[3] -= 1;
- fileblit(1, 59, 166, 176, -1, 80);
- setfillstyle(1, 1);
- bar(15, 85, 480, 95);
- show_file(19, 87, where[3]);
- highlight(3, 1);
- }
- break;
- case cdown:
- if (where[3] - top[3] < 8) /* Down */
- movehl1(3, 1);
- else if (top[3] + 8 < nums[3]) {
- highlight(3, 9);
- top[3] += 1;
- where[3] += 1;
- fileblit(1, 59, 97, 87, 1, 80);
- setfillstyle(1, 1);
- bar(15, 165, 480, 175);
- show_file(19, 167, where[3]);
- highlight(3, 9);
- }
- break;
- case c_ai:
- fileinfo(where[3]);
- break; /* alt-I: information. */
- case c_ah:
- case c_f1:
- filer_help();
- break; /* alt-I: information. */
- case chome:
- gotohome(3);
- break;
- case cend:
- gotoend(3);
- break;
- case cpgup:
- pageup(3);
- break;
- case cpgdn:
- pagedown(3);
- break;
- case c_ao:
- if (selected_file()) return;
- break;
- }
- break;
- default:
- seekthrough(3, where[3], lowchar(r[1]));
- }
-}
-
-string playaround();
-
-static void changewin(byte i) {
- switch (nowwin) {
- case 3:
- case 4:
- highlight(nowwin, where[nowwin] - top[nowwin] + 1);
- break;
- }
- setcolor(3);
- {
- windowtype &with = threewins[nowwin];
- box(with.x1, with.y1, with.x2, with.y2, with.title);
- }
- nowwin = i;
- if (nowwin < 1) nowwin = 4;
- if (nowwin > 4) nowwin = 1;
- switch (nowwin) {
- case 3:
- case 4:
- highlight(nowwin, where[nowwin] - top[nowwin] + 1);
- break;
- }
-}
-
-string playaround() {
- char r, r2;
- string playaround_result;
- filefound = false;
- dawn();
-
- do {
- setcolor(14);
- {
- windowtype &with = threewins[nowwin];
- box(with.x1, with.y1, with.x2, with.y2, with.title);
- }
- r = readkey();
- switch (r) {
- case ctab:
- changewin(nowwin + 1);
- break;
- case cescape: {
- playaround_result = "";
- return playaround_result;
- }
- break;
- case '\0': {
- ; /* parse extd keystroke */
- r2 = readkey();
- switch (r2) {
- case cs_tab:
- changewin(nowwin - 1);
- break;
- case c_an:
- changewin(1);
- break;
- case c_ad:
- changewin(2);
- break;
- case c_af:
- changewin(3);
- break;
- case c_as:
- changewin(4);
- break;
- case c_ac: {
- playaround_result = "";
- return playaround_result;
- }
- break;
- default:
- switch (nowwin) {
- case 3:
- filesparse(string('\0') + r2);
- break;
- case 4:
- subdirparse(string('\0') + r2);
- break;
- }
- }
- }
- break;
- default: {
- ; /* Pass keystroke to current window */
- switch (nowwin) {
- case 2:
- changedrive(upcase(r));
- break;
- case 4:
- subdirparse(r);
- break;
- case 3:
- filesparse(r);
- break;
- default:
- blip();
- }
- }
-
- }
-
- if (filefound) {
- dusk();
- playaround_result = filename;
- return playaround_result;
- }
- } while (!false);
- return playaround_result;
-}
-
-void do_filer() {
- pathstr p;
- void do_filer_result;
- loading = true;
- setup();
- scandir();
- show();
- show_drives();
- p = playaround();
- if (p != "") p = fexpand(p + ".ASG");
- do_filer_result = p;
- return do_filer_result;
-}
-
-int main(int argc, const char *argv[]) {
- pio_initialize(argc, argv);
- filename = do_filer();
- closegraph();
- if (filename == "")
- output << "*** CANCELLED! ***" << NL;
- else
- output << "Selected: " << filename << NL;
- input >> NL;
- return EXIT_SUCCESS;
-}
-
-} // End of namespace Avalanche. \ No newline at end of file