aboutsummaryrefslogtreecommitdiff
path: root/engines/avalanche/fileunit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/avalanche/fileunit.cpp')
-rw-r--r--engines/avalanche/fileunit.cpp1991
1 files changed, 1075 insertions, 916 deletions
diff --git a/engines/avalanche/fileunit.cpp b/engines/avalanche/fileunit.cpp
index 00c19ede68..6b1c9b196b 100644
--- a/engines/avalanche/fileunit.cpp
+++ b/engines/avalanche/fileunit.cpp
@@ -11,7 +11,7 @@
* 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
+ * 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
@@ -26,7 +26,7 @@
*/
#define __fileunit_implementation__
- /* v:filer.pas - "avvyfiler" - in unit form. */
+/* v:filer.pas - "avvyfiler" - in unit form. */
#include "fileunit.h"
@@ -44,24 +44,26 @@
namespace Avalanche {
struct windowtype {
- integer x1,y1,x2,y2;
- varying_string<20> title;
+ integer x1, y1, x2, y2;
+ varying_string<20> title;
};
const integer border = 1; /* size of border on shadowboxes */
-const array<1,4,string> buttons = {{"Okay","Wipe","Cancel","Info..."}};
+const array<1, 4, string> 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 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;
@@ -70,9 +72,9 @@ const integer subdir_win = 4;
const integer filer_page = 3;
-matrix<3,4,1,77,varying_string<12> > lists;
-array<1,77,varying_string<40> > descs;
-array<3,4,byte> nums,where,top,thumb_pos,thumb_len;
+matrix<3, 4, 1, 77, varying_string<12> > lists;
+array<1, 77, varying_string<40> > descs;
+array<3, 4, byte> nums, where, top, thumb_pos, thumb_len;
searchrec s;
boolean loading;
varying_string<26> drives;
@@ -84,1062 +86,1219 @@ boolean filefound;
boolean cancelled;
-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 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 ((t[1]!='[') && (length(t)>1))
- {
- fillchar(t[2],length(t)-1,'\40'); t[1]='_';
- outtextxy(x1-1,y1+1,t);
- }
+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 ((t[1] != '[') && (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 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);
}
-char which_drive(integer x,integer y)
-{
- char which_drive_result;
- x=(x-25) / 25; y=(y-32) / 19;
+char which_drive(integer x, integer y) {
+ char which_drive_result;
+ x = (x - 25) / 25;
+ y = (y - 32) / 19;
- which_drive_result= drives[1+x+y*drlen];
- return which_drive_result;
+ which_drive_result = drives[1 + x + y * drlen];
+ return which_drive_result;
}
-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,"_");
+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(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;
+ 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;
+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 getcurrent() {
+ current = lowstr(fexpand("*.asg"));
}
-void firstsetup()
-{
- integer gd,gm;
- registers r;
- byte floppies;
-
- /* 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');
-
- /* Set up mouse. */
- off_virtual();
- oncandopageswap=false;
- newpointer(2);
+void firstsetup() {
+ integer gd, gm;
+ registers r;
+ byte floppies;
+
+ /* 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');
+
+ /* Set up mouse. */
+ off_virtual();
+ oncandopageswap = false;
+ newpointer(2);
}
-void draw_scroll_bar(byte which)
-{
- setcolor(1);
- {
- windowtype& with = threewins[which];
-
- setfillstyle(1,7);
- bar(with.x2-7,with.y1+10,with.x2-1,with.y2-10);
- setfillstyle(1,3);
- bar(with.x2-7,with.y1+ 1,with.x2-1,with.y1+9);
- bar(with.x2-7,with.y2- 9,with.x2-1,with.y2-1);
- outtextxy(with.x2-7,with.y1+2,"\30");
- outtextxy(with.x2-7,with.y2-8,"\31");
- }
+void draw_scroll_bar(byte which) {
+ setcolor(1);
+ {
+ windowtype &with = threewins[which];
+
+ setfillstyle(1, 7);
+ bar(with.x2 - 7, with.y1 + 10, with.x2 - 1, with.y2 - 10);
+ setfillstyle(1, 3);
+ bar(with.x2 - 7, with.y1 + 1, with.x2 - 1, with.y1 + 9);
+ bar(with.x2 - 7, with.y2 - 9, with.x2 - 1, with.y2 - 1);
+ outtextxy(with.x2 - 7, with.y1 + 2, "\30");
+ outtextxy(with.x2 - 7, with.y2 - 8, "\31");
+ }
}
-void setup()
-{
- integer gd,gm;
- registers r;
- byte floppies;
-
- setactivepage(filer_page); setvisualpage(filer_page);
- setfillstyle(1,1); bar(2,2,637,197); shadow(0,0,639,199,15,7);
-
- 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,"Select a file to load.");
- 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);}
-
- /* Draw the scroll bars. */
-
- for( gm=3; gm <= 4; gm ++) draw_scroll_bar(gm);
+void setup() {
+ integer gd, gm;
+ registers r;
+ byte floppies;
+
+ setactivepage(filer_page);
+ setvisualpage(filer_page);
+ setfillstyle(1, 1);
+ bar(2, 2, 637, 197);
+ shadow(0, 0, 639, 199, 15, 7);
+
+ 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, "Select a file to load.");
+ 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);
+ }
+
+ /* Draw the scroll bars. */
+
+ for (gm = 3; gm <= 4; gm ++) draw_scroll_bar(gm);
}
-void thumb(byte whichwin)
-{
- word length,the_top;
-
- if (nums[whichwin]<9)
- {
- length=76;
- the_top=0;
- } else
- {
- length=trunc(76*((real)(8)/nums[whichwin]));
- the_top=trunc(((real)(where[whichwin])/nums[whichwin])*(76-length));
- }
-
- the_top += 93; /* Top of both the scrollbars. */
-
- setfillstyle(1,7);
- { windowtype& with = threewins[whichwin];
- bar(with.x2-6,thumb_pos[whichwin],with.x2-3,thumb_pos[whichwin]+length);}
- setfillstyle(1,1);
- { windowtype& with = threewins[whichwin];
- bar(with.x2-6,the_top,with.x2-3,the_top+length);}
-
- thumb_pos[whichwin]=the_top;
- thumb_len[whichwin]=length;
+void thumb(byte whichwin) {
+ word length, the_top;
+
+ if (nums[whichwin] < 9) {
+ length = 76;
+ the_top = 0;
+ } else {
+ length = trunc(76 * ((real)(8) / nums[whichwin]));
+ the_top = trunc(((real)(where[whichwin]) / nums[whichwin]) * (76 - length));
+ }
+
+ the_top += 93; /* Top of both the scrollbars. */
+
+ setfillstyle(1, 7);
+ {
+ windowtype &with = threewins[whichwin];
+ bar(with.x2 - 6, thumb_pos[whichwin], with.x2 - 3, thumb_pos[whichwin] + length);
+ }
+ setfillstyle(1, 1);
+ {
+ windowtype &with = threewins[whichwin];
+ bar(with.x2 - 6, the_top, with.x2 - 3, the_top + length);
+ }
+
+ thumb_pos[whichwin] = the_top;
+ thumb_len[whichwin] = length;
}
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;
- varying_string<40> d;
-
- 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;
-
- d = descs[i];
- descs[i] = descs[j];
- descs[j] = d;
-
- i = i + 1; j = j - 1;
- }
- } while (!(i > j));
-
-/* if j<1 then j:=1;
- if r<1 then r:=1;*/
-
- if (l < j) sort(l, j, whichlist);
- if (i < r) sort(i, r, whichlist);
+static void sort(integer l, integer r, byte &whichlist) {
+ integer i, j;
+ varying_string<12> x, y;
+ varying_string<40> d;
+
+ 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;
+
+ d = descs[i];
+ descs[i] = descs[j];
+ descs[j] = d;
+
+ i = i + 1;
+ j = j - 1;
+ }
+ } while (!(i > j));
+
+ /* if j<1 then j:=1;
+ if r<1 then r:=1;*/
+
+ 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);
+{
+ /*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) && (nums[files]<77))
- {
- 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) && (nums[dirs]<77))
- {
- if (((s.attr & directory)>0) && ((length(s.name))>1))
- {
- nums[dirs] += 1;
- lists[dirs][nums[dirs]]=lowstr(s.name);
- }
- findnext(s);
- }
-
- /* Now sort 'em! */
-
- if (nums[dirs ]!=0) quicksort ( dirs,1,nums[ dirs]);
- if (nums[files]!=0) quicksort (files,1,nums[files]);
-
- where[dirs]=1; where[files]=1;
- top[dirs]=1; top[files]=1;
-
- thumb_pos[3]=93; thumb_pos[4]=93;
+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) && (nums[files] < 77)) {
+ 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) && (nums[dirs] < 77)) {
+ if (((s.attr & directory) > 0) && ((length(s.name)) > 1)) {
+ nums[dirs] += 1;
+ lists[dirs][nums[dirs]] = lowstr(s.name);
+ }
+ findnext(s);
+ }
+
+ /* Now sort 'em! */
+
+ if (nums[dirs ] != 0) quicksort(dirs, 1, nums[ dirs]);
+ if (nums[files] != 0) quicksort(files, 1, nums[files]);
+
+ where[dirs] = 1;
+ where[files] = 1;
+ top[dirs] = 1;
+ top[files] = 1;
+
+ thumb_pos[3] = 93;
+ thumb_pos[4] = 93;
}
-void show_file(integer x,integer y, byte which)
-{
- varying_string<58> z;
+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];
+ fillchar(z[1], 13, '\40');
+ z = lists[files][which] + ".asg";
+ z[0] = '\15';
+ z = z + descs[which];
- if (set::of('*','%', eos).has(descs[which][1])) /* Can't load these! */
- setcolor(red);
- else
- setcolor(lightcyan);
+ if (set::of('*', '%', eos).has(descs[which][1])) /* Can't load these! */
+ setcolor(red);
+ else
+ setcolor(lightcyan);
- outtextxy(x,y,z);
+ 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 (top[3]+fv<=nums[3])
- show_file(19,87+fv*10,top[3]+fv);
-
- draw_scroll_bar(files);
+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 (top[3] + fv <= nums[3])
+ show_file(19, 87 + fv * 10, top[3] + fv);
+
+ draw_scroll_bar(files);
}
-void showdirs()
-{
- byte fv;
+void showdirs() {
+ byte fv;
- setcolor(11);
- for( fv=0; fv <= 8; fv ++)
- if (top[4]+fv<=nums[4])
- outtextxy(497,87+fv*10,string('[')+lists[dirs][fv+top[4]]+']');
- draw_scroll_bar(dirs);
+ setcolor(11);
+ for (fv = 0; fv <= 8; fv ++)
+ if (top[4] + fv <= nums[4])
+ outtextxy(497, 87 + fv * 10, string('[') + lists[dirs][fv + top[4]] + ']');
+ draw_scroll_bar(dirs);
}
-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-8,with.y2-1);}
- showfiles();
- showdirs();
- setcolor(7); outtextxy(159,14,current);
- for( fv=3; fv <= 4; fv ++) thumb(fv);
+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 - 8, with.y2 - 1);
+ }
+ showfiles();
+ showdirs();
+ setcolor(7);
+ outtextxy(159, 14, current);
+ for (fv = 3; fv <= 4; fv ++) thumb(fv);
}
-void blip()
-{
- sound(177); delay(77); nosound;
+void blip() {
+ sound(177);
+ delay(77);
+ nosound;
}
-void invert(integer x1,integer y1,integer x2,integer y2)
-{
- pointer p,restore; word s;
+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);
+ 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; }
- off();
- 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);
- on();
+void changedrive(char drive) {
+ byte fv;
+
+ fv = pos(drive, drives);
+ if (fv == 0) {
+ blip();
+ return;
+ }
+ off();
+ 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);
+ on();
}
-void highlight(byte win,byte line)
-{
- switch (win) {
- case 3: invert(16,75+line*10,470,85+line*10); break;
- case 4: invert(491,75+line*10,620,85+line*10); break;
- }
- thumb(win);
+void highlight(byte win, byte line) {
+ switch (win) {
+ case 3:
+ invert(16, 75 + line * 10, 470, 85 + line * 10);
+ break;
+ case 4:
+ invert(491, 75 + line * 10, 620, 85 + line * 10);
+ break;
+ }
+ thumb(win);
}
-void repaint(byte whichwindow)
-{
- setfillstyle(1,1);
- { windowtype& with = threewins[whichwindow];
- bar(with.x1+1,with.y1+1,with.x2-8,with.y2-1);}
- top[whichwindow]=where[whichwindow];
- switch (whichwindow) {
- case file_win: showfiles(); break;
- case subdir_win: showdirs(); break;
- }
- thumb(whichwindow);
+void repaint(byte whichwindow) {
+ setfillstyle(1, 1);
+ {
+ windowtype &with = threewins[whichwindow];
+ bar(with.x1 + 1, with.y1 + 1, with.x2 - 8, with.y2 - 1);
+ }
+ top[whichwindow] = where[whichwindow];
+ switch (whichwindow) {
+ case file_win:
+ showfiles();
+ break;
+ case subdir_win:
+ showdirs();
+ break;
+ }
+ thumb(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[0xac00*(y1+fv*dir)*80+xpos],mem[0xac00*(y2+fv*dir)*80+xpos],xlen);
- fv += 1;
- }
- }
- bit=getpixel(0,0);
+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[0xac00 * (y1 + fv * dir) * 80 + xpos], mem[0xac00 * (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)));
- off();
- repaint(whichlist);
- on();
+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)));
+ off();
+ repaint(whichlist);
+ on();
}
-void gotohome(byte whichlist)
-{
- off();
- where[whichlist]=1;
- repaint(whichlist);
- highlight(whichlist,1);
- on();
+void gotohome(byte whichlist) {
+ off();
+ where[whichlist] = 1;
+ repaint(whichlist);
+ highlight(whichlist, 1);
+ on();
}
-void gotoend(byte whichlist)
-{
- off();
- where[whichlist]=nums[whichlist];
- repaint(whichlist);
- highlight(whichlist,1);
- on();
+void gotoend(byte whichlist) {
+ off();
+ where[whichlist] = nums[whichlist];
+ repaint(whichlist);
+ highlight(whichlist, 1);
+ on();
}
-void pageup(byte whichlist)
-{
- off();
- if (where[whichlist]>9)
- {
- where[whichlist] -= 9;
- repaint(whichlist);
- highlight(whichlist,1);
- } else gotohome(whichlist);
- on();
+void pageup(byte whichlist) {
+ off();
+ if (where[whichlist] > 9) {
+ where[whichlist] -= 9;
+ repaint(whichlist);
+ highlight(whichlist, 1);
+ } else gotohome(whichlist);
+ on();
}
-void pagedown(byte whichlist)
-{
- off();
- if (where[whichlist]<nums[whichlist]-9)
- {
- where[whichlist] += 9;
- repaint(whichlist);
- highlight(whichlist,1);
- } else gotoend(whichlist);
- on();
+void pagedown(byte whichlist) {
+ off();
+ if (where[whichlist] < nums[whichlist] - 9) {
+ where[whichlist] += 9;
+ repaint(whichlist);
+ highlight(whichlist, 1);
+ } else gotoend(whichlist);
+ on();
}
void subdirparse(string r);
-static void movehl(byte which, shortint howmuch)
-{
- off();
- 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);
- on();
+static void movehl(byte which, shortint howmuch) {
+ off();
+ 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);
+ on();
}
-static void change_dir()
-{
- off(); 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(); on();
+static void change_dir() {
+ off();
+ 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();
+ on();
}
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 */
- off();
- highlight(4,1);
- top[4] -= 1; where[4] -= 1;
- fileblit(61,17,166,176,-1,80);
- setfillstyle(1,1); bar(490,85,622,95); setcolor(11);
- outtextxy(497,87,string('[')+lists[dirs][where[4]]+']');
- highlight(4,1);
- on();
- }
- break;
- case cdown:
- if (where[4]-top[4]<8) /* Down */
- movehl(4,1);
- else if (top[4]+8<nums[4])
- {
- off();
- highlight(4,9);
- top[4] += 1; where[4] += 1;
- fileblit(60,17,97,87,1,80);
- setfillstyle(1,1); bar(490,165,622,175); setcolor(11);
- outtextxy(497,167,string('[')+lists[dirs][where[4]]+']');
- highlight(4,9);
- on();
- }
- 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: {
- off();
- seekthrough(4,where[4],lowchar(r[1]));
- highlight(4,1);
- on();
- }
- }
+ 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 */
+ off();
+ highlight(4, 1);
+ top[4] -= 1;
+ where[4] -= 1;
+ fileblit(61, 17, 166, 176, -1, 80);
+ setfillstyle(1, 1);
+ bar(490, 85, 622, 95);
+ setcolor(11);
+ outtextxy(497, 87, string('[') + lists[dirs][where[4]] + ']');
+ highlight(4, 1);
+ on();
+ }
+ break;
+ case cdown:
+ if (where[4] - top[4] < 8) /* Down */
+ movehl(4, 1);
+ else if (top[4] + 8 < nums[4]) {
+ off();
+ highlight(4, 9);
+ top[4] += 1;
+ where[4] += 1;
+ fileblit(60, 17, 97, 87, 1, 80);
+ setfillstyle(1, 1);
+ bar(490, 165, 622, 175);
+ setcolor(11);
+ outtextxy(497, 167, string('[') + lists[dirs][where[4]] + ']');
+ highlight(4, 9);
+ on();
+ }
+ 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: {
+ off();
+ seekthrough(4, where[4], lowchar(r[1]));
+ highlight(4, 1);
+ on();
+ }
+ }
}
-void fileinfo(byte which);
-void filer_help();
-void wipe(byte which);
-
-void in_name_box(string x)
-{
- off();
- setfillstyle(1,1); bar(156,13,629,21);
- setcolor(7); outtextxy(159,14,x);
- on();
+void fileinfo(byte which);
+void filer_help();
+void wipe(byte which);
+
+void in_name_box(string x) {
+ off();
+ setfillstyle(1, 1);
+ bar(156, 13, 629, 21);
+ setcolor(7);
+ outtextxy(159, 14, x);
+ on();
}
void filesparse(string r);
-static void movehl1(byte which, shortint howmuch)
-{
- off();
- 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);
- on();
+static void movehl1(byte which, shortint howmuch) {
+ off();
+ 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);
+ on();
}
-static boolean selected_file()
-{
- boolean selected_file_result;
- if ((set::of('*','%', eos).has(descs[where[file_win]][1])) || (nums[3]==0))
- {
- blip();
- selected_file_result=false;
- } else
- {
- filename=lists[file_win][where[file_win]];
- filefound=true;
- selected_file_result=true;
- }
- return selected_file_result;
+static boolean selected_file() {
+ boolean selected_file_result;
+ if ((set::of('*', '%', eos).has(descs[where[file_win]][1])) || (nums[3] == 0)) {
+ 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 */
- off();
- highlight(3,1);
- top[3] -= 1; where[3] -= 1;
- fileblit(1,58,166,176,-1,80);
- setfillstyle(1,1); bar( 15,85,472,95);
- show_file( 19,87,where[3]);
- highlight(3,1);
- on();
- }
- break;
- case cdown: if (where[3]-top[3]<8) /* Down */
- movehl1(3,1);
- else if (top[3]+8<nums[3])
- {
- off();
- highlight(3,9);
- top[3] += 1; where[3] += 1;
- fileblit(1,58,97,87,1,80);
- setfillstyle(1,1); bar( 15,165,472,175);
- show_file( 19,167,where[3]);
- highlight(3,9);
- on();
- }
- break;
- case c_ai: fileinfo(where[3]); break; /* alt-I: information. */
- case c_aw: wipe(where[3]); break; /* alt-W: wipe. */
- 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: {
- off();
- seekthrough(3,where[3],lowchar(r[1]));
- highlight(3,1);
- on();
- }
- }
- in_name_box(lists[files][where[3]]+".asg");
+ 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 */
+ off();
+ highlight(3, 1);
+ top[3] -= 1;
+ where[3] -= 1;
+ fileblit(1, 58, 166, 176, -1, 80);
+ setfillstyle(1, 1);
+ bar(15, 85, 472, 95);
+ show_file(19, 87, where[3]);
+ highlight(3, 1);
+ on();
+ }
+ break;
+ case cdown:
+ if (where[3] - top[3] < 8) /* Down */
+ movehl1(3, 1);
+ else if (top[3] + 8 < nums[3]) {
+ off();
+ highlight(3, 9);
+ top[3] += 1;
+ where[3] += 1;
+ fileblit(1, 58, 97, 87, 1, 80);
+ setfillstyle(1, 1);
+ bar(15, 165, 472, 175);
+ show_file(19, 167, where[3]);
+ highlight(3, 9);
+ on();
+ }
+ break;
+ case c_ai:
+ fileinfo(where[3]);
+ break; /* alt-I: information. */
+ case c_aw:
+ wipe(where[3]);
+ break; /* alt-W: wipe. */
+ 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: {
+ off();
+ seekthrough(3, where[3], lowchar(r[1]));
+ highlight(3, 1);
+ on();
+ }
+ }
+ in_name_box(lists[files][where[3]] + ".asg");
}
-void entername(char r)
-{
- switch (r) {
- case '\10': if (filename[0]!='\0') filename[0] -= 1; break;
- case '\15': filefound=true; break;
- case '\40':; break; /* ignore spaces. */
- default:
- {
- if (length(filename)<55) filename=filename+r;
-
- if (length(filename)==1)
- {
- where[3]=1;
- seekthrough(3,where[3],filename[1]);
- }
- }
- }
-
- in_name_box(filename+".asg");
+void entername(char r) {
+ switch (r) {
+ case '\10':
+ if (filename[0] != '\0') filename[0] -= 1;
+ break;
+ case '\15':
+ filefound = true;
+ break;
+ case '\40':
+ ;
+ break; /* ignore spaces. */
+ default: {
+ if (length(filename) < 55) filename = filename + r;
+
+ if (length(filename) == 1) {
+ where[3] = 1;
+ seekthrough(3, where[3], filename[1]);
+ }
+ }
+ }
+
+ in_name_box(filename + ".asg");
}
-void changewin(byte i)
-{
- off();
- 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;
- }
- on();
+void changewin(byte i) {
+ off();
+ 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;
+ }
+ on();
}
void checkmouse();
-static void relevant(string x)
-{
- setcolor(14); off(); { windowtype& with = threewins[nowwin]; box(with.x1,with.y1,with.x2,with.y2,with.title);}
- on(); if (nowwin==3) filesparse(x); else subdirparse(x);
+static void relevant(string x) {
+ setcolor(14);
+ off();
+ {
+ windowtype &with = threewins[nowwin];
+ box(with.x1, with.y1, with.x2, with.y2, with.title);
+ }
+ on();
+ if (nowwin == 3) filesparse(x);
+ else subdirparse(x);
}
-void checkmouse()
-{
- byte fv,new,waswin;
-
- check();
- if (mrelease>0)
- { /* Where did they click? */
- for( fv=1; fv <= 4; fv ++)
- { windowtype& with = threewins[fv];
- if (((cardinal)with.x1<=mx) && ((cardinal)with.x2>=mx) && ((cardinal)with.y1<=my) && ((cardinal)with.y2>=my))
- {
- waswin=nowwin;
-
- if (nowwin!=fv)
- {
- changewin(fv);
- off();
- setcolor(14); { windowtype& with1 = threewins[nowwin]; box(with1.x1,with1.y1,with1.x2,with1.y2,with1.title);}
- on();
- }
- /* Now... individual windows should do their own checkclicking. */
-
- switch (fv) {
- /* 1: no effect. */
- case 2: changedrive(which_drive(mx,my)); break; /* Change drive w/mouse. */
- case 3:case 4: if (my<175) { /* Click on highlight users. */
- if (mx>(cardinal)threewins[nowwin].x2-9)
- { /* Scroll bar. */
- if (my<(cardinal)threewins[nowwin].y1+10)
- relevant(null+cup); /* scroll up */
- else if (my>(cardinal)threewins[nowwin].y2-10)
- relevant(null+cdown); /* scroll down. */
- else if (my<(unsigned char)thumb_pos[nowwin])
- relevant(null+cpgup); /* above thumb-- page up. */
- else if (my>(unsigned char)thumb_pos[nowwin]+thumb_len[nowwin])
- relevant(null+cpgdn); /* above thumb-- page up. */
- else { /* On the thumb. */
- blip();
- }
- } else
- {
- new=top[fv]+(my-75) / 10-1;
-
- if ((new==where[fv]) && (nowwin==waswin))
- { /* Double-clicked, --> "OK" */
- /* filefound:=true;
- filename:=lists[fv,new];*/
- if (fv==3) filesparse("\15"); else subdirparse("\15");
- } else
- { /* Single-clicked, --> move highlight */
- off();
- highlight(fv,where[fv]-top[fv]+1);
- if ((new>0) && (new<=nums[fv]))
- where[fv]=new;
- highlight(fv,where[fv]-top[fv]+1);
- on();
- }
- }
- }
- break;
- }
-
- return; /* Since they've clicked in a window... */
- }}
-
- /* Righto, they must have clicked on a button. Which? */
-
- switch (my) {
- case 25 ... 45: /* Top row: Okay, Cancel. */
- switch (mx) {
- case 420 ... 520: switch (nowwin) {
- case 1: entername('\15'); break;
- case 3: filesparse("\15"); break;
- case 4: subdirparse("\15"); break;
- default: blip();
- }
- break;
- case 530 ... 630: cancelled=true; break;
- }
- break;
- case 50 ... 95: /* Bottom row: Wipe, Info. */
- switch (mx) {
- case 420 ... 520: if (nowwin==3) wipe(where[3]); else blip(); break;
- case 530 ... 630: if (nowwin==3) fileinfo(where[3]); else blip(); break;
- }
- break;
- case 180 ... 200: filer_help(); break; /* The "help" button. */
- }
- }
+void checkmouse() {
+ byte fv, new, waswin;
+
+ check();
+ if (mrelease > 0) {
+ /* Where did they click? */
+ for (fv = 1; fv <= 4; fv ++) {
+ windowtype &with = threewins[fv];
+ if (((cardinal)with.x1 <= mx) && ((cardinal)with.x2 >= mx) && ((cardinal)with.y1 <= my) && ((cardinal)with.y2 >= my)) {
+ waswin = nowwin;
+
+ if (nowwin != fv) {
+ changewin(fv);
+ off();
+ setcolor(14);
+ {
+ windowtype &with1 = threewins[nowwin];
+ box(with1.x1, with1.y1, with1.x2, with1.y2, with1.title);
+ }
+ on();
+ }
+ /* Now... individual windows should do their own checkclicking. */
+
+ switch (fv) {
+ /* 1: no effect. */
+ case 2:
+ changedrive(which_drive(mx, my));
+ break; /* Change drive w/mouse. */
+ case 3:
+ case 4:
+ if (my < 175) { /* Click on highlight users. */
+ if (mx > (cardinal)threewins[nowwin].x2 - 9) {
+ /* Scroll bar. */
+ if (my < (cardinal)threewins[nowwin].y1 + 10)
+ relevant(null + cup); /* scroll up */
+ else if (my > (cardinal)threewins[nowwin].y2 - 10)
+ relevant(null + cdown); /* scroll down. */
+ else if (my < (unsigned char)thumb_pos[nowwin])
+ relevant(null + cpgup); /* above thumb-- page up. */
+ else if (my > (unsigned char)thumb_pos[nowwin] + thumb_len[nowwin])
+ relevant(null + cpgdn); /* above thumb-- page up. */
+ else { /* On the thumb. */
+ blip();
+ }
+ } else {
+ new = top[fv] + (my - 75) / 10 - 1;
+
+ if ((new == where[fv]) && (nowwin == waswin)) {
+ /* Double-clicked, --> "OK" */
+ /* filefound:=true;
+ filename:=lists[fv,new];*/
+ if (fv == 3) filesparse("\15");
+ else subdirparse("\15");
+ } else {
+ /* Single-clicked, --> move highlight */
+ off();
+ highlight(fv, where[fv] - top[fv] + 1);
+ if ((new > 0) && (new <= nums[fv]))
+ where[fv] = new;
+ highlight(fv, where[fv] - top[fv] + 1);
+ on();
+ }
+ }
+ }
+ break;
+ }
+
+ return; /* Since they've clicked in a window... */
+ }
+ }
+
+ /* Righto, they must have clicked on a button. Which? */
+
+ switch (my) {
+ case 25 ... 45: /* Top row: Okay, Cancel. */
+ switch (mx) {
+ case 420 ... 520:
+ switch (nowwin) {
+ case 1:
+ entername('\15');
+ break;
+ case 3:
+ filesparse("\15");
+ break;
+ case 4:
+ subdirparse("\15");
+ break;
+ default:
+ blip();
+ }
+ break;
+ case 530 ... 630:
+ cancelled = true;
+ break;
+ }
+ break;
+ case 50 ... 95: /* Bottom row: Wipe, Info. */
+ switch (mx) {
+ case 420 ... 520:
+ if (nowwin == 3) wipe(where[3]);
+ else blip();
+ break;
+ case 530 ... 630:
+ if (nowwin == 3) fileinfo(where[3]);
+ else blip();
+ break;
+ }
+ break;
+ case 180 ... 200:
+ filer_help();
+ break; /* The "help" button. */
+ }
+ }
}
-string playaround()
-{
- char r,r2;
-
- string playaround_result;
- filefound=false; dawn();
-
- do {
- setcolor(14); off(); { windowtype& with = threewins[nowwin]; box(with.x1,with.y1,with.x2,with.y2,with.title);} on();
- do { checkmouse(); } while (!(keypressed() || filefound || cancelled));
- if (! (filefound || cancelled))
- {
- 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: cancelled=false; break;
- case c_ah:case cf1: filer_help(); break; /* alt-H: help. */
- 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 1: entername(r); break;
- 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;
- }
-
- if (cancelled)
- {
- dusk();
- playaround_result="";
- return playaround_result;
- }
- } while (!false);
- return playaround_result;
+string playaround() {
+ char r, r2;
+
+ string playaround_result;
+ filefound = false;
+ dawn();
+
+ do {
+ setcolor(14);
+ off();
+ {
+ windowtype &with = threewins[nowwin];
+ box(with.x1, with.y1, with.x2, with.y2, with.title);
+ }
+ on();
+ do {
+ checkmouse();
+ } while (!(keypressed() || filefound || cancelled));
+ if (!(filefound || cancelled)) {
+ 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:
+ cancelled = false;
+ break;
+ case c_ah:
+ case cf1:
+ filer_help();
+ break; /* alt-H: help. */
+ 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 1:
+ entername(r);
+ break;
+ 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;
+ }
+
+ if (cancelled) {
+ dusk();
+ playaround_result = "";
+ return playaround_result;
+ }
+ } while (!false);
+ return playaround_result;
}
-void drawup()
-{
- off();
- loading=true;
- setup();
- show(); show_drives();
- on();
+void drawup() {
+ off();
+ loading = true;
+ setup();
+ show();
+ show_drives();
+ on();
}
-void little_cls()
-{
- setfillstyle(1,1); bar(2,2,637,197); /* Interesting information coming up! */
+void little_cls() {
+ setfillstyle(1, 1);
+ bar(2, 2, 637, 197); /* Interesting information coming up! */
}
-void wait_for_keypress_or_mouse_click()
-{
- char r;
+void wait_for_keypress_or_mouse_click() {
+ char r;
- do { check(); } while (!((mrelease>0) || keypressed()));
- while (keypressed()) r=readkey();
+ do {
+ check();
+ } while (!((mrelease > 0) || keypressed()));
+ while (keypressed()) r = readkey();
}
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);
+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]. */
+/* This gives information on the file whose name is in lists[files,which]. */
{
- ednahead eh;
- untyped_file f;
- varying_string<4> os;
+ ednahead eh;
+ untyped_file f;
+ varying_string<4> os;
- /* 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. */
+ /* 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]=='*') || (nums[3]==0))
- { /* it is. */
- blip(); /* Naaaarghh! */
- return;
- }
+ if ((descs[which][1] == '*') || (nums[3] == 0)) {
+ /* it is. */
+ blip(); /* Naaaarghh! */
+ return;
+ }
- /* Anyway... it wasn't. */
+ /* Anyway... it wasn't. */
- assign(f,lists[files][which]+".asg");
- reset(f,1);
- seek(f,177);
- blockread(f,eh,sizeof(eh));
- close(f);
+ 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. */
+ /* We now hold its EDNA record. */
- off();
- little_cls(); /* Interesting information coming up! */
+ off();
+ little_cls(); /* Interesting information coming up! */
- {
- display(0,"File:",eh.fn);
- display(1,"Description:",eh.desc);
- display(2,"Saved by:", eh.game);
- display(3,"version:", eh.verstr);
+ {
+ display(0, "File:", eh.fn);
+ display(1, "Description:", eh.desc);
+ display(2, "Saved by:", eh.game);
+ display(3, "version:", eh.verstr);
- display(4,"under", eh.os);
+ display(4, "under", eh.os);
- display(6,"Saved on:",strf(eh.d)+'-'+strf(eh.m)+'-'+strf(eh.y));
+ display(6, "Saved on:", strf(eh.d) + '-' + strf(eh.m) + '-' + strf(eh.y));
- display(9,"No. of times saved:",strf(eh.saves));
+ display(9, "No. of times saved:", strf(eh.saves));
- display(11,"Money:",eh.money);
- display(12,"Score:",strf(eh.points));
- }
+ display(11, "Money:", eh.money);
+ display(12, "Score:", strf(eh.points));
+ }
- settextjustify(1,1);
- shbox(400,177,600,195,"[Press any key...]");
- settextjustify(0,2); on();
- wait_for_keypress_or_mouse_click();
+ settextjustify(1, 1);
+ shbox(400, 177, 600, 195, "[Press any key...]");
+ settextjustify(0, 2);
+ on();
+ wait_for_keypress_or_mouse_click();
- off(); setfillstyle(1,1); bar(2,2,637,197);
- drawup();
- off(); highlight(3,where[3]-top[3]+1); on();
+ off();
+ setfillstyle(1, 1);
+ bar(2, 2, 637, 197);
+ drawup();
+ off();
+ highlight(3, where[3] - top[3] + 1);
+ on();
}
void filer_help()
- /* Just some general help... */
+/* Just some general help... */
{
- off(); little_cls();
-
- setcolor(15);
- outtextxy(10, 10,"To change to a particular pane:");
- outtextxy(10, 50,"To choose a file:");
- outtextxy(10,100,"To change drives:");
- outtextxy(10,140,"Finally...");
-
- setcolor(14);
- outtextxy(20, 20,"Press Alt and the initial letter simultaneously.");
- outtextxy(20, 30,"(e.g. to change to the Name pane, press Alt-N.)");
- outtextxy(20, 60,"Either type its name in the Name pane or choose it");
- outtextxy(20, 70,"from the list in the Files pane. You may either use");
- outtextxy(20, 80,"a mouse or the keyboard to do this.");
- outtextxy(20,110,"Move into the Drives pane and press the letter of the");
- outtextxy(20,120,"drive you want.");
- outtextxy(20,150,"Either select OK to load the file, or Cancel to back out.");
-
- settextjustify(1,1);
- shbox(400,177,600,195,"[Press any key...]");
- settextjustify(0,2); on();
- wait_for_keypress_or_mouse_click();
-
- off(); setfillstyle(1,1); bar(2,2,637,197);
- drawup(); off();
- if (set::of(3,4, eos).has(nowwin)) highlight(nowwin,where[nowwin]-top[nowwin]+1);
- on();
+ off();
+ little_cls();
+
+ setcolor(15);
+ outtextxy(10, 10, "To change to a particular pane:");
+ outtextxy(10, 50, "To choose a file:");
+ outtextxy(10, 100, "To change drives:");
+ outtextxy(10, 140, "Finally...");
+
+ setcolor(14);
+ outtextxy(20, 20, "Press Alt and the initial letter simultaneously.");
+ outtextxy(20, 30, "(e.g. to change to the Name pane, press Alt-N.)");
+ outtextxy(20, 60, "Either type its name in the Name pane or choose it");
+ outtextxy(20, 70, "from the list in the Files pane. You may either use");
+ outtextxy(20, 80, "a mouse or the keyboard to do this.");
+ outtextxy(20, 110, "Move into the Drives pane and press the letter of the");
+ outtextxy(20, 120, "drive you want.");
+ outtextxy(20, 150, "Either select OK to load the file, or Cancel to back out.");
+
+ settextjustify(1, 1);
+ shbox(400, 177, 600, 195, "[Press any key...]");
+ settextjustify(0, 2);
+ on();
+ wait_for_keypress_or_mouse_click();
+
+ off();
+ setfillstyle(1, 1);
+ bar(2, 2, 637, 197);
+ drawup();
+ off();
+ if (set::of(3, 4, eos).has(nowwin)) highlight(nowwin, where[nowwin] - top[nowwin] + 1);
+ on();
}
void wipe(byte which)
- /* This wipes the file whose name is in lists[files,which]. */
+/* This wipes the file whose name is in lists[files,which]. */
{
- char r;
- untyped_file f;
-
-
- off(); little_cls();
-
- settextjustify(1,1);
- outtextxy(320,100,string("Are you sure you want to delete \"")+
- lists[files][which]+".asg\"?");
- shbox(400,177,600,195,"[Y/N]");
-
- do {
- r=upcase(readkey());
- if (r=='Y')
- {
- assign(f,lists[files][which]+".asg"); /*$I-*/ erase(f); /*$I+*/
-
- setcolor(14);
- if (ioresult==0)
- {
- scandir();
- outtextxy(100,140,"Deleted.");
- } else
- outtextxy(100,140,"Not deleted (some problem...)");
-
- shbox(400,177,600,195,"[Press any key...]");
- on();
- wait_for_keypress_or_mouse_click(); off();
- }
- } while (!(set::of('Y','N', eos).has(r)));
-
- settextjustify(0,2); setcolor(14);
- setfillstyle(1,1); bar(2,2,637,197);
- drawup();
- off(); highlight(3,where[3]-top[3]+1); on();
+ char r;
+ untyped_file f;
+
+
+ off();
+ little_cls();
+
+ settextjustify(1, 1);
+ outtextxy(320, 100, string("Are you sure you want to delete \"") +
+ lists[files][which] + ".asg\"?");
+ shbox(400, 177, 600, 195, "[Y/N]");
+
+ do {
+ r = upcase(readkey());
+ if (r == 'Y') {
+ assign(f, lists[files][which] + ".asg"); /*$I-*/ erase(f); /*$I+*/
+
+ setcolor(14);
+ if (ioresult == 0) {
+ scandir();
+ outtextxy(100, 140, "Deleted.");
+ } else
+ outtextxy(100, 140, "Not deleted (some problem...)");
+
+ shbox(400, 177, 600, 195, "[Press any key...]");
+ on();
+ wait_for_keypress_or_mouse_click();
+ off();
+ }
+ } while (!(set::of('Y', 'N', eos).has(r)));
+
+ settextjustify(0, 2);
+ setcolor(14);
+ setfillstyle(1, 1);
+ bar(2, 2, 637, 197);
+ drawup();
+ off();
+ highlight(3, where[3] - top[3] + 1);
+ on();
}
-string do_filer()
-{
- pathstr p; byte groi; dirstr original_directory;
-
- string do_filer_result;
- getdir(0,original_directory);
- dusk();
- oncandopageswap=false; cancelled=false;
- copypage(3,1-cp); /* Store old screen. */ groi=getpixel(0,0);
- off();
-
- firstsetup();
- scandir();
- nowwin=1; getcurrent();
- firstsetup(); drawup();
- on();
- mousepage(filer_page);
-
- p=playaround();
- if (p!="") p=fexpand(p+".ASG");
- do_filer_result=p;
- filename="";
-
- mousepage(cp);
- dusk(); off();
- oncandopageswap=true;
- copypage(1-cp,3); /* Restore old screen. */ groi=getpixel(0,0);
- on_virtual(); dawn(); fix_flashers();
-
- setvisualpage(cp);
- setactivepage(1-cp);
- chdir(original_directory);
-
- return do_filer_result;
+string do_filer() {
+ pathstr p;
+ byte groi;
+ dirstr original_directory;
+
+ string do_filer_result;
+ getdir(0, original_directory);
+ dusk();
+ oncandopageswap = false;
+ cancelled = false;
+ copypage(3, 1 - cp); /* Store old screen. */ groi = getpixel(0, 0);
+ off();
+
+ firstsetup();
+ scandir();
+ nowwin = 1;
+ getcurrent();
+ firstsetup();
+ drawup();
+ on();
+ mousepage(filer_page);
+
+ p = playaround();
+ if (p != "") p = fexpand(p + ".ASG");
+ do_filer_result = p;
+ filename = "";
+
+ mousepage(cp);
+ dusk();
+ off();
+ oncandopageswap = true;
+ copypage(1 - cp, 3); /* Restore old screen. */ groi = getpixel(0, 0);
+ on_virtual();
+ dawn();
+ fix_flashers();
+
+ setvisualpage(cp);
+ setactivepage(1 - cp);
+ chdir(original_directory);
+
+ return do_filer_result;
}
} // End of namespace Avalanche. \ No newline at end of file