diff options
| author | uruk | 2013-06-18 10:23:29 +0200 | 
|---|---|---|
| committer | uruk | 2013-06-18 10:23:29 +0200 | 
| commit | 38bc20a0763f0f83ea3c0a94a68a1edea0d08514 (patch) | |
| tree | 8d71d5d2dec96e83e2fcce7c5378e9f2da94130e /engines | |
| parent | a3025b8dad7abfe845c57aee3703451c223fc2e6 (diff) | |
| download | scummvm-rg350-38bc20a0763f0f83ea3c0a94a68a1edea0d08514.tar.gz scummvm-rg350-38bc20a0763f0f83ea3c0a94a68a1edea0d08514.tar.bz2 scummvm-rg350-38bc20a0763f0f83ea3c0a94a68a1edea0d08514.zip  | |
AVALANCHE: Use Artistic Style.
Diffstat (limited to 'engines')
204 files changed, 38190 insertions, 32054 deletions
diff --git a/engines/avalanche/1stoff.cpp b/engines/avalanche/1stoff.cpp index 0f9e19b940..9748605503 100644 --- a/engines/avalanche/1stoff.cpp +++ b/engines/avalanche/1stoff.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 @@ -30,55 +30,59 @@  namespace Avalanche { -matrix<1,7,1,3,byte> cols; +matrix<1, 7, 1, 3, byte> cols;  byte fv; -void adjust() -{ - registers r; -; - {; -  ax=0x1012; -  bx=1; -  cx=2; -  es=seg(cols); -  dx=ofs(cols); +void adjust() { +	registers r; +	; +	{ +		; +		ax = 0x1012; +		bx = 1; +		cx = 2; +		es = seg(cols); +		dx = ofs(cols); - } +	} - intr(0x10,r); +	intr(0x10, r);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - textattr=0; - clrscr; - - fillchar(cols,sizeof(cols),'\0'); - adjust(); - - gotoxy(29,10); textattr=1; output << "Thorsoft of Letchworth"; - gotoxy(36,12); textattr=2; output << "presents"; - - for( fv=1; fv <= 77; fv ++) - {; -  delay(77); -  if (fv<64)  fillchar(cols[1],3,chr(fv)); -  if (fv>14)  fillchar(cols[2],3,chr(fv-14)); -  adjust(); - } - - delay(100); - - for( fv=63; fv >= 1; fv --) - {; -  fillchar(cols,sizeof(cols),chr(fv)); -  delay(37); -  adjust(); - } - -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	textattr = 0; +	clrscr; + +	fillchar(cols, sizeof(cols), '\0'); +	adjust(); + +	gotoxy(29, 10); +	textattr = 1; +	output << "Thorsoft of Letchworth"; +	gotoxy(36, 12); +	textattr = 2; +	output << "presents"; + +	for (fv = 1; fv <= 77; fv ++) { +		; +		delay(77); +		if (fv < 64)  fillchar(cols[1], 3, chr(fv)); +		if (fv > 14)  fillchar(cols[2], 3, chr(fv - 14)); +		adjust(); +	} + +	delay(100); + +	for (fv = 63; fv >= 1; fv --) { +		; +		fillchar(cols, sizeof(cols), chr(fv)); +		delay(37); +		adjust(); +	} + +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/access.cpp b/engines/avalanche/access.cpp index 951bc1c818..abc944f4dc 100644 --- a/engines/avalanche/access.cpp +++ b/engines/avalanche/access.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 @@ -49,148 +49,160 @@ namespace Avalanche {  boolean int_say_went_ok;  void int_say(string filename, boolean bubble) - /* Internal use ONLY! */ +/* Internal use ONLY! */  { -    untyped_file f; -; - /*$I-*/ - assign(f,filename); - reset(f,1); - if (ioresult!=0)  - {; -  int_say_went_ok=false; -  return; - } - bufsize=filesize(f); - blockread(f,buffer,bufsize); - if (bubble)  - {; -  bufsize += 1; -  buffer[bufsize]='\2'; - } - close(f); - /*$I+*/ - - calldrivers; - - int_say_went_ok=true; +	untyped_file f; +	; +	/*$I-*/ +	assign(f, filename); +	reset(f, 1); +	if (ioresult != 0) { +		; +		int_say_went_ok = false; +		return; +	} +	bufsize = filesize(f); +	blockread(f, buffer, bufsize); +	if (bubble) { +		; +		bufsize += 1; +		buffer[bufsize] = '\2'; +	} +	close(f); +	/*$I+*/ + +	calldrivers; + +	int_say_went_ok = true;  } -void dixi(char p, byte n) -{; exit(153); - int_say(string('s')+p+strf(n)+".raw",false); +void dixi(char p, byte n) { +	; +	exit(153); +	int_say(string('s') + p + strf(n) + ".raw", false);  } -void talkto(byte whom) -{ - byte fv; - boolean no_matches; -; exit(153); - if (person==pardon)  - {; -  person=chr(subjnumber); -  subjnumber=0; - } - - switch (chr(whom)) { -  case pspludwick: - -    if ((dna.lustie_is_asleep) & (~ dna.obj[potion]))  -    {; -     dixi('q',68); -     dna.obj[potion]=true; -     objectlist; points(3); return; -    } else -    {; -     if (dna.talked_to_crapulus)  -      switch (dna.given2spludwick) { /* Spludwick - what does he need? */ -         /* 0 - let it through to use normal routine. */ -         case RANGE_2(1,2): {; -                display(string("Can you get me ")+ -                 get_better(spludwick_order[dna.given2spludwick])+", please?"+ -                  "\232\2"); -                return; -               } -               break; -         case 3: {; -             dixi('q',30); /* need any help with the game? */ -             return; -            } -            break; -       } -     else dixi('q',42); /* Haven't talked to Crapulus. Go and talk to him. */ -    } -    break; - -  case pibythneth: if (dna.givenbadgetoiby)  -              {; -               dixi('q',33); /* Thanks a lot! */ -               return; /* And leave the proc. */ -              } -              break; /* Or... just continue, 'cos he hasn't got it. */ -  case pdogfood: if (dna.wonnim)  -            {;     /* We've won the game. */ -             dixi('q',6); /* "I'm Not Playing!" */ -             return; /* Zap back. */ -            } -            break; -  case payles: if (~ dna.ayles_is_awake)  -          {; -           dixi('q',43); /* He's fast asleep! */ -           return; -          } -          break; -  case pgeida: if (dna.geida_given_potion)  -           dna.geida_follows=true; else -          {; -           dixi('u',17); -           return; -          } -          break; - } - - if (whom>149)  whom -= 149; - - no_matches=true; - for( fv=1; fv <= numtr; fv ++) -  if (tr[fv].a.accinum==whom)  -  {; -   display(string('\23')+chr(fv+48)+'\4'); -   no_matches=false; -   flush(); -  } - - if (no_matches)  display("\23\23\4"); - - if (subjnumber==0)   /* For the moment... later we'll parse "say". */ -  int_say(string("ss")+strf(whom)+".raw",true); - else - {; -  int_say(string("ss")+strf(whom)+'-'+strf(subjnumber)+".raw",true); -  if (! int_say_went_ok)      /* File not found! */ -   dixi('n',whom); - } - - switch (chr(whom+149)) { -  case pcrapulus: -     {;     /* Crapulus: get the badge - first time only */ -      dna.obj[badge]=true; -      objectlist; -      dixi('q',1); /* Circular from Cardiff. */ -      dna.talked_to_crapulus=true; - -      whereis[pcrapulus]=177;  /* Crapulus walks off. */ - -      tr[2].vanishifstill=true; -      tr[2].walkto(4); /* Walks away. */ - -      points(2); -     } -     break; - -  case payles: dixi('q',44); break; /* Can you get me a pen? */ - - } +void talkto(byte whom) { +	byte fv; +	boolean no_matches; +	; +	exit(153); +	if (person == pardon) { +		; +		person = chr(subjnumber); +		subjnumber = 0; +	} + +	switch (chr(whom)) { +	case pspludwick: + +		if ((dna.lustie_is_asleep) & (~ dna.obj[potion])) { +			; +			dixi('q', 68); +			dna.obj[potion] = true; +			objectlist; +			points(3); +			return; +		} else { +			; +			if (dna.talked_to_crapulus) +				switch (dna.given2spludwick) { /* Spludwick - what does he need? */ +					/* 0 - let it through to use normal routine. */ +				case RANGE_2(1, 2): { +					; +					display(string("Can you get me ") + +					        get_better(spludwick_order[dna.given2spludwick]) + ", please?" + +					        "\232\2"); +					return; +				} +				break; +				case 3: { +					; +					dixi('q', 30); /* need any help with the game? */ +					return; +				} +				break; +				} +			else dixi('q', 42); /* Haven't talked to Crapulus. Go and talk to him. */ +		} +		break; + +	case pibythneth: +		if (dna.givenbadgetoiby) { +			; +			dixi('q', 33); /* Thanks a lot! */ +			return; /* And leave the proc. */ +		} +		break; /* Or... just continue, 'cos he hasn't got it. */ +	case pdogfood: +		if (dna.wonnim) { +			;     /* We've won the game. */ +			dixi('q', 6); /* "I'm Not Playing!" */ +			return; /* Zap back. */ +		} +		break; +	case payles: +		if (~ dna.ayles_is_awake) { +			; +			dixi('q', 43); /* He's fast asleep! */ +			return; +		} +		break; +	case pgeida: +		if (dna.geida_given_potion) +			dna.geida_follows = true; +		else { +			; +			dixi('u', 17); +			return; +		} +		break; +	} + +	if (whom > 149)  whom -= 149; + +	no_matches = true; +	for (fv = 1; fv <= numtr; fv ++) +		if (tr[fv].a.accinum == whom) { +			; +			display(string('\23') + chr(fv + 48) + '\4'); +			no_matches = false; +			flush(); +		} + +	if (no_matches)  display("\23\23\4"); + +	if (subjnumber == 0) /* For the moment... later we'll parse "say". */ +		int_say(string("ss") + strf(whom) + ".raw", true); +	else { +		; +		int_say(string("ss") + strf(whom) + '-' + strf(subjnumber) + ".raw", true); +		if (! int_say_went_ok)      /* File not found! */ +			dixi('n', whom); +	} + +	switch (chr(whom + 149)) { +	case pcrapulus: { +		;     /* Crapulus: get the badge - first time only */ +		dna.obj[badge] = true; +		objectlist; +		dixi('q', 1); /* Circular from Cardiff. */ +		dna.talked_to_crapulus = true; + +		whereis[pcrapulus] = 177; /* Crapulus walks off. */ + +		tr[2].vanishifstill = true; +		tr[2].walkto(4); /* Walks away. */ + +		points(2); +	} +	break; + +	case payles: +		dixi('q', 44); +		break; /* Can you get me a pen? */ + +	}  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/access.h b/engines/avalanche/access.h index e985953c7f..2e4a081773 100644 --- a/engines/avalanche/access.h +++ b/engines/avalanche/access.h @@ -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 diff --git a/engines/avalanche/acci.cpp b/engines/avalanche/acci.cpp index f33d7c2ea0..adaad697d4 100644 --- a/engines/avalanche/acci.cpp +++ b/engines/avalanche/acci.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 @@ -58,42 +58,43 @@ namespace Avalanche {  byte fv;  string wordnum(string x); -static char whatsit;  -static word fv;  +static char whatsit; +static word fv;  static boolean gotcha; -static void checkword(string& x) /* Checks word "fv". */ -{ - { -  vocab& with = words[fv];  +static void checkword(string &x) { /* Checks word "fv". */ +	{ +		vocab &with = words[fv]; -  if ((with.w==x) || ((copy(with.w,1,length(x))==x) && ! gotcha)) -        whatsit=chr(with.n); -  if (with.w==x)  gotcha=true; - } +		if ((with.w == x) || ((copy(with.w, 1, length(x)) == x) && ! gotcha)) +			whatsit = chr(with.n); +		if (with.w == x)  gotcha = true; +	}  }  string wordnum(string x)  { - string wordnum_result; - if (x=="")  { wordnum_result=""; return wordnum_result; } - whatsit=pardon; gotcha=false; - for( fv=nowords; fv >= 1; fv --) checkword(x); - wordnum_result=whatsit; - return wordnum_result; +	string wordnum_result; +	if (x == "")  { +		wordnum_result = ""; +		return wordnum_result; +	} +	whatsit = pardon; +	gotcha = false; +	for (fv = nowords; fv >= 1; fv --) checkword(x); +	wordnum_result = whatsit; +	return wordnum_result;  } -void replace(string old1,string new1) -{ -    byte q; - - q=pos(old1,thats); - while (q!=0)  - { -  thats=copy(thats,1,q-1)+new1+copy(thats,q+length(old1),255); -  q=pos(old1,thats); - } +void replace(string old1, string new1) { +	byte q; + +	q = pos(old1, thats); +	while (q != 0) { +		thats = copy(thats, 1, q - 1) + new1 + copy(thats, q + length(old1), 255); +		q = pos(old1, thats); +	}  }  /*procedure ninetydump; @@ -112,1588 +113,1844 @@ begin   display('Dumped.');  end;*/ -string rank() -{ -    byte fv; - - string rank_result; - for( fv=1; fv <= 8; fv ++) -  if ((dna.score>=ranks[fv].score) -   && (dna.score<ranks[fv+1].score))  -   { -    rank_result=ranks[fv].title; -    return rank_result; -   } - return rank_result; +string rank() { +	byte fv; + +	string rank_result; +	for (fv = 1; fv <= 8; fv ++) +		if ((dna.score >= ranks[fv].score) +		        && (dna.score < ranks[fv + 1].score)) { +			rank_result = ranks[fv].title; +			return rank_result; +		} +	return rank_result;  } -string totaltime() -{ -      const real ticks_in_1_sec = (real)(65535)/3600; - word h,m,s; varying_string<70> a; - -  /* There are 65535 clock ticks in a second, -    1092.25 in a minute, and -    65535 in an hour. */ - string totaltime_result; - h=trunc(dna.total_time/ticks_in_1_sec);  /* No. of seconds. */ - m=h % 3600; h=h / 3600; - s=m % 60;   m=m / 60; - - a="You've been playing for "; - - if (h>0)  a=a+strf(h)+" hours, "; - if ((m>0) || (h!=0))  a=a+strf(m)+" minutes and "; - a=a+strf(s)+" seconds."; - - totaltime_result=a; - return totaltime_result; +string totaltime() { +	const real ticks_in_1_sec = (real)(65535) / 3600; +	word h, m, s; +	varying_string<70> a; + +	/* There are 65535 clock ticks in a second, +	  1092.25 in a minute, and +	  65535 in an hour. */ +	string totaltime_result; +	h = trunc(dna.total_time / ticks_in_1_sec); /* No. of seconds. */ +	m = h % 3600; +	h = h / 3600; +	s = m % 60; +	m = m / 60; + +	a = "You've been playing for "; + +	if (h > 0)  a = a + strf(h) + " hours, "; +	if ((m > 0) || (h != 0))  a = a + strf(m) + " minutes and "; +	a = a + strf(s) + " seconds."; + +	totaltime_result = a; +	return totaltime_result;  }  void cheatparse(string codes); -static word num;  +static word num;  static integer e; -static void number(string& codes) -{ - val(codes,num,e); +static void number(string &codes) { +	val(codes, num, e);  } -void cheatparse(string codes) -{ -    char cmd;integer se,sx,sy; - - if (~ cheat)  - {     /* put them off the scent! */ -  display("Have you gone dotty\??!"); -  return; - } - cmd=upcase(codes[2]); Delete(codes,1,2);  /* strip header */ - display("\6Ninety: \22\4"); - switch (cmd) { -  case 'R': { -        number(codes); if (e!=0)  return; -        display(string("room swap to ")+codes+'.'); -        fliproom(num,1); -       } -       break; -  case 'Z': { zonk; display("Zonk OK!"); } break; -  case 'W': { wobble; display("Ow my head!"); } break; -  case 'A': { -        tr[1].done; -        tr[1].init(1,true); -        dna.user_moves_avvy=true; -        alive=true; -        display("Reincat."); -       } -       break; -  case 'B': { -        sx=tr[1].x; -        sy=tr[1].y; -        se=tr[1].face; -        delavvy; -        number(codes); -        { -         void& with = tr[1];  - -         done; -         init(num,true); -         display(string("Become ")+codes+':'+"\r\r"+a.name+'\15'+a.comment); -         appear(sx,sy,se); -        } -       } -       break; -/*  'D': ninetydump;*/ -  case 'G': play_nim; break; -  case '±': display("\232\25"); break; -  default: display("unknown code!"); - } +void cheatparse(string codes) { +	char cmd; +	integer se, sx, sy; + +	if (~ cheat) { +		/* put them off the scent! */ +		display("Have you gone dotty\??!"); +		return; +	} +	cmd = upcase(codes[2]); +	Delete(codes, 1, 2); /* strip header */ +	display("\6Ninety: \22\4"); +	switch (cmd) { +	case 'R': { +		number(codes); +		if (e != 0)  return; +		display(string("room swap to ") + codes + '.'); +		fliproom(num, 1); +	} +	break; +	case 'Z': { +		zonk; +		display("Zonk OK!"); +	} +	break; +	case 'W': { +		wobble; +		display("Ow my head!"); +	} +	break; +	case 'A': { +		tr[1].done; +		tr[1].init(1, true); +		dna.user_moves_avvy = true; +		alive = true; +		display("Reincat."); +	} +	break; +	case 'B': { +		sx = tr[1].x; +		sy = tr[1].y; +		se = tr[1].face; +		delavvy; +		number(codes); +		{ +			void &with = tr[1]; + +			done; +			init(num, true); +			display(string("Become ") + codes + ':' + "\r\r" + a.name + '\15' + a.comment); +			appear(sx, sy, se); +		} +	} +	break; +	/*  'D': ninetydump;*/ +	case 'G': +		play_nim; +		break; +	case '±': +		display("\232\25"); +		break; +	default: +		display("unknown code!"); +	}  } -void punctustrip(string& x)          /* Strips punctuation from x. */ -{ -      const varying_string<32> punct = "~`!@#$%^&*()_+-={}[]:\"|;'\\,./<>?"; -    byte fv,p; - - for( fv=1; fv <= 32; fv ++) -  do { -   p=pos(punct[fv-1],x); -   if (p==0)  flush(); /* <<< The first time I've ever used it! */ -   Delete(x,p,1); -  } while (!false); +void punctustrip(string &x) {        /* Strips punctuation from x. */ +	const varying_string<32> punct = "~`!@#$%^&*()_+-={}[]:\"|;'\\,./<>?"; +	byte fv, p; + +	for (fv = 1; fv <= 32; fv ++) +		do { +			p = pos(punct[fv - 1], x); +			if (p == 0)  flush(); /* <<< The first time I've ever used it! */ +			Delete(x, p, 1); +		} while (!false);  }  boolean do_pronouns();  static boolean ambiguous; -static void displaywhat(char ch, boolean animate) /* << it's an adjective! */ -{ -    byte ff; string z; - - if (ch==pardon)  - { -  ambiguous=true; -  if (animate)  display("Whom?"); else display("What?"); - } else - { -  if (animate)  display(string("{ ")+getname(ch)+" }"); -   else -   { -     z=get_better(ch); -     if (z!="")  display(string("{ ")+z+" }"); -   } - } +static void displaywhat(char ch, boolean animate) { /* << it's an adjective! */ +	byte ff; +	string z; + +	if (ch == pardon) { +		ambiguous = true; +		if (animate)  display("Whom?"); +		else display("What?"); +	} else { +		if (animate)  display(string("{ ") + getname(ch) + " }"); +		else { +			z = get_better(ch); +			if (z != "")  display(string("{ ") + z + " }"); +		} +	}  } -boolean do_pronouns() -{ -    byte fv; - - boolean do_pronouns_result; - ambiguous=false; - for( fv=1; fv <= length(thats); fv ++) -  switch (thats[fv]) { -   case '\310': { -          displaywhat(him,true); -          thats[fv]=him; -         } -         break; -   case '\311': { -          displaywhat(her,true); -          thats[fv]=her; -         } -         break; -   case '\312': { -          displaywhat(it,false); -          thats[fv]=it; -         } -         break; -  } - do_pronouns_result=ambiguous; - return do_pronouns_result; +boolean do_pronouns() { +	byte fv; + +	boolean do_pronouns_result; +	ambiguous = false; +	for (fv = 1; fv <= length(thats); fv ++) +		switch (thats[fv]) { +		case '\310': { +			displaywhat(him, true); +			thats[fv] = him; +		} +		break; +		case '\311': { +			displaywhat(her, true); +			thats[fv] = her; +		} +		break; +		case '\312': { +			displaywhat(it, false); +			thats[fv] = it; +		} +		break; +		} +	do_pronouns_result = ambiguous; +	return do_pronouns_result;  }  void store_interrogation(byte interrogation); -static void lowercase() -{ -    byte fv; +static void lowercase() { +	byte fv; - for( fv=1; fv <= length(current); fv ++) -  if (set::of(range('A','Z'), eos).has(current[fv]))  -   current[fv] += 32; +	for (fv = 1; fv <= length(current); fv ++) +		if (set::of(range('A', 'Z'), eos).has(current[fv])) +			current[fv] += 32;  } -static void propernouns() -{ -    byte fv; +static void propernouns() { +	byte fv; - lowercase(); - for( fv=2; fv <= length(current)-1; fv ++) -  if (current[fv]==' ')  -   current[fv+1]=upcase(current[fv+1]); - current[1]=upcase(current[1]); +	lowercase(); +	for (fv = 2; fv <= length(current) - 1; fv ++) +		if (current[fv] == ' ') +			current[fv + 1] = upcase(current[fv + 1]); +	current[1] = upcase(current[1]);  } -static void sayit() /* This makes Avalot say the response. */ -{ -    string x; +static void sayit() { /* This makes Avalot say the response. */ +	string x; - x=current; x[1]=upcase(x[1]); - display(string("\231")+x+'.'+'\2'+'\23'+'2'); +	x = current; +	x[1] = upcase(x[1]); +	display(string("\231") + x + '.' + '\2' + '\23' + '2');  } -void store_interrogation(byte interrogation) -{ -    byte fv; +void store_interrogation(byte interrogation) { +	byte fv; - if (current=="")  return; +	if (current == "")  return; - /* Strip current: */ - while ((current[1]==' ') && (current!=""))  Delete(current,1,1); - while ((current[length(current)]==' ') && (current!=""))  current[0] -= 1; +	/* Strip current: */ +	while ((current[1] == ' ') && (current != ""))  Delete(current, 1, 1); +	while ((current[length(current)] == ' ') && (current != ""))  current[0] -= 1; - lose_timer(reason_cardiffsurvey); /* if you want to use any other timer, +	lose_timer(reason_cardiffsurvey); /* if you want to use any other timer,    put this into the case statement. */ -  switch (interrogation) { -   case 1: { -       lowercase(); sayit(); -       like2drink=current; -       dna.cardiff_things=2; -      } -      break; -   case 2: { -       propernouns(); sayit(); -       favourite_song=current; -       dna.cardiff_things=3; -      } -      break; -   case 3: { -       propernouns(); sayit(); -       worst_place_on_earth=current; -       dna.cardiff_things=4; -      } -      break; -   case 4: { -       lowercase(); sayit(); -       fillchar(spare_evening,sizeof(spare_evening),'\261'); -       spare_evening=current; -       dixi('z',5); /* His closing statement... */ -       tr[2].walkto(4); /* The end of the drawbridge */ -       tr[2].vanishifstill=true;  /* Then go away! */ -       magics[2].op=nix; -       dna.cardiff_things=5; -      } -      break; - -   case 99: store_high(current); break; -  } - if (interrogation<4)  cardiff_survey; +	switch (interrogation) { +	case 1: { +		lowercase(); +		sayit(); +		like2drink = current; +		dna.cardiff_things = 2; +	} +	break; +	case 2: { +		propernouns(); +		sayit(); +		favourite_song = current; +		dna.cardiff_things = 3; +	} +	break; +	case 3: { +		propernouns(); +		sayit(); +		worst_place_on_earth = current; +		dna.cardiff_things = 4; +	} +	break; +	case 4: { +		lowercase(); +		sayit(); +		fillchar(spare_evening, sizeof(spare_evening), '\261'); +		spare_evening = current; +		dixi('z', 5); /* His closing statement... */ +		tr[2].walkto(4); /* The end of the drawbridge */ +		tr[2].vanishifstill = true; /* Then go away! */ +		magics[2].op = nix; +		dna.cardiff_things = 5; +	} +	break; + +	case 99: +		store_high(current); +		break; +	} +	if (interrogation < 4)  cardiff_survey;  } -void clearwords() -{ - fillchar(realwords,sizeof(realwords),'\0'); +void clearwords() { +	fillchar(realwords, sizeof(realwords), '\0');  } -void parse() -{ -    byte n,fv,ff; string c,cc,thisword; varying_string<1> answer; boolean notfound; - - /* first parsing - word identification */ - - thats=""; c=current+'\40'; n=1; polite=false; - verb=pardon; thing=pardon; thing2=pardon; person=pardon; - clearwords(); - if (current[1]=='.')  - {     /* a cheat mode attempt */ -  cheatparse(current); thats=nowt; return; - }    /* not our department! Otherwise... */ - - /* Are we being interrogated right now? */ - - if (interrogation>0)  - { -  store_interrogation(interrogation); -  weirdword=true; -  return; - } - - cc=c; for( fv=1; fv <= length(c); fv ++) c[fv]=upcase(c[fv]); - while (c!="")  - { -   while ((c[1]=='\40') && (c!=""))  -     { Delete(c,1,1); Delete(cc,1,1); } -  thisword=copy(c,1,pos("\40",c)-1); -  realwords[n]=copy(cc,1,pos("\40",cc)-1); -  punctustrip(c); - -  notfound=true; - -  if (thisword!="")  -  { -   for( ff=1; ff <= 30; ff ++) -   {     /* Check Also, FIRST! */ -    if (pos(string(',')+thisword,also[ff][0])>0)  -    { -     thats=thats+chr(99+ff); -     notfound=false; -    } -   } -  } - -  if (notfound)  -  { -   answer=wordnum(thisword); -   if (answer==pardon)  -   { -    notfound=true; -    thats=thats+pardon; -   } else -    thats=thats+wordnum(thisword); -   n += 1; -  } -  Delete(c,1,pos("\40",c)); Delete(cc,1,pos("\40",cc)); - } - - if (pos("\376",thats)>0)  unknown=realwords[pos("\376",thats)]; else unknown=""; replace("\377",""); /* zap noise words */ - replace(string('\15')+'\342',"\1"); /* "look at" = "examine" */ - replace(string('\15')+'\344',"\1"); /* "look in" = "examine" */ - replace(string('\4')+'\343',"\21"); /* "get up" = "stand" */ - replace(string('\4')+'\347',"\21"); /* "get down" = "stand"... well, why not? */ - replace(string('\22')+'\344',"\2"); /* "go in" = "open [door]" */ - replace(string('\34')+'\345',"\375"); /* "P' off" is a swear word */ - replace(string('\4')+'\6',"\6"); /* "Take inventory" (remember Colossal Adventure?) */ - replace(string('\50')+'\350',"\25"); /* "put on" = "don" */ - replace(string('\4')+'\345',"\24"); /* "take off" = "doff" */ - -             /* Words that could mean more than one person */ - { -  if (room==r__nottspub)  replace("\314","\244"); /* Barman = Port */ -   else replace("\314","\232");                   /* Barman = Malagauche */ -  switch (room) { -   case r__aylesoffice: replace("\313","\243"); break;        /* Monk = Ayles */ -   case r__musicroom: replace("\313","\246"); break;          /* Monk = Jacques */ -   default: replace("\313","\242");                   /* Monk = Ibythneth */ -  } - } - - if (do_pronouns())  - { -  weirdword=true; -  thats=nowt; -  return; - } - - /* second parsing - accidence */ - - subject=""; subjnumber=0;   /* Find subject of conversation. */ - for( fv=1; fv <= 11; fv ++) -  if (set::of('`','\'', eos).has(realwords[fv][1]))  -  { -   subjnumber=ord(thats[fv]); -   thats[fv]=moved; -   flush(); /* Only the second time I've used that! */ -  } - if (subjnumber==0)   /* Still not found. */ -  for( fv=1; fv <= 10; fv ++) -   if (thats[fv]=='\374')  /* the word is "about", or something similar */ -   { -    subjnumber=ord(thats[fv+1]); -    thats[fv+1]='\0'; -    flush(); /* ...Third! */ -   } - if (subjnumber==0)   /* STILL not found! Must be the word after "say". */ -  for( fv=1; fv <= 10; fv ++) -   if ((thats[fv]=='\7') && ! (set::of('\0',range('\341','\345'), eos).has(thats[fv+1])))  -   {     /* SAY not followed by a preposition */ -    subjnumber=ord(thats[fv+1]); -    thats[fv+1]='\0'; -    flush(); /* ...Fourth! */ -   } - - for( fv=length(thats); fv >= 1; fv --) /* Reverse order- so first'll be used */ -  switch (thats[fv]) { -   case '\1' ... '\61':case '\375':case '\371': verb=thats[fv]; break; -   case '\62' ... '\225': { thing2=thing; thing=thats[fv]; } break; -   case '\226' ... '\307': person=thats[fv]; break; -   case '\373': polite=true; break; -  } - - if ((unknown!="") && ! -  (set::of(vb_exam,vb_talk,vb_save,vb_load,vb_dir, eos).has(verb)))  - { -  display(string("Sorry, but I have no idea what `")+unknown+ -    "\" means. Can you rephrase it?"); -  weirdword=true; - } else weirdword=false; - if (thats=="")  thats=nowt; - - if (thing!=pardon)  it=thing; - if (person!=pardon)  - { -  if (person<'\257')  him=person; else her=person; - } +void parse() { +	byte n, fv, ff; +	string c, cc, thisword; +	varying_string<1> answer; +	boolean notfound; + +	/* first parsing - word identification */ + +	thats = ""; +	c = current + '\40'; +	n = 1; +	polite = false; +	verb = pardon; +	thing = pardon; +	thing2 = pardon; +	person = pardon; +	clearwords(); +	if (current[1] == '.') { +		/* a cheat mode attempt */ +		cheatparse(current); +		thats = nowt; +		return; +	}    /* not our department! Otherwise... */ + +	/* Are we being interrogated right now? */ + +	if (interrogation > 0) { +		store_interrogation(interrogation); +		weirdword = true; +		return; +	} + +	cc = c; +	for (fv = 1; fv <= length(c); fv ++) c[fv] = upcase(c[fv]); +	while (c != "") { +		while ((c[1] == '\40') && (c != "")) { +			Delete(c, 1, 1); +			Delete(cc, 1, 1); +		} +		thisword = copy(c, 1, pos("\40", c) - 1); +		realwords[n] = copy(cc, 1, pos("\40", cc) - 1); +		punctustrip(c); + +		notfound = true; + +		if (thisword != "") { +			for (ff = 1; ff <= 30; ff ++) { +				/* Check Also, FIRST! */ +				if (pos(string(',') + thisword, also[ff][0]) > 0) { +					thats = thats + chr(99 + ff); +					notfound = false; +				} +			} +		} + +		if (notfound) { +			answer = wordnum(thisword); +			if (answer == pardon) { +				notfound = true; +				thats = thats + pardon; +			} else +				thats = thats + wordnum(thisword); +			n += 1; +		} +		Delete(c, 1, pos("\40", c)); +		Delete(cc, 1, pos("\40", cc)); +	} + +	if (pos("\376", thats) > 0)  unknown = realwords[pos("\376", thats)]; +	else unknown = ""; +	replace("\377", ""); /* zap noise words */ +	replace(string('\15') + '\342', "\1"); /* "look at" = "examine" */ +	replace(string('\15') + '\344', "\1"); /* "look in" = "examine" */ +	replace(string('\4') + '\343', "\21"); /* "get up" = "stand" */ +	replace(string('\4') + '\347', "\21"); /* "get down" = "stand"... well, why not? */ +	replace(string('\22') + '\344', "\2"); /* "go in" = "open [door]" */ +	replace(string('\34') + '\345', "\375"); /* "P' off" is a swear word */ +	replace(string('\4') + '\6', "\6"); /* "Take inventory" (remember Colossal Adventure?) */ +	replace(string('\50') + '\350', "\25"); /* "put on" = "don" */ +	replace(string('\4') + '\345', "\24"); /* "take off" = "doff" */ + +	/* Words that could mean more than one person */ +	{ +		if (room == r__nottspub)  replace("\314", "\244"); /* Barman = Port */ +		else replace("\314", "\232");                  /* Barman = Malagauche */ +		switch (room) { +		case r__aylesoffice: +			replace("\313", "\243"); +			break;        /* Monk = Ayles */ +		case r__musicroom: +			replace("\313", "\246"); +			break;          /* Monk = Jacques */ +		default: +			replace("\313", "\242");                  /* Monk = Ibythneth */ +		} +	} + +	if (do_pronouns()) { +		weirdword = true; +		thats = nowt; +		return; +	} + +	/* second parsing - accidence */ + +	subject = ""; +	subjnumber = 0; /* Find subject of conversation. */ +	for (fv = 1; fv <= 11; fv ++) +		if (set::of('`', '\'', eos).has(realwords[fv][1])) { +			subjnumber = ord(thats[fv]); +			thats[fv] = moved; +			flush(); /* Only the second time I've used that! */ +		} +	if (subjnumber == 0) /* Still not found. */ +		for (fv = 1; fv <= 10; fv ++) +			if (thats[fv] == '\374') { /* the word is "about", or something similar */ +				subjnumber = ord(thats[fv + 1]); +				thats[fv + 1] = '\0'; +				flush(); /* ...Third! */ +			} +	if (subjnumber == 0) /* STILL not found! Must be the word after "say". */ +		for (fv = 1; fv <= 10; fv ++) +			if ((thats[fv] == '\7') && !(set::of('\0', range('\341', '\345'), eos).has(thats[fv + 1]))) { +				/* SAY not followed by a preposition */ +				subjnumber = ord(thats[fv + 1]); +				thats[fv + 1] = '\0'; +				flush(); /* ...Fourth! */ +			} + +	for (fv = length(thats); fv >= 1; fv --) /* Reverse order- so first'll be used */ +		switch (thats[fv]) { +		case '\1' ... '\61': +		case '\375': +		case '\371': +			verb = thats[fv]; +			break; +		case '\62' ... '\225': { +			thing2 = thing; +			thing = thats[fv]; +		} +		break; +		case '\226' ... '\307': +			person = thats[fv]; +			break; +		case '\373': +			polite = true; +			break; +		} + +	if ((unknown != "") && ! +	        (set::of(vb_exam, vb_talk, vb_save, vb_load, vb_dir, eos).has(verb))) { +		display(string("Sorry, but I have no idea what `") + unknown + +		        "\" means. Can you rephrase it?"); +		weirdword = true; +	} else weirdword = false; +	if (thats == "")  thats = nowt; + +	if (thing != pardon)  it = thing; +	if (person != pardon) { +		if (person < '\257')  him = person; +		else her = person; +	}  } -void examobj()     /* Examine a standard object-thing */ -{ - if (thing!=thinks)  thinkabout(thing,a_thing); -  switch (thing) { -   case wine : switch (winestate) { -         /* 4 is perfect wine. 0 is not holding the wine. */ -           case 1: dixi('t',1); break; /* Normal examine wine scroll */ -           case 2: dixi('d',6); break; /* Bad wine */ -           case 3: dixi('d',7); break; /* Vinegar */ -          } -          break; -   case onion: if (rotten_onion)  -           dixi('q',21); /* Yucky onion. */ -          else -           dixi('t',18); -           break;        /* Normal onion scroll */ -  default: -   dixi('t',ord(thing)); /* <<< Ordinarily */ -  } +void examobj() {   /* Examine a standard object-thing */ +	if (thing != thinks)  thinkabout(thing, a_thing); +	switch (thing) { +	case wine : +		switch (winestate) { +			/* 4 is perfect wine. 0 is not holding the wine. */ +		case 1: +			dixi('t', 1); +			break; /* Normal examine wine scroll */ +		case 2: +			dixi('d', 6); +			break; /* Bad wine */ +		case 3: +			dixi('d', 7); +			break; /* Vinegar */ +		} +		break; +	case onion: +		if (rotten_onion) +			dixi('q', 21); /* Yucky onion. */ +		else +			dixi('t', 18); +		break;        /* Normal onion scroll */ +	default: +		dixi('t', ord(thing)); /* <<< Ordinarily */ +	}  } -boolean personshere()         /* Person equivalent of "holding" */ -{ - boolean personshere_result; - if ((person==pardon) || (person=='\0') -   || (whereis[person]==dna.room))  personshere_result=true; - else { -  if (person<'\257')  display("H\4"); else display("Sh\4"); -  display("e isn't around at the moment."); -  personshere_result=false; - } - return personshere_result; +boolean personshere() {       /* Person equivalent of "holding" */ +	boolean personshere_result; +	if ((person == pardon) || (person == '\0') +	        || (whereis[person] == dna.room))  personshere_result = true; +	else { +		if (person < '\257')  display("H\4"); +		else display("Sh\4"); +		display("e isn't around at the moment."); +		personshere_result = false; +	} +	return personshere_result;  } -void exampers() -{ - if (personshere())  - { -  if (thing!=thinks)  thinkabout(person,a_person); -  person -= 149; -   switch (person) { /* Special cases */ -    case '\13': if (wonnim)  -         { -          dixi('Q',8); /* "I'm Not Playing!" */ -          return; -         } -         break; -    case '\11': if (lustie_is_asleep)  -        { dixi('Q',65);     /* He's asleep. (65! Wow!) */ return; } -        break; -   } -   /* Otherwise... */ dixi('p',ord(person)); - }    /* And afterwards... */ - switch (person) { -  case '\16': if (~ dna.ayles_is_awake)  dixi('Q',13); break; /* u.f.s.? */ - } +void exampers() { +	if (personshere()) { +		if (thing != thinks)  thinkabout(person, a_person); +		person -= 149; +		switch (person) { /* Special cases */ +		case '\13': +			if (wonnim) { +				dixi('Q', 8); /* "I'm Not Playing!" */ +				return; +			} +			break; +		case '\11': +			if (lustie_is_asleep) { +				dixi('Q', 65);     /* He's asleep. (65! Wow!) */ return; +			} +			break; +		} +		/* Otherwise... */ dixi('p', ord(person)); +	}    /* And afterwards... */ +	switch (person) { +	case '\16': +		if (~ dna.ayles_is_awake)  dixi('Q', 13); +		break; /* u.f.s.? */ +	}  } -boolean holding() -{ - boolean holding_result; - if (set::of(range('\63','\143'), eos).has(thing))  { holding_result=true; return holding_result; } /* Also */ - holding_result=false; - if (thing>'\144')  display("Be reasonable!"); else -  if (~ dna.obj[thing])      /* verbs that need "thing" to be in the inventory */ -   display("You're not holding it, Avvy."); else -    holding_result=true; - return holding_result; +boolean holding() { +	boolean holding_result; +	if (set::of(range('\63', '\143'), eos).has(thing))  { +		holding_result = true;    /* Also */ +		return holding_result; +	} +	holding_result = false; +	if (thing > '\144')  display("Be reasonable!"); +	else if (~ dna.obj[thing])     /* verbs that need "thing" to be in the inventory */ +		display("You're not holding it, Avvy."); +	else +		holding_result = true; +	return holding_result;  }  void examine(); -static void special(boolean before) -{ - switch (dna.room) { -  case r__yours: switch (thing) { -             case '\66': if (before)  show_one(5); else show_one(6); break; -            } -            break; - } +static void special(boolean before) { +	switch (dna.room) { +	case r__yours: +		switch (thing) { +		case '\66': +			if (before)  show_one(5); +			else show_one(6); +			break; +		} +		break; +	}  } -void examine() -{ - /* Examine. EITHER it's an object OR it's an Also OR it's a person OR -    it's something else. */ - if ((person==pardon) && (thing!=pardon))  - { -  if (holding())  -   switch (thing) { /* remember it's been Slipped- ie subtract 49 */ -       case '\1' ... '\61' : examobj(); break; /* Standard object */ -     case '\62' ... '\144' : { -                  special(true); -                  display(also[ord(thing)-50][1]); /* Also thing */ -                  special(false); -                 } -                 break; -   } - } else -  if (person!=pardon)  exampers(); -   else display("It's just as it looks on the picture.");  /* don't know- guess */ +void examine() { +	/* Examine. EITHER it's an object OR it's an Also OR it's a person OR +	   it's something else. */ +	if ((person == pardon) && (thing != pardon)) { +		if (holding()) +			switch (thing) { /* remember it's been Slipped- ie subtract 49 */ +			case '\1' ... '\61' : +				examobj(); +				break; /* Standard object */ +			case '\62' ... '\144' : { +				special(true); +				display(also[ord(thing) - 50][1]); /* Also thing */ +				special(false); +			} +			break; +			} +	} else if (person != pardon)  exampers(); +	else display("It's just as it looks on the picture.");  /* don't know- guess */  } -void inv()     /* the time-honoured command... */ -{ -    char fv; byte q; - - q=0; display(string("You're carrying ")+'\4'); - { -  for( fv='\1'; fv <= numobjs; fv ++) -   if (obj[fv])  -   { -    q += 1; if (q==carrying)  display(string("and ")+'\4'); -    display(get_better(fv)+'\4'); -    if (fv==wearing)  display(string(", which you're wearing")+'\4'); -     if (q<carrying)  display(string(", ")+'\4'); -   } -  if (wearing==nowt)  display("...\r\r...and you're stark naked!"); else -   display('.'); - } +void inv() {   /* the time-honoured command... */ +	char fv; +	byte q; + +	q = 0; +	display(string("You're carrying ") + '\4'); +	{ +		for (fv = '\1'; fv <= numobjs; fv ++) +			if (obj[fv]) { +				q += 1; +				if (q == carrying)  display(string("and ") + '\4'); +				display(get_better(fv) + '\4'); +				if (fv == wearing)  display(string(", which you're wearing") + '\4'); +				if (q < carrying)  display(string(", ") + '\4'); +			} +		if (wearing == nowt)  display("...\r\r...and you're stark naked!"); +		else +			display('.'); +	}  } -void swallow()     /* Eat something. */ -{ - switch (thing) { -  case wine: switch (dna.winestate) { -         /* 4 is perfect */ -          case 1: { -              if (dna.teetotal)  { dixi('D',6); return; } -              dixi('U',1); wobble; dixi('U',2); -              dna.obj[wine]=false; objectlist; -              have_a_drink(); -             } -             break; -          case 2:case 3: dixi('d',8); break; /* You can't drink it! */ -         } -         break; -  case potion: { background(4); dixi('U',3); gameover; background(0); } break; -  case ink: dixi('U',4); break; -  case chastity: dixi('U',5); break; -  case mushroom: { -             dixi('U',6); -             gameover; -            } -            break; -  case onion: if (dna.rotten_onion)  dixi('U',11); -         else { -          dixi('U',8); -          dna.obj[onion]=false; -          objectlist; -         } -         break; -  default: -    if (set::of(r__argentpub,r__nottspub, eos).has(dna.room))  -      display("Try BUYing things before you drink them!"); -    else -      display("The taste of it makes you retch!"); -         /* Constant- leave this one */ - } +void swallow() {   /* Eat something. */ +	switch (thing) { +	case wine: +		switch (dna.winestate) { +			/* 4 is perfect */ +		case 1: { +			if (dna.teetotal)  { +				dixi('D', 6); +				return; +			} +			dixi('U', 1); +			wobble; +			dixi('U', 2); +			dna.obj[wine] = false; +			objectlist; +			have_a_drink(); +		} +		break; +		case 2: +		case 3: +			dixi('d', 8); +			break; /* You can't drink it! */ +		} +		break; +	case potion: { +		background(4); +		dixi('U', 3); +		gameover; +		background(0); +	} +	break; +	case ink: +		dixi('U', 4); +		break; +	case chastity: +		dixi('U', 5); +		break; +	case mushroom: { +		dixi('U', 6); +		gameover; +	} +	break; +	case onion: +		if (dna.rotten_onion)  dixi('U', 11); +		else { +			dixi('U', 8); +			dna.obj[onion] = false; +			objectlist; +		} +		break; +	default: +		if (set::of(r__argentpub, r__nottspub, eos).has(dna.room)) +			display("Try BUYing things before you drink them!"); +		else +			display("The taste of it makes you retch!"); +		/* Constant- leave this one */ +	}  }  void others() - /* This lists the other people in the room. */ +/* This lists the other people in the room. */  { - char fv; - byte num_people,this_person,here; +	char fv; +	byte num_people, this_person, here; - num_people=0; - this_person=0; - here=dna.room; +	num_people = 0; +	this_person = 0; +	here = dna.room; - for( fv='\227'; fv <= '\262'; fv ++) /* Start at 151 so we don't list Avvy himself! */ -  if (whereis[fv]==here)  -   num_people += 1; +	for (fv = '\227'; fv <= '\262'; fv ++) /* Start at 151 so we don't list Avvy himself! */ +		if (whereis[fv] == here) +			num_people += 1; - /* If nobody's here, we can cut out straight away. */ +	/* If nobody's here, we can cut out straight away. */ - if (num_people==0)  return; /* Leave the procedure. */ +	if (num_people == 0)  return; /* Leave the procedure. */ - for( fv='\227'; fv <= '\262'; fv ++) -  if (whereis[fv]==here)  -  { -   this_person += 1; -   if (this_person==1)   /* First on the list. */ -    display(getname(fv)+'\4'); else -    if (this_person<num_people)    /* The middle... */ -     display(string(", ")+getname(fv)+'\4'); else -      display(string(" and ")+getname(fv)+'\4'); /* The end. */ -  } +	for (fv = '\227'; fv <= '\262'; fv ++) +		if (whereis[fv] == here) { +			this_person += 1; +			if (this_person == 1) /* First on the list. */ +				display(getname(fv) + '\4'); +			else if (this_person < num_people) /* The middle... */ +				display(string(", ") + getname(fv) + '\4'); +			else +				display(string(" and ") + getname(fv) + '\4'); /* The end. */ +		} - if (num_people==1)  display(" is\4"); else display(" are\4"); +	if (num_people == 1)  display(" is\4"); +	else display(" are\4"); - display(" here."); /* End and display it. */ +	display(" here."); /* End and display it. */  }  void lookaround()  /* This is called when you say "look." */  { - display(also[0][1]); - switch (dna.room) { -  case r__spludwicks: if (dna.avaricius_talk>0)  dixi('q',23); else others(); break; -  case r__robins: { -              if (dna.tied_up)  dixi('q',38); -              if (dna.mushroom_growing)  dixi('q',55); -             } -             break; -  case r__insidecardiffcastle: if (~ dna.taken_pen)  dixi('q',49); break; -  case r__lustiesroom: if (dna.lustie_is_asleep)  dixi('q',65); break; -  case r__catacombs: switch (dna.cat_y*256+dna.cat_x) { -                 case 258 : dixi('q',80); break; /* Inside art gallery */ -                 case 514 : dixi('q',81); break; /* Outside ditto */ -                 case 260 : dixi('q',82); break; /* Outside Geida's room. */ -                } -                break; -  default: others(); - } +	display(also[0][1]); +	switch (dna.room) { +	case r__spludwicks: +		if (dna.avaricius_talk > 0)  dixi('q', 23); +		else others(); +		break; +	case r__robins: { +		if (dna.tied_up)  dixi('q', 38); +		if (dna.mushroom_growing)  dixi('q', 55); +	} +	break; +	case r__insidecardiffcastle: +		if (~ dna.taken_pen)  dixi('q', 49); +		break; +	case r__lustiesroom: +		if (dna.lustie_is_asleep)  dixi('q', 65); +		break; +	case r__catacombs: +		switch (dna.cat_y * 256 + dna.cat_x) { +		case 258 : +			dixi('q', 80); +			break; /* Inside art gallery */ +		case 514 : +			dixi('q', 81); +			break; /* Outside ditto */ +		case 260 : +			dixi('q', 82); +			break; /* Outside Geida's room. */ +		} +		break; +	default: +		others(); +	}  } -void opendoor()     /* so whaddya THINK this does?! */ -{ -    byte fv; - - switch (dna.room) {   /* Special cases. */ -   case r__yours: if (infield(2))  -             {     /* Opening the box. */ -              thing='\66'; /* The box. */ person=pardon; -              examine(); -              return; -             } -             break; -   case r__spludwicks: if (thing=='\75')  { -                    dixi('q',85); -                    return; -                  } -                  break; - } - - - if ((~ dna.user_moves_avvy) & (dna.room!=r__lusties)) -        return; /* No doors can open if you can't move Avvy. */ - for( fv=9; fv <= 15; fv ++) -  if (infield(fv))  -  { -   { void& with = portals[fv];  -    switch (op) { -     case exclaim: { tr[1].bounce; dixi('x',data); } break; -     case transport: fliproom(hi(data),lo(data)); break; -     case unfinished: { -                  tr[1].bounce; -                  display("\7Sorry.\3\rThis place is not available yet!"); -                 } -                 break; -     case special: call_special(data); break; -     case mopendoor: open_the_door(hi(data),lo(data),fv); break; -    }} -    return; -   } - if (dna.room==r__map)  -  display(string("Avvy, you can complete the whole game without ever going ")+ -                 "to anywhere other than Argent, Birmingham, Cardiff, "+ -                 "Nottingham and Norwich."); - else display("Door? What door?"); +void opendoor() {   /* so whaddya THINK this does?! */ +	byte fv; + +	switch (dna.room) {   /* Special cases. */ +	case r__yours: +		if (infield(2)) { +			/* Opening the box. */ +			thing = '\66'; /* The box. */ person = pardon; +			examine(); +			return; +		} +		break; +	case r__spludwicks: +		if (thing == '\75')  { +			dixi('q', 85); +			return; +		} +		break; +	} + + +	if ((~ dna.user_moves_avvy) & (dna.room != r__lusties)) +		return; /* No doors can open if you can't move Avvy. */ +	for (fv = 9; fv <= 15; fv ++) +		if (infield(fv)) { +			{ +				void &with = portals[fv]; +				switch (op) { +				case exclaim: { +					tr[1].bounce; +					dixi('x', data); +				} +				break; +				case transport: +					fliproom(hi(data), lo(data)); +					break; +				case unfinished: { +					tr[1].bounce; +					display("\7Sorry.\3\rThis place is not available yet!"); +				} +				break; +				case special: +					call_special(data); +					break; +				case mopendoor: +					open_the_door(hi(data), lo(data), fv); +					break; +				} +			} +			return; +		} +	if (dna.room == r__map) +		display(string("Avvy, you can complete the whole game without ever going ") + +		        "to anywhere other than Argent, Birmingham, Cardiff, " + +		        "Nottingham and Norwich."); +	else display("Door? What door?");  }  void putproc(); -static void silly() -{ - display("Don't be silly!"); +static void silly() { +	display("Don't be silly!");  } -void putproc()     /* Called when you call vb_put. */ -{ -    char temp; - - - if (! holding())  return; - thing2 -= 49;   /* Slip the second object */ - temp=thing; thing=thing2; if (! holding())  return; - thing=temp; - - /* Thing is the thing which you're putting in. Thing2 is where you're -   putting it. */ -             /* Convenience thing. */ -  switch (thing2) { -   case wine: if (thing==onion)  -         { -          if (dna.rotten_onion)  -          display(string("That's a bit like shutting the stable door after the ")+ -                   "horse has bolted!"); -          else {     /* Put onion into wine? */ -           if (dna.winestate!=3)  -            display("\6Oignon au vin\22 is a bit too strong for your tastes!"); -           else {     /* Put onion into vinegar! Yes! */ -            onion_in_vinegar=true; -            points(7); -            dixi('u',9); -           } -          } -         } else silly(); -         break; - -    case '\66': if (room==1)  /* Put something into the box. */ -         { -          if (box_contents!=nowt)  -           display(string("There's something in the box already, Avvy. Try taking")+ -            " that out first."); -          else -           switch (thing) { -            case money: display("You'd better keep some ready cash on you!"); break; -            case bell: display("That's a silly place to keep a bell."); break; -            case bodkin: display("But you might need it!"); break; -            case onion: display("Just give it to Spludwick, Avvy!"); break; -            default: -            {     /* Put the object into the box... */ -             if (wearing==thing)  -              display(string("You'd better take ")+get_better(thing)+" off first!"); -             else -             { -              show_one(5); /* Open box. */ -              box_contents=thing; -              dna.obj[thing]=false; -              objectlist; -              display("OK, it's in the box."); -              show_one(6); /* Shut box. */ -             } -            } -           } -         } else silly(); -         break; - -   default: silly(); -  } +void putproc() {   /* Called when you call vb_put. */ +	char temp; + + +	if (! holding())  return; +	thing2 -= 49;   /* Slip the second object */ +	temp = thing; +	thing = thing2; +	if (! holding())  return; +	thing = temp; + +	/* Thing is the thing which you're putting in. Thing2 is where you're +	  putting it. */ +	/* Convenience thing. */ +	switch (thing2) { +	case wine: +		if (thing == onion) { +			if (dna.rotten_onion) +				display(string("That's a bit like shutting the stable door after the ") + +				        "horse has bolted!"); +			else {     /* Put onion into wine? */ +				if (dna.winestate != 3) +					display("\6Oignon au vin\22 is a bit too strong for your tastes!"); +				else {     /* Put onion into vinegar! Yes! */ +					onion_in_vinegar = true; +					points(7); +					dixi('u', 9); +				} +			} +		} else silly(); +		break; + +	case '\66': +		if (room == 1) { /* Put something into the box. */ +			if (box_contents != nowt) +				display(string("There's something in the box already, Avvy. Try taking") + +				        " that out first."); +			else +				switch (thing) { +				case money: +					display("You'd better keep some ready cash on you!"); +					break; +				case bell: +					display("That's a silly place to keep a bell."); +					break; +				case bodkin: +					display("But you might need it!"); +					break; +				case onion: +					display("Just give it to Spludwick, Avvy!"); +					break; +				default: { +					/* Put the object into the box... */ +					if (wearing == thing) +						display(string("You'd better take ") + get_better(thing) + " off first!"); +					else { +						show_one(5); /* Open box. */ +						box_contents = thing; +						dna.obj[thing] = false; +						objectlist; +						display("OK, it's in the box."); +						show_one(6); /* Shut box. */ +					} +				} +				} +		} else silly(); +		break; + +	default: +		silly(); +	}  }  boolean give2spludwick(); - /* The result of this fn is whether or not he says "Hey, thanks!" */ -static void not_in_order() -{ - display(string("Sorry, I need the ingredients in the right order for this potion.")+ -  " What I need next is "+ -   get_better(spludwick_order[dna.given2spludwick])+".\232\2"); +/* The result of this fn is whether or not he says "Hey, thanks!" */ +static void not_in_order() { +	display(string("Sorry, I need the ingredients in the right order for this potion.") + +	        " What I need next is " + +	        get_better(spludwick_order[dna.given2spludwick]) + ".\232\2");  } -static void go_to_cauldron() -{ -   tr[2].call_eachstep=false;  /* Stops Geida_Procs. */ -   set_up_timer(1,procspludwick_goes_to_cauldron,reason_spludwalk); -   tr[2].walkto(2); +static void go_to_cauldron() { +	tr[2].call_eachstep = false; /* Stops Geida_Procs. */ +	set_up_timer(1, procspludwick_goes_to_cauldron, reason_spludwalk); +	tr[2].walkto(2);  }  boolean give2spludwick()  { - boolean give2spludwick_result; - { - -  give2spludwick_result=false; - -  if (spludwick_order[given2spludwick]!=thing)  -  { -   not_in_order(); -   return give2spludwick_result; -  } - -  switch (thing) { -   case onion: -    { -     obj[onion]=false; -     if (rotten_onion)  -      dixi('q',22); -     else { -      given2spludwick += 1; -      dixi('q',20); -      go_to_cauldron(); -      points(3); -     } -     objectlist; -    } -    break; -   case ink: { -         obj[ink]=false; -         objectlist; -         given2spludwick += 1; -         dixi('q',24); -         go_to_cauldron(); -         points(3); -        } -        break; -   case mushroom: { -              obj[mushroom]=false; -              dixi('q',25); -              points(5); -              given2spludwick += 1; -              go_to_cauldron(); -              obj[potion]=true; -              objectlist; -             } -             break; -   default: give2spludwick_result=true; -  } - } - return give2spludwick_result; +	boolean give2spludwick_result; +	{ + +		give2spludwick_result = false; + +		if (spludwick_order[given2spludwick] != thing) { +			not_in_order(); +			return give2spludwick_result; +		} + +		switch (thing) { +		case onion: { +			obj[onion] = false; +			if (rotten_onion) +				dixi('q', 22); +			else { +				given2spludwick += 1; +				dixi('q', 20); +				go_to_cauldron(); +				points(3); +			} +			objectlist; +		} +		break; +		case ink: { +			obj[ink] = false; +			objectlist; +			given2spludwick += 1; +			dixi('q', 24); +			go_to_cauldron(); +			points(3); +		} +		break; +		case mushroom: { +			obj[mushroom] = false; +			dixi('q', 25); +			points(5); +			given2spludwick += 1; +			go_to_cauldron(); +			obj[potion] = true; +			objectlist; +		} +		break; +		default: +			give2spludwick_result = true; +		} +	} +	return give2spludwick_result;  } -void have_a_drink() -{ - { -  alcohol += 1; -  if (alcohol==5)  -  { -   obj[key]=true;  /* Get the key. */ -   teetotal=true; -   avvy_is_awake=false; -   avvy_in_bed=true; -   objectlist; -   dusk; -   hang_around_for_a_while; -   fliproom(1,1); -   background(14); -   new_game_for_trippancy; /* Not really */ -  } - } +void have_a_drink() { +	{ +		alcohol += 1; +		if (alcohol == 5) { +			obj[key] = true; /* Get the key. */ +			teetotal = true; +			avvy_is_awake = false; +			avvy_in_bed = true; +			objectlist; +			dusk; +			hang_around_for_a_while; +			fliproom(1, 1); +			background(14); +			new_game_for_trippancy; /* Not really */ +		} +	}  } -void cardiff_climbing() -{ - if (dna.standing_on_dais)  - {     /* Clamber up. */ -  display("You climb down, back onto the floor."); -  dna.standing_on_dais=false; -  apped(1,3); - } else - {     /* Clamber down. */ -  if (infield(1))  -  { -    display("You clamber up onto the dais."); -    dna.standing_on_dais=true; -    apped(1,2); -  } else -    display("Get a bit closer, Avvy."); - } +void cardiff_climbing() { +	if (dna.standing_on_dais) { +		/* Clamber up. */ +		display("You climb down, back onto the floor."); +		dna.standing_on_dais = false; +		apped(1, 3); +	} else { +		/* Clamber down. */ +		if (infield(1)) { +			display("You clamber up onto the dais."); +			dna.standing_on_dais = true; +			apped(1, 2); +		} else +			display("Get a bit closer, Avvy."); +	}  }  void stand_up(); -  /* Called when you ask Avvy to stand. */ -static void already() -{ - display("You're already standing!"); +/* Called when you ask Avvy to stand. */ +static void already() { +	display("You're already standing!");  } -void stand_up() -{ -  switch (dna.room) { -   case r__yours: /* Avvy isn't asleep. */ -              if (avvy_in_bed)    /* But he's in bed. */ -              { -               if (teetotal)  -               { -                dixi('d',12); -                background(0); -                dixi('d',14); -               } -               tr[1].visible=true; -               user_moves_avvy=true; -               apped(1,2); -               dna.rw=left; -               show_one(4); /* Picture of empty pillow. */ -               points(1); -               avvy_in_bed=false; -               lose_timer(reason_arkata_shouts); -              } else already(); -              break; - -    case r__insidecardiffcastle: cardiff_climbing(); break; - -    case r__nottspub: if (sitting_in_pub)  { -                  show_one(4); /* Not sitting down. */ -                  tr[1].visible=true;  /* But standing up. */ -                  apped(1,4); /* And walking away. */ -                  sitting_in_pub=false;  /* Really not sitting down. */ -                  user_moves_avvy=true;  /* And ambulant. */ -                 } else already(); -                 break; -   default: already(); -  } +void stand_up() { +	switch (dna.room) { +	case r__yours: /* Avvy isn't asleep. */ +		if (avvy_in_bed) {  /* But he's in bed. */ +			if (teetotal) { +				dixi('d', 12); +				background(0); +				dixi('d', 14); +			} +			tr[1].visible = true; +			user_moves_avvy = true; +			apped(1, 2); +			dna.rw = left; +			show_one(4); /* Picture of empty pillow. */ +			points(1); +			avvy_in_bed = false; +			lose_timer(reason_arkata_shouts); +		} else already(); +		break; + +	case r__insidecardiffcastle: +		cardiff_climbing(); +		break; + +	case r__nottspub: +		if (sitting_in_pub)  { +			show_one(4); /* Not sitting down. */ +			tr[1].visible = true; /* But standing up. */ +			apped(1, 4); /* And walking away. */ +			sitting_in_pub = false; /* Really not sitting down. */ +			user_moves_avvy = true; /* And ambulant. */ +		} else already(); +		break; +	default: +		already(); +	}  } -void getproc(char thing) -{ -  switch (room) { -   case r__yours: -     if (infield(2))  -     { -      if (box_contents==thing)  -      { -       show_one(5); -       display("OK, I've got it."); -       obj[thing]=true; objectlist; -       box_contents=nowt; -       show_one(6); -      } else -       display(string("I can't see ")+get_better(thing)+" in the box."); -     } else dixi('q',57); -     break; -  case r__insidecardiffcastle: -    switch (thing) { -     case pen: -     { -      if (infield(2))  -      {     /* Standing on the dais. */ - -       if (dna.taken_pen)  -        display("It's not there, Avvy."); -       else -       {     /* OK: we're taking the pen, and it's there. */ -        show_one(4); /* No pen there now. */ -        call_special(3); /* Zap! */ -        dna.taken_pen=true; -        dna.obj[pen]=true; -        objectlist; -        display("Taken."); -       } -      } else if (dna.standing_on_dais)  dixi('q',53); else dixi('q',51); -     } -     break; -      case bolt: dixi('q',52); break; -     default: dixi('q',57); -    } -    break; -  case r__robins: if ((thing==mushroom) & (infield(1)) & (dna.mushroom_growing)) -                  { -              show_one(3); -              display("Got it!"); -              dna.mushroom_growing=false; -              dna.taken_mushroom=true; -              dna.obj[mushroom]=true; -              objectlist; -              points(3); -             } else dixi('q',57); -             break; -  default: dixi('q',57); - } +void getproc(char thing) { +	switch (room) { +	case r__yours: +		if (infield(2)) { +			if (box_contents == thing) { +				show_one(5); +				display("OK, I've got it."); +				obj[thing] = true; +				objectlist; +				box_contents = nowt; +				show_one(6); +			} else +				display(string("I can't see ") + get_better(thing) + " in the box."); +		} else dixi('q', 57); +		break; +	case r__insidecardiffcastle: +		switch (thing) { +		case pen: { +			if (infield(2)) { +				/* Standing on the dais. */ + +				if (dna.taken_pen) +					display("It's not there, Avvy."); +				else { +					/* OK: we're taking the pen, and it's there. */ +					show_one(4); /* No pen there now. */ +					call_special(3); /* Zap! */ +					dna.taken_pen = true; +					dna.obj[pen] = true; +					objectlist; +					display("Taken."); +				} +			} else if (dna.standing_on_dais)  dixi('q', 53); +			else dixi('q', 51); +		} +		break; +		case bolt: +			dixi('q', 52); +			break; +		default: +			dixi('q', 57); +		} +		break; +	case r__robins: +		if ((thing == mushroom) & (infield(1)) & (dna.mushroom_growing)) { +			show_one(3); +			display("Got it!"); +			dna.mushroom_growing = false; +			dna.taken_mushroom = true; +			dna.obj[mushroom] = true; +			objectlist; +			points(3); +		} else dixi('q', 57); +		break; +	default: +		dixi('q', 57); +	}  } -void give_geida_the_lute() -{ - { -  if (room!=r__lustiesroom)  -  { -   display("Not yet. Try later!\232\2"); -   return; -  } -  dna.obj[lute]=false; -  objectlist; -  dixi('q',64); /* She plays it. */ - -   /* And the rest has been moved to Timeout... under give_lute_to_Geida. */ - -  set_up_timer(1,procgive_lute_to_geida,reason_geida_sings); -  back_to_bootstrap(4); - } +void give_geida_the_lute() { +	{ +		if (room != r__lustiesroom) { +			display("Not yet. Try later!\232\2"); +			return; +		} +		dna.obj[lute] = false; +		objectlist; +		dixi('q', 64); /* She plays it. */ + +		/* And the rest has been moved to Timeout... under give_lute_to_Geida. */ + +		set_up_timer(1, procgive_lute_to_geida, reason_geida_sings); +		back_to_bootstrap(4); +	}  } -void play_harp() -{ - if (infield(7))  -  musical_scroll; - else display("Get a bit closer to it, Avvy!"); +void play_harp() { +	if (infield(7)) +		musical_scroll; +	else display("Get a bit closer to it, Avvy!");  } -void winsequence() -{ - dixi('q',78); - first_show(7); then_show(8); then_show(9); - start_to_close; - set_up_timer(30,procwinning,reason_winning); +void winsequence() { +	dixi('q', 78); +	first_show(7); +	then_show(8); +	then_show(9); +	start_to_close; +	set_up_timer(30, procwinning, reason_winning);  } -void person_speaks() -{ -    boolean found; byte fv; char cfv; - - -  if ((person==pardon) || (person=='\0'))  -  { -   if ((him==pardon) || (whereis[him]!=dna.room))  person=her; -    else person=him; -  } - -  if (whereis[person]!=dna.room)  -  { -   display("\231\4"); /* Avvy himself! */ -   return; -  } - -  found=false;  /* The person we're looking for's code is in Person. */ - -  for( fv=1; fv <= numtr; fv ++) -   if (tr[fv].quick & (chr(tr[fv].a.accinum+149)==person))  -   { -    display(string('\23')+chr(fv+48)+'\4'); -    found=true; -   } - -  if (! found)  -    for( fv=10; fv <= 25; fv ++) -     { void& with = quasipeds[fv];  -     if ((who==person) && (room==dna.room))  -     { -      display(string('\23')+chr(fv+55)+'\4'); -     }} +void person_speaks() { +	boolean found; +	byte fv; +	char cfv; + + +	if ((person == pardon) || (person == '\0')) { +		if ((him == pardon) || (whereis[him] != dna.room))  person = her; +		else person = him; +	} + +	if (whereis[person] != dna.room) { +		display("\231\4"); /* Avvy himself! */ +		return; +	} + +	found = false; /* The person we're looking for's code is in Person. */ + +	for (fv = 1; fv <= numtr; fv ++) +		if (tr[fv].quick & (chr(tr[fv].a.accinum + 149) == person)) { +			display(string('\23') + chr(fv + 48) + '\4'); +			found = true; +		} + +	if (! found) +		for (fv = 10; fv <= 25; fv ++) { +			void &with = quasipeds[fv]; +			if ((who == person) && (room == dna.room)) { +				display(string('\23') + chr(fv + 55) + '\4'); +			} +		}  }  void do_that(); -static void heythanks() -{ -  person_speaks(); -  display("Hey, thanks!\2(But now, you've lost it!)"); -  dna.obj[thing]=false; +static void heythanks() { +	person_speaks(); +	display("Hey, thanks!\2(But now, you've lost it!)"); +	dna.obj[thing] = false;  } -void do_that() -{ -      const array<'\63','\72',varying_string<6> > booze = {{"Bitter","GIED","Whisky","Cider","","","","Mead"}}; -    byte fv,ff; integer sx,sy; boolean ok; - - - if (thats==nowt)  { thats=""; return; } - if (weirdword)  return; - if (thing<'\310')  thing -= 49;   /* "Slip" */ - - if ((~ alive) & -  ! (set::of(vb_load,vb_save,vb_quit,vb_info,vb_help,vb_larrypass, -     vb_phaon,vb_boss,vb_cheat,vb_restart,vb_dir,vb_score, -     vb_highscores,vb_smartalec, eos).has(verb))) -       { -        display(string("You're dead, so don't talk. What are you, a ghost ")+ -         "or something? Try restarting, or restoring a saved game!"); return; -       } - - if ((~ dna.avvy_is_awake) & -  ! (set::of(vb_load,vb_save,vb_quit,vb_info,vb_help,vb_larrypass, -     vb_phaon,vb_boss,vb_cheat,vb_restart,vb_dir,vb_die,vb_score, -     vb_highscores,vb_smartalec,vb_expletive,vb_wake, eos).has(verb))) -       { -        display("Talking in your sleep? Try waking up!"); return; -       } - - - switch (verb) { -  case vb_exam: examine(); break; -  case vb_open: opendoor(); break; -  case vb_pause: display(string("Game paused.")+'\3'+'\15'+'\15'+"Press Enter, Esc, or click "+ -             "the mouse on the `O.K.\" box to continue."); -             break; -  case vb_get: { -           if (thing!=pardon)  -           {     /* Legitimate try to pick something up. */ -            if (dna.carrying>=maxobjs)  display("You can't carry any more!"); -            else getproc(thing); - -           } else -           {     /* Not... ditto. */ -            if (person!=pardon)  -             display("You can't sweep folk off their feet!"); else -            display("I assure you, you don't need it."); -           } -          } -          break; -  case vb_drop: display(string("Two years ago you dropped a florin in the street. Three days ")+ -       "later it was gone! So now you never leave ANYTHING lying around. OK?"); -       break; -/*       begin dna.obj[thing]:=false; objectlist; end;*/ -  case vb_inv: inv(); break; -  case vb_talk:  if (person==pardon)  -            { -              if (subjnumber==99)   /* They typed "say password". */ -                display("Yes, but what \6is\22 the password?"); -              else if (set::of(range(1,49),253,249, eos).has(subjnumber))  -              { -                Delete(thats,1,1); -                move(realwords[2],realwords[1],sizeof(realwords)-sizeof(realwords[1])); -                verb=chr(subjnumber); -                do_that(); return; -              } else -              { -                person=chr(subjnumber); subjnumber=0; -                if (set::of(pardon,'\0', eos).has(person))  display("Talk to whom?"); -                 else if (personshere())  talkto(ord(person)); -              } -            } else if (person==pardon)  display("Talk to whom?"); -            else if (personshere())  talkto(ord(person)); -            break; - -  case vb_give: if (holding())  -           { -            if (person==pardon)  display("Give to whom?"); else -            if (personshere())  -            { -             switch (thing) { -              case money : display("You can't bring yourself to give away your moneybag."); break; -              case bodkin:case bell:case clothes:case habit : -                    display("Don't give it away, it might be useful!"); -                    break; -              default: switch (person) { -                      case pcrapulus: switch (thing) { -                                 case wine: { -                                        display("Crapulus grabs the wine and gulps it down."); -                                        dna.obj[wine]=false; -                                       } -                                       break; -                                 default: heythanks(); -                                } -                                break; -                     case pcwytalot: if (set::of(crossbow,bolt, eos).has(thing))  -                                 display(string("You might be able to influence ")+ -                                 "Cwytalot more if you used it!"); -                                else heythanks(); -                                break; -                     case pspludwick: if (give2spludwick())  heythanks(); break; -                     case pibythneth: if (thing==badge)  -                                 { -                                  dixi('q',32); /* Thanks! Wow! */ -                                  points(3); -                                  dna.obj[badge]=false; -                                  dna.obj[habit]=true; -                                  dna.givenbadgetoiby=true; -                                  show_one(8); show_one(9); -                                 } else heythanks(); -                                 break; -                     case payles: if (dna.ayles_is_awake)  -                             { -                               if (thing==pen)  -                               { -                                dna.obj[pen]=false; -                                dixi('q',54); -                                dna.obj[ink]=true; -                                dna.given_pen_to_ayles=true; -                                objectlist; -                                points(2); -                               } else heythanks(); -                             } else -                               display("But he's asleep!"); -                               break; -                     case pgeida: switch (thing) { -                              case potion : { -                                        dna.obj[potion]=false; -                                        dixi('u',16); /* She drinks it. */ -                                        points(2); -                                        dna.geida_given_potion=true; -                                        objectlist; -                                       } -                                       break; -                              case lute: give_geida_the_lute(); break; -                              default: heythanks(); -                             } -                             break; -                     case parkata: switch (thing) { -                              case potion: if (dna.geida_given_potion)  -                                       winsequence(); -                                      else dixi('q',77); -                                      break;             /* That Geida woman! */ -                              default: heythanks(); -                             } -                             break; -                    default: heythanks(); -                   } -             } -            } -            objectlist; /* Just in case... */ -           } -           break; - -  case vb_eat:case vb_drink: if (holding())  swallow(); break; -  case vb_load: edna_load(realwords[2]); break; -  case vb_save: if (alive)  edna_save(realwords[2]); -           else display("It's a bit late now to save your game!"); -           break; -  case vb_pay: display("No money need change hands."); break; -  case vb_look: lookaround(); break; -  case vb_break: display("Vandalism is prohibited within this game!"); break; -  case vb_quit: { /* quit */ -            if (demo)  -            { -             dixi('q',31); -             close(demofile); -             exit(0); /* Change this later!!! */ -            } -        if (! polite)  display("How about a `please\", Avvy?"); else -         if (ask("\23C\26Do you really want to quit?"))  lmo=true; -       } -       break; -  case vb_go: display("Just use the arrow keys to walk there."); break; -  case vb_info: { -            aboutscroll=true; -/*            display('Thorsoft of Letchworth presents:'+^c+^m+^m+ -             'The medi‘val descendant of'+^m+ -             'Denarius Avaricius Sextus'+^m+'in:'+ -             ^m+^m+'LORD AVALOT D''ARGENT'+ -             ^m+'version '+vernum+^m+^m+'Copyright ï ' -             +copyright+', Mark, Mike and Thomas Thurman.');*/ -             display(string("\r\r\r\r\r\r\r")+"LORD AVALOT D'ARGENT"+"\3\r"+ -              "The medi‘val descendant of"+'\15'+ -              "Denarius Avaricius Sextus"+ -              '\15'+'\15'+"version "+vernum+'\15'+'\15'+"Copyright ï " -              +copyright+", Mark, Mike and Thomas Thurman."+'\23'+'Y'+'\26'); -             aboutscroll=false; -           } -           break; -  case vb_undress: if (dna.wearing==nowt)  display("You're already stark naked!"); -               else -            if (dna.avvys_in_the_cupboard)  -            { -             display(string("You take off ")+get_better(dna.wearing)+'.'); -             dna.wearing=nowt; objectlist; -            } else -            display("Hadn't you better find somewhere more private, Avvy?"); -            break; -  case vb_wear: if (holding())  -       {     /* wear something */ -        switch (thing) { -         case chastity: display("Hey, what kind of a weirdo are you\??!"); break; -         case clothes:case habit: { /* Change this! */ -                         if (dna.wearing!=nowt)  -                         { -                          if (dna.wearing==thing)  -                            display("You're already wearing that."); -                          else -                            display(string("You'll be rather warm wearing two ")+ -                           "sets of clothes!"); -                          return; -                         } else -                         dna.wearing=thing; objectlist; -                         if (thing==habit)  fv=3; else fv=0; -                         { void& with = tr[1];  -                          if (whichsprite!=fv)  -                          { -                           sx=tr[1].x; sy=tr[1].y; -                           done; -                           init(fv,true); -                           appear(sx,sy,left); -                           tr[1].visible=false; -                          }} -                        } -                        break; -         default: display(what); -        } -       } -       break; -  case vb_play: if (thing==pardon)  -            switch (dna.room) { /* They just typed "play"... */ -             case r__argentpub: play_nim; break; /* ...in the pub, => play Nim. */ -             case r__musicroom: play_harp(); break; -            } -           else if (holding())  -           { -            switch (thing) { -             case lute : { -                     dixi('U',7); -                     if (whereis[pcwytalot]==dna.room)  dixi('U',10); -                     if (whereis[pdulustie]==dna.room)  dixi('U',15); -                    } -                    break; -             case '\64' : if (dna.room==r__musicroom)  play_harp(); -                    else display(what); -                    break; -             case '\67' : if (dna.room==r__argentpub)  play_nim; -                    else display(what); -                    break; -             default: display(what); -            } -           } -           break; -  case vb_ring: if (holding())  -       { -        if (thing==bell)  -        { -         display("Ding, dong, ding, dong, ding, dong, ding, dong..."); -         if ((dna.ringing_bells) & (flagset('B')))  -          display("(Are you trying to join in, Avvy\?\?!)"); -        } else display(what); -       } -       break; -  case vb_help: boot_help; break; -  case vb_larrypass: display("Wrong game!"); break; -  case vb_phaon: display("Hello, Phaon!"); break; -  case vb_boss: bosskey; break; -  case vb_pee: if (flagset('P'))  -          { -           display("Hmm, I don't think anyone will notice..."); -           set_up_timer(4,procurinate,reason_gototoilet); -          } else display("It would be \6VERY\22 unwise to do that here, Avvy!"); -          break; -  case vb_cheat: { -             display(string('\6')+"Cheat mode now enabled."); -             cheat=true; -            } -            break; -  case vb_magic: if (dna.avaricius_talk>0)  -             dixi('q',19); -            else { -             if ((dna.room==12) & (infield(2)))  -             {     /* Avaricius appears! */ -              dixi('q',17); -              if (whereis['\227']==12)  -               dixi('q',18); -              else -              { -               tr[2].init(1,false); /* Avaricius */ -               apped(2,4); -               tr[2].walkto(5); -               tr[2].call_eachstep=true; -               tr[2].eachstep=procback_and_forth; -               dna.avaricius_talk=14; -               set_up_timer(177,procavaricius_talks,reason_avariciustalks); -              } -             } else display("Nothing appears to happen..."); -            } -            break; -  case vb_smartalec: display("Listen, smart alec, that was just rhetoric."); break; -  case vb_expletive: { -         switch (swore) { -          case 0: display(string("Avvy! Do you mind? There might be kids playing!\r\r")+ -              "(I shouldn't say it again, if I were you!)"); -              break; -          case 1: display(string("You hear a distant rumble of thunder. Must you always ")+ -              "do things I tell you not to?\r\rDon't do it again!"); -              break; -         default: -          { -           zonk; -           display(string("A crack of lightning shoots from the sky, ")+ -            "and fries you.\r\r(`Such is the anger of the gods, Avvy!\")"); -           gameover; -          } -         } -         swore += 1; -        } -        break; -  case vb_listen: if ((dna.ringing_bells) & (flagset('B')))  -              display(string("All other noise is drowned out by the ringing of ")+ -                       "the bells."); -             else -              if (listen=="")  -               display("You can't hear anything much at the moment, Avvy."); -                else display(listen); -                break; -  case vb_buy: { -           /* What are they trying to buy? */ -           switch (dna.room) { -            case r__argentpub: if (infield(6))  -                {     /* We're in a pub, and near the bar. */ -                 switch (thing) { -                  case '\63':case '\65':case '\66':case '\72': { /* Beer, whisky, cider or mead */ -                            if (dna.malagauche==177)   /* Already getting us one. */ -                              { dixi('D',15); return; } -                            if (dna.teetotal)  { dixi('D',6); return; } -                            if (dna.alcohol==0)  points(3); -                            show_one(12); -                            display(booze[thing]+", please.\231\2"); -                            dna.drinking=thing; - -                            show_one(10); -                            dna.malagauche=177; -                            set_up_timer(27,procbuydrinks,reason_drinks); -                           } -                           break; -                  case '\64': examine(); break; /* We have a right one here- buy Pepsi??! */ -                  case wine: if (dna.obj[wine])  /* We've already got the wine! */ -                          dixi('D',2); /* 1 bottle's shufishent! */ -                         else { -                          if (dna.malagauche==177)   /* Already getting us one. */ -                            { dixi('D',15); return; } -                          if (dna.carrying>=maxobjs)  -                             { display("Your hands are full."); return; } -                          show_one(12); display("Wine, please.\231\2"); -                          if (dna.alcohol==0)  points(3); -                          show_one(10); -                          dna.malagauche=177; - -                          set_up_timer(27,procbuywine,reason_drinks); -                         } -                         break; -                 } -                } else dixi('D',5); -                break;                /* Go to the bar! */ - -            case r__outsideducks: if (infield(6))  -             { -              if (thing==onion)  -              { -               if (dna.obj[onion])  -                dixi('D',10); /* not planning to juggle with the things! */ -               else -               if (dna.carrying>=maxobjs)  -                  display("Before you ask, you remember that your hands are full."); -               else -               { -                if (dna.bought_onion)  -                 dixi('D',11); else -                  { dixi('D',9); points(3); } -                pennycheck(3); /* It costs thruppence. */ -                dna.obj[onion]=true; -                objectlist; -                dna.bought_onion=true; -                dna.rotten_onion=false;  /* It's OK when it leaves the stall! */ -                dna.onion_in_vinegar=false; -               } -              } else dixi('D',0); -             } else dixi('D',0); -             break; - -             case r__nottspub: dixi('n',15); break; /* Can't sell to southerners. */ -            default: dixi('D',0); /* Can't buy that. */ -           } -          } -          break; -  case vb_attack: { -              if ((dna.room==r__brummieroad) && -               ((person=='\235') || (thing==crossbow) || (thing==bolt)) -               && (whereis['\235']==dna.room))  -              { -               switch (ord(dna.obj[bolt])+ord(dna.obj[crossbow])*2) { -                /* 0 = neither, 1 = only bolt, 2 = only crossbow, -                  3 = both. */ -                case 0: { -                    dixi('Q',10); -                    display("(At the very least, don't use your bare hands!)"); -                   } -                   break; -                case 1: display(string("Attack him with only a crossbow bolt? Are you ")+ -                    "planning on playing darts?!"); -                    break; -                case 2: display(string("Come on, Avvy! You're not going to get very far ")+ -                     "with only a crossbow!"); -                     break; -                case 3: { -                    dixi('Q',11); -                    dna.cwytalot_gone=true; -                    dna.obj[bolt]=false; dna.obj[crossbow]=false; -                    objectlist; -                    magics[12].op=nix; -                    points(7); -                    tr[2].walkto(2); -                    tr[2].vanishifstill=true; -                    tr[2].call_eachstep=false; -                    whereis['\235']=177; -                   } -                   break; -                default: dixi('Q',10); /* Please try not to be so violent! */ -               } -              } else dixi('Q',10); -             } -             break; -  case vb_password: if (dna.room!=r__bridge)  -                dixi('Q',12); else -               { -                ok=true; -                for( ff=1; ff <= length(thats); ff ++) -                 for( fv=1; fv <= length(words[dna.pass_num+first_password].w); fv ++) -                  if (words[dna.pass_num+first_password].w[fv] != -                          upcase(realwords[ff][fv])) -                        ok=false; -                if (ok)  -                { -                 if (dna.drawbridge_open!=0)  -                   display("Contrary to your expectations, the drawbridge fails to close again."); -                 else -                 { -                    points(4); -                    display("The drawbridge opens!"); -                    set_up_timer(7,procopen_drawbridge,reason_drawbridgefalls); -                    dna.drawbridge_open=1; -                 } -                } else dixi('Q',12); -               } -               break; -   case vb_dir: dir(realwords[2]); break; -   case vb_die: gameover; break; -   case vb_score: display(string("Your score is ")+strf(dna.score)+",\3\rout of a "+ -                      "possible 128.\r\rThis gives you a rank of "+rank()+ -                      ".\r\r"+totaltime()); -                      break; -   case vb_put: putproc(); break; -   case vb_stand: stand_up(); break; - -   case vb_kiss: if (person==pardon) -                   display("Kiss whom?"); -            else if (personshere())  -            switch (person) { -             case '\226' ... '\256': display("Hey, what kind of a weirdo are you??"); break; -             case parkata: dixi('U',12); break; -             case pgeida: dixi('U',13); break; -             case pwisewoman: dixi('U',14); break; -             default: dixi('U',5); /* You WHAT? */ -            } -            break; - -   case vb_climb: if (dna.room==r__insidecardiffcastle)  cardiff_climbing(); -             else /* In the wrong room! */ -              display("Not with your head for heights, Avvy!"); -              break; - -   case vb_jump: { -             set_up_timer(1,procjump,reason_jumping); -             dna.user_moves_avvy=false; -            } -            break; - -   case vb_highscores: show_highs; break; - -   case vb_wake: if (personshere())  -              switch (person) { -               case pardon:case pavalot:case '\0': if (~ avvy_is_awake)  -                    { -                     avvy_is_awake=true; -                     points(1); -                     avvy_in_bed=true; -                     show_one(3); /* Picture of Avvy, awake in bed. */ -                     if (teetotal)  dixi('d',13); -                    } else display("You're already awake, Avvy!"); -                    break; -               case payles: if (~ ayles_is_awake)  display("You can't seem to wake him by yourself."); break; -               case pjacques: display(string("Brother Jacques, Brother Jacques, are you asleep?\231\2")+ -                          "Hmmm... that doesn't seem to do any good..."); -                          break; -               default: display("It's difficult to awaken people who aren't asleep...!"); -              } -              break; - -   case vb_sit: if (dna.room==r__nottspub)  -           { -            if (dna.sitting_in_pub)  -             display("You're already sitting!"); -            else -            { -             tr[1].walkto(4); /* Move Avvy to the place, and sit him down. */ -             set_up_timer(1,procavvy_sit_down,reason_sitting_down); -            } -           } else -           {     /* Default doodah. */ -            dusk; -            hang_around_for_a_while; -            dawn; -            display("A few hours later...\20nothing much has happened..."); -           } -           break; - -   case vb_restart: if (ask("Restart game and lose changes?"))  { -                dusk; -                newgame; -                dawn; -               } -               break; - -  case pardon: display("Hey, a verb would be helpful!"); break; - -  case vb_hello: { person_speaks(); display("Hello.\2"); } break; -  case vb_thanks: { person_speaks(); display("That's OK.\2"); } break; -  default: display(string('\7')+"Parser bug!"); - } +void do_that() { +	const array < '\63', '\72', varying_string<6> > booze = {{"Bitter", "GIED", "Whisky", "Cider", "", "", "", "Mead"}}; +	byte fv, ff; +	integer sx, sy; +	boolean ok; + + +	if (thats == nowt)  { +		thats = ""; +		return; +	} +	if (weirdword)  return; +	if (thing < '\310')  thing -= 49; /* "Slip" */ + +	if ((~ alive) & +	        !(set::of(vb_load, vb_save, vb_quit, vb_info, vb_help, vb_larrypass, +	                  vb_phaon, vb_boss, vb_cheat, vb_restart, vb_dir, vb_score, +	                  vb_highscores, vb_smartalec, eos).has(verb))) { +		display(string("You're dead, so don't talk. What are you, a ghost ") + +		        "or something? Try restarting, or restoring a saved game!"); +		return; +	} + +	if ((~ dna.avvy_is_awake) & +	        !(set::of(vb_load, vb_save, vb_quit, vb_info, vb_help, vb_larrypass, +	                  vb_phaon, vb_boss, vb_cheat, vb_restart, vb_dir, vb_die, vb_score, +	                  vb_highscores, vb_smartalec, vb_expletive, vb_wake, eos).has(verb))) { +		display("Talking in your sleep? Try waking up!"); +		return; +	} + + +	switch (verb) { +	case vb_exam: +		examine(); +		break; +	case vb_open: +		opendoor(); +		break; +	case vb_pause: +		display(string("Game paused.") + '\3' + '\15' + '\15' + "Press Enter, Esc, or click " + +		        "the mouse on the `O.K.\" box to continue."); +		break; +	case vb_get: { +		if (thing != pardon) { +			/* Legitimate try to pick something up. */ +			if (dna.carrying >= maxobjs)  display("You can't carry any more!"); +			else getproc(thing); + +		} else { +			/* Not... ditto. */ +			if (person != pardon) +				display("You can't sweep folk off their feet!"); +			else +				display("I assure you, you don't need it."); +		} +	} +	break; +	case vb_drop: +		display(string("Two years ago you dropped a florin in the street. Three days ") + +		        "later it was gone! So now you never leave ANYTHING lying around. OK?"); +		break; +		/*       begin dna.obj[thing]:=false; objectlist; end;*/ +	case vb_inv: +		inv(); +		break; +	case vb_talk: +		if (person == pardon) { +			if (subjnumber == 99) /* They typed "say password". */ +				display("Yes, but what \6is\22 the password?"); +			else if (set::of(range(1, 49), 253, 249, eos).has(subjnumber)) { +				Delete(thats, 1, 1); +				move(realwords[2], realwords[1], sizeof(realwords) - sizeof(realwords[1])); +				verb = chr(subjnumber); +				do_that(); +				return; +			} else { +				person = chr(subjnumber); +				subjnumber = 0; +				if (set::of(pardon, '\0', eos).has(person))  display("Talk to whom?"); +				else if (personshere())  talkto(ord(person)); +			} +		} else if (person == pardon)  display("Talk to whom?"); +		else if (personshere())  talkto(ord(person)); +		break; + +	case vb_give: +		if (holding()) { +			if (person == pardon)  display("Give to whom?"); +			else if (personshere()) { +				switch (thing) { +				case money : +					display("You can't bring yourself to give away your moneybag."); +					break; +				case bodkin: +				case bell: +				case clothes: +				case habit : +					display("Don't give it away, it might be useful!"); +					break; +				default: +					switch (person) { +					case pcrapulus: +						switch (thing) { +						case wine: { +							display("Crapulus grabs the wine and gulps it down."); +							dna.obj[wine] = false; +						} +						break; +						default: +							heythanks(); +						} +						break; +					case pcwytalot: +						if (set::of(crossbow, bolt, eos).has(thing)) +							display(string("You might be able to influence ") + +							        "Cwytalot more if you used it!"); +						else heythanks(); +						break; +					case pspludwick: +						if (give2spludwick())  heythanks(); +						break; +					case pibythneth: +						if (thing == badge) { +							dixi('q', 32); /* Thanks! Wow! */ +							points(3); +							dna.obj[badge] = false; +							dna.obj[habit] = true; +							dna.givenbadgetoiby = true; +							show_one(8); +							show_one(9); +						} else heythanks(); +						break; +					case payles: +						if (dna.ayles_is_awake) { +							if (thing == pen) { +								dna.obj[pen] = false; +								dixi('q', 54); +								dna.obj[ink] = true; +								dna.given_pen_to_ayles = true; +								objectlist; +								points(2); +							} else heythanks(); +						} else +							display("But he's asleep!"); +						break; +					case pgeida: +						switch (thing) { +						case potion : { +							dna.obj[potion] = false; +							dixi('u', 16); /* She drinks it. */ +							points(2); +							dna.geida_given_potion = true; +							objectlist; +						} +						break; +						case lute: +							give_geida_the_lute(); +							break; +						default: +							heythanks(); +						} +						break; +					case parkata: +						switch (thing) { +						case potion: +							if (dna.geida_given_potion) +								winsequence(); +							else dixi('q', 77); +							break;             /* That Geida woman! */ +						default: +							heythanks(); +						} +						break; +					default: +						heythanks(); +					} +				} +			} +			objectlist; /* Just in case... */ +		} +		break; + +	case vb_eat: +	case vb_drink: +		if (holding())  swallow(); +		break; +	case vb_load: +		edna_load(realwords[2]); +		break; +	case vb_save: +		if (alive)  edna_save(realwords[2]); +		else display("It's a bit late now to save your game!"); +		break; +	case vb_pay: +		display("No money need change hands."); +		break; +	case vb_look: +		lookaround(); +		break; +	case vb_break: +		display("Vandalism is prohibited within this game!"); +		break; +	case vb_quit: { /* quit */ +		if (demo) { +			dixi('q', 31); +			close(demofile); +			exit(0); /* Change this later!!! */ +		} +		if (! polite)  display("How about a `please\", Avvy?"); +		else if (ask("\23C\26Do you really want to quit?"))  lmo = true; +	} +	break; +	case vb_go: +		display("Just use the arrow keys to walk there."); +		break; +	case vb_info: { +		aboutscroll = true; +		/*            display('Thorsoft of Letchworth presents:'+^c+^m+^m+ +		             'The medi‘val descendant of'+^m+ +		             'Denarius Avaricius Sextus'+^m+'in:'+ +		             ^m+^m+'LORD AVALOT D''ARGENT'+ +		             ^m+'version '+vernum+^m+^m+'Copyright ï ' +		             +copyright+', Mark, Mike and Thomas Thurman.');*/ +		display(string("\r\r\r\r\r\r\r") + "LORD AVALOT D'ARGENT" + "\3\r" + +		        "The medi‘val descendant of" + '\15' + +		        "Denarius Avaricius Sextus" + +		        '\15' + '\15' + "version " + vernum + '\15' + '\15' + "Copyright ï " +		        + copyright + ", Mark, Mike and Thomas Thurman." + '\23' + 'Y' + '\26'); +		aboutscroll = false; +	} +	break; +	case vb_undress: +		if (dna.wearing == nowt)  display("You're already stark naked!"); +		else if (dna.avvys_in_the_cupboard) { +			display(string("You take off ") + get_better(dna.wearing) + '.'); +			dna.wearing = nowt; +			objectlist; +		} else +			display("Hadn't you better find somewhere more private, Avvy?"); +		break; +	case vb_wear: +		if (holding()) { +			/* wear something */ +			switch (thing) { +			case chastity: +				display("Hey, what kind of a weirdo are you\??!"); +				break; +			case clothes: +			case habit: { /* Change this! */ +				if (dna.wearing != nowt) { +					if (dna.wearing == thing) +						display("You're already wearing that."); +					else +						display(string("You'll be rather warm wearing two ") + +						        "sets of clothes!"); +					return; +				} else +					dna.wearing = thing; +				objectlist; +				if (thing == habit)  fv = 3; +				else fv = 0; +				{ +					void &with = tr[1]; +					if (whichsprite != fv) { +						sx = tr[1].x; +						sy = tr[1].y; +						done; +						init(fv, true); +						appear(sx, sy, left); +						tr[1].visible = false; +					} +				} +			} +			break; +			default: +				display(what); +			} +		} +		break; +	case vb_play: +		if (thing == pardon) +			switch (dna.room) { /* They just typed "play"... */ +			case r__argentpub: +				play_nim; +				break; /* ...in the pub, => play Nim. */ +			case r__musicroom: +				play_harp(); +				break; +			} +		else if (holding()) { +			switch (thing) { +			case lute : { +				dixi('U', 7); +				if (whereis[pcwytalot] == dna.room)  dixi('U', 10); +				if (whereis[pdulustie] == dna.room)  dixi('U', 15); +			} +			break; +			case '\64' : +				if (dna.room == r__musicroom)  play_harp(); +				else display(what); +				break; +			case '\67' : +				if (dna.room == r__argentpub)  play_nim; +				else display(what); +				break; +			default: +				display(what); +			} +		} +		break; +	case vb_ring: +		if (holding()) { +			if (thing == bell) { +				display("Ding, dong, ding, dong, ding, dong, ding, dong..."); +				if ((dna.ringing_bells) & (flagset('B'))) +					display("(Are you trying to join in, Avvy\?\?!)"); +			} else display(what); +		} +		break; +	case vb_help: +		boot_help; +		break; +	case vb_larrypass: +		display("Wrong game!"); +		break; +	case vb_phaon: +		display("Hello, Phaon!"); +		break; +	case vb_boss: +		bosskey; +		break; +	case vb_pee: +		if (flagset('P')) { +			display("Hmm, I don't think anyone will notice..."); +			set_up_timer(4, procurinate, reason_gototoilet); +		} else display("It would be \6VERY\22 unwise to do that here, Avvy!"); +		break; +	case vb_cheat: { +		display(string('\6') + "Cheat mode now enabled."); +		cheat = true; +	} +	break; +	case vb_magic: +		if (dna.avaricius_talk > 0) +			dixi('q', 19); +		else { +			if ((dna.room == 12) & (infield(2))) { +				/* Avaricius appears! */ +				dixi('q', 17); +				if (whereis['\227'] == 12) +					dixi('q', 18); +				else { +					tr[2].init(1, false); /* Avaricius */ +					apped(2, 4); +					tr[2].walkto(5); +					tr[2].call_eachstep = true; +					tr[2].eachstep = procback_and_forth; +					dna.avaricius_talk = 14; +					set_up_timer(177, procavaricius_talks, reason_avariciustalks); +				} +			} else display("Nothing appears to happen..."); +		} +		break; +	case vb_smartalec: +		display("Listen, smart alec, that was just rhetoric."); +		break; +	case vb_expletive: { +		switch (swore) { +		case 0: +			display(string("Avvy! Do you mind? There might be kids playing!\r\r") + +			        "(I shouldn't say it again, if I were you!)"); +			break; +		case 1: +			display(string("You hear a distant rumble of thunder. Must you always ") + +			        "do things I tell you not to?\r\rDon't do it again!"); +			break; +		default: { +			zonk; +			display(string("A crack of lightning shoots from the sky, ") + +			        "and fries you.\r\r(`Such is the anger of the gods, Avvy!\")"); +			gameover; +		} +		} +		swore += 1; +	} +	break; +	case vb_listen: +		if ((dna.ringing_bells) & (flagset('B'))) +			display(string("All other noise is drowned out by the ringing of ") + +			        "the bells."); +		else if (listen == "") +			display("You can't hear anything much at the moment, Avvy."); +		else display(listen); +		break; +	case vb_buy: { +		/* What are they trying to buy? */ +		switch (dna.room) { +		case r__argentpub: +			if (infield(6)) { +				/* We're in a pub, and near the bar. */ +				switch (thing) { +				case '\63': +				case '\65': +				case '\66': +				case '\72': { /* Beer, whisky, cider or mead */ +					if (dna.malagauche == 177) { /* Already getting us one. */ +						dixi('D', 15); +						return; +					} +					if (dna.teetotal)  { +						dixi('D', 6); +						return; +					} +					if (dna.alcohol == 0)  points(3); +					show_one(12); +					display(booze[thing] + ", please.\231\2"); +					dna.drinking = thing; + +					show_one(10); +					dna.malagauche = 177; +					set_up_timer(27, procbuydrinks, reason_drinks); +				} +				break; +				case '\64': +					examine(); +					break; /* We have a right one here- buy Pepsi??! */ +				case wine: +					if (dna.obj[wine])  /* We've already got the wine! */ +						dixi('D', 2); /* 1 bottle's shufishent! */ +					else { +						if (dna.malagauche == 177) { /* Already getting us one. */ +							dixi('D', 15); +							return; +						} +						if (dna.carrying >= maxobjs) { +							display("Your hands are full."); +							return; +						} +						show_one(12); +						display("Wine, please.\231\2"); +						if (dna.alcohol == 0)  points(3); +						show_one(10); +						dna.malagauche = 177; + +						set_up_timer(27, procbuywine, reason_drinks); +					} +					break; +				} +			} else dixi('D', 5); +			break;                /* Go to the bar! */ + +		case r__outsideducks: +			if (infield(6)) { +				if (thing == onion) { +					if (dna.obj[onion]) +						dixi('D', 10); /* not planning to juggle with the things! */ +					else if (dna.carrying >= maxobjs) +						display("Before you ask, you remember that your hands are full."); +					else { +						if (dna.bought_onion) +							dixi('D', 11); +						else { +							dixi('D', 9); +							points(3); +						} +						pennycheck(3); /* It costs thruppence. */ +						dna.obj[onion] = true; +						objectlist; +						dna.bought_onion = true; +						dna.rotten_onion = false; /* It's OK when it leaves the stall! */ +						dna.onion_in_vinegar = false; +					} +				} else dixi('D', 0); +			} else dixi('D', 0); +			break; + +		case r__nottspub: +			dixi('n', 15); +			break; /* Can't sell to southerners. */ +		default: +			dixi('D', 0); /* Can't buy that. */ +		} +	} +	break; +	case vb_attack: { +		if ((dna.room == r__brummieroad) && +		        ((person == '\235') || (thing == crossbow) || (thing == bolt)) +		        && (whereis['\235'] == dna.room)) { +			switch (ord(dna.obj[bolt]) + ord(dna.obj[crossbow]) * 2) { +				/* 0 = neither, 1 = only bolt, 2 = only crossbow, +				  3 = both. */ +			case 0: { +				dixi('Q', 10); +				display("(At the very least, don't use your bare hands!)"); +			} +			break; +			case 1: +				display(string("Attack him with only a crossbow bolt? Are you ") + +				        "planning on playing darts?!"); +				break; +			case 2: +				display(string("Come on, Avvy! You're not going to get very far ") + +				        "with only a crossbow!"); +				break; +			case 3: { +				dixi('Q', 11); +				dna.cwytalot_gone = true; +				dna.obj[bolt] = false; +				dna.obj[crossbow] = false; +				objectlist; +				magics[12].op = nix; +				points(7); +				tr[2].walkto(2); +				tr[2].vanishifstill = true; +				tr[2].call_eachstep = false; +				whereis['\235'] = 177; +			} +			break; +			default: +				dixi('Q', 10); /* Please try not to be so violent! */ +			} +		} else dixi('Q', 10); +	} +	break; +	case vb_password: +		if (dna.room != r__bridge) +			dixi('Q', 12); +		else { +			ok = true; +			for (ff = 1; ff <= length(thats); ff ++) +				for (fv = 1; fv <= length(words[dna.pass_num + first_password].w); fv ++) +					if (words[dna.pass_num + first_password].w[fv] != +					        upcase(realwords[ff][fv])) +						ok = false; +			if (ok) { +				if (dna.drawbridge_open != 0) +					display("Contrary to your expectations, the drawbridge fails to close again."); +				else { +					points(4); +					display("The drawbridge opens!"); +					set_up_timer(7, procopen_drawbridge, reason_drawbridgefalls); +					dna.drawbridge_open = 1; +				} +			} else dixi('Q', 12); +		} +		break; +	case vb_dir: +		dir(realwords[2]); +		break; +	case vb_die: +		gameover; +		break; +	case vb_score: +		display(string("Your score is ") + strf(dna.score) + ",\3\rout of a " + +		        "possible 128.\r\rThis gives you a rank of " + rank() + +		        ".\r\r" + totaltime()); +		break; +	case vb_put: +		putproc(); +		break; +	case vb_stand: +		stand_up(); +		break; + +	case vb_kiss: +		if (person == pardon) +			display("Kiss whom?"); +		else if (personshere()) +			switch (person) { +			case '\226' ... '\256': +				display("Hey, what kind of a weirdo are you??"); +				break; +			case parkata: +				dixi('U', 12); +				break; +			case pgeida: +				dixi('U', 13); +				break; +			case pwisewoman: +				dixi('U', 14); +				break; +			default: +				dixi('U', 5); /* You WHAT? */ +			} +		break; + +	case vb_climb: +		if (dna.room == r__insidecardiffcastle)  cardiff_climbing(); +		else /* In the wrong room! */ +			display("Not with your head for heights, Avvy!"); +		break; + +	case vb_jump: { +		set_up_timer(1, procjump, reason_jumping); +		dna.user_moves_avvy = false; +	} +	break; + +	case vb_highscores: +		show_highs; +		break; + +	case vb_wake: +		if (personshere()) +			switch (person) { +			case pardon: +			case pavalot: +			case '\0': +				if (~ avvy_is_awake) { +					avvy_is_awake = true; +					points(1); +					avvy_in_bed = true; +					show_one(3); /* Picture of Avvy, awake in bed. */ +					if (teetotal)  dixi('d', 13); +				} else display("You're already awake, Avvy!"); +				break; +			case payles: +				if (~ ayles_is_awake)  display("You can't seem to wake him by yourself."); +				break; +			case pjacques: +				display(string("Brother Jacques, Brother Jacques, are you asleep?\231\2") + +				        "Hmmm... that doesn't seem to do any good..."); +				break; +			default: +				display("It's difficult to awaken people who aren't asleep...!"); +			} +		break; + +	case vb_sit: +		if (dna.room == r__nottspub) { +			if (dna.sitting_in_pub) +				display("You're already sitting!"); +			else { +				tr[1].walkto(4); /* Move Avvy to the place, and sit him down. */ +				set_up_timer(1, procavvy_sit_down, reason_sitting_down); +			} +		} else { +			/* Default doodah. */ +			dusk; +			hang_around_for_a_while; +			dawn; +			display("A few hours later...\20nothing much has happened..."); +		} +		break; + +	case vb_restart: +		if (ask("Restart game and lose changes?"))  { +			dusk; +			newgame; +			dawn; +		} +		break; + +	case pardon: +		display("Hey, a verb would be helpful!"); +		break; + +	case vb_hello: { +		person_speaks(); +		display("Hello.\2"); +	} +	break; +	case vb_thanks: { +		person_speaks(); +		display("That's OK.\2"); +	} +	break; +	default: +		display(string('\7') + "Parser bug!"); +	}  } -void verbopt(char n, string& answer, char& anskey) -{ - switch (n) { -   case vb_exam: { answer="Examine"; anskey='x'; } break; /* the ubiqutous one */ -   /* vb_give isn't dealt with by this procedure, but by ddm__with */ -  case vb_drink: { answer="Drink";   anskey='D'; } break; -  case vb_wear:  { answer="Wear";    anskey='W'; } break; -  case vb_ring:  { answer="Ring";    anskey='R'; } break; /* only the bell! */ -  case vb_play:  { answer="Play";    anskey='P'; } break; -  case vb_eat:   { answer="Eat";     anskey='E'; } break; -  default:      { answer="? Unknown!"; anskey='?'; }      /* Bug! */ - } +void verbopt(char n, string &answer, char &anskey) { +	switch (n) { +	case vb_exam: { +		answer = "Examine"; +		anskey = 'x'; +	} +	break; /* the ubiqutous one */ +	/* vb_give isn't dealt with by this procedure, but by ddm__with */ +	case vb_drink: { +		answer = "Drink"; +		anskey = 'D'; +	} +	break; +	case vb_wear:  { +		answer = "Wear"; +		anskey = 'W'; +	} +	break; +	case vb_ring:  { +		answer = "Ring"; +		anskey = 'R'; +	} +	break; /* only the bell! */ +	case vb_play:  { +		answer = "Play"; +		anskey = 'P'; +	} +	break; +	case vb_eat:   { +		answer = "Eat"; +		anskey = 'E'; +	} +	break; +	default:      { +		answer = "? Unknown!";    /* Bug! */ +		anskey = '?'; +	} +	}  }  class unit_acci_initialize { -  public: unit_acci_initialize(); +public: +	unit_acci_initialize();  };  static unit_acci_initialize acci_constructor;  unit_acci_initialize::unit_acci_initialize() { - weirdword=false; +	weirdword = false;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/acci.h b/engines/avalanche/acci.h index 6734f6658e..c80f09d9b9 100644 --- a/engines/avalanche/acci.h +++ b/engines/avalanche/acci.h @@ -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 @@ -31,28 +31,67 @@  namespace Avalanche {  /* verb codes */ -const char vb_exam = '\1'; const char vb_open = '\2'; const char vb_pause = '\3'; const char vb_get = '\4'; const char vb_drop = '\5'; -const char vb_inv = '\6'; const char vb_talk = '\7'; const char vb_give = '\10'; const char vb_drink = '\11'; const char vb_load = '\12'; -const char vb_save = '\13'; const char vb_pay = '\14'; const char vb_look = '\15'; const char vb_break = '\16'; const char vb_quit = '\17'; -const char vb_sit = '\20'; const char vb_stand = '\21'; const char vb_go = '\22'; const char vb_info = '\23'; const char vb_undress = '\24'; -const char vb_wear = '\25'; const char vb_play = '\26'; const char vb_ring = '\27'; const char vb_help = '\30'; -const char vb_larrypass = '\31'; const char vb_phaon = '\32'; const char vb_boss = '\33'; const char vb_pee = '\34'; -const char vb_cheat = '\35'; const char vb_magic = '\36'; const char vb_restart = '\37'; const char vb_eat = '\40'; -const char vb_listen = '\41'; const char vb_buy = '\42'; const char vb_attack = '\43'; const char vb_password = '\44'; -const char vb_dir = '\45'; const char vb_die = '\46'; const char vb_score = '\47'; const char vb_put = '\50'; -const char vb_kiss = '\51'; const char vb_climb = '\52'; const char vb_jump = '\53'; const char vb_highscores = '\54'; -const char vb_wake = '\55'; const char vb_hello = '\56'; const char vb_thanks = '\57'; - -const char vb_smartalec = '\371'; const char vb_expletive = '\375'; +const char vb_exam = '\1'; +const char vb_open = '\2'; +const char vb_pause = '\3'; +const char vb_get = '\4'; +const char vb_drop = '\5'; +const char vb_inv = '\6'; +const char vb_talk = '\7'; +const char vb_give = '\10'; +const char vb_drink = '\11'; +const char vb_load = '\12'; +const char vb_save = '\13'; +const char vb_pay = '\14'; +const char vb_look = '\15'; +const char vb_break = '\16'; +const char vb_quit = '\17'; +const char vb_sit = '\20'; +const char vb_stand = '\21'; +const char vb_go = '\22'; +const char vb_info = '\23'; +const char vb_undress = '\24'; +const char vb_wear = '\25'; +const char vb_play = '\26'; +const char vb_ring = '\27'; +const char vb_help = '\30'; +const char vb_larrypass = '\31'; +const char vb_phaon = '\32'; +const char vb_boss = '\33'; +const char vb_pee = '\34'; +const char vb_cheat = '\35'; +const char vb_magic = '\36'; +const char vb_restart = '\37'; +const char vb_eat = '\40'; +const char vb_listen = '\41'; +const char vb_buy = '\42'; +const char vb_attack = '\43'; +const char vb_password = '\44'; +const char vb_dir = '\45'; +const char vb_die = '\46'; +const char vb_score = '\47'; +const char vb_put = '\50'; +const char vb_kiss = '\51'; +const char vb_climb = '\52'; +const char vb_jump = '\53'; +const char vb_highscores = '\54'; +const char vb_wake = '\55'; +const char vb_hello = '\56'; +const char vb_thanks = '\57'; + +const char vb_smartalec = '\371'; +const char vb_expletive = '\375';  const char pardon = '\376'; /* =didn't understand / wasn't given. */  struct vocab { -         byte n; varying_string<11> w; +	byte n; +	varying_string<11> w;  };  struct ranktype { -            word score; varying_string<12> title; +	word score; +	varying_string<12> title;  }; @@ -63,167 +102,171 @@ const char moved = '\0'; /* This word was moved. (Usually because it was the sub  const integer first_password = 89; /* Words[first_password] should equal "TIROS". */ -const array<1,nowords,vocab> words =  - -/* Verbs, 1-49 */ -{{{1, "EXAMINE"},   {1, "READ"},      {1, "XAM"},                  /* short */ - {2, "OPEN"},      {2, "LEAVE"},     {2, "UNLOCK"}, - {3, "PAUSE"},     {47, "TA"},            /* Early to avoid Take and Talk. */ - {4, "TAKE"},      {4, "GET"},       {4, "PICK"}, - {5, "DROP"},      {6, "INVENTORY"}, {7, "TALK"}, - {7, "SAY"},       {7, "ASK"}, - {8, "GIVE"},      {9, "DRINK"},     {9, "IMBIBE"}, - {9, "DRAIN"},     {10, "LOAD"},      {10, "RESTORE"}, - {11, "SAVE"},      {12, "BRIBE"},     {12, "PAY"}, - {13, "LOOK"},      {14, "BREAK"},     {15, "QUIT"}, - {15, "EXIT"},      {16, "SIT"},       {16, "SLEEP"}, - {17, "STAND"}, - - {18, "GO"},        {19, "INFO"},      {20, "UNDRESS"}, - {20, "DOFF"}, - {21, "DRESS"},     {21, "WEAR"},      {21, "DON"}, - {22, "PLAY"}, - {22, "STRUM"},     {23, "RING"},      {24, "HELP"}, - {25, "KENDAL"},    {26, "CAPYBARA"},  {27, "BOSS"}, - {255,"NINET"},     /* block for NINETY */ - {28, "URINATE"},   {28, "MINGITE"},   {29, "NINETY"}, - {30,"ABRACADABRA"},{30, "PLUGH"},     {30, "XYZZY"}, - {30, "HOCUS"},     {30, "POCUS"},     {30, "IZZY"}, - {30, "WIZZY"},     {30, "PLOVER"}, - {30,"MELENKURION"},{30, "ZORTON"},    {30, "BLERBI"}, - {30, "THURB"},     {30, "SNOEZE"},    {30, "SAMOHT"}, - {30, "NOSIDE"},    {30, "PHUGGG"},    {30, "KNERL"}, - {30, "MAGIC"},     {30, "KLAETU"},    {30, "VODEL"}, - {30, "BONESCROLLS"},{30, "RADOF"}, - - {31, "RESTART"}, - {32, "SWALLOW"},   {32, "EAT"},       {33, "LISTEN"}, - {33, "HEAR"},      {34, "BUY"},       {34, "PURCHASE"}, - {34, "ORDER"},     {34, "DEMAND"}, - {35, "ATTACK"},    {35, "HIT"},       {35, "KILL"}, - {35, "PUNCH"},     {35, "KICK"},      {35, "SHOOT"}, - {35, "FIRE"}, - - /* Passwords, 36: */ - - {36, "TIROS"},     {36, "WORDY"},     {36, "STACK"}, - {36, "SHADOW"},    {36, "OWL"},       {36, "ACORN"}, - {36, "DOMESDAY"},  {36, "FLOPPY"},    {36, "DIODE"}, - {36, "FIELD"},     {36, "COWSLIP"},   {36, "OSBYTE"}, - {36, "OSCLI"},     {36, "TIMBER"},    {36, "ADVAL"}, - {36, "NEUTRON"},   {36, "POSITRON"},  {36, "ELECTRON"}, - {36, "CIRCUIT"},   {36, "AURUM"},     {36, "PETRIFY"}, - {36, "EBBY"},      {36, "CATAPULT"},  {36, "GAMERS"}, - {36, "FUDGE"},     {36, "CANDLE"},    {36, "BEEB"}, - {36, "MICRO"},     {36, "SESAME"},    {36, "LORDSHIP"}, - - {37, "DIR"},       {37, "LS"},        {38, "DIE"}, - {39, "SCORE"}, - {40, "PUT"},       {40, "INSERT"},    {41, "KISS"}, - {41, "SNOG"},      {41, "CUDDLE"},    {42, "CLIMB"}, - {42, "CLAMBER"},   {43, "JUMP"},      {44, "HIGHSCORES"}, - {44, "HISCORES"},  {45, "WAKEN"},     {45, "AWAKEN"}, - {46, "HELLO"},     {46, "HI"},        {46, "YO"}, - {47, "THANKS"},       /* = 47, "ta", which was defined earlier. */ - - -/* Nouns - Objects: 50-100. */ - - {50, "WINE"},      {50, "BOOZE"},    {50,"NASTY"}, - {50, "VINEGAR"},   {51, "MONEYBAG"}, - {51, "BAG"},       {51, "CASH"},     {51,"DOSH"}, - {51, "WALLET"}, - {52, "BODKIN"},    {52, "DAGGER"},   {53,"POTION"}, - {54, "CHASTITY"},  {54, "BELT"},     {55,"BOLT"}, - {55, "ARROW"},     {55, "DART"}, - {56, "CROSSBOW"},  {56, "BOW"},      {57,"LUTE"}, - {58, "PILGRIM"},   {58, "BADGE"},    {59,"MUSHROOMS"}, - {59, "TOADSTOOLS"},{60, "KEY"},      {61,"BELL"}, - {62, "PRESCRIPT"}, {62, "SCROLL"},   {62,"MESSAGE"}, - {63, "PEN"},       {63, "QUILL"},    {64,"INK"}, - {64, "INKPOT"},    {65, "CLOTHES"},  {66,"HABIT"}, - {66, "DISGUISE"},  {67, "ONION"}, - - {99,"PASSWORD"}, - -/* Objects from Also are placed between 101 and 131. */ - -/* Nouns - People - Male, 150-174 */ - {150, "AVVY"},      {150,"AVALOT"},    {150,"YOURSELF"}, - {150, "ME"},        {150,"MYSELF"},    {151,"SPLUDWICK"}, - {151, "THOMAS"},    {151,"ALCHEMIST"}, {151,"CHEMIST"}, - {152, "CRAPULUS"},  {152,"SERF"},      {152,"SLAVE"}, - {158, "DU"},      /* <<< Put in early for Baron DU Lustie to save confusion with Duck & Duke.*/ - {152, "CRAPPY"},    {153,"DUCK"},      {153,"DOCTOR"}, - {154, "MALAGAUCHE"}, - {155, "FRIAR"},     {155,"TUCK"},      {156,"ROBIN"}, - {156, "HOOD"},      {157,"CWYTALOT"},  {157,"GUARD"}, - {157, "BRIDGEKEEP"},{158,"BARON"},     {158,"LUSTIE"}, - {159, "DUKE"},      {159,"GRACE"},     {160,"DOGFOOD"}, - {160, "MINSTREL"},  {161,"TRADER"},    {161,"SHOPKEEPER"}, - {161,"STALLHOLDER"}, - {162, "PILGRIM"},   {162,"IBYTHNETH"}, {163,"ABBOT"}, - {163, "AYLES"},     {164,"PORT"},      {165,"SPURGE"}, - {166, "JACQUES"},   {166,"SLEEPER"},   {166,"RINGER"}, - -/* Nouns- People - Female: 175-199 */ - {175, "WIFE"},      {175,"ARKATA"},    {176,"GEDALODAVA"}, - {176, "GEIDA"},     {176,"PRINCESS"},  {178,"WISE"}, - {178, "WITCH"}, - -/* Pronouns, 200-224 */ - {200, "HIM"},       {200,"MAN"},       {200,"GUY"}, - {200, "DUDE"},      {200,"CHAP"},      {200,"FELLOW"}, - {201, "HER"},       {201,"GIRL"},      {201,"WOMAN"}, - {202, "IT"},        {202,"THING"}, - - {203,"MONK"},       {204,"BARMAN"},    {204,"BARTENDER"}, - -/* Prepositions, 225-249 */ - {225, "TO"},        {226,"AT"},        {227,"UP"}, - {228, "INTO"},      {228,"INSIDE"},    {229,"OFF"}, - {230, "UP"},        {231,"DOWN"},      {232,"ON"}, - - -/* Please, 251 */ - {251, "PLEASE"}, - -/* About, 252 */ - {252, "ABOUT"}, {252, "CONCERNING"}, - -/* Swear words, 253 */ -       /*              I M P O R T A N T    M E S S A G E - -          DO *NOT* READ THE LINES BELOW IF YOU ARE OF A SENSITIVE -          DISPOSITION. THOMAS IS *NOT* RESPONSIBLE FOR THEM. -          GOODNESS KNOWS WHO WROTE THEM. -          READ THEM AT YOUR OWN RISK. BETTER STILL, DON'T READ THEM. -          WHY ARE YOU SNOOPING AROUND IN MY PROGRAM, ANYWAY? */ - - {253, "SHIT"},      {28 ,"PISS"},    {28 ,"PEE"}, - {253, "FART"},      {253,"FUCK"},    {253,"BALLS"}, - {253, "BLAST"},     {253,"BUGGER"},  {253,"KNICKERS"}, - {253, "BLOODY"},    {253,"HELL"},    {253,"DAMN"}, - {253, "SMEG"}, -   /* and other even ruder words. You didn't read them, did you? Good. */ - -/* Answer-back smart-alec words, 249 */ - {249, "YES"},       {249,"NO"},        {249,"BECAUSE"}, - -/* Noise words, 255 */ - {255, "THE"},       {255,'A'},         {255,"NOW"}, - {255, "SOME"},      {255,"AND"},       {255,"THAT"}, - {255, "POCUS"},     {255,"HIS"},        - {255, "THIS"},      {255,"SENTINEL"}}};        /* for "Ken SENT Me" */ +const array<1, nowords, vocab> words = + +    /* Verbs, 1-49 */ +{	{	{1, "EXAMINE"},   {1, "READ"},      {1, "XAM"},                  /* short */ +		{2, "OPEN"},      {2, "LEAVE"},     {2, "UNLOCK"}, +		{3, "PAUSE"},     {47, "TA"},            /* Early to avoid Take and Talk. */ +		{4, "TAKE"},      {4, "GET"},       {4, "PICK"}, +		{5, "DROP"},      {6, "INVENTORY"}, {7, "TALK"}, +		{7, "SAY"},       {7, "ASK"}, +		{8, "GIVE"},      {9, "DRINK"},     {9, "IMBIBE"}, +		{9, "DRAIN"},     {10, "LOAD"},      {10, "RESTORE"}, +		{11, "SAVE"},      {12, "BRIBE"},     {12, "PAY"}, +		{13, "LOOK"},      {14, "BREAK"},     {15, "QUIT"}, +		{15, "EXIT"},      {16, "SIT"},       {16, "SLEEP"}, +		{17, "STAND"}, + +		{18, "GO"},        {19, "INFO"},      {20, "UNDRESS"}, +		{20, "DOFF"}, +		{21, "DRESS"},     {21, "WEAR"},      {21, "DON"}, +		{22, "PLAY"}, +		{22, "STRUM"},     {23, "RING"},      {24, "HELP"}, +		{25, "KENDAL"},    {26, "CAPYBARA"},  {27, "BOSS"}, +		{255, "NINET"},    /* block for NINETY */ +		{28, "URINATE"},   {28, "MINGITE"},   {29, "NINETY"}, +		{30, "ABRACADABRA"}, {30, "PLUGH"},     {30, "XYZZY"}, +		{30, "HOCUS"},     {30, "POCUS"},     {30, "IZZY"}, +		{30, "WIZZY"},     {30, "PLOVER"}, +		{30, "MELENKURION"}, {30, "ZORTON"},    {30, "BLERBI"}, +		{30, "THURB"},     {30, "SNOEZE"},    {30, "SAMOHT"}, +		{30, "NOSIDE"},    {30, "PHUGGG"},    {30, "KNERL"}, +		{30, "MAGIC"},     {30, "KLAETU"},    {30, "VODEL"}, +		{30, "BONESCROLLS"}, {30, "RADOF"}, + +		{31, "RESTART"}, +		{32, "SWALLOW"},   {32, "EAT"},       {33, "LISTEN"}, +		{33, "HEAR"},      {34, "BUY"},       {34, "PURCHASE"}, +		{34, "ORDER"},     {34, "DEMAND"}, +		{35, "ATTACK"},    {35, "HIT"},       {35, "KILL"}, +		{35, "PUNCH"},     {35, "KICK"},      {35, "SHOOT"}, +		{35, "FIRE"}, + +		/* Passwords, 36: */ + +		{36, "TIROS"},     {36, "WORDY"},     {36, "STACK"}, +		{36, "SHADOW"},    {36, "OWL"},       {36, "ACORN"}, +		{36, "DOMESDAY"},  {36, "FLOPPY"},    {36, "DIODE"}, +		{36, "FIELD"},     {36, "COWSLIP"},   {36, "OSBYTE"}, +		{36, "OSCLI"},     {36, "TIMBER"},    {36, "ADVAL"}, +		{36, "NEUTRON"},   {36, "POSITRON"},  {36, "ELECTRON"}, +		{36, "CIRCUIT"},   {36, "AURUM"},     {36, "PETRIFY"}, +		{36, "EBBY"},      {36, "CATAPULT"},  {36, "GAMERS"}, +		{36, "FUDGE"},     {36, "CANDLE"},    {36, "BEEB"}, +		{36, "MICRO"},     {36, "SESAME"},    {36, "LORDSHIP"}, + +		{37, "DIR"},       {37, "LS"},        {38, "DIE"}, +		{39, "SCORE"}, +		{40, "PUT"},       {40, "INSERT"},    {41, "KISS"}, +		{41, "SNOG"},      {41, "CUDDLE"},    {42, "CLIMB"}, +		{42, "CLAMBER"},   {43, "JUMP"},      {44, "HIGHSCORES"}, +		{44, "HISCORES"},  {45, "WAKEN"},     {45, "AWAKEN"}, +		{46, "HELLO"},     {46, "HI"},        {46, "YO"}, +		{47, "THANKS"},       /* = 47, "ta", which was defined earlier. */ + + +		/* Nouns - Objects: 50-100. */ + +		{50, "WINE"},      {50, "BOOZE"},    {50, "NASTY"}, +		{50, "VINEGAR"},   {51, "MONEYBAG"}, +		{51, "BAG"},       {51, "CASH"},     {51, "DOSH"}, +		{51, "WALLET"}, +		{52, "BODKIN"},    {52, "DAGGER"},   {53, "POTION"}, +		{54, "CHASTITY"},  {54, "BELT"},     {55, "BOLT"}, +		{55, "ARROW"},     {55, "DART"}, +		{56, "CROSSBOW"},  {56, "BOW"},      {57, "LUTE"}, +		{58, "PILGRIM"},   {58, "BADGE"},    {59, "MUSHROOMS"}, +		{59, "TOADSTOOLS"}, {60, "KEY"},      {61, "BELL"}, +		{62, "PRESCRIPT"}, {62, "SCROLL"},   {62, "MESSAGE"}, +		{63, "PEN"},       {63, "QUILL"},    {64, "INK"}, +		{64, "INKPOT"},    {65, "CLOTHES"},  {66, "HABIT"}, +		{66, "DISGUISE"},  {67, "ONION"}, + +		{99, "PASSWORD"}, + +		/* Objects from Also are placed between 101 and 131. */ + +		/* Nouns - People - Male, 150-174 */ +		{150, "AVVY"},      {150, "AVALOT"},    {150, "YOURSELF"}, +		{150, "ME"},        {150, "MYSELF"},    {151, "SPLUDWICK"}, +		{151, "THOMAS"},    {151, "ALCHEMIST"}, {151, "CHEMIST"}, +		{152, "CRAPULUS"},  {152, "SERF"},      {152, "SLAVE"}, +		{158, "DU"},      /* <<< Put in early for Baron DU Lustie to save confusion with Duck & Duke.*/ +		{152, "CRAPPY"},    {153, "DUCK"},      {153, "DOCTOR"}, +		{154, "MALAGAUCHE"}, +		{155, "FRIAR"},     {155, "TUCK"},      {156, "ROBIN"}, +		{156, "HOOD"},      {157, "CWYTALOT"},  {157, "GUARD"}, +		{157, "BRIDGEKEEP"}, {158, "BARON"},     {158, "LUSTIE"}, +		{159, "DUKE"},      {159, "GRACE"},     {160, "DOGFOOD"}, +		{160, "MINSTREL"},  {161, "TRADER"},    {161, "SHOPKEEPER"}, +		{161, "STALLHOLDER"}, +		{162, "PILGRIM"},   {162, "IBYTHNETH"}, {163, "ABBOT"}, +		{163, "AYLES"},     {164, "PORT"},      {165, "SPURGE"}, +		{166, "JACQUES"},   {166, "SLEEPER"},   {166, "RINGER"}, + +		/* Nouns- People - Female: 175-199 */ +		{175, "WIFE"},      {175, "ARKATA"},    {176, "GEDALODAVA"}, +		{176, "GEIDA"},     {176, "PRINCESS"},  {178, "WISE"}, +		{178, "WITCH"}, + +		/* Pronouns, 200-224 */ +		{200, "HIM"},       {200, "MAN"},       {200, "GUY"}, +		{200, "DUDE"},      {200, "CHAP"},      {200, "FELLOW"}, +		{201, "HER"},       {201, "GIRL"},      {201, "WOMAN"}, +		{202, "IT"},        {202, "THING"}, + +		{203, "MONK"},       {204, "BARMAN"},    {204, "BARTENDER"}, + +		/* Prepositions, 225-249 */ +		{225, "TO"},        {226, "AT"},        {227, "UP"}, +		{228, "INTO"},      {228, "INSIDE"},    {229, "OFF"}, +		{230, "UP"},        {231, "DOWN"},      {232, "ON"}, + + +		/* Please, 251 */ +		{251, "PLEASE"}, + +		/* About, 252 */ +		{252, "ABOUT"}, {252, "CONCERNING"}, + +		/* Swear words, 253 */ +		/*              I M P O R T A N T    M E S S A G E + +		   DO *NOT* READ THE LINES BELOW IF YOU ARE OF A SENSITIVE +		   DISPOSITION. THOMAS IS *NOT* RESPONSIBLE FOR THEM. +		   GOODNESS KNOWS WHO WROTE THEM. +		   READ THEM AT YOUR OWN RISK. BETTER STILL, DON'T READ THEM. +		   WHY ARE YOU SNOOPING AROUND IN MY PROGRAM, ANYWAY? */ + +		{253, "SHIT"},      {28 , "PISS"},    {28 , "PEE"}, +		{253, "FART"},      {253, "FUCK"},    {253, "BALLS"}, +		{253, "BLAST"},     {253, "BUGGER"},  {253, "KNICKERS"}, +		{253, "BLOODY"},    {253, "HELL"},    {253, "DAMN"}, +		{253, "SMEG"}, +		/* and other even ruder words. You didn't read them, did you? Good. */ + +		/* Answer-back smart-alec words, 249 */ +		{249, "YES"},       {249, "NO"},        {249, "BECAUSE"}, + +		/* Noise words, 255 */ +		{255, "THE"},       {255, 'A'},         {255, "NOW"}, +		{255, "SOME"},      {255, "AND"},       {255, "THAT"}, +		{255, "POCUS"},     {255, "HIS"}, +		{255, "THIS"},      {255, "SENTINEL"} +	} +};        /* for "Ken SENT Me" */  const char what[] = "That's not possible!"; -const array<1,9,ranktype> ranks =  -{{{0, "Beginner"},    {10, "Novice"}, -{20, "Improving"},   {35, "Not bad"}, -{50, "Passable"},    {65, "Good"}, -{80, "Experienced"}, {108, "The BEST!"}, -{maxint, "copyright'93"}}}; +const array<1, 9, ranktype> ranks = { +	{	{0, "Beginner"},    {10, "Novice"}, +		{20, "Improving"},   {35, "Not bad"}, +		{50, "Passable"},    {65, "Good"}, +		{80, "Experienced"}, {108, "The BEST!"}, +		{maxint, "copyright'93"} +	} +};  #ifdef __acci_implementation__ @@ -233,8 +276,8 @@ const array<1,9,ranktype> ranks =  EXTERN varying_string<11> thats;  EXTERN varying_string<20> unknown; -EXTERN array<1,11,varying_string<20> > realwords; -EXTERN char verb,person,thing,thing2; +EXTERN array<1, 11, varying_string<20> > realwords; +EXTERN char verb, person, thing, thing2;  EXTERN boolean polite;  #undef EXTERN  #define EXTERN extern @@ -245,7 +288,7 @@ void parse();  void lookaround();  void opendoor();  void do_that(); -void verbopt(char n, string& answer, char& anskey); +void verbopt(char n, string &answer, char &anskey);  void have_a_drink();  } // End of namespace Avalanche. diff --git a/engines/avalanche/also.cpp b/engines/avalanche/also.cpp index 83dce5241b..3f3e32a09a 100644 --- a/engines/avalanche/also.cpp +++ b/engines/avalanche/also.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 @@ -33,28 +33,37 @@  namespace Avalanche { -typedef matrix<0,255,0,15,byte> fonttype; +typedef matrix<0, 255, 0, 15, byte> fonttype;  class fieldtype {  public: -             integer x1,y1,x2,y2; +	integer x1, y1, x2, y2;  };  class linetype : public fieldtype {  public: -            byte col; +	byte col;  };  struct pedtype { -           integer x,y; byte dir; +	integer x, y; +	byte dir;  };  struct magictype { -             byte op; /* one of the operations */ -             word data; /* data for them */ +	byte op; /* one of the operations */ +	word data; /* data for them */  }; -const integer numlines = 50; const integer up = 0; const integer right = 1; const integer down = 2; const integer left = 3; const integer ur = 4; const integer dr = 5; const integer dl = 6; const integer ul = 7; +const integer numlines = 50; +const integer up = 0; +const integer right = 1; +const integer down = 2; +const integer left = 3; +const integer ur = 4; +const integer dr = 5; +const integer dl = 6; +const integer ul = 7;  const integer still = 8;  const integer nay = maxint; @@ -69,988 +78,1455 @@ const integer nay = maxint;  /*S*/ const integer special = 5; /* special call */  /*O*/ const integer opendoor = 6; /* slowly opening door. */ -integer gd,gm; -array<1,numlines,linetype> lines; -array<1,numlines,fieldtype> fields; +integer gd, gm; +array<1, numlines, linetype> lines; +array<1, numlines, fieldtype> fields;  boolean do1;  byte current;  string n; -matrix<0,29,1,2,string> names; +matrix<0, 29, 1, 2, string> names;  file<fonttype> f;  fonttype skinny; -byte tx,ty; -matrix<0,79,0,22,char> chars; +byte tx, ty; +matrix<0, 79, 0, 22, char> chars;  byte cursorflash; -array<1,15,pedtype> peds; -array<1,15,magictype> magics; -array<9,15,magictype> portals; +array<1, 15, pedtype> peds; +array<1, 15, magictype> magics; +array<9, 15, magictype> portals;  varying_string<26> flags;  string listen; -const graphcursmasktype crosshairs =  -{  -    ((63551,63807,63807,63807,61727,257,897,32765,897,257,61727,63807,63807,63807,63551,65535), -     (4368,21140,8840,53910,640,640,31868,33026,31868,640,640,53910,8840,21140,4368,0)), -               7, -               7}; - -const graphcursmasktype hook =  -{  -    ((32831,32831,49279,49279,57599,61695,61471,61447,63491,57089,36801,32771,49159,57375,63743,65535), -     (0,16256,7936,7936,3584,1536,1792,2016,248,28,8220,12344,8160,1792,0,0)), -               2, -               9}; - -const graphcursmasktype tthand =  -{  -    ((62463,57855,57855,57855,57471,49167,32769,0,0,0,0,32768,49152,57344,61441,61443), -     (3072,4608,4608,4608,4992,12912,21070,36937,36873,36865,32769,16385,8193,4097,2050,4092)), -               4, -               0}; - -string strf(longint x) -{ -    string q; -string strf_result; -; - str(x,q); strf_result=q; -return strf_result; +const graphcursmasktype crosshairs = { +	((63551, 63807, 63807, 63807, 61727, 257, 897, 32765, 897, 257, 61727, 63807, 63807, 63807, 63551, 65535), +	(4368, 21140, 8840, 53910, 640, 640, 31868, 33026, 31868, 640, 640, 53910, 8840, 21140, 4368, 0)), +	7, +	7 +}; + +const graphcursmasktype hook = { +	((32831, 32831, 49279, 49279, 57599, 61695, 61471, 61447, 63491, 57089, 36801, 32771, 49159, 57375, 63743, 65535), +	(0, 16256, 7936, 7936, 3584, 1536, 1792, 2016, 248, 28, 8220, 12344, 8160, 1792, 0, 0)), +	2, +	9 +}; + +const graphcursmasktype tthand = { +	((62463, 57855, 57855, 57855, 57471, 49167, 32769, 0, 0, 0, 0, 32768, 49152, 57344, 61441, 61443), +	(3072, 4608, 4608, 4608, 4992, 12912, 21070, 36937, 36873, 36865, 32769, 16385, 8193, 4097, 2050, 4092)), +	4, +	0 +}; + +string strf(longint x) { +	string q; +	string strf_result; +	; +	str(x, q); +	strf_result = q; +	return strf_result; +} + +void glimpse(byte ret) {     /* glimpse of screen 3 */ +	char sink; +	; +	hidemousecursor; +	setvisualpage(3); +	setcrtpagenumber(3); +	showmousecursor; +	do { +		; +	} while (!(~ anymousekeypressed)); +	do { +		; +	} while (!anymousekeypressed); +	hidemousecursor; +	setvisualpage(ret); +	setcrtpagenumber(ret); +	showmousecursor; +	while (keypressed())  sink = readkey();  } -void glimpse(byte ret)       /* glimpse of screen 3 */ -{ -    char sink; -; - hidemousecursor; setvisualpage(3); setcrtpagenumber(3); showmousecursor; - do {; } while (!(~ anymousekeypressed)); - do {; } while (!anymousekeypressed); - hidemousecursor; setvisualpage(ret); setcrtpagenumber(ret); showmousecursor; - while (keypressed())  sink=readkey(); +void newline(byte t, integer p, integer q, integer r, integer s, byte c) { +	; +	{ +		linetype &with = lines[t]; +		; +		x1 = p; +		y1 = q; +		x2 = r; +		y2 = s; +		with.col = c; +	}  } -void newline(byte t, integer p,integer q,integer r,integer s, byte c) -{; - { - linetype& with = lines[t];  - ; -  x1=p; y1=q; x2=r; y2=s; with.col=c; - } +void newfield(byte t, integer p, integer q, integer r, integer s) { +	; +	{ +		fieldtype &with = fields[t];  ; +		with.x1 = p; +		with.y1 = q; +		with.x2 = r; +		with.y2 = s; +	}  } -void newfield(byte t, integer p,integer q,integer r,integer s) -{; { -                         fieldtype& with = fields[t];  ; with.x1=p; with.y1=q; with.x2=r; with.y2=s; } } - -void drawped(byte p) -{; - { pedtype& with = peds[p];  -  if (with.dir<177)  -  {; -   setcolor(p); circle(with.x,with.y,5); moveto(with.x,with.y); -   switch (with.dir) { -    case up:   linerel(0,-5); break;  case down:  linerel(0,5); break; -    case left: linerel(-7,0); break;  case right: linerel(7,0); break; -    case ul:   linerel(-7,-5); break; case dl:    linerel(-7, 5); break; -    case ur:   linerel( 7,-5); break; case dr:    linerel( 7, 5); break; -   } -  }} +void drawped(byte p) { +	; +	{ +		pedtype &with = peds[p]; +		if (with.dir < 177) { +			; +			setcolor(p); +			circle(with.x, with.y, 5); +			moveto(with.x, with.y); +			switch (with.dir) { +			case up: +				linerel(0, -5); +				break; +			case down: +				linerel(0, 5); +				break; +			case left: +				linerel(-7, 0); +				break; +			case right: +				linerel(7, 0); +				break; +			case ul: +				linerel(-7, -5); +				break; +			case dl: +				linerel(-7, 5); +				break; +			case ur: +				linerel(7, -5); +				break; +			case dr: +				linerel(7, 5); +				break; +			} +		} +	}  } -void drawup() -{ -    byte fv; -; - cleardevice(); - for( fv=1; fv <= numlines; fv ++) -  { linetype& with = lines[fv];  -   if (x1!=nay)  -   {; -    setcolor(with.col); -    line(x1,y1,x2,y2); -   }} - for( fv=1; fv <= numlines; fv ++) -  { fieldtype& with = fields[fv];  -   if (with.x1!=nay)  -   {; -    setcolor(fv); -    rectangle(with.x1,with.y1,with.x2,with.y2); -   }} - for( fv=1; fv <= 15; fv ++) drawped(fv); +void drawup() { +	byte fv; +	; +	cleardevice(); +	for (fv = 1; fv <= numlines; fv ++) { +		linetype &with = lines[fv]; +		if (x1 != nay) { +			; +			setcolor(with.col); +			line(x1, y1, x2, y2); +		} +	} +	for (fv = 1; fv <= numlines; fv ++) { +		fieldtype &with = fields[fv]; +		if (with.x1 != nay) { +			; +			setcolor(fv); +			rectangle(with.x1, with.y1, with.x2, with.y2); +		} +	} +	for (fv = 1; fv <= 15; fv ++) drawped(fv);  } -void addped() -{ -    byte n,fv; -; - n=0; do { n += 1; } while (!((n==16) || (peds[n].dir==177))); - setcrtpagenumber(0); setactivepage(0); setvisualpage(0); - drawup(); setgraphicscursor(tthand); showmousecursor; - do { -  if (rightmousekeypressed)  return; -  if (keypressed())  glimpse(0); - } while (!leftmousekeypressed); - hidemousecursor; - { - pedtype& with = peds[n];  - ; -  with.x=mousex; with.y=mousey; - } - cleardevice(); setfillstyle(6,9); for( fv=1; fv <= 3; fv ++) bar(200*fv,0,200*fv,200); - for( fv=1; fv <= 2; fv ++) bar(0,60*fv,640,60*fv); - showmousecursor; - do { if (rightmousekeypressed)  return; } while (!leftmousekeypressed); - hidemousecursor; - { pedtype& with = peds[n];  -  switch (((mousex / 200)*10)+(mousey / 60)) { -   case 0: with.dir=ul; break;   case 10: with.dir=up; break;    case 20: with.dir=ur; break; -   case 1: with.dir=left; break; case 11: with.dir=still; break; case 21: with.dir=right; break; -   case 2: with.dir=dl; break;   case 12: with.dir=down; break;  case 22: with.dir=dr; break; -  }} +void addped() { +	byte n, fv; +	; +	n = 0; +	do { +		n += 1; +	} while (!((n == 16) || (peds[n].dir == 177))); +	setcrtpagenumber(0); +	setactivepage(0); +	setvisualpage(0); +	drawup(); +	setgraphicscursor(tthand); +	showmousecursor; +	do { +		if (rightmousekeypressed)  return; +		if (keypressed())  glimpse(0); +	} while (!leftmousekeypressed); +	hidemousecursor; +	{ +		pedtype &with = peds[n]; +		; +		with.x = mousex; +		with.y = mousey; +	} +	cleardevice(); +	setfillstyle(6, 9); +	for (fv = 1; fv <= 3; fv ++) bar(200 * fv, 0, 200 * fv, 200); +	for (fv = 1; fv <= 2; fv ++) bar(0, 60 * fv, 640, 60 * fv); +	showmousecursor; +	do { +		if (rightmousekeypressed)  return; +	} while (!leftmousekeypressed); +	hidemousecursor; +	{ +		pedtype &with = peds[n]; +		switch (((mousex / 200) * 10) + (mousey / 60)) { +		case 0: +			with.dir = ul; +			break; +		case 10: +			with.dir = up; +			break; +		case 20: +			with.dir = ur; +			break; +		case 1: +			with.dir = left; +			break; +		case 11: +			with.dir = still; +			break; +		case 21: +			with.dir = right; +			break; +		case 2: +			with.dir = dl; +			break; +		case 12: +			with.dir = down; +			break; +		case 22: +			with.dir = dr; +			break; +		} +	}  } -void addline(byte ccc) -{ -    byte fv; -; - do { -  for( fv=1; fv <= numlines; fv ++) -   { linetype& with = lines[fv];  -    if (x1==nay)  -    {; -     x1=fv*17; x2=x1; y1=200; y2=190; with.col=ccc; -     return; /* bad style! */ -    }} - } while (!false); +void addline(byte ccc) { +	byte fv; +	; +	do { +		for (fv = 1; fv <= numlines; fv ++) { +			linetype &with = lines[fv]; +			if (x1 == nay) { +				; +				x1 = fv * 17; +				x2 = x1; +				y1 = 200; +				y2 = 190; +				with.col = ccc; +				return; /* bad style! */ +			} +		} +	} while (!false);  } -byte colour() -{ -    byte fv; -byte colour_result; -; - setactivepage(0); setvisualpage(0); setcrtpagenumber(0); - outtextxy(0,0,"Select a colour, please..."); - for( fv=1; fv <= 15; fv ++) - {; -  setfillstyle(1,fv); -  bar(fv*40,27,39+fv*40,200); - } - showmousecursor; - do { -  if (rightmousekeypressed)  {; hidemousecursor; return colour_result; } -  if (keypressed())  glimpse(2); - } while (!leftmousekeypressed); - hidemousecursor; - colour_result=getpixel(mousex,mousey); cleardevice(); -return colour_result; +byte colour() { +	byte fv; +	byte colour_result; +	; +	setactivepage(0); +	setvisualpage(0); +	setcrtpagenumber(0); +	outtextxy(0, 0, "Select a colour, please..."); +	for (fv = 1; fv <= 15; fv ++) { +		; +		setfillstyle(1, fv); +		bar(fv * 40, 27, 39 + fv * 40, 200); +	} +	showmousecursor; +	do { +		if (rightmousekeypressed)  { +			; +			hidemousecursor; +			return colour_result; +		} +		if (keypressed())  glimpse(2); +	} while (!leftmousekeypressed); +	hidemousecursor; +	colour_result = getpixel(mousex, mousey); +	cleardevice(); +	return colour_result;  } -void addfield() -{ -    byte fv; boolean ok; -; - do { -  fv=colour(); -  ok=fields[fv].x1==nay; -  if (! ok)  output << '\7'; - } while (!ok); - { - fieldtype& with = fields[fv];  - ; -  with.x1=300+fv*17; with.x2=with.x1+1; with.y1=200; with.y2=177; - } +void addfield() { +	byte fv; +	boolean ok; +	; +	do { +		fv = colour(); +		ok = fields[fv].x1 == nay; +		if (! ok)  output << '\7'; +	} while (!ok); +	{ +		fieldtype &with = fields[fv]; +		; +		with.x1 = 300 + fv * 17; +		with.x2 = with.x1 + 1; +		with.y1 = 200; +		with.y2 = 177; +	}  } -byte checkline() -{ -    byte fv,ans; -byte checkline_result; -; - setgraphicscursor(crosshairs); - setcrtpagenumber(0); setactivepage(0); setvisualpage(0); drawup(); - do { -  showmousecursor; -  do { -   if (rightmousekeypressed)  {; checkline_result=255; return checkline_result; } -   if (keypressed())  glimpse(0); -  } while (!leftmousekeypressed); -  hidemousecursor; -  setactivepage(1); ans=177; -  for( fv=1; fv <= numlines; fv ++) /*  */ -  {; -   { linetype& with = lines[fv];  -    if (x1!=nay)  -    {; -     setcolor( 9); line(x1,y1,x2,y2); -     if (getpixel(mousex,mousey)==9)  ans=fv; -     setcolor( 0); line(x1,y1,x2,y2); -    }} -   { fieldtype& with = fields[fv];  -    if (with.x1!=nay)  -    {; -     setcolor( 9); rectangle(with.x1,with.y1,with.x2,with.y2); -     if (getpixel(mousex,mousey)==9)  ans=fv+100; -     setcolor( 0); rectangle(with.x1,with.y1,with.x2,with.y2); -    }} -  } -  setactivepage(0); - } while (!(ans!=177)); - checkline_result=ans; -return checkline_result; +byte checkline() { +	byte fv, ans; +	byte checkline_result; +	; +	setgraphicscursor(crosshairs); +	setcrtpagenumber(0); +	setactivepage(0); +	setvisualpage(0); +	drawup(); +	do { +		showmousecursor; +		do { +			if (rightmousekeypressed)  { +				; +				checkline_result = 255; +				return checkline_result; +			} +			if (keypressed())  glimpse(0); +		} while (!leftmousekeypressed); +		hidemousecursor; +		setactivepage(1); +		ans = 177; +		for (fv = 1; fv <= numlines; fv ++) { /*  */ +			; +			{ +				linetype &with = lines[fv]; +				if (x1 != nay) { +					; +					setcolor(9); +					line(x1, y1, x2, y2); +					if (getpixel(mousex, mousey) == 9)  ans = fv; +					setcolor(0); +					line(x1, y1, x2, y2); +				} +			} +			{ +				fieldtype &with = fields[fv]; +				if (with.x1 != nay) { +					; +					setcolor(9); +					rectangle(with.x1, with.y1, with.x2, with.y2); +					if (getpixel(mousex, mousey) == 9)  ans = fv + 100; +					setcolor(0); +					rectangle(with.x1, with.y1, with.x2, with.y2); +				} +			} +		} +		setactivepage(0); +	} while (!(ans != 177)); +	checkline_result = ans; +	return checkline_result;  }  void chooseside(); -static boolean itsaline;  - -static void plotline() -{; - if (itsaline)  -  { linetype& with = lines[gd];  -   if (do1)  line(mousex,mousey,x2,y2); else -    line(x1,y1,mousex,mousey);} - else -  { fieldtype& with = fields[gd];  -   if (do1)  rectangle(mousex,mousey,with.x2,with.y2); else -    rectangle(with.x1,with.y1,mousex,mousey);} +static boolean itsaline; + +static void plotline() { +	; +	if (itsaline) { +		linetype &with = lines[gd]; +		if (do1)  line(mousex, mousey, x2, y2); +		else +			line(x1, y1, mousex, mousey); +	} else { +		fieldtype &with = fields[gd]; +		if (do1)  rectangle(mousex, mousey, with.x2, with.y2); +		else +			rectangle(with.x1, with.y1, mousex, mousey); +	}  } -void chooseside() -{ -    byte clicol,savelcol;fieldtype current; integer temp; -; - do { -  gd=checkline(); itsaline=gd<100; -  if (gd==255)  {; hidemousecursor; return; } -  if (! itsaline)  gd -= 100; -  setactivepage(2); setvisualpage(2); cleardevice(); -  setgraphicscursor(tthand); setcrtpagenumber(2); -  if (itsaline)  -  {; -   current=lines[gd]; -   savelcol=lines[gd].col; -  } else current=fields[gd]; -  {; -   setcolor(9); -   if (itsaline)  line(current.x1,current.y1,current.x2,current.y2); else rectangle(current.x1,current.y1,current.x2,current.y2); -    setcolor(9); -    setfillstyle(1,red);   bar(current.x1-3,current.y1-3,current.x1+3,current.y1+3); -    setfillstyle(1,green); bar(current.x2-3,current.y2-3,current.x2+3,current.y2+3); -   do {; } while (!(~ anymousekeypressed)); -   clicol=177; showmousecursor; -  do { -   if (anymousekeypressed)  -   {; -    hidemousecursor; -    clicol=getpixel(mousex,mousey); -    showmousecursor; -   } -   if (rightmousekeypressed)  -    {; hidemousecursor; return; } -   if (keypressed())  glimpse(2); -  } while (!(set::of(red,green, eos).has(clicol))); -  do1=clicol==red; hidemousecursor; -  setgraphicscursor(hook); setcrtpagenumber(0); -  setactivepage(0); setvisualpage(0); setcolor(0); -  if (itsaline)  -  { -                     linetype& with1 = lines[gd];  ; line(current.x1,current.y1,current.x2,current.y2); setcolor(with1.col); } else -  { -                     fieldtype& with1 = fields[gd];  ; rectangle(with1.x1,with1.y1,with1.x2,with1.y2); setcolor(gd); } -  setwritemode(xorput); -  while (~ anymousekeypressed)  -  {; -   plotline(); -   showmousecursor; delay(1); hidemousecursor; -   plotline(); -   if (rightmousekeypressed)  {; hidemousecursor; return; } -   if (keypressed())  glimpse(0); -  } -  /* update "current" rec */ -  if (do1)  {; current.x1=mousex; current.y1=mousey; } -   else {; current.x2=mousex; current.y2=mousey; } -  if (! itsaline)  -  {; -   if (current.x1>current.x2)  {; temp=current.x2; current.x2=current.x1; current.x1=temp; } -   if (current.y1>current.y2)  {; temp=current.y2; current.y2=current.y1; current.y1=temp; } -  } -  /* copy "current" to line/field */ -  if (itsaline)  -   { -   linetype& with1 = lines[gd];  -   ; -    current.x1=current.x1; current.x2=current.x2; current.y1=current.y1; current.y2=current.y2; -    with1.col=savelcol; -   } else fields[gd]=current; - } - setwritemode(0); - } while (!false); +void chooseside() { +	byte clicol, savelcol; +	fieldtype current; +	integer temp; +	; +	do { +		gd = checkline(); +		itsaline = gd < 100; +		if (gd == 255)  { +			; +			hidemousecursor; +			return; +		} +		if (! itsaline)  gd -= 100; +		setactivepage(2); +		setvisualpage(2); +		cleardevice(); +		setgraphicscursor(tthand); +		setcrtpagenumber(2); +		if (itsaline) { +			; +			current = lines[gd]; +			savelcol = lines[gd].col; +		} else current = fields[gd]; +		{ +			; +			setcolor(9); +			if (itsaline)  line(current.x1, current.y1, current.x2, current.y2); +			else rectangle(current.x1, current.y1, current.x2, current.y2); +			setcolor(9); +			setfillstyle(1, red); +			bar(current.x1 - 3, current.y1 - 3, current.x1 + 3, current.y1 + 3); +			setfillstyle(1, green); +			bar(current.x2 - 3, current.y2 - 3, current.x2 + 3, current.y2 + 3); +			do { +				; +			} while (!(~ anymousekeypressed)); +			clicol = 177; +			showmousecursor; +			do { +				if (anymousekeypressed) { +					; +					hidemousecursor; +					clicol = getpixel(mousex, mousey); +					showmousecursor; +				} +				if (rightmousekeypressed) { +					; +					hidemousecursor; +					return; +				} +				if (keypressed())  glimpse(2); +			} while (!(set::of(red, green, eos).has(clicol))); +			do1 = clicol == red; +			hidemousecursor; +			setgraphicscursor(hook); +			setcrtpagenumber(0); +			setactivepage(0); +			setvisualpage(0); +			setcolor(0); +			if (itsaline) { +				linetype &with1 = lines[gd];  ; +				line(current.x1, current.y1, current.x2, current.y2); +				setcolor(with1.col); +			} else { +				fieldtype &with1 = fields[gd];  ; +				rectangle(with1.x1, with1.y1, with1.x2, with1.y2); +				setcolor(gd); +			} +			setwritemode(xorput); +			while (~ anymousekeypressed) { +				; +				plotline(); +				showmousecursor; +				delay(1); +				hidemousecursor; +				plotline(); +				if (rightmousekeypressed)  { +					; +					hidemousecursor; +					return; +				} +				if (keypressed())  glimpse(0); +			} +			/* update "current" rec */ +			if (do1)  { +				; +				current.x1 = mousex; +				current.y1 = mousey; +			} else { +				; +				current.x2 = mousex; +				current.y2 = mousey; +			} +			if (! itsaline) { +				; +				if (current.x1 > current.x2)  { +					; +					temp = current.x2; +					current.x2 = current.x1; +					current.x1 = temp; +				} +				if (current.y1 > current.y2)  { +					; +					temp = current.y2; +					current.y2 = current.y1; +					current.y1 = temp; +				} +			} +			/* copy "current" to line/field */ +			if (itsaline) { +				linetype &with1 = lines[gd]; +				; +				current.x1 = current.x1; +				current.x2 = current.x2; +				current.y1 = current.y1; +				current.y2 = current.y2; +				with1.col = savelcol; +			} else fields[gd] = current; +		} +		setwritemode(0); +	} while (!false);  } -void delped() -{; - setcrtpagenumber(0); setactivepage(0); setvisualpage(0); - drawup(); setgraphicscursor(tthand); showmousecursor; - do {; } while (!leftmousekeypressed); peds[colour()].dir=177; +void delped() { +	; +	setcrtpagenumber(0); +	setactivepage(0); +	setvisualpage(0); +	drawup(); +	setgraphicscursor(tthand); +	showmousecursor; +	do { +		; +	} while (!leftmousekeypressed); +	peds[colour()].dir = 177;  }  byte menu(); -static void say(byte y, string x) -{; - setfillstyle(1,y); - bar(0,y*17,100,y*17+15); outtextxy(123,y*17,x); +static void say(byte y, string x) { +	; +	setfillstyle(1, y); +	bar(0, y * 17, 100, y * 17 + 15); +	outtextxy(123, y * 17, x);  } -byte menu() -{ -    byte clicol; -byte menu_result; -; -  setcolor(15); settextstyle(0,0,2); clicol=0; setgraphicscursor(tthand); -  setvisualpage(2); setactivepage(2); setcrtpagenumber(2); cleardevice(); -  say(3,"Move lines around"); -  say(4,"Add a new line"); -  say(5,"Delete a line"); -  say(6,"Add a ped"); -  say(7,"Delete a ped"); -  say(8,"Add a field"); -  say(10,"Return to Also."); -  showmousecursor; -  do { -   if (leftmousekeypressed)  -   {; -    hidemousecursor; -    clicol=getpixel(mousex,mousey); -    showmousecursor; -   } -   if (rightmousekeypressed)  {; hidemousecursor; return menu_result; } -   if (keypressed())  glimpse(2); -  } while (!(clicol>0)); -  do {; } while (!(~ anymousekeypressed)); -  hidemousecursor; -  menu_result=clicol; -return menu_result; +byte menu() { +	byte clicol; +	byte menu_result; +	; +	setcolor(15); +	settextstyle(0, 0, 2); +	clicol = 0; +	setgraphicscursor(tthand); +	setvisualpage(2); +	setactivepage(2); +	setcrtpagenumber(2); +	cleardevice(); +	say(3, "Move lines around"); +	say(4, "Add a new line"); +	say(5, "Delete a line"); +	say(6, "Add a ped"); +	say(7, "Delete a ped"); +	say(8, "Add a field"); +	say(10, "Return to Also."); +	showmousecursor; +	do { +		if (leftmousekeypressed) { +			; +			hidemousecursor; +			clicol = getpixel(mousex, mousey); +			showmousecursor; +		} +		if (rightmousekeypressed)  { +			; +			hidemousecursor; +			return menu_result; +		} +		if (keypressed())  glimpse(2); +	} while (!(clicol > 0)); +	do { +		; +	} while (!(~ anymousekeypressed)); +	hidemousecursor; +	menu_result = clicol; +	return menu_result;  } -void removeline() -{; - gd=checkline(); if (gd==255)  {; hidemousecursor; return; } - if (gd>100)  -  fields[gd-100].x1=nay; - else lines[gd].x1=nay;  /* cancels it out */ - cleardevice(); drawup(); +void removeline() { +	; +	gd = checkline(); +	if (gd == 255)  { +		; +		hidemousecursor; +		return; +	} +	if (gd > 100) +		fields[gd - 100].x1 = nay; +	else lines[gd].x1 = nay; /* cancels it out */ +	cleardevice(); +	drawup();  } -void lino() -{; - resetmouse; - do { -  switch (menu()) { -   case 3: chooseside(); break; -   case 4: addline(colour()); break; -   case 5: removeline(); break; -   case 6: addped(); break; -   case 7: delped(); break; -   case 8: addfield(); break; -  case 10: return; break; -  } - } while (!false); +void lino() { +	; +	resetmouse; +	do { +		switch (menu()) { +		case 3: +			chooseside(); +			break; +		case 4: +			addline(colour()); +			break; +		case 5: +			removeline(); +			break; +		case 6: +			addped(); +			break; +		case 7: +			delped(); +			break; +		case 8: +			addfield(); +			break; +		case 10: +			return; +			break; +		} +	} while (!false);  } -void loadscreen()     /* load2 */ -{ - byte a /*absolute $A000:246560*/; - byte bit; - untyped_file f; -; - setactivepage(3); setvisualpage(3); - assign(f,string("c:\\avalot\\place")+n+".avd"); reset(f,1); seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a,12080); - } - close(f); - setvisualpage(0); - outtextxy(0,190,"Look carefully, and then press any key..."); - setactivepage(0); +void loadscreen() {   /* load2 */ +	byte a /*absolute $A000:246560*/; +	byte bit; +	untyped_file f; +	; +	setactivepage(3); +	setvisualpage(3); +	assign(f, string("c:\\avalot\\place") + n + ".avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a, 12080); +	} +	close(f); +	setvisualpage(0); +	outtextxy(0, 190, "Look carefully, and then press any key..."); +	setactivepage(0);  } -void ctrlsout(string& x)          /* Replace real ctrls with caret codes */ -{ -    byte fv; string xx; -; - xx=""; - for( fv=1; fv <= length(x); fv ++) -  if (x[fv]>'\37')  xx=xx+x[fv]; else xx=xx+'^'+chr(ord(x[fv])+64); - x=xx; +void ctrlsout(string &x) {        /* Replace real ctrls with caret codes */ +	byte fv; +	string xx; +	; +	xx = ""; +	for (fv = 1; fv <= length(x); fv ++) +		if (x[fv] > '\37')  xx = xx + x[fv]; +		else xx = xx + '^' + chr(ord(x[fv]) + 64); +	x = xx;  } -void ctrlsin(string& x)          /* Opposite of ctrlsout */ -{ -    byte fv; string xx; boolean ctrlwas; -; - xx=""; ctrlwas=false; - for( fv=1; fv <= length(x); fv ++) -  if (ctrlwas)    /* last char was a caret */ -   {; -    xx=xx+chr(ord(upcase(x[fv]))-64); -    ctrlwas=false; -   } -  else -  {;     /* last char wasn't a caret... */ -   if (x[fv]=='^')  ctrlwas=true; else  /* ...but this one is */ -    xx=xx+x[fv];  /* ...but this one isn't */ -  } - x=xx; +void ctrlsin(string &x) {        /* Opposite of ctrlsout */ +	byte fv; +	string xx; +	boolean ctrlwas; +	; +	xx = ""; +	ctrlwas = false; +	for (fv = 1; fv <= length(x); fv ++) +		if (ctrlwas) {  /* last char was a caret */ +			; +			xx = xx + chr(ord(upcase(x[fv])) - 64); +			ctrlwas = false; +		} else { +			;     /* last char wasn't a caret... */ +			if (x[fv] == '^')  ctrlwas = true; +			else  /* ...but this one is */ +				xx = xx + x[fv]; /* ...but this one isn't */ +		} +	x = xx;  } -void flipover()     /* temp view other screen */ -{ -    char r; -; - setvisualpage(3); r=readkey(); setvisualpage(0); +void flipover() {   /* temp view other screen */ +	char r; +	; +	setvisualpage(3); +	r = readkey(); +	setvisualpage(0);  } -void plotchar(byte x,byte y, char n) -{ -    byte fv; -; - if (chars[x][y]==n)  return; - for( fv=0; fv <= 15; fv ++) -  mem[0xa000*y*1200+(fv+3)*80+x]=skinny[ord(n)][fv]; - chars[x][y]=n; +void plotchar(byte x, byte y, char n) { +	byte fv; +	; +	if (chars[x][y] == n)  return; +	for (fv = 0; fv <= 15; fv ++) +		mem[0xa000 * y * 1200 + (fv + 3) * 80 + x] = skinny[ord(n)][fv]; +	chars[x][y] = n;  } -void cursor() -{ -    byte fv; -; - cursorflash += 1; - switch (cursorflash) { -  case 1:case 127: for( fv=12; fv <= 14; fv ++) -          mem[0xa000*ty*1200+(3+fv)*80+tx]=~(mem[0xa000*ty*1200+(3+fv)*80+tx]); -          break; -  case 255: cursorflash=0; break; - } +void cursor() { +	byte fv; +	; +	cursorflash += 1; +	switch (cursorflash) { +	case 1: +	case 127: +		for (fv = 12; fv <= 14; fv ++) +			mem[0xa000 * ty * 1200 + (3 + fv) * 80 + tx] = ~(mem[0xa000 * ty * 1200 + (3 + fv) * 80 + tx]); +		break; +	case 255: +		cursorflash = 0; +		break; +	}  } -void losecursor() -{; - if (cursorflash<127)  {; cursorflash=126; cursor(); } - cursorflash=0; +void losecursor() { +	; +	if (cursorflash < 127)  { +		; +		cursorflash = 126; +		cursor(); +	} +	cursorflash = 0;  } -void gwrite(string x) -{ -    byte fv; -; - for( fv=1; fv <= length(x); fv ++) - {; -  plotchar(tx,ty,x[fv]); -  tx += 1; -  if (tx==80)  {; ty += 1; tx=0; } - } +void gwrite(string x) { +	byte fv; +	; +	for (fv = 1; fv <= length(x); fv ++) { +		; +		plotchar(tx, ty, x[fv]); +		tx += 1; +		if (tx == 80)  { +			; +			ty += 1; +			tx = 0; +		} +	}  } -string typein(string x) -{ -      const char marker = '\2'; -    byte p; char r; -string typein_result; -; - setvisualpage(0); setactivepage(0); cleardevice(); - settextstyle(0,0,1); setcolor(15); - outtextxy( 0,  0,"Press TAB to see the room..."); - outtextxy( 0, 20,"You may use any of these Control Codes:"); - outtextxy(30, 30,"Anywhere: ^M = new line, ^P = new scroll, |1 fix to speaker 1."); - outtextxy(90, 40,"^B = new bubble"); - outtextxy(30, 50,"At end of line: ^C = centre line, ^L = left justify."); - outtextxy(30, 60,"At end of scroll: ^D = Don't add automatic ^P here."); - outtextxy( 0, 80,"(Use by typing in (eg for ^P) ^ then P, not Ctrl-P.)"); - p=0; ctrlsout(x); fillchar(chars,sizeof(chars),'\40'); - do { -  tx=0; ty=6; gwrite(x+'\4'+'\40'); -  tx=(p % 80); ty=(p / 80)+6; -  while (! keypressed())  {; delay(1); cursor(); } losecursor(); -  r=readkey(); -  switch (r) { -   case '\10': if (p>0)  {; x=copy(x,1,p-1)+copy(x,p+1,255); p -= 1; } break; /* backspace */ -   case '\11': flipover(); break; -   case '\40' ... '\377': {; x=copy(x,1,p)+r+copy(x,p+1,255); p += 1; } break; -   case '\0': switch (readkey()) { /* extd. keystroke */ -        case 'G': p=0; break; /* Home */ -        case 'K': if (p>0)  p -= 1; break; /* left */ -        case 'M': if (p<length(x))  p += 1; break; /* right */ -        case 'H': if (p>80)  p -= 80; break; /* up */ -        case 'P': if (p<length(x)-80)  p += 80; break; /* down */ -        case 'O': p=length(x); break; /* End */ -        case 'S': x=copy(x,1,p)+copy(x,p+2,255); break; /* Del */ -       } -       break; -  } - } while (!(r=='\15')); - ctrlsin(x); typein_result=x; -return typein_result; +string typein(string x) { +	const char marker = '\2'; +	byte p; +	char r; +	string typein_result; +	; +	setvisualpage(0); +	setactivepage(0); +	cleardevice(); +	settextstyle(0, 0, 1); +	setcolor(15); +	outtextxy(0,  0, "Press TAB to see the room..."); +	outtextxy(0, 20, "You may use any of these Control Codes:"); +	outtextxy(30, 30, "Anywhere: ^M = new line, ^P = new scroll, |1 fix to speaker 1."); +	outtextxy(90, 40, "^B = new bubble"); +	outtextxy(30, 50, "At end of line: ^C = centre line, ^L = left justify."); +	outtextxy(30, 60, "At end of scroll: ^D = Don't add automatic ^P here."); +	outtextxy(0, 80, "(Use by typing in (eg for ^P) ^ then P, not Ctrl-P.)"); +	p = 0; +	ctrlsout(x); +	fillchar(chars, sizeof(chars), '\40'); +	do { +		tx = 0; +		ty = 6; +		gwrite(x + '\4' + '\40'); +		tx = (p % 80); +		ty = (p / 80) + 6; +		while (! keypressed())  { +			; +			delay(1); +			cursor(); +		} +		losecursor(); +		r = readkey(); +		switch (r) { +		case '\10': +			if (p > 0)  { +				; +				x = copy(x, 1, p - 1) + copy(x, p + 1, 255); +				p -= 1; +			} +			break; /* backspace */ +		case '\11': +			flipover(); +			break; +		case '\40' ... '\377': { +			; +			x = copy(x, 1, p) + r + copy(x, p + 1, 255); +			p += 1; +		} +		break; +		case '\0': +			switch (readkey()) { /* extd. keystroke */ +			case 'G': +				p = 0; +				break; /* Home */ +			case 'K': +				if (p > 0)  p -= 1; +				break; /* left */ +			case 'M': +				if (p < length(x))  p += 1; +				break; /* right */ +			case 'H': +				if (p > 80)  p -= 80; +				break; /* up */ +			case 'P': +				if (p < length(x) - 80)  p += 80; +				break; /* down */ +			case 'O': +				p = length(x); +				break; /* End */ +			case 'S': +				x = copy(x, 1, p) + copy(x, p + 2, 255); +				break; /* Del */ +			} +			break; +		} +	} while (!(r == '\15')); +	ctrlsin(x); +	typein_result = x; +	return typein_result;  } -byte typeno(string title) -{ - varying_string<2> x; char r; integer e; word p; -byte typeno_result; -; - cleardevice(); x="000"; - settextstyle(0,0,3); setcolor(9); outtextxy(0,0,title); - setfillstyle(1,0); setcolor(10); fillchar(chars,sizeof(chars),'\40'); - do { -  bar(100,100,150,125); -  outtextxy(100,100,x); -  do { r=readkey(); } while (!(set::of(range('0','9'),'\33','\15', eos).has(r))); -  if (r=='\33')  {; typeno_result=255; return typeno_result; } -  if (r!='\15')  x=string(x[2])+r; - } while (!(r=='\15')); - val(x,p,e); typeno_result=p; -return typeno_result; +byte typeno(string title) { +	varying_string<2> x; +	char r; +	integer e; +	word p; +	byte typeno_result; +	; +	cleardevice(); +	x = "000"; +	settextstyle(0, 0, 3); +	setcolor(9); +	outtextxy(0, 0, title); +	setfillstyle(1, 0); +	setcolor(10); +	fillchar(chars, sizeof(chars), '\40'); +	do { +		bar(100, 100, 150, 125); +		outtextxy(100, 100, x); +		do { +			r = readkey(); +		} while (!(set::of(range('0', '9'), '\33', '\15', eos).has(r))); +		if (r == '\33')  { +			; +			typeno_result = 255; +			return typeno_result; +		} +		if (r != '\15')  x = string(x[2]) + r; +	} while (!(r == '\15')); +	val(x, p, e); +	typeno_result = p; +	return typeno_result;  } -void showallnames() -{ -    byte fv; varying_string<2> s; char r; -; - settextstyle(0,0,2); cleardevice(); setcolor(13); outtextxy(0,0,"Descriptions start..."); - settextstyle(0,0,1); setcolor(7); - for( fv=1; fv <= 29; fv ++) - {; -  str(fv,2,s); -  outtextxy((fv / 15)*320,((fv % 15)*10)+30,s+'='+copy(names[fv][1],0,33)); - } - setcolor(15); outtextxy(500,190,"Press any key..."); - r=readkey(); +void showallnames() { +	byte fv; +	varying_string<2> s; +	char r; +	; +	settextstyle(0, 0, 2); +	cleardevice(); +	setcolor(13); +	outtextxy(0, 0, "Descriptions start..."); +	settextstyle(0, 0, 1); +	setcolor(7); +	for (fv = 1; fv <= 29; fv ++) { +		; +		str(fv, 2, s); +		outtextxy((fv / 15) * 320, ((fv % 15) * 10) + 30, s + '=' + copy(names[fv][1], 0, 33)); +	} +	setcolor(15); +	outtextxy(500, 190, "Press any key..."); +	r = readkey();  }  void showallassoc(); -static void saascreen() -{; - settextstyle(0,0,2); cleardevice(); setcolor(10); outtextxy(0,0,"Everything..."); - settextstyle(0,0,1); setcolor(2); - outtextxy(17,20,"(Format: <number> : <start of names> : <start of desc.>)"); +static void saascreen() { +	; +	settextstyle(0, 0, 2); +	cleardevice(); +	setcolor(10); +	outtextxy(0, 0, "Everything..."); +	settextstyle(0, 0, 1); +	setcolor(2); +	outtextxy(17, 20, "(Format: <number> : <start of names> : <start of desc.>)");  } -void showallassoc() -{ -    byte fv; varying_string<2> s; char r; - -; - saascreen(); - for( fv=1; fv <= 30; fv ++) - {; -  str(fv-1,2,s); -  outtextxy(0,(((fv-1) % 10)*10)+30, -   s+':'+copy(names[fv-1][1],1,7)+':'+copy(names[fv-1][2],1,70)); -  if ((fv % 10)==0)  {; r=readkey(); saascreen(); } - } - setcolor(15); outtextxy(500,190,"Press any key..."); - r=readkey(); +void showallassoc() { +	byte fv; +	varying_string<2> s; +	char r; + +	; +	saascreen(); +	for (fv = 1; fv <= 30; fv ++) { +		; +		str(fv - 1, 2, s); +		outtextxy(0, (((fv - 1) % 10) * 10) + 30, +		          s + ':' + copy(names[fv - 1][1], 1, 7) + ':' + copy(names[fv - 1][2], 1, 70)); +		if ((fv % 10) == 0)  { +			; +			r = readkey(); +			saascreen(); +		} +	} +	setcolor(15); +	outtextxy(500, 190, "Press any key..."); +	r = readkey();  } -void clear() -{ -    byte fv; -; - fillchar(names ,sizeof(names ),  '\0'); - for( fv=1; fv <= numlines; fv ++) {; lines[fv].x1=nay; fields[fv].x1=nay; } - fillchar(peds  ,sizeof(peds  ),'\261'); +void clear() { +	byte fv; +	; +	fillchar(names , sizeof(names),  '\0'); +	for (fv = 1; fv <= numlines; fv ++) { +		; +		lines[fv].x1 = nay; +		fields[fv].x1 = nay; +	} +	fillchar(peds  , sizeof(peds), '\261');  }  void scramble(); -static void scram1(string& x) -{ -    byte fz; -; - for( fz=1; fz <= length(x); fz ++) -  x[fz]=chr(ord(x[fz]) ^ 177); +static void scram1(string &x) { +	byte fz; +	; +	for (fz = 1; fz <= length(x); fz ++) +		x[fz] = chr(ord(x[fz]) ^ 177);  } -void scramble()     /* Works both ways. */ -{ -    byte fv,ff; -; - for( fv=0; fv <= 29; fv ++) -  for( ff=1; ff <= 2; ff ++) -   scram1(names[fv][ff]); - scram1(listen); - scram1(flags); +void scramble() {   /* Works both ways. */ +	byte fv, ff; +	; +	for (fv = 0; fv <= 29; fv ++) +		for (ff = 1; ff <= 2; ff ++) +			scram1(names[fv][ff]); +	scram1(listen); +	scram1(flags);  } -void save() -{ -    string x; untyped_file f; byte minnames,minlines,minpeds,minfields,fv,ff; -; - minnames =0; for( fv=0; fv <= 29; fv ++) if (names[fv][1]!="")     minnames =fv; - minlines =0; for( fv=1; fv <= numlines; fv ++) -                if (lines[fv].x1!=nay)   minlines =fv; - minpeds  =0; for( fv=1; fv <= 15; fv ++) if (peds[fv].dir<177)    minpeds  =fv; - minfields=0; for( fv=1; fv <= 30; fv ++) if (fields[fv].x1!=nay)  minfields=fv; - assign(f,string("c:\\avalot\\also")+n+".avd"); - rewrite(f,1); - x=string("This is an Also .AVD file, which belongs to AVALOT.EXE. Its contents")+ - '\15'+'\12'+"are subject to copyright, so there. Have fun!"+'\32'+" *Minstrel* "; - blockwrite(f,x[1],128); - scramble(); - blockwrite(f,minnames,1); - for( fv=0; fv <= minnames; fv ++) -  for( ff=1; ff <= 2; ff ++) -   blockwrite(f,names[fv][ff],length(names[fv][ff])+1); - blockwrite(f,minlines,1); - blockwrite(f,lines,sizeof(lines[1])*minlines); - blockwrite(f,minpeds,1); - blockwrite(f,peds,sizeof(peds[1])*minpeds); - blockwrite(f,minfields,1); - blockwrite(f,fields,sizeof(fields[1])*minfields); - blockwrite(f,magics,sizeof(magics)); - blockwrite(f,portals,sizeof(portals)); - blockwrite(f,flags,sizeof(flags)); - blockwrite(f,listen[0],1); - blockwrite(f,listen[1],length(listen)); - close(f); - scramble(); +void save() { +	string x; +	untyped_file f; +	byte minnames, minlines, minpeds, minfields, fv, ff; +	; +	minnames = 0; +	for (fv = 0; fv <= 29; fv ++) if (names[fv][1] != "")     minnames = fv; +	minlines = 0; +	for (fv = 1; fv <= numlines; fv ++) +		if (lines[fv].x1 != nay)   minlines = fv; +	minpeds  = 0; +	for (fv = 1; fv <= 15; fv ++) if (peds[fv].dir < 177)    minpeds  = fv; +	minfields = 0; +	for (fv = 1; fv <= 30; fv ++) if (fields[fv].x1 != nay)  minfields = fv; +	assign(f, string("c:\\avalot\\also") + n + ".avd"); +	rewrite(f, 1); +	x = string("This is an Also .AVD file, which belongs to AVALOT.EXE. Its contents") + +	    '\15' + '\12' + "are subject to copyright, so there. Have fun!" + '\32' + " *Minstrel* "; +	blockwrite(f, x[1], 128); +	scramble(); +	blockwrite(f, minnames, 1); +	for (fv = 0; fv <= minnames; fv ++) +		for (ff = 1; ff <= 2; ff ++) +			blockwrite(f, names[fv][ff], length(names[fv][ff]) + 1); +	blockwrite(f, minlines, 1); +	blockwrite(f, lines, sizeof(lines[1])*minlines); +	blockwrite(f, minpeds, 1); +	blockwrite(f, peds, sizeof(peds[1])*minpeds); +	blockwrite(f, minfields, 1); +	blockwrite(f, fields, sizeof(fields[1])*minfields); +	blockwrite(f, magics, sizeof(magics)); +	blockwrite(f, portals, sizeof(portals)); +	blockwrite(f, flags, sizeof(flags)); +	blockwrite(f, listen[0], 1); +	blockwrite(f, listen[1], length(listen)); +	close(f); +	scramble();  }  void load(); -static untyped_file f;  - - -static string nextstring() -{ -    byte l; string x; -string nextstring_result; -; - x=""; blockread(f,l,1); blockread(f,x[1],l); x[0]=chr(l); nextstring_result=x; -return nextstring_result; +static untyped_file f; + + +static string nextstring() { +	byte l; +	string x; +	string nextstring_result; +	; +	x = ""; +	blockread(f, l, 1); +	blockread(f, x[1], l); +	x[0] = chr(l); +	nextstring_result = x; +	return nextstring_result;  } -void load() -{ -            byte minnames,minlines,minpeds,minfields; byte ff,fv; - -; - clear(); - assign(f,string("c:\\avalot\\also")+n+".avd"); -/*$I-*/ reset(f,1); /*$I+*/ if (ioresult!=0)  return; /* no Also file */ - seek(f,128); blockread(f,minnames,1); - for( fv=0; fv <= minnames; fv ++) -  for( ff=1; ff <= 2; ff ++) -   names[fv][ff]=nextstring(); - blockread(f,minlines,1); - blockread(f,lines,sizeof(lines[1])*minlines); - blockread(f,minpeds,1); - blockread(f,peds,sizeof(peds[1])*minpeds); - blockread(f,minfields,1); - blockread(f,fields,sizeof(fields[1])*minfields); - blockread(f,magics,sizeof(magics)); - blockread(f,portals,sizeof(portals)); - blockread(f,flags,sizeof(flags)); - blockread(f,listen[0],1); - blockread(f,listen[1],length(listen)); - close(f); - scramble(); +void load() { +	byte minnames, minlines, minpeds, minfields; +	byte ff, fv; + +	; +	clear(); +	assign(f, string("c:\\avalot\\also") + n + ".avd"); +	/*$I-*/ reset(f, 1); /*$I+*/ if (ioresult != 0)  return; /* no Also file */ +	seek(f, 128); +	blockread(f, minnames, 1); +	for (fv = 0; fv <= minnames; fv ++) +		for (ff = 1; ff <= 2; ff ++) +			names[fv][ff] = nextstring(); +	blockread(f, minlines, 1); +	blockread(f, lines, sizeof(lines[1])*minlines); +	blockread(f, minpeds, 1); +	blockread(f, peds, sizeof(peds[1])*minpeds); +	blockread(f, minfields, 1); +	blockread(f, fields, sizeof(fields[1])*minfields); +	blockread(f, magics, sizeof(magics)); +	blockread(f, portals, sizeof(portals)); +	blockread(f, flags, sizeof(flags)); +	blockread(f, listen[0], 1); +	blockread(f, listen[1], length(listen)); +	close(f); +	scramble();  }  void editmagics(); -const array<1,15,char> codes = "123456789ABCDEF"; +const array<1, 15, char> codes = "123456789ABCDEF";  static integer y; -static void display() -{ -    byte fv; -; - cleardevice(); - settextstyle(0,0,2); setcolor(15); outtextxy(0,0,"Magics."); - settextstyle(0,0,1); - for( fv=1; fv <= 15; fv ++) - {; -  y=23+fv*10; -  setcolor(fv); outtextxy(100,y,string('$')+codes[fv-1]); -  { -  magictype& with = magics[fv];  -  ; -   switch (with.op) { -    case nix: {; setcolor(8); outtextxy(140,y,"Nix"); } break; -    case bounce: {; setcolor(10); outtextxy(143,y,"Bounce!"); } break; -    case exclaim: {; -              setcolor(14); outtextxy(143,y,string("Exclaim: ")+strf(with.data)); -             } -             break; -    case transport: {; -                setcolor(12); -                outtextxy(143,y,string("Transport to ")+strf(hi(with.data))+ -                 ", ped "+strf(lo(with.data))); -               } -               break; -    case unfinished: {; -                 setcolor(15); outtextxy(143,y,"*** UNFINISHED! ***"); -                } -                break; -    case special: {; -              setcolor(6); outtextxy(143,y,string("Special call no. ")+strf(with.data)); -             } -             break; -    case opendoor: {; -               setcolor(11); -               outtextxy(143,y,string("Opening door to ")+strf(hi(with.data))+ -                ", ped "+strf(lo(with.data))); -              } -              break; -   } -  } - } - outtextxy(177,190,"Which do you want to change\? (Esc=Exit) $"); +static void display() { +	byte fv; +	; +	cleardevice(); +	settextstyle(0, 0, 2); +	setcolor(15); +	outtextxy(0, 0, "Magics."); +	settextstyle(0, 0, 1); +	for (fv = 1; fv <= 15; fv ++) { +		; +		y = 23 + fv * 10; +		setcolor(fv); +		outtextxy(100, y, string('$') + codes[fv - 1]); +		{ +			magictype &with = magics[fv]; +			; +			switch (with.op) { +			case nix: { +				; +				setcolor(8); +				outtextxy(140, y, "Nix"); +			} +			break; +			case bounce: { +				; +				setcolor(10); +				outtextxy(143, y, "Bounce!"); +			} +			break; +			case exclaim: { +				; +				setcolor(14); +				outtextxy(143, y, string("Exclaim: ") + strf(with.data)); +			} +			break; +			case transport: { +				; +				setcolor(12); +				outtextxy(143, y, string("Transport to ") + strf(hi(with.data)) + +				          ", ped " + strf(lo(with.data))); +			} +			break; +			case unfinished: { +				; +				setcolor(15); +				outtextxy(143, y, "*** UNFINISHED! ***"); +			} +			break; +			case special: { +				; +				setcolor(6); +				outtextxy(143, y, string("Special call no. ") + strf(with.data)); +			} +			break; +			case opendoor: { +				; +				setcolor(11); +				outtextxy(143, y, string("Opening door to ") + strf(hi(with.data)) + +				          ", ped " + strf(lo(with.data))); +			} +			break; +			} +		} +	} +	outtextxy(177, 190, "Which do you want to change\? (Esc=Exit) $");  } -static word ask(string x) -{ -    string q; word thomaswashere; integer e; -word ask_result; -; - cleardevice(); - setcolor(10); settextstyle(0,0,3); outtextxy(0,100,x); - do { -  input >> q >> NL; val(q,thomaswashere,e); - } while (!(e==0)); ask_result=thomaswashere; -return ask_result; +static word ask(string x) { +	string q; +	word thomaswashere; +	integer e; +	word ask_result; +	; +	cleardevice(); +	setcolor(10); +	settextstyle(0, 0, 3); +	outtextxy(0, 100, x); +	do { +		input >> q >> NL; +		val(q, thomaswashere, e); +	} while (!(e == 0)); +	ask_result = thomaswashere; +	return ask_result;  } -void editmagics() -{ - char r,rr; byte p; - -; - do { -  display(); -  do { -   r=upcase(readkey()); -   if (r=='\33')  return; -   p=pos(r,codes);  /* which are we editing? */ -  } while (!(p>0)); /* it must BE there... */ -  setcolor(p); cleardevice(); -  outtextxy(177,17,string("Editing magic $")+r+'.'); -  outtextxy(0,30,"New operation ( (N)ix, (B)ounce, (E)xclaim, (T)ransport, (U)nfinished),"); -  outtextxy(30,40,"(S)pecial, (O)pening Door?"); -  do { rr=upcase(readkey()); } while (!(set::of('N','B','E','T','U','S','O','\33', eos).has(rr))); -  { magictype& with = magics[p];  -   switch (rr) { -    case '\33': return; break; /* cancelling code */ -    case 'N': with.op=nix; break; -    case 'B': with.op=bounce; break; -    case 'E': {; with.op=exclaim; with.data=ask("Which scroll?"); } break; -    case 'T': {; with.op=transport; with.data=ask("Ped no.?")+ask("Whither?")*256; } break; -    case 'U': with.op=unfinished; break; -    case 'S': {; with.op=special; with.data=ask("Which call?"); } break; -    case 'O': {; with.op=opendoor; with.data=ask("Ped no.?")+ask("Whither?")*256; } break; -   }} - } while (!false); +void editmagics() { +	char r, rr; +	byte p; + +	; +	do { +		display(); +		do { +			r = upcase(readkey()); +			if (r == '\33')  return; +			p = pos(r, codes); /* which are we editing? */ +		} while (!(p > 0)); /* it must BE there... */ +		setcolor(p); +		cleardevice(); +		outtextxy(177, 17, string("Editing magic $") + r + '.'); +		outtextxy(0, 30, "New operation ( (N)ix, (B)ounce, (E)xclaim, (T)ransport, (U)nfinished),"); +		outtextxy(30, 40, "(S)pecial, (O)pening Door?"); +		do { +			rr = upcase(readkey()); +		} while (!(set::of('N', 'B', 'E', 'T', 'U', 'S', 'O', '\33', eos).has(rr))); +		{ +			magictype &with = magics[p]; +			switch (rr) { +			case '\33': +				return; +				break; /* cancelling code */ +			case 'N': +				with.op = nix; +				break; +			case 'B': +				with.op = bounce; +				break; +			case 'E': { +				; +				with.op = exclaim; +				with.data = ask("Which scroll?"); +			} +			break; +			case 'T': { +				; +				with.op = transport; +				with.data = ask("Ped no.?") + ask("Whither?") * 256; +			} +			break; +			case 'U': +				with.op = unfinished; +				break; +			case 'S': { +				; +				with.op = special; +				with.data = ask("Which call?"); +			} +			break; +			case 'O': { +				; +				with.op = opendoor; +				with.data = ask("Ped no.?") + ask("Whither?") * 256; +			} +			break; +			} +		} +	} while (!false);  }  void editportals(); -const array<9,15,char> codes1 = "9ABCDEF"; +const array<9, 15, char> codes1 = "9ABCDEF";  static integer y2; -static void display1() -{ -    byte fv; -; - cleardevice(); - settextstyle(0,0,2); setcolor(15); outtextxy(0,0,"Portals."); - settextstyle(0,0,1); - for( fv=9; fv <= 15; fv ++) - {; -  y2=fv*10-53; -  setcolor(fv); outtextxy(100,y2,string('$')+codes1[fv-1]); -  { -  magictype& with = portals[fv];  -  ; -   switch (with.op) { -    case nix: {; setcolor(8); outtextxy(140,y2,"Nix"); } break; -    case exclaim: {; -              setcolor(14); outtextxy(143,y2,string("Exclaim: ")+strf(with.data)); -             } -             break; -    case transport: {; -                setcolor(12); -                outtextxy(143,y2,string("Transport to ")+strf(hi(with.data))+ -                 ", ped "+strf(lo(with.data))); -               } -               break; -    case unfinished: {; -                 setcolor(15); outtextxy(143,y2,"*** UNFINISHED! ***"); -                } -                break; -    case special: {; -              setcolor(6); outtextxy(143,y2,string("Special call no. ")+strf(with.data)); -             } -             break; -    case opendoor: {; -               setcolor(11); -               outtextxy(143,y2,string("Opening door to ")+strf(hi(with.data))+ -                ", ped "+strf(lo(with.data))); -              } -              break; -   } -  } - } - outtextxy(177,190,"Which do you want to change\? (Esc=Exit) $"); +static void display1() { +	byte fv; +	; +	cleardevice(); +	settextstyle(0, 0, 2); +	setcolor(15); +	outtextxy(0, 0, "Portals."); +	settextstyle(0, 0, 1); +	for (fv = 9; fv <= 15; fv ++) { +		; +		y2 = fv * 10 - 53; +		setcolor(fv); +		outtextxy(100, y2, string('$') + codes1[fv - 1]); +		{ +			magictype &with = portals[fv]; +			; +			switch (with.op) { +			case nix: { +				; +				setcolor(8); +				outtextxy(140, y2, "Nix"); +			} +			break; +			case exclaim: { +				; +				setcolor(14); +				outtextxy(143, y2, string("Exclaim: ") + strf(with.data)); +			} +			break; +			case transport: { +				; +				setcolor(12); +				outtextxy(143, y2, string("Transport to ") + strf(hi(with.data)) + +				          ", ped " + strf(lo(with.data))); +			} +			break; +			case unfinished: { +				; +				setcolor(15); +				outtextxy(143, y2, "*** UNFINISHED! ***"); +			} +			break; +			case special: { +				; +				setcolor(6); +				outtextxy(143, y2, string("Special call no. ") + strf(with.data)); +			} +			break; +			case opendoor: { +				; +				setcolor(11); +				outtextxy(143, y2, string("Opening door to ") + strf(hi(with.data)) + +				          ", ped " + strf(lo(with.data))); +			} +			break; +			} +		} +	} +	outtextxy(177, 190, "Which do you want to change\? (Esc=Exit) $");  } -static word ask1(string x) -{ -    string q; word thomaswashere; integer e; -word ask1_result; -; - cleardevice(); - setcolor(10); settextstyle(0,0,3); outtextxy(0,100,x); - do { -  input >> q >> NL; val(q,thomaswashere,e); - } while (!(e==0)); ask1_result=thomaswashere; -return ask1_result; +static word ask1(string x) { +	string q; +	word thomaswashere; +	integer e; +	word ask1_result; +	; +	cleardevice(); +	setcolor(10); +	settextstyle(0, 0, 3); +	outtextxy(0, 100, x); +	do { +		input >> q >> NL; +		val(q, thomaswashere, e); +	} while (!(e == 0)); +	ask1_result = thomaswashere; +	return ask1_result;  } -void editportals()     /* much t'same as editmagics */ -{ - char r,rr; byte p; - -; - do { -  display1(); -  do { -   r=upcase(readkey()); -   if (r=='\33')  return; -   p=pos(r,codes1); /* which are we editing? */ -  } while (!(p>0)); /* it must BE there... */ -  p += 8; setcolor(p); cleardevice(); -  outtextxy(177,17,string("Editing portal $")+r+'.'); -  outtextxy(0,30,"New operation ( (N)ix, (E)xclaim, (T)ransport, (U)nfinished),"); -  outtextxy(30,40,"(S)pecial, (O)pening Door?"); -  do { rr=upcase(readkey()); } while (!(set::of('N','E','T','U','S','O','\33', eos).has(rr))); -  { magictype& with = portals[p];  -   switch (rr) { -    case '\33': return; break; /* cancelling code */ -    case 'N': with.op=nix; break; -    case 'E': {; with.op=exclaim; with.data=ask1("Which scroll?"); } break; -    case 'T': {; with.op=transport; with.data=ask1("Ped no.?")+ask1("Whither?")*256; } break; -    case 'U': with.op=unfinished; break; -    case 'S': {; with.op=special; with.data=ask1("Which call?"); } break; -    case 'O': {; with.op=opendoor; with.data=ask1("Ped no.?")+ask1("Whither?")*256; } break; -   }} - } while (!false); +void editportals() {   /* much t'same as editmagics */ +	char r, rr; +	byte p; + +	; +	do { +		display1(); +		do { +			r = upcase(readkey()); +			if (r == '\33')  return; +			p = pos(r, codes1); /* which are we editing? */ +		} while (!(p > 0)); /* it must BE there... */ +		p += 8; +		setcolor(p); +		cleardevice(); +		outtextxy(177, 17, string("Editing portal $") + r + '.'); +		outtextxy(0, 30, "New operation ( (N)ix, (E)xclaim, (T)ransport, (U)nfinished),"); +		outtextxy(30, 40, "(S)pecial, (O)pening Door?"); +		do { +			rr = upcase(readkey()); +		} while (!(set::of('N', 'E', 'T', 'U', 'S', 'O', '\33', eos).has(rr))); +		{ +			magictype &with = portals[p]; +			switch (rr) { +			case '\33': +				return; +				break; /* cancelling code */ +			case 'N': +				with.op = nix; +				break; +			case 'E': { +				; +				with.op = exclaim; +				with.data = ask1("Which scroll?"); +			} +			break; +			case 'T': { +				; +				with.op = transport; +				with.data = ask1("Ped no.?") + ask1("Whither?") * 256; +			} +			break; +			case 'U': +				with.op = unfinished; +				break; +			case 'S': { +				; +				with.op = special; +				with.data = ask1("Which call?"); +			} +			break; +			case 'O': { +				; +				with.op = opendoor; +				with.data = ask1("Ped no.?") + ask1("Whither?") * 256; +			} +			break; +			} +		} +	} while (!false);  } -void editflags() -{ -    char r; -; - cleardevice(); - settextstyle(0,0,2); setcolor(15); outtextxy(0,0,"Flags."); - settextstyle(0,0,1); setcolor(10); - outtextxy(100,30,"Press the letter of the flag you want to toggle."); - outtextxy(100,40,"Tab = flip screens, Esc/Enter = return to menu."); - setcolor(14); setfillstyle(1,0); - for( r='A'; r <= 'Z'; r ++) -  if (pos(r,flags)>0)  outtextxy(ord(r)*20-1223,77,r); - do { -  do { r=upcase(readkey()); } while (!(set::of(range('A','Z'),'\33','\15','\11', eos).has(r))); -  switch (r) { -   case RANGE_26('A','Z'): {; -              if (pos(r,flags)>0)  -              {;     /* flag is on- switch it off */ -               Delete(flags,pos(r,flags),1); -               bar(ord(r)*20-1223,77,ord(r)*20-1213,87); -               sound(1777); delay(7); nosound; -              } else -              {;     /* flag is off- switch it on */ -               flags=flags+r; -               outtextxy(ord(r)*20-1223,77,r); -               sound(177); delay(7); nosound; -              } -             } -             break; -   case '\33':case '\15': return; break; -   case '\11': flipover(); break; -  } - } while (!false); +void editflags() { +	char r; +	; +	cleardevice(); +	settextstyle(0, 0, 2); +	setcolor(15); +	outtextxy(0, 0, "Flags."); +	settextstyle(0, 0, 1); +	setcolor(10); +	outtextxy(100, 30, "Press the letter of the flag you want to toggle."); +	outtextxy(100, 40, "Tab = flip screens, Esc/Enter = return to menu."); +	setcolor(14); +	setfillstyle(1, 0); +	for (r = 'A'; r <= 'Z'; r ++) +		if (pos(r, flags) > 0)  outtextxy(ord(r) * 20 - 1223, 77, r); +	do { +		do { +			r = upcase(readkey()); +		} while (!(set::of(range('A', 'Z'), '\33', '\15', '\11', eos).has(r))); +		switch (r) { +		case RANGE_26('A', 'Z'): { +			; +			if (pos(r, flags) > 0) { +				;     /* flag is on- switch it off */ +				Delete(flags, pos(r, flags), 1); +				bar(ord(r) * 20 - 1223, 77, ord(r) * 20 - 1213, 87); +				sound(1777); +				delay(7); +				nosound; +			} else { +				;     /* flag is off- switch it on */ +				flags = flags + r; +				outtextxy(ord(r) * 20 - 1223, 77, r); +				sound(177); +				delay(7); +				nosound; +			} +		} +		break; +		case '\33': +		case '\15': +			return; +			break; +		case '\11': +			flipover(); +			break; +		} +	} while (!false);  } -void alsomenu() -{ -    char r; byte t; -; - do { -  setactivepage(0); setvisualpage(0); -  cleardevice(); setcolor(15); settextstyle(0,0,2); -  outtextxy(0,0,"Also... Main Menu"); -  settextstyle(0,0,1); setcolor(10); -  outtextxy(100, 40,"1) Edit the names of an object"); -  outtextxy(100, 50,"2) View all names"); -  outtextxy(100, 60,"3) Edit the description of this object"); -  outtextxy(100, 70,"4) View all associations."); -  outtextxy(100, 80,"5) Enter Lino mode."); -  outtextxy(100, 90,"6) Edit magics."); -  outtextxy(100,100,"7) Edit portals."); -  outtextxy(100,110,"8) Edit flags."); -  outtextxy(100,120,"9) Edit listen field."); -  outtextxy(100,160,"S) Save"); -  outtextxy(100,170,"L) Load"); -  outtextxy( 80,180,"Tab) View other screen"); -  if (current==0)  outtextxy(0,140,"< Main description of room >"); else -   outtextxy(0,140,string('<')+names[current][1]+'>'); -  do { -   r=upcase(readkey()); if (r=='\11')  flipover(); -  } while (!(set::of(range('1','9'),'S','L','\0', eos).has(r))); -  switch (r) { -   case '1': {; -         do { -          t=typeno("Which object\? (0-30)"); -         } while (!((t<30) || (t==255))); -         if ((t!=255) && (t!=0))  names[t][1]=typein(names[t][1]); -         current=t; -        } -        break; -   case '2': showallnames(); break; -   case '3': names[current][2]=typein(names[current][2]); break; -   case '4': showallassoc(); break; -   case '5': lino(); break; -   case '6': editmagics(); break; -   case '7': editportals(); break; -   case '8': editflags(); break; -   case '9': listen=typein(listen); break; -   case 'S': save(); break; -   case 'L': load(); break; -   case '\0': if (readkey()=='\55')  return; break; -  } - } while (!false); +void alsomenu() { +	char r; +	byte t; +	; +	do { +		setactivepage(0); +		setvisualpage(0); +		cleardevice(); +		setcolor(15); +		settextstyle(0, 0, 2); +		outtextxy(0, 0, "Also... Main Menu"); +		settextstyle(0, 0, 1); +		setcolor(10); +		outtextxy(100, 40, "1) Edit the names of an object"); +		outtextxy(100, 50, "2) View all names"); +		outtextxy(100, 60, "3) Edit the description of this object"); +		outtextxy(100, 70, "4) View all associations."); +		outtextxy(100, 80, "5) Enter Lino mode."); +		outtextxy(100, 90, "6) Edit magics."); +		outtextxy(100, 100, "7) Edit portals."); +		outtextxy(100, 110, "8) Edit flags."); +		outtextxy(100, 120, "9) Edit listen field."); +		outtextxy(100, 160, "S) Save"); +		outtextxy(100, 170, "L) Load"); +		outtextxy(80, 180, "Tab) View other screen"); +		if (current == 0)  outtextxy(0, 140, "< Main description of room >"); +		else +			outtextxy(0, 140, string('<') + names[current][1] + '>'); +		do { +			r = upcase(readkey()); +			if (r == '\11')  flipover(); +		} while (!(set::of(range('1', '9'), 'S', 'L', '\0', eos).has(r))); +		switch (r) { +		case '1': { +			; +			do { +				t = typeno("Which object\? (0-30)"); +			} while (!((t < 30) || (t == 255))); +			if ((t != 255) && (t != 0))  names[t][1] = typein(names[t][1]); +			current = t; +		} +		break; +		case '2': +			showallnames(); +			break; +		case '3': +			names[current][2] = typein(names[current][2]); +			break; +		case '4': +			showallassoc(); +			break; +		case '5': +			lino(); +			break; +		case '6': +			editmagics(); +			break; +		case '7': +			editportals(); +			break; +		case '8': +			editflags(); +			break; +		case '9': +			listen = typein(listen); +			break; +		case 'S': +			save(); +			break; +		case 'L': +			load(); +			break; +		case '\0': +			if (readkey() == '\55')  return; +			break; +		} +	} while (!false);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - output << "*** ALSO ***" << NL; - output << NL; - output << "No. of screen to edit?"; input >> n >> NL; load(); - assign(f,"v:avalot.fnt"); reset(f); f >> skinny; close(f); - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); current=0; - loadscreen(); - alsomenu(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	output << "*** ALSO ***" << NL; +	output << NL; +	output << "No. of screen to edit?"; +	input >> n >> NL; +	load(); +	assign(f, "v:avalot.fnt"); +	reset(f); +	f >> skinny; +	close(f); +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	current = 0; +	loadscreen(); +	alsomenu(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/andexor.cpp b/engines/avalanche/andexor.cpp index df654117b8..b57585d3c6 100644 --- a/engines/avalanche/andexor.cpp +++ b/engines/avalanche/andexor.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 @@ -33,119 +33,128 @@ namespace Avalanche {  const integer taboo = cyan;  struct adxtype { -           varying_string<12> name; /* name of character */ -           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 all the pictures */ +	varying_string<12> name; /* name of character */ +	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 all the pictures */  }; -integer gd,gm; +integer gd, gm;  adxtype adx; -matrix<1,24,0,1,pointer> adxpic;     /* the pictures themselves */ -untyped_file f; string x; byte n; - -void load(string nam) -{ -    byte z; - array<1,4,pointer> a; - untyped_file f; word s; - varying_string<40> xxx; - string check; - -; - assign(f,nam); - reset(f,1); - blockread(f,xxx,41); - blockread(f,check,13); - blockread(f,check,31); - s=imagesize(0,0,getmaxx(),75); - for( z=1; z <= 2; z ++) - {; -  getmem(a[z],s); -  blockread(f,a[z],s); -  putimage(0,15+(z-1)*75,a[z],0); -  freemem(a[z],s); - } - close(f); +matrix<1, 24, 0, 1, pointer> adxpic; /* the pictures themselves */ +untyped_file f; +string x; +byte n; + +void load(string nam) { +	byte z; +	array<1, 4, pointer> a; +	untyped_file f; +	word s; +	varying_string<40> xxx; +	string check; + +	; +	assign(f, nam); +	reset(f, 1); +	blockread(f, xxx, 41); +	blockread(f, check, 13); +	blockread(f, check, 31); +	s = imagesize(0, 0, getmaxx(), 75); +	for (z = 1; z <= 2; z ++) { +		; +		getmem(a[z], s); +		blockread(f, a[z], s); +		putimage(0, 15 + (z - 1) * 75, a[z], 0); +		freemem(a[z], s); +	} +	close(f);  } -void silhouette() -{ -    byte x,y,c; -; - setvisualpage(1); setactivepage(1); setfillstyle(1,15); - for( gm=0; gm <= 3; gm ++) -  for( gd=1; gd <= 6; gd ++) -  {;     /* 26,15 */ -/*   bar((gm div 2)*320+gd*40,20+(gm mod 2)*40,(gm div 2)*320+gd*40+35,(gm mod 2)*40+60); */ -   for( y=1; y <= adx.yl; y ++) -    for( x=1; x <= adx.xl; x ++) -    {; -     setactivepage(0); -     c=getpixel((gm / 2)*320+gd*40+x,20+(gm % 2)*40+y); -     setactivepage(1); -/*     if c<>taboo then putpixel((gm div 2)*320+gd*40+x,20+(gm mod 2)*40+y,0); */ -     if (c==taboo)  putpixel((gm / 2)*320+gd*40+x,20+(gm % 2)*40+y,15); -    } -   getmem(adxpic[gm*6+gd][0],adx.size); -   getimage((gm / 2)*320+gd*40+1,20+(gm % 2)*40+1, -     (gm / 2)*320+gd*40+adx.xl,20+(gm % 2)*40+adx.yl, -      adxpic[gm*6+gd][0]); -  } +void silhouette() { +	byte x, y, c; +	; +	setvisualpage(1); +	setactivepage(1); +	setfillstyle(1, 15); +	for (gm = 0; gm <= 3; gm ++) +		for (gd = 1; gd <= 6; gd ++) { +			;     /* 26,15 */ +			/*   bar((gm div 2)*320+gd*40,20+(gm mod 2)*40,(gm div 2)*320+gd*40+35,(gm mod 2)*40+60); */ +			for (y = 1; y <= adx.yl; y ++) +				for (x = 1; x <= adx.xl; x ++) { +					; +					setactivepage(0); +					c = getpixel((gm / 2) * 320 + gd * 40 + x, 20 + (gm % 2) * 40 + y); +					setactivepage(1); +					/*     if c<>taboo then putpixel((gm div 2)*320+gd*40+x,20+(gm mod 2)*40+y,0); */ +					if (c == taboo)  putpixel((gm / 2) * 320 + gd * 40 + x, 20 + (gm % 2) * 40 + y, 15); +				} +			getmem(adxpic[gm * 6 + gd][0], adx.size); +			getimage((gm / 2) * 320 + gd * 40 + 1, 20 + (gm % 2) * 40 + 1, +			         (gm / 2) * 320 + gd * 40 + adx.xl, 20 + (gm % 2) * 40 + adx.yl, +			         adxpic[gm * 6 + gd][0]); +		}  } -void standard() -{ -    byte x,y,c; -; - setvisualpage(2); setactivepage(2); - for( gm=0; gm <= 3; gm ++) -  for( gd=1; gd <= 6; gd ++) -  {;     /* 26,15 */ -   for( y=1; y <= adx.yl; y ++) -    for( x=1; x <= adx.xl; x ++) -    {; -     setactivepage(0); -     c=getpixel((gm / 2)*320+gd*40+x,20+(gm % 2)*40+y); -     setactivepage(2); -     if (c!=taboo)  putpixel((gm / 2)*320+gd*40+x,20+(gm % 2)*40+y,c); -    } -   getmem(adxpic[gm*6+gd][1],adx.size); -   getimage((gm / 2)*320+gd*40+1,20+(gm % 2)*40+1, -     (gm / 2)*320+gd*40+adx.xl,20+(gm % 2)*40+adx.yl, -      adxpic[gm*6+gd][1]); -  } +void standard() { +	byte x, y, c; +	; +	setvisualpage(2); +	setactivepage(2); +	for (gm = 0; gm <= 3; gm ++) +		for (gd = 1; gd <= 6; gd ++) { +			;     /* 26,15 */ +			for (y = 1; y <= adx.yl; y ++) +				for (x = 1; x <= adx.xl; x ++) { +					; +					setactivepage(0); +					c = getpixel((gm / 2) * 320 + gd * 40 + x, 20 + (gm % 2) * 40 + y); +					setactivepage(2); +					if (c != taboo)  putpixel((gm / 2) * 320 + gd * 40 + x, 20 + (gm % 2) * 40 + y, c); +				} +			getmem(adxpic[gm * 6 + gd][1], adx.size); +			getimage((gm / 2) * 320 + gd * 40 + 1, 20 + (gm % 2) * 40 + 1, +			         (gm / 2) * 320 + gd * 40 + adx.xl, 20 + (gm % 2) * 40 + adx.yl, +			         adxpic[gm * 6 + gd][1]); +		}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,""); fillchar(adxpic,sizeof(adxpic),'\261'); - load("v:avalots.avd"); -/* getmem(adxpic[1,1,1],adx.size); getimage(40,20,75,60,adxpic[1,1,1]^); - putimage(100,100,adxpic[1,1,1]^,0); */ - {; -  adx.name="Avalot"; -  adx.num=24; adx.seq=6; -  adx.xl=32; adx.yl=35; /* 35,40 */ - -  adx.size=imagesize(40,20,40+adx.xl,60+adx.yl); - } - silhouette(); - standard(); - x=string("Sprite file for Avvy - Trippancy IV. Subject to copyright.")+'\32'; - assign(f,"v:sprite1.avd"); - rewrite(f,1); - blockwrite(f,x[1],59); - blockwrite(f,adx,sizeof(adx)); - for( gd=1; gd <= adx.num; gd ++) -  for( gm=0; gm <= 1; gm ++) -   blockwrite(f,adxpic[gd][gm],adx.size); /* next image */ - close(f); - closegraph(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	fillchar(adxpic, sizeof(adxpic), '\261'); +	load("v:avalots.avd"); +	/* getmem(adxpic[1,1,1],adx.size); getimage(40,20,75,60,adxpic[1,1,1]^); +	 putimage(100,100,adxpic[1,1,1]^,0); */ +	{ +		; +		adx.name = "Avalot"; +		adx.num = 24; +		adx.seq = 6; +		adx.xl = 32; +		adx.yl = 35; /* 35,40 */ + +		adx.size = imagesize(40, 20, 40 + adx.xl, 60 + adx.yl); +	} +	silhouette(); +	standard(); +	x = string("Sprite file for Avvy - Trippancy IV. Subject to copyright.") + '\32'; +	assign(f, "v:sprite1.avd"); +	rewrite(f, 1); +	blockwrite(f, x[1], 59); +	blockwrite(f, adx, sizeof(adx)); +	for (gd = 1; gd <= adx.num; gd ++) +		for (gm = 0; gm <= 1; gm ++) +			blockwrite(f, adxpic[gd][gm], adx.size); /* next image */ +	close(f); +	closegraph(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/andexor2.cpp b/engines/avalanche/andexor2.cpp index 136f719afe..605a185343 100644 --- a/engines/avalanche/andexor2.cpp +++ b/engines/avalanche/andexor2.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 @@ -33,130 +33,144 @@ namespace Avalanche {  const integer taboo = cyan;  struct adxtype { -           varying_string<12> name; /* name of character */ -           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 all the pictures */ -           byte fgc,bgc; /* foreground & background bubble colours */ +	varying_string<12> name; /* name of character */ +	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 all the pictures */ +	byte fgc, bgc; /* foreground & background bubble colours */  }; -integer gd,gm; +integer gd, gm;  adxtype adx; -array<0,1,pointer> adxpic;     /* the pictures themselves */ -untyped_file f; string x; byte n; integer side2; word bigsize; - -void load(string n) -{ -    byte z; - array<1,4,pointer> a; - untyped_file f; word s; - varying_string<40> xxx; - string check; - -; - assign(f,n); - reset(f,1); - blockread(f,xxx,41); - blockread(f,check,13); - blockread(f,check,31); - s=imagesize(0,0,getmaxx(),75); - for( z=1; z <= 2; z ++) - {; -  getmem(a[z],s); -  blockread(f,a[z],s); -  putimage(0,15+(z-1)*75,a[z],0); -  freemem(a[z],s); - } - close(f); +array<0, 1, pointer> adxpic;   /* the pictures themselves */ +untyped_file f; +string x; +byte n; +integer side2; +word bigsize; + +void load(string n) { +	byte z; +	array<1, 4, pointer> a; +	untyped_file f; +	word s; +	varying_string<40> xxx; +	string check; + +	; +	assign(f, n); +	reset(f, 1); +	blockread(f, xxx, 41); +	blockread(f, check, 13); +	blockread(f, check, 31); +	s = imagesize(0, 0, getmaxx(), 75); +	for (z = 1; z <= 2; z ++) { +		; +		getmem(a[z], s); +		blockread(f, a[z], s); +		putimage(0, 15 + (z - 1) * 75, a[z], 0); +		freemem(a[z], s); +	} +	close(f);  } -void silhouette() -{ -    byte x,y,c; -; - setvisualpage(1); setactivepage(1); setfillstyle(1,15); - {; -  for( gm=0; gm <= 3; gm ++) -   for( gd=1; gd <= 6; gd ++) -   {;     /* 26,15 */ -    side2=adx.xl*6; -    for( y=1; y <= adx.yl; y ++) -     for( x=1; x <= adx.xl; x ++) -     {; -      setactivepage(0); -      c=getpixel((gm / 2)*320+gd*40+x,20+(gm % 2)*40+y); -      setactivepage(1); -      if (c==taboo)  -       putpixel((gm / 2)*side2+gd*adx.xl+x,20+(gm % 2)*adx.yl+y,15); -     } -   } -  bigsize=imagesize(adx.xl+1,21,adx.xl*13,20+adx.yl*2); -  getmem(adxpic[0],bigsize); -  getimage(adx.xl+1,21,adx.xl*13,20+adx.yl*2,adxpic[0]); -  putimage(adx.xl+1,21,adxpic[0],notput); - } +void silhouette() { +	byte x, y, c; +	; +	setvisualpage(1); +	setactivepage(1); +	setfillstyle(1, 15); +	{ +		; +		for (gm = 0; gm <= 3; gm ++) +			for (gd = 1; gd <= 6; gd ++) { +				;     /* 26,15 */ +				side2 = adx.xl * 6; +				for (y = 1; y <= adx.yl; y ++) +					for (x = 1; x <= adx.xl; x ++) { +						; +						setactivepage(0); +						c = getpixel((gm / 2) * 320 + gd * 40 + x, 20 + (gm % 2) * 40 + y); +						setactivepage(1); +						if (c == taboo) +							putpixel((gm / 2)*side2 + gd * adx.xl + x, 20 + (gm % 2)*adx.yl + y, 15); +					} +			} +		bigsize = imagesize(adx.xl + 1, 21, adx.xl * 13, 20 + adx.yl * 2); +		getmem(adxpic[0], bigsize); +		getimage(adx.xl + 1, 21, adx.xl * 13, 20 + adx.yl * 2, adxpic[0]); +		putimage(adx.xl + 1, 21, adxpic[0], notput); +	}  } -void standard() -{ -    byte x,y,c; -; - setvisualpage(2); setactivepage(2); - {; -  for( gm=0; gm <= 3; gm ++) -   for( gd=1; gd <= 6; gd ++) -   {;     /* 26,15 */ -    for( y=1; y <= adx.yl; y ++) -     for( x=1; x <= adx.xl; x ++) -     {; -      setactivepage(0); -      c=getpixel((gm / 2)*320+gd*40+x,20+(gm % 2)*40+y); -      setactivepage(2); -      if (c!=taboo)  -       putpixel((gm / 2)*side2+gd*adx.xl+x,20+(gm % 2)*adx.yl+y,c); -     } -/*    getmem(adxpic[gm*6+gd,1],adx.size); -    getimage((gm div 2)*side2+gd*xl+x,20+(gm mod 2)*yl+y, -       (gm div 2)*side2+gd*xl*2+x,20+(gm mod 2)*yl*2+y, -       adxpic[gm*6+gd,1]^); */ -  } -  getmem(adxpic[1],bigsize); -  getimage(adx.xl+1,21,adx.xl*13,20+adx.yl*2,adxpic[1]); -  putimage(adx.xl+1,21,adxpic[1],notput); - } +void standard() { +	byte x, y, c; +	; +	setvisualpage(2); +	setactivepage(2); +	{ +		; +		for (gm = 0; gm <= 3; gm ++) +			for (gd = 1; gd <= 6; gd ++) { +				;     /* 26,15 */ +				for (y = 1; y <= adx.yl; y ++) +					for (x = 1; x <= adx.xl; x ++) { +						; +						setactivepage(0); +						c = getpixel((gm / 2) * 320 + gd * 40 + x, 20 + (gm % 2) * 40 + y); +						setactivepage(2); +						if (c != taboo) +							putpixel((gm / 2)*side2 + gd * adx.xl + x, 20 + (gm % 2)*adx.yl + y, c); +					} +				/*    getmem(adxpic[gm*6+gd,1],adx.size); +				    getimage((gm div 2)*side2+gd*xl+x,20+(gm mod 2)*yl+y, +				       (gm div 2)*side2+gd*xl*2+x,20+(gm mod 2)*yl*2+y, +				       adxpic[gm*6+gd,1]^); */ +			} +		getmem(adxpic[1], bigsize); +		getimage(adx.xl + 1, 21, adx.xl * 13, 20 + adx.yl * 2, adxpic[1]); +		putimage(adx.xl + 1, 21, adxpic[1], notput); +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,""); fillchar(adxpic,sizeof(adxpic),'\261'); - load("v:avalots.avd"); - {; -  adx.name="Avalot"; -  adx.num=24; adx.seq=6; -  adx.xl=33; adx.yl=35; /* 35,40 */ -  adx.fgc=yellow; adx.bgc=red; - -  adx.size=imagesize(40,20,40+adx.xl,60+adx.yl); - } - silhouette(); - standard(); - x=string("Sprite file for Avvy - Trippancy IV. Subject to copyright.")+'\32'; - assign(f,"v:sprite1.avd"); - rewrite(f,1); - blockwrite(f,x[1],59); - blockwrite(f,adx,sizeof(adx)); - blockwrite(f,bigsize,2); - for( gm=0; gm <= 1; gm ++) - {; -  putimage(0,0,adxpic[gm],0); -  blockwrite(f,adxpic[gm],bigsize);  /* next image */ - } - close(f); - closegraph(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	fillchar(adxpic, sizeof(adxpic), '\261'); +	load("v:avalots.avd"); +	{ +		; +		adx.name = "Avalot"; +		adx.num = 24; +		adx.seq = 6; +		adx.xl = 33; +		adx.yl = 35; /* 35,40 */ +		adx.fgc = yellow; +		adx.bgc = red; + +		adx.size = imagesize(40, 20, 40 + adx.xl, 60 + adx.yl); +	} +	silhouette(); +	standard(); +	x = string("Sprite file for Avvy - Trippancy IV. Subject to copyright.") + '\32'; +	assign(f, "v:sprite1.avd"); +	rewrite(f, 1); +	blockwrite(f, x[1], 59); +	blockwrite(f, adx, sizeof(adx)); +	blockwrite(f, bigsize, 2); +	for (gm = 0; gm <= 1; gm ++) { +		; +		putimage(0, 0, adxpic[gm], 0); +		blockwrite(f, adxpic[gm], bigsize); /* next image */ +	} +	close(f); +	closegraph(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/andextst.cpp b/engines/avalanche/andextst.cpp index 2cfe410b98..b5e1d9a5ba 100644 --- a/engines/avalanche/andextst.cpp +++ b/engines/avalanche/andextst.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 @@ -29,63 +29,78 @@  namespace Avalanche { -typedef matrix<1,24,0,1,pointer> adxtype; +typedef matrix<1, 24, 0, 1, pointer> adxtype; -integer gd,gm; -word s; untyped_file f; byte n,anim,cp,t; -array<0,0,adxtype> adx; -array<0,1,pointer> back; +integer gd, gm; +word s; +untyped_file f; +byte n, anim, cp, t; +array<0, 0, adxtype> adx; +array<0, 1, pointer> back;  integer x; -array<0,1,integer> ox; +array<0, 1, integer> ox; -void andex(integer x,integer y, byte n,byte num) -{; - putimage(x,y,adx[num][n][0],andput); - putimage(x,y,adx[num][n][1],xorput); +void andex(integer x, integer y, byte n, byte num) { +	; +	putimage(x, y, adx[num][n][0], andput); +	putimage(x, y, adx[num][n][1], xorput);  } -void loadadx(byte num, string x) -{ -    byte n; -; - assign(f,x); - reset(f,1); seek(f,59); - blockread(f,n,1); /* No. of images... */ - for( gd=1; gd <= n; gd ++) -  for( gm=0; gm <= 1; gm ++) -  {; -   blockread(f,s,2); /* size of next image... */ -   getmem(adx[num][gd][gm],s); -   blockread(f,adx[num][gd][gm],s); /* next image */ -  } - close(f); +void loadadx(byte num, string x) { +	byte n; +	; +	assign(f, x); +	reset(f, 1); +	seek(f, 59); +	blockread(f, n, 1); /* No. of images... */ +	for (gd = 1; gd <= n; gd ++) +		for (gm = 0; gm <= 1; gm ++) { +			; +			blockread(f, s, 2); /* size of next image... */ +			getmem(adx[num][gd][gm], s); +			blockread(f, adx[num][gd][gm], s); /* next image */ +		} +	close(f);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - loadadx(0,"d:sprite0.avd"); - loadadx(1,"d:sprite0.avd"); - gd=3; gm=0; initgraph(gd,gm,""); - for( gd=0; gd <= 1; gd ++) - {; -  setactivepage(gd); setfillstyle(6,1); bar(0,0,640,200); -  getmem(back[gd],s); - } - x=0; anim=1; cp=0; t=2; setactivepage(0); - do { -  setactivepage(cp); setvisualpage(1-cp); -  for( gm=0; gm <= 1; gm ++) -  {; -   if (t>0)  t -= 1; else -    putimage(ox[cp],77,back[cp],copyput); -   getimage(x,77,x+31,77+35,back[cp]); -   andex(x,177,anim+6,gm); -   ox[gm][cp]=x; x += 5; -  } -  anim += 1; if (anim==7)  anim=1;cp=1-cp; - } while (!false); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	loadadx(0, "d:sprite0.avd"); +	loadadx(1, "d:sprite0.avd"); +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	for (gd = 0; gd <= 1; gd ++) { +		; +		setactivepage(gd); +		setfillstyle(6, 1); +		bar(0, 0, 640, 200); +		getmem(back[gd], s); +	} +	x = 0; +	anim = 1; +	cp = 0; +	t = 2; +	setactivepage(0); +	do { +		setactivepage(cp); +		setvisualpage(1 - cp); +		for (gm = 0; gm <= 1; gm ++) { +			; +			if (t > 0)  t -= 1; +			else +				putimage(ox[cp], 77, back[cp], copyput); +			getimage(x, 77, x + 31, 77 + 35, back[cp]); +			andex(x, 177, anim + 6, gm); +			ox[gm][cp] = x; +			x += 5; +		} +		anim += 1; +		if (anim == 7)  anim = 1; +		cp = 1 - cp; +	} while (!false); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/arch.cpp b/engines/avalanche/arch.cpp index 815018df8a..2172a574a0 100644 --- a/engines/avalanche/arch.cpp +++ b/engines/avalanche/arch.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 @@ -33,7 +33,7 @@                   ENID             Edna's manager. */  #define __arch_implementation__ -           /* Loads/ saves files. */ +/* Loads/ saves files. */  #include "arch.h" @@ -44,105 +44,105 @@  namespace Avalanche {  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 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) */ +	/* 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 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) */  }; -  /* Possible values of edhead.os: -     1 = DOS        4 = Mac -     2 = Windows    5 = Amiga -     3 = OS/2       6 = ST */ -const string crlf = string('\15')+'\12'; - -const array<1,177,char> ednafirst =  - string("This is an EDNA-based file, saved by a Thorsoft game. Good luck!")+crlf+ - '\32'+ /* 67 bytes... */ - crlf+crlf+ /* 71 bytes... */ - "12345678901234567890123456789012345678901234567890"+ - "12345678901234567890123456789012345678901234567890"+ - "123456"; +/* Possible values of edhead.os: +   1 = DOS        4 = Mac +   2 = Windows    5 = Amiga +   3 = OS/2       6 = ST */ +const string crlf = string('\15') + '\12'; + +const array<1, 177, char> ednafirst = +    string("This is an EDNA-based file, saved by a Thorsoft game. Good luck!") + crlf + +    '\32' + /* 67 bytes... */ +    crlf + crlf + /* 71 bytes... */ +    "12345678901234567890123456789012345678901234567890" + +    "12345678901234567890123456789012345678901234567890" + +    "123456";  const char months[] = "JanFebMarAprMayJunJulAugSepOctNovDec"; -const string ednaid = string("TT")+'\261'+'\60'+'\1'+'\165'+'\261'+'\231'+'\261'; +const string ednaid = string("TT") + '\261' + '\60' + '\1' + '\165' + '\261' + '\231' + '\261';  const integer ttage = 18;  const char ttwashere[] = "Thomas was here "; -void save(string name) -{ - untyped_file f; - edhead eh; - word groi; - string groi2; -; - fillchar(eh,sizeof(eh),'\261'); /* Fill up the edhead */ +void save(string name) { +	untyped_file f; +	edhead eh; +	word groi; +	string groi2; +	; +	fillchar(eh, sizeof(eh), '\261'); /* Fill up the edhead */ - dna.saves += 1; /* It's been saved one more time... */ +	dna.saves += 1; /* It's been saved one more time... */ - {; +	{ +		; -  /* Info about this program */ +		/* Info about this program */ -  id=ednaid;   /* Edna's signature */ -  revision=2;  /* Second revision of .ASG format */ -  game="Lord Avalot d'Argent";   /* Title of game */ -  shortname="Avalot"; -  number=2;  /* Second Avvy game */ -  ver=100;  /* Version 1.00 */ -  verstr="1.00";  /* ditto */ -  filename="AVALOT.EXE";  /* program's filename */ -  os=1;  /* Saved under DOS */ +		id = ednaid; /* Edna's signature */ +		revision = 2; /* Second revision of .ASG format */ +		game = "Lord Avalot d'Argent"; /* Title of game */ +		shortname = "Avalot"; +		number = 2; /* Second Avvy game */ +		ver = 100; /* Version 1.00 */ +		verstr = "1.00"; /* ditto */ +		filename = "AVALOT.EXE"; /* program's filename */ +		os = 1; /* Saved under DOS */ -  /* Info on this particular game */ +		/* Info on this particular game */ -  fsplit(name,groi2,fn,groi2); /* fn = filename of this game */ -  getdate(d,m,y,groi); /* Day, month & year when the game was saved */ -  desc=roomname;  /* Description of game (same as in Avaricius!) */ -  len=sizeof(dna);  /* Length of DNA (it's not going to be above 65535!) */ +		fsplit(name, groi2, fn, groi2); /* fn = filename of this game */ +		getdate(d, m, y, groi); /* Day, month & year when the game was saved */ +		desc = roomname; /* Description of game (same as in Avaricius!) */ +		len = sizeof(dna); /* Length of DNA (it's not going to be above 65535!) */ -  /* Quick reference & miscellaneous */ +		/* Quick reference & miscellaneous */ -  saves=dna.saves;  /* no. of times this game has been saved */ -  cash=dna.pence;  /* contents of your wallet in numerical form */ -  money=lsd(); /* ditto in string form (eg 5/-, or 1 denarius)*/ -  points=dna.score;  /* your score */ - } +		saves = dna.saves; /* no. of times this game has been saved */ +		cash = dna.pence; /* contents of your wallet in numerical form */ +		money = lsd(); /* ditto in string form (eg 5/-, or 1 denarius)*/ +		points = dna.score; /* your score */ +	} - assign(f,name); - rewrite(f,1); +	assign(f, name); +	rewrite(f, 1); - blockwrite(f,ednafirst,177); - blockwrite(f,eh,sizeof(eh)); - blockwrite(f,dna,sizeof(dna)); +	blockwrite(f, ednafirst, 177); +	blockwrite(f, eh, sizeof(eh)); +	blockwrite(f, dna, sizeof(dna)); - for( groi=1; groi <= ttage; groi ++) -  blockwrite(f,ttwashere,sizeof(ttwashere)); +	for (groi = 1; groi <= ttage; groi ++) +		blockwrite(f, ttwashere, sizeof(ttwashere)); - close(f); +	close(f);  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/arch.h b/engines/avalanche/arch.h index 840ceb446e..3bff07ad2c 100644 --- a/engines/avalanche/arch.h +++ b/engines/avalanche/arch.h @@ -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 diff --git a/engines/avalanche/avalot9.cpp b/engines/avalanche/avalot9.cpp index f793fa5402..7351d08060 100644 --- a/engines/avalanche/avalot9.cpp +++ b/engines/avalanche/avalot9.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 @@ -53,89 +53,120 @@  namespace Avalanche { -void setup() -{ - integer gd,gm; - - checkbreak=false; visible=m_no; to_do=0; lmo=false; resetscroll; - Randomize(); setup_vmc; on_virtual; - gd=3; gm=0; initgraph(gd,gm,""); - holdthedawn=true; dusk; - cmp=177; mouse_init;  /*on;*/ dropsok=true; ctrl=ckey; oldjw=177; - mousetext=""; c=999; settextjustify(0,0); ddmnow=false; load_digits; - cheat=false; cp=0; curpos=1;  - quote=true; ledstatus=177; defaultled=2; -/* TSkellern:=0; { Replace with a more local variable sometime }*/ - dna.rw=stopped; enid_filename="";   /* undefined. */ - toolbar; state(2); copy03; lastscore="TJA"; - -/* for gd:=0 to 1 do - begin -  setactivepage(gd); outtextxy(7,177,chr(48+gd)); - end;*/ - - loadtrip; - - if ((filetoload=="") & (~ reloaded))  -  newgame; /* no game was requested- load the default */ - else { -  if (~ reloaded)  avvy_background; -  standard_bar; sprite_run; -  if (reloaded)  edna_reload; else -  {     /* Filename given on the command line (or loadfirst) */ -   edna_load(filetoload); -   if (there_was_a_problem)  -   { -    display("So let's start from the beginning instead..."); -    holdthedawn=true; dusk; newgame; -   } -  } - } - - if (~ reloaded)  - { -  soundfx=~ soundfx; fxtoggle; -  thinkabout(money,a_thing); - } - - get_back_loretta; gm=getpixel(0,0); setcolor(7); - holdthedawn=false; dawn; cursoron=false; cursor_on; newspeed; - - if (~ reloaded)  -   dixi('q',83); /* Info on the game, etc. */ +void setup() { +	integer gd, gm; + +	checkbreak = false; +	visible = m_no; +	to_do = 0; +	lmo = false; +	resetscroll; +	Randomize(); +	setup_vmc; +	on_virtual; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	holdthedawn = true; +	dusk; +	cmp = 177; +	mouse_init;  /*on;*/ dropsok = true; +	ctrl = ckey; +	oldjw = 177; +	mousetext = ""; +	c = 999; +	settextjustify(0, 0); +	ddmnow = false; +	load_digits; +	cheat = false; +	cp = 0; +	curpos = 1; +	quote = true; +	ledstatus = 177; +	defaultled = 2; +	/* TSkellern:=0; { Replace with a more local variable sometime }*/ +	dna.rw = stopped; +	enid_filename = ""; /* undefined. */ +	toolbar; +	state(2); +	copy03; +	lastscore = "TJA"; + +	/* for gd:=0 to 1 do +	 begin +	  setactivepage(gd); outtextxy(7,177,chr(48+gd)); +	 end;*/ + +	loadtrip; + +	if ((filetoload == "") & (~ reloaded)) +		newgame; /* no game was requested- load the default */ +	else { +		if (~ reloaded)  avvy_background; +		standard_bar; +		sprite_run; +		if (reloaded)  edna_reload; +		else { +			/* Filename given on the command line (or loadfirst) */ +			edna_load(filetoload); +			if (there_was_a_problem) { +				display("So let's start from the beginning instead..."); +				holdthedawn = true; +				dusk; +				newgame; +			} +		} +	} + +	if (~ reloaded) { +		soundfx = ~ soundfx; +		fxtoggle; +		thinkabout(money, a_thing); +	} + +	get_back_loretta; +	gm = getpixel(0, 0); +	setcolor(7); +	holdthedawn = false; +	dawn; +	cursoron = false; +	cursor_on; +	newspeed; + +	if (~ reloaded) +		dixi('q', 83); /* Info on the game, etc. */  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - setup(); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	setup(); - do { +	do { -  clock; -  keyboard_link; -  menu_link; -  readstick; -  force_numlock; -  get_back_loretta; -  trippancy_link; -  pics_link; -  checkclick; +		clock; +		keyboard_link; +		menu_link; +		readstick; +		force_numlock; +		get_back_loretta; +		trippancy_link; +		pics_link; +		checkclick; -  if (visible==m_virtual)  plot_vmc(mx,my,cp); -  flip_page; /* <<<! */ -  slowdown; -  if (visible==m_virtual)  wipe_vmc(cp); +		if (visible == m_virtual)  plot_vmc(mx, my, cp); +		flip_page; /* <<<! */ +		slowdown; +		if (visible == m_virtual)  wipe_vmc(cp); -  one_tick; +		one_tick; - } while (!lmo); +	} while (!lmo); - restorecrtmode(); - if (logging)  close(logfile); +	restorecrtmode(); +	if (logging)  close(logfile); - end_of_program; - return EXIT_SUCCESS; +	end_of_program; +	return EXIT_SUCCESS;  }  /*  typein; commanded; last:=current; */ diff --git a/engines/avalanche/avbkgrnd.cpp b/engines/avalanche/avbkgrnd.cpp index 0ca6b721a0..7ab263049b 100644 --- a/engines/avalanche/avbkgrnd.cpp +++ b/engines/avalanche/avbkgrnd.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 @@ -30,88 +30,90 @@  namespace Avalanche { -integer gd,gm; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - /* Screen size: Starts at $A000:$320 (coords 0,10). - Length: 12000 (150*80) bytes. - If we divide it into sets of 5 lines (400 bytes) each, there are 30. - There are 40 words on a line. - - Patterns: -  4AAA = "AVVY" -  AAAE -  EAA4 -  A444 - -  A4AA = "YAVV" -  AEAA -  4EAA -  4A44 */ -/* - asm -  mov bx,$A000; -  mov es,bx; { The segment to copy it to... } -  mov di,$370;  { The offset (10 pixels down, plus 1 offset.) } - -  mov cx,10; -  mov ax,$AA4A; call @sameline; { Print "AVVY" } -  mov ax,$AEAA; call @sameline; -  mov ax,$A4EA; call @sameline; -  mov ax,$44A4; call @sameline; - -  mov cx,9; -  mov ax,$AAA4; call @sameline; { Print "YAVV" } -  mov ax,$AAEA; call @sameline; -  mov ax,$AA4E; call @sameline; -  mov ax,$444A; call @sameline; - -  mov ax,$4AAA; call @sameline; { Print "VYAV" } -  mov ax,$AAAE; call @sameline; -  mov ax,$EAA4; call @sameline; -  mov ax,$A444; call @sameline; - -  mov ax,$A4AA; call @sameline; { Print "VVYA" } -  mov ax,$EAAA; call @sameline; -  mov ax,$4EAA; call @sameline; -  mov ax,$4A44; call @sameline; - -  jmp @the_end; - -  { Replicate the same line many times. } - -  @sameline: -   { Requires: -      what to copy in AX, -      how many lines in CX, and -      original offset in DI. } -   push cx; -   push di; - -   @samelineloop: - -    push cx; -    mov cx,40; { No. of times to repeat it on one line. } - -    repz stosw; { Fast word-copying } - -    pop cx; - -    add di,1200; { The next one will be 16 lines down. } - -   loop @samelineloop; -   pop di; -   add di,80; -   pop cx; - -   ret; - -  @the_end: - end; -*/ -return EXIT_SUCCESS; +integer gd, gm; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	/* Screen size: Starts at $A000:$320 (coords 0,10). +	Length: 12000 (150*80) bytes. +	If we divide it into sets of 5 lines (400 bytes) each, there are 30. +	There are 40 words on a line. + +	Patterns: +	 4AAA = "AVVY" +	 AAAE +	 EAA4 +	 A444 + +	 A4AA = "YAVV" +	 AEAA +	 4EAA +	 4A44 */ +	/* +	 asm +	  mov bx,$A000; +	  mov es,bx; { The segment to copy it to... } +	  mov di,$370;  { The offset (10 pixels down, plus 1 offset.) } + +	  mov cx,10; +	  mov ax,$AA4A; call @sameline; { Print "AVVY" } +	  mov ax,$AEAA; call @sameline; +	  mov ax,$A4EA; call @sameline; +	  mov ax,$44A4; call @sameline; + +	  mov cx,9; +	  mov ax,$AAA4; call @sameline; { Print "YAVV" } +	  mov ax,$AAEA; call @sameline; +	  mov ax,$AA4E; call @sameline; +	  mov ax,$444A; call @sameline; + +	  mov ax,$4AAA; call @sameline; { Print "VYAV" } +	  mov ax,$AAAE; call @sameline; +	  mov ax,$EAA4; call @sameline; +	  mov ax,$A444; call @sameline; + +	  mov ax,$A4AA; call @sameline; { Print "VVYA" } +	  mov ax,$EAAA; call @sameline; +	  mov ax,$4EAA; call @sameline; +	  mov ax,$4A44; call @sameline; + +	  jmp @the_end; + +	  { Replicate the same line many times. } + +	  @sameline: +	   { Requires: +	      what to copy in AX, +	      how many lines in CX, and +	      original offset in DI. } +	   push cx; +	   push di; + +	   @samelineloop: + +	    push cx; +	    mov cx,40; { No. of times to repeat it on one line. } + +	    repz stosw; { Fast word-copying } + +	    pop cx; + +	    add di,1200; { The next one will be 16 lines down. } + +	   loop @samelineloop; +	   pop di; +	   add di,80; +	   pop cx; + +	   ret; + +	  @the_end: +	 end; +	*/ +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/avmenu.cpp b/engines/avalanche/avmenu.cpp index 31c26929b6..9e956f9b23 100644 --- a/engines/avalanche/avmenu.cpp +++ b/engines/avalanche/avmenu.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 @@ -31,310 +31,318 @@  namespace Avalanche { -typedef matrix<'\0','\377',0,15,byte> fonttype; +typedef matrix < '\0', '\377', 0, 15, byte > fonttype;  fonttype font; -word storage_seg,storage_ofs; +word storage_seg, storage_ofs;  byte result;  string registrant; -void icons() -{ - untyped_file f; - word gd,gm; byte bit; - byte v; - - assign(f,"menu.avd"); - reset(f,1); - - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( gd=70; gd <= 266; gd ++) -   blockread(f,mem[0xa000*gd*80+6],9); - -  for( gd=0; gd <= 32; gd ++) -  { -    blockread(f,v,1); -   for( gm=0; gm <= 5; gm ++) -    mem[0xa000*73+((70+gd+gm*33)*80)]=v; /* 79 */ -  } - - } - close(f); - - bit=getpixel(0,0); - - setfillstyle(1, 7); for( gd=0; gd <= 5; gd ++) bar(114, 73+gd*33,583, 99+gd*33); - setfillstyle(1,15); for( gd=0; gd <= 5; gd ++) bar(114, 70+gd*33,583, 72+gd*33); - setfillstyle(1, 8); for( gd=0; gd <= 5; gd ++) bar(114,100+gd*33,583,102+gd*33); +void icons() { +	untyped_file f; +	word gd, gm; +	byte bit; +	byte v; + +	assign(f, "menu.avd"); +	reset(f, 1); + +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (gd = 70; gd <= 266; gd ++) +			blockread(f, mem[0xa000 * gd * 80 + 6], 9); + +		for (gd = 0; gd <= 32; gd ++) { +			blockread(f, v, 1); +			for (gm = 0; gm <= 5; gm ++) +				mem[0xa000 * 73 + ((70 + gd + gm * 33) * 80)] = v; /* 79 */ +		} + +	} +	close(f); + +	bit = getpixel(0, 0); + +	setfillstyle(1, 7); +	for (gd = 0; gd <= 5; gd ++) bar(114, 73 + gd * 33, 583, 99 + gd * 33); +	setfillstyle(1, 15); +	for (gd = 0; gd <= 5; gd ++) bar(114, 70 + gd * 33, 583, 72 + gd * 33); +	setfillstyle(1, 8); +	for (gd = 0; gd <= 5; gd ++) bar(114, 100 + gd * 33, 583, 102 + gd * 33);  }  void load_regi_info(); -static char decode1(char c) -{ -    byte b; +static char decode1(char c) { +	byte b; -  char decode1_result; -  b=ord(c)-32; -  decode1_result=chr(( (b & 0xf) << 3) + ((cardinal)(b & 0x70) >> 4)); -  return decode1_result; +	char decode1_result; +	b = ord(c) - 32; +	decode1_result = chr(((b & 0xf) << 3) + ((cardinal)(b & 0x70) >> 4)); +	return decode1_result;  } -static char decode2(char c) -{ -  char decode2_result; -  decode2_result=chr( ((ord(c) & 0xf) << 2) + 0x43); -  return decode2_result; +static char decode2(char c) { +	char decode2_result; +	decode2_result = chr(((ord(c) & 0xf) << 2) + 0x43); +	return decode2_result;  } -static boolean checker(string proper,string check) -{ -    byte fv; boolean ok; +static boolean checker(string proper, string check) { +	byte fv; +	boolean ok; -  boolean checker_result; -  ok=true; -  for( fv=1; fv <= length(proper); fv ++) -    if ((ord(proper[fv]) & 0xf)!=((cardinal)(ord(check[fv])-0x43) >> 2)) -           ok=false; +	boolean checker_result; +	ok = true; +	for (fv = 1; fv <= length(proper); fv ++) +		if ((ord(proper[fv]) & 0xf) != ((cardinal)(ord(check[fv]) - 0x43) >> 2)) +			ok = false; -  checker_result=ok; -  return checker_result; +	checker_result = ok; +	return checker_result;  } -void load_regi_info() -{ - text t; - byte fv; - string x; - byte namelen,numlen; - string namechk,numchk; - string reginum; +void load_regi_info() { +	text t; +	byte fv; +	string x; +	byte namelen, numlen; +	string namechk, numchk; +	string reginum; -  /*$I-*/ -  assign(t,"register.dat"); reset(t); -  /*$I+*/ +	/*$I-*/ +	assign(t, "register.dat"); +	reset(t); +	/*$I+*/ -  if (ioresult!=0)  -  { -    registrant="(Unregistered evaluation copy.)"; -    return; -  } +	if (ioresult != 0) { +		registrant = "(Unregistered evaluation copy.)"; +		return; +	} -  for( fv=1; fv <= 53; fv ++) t >> NL; -  t >> x >> NL; -  close(t); +	for (fv = 1; fv <= 53; fv ++) t >> NL; +	t >> x >> NL; +	close(t); -  namelen=107-ord(x[1]); numlen=107-ord(x[2]); +	namelen = 107 - ord(x[1]); +	numlen = 107 - ord(x[2]); -  registrant=copy(x,3,namelen); -  reginum=copy(x,4+namelen,numlen); -  namechk=copy(x,4+namelen+numlen,namelen); -  numchk=copy(x,4+namelen+numlen+namelen,numlen); +	registrant = copy(x, 3, namelen); +	reginum = copy(x, 4 + namelen, numlen); +	namechk = copy(x, 4 + namelen + numlen, namelen); +	numchk = copy(x, 4 + namelen + numlen + namelen, numlen); -  for( fv=1; fv <= namelen; fv ++) registrant[fv]=decode1(registrant[fv]); -  for( fv=1; fv <= numlen; fv ++) reginum[fv]=decode1(reginum[fv]); +	for (fv = 1; fv <= namelen; fv ++) registrant[fv] = decode1(registrant[fv]); +	for (fv = 1; fv <= numlen; fv ++) reginum[fv] = decode1(reginum[fv]); -  if ((! checker(registrant,namechk)) || (! checker(reginum,numchk))) -        registrant="\?\"!\? ((.)"; -  else -   registrant=registrant+" ("+reginum+")."; +	if ((! checker(registrant, namechk)) || (! checker(reginum, numchk))) +		registrant = "\?\"!\? ((.)"; +	else +		registrant = registrant + " (" + reginum + ").";  } -void flesh_colours() {;        /* assembler; +void flesh_colours() { +	;        /* assembler;  asm    mov ax,$1012;    mov bx,21;                 { 21 = light pink (why?) */ -  /* mov cx,1; -  mov dx,seg    @flesh; -  mov es,dx; -  mov dx,offset @flesh; -  int $10; +	/* mov cx,1; +	mov dx,seg    @flesh; +	mov es,dx; +	mov dx,offset @flesh; +	int $10; -  mov dx,seg    @darkflesh; -  mov es,dx; -  mov dx,offset @darkflesh; -  mov bx,5;                 { 5 = dark pink. */ -  /*int $10; +	mov dx,seg    @darkflesh; +	mov es,dx; +	mov dx,offset @darkflesh; +	mov bx,5;                 { 5 = dark pink. */ +	/*int $10; -  jmp @TheEnd; +	jmp @TheEnd; - @flesh: -  db 56,35,35; +	@flesh: +	db 56,35,35; - @darkflesh: -  db 43,22,22; +	@darkflesh: +	db 43,22,22; - @TheEnd: */ -                     } +	@TheEnd: */ +} -void setup() -{ - integer gd,gm; - file<fonttype> ff; +void setup() { +	integer gd, gm; +	file<fonttype> ff; - if (paramstr(1)!="jsb")  exit(255); - checkbreak=false; - val(paramstr(2),storage_seg,gd); - val(paramstr(3),storage_ofs,gd); +	if (paramstr(1) != "jsb")  exit(255); +	checkbreak = false; +	val(paramstr(2), storage_seg, gd); +	val(paramstr(3), storage_ofs, gd); - assign(ff,"avalot.fnt"); - reset(ff); ff >> font; close(ff); +	assign(ff, "avalot.fnt"); +	reset(ff); +	ff >> font; +	close(ff); - gd=3; gm=1; initgraph(gd,gm,""); - setvisualpage(1);  +	gd = 3; +	gm = 1; +	initgraph(gd, gm, ""); +	setvisualpage(1); - icons(); +	icons();  } -void big(word x,word y, string z, boolean notted); -static word start,image;  +void big(word x, word y, string z, boolean notted); +static word start, image; -static void generate(byte from, boolean& notted) -{ -    byte fv; +static void generate(byte from, boolean ¬ted) { +	byte fv; - image=0; - for( fv=0; fv <= 7; fv ++) -  image += (from & (1 << fv)) << fv; +	image = 0; +	for (fv = 0; fv <= 7; fv ++) +		image += (from & (1 << fv)) << fv; - image += image << 1; - image=hi(image)+lo(image)*256; - if (notted)  image=~ image; +	image += image << 1; +	image = hi(image) + lo(image) * 256; +	if (notted)  image = ~ image;  } -void big(word x,word y, string z, boolean notted) -{ -    byte fv,ff;byte bit; - - start=x+y*80; - - for( fv=1; fv <= length(z); fv ++) - { -  for( ff=1; ff <= 12; ff ++) -  { -   generate(font[z[fv]][ff+1], notted); -   for( bit=0; bit <= 2; bit ++) -   { -    port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -    memw[0xa000*start+   ff*160]=image; -    memw[0xa000*start+80+ff*160]=image; -   } -  } -  start += 2; - } - bit=getpixel(0,0); +void big(word x, word y, string z, boolean notted) { +	byte fv, ff; +	byte bit; + +	start = x + y * 80; + +	for (fv = 1; fv <= length(z); fv ++) { +		for (ff = 1; ff <= 12; ff ++) { +			generate(font[z[fv]][ff + 1], notted); +			for (bit = 0; bit <= 2; bit ++) { +				port[0x3c4] = 2; +				port[0x3ce] = 4; +				port[0x3c5] = 1 << bit; +				port[0x3cf] = bit; +				memw[0xa000 * start +   ff * 160] = image; +				memw[0xa000 * start + 80 + ff * 160] = image; +			} +		} +		start += 2; +	} +	bit = getpixel(0, 0);  } -void centre(integer y, string z) -{ - big(40-(length(z)),y,z,false); +void centre(integer y, string z) { +	big(40 - (length(z)), y, z, false);  } -void option(byte which, string what) -{ - big(16,41+which*33,string((char)(which+48))+')',true); - big(24,41+which*33,what,true); +void option(byte which, string what) { +	big(16, 41 + which * 33, string((char)(which + 48)) + ')', true); +	big(24, 41 + which * 33, what, true);  } -void invert(integer x1,integer y1,integer x2,integer y2) -{ -    word s; pointer p; - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - putimage(x1,y1,p,4); - sound(y1); delay(30); - sound(600-y2); delay(20); - nosound;  delay(200); - putimage(x1,y1,p,0); - delay(250); +void invert(integer x1, integer y1, integer x2, integer y2) { +	word s; +	pointer p; + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); +	putimage(x1, y1, p, 4); +	sound(y1); +	delay(30); +	sound(600 - y2); +	delay(20); +	nosound; +	delay(200); +	putimage(x1, y1, p, 0); +	delay(250);  } -void wait() -{ -    word x; char r; boolean pressed; - - x=0; pressed=false; - do { -  setfillstyle(6,15); bar(x  ,330,x-1,337); -  setfillstyle(1, 0); bar(x-2,330,x-3,337); -  delay(40); x += 1; - -  if (keypressed())  -  { -   r=readkey(); -   if (r=='\0')  -   { -    r=readkey(); /* and...? */ -   } else -   {     /* Not an extended keystroke. */ -    if (set::of(range('1','6'),cspace,cescape,creturn, eos).has(r))  pressed=true; -   } -  } - - } while (!((x==640) || pressed)); - - if ((r==cspace) || (r==creturn))  r='1'; - if (r==cescape)  r='6'; - if (pressed)  - { -  result=ord(r)-48; -  invert(48,37+result*33,114,69+result*33); - } else result=177; +void wait() { +	word x; +	char r; +	boolean pressed; + +	x = 0; +	pressed = false; +	do { +		setfillstyle(6, 15); +		bar(x  , 330, x - 1, 337); +		setfillstyle(1, 0); +		bar(x - 2, 330, x - 3, 337); +		delay(40); +		x += 1; + +		if (keypressed()) { +			r = readkey(); +			if (r == '\0') { +				r = readkey(); /* and...? */ +			} else { +				/* Not an extended keystroke. */ +				if (set::of(range('1', '6'), cspace, cescape, creturn, eos).has(r))  pressed = true; +			} +		} + +	} while (!((x == 640) || pressed)); + +	if ((r == cspace) || (r == creturn))  r = '1'; +	if (r == cescape)  r = '6'; +	if (pressed) { +		result = ord(r) - 48; +		invert(48, 37 + result * 33, 114, 69 + result * 33); +	} else result = 177;  } -void show_up() -{ - setvisualpage(0); +void show_up() { +	setvisualpage(0);  } -void loadmenu() -{ -    untyped_file f; byte bit; - - assign(f,"mainmenu.avd"); - reset(f,1); - for( bit=0; bit <= 3; bit ++) -  { -   port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -   blockread(f,mem[0xa000*0],59*80); -  } - close(f); - bit=getpixel(0,0); +void loadmenu() { +	untyped_file f; +	byte bit; + +	assign(f, "mainmenu.avd"); +	reset(f, 1); +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, mem[0xa000 * 0], 59 * 80); +	} +	close(f); +	bit = getpixel(0, 0);  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - setup(); - loadmenu(); - load_regi_info(); - option(1,"Play the game."); - option(2,"Read the background."); - option(3,"Preview... perhaps..."); - option(4,"View the documentation."); - option(5,"Registration info."); - option(6,"Exit back to DOS."); - centre(275,registrant); - centre(303,"Make your choice, or wait for the demo."); - - show_up(); - wait(); - mem[storage_seg*storage_ofs]=result; - closegraph(); - return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	setup(); +	loadmenu(); +	load_regi_info(); +	option(1, "Play the game."); +	option(2, "Read the background."); +	option(3, "Preview... perhaps..."); +	option(4, "View the documentation."); +	option(5, "Registration info."); +	option(6, "Exit back to DOS."); +	centre(275, registrant); +	centre(303, "Make your choice, or wait for the demo."); + +	show_up(); +	wait(); +	mem[storage_seg * storage_ofs] = result; +	closegraph(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/avvyans.cpp b/engines/avalanche/avvyans.cpp index fa70ca1751..f91435fef2 100644 --- a/engines/avalanche/avvyans.cpp +++ b/engines/avalanche/avvyans.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 @@ -30,83 +30,106 @@  namespace Avalanche { -integer gd,gm; +integer gd, gm;  untyped_file f; -array<1,16000,byte> aa; -matrix<0,27,0,35,byte> cols; +array<1, 16000, byte> aa; +matrix<0, 27, 0, 35, byte> cols;  text t;  string x; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - fillchar(cols,sizeof(cols),'\0'); - assign(f,"v:avvypic.ptx"); - reset(f,1); - blockread(f,aa,filesize(f)); - close(f); - putimage(0,0,aa,0); - for( gd=0; gd <= 27; gd ++) -  for( gm=0; gm <= 34; gm ++) -   cols[gd][gm+1]=getpixel(gd,gm); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	fillchar(cols, sizeof(cols), '\0'); +	assign(f, "v:avvypic.ptx"); +	reset(f, 1); +	blockread(f, aa, filesize(f)); +	close(f); +	putimage(0, 0, aa, 0); +	for (gd = 0; gd <= 27; gd ++) +		for (gm = 0; gm <= 34; gm ++) +			cols[gd][gm + 1] = getpixel(gd, gm); - restorecrtmode(); -/* -   asm -      mov ax,$1003 -      mov bl,0 -      int $10 -   end; -*/ - for( gm=0; gm <= 17; gm ++) -  for( gd=0; gd <= 27; gd ++) -  {; -   gotoxy(gd+1,gm+1); -   if (cols[gd][2*gm]==cols[gd][2*gm+1])  -   {; -    textattr=cols[gd][2*gm]; output << 'Û'; -   } else -    if ((cols[gd][2*gm]>7) && (cols[gd][2*gm+1]<8))  -    {; -     textattr=cols[gd][2*gm]+cols[gd][2*gm+1]*16; -     output << 'ß'; -    } else -    {; -     textattr=cols[gd][2*gm]*16+cols[gd][2*gm+1]; -     if (textattr>blink)  textattr -= blink; -     output << 'Ü'; -    } -  } -  gotoxy(23,5); textattr=red; output << 'ß'; +	restorecrtmode(); +	/* +	   asm +	      mov ax,$1003 +	      mov bl,0 +	      int $10 +	   end; +	*/ +	for (gm = 0; gm <= 17; gm ++) +		for (gd = 0; gd <= 27; gd ++) { +			; +			gotoxy(gd + 1, gm + 1); +			if (cols[gd][2 * gm] == cols[gd][2 * gm + 1]) { +				; +				textattr = cols[gd][2 * gm]; +				output << 'Û'; +			} else if ((cols[gd][2 * gm] > 7) && (cols[gd][2 * gm + 1] < 8)) { +				; +				textattr = cols[gd][2 * gm] + cols[gd][2 * gm + 1] * 16; +				output << 'ß'; +			} else { +				; +				textattr = cols[gd][2 * gm] * 16 + cols[gd][2 * gm + 1]; +				if (textattr > blink)  textattr -= blink; +				output << 'Ü'; +			} +		} +	gotoxy(23, 5); +	textattr = red; +	output << 'ß'; -  assign(t,"v:avalot.txt"); reset(t); -  textattr=9; gm=2; -  do { -   gm += 1; -   t >> x >> NL; -   gotoxy(30,gm); -   output << x << NL; -  } while (!(eof(t))); +	assign(t, "v:avalot.txt"); +	reset(t); +	textattr = 9; +	gm = 2; +	do { +		gm += 1; +		t >> x >> NL; +		gotoxy(30, gm); +		output << x << NL; +	} while (!(eof(t))); -  textattr=7; gotoxy(35,2); output << "Back in good old A.D. "; -  textattr=15; output << "1176"; textattr=7; output << "..."; -  textattr=9; gotoxy(40,4); output << "Lord"; -  gotoxy(67,9); output << "d'Argent"; -  textattr=yellow; -  gotoxy(37,12); output << "He's back..."; -  gotoxy(47,14); output << "And this time,"; -  gotoxy(52,15); output << "he's wearing tights..."; -  textattr=4; -  gotoxy(36,17); output << "A Thorsoft of Letchworth game. * Requires EGA"; -  gotoxy(38,18); output << "and HD. * By Mike, Mark and Thomas Thurman."; -  gotoxy(40,19); output << "Sfx archive- "; -  textattr=9; output << "Download "; -  textattr=14; output << "AVLT10.EXE"; -  textattr=9; output << " now!"; -  gotoxy(1,1); -  input >> NL; -return EXIT_SUCCESS; +	textattr = 7; +	gotoxy(35, 2); +	output << "Back in good old A.D. "; +	textattr = 15; +	output << "1176"; +	textattr = 7; +	output << "..."; +	textattr = 9; +	gotoxy(40, 4); +	output << "Lord"; +	gotoxy(67, 9); +	output << "d'Argent"; +	textattr = yellow; +	gotoxy(37, 12); +	output << "He's back..."; +	gotoxy(47, 14); +	output << "And this time,"; +	gotoxy(52, 15); +	output << "he's wearing tights..."; +	textattr = 4; +	gotoxy(36, 17); +	output << "A Thorsoft of Letchworth game. * Requires EGA"; +	gotoxy(38, 18); +	output << "and HD. * By Mike, Mark and Thomas Thurman."; +	gotoxy(40, 19); +	output << "Sfx archive- "; +	textattr = 9; +	output << "Download "; +	textattr = 14; +	output << "AVLT10.EXE"; +	textattr = 9; +	output << " now!"; +	gotoxy(1, 1); +	input >> NL; +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/avvyans2.cpp b/engines/avalanche/avvyans2.cpp index b7f96a5b5d..a4fb34aad6 100644 --- a/engines/avalanche/avvyans2.cpp +++ b/engines/avalanche/avvyans2.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 @@ -31,183 +31,227 @@  namespace Avalanche { -integer gd,gm; +integer gd, gm;  untyped_file f; -array<1,16000,byte> aa; -matrix<0,27,0,35,byte> cols; +array<1, 16000, byte> aa; +matrix<0, 27, 0, 35, byte> cols;  text t;  string x;  byte n;  byte spaces; -byte cfg,cbg; /* Current foreground & background. */ -byte ofg,obg;  /* Old fg & bg. */ - -void do_spaces() -{; - if (spaces==0)  return; - along(spaces); - spaces=0; +byte cfg, cbg; /* Current foreground & background. */ +byte ofg, obg; /* Old fg & bg. */ + +void do_spaces() { +	; +	if (spaces == 0)  return; +	along(spaces); +	spaces = 0;  }  void finishline(); -static byte wx,wy; +static byte wx, wy; -static void jumpto(byte xx) -{; - along(xx-wx); +static void jumpto(byte xx) { +	; +	along(xx - wx);  } -void finishline() -{; - wx=29-spaces; wy=gm+1; - switch (wy) { -  case 1: {; -      sgr(7); jumpto(35); output << "Back in good old A.D. "; -      sgr(15); output << "1189"; sgr(7); output << "..." << NL; cfg=7; -     } -     break; -  case RANGE_5(3,7): {; -         t >> x >> NL; -         while (x[length(x)]=='\40')  x[0] -= 1; -         if (x!="")  -         {; -          jumpto(30); -          sgr(9); -          spaces=0; -          while (x!="")  -          {; -           if (x[1]==' ')  -            spaces += 1; -           else -           {; -            do_spaces(); -            output << x[1]; -           } -           Delete(x,1,1); -          } -          if (wy==7)  close(t); -          output << NL; -         } -        } -        break; -  case 8: {; -      jumpto(67); sgr(9); output << "d'Argent" << NL; cfg=9; -     } -     break; -  case 11: {; -       jumpto(37); sgr(14); output << "He's back..." << NL; -      } -      break; -  case 13: {; -       jumpto(47); sgr(14); output << "And this time," << NL; -      } -      break; -  case 14: {; -       jumpto(52); sgr(14); output << "he's wearing tights..." << NL; -      } -      break; -  case 16: {; -       jumpto(35); sgr(4); -       output << "A Thorsoft of Letchworth game. * Requires EGA" << NL; -      } -      break; -  case 17: {; -       jumpto(37); sgr(4); -       output << "and HD. * By Mike, Mark and Thomas Thurman." << NL; -      } -      break; -  case 18: {; -       jumpto(39); -       sgr( 4); output << "Sfx archive- "; -       sgr( 9); output << "Download "; -       sgr(14); output << "AVLT10.EXE"; -       sgr( 9); output << " now!"; -      } -      break; -  default: output << NL; - } +void finishline() { +	; +	wx = 29 - spaces; +	wy = gm + 1; +	switch (wy) { +	case 1: { +		; +		sgr(7); +		jumpto(35); +		output << "Back in good old A.D. "; +		sgr(15); +		output << "1189"; +		sgr(7); +		output << "..." << NL; +		cfg = 7; +	} +	break; +	case RANGE_5(3, 7): { +		; +		t >> x >> NL; +		while (x[length(x)] == '\40')  x[0] -= 1; +		if (x != "") { +			; +			jumpto(30); +			sgr(9); +			spaces = 0; +			while (x != "") { +				; +				if (x[1] == ' ') +					spaces += 1; +				else { +					; +					do_spaces(); +					output << x[1]; +				} +				Delete(x, 1, 1); +			} +			if (wy == 7)  close(t); +			output << NL; +		} +	} +	break; +	case 8: { +		; +		jumpto(67); +		sgr(9); +		output << "d'Argent" << NL; +		cfg = 9; +	} +	break; +	case 11: { +		; +		jumpto(37); +		sgr(14); +		output << "He's back..." << NL; +	} +	break; +	case 13: { +		; +		jumpto(47); +		sgr(14); +		output << "And this time," << NL; +	} +	break; +	case 14: { +		; +		jumpto(52); +		sgr(14); +		output << "he's wearing tights..." << NL; +	} +	break; +	case 16: { +		; +		jumpto(35); +		sgr(4); +		output << "A Thorsoft of Letchworth game. * Requires EGA" << NL; +	} +	break; +	case 17: { +		; +		jumpto(37); +		sgr(4); +		output << "and HD. * By Mike, Mark and Thomas Thurman." << NL; +	} +	break; +	case 18: { +		; +		jumpto(39); +		sgr(4); +		output << "Sfx archive- "; +		sgr(9); +		output << "Download "; +		sgr(14); +		output << "AVLT10.EXE"; +		sgr(9); +		output << " now!"; +	} +	break; +	default: +		output << NL; +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - fillchar(cols,sizeof(cols),'\0'); - assign(f,"v:avvypic.ptx"); - reset(f,1); - blockread(f,aa,filesize(f)); - close(f); - putimage(0,0,aa,0); - for( gd=0; gd <= 27; gd ++) -  for( gm=0; gm <= 34; gm ++) -   cols[gd][gm+1]=getpixel(gd,gm); - - restorecrtmode(); - - assign(output,"v:avalot.ans"); rewrite(output); normal; ed; -/* assign(output,''); rewrite(output); normal; ed;*/ - assign(t,"v:avalot.txt"); reset(t); - - for( gm=0; gm <= 17; gm ++) - {; -  spaces=0; -  for( gd=0; gd <= 27; gd ++) -  {; -   if ((gd==22) && (gm==4))  -   {; -    do_spaces(); -    sgr(red); output << 'ß'; -   } else -   {; -    if (cols[gd][2*gm]==cols[gd][2*gm+1])  -    {; -     if (cols[gd][2*gm]==0)  -      spaces += 1; /* a blank space */ -     else {; -      do_spaces(); - -      if (cfg==cols[gd][2*gm])  output << 'Û'; else -       if (cbg==cols[gd][2*gm])  output << ' '; else -       {; -        sgr((cols[gd][2*gm])+(cbg*16)); -        cfg=cols[gd][2*gm]; -        output << 'Û'; -       } -     } -    } else -     if ((cols[gd][2*gm]>7) && (cols[gd][2*gm+1]<8))  -     {; -      do_spaces(); -      sgr(cols[gd][2*gm]+cols[gd][2*gm+1]*16); -      cfg=cols[gd][2*gm]; cbg=cols[gd][2*gm+1]*16; -      output << 'ß'; -     } else -     {; -      do_spaces(); - -      ofg=cfg; obg=cbg; -      cbg=cols[gd][2*gm]; cfg=cols[gd][2*gm+1]; - -      if ((cbg==ofg) && (cfg==obg))  -      {; -       n=cfg*16+cbg; -       if (n>128)  n -= 128; -       output << 'ß'; -      } else -      {; -       n=cbg*16+cfg; -       if (n>128)  n -= 128; -       if ((cfg!=ofg) || (cbg!=obg))  sgr(n); -       output << 'Ü'; -      } - -     } -    } -   } finishline(); -  } - output << NL; - normal; -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	fillchar(cols, sizeof(cols), '\0'); +	assign(f, "v:avvypic.ptx"); +	reset(f, 1); +	blockread(f, aa, filesize(f)); +	close(f); +	putimage(0, 0, aa, 0); +	for (gd = 0; gd <= 27; gd ++) +		for (gm = 0; gm <= 34; gm ++) +			cols[gd][gm + 1] = getpixel(gd, gm); + +	restorecrtmode(); + +	assign(output, "v:avalot.ans"); +	rewrite(output); +	normal; +	ed; +	/* assign(output,''); rewrite(output); normal; ed;*/ +	assign(t, "v:avalot.txt"); +	reset(t); + +	for (gm = 0; gm <= 17; gm ++) { +		; +		spaces = 0; +		for (gd = 0; gd <= 27; gd ++) { +			; +			if ((gd == 22) && (gm == 4)) { +				; +				do_spaces(); +				sgr(red); +				output << 'ß'; +			} else { +				; +				if (cols[gd][2 * gm] == cols[gd][2 * gm + 1]) { +					; +					if (cols[gd][2 * gm] == 0) +						spaces += 1; /* a blank space */ +					else { +						; +						do_spaces(); + +						if (cfg == cols[gd][2 * gm])  output << 'Û'; +						else if (cbg == cols[gd][2 * gm])  output << ' '; +						else { +							; +							sgr((cols[gd][2 * gm]) + (cbg * 16)); +							cfg = cols[gd][2 * gm]; +							output << 'Û'; +						} +					} +				} else if ((cols[gd][2 * gm] > 7) && (cols[gd][2 * gm + 1] < 8)) { +					; +					do_spaces(); +					sgr(cols[gd][2 * gm] + cols[gd][2 * gm + 1] * 16); +					cfg = cols[gd][2 * gm]; +					cbg = cols[gd][2 * gm + 1] * 16; +					output << 'ß'; +				} else { +					; +					do_spaces(); + +					ofg = cfg; +					obg = cbg; +					cbg = cols[gd][2 * gm]; +					cfg = cols[gd][2 * gm + 1]; + +					if ((cbg == ofg) && (cfg == obg)) { +						; +						n = cfg * 16 + cbg; +						if (n > 128)  n -= 128; +						output << 'ß'; +					} else { +						; +						n = cbg * 16 + cfg; +						if (n > 128)  n -= 128; +						if ((cfg != ofg) || (cbg != obg))  sgr(n); +						output << 'Ü'; +					} + +				} +			} +		} +		finishline(); +	} +	output << NL; +	normal; +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/avvymonk.cpp b/engines/avalanche/avvymonk.cpp index 25fc83e405..4f150e33d7 100644 --- a/engines/avalanche/avvymonk.cpp +++ b/engines/avalanche/avvymonk.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 @@ -29,72 +29,89 @@  namespace Avalanche { -integer gd,gm; +integer gd, gm;  byte z; -array<1,4,pointer> a; -untyped_file f; word s; +array<1, 4, pointer> a; +untyped_file f; +word s;  string check; -integer x,y; -void savesc() -{ -    varying_string<40> adf; untyped_file f; byte z; array<1,2,pointer> c; word s; -varying_string<14> nam; varying_string<30> screenname; -; - nam="v:avvymonk.avd"; - adf=string("aved as a stuff file, so there! TJAT.")+'\15'+'\12'+'\32'; - adf[0]='S'; - screenname="Avalot in a monk's costume"; - assign(f,nam); /* not scrambled */ - rewrite(f,1); - blockwrite(f,adf,41); - blockwrite(f,nam,13); - blockwrite(f,screenname,31); - s=imagesize(0,0,getmaxx(),75); - for( z=1; z <= 2; z ++) - {; -  getmem(c[z],s); -  getimage(0,15+(z-1)*75,getmaxx(),15+(z)*75,c[z]); -  blockwrite(f,c[z],s); -  freemem(c[z],s); - } +integer x, y; +void savesc() { +	varying_string<40> adf; +	untyped_file f; +	byte z; +	array<1, 2, pointer> c; +	word s; +	varying_string<14> nam; +	varying_string<30> screenname; +	; +	nam = "v:avvymonk.avd"; +	adf = string("aved as a stuff file, so there! TJAT.") + '\15' + '\12' + '\32'; +	adf[0] = 'S'; +	screenname = "Avalot in a monk's costume"; +	assign(f, nam); /* not scrambled */ +	rewrite(f, 1); +	blockwrite(f, adf, 41); +	blockwrite(f, nam, 13); +	blockwrite(f, screenname, 31); +	s = imagesize(0, 0, getmaxx(), 75); +	for (z = 1; z <= 2; z ++) { +		; +		getmem(c[z], s); +		getimage(0, 15 + (z - 1) * 75, getmaxx(), 15 + (z) * 75, c[z]); +		blockwrite(f, c[z], s); +		freemem(c[z], s); +	}  } -void loadscreen(string nam) -{; - assign(f,nam); - reset(f,1); - blockread(f,check,41); - blockread(f,check,13); - blockread(f,check,31); - s=imagesize(0,0,getmaxx(),75); - for( z=1; z <= 2; z ++) - {; -  getmem(a[z],s); -  blockread(f,a[z],s); -  setactivepage(0); -  putimage(0,15+(z-1)*75,a[z],0); -  freemem(a[z],s); - } - close(f); +void loadscreen(string nam) { +	; +	assign(f, nam); +	reset(f, 1); +	blockread(f, check, 41); +	blockread(f, check, 13); +	blockread(f, check, 31); +	s = imagesize(0, 0, getmaxx(), 75); +	for (z = 1; z <= 2; z ++) { +		; +		getmem(a[z], s); +		blockread(f, a[z], s); +		setactivepage(0); +		putimage(0, 15 + (z - 1) * 75, a[z], 0); +		freemem(a[z], s); +	} +	close(f);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; - x=0; y=0; - initgraph(gd,gm,"o:"); - loadscreen("v:legion.avd"); - while (y<100)  - {; -  switch (getpixel(x,y)) { -   case 7: putpixel(x,y,0); break; -   case 8: putpixel(x,y,0); break; -   case 9: putpixel(x,y,15); break; -  } -  x += 1; -  if (x>640)  {; y += 1; x=0; } - } - savesc(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	x = 0; +	y = 0; +	initgraph(gd, gm, "o:"); +	loadscreen("v:legion.avd"); +	while (y < 100) { +		; +		switch (getpixel(x, y)) { +		case 7: +			putpixel(x, y, 0); +			break; +		case 8: +			putpixel(x, y, 0); +			break; +		case 9: +			putpixel(x, y, 15); +			break; +		} +		x += 1; +		if (x > 640)  { +			; +			y += 1; +			x = 0; +		} +	} +	savesc(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/bakchunk.cpp b/engines/avalanche/bakchunk.cpp index fabda148f7..94e00da557 100644 --- a/engines/avalanche/bakchunk.cpp +++ b/engines/avalanche/bakchunk.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 @@ -31,26 +31,29 @@  namespace Avalanche { -integer gd,gm; -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - gd=3; gm=0; initgraph(gd,gm,""); - setvisualpage(3); - load_chunks('1'); - - for( gd=0; gd <= num_chunks; gd ++) -  show_one_at(gd,0,gd*40); - - mblit(0,0,79,200,3,0); - - gd=getpixel(0,0); - setvisualpage(0); setactivepage(0); - - settextstyle(0,0,4); setcolor(15); - outtextxy(100,50,"Chunk1"); - input >> NL; - return EXIT_SUCCESS; +integer gd, gm; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	setvisualpage(3); +	load_chunks('1'); + +	for (gd = 0; gd <= num_chunks; gd ++) +		show_one_at(gd, 0, gd * 40); + +	mblit(0, 0, 79, 200, 3, 0); + +	gd = getpixel(0, 0); +	setvisualpage(0); +	setactivepage(0); + +	settextstyle(0, 0, 4); +	setcolor(15); +	outtextxy(100, 50, "Chunk1"); +	input >> NL; +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/basher.cpp b/engines/avalanche/basher.cpp index b4ceeb389a..dcab52540e 100644 --- a/engines/avalanche/basher.cpp +++ b/engines/avalanche/basher.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 @@ -35,9 +35,9 @@  #define __basher_implementation__ - /* Note: this unit can record keystrokes, for the demo. If you want it -   to do this, define the o.c.c. RECORD. Setting gyro.demo to True will -   cause them to be played back. */ +/* Note: this unit can record keystrokes, for the demo. If you want it +  to do this, define the o.c.c. RECORD. Setting gyro.demo to True will +  cause them to be played back. */  #include "basher.h" @@ -59,36 +59,36 @@ namespace Avalanche {  boolean entering_filename;  byte left_margin; -void plottext() -{ -      const array<0,2,byte> p = {{0,1,3}}; -    byte x,y,n; - - x=0; if (mouse_near_text())  super_off(); - cursor_off(); - for( n=0; n <= 2; n ++) -  for( y=0; y <= 7; y ++) -  { -   for( x=1; x <= length(current); x ++) -    mem[0xa000*p[n]*pagetop+12882+y*80+x]=little[current[x]][y]; -   fillchar(mem[0xa000*p[n]*pagetop+12883+y*80+x],77-x,'\0'); -  } - cursor_on(); - super_on(); +void plottext() { +	const array<0, 2, byte> p = {{0, 1, 3}}; +	byte x, y, n; + +	x = 0; +	if (mouse_near_text())  super_off(); +	cursor_off(); +	for (n = 0; n <= 2; n ++) +		for (y = 0; y <= 7; y ++) { +			for (x = 1; x <= length(current); x ++) +				mem[0xa000 * p[n]*pagetop + 12882 + y * 80 + x] = little[current[x]][y]; +			fillchar(mem[0xa000 * p[n]*pagetop + 12883 + y * 80 + x], 77 - x, '\0'); +		} +	cursor_on(); +	super_on();  } -void wipetext() -{ -      const array<0,2,byte> n = {{0,1,3}}; -    byte y,p; - - if (mouse_near_text())  super_off(); - cursor_off(); - for( y=0; y <= 7; y ++) -  for( p=0; p <= 2; p ++) -   fillchar(mem[0xa000*n[p]*pagetop+12883+y*80],77,'\0'); - quote=true; curpos=1; cursor_on(); - super_on(); +void wipetext() { +	const array<0, 2, byte> n = {{0, 1, 3}}; +	byte y, p; + +	if (mouse_near_text())  super_off(); +	cursor_off(); +	for (y = 0; y <= 7; y ++) +		for (p = 0; p <= 2; p ++) +			fillchar(mem[0xa000 * n[p]*pagetop + 12883 + y * 80], 77, '\0'); +	quote = true; +	curpos = 1; +	cursor_on(); +	super_on();  }  /*procedure cursor; @@ -104,49 +104,49 @@ begin   end else dec(curflash);  end;*/ -void do_cursor() -{ - bytefield bf; - byte fv; - - mem[0xac00*13442+curpos]=~ mem[0xac00*13442+curpos]; - { -  bf.x1=curpos+1; bf.x2=curpos+2; bf.y1=168; bf.y2=168; - } - for( fv=0; fv <= 1; fv ++) getset[fv].remember(bf); +void do_cursor() { +	bytefield bf; +	byte fv; + +	mem[0xac00 * 13442 + curpos] = ~ mem[0xac00 * 13442 + curpos]; +	{ +		bf.x1 = curpos + 1; +		bf.x2 = curpos + 2; +		bf.y1 = 168; +		bf.y2 = 168; +	} +	for (fv = 0; fv <= 1; fv ++) getset[fv].remember(bf);  } -void cursor_on() -{ - if (cursoron)  return; - do_cursor(); cursoron=true; +void cursor_on() { +	if (cursoron)  return; +	do_cursor(); +	cursoron = true;  } -void cursor_off() -{ - if (! cursoron)  return; - do_cursor(); cursoron=false; +void cursor_off() { +	if (! cursoron)  return; +	do_cursor(); +	cursoron = false;  } -void get_demorec() -{ - demofile >> demo_rec; - inchar=demo_rec.key; -   extd=demo_rec.extd; -   demo_rec.delay -= 1; +void get_demorec() { +	demofile >> demo_rec; +	inchar = demo_rec.key; +	extd = demo_rec.extd; +	demo_rec.delay -= 1;  }  #ifdef RECORD -  void record_one() -  { -   demo_rec.delay=count; -   demo_rec.key=inchar; -   demo_rec.extd=extd; - -   demofile << demo_rec; -   count=0; -  } +void record_one() { +	demo_rec.delay = count; +	demo_rec.key = inchar; +	demo_rec.extd = extd; + +	demofile << demo_rec; +	count = 0; +}  #endif  /*  procedure storeline(whatwhat:string); @@ -178,235 +178,324 @@ end;  */  void typein(); -static char firstchar(string x) { char firstchar_result; -                                         firstchar_result=x[1]; return firstchar_result; -                                } +static char firstchar(string x) { +	char firstchar_result; +	firstchar_result = x[1]; +	return firstchar_result; +} -static void try_dd() /* This asks the Parsekey proc in Dropdown if it knows it. */ -{ - parsekey(inchar,extd); +static void try_dd() { /* This asks the Parsekey proc in Dropdown if it knows it. */ +	parsekey(inchar, extd);  } -void typein() -{ -    byte w; - - inkey(); - #ifdef RECORD record_one(); #endif - - switch (inchar) { -  case RANGE_15('\40','\56'):case '\60' ... '\337':case '\341' ... '\377': if (ddm_o.menunow)  -             { -              parsekey(inchar,extd); -             } else -             { -              if (length(current)<76)  -              { -               if ((inchar=='"') || (inchar=='`'))  -               { -                if (quote)  inchar='`'; else inchar='"'; -                quote=! quote;    /* Quote- Unquote... */ -               } -               insert(inchar,current,curpos); -               curpos += 1; -               plottext(); -              } else blip(); -             } -             break; -  case '\10': if (! ddm_o.menunow)  -      { -       if (curpos>left_margin)  -       { -        curpos -= 1; -        if (set::of('"','`', eos).has(current[curpos]))  quote=! quote; -        Delete(current,curpos,1); -        plottext(); -       } else blip(); -      } -      break; -  case '\0':case '\340': { -       switch (extd) { -              /* Function keys: */ -        case cf1: callverb(vb_help); break; /* f1 - help (obviously) */ -        case cf2: fxtoggle(); break; /* f2 - sound */ -        case ccf2:case cf11: { clearwords(); callverb(vb_save); } break; /* ^f2 - save */ -        case cf3: if (length(current)<length(/*previous^[20]*/last))  /* f3 - rec last */ -             { -              current=current+copy( /*previous^[20]*/last,length(current)+1,255); -              curpos=length(current)+1; -              plottext(); -             } -             break; -        case ccf3:case cf12: { clearwords(); callverb(vb_load); } break; /* ^f3 - load */ -        case cf4: callverb(vb_restart); break; /* f4 - restart game */ -        case cf5: { -                person=pardon; thing=pardon; -                callverb(firstchar(f5_does())); /* f5 - get up/ whatever */ -             } -             break; -        case cf6: callverb(vb_pause); break; /* f6 - pause */ -        case cf7: callverb(vb_open); break; /* f7 - open door */ -        case cf8: callverb(vb_look); break; /* f8 - look */ -        case cf9: callverb(vb_score); break; /* f9 - score */ -        case ccf7: major_redraw(); break; /* ^f7 - open door */ -        case cf10:case c_ax:case caf4: { -                      #ifdef RECORD -                       display("Hi. You have just finished recording. GIED."); -                       close(demofile); exit(0); -                      #endif -                       callverb(vb_quit); /* f10, alt-X, alt-f4 - quit */ -                     } -                     break; -        case ccf5: back_to_bootstrap(2); break; /* ^f5 - Dos shell. */ -        case csf10: callverb(vb_info); break; /* sf10 - version */ - -        case c_ab: callverb(vb_boss); break; /* alt-B */ -        case c_ad: display("Wrong game!"); break; /* alt-D */ -        case ccleft: if (curpos>left_margin)  -              { cursor_off(); curpos -= 1; cursor_on(); } -              break;                                         /* ^left */ -        case ccright: if (curpos<=length(current))  /* ^right */ -              { cursor_off(); curpos += 1; cursor_on(); } -              break; -        case cchome: { cursor_off(); curpos=1; cursor_on(); } break; /* ^home */ -        case ccend: { cursor_off(); curpos=length(current)+1; cursor_on(); } break; /* ^end */ -        case c_ar: oh=177; break; /* alt-R = repeater (re-chime) */ -        case cup:case cdown:case cleft:case cright:case cpgup:case cpgdn:case chome:case cend: if (ddm_o.menunow)  try_dd(); -              else tripkey(extd); -              break;              /* Up/Down/Left/Right/PgUp/PgDn */ -        case cnum5: tripkey(extd); break; /* Numeric 5 */ -        case cdel: if (! ddm_o.menunow)  -             { -              if (curpos<=length(current))  -              { -               if (set::of('"','`', eos).has(current[curpos]))  quote=! quote; -               Delete(current,curpos,1); -               plottext(); -              } else blip(); -             } -             break; -        default: try_dd(); -       } -      } -      break; -  case cescape:case '/': if (ddm_o.menunow)  /* Escape */ -           { ddm_o.wipe(); } else -            if (entering_filename)  -              { normal_edit(); wipetext(); } else -                ddm_m.getcertain(ddm_o.menunum); -                break; -  case creturn: if (ddm_o.menunow)  try_dd(); /* Return */ -       else { -        log_command(current); -        if (entering_filename)  -        { -          edna_save(copy(current,24,255)); -          normal_edit(); wipetext(); -        } else -        { -          if (current!="")  last=current; -          parse(); do_that(); -          if (! entering_filename)  -          { -            current=""; -            wipetext(); -          } -        } -       } -       break; -  case '\11': callverb(vb_inv); break; /* Ctrl-I= inventory */ -  case '\7': errorled(); break; -  case '\25': { -       current=""; -       wipetext(); -      } -      break; - -  case '\27': { tr[1].xs=walk; newspeed(); } break; -  case '\22': { tr[1].xs=run;  newspeed(); } break; - -  case '\2': bosskey(); break; -  case '\12': ctrl=cjoy; break; /* Joystick */ -  case '\13': ctrl=ckey; break; /* Keyboard */ -  case '\3': callverb(vb_quit); break; /* Ctrl-C= request to quit */ - - } - showrw(); - - if (demo)  get_demorec(); +void typein() { +	byte w; + +	inkey(); +#ifdef RECORD record_one(); #endif + +	switch (inchar) { +	case RANGE_15('\40', '\56'): +	case '\60' ... '\337': +	case '\341' ... '\377': +		if (ddm_o.menunow) { +			parsekey(inchar, extd); +		} else { +			if (length(current) < 76) { +				if ((inchar == '"') || (inchar == '`')) { +					if (quote)  inchar = '`'; +					else inchar = '"'; +					quote = ! quote;  /* Quote- Unquote... */ +				} +				insert(inchar, current, curpos); +				curpos += 1; +				plottext(); +			} else blip(); +		} +		break; +	case '\10': +		if (! ddm_o.menunow) { +			if (curpos > left_margin) { +				curpos -= 1; +				if (set::of('"', '`', eos).has(current[curpos]))  quote = ! quote; +				Delete(current, curpos, 1); +				plottext(); +			} else blip(); +		} +		break; +	case '\0': +	case '\340': { +		switch (extd) { +			/* Function keys: */ +		case cf1: +			callverb(vb_help); +			break; /* f1 - help (obviously) */ +		case cf2: +			fxtoggle(); +			break; /* f2 - sound */ +		case ccf2: +		case cf11: { +			clearwords(); +			callverb(vb_save); +		} +		break; /* ^f2 - save */ +		case cf3: +			if (length(current) < length(/*previous^[20]*/last)) { /* f3 - rec last */ +				current = current + copy(/*previous^[20]*/last, length(current) + 1, 255); +				curpos = length(current) + 1; +				plottext(); +			} +			break; +		case ccf3: +		case cf12: { +			clearwords(); +			callverb(vb_load); +		} +		break; /* ^f3 - load */ +		case cf4: +			callverb(vb_restart); +			break; /* f4 - restart game */ +		case cf5: { +			person = pardon; +			thing = pardon; +			callverb(firstchar(f5_does())); /* f5 - get up/ whatever */ +		} +		break; +		case cf6: +			callverb(vb_pause); +			break; /* f6 - pause */ +		case cf7: +			callverb(vb_open); +			break; /* f7 - open door */ +		case cf8: +			callverb(vb_look); +			break; /* f8 - look */ +		case cf9: +			callverb(vb_score); +			break; /* f9 - score */ +		case ccf7: +			major_redraw(); +			break; /* ^f7 - open door */ +		case cf10: +		case c_ax: +		case caf4: { +#ifdef RECORD +			display("Hi. You have just finished recording. GIED."); +			close(demofile); +			exit(0); +#endif +			callverb(vb_quit); /* f10, alt-X, alt-f4 - quit */ +		} +		break; +		case ccf5: +			back_to_bootstrap(2); +			break; /* ^f5 - Dos shell. */ +		case csf10: +			callverb(vb_info); +			break; /* sf10 - version */ + +		case c_ab: +			callverb(vb_boss); +			break; /* alt-B */ +		case c_ad: +			display("Wrong game!"); +			break; /* alt-D */ +		case ccleft: +			if (curpos > left_margin) { +				cursor_off(); +				curpos -= 1; +				cursor_on(); +			} +			break;                                         /* ^left */ +		case ccright: +			if (curpos <= length(current)) { /* ^right */ +				cursor_off(); +				curpos += 1; +				cursor_on(); +			} +			break; +		case cchome: { +			cursor_off(); +			curpos = 1; +			cursor_on(); +		} +		break; /* ^home */ +		case ccend: { +			cursor_off(); +			curpos = length(current) + 1; +			cursor_on(); +		} +		break; /* ^end */ +		case c_ar: +			oh = 177; +			break; /* alt-R = repeater (re-chime) */ +		case cup: +		case cdown: +		case cleft: +		case cright: +		case cpgup: +		case cpgdn: +		case chome: +		case cend: +			if (ddm_o.menunow)  try_dd(); +			else tripkey(extd); +			break;              /* Up/Down/Left/Right/PgUp/PgDn */ +		case cnum5: +			tripkey(extd); +			break; /* Numeric 5 */ +		case cdel: +			if (! ddm_o.menunow) { +				if (curpos <= length(current)) { +					if (set::of('"', '`', eos).has(current[curpos]))  quote = ! quote; +					Delete(current, curpos, 1); +					plottext(); +				} else blip(); +			} +			break; +		default: +			try_dd(); +		} +	} +	break; +	case cescape: +	case '/': +		if (ddm_o.menunow) { /* Escape */ +			ddm_o.wipe(); +		} else if (entering_filename) { +			normal_edit(); +			wipetext(); +		} else +			ddm_m.getcertain(ddm_o.menunum); +		break; +	case creturn: +		if (ddm_o.menunow)  try_dd(); /* Return */ +		else { +			log_command(current); +			if (entering_filename) { +				edna_save(copy(current, 24, 255)); +				normal_edit(); +				wipetext(); +			} else { +				if (current != "")  last = current; +				parse(); +				do_that(); +				if (! entering_filename) { +					current = ""; +					wipetext(); +				} +			} +		} +		break; +	case '\11': +		callverb(vb_inv); +		break; /* Ctrl-I= inventory */ +	case '\7': +		errorled(); +		break; +	case '\25': { +		current = ""; +		wipetext(); +	} +	break; + +	case '\27': { +		tr[1].xs = walk; +		newspeed(); +	} +	break; +	case '\22': { +		tr[1].xs = run; +		newspeed(); +	} +	break; + +	case '\2': +		bosskey(); +		break; +	case '\12': +		ctrl = cjoy; +		break; /* Joystick */ +	case '\13': +		ctrl = ckey; +		break; /* Keyboard */ +	case '\3': +		callverb(vb_quit); +		break; /* Ctrl-C= request to quit */ + +	} +	showrw(); + +	if (demo)  get_demorec();  }  /*        'x'..'z': begin setvisualpage(ord(extd)-63); write(#7); inkey; end;          '': begin setvisualpage(0); write(#7); inkey; end;*/ -void keyboard_link() -{ - state(defaultled); /* if defaultled=1 then on; { For the menus }*/ - joykeys(); /* Test joystick buttons- I know that's not keyboard. */ - - if (demo)  - { -  if (keypressede())  exit(0); -  if (demo_rec.delay>0)  -   demo_rec.delay -= 1; -  else typein(); -  return; - } - - #ifdef RECORD count += 1;   #endif - - if (! keypressede())  return; - if (keyboardclick)  click(); - typein(); +void keyboard_link() { +	state(defaultled); /* if defaultled=1 then on; { For the menus }*/ +	joykeys(); /* Test joystick buttons- I know that's not keyboard. */ + +	if (demo) { +		if (keypressede())  exit(0); +		if (demo_rec.delay > 0) +			demo_rec.delay -= 1; +		else typein(); +		return; +	} + +#ifdef RECORD count += 1;   #endif + +	if (! keypressede())  return; +	if (keyboardclick)  click(); +	typein();  } -boolean demo_ready() -{ - boolean demo_ready_result; - if (demo_rec.delay>0)  - { -  slowdown(); -  demo_rec.delay -= 1; - } - demo_ready_result=demo_rec.delay==0; - return demo_ready_result; +boolean demo_ready() { +	boolean demo_ready_result; +	if (demo_rec.delay > 0) { +		slowdown(); +		demo_rec.delay -= 1; +	} +	demo_ready_result = demo_rec.delay == 0; +	return demo_ready_result;  } -void filename_edit() -{ - entering_filename=true; - current="Filename\? (Esc=cancel):"; - left_margin=24; curpos=24; - plottext(); +void filename_edit() { +	entering_filename = true; +	current = "Filename\? (Esc=cancel):"; +	left_margin = 24; +	curpos = 24; +	plottext();  } -void normal_edit() -{ - entering_filename=false; - current=""; - left_margin=1; curpos=1; +void normal_edit() { +	entering_filename = false; +	current = ""; +	left_margin = 1; +	curpos = 1;  }  class unit_basher_initialize { -  public: unit_basher_initialize(); +public: +	unit_basher_initialize();  };  static unit_basher_initialize basher_constructor;  unit_basher_initialize::unit_basher_initialize() { -/* new(previous);*/ last=""; normal_edit(); - - if (demo)  - { -  assign(demofile,"demo.avd"); -  reset(demofile); - } - - #ifdef RECORD -  count=0; -  assign(demofile,"demo.avd"); -  rewrite(demofile); - #endif +	/* new(previous);*/ last = ""; +	normal_edit(); + +	if (demo) { +		assign(demofile, "demo.avd"); +		reset(demofile); +	} + +#ifdef RECORD +	count = 0; +	assign(demofile, "demo.avd"); +	rewrite(demofile); +#endif  } diff --git a/engines/avalanche/basher.h b/engines/avalanche/basher.h index ba26d926a9..1cc42b5b6c 100644 --- a/engines/avalanche/basher.h +++ b/engines/avalanche/basher.h @@ -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 @@ -47,22 +47,22 @@ EXTERN word count;  #endif - void plottext(); +void plottext(); - void keyboard_link(); +void keyboard_link(); - void cursor_on(); +void cursor_on(); - void get_demorec(); +void get_demorec(); - boolean demo_ready(); +boolean demo_ready(); - void cursor_off(); +void cursor_off(); - void filename_edit(); - void normal_edit(); +void filename_edit(); +void normal_edit();  #ifdef RECORD -  void record_one(); +void record_one();  #endif  } // End of namespace Avalanche. diff --git a/engines/avalanche/cadburys.cpp b/engines/avalanche/cadburys.cpp index 8d1e0c33ad..f653ad8924 100644 --- a/engines/avalanche/cadburys.cpp +++ b/engines/avalanche/cadburys.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 @@ -35,100 +35,111 @@  namespace Avalanche { -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; -; - if (size>arraysize)  - {; -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  {; -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; +	; +	if (size > arraysize) { +		; +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			; +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; -; -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - {; -  ch.flavour=flav; -  ch.x=realx; ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - setvisualpage(1); - setactivepage(1); - input >> NL; - putimage(ch.x,ch.y,p,0); - - if (flav==ch_ega)  - {; -  freemem(p,s); -  s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1); -  {; -   ch.size=s; -   ch.x=ch.x / 8; -   ch.xl=((realx-ch.x*8)+(x2-x1)+7) / 8; -   mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); -  } - } else -             /* For BGI pictures. */ -  {; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -  } - - input >> NL; - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - switch (flav) { -  case ch_ega : if (! nat)  blockwrite(f,aa,s); break; -  case ch_bgi : {; -            if (! nat)  blockwrite(f,p,s); -            freemem(p,s); -           } -           break; - } -/* rectangle(x1,y1,x2,y2);*/ +	word s; +	pointer p; +	chunkblocktype ch; +	; +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		; +		ch.flavour = flav; +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	setvisualpage(1); +	setactivepage(1); +	input >> NL; +	putimage(ch.x, ch.y, p, 0); + +	if (flav == ch_ega) { +		; +		freemem(p, s); +		s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1); +		{ +			; +			ch.size = s; +			ch.x = ch.x / 8; +			ch.xl = ((realx - ch.x * 8) + (x2 - x1) + 7) / 8; +			mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +		} +	} else +		/* For BGI pictures. */ +	{ +		; +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +	} + +	input >> NL; +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	switch (flav) { +	case ch_ega : +		if (! nat)  blockwrite(f, aa, s); +		break; +	case ch_bgi : { +		; +		if (! nat)  blockwrite(f, p, s); +		freemem(p, s); +	} +	break; +	} +	/* rectangle(x1,y1,x2,y2);*/  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/cadburys.h b/engines/avalanche/cadburys.h index 325bd35e47..6afb4532f2 100644 --- a/engines/avalanche/cadburys.h +++ b/engines/avalanche/cadburys.h @@ -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 @@ -32,20 +32,20 @@ namespace Avalanche {  const integer arraysize = 12000; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261'; -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; @@ -54,17 +54,17 @@ struct chunkblocktype {  #define EXTERN  #endif -EXTERN array<0,arraysize,byte> aa; -EXTERN byte num_chunks,this_chunk; -EXTERN integer gd,gm; -EXTERN array<1,30,longint> offsets; +EXTERN array<0, arraysize, byte> aa; +EXTERN byte num_chunks, this_chunk; +EXTERN integer gd, gm; +EXTERN array<1, 30, longint> offsets;  EXTERN untyped_file f;  #undef EXTERN  #define EXTERN extern -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat); +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat);  } // End of namespace Avalanche. diff --git a/engines/avalanche/celer.cpp b/engines/avalanche/celer.cpp index 1038e6f777..d444845cef 100644 --- a/engines/avalanche/celer.cpp +++ b/engines/avalanche/celer.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 @@ -48,222 +48,296 @@ untyped_file f; /* Private variable- not accessible from elsewhere. */  const integer on_disk = -1; /* Value of memos[fv].x when it's not in memory. */ -void pics_link() -{ -    byte xx; - - if (ddmnow)  return; /* No animation when the menus are up. */ - - { dnatype& with = dna;  -  switch (with.room) { - -   case r__outsideargentpub: { -    if ((roomtime % longint(12))==0)  -     show_one(longint(1)+(roomtime / longint(12)) % longint(4)); -   } -   break; - -   case r__brummieroad: if ((roomtime % longint(2))==0)  -    show_one(longint(1)+(roomtime / longint(2)) % longint(4)); -    break; - -   case r__bridge: if ((roomtime % longint(2))==0)  -    show_one(longint(4)+(roomtime / longint(2)) % longint(4)); -    break; - -   case r__yours: if ((! with.avvy_is_awake) && ((roomtime % longint(4))==0))  -              show_one(longint(1)+(roomtime / longint(12)) % longint(2)); -              break; - -   case r__argentpub: { -                  if (((roomtime % longint(7))==1) && (dna.malagauche!=177))  -                  {     /* Malagauche cycle */ -                   dna.malagauche += 1; -                   switch (dna.malagauche) { -                    case 1:case 11:case 21: show_one(12); break; /* Looks forwards. */ -                    case 8:case 18:case 28:case 32: show_one(11); break; /* Looks at you. */ -                    case 30: show_one(13); break; /* Winks. */ -                    case 33: dna.malagauche=0; break; -                   } -                  } - -                  switch (roomtime % longint(200)) { -                   case 179:case 197: show_one(5); break; /* Dogfood's drinking cycle */ -                   case 182:case 194: show_one(6); break; -                   case 185: show_one(7); break; -                   case 199: dna.dogfoodpos=177; break; /* Impossible value for this. */ -                   case 0 ... 178: { /* Normally. */ -                            switch (bearing(2)) {/* Bearing of Avvy from Dogfood. */ -                              case 1 ... 90:case RANGE_3(358,360): xx=3; break; -                              case 293 ... 357: xx=2; break; -                              case 271 ... 292: xx=4; break; -                            } -                            if (xx!=dna.dogfoodpos)    /* Only if it's changed.*/ -                            { -                             show_one(xx); -                             dna.dogfoodpos=xx; -                            } -                           } -                           break; -                  } -                 } -                 break; - -   case r__westhall: if ((roomtime % longint(3))==0)  -                 switch ((roomtime / longint(3)) % longint(6)) { -                  case 4: show_one(1); break; -                  case 1:case 3:case 5: show_one(2); break; -                  case 0:case 2: show_one(3); break; -                 } -                 break; -   case r__lustiesroom: if (! (dna.lustie_is_asleep))  { -                    if ((roomtime % longint(45))>42)  xx=4; /* du Lustie blinks */ -                    else -                    switch (bearing(2)) {/* Bearing of Avvy from du Lustie. */ -                      case 0 ... 45:case 315 ... 360: xx=1; break; /* Middle. */ -                       case 45 ... 180: xx=2; break; /* Left. */ -                      case 181 ... 314: xx=3; break; /* Right. */ -                    } -                    if (xx!=dna.dogfoodpos)    /* Only if it's changed.*/ -                    { -                     show_one(xx); -                     dna.dogfoodpos=xx;  /* We use DogfoodPos here too- why not? */ -                    } -                   } -                   break; - -   case r__aylesoffice: if ((! dna.ayles_is_awake) && (roomtime % longint(14)==0))  -                   { -                    switch ((roomtime / longint(14)) % longint(2)) { -                     case 0: show_one(1); break; /* Frame 2: EGA. */ -                     case 1: show_one(3); break; /* Frame 1: Natural. */ -                    } -                   } -                   break; - -   case r__robins: if (dna.tied_up)  -               switch (roomtime % longint(54)) { -                case 20: show_one(4); break; /* Frame 4: Avalot blinks. */ -                case 23: show_one(2); break; /* Frame 1: Back to normal. */ -               } -               break; - -   case r__nottspub: { -                 switch (bearing(5)) { /* Bearing of Avvy from Port. */ -                   case 0 ... 45:case 315 ... 360: xx=2; break; /* Middle. */ -                    case 45 ... 180: xx=6; break; /* Left. */ -                   case 181 ... 314: xx=8; break; /* Right. */ -                 } - -                 if ((roomtime % longint(60))>57)  xx -= 1; /* Blinks */ - -                 if (xx!=dna.dogfoodpos)    /* Only if it's changed.*/ -                 { -                  show_one(xx); -                  dna.dogfoodpos=xx;  /* We use DogfoodPos here too- why not? */ -                 } - -                 switch (roomtime % longint(50)) { -                  case 45 : show_one(9); break; /* Spurge blinks */ -                  case 49 : show_one(10); break; -                 } -                } -                break; - -   case r__ducks: { -              if ((roomtime % longint(3))==0)  /* The fire flickers */ -               show_one(longint(1)+(roomtime / longint(3)) % longint(3)); - -              switch (bearing(2)) {/* Bearing of Avvy from Duck. */ -                case 0 ... 45:case 315 ... 360: xx=4; break; /* Middle. */ -                 case 45 ... 180: xx=6; break; /* Left. */ -                case 181 ... 314: xx=8; break; /* Right. */ -              } - -              if ((roomtime % longint(45))>42)  xx += 1; /* Duck blinks */ - -              if (xx!=dna.dogfoodpos)    /* Only if it's changed.*/ -              { -               show_one(xx); -               dna.dogfoodpos=xx;  /* We use DogfoodPos here too- why not? */ -              } -             } -             break; - -  }} - - if ((dna.ringing_bells) && (flagset('B')))  -   /* They're ringing the bells. */ -  switch (roomtime % longint(4)) { -   case 1: { -       dnatype& with = dna;  - -       if (with.nextbell<5)  with.nextbell=12; -       with.nextbell -= 1; -       note(notes[with.nextbell]); -           } -           break; -   case 2: nosound; break; -  } +void pics_link() { +	byte xx; + +	if (ddmnow)  return; /* No animation when the menus are up. */ + +	{ +		dnatype &with = dna; +		switch (with.room) { + +		case r__outsideargentpub: { +			if ((roomtime % longint(12)) == 0) +				show_one(longint(1) + (roomtime / longint(12)) % longint(4)); +		} +		break; + +		case r__brummieroad: +			if ((roomtime % longint(2)) == 0) +				show_one(longint(1) + (roomtime / longint(2)) % longint(4)); +			break; + +		case r__bridge: +			if ((roomtime % longint(2)) == 0) +				show_one(longint(4) + (roomtime / longint(2)) % longint(4)); +			break; + +		case r__yours: +			if ((! with.avvy_is_awake) && ((roomtime % longint(4)) == 0)) +				show_one(longint(1) + (roomtime / longint(12)) % longint(2)); +			break; + +		case r__argentpub: { +			if (((roomtime % longint(7)) == 1) && (dna.malagauche != 177)) { +				/* Malagauche cycle */ +				dna.malagauche += 1; +				switch (dna.malagauche) { +				case 1: +				case 11: +				case 21: +					show_one(12); +					break; /* Looks forwards. */ +				case 8: +				case 18: +				case 28: +				case 32: +					show_one(11); +					break; /* Looks at you. */ +				case 30: +					show_one(13); +					break; /* Winks. */ +				case 33: +					dna.malagauche = 0; +					break; +				} +			} + +			switch (roomtime % longint(200)) { +			case 179: +			case 197: +				show_one(5); +				break; /* Dogfood's drinking cycle */ +			case 182: +			case 194: +				show_one(6); +				break; +			case 185: +				show_one(7); +				break; +			case 199: +				dna.dogfoodpos = 177; +				break; /* Impossible value for this. */ +			case 0 ... 178: { /* Normally. */ +				switch (bearing(2)) {/* Bearing of Avvy from Dogfood. */ +				case 1 ... 90: +				case RANGE_3(358, 360): +					xx = 3; +					break; +				case 293 ... 357: +					xx = 2; +					break; +				case 271 ... 292: +					xx = 4; +					break; +				} +				if (xx != dna.dogfoodpos) { /* Only if it's changed.*/ +					show_one(xx); +					dna.dogfoodpos = xx; +				} +			} +			break; +			} +		} +		break; + +		case r__westhall: +			if ((roomtime % longint(3)) == 0) +				switch ((roomtime / longint(3)) % longint(6)) { +				case 4: +					show_one(1); +					break; +				case 1: +				case 3: +				case 5: +					show_one(2); +					break; +				case 0: +				case 2: +					show_one(3); +					break; +				} +			break; +		case r__lustiesroom: +			if (!(dna.lustie_is_asleep))  { +				if ((roomtime % longint(45)) > 42)  xx = 4; /* du Lustie blinks */ +				else +					switch (bearing(2)) {/* Bearing of Avvy from du Lustie. */ +					case 0 ... 45: +					case 315 ... 360: +						xx = 1; +						break; /* Middle. */ +					case 45 ... 180: +						xx = 2; +						break; /* Left. */ +					case 181 ... 314: +						xx = 3; +						break; /* Right. */ +					} +				if (xx != dna.dogfoodpos) { /* Only if it's changed.*/ +					show_one(xx); +					dna.dogfoodpos = xx; /* We use DogfoodPos here too- why not? */ +				} +			} +			break; + +		case r__aylesoffice: +			if ((! dna.ayles_is_awake) && (roomtime % longint(14) == 0)) { +				switch ((roomtime / longint(14)) % longint(2)) { +				case 0: +					show_one(1); +					break; /* Frame 2: EGA. */ +				case 1: +					show_one(3); +					break; /* Frame 1: Natural. */ +				} +			} +			break; + +		case r__robins: +			if (dna.tied_up) +				switch (roomtime % longint(54)) { +				case 20: +					show_one(4); +					break; /* Frame 4: Avalot blinks. */ +				case 23: +					show_one(2); +					break; /* Frame 1: Back to normal. */ +				} +			break; + +		case r__nottspub: { +			switch (bearing(5)) { /* Bearing of Avvy from Port. */ +			case 0 ... 45: +			case 315 ... 360: +				xx = 2; +				break; /* Middle. */ +			case 45 ... 180: +				xx = 6; +				break; /* Left. */ +			case 181 ... 314: +				xx = 8; +				break; /* Right. */ +			} + +			if ((roomtime % longint(60)) > 57)  xx -= 1; /* Blinks */ + +			if (xx != dna.dogfoodpos) { /* Only if it's changed.*/ +				show_one(xx); +				dna.dogfoodpos = xx; /* We use DogfoodPos here too- why not? */ +			} + +			switch (roomtime % longint(50)) { +			case 45 : +				show_one(9); +				break; /* Spurge blinks */ +			case 49 : +				show_one(10); +				break; +			} +		} +		break; + +		case r__ducks: { +			if ((roomtime % longint(3)) == 0) /* The fire flickers */ +				show_one(longint(1) + (roomtime / longint(3)) % longint(3)); + +			switch (bearing(2)) {/* Bearing of Avvy from Duck. */ +			case 0 ... 45: +			case 315 ... 360: +				xx = 4; +				break; /* Middle. */ +			case 45 ... 180: +				xx = 6; +				break; /* Left. */ +			case 181 ... 314: +				xx = 8; +				break; /* Right. */ +			} + +			if ((roomtime % longint(45)) > 42)  xx += 1; /* Duck blinks */ + +			if (xx != dna.dogfoodpos) { /* Only if it's changed.*/ +				show_one(xx); +				dna.dogfoodpos = xx; /* We use DogfoodPos here too- why not? */ +			} +		} +		break; + +		} +	} + +	if ((dna.ringing_bells) && (flagset('B'))) +		/* They're ringing the bells. */ +		switch (roomtime % longint(4)) { +		case 1: { +			dnatype &with = dna; + +			if (with.nextbell < 5)  with.nextbell = 12; +			with.nextbell -= 1; +			note(notes[with.nextbell]); +		} +		break; +		case 2: +			nosound; +			break; +		}  } -void load_chunks(string xx) -{ - chunkblocktype ch; - byte fv; - - /*$I-*/ - assign(f,string("chunk")+xx+".avd"); /* strf is done for us by Lucerna. */ - reset(f,1); - if (ioresult!=0)  return; /* no Chunk file. */ - seek(f,44); - blockread(f,num_chunks,1); - blockread(f,offsets,num_chunks*4); - - for( fv=1; fv <= num_chunks; fv ++) - { -  seek(f,offsets[fv]); -  blockread(f,ch,sizeof(ch)); -  { -   if (ch.memorise)  -   { - -    { -     memotype& with1 = memos[fv];  - -     with1.x=ch.x; with1.xl=ch.xl; -     with1.y=ch.y; with1.yl=ch.yl; -     with1.flavour=ch.flavour; -     with1.size=ch.size; -    } - -    getmem(memory[fv],ch.size); - -    if (ch.natural)  -    { -     getimage(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl,memory[fv]); -    } else -     blockread(f,memory[fv],ch.size); -   } else memos[fv].x=on_disk; -  } - } - - close(f); - /*$I+*/ +void load_chunks(string xx) { +	chunkblocktype ch; +	byte fv; + +	/*$I-*/ +	assign(f, string("chunk") + xx + ".avd"); /* strf is done for us by Lucerna. */ +	reset(f, 1); +	if (ioresult != 0)  return; /* no Chunk file. */ +	seek(f, 44); +	blockread(f, num_chunks, 1); +	blockread(f, offsets, num_chunks * 4); + +	for (fv = 1; fv <= num_chunks; fv ++) { +		seek(f, offsets[fv]); +		blockread(f, ch, sizeof(ch)); +		{ +			if (ch.memorise) { + +				{ +					memotype &with1 = memos[fv]; + +					with1.x = ch.x; +					with1.xl = ch.xl; +					with1.y = ch.y; +					with1.yl = ch.yl; +					with1.flavour = ch.flavour; +					with1.size = ch.size; +				} + +				getmem(memory[fv], ch.size); + +				if (ch.natural) { +					getimage(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl, memory[fv]); +				} else +					blockread(f, memory[fv], ch.size); +			} else memos[fv].x = on_disk; +		} +	} + +	close(f); +	/*$I+*/  } -void forget_chunks() -{ -    byte fv; +void forget_chunks() { +	byte fv; - for( fv=1; fv <= num_chunks; fv ++) -  if (memos[fv].x>on_disk)  -   freemem(memory[fv],memos[fv].size); - fillchar(memos,sizeof(memos),'\377'); /* x=-1, => on disk. */ +	for (fv = 1; fv <= num_chunks; fv ++) +		if (memos[fv].x > on_disk) +			freemem(memory[fv], memos[fv].size); +	fillchar(memos, sizeof(memos), '\377'); /* x=-1, => on disk. */  } -void mdrop(integer x,integer y,integer xl,integer yl, pointer p) /* assembler; +void mdrop(integer x, integer y, integer xl, integer yl, pointer p) /* assembler;  asm    push ds;      { Strictly speaking, we shouldn't modify DS, so we'll save it.}    push bp;      { Nor BP! } @@ -357,143 +431,149 @@ asm    pop bp;    pop ds;       { Get DS back again. }  */ -{; +{ +	;  }  void show_one(byte which);  static bytefield r; -static void display_it(integer x,integer y,integer xl,integer yl, flavourtype flavour, pointer p) -{ - { -  switch (flavour) { -   case ch_bgi : { -             putimage(x*8,y,p,0); -             r.x1=x; r.y1=y; -             r.x2=x+xl+1; r.y2=y+yl; -            } -            break; -   case ch_ega : { -             mdrop(x,y,xl,yl,p); blitfix(); -             r.x1=x; r.y1=y; r.x2=x+xl; r.y2=y+yl; -            } -            break; -  } -} +static void display_it(integer x, integer y, integer xl, integer yl, flavourtype flavour, pointer p) { +	{ +		switch (flavour) { +		case ch_bgi : { +			putimage(x * 8, y, p, 0); +			r.x1 = x; +			r.y1 = y; +			r.x2 = x + xl + 1; +			r.y2 = y + yl; +		} +		break; +		case ch_ega : { +			mdrop(x, y, xl, yl, p); +			blitfix(); +			r.x1 = x; +			r.y1 = y; +			r.x2 = x + xl; +			r.y2 = y + yl; +		} +		break; +		} +	}  } -void show_one(byte which) -{ - chunkblocktype ch; - pointer p; - byte fv; +void show_one(byte which) { +	chunkblocktype ch; +	pointer p; +	byte fv; - setactivepage(3); +	setactivepage(3); - { -  memotype& with = memos[which];  +	{ +		memotype &with = memos[which]; -  if (with.x>on_disk)  -  { -   display_it(with.x,with.y,with.xl,with.yl,with.flavour,memory[which]); -  } else -  { -   reset(f,1); -   seek(f,offsets[which]); -   blockread(f,ch,sizeof(ch)); +		if (with.x > on_disk) { +			display_it(with.x, with.y, with.xl, with.yl, with.flavour, memory[which]); +		} else { +			reset(f, 1); +			seek(f, offsets[which]); +			blockread(f, ch, sizeof(ch)); -   { -    getmem(p,ch.size); -    blockread(f,p,ch.size); +			{ +				getmem(p, ch.size); +				blockread(f, p, ch.size); -    display_it(ch.x,ch.y,ch.xl,ch.yl,ch.flavour,p); -    freemem(p,ch.size); +				display_it(ch.x, ch.y, ch.xl, ch.yl, ch.flavour, p); +				freemem(p, ch.size); -    close(f); -   } +				close(f); +			} -  } +		} -  setactivepage(1-cp); +		setactivepage(1 - cp); -  for( fv=0; fv <= 1; fv ++) -   getset[fv].remember(r); - } +		for (fv = 0; fv <= 1; fv ++) +			getset[fv].remember(r); +	}  } -void show_one_at(byte which, integer xxx,integer yyy); +void show_one_at(byte which, integer xxx, integer yyy);  static bytefield r1; -static void display_it1(integer xl,integer yl, flavourtype flavour, pointer p, integer& xxx, integer& yyy) -{ - { -  switch (flavour) { -   case ch_bgi : { -             putimage(xxx,yyy,p,0); -             r1.x1=xxx; r1.y1=yyy; -             r1.x2=xxx+xl+1; r1.y2=yyy+yl; -            } -            break; -   case ch_ega : { -             mdrop(xxx / 8,yyy,xl,yl,p); blitfix(); -             r1.x1=xxx / 8; r1.y1=yyy; r1.x2=(xxx / 8)+xl; r1.y2=yyy+yl; -            } -            break; -  } -} +static void display_it1(integer xl, integer yl, flavourtype flavour, pointer p, integer &xxx, integer &yyy) { +	{ +		switch (flavour) { +		case ch_bgi : { +			putimage(xxx, yyy, p, 0); +			r1.x1 = xxx; +			r1.y1 = yyy; +			r1.x2 = xxx + xl + 1; +			r1.y2 = yyy + yl; +		} +		break; +		case ch_ega : { +			mdrop(xxx / 8, yyy, xl, yl, p); +			blitfix(); +			r1.x1 = xxx / 8; +			r1.y1 = yyy; +			r1.x2 = (xxx / 8) + xl; +			r1.y2 = yyy + yl; +		} +		break; +		} +	}  } -void show_one_at(byte which, integer xxx,integer yyy) -{ - chunkblocktype ch; - pointer p; - byte fv; +void show_one_at(byte which, integer xxx, integer yyy) { +	chunkblocktype ch; +	pointer p; +	byte fv; - setactivepage(3); +	setactivepage(3); - { -  memotype& with = memos[which];  +	{ +		memotype &with = memos[which]; -  if (with.x>on_disk)  -  { -   display_it1(with.xl,with.yl,with.flavour,memory[which], xxx, yyy); -  } else -  { -   reset(f,1); -   seek(f,offsets[which]); -   blockread(f,ch,sizeof(ch)); +		if (with.x > on_disk) { +			display_it1(with.xl, with.yl, with.flavour, memory[which], xxx, yyy); +		} else { +			reset(f, 1); +			seek(f, offsets[which]); +			blockread(f, ch, sizeof(ch)); -   { -    getmem(p,ch.size); -    blockread(f,p,ch.size); +			{ +				getmem(p, ch.size); +				blockread(f, p, ch.size); -    display_it1(ch.xl,ch.yl,ch.flavour,p, xxx, yyy); -    freemem(p,ch.size); +				display_it1(ch.xl, ch.yl, ch.flavour, p, xxx, yyy); +				freemem(p, ch.size); -    close(f); -   } +				close(f); +			} -  } +		} -  setactivepage(1-cp); +		setactivepage(1 - cp); -  for( fv=0; fv <= 1; fv ++) -   getset[fv].remember(r1); - } +		for (fv = 0; fv <= 1; fv ++) +			getset[fv].remember(r1); +	}  }  class unit_celer_initialize { -  public: unit_celer_initialize(); +public: +	unit_celer_initialize();  };  static unit_celer_initialize celer_constructor;  unit_celer_initialize::unit_celer_initialize() { - num_chunks=0; +	num_chunks = 0;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/celer.h b/engines/avalanche/celer.h index c48bb468e7..9db53b57eb 100644 --- a/engines/avalanche/celer.h +++ b/engines/avalanche/celer.h @@ -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 @@ -35,23 +35,23 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  };  struct memotype { -            integer x,y; -            integer xl,yl; -            flavourtype flavour; -            word size; +	integer x, y; +	integer xl, yl; +	flavourtype flavour; +	word size;  }; @@ -60,23 +60,23 @@ struct memotype {  #define EXTERN  #endif -EXTERN array<1,40,longint> offsets; +EXTERN array<1, 40, longint> offsets;  EXTERN byte num_chunks; -EXTERN array<1,40,memotype> memos; -EXTERN array<1,40,pointer> memory; +EXTERN array<1, 40, memotype> memos; +EXTERN array<1, 40, pointer> memory;  #undef EXTERN  #define EXTERN extern -   void pics_link(); +void pics_link(); -   void load_chunks(string xx); +void load_chunks(string xx); -   void forget_chunks(); +void forget_chunks(); -   void show_one(byte which); +void show_one(byte which); -   void show_one_at(byte which, integer xxx,integer yyy); +void show_one_at(byte which, integer xxx, integer yyy);  } // End of namespace Avalanche. diff --git a/engines/avalanche/ch_egats.cpp b/engines/avalanche/ch_egats.cpp index a109127664..98ea2a51e4 100644 --- a/engines/avalanche/ch_egats.cpp +++ b/engines/avalanche/ch_egats.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 @@ -29,26 +29,26 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  };  untyped_file f;  longint offset;  chunkblocktype ch; -integer gd,gm; +integer gd, gm;  byte bit;  pointer p; -void mdrop(integer x,integer y,integer xl,integer yl, pointer p) /* assembler; +void mdrop(integer x, integer y, integer xl, integer yl, pointer p) /* assembler;  asm    push ds;      { Strictly speaking, we shouldn't modify DS, so we'll save it.}    push bp;      { Nor BP! } @@ -142,41 +142,44 @@ asm    pop bp;    pop ds;       { Get DS back again. }  */ -{; +{ +	;  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - assign(f,"chunk21.avd"); - reset(f,1); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	assign(f, "chunk21.avd"); +	reset(f, 1); - seek(f,49); - blockread(f,offset,4); +	seek(f, 49); +	blockread(f, offset, 4); - seek(f,offset); +	seek(f, offset); - blockread(f,ch,sizeof(ch)); +	blockread(f, ch, sizeof(ch)); - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); - getmem(p,ch.size); - blockread(f,p,ch.size); -/* putimage(0,0,p^,0);*/ +	getmem(p, ch.size); +	blockread(f, p, ch.size); +	/* putimage(0,0,p^,0);*/ -/* with ch do -  for bit:=0 to 3 do -  begin; -   port[$3c4]:=2; port[$3ce]:=4; port[$3C5]:=1 shl bit; port[$3CF]:=bit; -   for gm:=0 to yl do -    blockread(f,mem[$A000*gm*80],(ch.xl+7) div 8); -  end;*/ +	/* with ch do +	  for bit:=0 to 3 do +	  begin; +	   port[$3c4]:=2; port[$3ce]:=4; port[$3C5]:=1 shl bit; port[$3CF]:=bit; +	   for gm:=0 to yl do +	    blockread(f,mem[$A000*gm*80],(ch.xl+7) div 8); +	  end;*/ -  mdrop(ch.x,ch.y,ch.xl,ch.yl,p); +	mdrop(ch.x, ch.y, ch.xl, ch.yl, p); - close(f); -return EXIT_SUCCESS; +	close(f); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/charmap.cpp b/engines/avalanche/charmap.cpp index 985bbf0707..d599ef5881 100644 --- a/engines/avalanche/charmap.cpp +++ b/engines/avalanche/charmap.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 @@ -30,29 +30,33 @@  namespace Avalanche {  struct infotype { -            matrix<128,255,1,8,byte> chars; -            string data; +	matrix<128, 255, 1, 8, byte> chars; +	string data;  };  infotype table;  pointer where; -byte w,fv,ff,num; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - getintvec(0x1f,where); move(where,table,1024); - for( w=128; w <= 255; w ++) - {; output << w << NL; - for( fv=1; fv <= 8; fv ++) - {; -  num=table.chars[w][fv]; -  for( ff=1; ff <= 8; ff ++) -  {; -   if ((num & 128)==0)  output << "  "; else output << "ÛÛ"; -   num=num << 1; -  } -  output << NL; - } } -return EXIT_SUCCESS; +byte w, fv, ff, num; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	getintvec(0x1f, where); +	move(where, table, 1024); +	for (w = 128; w <= 255; w ++) { +		; +		output << w << NL; +		for (fv = 1; fv <= 8; fv ++) { +			; +			num = table.chars[w][fv]; +			for (ff = 1; ff <= 8; ff ++) { +				; +				if ((num & 128) == 0)  output << "  "; +				else output << "ÛÛ"; +				num = num << 1; +			} +			output << NL; +		} +	} +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunker.cpp b/engines/avalanche/chunker.cpp index 4b7dd0e9fd..68d269def9 100644 --- a/engines/avalanche/chunker.cpp +++ b/engines/avalanche/chunker.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 @@ -27,87 +27,84 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  };  untyped_file f;  string fn; -byte num_chunks,fv; +byte num_chunks, fv;  longint offset;  chunkblocktype ch; -int main(int argc, const char* argv[]) -{ -   pio_initialize(argc, argv); -   output << NL; -   output << "CHUNKER 12/3/1995 TT" << NL; -   output << NL; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	output << NL; +	output << "CHUNKER 12/3/1995 TT" << NL; +	output << NL; -   if (paramcount!=1)  -   { -      output << "which chunk file?" << NL; -      exit(0); -   } +	if (paramcount != 1) { +		output << "which chunk file?" << NL; +		exit(0); +	} -   fn=paramstr(1); -   assign(f,fn); -   reset(f,1); -   output << "----- In chunk file " << fn << ", there are: -----" << NL; +	fn = paramstr(1); +	assign(f, fn); +	reset(f, 1); +	output << "----- In chunk file " << fn << ", there are: -----" << NL; -   seek(f,44); -   blockread(f,num_chunks,1); -   output << format(num_chunks,4) << " chunks:" << NL; +	seek(f, 44); +	blockread(f, num_chunks, 1); +	output << format(num_chunks, 4) << " chunks:" << NL; -   output << "  No  Hdr    Offset  Flvr  Mem Nat      X      Y  Width Height Size of image" << NL; +	output << "  No  Hdr    Offset  Flvr  Mem Nat      X      Y  Width Height Size of image" << NL; -   for( fv=1; fv <= num_chunks; fv ++) -   { +	for (fv = 1; fv <= num_chunks; fv ++) { -      output << "Ch" << format(fv,2) << ':'; +		output << "Ch" << format(fv, 2) << ':'; -      seek(f,41+fv*4); +		seek(f, 41 + fv * 4); -      output << format(41+fv*4,4); -      blockread(f,offset,4); -      output << format(offset,10); +		output << format(41 + fv * 4, 4); +		blockread(f, offset, 4); +		output << format(offset, 10); -      seek(f,offset); -      blockread(f,ch,sizeof(ch)); -      { -         if (ch.flavour==ch_bgi)  -            output << " ch_BGI"; -         else -            output << " ch_EGA"; +		seek(f, offset); +		blockread(f, ch, sizeof(ch)); +		{ +			if (ch.flavour == ch_bgi) +				output << " ch_BGI"; +			else +				output << " ch_EGA"; -         if (ch.memorise)  -            output << " yes"; -         else -            output << " no "; +			if (ch.memorise) +				output << " yes"; +			else +				output << " no "; -         if (ch.natural)  -            output << " yes"; -         else -            output << " no "; +			if (ch.natural) +				output << " yes"; +			else +				output << " no "; -         output << format(ch.x,7) << format(ch.y,7) << format(ch.xl,7) << format(ch.yl,7) << format(ch.size,10); -      } +			output << format(ch.x, 7) << format(ch.y, 7) << format(ch.xl, 7) << format(ch.yl, 7) << format(ch.size, 10); +		} -      output << NL; -   } +		output << NL; +	} -   output << "---ENDS---" << NL; +	output << "---ENDS---" << NL; -   close(f); -   return EXIT_SUCCESS; +	close(f); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxf1.cpp b/engines/avalanche/chunkxf1.cpp index 5118d7d916..ba6ab57bf3 100644 --- a/engines/avalanche/chunkxf1.cpp +++ b/engines/avalanche/chunkxf1.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 @@ -43,61 +43,68 @@ namespace Avalanche {                     memorise:boolean; { Hold it in memory? }                    end;*/ -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  /* arraysize = 12000;*/  /* offsets:array[1..30] of longint;*/  byte num_chunks/*,this_chunk*/; -integer gd,gm; +integer gd, gm;  /* f:file;*/  /* aa:array[0..arraysize] of byte;*/ -void load() -{ - byte a0 /*absolute $A000:800*/; - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - assign(f,"chunkbit.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - - assign(f,"place21.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); +void load() { +	byte a0 /*absolute $A000:800*/; +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; +	assign(f, "chunkbit.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); + +	assign(f, "place21.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0);  } -void open_chunk() -{; - assign(f,"chunk21.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	; +	assign(f, "chunk21.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{; - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	; +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  }  /*  procedure mgrab(x1,y1,x2,y2:integer; size:word); @@ -193,7 +200,7 @@ end;*/  /*procedure grab(x1,y1,x2,y2,realx,realy:integer; flav:flavourtype;   mem,nat:boolean);*/ - /* yes, I *do* know how to spell "really"! */ +/* yes, I *do* know how to spell "really"! */  /*var   s:word;   p:pointer; @@ -260,27 +267,29 @@ begin;  (* rectangle(x1,y1,x2,y2);*)  end;*/ -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - setwritemode(xorput); - - num_chunks=7; - - open_chunk(); - - grab( 98,10,181,41,247,82,ch_ega,false,false); /* Drawbridge... */ - grab(223,10,320,41,233,82,ch_ega,false,false); - grab(361,10,458,64,233,82,ch_ega,false,false); - - grab( 11,10, 39,22,172,17,ch_bgi,true,true); - grab( 11,38, 39,50,172,17,ch_ega,true,false); /* Flag. */ - grab( 11,24, 39,36,172,17,ch_ega,true,false); - grab( 11,10, 39,22,172,17,ch_ega,true,false); - close_chunk(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	setwritemode(xorput); + +	num_chunks = 7; + +	open_chunk(); + +	grab(98, 10, 181, 41, 247, 82, ch_ega, false, false); /* Drawbridge... */ +	grab(223, 10, 320, 41, 233, 82, ch_ega, false, false); +	grab(361, 10, 458, 64, 233, 82, ch_ega, false, false); + +	grab(11, 10, 39, 22, 172, 17, ch_bgi, true, true); +	grab(11, 38, 39, 50, 172, 17, ch_ega, true, false); /* Flag. */ +	grab(11, 24, 39, 36, 172, 17, ch_ega, true, false); +	grab(11, 10, 39, 22, 172, 17, ch_ega, true, false); +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxf2.cpp b/engines/avalanche/chunkxf2.cpp index 3b6caa78e7..781f798d17 100644 --- a/engines/avalanche/chunkxf2.cpp +++ b/engines/avalanche/chunkxf2.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 @@ -29,191 +29,205 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer arraysize = 32000; -array<1,30,longint> offsets; -byte num_chunks,this_chunk; -integer gd,gm; +array<1, 30, longint> offsets; +byte num_chunks, this_chunk; +integer gd, gm;  untyped_file f; -array<0,arraysize,byte> aa; - -void load() -{ - byte a0 /*absolute $A000:800*/; - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - - assign(f,"place9.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); +array<0, arraysize, byte> aa; + +void load() { +	byte a0 /*absolute $A000:800*/; +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "place9.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0);  } -void load_temp(string which) -{ - byte a0 /*absolute $A000:800*/; - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - assign(f,which); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - bit=getpixel(0,0); +void load_temp(string which) { +	byte a0 /*absolute $A000:800*/; +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; +	assign(f, which); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); +	bit = getpixel(0, 0);  } -void open_chunk() -{; - assign(f,"chunk9.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	; +	assign(f, "chunk9.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{; - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	; +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; -; - if (size>arraysize)  - {; -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  {; -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; +	; +	if (size > arraysize) { +		; +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			; +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2, integer realx, integer realy, boolean mem,boolean nat) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, boolean mem, boolean nat) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; -; -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - {; -  if (nat)  -   ch.flavour=ch_bgi; -  else ch.flavour=ch_ega; /* At the moment, Celer can't handle natural ch_EGAs. */ -  ch.x=realx; -  ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - setvisualpage(1); - setactivepage(1); - input >> NL; - putimage(ch.x,ch.y,p,0); - - freemem(p,s); - {; -  if (ch.flavour==ch_bgi)  s=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -   else s=4*((x2-x1+7) / 8)*(y2-y1+1); -  ch.size=s; -  ch.x=ch.x / 8; -  ch.xl=(ch.xl+7) / 8; -  mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); - } - - input >> NL; - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - if (! nat)  blockwrite(f,aa,s); +	word s; +	pointer p; +	chunkblocktype ch; +	; +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		; +		if (nat) +			ch.flavour = ch_bgi; +		else ch.flavour = ch_ega; /* At the moment, Celer can't handle natural ch_EGAs. */ +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	setvisualpage(1); +	setactivepage(1); +	input >> NL; +	putimage(ch.x, ch.y, p, 0); + +	freemem(p, s); +	{ +		; +		if (ch.flavour == ch_bgi)  s = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +		else s = 4 * ((x2 - x1 + 7) / 8) * (y2 - y1 + 1); +		ch.size = s; +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +	} + +	input >> NL; +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	if (! nat)  blockwrite(f, aa, s);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - load_temp("d:chunkbit.avd"); - setwritemode(xorput); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	load_temp("d:chunkbit.avd"); +	setwritemode(xorput); - num_chunks=7; +	num_chunks = 7; - open_chunk(); +	open_chunk(); - grab( 78, 78,232,102,212, 10,true,false); /* 154 across */ - grab(235, 78,389,102,212, 10,true,false); - grab(392, 78,546,102,212, 10,true,false); - grab(392, 78,546,102,212, 10,true,true); +	grab(78, 78, 232, 102, 212, 10, true, false); /* 154 across */ +	grab(235, 78, 389, 102, 212, 10, true, false); +	grab(392, 78, 546, 102, 212, 10, true, false); +	grab(392, 78, 546, 102, 212, 10, true, true); - load_temp("d:chunkbi3.avd"); +	load_temp("d:chunkbi3.avd"); - grab(437, 51,475, 78,147,120,false,false); /* 5 = door half-open. */ - grab(397, 51,435, 78,147,120,false,false); /* 6 = door open. */ - grab(397, 51,435, 78,147,120,true,true);   /* 7 = door shut. */ +	grab(437, 51, 475, 78, 147, 120, false, false); /* 5 = door half-open. */ +	grab(397, 51, 435, 78, 147, 120, false, false); /* 6 = door open. */ +	grab(397, 51, 435, 78, 147, 120, true, true); /* 7 = door shut. */ - close_chunk(); -return EXIT_SUCCESS; +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxf3.cpp b/engines/avalanche/chunkxf3.cpp index ab27863f3b..b0bb23242f 100644 --- a/engines/avalanche/chunkxf3.cpp +++ b/engines/avalanche/chunkxf3.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 @@ -58,100 +58,135 @@ var   f:file;   aa:array[0..arraysize] of byte;*/ -string strf(longint x) -{ -    string q; -string strf_result; -; - str(x,q); strf_result=q; -return strf_result; +string strf(longint x) { +	string q; +	string strf_result; +	; +	str(x, q); +	strf_result = q; +	return strf_result;  } -void finder() -{ -    char r; integer x,y; -;  - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +void finder() { +	char r; +	integer x, y; +	; +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void loadtemp(string n) -{ - byte a0 /*absolute $A000:800*/; - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - assign(f,n); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - bit=getpixel(0,0); - finder(); +void loadtemp(string n) { +	byte a0 /*absolute $A000:800*/; +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; +	assign(f, n); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); +	bit = getpixel(0, 0); +	finder();  } -void load() -{ - byte a0 /*absolute $A000:800*/; - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - assign(f,"place22.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); - setactivepage(1); setvisualpage(1); finder(); - setactivepage(0); setvisualpage(0); +void load() { +	byte a0 /*absolute $A000:800*/; +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; +	assign(f, "place22.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); +	setactivepage(1); +	setvisualpage(1); +	finder(); +	setactivepage(0); +	setvisualpage(0);  } -void open_chunk() -{; - assign(f,"chunk22.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	; +	assign(f, "chunk22.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{; - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	; +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  }  /*procedure mgrab(x1,y1,x2,y2:integer; size:word); @@ -243,35 +278,38 @@ begin;  { rectangle(x1,y1,x2,y2);}  end;*/ -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - loadtemp("chunkbit.avd"); load(); - setwritemode(xorput); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	loadtemp("chunkbit.avd"); +	load(); +	setwritemode(xorput); - num_chunks=9; +	num_chunks = 9; - open_chunk(); +	open_chunk(); - grab(  0,103,169,159, 72,86,ch_ega,false,false); /* Stairs... */ - grab(172,103,341,159, 72,86,ch_ega,false,false); +	grab(0, 103, 169, 159, 72, 86, ch_ega, false, false); /* Stairs... */ +	grab(172, 103, 341, 159, 72, 86, ch_ega, false, false); - loadtemp("chunkbi3.avd"); +	loadtemp("chunkbi3.avd"); - grab(  0,130, 79,157,341,94,ch_bgi,true ,true ); - grab(  0,130, 79,157,341,94,ch_ega,false,false); - grab(  0,102, 79,129,341,94,ch_ega,false,false); - grab(  0, 74, 79,101,341,94,ch_ega,false,false); /* Far door. */ +	grab(0, 130, 79, 157, 341, 94, ch_bgi, true , true); +	grab(0, 130, 79, 157, 341, 94, ch_ega, false, false); +	grab(0, 102, 79, 129, 341, 94, ch_ega, false, false); +	grab(0, 74, 79, 101, 341, 94, ch_ega, false, false); /* Far door. */ - loadtemp("chunkbi2.avd"); +	loadtemp("chunkbi2.avd"); - grab(393, 92,451,137,512,98,ch_bgi,true ,true ); /* Right-hand door. */ - grab(393, 92,451,137,512,98,ch_ega,false,false); - grab(453, 92,511,137,512,98,ch_ega,false,false); +	grab(393, 92, 451, 137, 512, 98, ch_bgi, true , true); /* Right-hand door. */ +	grab(393, 92, 451, 137, 512, 98, ch_ega, false, false); +	grab(453, 92, 511, 137, 512, 98, ch_ega, false, false); - close_chunk(); -return EXIT_SUCCESS; +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxf4.cpp b/engines/avalanche/chunkxf4.cpp index 0ac2e1f85c..8648964d9e 100644 --- a/engines/avalanche/chunkxf4.cpp +++ b/engines/avalanche/chunkxf4.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 @@ -31,282 +31,315 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; -enum kind {walled,unwalled, last_kind}; +enum kind {walled, unwalled, last_kind}; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer arraysize = 12000; -const kind w = walled; const kind uw = unwalled; +const kind w = walled; +const kind uw = unwalled; -array<1,50,longint> offsets; -byte num_chunks,this_chunk; -integer gd,gm; +array<1, 50, longint> offsets; +byte num_chunks, this_chunk; +integer gd, gm;  untyped_file f; -array<0,arraysize,byte> aa; - -void rdln() -{ -    char r; -      return; - do { r=readkey(); } while (!(! keypressed())); +array<0, arraysize, byte> aa; + +void rdln() { +	char r; +	return; +	do { +		r = readkey(); +	} while (!(! keypressed()));  } -void load(kind k) -{ - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; +void load(kind k) { +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; - if (k==unwalled)  assign(f,"place29.avd"); -  else assign(f,"walled.avd"); +	if (k == unwalled)  assign(f, "place29.avd"); +	else assign(f, "walled.avd"); - reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} - close(f); - bit=getpixel(0,0); +	close(f); +	bit = getpixel(0, 0);  } -void finder() -{ -    char r; integer x,y; -      return; - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +void finder() { +	char r; +	integer x, y; +	return; +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void loadtemp(string which) -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; +void loadtemp(string which) { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; - assign(f,string("corr")+which+"tmp.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); +	assign(f, string("corr") + which + "tmp.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); - bit=getpixel(0,0); +	bit = getpixel(0, 0); - finder(); +	finder();  } -void open_chunk() -{ - assign(f,"chunk29.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	assign(f, "chunk29.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{ - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; - - if (size>arraysize)  - { -  restorecrtmode(); -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  { -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; + +	if (size > arraysize) { +		restorecrtmode(); +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat, kind k) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat, kind k) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; - -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - { -  ch.flavour=flav; -  ch.x=realx; ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - load(k); - - setvisualpage(1); - setactivepage(1); - rdln(); - putimage(ch.x,ch.y,p,0); - - if (flav==ch_ega)  - { -  freemem(p,s); -  s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1); -  { -   ch.size=s; -   ch.x=ch.x / 8; -   ch.xl=((realx-ch.x*8)+(x2-x1)+7) / 8; -   mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); -  } - } else -             /* For BGI pictures. */ -  { -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -  } - - rdln(); - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - switch (flav) { -  case ch_ega : if (! nat)  blockwrite(f,aa,s); break; -  case ch_bgi : { -            if (! nat)  blockwrite(f,p,s); -            freemem(p,s); -           } -           break; - } -/* rectangle(x1,y1,x2,y2);*/ +	word s; +	pointer p; +	chunkblocktype ch; + +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		ch.flavour = flav; +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	load(k); + +	setvisualpage(1); +	setactivepage(1); +	rdln(); +	putimage(ch.x, ch.y, p, 0); + +	if (flav == ch_ega) { +		freemem(p, s); +		s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1); +		{ +			ch.size = s; +			ch.x = ch.x / 8; +			ch.xl = ((realx - ch.x * 8) + (x2 - x1) + 7) / 8; +			mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +		} +	} else +		/* For BGI pictures. */ +	{ +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +	} + +	rdln(); +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	switch (flav) { +	case ch_ega : +		if (! nat)  blockwrite(f, aa, s); +		break; +	case ch_bgi : { +		if (! nat)  blockwrite(f, p, s); +		freemem(p, s); +	} +	break; +	} +	/* rectangle(x1,y1,x2,y2);*/  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - setwritemode(xorput); - - loadtemp("2"); - - num_chunks=32; - - open_chunk(); - - grab(  0, 11,100,104,260,41,ch_ega,false,false,uw); /*1 Geida's door. */ - grab(103, 12,203, 55,207,61,ch_ega,false,false,uw); /*2 "Ite mingite" sign. */ - grab(123, 59,185,103,254,90,ch_ega,false,false,uw); /*3 Normal N door (rt handle)*/ - grab(227, 10,289, 56,254,88,ch_ega,false,false,uw); /*4 Normal N door (lt handle)*/ - grab(207, 63,294,105,  9,47,ch_ega,false,false, w); /*5 Window in left wall. */ - grab(312, 10,416, 56,233,88,ch_ega,false,false,uw); /*6 North archway */ - grab(331, 78,384,101, 32,64,ch_ega,false,false, w); /*7 2 torches, L wall. */ - grab(607,142,621,157,233,88,ch_ega,false,false,uw); /*8 1 torch, N wall. */ - grab(417, 11,577, 59,311,61,ch_ega,false,false,uw); /*9 "The Wrong Way!" sign. */ - - loadtemp("3"); - - grab(  0, 11, 62, 63,557,108,ch_ega,false,false, w); /*10 Near right candle */ - grab( 64, 11,120, 63, 18,108,ch_ega,false,false, w); /*11 Near left candle */ - grab(122, 11,169, 55, 93,100,ch_ega,false,false, w); /*12 Far left candle */ - grab(171, 11,222, 52,500,100,ch_ega,false,false, w); /*13 Far right candle */ - grab( 32, 68, 84,104,285, 70,ch_ega,false,false,uw); /*14 Far window */ - grab(138, 65,190, 92,233, 88,ch_ega,false,false,uw); /*15 Baron du Lustie pic 1 */ - grab(244, 65,296, 92,103, 51,ch_ega,false,false,uw); /*16 Baron du Lustie pic 2 */ - grab(172, 54,280, 63,233, 88,ch_ega,false,false,uw); /*17 "Art Gallery" sign */ - grab(341, 18,402, 47,563, 48,ch_ega,false,false, w); /*18 Right wall torches */ - grab(528, 10,639,160,528, 10,ch_ega,false,false,uw); /*19 Right wall */ - grab(430, 50,526, 88,543, 50,ch_ega,false,false, w); /*20 Window in right wall */ - grab(451, 91,494,152,566, 91,ch_ega,false,false, w); /*21 Door in right wall */ - grab(238, 10,307, 14,484,156,ch_ega,false,false, w); /*22 Near wall door: right */ - grab(239, 16,300, 20,300,156,ch_ega,false,false, w); /*23 Near wall door: middle */ - grab(234, 22,306, 26,100,156,ch_ega,false,false, w); /*24 Near wall door: left */ - grab( 25,113, 87,156,254, 90,ch_ega,false,false, w); /*25 Far door opening stage 1 */ - grab(131,113,193,156,254, 90,ch_ega,false,false, w); /*26 Far door opening stage 2 */ - grab(237,113,299,156,254, 90,ch_ega,false,false, w); /*27 Far door opening stage 3 */ - - loadtemp("4"); - - grab(  0, 11,112,160,  0, 11,ch_ega,false,false,uw); /*28 Left wall */ - grab(144, 44,197, 76, 30, 44,ch_ega,false,false, w); /*29 Shield on L wall. */ - grab(149, 90,192,152, 35, 90,ch_ega,false,false, w); /*30 Door in L wall. */ - grab(463, 28,527, 43,252,100,ch_ega,false,false, w); /*31 Archway x 2 */ - grab(463, 79,527, 94,252,100,ch_ega,false,false, w); /*32 Archway x 3 */ - - close_chunk(); - return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	setwritemode(xorput); + +	loadtemp("2"); + +	num_chunks = 32; + +	open_chunk(); + +	grab(0, 11, 100, 104, 260, 41, ch_ega, false, false, uw); /*1 Geida's door. */ +	grab(103, 12, 203, 55, 207, 61, ch_ega, false, false, uw); /*2 "Ite mingite" sign. */ +	grab(123, 59, 185, 103, 254, 90, ch_ega, false, false, uw); /*3 Normal N door (rt handle)*/ +	grab(227, 10, 289, 56, 254, 88, ch_ega, false, false, uw); /*4 Normal N door (lt handle)*/ +	grab(207, 63, 294, 105,  9, 47, ch_ega, false, false, w); /*5 Window in left wall. */ +	grab(312, 10, 416, 56, 233, 88, ch_ega, false, false, uw); /*6 North archway */ +	grab(331, 78, 384, 101, 32, 64, ch_ega, false, false, w); /*7 2 torches, L wall. */ +	grab(607, 142, 621, 157, 233, 88, ch_ega, false, false, uw); /*8 1 torch, N wall. */ +	grab(417, 11, 577, 59, 311, 61, ch_ega, false, false, uw); /*9 "The Wrong Way!" sign. */ + +	loadtemp("3"); + +	grab(0, 11, 62, 63, 557, 108, ch_ega, false, false, w); /*10 Near right candle */ +	grab(64, 11, 120, 63, 18, 108, ch_ega, false, false, w); /*11 Near left candle */ +	grab(122, 11, 169, 55, 93, 100, ch_ega, false, false, w); /*12 Far left candle */ +	grab(171, 11, 222, 52, 500, 100, ch_ega, false, false, w); /*13 Far right candle */ +	grab(32, 68, 84, 104, 285, 70, ch_ega, false, false, uw); /*14 Far window */ +	grab(138, 65, 190, 92, 233, 88, ch_ega, false, false, uw); /*15 Baron du Lustie pic 1 */ +	grab(244, 65, 296, 92, 103, 51, ch_ega, false, false, uw); /*16 Baron du Lustie pic 2 */ +	grab(172, 54, 280, 63, 233, 88, ch_ega, false, false, uw); /*17 "Art Gallery" sign */ +	grab(341, 18, 402, 47, 563, 48, ch_ega, false, false, w); /*18 Right wall torches */ +	grab(528, 10, 639, 160, 528, 10, ch_ega, false, false, uw); /*19 Right wall */ +	grab(430, 50, 526, 88, 543, 50, ch_ega, false, false, w); /*20 Window in right wall */ +	grab(451, 91, 494, 152, 566, 91, ch_ega, false, false, w); /*21 Door in right wall */ +	grab(238, 10, 307, 14, 484, 156, ch_ega, false, false, w); /*22 Near wall door: right */ +	grab(239, 16, 300, 20, 300, 156, ch_ega, false, false, w); /*23 Near wall door: middle */ +	grab(234, 22, 306, 26, 100, 156, ch_ega, false, false, w); /*24 Near wall door: left */ +	grab(25, 113, 87, 156, 254, 90, ch_ega, false, false, w); /*25 Far door opening stage 1 */ +	grab(131, 113, 193, 156, 254, 90, ch_ega, false, false, w); /*26 Far door opening stage 2 */ +	grab(237, 113, 299, 156, 254, 90, ch_ega, false, false, w); /*27 Far door opening stage 3 */ + +	loadtemp("4"); + +	grab(0, 11, 112, 160,  0, 11, ch_ega, false, false, uw); /*28 Left wall */ +	grab(144, 44, 197, 76, 30, 44, ch_ega, false, false, w); /*29 Shield on L wall. */ +	grab(149, 90, 192, 152, 35, 90, ch_ega, false, false, w); /*30 Door in L wall. */ +	grab(463, 28, 527, 43, 252, 100, ch_ega, false, false, w); /*31 Archway x 2 */ +	grab(463, 79, 527, 94, 252, 100, ch_ega, false, false, w); /*32 Archway x 3 */ + +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxf5.cpp b/engines/avalanche/chunkxf5.cpp index c4041d67f4..72cc0c39b7 100644 --- a/engines/avalanche/chunkxf5.cpp +++ b/engines/avalanche/chunkxf5.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 @@ -31,241 +31,287 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer arraysize = 12000; -array<1,30,longint> offsets; -byte num_chunks,this_chunk; -integer gd,gm; +array<1, 30, longint> offsets; +byte num_chunks, this_chunk; +integer gd, gm;  untyped_file f; -array<0,arraysize,byte> aa; - -void finder() -{ -    char r; integer x,y; -; - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +array<0, arraysize, byte> aa; + +void finder() { +	char r; +	integer x, y; +	; +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void load() -{ - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - - assign(f,"v:place1.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); - - setvisualpage(1); setactivepage(1); - finder(); +void load() { +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "v:place1.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); + +	setvisualpage(1); +	setactivepage(1); +	finder();  } -void loadtemp() -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; -; - - assign(f,"chunkbi9.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - - bit=getpixel(0,0); - - setvisualpage(0); setactivepage(0); - finder(); +void loadtemp() { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "chunkbi9.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); + +	bit = getpixel(0, 0); + +	setvisualpage(0); +	setactivepage(0); +	finder();  } -void open_chunk() -{; - assign(f,"chunk1.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	; +	assign(f, "chunk1.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{; - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	; +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; -; - if (size>arraysize)  - {; -  restorecrtmode(); -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  {; -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; +	; +	if (size > arraysize) { +		; +		restorecrtmode(); +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			; +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; -; -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - {; -  ch.flavour=flav; -  ch.x=realx; ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - setvisualpage(1); - setactivepage(1); - input >> NL; - if (! nat)  putimage(ch.x,ch.y,p,0); - - if (flav==ch_ega)  - {; -  freemem(p,s); -  s=4*(((x2+7) / 8)-(x1 / 8))*(y2-y1+1); -  {; -   ch.size=s; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); -  } - } else -  {; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -  } - - input >> NL; - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - switch (flav) { -  case ch_ega : if (! nat)  blockwrite(f,aa,s); break; -  case ch_bgi : {; -            if (! nat)  blockwrite(f,p,s); -            freemem(p,s); -           } -           break; - } -/* rectangle(x1,y1,x2,y2);*/ +	word s; +	pointer p; +	chunkblocktype ch; +	; +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		; +		ch.flavour = flav; +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	setvisualpage(1); +	setactivepage(1); +	input >> NL; +	if (! nat)  putimage(ch.x, ch.y, p, 0); + +	if (flav == ch_ega) { +		; +		freemem(p, s); +		s = 4 * (((x2 + 7) / 8) - (x1 / 8)) * (y2 - y1 + 1); +		{ +			; +			ch.size = s; +			ch.x = ch.x / 8; +			ch.xl = (ch.xl + 7) / 8; +			mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +		} +	} else { +		; +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +	} + +	input >> NL; +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	switch (flav) { +	case ch_ega : +		if (! nat)  blockwrite(f, aa, s); +		break; +	case ch_bgi : { +		; +		if (! nat)  blockwrite(f, p, s); +		freemem(p, s); +	} +	break; +	} +	/* rectangle(x1,y1,x2,y2);*/  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - loadtemp(); - setwritemode(xorput); - - num_chunks=9; - - open_chunk(); - - grab( 48, 42, 94, 66,400,105,ch_ega, true,false); /*1 Avvy asleep. */ - grab(100, 42,146, 66,400,105,ch_ega, true,false); /*2 Avvy asleep again. */ - grab(152, 42,198, 66,400,105,ch_ega,false,false); /*3 Avvy awake in bed. */ - grab(106,113,152,137,400,105,ch_bgi,true ,true ); /*4 No Avvy in bed. */ - - grab(206, 42,279, 75,150, 91,ch_ega,false,false); /*5 Open trunk. */ - grab(206, 42,287, 75,150, 91,ch_bgi,true,  true); /*6 Shut trunk. */ - - grab( 69, 70,102, 88,431,100,ch_ega,false,false); /*7 Arkata 1. */ - grab(118, 70,151, 88,431,100,ch_ega,false,false); /*8 Arkata 2. */ - grab(167, 70,200, 88,431,100,ch_ega,false,false); /*9 Arkata 3. */ - close_chunk(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	loadtemp(); +	setwritemode(xorput); + +	num_chunks = 9; + +	open_chunk(); + +	grab(48, 42, 94, 66, 400, 105, ch_ega, true, false); /*1 Avvy asleep. */ +	grab(100, 42, 146, 66, 400, 105, ch_ega, true, false); /*2 Avvy asleep again. */ +	grab(152, 42, 198, 66, 400, 105, ch_ega, false, false); /*3 Avvy awake in bed. */ +	grab(106, 113, 152, 137, 400, 105, ch_bgi, true , true); /*4 No Avvy in bed. */ + +	grab(206, 42, 279, 75, 150, 91, ch_ega, false, false); /*5 Open trunk. */ +	grab(206, 42, 287, 75, 150, 91, ch_bgi, true,  true); /*6 Shut trunk. */ + +	grab(69, 70, 102, 88, 431, 100, ch_ega, false, false); /*7 Arkata 1. */ +	grab(118, 70, 151, 88, 431, 100, ch_ega, false, false); /*8 Arkata 2. */ +	grab(167, 70, 200, 88, 431, 100, ch_ega, false, false); /*9 Arkata 3. */ +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxf6.cpp b/engines/avalanche/chunkxf6.cpp index b2c6cf4b02..b02a9d2e24 100644 --- a/engines/avalanche/chunkxf6.cpp +++ b/engines/avalanche/chunkxf6.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 @@ -31,248 +31,297 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer arraysize = 12000;  const integer x_ofs = 165;  const integer y_ofs = 58; -array<1,30,longint> offsets; -byte num_chunks,this_chunk; -integer gd,gm; +array<1, 30, longint> offsets; +byte num_chunks, this_chunk; +integer gd, gm;  untyped_file f; -array<0,arraysize,byte> aa; - -void finder() -{ -    char r; integer x,y; -; - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +array<0, arraysize, byte> aa; + +void finder() { +	char r; +	integer x, y; +	; +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void load() -{ - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - - assign(f,"v:place19.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); - setvisualpage(1); setactivepage(1); - finder(); - setvisualpage(0); setactivepage(0); +void load() { +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "v:place19.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); +	setvisualpage(1); +	setactivepage(1); +	finder(); +	setvisualpage(0); +	setactivepage(0);  } -void loadtemp() -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; -; - - assign(f,"d:temp1.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - - bit=getpixel(0,0); - -/* finder;*/ +void loadtemp() { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "d:temp1.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); + +	bit = getpixel(0, 0); + +	/* finder;*/  } -void open_chunk() -{; - assign(f,"chunk19.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	; +	assign(f, "chunk19.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{; - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	; +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; -; - if (size>arraysize)  - {; -  restorecrtmode(); -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  {; -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; +	; +	if (size > arraysize) { +		; +		restorecrtmode(); +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			; +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; -; - x1 -= x_ofs; x2 -= x_ofs; - y1 -= y_ofs; y2 -= y_ofs; -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - {; -  ch.flavour=flav; -  ch.x=realx; ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - setvisualpage(1); - setactivepage(1); -/* readln;*/ - putimage(ch.x,ch.y,p,0); - - if (flav==ch_ega)  - {; -  freemem(p,s); -  s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1); -  {; -   ch.size=s; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl / 8)+2; -   mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); -  } - } else -             /* For BGI pictures. */ -  {; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -  } - -/* readln;*/ - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - switch (flav) { -  case ch_ega : if (! nat)  blockwrite(f,aa,s); break; -  case ch_bgi : {; -            if (! nat)  blockwrite(f,p,s); -            freemem(p,s); -           } -           break; - } -/* rectangle(x1,y1,x2,y2);*/ +	word s; +	pointer p; +	chunkblocktype ch; +	; +	x1 -= x_ofs; +	x2 -= x_ofs; +	y1 -= y_ofs; +	y2 -= y_ofs; +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		; +		ch.flavour = flav; +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	setvisualpage(1); +	setactivepage(1); +	/* readln;*/ +	putimage(ch.x, ch.y, p, 0); + +	if (flav == ch_ega) { +		; +		freemem(p, s); +		s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1); +		{ +			; +			ch.size = s; +			ch.x = ch.x / 8; +			ch.xl = (ch.xl / 8) + 2; +			mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +		} +	} else +		/* For BGI pictures. */ +	{ +		; +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +	} + +	/* readln;*/ +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	switch (flav) { +	case ch_ega : +		if (! nat)  blockwrite(f, aa, s); +		break; +	case ch_bgi : { +		; +		if (! nat)  blockwrite(f, p, s); +		freemem(p, s); +	} +	break; +	} +	/* rectangle(x1,y1,x2,y2);*/  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - loadtemp(); - setwritemode(xorput); - - num_chunks=13; - - open_chunk(); - - grab(165, 68,207, 87,127,105,ch_ega,false,false); /*1 The settle with no lute*/ - grab(209, 68,255, 96,159, 84,ch_bgi, true, true); /*2 Dogfood looks right. */ - grab(209, 68,255, 96,159, 84,ch_ega, true,false); /*3 Dogfood- straight ahead. */ - grab(257, 68,303, 96,159, 84,ch_ega, true,false); /*4 Dogfood- left. */ - grab(305, 68,351, 96,159, 84,ch_ega, true,false); /*5 DF drinks: stage 1. */ - grab(353, 68,399, 96,159, 84,ch_ega, true,false); /*6 DF drinks: stage 2. */ - grab(401, 68,447, 96,159, 84,ch_ega, true,false); /*7 DF drinks: stage 3. */ - grab(449, 84,465, 94,392, 87,ch_ega, true,false); /*8 Ibythneth smiles. */ - grab(449, 75,488, 82,341,123,ch_ega, true,false); /*9 No habit under the settle. */ - grab(508, 68,580,106,485,105,ch_ega, true,false); /*10 M gets your drink. */ - grab(508, 68,580,106,485,105,ch_bgi, true, true); /*11 M gets up again. */ - grab(470, 84,486, 91,510,108,ch_ega, true,false); /*12 M looks right. */ - grab(488, 84,504, 91,510,108,ch_ega, true,false); /*13 M winks. */ - close_chunk(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	loadtemp(); +	setwritemode(xorput); + +	num_chunks = 13; + +	open_chunk(); + +	grab(165, 68, 207, 87, 127, 105, ch_ega, false, false); /*1 The settle with no lute*/ +	grab(209, 68, 255, 96, 159, 84, ch_bgi, true, true); /*2 Dogfood looks right. */ +	grab(209, 68, 255, 96, 159, 84, ch_ega, true, false); /*3 Dogfood- straight ahead. */ +	grab(257, 68, 303, 96, 159, 84, ch_ega, true, false); /*4 Dogfood- left. */ +	grab(305, 68, 351, 96, 159, 84, ch_ega, true, false); /*5 DF drinks: stage 1. */ +	grab(353, 68, 399, 96, 159, 84, ch_ega, true, false); /*6 DF drinks: stage 2. */ +	grab(401, 68, 447, 96, 159, 84, ch_ega, true, false); /*7 DF drinks: stage 3. */ +	grab(449, 84, 465, 94, 392, 87, ch_ega, true, false); /*8 Ibythneth smiles. */ +	grab(449, 75, 488, 82, 341, 123, ch_ega, true, false); /*9 No habit under the settle. */ +	grab(508, 68, 580, 106, 485, 105, ch_ega, true, false); /*10 M gets your drink. */ +	grab(508, 68, 580, 106, 485, 105, ch_bgi, true, true); /*11 M gets up again. */ +	grab(470, 84, 486, 91, 510, 108, ch_ega, true, false); /*12 M looks right. */ +	grab(488, 84, 504, 91, 510, 108, ch_ega, true, false); /*13 M winks. */ +	close_chunk(); +	return EXIT_SUCCESS;  } diff --git a/engines/avalanche/chunkxf7.cpp b/engines/avalanche/chunkxf7.cpp index c1f189b2ce..6137bc3056 100644 --- a/engines/avalanche/chunkxf7.cpp +++ b/engines/avalanche/chunkxf7.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 @@ -31,233 +31,280 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer arraysize = 12000; -array<1,30,longint> offsets; -byte num_chunks,this_chunk; -integer gd,gm; +array<1, 30, longint> offsets; +byte num_chunks, this_chunk; +integer gd, gm;  untyped_file f; -array<0,arraysize,byte> aa; - -void finder() -{ -    char r; integer x,y; -; - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +array<0, arraysize, byte> aa; + +void finder() { +	char r; +	integer x, y; +	; +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void load() -{ - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - - assign(f,"place25.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); - setvisualpage(1); setactivepage(1); - finder(); - setvisualpage(0); setactivepage(0); +void load() { +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "place25.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); +	setvisualpage(1); +	setactivepage(1); +	finder(); +	setvisualpage(0); +	setactivepage(0);  } -void loadtemp() -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; -; - - assign(f,"chunkbi3.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - - bit=getpixel(0,0); - - finder(); +void loadtemp() { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "chunkbi3.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); + +	bit = getpixel(0, 0); + +	finder();  } -void open_chunk() -{; - assign(f,"chunk25.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	; +	assign(f, "chunk25.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{; - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	; +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; -; - if (size>arraysize)  - {; -  restorecrtmode(); -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  {; -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; +	; +	if (size > arraysize) { +		; +		restorecrtmode(); +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			; +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; -; -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - {; -  ch.flavour=flav; -  ch.x=realx; ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - setvisualpage(1); - setactivepage(1); - input >> NL; - putimage(ch.x,ch.y,p,0); - - if (flav==ch_ega)  - {; -  freemem(p,s); -  s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1); -  {; -   ch.size=s; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl / 8)+2; -   mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); -  } - } else -             /* For BGI pictures. */ -  {; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -  } - - input >> NL; - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - switch (flav) { -  case ch_ega : if (! nat)  blockwrite(f,aa,s); break; -  case ch_bgi : {; -            if (! nat)  blockwrite(f,p,s); -            freemem(p,s); -           } -           break; - } -/* rectangle(x1,y1,x2,y2);*/ +	word s; +	pointer p; +	chunkblocktype ch; +	; +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		; +		ch.flavour = flav; +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	setvisualpage(1); +	setactivepage(1); +	input >> NL; +	putimage(ch.x, ch.y, p, 0); + +	if (flav == ch_ega) { +		; +		freemem(p, s); +		s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1); +		{ +			; +			ch.size = s; +			ch.x = ch.x / 8; +			ch.xl = (ch.xl / 8) + 2; +			mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +		} +	} else +		/* For BGI pictures. */ +	{ +		; +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +	} + +	input >> NL; +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	switch (flav) { +	case ch_ega : +		if (! nat)  blockwrite(f, aa, s); +		break; +	case ch_bgi : { +		; +		if (! nat)  blockwrite(f, p, s); +		freemem(p, s); +	} +	break; +	} +	/* rectangle(x1,y1,x2,y2);*/  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - loadtemp(); - setwritemode(xorput); - - num_chunks=3; - - open_chunk(); - - grab( 16, 24,101, 45,448,116,ch_ega, true,false); /*2 The fire again. */ - grab(118, 20,203, 45,448,112,ch_bgi, true, true); /*1 The natural fire. */ - grab(118, 20,203, 45,448,112,ch_ega, true,false); /*3 Third stage of the fire. */ - close_chunk(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	loadtemp(); +	setwritemode(xorput); + +	num_chunks = 3; + +	open_chunk(); + +	grab(16, 24, 101, 45, 448, 116, ch_ega, true, false); /*2 The fire again. */ +	grab(118, 20, 203, 45, 448, 112, ch_bgi, true, true); /*1 The natural fire. */ +	grab(118, 20, 203, 45, 448, 112, ch_ega, true, false); /*3 Third stage of the fire. */ +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxf8.cpp b/engines/avalanche/chunkxf8.cpp index 97b9502dc3..a3a8b14b3e 100644 --- a/engines/avalanche/chunkxf8.cpp +++ b/engines/avalanche/chunkxf8.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 @@ -31,240 +31,287 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer arraysize = 12000; -array<1,30,longint> offsets; -byte num_chunks,this_chunk; -integer gd,gm; +array<1, 30, longint> offsets; +byte num_chunks, this_chunk; +integer gd, gm;  untyped_file f; -array<0,arraysize,byte> aa; - -void finder() -{ -    char r; integer x,y; -; - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +array<0, arraysize, byte> aa; + +void finder() { +	char r; +	integer x, y; +	; +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void load() -{ - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - - assign(f,"place23.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); - setvisualpage(1); setactivepage(1); - finder(); - setvisualpage(0); setactivepage(0); +void load() { +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "place23.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); +	setvisualpage(1); +	setactivepage(1); +	finder(); +	setvisualpage(0); +	setactivepage(0);  } -void loadtemp(string x) -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; -; - - assign(f,x); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - - bit=getpixel(0,0); - - finder(); +void loadtemp(string x) { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, x); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); + +	bit = getpixel(0, 0); + +	finder();  } -void open_chunk() -{; - assign(f,"chunk23.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	; +	assign(f, "chunk23.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{; - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	; +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; -; - if (size>arraysize)  - {; -  restorecrtmode(); -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  {; -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; +	; +	if (size > arraysize) { +		; +		restorecrtmode(); +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			; +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; -; -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - {; -  ch.flavour=flav; -  ch.x=realx; ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - setvisualpage(1); - setactivepage(1); - input >> NL; - putimage(ch.x,ch.y,p,0); - - if (flav==ch_ega)  - {; -  freemem(p,s); -  s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1); -  {; -   ch.size=s; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl / 8)+2; -   mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); -  } - } else -             /* For BGI pictures. */ -  {; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -  } - - input >> NL; - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - switch (flav) { -  case ch_ega : if (! nat)  blockwrite(f,aa,s); break; -  case ch_bgi : {; -            if (! nat)  blockwrite(f,p,s); -            freemem(p,s); -           } -           break; - } -/* rectangle(x1,y1,x2,y2);*/ +	word s; +	pointer p; +	chunkblocktype ch; +	; +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		; +		ch.flavour = flav; +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	setvisualpage(1); +	setactivepage(1); +	input >> NL; +	putimage(ch.x, ch.y, p, 0); + +	if (flav == ch_ega) { +		; +		freemem(p, s); +		s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1); +		{ +			; +			ch.size = s; +			ch.x = ch.x / 8; +			ch.xl = (ch.xl / 8) + 2; +			mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +		} +	} else +		/* For BGI pictures. */ +	{ +		; +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +	} + +	input >> NL; +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	switch (flav) { +	case ch_ega : +		if (! nat)  blockwrite(f, aa, s); +		break; +	case ch_bgi : { +		; +		if (! nat)  blockwrite(f, p, s); +		freemem(p, s); +	} +	break; +	} +	/* rectangle(x1,y1,x2,y2);*/  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - loadtemp("chunkbi3.avd"); - setwritemode(xorput); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	loadtemp("chunkbi3.avd"); +	setwritemode(xorput); - num_chunks=6; +	num_chunks = 6; - open_chunk(); +	open_chunk(); - grab(226, 21,242, 29,348, 96,ch_bgi, true,true ); /*1 Looking forwards. */ - grab(226, 21,242, 29,348, 96,ch_ega, true,false); /*2 Looking left. */ - grab(253, 21,269, 29,348, 96,ch_ega, true,false); /*3 Looking right. */ - grab(240, 11,256, 19,348, 96,ch_ega, true,false); /*4 Blinking. */ +	grab(226, 21, 242, 29, 348, 96, ch_bgi, true, true); /*1 Looking forwards. */ +	grab(226, 21, 242, 29, 348, 96, ch_ega, true, false); /*2 Looking left. */ +	grab(253, 21, 269, 29, 348, 96, ch_ega, true, false); /*3 Looking right. */ +	grab(240, 11, 256, 19, 348, 96, ch_ega, true, false); /*4 Blinking. */ - loadtemp("chunkbi4.avd"); +	loadtemp("chunkbi4.avd"); - grab( 48, 83,110,126,324, 96,ch_ega,false,false); /*5 Eyes shut... */ - grab(112, 83,173,126,325, 96,ch_ega,false,false); /*6 Asleep. */ +	grab(48, 83, 110, 126, 324, 96, ch_ega, false, false); /*5 Eyes shut... */ +	grab(112, 83, 173, 126, 325, 96, ch_ega, false, false); /*6 Asleep. */ - close_chunk(); -return EXIT_SUCCESS; +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxf9.cpp b/engines/avalanche/chunkxf9.cpp index ddf079c7af..dbd342ada2 100644 --- a/engines/avalanche/chunkxf9.cpp +++ b/engines/avalanche/chunkxf9.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 @@ -31,234 +31,281 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer arraysize = 12000; -array<1,30,longint> offsets; -byte num_chunks,this_chunk; -integer gd,gm; +array<1, 30, longint> offsets; +byte num_chunks, this_chunk; +integer gd, gm;  untyped_file f; -array<0,arraysize,byte> aa; - -void finder() -{ -    char r; integer x,y; -; - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +array<0, arraysize, byte> aa; + +void finder() { +	char r; +	integer x, y; +	; +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void load() -{ - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - - assign(f,"place42.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); - setvisualpage(1); setactivepage(1); - finder(); - setvisualpage(0); setactivepage(0); +void load() { +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "place42.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); +	setvisualpage(1); +	setactivepage(1); +	finder(); +	setvisualpage(0); +	setactivepage(0);  } -void loadtemp() -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; -; - - assign(f,"a:chunkbi3.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - - bit=getpixel(0,0); - - finder(); +void loadtemp() { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "a:chunkbi3.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); + +	bit = getpixel(0, 0); + +	finder();  } -void open_chunk() -{; - assign(f,"chunk42.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	; +	assign(f, "chunk42.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{; - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	; +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; -; - if (size>arraysize)  - {; -  restorecrtmode(); -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  {; -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; +	; +	if (size > arraysize) { +		; +		restorecrtmode(); +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			; +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; -; -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - {; -  ch.flavour=flav; -  ch.x=realx; ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - setvisualpage(1); - setactivepage(1); - input >> NL; - putimage(ch.x,ch.y,p,0); - - if (flav==ch_ega)  - {; -  freemem(p,s); -  s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1); -  {; -   ch.size=s; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl / 8)+2; -   mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); -  } - } else -             /* For BGI pictures. */ -  {; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -  } - - input >> NL; - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - switch (flav) { -  case ch_ega : if (! nat)  blockwrite(f,aa,s); break; -  case ch_bgi : {; -            if (! nat)  blockwrite(f,p,s); -            freemem(p,s); -           } -           break; - } -/* rectangle(x1,y1,x2,y2);*/ +	word s; +	pointer p; +	chunkblocktype ch; +	; +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		; +		ch.flavour = flav; +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	setvisualpage(1); +	setactivepage(1); +	input >> NL; +	putimage(ch.x, ch.y, p, 0); + +	if (flav == ch_ega) { +		; +		freemem(p, s); +		s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1); +		{ +			; +			ch.size = s; +			ch.x = ch.x / 8; +			ch.xl = (ch.xl / 8) + 2; +			mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +		} +	} else +		/* For BGI pictures. */ +	{ +		; +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +	} + +	input >> NL; +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	switch (flav) { +	case ch_ega : +		if (! nat)  blockwrite(f, aa, s); +		break; +	case ch_bgi : { +		; +		if (! nat)  blockwrite(f, p, s); +		freemem(p, s); +	} +	break; +	} +	/* rectangle(x1,y1,x2,y2);*/  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - loadtemp(); - setwritemode(xorput); - - num_chunks=4; - - open_chunk(); - - grab(276, 36,329, 73, 94, 97,ch_bgi, true,true ); /*1 Not tied to the tree.*/ - grab(276, 36,329, 73, 94, 97,ch_ega,false,false); /*2 Tied to the tree. */ - grab(182, 80,226, 88,311,132,ch_ega,false,false); /*3 Mushrooms have gone! */ - grab(253, 75,267, 82,114, 98,ch_ega,false,false); /*4 Avalot blinks. */ - close_chunk(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	loadtemp(); +	setwritemode(xorput); + +	num_chunks = 4; + +	open_chunk(); + +	grab(276, 36, 329, 73, 94, 97, ch_bgi, true, true); /*1 Not tied to the tree.*/ +	grab(276, 36, 329, 73, 94, 97, ch_ega, false, false); /*2 Tied to the tree. */ +	grab(182, 80, 226, 88, 311, 132, ch_ega, false, false); /*3 Mushrooms have gone! */ +	grab(253, 75, 267, 82, 114, 98, ch_ega, false, false); /*4 Avalot blinks. */ +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxfa.cpp b/engines/avalanche/chunkxfa.cpp index b2faafe4d5..622e6be2db 100644 --- a/engines/avalanche/chunkxfa.cpp +++ b/engines/avalanche/chunkxfa.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 @@ -31,237 +31,284 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer arraysize = 12000; -array<1,30,longint> offsets; -byte num_chunks,this_chunk; -integer gd,gm; +array<1, 30, longint> offsets; +byte num_chunks, this_chunk; +integer gd, gm;  untyped_file f; -array<0,arraysize,byte> aa; - -void finder() -{ -    char r; integer x,y; -;  - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +array<0, arraysize, byte> aa; + +void finder() { +	char r; +	integer x, y; +	; +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void load() -{ - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - - assign(f,"place7.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); - setvisualpage(1); setactivepage(1); -/* finder;*/ - setvisualpage(0); setactivepage(0); +void load() { +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "place7.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); +	setvisualpage(1); +	setactivepage(1); +	/* finder;*/ +	setvisualpage(0); +	setactivepage(0);  } -void loadtemp() -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; -; - - assign(f,"chunkbi3.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - - bit=getpixel(0,0); - -/* finder;*/ +void loadtemp() { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "chunkbi3.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); + +	bit = getpixel(0, 0); + +	/* finder;*/  } -void open_chunk() -{; - assign(f,"chunk7.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	; +	assign(f, "chunk7.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{; - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	; +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; -; - if (size>arraysize)  - {; -  restorecrtmode(); -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  {; -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; +	; +	if (size > arraysize) { +		; +		restorecrtmode(); +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			; +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; -; -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - {; -  ch.flavour=flav; -  ch.x=realx; ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - setvisualpage(1); - setactivepage(1); - input >> NL; - putimage(ch.x,ch.y,p,0); - - if (flav==ch_ega)  - {; -  freemem(p,s); -  s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1); -  {; -   ch.size=s; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl / 8)+2; -   mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); -  } - } else -             /* For BGI pictures. */ -  {; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -  } - - input >> NL; - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - switch (flav) { -  case ch_ega : if (! nat)  blockwrite(f,aa,s); break; -  case ch_bgi : {; -            if (! nat)  blockwrite(f,p,s); -            freemem(p,s); -           } -           break; - } -/* rectangle(x1,y1,x2,y2);*/ +	word s; +	pointer p; +	chunkblocktype ch; +	; +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		; +		ch.flavour = flav; +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	setvisualpage(1); +	setactivepage(1); +	input >> NL; +	putimage(ch.x, ch.y, p, 0); + +	if (flav == ch_ega) { +		; +		freemem(p, s); +		s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1); +		{ +			; +			ch.size = s; +			ch.x = ch.x / 8; +			ch.xl = (ch.xl / 8) + 2; +			mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +		} +	} else +		/* For BGI pictures. */ +	{ +		; +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +	} + +	input >> NL; +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	switch (flav) { +	case ch_ega : +		if (! nat)  blockwrite(f, aa, s); +		break; +	case ch_bgi : { +		; +		if (! nat)  blockwrite(f, p, s); +		freemem(p, s); +	} +	break; +	} +	/* rectangle(x1,y1,x2,y2);*/  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - loadtemp(); - setwritemode(xorput); - - num_chunks=7; - - open_chunk(); - - grab(220, 32,269, 62,370,115,ch_ega,false,false); /*1 Jacques awake... */ - grab(400, 12,450, 48,369,112,ch_ega,false,false); /*2 Jacques gone! */ - grab(116, 47,176, 98,393, 87,ch_ega,false,false); /*3 Jacques going... */ - grab(333, 31,393, 82,393, 87,ch_ega,false,false); /*4 The open door. */ - grab(396, 80,452,135, 39, 91,ch_ega,false,false); /*5 The left door opening. */ - grab(455, 80,510,135, 39, 91,ch_ega,false,false); /*6 The left door open. */ - grab(455, 80,510,135, 39, 91,ch_bgi,true ,true ); /*7 The left door shut. */ - close_chunk(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	loadtemp(); +	setwritemode(xorput); + +	num_chunks = 7; + +	open_chunk(); + +	grab(220, 32, 269, 62, 370, 115, ch_ega, false, false); /*1 Jacques awake... */ +	grab(400, 12, 450, 48, 369, 112, ch_ega, false, false); /*2 Jacques gone! */ +	grab(116, 47, 176, 98, 393, 87, ch_ega, false, false); /*3 Jacques going... */ +	grab(333, 31, 393, 82, 393, 87, ch_ega, false, false); /*4 The open door. */ +	grab(396, 80, 452, 135, 39, 91, ch_ega, false, false); /*5 The left door opening. */ +	grab(455, 80, 510, 135, 39, 91, ch_ega, false, false); /*6 The left door open. */ +	grab(455, 80, 510, 135, 39, 91, ch_bgi, true , true); /*7 The left door shut. */ +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxfb.cpp b/engines/avalanche/chunkxfb.cpp index 5249e6c6f5..820bd7816c 100644 --- a/engines/avalanche/chunkxfb.cpp +++ b/engines/avalanche/chunkxfb.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 @@ -31,235 +31,282 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer arraysize = 12000; -array<1,30,longint> offsets; -byte num_chunks,this_chunk; -integer gd,gm; +array<1, 30, longint> offsets; +byte num_chunks, this_chunk; +integer gd, gm;  untyped_file f; -array<0,arraysize,byte> aa; - -void finder() -{ -    char r; integer x,y; -;  - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +array<0, arraysize, byte> aa; + +void finder() { +	char r; +	integer x, y; +	; +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void load() -{ - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - - assign(f,"place71.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); - setvisualpage(1); setactivepage(1); - finder(); - setvisualpage(0); setactivepage(0); +void load() { +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "place71.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); +	setvisualpage(1); +	setactivepage(1); +	finder(); +	setvisualpage(0); +	setactivepage(0);  } -void loadtemp() -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; -; - - assign(f,"d:chunkbi2.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - - bit=getpixel(0,0); - - finder(); +void loadtemp() { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "d:chunkbi2.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); + +	bit = getpixel(0, 0); + +	finder();  } -void open_chunk() -{; - assign(f,"chunk71.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	; +	assign(f, "chunk71.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{; - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	; +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; -; - if (size>arraysize)  - {; -  restorecrtmode(); -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  {; -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; +	; +	if (size > arraysize) { +		; +		restorecrtmode(); +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			; +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; -; -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - {; -  ch.flavour=flav; -  ch.x=realx; ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - setvisualpage(1); - setactivepage(1); - input >> NL; - putimage(ch.x,ch.y,p,0); - - if (flav==ch_ega)  - {; -  freemem(p,s); -  s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1); -  {; -   ch.size=s; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl / 8)+2; -   mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); -  } - } else -             /* For BGI pictures. */ -  {; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -  } - - input >> NL; - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - switch (flav) { -  case ch_ega : if (! nat)  blockwrite(f,aa,s); break; -  case ch_bgi : {; -            if (! nat)  blockwrite(f,p,s); -            freemem(p,s); -           } -           break; - } -/* rectangle(x1,y1,x2,y2);*/ +	word s; +	pointer p; +	chunkblocktype ch; +	; +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		; +		ch.flavour = flav; +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	setvisualpage(1); +	setactivepage(1); +	input >> NL; +	putimage(ch.x, ch.y, p, 0); + +	if (flav == ch_ega) { +		; +		freemem(p, s); +		s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1); +		{ +			; +			ch.size = s; +			ch.x = ch.x / 8; +			ch.xl = (ch.xl / 8) + 2; +			mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +		} +	} else +		/* For BGI pictures. */ +	{ +		; +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +	} + +	input >> NL; +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	switch (flav) { +	case ch_ega : +		if (! nat)  blockwrite(f, aa, s); +		break; +	case ch_bgi : { +		; +		if (! nat)  blockwrite(f, p, s); +		freemem(p, s); +	} +	break; +	} +	/* rectangle(x1,y1,x2,y2);*/  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - loadtemp(); - setwritemode(xorput); - - num_chunks=5; - - open_chunk(); - - grab( 54, 57,124,116,188, 94,ch_ega,false,false); /*1 Door half-shut. */ - grab(144, 57,203,116,188, 94,ch_ega,false,false); /*2 Door shut. */ - grab(513, 92,572,151,188, 94,ch_ega,false,false); /*3 Door with arrow. */ - grab(610, 94,627,106,367,122,ch_ega,false,false); /*4 Holder with no pen. */ - grab( 54, 57,124,116,188, 94,ch_bgi,true ,true ); /*5 Door wide open. */ - close_chunk(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	loadtemp(); +	setwritemode(xorput); + +	num_chunks = 5; + +	open_chunk(); + +	grab(54, 57, 124, 116, 188, 94, ch_ega, false, false); /*1 Door half-shut. */ +	grab(144, 57, 203, 116, 188, 94, ch_ega, false, false); /*2 Door shut. */ +	grab(513, 92, 572, 151, 188, 94, ch_ega, false, false); /*3 Door with arrow. */ +	grab(610, 94, 627, 106, 367, 122, ch_ega, false, false); /*4 Holder with no pen. */ +	grab(54, 57, 124, 116, 188, 94, ch_bgi, true , true); /*5 Door wide open. */ +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxfc.cpp b/engines/avalanche/chunkxfc.cpp index 4c2e58b6ed..da5ffc531f 100644 --- a/engines/avalanche/chunkxfc.cpp +++ b/engines/avalanche/chunkxfc.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 @@ -31,233 +31,280 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer arraysize = 12000; -array<1,30,longint> offsets; -byte num_chunks,this_chunk; -integer gd,gm; +array<1, 30, longint> offsets; +byte num_chunks, this_chunk; +integer gd, gm;  untyped_file f; -array<0,arraysize,byte> aa; - -void finder() -{ -    char r; integer x,y; -;  - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +array<0, arraysize, byte> aa; + +void finder() { +	char r; +	integer x, y; +	; +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void load() -{ - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - - assign(f,"place2.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); - setvisualpage(1); setactivepage(1); - finder(); - setvisualpage(0); setactivepage(0); +void load() { +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "place2.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); +	setvisualpage(1); +	setactivepage(1); +	finder(); +	setvisualpage(0); +	setactivepage(0);  } -void loadtemp() -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; -; - - assign(f,"d:chunkbi2.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - - bit=getpixel(0,0); - - finder(); +void loadtemp() { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "d:chunkbi2.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); + +	bit = getpixel(0, 0); + +	finder();  } -void open_chunk() -{; - assign(f,"chunk2.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	; +	assign(f, "chunk2.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{; - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	; +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; -; - if (size>arraysize)  - {; -  restorecrtmode(); -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  {; -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; +	; +	if (size > arraysize) { +		; +		restorecrtmode(); +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			; +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; -; -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - {; -  ch.flavour=flav; -  ch.x=realx; ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - setvisualpage(1); - setactivepage(1); - input >> NL; - putimage(ch.x,ch.y,p,0); - - if (flav==ch_ega)  - {; -  freemem(p,s); -  s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1); -  {; -   ch.size=s; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl / 8)+2; -   mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); -  } - } else -             /* For BGI pictures. */ -  {; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -  } - - input >> NL; - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - switch (flav) { -  case ch_ega : if (! nat)  blockwrite(f,aa,s); break; -  case ch_bgi : {; -            if (! nat)  blockwrite(f,p,s); -            freemem(p,s); -           } -           break; - } -/* rectangle(x1,y1,x2,y2);*/ +	word s; +	pointer p; +	chunkblocktype ch; +	; +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		; +		ch.flavour = flav; +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	setvisualpage(1); +	setactivepage(1); +	input >> NL; +	putimage(ch.x, ch.y, p, 0); + +	if (flav == ch_ega) { +		; +		freemem(p, s); +		s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1); +		{ +			; +			ch.size = s; +			ch.x = ch.x / 8; +			ch.xl = (ch.xl / 8) + 2; +			mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +		} +	} else +		/* For BGI pictures. */ +	{ +		; +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +	} + +	input >> NL; +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	switch (flav) { +	case ch_ega : +		if (! nat)  blockwrite(f, aa, s); +		break; +	case ch_bgi : { +		; +		if (! nat)  blockwrite(f, p, s); +		freemem(p, s); +	} +	break; +	} +	/* rectangle(x1,y1,x2,y2);*/  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - loadtemp(); - setwritemode(xorput); - - num_chunks=3; - - open_chunk(); - - grab( 59, 15,166, 55,226, 86,ch_ega,false,false); /*1 Door half-shut. */ - grab(171, 15,278, 55,226, 86,ch_ega,false,false); /*2 Door half-open. */ - grab(283, 15,390, 55,226, 86,ch_ega,false,false); /*3 Door open. */ - close_chunk(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	loadtemp(); +	setwritemode(xorput); + +	num_chunks = 3; + +	open_chunk(); + +	grab(59, 15, 166, 55, 226, 86, ch_ega, false, false); /*1 Door half-shut. */ +	grab(171, 15, 278, 55, 226, 86, ch_ega, false, false); /*2 Door half-open. */ +	grab(283, 15, 390, 55, 226, 86, ch_ega, false, false); /*3 Door open. */ +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxfd.cpp b/engines/avalanche/chunkxfd.cpp index efc94acfee..11aa04c3d8 100644 --- a/engines/avalanche/chunkxfd.cpp +++ b/engines/avalanche/chunkxfd.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 @@ -31,233 +31,280 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer arraysize = 12000; -array<1,30,longint> offsets; -byte num_chunks,this_chunk; -integer gd,gm; +array<1, 30, longint> offsets; +byte num_chunks, this_chunk; +integer gd, gm;  untyped_file f; -array<0,arraysize,byte> aa; - -void finder() -{ -    char r; integer x,y; -;  - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +array<0, arraysize, byte> aa; + +void finder() { +	char r; +	integer x, y; +	; +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void load() -{ - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - - assign(f,"place15.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); - setvisualpage(1); setactivepage(1); - finder(); - setvisualpage(0); setactivepage(0); +void load() { +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "place15.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); +	setvisualpage(1); +	setactivepage(1); +	finder(); +	setvisualpage(0); +	setactivepage(0);  } -void loadtemp() -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; -; - - assign(f,"d:chunkbi3.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - - bit=getpixel(0,0); - - finder(); +void loadtemp() { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "d:chunkbi3.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); + +	bit = getpixel(0, 0); + +	finder();  } -void open_chunk() -{; - assign(f,"chunk15.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	; +	assign(f, "chunk15.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{; - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	; +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; -; - if (size>arraysize)  - {; -  restorecrtmode(); -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  {; -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; +	; +	if (size > arraysize) { +		; +		restorecrtmode(); +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			; +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; -; -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - {; -  ch.flavour=flav; -  ch.x=realx; ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - setvisualpage(1); - setactivepage(1); - input >> NL; - putimage(ch.x,ch.y,p,0); - - if (flav==ch_ega)  - {; -  freemem(p,s); -  s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1); -  {; -   ch.size=s; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl / 8)+2; -   mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); -  } - } else -             /* For BGI pictures. */ -  {; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -  } - - input >> NL; - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - switch (flav) { -  case ch_ega : if (! nat)  blockwrite(f,aa,s); break; -  case ch_bgi : {; -            if (! nat)  blockwrite(f,p,s); -            freemem(p,s); -           } -           break; - } -/* rectangle(x1,y1,x2,y2);*/ +	word s; +	pointer p; +	chunkblocktype ch; +	; +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		; +		ch.flavour = flav; +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	setvisualpage(1); +	setactivepage(1); +	input >> NL; +	putimage(ch.x, ch.y, p, 0); + +	if (flav == ch_ega) { +		; +		freemem(p, s); +		s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1); +		{ +			; +			ch.size = s; +			ch.x = ch.x / 8; +			ch.xl = (ch.xl / 8) + 2; +			mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +		} +	} else +		/* For BGI pictures. */ +	{ +		; +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +	} + +	input >> NL; +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	switch (flav) { +	case ch_ega : +		if (! nat)  blockwrite(f, aa, s); +		break; +	case ch_bgi : { +		; +		if (! nat)  blockwrite(f, p, s); +		freemem(p, s); +	} +	break; +	} +	/* rectangle(x1,y1,x2,y2);*/  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - loadtemp(); - setwritemode(xorput); - - num_chunks=3; - - open_chunk(); - - grab(535, 11,633, 74, 46, 97,ch_ega,false,false); /*1 Door half-open. */ - grab(539, 76,637,139, 46, 97,ch_ega,false,false); /*2 Door open. */ - grab(539, 76,637,139, 46, 97,ch_bgi,true ,true ); /*3 Door shut. */ - close_chunk(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	loadtemp(); +	setwritemode(xorput); + +	num_chunks = 3; + +	open_chunk(); + +	grab(535, 11, 633, 74, 46, 97, ch_ega, false, false); /*1 Door half-open. */ +	grab(539, 76, 637, 139, 46, 97, ch_ega, false, false); /*2 Door open. */ +	grab(539, 76, 637, 139, 46, 97, ch_bgi, true , true); /*3 Door shut. */ +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxfe.cpp b/engines/avalanche/chunkxfe.cpp index 16e4aa1d04..0b2757a7b4 100644 --- a/engines/avalanche/chunkxfe.cpp +++ b/engines/avalanche/chunkxfe.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 @@ -31,233 +31,280 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer arraysize = 12000; -array<1,30,longint> offsets; -byte num_chunks,this_chunk; -integer gd,gm; +array<1, 30, longint> offsets; +byte num_chunks, this_chunk; +integer gd, gm;  untyped_file f; -array<0,arraysize,byte> aa; - -void finder() -{ -    char r; integer x,y; -;  - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +array<0, arraysize, byte> aa; + +void finder() { +	char r; +	integer x, y; +	; +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void load() -{ - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - - assign(f,"place5.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); - setvisualpage(1); setactivepage(1); - finder(); - setvisualpage(0); setactivepage(0); +void load() { +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "place5.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); +	setvisualpage(1); +	setactivepage(1); +	finder(); +	setvisualpage(0); +	setactivepage(0);  } -void loadtemp() -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; -; - - assign(f,"chunkbi2.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - - bit=getpixel(0,0); - - finder(); +void loadtemp() { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "chunkbi2.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); + +	bit = getpixel(0, 0); + +	finder();  } -void open_chunk() -{; - assign(f,"chunk5.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	; +	assign(f, "chunk5.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{; - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	; +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; -; - if (size>arraysize)  - {; -  restorecrtmode(); -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  {; -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; +	; +	if (size > arraysize) { +		; +		restorecrtmode(); +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			; +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; -; -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - {; -  ch.flavour=flav; -  ch.x=realx; ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - setvisualpage(1); - setactivepage(1); - input >> NL; - putimage(ch.x,ch.y,p,0); - - if (flav==ch_ega)  - {; -  freemem(p,s); -  s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1); -  {; -   ch.size=s; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl / 8)+2; -   mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); -  } - } else -             /* For BGI pictures. */ -  {; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -  } - - input >> NL; - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - switch (flav) { -  case ch_ega : if (! nat)  blockwrite(f,aa,s); break; -  case ch_bgi : {; -            if (! nat)  blockwrite(f,p,s); -            freemem(p,s); -           } -           break; - } -/* rectangle(x1,y1,x2,y2);*/ +	word s; +	pointer p; +	chunkblocktype ch; +	; +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		; +		ch.flavour = flav; +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	setvisualpage(1); +	setactivepage(1); +	input >> NL; +	putimage(ch.x, ch.y, p, 0); + +	if (flav == ch_ega) { +		; +		freemem(p, s); +		s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1); +		{ +			; +			ch.size = s; +			ch.x = ch.x / 8; +			ch.xl = (ch.xl / 8) + 2; +			mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +		} +	} else +		/* For BGI pictures. */ +	{ +		; +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +	} + +	input >> NL; +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	switch (flav) { +	case ch_ega : +		if (! nat)  blockwrite(f, aa, s); +		break; +	case ch_bgi : { +		; +		if (! nat)  blockwrite(f, p, s); +		freemem(p, s); +	} +	break; +	} +	/* rectangle(x1,y1,x2,y2);*/  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - loadtemp(); - setwritemode(xorput); - - num_chunks=3; - - open_chunk(); - - grab(252, 57,375,132,501, 85,ch_ega,false,false); /*1 Door half-open. */ - grab(418, 15,553, 90,504, 85,ch_ega,false,false); /*2 Door open. */ - grab(252, 57,375,132,504, 85,ch_bgi,true ,true ); /*3 Door shut. */ - close_chunk(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	loadtemp(); +	setwritemode(xorput); + +	num_chunks = 3; + +	open_chunk(); + +	grab(252, 57, 375, 132, 501, 85, ch_ega, false, false); /*1 Door half-open. */ +	grab(418, 15, 553, 90, 504, 85, ch_ega, false, false); /*2 Door open. */ +	grab(252, 57, 375, 132, 504, 85, ch_bgi, true , true); /*3 Door shut. */ +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxff.cpp b/engines/avalanche/chunkxff.cpp index fa9224be0f..0ff578ba5e 100644 --- a/engines/avalanche/chunkxff.cpp +++ b/engines/avalanche/chunkxff.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 @@ -31,233 +31,280 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer arraysize = 12000; -array<1,30,longint> offsets; -byte num_chunks,this_chunk; -integer gd,gm; +array<1, 30, longint> offsets; +byte num_chunks, this_chunk; +integer gd, gm;  untyped_file f; -array<0,arraysize,byte> aa; - -void finder() -{ -    char r; integer x,y; -;  - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +array<0, arraysize, byte> aa; + +void finder() { +	char r; +	integer x, y; +	; +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void load() -{ - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - - assign(f,"place13.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); - setvisualpage(1); setactivepage(1); - finder(); - setvisualpage(0); setactivepage(0); +void load() { +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "place13.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); +	setvisualpage(1); +	setactivepage(1); +	finder(); +	setvisualpage(0); +	setactivepage(0);  } -void loadtemp() -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; -; - - assign(f,"chunkbi3.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - - bit=getpixel(0,0); - - finder(); +void loadtemp() { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "chunkbi3.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); + +	bit = getpixel(0, 0); + +	finder();  } -void open_chunk() -{; - assign(f,"chunk13.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	; +	assign(f, "chunk13.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{; - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	; +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; -; - if (size>arraysize)  - {; -  restorecrtmode(); -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  {; -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; +	; +	if (size > arraysize) { +		; +		restorecrtmode(); +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			; +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; -; -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - {; -  ch.flavour=flav; -  ch.x=realx; ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - setvisualpage(1); - setactivepage(1); - input >> NL; - putimage(ch.x,ch.y,p,0); - - if (flav==ch_ega)  - {; -  freemem(p,s); -  s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1); -  {; -   ch.size=s; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl / 8)+2; -   mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); -  } - } else -             /* For BGI pictures. */ -  {; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -  } - - input >> NL; - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - switch (flav) { -  case ch_ega : if (! nat)  blockwrite(f,aa,s); break; -  case ch_bgi : {; -            if (! nat)  blockwrite(f,p,s); -            freemem(p,s); -           } -           break; - } -/* rectangle(x1,y1,x2,y2);*/ +	word s; +	pointer p; +	chunkblocktype ch; +	; +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		; +		ch.flavour = flav; +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	setvisualpage(1); +	setactivepage(1); +	input >> NL; +	putimage(ch.x, ch.y, p, 0); + +	if (flav == ch_ega) { +		; +		freemem(p, s); +		s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1); +		{ +			; +			ch.size = s; +			ch.x = ch.x / 8; +			ch.xl = (ch.xl / 8) + 2; +			mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +		} +	} else +		/* For BGI pictures. */ +	{ +		; +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +	} + +	input >> NL; +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	switch (flav) { +	case ch_ega : +		if (! nat)  blockwrite(f, aa, s); +		break; +	case ch_bgi : { +		; +		if (! nat)  blockwrite(f, p, s); +		freemem(p, s); +	} +	break; +	} +	/* rectangle(x1,y1,x2,y2);*/  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - loadtemp(); - setwritemode(xorput); - - num_chunks=3; - - open_chunk(); - - grab(323, 84,393,123,266, 72,ch_ega,false,false); /*1 Door half-open. */ - grab(251, 84,321,123,266, 72,ch_ega,false,false); /*2 Door open. */ - grab(251, 84,321,123,266, 72,ch_bgi,true ,true ); /*3 Door shut. */ - close_chunk(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	loadtemp(); +	setwritemode(xorput); + +	num_chunks = 3; + +	open_chunk(); + +	grab(323, 84, 393, 123, 266, 72, ch_ega, false, false); /*1 Door half-open. */ +	grab(251, 84, 321, 123, 266, 72, ch_ega, false, false); /*2 Door open. */ +	grab(251, 84, 321, 123, 266, 72, ch_bgi, true , true); /*3 Door shut. */ +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxfg.cpp b/engines/avalanche/chunkxfg.cpp index cc43d7d933..ead50a6e9c 100644 --- a/engines/avalanche/chunkxfg.cpp +++ b/engines/avalanche/chunkxfg.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 @@ -31,233 +31,280 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer arraysize = 12000; -array<1,30,longint> offsets; -byte num_chunks,this_chunk; -integer gd,gm; +array<1, 30, longint> offsets; +byte num_chunks, this_chunk; +integer gd, gm;  untyped_file f; -array<0,arraysize,byte> aa; - -void finder() -{ -    char r; integer x,y; -;  - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +array<0, arraysize, byte> aa; + +void finder() { +	char r; +	integer x, y; +	; +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void load() -{ - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - - assign(f,"place16.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); - setvisualpage(1); setactivepage(1); - finder(); - setvisualpage(0); setactivepage(0); +void load() { +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "place16.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); +	setvisualpage(1); +	setactivepage(1); +	finder(); +	setvisualpage(0); +	setactivepage(0);  } -void loadtemp() -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; -; - - assign(f,"chunkbi3.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - - bit=getpixel(0,0); - - finder(); +void loadtemp() { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "chunkbi3.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); + +	bit = getpixel(0, 0); + +	finder();  } -void open_chunk() -{; - assign(f,"chunk16.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	; +	assign(f, "chunk16.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{; - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	; +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; -; - if (size>arraysize)  - {; -  restorecrtmode(); -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  {; -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; +	; +	if (size > arraysize) { +		; +		restorecrtmode(); +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			; +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; -; -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - {; -  ch.flavour=flav; -  ch.x=realx; ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - setvisualpage(1); - setactivepage(1); - input >> NL; - putimage(ch.x,ch.y,p,0); - - if (flav==ch_ega)  - {; -  freemem(p,s); -  s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1); -  {; -   ch.size=s; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl / 8)+2; -   mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); -  } - } else -             /* For BGI pictures. */ -  {; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -  } - - input >> NL; - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - switch (flav) { -  case ch_ega : if (! nat)  blockwrite(f,aa,s); break; -  case ch_bgi : {; -            if (! nat)  blockwrite(f,p,s); -            freemem(p,s); -           } -           break; - } -/* rectangle(x1,y1,x2,y2);*/ +	word s; +	pointer p; +	chunkblocktype ch; +	; +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		; +		ch.flavour = flav; +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	setvisualpage(1); +	setactivepage(1); +	input >> NL; +	putimage(ch.x, ch.y, p, 0); + +	if (flav == ch_ega) { +		; +		freemem(p, s); +		s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1); +		{ +			; +			ch.size = s; +			ch.x = ch.x / 8; +			ch.xl = (ch.xl / 8) + 2; +			mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +		} +	} else +		/* For BGI pictures. */ +	{ +		; +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +	} + +	input >> NL; +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	switch (flav) { +	case ch_ega : +		if (! nat)  blockwrite(f, aa, s); +		break; +	case ch_bgi : { +		; +		if (! nat)  blockwrite(f, p, s); +		freemem(p, s); +	} +	break; +	} +	/* rectangle(x1,y1,x2,y2);*/  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - loadtemp(); - setwritemode(xorput); - - num_chunks=3; - - open_chunk(); - - grab(336, 12,365, 28,187, 89,ch_ega,false,false); /*1 Ayles asleep frame 2. */ - grab(368, 12,397, 28,187, 89,ch_ega,false,false); /*2 Ayles awake. */ - grab(336, 12,365, 28,187, 89,ch_bgi,true ,true ); /*3 Ayles asleep frame 1. */ - close_chunk(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	loadtemp(); +	setwritemode(xorput); + +	num_chunks = 3; + +	open_chunk(); + +	grab(336, 12, 365, 28, 187, 89, ch_ega, false, false); /*1 Ayles asleep frame 2. */ +	grab(368, 12, 397, 28, 187, 89, ch_ega, false, false); /*2 Ayles awake. */ +	grab(336, 12, 365, 28, 187, 89, ch_bgi, true , true); /*3 Ayles asleep frame 1. */ +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxfh.cpp b/engines/avalanche/chunkxfh.cpp index 9ebdbfa614..6d8c0e8278 100644 --- a/engines/avalanche/chunkxfh.cpp +++ b/engines/avalanche/chunkxfh.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 @@ -31,234 +31,281 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer arraysize = 12000; -array<1,30,longint> offsets; -byte num_chunks,this_chunk; -integer gd,gm; +array<1, 30, longint> offsets; +byte num_chunks, this_chunk; +integer gd, gm;  untyped_file f; -array<0,arraysize,byte> aa; - -void finder() -{ -    char r; integer x,y; -;  - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +array<0, arraysize, byte> aa; + +void finder() { +	char r; +	integer x, y; +	; +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void load() -{ - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - - assign(f,"place46.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); - setvisualpage(1); setactivepage(1); - finder(); - setvisualpage(0); setactivepage(0); +void load() { +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "place46.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); +	setvisualpage(1); +	setactivepage(1); +	finder(); +	setvisualpage(0); +	setactivepage(0);  } -void loadtemp() -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; -; - - assign(f,"d:chunkbi4.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - - bit=getpixel(0,0); - - finder(); +void loadtemp() { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "d:chunkbi4.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); + +	bit = getpixel(0, 0); + +	finder();  } -void open_chunk() -{; - assign(f,"chunk46.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	; +	assign(f, "chunk46.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{; - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	; +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; -; - if (size>arraysize)  - {; -  restorecrtmode(); -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  {; -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; +	; +	if (size > arraysize) { +		; +		restorecrtmode(); +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			; +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; -; -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - {; -  ch.flavour=flav; -  ch.x=realx; ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - setvisualpage(1); - setactivepage(1); - input >> NL; - putimage(ch.x,ch.y,p,0); - - if (flav==ch_ega)  - {; -  freemem(p,s); -  s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1); -  {; -   ch.size=s; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl / 8)+2; -   mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); -  } - } else -             /* For BGI pictures. */ -  {; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -  } - - input >> NL; - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - switch (flav) { -  case ch_ega : if (! nat)  blockwrite(f,aa,s); break; -  case ch_bgi : {; -            if (! nat)  blockwrite(f,p,s); -            freemem(p,s); -           } -           break; - } -/* rectangle(x1,y1,x2,y2);*/ +	word s; +	pointer p; +	chunkblocktype ch; +	; +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		; +		ch.flavour = flav; +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	setvisualpage(1); +	setactivepage(1); +	input >> NL; +	putimage(ch.x, ch.y, p, 0); + +	if (flav == ch_ega) { +		; +		freemem(p, s); +		s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1); +		{ +			; +			ch.size = s; +			ch.x = ch.x / 8; +			ch.xl = (ch.xl / 8) + 2; +			mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +		} +	} else +		/* For BGI pictures. */ +	{ +		; +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +	} + +	input >> NL; +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	switch (flav) { +	case ch_ega : +		if (! nat)  blockwrite(f, aa, s); +		break; +	case ch_bgi : { +		; +		if (! nat)  blockwrite(f, p, s); +		freemem(p, s); +	} +	break; +	} +	/* rectangle(x1,y1,x2,y2);*/  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - loadtemp(); - setwritemode(xorput); - - num_chunks=4; - - open_chunk(); - - grab(136, 11,216, 49,288,104,ch_ega,false,false); /*1 Door opening, frame 1.*/ - grab( 45, 11,124, 49,289,104,ch_ega,false,false); /*2 Door opening, frame 2.*/ - grab(227, 11,306, 49,289,104,ch_ega,false,false); /*3 Door opening, frame 3.*/ - grab(227, 11,306, 49,289,104,ch_bgi,true ,true ); /*4 Natural frame. */ - close_chunk(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	loadtemp(); +	setwritemode(xorput); + +	num_chunks = 4; + +	open_chunk(); + +	grab(136, 11, 216, 49, 288, 104, ch_ega, false, false); /*1 Door opening, frame 1.*/ +	grab(45, 11, 124, 49, 289, 104, ch_ega, false, false); /*2 Door opening, frame 2.*/ +	grab(227, 11, 306, 49, 289, 104, ch_ega, false, false); /*3 Door opening, frame 3.*/ +	grab(227, 11, 306, 49, 289, 104, ch_bgi, true , true); /*4 Natural frame. */ +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxfi.cpp b/engines/avalanche/chunkxfi.cpp index 3dd81b2491..b28add0bb7 100644 --- a/engines/avalanche/chunkxfi.cpp +++ b/engines/avalanche/chunkxfi.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 @@ -31,243 +31,290 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer arraysize = 12000; -array<1,30,longint> offsets; -byte num_chunks,this_chunk; -integer gd,gm; +array<1, 30, longint> offsets; +byte num_chunks, this_chunk; +integer gd, gm;  untyped_file f; -array<0,arraysize,byte> aa; - -void finder() -{ -    char r; integer x,y; -;  - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +array<0, arraysize, byte> aa; + +void finder() { +	char r; +	integer x, y; +	; +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void load() -{ - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; -; - - assign(f,"place47.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); - setvisualpage(1); setactivepage(1); - finder(); - setvisualpage(0); setactivepage(0); +void load() { +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "place47.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); +	setvisualpage(1); +	setactivepage(1); +	finder(); +	setvisualpage(0); +	setactivepage(0);  } -void loadtemp() -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; -; - - assign(f,"chunkbi9.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - - bit=getpixel(0,0); - - finder(); +void loadtemp() { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; +	; + +	assign(f, "chunkbi9.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); + +	bit = getpixel(0, 0); + +	finder();  } -void open_chunk() -{; - assign(f,"chunk47.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	; +	assign(f, "chunk47.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{; - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	; +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; -; - if (size>arraysize)  - {; -  restorecrtmode(); -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  {; -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; +	; +	if (size > arraysize) { +		; +		restorecrtmode(); +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			; +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; -; -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - {; -  ch.flavour=flav; -  ch.x=realx; ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - setvisualpage(1); - setactivepage(1); - input >> NL; - - putimage(ch.x,ch.y,p,0); - - if (flav==ch_ega)  - {; -  freemem(p,s); -  s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1); -  {; -   ch.size=s; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl / 8)+2; -   mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); -  } - } else -             /* For BGI pictures. */ -  {; -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -  } - - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - switch (flav) { -  case ch_ega : if (! nat)  blockwrite(f,aa,s); break; -  case ch_bgi : {; -            if (! nat)  blockwrite(f,p,s); -            freemem(p,s); -           } -           break; - } -/* rectangle(x1,y1,x2,y2);*/ +	word s; +	pointer p; +	chunkblocktype ch; +	; +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		; +		ch.flavour = flav; +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	setvisualpage(1); +	setactivepage(1); +	input >> NL; + +	putimage(ch.x, ch.y, p, 0); + +	if (flav == ch_ega) { +		; +		freemem(p, s); +		s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1); +		{ +			; +			ch.size = s; +			ch.x = ch.x / 8; +			ch.xl = (ch.xl / 8) + 2; +			mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +		} +	} else +		/* For BGI pictures. */ +	{ +		; +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +	} + +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	switch (flav) { +	case ch_ega : +		if (! nat)  blockwrite(f, aa, s); +		break; +	case ch_bgi : { +		; +		if (! nat)  blockwrite(f, p, s); +		freemem(p, s); +	} +	break; +	} +	/* rectangle(x1,y1,x2,y2);*/  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - loadtemp(); - setwritemode(xorput); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	loadtemp(); +	setwritemode(xorput); - num_chunks=10; +	num_chunks = 10; - open_chunk(); +	open_chunk(); - grab(323, 35,340, 43,337, 93,ch_ega,true ,false); /*1 Port blinks */ - grab(323, 35,340, 43,337, 93,ch_bgi,true ,true ); /*2 Port normally */ - grab(421, 22,511, 71,474,101,ch_ega,false,false); /*3 Avalot & Spurge */ - grab(421, 22,511, 71,474,101,ch_bgi,true ,true ); /*4 Just Spurge. */ +	grab(323, 35, 340, 43, 337, 93, ch_ega, true , false); /*1 Port blinks */ +	grab(323, 35, 340, 43, 337, 93, ch_bgi, true , true); /*2 Port normally */ +	grab(421, 22, 511, 71, 474, 101, ch_ega, false, false); /*3 Avalot & Spurge */ +	grab(421, 22, 511, 71, 474, 101, ch_bgi, true , true); /*4 Just Spurge. */ - grab(524, 40,540, 47,337, 93,ch_ega,true ,false); /*5 Port L blinks */ - grab(524, 22,540, 29,337, 93,ch_ega,true ,false); /*6 Port L */ - grab(563, 40,579, 47,337, 93,ch_ega,true ,false); /*7 Port R blinks */ - grab(563, 22,579, 29,337, 93,ch_ega,true ,false); /*8 Port R */ +	grab(524, 40, 540, 47, 337, 93, ch_ega, true , false); /*5 Port L blinks */ +	grab(524, 22, 540, 29, 337, 93, ch_ega, true , false); /*6 Port L */ +	grab(563, 40, 579, 47, 337, 93, ch_ega, true , false); /*7 Port R blinks */ +	grab(563, 22, 579, 29, 337, 93, ch_ega, true , false); /*8 Port R */ - grab(307, 38,310, 38,493,104,ch_ega,true ,false); /*9 Spurge blinks */ - grab(307, 38,310, 38,493,104,ch_bgi,true ,true ); /*10 Spurge doesn't blink */ +	grab(307, 38, 310, 38, 493, 104, ch_ega, true , false); /*9 Spurge blinks */ +	grab(307, 38, 310, 38, 493, 104, ch_bgi, true , true); /*10 Spurge doesn't blink */ - close_chunk(); -return EXIT_SUCCESS; +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxfj.cpp b/engines/avalanche/chunkxfj.cpp index 4c37792546..83c379d926 100644 --- a/engines/avalanche/chunkxfj.cpp +++ b/engines/avalanche/chunkxfj.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 @@ -31,234 +31,268 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer arraysize = 12000; -array<1,30,longint> offsets; -byte num_chunks,this_chunk; -integer gd,gm; +array<1, 30, longint> offsets; +byte num_chunks, this_chunk; +integer gd, gm;  untyped_file f; -array<0,arraysize,byte> aa; - -void finder() -{ -    char r; integer x,y; - - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +array<0, arraysize, byte> aa; + +void finder() { +	char r; +	integer x, y; + +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void load() -{ - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; - - - assign(f,"place20.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); - setvisualpage(1); setactivepage(1); - finder(); - setvisualpage(0); setactivepage(0); +void load() { +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; + + +	assign(f, "place20.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); +	setvisualpage(1); +	setactivepage(1); +	finder(); +	setvisualpage(0); +	setactivepage(0);  } -void loadtemp() -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; +void loadtemp() { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; - assign(f,"chunkbit.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); +	assign(f, "chunkbit.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); - bit=getpixel(0,0); +	bit = getpixel(0, 0); - finder(); +	finder();  } -void open_chunk() -{ - assign(f,"chunk20.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	assign(f, "chunk20.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{ - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; - - if (size>arraysize)  - { -  restorecrtmode(); -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  { -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; + +	if (size > arraysize) { +		restorecrtmode(); +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; - -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - { -  ch.flavour=flav; -  ch.x=realx; ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - setvisualpage(1); - setactivepage(1); - input >> NL; - putimage(ch.x,ch.y,p,0); - - if (flav==ch_ega)  - { -  freemem(p,s); -  s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1); -  { -   ch.size=s; -   ch.x=ch.x / 8; -   ch.xl=((realx-ch.x*8)+(x2-x1)+7) / 8; -   mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); -  } - } else -             /* For BGI pictures. */ -  { -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -  } - - input >> NL; - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - switch (flav) { -  case ch_ega : if (! nat)  blockwrite(f,aa,s); break; -  case ch_bgi : { -            if (! nat)  blockwrite(f,p,s); -            freemem(p,s); -           } -           break; - } -/* rectangle(x1,y1,x2,y2);*/ +	word s; +	pointer p; +	chunkblocktype ch; + +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		ch.flavour = flav; +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	setvisualpage(1); +	setactivepage(1); +	input >> NL; +	putimage(ch.x, ch.y, p, 0); + +	if (flav == ch_ega) { +		freemem(p, s); +		s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1); +		{ +			ch.size = s; +			ch.x = ch.x / 8; +			ch.xl = ((realx - ch.x * 8) + (x2 - x1) + 7) / 8; +			mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +		} +	} else +		/* For BGI pictures. */ +	{ +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +	} + +	input >> NL; +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	switch (flav) { +	case ch_ega : +		if (! nat)  blockwrite(f, aa, s); +		break; +	case ch_bgi : { +		if (! nat)  blockwrite(f, p, s); +		freemem(p, s); +	} +	break; +	} +	/* rectangle(x1,y1,x2,y2);*/  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - loadtemp(); - setwritemode(xorput); - - num_chunks=4; - - open_chunk(); - - grab( 57, 11, 72, 18,399, 13,ch_ega,true ,false); /* 1 - all numbers are */ - grab( 57, 21, 72, 28,399, 13,ch_ega,true ,false); /* 2     flags. */ - grab( 56, 31, 71, 38,399, 13,ch_ega,true ,false); /* 3 */ - grab( 56, 31, 71, 38,399, 13,ch_bgi,true ,true ); /* 4, the natural one. */ - close_chunk(); - return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	loadtemp(); +	setwritemode(xorput); + +	num_chunks = 4; + +	open_chunk(); + +	grab(57, 11, 72, 18, 399, 13, ch_ega, true , false); /* 1 - all numbers are */ +	grab(57, 21, 72, 28, 399, 13, ch_ega, true , false); /* 2     flags. */ +	grab(56, 31, 71, 38, 399, 13, ch_ega, true , false); /* 3 */ +	grab(56, 31, 71, 38, 399, 13, ch_bgi, true , true); /* 4, the natural one. */ +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxfk.cpp b/engines/avalanche/chunkxfk.cpp index 505c4fd8c2..5779d27b41 100644 --- a/engines/avalanche/chunkxfk.cpp +++ b/engines/avalanche/chunkxfk.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 @@ -31,234 +31,268 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; -                  boolean natural; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size; +	boolean natural; -                  boolean memorise; /* Hold it in memory? */ +	boolean memorise; /* Hold it in memory? */  }; -const array<1,44,char> chunkheader =  -string("Chunk-type AVD file, for an Avvy game.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Chunk-type AVD file, for an Avvy game.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer arraysize = 12000; -array<1,30,longint> offsets; -byte num_chunks,this_chunk; -integer gd,gm; +array<1, 30, longint> offsets; +byte num_chunks, this_chunk; +integer gd, gm;  untyped_file f; -array<0,arraysize,byte> aa; - -void finder() -{ -    char r; integer x,y; - - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +array<0, arraysize, byte> aa; + +void finder() { +	char r; +	integer x, y; + +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void load() -{ - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; - - - assign(f,"place50.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); - setvisualpage(1); setactivepage(1); - finder(); - setvisualpage(0); setactivepage(0); +void load() { +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; + + +	assign(f, "place50.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); +	setvisualpage(1); +	setactivepage(1); +	finder(); +	setvisualpage(0); +	setactivepage(0);  } -void loadtemp() -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; +void loadtemp() { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; - assign(f,"chunkbi4.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); +	assign(f, "chunkbi4.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); - bit=getpixel(0,0); +	bit = getpixel(0, 0); - finder(); +	finder();  } -void open_chunk() -{ - assign(f,"chunk50.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	assign(f, "chunk50.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{ - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -void mgrab(integer x1,integer y1,integer x2,integer y2, word size) -{ -    integer yy; word aapos; byte length,bit; - - if (size>arraysize)  - { -  restorecrtmode(); -  output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; -  output << " than " << size << '.' << NL; -  exit(0); - } - - aapos=0; - - length=x2-x1; - - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( yy=y1; yy <= y2; yy ++) -  { -   move(mem[0xa400*yy*80+x1],aa[aapos],length); -   aapos += length; -  } - } - bit=getpixel(0,0); +void mgrab(integer x1, integer y1, integer x2, integer y2, word size) { +	integer yy; +	word aapos; +	byte length, bit; + +	if (size > arraysize) { +		restorecrtmode(); +		output << "*** SORRY! *** Increase the arraysize constant to be greater" << NL; +		output << " than " << size << '.' << NL; +		exit(0); +	} + +	aapos = 0; + +	length = x2 - x1; + +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (yy = y1; yy <= y2; yy ++) { +			move(mem[0xa400 * yy * 80 + x1], aa[aapos], length); +			aapos += length; +		} +	} +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2,integer realx,integer realy, flavourtype flav, - boolean mem,boolean nat) - /* yes, I *do* know how to spell "really"! */ +void grab(integer x1, integer y1, integer x2, integer y2, integer realx, integer realy, flavourtype flav, +          boolean mem, boolean nat) +/* yes, I *do* know how to spell "really"! */  { - word s; - pointer p; - chunkblocktype ch; - -/* rectangle(x1,y1,x2,y2); exit;*/ - this_chunk += 1; - offsets[this_chunk]=filepos(f); - - - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - - { -  ch.flavour=flav; -  ch.x=realx; ch.y=realy; - -  ch.xl=x2-x1; -  ch.yl=y2-y1; -  ch.size=s; -  ch.memorise=mem; -  ch.natural=nat; - } - - setvisualpage(1); - setactivepage(1); - input >> NL; - putimage(ch.x,ch.y,p,0); - - if (flav==ch_ega)  - { -  freemem(p,s); -  s=4*(((x2 / 8)-(x1 / 8))+2)*(y2-y1+1); -  { -   ch.size=s; -   ch.x=ch.x / 8; -   ch.xl=((realx-ch.x*8)+(x2-x1)+7) / 8; -   mgrab(ch.x,ch.y,ch.x+ch.xl,ch.y+ch.yl,s); -  } - } else -             /* For BGI pictures. */ -  { -   ch.x=ch.x / 8; -   ch.xl=(ch.xl+7) / 8; -   ch.size=imagesize(ch.x*8,ch.y,(ch.x+ch.xl)*8,ch.y+ch.yl); -  } - - input >> NL; - setvisualpage(0); - setactivepage(0); - - blockwrite(f,ch,sizeof(ch)); - - switch (flav) { -  case ch_ega : if (! nat)  blockwrite(f,aa,s); break; -  case ch_bgi : { -            if (! nat)  blockwrite(f,p,s); -            freemem(p,s); -           } -           break; - } -/* rectangle(x1,y1,x2,y2);*/ +	word s; +	pointer p; +	chunkblocktype ch; + +	/* rectangle(x1,y1,x2,y2); exit;*/ +	this_chunk += 1; +	offsets[this_chunk] = filepos(f); + + +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); + +	{ +		ch.flavour = flav; +		ch.x = realx; +		ch.y = realy; + +		ch.xl = x2 - x1; +		ch.yl = y2 - y1; +		ch.size = s; +		ch.memorise = mem; +		ch.natural = nat; +	} + +	setvisualpage(1); +	setactivepage(1); +	input >> NL; +	putimage(ch.x, ch.y, p, 0); + +	if (flav == ch_ega) { +		freemem(p, s); +		s = 4 * (((x2 / 8) - (x1 / 8)) + 2) * (y2 - y1 + 1); +		{ +			ch.size = s; +			ch.x = ch.x / 8; +			ch.xl = ((realx - ch.x * 8) + (x2 - x1) + 7) / 8; +			mgrab(ch.x, ch.y, ch.x + ch.xl, ch.y + ch.yl, s); +		} +	} else +		/* For BGI pictures. */ +	{ +		ch.x = ch.x / 8; +		ch.xl = (ch.xl + 7) / 8; +		ch.size = imagesize(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl); +	} + +	input >> NL; +	setvisualpage(0); +	setactivepage(0); + +	blockwrite(f, ch, sizeof(ch)); + +	switch (flav) { +	case ch_ega : +		if (! nat)  blockwrite(f, aa, s); +		break; +	case ch_bgi : { +		if (! nat)  blockwrite(f, p, s); +		freemem(p, s); +	} +	break; +	} +	/* rectangle(x1,y1,x2,y2);*/  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - loadtemp(); - setwritemode(xorput); - - num_chunks=4; - - open_chunk(); - - grab( 46, 53,107, 81,246, 88,ch_ega,false,false); /*1 - all numbers are */ - grab(115, 53,175, 81,248, 88,ch_ega,false,false); /*2     door stages. */ - grab(180, 53,241, 81,246, 88,ch_ega,false,false); /*3 */ - grab(180, 53,246, 84,246, 88,ch_bgi,true ,true ); /*4 */ - close_chunk(); - return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	loadtemp(); +	setwritemode(xorput); + +	num_chunks = 4; + +	open_chunk(); + +	grab(46, 53, 107, 81, 246, 88, ch_ega, false, false); /*1 - all numbers are */ +	grab(115, 53, 175, 81, 248, 88, ch_ega, false, false); /*2     door stages. */ +	grab(180, 53, 241, 81, 246, 88, ch_ega, false, false); /*3 */ +	grab(180, 53, 246, 84, 246, 88, ch_bgi, true , true); /*4 */ +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/chunkxfl.cpp b/engines/avalanche/chunkxfl.cpp index 4091890bef..935245002a 100644 --- a/engines/avalanche/chunkxfl.cpp +++ b/engines/avalanche/chunkxfl.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 @@ -32,123 +32,154 @@  namespace Avalanche { -void finder() -{ -    char r; integer x,y; - - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +void finder() { +	char r; +	integer x, y; + +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -void load() -{ - byte a1 /*absolute $A400:800*/; - byte bit; - untyped_file f; - - - assign(f,"place51.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a1,12080); - } - - close(f); - bit=getpixel(0,0); - setvisualpage(1); setactivepage(1); - finder(); - setvisualpage(0); setactivepage(0); +void load() { +	byte a1 /*absolute $A400:800*/; +	byte bit; +	untyped_file f; + + +	assign(f, "place51.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a1, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); +	setvisualpage(1); +	setactivepage(1); +	finder(); +	setvisualpage(0); +	setactivepage(0);  } -void loadtemp() -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; +void loadtemp() { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; - assign(f,"chunkbi4.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); +	assign(f, "chunkbi4.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); - bit=getpixel(0,0); +	bit = getpixel(0, 0); - finder(); +	finder();  } -void open_chunk() -{ - assign(f,"chunk51.avd"); - rewrite(f,1); - blockwrite(f,chunkheader,sizeof(chunkheader)); - blockwrite(f,num_chunks,1); - blockwrite(f,offsets,num_chunks*4); +void open_chunk() { +	assign(f, "chunk51.avd"); +	rewrite(f, 1); +	blockwrite(f, chunkheader, sizeof(chunkheader)); +	blockwrite(f, num_chunks, 1); +	blockwrite(f, offsets, num_chunks * 4); - this_chunk=0; +	this_chunk = 0;  } -void close_chunk() -{ - seek(f,45); - blockwrite(f,offsets,num_chunks*4); /* make sure they're right! */ - close(f); +void close_chunk() { +	seek(f, 45); +	blockwrite(f, offsets, num_chunks * 4); /* make sure they're right! */ +	close(f);  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); - loadtemp(); - setwritemode(xorput); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load(); +	loadtemp(); +	setwritemode(xorput); - num_chunks=9; +	num_chunks = 9; - open_chunk(); +	open_chunk(); - grab(346,119,404,154,539,116,ch_ega,true ,false); /*1 fire */ - grab(435,119,490,154,541,116,ch_ega,true ,false); /*2 fire */ - grab(435,119,490,154,541,116,ch_bgi,true ,true ); /*3 natural fire */ +	grab(346, 119, 404, 154, 539, 116, ch_ega, true , false); /*1 fire */ +	grab(435, 119, 490, 154, 541, 116, ch_ega, true , false); /*2 fire */ +	grab(435, 119, 490, 154, 541, 116, ch_bgi, true , true); /*3 natural fire */ - grab(300, 58,315, 68,258, 95,ch_ega,true ,false); /*6 Duck's head 2 */ - grab(246, 52,259, 62,258, 95,ch_ega,true ,false); /*5 Duck blinks 1 */ +	grab(300, 58, 315, 68, 258, 95, ch_ega, true , false); /*6 Duck's head 2 */ +	grab(246, 52, 259, 62, 258, 95, ch_ega, true , false); /*5 Duck blinks 1 */ - grab(300, 58,315, 68,258, 95,ch_bgi,true ,true ); /*4 Duck's head 1 */ - grab(262, 52,278, 62,257, 95,ch_ega,true ,false); /*7 Duck blinks 2 */ +	grab(300, 58, 315, 68, 258, 95, ch_bgi, true , true); /*4 Duck's head 1 */ +	grab(262, 52, 278, 62, 257, 95, ch_ega, true , false); /*7 Duck blinks 2 */ - grab(333, 58,347, 68,258, 95,ch_ega,true ,false); /*8 Duck's head 3 */ - grab(250, 63,265, 73,258, 95,ch_ega,true ,false); /*9 Duck blinks 3 */ +	grab(333, 58, 347, 68, 258, 95, ch_ega, true , false); /*8 Duck's head 3 */ +	grab(250, 63, 265, 73, 258, 95, ch_ega, true , false); /*9 Duck blinks 3 */ - close_chunk(); - return EXIT_SUCCESS; +	close_chunk(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/clock.cpp b/engines/avalanche/clock.cpp index fb05ad5497..3cec288819 100644 --- a/engines/avalanche/clock.cpp +++ b/engines/avalanche/clock.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 @@ -31,58 +31,71 @@  namespace Avalanche { -const integer xm = 511; const integer ym = 184; -integer gd,gm; -word oh,om,/*os,*/h,m,s,s1; char r; +const integer xm = 511; +const integer ym = 184; +integer gd, gm; +word oh, om,/*os,*/h, m, s, s1; +char r; -void hand(word ang,word length, byte colour) -{ -    arccoordstype a; -; - if (ang>900)  return; - setcolor(colour); - arc(xm,ym,449-ang,450-ang,length); - getarccoords(a); -           line(xm,ym,a.xend,a.yend); /* "With a do-line???!", Liz said */ +void hand(word ang, word length, byte colour) { +	arccoordstype a; +	; +	if (ang > 900)  return; +	setcolor(colour); +	arc(xm, ym, 449 - ang, 450 - ang, length); +	getarccoords(a); +	line(xm, ym, a.xend, a.yend); /* "With a do-line???!", Liz said */  } -void chime() -{ -    integer gd,gm,fv; -; - if (oh>177)  return; /* too high- must be first time around */ - fv=h / 30; if (fv==0)  fv=12; - for( gd=1; gd <= fv; gd ++) - {; -  for( gm=1; gm <= 3; gm ++) -  {; -   sound(140-gm*30); delay(50-gm*3); -  } -  nosound; if ((cardinal)gd!=oh)  delay(100); - } +void chime() { +	integer gd, gm, fv; +	; +	if (oh > 177)  return; /* too high- must be first time around */ +	fv = h / 30; +	if (fv == 0)  fv = 12; +	for (gd = 1; gd <= fv; gd ++) { +		; +		for (gm = 1; gm <= 3; gm ++) { +			; +			sound(140 - gm * 30); +			delay(50 - gm * 3); +		} +		nosound; +		if ((cardinal)gd != oh)  delay(100); +	}  } -void plothands() -{; - hand(oh,17,brown); - hand(h,17,yellow); - hand(om*6,20,brown); - hand(m*6,20,yellow); +void plothands() { +	; +	hand(oh, 17, brown); +	hand(h, 17, yellow); +	hand(om * 6, 20, brown); +	hand(m * 6, 20, yellow);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,""); - setfillstyle(1,6); bar(0,0,640,200); oh=17717; om=17717; - do { -  gettime(h,m,s,s1); -  h=(h % 12)*30+m / 2; -  if (oh!=h)  {; plothands(); chime(); } -  if (om!=m)  plothands(); -  oh=h; om=m; - } while (!false); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	setfillstyle(1, 6); +	bar(0, 0, 640, 200); +	oh = 17717; +	om = 17717; +	do { +		gettime(h, m, s, s1); +		h = (h % 12) * 30 + m / 2; +		if (oh != h)  { +			; +			plothands(); +			chime(); +		} +		if (om != m)  plothands(); +		oh = h; +		om = m; +	} while (!false); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/closing.cpp b/engines/avalanche/closing.cpp index bc3134b2e0..ddd31fc34b 100644 --- a/engines/avalanche/closing.cpp +++ b/engines/avalanche/closing.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 @@ -45,103 +45,123 @@  namespace Avalanche { -typedef array<1,3840,char> scrtype; +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 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 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 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 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. */ +	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; - } +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(); +public: +	unit_closing_initialize();  };  static unit_closing_initialize closing_constructor; -unit_closing_initialize::unit_closing_initialize() {; - exitsave=exitproc; - exitproc=&bug_handler; +unit_closing_initialize::unit_closing_initialize() { +	; +	exitsave = exitproc; +	exitproc = &bug_handler;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/closing.h b/engines/avalanche/closing.h index a4d539fe7b..3e63e36815 100644 --- a/engines/avalanche/closing.h +++ b/engines/avalanche/closing.h @@ -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 @@ -36,7 +36,7 @@ const integer scr_nagscreen = 3;  const integer scr_twocopies = 5; -void quit_with(byte which,byte errorlev); +void quit_with(byte which, byte errorlev);  void end_of_program(); diff --git a/engines/avalanche/convert.cpp b/engines/avalanche/convert.cpp index b8d986d73e..f7ae1ecf77 100644 --- a/engines/avalanche/convert.cpp +++ b/engines/avalanche/convert.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 @@ -29,79 +29,92 @@  namespace Avalanche { -integer gd,gm; -string fn1,fn2; +integer gd, gm; +string fn1, fn2;  varying_string<30> desc; -void loadscreen(string nam) -{ -    byte z; - array<1,4,pointer> a; - untyped_file f; word s; - string check; -; - assign(f,nam); - reset(f,1); - blockread(f,check,41); - blockread(f,check,13); - blockread(f,check,31); - s=imagesize(0,0,getmaxx(),75); - for( z=1; z <= 2; z ++) - {; -  getmem(a[z],s); -  blockread(f,a[z],s); -  setactivepage(0); -  putimage(0,15+(z-1)*75,a[z],0); -  freemem(a[z],s); - } - close(f); +void loadscreen(string nam) { +	byte z; +	array<1, 4, pointer> a; +	untyped_file f; +	word s; +	string check; +	; +	assign(f, nam); +	reset(f, 1); +	blockread(f, check, 41); +	blockread(f, check, 13); +	blockread(f, check, 31); +	s = imagesize(0, 0, getmaxx(), 75); +	for (z = 1; z <= 2; z ++) { +		; +		getmem(a[z], s); +		blockread(f, a[z], s); +		setactivepage(0); +		putimage(0, 15 + (z - 1) * 75, a[z], 0); +		freemem(a[z], s); +	} +	close(f);  } -void load2(string name) -{ - byte a /*absolute $A000:1200*/; - byte bit; - untyped_file f; -; - assign(f,name); reset(f,1); seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a,12080); - } - close(f); +void load2(string name) { +	byte a /*absolute $A000:1200*/; +	byte bit; +	untyped_file f; +	; +	assign(f, name); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a, 12080); +	} +	close(f);  } -void save2(string name) -{ -      const string header =  - string("This is a file from an Avvy game, and its contents are subject to ")+ - "copyright."+'\15'+'\12'+'\15'+'\12'+"Have fun!"+'\32'; - byte a /*absolute $A000:1200*/; - byte bit; - untyped_file f; -; - assign(f,name); rewrite(f,1); blockwrite(f,header[1],146); /* really 90 */ - blockwrite(f,desc,31); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockwrite(f,a,12080); - } - close(f); +void save2(string name) { +	const string header = +	    string("This is a file from an Avvy game, and its contents are subject to ") + +	    "copyright." + '\15' + '\12' + '\15' + '\12' + "Have fun!" + '\32'; +	byte a /*absolute $A000:1200*/; +	byte bit; +	untyped_file f; +	; +	assign(f, name); +	rewrite(f, 1); +	blockwrite(f, header[1], 146); /* really 90 */ +	blockwrite(f, desc, 31); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockwrite(f, a, 12080); +	} +	close(f);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - output << "Filename?"; input >> fn1 >> NL; - output << "New name?"; input >> fn2 >> NL; - output << "Describe?"; input >> desc >> NL; - gd=3; gm=0; initgraph(gd,gm,""); - loadscreen(fn1); - save2(fn2); - closegraph(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	output << "Filename?"; +	input >> fn1 >> NL; +	output << "New name?"; +	input >> fn2 >> NL; +	output << "Describe?"; +	input >> desc >> NL; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	loadscreen(fn1); +	save2(fn2); +	closegraph(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/convmous.cpp b/engines/avalanche/convmous.cpp index 97da69a4d3..6316b61c3d 100644 --- a/engines/avalanche/convmous.cpp +++ b/engines/avalanche/convmous.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 @@ -31,77 +31,106 @@  namespace Avalanche { -       /* ...gogogoch */struct cursor { -                          matrix<0,1,0,15,word> mask; -                          integer horzhotspot,verthotspot; -                        }; -typedef   /* ha ha */matrix<0,1,0,15,varying_string<16> > precursor; +/* ...gogogoch */struct cursor { +	matrix<0, 1, 0, 15, word> mask; +	integer horzhotspot, verthotspot; +}; +typedef   /* ha ha */matrix<0, 1, 0, 15, varying_string<16> > precursor; -const array<0,3,byte> colours = {{darkgray,blue,white,green}}; +const array<0, 3, byte> colours = {{darkgray, blue, white, green}};  cursor c_current;  boolean usepointer;  precursor cpc; -byte hhs,vhs; -string fn,desc; -integer gd,gm; +byte hhs, vhs; +string fn, desc; +integer gd, gm; -void recalc() -{ -    byte a,b; -; - {; -  for( a=0; a <= 1; a ++) -   for( b=0; b <= 15; b ++) -    c_current.mask[a][b]=bintoword(cpc[a][b]); -  c_current.horzhotspot=hhs; c_current.verthotspot=vhs; - } +void recalc() { +	byte a, b; +	; +	{ +		; +		for (a = 0; a <= 1; a ++) +			for (b = 0; b <= 15; b ++) +				c_current.mask[a][b] = bintoword(cpc[a][b]); +		c_current.horzhotspot = hhs; +		c_current.verthotspot = vhs; +	}  } -void load() -{ -    text t; string x; byte a,b; -; - assign(t,fn); - reset(t); - do { t >> x >> NL; } while (!(x=='|')); /* bypass junk */ - t >> desc >> NL; - for( a=0; a <= 1; a ++) -  for( b=0; b <= 15; b ++) -   t >> cpc[a][b] >> NL; - t >> hhs >> NL; t >> vhs >> NL; - close(t); recalc(); +void load() { +	text t; +	string x; +	byte a, b; +	; +	assign(t, fn); +	reset(t); +	do { +		t >> x >> NL; +	} while (!(x == '|')); /* bypass junk */ +	t >> desc >> NL; +	for (a = 0; a <= 1; a ++) +		for (b = 0; b <= 15; b ++) +			t >> cpc[a][b] >> NL; +	t >> hhs >> NL; +	t >> vhs >> NL; +	close(t); +	recalc();  } -void display() -{ - const integer o0 = ord('0'); const integer o1 = ord('1'); -    byte x,y,p1,p2; -; - for( y=0; y <= 15; y ++) - {; -  for( x=1; x <= 16; x ++) -  {; -   switch (ord(cpc[0][y][x])*2+ord(cpc[1][y][x])) { -    case o0*2+o0: {; p1= 0; p2= 0; } break; /* p1= silhouette, p2= real */ -    case o0*2+o1: {; p1= 0; p2=15; } break; -    case o1*2+o0: {; p1=15; p2= 0; } break; -    case o1*2+o1: {; p1= 9; p2= 9; } break; /* invalid- can't use this */ -   } -   putpixel(x-1,y,p1); putpixel(x+99,y,p2); -  } -  output << NL; - } +void display() { +	const integer o0 = ord('0'); +	const integer o1 = ord('1'); +	byte x, y, p1, p2; +	; +	for (y = 0; y <= 15; y ++) { +		; +		for (x = 1; x <= 16; x ++) { +			; +			switch (ord(cpc[0][y][x]) * 2 + ord(cpc[1][y][x])) { +			case o0*2+o0: { +				; +				p1 = 0; +				p2 = 0; +			} +			break; /* p1= silhouette, p2= real */ +			case o0*2+o1: { +				; +				p1 = 0; +				p2 = 15; +			} +			break; +			case o1*2+o0: { +				; +				p1 = 15; +				p2 = 0; +			} +			break; +			case o1*2+o1: { +				; +				p1 = 9; +				p2 = 9; +			} +			break; /* invalid- can't use this */ +			} +			putpixel(x - 1, y, p1); +			putpixel(x + 99, y, p2); +		} +		output << NL; +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=1; initgraph(gd,gm,""); - fn="d:screwdri.inc"; - load(); - display(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 1; +	initgraph(gd, gm, ""); +	fn = "d:screwdri.inc"; +	load(); +	display(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/credits.cpp b/engines/avalanche/credits.cpp index b3db08e392..377c34c7bf 100644 --- a/engines/avalanche/credits.cpp +++ b/engines/avalanche/credits.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 @@ -32,85 +32,98 @@  namespace Avalanche { -typedef matrix<'\0','\377',0,15,byte> fonttype; +typedef matrix < '\0', '\377', 0, 15, byte > fonttype; -integer gd,gm; +integer gd, gm;  text t; -array<1,2,fonttype> f; +array<1, 2, fonttype> f;  file<fonttype> ff; -array<1,80,byte> l; +array<1, 80, byte> l;  varying_string<80> x; -void do_one(byte z) -{ -  byte a /*absolute $A000:0*/; - byte aa /*absolute $A000:80*/; - byte az /*absolute $A000:27921*/; -; - a=getpixel(0,0); - move(l,az,z); +void do_one(byte z) { +	byte a /*absolute $A000:0*/; +	byte aa /*absolute $A000:80*/; +	byte az /*absolute $A000:27921*/; +	; +	a = getpixel(0, 0); +	move(l, az, z); - port[0x3c5]=8; port[0x3cf]=0; - move(aa,a,27920); +	port[0x3c5] = 8; +	port[0x3cf] = 0; +	move(aa, a, 27920);  } -void background() -{ -    byte y; -; - for( y=1; y <= 15; y ++) - {; -  setcolor(y); -  outtextxy(17,y*12,"Jesus is Lord!"); - } +void background() { +	byte y; +	; +	for (y = 1; y <= 15; y ++) { +		; +		setcolor(y); +		outtextxy(17, y * 12, "Jesus is Lord!"); +	}  } -void scroll(string z) -{ - byte x,y,lz; char c; -; - fillchar(l,80,'\0'); - if (z=="")  -  for( y=1; y <= 12; y ++) do_one(0); - c=z[1]; Delete(z,1,1); - lz=length(z); - switch (c) { -  case '*': for( y=0; y <= 15; y ++) -       {; -        for( x=1; x <= lz; x ++) -         l[x]=f[2][z[x]][y]; -        do_one(lz); -       } -       break; -  case '>': {; -         lz += 7; -        for( y=0; y <= 13; y ++) -        {; -         for( x=1; x <= lz; x ++) -          l[x+7]=f[1][z[x]][y]; -         do_one(lz); do_one(lz); /* double-height characters */ -        } -       } -       break; - } +void scroll(string z) { +	byte x, y, lz; +	char c; +	; +	fillchar(l, 80, '\0'); +	if (z == "") +		for (y = 1; y <= 12; y ++) do_one(0); +	c = z[1]; +	Delete(z, 1, 1); +	lz = length(z); +	switch (c) { +	case '*': +		for (y = 0; y <= 15; y ++) { +			; +			for (x = 1; x <= lz; x ++) +				l[x] = f[2][z[x]][y]; +			do_one(lz); +		} +		break; +	case '>': { +		; +		lz += 7; +		for (y = 0; y <= 13; y ++) { +			; +			for (x = 1; x <= lz; x ++) +				l[x + 7] = f[1][z[x]][y]; +			do_one(lz); +			do_one(lz); /* double-height characters */ +		} +	} +	break; +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=1; initgraph(gd,gm,""); - port[0x3c4]=2; port[0x3cf]=4; - assign(ff,"avalot.fnt"); reset(ff); ff >> f[1]; close(ff); - assign(ff,"avitalic.fnt"); reset(ff); ff >> f[2]; close(ff); - assign(t,"credits.txt"); reset(t); - background(); - for( gd=8; gd <= 15; gd ++) setpalette(gd,62); - do { -  t >> x >> NL; -  scroll(x); - } while (!(eof(t) || keypressed())); - close(t); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 1; +	initgraph(gd, gm, ""); +	port[0x3c4] = 2; +	port[0x3cf] = 4; +	assign(ff, "avalot.fnt"); +	reset(ff); +	ff >> f[1]; +	close(ff); +	assign(ff, "avitalic.fnt"); +	reset(ff); +	ff >> f[2]; +	close(ff); +	assign(t, "credits.txt"); +	reset(t); +	background(); +	for (gd = 8; gd <= 15; gd ++) setpalette(gd, 62); +	do { +		t >> x >> NL; +		scroll(x); +	} while (!(eof(t) || keypressed())); +	close(t); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/displtxt.cpp b/engines/avalanche/displtxt.cpp index 0db15d55c7..41ebe4434c 100644 --- a/engines/avalanche/displtxt.cpp +++ b/engines/avalanche/displtxt.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 @@ -31,31 +31,45 @@ namespace Avalanche {  const char fn[] = "text3.scr"; -typedef array<1,3840,char> atype; +typedef array<1, 3840, char> atype;  file<atype> f; -word fv,ff,fq,st; +word fv, ff, fq, st;  char r; -byte tl,bl; +byte tl, bl;  atype q;  atype a /*absolute $B800:0*/; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - textattr=0; clrscr; - assign(f,fn); reset(f); f >> q; close(f); - 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); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	textattr = 0; +	clrscr; +	assign(f, fn); +	reset(f); +	f >> q; +	close(f); +	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); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/dropdown.cpp b/engines/avalanche/dropdown.cpp index 5637401259..0f3d078f12 100644 --- a/engines/avalanche/dropdown.cpp +++ b/engines/avalanche/dropdown.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 @@ -71,76 +71,108 @@ const integer disabled = darkgray;  char r;  byte fv; -void find_what_you_can_do_with_it() -{; - switch (thinks) { -  case wine:case ink: verbstr=string(vb_exam)+vb_drink; break; -  case bell: verbstr=string(vb_exam)+vb_ring; break; -  case potion:case wine: verbstr=string(vb_exam)+vb_drink; break; -  case chastity: verbstr=string(vb_exam)+vb_wear; break; -  case lute: verbstr=string(vb_exam)+vb_play; break; -  case mushroom:case onion: verbstr=string(vb_exam)+vb_eat; break; -  case clothes: verbstr=string(vb_exam)+vb_wear; break; -  default: verbstr=vb_exam; /* anything else */ - } -} - -void chalk(integer x,integer y, char t, string z, boolean valid) -{ - byte fv,ff,p,bit; - word pageseg; - byte ander; -; - - pageseg=0xa000+cp*0x400; - - if (valid)  ander=255; else ander=170; - - for( fv=1; fv <= length(z); fv ++) -  for( ff=0; ff <= 7; ff ++) -   for( bit=0; bit <= 2; bit ++) -   {; -    port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -    mem[pageseg*x+fv-1+(y+ff)*80]=~ (little[z[fv]][ff] & ander); -   } - - for( ff=0; ff <= 8; ff ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << 3; port[0x3cf]=3; -  fillchar(mem[pageseg*x+(y+ff)*80],length(z),'\0'); /* blank it out. */ - } - - p=pos(t,z); if (p==0)  return; p -= 1; - - for( bit=0; bit <= 2; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  mem[pageseg*x+p+(y+8)*80]=~ ander; - } +void find_what_you_can_do_with_it() { +	; +	switch (thinks) { +	case wine: +	case ink: +		verbstr = string(vb_exam) + vb_drink; +		break; +	case bell: +		verbstr = string(vb_exam) + vb_ring; +		break; +	case potion: +	case wine: +		verbstr = string(vb_exam) + vb_drink; +		break; +	case chastity: +		verbstr = string(vb_exam) + vb_wear; +		break; +	case lute: +		verbstr = string(vb_exam) + vb_play; +		break; +	case mushroom: +	case onion: +		verbstr = string(vb_exam) + vb_eat; +		break; +	case clothes: +		verbstr = string(vb_exam) + vb_wear; +		break; +	default: +		verbstr = vb_exam; /* anything else */ +	} +} - blitfix(); +void chalk(integer x, integer y, char t, string z, boolean valid) { +	byte fv, ff, p, bit; +	word pageseg; +	byte ander; +	; + +	pageseg = 0xa000 + cp * 0x400; + +	if (valid)  ander = 255; +	else ander = 170; + +	for (fv = 1; fv <= length(z); fv ++) +		for (ff = 0; ff <= 7; ff ++) +			for (bit = 0; bit <= 2; bit ++) { +				; +				port[0x3c4] = 2; +				port[0x3ce] = 4; +				port[0x3c5] = 1 << bit; +				port[0x3cf] = bit; +				mem[pageseg * x + fv - 1 + (y + ff) * 80] = ~(little[z[fv]][ff] & ander); +			} + +	for (ff = 0; ff <= 8; ff ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << 3; +		port[0x3cf] = 3; +		fillchar(mem[pageseg * x + (y + ff) * 80], length(z), '\0'); /* blank it out. */ +	} + +	p = pos(t, z); +	if (p == 0)  return; +	p -= 1; + +	for (bit = 0; bit <= 2; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		mem[pageseg * x + p + (y + 8) * 80] = ~ ander; +	} + +	blitfix();  } -void hlchalk(integer x,integer y, char t, string z, boolean valid) - /* Highlighted. */ +void hlchalk(integer x, integer y, char t, string z, boolean valid) +/* Highlighted. */  { - byte fv,ff,p; - word pageseg; - byte ander; -; +	byte fv, ff, p; +	word pageseg; +	byte ander; +	; - pageseg=0xa000+cp*0x400; +	pageseg = 0xa000 + cp * 0x400; - if (valid)  ander=255; else ander=170; +	if (valid)  ander = 255; +	else ander = 170; - for( fv=1; fv <= length(z); fv ++) -  for( ff=0; ff <= 7; ff ++) -   mem[pageseg*x+fv-1+(y+ff)*80]=little[z[fv]][ff] & ander; +	for (fv = 1; fv <= length(z); fv ++) +		for (ff = 0; ff <= 7; ff ++) +			mem[pageseg * x + fv - 1 + (y + ff) * 80] = little[z[fv]][ff] & ander; - p=pos(t,z); if (p==0)  return; p -= 1; +	p = pos(t, z); +	if (p == 0)  return; +	p -= 1; - mem[pageseg*x+p+(y+8)*80]=ander; - blitfix(); +	mem[pageseg * x + p + (y + 8) * 80] = ander; +	blitfix();  }  /*procedure say(x,y:integer; t:char; z:string; f,b:byte); @@ -150,475 +182,539 @@ begin;   chalk(x,y,t,z);  end;*/ -void bleep() -{; - sound(177); delay(7); nosound; +void bleep() { +	; +	sound(177); +	delay(7); +	nosound;  } -void onemenu::start_afresh() -{; - number=0; width=0; firstlix=false; oldy=0; highlightnum=0; +void onemenu::start_afresh() { +	; +	number = 0; +	width = 0; +	firstlix = false; +	oldy = 0; +	highlightnum = 0;  } -onemenu* onemenu::init() -{; - menunow=false; ddmnow=false; menunum=1; - return this; +onemenu *onemenu::init() { +	; +	menunow = false; +	ddmnow = false; +	menunum = 1; +	return this;  } -void onemenu::opt(string n, char tr, string key, boolean val) -{ -    integer l; -; - number += 1; - l=length(n+key)+3; if (width<l)  width=l; - { - optiontype& with = oo[number];  - ; -  with.title=n; -  with.trigger=tr; -  with.shortcut=key; -  with.valid=val; - } -} - -void onemenu::displayopt(byte y, boolean highlit) -{ - string data; -; - { - optiontype& with = oo[y];  - ; +void onemenu::opt(string n, char tr, string key, boolean val) { +	integer l; +	; +	number += 1; +	l = length(n + key) + 3; +	if (width < l)  width = l; +	{ +		optiontype &with = oo[number]; +		; +		with.title = n; +		with.trigger = tr; +		with.shortcut = key; +		with.valid = val; +	} +} + +void onemenu::displayopt(byte y, boolean highlit) { +	string data; +	; +	{ +		optiontype &with = oo[y]; +		; -  if (highlit)  -   setfillstyle(1,0); -   else -    setfillstyle(1,7); -  bar((flx1+1)*8,3+y*10,(flx2+1)*8,12+y*10); +		if (highlit) +			setfillstyle(1, 0); +		else +			setfillstyle(1, 7); +		bar((flx1 + 1) * 8, 3 + y * 10, (flx2 + 1) * 8, 12 + y * 10); -/*  settextjustify(2,2); -   if shortcut>'' then outtextxy(flx2,4+y*10,shortcut);*/ +		/*  settextjustify(2,2); +		   if shortcut>'' then outtextxy(flx2,4+y*10,shortcut);*/ -  data=with.title; +		data = with.title; -  while (length(data+with.shortcut)<width)  -   data=data+' ';  /* Pad with spaces. */ +		while (length(data + with.shortcut) < width) +			data = data + ' '; /* Pad with spaces. */ -  data=data+with.shortcut; +		data = data + with.shortcut; -  if (highlit)  -   hlchalk(left,4+y*10,with.trigger,data,with.valid); -  else -   chalk(left,4+y*10,with.trigger,data,with.valid); +		if (highlit) +			hlchalk(left, 4 + y * 10, with.trigger, data, with.valid); +		else +			chalk(left, 4 + y * 10, with.trigger, data, with.valid); - } +	}  } -void onemenu::display() -{ -    byte y; -; - off(); - setactivepage(cp); setvisualpage(cp); - setfillstyle(1,menu_b); setcolor(menu_border); - firstlix=true; - flx1=left-2; flx2=left+width; fly=14+number*10; - menunow=true; ddmnow=true; +void onemenu::display() { +	byte y; +	; +	off(); +	setactivepage(cp); +	setvisualpage(cp); +	setfillstyle(1, menu_b); +	setcolor(menu_border); +	firstlix = true; +	flx1 = left - 2; +	flx2 = left + width; +	fly = 14 + number * 10; +	menunow = true; +	ddmnow = true; + +	bar((flx1 + 1) * 8, 12, (flx2 + 1) * 8, fly); +	rectangle((flx1 + 1) * 8 - 1, 11, (flx2 + 1) * 8 + 1, fly + 1); + +	displayopt(1, true); +	for (y = 2; y <= number; y ++) { +		optiontype &with = oo[y]; +		displayopt(y, false); +	} +	defaultled = 1; +	cmp = 177; +	mousepage(cp); +	on(); /* 4= fletch */ +} - bar((flx1+1)*8,12,(flx2+1)*8,fly); - rectangle((flx1+1)*8-1,11,(flx2+1)*8+1,fly+1); +void onemenu::wipe() { +	bytefield r; +	; +	setactivepage(cp); +	off(); +	{ +		headtype &with = ddm_m.ddms[ddm_o.menunum]; +		chalk(with.xpos, 1, with.trigger, with.title, true); +	} +	/* mblit((flx1-3) div 8,11,((flx2+1) div 8)+1,fly+1,3,cp);*/ + +	/* with r do +	 begin; +	  x1:=flx1; +	  y1:=11; +	  x2:=flx2+1; +	  y2:=fly+1; +	 end; +	 getset[cp].remember(r);*/ + +	mblit(flx1, 11, flx2 + 1, fly + 1, 3, cp); +	blitfix(); +	menunow = false; +	ddmnow = false; +	firstlix = false; +	defaultled = 2; +	on_virtual(); +} - displayopt(1,true); - for( y=2; y <= number; y ++) -  { optiontype& with = oo[y];  displayopt(y,false);} - defaultled=1; cmp=177; mousepage(cp); on(); /* 4= fletch */ +void onemenu::movehighlight(shortint add) { +	shortint hn; +	; +	if (add != 0) { +		; +		hn = highlightnum + add; +		if ((hn < 0) || (hn >= (unsigned char)number))  return; +		highlightnum = hn; +	} +	setactivepage(cp); +	off(); +	displayopt(oldy + 1, false); +	displayopt(highlightnum + 1, true); +	setactivepage(1 - cp); +	oldy = highlightnum; +	on();  } -void onemenu::wipe() -{ -    bytefield r; -; - setactivepage(cp); - off(); - { headtype& with = ddm_m.ddms[ddm_o.menunum];  -  chalk(with.xpos,1,with.trigger,with.title,true);} -/* mblit((flx1-3) div 8,11,((flx2+1) div 8)+1,fly+1,3,cp);*/ - -/* with r do - begin; -  x1:=flx1; -  y1:=11; -  x2:=flx2+1; -  y2:=fly+1; - end; - getset[cp].remember(r);*/ +void onemenu::lightup() {  /* This makes the menu highlight follow the mouse.*/ +	; +	if ((mx < (cardinal)flx1 * 8) || (mx > (cardinal)flx2 * 8) || (my <= 12) || (my > (cardinal)fly - 3))  return; +	highlightnum = (my - 13) / 10; +	if (highlightnum == oldy)  return; +	movehighlight(0); +} + +void onemenu::select(byte n) {    /* Choose which one you want. */ +	; +	if (! oo[n + 1].valid)  return; +	choicenum = n; +	wipe(); - mblit(flx1,11,flx2+1,fly+1,3,cp); blitfix(); - menunow=false; ddmnow=false; firstlix=false; defaultled=2; - on_virtual(); +	if (choicenum == number)  choicenum -= 1; /* Off the bottom. */ +	if (choicenum > number)  choicenum = 0; /* Off the top, I suppose. */ + +	ddm_m.ddms[menunum].do_choose();  } -void onemenu::movehighlight(shortint add) -{ -    shortint hn; -; - if (add!=0)  - {; -  hn=highlightnum+add; -  if ((hn<0) || (hn>=(unsigned char)number))  return; -  highlightnum=hn; - } - setactivepage(cp); off(); -  displayopt(oldy+1,false); -  displayopt(highlightnum+1,true); - setactivepage(1-cp); - oldy=highlightnum; on(); +void onemenu::keystroke(char c) { +	byte fv; +	boolean found; +	; +	c = upcase(c); +	found = false; +	for (fv = 1; fv <= number; fv ++) { +		optiontype &with = oo[fv]; +		if ((upcase(with.trigger) == c) && with.valid) { +			; +			select(fv - 1); +			found = true; +		} +	} +	if (! found)  blip();  } -void onemenu::lightup()    /* This makes the menu highlight follow the mouse.*/ -{; - if ((mx<(cardinal)flx1*8) || (mx>(cardinal)flx2*8) || (my<=12) || (my>(cardinal)fly-3))  return; - highlightnum=(my-13) / 10; - if (highlightnum==oldy)  return; - movehighlight(0); +headtype *headtype::init +(char trig, char alttrig, string name, byte p, proc dw, proc dc) { +	; +	trigger = trig; +	alttrigger = alttrig; +	title = name; +	position = p; +	xpos = (position - 1) * spacing + indent; +	xright = position * spacing + indent; +	do_setup = dw; +	do_choose = dc; +	return this;  } -void onemenu::select(byte n)      /* Choose which one you want. */ -{; - if (! oo[n+1].valid)  return; - choicenum=n; wipe(); +void headtype::display() { +	; +	off(); /*MT*/ +	chalk(xpos, 1, trigger, title, true); +	on(); /*MT*/ +} - if (choicenum==number)  choicenum -= 1;  /* Off the bottom. */ - if (choicenum>number)  choicenum=0;    /* Off the top, I suppose. */ +void headtype::highlight() { +	; +	off(); +	off_virtual(); +	nosound; +	setactivepage(cp); +	hlchalk(xpos, 1, trigger, title, true); +	{ +		; +		ddm_o.left = xpos; +		ddm_o.menunow = true; +		ddmnow = true; +		ddm_o.menunum = position; +	} +	cmp = 177; /* Force redraw of cursor. */ +} - ddm_m.ddms[menunum].do_choose(); +boolean headtype::extdparse(char c) { +	boolean extdparse_result; +	; +	if (c != alttrigger)  { +		; +		extdparse_result = true; +		return extdparse_result; +	} +	extdparse_result = false; +	return extdparse_result;  } -void onemenu::keystroke(char c) -{ -    byte fv; boolean found; -; - c=upcase(c); found=false; - for( fv=1; fv <= number; fv ++) -  { optiontype& with = oo[fv];  -   if ((upcase(with.trigger)==c) && with.valid)  -   {; -    select(fv-1); -    found=true; -   }} - if (! found)  blip(); -} - -  headtype* headtype::init -   (char trig,char alttrig, string name, byte p, proc dw,proc dc) -  {; -   trigger=trig; alttrigger=alttrig; title=name; -   position=p; xpos=(position-1)*spacing+indent; -   xright=position*spacing+indent; -   do_setup=dw; do_choose=dc; -   return this; -  } - -  void headtype::display() -  {; -   off(); /*MT*/ -   chalk(xpos,1,trigger,title,true); -   on(); /*MT*/ -  } - -  void headtype::highlight() -  {; -   off(); off_virtual(); nosound; -   setactivepage(cp); -    hlchalk(xpos,1,trigger,title,true); -   {; -    ddm_o.left=xpos; -    ddm_o.menunow=true; ddmnow=true; ddm_o.menunum=position; -   } -   cmp=177;  /* Force redraw of cursor. */ -  } - -  boolean headtype::extdparse(char c) -  {boolean extdparse_result; -  ; -   if (c!=alttrigger)  {; extdparse_result=true; return extdparse_result; } -   extdparse_result=false; -  return extdparse_result; -  } - -  menuset* menuset::init() -  {; -   howmany=0; -   return this; -  } - -  void menuset::create(char t, string n, char alttrig, proc dw,proc dc) -  {; -   howmany += 1; -   ddms[howmany].init(t,alttrig,n,howmany,dw,dc); -  } - -  void menuset::update() -  { -   const bytefield menuspace = {0, 0, 80, 9}; -   byte fv,page_,savecp; -  ; -   setactivepage(3); -   setfillstyle(1,menu_b); bar(0, 0,640, 9); -   savecp=cp; cp=3; - -   for( fv=1; fv <= howmany; fv ++) -    ddms[fv].display(); - -   for( page_=0; page_ <= 1; page_ ++) -    getset[page_].remember(menuspace); - -   cp=savecp; -  } - -  void menuset::extd(char c) -  { -      byte fv; -  ; -   fv=1; -   while ((fv<=howmany) && (ddms[fv].extdparse(c)))  fv += 1; -   if (fv>howmany)  return; getcertain(fv); -  } - -  void menuset::getcertain(byte fv) -  {; -   { headtype& with = ddms[fv];  -    {; -     if (ddm_o.menunow)  -     {; -      wipe(); /* get rid of menu */ -      if (ddm_o.menunum==with.position)  return; /* clicked on own highlight */ -     } -     highlight(); do_setup(); -    }} -  } - -  void menuset::getmenu(integer x) -  { -      byte fv; -  ; -   fv=0; -   do { -    fv += 1; -    if ((x>ddms[fv].xpos*8) && (x<ddms[fv].xright*8))  -    {; -     getcertain(fv); -     return; -    } -   } while (!(fv>howmany)); -  } - -void parsekey(char r,char re) -{; -  switch (r) { -   case '\0':case '\340': {; -        switch (re) { -         case 'K': if (ddm_o.menunum>1)  {; -               wipe(); -               ddm_m.getcertain(ddm_o.menunum-1); -              } else -              {;     /* Get menu on the left-hand side */ -               wipe(); -               ddm_m.getmenu((ddm_m.howmany-1)*spacing+indent); -              } -              break; -         case 'M': if (ddm_o.menunum<ddm_m.howmany)  {; -               wipe(); -               ddm_m.getcertain(ddm_o.menunum+1); -              } else -              {;     /* Get menu on the far right-hand side */ -               wipe(); -               ddm_m.getmenu(indent); -              } -              break; -         case 'H': movehighlight(-1); break; -         case 'P': movehighlight(1); break; -         default: ddm_m.extd(re); -         } -        } -        break; -   case '\15': select(ddm_o.highlightnum); break; -   default: -   {; -    if (ddm_o.menunow)  keystroke(r); -   } -  } +menuset *menuset::init() { +	; +	howmany = 0; +	return this; +} + +void menuset::create(char t, string n, char alttrig, proc dw, proc dc) { +	; +	howmany += 1; +	ddms[howmany].init(t, alttrig, n, howmany, dw, dc); +} + +void menuset::update() { +	const bytefield menuspace = {0, 0, 80, 9}; +	byte fv, page_, savecp; +	; +	setactivepage(3); +	setfillstyle(1, menu_b); +	bar(0, 0, 640, 9); +	savecp = cp; +	cp = 3; + +	for (fv = 1; fv <= howmany; fv ++) +		ddms[fv].display(); + +	for (page_ = 0; page_ <= 1; page_ ++) +		getset[page_].remember(menuspace); + +	cp = savecp; +} + +void menuset::extd(char c) { +	byte fv; +	; +	fv = 1; +	while ((fv <= howmany) && (ddms[fv].extdparse(c)))  fv += 1; +	if (fv > howmany)  return; +	getcertain(fv); +} + +void menuset::getcertain(byte fv) { +	; +	{ +		headtype &with = ddms[fv]; +		{ +			; +			if (ddm_o.menunow) { +				; +				wipe(); /* get rid of menu */ +				if (ddm_o.menunum == with.position)  return; /* clicked on own highlight */ +			} +			highlight(); +			do_setup(); +		} +	} +} + +void menuset::getmenu(integer x) { +	byte fv; +	; +	fv = 0; +	do { +		fv += 1; +		if ((x > ddms[fv].xpos * 8) && (x < ddms[fv].xright * 8)) { +			; +			getcertain(fv); +			return; +		} +	} while (!(fv > howmany)); +} + +void parsekey(char r, char re) { +	; +	switch (r) { +	case '\0': +	case '\340': { +		; +		switch (re) { +		case 'K': +			if (ddm_o.menunum > 1)  { +				; +				wipe(); +				ddm_m.getcertain(ddm_o.menunum - 1); +			} else { +				;     /* Get menu on the left-hand side */ +				wipe(); +				ddm_m.getmenu((ddm_m.howmany - 1)*spacing + indent); +			} +			break; +		case 'M': +			if (ddm_o.menunum < ddm_m.howmany)  { +				; +				wipe(); +				ddm_m.getcertain(ddm_o.menunum + 1); +			} else { +				;     /* Get menu on the far right-hand side */ +				wipe(); +				ddm_m.getmenu(indent); +			} +			break; +		case 'H': +			movehighlight(-1); +			break; +		case 'P': +			movehighlight(1); +			break; +		default: +			ddm_m.extd(re); +		} +	} +	break; +	case '\15': +		select(ddm_o.highlightnum); +		break; +	default: { +		; +		if (ddm_o.menunow)  keystroke(r); +	} +	}  }  /*$F+  *** Here follow all the ddm__ and do__ procedures for the DDM system. */ -void ddm__game() -{; - {; -  start_afresh(); -  opt("Help...",'H',"f1",true); -  opt("Boss Key",'B',"alt-B",true); -  opt("Untrash screen",'U',"ctrl-f7",true); -  opt("Score and rank",'S',"f9",true); -  opt("About Avvy...",'A',"shift-f10",true); -  display(); - } -} - -void ddm__file() -{; - {; -  start_afresh(); -  opt("New game",'N',"f4",true); -  opt("Load...",'L',"^f3",true); -  opt("Save",'S',"^f2",alive); -  opt("Save As...",'v',"",alive); -  opt("DOS Shell",'D',atkey+'1',true); -  opt("Quit",'Q',"alt-X",true); -  display(); - } -} - -void ddm__action() -{ -    string n; -; - n=copy(f5_does(),2,255); - - {; -  start_afresh(); -  if (n=="")  -   opt("Do something",'D',"f5",false); -  else -   opt(copy(n,2,255),n[1],"f5",true); -  opt("Pause game",'P',"f6",true); -  if (dna.room==99)  -   opt("Journey thither",'J',"f7",neardoor()); -  else -   opt("Open the door",'O',"f7",neardoor()); -  opt("Look around",'L',"f8",true); -  opt("Inventory",'I',"Tab",true); -  if (tr[1].xs==walk)  -    opt("Run fast",'R',"^R",true); -  else -    opt("Walk slowly",'W',"^W",true); -  display(); - } -} - -void ddm__people() -{ -    byte here; char fv; -; +void ddm__game() { +	; +	{ +		; +		start_afresh(); +		opt("Help...", 'H', "f1", true); +		opt("Boss Key", 'B', "alt-B", true); +		opt("Untrash screen", 'U', "ctrl-f7", true); +		opt("Score and rank", 'S', "f9", true); +		opt("About Avvy...", 'A', "shift-f10", true); +		display(); +	} +} - people=""; - here=dna.room; +void ddm__file() { +	; +	{ +		; +		start_afresh(); +		opt("New game", 'N', "f4", true); +		opt("Load...", 'L', "^f3", true); +		opt("Save", 'S', "^f2", alive); +		opt("Save As...", 'v', "", alive); +		opt("DOS Shell", 'D', atkey + '1', true); +		opt("Quit", 'Q', "alt-X", true); +		display(); +	} +} - {; -  start_afresh(); -  for( fv='\226'; fv <= '\262'; fv ++) -   if (whereis[fv]==here)  -   {; -    opt(getname(fv),getnamechar(fv),"",true); -    people=people+fv; -   } -  display(); - } +void ddm__action() { +	string n; +	; +	n = copy(f5_does(), 2, 255); + +	{ +		; +		start_afresh(); +		if (n == "") +			opt("Do something", 'D', "f5", false); +		else +			opt(copy(n, 2, 255), n[1], "f5", true); +		opt("Pause game", 'P', "f6", true); +		if (dna.room == 99) +			opt("Journey thither", 'J', "f7", neardoor()); +		else +			opt("Open the door", 'O', "f7", neardoor()); +		opt("Look around", 'L', "f8", true); +		opt("Inventory", 'I', "Tab", true); +		if (tr[1].xs == walk) +			opt("Run fast", 'R', "^R", true); +		else +			opt("Walk slowly", 'W', "^W", true); +		display(); +	}  } -void ddm__objects() -{ -    char fv; -; - {; -  start_afresh(); -  for( fv='\1'; fv <= numobjs; fv ++) -   if (dna.obj[fv])  -    opt(get_thing(fv),get_thingchar(fv),"",true); -  display(); - } +void ddm__people() { +	byte here; +	char fv; +	; + +	people = ""; +	here = dna.room; + +	{ +		; +		start_afresh(); +		for (fv = '\226'; fv <= '\262'; fv ++) +			if (whereis[fv] == here) { +				; +				opt(getname(fv), getnamechar(fv), "", true); +				people = people + fv; +			} +		display(); +	}  } -string himher(char x)           /* Returns "im" for boys, and "er" for girls.*/ -{string himher_result; -; - if (x<'\257')  himher_result="im"; else himher_result="er"; -return himher_result; +void ddm__objects() { +	char fv; +	; +	{ +		; +		start_afresh(); +		for (fv = '\1'; fv <= numobjs; fv ++) +			if (dna.obj[fv]) +				opt(get_thing(fv), get_thingchar(fv), "", true); +		display(); +	}  } -void ddm__with() -{ -    byte fv; varying_string<7> verb; char vbchar; boolean n; -; - {; -  start_afresh(); - -  if (thinkthing)  -  {; - -   find_what_you_can_do_with_it(); - -   for( fv=1; fv <= length(verbstr); fv ++) -   {; -    verbopt(verbstr[fv],verb,vbchar); -    opt(verb,vbchar,"",true); -   } - -   /* We disable the "give" option if: (a), you haven't selected anybody, -      (b), the person you've selected isn't in the room, -      or (c), the person you've selected is YOU! */ - -   if ((set::of(nowt,pavalot, eos).has(last_person)) || -    (whereis[last_person]!=dna.room))  -    opt("Give to...",'G',"",false); /* Not here. */ else -    {; -     opt(string("Give to ")+getname(last_person),'G',"",true); -     verbstr=verbstr+vb_give; -    } - -  } else -  {; -   opt("Examine",'x',"",true); -   opt(string("Talk to h")+himher(thinks),'T',"",true); -   verbstr=string(vb_exam)+vb_talk; -   switch (thinks) { - -    case pgeida:case parkata: -     {; -      opt("Kiss her",'K',"",true); -      verbstr=verbstr+vb_kiss; -     } -     break; - -    case pdogfood: -     {; -      opt("Play his game",'P',"",! dna.wonnim);   /* True if you HAVEN'T won. */ -      verbstr=verbstr+vb_play; -     } -     break; - -    case pmalagauche: -     {; -      n=! dna.teetotal; -      opt("Buy some wine",'w',"",! dna.obj[wine]); -      opt("Buy some beer",'b',"",n); -      opt("Buy some whisky",'h',"",n); opt("Buy some cider",'c',"",n); -      opt("Buy some mead",'m',"",n); -      verbstr=verbstr+'\145'+'\144'+'\146'+'\147'+'\150'; -     } -     break; - -    case ptrader: -     {; -      opt("Buy an onion",'o',"",! dna.obj[onion]); -      verbstr=verbstr+'\151'; -     } -     break; - -   } -  } -  display(); - } +string himher(char x) {         /* Returns "im" for boys, and "er" for girls.*/ +	string himher_result; +	; +	if (x < '\257')  himher_result = "im"; +	else himher_result = "er"; +	return himher_result; +} + +void ddm__with() { +	byte fv; +	varying_string<7> verb; +	char vbchar; +	boolean n; +	; +	{ +		; +		start_afresh(); + +		if (thinkthing) { +			; + +			find_what_you_can_do_with_it(); + +			for (fv = 1; fv <= length(verbstr); fv ++) { +				; +				verbopt(verbstr[fv], verb, vbchar); +				opt(verb, vbchar, "", true); +			} + +			/* We disable the "give" option if: (a), you haven't selected anybody, +			   (b), the person you've selected isn't in the room, +			   or (c), the person you've selected is YOU! */ + +			if ((set::of(nowt, pavalot, eos).has(last_person)) || +			        (whereis[last_person] != dna.room)) +				opt("Give to...", 'G', "", false); /* Not here. */ else { +				; +				opt(string("Give to ") + getname(last_person), 'G', "", true); +				verbstr = verbstr + vb_give; +			} + +		} else { +			; +			opt("Examine", 'x', "", true); +			opt(string("Talk to h") + himher(thinks), 'T', "", true); +			verbstr = string(vb_exam) + vb_talk; +			switch (thinks) { + +			case pgeida: +			case parkata: { +				; +				opt("Kiss her", 'K', "", true); +				verbstr = verbstr + vb_kiss; +			} +			break; + +			case pdogfood: { +				; +				opt("Play his game", 'P', "", ! dna.wonnim); /* True if you HAVEN'T won. */ +				verbstr = verbstr + vb_play; +			} +			break; + +			case pmalagauche: { +				; +				n = ! dna.teetotal; +				opt("Buy some wine", 'w', "", ! dna.obj[wine]); +				opt("Buy some beer", 'b', "", n); +				opt("Buy some whisky", 'h', "", n); +				opt("Buy some cider", 'c', "", n); +				opt("Buy some mead", 'm', "", n); +				verbstr = verbstr + '\145' + '\144' + '\146' + '\147' + '\150'; +			} +			break; + +			case ptrader: { +				; +				opt("Buy an onion", 'o', "", ! dna.obj[onion]); +				verbstr = verbstr + '\151'; +			} +			break; + +			} +		} +		display(); +	}  }  /*procedure ddm__map; @@ -647,113 +743,188 @@ begin;   end;  end;*/ -void do__game() -{; - switch (ddm_o.choicenum) { -  /* Help, boss, untrash screen. */ -   case 0: callverb(vb_help); break; -   case 1: callverb(vb_boss); break; -   case 2: major_redraw(); break; -   case 3: callverb(vb_score); break; -   case 4: callverb(vb_info); break; - } -} - -void do__file() -{; - switch (ddm_o.choicenum) { -  /* New game, load, save, save as, DOS shell, about, quit. */ -   case 0: callverb(vb_restart); break; -   case 1: {; realwords[2]=""; callverb(vb_load); } break; -   case 2: {; realwords[2]=""; callverb(vb_save); } break; -   case 3: filename_edit(); break; -   case 4: back_to_bootstrap(2); break; -   case 5: callverb(vb_quit); break; - } -} - -void do__action() -{ -    string n; -; - switch (ddm_o.choicenum) { -  /* Get up/pause game/open door/look/inv/walk-run */ -  case 0: { -        person=pardon; thing=pardon; -        n=f5_does(); callverb(n[1]); -     } -     break; -  case 1: callverb(vb_pause); break; -  case 2: callverb(vb_open); break; -  case 3: callverb(vb_look); break; -  case 4: callverb(vb_inv); break; -  case 5: { -       if (tr[1].xs==walk)  tr[1].xs=run; -                        else tr[1].xs=walk; -       newspeed(); -     } -     break; - } -} - -void do__objects() -{; - thinkabout(objlist[ddm_o.choicenum+1],a_thing); -} - -void do__people() -{; - thinkabout(people[ddm_o.choicenum+1],a_person); - last_person=people[ddm_o.choicenum+1]; -} - -void do__with() -{; - thing=thinks; - - if (thinkthing)  - {; - -  thing += 49; - -  if (verbstr[ddm_o.choicenum+1]==vb_give)  -   person=last_person; -  else -   person='\376'; - - } else - {; -  switch (verbstr[ddm_o.choicenum+1]) { -   case '\144': {; thing='\144'; callverb(vb_buy); return; } break; /* Beer */ -   case '\145': {; thing= '\62'; callverb(vb_buy); return; } break; /* Wine */ -   case '\146': {; thing='\146'; callverb(vb_buy); return; } break; /* Whisky */ -   case '\147': {; thing='\147'; callverb(vb_buy); return; } break; /* Cider */ -   case '\150': {; thing='\153'; callverb(vb_buy); return; } break; /* Mead */ -   case '\151': {; thing= '\103'; callverb(vb_buy); return; } break; /* Onion (trader) */ -   default: -   {; -    person=thing; -    thing='\376'; -   } -  } - } - callverb(verbstr[ddm_o.choicenum+1]); +void do__game() { +	; +	switch (ddm_o.choicenum) { +		/* Help, boss, untrash screen. */ +	case 0: +		callverb(vb_help); +		break; +	case 1: +		callverb(vb_boss); +		break; +	case 2: +		major_redraw(); +		break; +	case 3: +		callverb(vb_score); +		break; +	case 4: +		callverb(vb_info); +		break; +	} +} + +void do__file() { +	; +	switch (ddm_o.choicenum) { +		/* New game, load, save, save as, DOS shell, about, quit. */ +	case 0: +		callverb(vb_restart); +		break; +	case 1: { +		; +		realwords[2] = ""; +		callverb(vb_load); +	} +	break; +	case 2: { +		; +		realwords[2] = ""; +		callverb(vb_save); +	} +	break; +	case 3: +		filename_edit(); +		break; +	case 4: +		back_to_bootstrap(2); +		break; +	case 5: +		callverb(vb_quit); +		break; +	} +} + +void do__action() { +	string n; +	; +	switch (ddm_o.choicenum) { +		/* Get up/pause game/open door/look/inv/walk-run */ +	case 0: { +		person = pardon; +		thing = pardon; +		n = f5_does(); +		callverb(n[1]); +	} +	break; +	case 1: +		callverb(vb_pause); +		break; +	case 2: +		callverb(vb_open); +		break; +	case 3: +		callverb(vb_look); +		break; +	case 4: +		callverb(vb_inv); +		break; +	case 5: { +		if (tr[1].xs == walk)  tr[1].xs = run; +		else tr[1].xs = walk; +		newspeed(); +	} +	break; +	} +} + +void do__objects() { +	; +	thinkabout(objlist[ddm_o.choicenum + 1], a_thing); +} + +void do__people() { +	; +	thinkabout(people[ddm_o.choicenum + 1], a_person); +	last_person = people[ddm_o.choicenum + 1]; +} + +void do__with() { +	; +	thing = thinks; + +	if (thinkthing) { +		; + +		thing += 49; + +		if (verbstr[ddm_o.choicenum + 1] == vb_give) +			person = last_person; +		else +			person = '\376'; + +	} else { +		; +		switch (verbstr[ddm_o.choicenum + 1]) { +		case '\144': { +			; +			thing = '\144'; +			callverb(vb_buy); +			return; +		} +		break; /* Beer */ +		case '\145': { +			; +			thing = '\62'; +			callverb(vb_buy); +			return; +		} +		break; /* Wine */ +		case '\146': { +			; +			thing = '\146'; +			callverb(vb_buy); +			return; +		} +		break; /* Whisky */ +		case '\147': { +			; +			thing = '\147'; +			callverb(vb_buy); +			return; +		} +		break; /* Cider */ +		case '\150': { +			; +			thing = '\153'; +			callverb(vb_buy); +			return; +		} +		break; /* Mead */ +		case '\151': { +			; +			thing = '\103'; +			callverb(vb_buy); +			return; +		} +		break; /* Onion (trader) */ +		default: { +			; +			person = thing; +			thing = '\376'; +		} +		} +	} +	callverb(verbstr[ddm_o.choicenum + 1]);  }  /*$F- That's all. Now for the ...bar procs. */ -void standard_bar()     /* Standard menu bar */ -{; - ddm_m.init(); ddm_o.init(); - {;     /* Set up menus */ -  create('F',"File",'!',ddm__file,do__file); /* same ones in map_bar, below, */ -  create('G',"Game",'\42',ddm__game,do__game); /* Don't forget to change the */ -  create('A',"Action",'\36',ddm__action,do__action); /* if you change them */ -  create('O',"Objects",'\30',ddm__objects,do__objects); /* here... */ -  create('P',"People",'\31',ddm__people,do__people); -  create('W',"With",'\21',ddm__with,do__with); -  update(); - } +void standard_bar() {   /* Standard menu bar */ +	; +	ddm_m.init(); +	ddm_o.init(); +	{ +		;     /* Set up menus */ +		create('F', "File", '!', ddm__file, do__file); /* same ones in map_bar, below, */ +		create('G', "Game", '\42', ddm__game, do__game); /* Don't forget to change the */ +		create('A', "Action", '\36', ddm__action, do__action); /* if you change them */ +		create('O', "Objects", '\30', ddm__objects, do__objects); /* here... */ +		create('P', "People", '\31', ddm__people, do__people); +		create('W', "With", '\21', ddm__with, do__with); +		update(); +	}  }  /*procedure map_bar; { Special menu bar for the map (screen 99) } @@ -769,61 +940,65 @@ begin;   end;  end;*/ -void checkclick()     /* only for when the menu's displayed */ -{; - if (mpress>0)  - {; -  if (mpy>10)  -    {; -     if (! ((ddm_o.firstlix) && -      ((mpx>=(cardinal)ddm_o.flx1*8) && (mpx<=(cardinal)ddm_o.flx2*8) && -      (mpy>=12) && (mpy<=(cardinal)ddm_o.fly))))  -     {;     /* Clicked OUTSIDE the menu. */ -      if (ddm_o.menunow)  wipe(); -     }    /* No "else"- clicking on menu has no effect (only releasing) */ -    } else -   {;     /* Clicked on menu bar */ -    ddm_m.getmenu(mpx); -   } - } else - {;     /* NOT clicked button... */ -  if (mrelease>0)  -  {; -    if ((ddm_o.firstlix) && -     ((mrx>=(cardinal)ddm_o.flx1*8) && (mrx<=(cardinal)ddm_o.flx2*8) && -     (mry>=12) && (mry<=(cardinal)ddm_o.fly)))  -      select((mry-13) / 10); -  } - } -} - -void menu_link() -{; - {; -  if (! ddm_o.menunow)  return; - -  check(); /* find mouse coords & click information */ -  checkclick(); /* work out click codes */ - -  /* Change arrow... */ - -  switch (my) { -     case RANGE_11(0, 10): newpointer(1); -     break;                 /* up-arrow */ -    case 11 ... 169: {; -              if ((mx>=(cardinal)ddm_o.flx1*8) && (mx<=(cardinal)ddm_o.flx2*8) && (my>10) && (my<=(cardinal)ddm_o.fly))  -               newpointer(3); /* right-arrow */ -              else newpointer(4); /* fletch */ -             } -             break; -   case RANGE_32(169,200): newpointer(2); -   break;                   /* screwdriver */ -  } - -  if (! ddm_o.menunow)  return; - -  lightup(); - } +void checkclick() {   /* only for when the menu's displayed */ +	; +	if (mpress > 0) { +		; +		if (mpy > 10) { +			; +			if (!((ddm_o.firstlix) && +			        ((mpx >= (cardinal)ddm_o.flx1 * 8) && (mpx <= (cardinal)ddm_o.flx2 * 8) && +			         (mpy >= 12) && (mpy <= (cardinal)ddm_o.fly)))) { +				;     /* Clicked OUTSIDE the menu. */ +				if (ddm_o.menunow)  wipe(); +			}    /* No "else"- clicking on menu has no effect (only releasing) */ +		} else { +			;     /* Clicked on menu bar */ +			ddm_m.getmenu(mpx); +		} +	} else { +		;     /* NOT clicked button... */ +		if (mrelease > 0) { +			; +			if ((ddm_o.firstlix) && +			        ((mrx >= (cardinal)ddm_o.flx1 * 8) && (mrx <= (cardinal)ddm_o.flx2 * 8) && +			         (mry >= 12) && (mry <= (cardinal)ddm_o.fly))) +				select((mry - 13) / 10); +		} +	} +} + +void menu_link() { +	; +	{ +		; +		if (! ddm_o.menunow)  return; + +		check(); /* find mouse coords & click information */ +		checkclick(); /* work out click codes */ + +		/* Change arrow... */ + +		switch (my) { +		case RANGE_11(0, 10): +			newpointer(1); +			break;                 /* up-arrow */ +		case 11 ... 169: { +			; +			if ((mx >= (cardinal)ddm_o.flx1 * 8) && (mx <= (cardinal)ddm_o.flx2 * 8) && (my > 10) && (my <= (cardinal)ddm_o.fly)) +				newpointer(3); /* right-arrow */ +			else newpointer(4); /* fletch */ +		} +		break; +		case RANGE_32(169, 200): +			newpointer(2); +			break;                   /* screwdriver */ +		} + +		if (! ddm_o.menunow)  return; + +		lightup(); +	}  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/dropdown.h b/engines/avalanche/dropdown.h index 4eae8982ed..e39e6f1d67 100644 --- a/engines/avalanche/dropdown.h +++ b/engines/avalanche/dropdown.h @@ -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 @@ -34,62 +34,62 @@ typedef void(*proc)();  class headtype {  public: -            varying_string<8> title; -            char trigger,alttrigger; -            byte position; -            integer xpos,xright; -            proc do_setup,do_choose; - -            headtype* init -             (char trig,char alttrig, string name, byte p, proc dw,proc dc); -            void display(); -            void highlight(); -            boolean extdparse(char c); +	varying_string<8> title; +	char trigger, alttrigger; +	byte position; +	integer xpos, xright; +	proc do_setup, do_choose; + +	headtype *init +	(char trig, char alttrig, string name, byte p, proc dw, proc dc); +	void display(); +	void highlight(); +	boolean extdparse(char c);  };  struct optiontype { -              string title; -              char trigger; -              varying_string<9> shortcut; -              boolean valid; +	string title; +	char trigger; +	varying_string<9> shortcut; +	boolean valid;  };  class onemenu {  public: -           array<1,12,optiontype> oo; -           byte number; -           integer width,left; -           boolean firstlix; -           integer flx1,flx2,fly; -           byte oldy; /* used by Lightup */ -           boolean menunow; /* Is there a menu now? */ -           byte menunum; /* And if so, which is it? */ -           byte choicenum; /* Your choice? */ -           byte highlightnum; - -           void start_afresh(); -           void opt(string n, char tr, string key, boolean val); -           void display(); -           void wipe(); -           void lightup(); -           void displayopt(byte y, boolean highlit); -           void movehighlight(shortint add); -           void select(byte n); -           void keystroke(char c); -           onemenu* init(); +	array<1, 12, optiontype> oo; +	byte number; +	integer width, left; +	boolean firstlix; +	integer flx1, flx2, fly; +	byte oldy; /* used by Lightup */ +	boolean menunow; /* Is there a menu now? */ +	byte menunum; /* And if so, which is it? */ +	byte choicenum; /* Your choice? */ +	byte highlightnum; + +	void start_afresh(); +	void opt(string n, char tr, string key, boolean val); +	void display(); +	void wipe(); +	void lightup(); +	void displayopt(byte y, boolean highlit); +	void movehighlight(shortint add); +	void select(byte n); +	void keystroke(char c); +	onemenu *init();  };  class menuset {  public: -           array<1,8,headtype> ddms; -           byte howmany; - -           menuset* init(); -           void create(char t, string n, char alttrig, proc dw,proc dc); -           void update(); -           void extd(char c); -           void getcertain(byte fv); -           void getmenu(integer x); +	array<1, 8, headtype> ddms; +	byte howmany; + +	menuset *init(); +	void create(char t, string n, char alttrig, proc dw, proc dc); +	void update(); +	void extd(char c); +	void getcertain(byte fv); +	void getmenu(integer x);  }; @@ -108,16 +108,16 @@ EXTERN varying_string<5> people; -  void find_what_you_can_do_with_it(); +void find_what_you_can_do_with_it(); -  void parsekey(char r,char re); +void parsekey(char r, char re); -  void menu_link(); +void menu_link(); -  /* DDM menu-bar procs */ +/* DDM menu-bar procs */ -  void standard_bar(); -  /*procedure map_bar;*/ +void standard_bar(); +/*procedure map_bar;*/  } // End of namespace Avalanche. diff --git a/engines/avalanche/dwidth.cpp b/engines/avalanche/dwidth.cpp index 450ee7b532..56bf5093b7 100644 --- a/engines/avalanche/dwidth.cpp +++ b/engines/avalanche/dwidth.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 @@ -29,19 +29,24 @@  namespace Avalanche { -typedef matrix<'\0','\377',0,15,byte> fonttype; +typedef matrix < '\0', '\377', 0, 15, byte > fonttype; -integer gd,gm; +integer gd, gm;  fonttype f;  file<fonttype> ff; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - assign(ff,"v:avalot.fnt"); reset(ff); ff >> f; close(ff); - gd=3; gm=0; initgraph(gd,gm,""); - for( gd=0; gd <= 15; gd ++) mem[0xa000*gd*80]=f['A'][gd]; -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	assign(ff, "v:avalot.fnt"); +	reset(ff); +	ff >> f; +	close(ff); +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	for (gd = 0; gd <= 15; gd ++) mem[0xa000 * gd * 80] = f['A'][gd]; +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/edhead.cpp b/engines/avalanche/edhead.cpp index ab7b1b8b3d..3aed1a3713 100644 --- a/engines/avalanche/edhead.cpp +++ b/engines/avalanche/edhead.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 @@ -28,86 +28,87 @@  namespace Avalanche {  const char months[] = "JanFebMarAprMayJunJulAugSepOctNovDec"; -const string ednaid = string("TT")+'\261'+'\36'+'\1'+'\113'+'\261'+'\231'+'\261'; +const string ednaid = string("TT") + '\261' + '\36' + '\1' + '\113' + '\261' + '\231' + '\261';  struct edhead { /* 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 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) */ +	/* 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 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) */  }; -  /* Possible values of edhead.os: -     1 = DOS        4 = Mac -     2 = Windows    5 = Amiga -     3 = OS/2       6 = ST */ +/* Possible values of edhead.os: +   1 = DOS        4 = Mac +   2 = Windows    5 = Amiga +   3 = OS/2       6 = ST */  untyped_file f;  byte fv; -array<1,255,word> dna256; +array<1, 255, word> dna256;  boolean ok;  edhead e; -void info(string x)       /* info on .ASG files */ -{ - varying_string<40> describe; -; - assign(f,x); - /*$I-*/ reset(f,1); - seek(f,47); - blockread(f,describe,40); - blockread(f,dna256,sizeof(dna256)); - close(f); /*$I+*/ -  e.revision=1; -  game="Denarius Avaricius Sextus"; -  shortname="Avaricius"; -  number=1; -  verstr="[?]"; -  filename="AVVY.EXE"; -  os=1; -  fn=x; -  d=dna256[7]; m=dna256[8]; y=dna256[9]; -  desc=describe; -  len=512; -  saves=dna256[6]; -  /*money:string[20]; { ditto in string form (eg 5/-, or 1 denarius)*/ -  /*points:word; { your score */ +void info(string x) {     /* info on .ASG files */ +	varying_string<40> describe; +	; +	assign(f, x); +	/*$I-*/ reset(f, 1); +	seek(f, 47); +	blockread(f, describe, 40); +	blockread(f, dna256, sizeof(dna256)); +	close(f); /*$I+*/ +	e.revision = 1; +	game = "Denarius Avaricius Sextus"; +	shortname = "Avaricius"; +	number = 1; +	verstr = "[?]"; +	filename = "AVVY.EXE"; +	os = 1; +	fn = x; +	d = dna256[7]; +	m = dna256[8]; +	y = dna256[9]; +	desc = describe; +	len = 512; +	saves = dna256[6]; +	/*money:string[20]; { ditto in string form (eg 5/-, or 1 denarius)*/ +	/*points:word; { your score */  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - info("tt.asg"); - - output << "Filename: " << x << NL; - output << "Description: " << desc << NL; - output << "Cash: " << dna256[30] << NL; - output << "Score: " << dna256[36] << NL; - output << "Date: " << dna256[7] << ' ' << copy(months,dna256[8]*3-2,3) << ' ' << dna256[9] << NL; - output << "Number of saves: " << dna256[6] << NL; -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	info("tt.asg"); + +	output << "Filename: " << x << NL; +	output << "Description: " << desc << NL; +	output << "Cash: " << dna256[30] << NL; +	output << "Score: " << dna256[36] << NL; +	output << "Date: " << dna256[7] << ' ' << copy(months, dna256[8] * 3 - 2, 3) << ' ' << dna256[9] << NL; +	output << "Number of saves: " << dna256[6] << NL; +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/edna.cpp b/engines/avalanche/edna.cpp index 1c4d8d76b5..7299f7c7aa 100644 --- a/engines/avalanche/edna.cpp +++ b/engines/avalanche/edna.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 @@ -33,34 +33,34 @@  namespace Avalanche {  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 in text format. */ - -          /* 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) */ +	/* 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 in text format. */ + +	/* 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) */  };  /* Possible values of edhead.os: @@ -69,18 +69,18 @@ struct ednahead { /* Edna header */       3 = OS/2       6 = ST       7 = Archimedes */ -typedef array<1,4,char> fourtype; +typedef array<1, 4, char> fourtype;  struct avaricius_dna { -                 varying_string<39> desc; -                 array<1,256,integer> dna; +	varying_string<39> desc; +	array<1, 256, integer> dna;  }; -const string ednaid = string("TT")+'\261'+'\60'+'\1'+'\165'+'\261'+'\231'+'\261'; +const string ednaid = string("TT") + '\261' + '\60' + '\1' + '\165' + '\261' + '\231' + '\261';  const fourtype avaricius_file = "Avvy";  string filename; -boolean quiet,info; +boolean quiet, info;  ednahead eh;  boolean avaricius; @@ -92,274 +92,290 @@ boolean ok;  string first_dir; -void explain() -{ -  output << "EDNA Bucket v1.0 (c) 1993 Thomas Thurman." << NL; -  output << "  To load Avvy files." << NL; -  output << NL; -  output << "Associate .ASG files with EDNA.EXE to load them directly." << NL; -  output << NL; -  output << "Switches:" << NL; -  output << "  /q (quiet) will stop EDNA from printing text to the screen." << NL; -  output << "  /i (info) will print info about the file, but won't load it." << NL; -  output << NL; -  exit(1); +void explain() { +	output << "EDNA Bucket v1.0 (c) 1993 Thomas Thurman." << NL; +	output << "  To load Avvy files." << NL; +	output << NL; +	output << "Associate .ASG files with EDNA.EXE to load them directly." << NL; +	output << NL; +	output << "Switches:" << NL; +	output << "  /q (quiet) will stop EDNA from printing text to the screen." << NL; +	output << "  /i (info) will print info about the file, but won't load it." << NL; +	output << NL; +	exit(1);  } -void fix_filename() -{ -    string p,n,groi; +void fix_filename() { +	string p, n, groi; -  fsplit(filename,p,n,groi); -  filename=p+n+".ASG"; +	fsplit(filename, p, n, groi); +	filename = p + n + ".ASG";  } -void error(string x) -{ -  output << "EDNA : " << x << NL; -  exit(255); +void error(string x) { +	output << "EDNA : " << x << NL; +	exit(255);  } -void paramparse() -{ - byte fv; - string x; +void paramparse() { +	byte fv; +	string x; -  if (paramcount==0)  explain(); +	if (paramcount == 0)  explain(); -  filename=""; -  quiet=false; info=false; +	filename = ""; +	quiet = false; +	info = false; -  for( fv=1; fv <= paramcount; fv ++) -  { -    x=paramstr(fv); +	for (fv = 1; fv <= paramcount; fv ++) { +		x = paramstr(fv); -    if ((x[1]=='/') || (x[1]=='-'))  -       switch (upcase(x[2])) { /* Parse switches */ -         case 'Q': quiet=! quiet; break; -         case 'I': info=! info; break; -         default: error(string("Unknown switch! (")+x[2]+')'); -       } -    else -       if (filename=="")  filename=x; -         else error("Please, only one filename at a time!"); -  } +		if ((x[1] == '/') || (x[1] == '-')) +			switch (upcase(x[2])) { /* Parse switches */ +			case 'Q': +				quiet = ! quiet; +				break; +			case 'I': +				info = ! info; +				break; +			default: +				error(string("Unknown switch! (") + x[2] + ')'); +			} +		else if (filename == "")  filename = x; +		else error("Please, only one filename at a time!"); +	} -  if (quiet && info)  error("How can you give info quietly??"); +	if (quiet && info)  error("How can you give info quietly??"); -  if (filename=="")  error("No filename given! Use EDNA alone for help."); +	if (filename == "")  error("No filename given! Use EDNA alone for help."); -  fix_filename(); +	fix_filename();  } -void getfile() -{ -    untyped_file f; - -  assign(f,filename); - /*$I-*/ -  reset(f,1); - /*$I+*/ -  if (ioresult!=0)  error(string("Can't read file \"")+filename+"\"."); - -  seek(f,11); blockread(f,id4,4); -  avaricius=id4==avaricius_file; - -  if (avaricius)  -  { -    seek(f,47); -    blockread(f,av_eh,sizeof(av_eh)); -    av_ver[0]='\4'; seek(f,31); blockread(f,av_ver[1],4); -  } else -  { -    seek(f,177); -    blockread(f,eh,sizeof(eh)); -  } - -  close(f); +void getfile() { +	untyped_file f; + +	assign(f, filename); +	/*$I-*/ +	reset(f, 1); +	/*$I+*/ +	if (ioresult != 0)  error(string("Can't read file \"") + filename + "\"."); + +	seek(f, 11); +	blockread(f, id4, 4); +	avaricius = id4 == avaricius_file; + +	if (avaricius) { +		seek(f, 47); +		blockread(f, av_eh, sizeof(av_eh)); +		av_ver[0] = '\4'; +		seek(f, 31); +		blockread(f, av_ver[1], 4); +	} else { +		seek(f, 177); +		blockread(f, eh, sizeof(eh)); +	} + +	close(f);  } -string plural(byte x) -{ -  string plural_result; -  if (x==1)  plural_result=""; else plural_result='s'; -  return plural_result; +string plural(byte x) { +	string plural_result; +	if (x == 1)  plural_result = ""; +	else plural_result = 's'; +	return plural_result;  } -void show_info() -{ -    string _game,_shortname,_verstr,_filename,_os,_fn,_desc,_money; -   integer _revision,_number,_d,_m,_y,_saves,_points; -   boolean readable,understandable; - -  output << "Info on file " << filename << ':' << NL; -  output << NL; -    if (avaricius)  -    {     /* DNA-256 file. */ -      _verstr=av_ver; -      _game="Denarius Avaricius Sextus"; _shortname="Avaricius"; -      _filename="AVVY.EXE"; _os="DOS"; _desc=av_eh.desc; -      _revision=1; _number=1; _fn="(as above)"; - -      _money=strf(av_eh.dna[30])+" denari"; -      if (av_eh.dna[30]==1)  _money=_money+"us"; else _money=_money+'i'; -      _d=av_eh.dna[7]; _m=av_eh.dna[8]; _y=av_eh.dna[9]; -      _saves=av_eh.dna[6]; _points=av_eh.dna[36]; - -      readable=true; understandable=true; -    } else -     { -       if (eh.id==ednaid)  -       {      /* EDNA file. */ -        _game=eh.game; -        _shortname=eh.shortname; -        _verstr=eh.verstr; -        _filename=eh.filename; -        _os=eh.os; _fn=eh.fn; _desc=eh.desc; -        _money=eh.money; _revision=eh.revision; -        _number=eh.number; _d=eh.d; _m=eh.m; _y=eh.y; -        _saves=eh.saves; _points=eh.points; - -         readable=true; understandable=eh.revision==2; -       } else -       { -         output << "Unknown format." << NL; -         readable=false; -       } -     } - -    if (_desc=="")  _desc="<none>"; - -    if (readable)  -    { -      output << "Signature is valid." << NL; -      output << "Revision of .ASG format: " << _revision << NL; -      output << NL; -      if (understandable)  -      { -        output << "The file was saved by " << _game << '.' << NL; -        output << "Game number " << _number << " (" << _shortname << "), version " <<  -            _verstr << ", filename " << _filename << '.' << NL; -        output << "Saved under " << _os << '.' << NL; -        output << NL; -        output << "This is " << _fn << ".ASG, saved on " << _d << '/' << _m << '/' << _y << " (d/m/y)." << NL; -        output << "Description: " << _desc << NL; -        output << "It has been saved " << _saves << " time" << plural(_saves) <<  -                    ". You have " << _points << " point" << plural(_points) << ',' << NL; -        output << "and " << _money << " in cash." << NL; -      } else output << "Nothing else can be discovered." << NL; -    } - -  exit(2); +void show_info() { +	string _game, _shortname, _verstr, _filename, _os, _fn, _desc, _money; +	integer _revision, _number, _d, _m, _y, _saves, _points; +	boolean readable, understandable; + +	output << "Info on file " << filename << ':' << NL; +	output << NL; +	if (avaricius) { +		/* DNA-256 file. */ +		_verstr = av_ver; +		_game = "Denarius Avaricius Sextus"; +		_shortname = "Avaricius"; +		_filename = "AVVY.EXE"; +		_os = "DOS"; +		_desc = av_eh.desc; +		_revision = 1; +		_number = 1; +		_fn = "(as above)"; + +		_money = strf(av_eh.dna[30]) + " denari"; +		if (av_eh.dna[30] == 1)  _money = _money + "us"; +		else _money = _money + 'i'; +		_d = av_eh.dna[7]; +		_m = av_eh.dna[8]; +		_y = av_eh.dna[9]; +		_saves = av_eh.dna[6]; +		_points = av_eh.dna[36]; + +		readable = true; +		understandable = true; +	} else { +		if (eh.id == ednaid) { +			/* EDNA file. */ +			_game = eh.game; +			_shortname = eh.shortname; +			_verstr = eh.verstr; +			_filename = eh.filename; +			_os = eh.os; +			_fn = eh.fn; +			_desc = eh.desc; +			_money = eh.money; +			_revision = eh.revision; +			_number = eh.number; +			_d = eh.d; +			_m = eh.m; +			_y = eh.y; +			_saves = eh.saves; +			_points = eh.points; + +			readable = true; +			understandable = eh.revision == 2; +		} else { +			output << "Unknown format." << NL; +			readable = false; +		} +	} + +	if (_desc == "")  _desc = "<none>"; + +	if (readable) { +		output << "Signature is valid." << NL; +		output << "Revision of .ASG format: " << _revision << NL; +		output << NL; +		if (understandable) { +			output << "The file was saved by " << _game << '.' << NL; +			output << "Game number " << _number << " (" << _shortname << "), version " << +			       _verstr << ", filename " << _filename << '.' << NL; +			output << "Saved under " << _os << '.' << NL; +			output << NL; +			output << "This is " << _fn << ".ASG, saved on " << _d << '/' << _m << '/' << _y << " (d/m/y)." << NL; +			output << "Description: " << _desc << NL; +			output << "It has been saved " << _saves << " time" << plural(_saves) << +			       ". You have " << _points << " point" << plural(_points) << ',' << NL; +			output << "and " << _money << " in cash." << NL; +		} else output << "Nothing else can be discovered." << NL; +	} + +	exit(2);  } -void load_file() -{ - string progname,gamename,shortname,listname,exname,prog_dir; - - string localdir,groi; - - string x,y; - - text t; - - integer i,ii; - -  gamename=fexpand(filename); -  fsplit(fexpand(paramstr(0)),localdir,groi,groi); -  listname=localdir+"EDNA.DAT"; - -  if (avaricius)  -       { shortname="Avaricius"; exname="AVVY"; } -  else { shortname=eh.shortname; fsplit(eh.filename,groi,exname,groi); } - -  assign(t,listname); - /*$I-*/ -  reset(t); - /*$I+*/ -  progname=""; -  if (ioresult==0)  -  { -    do { -      t >> x >> NL; t >> y >> NL; -      if (x==shortname)  -      { -        progname=y; -        flush(); -      } -    } while (!(eof(t))); -  } - -  if (progname=="")  -  {      /* No entry in EDNA.DAT */ -    output << "This file was saved by " << shortname << '.' << NL; -    output << "However, no entry was found in EDNA.DAT for that game." << NL; -    output << NL; -    output << "Please give the full path to that game, or press Enter to cancel." << NL; -    output << string("(Example: C:\\")+exname+'\\'+exname+".EXE)" << NL; -    output << NL; -    input >> progname >> NL; -    if (progname=="")  exit(254);   /* Quick exit! */ - -   /*$I-*/ -    append(t); -    if (ioresult!=0)  rewrite(t); - -    t << shortname << NL; -    t << progname << NL; - -    if (ioresult!=0)  -    { -      output << "Strange... could not write to EDNA.DAT. (Disk read-only or full?)" << NL; -      output << "The path will be used this time only." << NL; -      output << "Press Enter..."; input >> NL; -    } -    close(t); -    /*$I+*/ -  } - -  if (! quiet)  output << "Running " << shortname << ": " << progname << "..." << NL; - -  fsplit(fexpand(progname),prog_dir,groi,groi); -  if (prog_dir[length(prog_dir)]=='\\')  prog_dir[0] -= 1; - -  /*$I-*/ -  chdir(prog_dir); i=ioresult; -  swapvectors; -  exec(progname,gamename); ii=ioresult; -  swapvectors; -  chdir(first_dir); -  /*$I+*/ - -  if ((i!=0) || (ii!=0))  -  { -    output << "WARNING: DOS reported an error. This probably means that the entry" << NL; -    output << "for this game in " << listname << " is wrong." << NL; -    output << NL; -    output << "Please edit this file, using" << NL; -    output << NL; -    if (lo(dosversion)<0x5)  -      output << "  edlin " << listname << " (or similar)" << NL; -    else -      output << "  edit " << listname << NL; -    output << NL; -    output << "and change the line after \"" << shortname << "\" to show the correct path." << NL; -    output << NL; -    output << "More info is in the Avvy documentation. Good luck!" << NL; -    output << NL; -    output << "Press Enter..."; input >> NL; -  } +void load_file() { +	string progname, gamename, shortname, listname, exname, prog_dir; + +	string localdir, groi; + +	string x, y; + +	text t; + +	integer i, ii; + +	gamename = fexpand(filename); +	fsplit(fexpand(paramstr(0)), localdir, groi, groi); +	listname = localdir + "EDNA.DAT"; + +	if (avaricius) { +		shortname = "Avaricius"; +		exname = "AVVY"; +	} else { +		shortname = eh.shortname; +		fsplit(eh.filename, groi, exname, groi); +	} + +	assign(t, listname); +	/*$I-*/ +	reset(t); +	/*$I+*/ +	progname = ""; +	if (ioresult == 0) { +		do { +			t >> x >> NL; +			t >> y >> NL; +			if (x == shortname) { +				progname = y; +				flush(); +			} +		} while (!(eof(t))); +	} + +	if (progname == "") { +		/* No entry in EDNA.DAT */ +		output << "This file was saved by " << shortname << '.' << NL; +		output << "However, no entry was found in EDNA.DAT for that game." << NL; +		output << NL; +		output << "Please give the full path to that game, or press Enter to cancel." << NL; +		output << string("(Example: C:\\") + exname + '\\' + exname + ".EXE)" << NL; +		output << NL; +		input >> progname >> NL; +		if (progname == "")  exit(254); /* Quick exit! */ + +		/*$I-*/ +		append(t); +		if (ioresult != 0)  rewrite(t); + +		t << shortname << NL; +		t << progname << NL; + +		if (ioresult != 0) { +			output << "Strange... could not write to EDNA.DAT. (Disk read-only or full?)" << NL; +			output << "The path will be used this time only." << NL; +			output << "Press Enter..."; +			input >> NL; +		} +		close(t); +		/*$I+*/ +	} + +	if (! quiet)  output << "Running " << shortname << ": " << progname << "..." << NL; + +	fsplit(fexpand(progname), prog_dir, groi, groi); +	if (prog_dir[length(prog_dir)] == '\\')  prog_dir[0] -= 1; + +	/*$I-*/ +	chdir(prog_dir); +	i = ioresult; +	swapvectors; +	exec(progname, gamename); +	ii = ioresult; +	swapvectors; +	chdir(first_dir); +	/*$I+*/ + +	if ((i != 0) || (ii != 0)) { +		output << "WARNING: DOS reported an error. This probably means that the entry" << NL; +		output << "for this game in " << listname << " is wrong." << NL; +		output << NL; +		output << "Please edit this file, using" << NL; +		output << NL; +		if (lo(dosversion) < 0x5) +			output << "  edlin " << listname << " (or similar)" << NL; +		else +			output << "  edit " << listname << NL; +		output << NL; +		output << "and change the line after \"" << shortname << "\" to show the correct path." << NL; +		output << NL; +		output << "More info is in the Avvy documentation. Good luck!" << NL; +		output << NL; +		output << "Press Enter..."; +		input >> NL; +	}  } -int main(int argc, const char* argv[]) -{ -  pio_initialize(argc, argv); -  getdir(0,first_dir); -  paramparse(); -  getfile(); -  if (info)  show_info(); -  load_file(); -  return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	getdir(0, first_dir); +	paramparse(); +	getfile(); +	if (info)  show_info(); +	load_file(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/enhanced.cpp b/engines/avalanche/enhanced.cpp index 212e6fe6a1..bfe4274191 100644 --- a/engines/avalanche/enhanced.cpp +++ b/engines/avalanche/enhanced.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 @@ -40,28 +40,29 @@  namespace Avalanche { -boolean isenh() -{ - byte statefrom16; - registers r; - -  boolean isenh_result; -  isenh_result = false; -  {; -   ah=0x12; -   intr(0x16,r); -   statefrom16=al; -  } -  if (statefrom16 != shiftstate)  return isenh_result; -  shiftstate = shiftstate ^ 0x20; -  {; -   ah=0x12; -   intr(0x16,r); -   statefrom16=al; -  } -  isenh_result = statefrom16 == shiftstate; -  shiftstate = shiftstate ^ 0x20; -  return isenh_result; +boolean isenh() { +	byte statefrom16; +	registers r; + +	boolean isenh_result; +	isenh_result = false; +	{ +		; +		ah = 0x12; +		intr(0x16, r); +		statefrom16 = al; +	} +	if (statefrom16 != shiftstate)  return isenh_result; +	shiftstate = shiftstate ^ 0x20; +	{ +		; +		ah = 0x12; +		intr(0x16, r); +		statefrom16 = al; +	} +	isenh_result = statefrom16 == shiftstate; +	shiftstate = shiftstate ^ 0x20; +	return isenh_result;  }  void readkeye() @@ -73,13 +74,14 @@ void readkeye()             $CD/ $16); { INT 16 }  */  { - registers r; word fs; -; - if (atbios)  -            fs=fancystuff; /* We're using an AT */ -  else fs=notfancystuff;  /* ditto, an XT */ - inchar=chr(lo(fs)); - extd=chr(hi(fs)); +	registers r; +	word fs; +	; +	if (atbios) +		fs = fancystuff; /* We're using an AT */ +	else fs = notfancystuff; /* ditto, an XT */ +	inchar = chr(lo(fs)); +	extd = chr(hi(fs));  }  boolean keypressede() @@ -92,23 +94,25 @@ boolean keypressede()            $40);      { INC AX }  */  { -    registers r; -boolean keypressede_result; -; - if (atbios)  -   keypressede_result=fancystuff; /* ATs get the fancy stuff */ -  else keypressede_result=keypressed(); /* XTs get the usual primitive... */ -return keypressede_result; +	registers r; +	boolean keypressede_result; +	; +	if (atbios) +		keypressede_result = fancystuff; /* ATs get the fancy stuff */ +	else keypressede_result = keypressed(); /* XTs get the usual primitive... */ +	return keypressede_result;  }  class unit_enhanced_initialize { -  public: unit_enhanced_initialize(); +public: +	unit_enhanced_initialize();  };  static unit_enhanced_initialize enhanced_constructor; -unit_enhanced_initialize::unit_enhanced_initialize() {; - /* determine bios type */ - atbios=isenh(); +unit_enhanced_initialize::unit_enhanced_initialize() { +	; +	/* determine bios type */ +	atbios = isenh();  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/enhanced.h b/engines/avalanche/enhanced.h index c7bd48f8a1..13885f3c1a 100644 --- a/engines/avalanche/enhanced.h +++ b/engines/avalanche/enhanced.h @@ -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 @@ -37,7 +37,7 @@ namespace Avalanche {  EXTERN byte shiftstate;/*ABSOLUTE $40:$17;*/  EXTERN boolean atbios; -EXTERN char inchar,extd; +EXTERN char inchar, extd;  #undef EXTERN  #define EXTERN extern diff --git a/engines/avalanche/enid.cpp b/engines/avalanche/enid.cpp index 7305d94d03..08c37796ca 100644 --- a/engines/avalanche/enid.cpp +++ b/engines/avalanche/enid.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 @@ -33,7 +33,7 @@                   ENID             Edna's manager. */  #define __enid_implementation__ -           /* Loads/ saves files. */ +/* Loads/ saves files. */  /*$V-*/ @@ -52,198 +52,228 @@  namespace Avalanche { -const string crlf = string('\15')+'\12'; +const string crlf = string('\15') + '\12';  const char tab = '\11';  const char eof_ = '\32'; -const array<1,177,char> ednafirst =  - string("This is an EDNA-based file, saved by a Thorsoft game. Good luck!")+ /*64*/ - crlf+eof_+crlf+crlf+ /*7*/ - tab+"Glory to God in the highest,"+crlf+ /*31*/ - tab+"and on earth peace, goodwill toward men."+ /*42*/ - crlf+tab+tab+tab+tab+ /*6*/ - "Luke 2:14."+ /*10*/ - crlf+crlf+crlf+ /* 6 */ - "1234567890"+crlf; /*11*/ +const array<1, 177, char> ednafirst = +    string("This is an EDNA-based file, saved by a Thorsoft game. Good luck!") + /*64*/ +    crlf + eof_ + crlf + crlf + /*7*/ +    tab + "Glory to God in the highest," + crlf + /*31*/ +    tab + "and on earth peace, goodwill toward men." + /*42*/ +    crlf + tab + tab + tab + tab + /*6*/ +    "Luke 2:14." + /*10*/ +    crlf + crlf + crlf + /* 6 */ +    "1234567890" +crlf; /*11*/ -const string ednaid = string("TT")+'\261'+'\60'+'\1'+'\165'+'\261'+'\231'+'\261'; +const string ednaid = string("TT") + '\261' + '\60' + '\1' + '\165' + '\261' + '\231' + '\261';  const integer ttage = 18; -const array<1,16,char> ttwashere = "Thomas was here "; +const array<1, 16, char> ttwashere = "Thomas was here ";  boolean bug; -string expanddate(byte d,byte m, word y); +string expanddate(byte d, byte m, word y); -const array<1,12,varying_string<7> > months =  -{{"Jan#","Febr#","March","April","May","June","July","August", -"Septem*","Octo*","Novem*","Decem*"}}; +const array<1, 12, varying_string<7> > months = { +	{ +		"Jan#", "Febr#", "March", "April", "May", "June", "July", "August", +		"Septem*", "Octo*", "Novem*", "Decem*" +	} +};  static varying_string<10> month; -static void addon(string x) { month[0] -= 1; month=month+x; } - -string expanddate(byte d,byte m, word y) -{ - varying_string<4> day; - - - string expanddate_result; - month=months[m]; - switch (month[length(month)]) { -  case '#': addon("uary"); break; -  case '*': addon("ber"); break; - } - - day=strf(d); - - if (set::of(range(1,9),range(21,31), eos).has(d))  -  switch (d % 10) { -   case 1: day=day+"st"; break; -   case 2: day=day+"nd"; break; -   case 3: day=day+"rd"; break; -   default: day=day+"th"; -  } +static void addon(string x) { +	month[0] -= 1; +	month = month + x; +} - expanddate_result=day+' '+month+' '+strf(y); - return expanddate_result; +string expanddate(byte d, byte m, word y) { +	varying_string<4> day; + + +	string expanddate_result; +	month = months[m]; +	switch (month[length(month)]) { +	case '#': +		addon("uary"); +		break; +	case '*': +		addon("ber"); +		break; +	} + +	day = strf(d); + +	if (set::of(range(1, 9), range(21, 31), eos).has(d)) +		switch (d % 10) { +		case 1: +			day = day + "st"; +			break; +		case 2: +			day = day + "nd"; +			break; +		case 3: +			day = day + "rd"; +			break; +		default: +			day = day + "th"; +		} + +	expanddate_result = day + ' ' + month + ' ' + strf(y); +	return expanddate_result;  }  void edna_save(string name); -static void show_bug(char icon, string strn) -{ display(string("\7\6\23")+icon+"\26\r"+strn+'\15'); } +static void show_bug(char icon, string strn) { +	display(string("\7\6\23") + icon + "\26\r" + strn + '\15'); +} -static boolean test_bug(byte what) -{ - boolean test_bug_result; - if (what==0)  { test_bug_result=false; return test_bug_result; } - switch (what) { -  case 2: show_bug('7',"Error in filename!"); break; -  case 101: show_bug('6',"Disk full!"); break; -  case 150: show_bug('4',"Disk is write-protected!"); break; -  default: show_bug('B',"Saving error!"); - } - test_bug_result=true; - return test_bug_result; +static boolean test_bug(byte what) { +	boolean test_bug_result; +	if (what == 0)  { +		test_bug_result = false; +		return test_bug_result; +	} +	switch (what) { +	case 2: +		show_bug('7', "Error in filename!"); +		break; +	case 101: +		show_bug('6', "Disk full!"); +		break; +	case 150: +		show_bug('4', "Disk is write-protected!"); +		break; +	default: +		show_bug('B', "Saving error!"); +	} +	test_bug_result = true; +	return test_bug_result;  } -void edna_save(string name) -{ - untyped_file f; - ednahead eh; - word groi; - string groi2,path; - word tempd,tempm; +void edna_save(string name) { +	untyped_file f; +	ednahead eh; +	word groi; +	string groi2, path; +	word tempd, tempm; - if (name=="")  - {         /* We were given no name. Do we have a default? */ -  if (enid_filename=="")  -  {        /* No */ -   filename_edit(); /* Request one. */ -   return; -  } else   /* Yes */ -   name=enid_filename; - } +	if (name == "") { +		/* We were given no name. Do we have a default? */ +		if (enid_filename == "") { +			/* No */ +			filename_edit(); /* Request one. */ +			return; +		} else   /* Yes */ +			name = enid_filename; +	} - wait(); /* Put up hourglass pointer */ +	wait(); /* Put up hourglass pointer */ - fillchar(eh,sizeof(eh),'\261'); /* Fill up the edhead */ +	fillchar(eh, sizeof(eh), '\261'); /* Fill up the edhead */ - dna.saves += 1; /* It's been saved one more time... */ +	dna.saves += 1; /* It's been saved one more time... */ - { +	{ -  /* Info about this program */ +		/* Info about this program */ -  eh.id=ednaid;  /* Edna's signature */ -  eh.revision=thisgamecode; /* 2- second revision of .ASG format */ -  eh.game="Lord Avalot d'Argent"; /* Title of game */ -  eh.shortname="Avalot"; -  eh.number=2; /* Second Avvy game */ -  eh.ver=thisvercode; /* Version 1.00 */ -  eh.verstr=vernum; /* ditto */ -  eh.filename="AVALOT.EXE"; /* program's filename */ -  eh.osbyte=1; /* Saved under DOS */ -  eh.os="DOS"; +		eh.id = ednaid; /* Edna's signature */ +		eh.revision = thisgamecode; /* 2- second revision of .ASG format */ +		eh.game = "Lord Avalot d'Argent"; /* Title of game */ +		eh.shortname = "Avalot"; +		eh.number = 2; /* Second Avvy game */ +		eh.ver = thisvercode; /* Version 1.00 */ +		eh.verstr = vernum; /* ditto */ +		eh.filename = "AVALOT.EXE"; /* program's filename */ +		eh.osbyte = 1; /* Saved under DOS */ +		eh.os = "DOS"; -  /* Info on this particular game */ +		/* Info on this particular game */ -  fsplit(name,path,eh.fn,groi2); /* fn = filename of this game */ -  getdate(eh.y,tempm,tempd,groi); /* Day, month & year when the game was saved */ -  eh.d=tempd; eh.m=tempm; -  eh.desc=roomname; /* Description of game (same as in Avaricius!) */ -  eh.len=sizeof(dna); /* Length of DNA. */ +		fsplit(name, path, eh.fn, groi2); /* fn = filename of this game */ +		getdate(eh.y, tempm, tempd, groi); /* Day, month & year when the game was saved */ +		eh.d = tempd; +		eh.m = tempm; +		eh.desc = roomname; /* Description of game (same as in Avaricius!) */ +		eh.len = sizeof(dna); /* Length of DNA. */ -  /* Quick reference & miscellaneous */ +		/* Quick reference & miscellaneous */ -  eh.saves=dna.saves; /* no. of times this game has been saved */ -  eh.cash=dna.pence; /* contents of your wallet in numerical form */ -  eh.money=lsd(); /* ditto in string form (eg 5/-, or 1 denarius)*/ -  eh.points=dna.score; /* your score */ +		eh.saves = dna.saves; /* no. of times this game has been saved */ +		eh.cash = dna.pence; /* contents of your wallet in numerical form */ +		eh.money = lsd(); /* ditto in string form (eg 5/-, or 1 denarius)*/ +		eh.points = dna.score; /* your score */ -  name=path+eh.fn+".ASG"; - } +		name = path + eh.fn + ".ASG"; +	} - assign(f,name); - /*$I-*/ - rewrite(f,1); - if (test_bug(ioresult))  return; +	assign(f, name); +	/*$I-*/ +	rewrite(f, 1); +	if (test_bug(ioresult))  return; - blockwrite(f,ednafirst,177); if (test_bug(ioresult))  return; - blockwrite(f,eh,sizeof(eh)); if (test_bug(ioresult))  return; - blockwrite(f,dna,sizeof(dna)); if (test_bug(ioresult))  return; +	blockwrite(f, ednafirst, 177); +	if (test_bug(ioresult))  return; +	blockwrite(f, eh, sizeof(eh)); +	if (test_bug(ioresult))  return; +	blockwrite(f, dna, sizeof(dna)); +	if (test_bug(ioresult))  return; - for( groi=1; groi <= numtr; groi ++) -  { triptype& with = tr[groi];  -   if (with.quick)  -   { -    blockwrite(f,groi,1); if (test_bug(ioresult))  return; -    savedata(f); if (test_bug(ioresult))  return; -   }} +	for (groi = 1; groi <= numtr; groi ++) { +		triptype &with = tr[groi]; +		if (with.quick) { +			blockwrite(f, groi, 1); +			if (test_bug(ioresult))  return; +			savedata(f); +			if (test_bug(ioresult))  return; +		} +	} - groi=177; blockwrite(f,groi,1); +	groi = 177; +	blockwrite(f, groi, 1); - blockwrite(f,times,sizeof(times)); /* Timeout.times: Timers. */ +	blockwrite(f, times, sizeof(times)); /* Timeout.times: Timers. */ -  if (test_bug(ioresult))  return; +	if (test_bug(ioresult))  return; - blockwrite(f,seq,sizeof(seq)); /* Sequencer information. */ +	blockwrite(f, seq, sizeof(seq)); /* Sequencer information. */ -  if (test_bug(ioresult))  return; +	if (test_bug(ioresult))  return; - for( groi=1; groi <= ttage; groi ++) -  blockwrite(f,ttwashere[1-1],16); +	for (groi = 1; groi <= ttage; groi ++) +		blockwrite(f, ttwashere[1 - 1], 16); -  if (test_bug(ioresult))  return; +	if (test_bug(ioresult))  return; - close(f); -  if (test_bug(ioresult))  return; - /*$I+*/ +	close(f); +	if (test_bug(ioresult))  return; +	/*$I+*/ - display(string('\6')+"Saved: "+'\22'+name+'.'); - enid_filename=name; +	display(string('\6') + "Saved: " + '\22' + name + '.'); +	enid_filename = name;  } -void loaderror(string x, char icon) -{ - if (holdthedawn)  - { -  holdthedawn=false; -  dawn(); - } - display(string('\7')+'\6'+'\23'+icon+'\26'+"Loading error:  "+"\r\r\22"+x); - bug=true; +void loaderror(string x, char icon) { +	if (holdthedawn) { +		holdthedawn = false; +		dawn(); +	} +	display(string('\7') + '\6' + '\23' + icon + '\26' + "Loading error:  " + "\r\r\22" + x); +	bug = true;  } -typedef array<1,4,char> fourtype; +typedef array<1, 4, char> fourtype; @@ -252,172 +282,171 @@ const fourtype avaricius_file = "Avvy";  void edna_load(string name)  { - untyped_file f; - ednahead eh; - byte fv; - byte io; - string path,fn,groi; - fourtype id4; +	untyped_file f; +	ednahead eh; +	byte fv; +	byte io; +	string path, fn, groi; +	fourtype id4; - word len2load; +	word len2load; - if (name=="")  - {                       /* No filename specified, so let's call the filer. */ -  name=do_filer(); -  if (name=="")  return;  /* STILL no filename, so they must have cancelled. */ - } +	if (name == "") { +		/* No filename specified, so let's call the filer. */ +		name = do_filer(); +		if (name == "")  return; /* STILL no filename, so they must have cancelled. */ +	} - bug=false; +	bug = false; - wait(); /* Put up hourglass pointer */ +	wait(); /* Put up hourglass pointer */ - fsplit(name,path,fn,groi); - name=path+fn+".ASG"; +	fsplit(name, path, fn, groi); +	name = path + fn + ".ASG"; - /* Load the file into memory */ +	/* Load the file into memory */ - /*$I-*/ - assign(f,name); - reset(f,1); +	/*$I-*/ +	assign(f, name); +	reset(f, 1); - io=ioresult; - if (io!=0)  -  switch (io) { -   case 2: loaderror("File not found!",'8'); break; -   case 3: loaderror("Directory not found!",'3'); break; -   default: loaderror(string("Error no.")+strf(io),'1'); -  } +	io = ioresult; +	if (io != 0) +		switch (io) { +		case 2: +			loaderror("File not found!", '8'); +			break; +		case 3: +			loaderror("Directory not found!", '3'); +			break; +		default: +			loaderror(string("Error no.") + strf(io), '1'); +		} - if (bug)  return; +	if (bug)  return; - seek(f,11); blockread(f,id4,4); - if (id4==avaricius_file)  - { -  loaderror("That's an Avaricius file!",'1'); -  close(f); -  return; - } +	seek(f, 11); +	blockread(f, id4, 4); +	if (id4 == avaricius_file) { +		loaderror("That's an Avaricius file!", '1'); +		close(f); +		return; +	} - seek(f,177); /* bypass ednafirst */ +	seek(f, 177); /* bypass ednafirst */ - blockread(f,eh,sizeof(eh)); /* load ednahead */ +	blockread(f, eh, sizeof(eh)); /* load ednahead */ - /* Check ednahead for errors */ +	/* Check ednahead for errors */ - { -  if ((eh.id!=ednaid) || (eh.revision!=2))  loaderror("Not an EDNA file!",'7'); else -  if (eh.number!=2)  loaderror(string("That file was saved by ")+eh.shortname+'!','1'); - } +	{ +		if ((eh.id != ednaid) || (eh.revision != 2))  loaderror("Not an EDNA file!", '7'); +		else if (eh.number != 2)  loaderror(string("That file was saved by ") + eh.shortname + '!', '1'); +	} - if (bug)  - { -  close(f); -  return; - } +	if (bug) { +		close(f); +		return; +	} - len2load=eh.len; +	len2load = eh.len; - if (eh.len!=(cardinal)sizeof(dna))  - { -  if (holdthedawn)  -  { -   holdthedawn=false; -   dawn(); -  } -  display("\233\26Warning: \3\rEDNA size doesn't match.\f"); -  if (eh.len>(cardinal)sizeof(dna))  -   len2load=sizeof(dna); /* BIGGER than ours */ -  else fillchar(dna,sizeof(dna),'\0'); /* Otherwise, smaller. */ - } +	if (eh.len != (cardinal)sizeof(dna)) { +		if (holdthedawn) { +			holdthedawn = false; +			dawn(); +		} +		display("\233\26Warning: \3\rEDNA size doesn't match.\f"); +		if (eh.len > (cardinal)sizeof(dna)) +			len2load = sizeof(dna); /* BIGGER than ours */ +		else fillchar(dna, sizeof(dna), '\0'); /* Otherwise, smaller. */ +	} - blockread(f,dna,len2load); +	blockread(f, dna, len2load); - for( fv=1; fv <= numtr; fv ++) -  { triptype& with = tr[fv];  -  if (with.quick)  done();} /* Deallocate sprite */ +	for (fv = 1; fv <= numtr; fv ++) { +		triptype &with = tr[fv]; +		if (with.quick)  done(); +	} /* Deallocate sprite */ - do { -  blockread(f,fv,1); -  if (fv!=177)  tr[fv].loaddata(f); - } while (!(fv==177)); +	do { +		blockread(f, fv, 1); +		if (fv != 177)  tr[fv].loaddata(f); +	} while (!(fv == 177)); - blockread(f,times,sizeof(times)); /* Timeout.times: Timers. */ +	blockread(f, times, sizeof(times)); /* Timeout.times: Timers. */ - blockread(f,seq,sizeof(seq)); /* Sequencer information. */ +	blockread(f, seq, sizeof(seq)); /* Sequencer information. */ - close(f); +	close(f); - seescroll=true;  /* This prevents display of the new sprites before the +	seescroll = true;  /* This prevents display of the new sprites before the    new picture is loaded. */ - if (holdthedawn)  - { -  holdthedawn=false; -  dawn(); - } +	if (holdthedawn) { +		holdthedawn = false; +		dawn(); +	} -  display(string('\6')+"Loaded: "+'\22'+name+'\3'+"\r\r"+eh.desc+"\r\r"+"saved on "+ -   expanddate(eh.d,eh.m,eh.y)+'.'); +	display(string('\6') + "Loaded: " + '\22' + name + '\3' + "\r\r" + eh.desc + "\r\r" + "saved on " + +	        expanddate(eh.d, eh.m, eh.y) + '.'); - forget_chunks(); +	forget_chunks(); - minor_redraw(); +	minor_redraw(); - whereis[pavalot]=dna.room; -/* showscore;*/ - alive=true; +	whereis[pavalot] = dna.room; +	/* showscore;*/ +	alive = true; - objectlist(); -/*$I+*/ +	objectlist(); +	/*$I+*/ - enid_filename=name; +	enid_filename = name;  }  void dir(string where); -static string path,groi; +static string path, groi; -static void showheader() -{ - display(string("Dir: ")+path+"\r\r\4"); +static void showheader() { +	display(string("Dir: ") + path + "\r\r\4");  }  void dir(string where) - /* OK, it worked in Avaricius, let's do it in Avalot! */ +/* OK, it worked in Avaricius, let's do it in Avalot! */  { - searchrec s; - byte count; +	searchrec s; +	byte count; - if ((where!="") && (!(set::of('\\',':', eos).has(where[length(where)]))))  -  where=where+'\\'; - fsplit(where,path,groi,groi); - path=path+"*.asg"; - count=0; +	if ((where != "") && (!(set::of('\\', ':', eos).has(where[length(where)])))) +		where = where + '\\'; +	fsplit(where, path, groi, groi); +	path = path + "*.asg"; +	count = 0; - findfirst(path,anyfile,s); - showheader(); +	findfirst(path, anyfile, s); +	showheader(); - while (doserror==0)  - { -  count += 1; -  if (count==11)  -  { -   display("\r\nPress Enter..."); -   showheader(); -   count=1; -  } +	while (doserror == 0) { +		count += 1; +		if (count == 11) { +			display("\r\nPress Enter..."); +			showheader(); +			count = 1; +		} -  display(s.name+"\r\4"); +		display(s.name + "\r\4"); -  findnext(s); - } +		findnext(s); +	} - if (count==0)  -  display("No files found!"); - else display("\nThat's all!"); +	if (count == 0) +		display("No files found!"); +	else display("\nThat's all!");  } @@ -425,183 +454,178 @@ void avvy_background()     /* Not really a filing procedure,   but it's only called just before edna_load, so I thought I'd put it   in Enid instead of, say, Lucerna. */  { -/* port[$3c4]:=2; port[$3ce]:=4; port[$3C5]:=1; port[$3CF]:=1; { Blue. }*/ -/* - asm -  mov dx,$3c4; mov al,2; out dx,al; { Set up the VGA to use the "blue" } -  mov dx,$3ce; mov al,4; out dx,al; { register. } -  mov dx,$3c5; mov al,1; out dx,al; -  mov dx,$3cf;           out dx,al; +	/* port[$3c4]:=2; port[$3ce]:=4; port[$3C5]:=1; port[$3CF]:=1; { Blue. }*/ +	/* +	 asm +	  mov dx,$3c4; mov al,2; out dx,al; { Set up the VGA to use the "blue" } +	  mov dx,$3ce; mov al,4; out dx,al; { register. } +	  mov dx,$3c5; mov al,1; out dx,al; +	  mov dx,$3cf;           out dx,al; -  mov bx,$A000; call far ptr @drawup; -  mov bx,$A400; call far ptr @drawup; +	  mov bx,$A000; call far ptr @drawup; +	  mov bx,$A400; call far ptr @drawup; -  jmp @the_end; +	  jmp @the_end; - @drawup: +	 @drawup: -  mov es,bx; { The segment to copy it to... } -  mov di,$370;  { The offset (10 pixels down, plus 1 offset.) } +	  mov es,bx; { The segment to copy it to... } +	  mov di,$370;  { The offset (10 pixels down, plus 1 offset.) } -  mov cx,10; -  mov ax,$AA4A; call far ptr @sameline; { Print "AVVY" } -  mov ax,$AEAA; call far ptr @sameline; -  mov ax,$A4EA; call far ptr @sameline; -  mov ax,$44A4; call far ptr @sameline; +	  mov cx,10; +	  mov ax,$AA4A; call far ptr @sameline; { Print "AVVY" } +	  mov ax,$AEAA; call far ptr @sameline; +	  mov ax,$A4EA; call far ptr @sameline; +	  mov ax,$44A4; call far ptr @sameline; -  mov cx,9; -  mov ax,$AAA4; call far ptr @sameline; { Print "YAVV" } -  mov ax,$AAEA; call far ptr @sameline; -  mov ax,$AA4E; call far ptr @sameline; -  mov ax,$444A; call far ptr @sameline; +	  mov cx,9; +	  mov ax,$AAA4; call far ptr @sameline; { Print "YAVV" } +	  mov ax,$AAEA; call far ptr @sameline; +	  mov ax,$AA4E; call far ptr @sameline; +	  mov ax,$444A; call far ptr @sameline; -  mov ax,$4AAA; call far ptr @sameline; { Print "VYAV" } -  mov ax,$AAAE; call far ptr @sameline; -  mov ax,$EAA4; call far ptr @sameline; -  mov ax,$A444; call far ptr @sameline; +	  mov ax,$4AAA; call far ptr @sameline; { Print "VYAV" } +	  mov ax,$AAAE; call far ptr @sameline; +	  mov ax,$EAA4; call far ptr @sameline; +	  mov ax,$A444; call far ptr @sameline; -  mov ax,$A4AA; call far ptr @sameline; { Print "VVYA" } -  mov ax,$EAAA; call far ptr @sameline; -  mov ax,$4EAA; call far ptr @sameline; -  mov ax,$4A44; call far ptr @sameline; +	  mov ax,$A4AA; call far ptr @sameline; { Print "VVYA" } +	  mov ax,$EAAA; call far ptr @sameline; +	  mov ax,$4EAA; call far ptr @sameline; +	  mov ax,$4A44; call far ptr @sameline; -  ret; +	  ret; -  { Replicate the same line many times. } +	  { Replicate the same line many times. } -  @sameline: -   { Requires: -      what to copy in AX, -      how many lines in CX, and -      original offset in DI. } -   push cx; -   push di; +	  @sameline: +	   { Requires: +	      what to copy in AX, +	      how many lines in CX, and +	      original offset in DI. } +	   push cx; +	   push di; -   @samelineloop: +	   @samelineloop: -    push cx; -    mov cx,40; { No. of times to repeat it on one line. } +	    push cx; +	    mov cx,40; { No. of times to repeat it on one line. } -    repz stosw; { Fast word-copying } +	    repz stosw; { Fast word-copying } -    pop cx; +	    pop cx; -    add di,1200; { The next one will be 16 lines down. } +	    add di,1200; { The next one will be 16 lines down. } -   loop @samelineloop; -   pop di; -   add di,80; -   pop cx; +	   loop @samelineloop; +	   pop di; +	   add di,80; +	   pop cx; -   ret; +	   ret; -  @the_end: - end; -*/ -blitfix(); +	  @the_end: +	 end; +	*/ +	blitfix();  } -void to_sundry(sundry& sund) -{ - { -  sund.qenid_filename=enid_filename; -  sund.qsoundfx=soundfx; -  sund.qthinks=thinks; -  sund.qthinkthing=thinkthing; - } +void to_sundry(sundry &sund) { +	{ +		sund.qenid_filename = enid_filename; +		sund.qsoundfx = soundfx; +		sund.qthinks = thinks; +		sund.qthinkthing = thinkthing; +	}  } -void from_sundry(sundry sund) -{ - { -  enid_filename=sund.qenid_filename; -  soundfx=sund.qsoundfx; -  thinks=sund.qthinks; -  thinkthing=sund.qthinkthing; - } +void from_sundry(sundry sund) { +	{ +		enid_filename = sund.qenid_filename; +		soundfx = sund.qsoundfx; +		thinks = sund.qthinks; +		thinkthing = sund.qthinkthing; +	}  } -void restore_dna() -{ - word here,fv; - sundry sund; - - move(mem[storage_seg*storage_ofs+3],dna,sizeof(dna)); - move(mem[storage_seg*storage_ofs+3+sizeof(dna)],times,sizeof(times)); - move(mem[storage_seg*storage_ofs+3+sizeof(dna)+sizeof(times)], -                                                 seq,sizeof(seq)); - move(mem[storage_seg*storage_ofs+3+sizeof(dna)+sizeof(times)+sizeof(seq)], -                                                 sund,sizeof(sund)); - from_sundry(sund); - - here=storage_ofs+3+sizeof(dna)+sizeof(times)+sizeof(seq)+sizeof(sund); - do { -  fv=mem[storage_seg*here]; here += 1; -  if (fv!=177)  tr[fv].load_data_from_mem(here); - } while (!(fv==177)); +void restore_dna() { +	word here, fv; +	sundry sund; + +	move(mem[storage_seg * storage_ofs + 3], dna, sizeof(dna)); +	move(mem[storage_seg * storage_ofs + 3 + sizeof(dna)], times, sizeof(times)); +	move(mem[storage_seg * storage_ofs + 3 + sizeof(dna) + sizeof(times)], +	     seq, sizeof(seq)); +	move(mem[storage_seg * storage_ofs + 3 + sizeof(dna) + sizeof(times) + sizeof(seq)], +	     sund, sizeof(sund)); +	from_sundry(sund); + +	here = storage_ofs + 3 + sizeof(dna) + sizeof(times) + sizeof(seq) + sizeof(sund); +	do { +		fv = mem[storage_seg * here]; +		here += 1; +		if (fv != 177)  tr[fv].load_data_from_mem(here); +	} while (!(fv == 177));  } -void edna_reload() -{ +void edna_reload() { - restore_dna(); +	restore_dna(); - seescroll=true;  /* This prevents display of the new sprites before the +	seescroll = true;  /* This prevents display of the new sprites before the    new picture is loaded. */ - major_redraw(); +	major_redraw(); - whereis[pavalot]=dna.room; +	whereis[pavalot] = dna.room; - alive=true; +	alive = true; - objectlist(); +	objectlist(); - if (holdthedawn)  - { -  holdthedawn=false; -  dawn(); - } +	if (holdthedawn) { +		holdthedawn = false; +		dawn(); +	}  } -void back_to_bootstrap(byte what) -{ - byte fv; - word here; - sundry sund; - - mem[storage_seg*storage_ofs]=what;  /* Save the operation code. */ - to_sundry(sund); /* Save the sundry information. */ - - /* Save the DNA, times and sequencer info: */ - move(dna,mem[storage_seg*storage_ofs+3],sizeof(dna)); - move(times,mem[storage_seg*storage_ofs+3+sizeof(dna)],sizeof(times)); - move(seq,mem[storage_seg*storage_ofs+3+sizeof(dna)+sizeof(times)], -                                                 sizeof(seq)); - move(sund, -   mem[storage_seg*storage_ofs+3+sizeof(dna)+sizeof(times)+sizeof(seq)], -                                                     sizeof(sund)); - - here=storage_ofs+3+sizeof(dna)+sizeof(times)+sizeof(seq)+sizeof(sund); - - for( fv=1; fv <= numtr; fv ++) -  { triptype& with = tr[fv];  -   if (with.quick)  -   { -    mem[storage_seg*here]=fv; here += 1; -    save_data_to_mem(here); -   }} -  mem[storage_seg*here]=177; - - exit(77); /* Code to return to the Bootstrap. */ +void back_to_bootstrap(byte what) { +	byte fv; +	word here; +	sundry sund; + +	mem[storage_seg * storage_ofs] = what; /* Save the operation code. */ +	to_sundry(sund); /* Save the sundry information. */ + +	/* Save the DNA, times and sequencer info: */ +	move(dna, mem[storage_seg * storage_ofs + 3], sizeof(dna)); +	move(times, mem[storage_seg * storage_ofs + 3 + sizeof(dna)], sizeof(times)); +	move(seq, mem[storage_seg * storage_ofs + 3 + sizeof(dna) + sizeof(times)], +	     sizeof(seq)); +	move(sund, +	     mem[storage_seg * storage_ofs + 3 + sizeof(dna) + sizeof(times) + sizeof(seq)], +	     sizeof(sund)); + +	here = storage_ofs + 3 + sizeof(dna) + sizeof(times) + sizeof(seq) + sizeof(sund); + +	for (fv = 1; fv <= numtr; fv ++) { +		triptype &with = tr[fv]; +		if (with.quick) { +			mem[storage_seg * here] = fv; +			here += 1; +			save_data_to_mem(here); +		} +	} +	mem[storage_seg * here] = 177; + +	exit(77); /* Code to return to the Bootstrap. */  } -boolean there_was_a_problem() -{ - boolean there_was_a_problem_result; - there_was_a_problem_result=bug; - return there_was_a_problem_result; +boolean there_was_a_problem() { +	boolean there_was_a_problem_result; +	there_was_a_problem_result = bug; +	return there_was_a_problem_result;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/enid.h b/engines/avalanche/enid.h index d9f0a5416f..95b03b7749 100644 --- a/engines/avalanche/enid.h +++ b/engines/avalanche/enid.h @@ -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 diff --git a/engines/avalanche/filer.cpp b/engines/avalanche/filer.cpp index c96f445bde..b8e3c8bfe0 100644 --- a/engines/avalanche/filer.cpp +++ b/engines/avalanche/filer.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 @@ -36,64 +36,66 @@  namespace Avalanche {  struct windowtype { -              integer x1,y1,x2,y2; -              varying_string<20> title; +	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) */ - }; +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 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 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; +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; @@ -104,716 +106,847 @@ 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 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); +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); - } +	/*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 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(); +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])); - } +{ +	; +	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); +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; - char r; +	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. */ +	/* 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; - } +	if ((descs[which][1] == '*') || (descs[which][1] == '(')) { +		;     /* 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. */ - setfillstyle(1,1); bar(2,2,637,197); /* Interesting information coming up! */ +	setfillstyle(1, 1); +	bar(2, 2, 637, 197); /* Interesting information coming up! */ - {; -  display(2,"Saved by:", eh.game); -  display(3,"version:", eh.verstr); +	{ +		; +		display(2, "Saved by:", eh.game); +		display(3, "version:", eh.verstr); -/*  display(4,'under', os);*/ +		/*  display(4,'under', 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)); +	} - shbox(500,177,650,200,"Press any key..."); - r=readkey(); +	shbox(500, 177, 650, 200, "Press any key..."); +	r = readkey(); - setfillstyle(1,1); bar(2,2,637,197); +	setfillstyle(1, 1); +	bar(2, 2, 637, 197);  }  void filer_help() - /* This gives general help. */ +/* This gives general help. */  { - char r; -; - outtextxy(100,100,"Just general help here."); - shbox(500,177,650,200,"Press any key..."); - r=readkey(); +	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); +	setfillstyle(1, 1); +	bar(2, 2, 637, 197);  }  void wipe() - /* This allows you to delete files. */ +/* 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(); +	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); +	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 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; +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])); - } +{ +	; +	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; +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 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 diff --git a/engines/avalanche/fileunit.h b/engines/avalanche/fileunit.h index 034d1e5914..e891ff90e2 100644 --- a/engines/avalanche/fileunit.h +++ b/engines/avalanche/fileunit.h @@ -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 diff --git a/engines/avalanche/filing.cpp b/engines/avalanche/filing.cpp index 51c9334b7d..78abec7e41 100644 --- a/engines/avalanche/filing.cpp +++ b/engines/avalanche/filing.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 @@ -41,132 +41,164 @@  namespace Avalanche { -const array<1,12,varying_string<6> > months =  - {{"Jan*","Feb*","March","April","May","June","July","August", -  "Sept&","Oct&","Nov&","Dec&"}}; -const string ednaid = string("TT")+'\261'+'\36'+'\1'+'\113'+'\261'+'\231'+'\261'; -const array<1,6,varying_string<7> > systems =  -  {{"DOS","Windows","OS/2","Mac","Amiga","ST"}}; +const array<1, 12, varying_string<6> > months = { +	{ +		"Jan*", "Feb*", "March", "April", "May", "June", "July", "August", +		"Sept&", "Oct&", "Nov&", "Dec&" +	} +}; +const string ednaid = string("TT") + '\261' + '\36' + '\1' + '\113' + '\261' + '\231' + '\261'; +const array<1, 6, varying_string<7> > systems = +{{"DOS", "Windows", "OS/2", "Mac", "Amiga", "ST"}};  struct edhead { /* 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 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) */ +	/* 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 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) */  }; -  /* Possible values of edhead.os: -     1 = DOS        4 = Mac -     2 = Windows    5 = Amiga -     3 = OS/2       6 = ST */ +/* Possible values of edhead.os: +   1 = DOS        4 = Mac +   2 = Windows    5 = Amiga +   3 = OS/2       6 = ST */  /*implementation*/  untyped_file f;  byte fv; -array<1,255,word> dna256; +array<1, 255, word> dna256;  boolean ok;  edhead e; -void info256(string x)       /* info on dna256 *.ASG files */ -{ - varying_string<40> describe; -; - assign(f,x); - /*$I-*/ reset(f,1); - seek(f,47); - blockread(f,describe,40); - blockread(f,dna256,sizeof(dna256)); - close(f); /*$I+*/ - {; -  e.revision=1; -  e.game="Denarius Avaricius Sextus"; -  e.shortname="Avaricius"; -  e.number=1; -  e.verstr="[?]"; -  e.filename="AVVY.EXE"; -  e.os=1; /* Dos */ -  e.fn=x; -  e.d=dna256[7]; e.m=dna256[8]; e.y=dna256[9]; -  e.desc=describe; -  e.len=512; -  e.saves=dna256[6]; -  e.cash=dna256[30]; -  e.money=strf(e.cash)+" denari"; -  if (e.cash==1)  e.money=e.money+"us"; else e.money=e.money+'i'; -  e.points=dna256[36]; - } +void info256(string x) {     /* info on dna256 *.ASG files */ +	varying_string<40> describe; +	; +	assign(f, x); +	/*$I-*/ reset(f, 1); +	seek(f, 47); +	blockread(f, describe, 40); +	blockread(f, dna256, sizeof(dna256)); +	close(f); /*$I+*/ +	{ +		; +		e.revision = 1; +		e.game = "Denarius Avaricius Sextus"; +		e.shortname = "Avaricius"; +		e.number = 1; +		e.verstr = "[?]"; +		e.filename = "AVVY.EXE"; +		e.os = 1; /* Dos */ +		e.fn = x; +		e.d = dna256[7]; +		e.m = dna256[8]; +		e.y = dna256[9]; +		e.desc = describe; +		e.len = 512; +		e.saves = dna256[6]; +		e.cash = dna256[30]; +		e.money = strf(e.cash) + " denari"; +		if (e.cash == 1)  e.money = e.money + "us"; +		else e.money = e.money + 'i'; +		e.points = dna256[36]; +	}  } -string enlarge(string x) -{string enlarge_result; -; - switch (x[length(x)]) { -  case '*': {; x[0] -= 1; x=x+"uary"; } break; -  case '&': {; x[0] -= 1; x=x+"ember"; } break; - } - enlarge_result=x; -return enlarge_result; +string enlarge(string x) { +	string enlarge_result; +	; +	switch (x[length(x)]) { +	case '*': { +		; +		x[0] -= 1; +		x = x + "uary"; +	} +	break; +	case '&': { +		; +		x[0] -= 1; +		x = x + "ember"; +	} +	break; +	} +	enlarge_result = x; +	return enlarge_result;  } -string th(byte x) -{ -    varying_string<4> n; -string th_result; -; - n=strf(x); - switch (x) { -  case 1:case 21:case 31: n=n+"st"; break; -  case 2:case 22: n=n+"nd"; break; -  case 3:case 23: n=n+"rd"; break; -  default: n=n+"th"; - } - th_result=n; -return th_result; +string th(byte x) { +	varying_string<4> n; +	string th_result; +	; +	n = strf(x); +	switch (x) { +	case 1: +	case 21: +	case 31: +		n = n + "st"; +		break; +	case 2: +	case 22: +		n = n + "nd"; +		break; +	case 3: +	case 23: +		n = n + "rd"; +		break; +	default: +		n = n + "th"; +	} +	th_result = n; +	return th_result;  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - info256("t:justb4.asg"); - - {; -  output << "DNA coding: "; -  switch (e.revision) { -   case 1: output << "dna256" << NL; break; -   case 2: output << "E.D.N.A." << NL; break; -   default: output << "Unknown!" << NL; -  } -  output << "Filename: " << e.game << " (version " << e.verstr << ')' << NL; -  output << "Description: " << e.desc << NL; -  output << "Cash: " << e.money << NL; -  output << "Score: " << e.points << NL; -  output << "Date: " << th(e.d) << ' ' << enlarge(months[e.m]) << ' ' << e.y << NL; -  output << "Number of saves: " << e.saves << NL; - } -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	info256("t:justb4.asg"); + +	{ +		; +		output << "DNA coding: "; +		switch (e.revision) { +		case 1: +			output << "dna256" << NL; +			break; +		case 2: +			output << "E.D.N.A." << NL; +			break; +		default: +			output << "Unknown!" << NL; +		} +		output << "Filename: " << e.game << " (version " << e.verstr << ')' << NL; +		output << "Description: " << e.desc << NL; +		output << "Cash: " << e.money << NL; +		output << "Score: " << e.points << NL; +		output << "Date: " << th(e.d) << ' ' << enlarge(months[e.m]) << ' ' << e.y << NL; +		output << "Number of saves: " << e.saves << NL; +	} +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/folktemp.cpp b/engines/avalanche/folktemp.cpp index 4745d959d0..03da49f375 100644 --- a/engines/avalanche/folktemp.cpp +++ b/engines/avalanche/folktemp.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 @@ -33,14 +33,17 @@ namespace Avalanche {  const integer picsize = 966;  const integer number_of_objects = 19; -const array<1,65,char> thinks_header =  - string("This is an Avalot file, which is subject to copyright. Have fun.")+'\32'; +const array<1, 65, char> thinks_header = +    string("This is an Avalot file, which is subject to copyright. Have fun.") + '\32'; -const array<0,19,byte> order =  - {{ 4, 19,  1, 18, 15,  9, 12, 13, 17, 10,  2,  6,  3,  5,  7, 14, -  16, +const array<0, 19, byte> order = { +	{ +		4, 19,  1, 18, 15,  9, 12, 13, 17, 10,  2,  6,  3,  5,  7, 14, +		16, -   0, 11,  8}}; +		0, 11,  8 +	} +};  /*   pAvalot=#150; pSpludwick=#151; pCrapulus=#152; pDrDuck=#153; @@ -52,56 +55,64 @@ const array<0,19,byte> order =   pArkata=#175; pGeida=#176; pWiseWoman=#178;  */ -integer gd,gm; +integer gd, gm;  untyped_file f;  pointer p;  byte noo; -void load() -{ - byte a0 /*absolute $A000:1200*/; - byte bit; - untyped_file f; -; - assign(f,"d:folk.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); bit=getpixel(0,0); +void load() { +	byte a0 /*absolute $A000:1200*/; +	byte bit; +	untyped_file f; +	; +	assign(f, "d:folk.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); +	bit = getpixel(0, 0);  } -void get_one() -{; +void get_one() { +	; - gd=((order[noo] % 9)*70+10); - gm=((order[noo] / 9)*40+20); +	gd = ((order[noo] % 9) * 70 + 10); +	gm = ((order[noo] / 9) * 40 + 20); - getimage(gd,gm,gd+59,gm+29,p); - putimage(gd,gm,p,notput); - blockwrite(f,p,picsize); +	getimage(gd, gm, gd + 59, gm + 29, p); +	putimage(gd, gm, p, notput); +	blockwrite(f, p, picsize);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); - load(); noo=0; +	load(); +	noo = 0; - assign(f,"folk.avd"); - getmem(p,picsize); - rewrite(f,1); - blockwrite(f,thinks_header,65); +	assign(f, "folk.avd"); +	getmem(p, picsize); +	rewrite(f, 1); +	blockwrite(f, thinks_header, 65); - for( noo=0; noo <= number_of_objects; noo ++) -  get_one(); +	for (noo = 0; noo <= number_of_objects; noo ++) +		get_one(); - close(f); freemem(p,picsize); -return EXIT_SUCCESS; +	close(f); +	freemem(p, picsize); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/fontslid.cpp b/engines/avalanche/fontslid.cpp index 8955546b03..3173c6921c 100644 --- a/engines/avalanche/fontslid.cpp +++ b/engines/avalanche/fontslid.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 @@ -29,25 +29,31 @@  namespace Avalanche { -typedef matrix<'\0','\377',0,15,byte> fonttype; +typedef matrix < '\0', '\377', 0, 15, byte > fonttype;  fonttype font1;  byte fv;  char r;  file<fonttype> f; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - assign(f,"v:avalot.fnt"); reset(f); f >> font1; close(f); - for( r='\0'; r <= '\377'; r ++) - {; -  for( fv= 0; fv <=  3; fv ++) font1[r][fv]=(cardinal)font1[r][fv] >> 1; -  for( fv= 7; fv <=  8; fv ++) font1[r][fv]=font1[r][fv] << 1; -  for( fv= 9; fv <= 14; fv ++) font1[r][fv]=font1[r][fv] << 2; - } - assign(f,"v:avitalic.fnt"); rewrite(f); f << font1; close(f); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	assign(f, "v:avalot.fnt"); +	reset(f); +	f >> font1; +	close(f); +	for (r = '\0'; r <= '\377'; r ++) { +		; +		for (fv = 0; fv <=  3; fv ++) font1[r][fv] = (cardinal)font1[r][fv] >> 1; +		for (fv = 7; fv <=  8; fv ++) font1[r][fv] = font1[r][fv] << 1; +		for (fv = 9; fv <= 14; fv ++) font1[r][fv] = font1[r][fv] << 2; +	} +	assign(f, "v:avitalic.fnt"); +	rewrite(f); +	f << font1; +	close(f); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/frere.cpp b/engines/avalanche/frere.cpp index ddd622cb9a..257e2b342c 100644 --- a/engines/avalanche/frere.cpp +++ b/engines/avalanche/frere.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 @@ -29,23 +29,26 @@  namespace Avalanche { -typedef array<1,31,byte> tunetype; +typedef array<1, 31, byte> tunetype;  const integer lower = 0; - const integer same = 1; +const integer same = 1;  const integer higher = 2; -const array<1,12,char> keys = "QWERTYUIOP[]"; -const array<1,12,word> notes =  -{{196,220,247,262,294,330,350,392,440,494,523,587}}; +const array<1, 12, char> keys = "QWERTYUIOP[]"; +const array<1, 12, word> notes = +{{196, 220, 247, 262, 294, 330, 350, 392, 440, 494, 523, 587}}; -const tunetype tune =  -{{higher,higher,lower,same,higher,higher,lower,higher,higher,higher, - lower,higher,higher, - same,higher,lower,lower,lower,lower,higher,higher,lower,lower,lower, - lower,same,lower,higher,same,lower,higher}}; +const tunetype tune = { +	{ +		higher, higher, lower, same, higher, higher, lower, higher, higher, higher, +		lower, higher, higher, +		same, higher, lower, lower, lower, lower, higher, higher, lower, lower, lower, +		lower, same, lower, higher, same, lower, higher +	} +}; -byte this_one,last_one; +byte this_one, last_one;  char pressed; @@ -53,77 +56,82 @@ byte value;  tunetype played; -void store_(byte what) -{; +void store_(byte what) { +	; - move(played[2],played[1],sizeof(played)-1); +	move(played[2], played[1], sizeof(played) - 1); - played[31]=what; +	played[31] = what;  } -boolean they_match() -{ -    byte fv; -boolean they_match_result; -; +boolean they_match() { +	byte fv; +	boolean they_match_result; +	; - for( fv=1; fv <= sizeof(played); fv ++) -  if (played[fv]!=tune[fv])  -  {; -   they_match_result=false; -   return they_match_result; -  } +	for (fv = 1; fv <= sizeof(played); fv ++) +		if (played[fv] != tune[fv]) { +			; +			they_match_result = false; +			return they_match_result; +		} - they_match_result=true; +	they_match_result = true; -return they_match_result; +	return they_match_result;  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; - textattr=30; clrscr; output << NL; +	textattr = 30; +	clrscr; +	output << NL; - do { +	do { -  pressed=upcase(readkey()); +		pressed = upcase(readkey()); -  value=pos(pressed,keys); +		value = pos(pressed, keys); -  if (value>0)  -  {; +		if (value > 0) { +			; -   last_one=this_one; -   this_one=value; +			last_one = this_one; +			this_one = value; -   sound(notes[this_one]); -   delay(100); -   nosound; +			sound(notes[this_one]); +			delay(100); +			nosound; -   if (this_one<last_one)  -    store_(lower); else +			if (this_one < last_one) +				store_(lower); +			else -     if (this_one==last_one)  -      store_(same); else +				if (this_one == last_one) +					store_(same); +				else -       store_(higher); +					store_(higher); -   if (they_match())  -   {; -    textattr=94; clrscr; output << NL; -    output << string('\7')+"It matches!" << NL; -    input >> NL; -    exit(0); -   } +			if (they_match()) { +				; +				textattr = 94; +				clrscr; +				output << NL; +				output << string('\7') + "It matches!" << NL; +				input >> NL; +				exit(0); +			} -  } +		} - } while (!(pressed=='\33')); +	} while (!(pressed == '\33')); - output << "*** PROGRAM STOPPED! ***" << NL; -return EXIT_SUCCESS; +	output << "*** PROGRAM STOPPED! ***" << NL; +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/g-room.cpp b/engines/avalanche/g-room.cpp index c1e81e0525..8f84e53100 100644 --- a/engines/avalanche/g-room.cpp +++ b/engines/avalanche/g-room.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 @@ -32,410 +32,447 @@  namespace Avalanche { -const array<1,5,shortint> adjustment = {{7,0,7,7,7}}; +const array<1, 5, shortint> adjustment = {{7, 0, 7, 7, 7}}; -const array<0,3,byte> plane_to_use = {{2,2,2,3}}; +const array<0, 3, byte> plane_to_use = {{2, 2, 2, 3}}; -const array<1,5,byte> waveorder = {{5,1,2,3,4}}; +const array<1, 5, byte> waveorder = {{5, 1, 2, 3, 4}}; -const array<1,26,byte> glerkfade =  - {{1,1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,4,4,3,3,3,2,2,1}}; +const array<1, 26, byte> glerkfade = +{{1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, 3, 3, 2, 2, 1}}; -const array<1,18,byte> greldetfade = {{1,2,3,4,5,6,6,6,5,5,4,4,3,3,2,2,1,1}}; +const array<1, 18, byte> greldetfade = {{1, 2, 3, 4, 5, 6, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1}}; -enum flavourtype {ch_ega,ch_bgi,ch_natural,ch_two,ch_one, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, ch_natural, ch_two, ch_one, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size;  }; -typedef array<1,6,0,3,0,34,1,9,byte> glerktype; +typedef array<1, 6, 0, 3, 0, 34, 1, 9, byte> glerktype;  untyped_file f;  chunkblocktype cb; -array<1,5,2,3,0,65,0,25,byte> ghost; +array<1, 5, 2, 3, 0, 65, 0, 25, byte> ghost;  byte fv;  pointer memlevel; -byte y,yy,bit,xofs; +byte y, yy, bit, xofs; -array<0,1,pointer> eyes; +array<0, 1, pointer> eyes;  pointer exclamation; -array<1,6,pointer> aargh; -array<1,3,pointer> bat; -glerktype* glerk; -array<1,5,pointer> green_eyes; -matrix<1,6,false,true,pointer> greldet; +array<1, 6, pointer> aargh; +array<1, 3, pointer> bat; +glerktype *glerk; +array<1, 5, pointer> green_eyes; +matrix<1, 6, false, true, pointer> greldet; -array<1,6,pointtype> aargh_where; +array<1, 6, pointtype> aargh_where; -integer gd,gm; boolean gb; +integer gd, gm; +boolean gb;  byte glerkstage; -integer bat_x,bat_y; word bat_count; shortint aargh_count; +integer bat_x, bat_y; +word bat_count; +shortint aargh_count; -integer greldet_x,greldet_y; byte greldet_count; boolean red_greldet; +integer greldet_x, greldet_y; +byte greldet_count; +boolean red_greldet;  void plain_grab() - /* Just grabs the next one and puts it where it's told to. */ +/* Just grabs the next one and puts it where it's told to. */  { - integer xx,yy,xofs; -; - blockread(f,cb,sizeof(cb)); - -  switch (cb.flavour) { -   case ch_one: {; -            xofs=cb.x / 8; -            bit=3; -             for( yy=0; yy <= cb.yl; yy ++) -             {; -              port[0x3c4]=2; port[0x3ce]=4; -              port[0x3c5]=1 << bit; port[0x3cf]=bit; - -              blockread(f,mem[0xa000*(yy+cb.y)*80+xofs],cb.xl / 8); -             } -           } -           break; -   case ch_ega: {; -            xofs=cb.x / 8; -            bit=3; -            for( bit=0; bit <= 3; bit ++) -             for( yy=0; yy <= cb.yl; yy ++) -             {; -              port[0x3c4]=2; port[0x3ce]=4; -              port[0x3c5]=1 << bit; port[0x3cf]=bit; - -              blockread(f,mem[0xa000*(yy+cb.y)*80+xofs],cb.xl / 8); -             } -           } -           break; -  } +	integer xx, yy, xofs; +	; +	blockread(f, cb, sizeof(cb)); + +	switch (cb.flavour) { +	case ch_one: { +		; +		xofs = cb.x / 8; +		bit = 3; +		for (yy = 0; yy <= cb.yl; yy ++) { +			; +			port[0x3c4] = 2; +			port[0x3ce] = 4; +			port[0x3c5] = 1 << bit; +			port[0x3cf] = bit; + +			blockread(f, mem[0xa000 * (yy + cb.y) * 80 + xofs], cb.xl / 8); +		} +	} +	break; +	case ch_ega: { +		; +		xofs = cb.x / 8; +		bit = 3; +		for (bit = 0; bit <= 3; bit ++) +			for (yy = 0; yy <= cb.yl; yy ++) { +				; +				port[0x3c4] = 2; +				port[0x3ce] = 4; +				port[0x3c5] = 1 << bit; +				port[0x3cf] = bit; + +				blockread(f, mem[0xa000 * (yy + cb.y) * 80 + xofs], cb.xl / 8); +			} +	} +	break; +	}  } -void get_me(pointer& p) -{; - blockread(f,cb,sizeof(cb)); - /* Take it for granted that cb.flavour = ch_BGI! */ +void get_me(pointer &p) { +	; +	blockread(f, cb, sizeof(cb)); +	/* Take it for granted that cb.flavour = ch_BGI! */ - {; -  getmem(p,cb.size); -  blockread(f,p,cb.size); - } +	{ +		; +		getmem(p, cb.size); +		blockread(f, p, cb.size); +	}  } -void get_me_aargh(byte which) -{; - blockread(f,cb,sizeof(cb)); - /* Take it for granted that cb.flavour = ch_BGI! */ +void get_me_aargh(byte which) { +	; +	blockread(f, cb, sizeof(cb)); +	/* Take it for granted that cb.flavour = ch_BGI! */ - {; -  getmem(aargh[which],cb.size); -  blockread(f,aargh[which],cb.size); - } +	{ +		; +		getmem(aargh[which], cb.size); +		blockread(f, aargh[which], cb.size); +	} - { -  pointtype& with = aargh_where[which];  +	{ +		pointtype &with = aargh_where[which]; -  with.x=cb.x; -  with.y=cb.y; - } +		with.x = cb.x; +		with.y = cb.y; +	}  } -void wait(word how_long) -{ -    word i; char r; - - for( i=1; i <= how_long; i ++) -  if (keypressed())  -  { -   sound(6177); -   while (keypressed())  r=readkey(); -   delay(1); -   nosound; -  } else -   delay(1); +void wait(word how_long) { +	word i; +	char r; + +	for (i = 1; i <= how_long; i ++) +		if (keypressed()) { +			sound(6177); +			while (keypressed())  r = readkey(); +			delay(1); +			nosound; +		} else +			delay(1);  }  void do_bat(); -static byte batimage;  +static byte batimage;  static pointtype batsize; -static void super_blank() -{ - pointtype oldsize; +static void super_blank() { +	pointtype oldsize; - move(bat[batimage-1],oldsize,4); - bar(bat_x+batsize.x,bat_y,bat_x+oldsize.x,bat_y+oldsize.y); +	move(bat[batimage - 1], oldsize, 4); +	bar(bat_x + batsize.x, bat_y, bat_x + oldsize.x, bat_y + oldsize.y);  } -void do_bat() -{ - shortint dx,iy; - - bat_count += 1; - - if (odd(bat_count))  - { -  switch (bat_count) { -   case 1 ... 90: { dx=2; iy=1; batimage=1; } break; -   case 91 ... 240: { dx=1; iy=1; batimage=2; } break; -   case 241 ... 260: { dx=1; iy=4; batimage=3; } break; -  } - -  move(bat[batimage],batsize,4); - -  if ((bat_count==91) || (bat_count==241))  -   super_blank(); /* When the bat changes, blank out the old one. */ - -  bar(bat_x,bat_y,bat_x+batsize.x,bat_y+iy); -  bar(bat_x+batsize.x,bat_y,bat_x+batsize.x-dx,bat_y+batsize.y); - -  bat_x -= dx; bat_y += 1; -  putimage(bat_x,bat_y,bat[batimage],0); - } +void do_bat() { +	shortint dx, iy; + +	bat_count += 1; + +	if (odd(bat_count)) { +		switch (bat_count) { +		case 1 ... 90: { +			dx = 2; +			iy = 1; +			batimage = 1; +		} +		break; +		case 91 ... 240: { +			dx = 1; +			iy = 1; +			batimage = 2; +		} +		break; +		case 241 ... 260: { +			dx = 1; +			iy = 4; +			batimage = 3; +		} +		break; +		} + +		move(bat[batimage], batsize, 4); + +		if ((bat_count == 91) || (bat_count == 241)) +			super_blank(); /* When the bat changes, blank out the old one. */ + +		bar(bat_x, bat_y, bat_x + batsize.x, bat_y + iy); +		bar(bat_x + batsize.x, bat_y, bat_x + batsize.x - dx, bat_y + batsize.y); + +		bat_x -= dx; +		bat_y += 1; +		putimage(bat_x, bat_y, bat[batimage], 0); +	}  } -void big_green_eyes(byte how) -{ - putimage(330,103,green_eyes[how],0); - putimage(376,103,green_eyes[how],0); +void big_green_eyes(byte how) { +	putimage(330, 103, green_eyes[how], 0); +	putimage(376, 103, green_eyes[how], 0);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - if (paramstr(1)!="jsb")  exit(255); - gd=3; gm=0; initgraph(gd,gm,""); - fillchar(ghost,sizeof(ghost),'\0'); - - assign(f,"spooky.avd"); - reset(f,1); - seek(f,44); - - mark(memlevel); - - for( fv=1; fv <= 5; fv ++) - {; -  blockread(f,cb,sizeof(cb)); -  for( bit=2; bit <= 3; bit ++) -   for( y=0; y <= cb.yl; y ++) -    blockread(f,ghost[fv][bit][y],cb.xl / 8); - } - - get_me(eyes[0]); /* Get BGI-based ones */ - get_me(eyes[1]); - get_me(exclamation); - - plain_grab(); /* Grabs to screen (cobweb) */ - plain_grab(); /* Grabs to screen (Mark's signature) */ - plain_grab(); /* Grabs to screen (open door) */ - - for( fv=1; fv <= 3; fv ++) -  get_me(bat[fv]); - -/* new(glerk); - for fv:=1 to 5 do { Grab the Glerk. } - begin; -  blockread(f,cb,sizeof(cb)); -  for bit:=0 to 3 do -   for y:=0 to 34 do -    blockread(f,glerk^[fv,bit,y],cb.xl div 8); -  inc(gd,gm); - end; -*/ - - glerk = new glerktype; - - for( fv=1; fv <= 6; fv ++) -  {; -   blockread(f,cb,sizeof(cb)); -   bit=3; -   for( bit=0; bit <= 3; bit ++) -    for( yy=0; yy <= cb.yl; yy ++) -/*    begin; -     port[$3c4]:=2; port[$3ce]:=4; -     port[$3C5]:=1 shl bit; port[$3CF]:=bit;*/ - -     blockread(f,(*glerk)[fv][bit][yy],cb.xl / 8); -/*     move(glerk^[fv,bit,yy],mem[$A000:yy*80+177],xl div 8);*/ -/*     blockread(f,mem[$A000:yy*80+177],xl div 8);*/ - -/*    end;*/ -  } - - for( fv=1; fv <= 6; fv ++) get_me_aargh(fv); - for( fv=1; fv <= 5; fv ++) get_me(green_eyes[fv]); - for( gb=false; gb <= true; gb ++) -  for( fv=1; fv <= 6; fv ++) get_me(greldet[fv][gb]); - - close(f); - - /* Avvy walks over... */ - - setfillstyle(1,0); - glerkstage=0; bat_x=277; bat_y=40; bat_count=0; - - for( gd=500; gd >= 217; gd --) - {; -  if (set::of(range(22,27), eos).has((gd % 30)))  -  {; -   if ((gd % 30)==27)  bar(gd,135,gd+16,136); -   putimage(gd,136,eyes[0],0); -   putpixel(gd+16,137,0); -  } else -  {; -   if (gd % 30==21)  bar(gd,137,gd+17,138); - -   putimage(gd,135,eyes[0],0); -   putpixel(gd+16,136,0); /* eyes would leave a trail 1 pixel high behind them */ -  } - -  /* Plot the Glerk: */ -  if (gd % 10==0)  -  {; -   glerkstage += 1; -   if (glerkstage>26)  flush(); - -   for( gm=0; gm <= 34; gm ++) -    for( bit=0; bit <= 3; bit ++) -    {; -     port[0x3c4]=2; port[0x3ce]=4; -     port[0x3c5]=1 << bit; port[0x3cf]=bit; - -     move((*glerk)[glerkfade[glerkstage]][bit][gm], -      mem[0xa000*1177+gm*80],9); -    } -    bit=getpixel(0,0); -   } - -   do_bat(); - -   wait(15); - } - - setfillstyle(1,0); - bar(456,14,530,50); - - /* It descends... */ - - for( gm=-64; gm <= 103; gm ++) - {; -  bit=getpixel(0,0); - -  if (gm>0)  -   fillchar(mem[0xa000*(gm-1)*80],26,'\0'); - -  for( y=0; y <= 65; y ++) -   if ((y+gm)>=0)  -    for( bit=0; bit <= 3; bit ++) -     {; -      port[0x3c4]=2; port[0x3ce]=4; -      port[0x3c5]=1 << bit; port[0x3cf]=bit; - -      move(ghost[2+(abs(gm / 7) % 2)*3][plane_to_use[bit]][y], -       mem[0xa000*(y+gm)*80],26); -     } - -  wait(27); - } - - /* And waves... */ - - aargh_count=-14; - - for( gd=1; gd <= 4; gd ++) -  for( fv=1; fv <= 5; fv ++) -  {; - -   y=getpixel(0,0); - -   for( y=0; y <= 7; y ++) -    fillchar(mem[0xa000*7760+y*80],26,'\0'); - -   for( y=0; y <= 65; y ++) -    for( bit=0; bit <= 3; bit ++) -    {; -     port[0x3c4]=2; port[0x3ce]=4; -     port[0x3c5]=1 << bit; port[0x3cf]=bit; -     move(ghost[waveorder[fv]][plane_to_use[bit]][y], -      mem[0xa000*7760+(y+adjustment[fv])*80],26); -    } - -   aargh_count += 1; - -   if (aargh_count>0)  -    { pointtype& with = aargh_where[aargh_count];  -     putimage(with.x,with.y,aargh[aargh_count],0);} - -   wait(177); - } - - /* ! appears */ - - gd=getpixel(0,0); - putimage(246,127,exclamation,0); - wait(777); - bar(172, 78,347,111); /* erase "aargh" */ - - for( gm=5; gm >= 1; gm --) - { -  wait(377); -  big_green_eyes(gm); - } - bar(246,127,251,133); /* erase the "!" */ - - /* He hurries back. */ - - glerkstage=1; greldet_count=18; red_greldet=false; - - for( gd=217; gd <= 479; gd ++) - {; -  if (set::of(range(22,27), eos).has((gd % 30)))  -  {; -   if ((gd % 30)==22)  -    bar(gd+22,134,gd+38,137); -   putimage(gd+23,136,eyes[1],0); -   putpixel(gd+22,137,0); -  } else -  {; -   if (gd % 30==28)  -    bar(gd+22,135,gd+38,138); - -   putimage(gd+23,135,eyes[1],0); -   putpixel(gd+22,136,0); /* eyes would leave a trail 1 pixel high behind them */ -  } - -  /* Plot the Green Eyes: */ -  if (gd % 53==5)  -  {; -   big_green_eyes(glerkstage); -   glerkstage += 1; -  } - -  /* Plot the Greldet: */ - -  if (greldet_count==18)  -  {     /* A new greldet. */ -   greldet_x=Random(600); -   greldet_y=Random(80); -   greldet_count=0; -   red_greldet=! red_greldet; -  } - -  greldet_count += 1; -  putimage -   (greldet_x,greldet_y,greldet[greldetfade[greldet_count]][red_greldet],0); - -  wait(10); - } - - release(memlevel); - closegraph(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	if (paramstr(1) != "jsb")  exit(255); +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	fillchar(ghost, sizeof(ghost), '\0'); + +	assign(f, "spooky.avd"); +	reset(f, 1); +	seek(f, 44); + +	mark(memlevel); + +	for (fv = 1; fv <= 5; fv ++) { +		; +		blockread(f, cb, sizeof(cb)); +		for (bit = 2; bit <= 3; bit ++) +			for (y = 0; y <= cb.yl; y ++) +				blockread(f, ghost[fv][bit][y], cb.xl / 8); +	} + +	get_me(eyes[0]); /* Get BGI-based ones */ +	get_me(eyes[1]); +	get_me(exclamation); + +	plain_grab(); /* Grabs to screen (cobweb) */ +	plain_grab(); /* Grabs to screen (Mark's signature) */ +	plain_grab(); /* Grabs to screen (open door) */ + +	for (fv = 1; fv <= 3; fv ++) +		get_me(bat[fv]); + +	/* new(glerk); +	 for fv:=1 to 5 do { Grab the Glerk. } +	 begin; +	  blockread(f,cb,sizeof(cb)); +	  for bit:=0 to 3 do +	   for y:=0 to 34 do +	    blockread(f,glerk^[fv,bit,y],cb.xl div 8); +	  inc(gd,gm); +	 end; +	*/ + +	glerk = new glerktype; + +	for (fv = 1; fv <= 6; fv ++) { +		; +		blockread(f, cb, sizeof(cb)); +		bit = 3; +		for (bit = 0; bit <= 3; bit ++) +			for (yy = 0; yy <= cb.yl; yy ++) +				/*    begin; +				     port[$3c4]:=2; port[$3ce]:=4; +				     port[$3C5]:=1 shl bit; port[$3CF]:=bit;*/ + +				blockread(f, (*glerk)[fv][bit][yy], cb.xl / 8); +		/*     move(glerk^[fv,bit,yy],mem[$A000:yy*80+177],xl div 8);*/ +		/*     blockread(f,mem[$A000:yy*80+177],xl div 8);*/ + +		/*    end;*/ +	} + +	for (fv = 1; fv <= 6; fv ++) get_me_aargh(fv); +	for (fv = 1; fv <= 5; fv ++) get_me(green_eyes[fv]); +	for (gb = false; gb <= true; gb ++) +		for (fv = 1; fv <= 6; fv ++) get_me(greldet[fv][gb]); + +	close(f); + +	/* Avvy walks over... */ + +	setfillstyle(1, 0); +	glerkstage = 0; +	bat_x = 277; +	bat_y = 40; +	bat_count = 0; + +	for (gd = 500; gd >= 217; gd --) { +		; +		if (set::of(range(22, 27), eos).has((gd % 30))) { +			; +			if ((gd % 30) == 27)  bar(gd, 135, gd + 16, 136); +			putimage(gd, 136, eyes[0], 0); +			putpixel(gd + 16, 137, 0); +		} else { +			; +			if (gd % 30 == 21)  bar(gd, 137, gd + 17, 138); + +			putimage(gd, 135, eyes[0], 0); +			putpixel(gd + 16, 136, 0); /* eyes would leave a trail 1 pixel high behind them */ +		} + +		/* Plot the Glerk: */ +		if (gd % 10 == 0) { +			; +			glerkstage += 1; +			if (glerkstage > 26)  flush(); + +			for (gm = 0; gm <= 34; gm ++) +				for (bit = 0; bit <= 3; bit ++) { +					; +					port[0x3c4] = 2; +					port[0x3ce] = 4; +					port[0x3c5] = 1 << bit; +					port[0x3cf] = bit; + +					move((*glerk)[glerkfade[glerkstage]][bit][gm], +					     mem[0xa000 * 1177 + gm * 80], 9); +				} +			bit = getpixel(0, 0); +		} + +		do_bat(); + +		wait(15); +	} + +	setfillstyle(1, 0); +	bar(456, 14, 530, 50); + +	/* It descends... */ + +	for (gm = -64; gm <= 103; gm ++) { +		; +		bit = getpixel(0, 0); + +		if (gm > 0) +			fillchar(mem[0xa000 * (gm - 1) * 80], 26, '\0'); + +		for (y = 0; y <= 65; y ++) +			if ((y + gm) >= 0) +				for (bit = 0; bit <= 3; bit ++) { +					; +					port[0x3c4] = 2; +					port[0x3ce] = 4; +					port[0x3c5] = 1 << bit; +					port[0x3cf] = bit; + +					move(ghost[2 + (abs(gm / 7) % 2) * 3][plane_to_use[bit]][y], +					     mem[0xa000 * (y + gm) * 80], 26); +				} + +		wait(27); +	} + +	/* And waves... */ + +	aargh_count = -14; + +	for (gd = 1; gd <= 4; gd ++) +		for (fv = 1; fv <= 5; fv ++) { +			; + +			y = getpixel(0, 0); + +			for (y = 0; y <= 7; y ++) +				fillchar(mem[0xa000 * 7760 + y * 80], 26, '\0'); + +			for (y = 0; y <= 65; y ++) +				for (bit = 0; bit <= 3; bit ++) { +					; +					port[0x3c4] = 2; +					port[0x3ce] = 4; +					port[0x3c5] = 1 << bit; +					port[0x3cf] = bit; +					move(ghost[waveorder[fv]][plane_to_use[bit]][y], +					     mem[0xa000 * 7760 + (y + adjustment[fv]) * 80], 26); +				} + +			aargh_count += 1; + +			if (aargh_count > 0) { +				pointtype &with = aargh_where[aargh_count]; +				putimage(with.x, with.y, aargh[aargh_count], 0); +			} + +			wait(177); +		} + +	/* ! appears */ + +	gd = getpixel(0, 0); +	putimage(246, 127, exclamation, 0); +	wait(777); +	bar(172, 78, 347, 111); /* erase "aargh" */ + +	for (gm = 5; gm >= 1; gm --) { +		wait(377); +		big_green_eyes(gm); +	} +	bar(246, 127, 251, 133); /* erase the "!" */ + +	/* He hurries back. */ + +	glerkstage = 1; +	greldet_count = 18; +	red_greldet = false; + +	for (gd = 217; gd <= 479; gd ++) { +		; +		if (set::of(range(22, 27), eos).has((gd % 30))) { +			; +			if ((gd % 30) == 22) +				bar(gd + 22, 134, gd + 38, 137); +			putimage(gd + 23, 136, eyes[1], 0); +			putpixel(gd + 22, 137, 0); +		} else { +			; +			if (gd % 30 == 28) +				bar(gd + 22, 135, gd + 38, 138); + +			putimage(gd + 23, 135, eyes[1], 0); +			putpixel(gd + 22, 136, 0); /* eyes would leave a trail 1 pixel high behind them */ +		} + +		/* Plot the Green Eyes: */ +		if (gd % 53 == 5) { +			; +			big_green_eyes(glerkstage); +			glerkstage += 1; +		} + +		/* Plot the Greldet: */ + +		if (greldet_count == 18) { +			/* A new greldet. */ +			greldet_x = Random(600); +			greldet_y = Random(80); +			greldet_count = 0; +			red_greldet = ! red_greldet; +		} + +		greldet_count += 1; +		putimage +		(greldet_x, greldet_y, greldet[greldetfade[greldet_count]][red_greldet], 0); + +		wait(10); +	} + +	release(memlevel); +	closegraph(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/golden.cpp b/engines/avalanche/golden.cpp index ec20034f15..2ea9aec1a7 100644 --- a/engines/avalanche/golden.cpp +++ b/engines/avalanche/golden.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 @@ -30,156 +30,157 @@  namespace Avalanche { -const varying_string<255> song =  -string("Golden slumbers kiss your eyes/Smiles awake you when you rise/")+ -"Sleep, pretty Baron, do not cry/And I will sing a lullaby.%Care you "+ -"know not, therefore sleep/While I o'er you watch do keep;/Sleep now, "+ -"du Lustie, do not cry/And I will leave the castle.*Bye!"; +const varying_string<255> song = +    string("Golden slumbers kiss your eyes/Smiles awake you when you rise/") + +    "Sleep, pretty Baron, do not cry/And I will sing a lullaby.%Care you " + +    "know not, therefore sleep/While I o'er you watch do keep;/Sleep now, " + +    "du Lustie, do not cry/And I will leave the castle.*Bye!";  const integer scardcount = 13; -const array<0,scardcount-1,integer> soundcards =  -  {{1,2,6,3,4,5,8,9,10,7,7,7,7}}; +const array < 0, scardcount - 1, integer > soundcards = +{{1, 2, 6, 3, 4, 5, 8, 9, 10, 7, 7, 7, 7}}; -const array<1,5,byte> holding =  -{{ 24, /* 0 : 24 */ -64, /* 1 : 00 */ -128, /* 2 : 00 */ -152, /* 2 : 24 */ -170}};    /* 2 : 42 */ +const array<1, 5, byte> holding = { +	{ +		24, /* 0 : 24 */ +		64, /* 1 : 00 */ +		128, /* 2 : 00 */ +		152, /* 2 : 24 */ +		170 +	} +};    /* 2 : 42 */ -integer gd,gm; +integer gd, gm;  byte fv; -word* skellern; -word s,o; +word *skellern; +word s, o;  boolean firstverse;  word nexthangon;  boolean nomusic; -integer getsoundhardware(psoundcard scard) -{ -    integer sc,i,autosel,select; -    char ch; -    integer e; +integer getsoundhardware(psoundcard scard) { +	integer sc, i, autosel, select; +	char ch; +	integer e; -integer getsoundhardware_result; +	integer getsoundhardware_result;  Lagain: -  sc=detectgus(scard); -  if (sc!=0)  sc=detectpas(scard); -  if (sc!=0)  sc=detectaria(scard); -  if (sc!=0)  sc=detectsb(scard); - -  /* if no sound card found, zero scard */ -  if (sc!=0)  fillchar(scard,sizeof(tsoundcard),0); - -  autosel=-1; -/*  if sc=0 then -    for i:=0 to scardcount-1 do -      if scard^.ID=soundcards[i].ID then begin -        { Set auto selection mark } -        autosel:=i+1; -        break; -      end;*/ - -  /* Print the list of sound cards */ - -  val(paramstr(13),select,e); - -  /* Default entry? */ -  if (select==0)  select=autosel; -  if (select!=autosel)  { -    /* clear all assumptions */ -    sc=-1; -    fillchar(scard,sizeof(tsoundcard),0); -    scard->id=soundcards[select-1];  /* set correct ID */ -  } - -  /* Query I/O address */ -  if (scard->id==id_dac)  scard->ioport=0x378; - -  /* Read user input */ -  val(paramstr(15),i,e); - -  if (i!=0)  scard->ioport=i; -  if (sc!=1)    /* Not autodetected */ -    switch (scard->id) { -      case id_sb16: -      case id_pas16: -      case id_wss: -      case id_aria: -      case id_gus    : scard->samplesize=2; -      break;                            /* 16-bit card */ -      case id_sbpro: -      case id_pas: -      case id_pasplus: scard->stereo=true; -      break;                            /* enable stereo */ -      default: { -        scard->samplesize=1; -        scard->stereo=false; -      } -    } - -  if (scard->id!=id_dac)  { -    val(paramstr(17),i,e); - -    if (i!=0)  scard->dmairq=i; - -    val(paramstr(16),i,e); - -    if (i!=0)  scard->dmachannel=i; -  } else { -    /* Select correct DAC */ -    scard->maxrate=44100; -    if (select==11)  { -      scard->stereo=true; -      scard->dmachannel=1;    /* Special 'mark' */ -      scard->maxrate=60000; -    } else -    if (select==12)  { -      scard->stereo=true; -      scard->dmachannel=2; -      scard->maxrate=60000; -      if (scard->ioport==0)  scard->ioport=0x378; -    } else -    if (select==13)  { -      scard->dmachannel=0; -      scard->ioport=0x42;     /* Special 'mark' */ -      scard->maxrate=44100; -    } -  } - -/*    writeln('Your selection: ',select,' at ',scard^.ioPort, -            ' using IRQ ',scard^.dmaIRQ,' and DMA channel ',scard^.dmaChannel); -  readln;*/ - -  getsoundhardware_result=0; -return getsoundhardware_result; +	sc = detectgus(scard); +	if (sc != 0)  sc = detectpas(scard); +	if (sc != 0)  sc = detectaria(scard); +	if (sc != 0)  sc = detectsb(scard); + +	/* if no sound card found, zero scard */ +	if (sc != 0)  fillchar(scard, sizeof(tsoundcard), 0); + +	autosel = -1; +	/*  if sc=0 then +	    for i:=0 to scardcount-1 do +	      if scard^.ID=soundcards[i].ID then begin +	        { Set auto selection mark } +	        autosel:=i+1; +	        break; +	      end;*/ + +	/* Print the list of sound cards */ + +	val(paramstr(13), select, e); + +	/* Default entry? */ +	if (select == 0)  select = autosel; +	if (select != autosel)  { +		/* clear all assumptions */ +		sc = -1; +		fillchar(scard, sizeof(tsoundcard), 0); +		scard->id = soundcards[select - 1]; /* set correct ID */ +	} + +	/* Query I/O address */ +	if (scard->id == id_dac)  scard->ioport = 0x378; + +	/* Read user input */ +	val(paramstr(15), i, e); + +	if (i != 0)  scard->ioport = i; +	if (sc != 1)  /* Not autodetected */ +		switch (scard->id) { +		case id_sb16: +		case id_pas16: +		case id_wss: +		case id_aria: +		case id_gus    : +			scard->samplesize = 2; +			break;                            /* 16-bit card */ +		case id_sbpro: +		case id_pas: +		case id_pasplus: +			scard->stereo = true; +			break;                            /* enable stereo */ +		default: { +			scard->samplesize = 1; +			scard->stereo = false; +		} +		} + +	if (scard->id != id_dac)  { +		val(paramstr(17), i, e); + +		if (i != 0)  scard->dmairq = i; + +		val(paramstr(16), i, e); + +		if (i != 0)  scard->dmachannel = i; +	} else { +		/* Select correct DAC */ +		scard->maxrate = 44100; +		if (select == 11)  { +			scard->stereo = true; +			scard->dmachannel = 1;  /* Special 'mark' */ +			scard->maxrate = 60000; +		} else if (select == 12)  { +			scard->stereo = true; +			scard->dmachannel = 2; +			scard->maxrate = 60000; +			if (scard->ioport == 0)  scard->ioport = 0x378; +		} else if (select == 13)  { +			scard->dmachannel = 0; +			scard->ioport = 0x42;   /* Special 'mark' */ +			scard->maxrate = 44100; +		} +	} + +	/*    writeln('Your selection: ',select,' at ',scard^.ioPort, +	            ' using IRQ ',scard^.dmaIRQ,' and DMA channel ',scard^.dmaChannel); +	  readln;*/ + +	getsoundhardware_result = 0; +	return getsoundhardware_result;  } -byte here() -{ -  byte here_result; -  here_result=(ampgetpattern % 3)*64+ampgetrow; -  return here_result; +byte here() { +	byte here_result; +	here_result = (ampgetpattern % 3) * 64 + ampgetrow; +	return here_result;  } -void hold(word amount) -{ -  *skellern=0; -  do {; } while (!(*skellern>=amount)); +void hold(word amount) { +	*skellern = 0; +	do { +		; +	} while (!(*skellern >= amount));  } -void hangon(word forwhat) -{ -  if (nomusic)  -    hold(40); -  else -    do { -        if (keypressed())  exit(0); -    } while (!(here()>=holding[forwhat])); +void hangon(word forwhat) { +	if (nomusic) +		hold(40); +	else +		do { +			if (keypressed())  exit(0); +		} while (!(here() >= holding[forwhat]));  }  tsoundcard scard; @@ -188,277 +189,292 @@ tdds dds;  pmodule module;  tsdi_init sdi;  integer e, -bufsize; +        bufsize;  char ch;  boolean v86, -vdsok; -longint a,rate, -tempseg; +        vdsok; +longint a, rate, +        tempseg;  string answer;  pointer temp;  word flags;  word curch;  byte modulevolume; -array<0,4,tsampleinfo> sample; -array<0,31,word> voltable; - -int main(int argc, const char* argv[]) -{ -  pio_initialize(argc, argv); -  for( e=1; e <= paramcount; e ++) answer=paramstr(e); - - nomusic=paramstr(13)=='0'; - - if (! nomusic)  - { -    /* Read sound card information */ -    if (getsoundhardware(&scard)==-1)  exit(1); - - -    /* Initialize Timer Service */ -    tsinit; -    atexit(&tsclose); -    if (scard.id==id_gus)  { -      /* Initialize GUS player */ -      #ifndef DPMI -      scard.extrafield[2]=1;  /* GUS DMA transfer does not work in V86 */ -      #endif -      gusinit(&scard); -      atexit(&gusclose); - -      /* Initialize GUS heap manager */ -      gushminit; - -      /* Init CDI */ -      cdiinit; - -      /* Register GUS into CDI */ -      cdiregister(&cdi_gus,0,31); - -      /* Add GUS event player engine into Timer Service */ -      tsaddroutine(&gusinterrupt,gus_timer); -    } else { -      /* Initialize Virtual DMA Specification */ -      #ifndef DPMI -      vdsok=vdsinit==0; -      #else -      vdsok=false; -      #endif - -      fillchar(mcpstrc,sizeof(tmcpstruct),0); - -      /* Query for sampling rate */ -      val(paramstr(14),a,e); -      if (a>4000)  rate=a; else rate=21000; - -      /* Query for quality */ -      mcpstrc.options=mcp_quality; - -      switch (scard.id) { -        case id_sb     : { -                      sdi=sdi_sb; -                      scard.maxrate=22000; -                    } -                    break; -        case id_sbpro  : { -                      sdi=sdi_sbpro; -                      scard.maxrate=22000; -                    } -                    break; -        case id_pas: -        case id_pasplus: -        case id_pas16  : { -                      sdi=sdi_pas; -                      scard.maxrate=44100; -                    } -                    break; -        case id_sb16   : { -                      sdi=sdi_sb16; -                      scard.maxrate=44100; -                    } -                    break; -        case id_aria   : { -                      sdi=sdi_aria; -                      scard.maxrate=44100; -                    } -                    break; -        case id_wss    : { -                      sdi=sdi_wss; -                      scard.maxrate=48000; -                    } -                    break; -        #ifndef DPMI -        case id_dac    : sdi=sdi_dac; break; /* Only available in real mode */ -        #endif -      } - -      mcpinitsounddevice(sdi,&scard); -      a=mcp_tablesize; -      mcpstrc.reqsize=0; - -      /* Calculate mixing buffer size */ -      bufsize=(longint)(2800*(integer)(scard.samplesize) << (byte)(scard.stereo))* -               (longint)(rate) / (longint)(22000); -      mcpstrc.reqsize=0; -      if ((mcpstrc.options & mcp_quality)>0)  -        if (scard.samplesize==1)  a += mcp_qualitysize; else -          a=mcp_tablesize16+mcp_qualitysize16; -      if ((longint)(bufsize)+(longint)(a)>65500)  bufsize=longint(65500)-a; - -      #ifdef DPMI -      dpmiversion((byte)(e),(byte)(e),(byte)(e),flags); -      v86=(flags & 2)==0; -      #endif - -      /* Allocate volume table + mixing buffer */ -      #ifdef DPMI - -      /* In the V86 mode, the buffer must be allocated below 1M */ -      if (v86)  { -        tempseg=0; -        dpmiallocdos((a+longint(bufsize)) / longint(16)+longint(1),flags,(word)(tempseg)); -      } else { -      #endif -      getmem(temp,a+longint(bufsize)); -      if (temp==nil)  exit(2); -      #ifdef DPMI -      tempseg=seg(temp); -      } -      #else -      tempseg=seg(temp)+ofs(temp) / 16+1; -      #endif -      mcpstrc.bufferseg=tempseg; -      mcpstrc.bufferphysical=-1; - -      if (vdsok && (scard.id!=id_dac))  { -        dds.size=bufsize; -        dds.segment=tempseg; -        dds.offset=0; - -        /* Lock DMA buffer if VDS present */ -        if (vdslockdma(&dds)==0)  mcpstrc.bufferphysical=dds.address; -      } -      if (mcpstrc.bufferphysical==-1)  -        #ifdef DPMI -        mcpstrc.bufferphysical=dpmigetlinearaddr(tempseg); -        #else -        mcpstrc.bufferphysical=(longint)(tempseg) << 4; -        #endif - -      mcpstrc.buffersize=bufsize; -      mcpstrc.samplingrate=rate; -      /* Initialize Multi Channel Player */ -      if (mcpinit(&mcpstrc)!=0)  exit(3); -      atexit(&mcpclose); - -      /* Initialize Channel Distributor */ -      cdiinit; - -      /* Register MCP into CDI*/ -      cdiregister(&cdi_mcp,0,31); -    } - -    /* Try to initialize AMP */ -    if (ampinit(0)!=0)  exit(3); -    atexit(&close); - -    /* Hook AMP player routine into Timer Service */ -    tsaddroutine(&interrupt,amp_timer); - -    #ifndef DPMI -    /* If using DAC, then adjust DAC timer */ -    if (scard.id==id_dac)  setdactimer(tsgettimerrate); -    #endif - -    if (scard.id!=id_gus)  mcpstartvoice; else gusstartvoice; - -    /* Load an example AMF */ -    module=amploadmod("golden.mod",0); -    if (module==nil)  exit(4); - -    /* Is it MCP, Quality mode and 16-bit card? */ -    if ((scard.id!=id_gus) && ((mcpstrc.options & mcp_quality)>0) -       && (scard.samplesize==2))  { -      /* Open module+2 channels with amplified volumetable (4.7 gain) */ -      for( a=1; a <= 32; a ++) voltable[a-longint(1)]=a*longint(150) / longint(32); -      cdisetupchannels(0,module->channelcount+2,&voltable); -    } else { -      /* Open module+2 channels with regular volumetable */ -      cdisetupchannels(0,module->channelcount+2,nil); -    } - -    curch=module->channelcount; -    modulevolume=64; - -   /***/ ampplaymodule(module,0); - } - - val(paramstr(2),s,e); if (e!=0)  exit(0); - val(paramstr(3),o,e); if (e!=0)  exit(0); - skellern=ptr(s,o+1); - -  gd=3; gm=0; initgraph(gd,gm,""); - -  if (! nomusic)  do {; } while (!(ampgetrow>=10)); - -  setcolor(9); -  for( gd=0; gd <= 320; gd ++) -  { -    rectangle(320-gd,100-gd / 2,320+gd,100+gd / 2); -  } - - -  gd=50; gm=20; -  firstverse=true; - -  hangon(1); nexthangon=2; -  for( fv=1; fv <= 255; fv ++) -  { -    switch (song[fv]) { -      case '/': { -              gd=50; -              gm += 15; -              hangon(nexthangon); -              nexthangon += 1; -           } -           break; - -      case '%': { -              gd=50; -              gm += 35; -              if (nomusic)  -                hold(15); -              else -                do {; } while (!(ampgetpattern>2)); -              nexthangon=2; -              hangon(1); -           } -           break; - -      case '*': { -              gd += 24; -              hangon(5); -           } -           break; - -          default: { -                  setcolor(1); outtextxy(gd+1,gm+1,song[fv]); -                  setcolor(0); outtextxy( gd , gm ,song[fv]); -                  gd += 12; -               } -    } -    if (song[fv]==' ')  hold(1); -    if (keypressed())  exit(0); -  } - -  if (nomusic)  -    hold(25); -  else -    do {; } while (!(ampgetmodulestatus!=md_playing)); - -  setcolor(0); -  for( gd=320; gd >= 0; gd --) rectangle(320-gd,100-gd / 2,320+gd,100+gd / 2); -  return EXIT_SUCCESS; +array<0, 4, tsampleinfo> sample; +array<0, 31, word> voltable; + +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	for (e = 1; e <= paramcount; e ++) answer = paramstr(e); + +	nomusic = paramstr(13) == '0'; + +	if (! nomusic) { +		/* Read sound card information */ +		if (getsoundhardware(&scard) == -1)  exit(1); + + +		/* Initialize Timer Service */ +		tsinit; +		atexit(&tsclose); +		if (scard.id == id_gus)  { +			/* Initialize GUS player */ +#ifndef DPMI +			scard.extrafield[2] = 1; /* GUS DMA transfer does not work in V86 */ +#endif +			gusinit(&scard); +			atexit(&gusclose); + +			/* Initialize GUS heap manager */ +			gushminit; + +			/* Init CDI */ +			cdiinit; + +			/* Register GUS into CDI */ +			cdiregister(&cdi_gus, 0, 31); + +			/* Add GUS event player engine into Timer Service */ +			tsaddroutine(&gusinterrupt, gus_timer); +		} else { +			/* Initialize Virtual DMA Specification */ +#ifndef DPMI +			vdsok = vdsinit == 0; +#else +			vdsok = false; +#endif + +			fillchar(mcpstrc, sizeof(tmcpstruct), 0); + +			/* Query for sampling rate */ +			val(paramstr(14), a, e); +			if (a > 4000)  rate = a; +			else rate = 21000; + +			/* Query for quality */ +			mcpstrc.options = mcp_quality; + +			switch (scard.id) { +			case id_sb     : { +				sdi = sdi_sb; +				scard.maxrate = 22000; +			} +			break; +			case id_sbpro  : { +				sdi = sdi_sbpro; +				scard.maxrate = 22000; +			} +			break; +			case id_pas: +			case id_pasplus: +			case id_pas16  : { +				sdi = sdi_pas; +				scard.maxrate = 44100; +			} +			break; +			case id_sb16   : { +				sdi = sdi_sb16; +				scard.maxrate = 44100; +			} +			break; +			case id_aria   : { +				sdi = sdi_aria; +				scard.maxrate = 44100; +			} +			break; +			case id_wss    : { +				sdi = sdi_wss; +				scard.maxrate = 48000; +			} +			break; +#ifndef DPMI +			case id_dac    : +				sdi = sdi_dac; +				break; /* Only available in real mode */ +#endif +			} + +			mcpinitsounddevice(sdi, &scard); +			a = mcp_tablesize; +			mcpstrc.reqsize = 0; + +			/* Calculate mixing buffer size */ +			bufsize = (longint)(2800 * (integer)(scard.samplesize) << (byte)(scard.stereo)) * +			          (longint)(rate) / (longint)(22000); +			mcpstrc.reqsize = 0; +			if ((mcpstrc.options & mcp_quality) > 0) +				if (scard.samplesize == 1)  a += mcp_qualitysize; +				else +					a = mcp_tablesize16 + mcp_qualitysize16; +			if ((longint)(bufsize) + (longint)(a) > 65500)  bufsize = longint(65500) - a; + +#ifdef DPMI +			dpmiversion((byte)(e), (byte)(e), (byte)(e), flags); +			v86 = (flags & 2) == 0; +#endif + +			/* Allocate volume table + mixing buffer */ +#ifdef DPMI + +			/* In the V86 mode, the buffer must be allocated below 1M */ +			if (v86)  { +				tempseg = 0; +				dpmiallocdos((a + longint(bufsize)) / longint(16) + longint(1), flags, (word)(tempseg)); +			} else { +#endif +				getmem(temp, a + longint(bufsize)); +				if (temp == nil)  exit(2); +#ifdef DPMI +				tempseg = seg(temp); +			} +#else +				tempseg = seg(temp) + ofs(temp) / 16 + 1; +#endif +			mcpstrc.bufferseg = tempseg; +			mcpstrc.bufferphysical = -1; + +			if (vdsok && (scard.id != id_dac))  { +				dds.size = bufsize; +				dds.segment = tempseg; +				dds.offset = 0; + +				/* Lock DMA buffer if VDS present */ +				if (vdslockdma(&dds) == 0)  mcpstrc.bufferphysical = dds.address; +			} +			if (mcpstrc.bufferphysical == -1) +#ifdef DPMI +				mcpstrc.bufferphysical = dpmigetlinearaddr(tempseg); +#else +				mcpstrc.bufferphysical = (longint)(tempseg) << 4; +#endif + +			mcpstrc.buffersize = bufsize; +			mcpstrc.samplingrate = rate; +			/* Initialize Multi Channel Player */ +			if (mcpinit(&mcpstrc) != 0)  exit(3); +			atexit(&mcpclose); + +			/* Initialize Channel Distributor */ +			cdiinit; + +			/* Register MCP into CDI*/ +			cdiregister(&cdi_mcp, 0, 31); +		} + +		/* Try to initialize AMP */ +		if (ampinit(0) != 0)  exit(3); +		atexit(&close); + +		/* Hook AMP player routine into Timer Service */ +		tsaddroutine(&interrupt, amp_timer); + +#ifndef DPMI +		/* If using DAC, then adjust DAC timer */ +		if (scard.id == id_dac)  setdactimer(tsgettimerrate); +#endif + +		if (scard.id != id_gus)  mcpstartvoice; +		else gusstartvoice; + +		/* Load an example AMF */ +		module = amploadmod("golden.mod", 0); +		if (module == nil)  exit(4); + +		/* Is it MCP, Quality mode and 16-bit card? */ +		if ((scard.id != id_gus) && ((mcpstrc.options & mcp_quality) > 0) +		        && (scard.samplesize == 2))  { +			/* Open module+2 channels with amplified volumetable (4.7 gain) */ +			for (a = 1; a <= 32; a ++) voltable[a - longint(1)] = a * longint(150) / longint(32); +			cdisetupchannels(0, module->channelcount + 2, &voltable); +		} else { +			/* Open module+2 channels with regular volumetable */ +			cdisetupchannels(0, module->channelcount + 2, nil); +		} + +		curch = module->channelcount; +		modulevolume = 64; + +		/***/ ampplaymodule(module, 0); +	} + +	val(paramstr(2), s, e); +	if (e != 0)  exit(0); +	val(paramstr(3), o, e); +	if (e != 0)  exit(0); +	skellern = ptr(s, o + 1); + +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); + +	if (! nomusic)  do { +			; +		} while (!(ampgetrow >= 10)); + +	setcolor(9); +	for (gd = 0; gd <= 320; gd ++) { +		rectangle(320 - gd, 100 - gd / 2, 320 + gd, 100 + gd / 2); +	} + + +	gd = 50; +	gm = 20; +	firstverse = true; + +	hangon(1); +	nexthangon = 2; +	for (fv = 1; fv <= 255; fv ++) { +		switch (song[fv]) { +		case '/': { +			gd = 50; +			gm += 15; +			hangon(nexthangon); +			nexthangon += 1; +		} +		break; + +		case '%': { +			gd = 50; +			gm += 35; +			if (nomusic) +				hold(15); +			else +				do { +					; +				} while (!(ampgetpattern > 2)); +			nexthangon = 2; +			hangon(1); +		} +		break; + +		case '*': { +			gd += 24; +			hangon(5); +		} +		break; + +		default: { +			setcolor(1); +			outtextxy(gd + 1, gm + 1, song[fv]); +			setcolor(0); +			outtextxy(gd , gm , song[fv]); +			gd += 12; +		} +		} +		if (song[fv] == ' ')  hold(1); +		if (keypressed())  exit(0); +	} + +	if (nomusic) +		hold(25); +	else +		do { +			; +		} while (!(ampgetmodulestatus != md_playing)); + +	setcolor(0); +	for (gd = 320; gd >= 0; gd --) rectangle(320 - gd, 100 - gd / 2, 320 + gd, 100 + gd / 2); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/gyro.cpp b/engines/avalanche/gyro.cpp index 651c55b1f3..25b2c00797 100644 --- a/engines/avalanche/gyro.cpp +++ b/engines/avalanche/gyro.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 @@ -49,510 +49,562 @@  namespace Avalanche { -const array<'\1',numobjs,varying_string<15> > things =  - {{"Wine","Money-bag","Bodkin","Potion","Chastity belt", - "Crossbow bolt","Crossbow","Lute","Pilgrim's badge","Mushroom","Key", - "Bell","Scroll","Pen","Ink","Clothes","Habit","Onion"}}; - -const array<'\1',numobjs,char> thingchar = "WMBParCLguKeSnIohn"; /* V=Vinegar */ - -const array<'\1',numobjs,varying_string<17> > better =  - {{"some wine","your money-bag","your bodkin","a potion","a chastity belt", -  "a crossbow bolt","a crossbow","a lute","a pilgrim's badge","a mushroom", -  "a key","a bell","a scroll","a pen","some ink","your clothes","a habit", -  "an onion"}}; - -const array<'\1',numobjs,char> betterchar = "WMBParCLguKeSnIohn"; - -void newpointer(byte m) -{ - if (m==cmp)  return; cmp=m; - { -  ax=9; bx=(word)(mps[m].horzhotspot); cx=(word)(mps[m].verthotspot); -  es=seg(mps[m].mask); dx=ofs(mps[m].mask); - } - intr(0x33,r); - load_a_mouse(m); -} - -void wait()     /* makes hourglass */ -{ - newpointer(5); -} - -void on() -{ - if (set_of_enum(<null>)::of(m_yes,m_virtual, eos).has(visible))  return; - - r.ax=1; intr(0x33,r); visible=m_yes; - if (oncandopageswap)  - { -  r.ax=29; r.bx=cp; intr(0x33,r);  /* show mouse on current page */ - } -} - -void on_virtual() -{ - switch (visible) { -  case m_virtual: return; break; -  case m_yes: off(); break; - } - - visible=m_virtual; -} - -void off() -{ - switch (visible) { -  case m_no:case m_virtual : return; break; -  case m_yes : { r.ax=2; intr(0x33,r); } break; - } - visible=m_no; -} - -void off_virtual() -{ -    byte fv; - - if (visible!=m_virtual)  return; - - for( fv=0; fv <= 1; fv ++) - { -  setactivepage(fv); -  wipe_vmc(1-fv); - } - setactivepage(1-cp); visible=m_no; -} - -void xycheck()     /* only updates mx & my, not all other mouse vars */ -{ - r.ax=3; intr(0x33,r); /* getbuttonstatus */ - { -  keystatus=bx; -  mx=cx; my=dx; - } -} - -void hopto(integer x,integer y) /* Moves mouse pointer to x,y */ -{ - { -  ax=4; -  cx=x; -  dx=y; - } - intr(0x33,r); -} - -void check() -{ -           { ax=6; bx=0; } intr(0x33,r);         /* getbuttonreleaseinfo */ - { -  mrelease=bx; -  mrx=cx; mry=dx; - } -           { ax=5; bx=0; } intr(0x33,r);         /* getbuttonpressinfo */ - { -  mpress=bx; -  mpx=cx; mpy=dx; - } - xycheck(); /* just to complete the job. */ -} - -void note(word hertz) -{ - if (soundfx)  sound(hertz); -} - -void blip() -{ -    byte fv; - - for( fv=1; fv <= 7; fv ++) { sound(177+(fv*200) % 177); delay(1); } - nosound; -} - -string strf(longint x) -{ -    string q; - - string strf_result; - str(x,q); strf_result=q; - return strf_result; -} - -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; - - off(); - 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); - } - on(); -} - -void newgame()     /* This sets up the DNA for a completely new game. */ -{ -    byte gd,gm; - - for( gm=1; gm <= numtr; gm ++) -  { triptype& with = tr[gm];  -  if (with.quick)  done();} /* Deallocate sprite. Sorry, beta testers! */ - - tr[1].init(0,true); - alive=true; - - score=0;  /*for gd:=0 to 5 do which[gd]:=1;*/ - fillchar(dna,sizeof(dna),'\0'); natural(); - normal_edit(); mousepage(0); - dna.spare_evening="answer a questionnaire"; - dna.like2drink="beer"; - - { -  dna.pence=30; /* 2/6 */ dna.rw=stopped; dna.wearing=clothes; -  dna.obj[money]=true; dna.obj[bodkin]=true; dna.obj[bell]=true; dna.obj[clothes]=true; - } - - thinks='\2'; objectlist(); - ontoolbar=false; seescroll=false; - - ppos[0][1]=-177; /*tr[1].appear(300,117,right);*/ gd=0; - for( gd=0; gd <= 30; gd ++) for( gm=0; gm <= 1; gm ++) also[gd][gm]=nil; -/* fillchar(previous^,sizeof(previous^),#0); { blank out array } */ - him='\376'; her='\376'; it='\376'; last_person='\376'; /* = Pardon? */ - dna.pass_num=Random(30)+1; after_the_scroll=false; - dna.user_moves_avvy=false; doing_sprite_run=false; - dna.avvy_in_bed=true; enid_filename=""; - - for( gd=0; gd <= 1; gd ++) { cp=1-cp; getback(); } - - enterroom(1,1); new_game_for_trippancy(); - showscore(); - - standard_bar(); clock(); - sprite_run(); -} - -void click()     /* "Audio keyboard feedback" */ -{ - sound(7177); delay(1); nosound; -} - -void slowdown() -{ -/* repeat until TSkellern>=howlong; TSkellern:=0;*/ - do {; } while (!(memw[storage_seg*skellern]>=howlong)); - memw[storage_seg*skellern]=0; -} - -boolean flagset(char x) -{ - boolean flagset_result; - flagset_result=pos(x,flags)>0; - return flagset_result; -} - -void force_numlock() -{ - if ((locks & num)>0)  locks -= num; -} - -boolean pennycheck(word howmuchby) -{ - boolean pennycheck_result; - dna.pence -= howmuchby; - if (dna.pence<0)  - { -  dixi('Q',2); /* "you are now denariusless!" */ -  pennycheck_result=false; -  gameover(); - } else -  pennycheck_result=true; - return pennycheck_result; -} - -string getname(char whose) -{ - string getname_result; - if (whose<'\257')  getname_result=lads[whose]; else getname_result=lasses[whose]; - return getname_result; -} - -char getnamechar(char whose) -{ - char getnamechar_result; - if (whose<'\257')  getnamechar_result=ladchar[whose-1]; -  else getnamechar_result=lasschar[whose-1]; - return getnamechar_result; -} - -string get_thing(char which) -{ -  string get_thing_result; -  switch (which) { -   case wine: switch (dna.winestate) { -          case 1:case 4: get_thing_result=things[which]; break; -          case 3: get_thing_result="Vinegar"; break; -         } -         break; -   case onion: if (dna.rotten_onion)  -           get_thing_result="rotten onion"; -          else get_thing_result=things[which]; -          break; -   default: get_thing_result=things[which]; -  } -  return get_thing_result; -} - -char get_thingchar(char which) -{ -  char get_thingchar_result; -  switch (which) { -   case wine: if (dna.winestate==3)  get_thingchar_result='V'; /* Vinegar */ -          else get_thingchar_result=thingchar[which-1]; -          break; -   default: get_thingchar_result=thingchar[which-1]; -  } -  return get_thingchar_result; -} - -string get_better(char which) -{ - string get_better_result; - if (which>'\226')  which -= 149; -  switch (which) { -   case wine: switch (dna.winestate) { -          case 0:case 1:case 4: get_better_result=better[which]; break; -          case 3: get_better_result="some vinegar"; break; -         } -         break; -   case onion: if (dna.rotten_onion)  -           get_better_result="a rotten onion"; -           else if (dna.onion_in_vinegar)  -            get_better_result="a pickled onion (in the vinegar)"; -             else get_better_result=better[which]; -             break; -   default: -     if ((which<numobjs) && (which>'\0'))  -        get_better_result=better[which]; else -        get_better_result=""; -  } - return get_better_result; +const array < '\1', numobjs, varying_string<15> > things = { +	{ +		"Wine", "Money-bag", "Bodkin", "Potion", "Chastity belt", +		"Crossbow bolt", "Crossbow", "Lute", "Pilgrim's badge", "Mushroom", "Key", +		"Bell", "Scroll", "Pen", "Ink", "Clothes", "Habit", "Onion" +	} +}; + +const array < '\1', numobjs, char > thingchar = "WMBParCLguKeSnIohn"; /* V=Vinegar */ + +const array < '\1', numobjs, varying_string<17> > better = { +	{ +		"some wine", "your money-bag", "your bodkin", "a potion", "a chastity belt", +		"a crossbow bolt", "a crossbow", "a lute", "a pilgrim's badge", "a mushroom", +		"a key", "a bell", "a scroll", "a pen", "some ink", "your clothes", "a habit", +		"an onion" +	} +}; + +const array < '\1', numobjs, char > betterchar = "WMBParCLguKeSnIohn"; + +void newpointer(byte m) { +	if (m == cmp)  return; +	cmp = m; +	{ +		ax = 9; +		bx = (word)(mps[m].horzhotspot); +		cx = (word)(mps[m].verthotspot); +		es = seg(mps[m].mask); +		dx = ofs(mps[m].mask); +	} +	intr(0x33, r); +	load_a_mouse(m); +} + +void wait() {   /* makes hourglass */ +	newpointer(5); +} + +void on() { +	if (set_of_enum(<null>)::of(m_yes, m_virtual, eos).has(visible))  return; + +	r.ax = 1; +	intr(0x33, r); +	visible = m_yes; +	if (oncandopageswap) { +		r.ax = 29; +		r.bx = cp; +		intr(0x33, r); /* show mouse on current page */ +	} +} + +void on_virtual() { +	switch (visible) { +	case m_virtual: +		return; +		break; +	case m_yes: +		off(); +		break; +	} + +	visible = m_virtual; +} + +void off() { +	switch (visible) { +	case m_no: +	case m_virtual : +		return; +		break; +	case m_yes : { +		r.ax = 2; +		intr(0x33, r); +	} +	break; +	} +	visible = m_no; +} + +void off_virtual() { +	byte fv; + +	if (visible != m_virtual)  return; + +	for (fv = 0; fv <= 1; fv ++) { +		setactivepage(fv); +		wipe_vmc(1 - fv); +	} +	setactivepage(1 - cp); +	visible = m_no; +} + +void xycheck() {   /* only updates mx & my, not all other mouse vars */ +	r.ax = 3; +	intr(0x33, r); /* getbuttonstatus */ +	{ +		keystatus = bx; +		mx = cx; +		my = dx; +	} +} + +void hopto(integer x, integer y) { /* Moves mouse pointer to x,y */ +	{ +		ax = 4; +		cx = x; +		dx = y; +	} +	intr(0x33, r); +} + +void check() { +	{ +		ax = 6; +		bx = 0; +	} +	intr(0x33, r);        /* getbuttonreleaseinfo */ +	{ +		mrelease = bx; +		mrx = cx; +		mry = dx; +	} +	{ +		ax = 5; +		bx = 0; +	} +	intr(0x33, r);        /* getbuttonpressinfo */ +	{ +		mpress = bx; +		mpx = cx; +		mpy = dx; +	} +	xycheck(); /* just to complete the job. */ +} + +void note(word hertz) { +	if (soundfx)  sound(hertz); +} + +void blip() { +	byte fv; + +	for (fv = 1; fv <= 7; fv ++) { +		sound(177 + (fv * 200) % 177); +		delay(1); +	} +	nosound; +} + +string strf(longint x) { +	string q; + +	string strf_result; +	str(x, q); +	strf_result = q; +	return strf_result; +} + +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; + +	off(); +	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); +	} +	on(); +} + +void newgame() {   /* This sets up the DNA for a completely new game. */ +	byte gd, gm; + +	for (gm = 1; gm <= numtr; gm ++) { +		triptype &with = tr[gm]; +		if (with.quick)  done(); +	} /* Deallocate sprite. Sorry, beta testers! */ + +	tr[1].init(0, true); +	alive = true; + +	score = 0; /*for gd:=0 to 5 do which[gd]:=1;*/ +	fillchar(dna, sizeof(dna), '\0'); +	natural(); +	normal_edit(); +	mousepage(0); +	dna.spare_evening = "answer a questionnaire"; +	dna.like2drink = "beer"; + +	{ +		dna.pence = 30; /* 2/6 */ dna.rw = stopped; +		dna.wearing = clothes; +		dna.obj[money] = true; +		dna.obj[bodkin] = true; +		dna.obj[bell] = true; +		dna.obj[clothes] = true; +	} + +	thinks = '\2'; +	objectlist(); +	ontoolbar = false; +	seescroll = false; + +	ppos[0][1] = -177; /*tr[1].appear(300,117,right);*/ gd = 0; +	for (gd = 0; gd <= 30; gd ++) for (gm = 0; gm <= 1; gm ++) also[gd][gm] = nil; +	/* fillchar(previous^,sizeof(previous^),#0); { blank out array } */ +	him = '\376'; +	her = '\376'; +	it = '\376'; +	last_person = '\376'; /* = Pardon? */ +	dna.pass_num = Random(30) + 1; +	after_the_scroll = false; +	dna.user_moves_avvy = false; +	doing_sprite_run = false; +	dna.avvy_in_bed = true; +	enid_filename = ""; + +	for (gd = 0; gd <= 1; gd ++) { +		cp = 1 - cp; +		getback(); +	} + +	enterroom(1, 1); +	new_game_for_trippancy(); +	showscore(); + +	standard_bar(); +	clock(); +	sprite_run(); +} + +void click() {   /* "Audio keyboard feedback" */ +	sound(7177); +	delay(1); +	nosound; +} + +void slowdown() { +	/* repeat until TSkellern>=howlong; TSkellern:=0;*/ +	do { +		; +	} while (!(memw[storage_seg * skellern] >= howlong)); +	memw[storage_seg * skellern] = 0; +} + +boolean flagset(char x) { +	boolean flagset_result; +	flagset_result = pos(x, flags) > 0; +	return flagset_result; +} + +void force_numlock() { +	if ((locks & num) > 0)  locks -= num; +} + +boolean pennycheck(word howmuchby) { +	boolean pennycheck_result; +	dna.pence -= howmuchby; +	if (dna.pence < 0) { +		dixi('Q', 2); /* "you are now denariusless!" */ +		pennycheck_result = false; +		gameover(); +	} else +		pennycheck_result = true; +	return pennycheck_result; +} + +string getname(char whose) { +	string getname_result; +	if (whose < '\257')  getname_result = lads[whose]; +	else getname_result = lasses[whose]; +	return getname_result; +} + +char getnamechar(char whose) { +	char getnamechar_result; +	if (whose < '\257')  getnamechar_result = ladchar[whose - 1]; +	else getnamechar_result = lasschar[whose - 1]; +	return getnamechar_result; +} + +string get_thing(char which) { +	string get_thing_result; +	switch (which) { +	case wine: +		switch (dna.winestate) { +		case 1: +		case 4: +			get_thing_result = things[which]; +			break; +		case 3: +			get_thing_result = "Vinegar"; +			break; +		} +		break; +	case onion: +		if (dna.rotten_onion) +			get_thing_result = "rotten onion"; +		else get_thing_result = things[which]; +		break; +	default: +		get_thing_result = things[which]; +	} +	return get_thing_result; +} + +char get_thingchar(char which) { +	char get_thingchar_result; +	switch (which) { +	case wine: +		if (dna.winestate == 3)  get_thingchar_result = 'V'; /* Vinegar */ +		else get_thingchar_result = thingchar[which - 1]; +		break; +	default: +		get_thingchar_result = thingchar[which - 1]; +	} +	return get_thingchar_result; +} + +string get_better(char which) { +	string get_better_result; +	if (which > '\226')  which -= 149; +	switch (which) { +	case wine: +		switch (dna.winestate) { +		case 0: +		case 1: +		case 4: +			get_better_result = better[which]; +			break; +		case 3: +			get_better_result = "some vinegar"; +			break; +		} +		break; +	case onion: +		if (dna.rotten_onion) +			get_better_result = "a rotten onion"; +		else if (dna.onion_in_vinegar) +			get_better_result = "a pickled onion (in the vinegar)"; +		else get_better_result = better[which]; +		break; +	default: +		if ((which < numobjs) && (which > '\0')) +			get_better_result = better[which]; +		else +			get_better_result = ""; +	} +	return get_better_result;  }  string f5_does() - /* This procedure determines what f5 does. */ -{ -  string f5_does_result; -  switch (dna.room) { -   case r__yours: -    { -     if (! dna.avvy_is_awake)  -     {     /* He's asleep, =>= wake up. */ -      f5_does_result=string(vb_wake)+"WWake up"; -      return f5_does_result; -     } - -     if (dna.avvy_in_bed)  -     {     /* In bed. => = get up. */ -      f5_does_result=string(vb_stand)+"GGet up"; -      return f5_does_result; -     } - -    } -    break; - -   case r__insidecardiffcastle: -    { -     if (dna.standing_on_dais)  -      f5_does_result=string(vb_climb)+"CClimb down"; -     else -      f5_does_result=string(vb_climb)+"CClimb up"; -     return f5_does_result; -    } -    break; - -   case r__nottspub: -    { -     if (dna.sitting_in_pub)  -      f5_does_result=string(vb_stand)+"SStand up"; -     else -      f5_does_result=string(vb_sit)+"SSit down"; -     return f5_does_result; -    } -    break; - -   case r__musicroom: -    if (infield(7))  -    { -     f5_does_result=string(vb_play)+"PPlay the harp"; -     return f5_does_result; -    } -    break; -  } - - f5_does_result=pardon; /* If all else fails... */ -  return f5_does_result; -} - -void plot_vmc(integer xx,integer yy, byte page_) -{ - if (visible!=m_virtual)  return; - { -  xx=xx+vmc.ofsx; if (xx<0)  xx=0; -  yy=yy+vmc.ofsy; if (yy<0)  yy=0; +/* This procedure determines what f5 does. */ +{ +	string f5_does_result; +	switch (dna.room) { +	case r__yours: { +		if (! dna.avvy_is_awake) { +			/* He's asleep, =>= wake up. */ +			f5_does_result = string(vb_wake) + "WWake up"; +			return f5_does_result; +		} + +		if (dna.avvy_in_bed) { +			/* In bed. => = get up. */ +			f5_does_result = string(vb_stand) + "GGet up"; +			return f5_does_result; +		} + +	} +	break; + +	case r__insidecardiffcastle: { +		if (dna.standing_on_dais) +			f5_does_result = string(vb_climb) + "CClimb down"; +		else +			f5_does_result = string(vb_climb) + "CClimb up"; +		return f5_does_result; +	} +	break; + +	case r__nottspub: { +		if (dna.sitting_in_pub) +			f5_does_result = string(vb_stand) + "SStand up"; +		else +			f5_does_result = string(vb_sit) + "SSit down"; +		return f5_does_result; +	} +	break; + +	case r__musicroom: +		if (infield(7)) { +			f5_does_result = string(vb_play) + "PPlay the harp"; +			return f5_does_result; +		} +		break; +	} + +	f5_does_result = pardon; /* If all else fails... */ +	return f5_does_result; +} + +void plot_vmc(integer xx, integer yy, byte page_) { +	if (visible != m_virtual)  return; +	{ +		xx = xx + vmc.ofsx; +		if (xx < 0)  xx = 0; +		yy = yy + vmc.ofsy; +		if (yy < 0)  yy = 0; -  setactivepage(1-cp); -  getimage(xx,yy,xx+15,yy+15,vmc.backpic[page_]); -  putimage(xx,yy,vmc.andpic,andput); -  putimage(xx,yy,vmc.xorpic,xorput); +		setactivepage(1 - cp); +		getimage(xx, yy, xx + 15, yy + 15, vmc.backpic[page_]); +		putimage(xx, yy, vmc.andpic, andput); +		putimage(xx, yy, vmc.xorpic, xorput); -/*  setcolor( 0); outtextxy(xx+8,yy+16,'Û'); outtextxy(xx,yy+16,'Û'); -  setcolor(11+page); -  outtextxy(xx+8,yy+16,chr(48+roomtime mod 10)); -  outtextxy(xx  ,yy+16,chr(48+(roomtime div 10) mod 10));*/ +		/*  setcolor( 0); outtextxy(xx+8,yy+16,'Û'); outtextxy(xx,yy+16,'Û'); +		  setcolor(11+page); +		  outtextxy(xx+8,yy+16,chr(48+roomtime mod 10)); +		  outtextxy(xx  ,yy+16,chr(48+(roomtime div 10) mod 10));*/ -  { -   pointtype& with1 = vmc.wherewas[page_];  +		{ +			pointtype &with1 = vmc.wherewas[page_]; -   with1.x=xx; -   with1.y=yy; -  } - } +			with1.x = xx; +			with1.y = yy; +		} +	}  } -void wipe_vmc(byte page_) -{ - if (visible!=m_virtual)  return; -  { pointtype& with1 = vmc.wherewas[page_];  -   if (with1.x!=maxint)  -    putimage(with1.x,with1.y,vmc.backpic[page_],0);} +void wipe_vmc(byte page_) { +	if (visible != m_virtual)  return; +	{ +		pointtype &with1 = vmc.wherewas[page_]; +		if (with1.x != maxint) +			putimage(with1.x, with1.y, vmc.backpic[page_], 0); +	}  } -void setup_vmc() -{ -    byte fv; +void setup_vmc() { +	byte fv; - { -  getmem(vmc.andpic,mouse_size); -  getmem(vmc.xorpic,mouse_size); +	{ +		getmem(vmc.andpic, mouse_size); +		getmem(vmc.xorpic, mouse_size); -  for( fv=0; fv <= 1; fv ++) -  { -   getmem(vmc.backpic[fv],mouse_size); -   vmc.wherewas[fv].x=maxint; -  } - } +		for (fv = 0; fv <= 1; fv ++) { +			getmem(vmc.backpic[fv], mouse_size); +			vmc.wherewas[fv].x = maxint; +		} +	}  } -void clear_vmc() -{ -    byte fv; +void clear_vmc() { +	byte fv; - for( fv=0; fv <= 1; fv ++) vmc.wherewas[fv].x=maxint; +	for (fv = 0; fv <= 1; fv ++) vmc.wherewas[fv].x = maxint;  } -void setminmaxhorzcurspos(word min,word max)  /* phew */ -{ - { -  ax=7; -  cx=min; -  dx=max; - } - intr(0x33,r); +void setminmaxhorzcurspos(word min, word max) { /* phew */ +	{ +		ax = 7; +		cx = min; +		dx = max; +	} +	intr(0x33, r);  } -void setminmaxvertcurspos(word min,word max) -{ - { -  ax=8;  /* A guess. In the book, 7 */ -  cx=min; -  dx=max; - } - intr(0x33,r); +void setminmaxvertcurspos(word min, word max) { +	{ +		ax = 8; /* A guess. In the book, 7 */ +		cx = min; +		dx = max; +	} +	intr(0x33, r);  } -void load_a_mouse(byte which) -{ -    untyped_file f; +void load_a_mouse(byte which) { +	untyped_file f; - assign(f,"mice.avd"); - reset(f,1); - seek(f,mouse_size*2*(which-1)+134); +	assign(f, "mice.avd"); +	reset(f, 1); +	seek(f, mouse_size * 2 * (which - 1) + 134); - { -  blockread(f,vmc.andpic,mouse_size); -  blockread(f,vmc.xorpic,mouse_size); -  close(f); -  { -   mp& with1 = mps[which];  +	{ +		blockread(f, vmc.andpic, mouse_size); +		blockread(f, vmc.xorpic, mouse_size); +		close(f); +		{ +			mp &with1 = mps[which]; -   vmc.ofsx=-with1.horzhotspot; -   vmc.ofsy=-with1.verthotspot; +			vmc.ofsx = -with1.horzhotspot; +			vmc.ofsy = -with1.verthotspot; -   setminmaxhorzcurspos(with1.horzhotspot+3,624+with1.horzhotspot); -   setminmaxvertcurspos(with1.verthotspot,199); -  } - } +			setminmaxhorzcurspos(with1.horzhotspot + 3, 624 + with1.horzhotspot); +			setminmaxvertcurspos(with1.verthotspot, 199); +		} +	}  } -void background(byte x) { setbkcolor(x); } +void background(byte x) { +	setbkcolor(x); +} -void hang_around_for_a_while() -{ -    byte fv; +void hang_around_for_a_while() { +	byte fv; - for( fv=1; fv <= 28; fv ++) slowdown(); +	for (fv = 1; fv <= 28; fv ++) slowdown();  } -boolean mouse_near_text() -{ - boolean mouse_near_text_result; - mouse_near_text_result=(my>144) && (my<188); - return mouse_near_text_result; +boolean mouse_near_text() { +	boolean mouse_near_text_result; +	mouse_near_text_result = (my > 144) && (my < 188); +	return mouse_near_text_result;  }  /* Super_Off and Super_On are two very useful procedures. Super_Off switches    the mouse cursor off, WHATEVER it's like. Super_On restores it again    afterwards. */ -void super_off() -{ - super_was_off=visible==m_no; - if (super_was_off)  return; +void super_off() { +	super_was_off = visible == m_no; +	if (super_was_off)  return; - super_was_virtual=visible==m_virtual; +	super_was_virtual = visible == m_virtual; - if (visible==m_virtual)  off_virtual(); else off(); +	if (visible == m_virtual)  off_virtual(); +	else off();  } -void super_on() -{ - if ((visible!=m_no) || (super_was_off))  return; +void super_on() { +	if ((visible != m_no) || (super_was_off))  return; - if (super_was_virtual)  on_virtual(); else on(); +	if (super_was_virtual)  on_virtual(); +	else on();  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/gyro.h b/engines/avalanche/gyro.h index 22d7544dab..d08bf86670 100644 --- a/engines/avalanche/gyro.h +++ b/engines/avalanche/gyro.h @@ -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 @@ -50,338 +50,415 @@ const integer mouse_size = 134;  typedef void(*proc)();  struct postype { -           word x,y,datapos; byte length; +	word x, y, datapos; +	byte length;  };  struct mp { /* mouse-pointer */ -      matrix<0,1,0,15,word> mask; -      integer horzhotspot,verthotspot; +	matrix<0, 1, 0, 15, word> mask; +	integer horzhotspot, verthotspot;  }; -struct dnatype { /* here goes... */ /* Ux, uy, & ww now all belong to Trip5 */ -           byte rw; /* Realway- just for convenience! */ -           byte carrying; /* how many objects you're carrying... */ -           array<'\1',numobjs,boolean> obj;   /* ...and which ones they are. */ -           integer score; /* your score, of course */ -           longint pence; /* your current amount of dosh */ -           byte room; /* your current room */ -           char wearing; /* what you're wearing */ -           byte swore; /* number of times you've sworn */ -           byte saves; /* number of times this game has been saved */ -           array<1,100,byte> rooms;     /* Add one to each every time +struct dnatype { +	/* here goes... */ /* Ux, uy, & ww now all belong to Trip5 */ +	byte rw; /* Realway- just for convenience! */ +	byte carrying; /* how many objects you're carrying... */ +	array < '\1', numobjs, boolean > obj; /* ...and which ones they are. */ +	integer score; /* your score, of course */ +	longint pence; /* your current amount of dosh */ +	byte room; /* your current room */ +	char wearing; /* what you're wearing */ +	byte swore; /* number of times you've sworn */ +	byte saves; /* number of times this game has been saved */ +	array<1, 100, byte> rooms;     /* Add one to each every time                                              you enter a room */ -           byte alcohol; /* Your blood alcohol level. */ -           byte playednim; /* How many times you've played Nim. */ -           boolean wonnim; /* Have you *won* Nim? (That's harder.) */ -           byte winestate; /* 0=good (Notts), 1=passable(Argent) ... 3=vinegar.*/ -           boolean cwytalot_gone; /* Has Cwytalot rushed off to Jerusalem yet?*/ - -           byte pass_num; /* Number of the password for this game. */ -           boolean ayles_is_awake; /* pretty obvious! */ -           byte drawbridge_open; /* Between 0 (shut) and 4 (open). */ -           byte avaricius_talk; /* How much Avaricius has said to you. */ -           boolean bought_onion; /* Have you bought an onion yet? */ -           boolean rotten_onion; /* And has it rotted? */ -           boolean onion_in_vinegar; /* Is the onion in the vinegar? */ - -           byte given2spludwick; /* 0 = nothing given, 1 = onion... */ -           byte brummie_stairs; /* Progression through the stairs trick. */ -           byte cardiff_things; /* Things you get asked in Cardiff. */ - -           boolean cwytalot_in_herts; /* Have you passed Cwytalot in Herts?*/ - -           boolean avvy_is_awake; /* Well? Is Avvy awake? (Screen 1 only.) */ -           boolean avvy_in_bed; /* True if Avvy's in bed, but awake. */ - -           boolean user_moves_avvy; /* If this is false, the user has no +	byte alcohol; /* Your blood alcohol level. */ +	byte playednim; /* How many times you've played Nim. */ +	boolean wonnim; /* Have you *won* Nim? (That's harder.) */ +	byte winestate; /* 0=good (Notts), 1=passable(Argent) ... 3=vinegar.*/ +	boolean cwytalot_gone; /* Has Cwytalot rushed off to Jerusalem yet?*/ + +	byte pass_num; /* Number of the password for this game. */ +	boolean ayles_is_awake; /* pretty obvious! */ +	byte drawbridge_open; /* Between 0 (shut) and 4 (open). */ +	byte avaricius_talk; /* How much Avaricius has said to you. */ +	boolean bought_onion; /* Have you bought an onion yet? */ +	boolean rotten_onion; /* And has it rotted? */ +	boolean onion_in_vinegar; /* Is the onion in the vinegar? */ + +	byte given2spludwick; /* 0 = nothing given, 1 = onion... */ +	byte brummie_stairs; /* Progression through the stairs trick. */ +	byte cardiff_things; /* Things you get asked in Cardiff. */ + +	boolean cwytalot_in_herts; /* Have you passed Cwytalot in Herts?*/ + +	boolean avvy_is_awake; /* Well? Is Avvy awake? (Screen 1 only.) */ +	boolean avvy_in_bed; /* True if Avvy's in bed, but awake. */ + +	boolean user_moves_avvy; /* If this is false, the user has no                                          control over Avvy's movements. */ -           byte dogfoodpos; /* Which way Dogfood's looking in the pub. */ +	byte dogfoodpos; /* Which way Dogfood's looking in the pub. */ -           boolean givenbadgetoiby; /* Have you given the badge to Iby yet? */ +	boolean givenbadgetoiby; /* Have you given the badge to Iby yet? */ -           boolean friar_will_tie_you_up; /* If you're going to get tied up. */ -           boolean tied_up; /* You ARE tied up! */ +	boolean friar_will_tie_you_up; /* If you're going to get tied up. */ +	boolean tied_up; /* You ARE tied up! */ -           char box_contents; /* 0 = money (sixpence), 254 = empty, any +	char box_contents; /* 0 = money (sixpence), 254 = empty, any               other number implies the contents of the box. */ -           boolean talked_to_crapulus; /* Pretty self-explanatory. */ +	boolean talked_to_crapulus; /* Pretty self-explanatory. */ -           byte jacques_awake; /* 0=asleep, 1=awake, 2=gets up, 3=gone. */ +	byte jacques_awake; /* 0=asleep, 1=awake, 2=gets up, 3=gone. */ -           boolean ringing_bells; /* Is Jacques ringing the bells? */ +	boolean ringing_bells; /* Is Jacques ringing the bells? */ -           boolean standing_on_dais; /* In room 71, inside Cardiff Castle. */ -           boolean taken_pen; /* Have you taken the pen (in Cardiff?) */ -           boolean arrow_triggered; /* And has the arrow been triggered? */ -           boolean arrow_in_the_door;  /* Did the arrow hit the wall? */ +	boolean standing_on_dais; /* In room 71, inside Cardiff Castle. */ +	boolean taken_pen; /* Have you taken the pen (in Cardiff?) */ +	boolean arrow_triggered; /* And has the arrow been triggered? */ +	boolean arrow_in_the_door;  /* Did the arrow hit the wall? */ -           varying_string<77> like2drink, -           favourite_song, -           worst_place_on_earth, -           spare_evening;            /* Personalisation str's */ +	varying_string<77> like2drink, +	               favourite_song, +	               worst_place_on_earth, +	               spare_evening;            /* Personalisation str's */ -           longint total_time; /* Your total time playing this game, in ticks.*/ +	longint total_time; /* Your total time playing this game, in ticks.*/ -           byte jumpstatus; /* Fixes how high you're jumping. */ +	byte jumpstatus; /* Fixes how high you're jumping. */ -           boolean mushroom_growing; /* Is the mushroom growing in 42? */ +	boolean mushroom_growing; /* Is the mushroom growing in 42? */ -           boolean spludwicks_here; /* Is Spludwick at home? */ +	boolean spludwicks_here; /* Is Spludwick at home? */ -           byte last_room; -           byte last_room_not_map; +	byte last_room; +	byte last_room_not_map; -           boolean crapulus_will_tell; /* Will Crapulus tell you about +	boolean crapulus_will_tell; /* Will Crapulus tell you about                          Spludwick being away? */ -           boolean enter_catacombs_from_lusties_room; -           boolean teetotal; /* Are we touching any more drinks? */ -           byte malagauche; /* Position of Malagauche. See Celer for more info. */ -           char drinking; /* What's he getting you? */ +	boolean enter_catacombs_from_lusties_room; +	boolean teetotal; /* Are we touching any more drinks? */ +	byte malagauche; /* Position of Malagauche. See Celer for more info. */ +	char drinking; /* What's he getting you? */ -           boolean entered_lusties_room_as_monk; +	boolean entered_lusties_room_as_monk; -           byte cat_x, cat_y;   /* XY coords in the catacombs. */ +	byte cat_x, cat_y;   /* XY coords in the catacombs. */ -           boolean avvys_in_the_cupboard; /* On screen 22. */ +	boolean avvys_in_the_cupboard; /* On screen 22. */ -           boolean geida_follows; /* Is Geida following you? */ +	boolean geida_follows; /* Is Geida following you? */ -           byte geida_spin,geida_time; /* For the making "Geida dizzy" joke. */ +	byte geida_spin, geida_time; /* For the making "Geida dizzy" joke. */ -           byte nextbell; /* For the ringing. */ +	byte nextbell; /* For the ringing. */ -           boolean geida_given_potion; /* Does Geida have the potion? */ -           boolean lustie_is_asleep; /* Is BDL asleep? */ +	boolean geida_given_potion; /* Does Geida have the potion? */ +	boolean lustie_is_asleep; /* Is BDL asleep? */ -           byte flip_to_where, flip_to_ped; /* For the sequencer. */ +	byte flip_to_where, flip_to_ped; /* For the sequencer. */ -           boolean been_tied_up; /* In r__Robins. */ +	boolean been_tied_up; /* In r__Robins. */ -           boolean sitting_in_pub; /* Are you sitting down in the pub? */ -           byte spurge_talk; /* Count for talking to Spurge. */ +	boolean sitting_in_pub; /* Are you sitting down in the pub? */ +	byte spurge_talk; /* Count for talking to Spurge. */ -           boolean met_avaroid; +	boolean met_avaroid; -           boolean taken_mushroom, -           given_pen_to_ayles, -           asked_dogfood_about_nim; +	boolean taken_mushroom, +	        given_pen_to_ayles, +	        asked_dogfood_about_nim;  };  struct pedtype { -           integer x,y; byte dir; +	integer x, y; +	byte dir;  };  struct magictype { -             byte op; /* one of the operations */ -             word data; /* data for them */ +	byte op; /* one of the operations */ +	word data; /* data for them */  };  class fieldtype {  public: -             integer x1,y1,x2,y2; +	integer x1, y1, x2, y2;  };  struct bytefield { -             byte x1,y1,x2,y2; +	byte x1, y1, x2, y2;  };  class linetype : public fieldtype {  public: -            byte col; +	byte col;  };  struct adxtype { -           varying_string<12> name; /* name of character */ -           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 */ +	varying_string<12> name; /* name of character */ +	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 */  }; -typedef matrix<'\0','\377',0,15,byte> raw; /* raw_font_type */ +typedef matrix < '\0', '\377', 0, 15, byte > raw; /* raw_font_type */ -enum controllers {cjoy,ckey, last_controllers}; +enum controllers {cjoy, ckey, last_controllers}; -typedef array<1,20,varying_string<77> > previoustype; +typedef array<1, 20, varying_string<77> > previoustype;  struct corridor_type { /* Decarations for the corridors. */ -                 word doors; /* Door styles are calc'ed from this word. +	word doors; /* Door styles are calc'ed from this word.                     Assign a different number to each one! */  };  struct demo_type { -             word delay; -             char key,extd; +	word delay; +	char key, extd;  };  struct quasiped_type { -                 byte whichped,fgc,room,bgc; char who; +	byte whichped, fgc, room, bgc; +	char who;  };  /* A quasiped defines how people who aren't sprites talk. For example,     quasiped "A" is Dogfood. The rooms aren't stored because I'm leaving     that to context. */ -typedef array<1,31,byte> tunetype; +typedef array<1, 31, byte> tunetype;  struct vmctype { /* Virtual Mouse Cursor */ -           pointer andpic,xorpic; -           array<0,1,pointer> backpic; -           array<0,1,pointtype> wherewas; -           byte picnumber; -           shortint ofsx,ofsy; +	pointer andpic, xorpic; +	array<0, 1, pointer> backpic; +	array<0, 1, pointtype> wherewas; +	byte picnumber; +	shortint ofsx, ofsy;  }; -struct sundry { /* Things which must be saved over a backtobootstrap, -                   outside DNA. */ -          pathstr qenid_filename; -          boolean qsoundfx; -          char qthinks; -          boolean qthinkthing; +struct sundry { +	/* Things which must be saved over a backtobootstrap, +	                   outside DNA. */ +	pathstr qenid_filename; +	boolean qsoundfx; +	char qthinks; +	boolean qthinkthing;  };  struct joysetup { -            word xmid,ymid,xmin,ymin,xmax,ymax; -            byte centre; /* Size of centre in tenths */ +	word xmid, ymid, xmin, ymin, xmax, ymax; +	byte centre; /* Size of centre in tenths */  };  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 in text format. */ - -          /* 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) */ +	/* 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 in text format. */ + +	/* 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) */  }; -  /* Possible values of edhead.os: -     1 = DOS        4 = Mac -     2 = Windows    5 = Amiga -     3 = OS/2       6 = ST -     7 = Archimedes */ +/* Possible values of edhead.os: +   1 = DOS        4 = Mac +   2 = Windows    5 = Amiga +   3 = OS/2       6 = ST +   7 = Archimedes */  const char vernum[] = "1.30";  const char copyright[] = "1995";  const integer thisvercode = 130; - /* as "vernum", but numerically & without the ".". */ +/* as "vernum", but numerically & without the ".". */  const integer thisgamecode = 2; /* Avalot's code number */  /* Objects you can hold: */ - const char wine = '\1'; const char money = '\2'; const char bodkin = '\3'; const char potion = '\4'; const char chastity = '\5'; const char bolt = '\6'; - const char crossbow = '\7'; const char lute = '\10'; const char badge = '\11'; const char mushroom = '\12'; const char key = '\13'; const char bell = '\14'; - const char prescription = '\15'; const char pen = '\16'; const char ink = '\17'; const char clothes = '\20'; const char habit = '\21'; const char onion = '\22'; +const char wine = '\1'; +const char money = '\2'; +const char bodkin = '\3'; +const char potion = '\4'; +const char chastity = '\5'; +const char bolt = '\6'; +const char crossbow = '\7'; +const char lute = '\10'; +const char badge = '\11'; +const char mushroom = '\12'; +const char key = '\13'; +const char bell = '\14'; +const char prescription = '\15'; +const char pen = '\16'; +const char ink = '\17'; +const char clothes = '\20'; +const char habit = '\21'; +const char onion = '\22';  /* People who hang around this game. */  /* Boys: */ -const char pavalot = '\226'; const char pspludwick = '\227'; const char pcrapulus = '\230'; const char pdrduck = '\231'; -const char pmalagauche = '\232'; const char pfriartuck = '\233'; const char probinhood = '\234'; const char pcwytalot = '\235'; -const char pdulustie = '\236'; const char pduke = '\237'; const char pdogfood = '\240'; const char ptrader = '\241'; -const char pibythneth = '\242'; const char payles = '\243'; const char pport = '\244'; const char pspurge = '\245'; const char pjacques = '\246'; +const char pavalot = '\226'; +const char pspludwick = '\227'; +const char pcrapulus = '\230'; +const char pdrduck = '\231'; +const char pmalagauche = '\232'; +const char pfriartuck = '\233'; +const char probinhood = '\234'; +const char pcwytalot = '\235'; +const char pdulustie = '\236'; +const char pduke = '\237'; +const char pdogfood = '\240'; +const char ptrader = '\241'; +const char pibythneth = '\242'; +const char payles = '\243'; +const char pport = '\244'; +const char pspurge = '\245'; +const char pjacques = '\246';  /* Girls: */ -const char parkata = '\257'; const char pgeida = '\260'; const char pwisewoman = '\262'; +const char parkata = '\257'; +const char pgeida = '\260'; +const char pwisewoman = '\262';  const integer xw = 30;  const integer yw = 36; /* x width & y whatsit */  const integer margin = 5; -const array<1,9,mp> mps =  -{{{     /* 1 - up-arrow */ -    {{{{65151,64575,64575,63519,63519,61455,61455,57351,57351,49155,49155,64575,64575,64575,64575,64575}}, -     {{0,384,384,960,960,2016,2016,4080,4080,8184,384,384,384,384,384,0}}}}, -               8, -               0}, - -{       /* 2 - screwdriver */ -    {{{{8191,4095,2047,34815,50175,61951,63743,64543,65039,65031,65027,65281,65408,65472,65505,65523}}, -     {{0,24576,28672,12288,2048,1024,512,256,224,176,216,96,38,10,12,0}}}}, -               0, -               0}, - -{       /* 3 - right-arrow */ -    {{{{65535,65535,64639,64543,7,1,0,1,7,64543,64639,65535,65535,65535,65535,65535}}, -     {{0,0,0,384,480,32760,32766,32760,480,384,0,0,0,0,0,0}}}}, -               15, -               6}, - -{       /* 4 - fletch */ -    {{{{255,511,1023,2047,1023,4607,14591,31871,65031,65283,65281,65280,65280,65409,65473,65511}}, -     {{0,10240,20480,24576,26624,17408,512,256,128,88,32,86,72,20,16,0}}}}, -               0, -               0}, - -{       /* 5 - hourglass */ -    {{{{0,0,0,34785,50115,61455,61455,63519,63519,61839,61455,49155,32769,0,0,0}}, -     {{0,32766,16386,12300,2064,1440,1440,576,576,1056,1440,3024,14316,16386,32766,0}}}}, -               8, -               7}, - -{       /* 6 - TTHand */ -    {{{{62463,57855,57855,57855,57471,49167,32769,0,0,0,0,32768,49152,57344,61441,61443}}, -     {{3072,4608,4608,4608,4992,12912,21070,36937,36873,36865,32769,16385,8193,4097,2050,4092}}}}, -               4, -               0}, - -{       /* 7- Mark's crosshairs */ -    {{{{65535,65151,65151,65151,65151,0,65151,65151,65151,65151,65535,65535,65535,65535,65535,65535}}, -     {{0,384,384,384,384,65535,384,384,384,384,0,0,0,0,0,0}}}}, -               8, -               5}, - -{       /* 8- I-beam. */ -    {{{{65535,65535,63631,63503,63503,65087,65087,65087,65087,65087,63503,63503,63631,65535,65535,65535}}, -     {{0,0,0,864,128,128,128,128,128,128,128,864,0,0,0,0}}}}, -               8, -               7}, - -{       /* 9- Question mark. */ -    {{{{511,1023,2047,31,15,8199,32647,65415,63503,61471,61503,61695,63999,63999,61695,61695}}, -     {{65024,33792,34816,34784,40976,57224,32840,72,1936,2080,2496,2304,1536,1536,2304,3840}}}}, -               0, -               0}}}; - -const array<'\226','\246',varying_string<19> > lads =  - {{"Avalot","Spludwick","Crapulus","Dr. Duck","Malagauche","Friar Tuck", -  "Robin Hood","Cwytalot","du Lustie","the Duke of Cardiff","Dogfood", -  "A trader","Ibythneth","Ayles","Port","Spurge","Jacques"}}; - -const array<'\257','\262',varying_string<14> > lasses =  - {{"Arkata","Geida",'±',"the Wise Woman"}}; - - const array<'\226','\245',char> ladchar = "ASCDMTRwLfgeIyPu"; - -const array<'\257','\262',char> lasschar = "kG±o"; +const array<1, 9, mp> mps = { +	{	{ +			/* 1 - up-arrow */ +			{	{	{{65151, 64575, 64575, 63519, 63519, 61455, 61455, 57351, 57351, 49155, 49155, 64575, 64575, 64575, 64575, 64575}}, +					{{0, 384, 384, 960, 960, 2016, 2016, 4080, 4080, 8184, 384, 384, 384, 384, 384, 0}} +				} +			}, +			8, +			0 +		}, + +		{ +			/* 2 - screwdriver */ +			{	{	{{8191, 4095, 2047, 34815, 50175, 61951, 63743, 64543, 65039, 65031, 65027, 65281, 65408, 65472, 65505, 65523}}, +					{{0, 24576, 28672, 12288, 2048, 1024, 512, 256, 224, 176, 216, 96, 38, 10, 12, 0}} +				} +			}, +			0, +			0 +		}, + +		{ +			/* 3 - right-arrow */ +			{	{	{{65535, 65535, 64639, 64543, 7, 1, 0, 1, 7, 64543, 64639, 65535, 65535, 65535, 65535, 65535}}, +					{{0, 0, 0, 384, 480, 32760, 32766, 32760, 480, 384, 0, 0, 0, 0, 0, 0}} +				} +			}, +			15, +			6 +		}, + +		{ +			/* 4 - fletch */ +			{	{	{{255, 511, 1023, 2047, 1023, 4607, 14591, 31871, 65031, 65283, 65281, 65280, 65280, 65409, 65473, 65511}}, +					{{0, 10240, 20480, 24576, 26624, 17408, 512, 256, 128, 88, 32, 86, 72, 20, 16, 0}} +				} +			}, +			0, +			0 +		}, + +		{ +			/* 5 - hourglass */ +			{	{	{{0, 0, 0, 34785, 50115, 61455, 61455, 63519, 63519, 61839, 61455, 49155, 32769, 0, 0, 0}}, +					{{0, 32766, 16386, 12300, 2064, 1440, 1440, 576, 576, 1056, 1440, 3024, 14316, 16386, 32766, 0}} +				} +			}, +			8, +			7 +		}, + +		{ +			/* 6 - TTHand */ +			{	{	{{62463, 57855, 57855, 57855, 57471, 49167, 32769, 0, 0, 0, 0, 32768, 49152, 57344, 61441, 61443}}, +					{{3072, 4608, 4608, 4608, 4992, 12912, 21070, 36937, 36873, 36865, 32769, 16385, 8193, 4097, 2050, 4092}} +				} +			}, +			4, +			0 +		}, + +		{ +			/* 7- Mark's crosshairs */ +			{	{	{{65535, 65151, 65151, 65151, 65151, 0, 65151, 65151, 65151, 65151, 65535, 65535, 65535, 65535, 65535, 65535}}, +					{{0, 384, 384, 384, 384, 65535, 384, 384, 384, 384, 0, 0, 0, 0, 0, 0}} +				} +			}, +			8, +			5 +		}, + +		{ +			/* 8- I-beam. */ +			{	{	{{65535, 65535, 63631, 63503, 63503, 65087, 65087, 65087, 65087, 65087, 63503, 63503, 63631, 65535, 65535, 65535}}, +					{{0, 0, 0, 864, 128, 128, 128, 128, 128, 128, 128, 864, 0, 0, 0, 0}} +				} +			}, +			8, +			7 +		}, + +		{ +			/* 9- Question mark. */ +			{	{	{{511, 1023, 2047, 31, 15, 8199, 32647, 65415, 63503, 61471, 61503, 61695, 63999, 63999, 61695, 61695}}, +					{{65024, 33792, 34816, 34784, 40976, 57224, 32840, 72, 1936, 2080, 2496, 2304, 1536, 1536, 2304, 3840}} +				} +			}, +			0, +			0 +		} +	} +}; + +const array < '\226', '\246', varying_string<19> > lads = { +	{ +		"Avalot", "Spludwick", "Crapulus", "Dr. Duck", "Malagauche", "Friar Tuck", +		"Robin Hood", "Cwytalot", "du Lustie", "the Duke of Cardiff", "Dogfood", +		"A trader", "Ibythneth", "Ayles", "Port", "Spurge", "Jacques" +	} +}; + +const array < '\257', '\262', varying_string<14> > lasses = +{{"Arkata", "Geida", '±', "the Wise Woman"}}; + +const array < '\226', '\245', char > ladchar = "ASCDMTRwLfgeIyPu"; + +const array < '\257', '\262', char > lasschar = "kG±o";  const integer numtr = 2; /* current max no. of sprites */ -const boolean a_thing = true; const boolean a_person = false; /* for Thinkabout */ +const boolean a_thing = true; +const boolean a_person = false; /* for Thinkabout */  /* Magic/portal commands are */ @@ -395,7 +472,7 @@ const boolean a_thing = true; const boolean a_person = false; /* for Thinkabout  /* These following constants should be included in CFG when it's written. */ - const boolean slow_computer = false; /* stops walking when mouse touches toolbar */ +const boolean slow_computer = false; /* stops walking when mouse touches toolbar */  /* --- */ @@ -403,58 +480,66 @@ const integer border = 1; /* size of border on shadowboxes */  const integer pagetop = 81920; -   const integer up = 0; +const integer up = 0;  const integer right = 1; - const integer down = 2; - const integer left = 3; -const integer ur = 4; const integer dr = 5; const integer dl = 6; const integer ul = 7; - const integer stopped = 8; +const integer down = 2; +const integer left = 3; +const integer ur = 4; +const integer dr = 5; +const integer dl = 6; +const integer ul = 7; +const integer stopped = 8;  const integer walk = 3;  const integer run = 5;  /*$I ROOMNUMS.INC - Room number constants (r__xxx) */ -const array<'\226','\262',byte> whereis =  +const array < '\226', '\262', byte > whereis =      /* The Lads */ - {{r__yours, /* Avvy */ -  r__spludwicks, /* Spludwick */ -  r__outsideyours, /* Crapulus */ -  r__ducks, /* Duck - r__DucksRoom's not defined yet. */ -  r__argentpub, /* Malagauche */ -  r__robins, /* Friar Tuck. */ -  177, /* Robin Hood - can't meet him at the start. */ -  r__brummieroad, /* Cwytalot */ -  r__lustiesroom, /* Baron du Lustie. */ -  r__outsidecardiffcastle, /* The Duke of Cardiff. */ -  r__argentpub, /* Dogfood */ -  r__outsideducks, /* Trader */ -  r__argentpub, /* Ibythneth */ -  r__aylesoffice, /* Ayles */ -  r__nottspub, /* Port */ -  r__nottspub, /* Spurge */ -  r__musicroom, /* Jacques */ -   0,0,0,0,0,0,0,0, -    /* The Lasses */ -  r__yours, /* Arkata */ -  r__geidas, /* Geida */ -  177, /* nobody allocated here! */ -  r__wisewomans}}; /* The Wise Woman. */ +{	{ +		r__yours, /* Avvy */ +		r__spludwicks, /* Spludwick */ +		r__outsideyours, /* Crapulus */ +		r__ducks, /* Duck - r__DucksRoom's not defined yet. */ +		r__argentpub, /* Malagauche */ +		r__robins, /* Friar Tuck. */ +		177, /* Robin Hood - can't meet him at the start. */ +		r__brummieroad, /* Cwytalot */ +		r__lustiesroom, /* Baron du Lustie. */ +		r__outsidecardiffcastle, /* The Duke of Cardiff. */ +		r__argentpub, /* Dogfood */ +		r__outsideducks, /* Trader */ +		r__argentpub, /* Ibythneth */ +		r__aylesoffice, /* Ayles */ +		r__nottspub, /* Port */ +		r__nottspub, /* Spurge */ +		r__musicroom, /* Jacques */ +		0, 0, 0, 0, 0, 0, 0, 0, +		/* The Lasses */ +		r__yours, /* Arkata */ +		r__geidas, /* Geida */ +		177, /* nobody allocated here! */ +		r__wisewomans +	} +}; /* The Wise Woman. */  /* Art gallery at 2,1; notice about this at 2,2. */ -const matrix<1,8,1,8,longint> catamap =  -            /* Geida's room */ - /*  1     2     3   | 4     5     6     7     8*/ -{{{{0x204,0x200,0xd0f0,0xf0ff,0xff,0xd20f,0xd200,0x200}}, - {{0x50f1,0x20ff,0x2ff,0xff,0xe0ff,0x20ff,0x200f,0x7210}}, - {{0xe3f0,0xe10f,0x72f0,0xff,0xe0ff,0xff,0xff,0x800f}}, - {{0x2201,0x2030,0x800f,0x220,0x20f,0x30,0xff,0x23f}}, /* >> Oubliette */ - {{0x5024,0xf3,0xff,0x200f,0x22f0,0x20f,0x200,0x7260}}, - {{0xf0,0x2ff,0xe2ff,0xff,0x200f,0x50f0,0x72ff,0x201f}}, - {{0xf6,0x220f,0x22f0,0x30f,0xf0,0x20f,0x8200,0x2f0}}, /* <<< In here */ - {{0x34,0x200f,0x51f0,0x201f,0xf1,0x50ff,0x902f,0x2062}}}}; -               /* vv Stairs trap. */ +const matrix<1, 8, 1, 8, longint> catamap = +    /* Geida's room */ +    /*  1     2     3   | 4     5     6     7     8*/ +{	{	{{0x204, 0x200, 0xd0f0, 0xf0ff, 0xff, 0xd20f, 0xd200, 0x200}}, +		{{0x50f1, 0x20ff, 0x2ff, 0xff, 0xe0ff, 0x20ff, 0x200f, 0x7210}}, +		{{0xe3f0, 0xe10f, 0x72f0, 0xff, 0xe0ff, 0xff, 0xff, 0x800f}}, +		{{0x2201, 0x2030, 0x800f, 0x220, 0x20f, 0x30, 0xff, 0x23f}}, /* >> Oubliette */ +		{{0x5024, 0xf3, 0xff, 0x200f, 0x22f0, 0x20f, 0x200, 0x7260}}, +		{{0xf0, 0x2ff, 0xe2ff, 0xff, 0x200f, 0x50f0, 0x72ff, 0x201f}}, +		{{0xf6, 0x220f, 0x22f0, 0x30f, 0xf0, 0x20f, 0x8200, 0x2f0}}, /* <<< In here */ +		{{0x34, 0x200f, 0x51f0, 0x201f, 0xf1, 0x50ff, 0x902f, 0x2062}} +	} +}; +/* vv Stairs trap. */  /* Explanation: $NSEW.     Nibble N: North. @@ -493,45 +578,50 @@ const matrix<1,8,1,8,longint> catamap =      F     = straight-through corridor. */  const byte interrogation = 0; - /* If this is greater than zero, the next line you type is stored in -    the DNA in a position dictated by the value. If a scroll comes up, -    or you leave the room, it's automatically set to zero. */ +/* If this is greater than zero, the next line you type is stored in +   the DNA in a position dictated by the value. If a scroll comes up, +   or you leave the room, it's automatically set to zero. */  const boolean demo = false; /* If this is true, we're in a demo of the game. */ -const array<0,2,char> spludwick_order = {{onion,ink,mushroom}}; - -const array<10,25,quasiped_type> quasipeds =  -{{{2,lightgray, 19,brown,pdogfood},                          /* A: Dogfood (screen 19). */ -{3,green,     19,white,pibythneth},                            /* B: Ibythneth (screen 19). */ -{3,white,     1,magenta,parkata},                           /* C: Arkata (screen 1). */ -{3,black,     23,red,'\261'},                            /* D: Hawk (screen 23). */ -{3,lightgreen,50,brown,ptrader},                            /* E: Trader (screen 50). */ -{6,yellow,    42,red,pavalot},                              /* F: Avvy, tied up (scr.42) */ -{2,blue,      16,white,payles},                            /* G: Ayles (screen 16). */ -{2,brown,     7,white,pjacques},                             /* H: Jacques (screen 7). */ -{2,lightgreen,47,green,pspurge},                            /* I: Spurge (screen 47). */ -{3,yellow,    47,red,pavalot},                              /* J: Avalot (screen 47). */ -{2,lightgray, 23,black,pdulustie},                            /* K: du Lustie (screen 23). */ -{2,yellow,    27,red,pavalot},                              /* L: Avalot (screen 27). */ -{3,white,     27,red,'\261'},                            /* M: Avaroid (screen 27). */ -{4,lightgray, 19,darkgray,pmalagauche},                           /*N: Malagauche (screen 19). */ -{5,lightmagenta,47,red,pport},                               /* O: Port (screen 47). */ -{2,lightgreen, 51,darkgray,pdrduck}}};                         /*P: Duck (screen 51). */ - - const integer lower = 0; -  const integer same = 1; +const array<0, 2, char> spludwick_order = {{onion, ink, mushroom}}; + +const array<10, 25, quasiped_type> quasipeds = { +	{	{2, lightgray, 19, brown, pdogfood},                       /* A: Dogfood (screen 19). */ +		{3, green,     19, white, pibythneth},                         /* B: Ibythneth (screen 19). */ +		{3, white,     1, magenta, parkata},                        /* C: Arkata (screen 1). */ +		{3, black,     23, red, '\261'},                         /* D: Hawk (screen 23). */ +		{3, lightgreen, 50, brown, ptrader},                        /* E: Trader (screen 50). */ +		{6, yellow,    42, red, pavalot},                           /* F: Avvy, tied up (scr.42) */ +		{2, blue,      16, white, payles},                         /* G: Ayles (screen 16). */ +		{2, brown,     7, white, pjacques},                          /* H: Jacques (screen 7). */ +		{2, lightgreen, 47, green, pspurge},                        /* I: Spurge (screen 47). */ +		{3, yellow,    47, red, pavalot},                           /* J: Avalot (screen 47). */ +		{2, lightgray, 23, black, pdulustie},                         /* K: du Lustie (screen 23). */ +		{2, yellow,    27, red, pavalot},                           /* L: Avalot (screen 27). */ +		{3, white,     27, red, '\261'},                         /* M: Avaroid (screen 27). */ +		{4, lightgray, 19, darkgray, pmalagauche},                        /*N: Malagauche (screen 19). */ +		{5, lightmagenta, 47, red, pport},                           /* O: Port (screen 47). */ +		{2, lightgreen, 51, darkgray, pdrduck} +	} +};                         /*P: Duck (screen 51). */ + +const integer lower = 0; +const integer same = 1;  const integer higher = 2; -const array<1,12,char> keys = "QWERTYUIOP[]"; -const array<1,12,word> notes =  - {{196,220,247,262,294,330,350,392,440,494,523,587}}; - -const tunetype tune =  - {{higher,higher,lower,same,higher,higher,lower,higher,higher,higher, -  lower,higher,higher, -  same,higher,lower,lower,lower,lower,higher,higher,lower,lower,lower, -  lower,same,lower,higher,same,lower,higher}}; +const array<1, 12, char> keys = "QWERTYUIOP[]"; +const array<1, 12, word> notes = +{{196, 220, 247, 262, 294, 330, 350, 392, 440, 494, 523, 587}}; + +const tunetype tune = { +	{ +		higher, higher, lower, same, higher, higher, lower, higher, higher, higher, +		lower, higher, higher, +		same, higher, lower, lower, lower, lower, higher, higher, lower, lower, lower, +		lower, same, lower, higher, same, lower, higher +	} +};  /* special run-time errors */ @@ -543,59 +633,74 @@ const integer runerr_getset_overflow = 50;  #define EXTERN  #endif -EXTERN varying_string<77> current; EXTERN byte curpos; EXTERN boolean cursoron; +EXTERN varying_string<77> current; +EXTERN byte curpos; +EXTERN boolean cursoron;  /* previous:^previoustype;*/  EXTERN varying_string<77> last;  EXTERN dnatype dna; -EXTERN array<1,50,linetype> lines; /* For Also. */ +EXTERN array<1, 50, linetype> lines; /* For Also. */  EXTERN integer c;  EXTERN registers r;  EXTERN enum { m_no , m_yes , m_virtual } visible; -EXTERN boolean dropsok,screturn,soundfx,cheat; -EXTERN word mx,my; /* mouse x & y now */ -EXTERN word mpx,mpy; /* mouse x & y when pressed */ -EXTERN word mrx,mry; /* mouse x & y when released */ -EXTERN byte mpress,mrelease; /* times left mouse button has been pressed/released */ +EXTERN boolean dropsok, screturn, soundfx, cheat; +EXTERN word mx, my; /* mouse x & y now */ +EXTERN word mpx, mpy; /* mouse x & y when pressed */ +EXTERN word mrx, mry; /* mouse x & y when released */ +EXTERN byte mpress, mrelease; /* times left mouse button has been pressed/released */  EXTERN byte keystatus; /* Mouse key status */ -EXTERN array<1,10,varying_string<20> > un; -EXTERN byte unn; EXTERN string mousetext; +EXTERN array<1, 10, varying_string<20> > un; +EXTERN byte unn; +EXTERN string mousetext;  /* which:array[0..5] of byte;*/ -EXTERN pointer p; EXTERN boolean weirdword; -EXTERN byte to_do; EXTERN boolean lmo,mousemade; -EXTERN array<1,15,varying_string<50> > scroll; -EXTERN byte scrolln,score,whichwas; EXTERN char thinks; EXTERN boolean thinkthing; +EXTERN pointer p; +EXTERN boolean weirdword; +EXTERN byte to_do; +EXTERN boolean lmo, mousemade; +EXTERN array<1, 15, varying_string<50> > scroll; +EXTERN byte scrolln, score, whichwas; +EXTERN char thinks; +EXTERN boolean thinkthing;  /* pp:array[1..1000] of postype;   bb:array[1..9000] of byte;*/ -EXTERN word pptr,bptr; -EXTERN matrix<0,0,0,1,integer> ppos; -EXTERN array<1,24,word> pozzes; -EXTERN byte anim; EXTERN pointer copier; -EXTERN integer talkx,talky; EXTERN byte talkb,talkf; +EXTERN word pptr, bptr; +EXTERN matrix<0, 0, 0, 1, integer> ppos; +EXTERN array<1, 24, word> pozzes; +EXTERN byte anim; +EXTERN pointer copier; +EXTERN integer talkx, talky; +EXTERN byte talkb, talkf;  EXTERN byte scrollbells; /* no. of times to ring the bell */ -EXTERN boolean ontoolbar,seescroll; - -EXTERN array<1,10,char> objlist; -EXTERN array<'0','9',pointer> digit; -EXTERN array<0,8,pointer> rwlite; EXTERN byte oldrw; -EXTERN varying_string<3> lastscore; EXTERN byte cmp; /* current mouse-pointer */ +EXTERN boolean ontoolbar, seescroll; + +EXTERN array<1, 10, char> objlist; +EXTERN array < '0', '9', pointer > digit; +EXTERN array<0, 8, pointer> rwlite; +EXTERN byte oldrw; +EXTERN varying_string<3> lastscore; +EXTERN byte cmp; /* current mouse-pointer */  EXTERN varying_string<10> verbstr; /* what you can do with your object. :-) */ -EXTERN matrix<0,30,0,1,string*> also; -EXTERN array<1,15,pedtype> peds; -EXTERN array<1,15,magictype> magics; -EXTERN array<9,15,magictype> portals; -EXTERN array<1,30,fieldtype> fields; EXTERN byte numfields; -EXTERN varying_string<26> flags; EXTERN string listen; +EXTERN matrix<0, 30, 0, 1, string *> also; +EXTERN array<1, 15, pedtype> peds; +EXTERN array<1, 15, magictype> magics; +EXTERN array<9, 15, magictype> portals; +EXTERN array<1, 30, fieldtype> fields; +EXTERN byte numfields; +EXTERN varying_string<26> flags; +EXTERN string listen; -EXTERN word oh,onh,om,h,m,s,s1; +EXTERN word oh, onh, om, h, m, s, s1;  EXTERN varying_string<4> atkey; /* For XTs, set to "alt-". For ATs, set to "f1". */ -EXTERN byte cp,ledstatus,defaultled; -EXTERN raw little; EXTERN boolean quote; /* 66 or 99 next? */ +EXTERN byte cp, ledstatus, defaultled; +EXTERN raw little; +EXTERN boolean quote; /* 66 or 99 next? */  EXTERN boolean alive; -EXTERN array<1,2000,char> buffer; EXTERN word bufsize; +EXTERN array<1, 2000, char> buffer; +EXTERN word bufsize;  EXTERN byte oldjw; /* Old joystick-way */  EXTERN controllers ctrl; @@ -610,7 +715,8 @@ EXTERN integer underscroll; /* Y-coord of just under the scroll text. */  EXTERN boolean ddmnow; /* Kludge so we don't have to keep referring to Dropdown */  EXTERN varying_string<40> roomname; /* Name of this room */ -EXTERN text logfile; EXTERN boolean logging,log_epson; +EXTERN text logfile; +EXTERN boolean logging, log_epson;  EXTERN boolean cl_override; @@ -621,12 +727,12 @@ EXTERN byte subjnumber; /* The same thing. */  EXTERN boolean keyboardclick; /* Is a keyboard click noise wanted? */ -EXTERN char him,her,it; +EXTERN char him, her, it;  EXTERN longint roomtime; /* Set to 0 when you enter a room, added to in every loop.*/  EXTERN boolean after_the_scroll; - /* For the demo: */ +/* For the demo: */  EXTERN demo_type demo_rec;  EXTERN file<demo_type> demofile; @@ -643,90 +749,91 @@ EXTERN string filetoload;  EXTERN boolean holdthedawn; /* If this is true, calling Dawn will do nothing.    It's used, for example, at the start, to stop Load from dawning. */ -EXTERN word storage_seg,storage_ofs; /* Seg and ofs of the Storage area. */ +EXTERN word storage_seg, storage_ofs; /* Seg and ofs of the Storage area. */  EXTERN word skellern; /* Offset of the timer variable - 1 more than storage_OFS */  EXTERN boolean reloaded; /* Is this NOT the primary loading? */ -EXTERN boolean super_was_virtual,super_was_off; /* Used by Super_Off and Super_On */ +EXTERN boolean super_was_virtual, super_was_off; /* Used by Super_Off and Super_On */  EXTERN pathstr enid_filename;  EXTERN joysetup js; -EXTERN word cxmin,cxmax,cymin,cymax; EXTERN boolean use_joy_a; +EXTERN word cxmin, cxmax, cymin, cymax; +EXTERN boolean use_joy_a;  #undef EXTERN  #define EXTERN extern - void newpointer(byte m); +void newpointer(byte m); - void wait();    /* makes hourglass */ +void wait();    /* makes hourglass */ - void on(); +void on(); - void off(); +void off(); - void on_virtual(); +void on_virtual(); - void off_virtual(); +void off_virtual(); - void xycheck(); +void xycheck(); - void hopto(integer x,integer y); /* Moves mouse pointer to x,y */ +void hopto(integer x, integer y); /* Moves mouse pointer to x,y */ - void check(); +void check(); - void note(word hertz); +void note(word hertz); - void blip(); +void blip(); - string strf(longint x); +string strf(longint x); - void shbox(integer x1,integer y1,integer x2,integer y2, string t); +void shbox(integer x1, integer y1, integer x2, integer y2, string t); - void newgame(); +void newgame(); - void click(); +void click(); - void slowdown(); +void slowdown(); - boolean flagset(char x); +boolean flagset(char x); - void force_numlock(); +void force_numlock(); - boolean pennycheck(word howmuchby); +boolean pennycheck(word howmuchby); - string getname(char whose); +string getname(char whose); - char getnamechar(char whose); +char getnamechar(char whose); - string get_thing(char which); +string get_thing(char which); - char get_thingchar(char which); +char get_thingchar(char which); - string get_better(char which); +string get_better(char which); - string f5_does(); +string f5_does(); - void plot_vmc(integer xx,integer yy, byte page_); +void plot_vmc(integer xx, integer yy, byte page_); - void wipe_vmc(byte page_); +void wipe_vmc(byte page_); - void setup_vmc(); +void setup_vmc(); - void clear_vmc(); +void clear_vmc(); - void load_a_mouse(byte which); +void load_a_mouse(byte which); - void background(byte x); +void background(byte x); - void hang_around_for_a_while(); +void hang_around_for_a_while(); - void super_off(); +void super_off(); - void super_on(); +void super_on(); - boolean mouse_near_text(); +boolean mouse_near_text(); - } // End of namespace Avalanche. +} // End of namespace Avalanche.  #endif
\ No newline at end of file diff --git a/engines/avalanche/help.cpp b/engines/avalanche/help.cpp index 70f7582ede..3074091a0b 100644 --- a/engines/avalanche/help.cpp +++ b/engines/avalanche/help.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 @@ -34,220 +34,277 @@ namespace Avalanche {  typedef graphcursmasktype cursor;  const char vernum[] = "v1ù00";  const char copyright[] = "1992"; -const cursor questionmark =  -{  -    ((511,1023,2047,31,15,8199,32647,65415,63503,61471,61503,61695,63999,63999,61695,61695), -     (65024,33792,34816,34784,40976,57224,32840,72,1936,2080,2496,2304,1536,1536,2304,3840)), -               0, -               0}; +const cursor questionmark = { +	((511, 1023, 2047, 31, 15, 8199, 32647, 65415, 63503, 61471, 61503, 61695, 63999, 63999, 61695, 61695), +	(65024, 33792, 34816, 34784, 40976, 57224, 32840, 72, 1936, 2080, 2496, 2304, 1536, 1536, 2304, 3840)), +	0, +	0 +}; -const array<1,7,varying_string<12> > topics =  - {{"Front page","Background","Toolbar","Menus", -  "Keyboard","Shareware","Exit Help"}}; +const array<1, 7, varying_string<12> > topics = { +	{ +		"Front page", "Background", "Toolbar", "Menus", +		"Keyboard", "Shareware", "Exit Help" +	} +}; -const array<1,6,char> keys = "FBTMKS"; +const array<1, 6, char> keys = "FBTMKS";  byte page_; -palettetype dp,dark; +palettetype dp, dark;  char r;  boolean lmo; -void hilight(integer x,integer y, byte c1,byte c2, string z) -{ -    string w; -; - w=z; w[1]='\40'; setcolor(c1); outtextxy(x,y,w); - w=z; fillchar(w[2],length(z)-1,'\40'); setcolor(c2); - outtextxy(x,y,w); outtextxy(x-1,y,w); +void hilight(integer x, integer y, byte c1, byte c2, string z) { +	string w; +	; +	w = z; +	w[1] = '\40'; +	setcolor(c1); +	outtextxy(x, y, w); +	w = z; +	fillchar(w[2], length(z) - 1, '\40'); +	setcolor(c2); +	outtextxy(x, y, w); +	outtextxy(x - 1, y, w);  } -void showpage(byte x) -{; - if (x==page_)  return; /* twit */ - if (x==7)  {; lmo=true; return; } - setallpalette(dark); hidemousecursor; settextjustify(1,1); - if (page_!=177)  - {; -  setfillstyle(1,1);  bar(507,page_*25+2,607,page_*25+22); -  setfillstyle(1,9);  bar(500,page_*25,600,page_*25+20); -/*  setcolor(11); outtextxy(550,page*25+10,topics[page]);*/ -  hilight(550,page_*25+10,11,14,topics[page_]); - } - page_=x; -  setfillstyle(1,4);  bar(507,page_*25+2,607,page_*25+22); -  setfillstyle(1,12); bar(500,page_*25,600,page_*25+20); -/*  setcolor(14); outtextxy(550,page*25+10,topics[page]); */ -  hilight(550,page_*25+10,14,15,topics[page_]); - setfillstyle(1,7); bar(0,27,470,189); settextjustify(0,2); setcolor(1); - switch (page_) { -  case 1: {; /* Front page */ -      setcolor(black); -      outtextxy( 10, 40,"Thorsoft of Letchworth presents"); -      outtextxy(300, 80,vernum); -      outtextxy( 10, 90,string("(c) ")+copyright+", Mike, Mark and Thomas Thurman."); -      setcolor(red); -      outtextxy(100,129,"Finding your way around it..."); -      setcolor(blue); -      outtextxy( 10,120,"You are now using the Help System."); -      outtextxy( 10,138,"Press the first letter of the topic that you want to"); -      outtextxy( 10,147,"read (eg T for (T)oolbar), or click on its button (on"); -      outtextxy( 10,156,"the right) using the mouse. Use \"Exit Help\" to quit."); -      outtextxy( 10,174,"(Fastest exit- just hit Esc!)"); -     } -     break; -  case 2: {; /* Background */ -      setcolor(red); -      outtextxy(300, 30,"Remember this chap?"); -      setcolor(blue); -      outtextxy( 10, 55,"Back in good old A.D. 79, there lived a Roman"); -      outtextxy( 10, 64,"whose name was Denarius Avaricius Sextus, known"); -      outtextxy( 10, 73,"to his friends as Avvy. His wife was called Arkata,"); -      outtextxy( 10, 82,"and he had a slave named Crapulus. His grandson"); -      outtextxy( 10, 91,"joined the army, was posted to Gaul, and liked it"); -      outtextxy( 10,100,"so much that he stayed there, telling everyone the"); -      outtextxy( 10,109,"one about the centurion and the Turkish bath. His"); -      outtextxy( 10,118,"thirty-sixth male-line descendant accidentally"); -      outtextxy( 10,127,"poisoned an old enemy of William of Normandy, and"); -      outtextxy( 10,136,"to his great surprise came so much into Bill's favour"); -      outtextxy( 10,145,"that, after the Battle of Hastings a few years"); -      outtextxy( 10,154,"later, he was made the lord of a small town in"); -      outtextxy( 10,163,"Hertfordshire called Argent. It is his great-grandson"); -      outtextxy( 10,172,"who stars in this game, back in good old A.D. 1189."); -     } -     break; -  case 3: {; /* ? */ -      outtextxy( 15, 30,"The Toolbar is there so that (along with the menus)"); -      outtextxy( 15, 39,"you can perform a lot of the functions contained in"); -      outtextxy( 15, 48,"the game, using the mouse."); -      setcolor(red); -      outtextxy( 15, 66,"COMPASS:"); -      setcolor(blue); -      outtextxy( 90, 66,"Used to point Avvy in the right direction."); -      setcolor(red); -      outtextxy( 15, 75,"THINKS:"); -      setcolor(blue); -      outtextxy( 90, 75,"Shows the person/object you're thinking of."); -      setcolor(red); -      outtextxy( 15, 84,"SCORE:"); -      setcolor(blue); -      outtextxy( 90, 84,"Shows how many points you've got."); -      setcolor(red); -      outtextxy( 15, 93,"SPEED:"); -      setcolor(blue); -      outtextxy( 90, 93,"Adjusts the speed of the game."); -      setcolor(red); -      outtextxy( 15,102,"L.E.D.s:"); -      setcolor(blue); -      outtextxy( 90,102,"Shows whether sound is on (toggle with <F2>),"); -      outtextxy( 90,111,"the computer is ready, or there is an error."); -      setcolor(red); -      outtextxy( 15,120,"CLOCK:"); -      setcolor(blue); -      outtextxy( 90,120,"Shows the time."); -      setcolor(red); -      outtextxy( 15,129,"'OK' box:"); -      setcolor(blue); -      outtextxy( 90,129,"Works the same as pressing <ENTER>."); -      setcolor(0); -      outtextxy( 15,147,"N.B. The game action is suspended while you are"); -      outtextxy( 15,156,"using the toolbar."); -     } -     break; -  case 4: {; /* menus */ -      outtextxy( 15, 60,"To use the drop-down menus, either click on the bar"); -      outtextxy( 15, 69,"at the top with the mouse, or press Alt and the first"); -      outtextxy( 15, 78,string("letter of the menu's name (eg alt-A = (A)ction.) The ")+'\3'); -      outtextxy( 15, 87,"menu is alt-H, for (H)eart."); -      outtextxy( 15,105,"When you have a menu, either click on the option you"); -      outtextxy( 15,114,"want, or press its initial letter (eg O for \"OS Shell\")."); -      outtextxy( 15,132,"To do something to, or with, an object or person, first"); -      outtextxy( 15,141,"select them (or it) from the People or Things menu. Then"); -      outtextxy( 15,150,"select whatever you wanted to do from the Use menu."); -      setcolor(red); -      outtextxy(15,177,"(OK, so it sounds complicated, but then it's intuitive!)"); -     } -     break; -  case 5: {; /* Keyboard */ -      outtextxy(15, 60,"The keyboard interface is even simpler than the mouse"); -      outtextxy(15, 70,"interface! Just type what you want Avvy to do."); -      outtextxy(15, 80,"For example, to open a door, type in:"); -      setcolor(red); outtextxy(100,95,"open door"); setcolor(blue); -      outtextxy(15,110,"And to look at Crapulus, type:"); -      setcolor(red); outtextxy(100,125,"look at Crapulus"); -      setcolor(blue); outtextxy(15,140,"(Don't forget to press Enter after each command!)"); -      outtextxy(15,160,"This is a traditional command-line parser interface,"); -      outtextxy(15,170,"similar to the one in \"Avaricius\", only more advanced."); -     } -     break; -  case 6: {; /* ? */ -      outtextxy(15, 30,"This game is Shareware. Most programs are sold through"); -      outtextxy(15, 40,"shops, and the authors prevent you from copying them."); -      outtextxy(15, 50,"Shareware is different. You may copy it and give it to"); -      outtextxy(15, 60,"ANYBODY at all. You may post it on any BBS, give it to"); -      outtextxy(15, 70,"friends, etc. If you like it, we ask you to pay us for"); -      outtextxy(15, 80,"the software directly through the post. We're relying"); -      outtextxy(15, 90,"on you to register!"); -      outtextxy(99,177,"{ ETC }"); -     } -     break; -  } - setallpalette(dp); showmousecursor; +void showpage(byte x) { +	; +	if (x == page_)  return; /* twit */ +	if (x == 7)  { +		; +		lmo = true; +		return; +	} +	setallpalette(dark); +	hidemousecursor; +	settextjustify(1, 1); +	if (page_ != 177) { +		; +		setfillstyle(1, 1); +		bar(507, page_ * 25 + 2, 607, page_ * 25 + 22); +		setfillstyle(1, 9); +		bar(500, page_ * 25, 600, page_ * 25 + 20); +		/*  setcolor(11); outtextxy(550,page*25+10,topics[page]);*/ +		hilight(550, page_ * 25 + 10, 11, 14, topics[page_]); +	} +	page_ = x; +	setfillstyle(1, 4); +	bar(507, page_ * 25 + 2, 607, page_ * 25 + 22); +	setfillstyle(1, 12); +	bar(500, page_ * 25, 600, page_ * 25 + 20); +	/*  setcolor(14); outtextxy(550,page*25+10,topics[page]); */ +	hilight(550, page_ * 25 + 10, 14, 15, topics[page_]); +	setfillstyle(1, 7); +	bar(0, 27, 470, 189); +	settextjustify(0, 2); +	setcolor(1); +	switch (page_) { +	case 1: { +		; /* Front page */ +		setcolor(black); +		outtextxy(10, 40, "Thorsoft of Letchworth presents"); +		outtextxy(300, 80, vernum); +		outtextxy(10, 90, string("(c) ") + copyright + ", Mike, Mark and Thomas Thurman."); +		setcolor(red); +		outtextxy(100, 129, "Finding your way around it..."); +		setcolor(blue); +		outtextxy(10, 120, "You are now using the Help System."); +		outtextxy(10, 138, "Press the first letter of the topic that you want to"); +		outtextxy(10, 147, "read (eg T for (T)oolbar), or click on its button (on"); +		outtextxy(10, 156, "the right) using the mouse. Use \"Exit Help\" to quit."); +		outtextxy(10, 174, "(Fastest exit- just hit Esc!)"); +	} +	break; +	case 2: { +		; /* Background */ +		setcolor(red); +		outtextxy(300, 30, "Remember this chap?"); +		setcolor(blue); +		outtextxy(10, 55, "Back in good old A.D. 79, there lived a Roman"); +		outtextxy(10, 64, "whose name was Denarius Avaricius Sextus, known"); +		outtextxy(10, 73, "to his friends as Avvy. His wife was called Arkata,"); +		outtextxy(10, 82, "and he had a slave named Crapulus. His grandson"); +		outtextxy(10, 91, "joined the army, was posted to Gaul, and liked it"); +		outtextxy(10, 100, "so much that he stayed there, telling everyone the"); +		outtextxy(10, 109, "one about the centurion and the Turkish bath. His"); +		outtextxy(10, 118, "thirty-sixth male-line descendant accidentally"); +		outtextxy(10, 127, "poisoned an old enemy of William of Normandy, and"); +		outtextxy(10, 136, "to his great surprise came so much into Bill's favour"); +		outtextxy(10, 145, "that, after the Battle of Hastings a few years"); +		outtextxy(10, 154, "later, he was made the lord of a small town in"); +		outtextxy(10, 163, "Hertfordshire called Argent. It is his great-grandson"); +		outtextxy(10, 172, "who stars in this game, back in good old A.D. 1189."); +	} +	break; +	case 3: { +		; /* ? */ +		outtextxy(15, 30, "The Toolbar is there so that (along with the menus)"); +		outtextxy(15, 39, "you can perform a lot of the functions contained in"); +		outtextxy(15, 48, "the game, using the mouse."); +		setcolor(red); +		outtextxy(15, 66, "COMPASS:"); +		setcolor(blue); +		outtextxy(90, 66, "Used to point Avvy in the right direction."); +		setcolor(red); +		outtextxy(15, 75, "THINKS:"); +		setcolor(blue); +		outtextxy(90, 75, "Shows the person/object you're thinking of."); +		setcolor(red); +		outtextxy(15, 84, "SCORE:"); +		setcolor(blue); +		outtextxy(90, 84, "Shows how many points you've got."); +		setcolor(red); +		outtextxy(15, 93, "SPEED:"); +		setcolor(blue); +		outtextxy(90, 93, "Adjusts the speed of the game."); +		setcolor(red); +		outtextxy(15, 102, "L.E.D.s:"); +		setcolor(blue); +		outtextxy(90, 102, "Shows whether sound is on (toggle with <F2>),"); +		outtextxy(90, 111, "the computer is ready, or there is an error."); +		setcolor(red); +		outtextxy(15, 120, "CLOCK:"); +		setcolor(blue); +		outtextxy(90, 120, "Shows the time."); +		setcolor(red); +		outtextxy(15, 129, "'OK' box:"); +		setcolor(blue); +		outtextxy(90, 129, "Works the same as pressing <ENTER>."); +		setcolor(0); +		outtextxy(15, 147, "N.B. The game action is suspended while you are"); +		outtextxy(15, 156, "using the toolbar."); +	} +	break; +	case 4: { +		; /* menus */ +		outtextxy(15, 60, "To use the drop-down menus, either click on the bar"); +		outtextxy(15, 69, "at the top with the mouse, or press Alt and the first"); +		outtextxy(15, 78, string("letter of the menu's name (eg alt-A = (A)ction.) The ") + '\3'); +		outtextxy(15, 87, "menu is alt-H, for (H)eart."); +		outtextxy(15, 105, "When you have a menu, either click on the option you"); +		outtextxy(15, 114, "want, or press its initial letter (eg O for \"OS Shell\")."); +		outtextxy(15, 132, "To do something to, or with, an object or person, first"); +		outtextxy(15, 141, "select them (or it) from the People or Things menu. Then"); +		outtextxy(15, 150, "select whatever you wanted to do from the Use menu."); +		setcolor(red); +		outtextxy(15, 177, "(OK, so it sounds complicated, but then it's intuitive!)"); +	} +	break; +	case 5: { +		; /* Keyboard */ +		outtextxy(15, 60, "The keyboard interface is even simpler than the mouse"); +		outtextxy(15, 70, "interface! Just type what you want Avvy to do."); +		outtextxy(15, 80, "For example, to open a door, type in:"); +		setcolor(red); +		outtextxy(100, 95, "open door"); +		setcolor(blue); +		outtextxy(15, 110, "And to look at Crapulus, type:"); +		setcolor(red); +		outtextxy(100, 125, "look at Crapulus"); +		setcolor(blue); +		outtextxy(15, 140, "(Don't forget to press Enter after each command!)"); +		outtextxy(15, 160, "This is a traditional command-line parser interface,"); +		outtextxy(15, 170, "similar to the one in \"Avaricius\", only more advanced."); +	} +	break; +	case 6: { +		; /* ? */ +		outtextxy(15, 30, "This game is Shareware. Most programs are sold through"); +		outtextxy(15, 40, "shops, and the authors prevent you from copying them."); +		outtextxy(15, 50, "Shareware is different. You may copy it and give it to"); +		outtextxy(15, 60, "ANYBODY at all. You may post it on any BBS, give it to"); +		outtextxy(15, 70, "friends, etc. If you like it, we ask you to pay us for"); +		outtextxy(15, 80, "the software directly through the post. We're relying"); +		outtextxy(15, 90, "on you to register!"); +		outtextxy(99, 177, "{ ETC }"); +	} +	break; +	} +	setallpalette(dp); +	showmousecursor;  } -void helpsetup() -{ -    integer gd,gm; -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); settextstyle(1,0,0); setcolor(11); - getpalette(dp); dark.size=dp.size; fillchar(dark.colors,dark.size,'\0'); - setallpalette(dark); setusercharsize(3,1,8,10); - for( gm=1; gm <= 3; gm ++) outtextxy(gm,0,"Avalot- HELP!"); - resetmouse; setgraphicscursor(questionmark); showmousecursor; - settextstyle(0,0,1); settextjustify(1,1); - for( gd=2; gd <= 7; gd ++) - {; -  setfillstyle(1,1);  bar(507,gd*25+2,607,gd*25+22); -  setfillstyle(1,9);  bar(500,gd*25,600,gd*25+20); -/*  setcolor(11); outtextxy(550,gd*25+10,topics[gd]); */ -  hilight(550,gd*25+10,11,14,topics[gd]); - } - showmousecursor; - page_=177; showpage(1); lmo=false; setfillstyle(1,7); - for( gd=1; gd <= 3; gd ++) - {; -  bar( 10-gd*3,200-gd*3,490-gd*6,200-gd*3); -  bar(490-gd*6, 37-gd*3,491-gd*6,200-gd*3); - } +void helpsetup() { +	integer gd, gm; +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	settextstyle(1, 0, 0); +	setcolor(11); +	getpalette(dp); +	dark.size = dp.size; +	fillchar(dark.colors, dark.size, '\0'); +	setallpalette(dark); +	setusercharsize(3, 1, 8, 10); +	for (gm = 1; gm <= 3; gm ++) outtextxy(gm, 0, "Avalot- HELP!"); +	resetmouse; +	setgraphicscursor(questionmark); +	showmousecursor; +	settextstyle(0, 0, 1); +	settextjustify(1, 1); +	for (gd = 2; gd <= 7; gd ++) { +		; +		setfillstyle(1, 1); +		bar(507, gd * 25 + 2, 607, gd * 25 + 22); +		setfillstyle(1, 9); +		bar(500, gd * 25, 600, gd * 25 + 20); +		/*  setcolor(11); outtextxy(550,gd*25+10,topics[gd]); */ +		hilight(550, gd * 25 + 10, 11, 14, topics[gd]); +	} +	showmousecursor; +	page_ = 177; +	showpage(1); +	lmo = false; +	setfillstyle(1, 7); +	for (gd = 1; gd <= 3; gd ++) { +		; +		bar(10 - gd * 3, 200 - gd * 3, 490 - gd * 6, 200 - gd * 3); +		bar(490 - gd * 6, 37 - gd * 3, 491 - gd * 6, 200 - gd * 3); +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - helpsetup(); - do { -  do { getbuttonstatus; } while (!((mkey==left) || keypressed())); -  if (keypressed())  -  {;     /* keyboard choice */ -   r=upcase(readkey()); -   if (pos(r,keys)>0)  showpage(pos(r,keys)); else -    if (r=='\0')  -    switch (readkey()) { /* grab extd keystroke */ -     case 'H': if (page_>1)  showpage(page_-1); break; -     case 'P': if (page_<6)  showpage(page_+1); break; -     case 'G':case 'I': showpage(1); break; -     case 'O':case 'Q': showpage(6); break; -    } else -     if (set::of('\33','Q','X','E','H', eos).has(r))  lmo=true; /* quit */ -  } -  else -  {;     /* mouse choice */ -   if ((mousex>400) && (mousey>25))  -   {; -    showpage(mousey / 25); -   } -  } - } while (!lmo); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	helpsetup(); +	do { +		do { +			getbuttonstatus; +		} while (!((mkey == left) || keypressed())); +		if (keypressed()) { +			;     /* keyboard choice */ +			r = upcase(readkey()); +			if (pos(r, keys) > 0)  showpage(pos(r, keys)); +			else if (r == '\0') +				switch (readkey()) { /* grab extd keystroke */ +				case 'H': +					if (page_ > 1)  showpage(page_ - 1); +					break; +				case 'P': +					if (page_ < 6)  showpage(page_ + 1); +					break; +				case 'G': +				case 'I': +					showpage(1); +					break; +				case 'O': +				case 'Q': +					showpage(6); +					break; +				} +			else if (set::of('\33', 'Q', 'X', 'E', 'H', eos).has(r))  lmo = true; /* quit */ +		} else { +			;     /* mouse choice */ +			if ((mousex > 400) && (mousey > 25)) { +				; +				showpage(mousey / 25); +			} +		} +	} while (!lmo); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/help2.cpp b/engines/avalanche/help2.cpp index 1fc41b6e48..1ef6443fc7 100644 --- a/engines/avalanche/help2.cpp +++ b/engines/avalanche/help2.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 @@ -30,243 +30,286 @@  namespace Avalanche { -typedef matrix<'\0','\377',0,15,byte> fonttype; +typedef matrix < '\0', '\377', 0, 15, byte > fonttype;  struct hypertype { -             char trigger; -             byte line; -             byte start,finish; -             word ref; +	char trigger; +	byte line; +	byte start, finish; +	word ref;  }; -integer gd,gm; -array<1,2,fonttype> font; -matrix<0,7,1,80,byte> current; -array<1,250,varying_string<79> > data; -integer fv,position,size; +integer gd, gm; +array<1, 2, fonttype> font; +matrix<0, 7, 1, 80, byte> current; +array<1, 250, varying_string<79> > data; +integer fv, position, size;  varying_string<79> title; -array<1,20,hypertype> link; +array<1, 20, hypertype> link;  byte numlinks;  char r; -array<0,9,byte> reverse; -array<0,9,byte> revpos; +array<0, 9, byte> reverse; +array<0, 9, byte> revpos; -void loadfont() -{ -    file<fonttype> fontfile; -; - assign(fontfile,"c:\\thomas\\ttsmall.fnt"); reset(fontfile); - fontfile >> font[1]; close(fontfile); -/* assign(fontfile,'c:\avalot\avalot.fnt'); reset(fontfile); - read(fontfile,font[2]); close(fontfile);*/ - /* NB: We'll put BOTH of these fonts one after the other, in the same -   file, in the final compilation. */ +void loadfont() { +	file<fonttype> fontfile; +	; +	assign(fontfile, "c:\\thomas\\ttsmall.fnt"); +	reset(fontfile); +	fontfile >> font[1]; +	close(fontfile); +	/* assign(fontfile,'c:\avalot\avalot.fnt'); reset(fontfile); +	 read(fontfile,font[2]); close(fontfile);*/ +	/* NB: We'll put BOTH of these fonts one after the other, in the same +	  file, in the final compilation. */  } -void scribe(byte which,byte what); +void scribe(byte which, byte what); -static void underline(byte& x) {; x=x | 177; } +static void underline(byte &x) { +	; +	x = x | 177; +} -void scribe(byte which,byte what) -{ -    byte fv,ff; string x; -; - x=data[what]; - fillchar(current,sizeof(current),'\0'); - for( ff=1; ff <= length(x); ff ++) -  for( fv=0; fv <= 7; fv ++) -  {; -   current[fv][ff]=font[which][x[ff]][fv]; -  } +void scribe(byte which, byte what) { +	byte fv, ff; +	string x; +	; +	x = data[what]; +	fillchar(current, sizeof(current), '\0'); +	for (ff = 1; ff <= length(x); ff ++) +		for (fv = 0; fv <= 7; fv ++) { +			; +			current[fv][ff] = font[which][x[ff]][fv]; +		} - for( fv=1; fv <= numlinks; fv ++) -  { hypertype& with = link[fv];  -   if (with.line==what)  -    for( ff=with.start; ff <= with.finish; ff ++) -     underline(current[7][ff]);} +	for (fv = 1; fv <= numlinks; fv ++) { +		hypertype &with = link[fv]; +		if (with.line == what) +			for (ff = with.start; ff <= with.finish; ff ++) +				underline(current[7][ff]); +	}  } -void display(word y) -{; - for( fv=0; fv <= 7; fv ++) -  move(current[fv],mem[0xa000*(y+fv)*80],79); +void display(word y) { +	; +	for (fv = 0; fv <= 7; fv ++) +		move(current[fv], mem[0xa000 * (y + fv) * 80], 79);  } -void update_link(char which, byte whence,byte whither) -{ -    byte fv; -; - for( fv=1; fv <= numlinks; fv ++) -  { hypertype& with = link[fv];  -   if (with.trigger==which)  -   {; -    with.line=size; -    with.start=whence; -    with.finish=whither; -   }} +void update_link(char which, byte whence, byte whither) { +	byte fv; +	; +	for (fv = 1; fv <= numlinks; fv ++) { +		hypertype &with = link[fv]; +		if (with.trigger == which) { +			; +			with.line = size; +			with.start = whence; +			with.finish = whither; +		} +	}  } -void getlinks(string& x) -{ -    byte p,q; -; - do { -  p=pos("[",x); -  if (p==0)  return; /* lousy, huh? */ -  q=pos("]",x);  -  update_link(x[p+1],p,q-3); -  Delete(x,q,1); Delete(x,p,2); - } while (!false); +void getlinks(string &x) { +	byte p, q; +	; +	do { +		p = pos("[", x); +		if (p == 0)  return; /* lousy, huh? */ +		q = pos("]", x); +		update_link(x[p + 1], p, q - 3); +		Delete(x, q, 1); +		Delete(x, p, 2); +	} while (!false);  } -void loaddata(byte which) -{ - text t; - string x; - integer e; -; - revpos[9]=position; - fillchar(data,sizeof(data),'\0'); - move(reverse[1],reverse[0],9); - move(revpos[1],revpos[0],9); - reverse[9]=which; revpos[9]=1; +void loaddata(byte which) { +	text t; +	string x; +	integer e; +	; +	revpos[9] = position; +	fillchar(data, sizeof(data), '\0'); +	move(reverse[1], reverse[0], 9); +	move(revpos[1], revpos[0], 9); +	reverse[9] = which; +	revpos[9] = 1; - str(which,x); - assign(t,string('h')+x+".raw"); - reset(t); - t >> title >> NL; - size=0; numlinks=0; - while (! eof(t))  - {; -  t >> x >> NL; -  if (x[1]==':')  -  {; -   numlinks += 1; -   { -   hypertype& with = link[numlinks];  -   ; -    with.trigger=x[2]; -    Delete(x,1,3); -    Delete(x,pos(" ",x),255); -    val(x,with.ref,e); -   } -  } else {; -   size += 1; -   getlinks(x); -   data[size]=x; -  } - } - position=1; size -= 15; - close(t); +	str(which, x); +	assign(t, string('h') + x + ".raw"); +	reset(t); +	t >> title >> NL; +	size = 0; +	numlinks = 0; +	while (! eof(t)) { +		; +		t >> x >> NL; +		if (x[1] == ':') { +			; +			numlinks += 1; +			{ +				hypertype &with = link[numlinks]; +				; +				with.trigger = x[2]; +				Delete(x, 1, 3); +				Delete(x, pos(" ", x), 255); +				val(x, with.ref, e); +			} +		} else { +			; +			size += 1; +			getlinks(x); +			data[size] = x; +		} +	} +	position = 1; +	size -= 15; +	close(t);  } -void screen() -{; - setbkcolor(1); - setfillstyle(1,1);  bar(0,0,640,38); - setfillstyle(1,14); bar(0,39,640,39); +void screen() { +	; +	setbkcolor(1); +	setfillstyle(1, 1); +	bar(0, 0, 640, 38); +	setfillstyle(1, 14); +	bar(0, 39, 640, 39);  } -void showscreen() -{ -    byte fv; -; - if (position<1)  position=1; - for( fv=0; fv <= 15; fv ++) - {; -  scribe(1,fv+position); -  display(41+fv*10); - } +void showscreen() { +	byte fv; +	; +	if (position < 1)  position = 1; +	for (fv = 0; fv <= 15; fv ++) { +		; +		scribe(1, fv + position); +		display(41 + fv * 10); +	}  } -void up() -{ -    byte fv; -; - position -= 1; - scribe(1,position); - for( fv=0; fv <= 9; fv ++) - {; -  move(mem[0xa000*3200],mem[0xa000*3280],12720); -  if (set::of(0,9, eos).has(fv))  fillchar(mem[0xa000*3200],79,'\0'); else -   move(current[8-fv],mem[0xa000*3200],80); - } +void up() { +	byte fv; +	; +	position -= 1; +	scribe(1, position); +	for (fv = 0; fv <= 9; fv ++) { +		; +		move(mem[0xa000 * 3200], mem[0xa000 * 3280], 12720); +		if (set::of(0, 9, eos).has(fv))  fillchar(mem[0xa000 * 3200], 79, '\0'); +		else +			move(current[8 - fv], mem[0xa000 * 3200], 80); +	}  } -void down() -{ -    byte fv; -; - position += 1; - scribe(1,position+15); - for( fv=0; fv <= 9; fv ++) - {; -  move(mem[0xa000*3280],mem[0xa000*3200],12720); -  if (set::of(0,9, eos).has(fv))  fillchar(mem[0xa000*15920],79,'\0'); else -   move(current[fv-1],mem[0xa000*15920],80); - } +void down() { +	byte fv; +	; +	position += 1; +	scribe(1, position + 15); +	for (fv = 0; fv <= 9; fv ++) { +		; +		move(mem[0xa000 * 3280], mem[0xa000 * 3200], 12720); +		if (set::of(0, 9, eos).has(fv))  fillchar(mem[0xa000 * 15920], 79, '\0'); +		else +			move(current[fv - 1], mem[0xa000 * 15920], 80); +	}  } -void newpage(char c) -{ -    byte fv; -; - for( fv=1; fv <= numlinks; fv ++) -  { hypertype& with = link[fv];  -   if (with.trigger==c)  -   {; -    loaddata(with.ref); -    showscreen(); -   }} +void newpage(char c) { +	byte fv; +	; +	for (fv = 1; fv <= numlinks; fv ++) { +		hypertype &with = link[fv]; +		if (with.trigger == c) { +			; +			loaddata(with.ref); +			showscreen(); +		} +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - loadfont(); - screen(); - loaddata(0); - showscreen(); - fillchar(reverse,sizeof(reverse),'\0'); - fillchar(revpos,sizeof(revpos),'\1'); - do { -  r=upcase(readkey()); -  switch (r) { -   case '\0': switch (readkey()) { -        case 'H': if (position>1)  up(); break; -        case 'P': if (position<size)  down(); break; -        case 'I': {; position -= 16; showscreen(); } break; -        case 'Q': {; position += 16; showscreen(); } break; -        case 'G': {; position=1; showscreen(); } break; -        case 'O': {; position=size; showscreen(); } break; -    } -    break; -   case 'B': {; /* go Back */ -         gd=reverse[8]; -         gm=revpos[8]; -         move(reverse[0],reverse[2],8); -         move(revpos[0],revpos[2],8); -         loaddata(gd); position=gm; -         showscreen(); -        } -        break; -   case 'C': {; /* Contents */ -         loaddata(0); -         showscreen(); -        } -        break; -   case 'H': {; -         loaddata(7); /* help on help */ -         showscreen(); -        } -        break; -   case '\33': exit(0); break; -   default: newpage(r); -  } - } while (!false); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	loadfont(); +	screen(); +	loaddata(0); +	showscreen(); +	fillchar(reverse, sizeof(reverse), '\0'); +	fillchar(revpos, sizeof(revpos), '\1'); +	do { +		r = upcase(readkey()); +		switch (r) { +		case '\0': +			switch (readkey()) { +			case 'H': +				if (position > 1)  up(); +				break; +			case 'P': +				if (position < size)  down(); +				break; +			case 'I': { +				; +				position -= 16; +				showscreen(); +			} +			break; +			case 'Q': { +				; +				position += 16; +				showscreen(); +			} +			break; +			case 'G': { +				; +				position = 1; +				showscreen(); +			} +			break; +			case 'O': { +				; +				position = size; +				showscreen(); +			} +			break; +			} +			break; +		case 'B': { +			; /* go Back */ +			gd = reverse[8]; +			gm = revpos[8]; +			move(reverse[0], reverse[2], 8); +			move(revpos[0], revpos[2], 8); +			loaddata(gd); +			position = gm; +			showscreen(); +		} +		break; +		case 'C': { +			; /* Contents */ +			loaddata(0); +			showscreen(); +		} +		break; +		case 'H': { +			; +			loaddata(7); /* help on help */ +			showscreen(); +		} +		break; +		case '\33': +			exit(0); +			break; +		default: +			newpage(r); +		} +	} while (!false); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/helpbak.cpp b/engines/avalanche/helpbak.cpp index b5513f3be6..3e60289a33 100644 --- a/engines/avalanche/helpbak.cpp +++ b/engines/avalanche/helpbak.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 @@ -44,145 +44,176 @@  namespace Avalanche {  struct buttontype { -             char trigger; -             byte whither; +	char trigger; +	byte whither;  };  const integer buttonsize = 930; -const integer toolbar = 0; const integer nim = 1; const integer kbd = 2; const integer credits = 3; const integer joystick = 4; const integer troubleshooting = 5; const integer story = 6; -const integer mainscreen = 7; const integer registering = 8; const integer sound = 9; const integer mouse = 10; const integer filer = 11; const integer back2game = 12; -const integer helponhelp = 13; const integer pgdn = 14; const integer pgup = 15; - -array<1,10,buttontype> buttons; - -void plot_button(integer y, byte which) -{ - untyped_file f; - pointer p; - - getmem(p,buttonsize); - assign(f,"buttons.avd"); - reset(f,1); - seek(f,which*buttonsize); - blockread(f,p,buttonsize); - putimage(470,y,p,0); - close(f); - freemem(p,buttonsize); +const integer toolbar = 0; +const integer nim = 1; +const integer kbd = 2; +const integer credits = 3; +const integer joystick = 4; +const integer troubleshooting = 5; +const integer story = 6; +const integer mainscreen = 7; +const integer registering = 8; +const integer sound = 9; +const integer mouse = 10; +const integer filer = 11; +const integer back2game = 12; +const integer helponhelp = 13; +const integer pgdn = 14; +const integer pgup = 15; + +array<1, 10, buttontype> buttons; + +void plot_button(integer y, byte which) { +	untyped_file f; +	pointer p; + +	getmem(p, buttonsize); +	assign(f, "buttons.avd"); +	reset(f, 1); +	seek(f, which * buttonsize); +	blockread(f, p, buttonsize); +	putimage(470, y, p, 0); +	close(f); +	freemem(p, buttonsize);  }  void getme(byte which); -static void chalk(byte y, string z) -{ - outtextxy(16,41+y*10,z); +static void chalk(byte y, string z) { +	outtextxy(16, 41 + y * 10, z);  } -void getme(byte which)       /* Help icons are 80x20 */ -{ - string x; - text t; - byte y,fv; - - - str(which,x); - assign(t,string('h')+x+".raw"); - y=0; - reset(t); - - t >> x >> NL; - setfillstyle(1,1); bar(0,0,640,200); - setfillstyle(1,15); bar(8,40,450,200); - settextjustify(1,1); setcolor(14); - outtextxy(320,15,x); - settextjustify(0,2); - setcolor(3); settextstyle(0,0,2); - outtextxy(550,0,"help!"); - /***/ setcolor(0); settextstyle(0,0,1); - - do { -  t >> x >> NL; -  if (x=='!')  flush(); /* End of the help text is signalled with a !. */ -  chalk(y,x); -  y += 1; - } while (!false); - - /* We are now at the end of the text. Next we must read the icons. */ - - y=0; settextjustify(1,1); setcolor(3); - while (! eof(t))  - { -  y += 1; -  t >> x >> NL; /* Get the name of this button, and... */ -  if (x!='-')    /* (hyphen signals an empty button.) */ -  { -   t >> buttons[y].trigger >> NL; -   t >> fv >> NL; plot_button(13+y*27,fv); -   t >> buttons[y].whither >> NL; /* this is the position to jump to */ - -   switch (buttons[y].trigger) { -     case 'þ' : outtextxy(580,25+y*27,"Esc"); break; -     case 'Ö' : outtextxy(580,25+y*27,"\30"); break; -     case 'Ø' : outtextxy(580,25+y*27,"\31"); break; -   default: -    outtextxy(580,25+y*27,buttons[y].trigger); -   } - -  } else buttons[y].trigger='\0'; - } - - settextjustify(0,2); - close(t); +void getme(byte which) {     /* Help icons are 80x20 */ +	string x; +	text t; +	byte y, fv; + + +	str(which, x); +	assign(t, string('h') + x + ".raw"); +	y = 0; +	reset(t); + +	t >> x >> NL; +	setfillstyle(1, 1); +	bar(0, 0, 640, 200); +	setfillstyle(1, 15); +	bar(8, 40, 450, 200); +	settextjustify(1, 1); +	setcolor(14); +	outtextxy(320, 15, x); +	settextjustify(0, 2); +	setcolor(3); +	settextstyle(0, 0, 2); +	outtextxy(550, 0, "help!"); +	/***/ setcolor(0); +	settextstyle(0, 0, 1); + +	do { +		t >> x >> NL; +		if (x == '!')  flush(); /* End of the help text is signalled with a !. */ +		chalk(y, x); +		y += 1; +	} while (!false); + +	/* We are now at the end of the text. Next we must read the icons. */ + +	y = 0; +	settextjustify(1, 1); +	setcolor(3); +	while (! eof(t)) { +		y += 1; +		t >> x >> NL; /* Get the name of this button, and... */ +		if (x != '-') { /* (hyphen signals an empty button.) */ +			t >> buttons[y].trigger >> NL; +			t >> fv >> NL; +			plot_button(13 + y * 27, fv); +			t >> buttons[y].whither >> NL; /* this is the position to jump to */ + +			switch (buttons[y].trigger) { +			case 'þ' : +				outtextxy(580, 25 + y * 27, "Esc"); +				break; +			case 'Ö' : +				outtextxy(580, 25 + y * 27, "\30"); +				break; +			case 'Ø' : +				outtextxy(580, 25 + y * 27, "\31"); +				break; +			default: +				outtextxy(580, 25 + y * 27, buttons[y].trigger); +			} + +		} else buttons[y].trigger = '\0'; +	} + +	settextjustify(0, 2); +	close(t);  } -void continue_help() -{ - char r; - byte fv; - - do { -  r=upcase(readkey()); -  switch (r) { -   case '\33' : return; break; -   case '\0'  : switch (readkey()) { -          case '\110':case '\111': r='Ö'; break; -          case '\120':case '\121': r='Ø'; break; -          case '\73': r='H'; break; /* Help on help */ -         } -         break; -  } - -  for( fv=1; fv <= 10; fv ++) -   { buttontype& with = buttons[fv];  -    if (with.trigger==r)  -    { -     dusk; -     getme(with.whither); -     dawn; -     flush(); -    }} - - } while (!false); +void continue_help() { +	char r; +	byte fv; + +	do { +		r = upcase(readkey()); +		switch (r) { +		case '\33' : +			return; +			break; +		case '\0'  : +			switch (readkey()) { +			case '\110': +			case '\111': +				r = 'Ö'; +				break; +			case '\120': +			case '\121': +				r = 'Ø'; +				break; +			case '\73': +				r = 'H'; +				break; /* Help on help */ +			} +			break; +		} + +		for (fv = 1; fv <= 10; fv ++) { +			buttontype &with = buttons[fv]; +			if (with.trigger == r) { +				dusk; +				getme(with.whither); +				dawn; +				flush(); +			} +		} + +	} while (!false);  } -void boot_help() -{ - setactivepage(2); +void boot_help() { +	setactivepage(2); - getme(0); +	getme(0); - dusk; - setvisualpage(2); - dawn; +	dusk; +	setvisualpage(2); +	dawn; - continue_help(); +	continue_help(); - dusk; - setvisualpage(cp); - draw_also_lines; - setactivepage(1-cp); - dawn; +	dusk; +	setvisualpage(cp); +	draw_also_lines; +	setactivepage(1 - cp); +	dawn;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/helpbak.h b/engines/avalanche/helpbak.h index 4025aa882d..e2efd967e1 100644 --- a/engines/avalanche/helpbak.h +++ b/engines/avalanche/helpbak.h @@ -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 diff --git a/engines/avalanche/helper.cpp b/engines/avalanche/helper.cpp index 397c63fd7f..76948b85da 100644 --- a/engines/avalanche/helper.cpp +++ b/engines/avalanche/helper.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 @@ -45,38 +45,54 @@  namespace Avalanche {  struct buttontype { -             char trigger; -             byte whither; +	char trigger; +	byte whither;  };  const integer buttonsize = 930; -const integer toolbar = 0; const integer nim = 1; const integer kbd = 2; const integer credits = 3; const integer joystick = 4; const integer troubleshooting = 5; const integer story = 6; -const integer mainscreen = 7; const integer registering = 8; const integer sound = 9; const integer mouse = 10; const integer filer = 11; const integer back2game = 12; -const integer helponhelp = 13; const integer pgdn = 14; const integer pgup = 15; - -array<1,10,buttontype> buttons; +const integer toolbar = 0; +const integer nim = 1; +const integer kbd = 2; +const integer credits = 3; +const integer joystick = 4; +const integer troubleshooting = 5; +const integer story = 6; +const integer mainscreen = 7; +const integer registering = 8; +const integer sound = 9; +const integer mouse = 10; +const integer filer = 11; +const integer back2game = 12; +const integer helponhelp = 13; +const integer pgdn = 14; +const integer pgup = 15; + +array<1, 10, buttontype> buttons;  byte highlight_was; -void plot_button(integer y, byte which) -{ - untyped_file f; - pointer p; - - if (y>200)  -  { background(2); delay(10); background(0); return; }     /* Silly buttons. */ - getmem(p,buttonsize); - assign(f,"buttons.avd"); - reset(f,1); - seek(f,which*buttonsize); - blockread(f,p,buttonsize); - - if (y==-177)  -   putimage(229,5,p,0); - else -   putimage(470,y,p,0); - close(f); - freemem(p,buttonsize); +void plot_button(integer y, byte which) { +	untyped_file f; +	pointer p; + +	if (y > 200) { +		background(2);    /* Silly buttons. */ +		delay(10); +		background(0); +		return; +	} +	getmem(p, buttonsize); +	assign(f, "buttons.avd"); +	reset(f, 1); +	seek(f, which * buttonsize); +	blockread(f, p, buttonsize); + +	if (y == -177) +		putimage(229, 5, p, 0); +	else +		putimage(470, y, p, 0); +	close(f); +	freemem(p, buttonsize);  }  void getme(byte which); @@ -84,226 +100,256 @@ void getme(byte which);  static untyped_file f; -static void chalk(byte y, string z) -{ - outtextxy(16,41+y*10,z); +static void chalk(byte y, string z) { +	outtextxy(16, 41 + y * 10, z);  } -static void getline(string& x) -{ -    byte fz; +static void getline(string &x) { +	byte fz; - blockread(f,x[0],1); - blockread(f,x[1],(byte)(x[0])); - for( fz=1; fz <= length(x); fz ++) -   x[fz]=chr(ord(x[fz]) ^ 177); +	blockread(f, x[0], 1); +	blockread(f, x[1], (byte)(x[0])); +	for (fz = 1; fz <= length(x); fz ++) +		x[fz] = chr(ord(x[fz]) ^ 177);  } -void getme(byte which)       /* Help icons are 80x20 */ -{ - string x; - byte y,fv; - word offset; - - - off; - assign(f,"help.avd"); - y=0; - highlight_was=177;  /* Forget where the highlight was. */ - reset(f,1); - seek(f,which*2); - blockread(f,offset,2); - seek(f,offset); - - getline(x); - setfillstyle(1,1); bar(0,0,640,200); - setfillstyle(1,15); bar(8,40,450,200); - settextjustify(2,2); - blockread(f,fv,1); - plot_button(-177,fv); - - setcolor(0); outtextxy(629,26,x);  /* Plot the title. */ - setcolor(3); outtextxy(630,25,x); - - settextjustify(0,2); settextstyle(0,0,2); - setcolor(0); outtextxy(549,1,"help!"); - setcolor(3); outtextxy(550,0,"help!"); - /***/ settextstyle(0,0,1); - - do { -  getline(x); -  if (x=='!')  flush(); /* End of the help text is signalled with a !. */ -  if (x[1]=='\\')  -  { -   setcolor(4); -   chalk(y,copy(x,2,255)); -  } else -  { -   setcolor(0); -   chalk(y,x); -  } -  y += 1; - } while (!false); - - /* We are now at the end of the text. Next we must read the icons. */ - - y=0; settextjustify(1,1); settextstyle(0,0,2); - while (! eof(f))  - { -  y += 1; -  blockread(f,buttons[y].trigger,1); -  if (buttons[y].trigger=='\261')  flush(); -  blockread(f,fv,1); -  if (buttons[y].trigger!='\0')  plot_button(13+y*27,fv); -  blockread(f,buttons[y].whither,1); /* this is the position to jump to */ - - -  switch (buttons[y].trigger) { -    case 'þ' : x="Esc"; break; -    case 'Ö' : x='\30'; break; -    case 'Ø' : x='\31'; break; -  default: -   x=buttons[y].trigger; -  } -  setcolor(0); outtextxy(589,26+y*27,x); -  setcolor(3); outtextxy(590,25+y*27,x); - - } - - settextjustify(0,2); settextstyle(0,0,1); - close(f); on; +void getme(byte which) {     /* Help icons are 80x20 */ +	string x; +	byte y, fv; +	word offset; + + +	off; +	assign(f, "help.avd"); +	y = 0; +	highlight_was = 177; /* Forget where the highlight was. */ +	reset(f, 1); +	seek(f, which * 2); +	blockread(f, offset, 2); +	seek(f, offset); + +	getline(x); +	setfillstyle(1, 1); +	bar(0, 0, 640, 200); +	setfillstyle(1, 15); +	bar(8, 40, 450, 200); +	settextjustify(2, 2); +	blockread(f, fv, 1); +	plot_button(-177, fv); + +	setcolor(0); +	outtextxy(629, 26, x); /* Plot the title. */ +	setcolor(3); +	outtextxy(630, 25, x); + +	settextjustify(0, 2); +	settextstyle(0, 0, 2); +	setcolor(0); +	outtextxy(549, 1, "help!"); +	setcolor(3); +	outtextxy(550, 0, "help!"); +	/***/ settextstyle(0, 0, 1); + +	do { +		getline(x); +		if (x == '!')  flush(); /* End of the help text is signalled with a !. */ +		if (x[1] == '\\') { +			setcolor(4); +			chalk(y, copy(x, 2, 255)); +		} else { +			setcolor(0); +			chalk(y, x); +		} +		y += 1; +	} while (!false); + +	/* We are now at the end of the text. Next we must read the icons. */ + +	y = 0; +	settextjustify(1, 1); +	settextstyle(0, 0, 2); +	while (! eof(f)) { +		y += 1; +		blockread(f, buttons[y].trigger, 1); +		if (buttons[y].trigger == '\261')  flush(); +		blockread(f, fv, 1); +		if (buttons[y].trigger != '\0')  plot_button(13 + y * 27, fv); +		blockread(f, buttons[y].whither, 1); /* this is the position to jump to */ + + +		switch (buttons[y].trigger) { +		case 'þ' : +			x = "Esc"; +			break; +		case 'Ö' : +			x = '\30'; +			break; +		case 'Ø' : +			x = '\31'; +			break; +		default: +			x = buttons[y].trigger; +		} +		setcolor(0); +		outtextxy(589, 26 + y * 27, x); +		setcolor(3); +		outtextxy(590, 25 + y * 27, x); + +	} + +	settextjustify(0, 2); +	settextstyle(0, 0, 1); +	close(f); +	on;  }  byte check_mouse(); -                           /* Returns clicked-on button, or 0 if none. */ -static void light(byte which,byte colour) -{ - if (which==177)  return; /* Dummy value for "no button at all". */ - setcolor(colour); which=which & 31; - rectangle(466,11+which*27,555,35+which*27); +/* Returns clicked-on button, or 0 if none. */ +static void light(byte which, byte colour) { +	if (which == 177)  return; /* Dummy value for "no button at all". */ +	setcolor(colour); +	which = which & 31; +	rectangle(466, 11 + which * 27, 555, 35 + which * 27);  } -byte check_mouse() -{ -    byte h_is; - -  byte check_mouse_result; -  check; - -  if (mrelease!=0)  -  {     /* Clicked *somewhere*... */ -     if ((mx<470) || (mx>550) || (((my-13) % 27)>20))  -       check_mouse_result=0; else -     /* Clicked on a button. */ -       check_mouse_result=((my-13) / 27); -  } else -  { -    if ((mx>470) && (mx<=550) && (((my-13) % 27)<=20))  -    {      /* No click, so highlight. */ -      h_is=(my-13) / 27; -      if ((h_is<1) || (h_is>6))  h_is=177;    /* In case of silly values. */ -    } else h_is=177; - -    if ((h_is!=177) && ((keystatus & 1)>0))  h_is += 32; - -    if (h_is!=highlight_was)  -    { -      off; -      light(highlight_was,1); -      highlight_was=h_is; -      if (buttons[h_is & 31].trigger!='\0')  -      { -        if (h_is>31)  light(h_is,11); else light(h_is,9); -      } -      on; -    } - -    check_mouse_result=0; -  } -  return check_mouse_result; +byte check_mouse() { +	byte h_is; + +	byte check_mouse_result; +	check; + +	if (mrelease != 0) { +		/* Clicked *somewhere*... */ +		if ((mx < 470) || (mx > 550) || (((my - 13) % 27) > 20)) +			check_mouse_result = 0; +		else +			/* Clicked on a button. */ +			check_mouse_result = ((my - 13) / 27); +	} else { +		if ((mx > 470) && (mx <= 550) && (((my - 13) % 27) <= 20)) { +			/* No click, so highlight. */ +			h_is = (my - 13) / 27; +			if ((h_is < 1) || (h_is > 6))  h_is = 177; /* In case of silly values. */ +		} else h_is = 177; + +		if ((h_is != 177) && ((keystatus & 1) > 0))  h_is += 32; + +		if (h_is != highlight_was) { +			off; +			light(highlight_was, 1); +			highlight_was = h_is; +			if (buttons[h_is & 31].trigger != '\0') { +				if (h_is > 31)  light(h_is, 11); +				else light(h_is, 9); +			} +			on; +		} + +		check_mouse_result = 0; +	} +	return check_mouse_result;  } -void continue_help() -{ - char r; - byte fv; - - do { -  while (! keypressed())  -  { -   fv=check_mouse(); - -   if (fv>0)  -    switch (buttons[fv].trigger) { -     case '\0':/*null*/; break; -     case '\376': return; break; -     default: { -            dusk; -            getme(buttons[fv].whither); -            dawn; -            continue_; -          } -    } - -  } -  r=upcase(readkey()); -  switch (r) { -   case '\33' : return; break; -   case '\0'  : switch (readkey()) { -          case '\110':case '\111': r='Ö'; break; -          case '\120':case '\121': r='Ø'; break; -          case '\73': r='H'; break; /* Help on help */ -          default: continue_; -         } -         break; -  } - -  for( fv=1; fv <= 10; fv ++) -   { buttontype& with = buttons[fv];  -    if (with.trigger==r)  -    { -     dusk; -     getme(with.whither); -     dawn; -     flush(); -    }} - - } while (!false); +void continue_help() { +	char r; +	byte fv; + +	do { +		while (! keypressed()) { +			fv = check_mouse(); + +			if (fv > 0) +				switch (buttons[fv].trigger) { +				case '\0':/*null*/ +					; +					break; +				case '\376': +					return; +					break; +				default: { +					dusk; +					getme(buttons[fv].whither); +					dawn; +					continue_; +				} +				} + +		} +		r = upcase(readkey()); +		switch (r) { +		case '\33' : +			return; +			break; +		case '\0'  : +			switch (readkey()) { +			case '\110': +			case '\111': +				r = 'Ö'; +				break; +			case '\120': +			case '\121': +				r = 'Ø'; +				break; +			case '\73': +				r = 'H'; +				break; /* Help on help */ +			default: +				continue_; +			} +			break; +		} + +		for (fv = 1; fv <= 10; fv ++) { +			buttontype &with = buttons[fv]; +			if (with.trigger == r) { +				dusk; +				getme(with.whither); +				dawn; +				flush(); +			} +		} + +	} while (!false);  } -void boot_help() -{ -    byte groi; - - dusk; - off; - oncandopageswap=false; highlight_was=177; - copypage(3,1-cp); /* Store old screen. */ groi=getpixel(0,0); - - /* Set up mouse. */ - off_virtual; - newpointer(2); - setactivepage(3); setvisualpage(3); - - getme(0); - dawn; - - newpointer(9); on; - mousepage(3); - - continue_help(); - - 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); +void boot_help() { +	byte groi; + +	dusk; +	off; +	oncandopageswap = false; +	highlight_was = 177; +	copypage(3, 1 - cp); /* Store old screen. */ groi = getpixel(0, 0); + +	/* Set up mouse. */ +	off_virtual; +	newpointer(2); +	setactivepage(3); +	setvisualpage(3); + +	getme(0); +	dawn; + +	newpointer(9); +	on; +	mousepage(3); + +	continue_help(); + +	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);  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/helper.h b/engines/avalanche/helper.h index bc4afbd54b..0c4d2c7860 100644 --- a/engines/avalanche/helper.h +++ b/engines/avalanche/helper.h @@ -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 diff --git a/engines/avalanche/hibits.cpp b/engines/avalanche/hibits.cpp index fbdc662911..013141998c 100644 --- a/engines/avalanche/hibits.cpp +++ b/engines/avalanche/hibits.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 @@ -27,29 +27,31 @@  namespace Avalanche { -file<char> inf,outf; +file<char> inf, outf;  char x;  string q;  byte fv; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - assign(inf,"v:thank.you"); - assign(outf,"d:hibits.out"); - reset(inf); rewrite(outf); - - q=string('\40')+"(Seven is a bit of a lucky number.)"+'\40'+'\215'+'\212'+'\212'; - - for( fv=1; fv <= length(q); fv ++) outf << q[fv]; - - while (! eof(inf))  - {; -  inf >> x; -  if (x<'\200')  x += 128; -  outf << x; - } - close(inf); close(outf); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	assign(inf, "v:thank.you"); +	assign(outf, "d:hibits.out"); +	reset(inf); +	rewrite(outf); + +	q = string('\40') + "(Seven is a bit of a lucky number.)" + '\40' + '\215' + '\212' + '\212'; + +	for (fv = 1; fv <= length(q); fv ++) outf << q[fv]; + +	while (! eof(inf)) { +		; +		inf >> x; +		if (x < '\200')  x += 128; +		outf << x; +	} +	close(inf); +	close(outf); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/highs.cpp b/engines/avalanche/highs.cpp index bb4909b067..09d073d3a7 100644 --- a/engines/avalanche/highs.cpp +++ b/engines/avalanche/highs.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 @@ -43,102 +43,107 @@  namespace Avalanche { -typedef array<1,12,struct A1 { -                                 varying_string<30> name; -                                 word score; -                                 varying_string<12> rank; -                   }> highscoretype; +typedef array < 1, 12, struct A1 { +	varying_string<30> name; +	word score; +	varying_string<12> rank; +} > highscoretype;  highscoretype h; -void get_new_highs() -{ -    byte fv; -; - for( fv=1; fv <= 12; fv ++) -  { -  A1& with = h[fv];  -  ; -   with.score=32-fv*2; -   with.rank="..."; -  } - h[1].name="Mike"; h[2].name="Liz";  h[3].name="Thomas"; h[4].name="Mark"; - h[5].name="Mandy"; h[6].name="Andrew";  h[7].name="Lucy Tryphena"; - h[8].name="Tammy the dog"; - h[9].name="Avaricius"; h[10].name="Spellchick";  h[11].name="Caddelli"; - h[12].name="Spludwick"; +void get_new_highs() { +	byte fv; +	; +	for (fv = 1; fv <= 12; fv ++) { +		A1 &with = h[fv]; +		; +		with.score = 32 - fv * 2; +		with.rank = "..."; +	} +	h[1].name = "Mike"; +	h[2].name = "Liz"; +	h[3].name = "Thomas"; +	h[4].name = "Mark"; +	h[5].name = "Mandy"; +	h[6].name = "Andrew"; +	h[7].name = "Lucy Tryphena"; +	h[8].name = "Tammy the dog"; +	h[9].name = "Avaricius"; +	h[10].name = "Spellchick"; +	h[11].name = "Caddelli"; +	h[12].name = "Spludwick";  }  void show_highs() - /* This procedure shows the high-scores. */ +/* This procedure shows the high-scores. */  { - byte fv; - varying_string<40> x; - varying_string<5> y; -; - display("HIGH SCORERS\3\r  Name\n\nScore   Rank\r  \"\"\"\"\n\n\"\"\"\"\"   \"\"\"\"\f\4"); - for( fv=1; fv <= 12; fv ++) -  { -  A1& with = h[fv];  -  ; -   display(string('\15')+with.name+'\4'); -   fillchar(x,sizeof(x),'\40'); -   y=strf(with.score); -   x[0]=chr(29-(length(with.name+y))); -   display(x+y+' '+with.rank+'\4'); -  } - - display(""); +	byte fv; +	varying_string<40> x; +	varying_string<5> y; +	; +	display("HIGH SCORERS\3\r  Name\n\nScore   Rank\r  \"\"\"\"\n\n\"\"\"\"\"   \"\"\"\"\f\4"); +	for (fv = 1; fv <= 12; fv ++) { +		A1 &with = h[fv]; +		; +		display(string('\15') + with.name + '\4'); +		fillchar(x, sizeof(x), '\40'); +		y = strf(with.score); +		x[0] = chr(29 - (length(with.name + y))); +		display(x + y + ' ' + with.rank + '\4'); +	} + +	display("");  }  void store_high(string who) - /* This procedure shows the high-scores. */ +/* This procedure shows the high-scores. */  { - byte fv,ff; -; +	byte fv, ff; +	; - for( fv=1; fv <= 12; fv ++) -  if (h[fv].score<dna.score)  flush(); +	for (fv = 1; fv <= 12; fv ++) +		if (h[fv].score < dna.score)  flush(); - /* Shift all the lower scores down a space. */ - for( ff=fv; ff <= 11; ff ++) -  h[ff+1]=h[ff]; +	/* Shift all the lower scores down a space. */ +	for (ff = fv; ff <= 11; ff ++) +		h[ff + 1] = h[ff]; - { - A1& with = h[fv];  - ; -  with.name=who; -  with.score=dna.score; - } +	{ +		A1 &with = h[fv]; +		; +		with.name = who; +		with.score = dna.score; +	}  } -void get_highs() -{ -    file<highscoretype> f; -; - /*$I-*/ - assign(f,"scores.avd"); - reset(f); -  /* Did we get it? */ - - if (ioresult!=0)  - {;     /* No. */ -  get_new_highs(); /* Invent one. */ - } else - {;     /* Yes. */ -  f >> h; -  close(f); - } +void get_highs() { +	file<highscoretype> f; +	; +	/*$I-*/ +	assign(f, "scores.avd"); +	reset(f); +	/* Did we get it? */ + +	if (ioresult != 0) { +		;     /* No. */ +		get_new_highs(); /* Invent one. */ +	} else { +		;     /* Yes. */ +		f >> h; +		close(f); +	}  }  class unit_highs_initialize { -  public: unit_highs_initialize(); +public: +	unit_highs_initialize();  };  static unit_highs_initialize highs_constructor; -unit_highs_initialize::unit_highs_initialize() {; - get_highs(); +unit_highs_initialize::unit_highs_initialize() { +	; +	get_highs();  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/highs.h b/engines/avalanche/highs.h index a4937cbab4..2d9061cd99 100644 --- a/engines/avalanche/highs.h +++ b/engines/avalanche/highs.h @@ -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 @@ -30,9 +30,9 @@  namespace Avalanche { -  void show_highs(); +void show_highs(); -  void store_high(string who); +void store_high(string who);  } // End of namespace Avalanche. diff --git a/engines/avalanche/hiz.cpp b/engines/avalanche/hiz.cpp index f5f106ea0b..2f9e603b9e 100644 --- a/engines/avalanche/hiz.cpp +++ b/engines/avalanche/hiz.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 @@ -34,202 +34,273 @@  namespace Avalanche { -    /* program's signature */ +/* program's signature */  const varying_string<20> tsr_tmark = "FISH FISH FISH!!!"; -integer gd,gm; +integer gd, gm;  byte a /*absolute $A000:0*/; -matrix<1,800,0,3,byte> sv; -byte bit; string nam; -byte tsr_int; word tsr_ax; - -void grab() -{; - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  move(a,sv[1][bit],800); - } +matrix<1, 800, 0, 3, byte> sv; +byte bit; +string nam; +byte tsr_int; +word tsr_ax; + +void grab() { +	; +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		move(a, sv[1][bit], 800); +	}  } -void drop() -{; - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  move(sv[1][bit],a,800); - } +void drop() { +	; +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		move(sv[1][bit], a, 800); +	}  } -void say(string x) -{; - grab(); output << string('\15')+x; +void say(string x) { +	; +	grab(); +	output << string('\15') + x;  } -void pak(string x) -{ -    char r; -; - say(x+" (press any key...)"); r=readkey(); drop(); +void pak(string x) { +	char r; +	; +	say(x + " (press any key...)"); +	r = readkey(); +	drop();  } -string typein() -{ -    char r; string x; -string typein_result; -; - x=""; - do { -  r=readkey(); -  switch (r) { -    case '\10': if (x[0]>'\0')  {; output << string('\10')+'\40'+'\10'; x[0] -= 1; } break; -   case '\15': {; typein_result=x;  return typein_result; } break; -   case '\33': {; typein_result=""; return typein_result; } break; -   default: if (x[0]<'\62')  {; x=x+r; output << r; } -  } - } while (!false); -return typein_result; +string typein() { +	char r; +	string x; +	string typein_result; +	; +	x = ""; +	do { +		r = readkey(); +		switch (r) { +		case '\10': +			if (x[0] > '\0')  { +				; +				output << string('\10') + '\40' + '\10'; +				x[0] -= 1; +			} +			break; +		case '\15': { +			; +			typein_result = x; +			return typein_result; +		} +		break; +		case '\33': { +			; +			typein_result = ""; +			return typein_result; +		} +		break; +		default: +			if (x[0] < '\62')  { +				; +				x = x + r; +				output << r; +			} +		} +	} while (!false); +	return typein_result;  } -void load() -{ -    byte a /*absolute $A000:1200*/; untyped_file f; -; - say("LOAD: filename?"); nam=typein(); drop(); - if (nam=="")  return; - assign(f,nam); reset(f,1); - if (ioresult!=0)  - {; -  pak("LOAD: file not found."); return; - } - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a,12080); -  if (ioresult!=0)  -  {; -   pak("LOAD: error whilst loading."); close(f); return; -  } - } - close(f); +void load() { +	byte a /*absolute $A000:1200*/; +	untyped_file f; +	; +	say("LOAD: filename?"); +	nam = typein(); +	drop(); +	if (nam == "")  return; +	assign(f, nam); +	reset(f, 1); +	if (ioresult != 0) { +		; +		pak("LOAD: file not found."); +		return; +	} +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a, 12080); +		if (ioresult != 0) { +			; +			pak("LOAD: error whilst loading."); +			close(f); +			return; +		} +	} +	close(f);  } -void save() -{ -      const string header =  - string("This is a file from an Avvy game, and its contents are subject to ")+ - "copyright."+'\15'+'\12'+'\15'+'\12'+"Have fun!"+'\32'; -    untyped_file f; varying_string<30> screenname; searchrec s; char r; -byte a /*absolute $A000:1200*/; -; - say("SAVE: filename?"); nam=typein(); drop(); - if (nam=="")  return; - findfirst(nam,anyfile,s); if (doserror==0)  - {; -  say("SAVE: That exists, are you sure\? (Y/N)"); -  do { r=upcase(readkey()); } while (!(set::of('Y','N', eos).has(r))); drop(); -  if (r=='N')  return; - } - screenname="Saved with HIZ."; - assign(f,nam); rewrite(f,1); blockwrite(f,header[1],146); - blockwrite(f,screenname,31); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockwrite(f,a,12080); -  if (ioresult!=0)  -  {; -   pak("SAVE: error whilst saving."); close(f); return; -  } - } +void save() { +	const string header = +	    string("This is a file from an Avvy game, and its contents are subject to ") + +	    "copyright." + '\15' + '\12' + '\15' + '\12' + "Have fun!" + '\32'; +	untyped_file f; +	varying_string<30> screenname; +	searchrec s; +	char r; +	byte a /*absolute $A000:1200*/; +	; +	say("SAVE: filename?"); +	nam = typein(); +	drop(); +	if (nam == "")  return; +	findfirst(nam, anyfile, s); +	if (doserror == 0) { +		; +		say("SAVE: That exists, are you sure\? (Y/N)"); +		do { +			r = upcase(readkey()); +		} while (!(set::of('Y', 'N', eos).has(r))); +		drop(); +		if (r == 'N')  return; +	} +	screenname = "Saved with HIZ."; +	assign(f, nam); +	rewrite(f, 1); +	blockwrite(f, header[1], 146); +	blockwrite(f, screenname, 31); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockwrite(f, a, 12080); +		if (ioresult != 0) { +			; +			pak("SAVE: error whilst saving."); +			close(f); +			return; +		} +	}  } -void hedges() -{; - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  fillchar(mem[0xa000*14*80],80,'\377'); -  fillchar(mem[0xa000*166*80],80,'\377'); - } +void hedges() { +	; +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		fillchar(mem[0xa000 * 14 * 80], 80, '\377'); +		fillchar(mem[0xa000 * 166 * 80], 80, '\377'); +	}  } -void reset_() -{ -    registers regs; -; - regs.ax=14; - intr(0x10,regs); - directvideo=false; +void reset_() { +	registers regs; +	; +	regs.ax = 14; +	intr(0x10, regs); +	directvideo = false;  } -void do_pop() -{ -    char r; -; - do { -  say("HIZ: Load Save Hedges Reset eXit?"); r=upcase(readkey()); drop(); -  switch (r) { -   case 'L': load(); break; -   case 'S': save(); break; -   case 'H': hedges(); break; -   case 'R': reset_(); break; -   case 'X': return; break; -  } - } while (!false); +void do_pop() { +	char r; +	; +	do { +		say("HIZ: Load Save Hedges Reset eXit?"); +		r = upcase(readkey()); +		drop(); +		switch (r) { +		case 'L': +			load(); +			break; +		case 'S': +			save(); +			break; +		case 'H': +			hedges(); +			break; +		case 'R': +			reset_(); +			break; +		case 'X': +			return; +			break; +		} +	} while (!false);  }  /* Now for the TSR stuff */ -void mypoprtn() -{ -    registers r; -; - beginpop; - do_pop(); - endpop; +void mypoprtn() { +	registers r; +	; +	beginpop; +	do_pop(); +	endpop;  }  /**********************/ -void stop_tsr() -{; - if (tsrexit)  -  output << "HIZ stopped" << NL; - else -  output << "Unable to stop HIZ - other TSR has been installed." << NL; +void stop_tsr() { +	; +	if (tsrexit) +		output << "HIZ stopped" << NL; +	else +		output << "Unable to stop HIZ - other TSR has been installed." << NL;  }  /**********************/  /* This interrupt is called at program start-up. Its purpose is to provide   a way to communicate with an installed copy of the TSR through cmdline   params. The installation of the intrpt serves to prevent any attempt to   install a 2nd copy of the TSR */ -void tsr_intrtn(word flags,word cs,word ip,word ax,word bx,word cx,word dx,word si,word di,word ds,word es,word bp) +void tsr_intrtn(word flags, word cs, word ip, word ax, word bx, word cx, word dx, word si, word di, word ds, word es, word bp)  /*interrupt;*/ -{; - tsr_ax=ax; - cli; - beginint; - sti; - - switch (tsr_ax) { - case 1: {; -     stop_tsr(); /* Terminate TSR, if poss.*/ -    } -    break; - case 2: {; -     tsroff= true;  /* Suspend TSR */ -     output << "HIZ suspended." << NL; -    } -    break; - case 3: {; -     tsroff=false; -     output << "HIZ restarted" << NL; -    } -    break; -  } - cli; - endint; - sti; +{ +	; +	tsr_ax = ax; +	cli; +	beginint; +	sti; + +	switch (tsr_ax) { +	case 1: { +		; +		stop_tsr(); /* Terminate TSR, if poss.*/ +	} +	break; +	case 2: { +		; +		tsroff = true; /* Suspend TSR */ +		output << "HIZ suspended." << NL; +	} +	break; +	case 3: { +		; +		tsroff = false; +		output << "HIZ restarted" << NL; +	} +	break; +	} +	cli; +	endint; +	sti;  }  /*******************/  byte i; @@ -237,78 +308,74 @@ registers r;  string st;  boolean b; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - - /********************************************/ - /* Check to see if TSR is already installed */ - /********************************************/ - - tsr_int=dupcheck(tsr_tmark,&tsr_intrtn); - - /*****************************************/ - /* If it IS already installed, check for */ - /* parameter.                            */ - /*****************************************/ - - if (tsr_int > 0)  - { -  if (paramcount>0)  -  { -   st=paramstr(1); -   for( i=1; i <= length(st); i ++) -   st[i]=upcase(st[i]); -   if (st=="STOP")  -    r.ax=1; -   else if (st=="HOLD")  r.ax=2; -   else if (st=="RSTR")  r.ax=3; -   else r.ax=4; - -   if (r.ax<4)  -   {; -    intr(tsr_int,r); -    return 0; -   } -   else -   {; -    output << "HIZ: invalid parameter " << paramstr(1) << NL; -    output << "Syntax: HIZ stop/hold/rstr" << NL; -    return 0; -   } -   } -  else -  {; -   output << "HIZ already installed." << NL; -   output << "(If you're sure it isn't, try running BLANKINT /I." << NL; -   output << "It's in the TURBO directory.)" << NL; -  } -  return 0; - } - - output << string("Wait...")+'\15'; /* tell 'em to wait...! */ - - /* Call PopSetUp to point to PopUp routine. Include the -   scancode and the keymask to activate the program. In -   this example, the scancode is $23 (H) and the -   keymask is 08h (Alt.) */ - - popsetup(&mypoprtn,0x23,0x8); - - directvideo=false; - output << "Û Û ßÛß ßßÛ v1.0, (c) 1992, Thomas Thurman." << NL; - output << "ÛßÛ  Û  Üß" << NL; - output << "ß ß ßßß ßßß The AVD saving/loading/hedging program." << NL; - output << "            Use with Dr. Genius. The Hot Key is Ctrl-Alt-H." << NL; - - output << NL; - output << " Enter \"HIZ stop\" to remove Hiz from memory" << NL; - output << "       \"HIZ hold\" to temporarily halt Hiz" << NL; - output << "       \"HIZ rstr\" to restart Hiz" << NL; - stacksw=-1; - install_int; - keep(0); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; + +	/********************************************/ +	/* Check to see if TSR is already installed */ +	/********************************************/ + +	tsr_int = dupcheck(tsr_tmark, &tsr_intrtn); + +	/*****************************************/ +	/* If it IS already installed, check for */ +	/* parameter.                            */ +	/*****************************************/ + +	if (tsr_int > 0) { +		if (paramcount > 0) { +			st = paramstr(1); +			for (i = 1; i <= length(st); i ++) +				st[i] = upcase(st[i]); +			if (st == "STOP") +				r.ax = 1; +			else if (st == "HOLD")  r.ax = 2; +			else if (st == "RSTR")  r.ax = 3; +			else r.ax = 4; + +			if (r.ax < 4) { +				; +				intr(tsr_int, r); +				return 0; +			} else { +				; +				output << "HIZ: invalid parameter " << paramstr(1) << NL; +				output << "Syntax: HIZ stop/hold/rstr" << NL; +				return 0; +			} +		} else { +			; +			output << "HIZ already installed." << NL; +			output << "(If you're sure it isn't, try running BLANKINT /I." << NL; +			output << "It's in the TURBO directory.)" << NL; +		} +		return 0; +	} + +	output << string("Wait...") + '\15'; /* tell 'em to wait...! */ + +	/* Call PopSetUp to point to PopUp routine. Include the +	  scancode and the keymask to activate the program. In +	  this example, the scancode is $23 (H) and the +	  keymask is 08h (Alt.) */ + +	popsetup(&mypoprtn, 0x23, 0x8); + +	directvideo = false; +	output << "Û Û ßÛß ßßÛ v1.0, (c) 1992, Thomas Thurman." << NL; +	output << "ÛßÛ  Û  Üß" << NL; +	output << "ß ß ßßß ßßß The AVD saving/loading/hedging program." << NL; +	output << "            Use with Dr. Genius. The Hot Key is Ctrl-Alt-H." << NL; + +	output << NL; +	output << " Enter \"HIZ stop\" to remove Hiz from memory" << NL; +	output << "       \"HIZ hold\" to temporarily halt Hiz" << NL; +	output << "       \"HIZ rstr\" to restart Hiz" << NL; +	stacksw = -1; +	install_int; +	keep(0); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/incline.cpp b/engines/avalanche/incline.cpp index 32dad74874..2c47cee299 100644 --- a/engines/avalanche/incline.cpp +++ b/engines/avalanche/incline.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 @@ -45,156 +45,161 @@ namespace Avalanche {  byte fv;  char t;  string bugline; -boolean zoomy,numlockhold; +boolean zoomy, numlockhold;  boolean filename_specified; -void syntax() -{ - assign(output,""); rewrite(output); - output << NL; - output << string("Lord Avalot d'Argent\n\n(c) ")+copyright+" Mark, Mike and Thomas Thurman." << NL; - output << string("~~~~~~~~~~~~~~~~~~~~~\n\n")+vernum << NL; - output << NL; - output << "Syntax:" << NL; - output << "\n/?\ndisplays this screen," << NL; - output << "\n/O\noverrides EGA check," << NL; - output << "\n/L<f>\nlogs progress to <f>, default AVVY.LOG," << NL; - output << "\n/P<x>\nlogs with Epson codes to <x>, default PRN," << NL; - output << "\n/Q\ncancels sound effects," << NL; - output << "\n/Z\ngoes straight into the game." << NL; - output << NL; - output << "\n\n\n\n\n\n\n... Have fun!" << NL; - exit(177); +void syntax() { +	assign(output, ""); +	rewrite(output); +	output << NL; +	output << string("Lord Avalot d'Argent\n\n(c) ") + copyright + " Mark, Mike and Thomas Thurman." << NL; +	output << string("~~~~~~~~~~~~~~~~~~~~~\n\n") + vernum << NL; +	output << NL; +	output << "Syntax:" << NL; +	output << "\n/?\ndisplays this screen," << NL; +	output << "\n/O\noverrides EGA check," << NL; +	output << "\n/L<f>\nlogs progress to <f>, default AVVY.LOG," << NL; +	output << "\n/P<x>\nlogs with Epson codes to <x>, default PRN," << NL; +	output << "\n/Q\ncancels sound effects," << NL; +	output << "\n/Z\ngoes straight into the game." << NL; +	output << NL; +	output << "\n\n\n\n\n\n\n... Have fun!" << NL; +	exit(177);  } -void not_through_bootstrap() -{ - output << "Avalot must be loaded through the bootstrap." << NL; - exit(0); +void not_through_bootstrap() { +	output << "Avalot must be loaded through the bootstrap." << NL; +	exit(0);  } -void get_storage_addr() -{ -    integer e; +void get_storage_addr() { +	integer e; - val(paramstr(2),storage_seg,e); if (e!=0)  not_through_bootstrap(); - val(paramstr(3),storage_ofs,e); if (e!=0)  not_through_bootstrap(); - skellern=storage_ofs+1; +	val(paramstr(2), storage_seg, e); +	if (e != 0)  not_through_bootstrap(); +	val(paramstr(3), storage_ofs, e); +	if (e != 0)  not_through_bootstrap(); +	skellern = storage_ofs + 1;  } -longint value(string x) -{ -    longint q; integer e; +longint value(string x) { +	longint q; +	integer e; - longint value_result; - val(x,q,e); value_result=q; - return value_result; +	longint value_result; +	val(x, q, e); +	value_result = q; +	return value_result;  } -void undo_js() -{ - { -  joysetup& with = js;  - -  cxmin=with.xmid-(((with.xmid-with.xmin) / 10)*with.centre); -  cxmax=with.xmid+(((with.xmax-with.xmid) / 10)*with.centre); -  cymin=with.ymid-(((with.ymid-with.ymin) / 10)*with.centre); -  cymax=with.ymid+(((with.ymax-with.ymid) / 10)*with.centre); - -/*  writeln(lst,'MID ',xmid,'x',ymid); -  writeln(lst,'MAX ',xmax,'x',ymax); -  writeln(lst,'MIN ',xmin,'x',ymin); -  writeln(lst,'CENTRE ',xmid); -  writeln(lst,cxmin); -  writeln(lst,cxmax); -  writeln(lst,cymin); -  writeln(lst,cymax);*/ - } +void undo_js() { +	{ +		joysetup &with = js; + +		cxmin = with.xmid - (((with.xmid - with.xmin) / 10) * with.centre); +		cxmax = with.xmid + (((with.xmax - with.xmid) / 10) * with.centre); +		cymin = with.ymid - (((with.ymid - with.ymin) / 10) * with.centre); +		cymax = with.ymid + (((with.ymax - with.ymid) / 10) * with.centre); + +		/*  writeln(lst,'MID ',xmid,'x',ymid); +		  writeln(lst,'MAX ',xmax,'x',ymax); +		  writeln(lst,'MIN ',xmin,'x',ymin); +		  writeln(lst,'CENTRE ',xmid); +		  writeln(lst,cxmin); +		  writeln(lst,cxmax); +		  writeln(lst,cymin); +		  writeln(lst,cymax);*/ +	}  }  void check_slope_line();  static string slope; -static boolean yn1(byte where) { boolean yn1_result; -                                       yn1_result=slope[where]=='y'; return yn1_result; -                               } - -void check_slope_line() -{ - slope=paramstr(4); - -/* if slope='' then fillchar(slope,sizeof(slope),'n');*/ - - if (slope[1]!='1')  not_through_bootstrap(); - - if (yn1(2))  syntax(); - - soundfx=yn1(3); - cl_override=yn1(4); - keyboardclick=yn1(5); /* 6 - see below */ - demo=yn1(7); - zoomy=yn1(8); - numlockhold=yn1(9); - use_joy_a=yn1(10); - - { -    joysetup& with = js;  - -    with.xmid=value(paramstr( 5)); -    with.ymid=value(paramstr( 6)); -    with.xmin=value(paramstr( 7)); -    with.ymin=value(paramstr( 8)); -    with.xmax=value(paramstr( 9)); -    with.ymax=value(paramstr(10)); -  with.centre=value(paramstr(11)); - -    undo_js(); - } +static boolean yn1(byte where) { +	boolean yn1_result; +	yn1_result = slope[where] == 'y'; +	return yn1_result; +} - switch (slope[6]) { -  case 'l': log_setup(paramstr(12),false); break; -  case 'p': log_setup(paramstr(12),true); break; - } +void check_slope_line() { +	slope = paramstr(4); + +	/* if slope='' then fillchar(slope,sizeof(slope),'n');*/ + +	if (slope[1] != '1')  not_through_bootstrap(); + +	if (yn1(2))  syntax(); + +	soundfx = yn1(3); +	cl_override = yn1(4); +	keyboardclick = yn1(5); /* 6 - see below */ +	demo = yn1(7); +	zoomy = yn1(8); +	numlockhold = yn1(9); +	use_joy_a = yn1(10); + +	{ +		joysetup &with = js; + +		with.xmid = value(paramstr(5)); +		with.ymid = value(paramstr(6)); +		with.xmin = value(paramstr(7)); +		with.ymin = value(paramstr(8)); +		with.xmax = value(paramstr(9)); +		with.ymax = value(paramstr(10)); +		with.centre = value(paramstr(11)); + +		undo_js(); +	} + +	switch (slope[6]) { +	case 'l': +		log_setup(paramstr(12), false); +		break; +	case 'p': +		log_setup(paramstr(12), true); +		break; +	}  } -void get_extra_data() -{ - if (! reloaded)  return; +void get_extra_data() { +	if (! reloaded)  return; - move(mem[storage_seg*storage_ofs+300],js,sizeof(js)); +	move(mem[storage_seg * storage_ofs + 300], js, sizeof(js)); - undo_js(); +	undo_js();  }  class unit_incline_initialize { -  public: unit_incline_initialize(); +public: +	unit_incline_initialize();  };  static unit_incline_initialize incline_constructor;  unit_incline_initialize::unit_incline_initialize() { -/* writeln('Load code: ',paramstr(1)); - writeln('Seg & ofs: ',paramstr(2),':',paramstr(3)); - writeln('Slope line: ',paramstr(4)); - writeln('Log file: ',paramstr(5)); - writeln('File to load: ',paramstr(6)); - readln;*/ +	/* writeln('Load code: ',paramstr(1)); +	 writeln('Seg & ofs: ',paramstr(2),':',paramstr(3)); +	 writeln('Slope line: ',paramstr(4)); +	 writeln('Log file: ',paramstr(5)); +	 writeln('File to load: ',paramstr(6)); +	 readln;*/ - filetoload=paramstr(13); - filename_specified = filetoload != ""; +	filetoload = paramstr(13); +	filename_specified = filetoload != ""; - logging=false; +	logging = false; - if ((paramcount<3) || -  ((paramstr(1)!="Go") && (paramstr(1)!="et")))  not_through_bootstrap(); +	if ((paramcount < 3) || +	        ((paramstr(1) != "Go") && (paramstr(1) != "et")))  not_through_bootstrap(); - reloaded=paramstr(1)=="et"; +	reloaded = paramstr(1) == "et"; - get_storage_addr(); +	get_storage_addr(); - get_extra_data(); +	get_extra_data(); - check_slope_line(); +	check_slope_line();  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/incline.h b/engines/avalanche/incline.h index 799ad79ad5..736dd199d8 100644 --- a/engines/avalanche/incline.h +++ b/engines/avalanche/incline.h @@ -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 diff --git a/engines/avalanche/initxf.cpp b/engines/avalanche/initxf.cpp index e6ebcfb9f7..46ad0a4b2c 100644 --- a/engines/avalanche/initxf.cpp +++ b/engines/avalanche/initxf.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 @@ -30,31 +30,34 @@  namespace Avalanche {  struct inirex { -          varying_string<12> a; -          word num; +	varying_string<12> a; +	word num;  };  text i;  file<inirex> o;  inirex x; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - assign(i,"v:init0.dat"); reset(i); - assign(o,"v:init.avd"); rewrite(o); - - while (! eof(i))  - {; -  i >> x.a >> NL; -  i >> x.num >> NL; -  o << x; -  output << '.'; - } - - close(i); close(o); - output << NL; -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	assign(i, "v:init0.dat"); +	reset(i); +	assign(o, "v:init.avd"); +	rewrite(o); + +	while (! eof(i)) { +		; +		i >> x.a >> NL; +		i >> x.num >> NL; +		o << x; +		output << '.'; +	} + +	close(i); +	close(o); +	output << NL; +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/inputtes.cpp b/engines/avalanche/inputtes.cpp index c24a933ed1..bfb2db11e9 100644 --- a/engines/avalanche/inputtes.cpp +++ b/engines/avalanche/inputtes.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 @@ -30,46 +30,49 @@  namespace Avalanche { -typedef matrix<'\0','\377',0,15,byte> fonttype; +typedef matrix < '\0', '\377', 0, 15, byte > fonttype; -integer gd,gm; +integer gd, gm;  fonttype font;  varying_string<79> current;  char r; -void plottext() -{ -    byte x,y; -; - for( y=0; y <= 7; y ++) - {; -  for( x=1; x <= length(current); x ++) -   mem[0xa000*12880+y*80+x]=font[current[x]][y]; -  fillchar(mem[0xa000*12881+y*80+x],79-x,'\0'); - } +void plottext() { +	byte x, y; +	; +	for (y = 0; y <= 7; y ++) { +		; +		for (x = 1; x <= length(current); x ++) +			mem[0xa000 * 12880 + y * 80 + x] = font[current[x]][y]; +		fillchar(mem[0xa000 * 12881 + y * 80 + x], 79 - x, '\0'); +	}  } -void loadfont() -{ -    file<fonttype> f; -; - assign(f,"c:\\thomas\\ttsmall.fnt"); reset(f); - f >> font; close(f); +void loadfont() { +	file<fonttype> f; +	; +	assign(f, "c:\\thomas\\ttsmall.fnt"); +	reset(f); +	f >> font; +	close(f);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\turbo"); - loadfont(); - setfillstyle(1,6); bar(0,0,640,200); - current=""; - do { -  r=readkey(); -  current=current+r; -  plottext(); - } while (!false); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\turbo"); +	loadfont(); +	setfillstyle(1, 6); +	bar(0, 0, 640, 200); +	current = ""; +	do { +		r = readkey(); +		current = current + r; +		plottext(); +	} while (!false); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/intro.cpp b/engines/avalanche/intro.cpp index 010e024b94..b23bd1cc65 100644 --- a/engines/avalanche/intro.cpp +++ b/engines/avalanche/intro.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 @@ -32,7 +32,7 @@  namespace Avalanche { - /* This is a stand-alone program. */ +/* This is a stand-alone program. */  /* 0, black, remains 0.     Other numbers: the bits take precedence from the left. @@ -45,20 +45,21 @@ namespace Avalanche {       Second bit: 7  (light grey)        First bit: 1  (blue). */ -const palettetype our_palette =  -                {16, -                         /* sic */ -{{  0,  1, 57, 57,  7,  7,  7,  7, 63, 63, 63, 63, 63, 63, 63, 63}}}; +const palettetype our_palette = { +	16, +	/* sic */ +	{{  0,  1, 57, 57,  7,  7,  7,  7, 63, 63, 63, 63, 63, 63, 63, 63}} +}; -  const integer scardcount = 13; +const integer scardcount = 13; -     const array<0,scardcount-1,integer> soundcards =  -       {{1,2,6,3,4,5,8,9,10,7,7,7,7}}; +const array < 0, scardcount - 1, integer > soundcards = +{{1, 2, 6, 3, 4, 5, 8, 9, 10, 7, 7, 7, 7}}; -typedef matrix<'\0','\377',1,16,byte> fonttype; +typedef matrix < '\0', '\377', 1, 16, byte > fonttype;  fonttype f; -matrix<0,39,1,16,byte> next_line; +matrix<0, 39, 1, 16, byte> next_line;  byte next_bitline; @@ -68,308 +69,321 @@ boolean cut_out;  word cut_out_time; -array<1,117,varying_string<40> > x; +array<1, 117, varying_string<40> > x;  byte this_line; -word* skellern; +word *skellern;  boolean nomusic;  /*$L intro.obj*/ -extern void introduction();  +extern void introduction(); -void graphmode(integer mode) -{ -    registers regs; +void graphmode(integer mode) { +	registers regs; - regs.ax=mode; - intr(0x10,regs); +	regs.ax = mode; +	intr(0x10, regs);  }  /* Firstly, port[$3C4]:=2; port[$3CF]:=4;,    Then port[$3C5]:=1 shl bit; port[$3CF]:=bit;. */ -void loadfont() -{ -    file<fonttype> ff; +void loadfont() { +	file<fonttype> ff; - assign(ff,"avalot.fnt"); - reset(ff); - ff >> f; - close(ff); +	assign(ff, "avalot.fnt"); +	reset(ff); +	ff >> f; +	close(ff);  }  void calc_next_line() - /* This proc sets up next_line. */ +/* This proc sets up next_line. */  { - string l; - byte fv,ff; - boolean oddlen; - byte start; - byte this_; - - fillchar(next_line,sizeof(next_line),'\0'); /* All blanks. */ - - if (this_line==117)  - { -  cut_out=true; -  return; - } - - l=x[this_line]; - this_line += 1; - - start=(20-length(l) / 2)-1; - oddlen=odd(length(l)); - - for( fv=1; fv <= length(l); fv ++) -  for( ff=1; ff <= 16; ff ++) -  { -   this_=f[l[fv]][ff]; -   if (oddlen)  -   {     /* Odd, => 4 bits shift to the right. */ -    next_line[start+fv][ff] += this_ << 4; -    next_line[start+fv-1][ff] += (cardinal)this_ >> 4; -   } else -   {     /* Even, => no bit shift. */ -    next_line[start+fv][ff]=this_; -   } -  } - next_bitline=1; +	string l; +	byte fv, ff; +	boolean oddlen; +	byte start; +	byte this_; + +	fillchar(next_line, sizeof(next_line), '\0'); /* All blanks. */ + +	if (this_line == 117) { +		cut_out = true; +		return; +	} + +	l = x[this_line]; +	this_line += 1; + +	start = (20 - length(l) / 2) - 1; +	oddlen = odd(length(l)); + +	for (fv = 1; fv <= length(l); fv ++) +		for (ff = 1; ff <= 16; ff ++) { +			this_ = f[l[fv]][ff]; +			if (oddlen) { +				/* Odd, => 4 bits shift to the right. */ +				next_line[start + fv][ff] += this_ << 4; +				next_line[start + fv - 1][ff] += (cardinal)this_ >> 4; +			} else { +				/* Even, => no bit shift. */ +				next_line[start + fv][ff] = this_; +			} +		} +	next_bitline = 1;  } -void display() -{ -    byte fv,ff; +void display() { +	byte fv, ff; - if (next_bitline == 17)  calc_next_line(); +	if (next_bitline == 17)  calc_next_line(); - if (cut_out)  - { -  if (nomusic)  -    cut_out_time -= 1; -  else -   if (ampgetmodulestatus != md_playing)  cut_out_time=0; -  return; - } +	if (cut_out) { +		if (nomusic) +			cut_out_time -= 1; +		else if (ampgetmodulestatus != md_playing)  cut_out_time = 0; +		return; +	} - move(mem[0xa000*40],mem[0xa000*0],7960); - for( fv=0; fv <= 39; fv ++) -   mem[0xa1f1*8+fv]=next_line[fv][next_bitline]; - next_bitline += 1; +	move(mem[0xa000 * 40], mem[0xa000 * 0], 7960); +	for (fv = 0; fv <= 39; fv ++) +		mem[0xa1f1 * 8 + fv] = next_line[fv][next_bitline]; +	next_bitline += 1;  } -void plot_a_star(integer x,integer y) -{ -    byte ofs; +void plot_a_star(integer x, integer y) { +	byte ofs; - ofs=x % 8; - x=x / 8; - mem[0xa000*x+y*40] += (cardinal)128 >> ofs; +	ofs = x % 8; +	x = x / 8; +	mem[0xa000 * x + y * 40] += (cardinal)128 >> ofs;  } -void plot_some_stars(integer y) -{ -    byte fv,times; - - switch (Random(7)) { -  case 1: times=1; break; -  case 2: times=2; break; -  case 3: times=3; break; -  default: return; - } - - for( fv=1; fv <= times; fv ++) -  plot_a_star(Random(320),y); +void plot_some_stars(integer y) { +	byte fv, times; + +	switch (Random(7)) { +	case 1: +		times = 1; +		break; +	case 2: +		times = 2; +		break; +	case 3: +		times = 3; +		break; +	default: +		return; +	} + +	for (fv = 1; fv <= times; fv ++) +		plot_a_star(Random(320), y);  } -void starry_starry_night() -{ - integer y; - byte bit; - - port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; - - for( bit=0; bit <= 2; bit ++) - { -  port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( y=1; y <= 200; y ++) -   plot_some_stars(y); - } +void starry_starry_night() { +	integer y; +	byte bit; + +	port[0x3c4] = 2; +	port[0x3ce] = 4; +	port[0x3c5] = 1 << bit; +	port[0x3cf] = bit; + +	for (bit = 0; bit <= 2; bit ++) { +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (y = 1; y <= 200; y ++) +			plot_some_stars(y); +	}  }  void setupgraphics()     /* Fix this proc. This prog SHOULDN'T use the   Graph unit. */  { -    integer gd,gm; +	integer gd, gm; - gd=3; gm=1; initgraph(gd,gm,""); +	gd = 3; +	gm = 1; +	initgraph(gd, gm, "");  } -void shovestars() -{ - move(mem[0xa000*0],mem[0xa000*40],7960); - fillchar(mem[0xa000*0],40,'\0'); - plot_some_stars(0); +void shovestars() { +	move(mem[0xa000 * 0], mem[0xa000 * 40], 7960); +	fillchar(mem[0xa000 * 0], 40, '\0'); +	plot_some_stars(0);  } -void do_next_line() -{ -    byte bit; - - port[0x3c4]=2; port[0x3ce]=4; - - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c5]=1 << bit; port[0x3cf]=bit; - -  switch (bit) { -   case 0: if ((displaycounter % 10)==0)  shovestars(); break; -   case 1: if ((displaycounter % 2)==0)  shovestars(); break; -   case 2: shovestars(); break; -   case 3: display(); break; /* The text. */ -  } - } - - if (displaycounter==40)  displaycounter=0; +void do_next_line() { +	byte bit; + +	port[0x3c4] = 2; +	port[0x3ce] = 4; + +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; + +		switch (bit) { +		case 0: +			if ((displaycounter % 10) == 0)  shovestars(); +			break; +		case 1: +			if ((displaycounter % 2) == 0)  shovestars(); +			break; +		case 2: +			shovestars(); +			break; +		case 3: +			display(); +			break; /* The text. */ +		} +	} + +	if (displaycounter == 40)  displaycounter = 0;  } -void load_text() -{ - word fv; - char* c; - byte thisline; - - - c=addr(introduction()); - thisline=0; - fillchar(x,sizeof(x),'\0'); - - for( fv=1; fv <= 2456; fv ++) - { -  switch (*c) { -   case '\15': thisline += 1; break; -   case '\12':/*nop*/; break; -   default: x[thisline]=x[thisline]+*c; -  } - -  c += 1; - } +void load_text() { +	word fv; +	char *c; +	byte thisline; + + +	c = addr(introduction()); +	thisline = 0; +	fillchar(x, sizeof(x), '\0'); + +	for (fv = 1; fv <= 2456; fv ++) { +		switch (*c) { +		case '\15': +			thisline += 1; +			break; +		case '\12':/*nop*/ +			; +			break; +		default: +			x[thisline] = x[thisline] + *c; +		} + +		c += 1; +	}  } -void check_params() -{ -    word s,o; integer e; +void check_params() { +	word s, o; +	integer e; - if (paramstr(1)!="jsb")  exit(0); - val(paramstr(2),s,e); if (e!=0)  exit(0); - val(paramstr(3),o,e); if (e!=0)  exit(0); - skellern=ptr(s,o+1); +	if (paramstr(1) != "jsb")  exit(0); +	val(paramstr(2), s, e); +	if (e != 0)  exit(0); +	val(paramstr(3), o, e); +	if (e != 0)  exit(0); +	skellern = ptr(s, o + 1);  } -integer getsoundhardware(psoundcard scard) -{ -    integer sc,i,autosel,select; -    char ch; -    integer e; +integer getsoundhardware(psoundcard scard) { +	integer sc, i, autosel, select; +	char ch; +	integer e; -integer getsoundhardware_result; +	integer getsoundhardware_result;  Lagain: -  sc=detectgus(scard); -  if (sc!=0)  sc=detectpas(scard); -  if (sc!=0)  sc=detectaria(scard); -  if (sc!=0)  sc=detectsb(scard); - -  /* if no sound card found, zero scard */ -  if (sc!=0)  fillchar(scard,sizeof(tsoundcard),0); - -  autosel=-1; -/*  if sc=0 then -    for i:=0 to scardcount-1 do -      if scard^.ID=soundcards[i].ID then begin -        { Set auto selection mark } -        autosel:=i+1; -        break; -      end;*/ - -  /* Print the list of sound cards */ - -  val(paramstr(13),select,e); - -  /* Default entry? */ -  if (select==0)  select=autosel; -  if (select!=autosel)  { -    /* clear all assumptions */ -    sc=-1; -    fillchar(scard,sizeof(tsoundcard),0); -    scard->id=soundcards[select-1];  /* set correct ID */ -  } - -  /* Query I/O address */ -  if (scard->id==id_dac)  scard->ioport=0x378; - -  /* Read user input */ -  val(paramstr(15),i,e); - -  if (i!=0)  scard->ioport=i; -  if (sc!=1)    /* Not autodetected */ -    switch (scard->id) { -      case id_sb16: -      case id_pas16: -      case id_wss: -      case id_aria: -      case id_gus    : scard->samplesize=2; -      break;                            /* 16-bit card */ -      case id_sbpro: -      case id_pas: -      case id_pasplus: scard->stereo=true; -      break;                            /* enable stereo */ -      default: { -        scard->samplesize=1; -        scard->stereo=false; -      } -    } - -  if (scard->id!=id_dac)  { -    val(paramstr(17),i,e); - -    if (i!=0)  scard->dmairq=i; - -    val(paramstr(16),i,e); - -    if (i!=0)  scard->dmachannel=i; -  } else { -    /* Select correct DAC */ -    scard->maxrate=44100; -    if (select==11)  { -      scard->stereo=true; -      scard->dmachannel=1;    /* Special 'mark' */ -      scard->maxrate=60000; -    } else -    if (select==12)  { -      scard->stereo=true; -      scard->dmachannel=2; -      scard->maxrate=60000; -      if (scard->ioport==0)  scard->ioport=0x378; -    } else -    if (select==13)  { -      scard->dmachannel=0; -      scard->ioport=0x42;     /* Special 'mark' */ -      scard->maxrate=44100; -    } -  } - -/*    writeln('Your selection: ',select,' at ',scard^.ioPort, -            ' using IRQ ',scard^.dmaIRQ,' and DMA channel ',scard^.dmaChannel); -  readln;*/ - -  getsoundhardware_result=0; -return getsoundhardware_result; +	sc = detectgus(scard); +	if (sc != 0)  sc = detectpas(scard); +	if (sc != 0)  sc = detectaria(scard); +	if (sc != 0)  sc = detectsb(scard); + +	/* if no sound card found, zero scard */ +	if (sc != 0)  fillchar(scard, sizeof(tsoundcard), 0); + +	autosel = -1; +	/*  if sc=0 then +	    for i:=0 to scardcount-1 do +	      if scard^.ID=soundcards[i].ID then begin +	        { Set auto selection mark } +	        autosel:=i+1; +	        break; +	      end;*/ + +	/* Print the list of sound cards */ + +	val(paramstr(13), select, e); + +	/* Default entry? */ +	if (select == 0)  select = autosel; +	if (select != autosel)  { +		/* clear all assumptions */ +		sc = -1; +		fillchar(scard, sizeof(tsoundcard), 0); +		scard->id = soundcards[select - 1]; /* set correct ID */ +	} + +	/* Query I/O address */ +	if (scard->id == id_dac)  scard->ioport = 0x378; + +	/* Read user input */ +	val(paramstr(15), i, e); + +	if (i != 0)  scard->ioport = i; +	if (sc != 1)  /* Not autodetected */ +		switch (scard->id) { +		case id_sb16: +		case id_pas16: +		case id_wss: +		case id_aria: +		case id_gus    : +			scard->samplesize = 2; +			break;                            /* 16-bit card */ +		case id_sbpro: +		case id_pas: +		case id_pasplus: +			scard->stereo = true; +			break;                            /* enable stereo */ +		default: { +			scard->samplesize = 1; +			scard->stereo = false; +		} +		} + +	if (scard->id != id_dac)  { +		val(paramstr(17), i, e); + +		if (i != 0)  scard->dmairq = i; + +		val(paramstr(16), i, e); + +		if (i != 0)  scard->dmachannel = i; +	} else { +		/* Select correct DAC */ +		scard->maxrate = 44100; +		if (select == 11)  { +			scard->stereo = true; +			scard->dmachannel = 1;  /* Special 'mark' */ +			scard->maxrate = 60000; +		} else if (select == 12)  { +			scard->stereo = true; +			scard->dmachannel = 2; +			scard->maxrate = 60000; +			if (scard->ioport == 0)  scard->ioport = 0x378; +		} else if (select == 13)  { +			scard->dmachannel = 0; +			scard->ioport = 0x42;   /* Special 'mark' */ +			scard->maxrate = 44100; +		} +	} + +	/*    writeln('Your selection: ',select,' at ',scard^.ioPort, +	            ' using IRQ ',scard^.dmaIRQ,' and DMA channel ',scard^.dmaChannel); +	  readln;*/ + +	getsoundhardware_result = 0; +	return getsoundhardware_result;  }  tsoundcard scard; @@ -378,247 +392,252 @@ tdds dds;  pmodule module;  tsdi_init sdi;  integer e, -bufsize; +        bufsize;  char ch;  boolean v86, -vdsok; -longint a,rate, -tempseg; +        vdsok; +longint a, rate, +        tempseg;  string answer;  pointer temp;  word flags;  word curch;  byte modulevolume; -array<0,4,tsampleinfo> sample; -array<0,31,word> voltable; - -int main(int argc, const char* argv[]) -{ - - pio_initialize(argc, argv); - check_params(); - - nomusic=paramstr(13)=='0'; - - if (! nomusic)  - { -    /* Read sound card information */ -    if (getsoundhardware(&scard)==-1)  exit(1); - - -    /* Initialize Timer Service */ -    tsinit; -    atexit(&tsclose); -    if (scard.id==id_gus)  { -      /* Initialize GUS player */ -      #ifndef DPMI -      scard.extrafield[2]=1;  /* GUS DMA transfer does not work in V86 */ -      #endif -      gusinit(&scard); -      atexit(&gusclose); - -      /* Initialize GUS heap manager */ -      gushminit; - -      /* Init CDI */ -      cdiinit; - -      /* Register GUS into CDI */ -      cdiregister(&cdi_gus,0,31); - -      /* Add GUS event player engine into Timer Service */ -      tsaddroutine(&gusinterrupt,gus_timer); -    } else { -      /* Initialize Virtual DMA Specification */ -      #ifndef DPMI -      vdsok=vdsinit==0; -      #else -      vdsok=false; -      #endif - -      fillchar(mcpstrc,sizeof(tmcpstruct),0); - -      /* Query for sampling rate */ -      val(paramstr(14),a,e); -      if (a>4000)  rate=a; else rate=21000; - -      /* Query for quality */ -      mcpstrc.options=mcp_quality; - -      switch (scard.id) { -        case id_sb     : { -                      sdi=sdi_sb; -                      scard.maxrate=22000; -                    } -                    break; -        case id_sbpro  : { -                      sdi=sdi_sbpro; -                      scard.maxrate=22000; -                    } -                    break; -        case id_pas: -        case id_pasplus: -        case id_pas16  : { -                      sdi=sdi_pas; -                      scard.maxrate=44100; -                    } -                    break; -        case id_sb16   : { -                      sdi=sdi_sb16; -                      scard.maxrate=44100; -                    } -                    break; -        case id_aria   : { -                      sdi=sdi_aria; -                      scard.maxrate=44100; -                    } -                    break; -        case id_wss    : { -                      sdi=sdi_wss; -                      scard.maxrate=48000; -                    } -                    break; -        #ifndef DPMI -        case id_dac    : sdi=sdi_dac; break; /* Only available in real mode */ -        #endif -      } - -      mcpinitsounddevice(sdi,&scard); -      a=mcp_tablesize; -      mcpstrc.reqsize=0; - -      /* Calculate mixing buffer size */ -      bufsize=(longint)(2800*(integer)(scard.samplesize) << (byte)(scard.stereo))* -               (longint)(rate) / (longint)(22000); -      mcpstrc.reqsize=0; -      if ((mcpstrc.options & mcp_quality)>0)  -        if (scard.samplesize==1)  a += mcp_qualitysize; else -          a=mcp_tablesize16+mcp_qualitysize16; -      if ((longint)(bufsize)+(longint)(a)>65500)  bufsize=longint(65500)-a; - -      #ifdef DPMI -      dpmiversion((byte)(e),(byte)(e),(byte)(e),flags); -      v86=(flags & 2)==0; -      #endif - -      /* Allocate volume table + mixing buffer */ -      #ifdef DPMI - -      /* In the V86 mode, the buffer must be allocated below 1M */ -      if (v86)  { -        tempseg=0; -        dpmiallocdos((a+longint(bufsize)) / longint(16)+longint(1),flags,(word)(tempseg)); -      } else { -      #endif -      getmem(temp,a+longint(bufsize)); -      if (temp==nil)  exit(2); -      #ifdef DPMI -      tempseg=seg(temp); -      } -      #else -      tempseg=seg(temp)+ofs(temp) / 16+1; -      #endif -      mcpstrc.bufferseg=tempseg; -      mcpstrc.bufferphysical=-1; - -      if (vdsok && (scard.id!=id_dac))  { -        dds.size=bufsize; -        dds.segment=tempseg; -        dds.offset=0; - -        /* Lock DMA buffer if VDS present */ -        if (vdslockdma(&dds)==0)  mcpstrc.bufferphysical=dds.address; -      } -      if (mcpstrc.bufferphysical==-1)  -        #ifdef DPMI -        mcpstrc.bufferphysical=dpmigetlinearaddr(tempseg); -        #else -        mcpstrc.bufferphysical=(longint)(tempseg) << 4; -        #endif - -      mcpstrc.buffersize=bufsize; -      mcpstrc.samplingrate=rate; -      /* Initialize Multi Channel Player */ -      if (mcpinit(&mcpstrc)!=0)  exit(3); -      atexit(&mcpclose); - -      /* Initialize Channel Distributor */ -      cdiinit; - -      /* Register MCP into CDI*/ -      cdiregister(&cdi_mcp,0,31); -    } - -    /* Try to initialize AMP */ -    if (ampinit(0)!=0)  exit(3); -    atexit(&close); - -    /* Hook AMP player routine into Timer Service */ -    tsaddroutine(&interrupt,amp_timer); - -    #ifndef DPMI -    /* If using DAC, then adjust DAC timer */ -    if (scard.id==id_dac)  setdactimer(tsgettimerrate); -    #endif - -    if (scard.id!=id_gus)  mcpstartvoice; else gusstartvoice; - -    /* Load an example AMF */ -    module=amploadmod("glover.mod",0); -    if (module==nil)  exit(4); - -    /* Is it MCP, Quality mode and 16-bit card? */ -    if ((scard.id!=id_gus) && ((mcpstrc.options & mcp_quality)>0) -       && (scard.samplesize==2))  { -      /* Open module+2 channels with amplified volumetable (4.7 gain) */ -      for( a=1; a <= 32; a ++) voltable[a-longint(1)]=a*longint(150) / longint(32); -      cdisetupchannels(0,module->channelcount+2,&voltable); -    } else { -      /* Open module+2 channels with regular volumetable */ -      cdisetupchannels(0,module->channelcount+2,nil); -    } - -    curch=module->channelcount; -    modulevolume=64; - -   /***/ ampplaymodule(module,0); - } - - setupgraphics(); - - randseed=177; checkbreak=false; - - load_text(); - - this_line=1; - - graphmode(0xd); - loadfont(); - - next_bitline=17; - displaycounter=0; - - cut_out_time=333; - - setallpalette(our_palette); +array<0, 4, tsampleinfo> sample; +array<0, 31, word> voltable; + +int main(int argc, const char *argv[]) { + +	pio_initialize(argc, argv); +	check_params(); + +	nomusic = paramstr(13) == '0'; + +	if (! nomusic) { +		/* Read sound card information */ +		if (getsoundhardware(&scard) == -1)  exit(1); + + +		/* Initialize Timer Service */ +		tsinit; +		atexit(&tsclose); +		if (scard.id == id_gus)  { +			/* Initialize GUS player */ +#ifndef DPMI +			scard.extrafield[2] = 1; /* GUS DMA transfer does not work in V86 */ +#endif +			gusinit(&scard); +			atexit(&gusclose); + +			/* Initialize GUS heap manager */ +			gushminit; + +			/* Init CDI */ +			cdiinit; + +			/* Register GUS into CDI */ +			cdiregister(&cdi_gus, 0, 31); + +			/* Add GUS event player engine into Timer Service */ +			tsaddroutine(&gusinterrupt, gus_timer); +		} else { +			/* Initialize Virtual DMA Specification */ +#ifndef DPMI +			vdsok = vdsinit == 0; +#else +			vdsok = false; +#endif + +			fillchar(mcpstrc, sizeof(tmcpstruct), 0); + +			/* Query for sampling rate */ +			val(paramstr(14), a, e); +			if (a > 4000)  rate = a; +			else rate = 21000; + +			/* Query for quality */ +			mcpstrc.options = mcp_quality; + +			switch (scard.id) { +			case id_sb     : { +				sdi = sdi_sb; +				scard.maxrate = 22000; +			} +			break; +			case id_sbpro  : { +				sdi = sdi_sbpro; +				scard.maxrate = 22000; +			} +			break; +			case id_pas: +			case id_pasplus: +			case id_pas16  : { +				sdi = sdi_pas; +				scard.maxrate = 44100; +			} +			break; +			case id_sb16   : { +				sdi = sdi_sb16; +				scard.maxrate = 44100; +			} +			break; +			case id_aria   : { +				sdi = sdi_aria; +				scard.maxrate = 44100; +			} +			break; +			case id_wss    : { +				sdi = sdi_wss; +				scard.maxrate = 48000; +			} +			break; +#ifndef DPMI +			case id_dac    : +				sdi = sdi_dac; +				break; /* Only available in real mode */ +#endif +			} + +			mcpinitsounddevice(sdi, &scard); +			a = mcp_tablesize; +			mcpstrc.reqsize = 0; + +			/* Calculate mixing buffer size */ +			bufsize = (longint)(2800 * (integer)(scard.samplesize) << (byte)(scard.stereo)) * +			          (longint)(rate) / (longint)(22000); +			mcpstrc.reqsize = 0; +			if ((mcpstrc.options & mcp_quality) > 0) +				if (scard.samplesize == 1)  a += mcp_qualitysize; +				else +					a = mcp_tablesize16 + mcp_qualitysize16; +			if ((longint)(bufsize) + (longint)(a) > 65500)  bufsize = longint(65500) - a; + +#ifdef DPMI +			dpmiversion((byte)(e), (byte)(e), (byte)(e), flags); +			v86 = (flags & 2) == 0; +#endif + +			/* Allocate volume table + mixing buffer */ +#ifdef DPMI + +			/* In the V86 mode, the buffer must be allocated below 1M */ +			if (v86)  { +				tempseg = 0; +				dpmiallocdos((a + longint(bufsize)) / longint(16) + longint(1), flags, (word)(tempseg)); +			} else { +#endif +				getmem(temp, a + longint(bufsize)); +				if (temp == nil)  exit(2); +#ifdef DPMI +				tempseg = seg(temp); +			} +#else +				tempseg = seg(temp) + ofs(temp) / 16 + 1; +#endif +			mcpstrc.bufferseg = tempseg; +			mcpstrc.bufferphysical = -1; + +			if (vdsok && (scard.id != id_dac))  { +				dds.size = bufsize; +				dds.segment = tempseg; +				dds.offset = 0; + +				/* Lock DMA buffer if VDS present */ +				if (vdslockdma(&dds) == 0)  mcpstrc.bufferphysical = dds.address; +			} +			if (mcpstrc.bufferphysical == -1) +#ifdef DPMI +				mcpstrc.bufferphysical = dpmigetlinearaddr(tempseg); +#else +				mcpstrc.bufferphysical = (longint)(tempseg) << 4; +#endif + +			mcpstrc.buffersize = bufsize; +			mcpstrc.samplingrate = rate; +			/* Initialize Multi Channel Player */ +			if (mcpinit(&mcpstrc) != 0)  exit(3); +			atexit(&mcpclose); + +			/* Initialize Channel Distributor */ +			cdiinit; + +			/* Register MCP into CDI*/ +			cdiregister(&cdi_mcp, 0, 31); +		} + +		/* Try to initialize AMP */ +		if (ampinit(0) != 0)  exit(3); +		atexit(&close); + +		/* Hook AMP player routine into Timer Service */ +		tsaddroutine(&interrupt, amp_timer); + +#ifndef DPMI +		/* If using DAC, then adjust DAC timer */ +		if (scard.id == id_dac)  setdactimer(tsgettimerrate); +#endif + +		if (scard.id != id_gus)  mcpstartvoice; +		else gusstartvoice; + +		/* Load an example AMF */ +		module = amploadmod("glover.mod", 0); +		if (module == nil)  exit(4); + +		/* Is it MCP, Quality mode and 16-bit card? */ +		if ((scard.id != id_gus) && ((mcpstrc.options & mcp_quality) > 0) +		        && (scard.samplesize == 2))  { +			/* Open module+2 channels with amplified volumetable (4.7 gain) */ +			for (a = 1; a <= 32; a ++) voltable[a - longint(1)] = a * longint(150) / longint(32); +			cdisetupchannels(0, module->channelcount + 2, &voltable); +		} else { +			/* Open module+2 channels with regular volumetable */ +			cdisetupchannels(0, module->channelcount + 2, nil); +		} + +		curch = module->channelcount; +		modulevolume = 64; + +		/***/ ampplaymodule(module, 0); +	} + +	setupgraphics(); + +	randseed = 177; +	checkbreak = false; + +	load_text(); + +	this_line = 1; + +	graphmode(0xd); +	loadfont(); + +	next_bitline = 17; +	displaycounter = 0; - starry_starry_night(); +	cut_out_time = 333; + +	setallpalette(our_palette); - while ((cut_out_time>0) && (! keypressed()))  - { +	starry_starry_night(); + +	while ((cut_out_time > 0) && (! keypressed())) { -  *skellern=0; +		*skellern = 0; -  do_next_line(); +		do_next_line(); -  displaycounter += 1; +		displaycounter += 1; -  do {; } while (!(*skellern>0)); - } +		do { +			; +		} while (!(*skellern > 0)); +	} - if (! nomusic)  ampstopmodule; - graphmode(3); - return EXIT_SUCCESS; +	if (! nomusic)  ampstopmodule; +	graphmode(3); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/ints.cpp b/engines/avalanche/ints.cpp index a14ee55618..f15e68bef6 100644 --- a/engines/avalanche/ints.cpp +++ b/engines/avalanche/ints.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 @@ -36,23 +36,25 @@ void() old1b;  boolean quicko; -void new1b()     /* interrupt; */ -{; - quicko=true; +void new1b() {   /* interrupt; */ +	; +	quicko = true;  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - getintvec(0x1b,&old1b); - setintvec(0x1b,addr(new1b())); - quicko=false; - do {; } while (!quicko); - setintvec(0x1b,&old1b); -/*  r.ah:=$02; intr($16,r); -  writeln(r.al and 12); { Only checks Ctrl and Alt. Both on = 12. } - until false;*/ -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	getintvec(0x1b, &old1b); +	setintvec(0x1b, addr(new1b())); +	quicko = false; +	do { +		; +	} while (!quicko); +	setintvec(0x1b, &old1b); +	/*  r.ah:=$02; intr($16,r); +	  writeln(r.al and 12); { Only checks Ctrl and Alt. Both on = 12. } +	 until false;*/ +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/joysetup.cpp b/engines/avalanche/joysetup.cpp index 1ebbc4fb66..7569199d33 100644 --- a/engines/avalanche/joysetup.cpp +++ b/engines/avalanche/joysetup.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 @@ -33,93 +33,107 @@  namespace Avalanche {  struct joysetup { -            word xmid,ymid,xmin,ymin,xmax,ymax; -            byte centre; /* Size of centre in tenths */ +	word xmid, ymid, xmin, ymin, xmax, ymax; +	byte centre; /* Size of centre in tenths */  };  joysetup js;  file<joysetup> jf; -boolean detect() -{ - word x,y,xo,yo; - byte count; -boolean detect_result; -; - count=0; - if (joystickpresent)  - {; -  detect_result=true; -  return detect_result; - } - readjoya(xo,yo); - do { -  if (count<7)  count += 1;   /* Take advantage of "flutter" */ -  if (count==6)  -  {; -   output << "The Bios says you don't have a joystick. However, it's often wrong" << NL; -   output << "about such matters. So, do you? If you do, move joystick A to" << NL; -   output << "continue. If you don't, press any key to cancel." << NL; -  } -  readjoya(x,y); - } while (!((keypressed()) | (x!=xo) || (y!=yo))); - detect_result=~ keypressed(); -return detect_result; +boolean detect() { +	word x, y, xo, yo; +	byte count; +	boolean detect_result; +	; +	count = 0; +	if (joystickpresent) { +		; +		detect_result = true; +		return detect_result; +	} +	readjoya(xo, yo); +	do { +		if (count < 7)  count += 1; /* Take advantage of "flutter" */ +		if (count == 6) { +			; +			output << "The Bios says you don't have a joystick. However, it's often wrong" << NL; +			output << "about such matters. So, do you? If you do, move joystick A to" << NL; +			output << "continue. If you don't, press any key to cancel." << NL; +		} +		readjoya(x, y); +	} while (!((keypressed()) | (x != xo) || (y != yo))); +	detect_result = ~ keypressed(); +	return detect_result;  } -void display() -{; - {; -  gotoxy(20,10); output << "X min: " << js.xmin << "  "; -  gotoxy(20,11); output << "X max: " << js.xmax << "  "; -  gotoxy(20,12); output << "Y min: " << js.ymin << "  "; -  gotoxy(20,13); output << "Y max: " << js.ymax << "  "; - } +void display() { +	; +	{ +		; +		gotoxy(20, 10); +		output << "X min: " << js.xmin << "  "; +		gotoxy(20, 11); +		output << "X max: " << js.xmax << "  "; +		gotoxy(20, 12); +		output << "Y min: " << js.ymin << "  "; +		gotoxy(20, 13); +		output << "Y max: " << js.ymax << "  "; +	}  } -void getmaxmin() -{ -    word x,y; -; - output << "Rotate the joystick around in a circle, as far from the centre as it" << NL; - output << "can get. Then click a button." << NL; - {; -  js.xmax=0; js.xmin=maxint; -  js.ymax=0; js.ymin=maxint; - } - do { -  readjoya(x,y); -  {; -   if (x<js.xmin)  js.xmin=x; -   if (y<js.ymin)  js.ymin=y; -   if (x>js.xmax)  js.xmax=x; -   if (y>js.ymax)  js.ymax=y; -   display(); -  } - } while (!(buttona1 | buttona2)); - do {; } while (!(~ (buttona1 | buttona2))); - output << NL; - output << "Thank you. Now please centre your joystick and hit a button." << NL; - do {; } while (!(buttona1 | buttona2)); -            readjoya(js.xmid,js.ymid); +void getmaxmin() { +	word x, y; +	; +	output << "Rotate the joystick around in a circle, as far from the centre as it" << NL; +	output << "can get. Then click a button." << NL; +	{ +		; +		js.xmax = 0; +		js.xmin = maxint; +		js.ymax = 0; +		js.ymin = maxint; +	} +	do { +		readjoya(x, y); +		{ +			; +			if (x < js.xmin)  js.xmin = x; +			if (y < js.ymin)  js.ymin = y; +			if (x > js.xmax)  js.xmax = x; +			if (y > js.ymax)  js.ymax = y; +			display(); +		} +	} while (!(buttona1 | buttona2)); +	do { +		; +	} while (!(~(buttona1 | buttona2))); +	output << NL; +	output << "Thank you. Now please centre your joystick and hit a button." << NL; +	do { +		; +	} while (!(buttona1 | buttona2)); +	readjoya(js.xmid, js.ymid);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - textattr=2; - clrscr; - output << "Avalot joystick setup routine- by TT. Thanks go to David B. Howorth." << NL; - output << NL; - if (detect())  output << "You've got a joystick!" << NL; else return 0; - getmaxmin(); - do { -  output << "Centring factor\? (3-9)"; -  input >> js.centre >> NL; - } while (!(set::of(range(1,9), eos).has(js.centre))); - assign(jf,"v:joytmp.dat"); - rewrite(jf); jf << js; close(jf);     /* write it all out to disk. */ -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	textattr = 2; +	clrscr; +	output << "Avalot joystick setup routine- by TT. Thanks go to David B. Howorth." << NL; +	output << NL; +	if (detect())  output << "You've got a joystick!" << NL; +	else return 0; +	getmaxmin(); +	do { +		output << "Centring factor\? (3-9)"; +		input >> js.centre >> NL; +	} while (!(set::of(range(1, 9), eos).has(js.centre))); +	assign(jf, "v:joytmp.dat"); +	rewrite(jf); +	jf << js; +	close(jf);     /* write it all out to disk. */ +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/joystick.cpp b/engines/avalanche/joystick.cpp index 8ebea36325..8b9496ccf1 100644 --- a/engines/avalanche/joystick.cpp +++ b/engines/avalanche/joystick.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 @@ -61,7 +61,7 @@ Hill Road, Portland, Oregon 97219.  namespace Avalanche { -typedef void(*readjoyproc)(byte a,byte b,word& c,word& d); +typedef void(*readjoyproc)(byte a, byte b, word &c, word &d);  typedef boolean(*buttonfunc)(byte a);  readjoyproc readjoy; @@ -70,141 +70,142 @@ registers reg;  /*----------------------------- private routines ----------------------------*/ -boolean newbios() -{ -  char decadechar   /*absolute $F000:$FFFB*/; -  char yearchar   /*absolute $F000:$FFFC*/; +boolean newbios() { +	char decadechar   /*absolute $F000:$FFFB*/; +	char yearchar   /*absolute $F000:$FFFC*/; -  boolean newbios_result; -  newbios_result = (set::of('9','0', eos).has(decadechar)) /*an optimistic view of software life*/ -    || ((decadechar == '8') && (set::of(range('4','9'), eos).has(yearchar))); -  return newbios_result; +	boolean newbios_result; +	newbios_result = (set::of('9', '0', eos).has(decadechar)) /*an optimistic view of software life*/ +	                 || ((decadechar == '8') && (set::of(range('4', '9'), eos).has(yearchar))); +	return newbios_result;  }  /*$F+*/ -void oldreadjoy(byte xbit,byte ybit, word& xaxis, word& yaxis) -{; -/* -inline( -  $BA/$01/$02/    {mov  dx, 201h      ;load dx with joystick port address   } -  $C4/$BE/>XAxis/ {les  di, XAxis[bp] ;load es with segment and di w/offset } -  $8A/$66/<xbit/  {mov  ah, xbit[bp]  ;set appropriate bit in ah            } -  $E8/$0C/$00/    {call SUBR                                                } -  $C4/$BE/>YAxis/ {les  di, YAxis[bp]                                       } -  $8A/$66/<ybit/  {mov  ah, ybit[bp]  ;set appropriate bit in ah            } -  $E8/$02/$00/    {call SUBR                                                } -  $EB/$1D/        {jump short END     ;we're done!                          } -                  {SUBR:              ;first wait, if necessary, until      } -                  {                   ; relevant bit is 0:                  } -  $B9/$FF/$FF/    {       mov  cx, 0ffffh ;fill cx to the brim              } -  $EC/            {WAIT:  in   al, dx     ;get input from port 201h         } -  $84/$E0/        {       test al, ah     ;is the relevant bit 0 yet?       } -  $E0/$FB/        {       loopne WAIT     ;if not, go back to wait          } - -  $B9/$FF/$FF/    {       mov  cx, 0ffffh ;fill cx to the brim again        } -  $FA/            {       cli             ;disable interrupts               } -  $EE/            {       out  dx, al     ;'nudge' port 201h                } -  $EC/            {AGAIN: in   al, dx     ;get input from port 201h         } -  $84/$E0/        {       test al, ah     ;is the relevant bit 0 yet?       } -  $E0/$FB/        {       loopne AGAIN    ;if not, go back to AGAIN         } -  $FB/            {       sti             ;reenable interrupts              } -  $F7/$D9/        {       neg  cx         ;negative cx                      } -  $81/$C1/$FF/$FF/{       add  cx, 0ffffh ;add 0ffffh back to value in cx   } -  $26/            {       es:             ;segment override                 } -  $89/$0D/        {       mov  [di], cx   ;store value of cx in location    } -                  {                       ; of relevant variable            } -  $C3);           {       ret                                               } -                  {END:                                                     } -*/ +void oldreadjoy(byte xbit, byte ybit, word &xaxis, word &yaxis) { +	; +	/* +	inline( +	  $BA/$01/$02/    {mov  dx, 201h      ;load dx with joystick port address   } +	  $C4/$BE/>XAxis/ {les  di, XAxis[bp] ;load es with segment and di w/offset } +	  $8A/$66/<xbit/  {mov  ah, xbit[bp]  ;set appropriate bit in ah            } +	  $E8/$0C/$00/    {call SUBR                                                } +	  $C4/$BE/>YAxis/ {les  di, YAxis[bp]                                       } +	  $8A/$66/<ybit/  {mov  ah, ybit[bp]  ;set appropriate bit in ah            } +	  $E8/$02/$00/    {call SUBR                                                } +	  $EB/$1D/        {jump short END     ;we're done!                          } +	                  {SUBR:              ;first wait, if necessary, until      } +	                  {                   ; relevant bit is 0:                  } +	  $B9/$FF/$FF/    {       mov  cx, 0ffffh ;fill cx to the brim              } +	  $EC/            {WAIT:  in   al, dx     ;get input from port 201h         } +	  $84/$E0/        {       test al, ah     ;is the relevant bit 0 yet?       } +	  $E0/$FB/        {       loopne WAIT     ;if not, go back to wait          } + +	  $B9/$FF/$FF/    {       mov  cx, 0ffffh ;fill cx to the brim again        } +	  $FA/            {       cli             ;disable interrupts               } +	  $EE/            {       out  dx, al     ;'nudge' port 201h                } +	  $EC/            {AGAIN: in   al, dx     ;get input from port 201h         } +	  $84/$E0/        {       test al, ah     ;is the relevant bit 0 yet?       } +	  $E0/$FB/        {       loopne AGAIN    ;if not, go back to AGAIN         } +	  $FB/            {       sti             ;reenable interrupts              } +	  $F7/$D9/        {       neg  cx         ;negative cx                      } +	  $81/$C1/$FF/$FF/{       add  cx, 0ffffh ;add 0ffffh back to value in cx   } +	  $26/            {       es:             ;segment override                 } +	  $89/$0D/        {       mov  [di], cx   ;store value of cx in location    } +	                  {                       ; of relevant variable            } +	  $C3);           {       ret                                               } +	                  {END:                                                     } +	*/  }    /* OldReadJoy */ -void newreadjoy(byte which, byte meaningless, word& xaxis, word& yaxis) -{ -  reg.ah = 0x84; -  reg.dx = 1; -  intr(0x15,reg); -  if (which == 1) -         { -           xaxis = reg.ax; -           yaxis = reg.bx; -         } -    else { -           xaxis = reg.cx; -           yaxis = reg.dx; -         } +void newreadjoy(byte which, byte meaningless, word &xaxis, word &yaxis) { +	reg.ah = 0x84; +	reg.dx = 1; +	intr(0x15, reg); +	if (which == 1) { +		xaxis = reg.ax; +		yaxis = reg.bx; +	} else { +		xaxis = reg.cx; +		yaxis = reg.dx; +	}  } -boolean oldbutton(byte mask) -{ boolean oldbutton_result; -      oldbutton_result = ((port[0x201] & mask) == 0); return oldbutton_result; +boolean oldbutton(byte mask) { +	boolean oldbutton_result; +	oldbutton_result = ((port[0x201] & mask) == 0); +	return oldbutton_result;  } -boolean newbutton(byte mask) -{ -  boolean newbutton_result; -  reg.ah = 0x84; -  reg.dx = 0; -  intr(0x15,reg); -  newbutton_result = ((reg.al & mask) == 0); -  return newbutton_result; +boolean newbutton(byte mask) { +	boolean newbutton_result; +	reg.ah = 0x84; +	reg.dx = 0; +	intr(0x15, reg); +	newbutton_result = ((reg.al & mask) == 0); +	return newbutton_result;  }  /*$F-*/  /*----------------------------- public routines -----------------------------*/ -void readjoya(word& xaxis, word& yaxis) -{ readjoy(1,2,xaxis, yaxis); } +void readjoya(word &xaxis, word &yaxis) { +	readjoy(1, 2, xaxis, yaxis); +} -void readjoyb(word& xaxis, word& yaxis) -{ readjoy(4,8,xaxis, yaxis); } +void readjoyb(word &xaxis, word &yaxis) { +	readjoy(4, 8, xaxis, yaxis); +} -boolean buttona1() -{ boolean buttona1_result; -      buttona1_result = button(0x10); return buttona1_result; +boolean buttona1() { +	boolean buttona1_result; +	buttona1_result = button(0x10); +	return buttona1_result;  } -boolean buttona2() -{ boolean buttona2_result; -      buttona2_result = button(0x20); return buttona2_result; +boolean buttona2() { +	boolean buttona2_result; +	buttona2_result = button(0x20); +	return buttona2_result;  } -boolean buttonb1() -{ boolean buttonb1_result; -      buttonb1_result = button(0x40); return buttonb1_result; +boolean buttonb1() { +	boolean buttonb1_result; +	buttonb1_result = button(0x40); +	return buttonb1_result;  } -boolean buttonb2() -{ boolean buttonb2_result; -      buttonb2_result = button(0x80); return buttonb2_result; +boolean buttonb2() { +	boolean buttonb2_result; +	buttonb2_result = button(0x80); +	return buttonb2_result;  } -boolean joystickpresent() -{ -  boolean joystickpresent_result; -  intr(0x11,reg); -  joystickpresent_result = ((reg.ax & 0x1000) != 0); -  return joystickpresent_result; +boolean joystickpresent() { +	boolean joystickpresent_result; +	intr(0x11, reg); +	joystickpresent_result = ((reg.ax & 0x1000) != 0); +	return joystickpresent_result;  }  /*------------------------------ initialization -----------------------------*/  class unit_joystick_initialize { -  public: unit_joystick_initialize(); +public: +	unit_joystick_initialize();  };  static unit_joystick_initialize joystick_constructor;  unit_joystick_initialize::unit_joystick_initialize() { -  if (newbios()) -         {                             /* use BIOS routines */ -           readjoy = newreadjoy; -           button = newbutton; -         } -    else {                             /* use work-around routines */ -           readjoy = oldreadjoy; -           button = oldbutton; -         } +	if (newbios()) { +		/* use BIOS routines */ +		readjoy = newreadjoy; +		button = newbutton; +	} else {                           /* use work-around routines */ +		readjoy = oldreadjoy; +		button = oldbutton; +	}  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/joystick.h b/engines/avalanche/joystick.h index 2cbcd3c455..7572ef3036 100644 --- a/engines/avalanche/joystick.h +++ b/engines/avalanche/joystick.h @@ -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 @@ -30,10 +30,10 @@  namespace Avalanche { -void readjoya(word& xaxis, word& yaxis); +void readjoya(word &xaxis, word &yaxis);  /* Reads the X and Y coordinates of Joystick A. */ -void readjoyb(word& xaxis, word& yaxis); +void readjoyb(word &xaxis, word &yaxis);  /* Reads the X and Y coordinates of Joystick B. */  boolean buttona1(); diff --git a/engines/avalanche/loading.cpp b/engines/avalanche/loading.cpp index 3f161eda8b..234b5773b8 100644 --- a/engines/avalanche/loading.cpp +++ b/engines/avalanche/loading.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 @@ -29,23 +29,29 @@  namespace Avalanche { -integer gd,gm; +integer gd, gm;  byte a /*absolute $A000:1200*/;  byte bit;  untyped_file f; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,""); - assign(f,"c:\\sleep\\test.ega"); reset(f,1); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a,12000); - } - close(f); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	assign(f, "c:\\sleep\\test.ega"); +	reset(f, 1); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a, 12000); +	} +	close(f); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/logger.cpp b/engines/avalanche/logger.cpp index 7da976d45c..06c2f2969a 100644 --- a/engines/avalanche/logger.cpp +++ b/engines/avalanche/logger.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 @@ -59,14 +59,14 @@ const char divide[] = "--- oOo ---";  */ - /* L'jet codes: */ +/* L'jet codes: */ -const string startwith = string('\33')+'\50'+"10J"+'\130'; -const string endwith = string('\33')+'\105'; -const string italic = string('\33')+'\50'+'\163'+'\61'+'\123'; /* switches italics on... */ -const string italic_off = string('\33')+'\50'+'\163'+'\60'+'\123'; /* and off. */ -const string emph_on = string('\33')+'\50'+'\163'+'\63'+'\102'; -const string emph_off = string('\33')+'\50'+'\163'+'\60'+'\102'; +const string startwith = string('\33') + '\50' + "10J" + '\130'; +const string endwith = string('\33') + '\105'; +const string italic = string('\33') + '\50' + '\163' + '\61' + '\123'; /* switches italics on... */ +const string italic_off = string('\33') + '\50' + '\163' + '\60' + '\123'; /* and off. */ +const string emph_on = string('\33') + '\50' + '\163' + '\63' + '\102'; +const string emph_off = string('\33') + '\50' + '\163' + '\60' + '\102';  const string double_width = emph_on; /* There IS no double-width. */  const string double_off = emph_off; /* So we'll have to use bold. */  const string quote = 'ª'; @@ -77,160 +77,165 @@ const integer divide_indent = 30;  string scroll_line;  byte scroll_line_length; -void centre(byte size,byte x)  /* Prints req'd number of spaces. */ -{ -    byte fv; -; - if (~ logging)  return; - for( fv=1; fv <= size-(x / 2); fv ++) -  output << logfile << ' '; -} - -void log_setup(string name, boolean printing)       /* Sets up. */ -{; - assign(logfile,name); - rewrite(logfile); - output << logfile << startwith; - log_epson=printing; - logging=true; - - if (! printing)  { quote='"'; unquote='"'; copyright="(c)"; } -} - -void log_divider()     /* Prints the divider sign. */ -{ -    byte fv; -; - if (~ logging)  return; - if (log_epson)  - {; -  output << logfile << string(' ')+double_width; -  for( fv=1; fv <= divide_indent; fv ++) output << logfile << ' '; -  output << logfile << string(' ')+double_off; - } else -  for( fv=1; fv <= 36; fv ++) output << logfile << ' '; - output << logfile << divide << NL; -} - -void log_command(string x)       /* Prints a command */ -{; - if (~ logging)  return; - if (log_epson)  -  output << logfile << double_width+'>'+double_off+' '+italic+x+italic_off << NL; - else -  output << logfile << string("> ")+x << NL; -} - -void log_addstuff(string x) -{; - if (~ logging)  return; - scroll_line=scroll_line+x; -} - -void log_scrollchar(string x)       /* print one character */ -{ -    varying_string<2> z; -; - if (~ logging)  return; - switch (x[1]) { -  case '`': z=quote; break; /* Open quotes: "66" */ -  case '"': z=unquote; break; /* Close quotes: "99" */ -  case '\357': z=copyright; break; /* Copyright sign. */ -  default: z=x; - } - log_addstuff(z); - scroll_line_length += length(z); -} - -void log_italic() -{; - if (~ logging)  return; - if (log_epson)  -  log_addstuff(italic); - else -  log_addstuff("*"); -} - -void log_roman() -{; - if (~ logging)  return; - if (log_epson)  -  log_addstuff(italic_off); - else -  log_addstuff("*"); -} - -void log_epsonroman()     /* This only sends the Roman code if you're on Epson.*/ -{; - if (~ logging)  return; - if (log_epson)  log_addstuff(italic_off); -} - -void log_scrollline()     /* Set up a line for the scroll driver */ -{; - scroll_line_length=0; - scroll_line=""; -} - -void log_scrollendline(boolean centred) -{ -    byte x,fv; -; - if (~ logging)  return; - x=17; - if (centred)  x += (50-scroll_line_length) / 2; - for( fv=1; fv <= x; fv ++) output << logfile << ' '; - output << logfile << scroll_line << NL; -} - -void log_bubbleline(byte linenum,byte whom, string x) -{ -    byte fv; -; - if (~ logging)  return; - if (linenum==1)  - {; -  for( fv=1; fv <= 15; fv ++) output << logfile << ' '; -  output << logfile << italic+tr[whom].a.name+": "+italic_off+x << NL; - } else - {; -  for( fv=1; fv <= 17; fv ++) output << logfile << ' '; -  output << logfile << x << NL; - } -} - -void log_newline() -{; - if (logging)  output << logfile << NL; -} - -void log_newroom(string where) -{ -    byte fv; -; - if (~ logging)  return; - for( fv=1; fv <= 20; fv ++) output << logfile << ' '; - if (log_epson)  output << logfile << emph_on; - output << logfile << string('(')+where+')'; - if (log_epson)  output << logfile << emph_off; - output << logfile << NL; +void centre(byte size, byte x) { /* Prints req'd number of spaces. */ +	byte fv; +	; +	if (~ logging)  return; +	for (fv = 1; fv <= size - (x / 2); fv ++) +		output << logfile << ' '; +} + +void log_setup(string name, boolean printing) {     /* Sets up. */ +	; +	assign(logfile, name); +	rewrite(logfile); +	output << logfile << startwith; +	log_epson = printing; +	logging = true; + +	if (! printing)  { +		quote = '"'; +		unquote = '"'; +		copyright = "(c)"; +	} +} + +void log_divider() {   /* Prints the divider sign. */ +	byte fv; +	; +	if (~ logging)  return; +	if (log_epson) { +		; +		output << logfile << string(' ') + double_width; +		for (fv = 1; fv <= divide_indent; fv ++) output << logfile << ' '; +		output << logfile << string(' ') + double_off; +	} else +		for (fv = 1; fv <= 36; fv ++) output << logfile << ' '; +	output << logfile << divide << NL; +} + +void log_command(string x) {     /* Prints a command */ +	; +	if (~ logging)  return; +	if (log_epson) +		output << logfile << double_width + '>' + double_off + ' ' + italic + x + italic_off << NL; +	else +		output << logfile << string("> ") + x << NL; +} + +void log_addstuff(string x) { +	; +	if (~ logging)  return; +	scroll_line = scroll_line + x; +} + +void log_scrollchar(string x) {     /* print one character */ +	varying_string<2> z; +	; +	if (~ logging)  return; +	switch (x[1]) { +	case '`': +		z = quote; +		break; /* Open quotes: "66" */ +	case '"': +		z = unquote; +		break; /* Close quotes: "99" */ +	case '\357': +		z = copyright; +		break; /* Copyright sign. */ +	default: +		z = x; +	} +	log_addstuff(z); +	scroll_line_length += length(z); +} + +void log_italic() { +	; +	if (~ logging)  return; +	if (log_epson) +		log_addstuff(italic); +	else +		log_addstuff("*"); +} + +void log_roman() { +	; +	if (~ logging)  return; +	if (log_epson) +		log_addstuff(italic_off); +	else +		log_addstuff("*"); +} + +void log_epsonroman() {   /* This only sends the Roman code if you're on Epson.*/ +	; +	if (~ logging)  return; +	if (log_epson)  log_addstuff(italic_off); +} + +void log_scrollline() {   /* Set up a line for the scroll driver */ +	; +	scroll_line_length = 0; +	scroll_line = ""; +} + +void log_scrollendline(boolean centred) { +	byte x, fv; +	; +	if (~ logging)  return; +	x = 17; +	if (centred)  x += (50 - scroll_line_length) / 2; +	for (fv = 1; fv <= x; fv ++) output << logfile << ' '; +	output << logfile << scroll_line << NL; +} + +void log_bubbleline(byte linenum, byte whom, string x) { +	byte fv; +	; +	if (~ logging)  return; +	if (linenum == 1) { +		; +		for (fv = 1; fv <= 15; fv ++) output << logfile << ' '; +		output << logfile << italic + tr[whom].a.name + ": " + italic_off + x << NL; +	} else { +		; +		for (fv = 1; fv <= 17; fv ++) output << logfile << ' '; +		output << logfile << x << NL; +	} +} + +void log_newline() { +	; +	if (logging)  output << logfile << NL; +} + +void log_newroom(string where) { +	byte fv; +	; +	if (~ logging)  return; +	for (fv = 1; fv <= 20; fv ++) output << logfile << ' '; +	if (log_epson)  output << logfile << emph_on; +	output << logfile << string('(') + where + ')'; +	if (log_epson)  output << logfile << emph_off; +	output << logfile << NL;  }  void log_aside(string what) - /* This writes "asides" to the printer. For example, moves in Nim. */ -{; - if (~ logging)  return; - output << logfile << "   (" << italic << what << italic_off << ')' << NL; - /* "What" is what to write. */ -} - -void log_score(word credit,word now) +/* This writes "asides" to the printer. For example, moves in Nim. */  { -    byte fv; -; - if (~ logging)  return; - for( fv=1; fv <= 50; fv ++) output << logfile << ' '; - output << logfile << "Score " << italic << "credit : " << credit << italic_off << " total : " << now << NL; +	; +	if (~ logging)  return; +	output << logfile << "   (" << italic << what << italic_off << ')' << NL; +	/* "What" is what to write. */ +} + +void log_score(word credit, word now) { +	byte fv; +	; +	if (~ logging)  return; +	for (fv = 1; fv <= 50; fv ++) output << logfile << ' '; +	output << logfile << "Score " << italic << "credit : " << credit << italic_off << " total : " << now << NL;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/logger.h b/engines/avalanche/logger.h index 94cd9383b0..cff4336587 100644 --- a/engines/avalanche/logger.h +++ b/engines/avalanche/logger.h @@ -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 @@ -48,7 +48,7 @@ void log_scrollline();    /* Set up a line for the scroll driver */  void log_scrollendline(boolean centred); -void log_bubbleline(byte linenum,byte whom, string x); +void log_bubbleline(byte linenum, byte whom, string x);  void log_newline(); @@ -56,7 +56,7 @@ void log_newroom(string where);  void log_aside(string what); -void log_score(word credit,word now); +void log_score(word credit, word now);  } // End of namespace Avalanche. diff --git a/engines/avalanche/lucerna.cpp b/engines/avalanche/lucerna.cpp index 19466f4b3f..01916ce049 100644 --- a/engines/avalanche/lucerna.cpp +++ b/engines/avalanche/lucerna.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 @@ -57,1084 +57,1240 @@  namespace Avalanche {  /*$V-*/ /*$S-*/ -boolean fxhidden; array<0,3,palettetype> fxpal; - -void callverb(char n) -{ -  if (n==pardon)  -  { -    display(string("The f5 key lets you do a particular action in certain ")+ -            "situations. However, at the moment there is nothing "+ -            "assigned to it. You may press alt-A to see what the "+ -            "current setting of this key is."); -  } else -  { -    weirdword=false; polite=true; verb=n; -    do_that(); -  } +boolean fxhidden; +array<0, 3, palettetype> fxpal; + +void callverb(char n) { +	if (n == pardon) { +		display(string("The f5 key lets you do a particular action in certain ") + +		        "situations. However, at the moment there is nothing " + +		        "assigned to it. You may press alt-A to see what the " + +		        "current setting of this key is."); +	} else { +		weirdword = false; +		polite = true; +		verb = n; +		do_that(); +	}  } -void draw_also_lines() -{ - byte ff; - byte squeaky_code; - -   switch (visible) { -      case m_virtual : { squeaky_code = 1; off_virtual(); } break; -      case m_no      :       squeaky_code = 2; break; -      case m_yes     : { squeaky_code = 3; off();         } break; -   } - - setactivepage(2); - cleardevice(); - setcolor(15); rectangle(0,45,639,160); - for( ff=1; ff <= 50; ff ++) -  { linetype& with = lines[ff];  -   if (x1!=maxint)  -   { -    setcolor(with.col); line(x1,y1,x2,y2); -   }} - -   switch (squeaky_code) { -      case 1 : on_virtual(); break; -      case 2 :; break; /* zzzz, it was off anyway */ -      case 3 : on(); break; -   } +void draw_also_lines() { +	byte ff; +	byte squeaky_code; + +	switch (visible) { +	case m_virtual : { +		squeaky_code = 1; +		off_virtual(); +	} +	break; +	case m_no      : +		squeaky_code = 2; +		break; +	case m_yes     : { +		squeaky_code = 3; +		off(); +	} +	break; +	} + +	setactivepage(2); +	cleardevice(); +	setcolor(15); +	rectangle(0, 45, 639, 160); +	for (ff = 1; ff <= 50; ff ++) { +		linetype &with = lines[ff]; +		if (x1 != maxint) { +			setcolor(with.col); +			line(x1, y1, x2, y2); +		} +	} + +	switch (squeaky_code) { +	case 1 : +		on_virtual(); +		break; +	case 2 : +		; +		break; /* zzzz, it was off anyway */ +	case 3 : +		on(); +		break; +	}  }  void load_also(string n); -static untyped_file f;  +static untyped_file f; -static string nextstring() -{ -    byte l; string x; +static string nextstring() { +	byte l; +	string x; - string nextstring_result; - blockread(f,l,1); blockread(f,x[1],l); x[0]=chr(l); nextstring_result=x; - return nextstring_result; +	string nextstring_result; +	blockread(f, l, 1); +	blockread(f, x[1], l); +	x[0] = chr(l); +	nextstring_result = x; +	return nextstring_result;  }  static void unscramble(); -static void scram1(string& x) -{ -    byte fz; -; - for( fz=1; fz <= length(x); fz ++) -  x[fz]=chr(ord(x[fz]) ^ 177); +static void scram1(string &x) { +	byte fz; +	; +	for (fz = 1; fz <= length(x); fz ++) +		x[fz] = chr(ord(x[fz]) ^ 177);  } -static void unscramble() -{ -    byte fv,ff; - - for( fv=0; fv <= 30; fv ++) -  for( ff=0; ff <= 1; ff ++) -   if (also[fv][ff]!=nil)  -     scram1(*also[fv][ff]); - scram1(listen); - scram1(flags); -/*     for fz:=1 to length(also[fv,ff]^) do -      also[fv,ff]^[fz]:=chr(ord(also[fv,ff]^[fz]) xor 177);*/ +static void unscramble() { +	byte fv, ff; + +	for (fv = 0; fv <= 30; fv ++) +		for (ff = 0; ff <= 1; ff ++) +			if (also[fv][ff] != nil) +				scram1(*also[fv][ff]); +	scram1(listen); +	scram1(flags); +	/*     for fz:=1 to length(also[fv,ff]^) do +	      also[fv,ff]^[fz]:=chr(ord(also[fv,ff]^[fz]) xor 177);*/  } -void load_also(string n) -{ -         byte minnames; byte ff,fv; - - - for( fv=0; fv <= 30; fv ++) -  for( ff=0; ff <= 1; ff ++) -   if (also[fv][ff]!=nil)  { delete also[fv][ff]; also[fv][ff]=nil; } - assign(f,string("also")+n+".avd"); -/*$I-*/ reset(f,1); /*$I+*/ if (ioresult!=0)  return; /* no Also file */ - seek(f,128); blockread(f,minnames,1); - for( fv=0; fv <= minnames; fv ++) - { -  for( ff=0; ff <= 1; ff ++) -  { -   also[fv][ff] = new string; -   *also[fv][ff]=nextstring(); -  } -  *also[fv][0]=string('\235')+*also[fv][0]+'\235'; - } - fillchar(lines,sizeof(lines),0xff); - - fv=getpixel(0,0); blockread(f,fv,1); - blockread(f,lines,sizeof(lines[1])*fv); - blockread(f,fv,1); fillchar(peds,sizeof(peds),'\261'); - blockread(f,peds,sizeof(peds[1])*fv); - blockread(f,numfields,1); blockread(f,fields,sizeof(fields[1])*numfields); - blockread(f,magics,sizeof(magics)); - blockread(f,portals,sizeof(portals)); - blockread(f,flags,sizeof(flags)); - blockread(f,listen[0],1); - blockread(f,listen[1],length(listen)); - draw_also_lines(); - - setactivepage(1); close(f); - unscramble(); - for( fv=0; fv <= minnames; fv ++) -  *also[fv][0]=string(',')+*also[fv][0]+','; +void load_also(string n) { +	byte minnames; +	byte ff, fv; + + +	for (fv = 0; fv <= 30; fv ++) +		for (ff = 0; ff <= 1; ff ++) +			if (also[fv][ff] != nil)  { +				delete also[fv][ff]; +				also[fv][ff] = nil; +			} +	assign(f, string("also") + n + ".avd"); +	/*$I-*/ reset(f, 1); /*$I+*/ if (ioresult != 0)  return; /* no Also file */ +	seek(f, 128); +	blockread(f, minnames, 1); +	for (fv = 0; fv <= minnames; fv ++) { +		for (ff = 0; ff <= 1; ff ++) { +			also[fv][ff] = new string; +			*also[fv][ff] = nextstring(); +		} +		*also[fv][0] = string('\235') + *also[fv][0] + '\235'; +	} +	fillchar(lines, sizeof(lines), 0xff); + +	fv = getpixel(0, 0); +	blockread(f, fv, 1); +	blockread(f, lines, sizeof(lines[1])*fv); +	blockread(f, fv, 1); +	fillchar(peds, sizeof(peds), '\261'); +	blockread(f, peds, sizeof(peds[1])*fv); +	blockread(f, numfields, 1); +	blockread(f, fields, sizeof(fields[1])*numfields); +	blockread(f, magics, sizeof(magics)); +	blockread(f, portals, sizeof(portals)); +	blockread(f, flags, sizeof(flags)); +	blockread(f, listen[0], 1); +	blockread(f, listen[1], length(listen)); +	draw_also_lines(); + +	setactivepage(1); +	close(f); +	unscramble(); +	for (fv = 0; fv <= minnames; fv ++) +		*also[fv][0] = string(',') + *also[fv][0] + ',';  } -void load(byte n)       /* Load2, actually */ -{ - byte a0;  /*absolute $A000:800;*/ - byte a1;  /*absolute $A000:17184;*/ - byte bit; - untyped_file f; varying_string<2> xx; - boolean was_virtual; - - was_virtual=visible==m_virtual; - if (was_virtual)  off_virtual(); else off(); - clear_vmc(); - - xx=strf(n); flesh_colours(); - assign(f,string("place")+xx+".avd"); reset(f,1); - seek(f,146); blockread(f,roomname,30); - /* Compression method byte follows this... */ - seek(f,177); - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); move(a0,a1,12080); - } - close(f); load_also(xx); load_chunks(xx); - - copy03(); bit=getpixel(0,0); - log_newroom(roomname); - - if (was_virtual)  on_virtual(); else on(); +void load(byte n) {     /* Load2, actually */ +	byte a0;  /*absolute $A000:800;*/ +	byte a1;  /*absolute $A000:17184;*/ +	byte bit; +	untyped_file f; +	varying_string<2> xx; +	boolean was_virtual; + +	was_virtual = visible == m_virtual; +	if (was_virtual)  off_virtual(); +	else off(); +	clear_vmc(); + +	xx = strf(n); +	flesh_colours(); +	assign(f, string("place") + xx + ".avd"); +	reset(f, 1); +	seek(f, 146); +	blockread(f, roomname, 30); +	/* Compression method byte follows this... */ +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +		move(a0, a1, 12080); +	} +	close(f); +	load_also(xx); +	load_chunks(xx); + +	copy03(); +	bit = getpixel(0, 0); +	log_newroom(roomname); + +	if (was_virtual)  on_virtual(); +	else on();  } -void zoomout(integer x,integer y) -{ - integer x1,y1,x2,y2; - byte fv; - - setcolor(white); setwritemode(xorput); - setlinestyle(dottedln,0,1); - - for( fv=1; fv <= 20; fv ++) - { -  x1=x-(x / 20)*fv; -  y1=y-((y-10) / 20)*fv; -  x2=x+(((639-x) / 20)*fv); -  y2=y+(((161-y) / 20)*fv); - -  rectangle(x1,y1,x2,y2); -  delay(17); -  rectangle(x1,y1,x2,y2); - } - setwritemode(copyput); setlinestyle(0,0,1); +void zoomout(integer x, integer y) { +	integer x1, y1, x2, y2; +	byte fv; + +	setcolor(white); +	setwritemode(xorput); +	setlinestyle(dottedln, 0, 1); + +	for (fv = 1; fv <= 20; fv ++) { +		x1 = x - (x / 20) * fv; +		y1 = y - ((y - 10) / 20) * fv; +		x2 = x + (((639 - x) / 20) * fv); +		y2 = y + (((161 - y) / 20) * fv); + +		rectangle(x1, y1, x2, y2); +		delay(17); +		rectangle(x1, y1, x2, y2); +	} +	setwritemode(copyput); +	setlinestyle(0, 0, 1);  } -void find_people(byte room) -{ -    char fv; +void find_people(byte room) { +	char fv; - for( fv='\227'; fv <= '\262'; fv ++) -  if (whereis[fv]==room)  -  { -   if (fv<'\257')  him=fv; else her=fv; -  } +	for (fv = '\227'; fv <= '\262'; fv ++) +		if (whereis[fv] == room) { +			if (fv < '\257')  him = fv; +			else her = fv; +		}  } -void exitroom(byte x) -{ - nosound; - forget_chunks(); - seescroll=true;  /* This stops the trippancy system working over the +void exitroom(byte x) { +	nosound; +	forget_chunks(); +	seescroll = true;  /* This stops the trippancy system working over the    length of this procedure. */ - { dnatype& with = dna;  -  switch (x) { -   case r__spludwicks: { -                   lose_timer(reason_avariciustalks); -  /* He doesn't HAVE to be talking for this to work. It just deletes it IF it -  exists. */        with.avaricius_talk=0; -                  } -                  break; -   case r__bridge: if (with.drawbridge_open>0)  -              { -               with.drawbridge_open=4; /* Fully open. */ -               lose_timer(reason_drawbridgefalls); -              } -              break; -   case r__outsidecardiffcastle: lose_timer(reason_cardiffsurvey); break; - -   case r__robins: lose_timer(reason_getting_tied_up); break; -  }} - - interrogation=0;  /* Leaving the room cancels all the questions automatically. */ - - seescroll=false;  /* Now it can work again! */ - - dna.last_room=dna.room; - if (dna.room!=r__map)  -  dna.last_room_not_map=dna.room; +	{ +		dnatype &with = dna; +		switch (x) { +		case r__spludwicks: { +			lose_timer(reason_avariciustalks); +			/* He doesn't HAVE to be talking for this to work. It just deletes it IF it +			exists. */        with.avaricius_talk = 0; +		} +		break; +		case r__bridge: +			if (with.drawbridge_open > 0) { +				with.drawbridge_open = 4; /* Fully open. */ +				lose_timer(reason_drawbridgefalls); +			} +			break; +		case r__outsidecardiffcastle: +			lose_timer(reason_cardiffsurvey); +			break; + +		case r__robins: +			lose_timer(reason_getting_tied_up); +			break; +		} +	} + +	interrogation = 0; /* Leaving the room cancels all the questions automatically. */ + +	seescroll = false; /* Now it can work again! */ + +	dna.last_room = dna.room; +	if (dna.room != r__map) +		dna.last_room_not_map = dna.room;  } -void new_town()     /* You've just entered a town from the map. */ -{ - standard_bar(); - - switch (dna.room) { -  case r__outsidenottspub: /* Entry into Nottingham. */ -    if ((dna.rooms[r__robins]>0) && (dna.been_tied_up) && -     (! dna.taken_mushroom))  -      dna.mushroom_growing=true; -      break; -  case r__wisewomans: /* Entry into Argent. */ -   { -    if (dna.talked_to_crapulus && (! dna.lustie_is_asleep))  -    { -     dna.spludwicks_here=! ((dna.rooms[r__wisewomans] % 3)==1); -     dna.crapulus_will_tell=! dna.spludwicks_here; -    } else -    { -      dna.spludwicks_here=true; -      dna.crapulus_will_tell=false; -    } -    if (dna.box_contents==wine)  dna.winestate=3;     /* Vinegar */ -   } -   break; - } - - if (dna.room!=r__outsideducks)  - { -  if ((dna.obj[onion]) && ! (dna.onion_in_vinegar))  -   dna.rotten_onion=true;  /* You're holding the onion */ - } +void new_town() {   /* You've just entered a town from the map. */ +	standard_bar(); + +	switch (dna.room) { +	case r__outsidenottspub: /* Entry into Nottingham. */ +		if ((dna.rooms[r__robins] > 0) && (dna.been_tied_up) && +		        (! dna.taken_mushroom)) +			dna.mushroom_growing = true; +		break; +	case r__wisewomans: { /* Entry into Argent. */ +		if (dna.talked_to_crapulus && (! dna.lustie_is_asleep)) { +			dna.spludwicks_here = !((dna.rooms[r__wisewomans] % 3) == 1); +			dna.crapulus_will_tell = ! dna.spludwicks_here; +		} else { +			dna.spludwicks_here = true; +			dna.crapulus_will_tell = false; +		} +		if (dna.box_contents == wine)  dna.winestate = 3; /* Vinegar */ +	} +	break; +	} + +	if (dna.room != r__outsideducks) { +		if ((dna.obj[onion]) && !(dna.onion_in_vinegar)) +			dna.rotten_onion = true; /* You're holding the onion */ +	}  } -void enterroom(byte x,byte ped); +void enterroom(byte x, byte ped); -static void put_geida_at(byte whichped, byte& ped) -{ - if (ped==0)  return; - tr[2].init(5,false); /* load Geida */ - apped(2,whichped); - tr[2].call_eachstep=true; - tr[2].eachstep=procgeida_procs; +static void put_geida_at(byte whichped, byte &ped) { +	if (ped == 0)  return; +	tr[2].init(5, false); /* load Geida */ +	apped(2, whichped); +	tr[2].call_eachstep = true; +	tr[2].eachstep = procgeida_procs;  } -void enterroom(byte x,byte ped) -{ +void enterroom(byte x, byte ped) { - seescroll=true;  /* This stops the trippancy system working over the +	seescroll = true;  /* This stops the trippancy system working over the    length of this procedure. */ - find_people(x); - dna.room=x; if (ped!=0)  dna.rooms[x] += 1; - - load(x); - - if ((dna.rooms[x]==0) && (! flagset('S')))  points(1); - whereis[pavalot]=dna.room; - if (dna.geida_follows)  whereis[pgeida]=x; - roomtime=0; - - { dnatype& with = dna;  -  if ((with.last_room==r__map) && (with.last_room_not_map!=with.room))  -   new_town();} - - switch (x) { -  case r__yours: if (dna.avvy_in_bed)  -            { -             show_one(3); -             set_up_timer(100,procarkata_shouts,reason_arkata_shouts); -            } -            break; - -  case r__outsideyours: if (ped>0)  -  { -   if (! dna.talked_to_crapulus)  -   { - -    whereis[pcrapulus]=r__outsideyours; -    tr[2].init(8,false); /* load Crapulus */ - -    if (dna.rooms[r__outsideyours]==1)  -    { -     apped(2,4); /* Start on the right-hand side of the screen. */ -     tr[2].walkto(5); /* Walks up to greet you. */ -    } else -    { -     apped(2,5); /* Starts where he was before. */ -     tr[2].face=3; -    } - -    tr[2].call_eachstep=true; -    tr[2].eachstep=procface_avvy;  /* He always faces Avvy. */ - -   } else whereis[pcrapulus]=r__nowhere; - -   if (dna.crapulus_will_tell)  -   { -    tr[2].init(8,false); -    apped(2,2); -    tr[2].walkto(4); -    set_up_timer(20,proccrapulus_splud_out,reason_crapulus_says_spludwick_out); -    dna.crapulus_will_tell=false; -   } -  } -  break; - -  case r__outsidespludwicks: -   if ((dna.rooms[r__outsidespludwicks]==1) && (ped==1))  -   { -    set_up_timer(20,procbang,reason_explosion); -    dna.spludwicks_here=true; -   } -   break; - -  case r__spludwicks: -   if (dna.spludwicks_here)  -   { -    if (ped>0)  -    { -     tr[2].init(2,false); /* load Spludwick */ -     apped(2,2); -     whereis['\227']=r__spludwicks; -    } - -    dna.dogfoodpos = 0;  /* Also Spludwick pos. */ - -    tr[2].call_eachstep =true; -    tr[2].eachstep=procgeida_procs; -   } else whereis['\227']=r__nowhere; -   break; - -  case r__brummieroad: -   { -    if (dna.geida_follows)  put_geida_at(5, ped); -    if (dna.cwytalot_gone)  -    { -      magics[lightred].op=nix; -      whereis[pcwytalot]=r__nowhere; -    } else -    { -     if (ped>0)  -     { -      tr[2].init(4,false); /* 4=Cwytalot*/ -      tr[2].call_eachstep=true; -      tr[2].eachstep=procfollow_avvy_y; -      whereis[pcwytalot]=r__brummieroad; - -      if (dna.rooms[r__brummieroad]==1)   /* First time here... */ -      { -       apped(2,2); /* He appears on the right of the screen... */ -       tr[2].walkto(4); /* ...and he walks up... */ -      } else -      {     /* You've been here before. */ -       apped(2,4); /* He's standing in your way straight away... */ -       tr[2].face=left; -      } -     } -    } -   } -   break; - -  case r__argentroad: -   { dnatype& with = dna;  -    if ((with.cwytalot_gone) && (! with.cwytalot_in_herts) && (ped==2) && -     (dna.rooms[r__argentroad]>3))  -    { -     tr[2].init(4,false); /* 4=Cwytalot again*/ -     apped(2,1); -     tr[2].walkto(2); -     tr[2].vanishifstill=true; -     with.cwytalot_in_herts=true; -     /*whereis[#157]:=r__Nowhere;*/ /* can we fit this in? */ -     set_up_timer(20,proc_cwytalot_in_herts,reason_cwytalot_in_herts); -    }} -    break; - -  case r__bridge: -  { -   if (dna.drawbridge_open==4) /*open*/  -   { -    show_one(3); /* Position of drawbridge */ -    magics[green].op=nix;  /* You may enter the drawbridge. */ -   } -   if (dna.geida_follows)  put_geida_at(ped+3, ped); /* load Geida */ -  } -  break; - -  case r__robins: -  { -   if (ped>0)  -   { -    if (! dna.been_tied_up)  -    {     /* A welcome party... or maybe not... */ -     tr[2].init(6,false); -     apped(2,2); -     tr[2].walkto(3); -     set_up_timer(36,procget_tied_up,reason_getting_tied_up); -    } -   } - -   if (dna.been_tied_up)  -   { -    whereis[probinhood]=0; whereis[pfriartuck]=0; -   } - -   if (dna.tied_up)  show_one(2); - -   if (! dna.mushroom_growing)  show_one(3); -  } -  break; - -  case r__outsidecardiffcastle: -   { -    if (ped>0)  -     switch (dna.cardiff_things) { -      case 0 : { /* You've answered NONE of his questions. */ -           tr[2].init(9,false); -           apped(2,2); -           tr[2].walkto(3); -           set_up_timer(47,proccardiffsurvey,reason_cardiffsurvey); -          } -          break; -      case 5 : magics[2].op=nix; break; /* You've answered ALL his questions. => nothing happens. */ -     default: { /* You've answered SOME of his questions. */ -           tr[2].init(9,false); -           apped(2,3); -           tr[2].face=right; -           set_up_timer(3,proccardiff_return,reason_cardiffsurvey); -          } -     } -    if (dna.cardiff_things<5)  -     interrogation=dna.cardiff_things; else interrogation=0; -   } -   break; - -  case r__map: -   {     /* You're entering the map. */ -    dawn(); setactivepage(cp); -    if (ped>0)  zoomout(peds[ped].x,peds[ped].y); -    setactivepage(1-cp); - -    { dnatype& with = dna;  -     if ((with.obj[wine]) && (with.winestate!=3))  -     { -      dixi('q',9); /* Don't want to waste the wine! */ -      with.obj[wine]=false; -      objectlist(); -     }} - -    dixi('q',69); -   } -   break; - -  case r__catacombs: -   { -    if (set::of(0,3,5,6, eos).has(ped))  -    { -      dnatype& with = dna;  - -      switch (ped) { -       case 3 : { with.cat_x=8; with.cat_y=4; } break; /* Enter from oubliette */ -       case 5 : { with.cat_x=8; with.cat_y=7; } break; /* Enter from du Lustie's */ -       case 6 : { with.cat_x=4; with.cat_y=1; } break; /* Enter from Geida's */ -      } -      dna.enter_catacombs_from_lusties_room=true; -      catamove(ped); -      dna.enter_catacombs_from_lusties_room=false; -    } -   } -   break; - -  case r__argentpub: { -                 if (dna.wonnim)  show_one(1);   /* No lute by the settle. */ -                 dna.malagauche=0;  /* Ready to boot Malagauche */ -                 if (dna.givenbadgetoiby)  -                  { show_one(8); show_one(9); } -                } -                break; - -  case r__lustiesroom: { -                   dna.dogfoodpos=1;  /* Actually, du Lustie pos. */ -                   if (tr[1].whichsprite==0)   /* Avvy in his normal clothes */ -                    set_up_timer(3,proccallsguards,reason_du_lustie_talks); -                   else -                    if (! dna.entered_lusties_room_as_monk) /*already*/  -                     /* Presumably, Avvy dressed as a monk. */ -                    set_up_timer(3,procgreetsmonk,reason_du_lustie_talks); - -                   if (dna.geida_follows)  -                   { -                    put_geida_at(5, ped); -                    if (dna.lustie_is_asleep)  show_one(5); -                   } -                  } -                  break; - -  case r__musicroom: { -                 if (dna.jacques_awake>0)  -                 { -                  dna.jacques_awake=5; -                  show_one(2); -                  show_one(4); -                  magics[brown].op=nix; -                  whereis[pjacques]=0; -                 } -                 if (ped!=0)  -                 { -                  show_one(6); -                  first_show(5); then_show(7); -                  start_to_close(); -                 } -                } -                break; - -  case r__outsidenottspub: if (ped==2)  -                      { -                       show_one(3); first_show(2); -                       then_show(1); then_show(4); -                       start_to_close(); -                      } -                      break; - -  case r__outsideargentpub: if (ped==2)  { -                        show_one(6); -                        first_show(5); then_show(7); -                        start_to_close(); -                       } -                       break; - -  case r__wisewomans: { -                  tr[2].init(11,false); -                  if ((dna.rooms[r__wisewomans]==1) && (ped>0))  -                  { -                   apped(2,2); /* Start on the right-hand side of the screen. */ -                   tr[2].walkto(4); /* Walks up to greet you. */ -                  } else -                  { -                   apped(2,4); /* Starts where she was before. */ -                   tr[2].face=3; -                  } - -                  tr[2].call_eachstep=true; -                  tr[2].eachstep=procface_avvy;  /* She always faces Avvy. */ -                 } -                 break; - -  case r__insidecardiffcastle: -   if (ped>0)  -   { -    tr[2].init(10,false); /* Define the dart. */ -    first_show(1); -    if (dna.arrow_in_the_door)  then_show(3); else then_show(2); -    if (dna.taken_pen)  show_one(4); -    start_to_close(); -   } else -   { -    show_one(1); -    if (dna.arrow_in_the_door)  show_one(3); else show_one(2); -   } -   break; - -  case r__avvysgarden: if (ped==1)  { -                   show_one(2); -                   first_show(1); then_show(3); -                   start_to_close(); -                  } -                  break; - -  case r__entrancehall:case r__insideabbey: if (ped==2)  { -                    show_one(2); -                    first_show(1); then_show(3); -                    start_to_close(); -                   } -                   break; - -  case r__aylesoffice: if (dna.ayles_is_awake)  show_one(2); break; /* Ayles awake. */ - -  case r__geidas: put_geida_at(2, ped); break; /* load Geida */ - -  case r__easthall:case r__westhall: if (dna.geida_follows)  put_geida_at(ped+2, ped); break; - -  case r__lusties: if (dna.geida_follows)  put_geida_at(ped+6, ped); break; - -  case r__nottspub: { -                if (dna.sitting_in_pub)  show_one(3); -                dna.dogfoodpos=1;  /* Actually, du Lustie pos. */ -               } -               break; - -  case r__outsideducks: if (ped==2)  -                   {     /* Shut the door */ -                    show_one(3); -                    first_show(2); then_show(1); -                    then_show(4); start_to_close(); -                   } -                   break; -  case r__ducks: dna.dogfoodpos=1; break; /* Actually, Duck pos. */ - - } - - seescroll=false;  /* Now it can work again! */ +	find_people(x); +	dna.room = x; +	if (ped != 0)  dna.rooms[x] += 1; + +	load(x); + +	if ((dna.rooms[x] == 0) && (! flagset('S')))  points(1); +	whereis[pavalot] = dna.room; +	if (dna.geida_follows)  whereis[pgeida] = x; +	roomtime = 0; + +	{ +		dnatype &with = dna; +		if ((with.last_room == r__map) && (with.last_room_not_map != with.room)) +			new_town(); +	} + +	switch (x) { +	case r__yours: +		if (dna.avvy_in_bed) { +			show_one(3); +			set_up_timer(100, procarkata_shouts, reason_arkata_shouts); +		} +		break; + +	case r__outsideyours: +		if (ped > 0) { +			if (! dna.talked_to_crapulus) { + +				whereis[pcrapulus] = r__outsideyours; +				tr[2].init(8, false); /* load Crapulus */ + +				if (dna.rooms[r__outsideyours] == 1) { +					apped(2, 4); /* Start on the right-hand side of the screen. */ +					tr[2].walkto(5); /* Walks up to greet you. */ +				} else { +					apped(2, 5); /* Starts where he was before. */ +					tr[2].face = 3; +				} + +				tr[2].call_eachstep = true; +				tr[2].eachstep = procface_avvy; /* He always faces Avvy. */ + +			} else whereis[pcrapulus] = r__nowhere; + +			if (dna.crapulus_will_tell) { +				tr[2].init(8, false); +				apped(2, 2); +				tr[2].walkto(4); +				set_up_timer(20, proccrapulus_splud_out, reason_crapulus_says_spludwick_out); +				dna.crapulus_will_tell = false; +			} +		} +		break; + +	case r__outsidespludwicks: +		if ((dna.rooms[r__outsidespludwicks] == 1) && (ped == 1)) { +			set_up_timer(20, procbang, reason_explosion); +			dna.spludwicks_here = true; +		} +		break; + +	case r__spludwicks: +		if (dna.spludwicks_here) { +			if (ped > 0) { +				tr[2].init(2, false); /* load Spludwick */ +				apped(2, 2); +				whereis['\227'] = r__spludwicks; +			} + +			dna.dogfoodpos = 0;  /* Also Spludwick pos. */ + +			tr[2].call_eachstep = true; +			tr[2].eachstep = procgeida_procs; +		} else whereis['\227'] = r__nowhere; +		break; + +	case r__brummieroad: { +		if (dna.geida_follows)  put_geida_at(5, ped); +		if (dna.cwytalot_gone) { +			magics[lightred].op = nix; +			whereis[pcwytalot] = r__nowhere; +		} else { +			if (ped > 0) { +				tr[2].init(4, false); /* 4=Cwytalot*/ +				tr[2].call_eachstep = true; +				tr[2].eachstep = procfollow_avvy_y; +				whereis[pcwytalot] = r__brummieroad; + +				if (dna.rooms[r__brummieroad] == 1) { /* First time here... */ +					apped(2, 2); /* He appears on the right of the screen... */ +					tr[2].walkto(4); /* ...and he walks up... */ +				} else { +					/* You've been here before. */ +					apped(2, 4); /* He's standing in your way straight away... */ +					tr[2].face = left; +				} +			} +		} +	} +	break; + +	case r__argentroad: { +		dnatype &with = dna; +		if ((with.cwytalot_gone) && (! with.cwytalot_in_herts) && (ped == 2) && +		        (dna.rooms[r__argentroad] > 3)) { +			tr[2].init(4, false); /* 4=Cwytalot again*/ +			apped(2, 1); +			tr[2].walkto(2); +			tr[2].vanishifstill = true; +			with.cwytalot_in_herts = true; +			/*whereis[#157]:=r__Nowhere;*/ /* can we fit this in? */ +			set_up_timer(20, proc_cwytalot_in_herts, reason_cwytalot_in_herts); +		} +	} +	break; + +	case r__bridge: { +		if (dna.drawbridge_open == 4) { /*open*/ +			show_one(3); /* Position of drawbridge */ +			magics[green].op = nix; /* You may enter the drawbridge. */ +		} +		if (dna.geida_follows)  put_geida_at(ped + 3, ped); /* load Geida */ +	} +	break; + +	case r__robins: { +		if (ped > 0) { +			if (! dna.been_tied_up) { +				/* A welcome party... or maybe not... */ +				tr[2].init(6, false); +				apped(2, 2); +				tr[2].walkto(3); +				set_up_timer(36, procget_tied_up, reason_getting_tied_up); +			} +		} + +		if (dna.been_tied_up) { +			whereis[probinhood] = 0; +			whereis[pfriartuck] = 0; +		} + +		if (dna.tied_up)  show_one(2); + +		if (! dna.mushroom_growing)  show_one(3); +	} +	break; + +	case r__outsidecardiffcastle: { +		if (ped > 0) +			switch (dna.cardiff_things) { +			case 0 : { /* You've answered NONE of his questions. */ +				tr[2].init(9, false); +				apped(2, 2); +				tr[2].walkto(3); +				set_up_timer(47, proccardiffsurvey, reason_cardiffsurvey); +			} +			break; +			case 5 : +				magics[2].op = nix; +				break; /* You've answered ALL his questions. => nothing happens. */ +			default: { /* You've answered SOME of his questions. */ +				tr[2].init(9, false); +				apped(2, 3); +				tr[2].face = right; +				set_up_timer(3, proccardiff_return, reason_cardiffsurvey); +			} +			} +		if (dna.cardiff_things < 5) +			interrogation = dna.cardiff_things; +		else interrogation = 0; +	} +	break; + +	case r__map: { +		/* You're entering the map. */ +		dawn(); +		setactivepage(cp); +		if (ped > 0)  zoomout(peds[ped].x, peds[ped].y); +		setactivepage(1 - cp); + +		{ +			dnatype &with = dna; +			if ((with.obj[wine]) && (with.winestate != 3)) { +				dixi('q', 9); /* Don't want to waste the wine! */ +				with.obj[wine] = false; +				objectlist(); +			} +		} + +		dixi('q', 69); +	} +	break; + +	case r__catacombs: { +		if (set::of(0, 3, 5, 6, eos).has(ped)) { +			dnatype &with = dna; + +			switch (ped) { +			case 3 : { +				with.cat_x = 8; +				with.cat_y = 4; +			} +			break; /* Enter from oubliette */ +			case 5 : { +				with.cat_x = 8; +				with.cat_y = 7; +			} +			break; /* Enter from du Lustie's */ +			case 6 : { +				with.cat_x = 4; +				with.cat_y = 1; +			} +			break; /* Enter from Geida's */ +			} +			dna.enter_catacombs_from_lusties_room = true; +			catamove(ped); +			dna.enter_catacombs_from_lusties_room = false; +		} +	} +	break; + +	case r__argentpub: { +		if (dna.wonnim)  show_one(1);   /* No lute by the settle. */ +		dna.malagauche = 0; /* Ready to boot Malagauche */ +		if (dna.givenbadgetoiby) { +			show_one(8); +			show_one(9); +		} +	} +	break; + +	case r__lustiesroom: { +		dna.dogfoodpos = 1; /* Actually, du Lustie pos. */ +		if (tr[1].whichsprite == 0) /* Avvy in his normal clothes */ +			set_up_timer(3, proccallsguards, reason_du_lustie_talks); +		else if (! dna.entered_lusties_room_as_monk) /*already*/ +			/* Presumably, Avvy dressed as a monk. */ +			set_up_timer(3, procgreetsmonk, reason_du_lustie_talks); + +		if (dna.geida_follows) { +			put_geida_at(5, ped); +			if (dna.lustie_is_asleep)  show_one(5); +		} +	} +	break; + +	case r__musicroom: { +		if (dna.jacques_awake > 0) { +			dna.jacques_awake = 5; +			show_one(2); +			show_one(4); +			magics[brown].op = nix; +			whereis[pjacques] = 0; +		} +		if (ped != 0) { +			show_one(6); +			first_show(5); +			then_show(7); +			start_to_close(); +		} +	} +	break; + +	case r__outsidenottspub: +		if (ped == 2) { +			show_one(3); +			first_show(2); +			then_show(1); +			then_show(4); +			start_to_close(); +		} +		break; + +	case r__outsideargentpub: +		if (ped == 2)  { +			show_one(6); +			first_show(5); +			then_show(7); +			start_to_close(); +		} +		break; + +	case r__wisewomans: { +		tr[2].init(11, false); +		if ((dna.rooms[r__wisewomans] == 1) && (ped > 0)) { +			apped(2, 2); /* Start on the right-hand side of the screen. */ +			tr[2].walkto(4); /* Walks up to greet you. */ +		} else { +			apped(2, 4); /* Starts where she was before. */ +			tr[2].face = 3; +		} + +		tr[2].call_eachstep = true; +		tr[2].eachstep = procface_avvy; /* She always faces Avvy. */ +	} +	break; + +	case r__insidecardiffcastle: +		if (ped > 0) { +			tr[2].init(10, false); /* Define the dart. */ +			first_show(1); +			if (dna.arrow_in_the_door)  then_show(3); +			else then_show(2); +			if (dna.taken_pen)  show_one(4); +			start_to_close(); +		} else { +			show_one(1); +			if (dna.arrow_in_the_door)  show_one(3); +			else show_one(2); +		} +		break; + +	case r__avvysgarden: +		if (ped == 1)  { +			show_one(2); +			first_show(1); +			then_show(3); +			start_to_close(); +		} +		break; + +	case r__entrancehall: +	case r__insideabbey: +		if (ped == 2)  { +			show_one(2); +			first_show(1); +			then_show(3); +			start_to_close(); +		} +		break; + +	case r__aylesoffice: +		if (dna.ayles_is_awake)  show_one(2); +		break; /* Ayles awake. */ + +	case r__geidas: +		put_geida_at(2, ped); +		break; /* load Geida */ + +	case r__easthall: +	case r__westhall: +		if (dna.geida_follows)  put_geida_at(ped + 2, ped); +		break; + +	case r__lusties: +		if (dna.geida_follows)  put_geida_at(ped + 6, ped); +		break; + +	case r__nottspub: { +		if (dna.sitting_in_pub)  show_one(3); +		dna.dogfoodpos = 1; /* Actually, du Lustie pos. */ +	} +	break; + +	case r__outsideducks: +		if (ped == 2) { +			/* Shut the door */ +			show_one(3); +			first_show(2); +			then_show(1); +			then_show(4); +			start_to_close(); +		} +		break; +	case r__ducks: +		dna.dogfoodpos = 1; +		break; /* Actually, Duck pos. */ + +	} + +	seescroll = false; /* Now it can work again! */  } -void thinkabout(char z, boolean th)       /* Hey!!! Get it and put it!!! */ -{ - const integer x = 205; const integer y = 170; const integer picsize = 966; - const bytefield thinkspace =  -  {25, 170, 32, 200}; - untyped_file f; pointer p; byte fv; - - - thinks=z; z -= 1; - - if (th)  - {     /* Things */ -  assign(f,"thinks.avd"); wait(); getmem(p,picsize); -  reset(f,1); seek(f,ord(z)*picsize+65); blockread(f,p,picsize); off(); -  close(f); - } else - {     /* People */ -  assign(f,"folk.avd"); -  wait(); -  getmem(p,picsize); -  reset(f,1); - -  fv=ord(z)-149; -  if (fv>=25)  fv -= 8; -  if (fv==20)  fv -= 1;  /* Last time... */ - -  seek(f,fv*picsize+65); -  blockread(f,p,picsize); -  off(); -  close(f); - } - - setactivepage(3); - putimage(x,y,p,0); - setactivepage(1-cp); - - for( fv=0; fv <= 1; fv ++) -  getset[fv].remember(thinkspace); - - freemem(p,picsize); - on(); thinkthing=th; +void thinkabout(char z, boolean th) {     /* Hey!!! Get it and put it!!! */ +	const integer x = 205; +	const integer y = 170; +	const integer picsize = 966; +	const bytefield thinkspace = +	{25, 170, 32, 200}; +	untyped_file f; +	pointer p; +	byte fv; + + +	thinks = z; +	z -= 1; + +	if (th) { +		/* Things */ +		assign(f, "thinks.avd"); +		wait(); +		getmem(p, picsize); +		reset(f, 1); +		seek(f, ord(z)*picsize + 65); +		blockread(f, p, picsize); +		off(); +		close(f); +	} else { +		/* People */ +		assign(f, "folk.avd"); +		wait(); +		getmem(p, picsize); +		reset(f, 1); + +		fv = ord(z) - 149; +		if (fv >= 25)  fv -= 8; +		if (fv == 20)  fv -= 1; /* Last time... */ + +		seek(f, fv * picsize + 65); +		blockread(f, p, picsize); +		off(); +		close(f); +	} + +	setactivepage(3); +	putimage(x, y, p, 0); +	setactivepage(1 - cp); + +	for (fv = 0; fv <= 1; fv ++) +		getset[fv].remember(thinkspace); + +	freemem(p, picsize); +	on(); +	thinkthing = th;  } -void load_digits()     /* Load the scoring digits & rwlites */ -{ - const integer digitsize = 134; - const integer rwlitesize = 126; -    untyped_file f; char fv; byte ff; - - assign(f,"digit.avd"); reset(f,1); - for( fv='0'; fv <= '9'; fv ++) - { -  getmem(digit[fv],digitsize); blockread(f,digit[fv],digitsize); - } - for( ff=0; ff <= 8; ff ++) - { -  getmem(rwlite[ff],rwlitesize); blockread(f,rwlite[ff],rwlitesize); - } - close(f); +void load_digits() {   /* Load the scoring digits & rwlites */ +	const integer digitsize = 134; +	const integer rwlitesize = 126; +	untyped_file f; +	char fv; +	byte ff; + +	assign(f, "digit.avd"); +	reset(f, 1); +	for (fv = '0'; fv <= '9'; fv ++) { +		getmem(digit[fv], digitsize); +		blockread(f, digit[fv], digitsize); +	} +	for (ff = 0; ff <= 8; ff ++) { +		getmem(rwlite[ff], rwlitesize); +		blockread(f, rwlite[ff], rwlitesize); +	} +	close(f);  } -void toolbar() -{ -    untyped_file f; word s; byte fv; pointer p; - - assign(f,"useful.avd"); reset(f,1); - s=filesize(f)-40; getmem(p,s); - seek(f,40); - blockread(f,p,s); - close(f); -/* off;*/ - - setcolor(15); /* (And sent for chrysanthemums...) Yellow and white. */ - setfillstyle(1,6); - for( fv=0; fv <= 1; fv ++) - { -  setactivepage(fv); putimage(5,169,p,0); -  if (demo)  -  { -   bar(264,177,307,190); -   outtextxy(268,188,"Demo!"); /* well... actually only white now. */ -  } - } - -/* on;*/ - freemem(p,s); - oldrw=177; showrw(); +void toolbar() { +	untyped_file f; +	word s; +	byte fv; +	pointer p; + +	assign(f, "useful.avd"); +	reset(f, 1); +	s = filesize(f) - 40; +	getmem(p, s); +	seek(f, 40); +	blockread(f, p, s); +	close(f); +	/* off;*/ + +	setcolor(15); /* (And sent for chrysanthemums...) Yellow and white. */ +	setfillstyle(1, 6); +	for (fv = 0; fv <= 1; fv ++) { +		setactivepage(fv); +		putimage(5, 169, p, 0); +		if (demo) { +			bar(264, 177, 307, 190); +			outtextxy(268, 188, "Demo!"); /* well... actually only white now. */ +		} +	} + +	/* on;*/ +	freemem(p, s); +	oldrw = 177; +	showrw();  } -void showscore() -{ -      const bytefield scorespace = {33, 177, 39, 200}; -    varying_string<3> q; byte fv; +void showscore() { +	const bytefield scorespace = {33, 177, 39, 200}; +	varying_string<3> q; +	byte fv; - if (demo)  return; +	if (demo)  return; - str(dna.score,q); while (q[0]<'\3')  q=string('0')+q; off(); - setactivepage(3); - for( fv=1; fv <= 3; fv ++) -  if (lastscore[fv]!=q[fv])  -   putimage(250+fv*15,177,digit[q[fv]],0); +	str(dna.score, q); +	while (q[0] < '\3')  q = string('0') + q; +	off(); +	setactivepage(3); +	for (fv = 1; fv <= 3; fv ++) +		if (lastscore[fv] != q[fv]) +			putimage(250 + fv * 15, 177, digit[q[fv]], 0); - for( fv=0; fv <= 1; fv ++) -  getset[fv].remember(scorespace); +	for (fv = 0; fv <= 1; fv ++) +		getset[fv].remember(scorespace); - setactivepage(1-cp); - on(); lastscore=q; +	setactivepage(1 - cp); +	on(); +	lastscore = q;  } -void points(byte num)       /* Add on no. of points */ -{ -    byte q,fv; - - for( q=1; q <= num; q ++) - { -  dna.score += 1; -  if (soundfx)  for( fv=1; fv <= 97; fv ++) sound(177+dna.score*3); nosound; - } - log_score(num,dna.score); showscore(); -} +void points(byte num) {     /* Add on no. of points */ +	byte q, fv; -void topcheck() -{ - { menuset& with = ddm_m;  /* Menuset */ -     getmenu(mpx);} /* Do this one */ +	for (q = 1; q <= num; q ++) { +		dna.score += 1; +		if (soundfx)  for (fv = 1; fv <= 97; fv ++) sound(177 + dna.score * 3); +		nosound; +	} +	log_score(num, dna.score); +	showscore();  } -void mouseway() -{ -    byte col; - - off(); col=getpixel(mx,my); on(); - { triptype& with = tr[1];  -  { dnatype& with1 = dna;  -   switch (col) { -    case green:        { dna.rw=up;    rwsp(1,up);    showrw(); } break; -    case brown:        { dna.rw=down;  rwsp(1,down);  showrw(); } break; -    case cyan:         { dna.rw=left;  rwsp(1,left);  showrw(); } break; -    case lightmagenta: { dna.rw=right; rwsp(1,right); showrw(); } break; -    case red:case white:case lightcyan:case yellow: { stopwalking(); showrw(); } break; -   }}} +void topcheck() { +	{ +		menuset &with = ddm_m;  /* Menuset */ +		getmenu(mpx); +	} /* Do this one */  } -void inkey() -{ -    char r; - - - if (demo)  return; /* Demo handles this itself. */ - - if (mousetext=="")  - {     /* read keyboard */ -  readkeye(); -  if ((inchar==' ') && ((shiftstate & 8)>0))  -  { -   inchar='\0'; extd='#'; /* alt-spacebar = alt-H */ -  } - } else - { -  if (mousetext[1]=='`')  mousetext[1]='\15'; /* Backquote = return in a macro */ -  inchar=mousetext[1]; mousetext=copy(mousetext,2,255); - } +void mouseway() { +	byte col; + +	off(); +	col = getpixel(mx, my); +	on(); +	{ +		triptype &with = tr[1]; +		{ +			dnatype &with1 = dna; +			switch (col) { +			case green:        { +				dna.rw = up; +				rwsp(1, up); +				showrw(); +			} +			break; +			case brown:        { +				dna.rw = down; +				rwsp(1, down); +				showrw(); +			} +			break; +			case cyan:         { +				dna.rw = left; +				rwsp(1, left); +				showrw(); +			} +			break; +			case lightmagenta: { +				dna.rw = right; +				rwsp(1, right); +				showrw(); +			} +			break; +			case red: +			case white: +			case lightcyan: +			case yellow: { +				stopwalking(); +				showrw(); +			} +			break; +			} +		} +	}  } -void posxy() -{ -    varying_string<3> xs,ys; - - setfillstyle(1,0); setcolor(10); - do { -  check(); -  if (mpress==1)  -  { -   str(mx,xs); str(my,ys); -   off(); bar(400,160,500,168); -   outtextxy(400,168,xs); outtextxy(440,168,string(": ")+ys); on(); -  } - } while (!(my==0)); - bar(400,161,640,168); -} +void inkey() { +	char r; -void fxtoggle() -{ -    byte page_; -      const bytefield soundled =  - {52, 175, 55, 177}; - - soundfx=! soundfx; - if (soundfx)  - { -  if (! fxhidden)  -  {     /* ...but *not* when the screen's dark. */ -   sound(1770); delay(77); nosound; -  } -  setfillstyle(1,cyan); - } else -  setfillstyle(1,black); - setactivepage(3); bar(419,175,438,177); - setactivepage(1-cp); - for( page_=0; page_ <= 1; page_ ++) getset[page_].remember(soundled); -} - -void objectlist() -{ -    char fv; - - dna.carrying=0; - if (thinkthing && ! dna.obj[thinks])  -  thinkabout(money,a_thing); /* you always have money */ - for( fv='\1'; fv <= numobjs; fv ++) -  if (dna.obj[fv])  -  { -   dna.carrying += 1; objlist[dna.carrying]=fv; -  } -} -void verte() -{ -    byte what; - - if (! dna.user_moves_avvy)  return; - { -  triptype& with = tr[1];  /* that's the only one we're interested in here */ +	if (demo)  return; /* Demo handles this itself. */ +	if (mousetext == "") { +		/* read keyboard */ +		readkeye(); +		if ((inchar == ' ') && ((shiftstate & 8) > 0)) { +			inchar = '\0'; +			extd = '#'; /* alt-spacebar = alt-H */ +		} +	} else { +		if (mousetext[1] == '`')  mousetext[1] = '\15'; /* Backquote = return in a macro */ +		inchar = mousetext[1]; +		mousetext = copy(mousetext, 2, 255); +	} +} -  if (mx<(cardinal)with.x)  what=1; else -   if (mx>(unsigned char)(with.x+with.a.xl))  what=2; else -    what=0;  /* On top */ - -  if (my<(cardinal)with.y)  what += 3; else -   if (my>(unsigned char)(with.y+with.a.yl))  what += 6; +void posxy() { +	varying_string<3> xs, ys; + +	setfillstyle(1, 0); +	setcolor(10); +	do { +		check(); +		if (mpress == 1) { +			str(mx, xs); +			str(my, ys); +			off(); +			bar(400, 160, 500, 168); +			outtextxy(400, 168, xs); +			outtextxy(440, 168, string(": ") + ys); +			on(); +		} +	} while (!(my == 0)); +	bar(400, 161, 640, 168); +} -  switch (what) { -   case 0: stopwalking(); break; /* Clicked on Avvy- no movement */ -   case 1: rwsp(1,left); break; -   case 2: rwsp(1,right); break; -   case 3: rwsp(1,up); break; -   case 4: rwsp(1,ul); break; -   case 5: rwsp(1,ur); break; -   case 6: rwsp(1,down); break; -   case 7: rwsp(1,dl); break; -   case 8: rwsp(1,dr); break; -  }    /* no other values are possible... */ +void fxtoggle() { +	byte page_; +	const bytefield soundled = +	{52, 175, 55, 177}; + +	soundfx = ! soundfx; +	if (soundfx) { +		if (! fxhidden) { +			/* ...but *not* when the screen's dark. */ +			sound(1770); +			delay(77); +			nosound; +		} +		setfillstyle(1, cyan); +	} else +		setfillstyle(1, black); +	setactivepage(3); +	bar(419, 175, 438, 177); +	setactivepage(1 - cp); +	for (page_ = 0; page_ <= 1; page_ ++) getset[page_].remember(soundled); +} -  showrw(); +void objectlist() { +	char fv; + +	dna.carrying = 0; +	if (thinkthing && ! dna.obj[thinks]) +		thinkabout(money, a_thing); /* you always have money */ +	for (fv = '\1'; fv <= numobjs; fv ++) +		if (dna.obj[fv]) { +			dna.carrying += 1; +			objlist[dna.carrying] = fv; +		} +} - } +void verte() { +	byte what; + +	if (! dna.user_moves_avvy)  return; +	{ +		triptype &with = tr[1];  /* that's the only one we're interested in here */ + + +		if (mx < (cardinal)with.x)  what = 1; +		else if (mx > (unsigned char)(with.x + with.a.xl))  what = 2; +		else +			what = 0; /* On top */ + +		if (my < (cardinal)with.y)  what += 3; +		else if (my > (unsigned char)(with.y + with.a.yl))  what += 6; + +		switch (what) { +		case 0: +			stopwalking(); +			break; /* Clicked on Avvy- no movement */ +		case 1: +			rwsp(1, left); +			break; +		case 2: +			rwsp(1, right); +			break; +		case 3: +			rwsp(1, up); +			break; +		case 4: +			rwsp(1, ul); +			break; +		case 5: +			rwsp(1, ur); +			break; +		case 6: +			rwsp(1, down); +			break; +		case 7: +			rwsp(1, dl); +			break; +		case 8: +			rwsp(1, dr); +			break; +		}    /* no other values are possible... */ + +		showrw(); + +	}  } -void checkclick() -{ -    bytefield b; - - check(); ontoolbar=slow_computer && ((my>=169) || (my<=10)); - - if (mrelease>0)  after_the_scroll=false; - switch (my) { -  case RANGE_11(0,10): newpointer(1); -  break;                /* up arrow */ -  case RANGE_11(159,169): newpointer(8); -  break;                   /* I-beam */ -  case 170 ... 200: newpointer(2); break; /* screwdriver */ -  default: -  { -   if (! ddmnow)       /* Dropdown can handle its own pointers. */ -   { -    if (((keystatus & 1)==1) && (my>=11) && (my<=158))  -    { -     newpointer(7); /* Mark's crosshairs */ -     verte(); -     /* Normally, if you click on the picture, you're guiding Avvy around. */ -    } else -     newpointer(4); /* fletch */ -   } -  } - } - - if (mpress>0)  - { -  switch (mpy) { -     case RANGE_11(0,10): if (dropsok)  topcheck(); -     break; -   case 11 ... 158: if (! dropsok)  -             mousetext=string('\15')+mousetext; -             break;                    /* But otherwise, it's +void checkclick() { +	bytefield b; + +	check(); +	ontoolbar = slow_computer && ((my >= 169) || (my <= 10)); + +	if (mrelease > 0)  after_the_scroll = false; +	switch (my) { +	case RANGE_11(0, 10): +		newpointer(1); +		break;                /* up arrow */ +	case RANGE_11(159, 169): +		newpointer(8); +		break;                   /* I-beam */ +	case 170 ... 200: +		newpointer(2); +		break; /* screwdriver */ +	default: { +		if (! ddmnow) {     /* Dropdown can handle its own pointers. */ +			if (((keystatus & 1) == 1) && (my >= 11) && (my <= 158)) { +				newpointer(7); /* Mark's crosshairs */ +				verte(); +				/* Normally, if you click on the picture, you're guiding Avvy around. */ +			} else +				newpointer(4); /* fletch */ +		} +	} +	} + +	if (mpress > 0) { +		switch (mpy) { +		case RANGE_11(0, 10): +			if (dropsok)  topcheck(); +			break; +		case 11 ... 158: +			if (! dropsok) +				mousetext = string('\15') + mousetext; +			break;                    /* But otherwise, it's                                         equivalent to pressing Enter. */ -  case RANGE_11(159,169): { /* Click on command line */ -             cursor_off(); curpos=(mx-16) / 8; -             if (curpos>length(current)+1)  curpos=length(current)+1; -             if (curpos<1)  curpos=1; -             cursor_on(); -            } -            break; -  case 170 ... 200: switch (mpx) { /* bottom check */ -              case 0 ... 207: mouseway(); break; -              case 208 ... 260: { /* Examine the thing */ -                         do { check(); } while (!(mrelease>0)); -                         if (thinkthing)  -                         { -                          thing=thinks; thing += 49; -                          person=pardon; -                         } else -                         { -                          person=thinks; -                          thing=pardon; -                         } -                         callverb(vb_exam); -                        } -                        break; -              case 261 ... 319: { -                         do { checkclick(); } while (!(mrelease>0)); -                         callverb(vb_score); -                        } -                        break; -              case 320 ... 357: { tr[1].xs=walk; newspeed(); } break; -              case 358 ... 395: { tr[1].xs=run;  newspeed(); } break; -              case 396 ... 483: fxtoggle(); break; /* "sound" */ -/*              484..534: begin { clock } -                         off; if getpixel(mx,my)=14 then mousetext:='#'+mousetext; on; -                        end;*/ -              case 535 ... 640: mousetext=string('\15')+mousetext; break; -             } -             break; -  } - } - -/* if mrelease>0 then - begin -  if (cw<>177) and (mry>10) then -   begin to_do:=(((mrx-20) div 100)*20)+(mry div 10); closewin; end; - end;*/ +		case RANGE_11(159, 169): { /* Click on command line */ +			cursor_off(); +			curpos = (mx - 16) / 8; +			if (curpos > length(current) + 1)  curpos = length(current) + 1; +			if (curpos < 1)  curpos = 1; +			cursor_on(); +		} +		break; +		case 170 ... 200: +			switch (mpx) { /* bottom check */ +			case 0 ... 207: +				mouseway(); +				break; +			case 208 ... 260: { /* Examine the thing */ +				do { +					check(); +				} while (!(mrelease > 0)); +				if (thinkthing) { +					thing = thinks; +					thing += 49; +					person = pardon; +				} else { +					person = thinks; +					thing = pardon; +				} +				callverb(vb_exam); +			} +			break; +			case 261 ... 319: { +				do { +					checkclick(); +				} while (!(mrelease > 0)); +				callverb(vb_score); +			} +			break; +			case 320 ... 357: { +				tr[1].xs = walk; +				newspeed(); +			} +			break; +			case 358 ... 395: { +				tr[1].xs = run; +				newspeed(); +			} +			break; +			case 396 ... 483: +				fxtoggle(); +				break; /* "sound" */ +				/*              484..534: begin { clock } +				                         off; if getpixel(mx,my)=14 then mousetext:='#'+mousetext; on; +				                        end;*/ +			case 535 ... 640: +				mousetext = string('\15') + mousetext; +				break; +			} +			break; +		} +	} + +	/* if mrelease>0 then +	 begin +	  if (cw<>177) and (mry>10) then +	   begin to_do:=(((mrx-20) div 100)*20)+(mry div 10); closewin; end; +	 end;*/  } -void mouse_init() -{ - r.ax=0; - intr(0x33,r); /* Returns- no. keys in bx and whether present in ax. */ - wait(); +void mouse_init() { +	r.ax = 0; +	intr(0x33, r); /* Returns- no. keys in bx and whether present in ax. */ +	wait();  } -void mousepage(word page_) -{ -    boolean onstate,wason; - - if (visible!=m_virtual)  - { -  onstate=oncandopageswap; -  oncandopageswap=false; -  wason=visible==m_yes; -  if (wason)  off(); -  { -                  void& with = r;   ax=29; bx=page_; } intr(0x33,r); -  if (wason)  on(); -  oncandopageswap=onstate; - } +void mousepage(word page_) { +	boolean onstate, wason; + +	if (visible != m_virtual) { +		onstate = oncandopageswap; +		oncandopageswap = false; +		wason = visible == m_yes; +		if (wason)  off(); +		{ +			void &with = r; +			ax = 29; +			bx = page_; +		} +		intr(0x33, r); +		if (wason)  on(); +		oncandopageswap = onstate; +	}  } -void errorled() -{ -    byte fv; - - state(0); - for( fv=0; fv <= 1; fv ++) - { -  setactivepage(fv); -  off(); setfillstyle(1,red); bar(419,184,438,186); on(); - } - for( fv=177; fv >= 1; fv --) - { -  sound(177+(fv*177177) / 999); -  delay(1); nosound; - } - for( fv=0; fv <= 1; fv ++) - { -  setactivepage(fv); -  off(); setfillstyle(1,black); bar(419,184,438,186); on(); - } - state(defaultled); setactivepage(1-cp); +void errorled() { +	byte fv; + +	state(0); +	for (fv = 0; fv <= 1; fv ++) { +		setactivepage(fv); +		off(); +		setfillstyle(1, red); +		bar(419, 184, 438, 186); +		on(); +	} +	for (fv = 177; fv >= 1; fv --) { +		sound(177 + (fv * 177177) / 999); +		delay(1); +		nosound; +	} +	for (fv = 0; fv <= 1; fv ++) { +		setactivepage(fv); +		off(); +		setfillstyle(1, black); +		bar(419, 184, 438, 186); +		on(); +	} +	state(defaultled); +	setactivepage(1 - cp);  } -shortint fades(shortint x) -{ -    byte r,g,b; - - shortint fades_result; - r=x / 16; x=x % 16; - g=x / 4;  b=x % 4; - if (r>0)  r -= 1; if (g>0)  g -= 1; if (b>0)  b -= 1; - fades_result=(16*r+4*g+b); -/* fades:=x-1;*/ - return fades_result; +shortint fades(shortint x) { +	byte r, g, b; + +	shortint fades_result; +	r = x / 16; +	x = x % 16; +	g = x / 4; +	b = x % 4; +	if (r > 0)  r -= 1; +	if (g > 0)  g -= 1; +	if (b > 0)  b -= 1; +	fades_result = (16 * r + 4 * g + b); +	/* fades:=x-1;*/ +	return fades_result;  }  void dusk(); -static void fadeout(byte n) -{ -    byte fv; +static void fadeout(byte n) { +	byte fv; - getpalette(fxpal[n]); - for( fv=1; fv <= fxpal[n].size-1; fv ++) -  fxpal[n].colors[fv]=fades(fxpal[n].colors[fv]); - setallpalette(fxpal[n]); - /*delay(50);*/ slowdown(); +	getpalette(fxpal[n]); +	for (fv = 1; fv <= fxpal[n].size - 1; fv ++) +		fxpal[n].colors[fv] = fades(fxpal[n].colors[fv]); +	setallpalette(fxpal[n]); +	/*delay(50);*/ slowdown();  } -void dusk() -{ -    byte fv; +void dusk() { +	byte fv; - setbkcolor(0); - if (fxhidden)  return; fxhidden=true; - getpalette(fxpal[0]); for( fv=1; fv <= 3; fv ++) fadeout(fv); +	setbkcolor(0); +	if (fxhidden)  return; +	fxhidden = true; +	getpalette(fxpal[0]); +	for (fv = 1; fv <= 3; fv ++) fadeout(fv);  }  void dawn(); -static void fadein(byte n) -{ - setallpalette(fxpal[n]); - /*delay(50);*/ slowdown(); +static void fadein(byte n) { +	setallpalette(fxpal[n]); +	/*delay(50);*/ slowdown();  } -void dawn() -{ -    byte fv; +void dawn() { +	byte fv; - if ((holdthedawn) || (! fxhidden))  return; fxhidden=false; - for( fv=3; fv >= 0; fv --) fadein(fv); - { dnatype& with = dna;  -  if ((with.room==r__yours) && (with.avvy_in_bed) && (with.teetotal))  background(14);} +	if ((holdthedawn) || (! fxhidden))  return; +	fxhidden = false; +	for (fv = 3; fv >= 0; fv --) fadein(fv); +	{ +		dnatype &with = dna; +		if ((with.room == r__yours) && (with.avvy_in_bed) && (with.teetotal))  background(14); +	}  } -void showrw() -{ -    byte page_; - - { -  dnatype& with = dna;  - -  if (oldrw==with.rw)  return; -  oldrw=with.rw; off(); -  for( page_=0; page_ <= 1; page_ ++) -  { -   setactivepage(page_); putimage(0,161,rwlite[with.rw],0); -  } on(); -  setactivepage(1-cp); - } +void showrw() { +	byte page_; + +	{ +		dnatype &with = dna; + +		if (oldrw == with.rw)  return; +		oldrw = with.rw; +		off(); +		for (page_ = 0; page_ <= 1; page_ ++) { +			setactivepage(page_); +			putimage(0, 161, rwlite[with.rw], 0); +		} +		on(); +		setactivepage(1 - cp); +	}  } -void mblit(byte x1,byte y1,byte x2,byte y2, byte f,byte t) /* assembler; */ +void mblit(byte x1, byte y1, byte x2, byte y2, byte f, byte t) /* assembler; */  /* The Minstrel Blitter */  /* asm  {  ofsfr:=f*$4000+x1+y1*80; @@ -1239,215 +1395,234 @@ void mblit(byte x1,byte y1,byte x2,byte y2, byte f,byte t) /* assembler; */    pop ds; { Get it back again (or we'll be in trouble with TP!) }  */ -{; +{ +	;  } -void blitfix() -{ -    byte fv; +void blitfix() { +	byte fv; - fv=getpixel(0,0);  /* perform read & so cancel Xor effect! */ +	fv = getpixel(0, 0); /* perform read & so cancel Xor effect! */  }  void clock(); -const integer xm = 510;  +const integer xm = 510;  const integer ym = 183; -static arccoordstype ah,am;  +static arccoordstype ah, am;  static word nh; -static void calchand(word ang,word length, arccoordstype& a, byte c) -{ - if (ang>900)  { a.xend=177; return; } - setcolor(c); arc(xm,ym,449-ang,450-ang,length); getarccoords(a); +static void calchand(word ang, word length, arccoordstype &a, byte c) { +	if (ang > 900)  { +		a.xend = 177; +		return; +	} +	setcolor(c); +	arc(xm, ym, 449 - ang, 450 - ang, length); +	getarccoords(a);  } -static void hand(arccoordstype a, byte c) -{ - if (a.xend==177)  return; - setcolor(c); -           line(xm,ym,a.xend,a.yend); /* "With a do-line???!", Liz said. */ +static void hand(arccoordstype a, byte c) { +	if (a.xend == 177)  return; +	setcolor(c); +	line(xm, ym, a.xend, a.yend); /* "With a do-line???!", Liz said. */  } -static void chime() -{ -    word gd,gm,fv; - - if ((oh==17717) || (! soundfx))  return;  /* too high- must be first time around */ - fv=h % 12; if (fv==0)  fv=12; wait(); - for( gd=1; gd <= fv; gd ++) - { -  for( gm=1; gm <= 3; gm ++) -  { -   sound((gd % 3)*64+140-gm*30); delay(50-gm*12); -  } -  nosound; if (gd!=fv)  delay(100); - } +static void chime() { +	word gd, gm, fv; + +	if ((oh == 17717) || (! soundfx))  return; /* too high- must be first time around */ +	fv = h % 12; +	if (fv == 0)  fv = 12; +	wait(); +	for (gd = 1; gd <= fv; gd ++) { +		for (gm = 1; gm <= 3; gm ++) { +			sound((gd % 3) * 64 + 140 - gm * 30); +			delay(50 - gm * 12); +		} +		nosound; +		if (gd != fv)  delay(100); +	}  } -static void refresh_hands() -{ -      const bytefield clockspace = {61, 166, 66, 200}; -    byte page_; +static void refresh_hands() { +	const bytefield clockspace = {61, 166, 66, 200}; +	byte page_; - for( page_=0; page_ <= 1; page_ ++) -  getset[page_].remember(clockspace); +	for (page_ = 0; page_ <= 1; page_ ++) +		getset[page_].remember(clockspace);  } -static void plothands() -{ -/*   off;*/ - setactivepage(3); - calchand(onh,14,ah,yellow); calchand(om*6,17,am,yellow); - hand(ah,brown); hand(am,brown); - calchand(nh,14,ah,brown);   calchand(m*6,17,am,brown); - hand(ah,yellow); hand(am,yellow); - setactivepage(1-cp); +static void plothands() { +	/*   off;*/ +	setactivepage(3); +	calchand(onh, 14, ah, yellow); +	calchand(om * 6, 17, am, yellow); +	hand(ah, brown); +	hand(am, brown); +	calchand(nh, 14, ah, brown); +	calchand(m * 6, 17, am, brown); +	hand(ah, yellow); +	hand(am, yellow); +	setactivepage(1 - cp); - refresh_hands(); +	refresh_hands(); -/*   on;*/ +	/*   on;*/  } -void clock() -{     /* ...Clock. */ - gettime(h,m,s,s1); - nh=(h % 12)*30+m / 2; - if (oh!=h)  { plothands(); chime(); } - if (om!=m)  plothands(); - if ((h==0) && (oh!=0) && (oh!=17717))  -  display(string("Good morning!\r\rYes, it's just past midnight. Are you having")+ -          " an all-night Avvy session? Glad you like the game that much!"); - oh=h; onh=nh; om=m; +void clock() { +	/* ...Clock. */ +	gettime(h, m, s, s1); +	nh = (h % 12) * 30 + m / 2; +	if (oh != h)  { +		plothands(); +		chime(); +	} +	if (om != m)  plothands(); +	if ((h == 0) && (oh != 0) && (oh != 17717)) +		display(string("Good morning!\r\rYes, it's just past midnight. Are you having") + +		        " an all-night Avvy session? Glad you like the game that much!"); +	oh = h; +	onh = nh; +	om = m;  } -void flip_page() -{ - if (! ddm_o.menunow)  - { -  cp=1-cp; -  setvisualpage(cp); -  setactivepage(1-cp); -  /*mousepage(cp);*/ - } +void flip_page() { +	if (! ddm_o.menunow) { +		cp = 1 - cp; +		setvisualpage(cp); +		setactivepage(1 - cp); +		/*mousepage(cp);*/ +	}  } -void delavvy() -{ -    byte page_; - - off(); - { triptype& with = tr[1];  -  for( page_=0; page_ <= 1; page_ ++) -   mblit(with.x / 8,with.y,(with.x+with.a.xl) / 8+1,with.y+with.a.yl,3,page_);} - blitfix(); - on(); +void delavvy() { +	byte page_; + +	off(); +	{ +		triptype &with = tr[1]; +		for (page_ = 0; page_ <= 1; page_ ++) +			mblit(with.x / 8, with.y, (with.x + with.a.xl) / 8 + 1, with.y + with.a.yl, 3, page_); +	} +	blitfix(); +	on();  } -void gameover() -{ -    byte fv; integer sx,sy; - - dna.user_moves_avvy=false; - - sx=tr[1].x; - sy=tr[1].y; - { -  triptype& with = tr[1];  - -  done(); -  init(12,true);        /* 12 = Avalot falls */ -  tr[1].step=0; -  appear(sx,sy,0); - } - set_up_timer(3,procavalot_falls,reason_falling_over); -/* display(^m^m^m^m^m^m^i^i^i^i^i^i^s'Z'^v);*/ - alive=false; +void gameover() { +	byte fv; +	integer sx, sy; + +	dna.user_moves_avvy = false; + +	sx = tr[1].x; +	sy = tr[1].y; +	{ +		triptype &with = tr[1]; + +		done(); +		init(12, true);       /* 12 = Avalot falls */ +		tr[1].step = 0; +		appear(sx, sy, 0); +	} +	set_up_timer(3, procavalot_falls, reason_falling_over); +	/* display(^m^m^m^m^m^m^i^i^i^i^i^i^s'Z'^v);*/ +	alive = false;  }  /* OK. There are two kinds of redraw: Major and Minor. Minor is what happens    when you load a game, etc. Major redraws EVERYTHING. */ -void minor_redraw() -{ -    byte fv; +void minor_redraw() { +	byte fv; - dusk(); - enterroom(dna.room,0); /* Ped unknown or non-existant. */ +	dusk(); +	enterroom(dna.room, 0); /* Ped unknown or non-existant. */ - for( fv=0; fv <= 1; fv ++) - { -  cp=1-cp; -  getback(); - } +	for (fv = 0; fv <= 1; fv ++) { +		cp = 1 - cp; +		getback(); +	} - { -  dnatype& with = dna;  +	{ +		dnatype &with = dna; -  lastscore="TJA";  /* impossible digits */ -  showscore(); - } +		lastscore = "TJA"; /* impossible digits */ +		showscore(); +	} - dawn(); +	dawn();  } -void major_redraw() -{ -    byte fv; - - dusk(); - setactivepage(0); cleardevice(); - - toolbar(); - copy03(); - - enterroom(dna.room,0); /* 0 = ped unknown or non-existant. */ - for( fv=0; fv <= 1; fv ++) { cp=1-cp; getback(); } - - om=177; - clock(); - - thinkabout(thinks,thinkthing); standard_bar(); - soundfx=! soundfx; fxtoggle(); - for( fv=0; fv <= 1; fv ++) { cp=1-cp; getback(); } - plottext(); - ledstatus=177; state(2); - - { -  dnatype& with = dna;  - -  lastscore="TJA";  /* impossible digits */ -  showscore(); - } - - dawn(); +void major_redraw() { +	byte fv; + +	dusk(); +	setactivepage(0); +	cleardevice(); + +	toolbar(); +	copy03(); + +	enterroom(dna.room, 0); /* 0 = ped unknown or non-existant. */ +	for (fv = 0; fv <= 1; fv ++) { +		cp = 1 - cp; +		getback(); +	} + +	om = 177; +	clock(); + +	thinkabout(thinks, thinkthing); +	standard_bar(); +	soundfx = ! soundfx; +	fxtoggle(); +	for (fv = 0; fv <= 1; fv ++) { +		cp = 1 - cp; +		getback(); +	} +	plottext(); +	ledstatus = 177; +	state(2); + +	{ +		dnatype &with = dna; + +		lastscore = "TJA"; /* impossible digits */ +		showscore(); +	} + +	dawn();  }  word bearing(byte whichped) -  /* Returns the bearing from ped Whichped to Avvy, in degrees. */ +/* Returns the bearing from ped Whichped to Avvy, in degrees. */  { -      const real rad2deg = 180/pi; - - word bearing_result; - { pedtype& with = peds[whichped];  -  if (tr[1].x==with.x)  -   bearing_result=0;  /* This would cause a division by zero if we let it through. */ -  else -  /* -   bearing:=trunc(((arctan((tr[1].y-y)/(tr[1].x-x)))*rad2deg)+90) mod 360*/ -  { -   if (tr[1].x<with.x)  -    bearing_result=trunc(atan((real)((tr[1].y-with.y))/(tr[1].x-with.x))*rad2deg)+90; -   else -    bearing_result=trunc(atan((real)((tr[1].y-with.y))/(tr[1].x-with.x))*rad2deg)+270; -  }} - return bearing_result; +	const real rad2deg = 180 / pi; + +	word bearing_result; +	{ +		pedtype &with = peds[whichped]; +		if (tr[1].x == with.x) +			bearing_result = 0; /* This would cause a division by zero if we let it through. */ +		else +			/* +			 bearing:=trunc(((arctan((tr[1].y-y)/(tr[1].x-x)))*rad2deg)+90) mod 360*/ +		{ +			if (tr[1].x < with.x) +				bearing_result = trunc(atan((real)((tr[1].y - with.y)) / (tr[1].x - with.x)) * rad2deg) + 90; +			else +				bearing_result = trunc(atan((real)((tr[1].y - with.y)) / (tr[1].x - with.x)) * rad2deg) + 270; +		} +	} +	return bearing_result;  }  void flesh_colours()     /* assembler; @@ -1475,43 +1650,51 @@ asm    db 43,22,22;   @TheEnd: */ -{; +{ +	;  }  void sprite_run() - /* A sprite run is performed before displaying a scroll, if not all the -   sprites are still. It performs two fast cycles, only using a few of -   the links usually used, and without any extra animation. This should -   make the sprites the same on both pages. */ +/* A sprite run is performed before displaying a scroll, if not all the +  sprites are still. It performs two fast cycles, only using a few of +  the links usually used, and without any extra animation. This should +  make the sprites the same on both pages. */  { -    byte fv; +	byte fv; - doing_sprite_run=true; +	doing_sprite_run = true; - for( fv=0; fv <= 1; fv ++) - { -  get_back_loretta(); -  trippancy_link(); +	for (fv = 0; fv <= 1; fv ++) { +		get_back_loretta(); +		trippancy_link(); -  flip_page(); - } +		flip_page(); +	} - doing_sprite_run=false; +	doing_sprite_run = false;  } -void fix_flashers() -{ ledstatus=177; oldrw=177; state(2); showrw(); } +void fix_flashers() { +	ledstatus = 177; +	oldrw = 177; +	state(2); +	showrw(); +}  class unit_lucerna_initialize { -  public: unit_lucerna_initialize(); +public: +	unit_lucerna_initialize();  };  static unit_lucerna_initialize lucerna_constructor;  unit_lucerna_initialize::unit_lucerna_initialize() { - fxhidden=false; oh=17717; om=17717; - if (atbios)  atkey="f1"; else atkey="alt-"; +	fxhidden = false; +	oh = 17717; +	om = 17717; +	if (atbios)  atkey = "f1"; +	else atkey = "alt-";  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/lucerna.h b/engines/avalanche/lucerna.h index 5bf0782a8e..80f57d468b 100644 --- a/engines/avalanche/lucerna.h +++ b/engines/avalanche/lucerna.h @@ -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 @@ -33,74 +33,74 @@ namespace Avalanche {  #include "gyro.h" - void callverb(char n); +void callverb(char n); - void draw_also_lines(); +void draw_also_lines(); - void mouse_init(); +void mouse_init(); - void mousepage(word page_); +void mousepage(word page_); - void load(byte n); +void load(byte n); - void exitroom(byte x); +void exitroom(byte x); - void enterroom(byte x,byte ped); +void enterroom(byte x, byte ped); - void thinkabout(char z, boolean th);      /* Hey!!! Get it and put it!!! */ +void thinkabout(char z, boolean th);      /* Hey!!! Get it and put it!!! */ - void load_digits();    /* Load the scoring digits & rwlites */ +void load_digits();    /* Load the scoring digits & rwlites */ - void toolbar(); +void toolbar(); - void showscore(); +void showscore(); - void points(byte num);      /* Add on no. of points */ +void points(byte num);      /* Add on no. of points */ - void mouseway(); +void mouseway(); - void inkey(); +void inkey(); - void posxy(); +void posxy(); - void fxtoggle(); +void fxtoggle(); - void objectlist(); +void objectlist(); - void checkclick(); +void checkclick(); - void errorled(); +void errorled(); - void dusk(); +void dusk(); - void dawn(); +void dawn(); - void showrw(); +void showrw(); - void mblit(byte x1,byte y1,byte x2,byte y2, byte f,byte t); /* The Minstrel Blitter */ +void mblit(byte x1, byte y1, byte x2, byte y2, byte f, byte t); /* The Minstrel Blitter */ - void blitfix(); +void blitfix(); - void clock(); +void clock(); - void flip_page(); +void flip_page(); - void delavvy(); +void delavvy(); - void gameover(); +void gameover(); - void minor_redraw(); +void minor_redraw(); - void major_redraw(); +void major_redraw(); - word bearing(byte whichped); +word bearing(byte whichped); - void flesh_colours(); +void flesh_colours(); - void sprite_run(); +void sprite_run(); - void fix_flashers(); +void fix_flashers(); - } // End of namespace Avalanche. +} // End of namespace Avalanche.  #endif
\ No newline at end of file diff --git a/engines/avalanche/magic2.cpp b/engines/avalanche/magic2.cpp index 130e188092..0845a05271 100644 --- a/engines/avalanche/magic2.cpp +++ b/engines/avalanche/magic2.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 @@ -32,33 +32,38 @@ namespace Avalanche {  const longint pagetop = 81920;  const word nextcode = 17717; -integer gd,gm; -file<word> magic,out; -word next,gg; +integer gd, gm; +file<word> magic, out; +word next, gg; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - assign(magic,"v:magicirc.avd"); reset(magic); - assign(out,"v:magic2.avd"); rewrite(out); - move(mem[0xa000*0],mem[0xa000*pagetop],16000); - while (! eof(magic))  - {; -  magic >> next; -  if (next!=nextcode)  -   mem[0xa000*next]=255; -  else -  {; -   for( gg=0; gg <= 16000; gg ++) -    if (mem[0xa000*gg]!=mem[0xa000*gg+pagetop])  -     out << gg; -   out << nextcode; -   move(mem[0xa000*0],mem[0xa000*pagetop],16000); -  } - } - close(magic); close(out); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	assign(magic, "v:magicirc.avd"); +	reset(magic); +	assign(out, "v:magic2.avd"); +	rewrite(out); +	move(mem[0xa000 * 0], mem[0xa000 * pagetop], 16000); +	while (! eof(magic)) { +		; +		magic >> next; +		if (next != nextcode) +			mem[0xa000 * next] = 255; +		else { +			; +			for (gg = 0; gg <= 16000; gg ++) +				if (mem[0xa000 * gg] != mem[0xa000 * gg + pagetop]) +					out << gg; +			out << nextcode; +			move(mem[0xa000 * 0], mem[0xa000 * pagetop], 16000); +		} +	} +	close(magic); +	close(out); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/magidraw.cpp b/engines/avalanche/magidraw.cpp index 241f69265b..0f280c29e0 100644 --- a/engines/avalanche/magidraw.cpp +++ b/engines/avalanche/magidraw.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 @@ -32,30 +32,33 @@ namespace Avalanche {  const word nextcode = 17717; -integer gd,gm; +integer gd, gm;  untyped_file magic; /* of word;*/  word next; -array<1,16401,word> buffer; - -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - assign(magic,"v:magic2.avd"); reset(magic,1); - blockread(magic,buffer,sizeof(buffer)); - close(magic); -/* while not eof(magic) do*/ - for( gd=1; gd <= 16401; gd ++) - {; -/*  read(magic,next); -  if next<>nextcode then*/ -  if (buffer[gd]!=nextcode)  -   mem[0xa000*buffer[gd]]=255; -  else -   delay(1); - } -/* close(magic);*/ -return EXIT_SUCCESS; +array<1, 16401, word> buffer; + +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	assign(magic, "v:magic2.avd"); +	reset(magic, 1); +	blockread(magic, buffer, sizeof(buffer)); +	close(magic); +	/* while not eof(magic) do*/ +	for (gd = 1; gd <= 16401; gd ++) { +		; +		/*  read(magic,next); +		  if next<>nextcode then*/ +		if (buffer[gd] != nextcode) +			mem[0xa000 * buffer[gd]] = 255; +		else +			delay(1); +	} +	/* close(magic);*/ +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/magishuf.cpp b/engines/avalanche/magishuf.cpp index 6706ceb56f..2ef6e37fed 100644 --- a/engines/avalanche/magishuf.cpp +++ b/engines/avalanche/magishuf.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 @@ -32,8 +32,8 @@ namespace Avalanche {  const word nextcode = 17717; -typedef array<1,8000,word> big; -typedef array<1,16401,word> circle; +typedef array<1, 8000, word> big; +typedef array<1, 16401, word> circle;  big b;  file<big> f; @@ -42,46 +42,57 @@ word gd;  circle c;  file<circle> fc; -void melt(byte c) -{; - for( gd=1; gd <= 8000; gd ++) - {; -  mem[0xa000*b[gd]]=c; -  if ((gd % 17)==0)  delay(1); - } +void melt(byte c) { +	; +	for (gd = 1; gd <= 8000; gd ++) { +		; +		mem[0xa000 * b[gd]] = c; +		if ((gd % 17) == 0)  delay(1); +	}  } -void magicirc(byte cc) -{; - for( gd=1; gd <= 16401; gd ++) - {; -  if (c[gd]!=nextcode)  -  {; -   if (odd(c[gd]))  mem[0xa000*c[gd] / 2]=cc; -  } else -   delay(1); - } +void magicirc(byte cc) { +	; +	for (gd = 1; gd <= 16401; gd ++) { +		; +		if (c[gd] != nextcode) { +			; +			if (odd(c[gd]))  mem[0xa000 * c[gd] / 2] = cc; +		} else +			delay(1); +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - r.ax=13; intr(0x10,r); - assign(f,"d:shuffle.avd"); reset(f); f >> b; close(f); - assign(fc,"v:magic2.avd"); reset(fc); fc >> c; close(fc); -/* repeat -  melt(170); magicirc(85); -  magicirc(170); melt(85); -  magicirc(170); magicirc(85); -  melt(170); melt(85); - until keypressed;*/ - do { -  melt(255); magicirc(0); -  magicirc(255); melt(0); -  magicirc(255); magicirc(0); -  melt(255); melt(0); - } while (!keypressed()); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	r.ax = 13; +	intr(0x10, r); +	assign(f, "d:shuffle.avd"); +	reset(f); +	f >> b; +	close(f); +	assign(fc, "v:magic2.avd"); +	reset(fc); +	fc >> c; +	close(fc); +	/* repeat +	  melt(170); magicirc(85); +	  magicirc(170); melt(85); +	  magicirc(170); magicirc(85); +	  melt(170); melt(85); +	 until keypressed;*/ +	do { +		melt(255); +		magicirc(0); +		magicirc(255); +		melt(0); +		magicirc(255); +		magicirc(0); +		melt(255); +		melt(0); +	} while (!keypressed()); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/make!.cpp b/engines/avalanche/make!.cpp index 353b461387..a4cf27801f 100644 --- a/engines/avalanche/make!.cpp +++ b/engines/avalanche/make!.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 @@ -31,61 +31,72 @@  namespace Avalanche {  /*$S-*/ -integer gd,gm; +integer gd, gm;  untyped_file f;  text t;  string x; -boolean subpix(integer x,integer y) -{boolean subpix_result; -; - subpix_result=getpixel(x,y)==15; -return subpix_result; +boolean subpix(integer x, integer y) { +	boolean subpix_result; +	; +	subpix_result = getpixel(x, y) == 15; +	return subpix_result;  } -byte pixel(integer x,integer y) -{byte pixel_result; -; - pixel_result=(byte)( -   subpix(x*4,y*2) || -   subpix(x*4+1,y*2) || -   subpix(x*4+2,y*2) || -   subpix(x*4+3,y*2) || -   subpix(x*4,y*2+1) || -   subpix(x*4+1,y*2+1) || -   subpix(x*4+2,y*2+1) || -   subpix(x*4+3,y*2+1) -  )*15; -return pixel_result; +byte pixel(integer x, integer y) { +	byte pixel_result; +	; +	pixel_result = (byte)( +	                   subpix(x * 4, y * 2) || +	                   subpix(x * 4 + 1, y * 2) || +	                   subpix(x * 4 + 2, y * 2) || +	                   subpix(x * 4 + 3, y * 2) || +	                   subpix(x * 4, y * 2 + 1) || +	                   subpix(x * 4 + 1, y * 2 + 1) || +	                   subpix(x * 4 + 2, y * 2 + 1) || +	                   subpix(x * 4 + 3, y * 2 + 1) +	               ) * 15; +	return pixel_result;  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=1; initgraph(gd,gm,"o:"); - assign(f,"v:logo.avd"); reset(f,1); - for( gd=0; gd <= 180; gd ++) -  blockread(f,mem[0xa000*(gd*80)],53); - close(f); - for( gd=1; gd <= 106; gd ++) -  for( gm=0; gm <= 145; gm ++) -   putpixel(gd,gm+181,pixel(gd,gm)); - assign(t,"d:avalot.txt"); - rewrite(t); - for( gm=1; gm <= 36; gm ++) - {; -  x=""; -  for( gd=1; gd <= 106; gd ++) -   switch (getpixel(gd,gm*2+181)*2+getpixel(gd,gm*2+182)) { -     case 0: x=x+' '; break; -    case 15: x=x+'Ü'; break; -    case 30: x=x+'ß'; break; -    case 45: x=x+'Û'; break; -   } -  t << x << NL; - } - close(t); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 1; +	initgraph(gd, gm, "o:"); +	assign(f, "v:logo.avd"); +	reset(f, 1); +	for (gd = 0; gd <= 180; gd ++) +		blockread(f, mem[0xa000 * (gd * 80)], 53); +	close(f); +	for (gd = 1; gd <= 106; gd ++) +		for (gm = 0; gm <= 145; gm ++) +			putpixel(gd, gm + 181, pixel(gd, gm)); +	assign(t, "d:avalot.txt"); +	rewrite(t); +	for (gm = 1; gm <= 36; gm ++) { +		; +		x = ""; +		for (gd = 1; gd <= 106; gd ++) +			switch (getpixel(gd, gm * 2 + 181) * 2 + getpixel(gd, gm * 2 + 182)) { +			case 0: +				x = x + ' '; +				break; +			case 15: +				x = x + 'Ü'; +				break; +			case 30: +				x = x + 'ß'; +				break; +			case 45: +				x = x + 'Û'; +				break; +			} +		t << x << NL; +	} +	close(t); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/makesez.cpp b/engines/avalanche/makesez.cpp index 3c46e18e46..1307f17515 100644 --- a/engines/avalanche/makesez.cpp +++ b/engines/avalanche/makesez.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 @@ -28,15 +28,15 @@  namespace Avalanche {  struct sezheader { -             array<1,2,char> initials;     /* should be "TT" */ -             word gamecode; -             word revision; /* as 3- or 4-digit code (eg v1.00 = 100) */ -             longint chains; /* number of scroll chains */ -             longint size; /* total size of all scroll chains */ +	array<1, 2, char> initials;   /* should be "TT" */ +	word gamecode; +	word revision; /* as 3- or 4-digit code (eg v1.00 = 100) */ +	longint chains; /* number of scroll chains */ +	longint size; /* total size of all scroll chains */  }; -const string crlf = string('\15')+'\12'; -const string tabs = string('\11')+'\11'+'\11'+'\11'+'\11'+'\11'+'\11'; +const string crlf = string('\15') + '\12'; +const string tabs = string('\11') + '\11' + '\11' + '\11' + '\11' + '\11' + '\11';  const char eof_ = '\32';  untyped_file sez; @@ -44,31 +44,32 @@ sezheader header;  string x;  char check; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - fillchar(x,sizeof(x),'\261'); - x=string("This is a Sez file for an Avvy game, and its contents are subject")+crlf+ -    "to copyright. Have fun with the game!"+crlf+crlf+tabs+"tt"+crlf+crlf+ -    "[Lord Avalot D'Argent]"+crlf+crlf+eof_+ -    crlf+crlf+"Thomas was here!"; - {; -  header.initials="TT"; -  header.gamecode=2; /* code for Avalot */ -  header.revision=100; /* version 1.00 */ -  header.chains=0; /* no chains */ -  header.size=0; /* empty! */ - } - check='\261'; - assign(sez,"avalot.sez"); - rewrite(sez,1); - blockwrite(sez,x[1],255); - blockwrite(sez,header,sizeof(header)); - blockwrite(sez,check,1); - x=string('\0')+'\0'+'\0'+"Thomas was here, too!"+crlf+crlf+"Good luck..."; - blockwrite(sez,x[1],39); /* footer */ - close(sez); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	fillchar(x, sizeof(x), '\261'); +	x = string("This is a Sez file for an Avvy game, and its contents are subject") + crlf + +	    "to copyright. Have fun with the game!" + crlf + crlf + tabs + "tt" + crlf + crlf + +	    "[Lord Avalot D'Argent]" + crlf + crlf + eof_ + +	    crlf + crlf + "Thomas was here!"; +	{ +		; +		header.initials = "TT"; +		header.gamecode = 2; /* code for Avalot */ +		header.revision = 100; /* version 1.00 */ +		header.chains = 0; /* no chains */ +		header.size = 0; /* empty! */ +	} +	check = '\261'; +	assign(sez, "avalot.sez"); +	rewrite(sez, 1); +	blockwrite(sez, x[1], 255); +	blockwrite(sez, header, sizeof(header)); +	blockwrite(sez, check, 1); +	x = string('\0') + '\0' + '\0' + "Thomas was here, too!" + crlf + crlf + "Good luck..."; +	blockwrite(sez, x[1], 39); /* footer */ +	close(sez); +	return EXIT_SUCCESS;  } diff --git a/engines/avalanche/makevmou.cpp b/engines/avalanche/makevmou.cpp index 9f509f16c6..3b71276a61 100644 --- a/engines/avalanche/makevmou.cpp +++ b/engines/avalanche/makevmou.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 @@ -33,265 +33,292 @@  namespace Avalanche {  struct mp { /* mouse-pointer */ -      matrix<0,1,0,15,word> mask; -      integer horzhotspot,verthotspot; +	matrix<0, 1, 0, 15, word> mask; +	integer horzhotspot, verthotspot;  };  struct vmctype { /* Virtual Mouse Cursor */ -           pointer andpic,xorpic; -           array<0,1,pointer> backpic; -           array<0,1,pointtype> wherewas; -           byte picnumber; -           shortint ofsx,ofsy; +	pointer andpic, xorpic; +	array<0, 1, pointer> backpic; +	array<0, 1, pointtype> wherewas; +	byte picnumber; +	shortint ofsx, ofsy;  }; -const array<1,9,arrowtype> mps =  -{{{     /* 1 - up-arrow */ -    ((65151,64575,64575,63519,63519,61455,61455,57351,57351,49155,49155,64575,64575,64575,64575,64575), -     (0,384,384,960,960,2016,2016,4080,4080,8184,384,384,384,384,384,0)), -               8, -               0}, - -{       /* 2 - screwdriver */ -    ((8191,4095,2047,34815,50175,61951,63743,64543,65039,65031,65027,65281,65408,65472,65505,65523), -     (0,24576,28672,12288,2048,1024,512,256,224,176,216,96,38,10,12,0)), -               0, -               0}, - -{       /* 3 - right-arrow */ -    ((65535,65535,64639,64543,7,1,0,1,7,64543,64639,65535,65535,65535,65535,65535), -     (0,0,0,384,480,32760,32766,32760,480,384,0,0,0,0,0,0)), -               15, -               6}, - -{       /* 4 - fletch */ -    ((255,511,1023,2047,1023,4607,14591,31871,65031,65283,65281,65280,65280,65409,65473,65511), -     (0,10240,20480,24576,26624,17408,512,256,128,88,32,86,72,20,16,0)), -               0, -               0}, - -{       /* 5 - hourglass */ -    ((0,0,0,34785,50115,61455,61455,63519,63519,61839,61455,49155,32769,0,0,0), -     (0,32766,16386,12300,2064,1440,1440,576,576,1056,1440,3024,14316,16386,32766,0)), -               8, -               7}, - -{       /* 6 - TTHand */ -    ((62463,57855,57855,57855,57471,49167,32769,0,0,0,0,32768,49152,57344,61441,61443), -     (3072,4608,4608,4608,4992,12912,21070,36937,36873,36865,32769,16385,8193,4097,2050,4092)), -               4, -               0}, - -{       /* 7- Mark's crosshairs */ -    ((65535,65151,65151,65151,65151,0,65151,65151,65151,65151,65535,65535,65535,65535,65535,65535), -     (0,384,384,384,384,65535,384,384,384,384,0,0,0,0,0,0)), -               8, -               5}, - -{       /* 8- I-beam. */ -    ((65535,65535,63631,63503,63503,65087,65087,65087,65087,65087,63503,63503,63631,65535,65535,65535), -     (0,0,0,864,128,128,128,128,128,128,128,864,0,0,0,0)), -               8, -               7}, - -{       /* 9- Question mark. */ -    ((511,1023,2047,31,15,8199,32647,65415,63503,61471,61503,61695,63999,63999,61695,61695), -     (65024,33792,34816,34784,40976,57224,32840,72,1936,2080,2496,2304,1536,1536,2304,3840)), -               0, -               0}}}; +const array<1, 9, arrowtype> mps = { +	{	{ +			/* 1 - up-arrow */ +			((65151, 64575, 64575, 63519, 63519, 61455, 61455, 57351, 57351, 49155, 49155, 64575, 64575, 64575, 64575, 64575), +			(0, 384, 384, 960, 960, 2016, 2016, 4080, 4080, 8184, 384, 384, 384, 384, 384, 0)), +			8, +			0 +		}, + +		{ +			/* 2 - screwdriver */ +			((8191, 4095, 2047, 34815, 50175, 61951, 63743, 64543, 65039, 65031, 65027, 65281, 65408, 65472, 65505, 65523), +			(0, 24576, 28672, 12288, 2048, 1024, 512, 256, 224, 176, 216, 96, 38, 10, 12, 0)), +			0, +			0 +		}, + +		{ +			/* 3 - right-arrow */ +			((65535, 65535, 64639, 64543, 7, 1, 0, 1, 7, 64543, 64639, 65535, 65535, 65535, 65535, 65535), +			(0, 0, 0, 384, 480, 32760, 32766, 32760, 480, 384, 0, 0, 0, 0, 0, 0)), +			15, +			6 +		}, + +		{ +			/* 4 - fletch */ +			((255, 511, 1023, 2047, 1023, 4607, 14591, 31871, 65031, 65283, 65281, 65280, 65280, 65409, 65473, 65511), +			(0, 10240, 20480, 24576, 26624, 17408, 512, 256, 128, 88, 32, 86, 72, 20, 16, 0)), +			0, +			0 +		}, + +		{ +			/* 5 - hourglass */ +			((0, 0, 0, 34785, 50115, 61455, 61455, 63519, 63519, 61839, 61455, 49155, 32769, 0, 0, 0), +			(0, 32766, 16386, 12300, 2064, 1440, 1440, 576, 576, 1056, 1440, 3024, 14316, 16386, 32766, 0)), +			8, +			7 +		}, + +		{ +			/* 6 - TTHand */ +			((62463, 57855, 57855, 57855, 57471, 49167, 32769, 0, 0, 0, 0, 32768, 49152, 57344, 61441, 61443), +			(3072, 4608, 4608, 4608, 4992, 12912, 21070, 36937, 36873, 36865, 32769, 16385, 8193, 4097, 2050, 4092)), +			4, +			0 +		}, + +		{ +			/* 7- Mark's crosshairs */ +			((65535, 65151, 65151, 65151, 65151, 0, 65151, 65151, 65151, 65151, 65535, 65535, 65535, 65535, 65535, 65535), +			(0, 384, 384, 384, 384, 65535, 384, 384, 384, 384, 0, 0, 0, 0, 0, 0)), +			8, +			5 +		}, + +		{ +			/* 8- I-beam. */ +			((65535, 65535, 63631, 63503, 63503, 65087, 65087, 65087, 65087, 65087, 63503, 63503, 63631, 65535, 65535, 65535), +			(0, 0, 0, 864, 128, 128, 128, 128, 128, 128, 128, 864, 0, 0, 0, 0)), +			8, +			7 +		}, + +		{ +			/* 9- Question mark. */ +			((511, 1023, 2047, 31, 15, 8199, 32647, 65415, 63503, 61471, 61503, 61695, 63999, 63999, 61695, 61695), +			(65024, 33792, 34816, 34784, 40976, 57224, 32840, 72, 1936, 2080, 2496, 2304, 1536, 1536, 2304, 3840)), +			0, +			0 +		} +	} +};  const integer mouse_size = 134; -const array<1,134,char> mice_header =  - string("Mouse file copyright (c) 1993. I saw a mouse! Where? SQUEEAAAKK!!! Cheese ")+ /* 74 */ -  "cheese cheese. Cheddar, Stilton, Double Gloucester. Squeak."+'\32'; /* 60 */ +const array<1, 134, char> mice_header = +    string("Mouse file copyright (c) 1993. I saw a mouse! Where? SQUEEAAAKK!!! Cheese ") + /* 74 */ +    "cheese cheese. Cheddar, Stilton, Double Gloucester. Squeak." +'\32'; /* 60 */ -integer gd,gm; -matrix<0,50,1,40,word> a     /*absolute $A000:0i*/; +integer gd, gm; +matrix<0, 50, 1, 40, word> a     /*absolute $A000:0i*/;  byte fv;  vmctype vmc; -byte plot; integer plx,ply; - -word swapbits(word a) -{word swapbits_result; -; - swapbits_result=lo(a)*256+hi(a); -return swapbits_result; +byte plot; +integer plx, ply; + +word swapbits(word a) { +	word swapbits_result; +	; +	swapbits_result = lo(a) * 256 + hi(a); +	return swapbits_result;  } -void plot_vmc(integer xx,integer yy, byte page_) -{; - {; -  xx=xx+vmc.ofsx; -  yy=yy+vmc.ofsy; - -  getimage(xx,yy,xx+15,yy+15,vmc.backpic[page_]); -  putimage(xx,yy,vmc.andpic,andput); -  putimage(xx,yy,vmc.xorpic,xorput); -  { -  pointtype& with1 = vmc.wherewas[page_];  -  ; -   with1.x=xx; -   with1.y=yy; -  } - } +void plot_vmc(integer xx, integer yy, byte page_) { +	; +	{ +		; +		xx = xx + vmc.ofsx; +		yy = yy + vmc.ofsy; + +		getimage(xx, yy, xx + 15, yy + 15, vmc.backpic[page_]); +		putimage(xx, yy, vmc.andpic, andput); +		putimage(xx, yy, vmc.xorpic, xorput); +		{ +			pointtype &with1 = vmc.wherewas[page_]; +			; +			with1.x = xx; +			with1.y = yy; +		} +	}  } -void wipe_vmc(byte page_) -{; -  { pointtype& with1 = vmc.wherewas[page_];  -   if (with1.x!=maxint)  -    putimage(with1.x,with1.y,vmc.backpic[page_],0);} +void wipe_vmc(byte page_) { +	; +	{ +		pointtype &with1 = vmc.wherewas[page_]; +		if (with1.x != maxint) +			putimage(with1.x, with1.y, vmc.backpic[page_], 0); +	}  } -void setup_vmc() -{ -    byte fv; -; -/* gd:=imagesize(0,0,15,15);*/ - - {; -  getmem(vmc.andpic,mouse_size); -  getmem(vmc.xorpic,mouse_size); - -  for( fv=0; fv <= 1; fv ++) -  {; -   getmem(vmc.backpic[fv],mouse_size); -   vmc.wherewas[fv].x=maxint; -  } - } +void setup_vmc() { +	byte fv; +	; +	/* gd:=imagesize(0,0,15,15);*/ + +	{ +		; +		getmem(vmc.andpic, mouse_size); +		getmem(vmc.xorpic, mouse_size); + +		for (fv = 0; fv <= 1; fv ++) { +			; +			getmem(vmc.backpic[fv], mouse_size); +			vmc.wherewas[fv].x = maxint; +		} +	}  } -void show_off_mouse() -{; +void show_off_mouse() { +	; - setcolor(14); settextstyle(0,0,2); +	setcolor(14); +	settextstyle(0, 0, 2); - for( gm=0; gm <= 1; gm ++) - {; -  setactivepage(gm); -  setfillstyle(1,blue); bar(0,0,getmaxx(),getmaxy()); -  outtextxy(400,20,chr(48+gm)); - } +	for (gm = 0; gm <= 1; gm ++) { +		; +		setactivepage(gm); +		setfillstyle(1, blue); +		bar(0, 0, getmaxx(), getmaxy()); +		outtextxy(400, 20, chr(48 + gm)); +	} - gd=0; - do { -  setactivepage(gd); -  setvisualpage(1-gd); -  gd=1-gd; +	gd = 0; +	do { +		setactivepage(gd); +		setvisualpage(1 - gd); +		gd = 1 - gd; -  delay(56); +		delay(56); -  getbuttonstatus; -  wipe_vmc(gd); +		getbuttonstatus; +		wipe_vmc(gd); -  if (plot>0)  -  {; -   putpixel(plx,ply,red); -   plot -= 1; -  } +		if (plot > 0) { +			; +			putpixel(plx, ply, red); +			plot -= 1; +		} -  plot_vmc(mx,my,gd); +		plot_vmc(mx, my, gd); -  if ((mkey==left) && (plot==0))  -  {; -   plot=2; -   plx=mx; -   ply=my; -  } +		if ((mkey == left) && (plot == 0)) { +			; +			plot = 2; +			plx = mx; +			ply = my; +		} - } while (!(mkey==right)); +	} while (!(mkey == right)); - for( gm=0; gm <= 1; gm ++) - {; -  setactivepage(1-gm); -  wipe_vmc(gm); - } +	for (gm = 0; gm <= 1; gm ++) { +		; +		setactivepage(1 - gm); +		wipe_vmc(gm); +	} - setvisualpage(0); - setactivepage(0); +	setvisualpage(0); +	setactivepage(0);  } -void grab_cursor(byte n) -{; - getimage(32*n-16, 0,32*n-1,15,vmc.andpic); - getimage(32*n-16,20,32*n-1,35,vmc.xorpic); +void grab_cursor(byte n) { +	; +	getimage(32 * n - 16, 0, 32 * n - 1, 15, vmc.andpic); +	getimage(32 * n - 16, 20, 32 * n - 1, 35, vmc.xorpic);  } -void save_mice() -{ - untyped_file f; - byte fv; -; - assign(f,"v:mice.avd"); - rewrite(f,1); - - blockwrite(f,mice_header,mouse_size); - - for( fv=1; fv <= 9; fv ++) -  {; -   grab_cursor(fv); -   putimage(100,100,vmc.xorpic,0); -   blockwrite(f,vmc.andpic,mouse_size); -   blockwrite(f,vmc.xorpic,mouse_size); -  } - - close(f); +void save_mice() { +	untyped_file f; +	byte fv; +	; +	assign(f, "v:mice.avd"); +	rewrite(f, 1); + +	blockwrite(f, mice_header, mouse_size); + +	for (fv = 1; fv <= 9; fv ++) { +		; +		grab_cursor(fv); +		putimage(100, 100, vmc.xorpic, 0); +		blockwrite(f, vmc.andpic, mouse_size); +		blockwrite(f, vmc.xorpic, mouse_size); +	} + +	close(f);  } -void load_a_mouse(byte which) -{ -    untyped_file f; -; - assign(f,"v:mice.avd"); - reset(f,1); - seek(f,mouse_size*2*(which-1)+134); - - {; -  blockread(f,vmc.andpic,mouse_size); -  blockread(f,vmc.xorpic,mouse_size); -  close(f); -  { -  void& with1 = mps[which];  -  ; -   vmc.ofsx=-horzhotspot; -   vmc.ofsy=-verthotspot; - -   setminmaxhorzcurspos(horzhotspot,624+horzhotspot); -   setminmaxvertcurspos(verthotspot,199); -  } - } +void load_a_mouse(byte which) { +	untyped_file f; +	; +	assign(f, "v:mice.avd"); +	reset(f, 1); +	seek(f, mouse_size * 2 * (which - 1) + 134); + +	{ +		; +		blockread(f, vmc.andpic, mouse_size); +		blockread(f, vmc.xorpic, mouse_size); +		close(f); +		{ +			void &with1 = mps[which]; +			; +			vmc.ofsx = -horzhotspot; +			vmc.ofsy = -verthotspot; + +			setminmaxhorzcurspos(horzhotspot, 624 + horzhotspot); +			setminmaxvertcurspos(verthotspot, 199); +		} +	}  } -void draw_mouse_cursors() -{; - for( fv=1; fv <= 9; fv ++) -  for( gm=0; gm <= 1; gm ++) -   for( gd=0; gd <= 15; gd ++) -    a[gd+gm*20][fv*2]=swapbits(mps[fv].mask[gm][gd]); +void draw_mouse_cursors() { +	; +	for (fv = 1; fv <= 9; fv ++) +		for (gm = 0; gm <= 1; gm ++) +			for (gd = 0; gd <= 15; gd ++) +				a[gd + gm * 20][fv * 2] = swapbits(mps[fv].mask[gm][gd]);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - resetmouse; - setup_vmc(); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	resetmouse; +	setup_vmc(); - draw_mouse_cursors(); +	draw_mouse_cursors(); - save_mice(); +	save_mice(); -/* grab_cursor(3);*/ -/* load_a_mouse(4); - setgraphicscursor(mps[4]); +	/* grab_cursor(3);*/ +	/* load_a_mouse(4); +	 setgraphicscursor(mps[4]); - show_off_mouse; - on; repeat getbuttonstatus until mkey=left; off; - show_off_mouse;*/ -return EXIT_SUCCESS; +	 show_off_mouse; +	 on; repeat getbuttonstatus until mkey=left; off; +	 show_off_mouse;*/ +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/menuxf.cpp b/engines/avalanche/menuxf.cpp index 17fa553afe..704d6eb260 100644 --- a/engines/avalanche/menuxf.cpp +++ b/engines/avalanche/menuxf.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 @@ -29,48 +29,53 @@  namespace Avalanche { -integer gd,gm; +integer gd, gm; -void load()     /* Load2, actually */ -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; +void load() {   /* Load2, actually */ +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; - assign(f,"maintemp.avd"); reset(f,1); - /* Compression method byte follows this... */ - seek(f,177); - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - bit=getpixel(0,0); +	assign(f, "maintemp.avd"); +	reset(f, 1); +	/* Compression method byte follows this... */ +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); +	bit = getpixel(0, 0);  } -void save() -{ -    byte bit; untyped_file f; +void save() { +	byte bit; +	untyped_file f; - assign(f,"v:mainmenu.avd"); - rewrite(f,1); - for( bit=0; bit <= 3; bit ++) -  { -   port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -   blockwrite(f,mem[0xa000*48*80],59*80); -  } - close(f); +	assign(f, "v:mainmenu.avd"); +	rewrite(f, 1); +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockwrite(f, mem[0xa000 * 48 * 80], 59 * 80); +	} +	close(f);  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - gd=3; gm=1; initgraph(gd,gm,""); - load(); /* Between 48 and 107. */ +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	gd = 3; +	gm = 1; +	initgraph(gd, gm, ""); +	load(); /* Between 48 and 107. */ - save(); - return EXIT_SUCCESS; +	save(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/minstran.cpp b/engines/avalanche/minstran.cpp index 38608c8ca0..3a88863acc 100644 --- a/engines/avalanche/minstran.cpp +++ b/engines/avalanche/minstran.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 @@ -29,37 +29,53 @@  namespace Avalanche { -integer gd,gm; -pointer p; word s; +integer gd, gm; +pointer p; +word s; -void mblit(integer x1,integer y1,integer x2,integer y2) /* Minstrel Blitter */ -{ -    integer yy,len,pp; byte bit; const integer offset = 16384; -; - x1=x1 / 8; len=((x2 / 8)-x1)+1; - for( yy=y1; yy <= y2; yy ++) - {; -  pp=yy*80+x1; -  for( bit=0; bit <= 3; bit ++) -  {; -   port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -   move(mem[0xa000*offset+pp],mem[0xa000*pp],len); -  } - } +void mblit(integer x1, integer y1, integer x2, integer y2) { /* Minstrel Blitter */ +	integer yy, len, pp; +	byte bit; +	const integer offset = 16384; +	; +	x1 = x1 / 8; +	len = ((x2 / 8) - x1) + 1; +	for (yy = y1; yy <= y2; yy ++) { +		; +		pp = yy * 80 + x1; +		for (bit = 0; bit <= 3; bit ++) { +			; +			port[0x3c4] = 2; +			port[0x3ce] = 4; +			port[0x3c5] = 1 << bit; +			port[0x3cf] = bit; +			move(mem[0xa000 * offset + pp], mem[0xa000 * pp], len); +		} +	}  } -const integer fx1 = 100; const integer fy1 = 100; const integer fx2 = 135; const integer fy2 = 145; +const integer fx1 = 100; +const integer fy1 = 100; +const integer fx2 = 135; +const integer fy2 = 145; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,""); - setactivepage(1); setfillstyle(7,9); bar(0,0,640,200); - mblit(fx1,fy1,fx2,fy2); - s=imagesize(fx1,fy1,fx2,fy2); getmem(p,s); - getimage(fx1,fy1,fx2,fy2,p); setactivepage(0); - putimage(fx1+100,fy1,p,0); freemem(p,s); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	setactivepage(1); +	setfillstyle(7, 9); +	bar(0, 0, 640, 200); +	mblit(fx1, fy1, fx2, fy2); +	s = imagesize(fx1, fy1, fx2, fy2); +	getmem(p, s); +	getimage(fx1, fy1, fx2, fy2, p); +	setactivepage(0); +	putimage(fx1 + 100, fy1, p, 0); +	freemem(p, s); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/newsprit.cpp b/engines/avalanche/newsprit.cpp index e18c0bea40..e5c4774428 100644 --- a/engines/avalanche/newsprit.cpp +++ b/engines/avalanche/newsprit.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 @@ -30,122 +30,132 @@  namespace Avalanche { -const string crlf = string('\15')+'\12'; const char eof_ = '\32'; -const array<1,177,char> trip5head =  -         string("Sprite*.AVD  ...  data file for Trippancy Five")+crlf+crlf+ -         "[Thorsoft relocatable fiveplane sprite image format]"+crlf+crlf+ -         "Thomas Thurman was here.  ...  Have fun!"+crlf+crlf+eof_+ -         "±±±±±±± * G. I. E. D. ! * "; +const string crlf = string('\15') + '\12'; +const char eof_ = '\32'; +const array<1, 177, char> trip5head = +    string("Sprite*.AVD  ...  data file for Trippancy Five") + crlf + crlf + +    "[Thorsoft relocatable fiveplane sprite image format]" + crlf + crlf + +    "Thomas Thurman was here.  ...  Have fun!" + crlf + crlf + eof_ + +    "±±±±±±± * G. I. E. D. ! * "; -const array<1,4,char> tripid = string('\x30')+'\x1'+'\x75'+'\261'; +const array<1, 4, char> tripid = string('\x30') + '\x1' + '\x75' + '\261'; -const array<1,50,char> trip5foot = crlf+crlf+ -         " and that's it! Enjoy the game. "+'\3'+crlf+crlf+ -            "\n\n\n\n\n\n\n"+"tt"; +const array<1, 50, char> trip5foot = crlf + crlf + +                                     " and that's it! Enjoy the game. " + '\3' + crlf + crlf + +                                     "\n\n\n\n\n\n\n" + "tt";  struct adxotype { -           varying_string<12> name; /* name of character */ -           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 */ +	varying_string<12> name; /* name of character */ +	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 */  };  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.) */ +	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.) */  };  varying_string<2> sn;  adxotype oa;  adxtype a; -matrix<1,24,0,1,pointer> pic;     /* the pictures themselves */ -array<1,16000,byte> aa; +matrix<1, 24, 0, 1, pointer> pic; /* the pictures themselves */ +array<1, 16000, byte> aa;  untyped_file out;  integer bigsize; -void copyaoa() -{; - {; -  a.name=oa.name; -  a.comment="Transferred"; -  a.num=oa.num; -  a.xl=oa.xl; -  a.yl=oa.yl; -  a.seq=oa.seq; -  a.size=oa.size; -  a.fgc=oa.fgc; -  a.bgc=oa.bgc; - } +void copyaoa() { +	; +	{ +		; +		a.name = oa.name; +		a.comment = "Transferred"; +		a.num = oa.num; +		a.xl = oa.xl; +		a.yl = oa.yl; +		a.seq = oa.seq; +		a.size = oa.size; +		a.fgc = oa.fgc; +		a.bgc = oa.bgc; +	}  } -void setup() -{ -    integer gd,gm; -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); +void setup() { +	integer gd, gm; +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi");  } -string strf(longint x) -{ -    string q; -string strf_result; -; - str(x,q); strf_result=q; -return strf_result; +string strf(longint x) { +	string q; +	string strf_result; +	; +	str(x, q); +	strf_result = q; +	return strf_result;  } -void save() -{ - byte sort,n; - word fv,ff; char r; byte xw; - byte nxl,nyl; - word soa; -; - cleardevice(); - {; -  a.xl=45; a.yl=10; a.num=1; a.seq=1; -  a.size=imagesize(0,0,a.xl,a.yl); -  soa=sizeof(a); - -  assign(out,"v:sprite10.avd"); rewrite(out,1); -  blockwrite(out,trip5head,177); -  blockwrite(out,tripid,4); -  blockwrite(out,soa,2); -  blockwrite(out,a,soa); - -  nxl=a.xl; nyl=a.yl; -  xw=nxl / 8; -  if ((nxl % 8)>0)  xw += 1; - -  for( n=1; n <= a.num; n ++) -  {; -   getimage(  0,0,a.xl,a.yl,aa); -   for( fv=0; fv <= nyl; fv ++) -    blockwrite(out,aa[5+fv*xw*4],xw); - -   getimage(100,0,100+a.xl,a.yl,aa); -   blockwrite(out,aa[5],a.size-6); -  } - } +void save() { +	byte sort, n; +	word fv, ff; +	char r; +	byte xw; +	byte nxl, nyl; +	word soa; +	; +	cleardevice(); +	{ +		; +		a.xl = 45; +		a.yl = 10; +		a.num = 1; +		a.seq = 1; +		a.size = imagesize(0, 0, a.xl, a.yl); +		soa = sizeof(a); + +		assign(out, "v:sprite10.avd"); +		rewrite(out, 1); +		blockwrite(out, trip5head, 177); +		blockwrite(out, tripid, 4); +		blockwrite(out, soa, 2); +		blockwrite(out, a, soa); + +		nxl = a.xl; +		nyl = a.yl; +		xw = nxl / 8; +		if ((nxl % 8) > 0)  xw += 1; + +		for (n = 1; n <= a.num; n ++) { +			; +			getimage(0, 0, a.xl, a.yl, aa); +			for (fv = 0; fv <= nyl; fv ++) +				blockwrite(out, aa[5 + fv * xw * 4], xw); + +			getimage(100, 0, 100 + a.xl, a.yl, aa); +			blockwrite(out, aa[5], a.size - 6); +		} +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - setup(); - save(); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	setup(); +	save(); - blockwrite(out,trip5foot,50); - close(out); -return EXIT_SUCCESS; +	blockwrite(out, trip5foot, 50); +	close(out); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/nim.cpp b/engines/avalanche/nim.cpp index 86dd2b2a9d..238908cf9f 100644 --- a/engines/avalanche/nim.cpp +++ b/engines/avalanche/nim.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 @@ -31,246 +31,323 @@  namespace Avalanche { -const array<false,true,varying_string<7> > names = {{"Avalot","Dogfood"}}; +const array<false, true, varying_string<7> > names = {{"Avalot", "Dogfood"}}; -array<1,3,byte> old,stones; -array<0,3,0,22,1,7,byte> stonepic;       /* picture of Nimstone */ +array<1, 3, byte> old, stones; +array<0, 3, 0, 22, 1, 7, byte> stonepic; /* picture of Nimstone */  byte turns; -boolean dogfoodsturn; byte fv; byte stonesleft; +boolean dogfoodsturn; +byte fv; +byte stonesleft;  boolean clicked; -byte row,number; +byte row, number;  boolean squeak; -shortint mnum,mrow; +shortint mnum, mrow;  registers r; -void resetmouse() -{; - r.ax=0; intr(0x33,r); - squeak=r.ax>0; +void resetmouse() { +	; +	r.ax = 0; +	intr(0x33, r); +	squeak = r.ax > 0;  } -void show() -{; - r.ax=1; intr(0x33,r); +void show() { +	; +	r.ax = 1; +	intr(0x33, r);  } -void hide() -{; - r.ax=2; intr(0x33,r); +void hide() { +	; +	r.ax = 2; +	intr(0x33, r);  } -void chalk(integer x,integer y, string z) -{ -      const array<0,3,byte> greys = {{0,8,7,15}}; -    byte fv; -; - for( fv=0; fv <= 3; fv ++) - {; -  setcolor(greys[fv]); -  outtextxy(x-fv,y,z); -  sound(fv*100*length(z)); delay(3); nosound; delay(30); - } +void chalk(integer x, integer y, string z) { +	const array<0, 3, byte> greys = {{0, 8, 7, 15}}; +	byte fv; +	; +	for (fv = 0; fv <= 3; fv ++) { +		; +		setcolor(greys[fv]); +		outtextxy(x - fv, y, z); +		sound(fv * 100 * length(z)); +		delay(3); +		nosound; +		delay(30); +	}  } -void setup() -{ - untyped_file f; - integer gd,gm; - byte bit; -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - - assign(f,"c:\\avalot\\nim.avd"); - reset(f,1); - seek(f,41); - for( gm=0; gm <= 22; gm ++) -  for( bit=0; bit <= 3; bit ++) -  {; -   port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -   blockread(f,stonepic[bit][gm],7); -  } - for( gd=1; gd <= 3; gd ++) -  for( gm=0; gm <= 22; gm ++) -   for( bit=0; bit <= 3; bit ++) -   {; -    port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -    blockread(f,mem[0xa000*3200+gd*2800+gm*80],7); -   } - for( gm=0; gm <= 36; gm ++) -  for( bit=0; bit <= 3; bit ++) -  {; -   port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -   blockread(f,mem[0xa000*400+49+gm*80],30); -  } - close(f); - - gd=getpixel(0,0);  /* clear codes */ - setcolor(4); rectangle(394,50,634,197); - setfillstyle(1,6); bar(395,51,633,196); - rectangle(10,5,380,70); bar(11,6,379,69); - setcolor(15); - outtextxy(475,53,"SCOREBOARD:"); - setcolor(14); - outtextxy(420,63,"Turn:"); - outtextxy(490,63,"Player:"); - outtextxy(570,63,"Move:"); - - for( gd=1; gd <= 3; gd ++) stones[gd]=gd+2; - - turns=0; dogfoodsturn=true; - - chalk(27,15,"Take pieces away with:"); - chalk(77,25,"1) the mouse (click leftmost)"); - chalk(53,35,"or 2) the keyboard:"); - chalk(220,35,string('\30')+'/'+'\31'+": choose row,"); - chalk(164,45,string("+/- or ")+'\33'+'/'+'\32'+": more/fewer,"); - chalk(204,55,"Enter: take stones."); - - row=1; number=1; fillchar(old,sizeof(old),'\0'); stonesleft=12; - resetmouse(); +void setup() { +	untyped_file f; +	integer gd, gm; +	byte bit; +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); + +	assign(f, "c:\\avalot\\nim.avd"); +	reset(f, 1); +	seek(f, 41); +	for (gm = 0; gm <= 22; gm ++) +		for (bit = 0; bit <= 3; bit ++) { +			; +			port[0x3c4] = 2; +			port[0x3ce] = 4; +			port[0x3c5] = 1 << bit; +			port[0x3cf] = bit; +			blockread(f, stonepic[bit][gm], 7); +		} +	for (gd = 1; gd <= 3; gd ++) +		for (gm = 0; gm <= 22; gm ++) +			for (bit = 0; bit <= 3; bit ++) { +				; +				port[0x3c4] = 2; +				port[0x3ce] = 4; +				port[0x3c5] = 1 << bit; +				port[0x3cf] = bit; +				blockread(f, mem[0xa000 * 3200 + gd * 2800 + gm * 80], 7); +			} +	for (gm = 0; gm <= 36; gm ++) +		for (bit = 0; bit <= 3; bit ++) { +			; +			port[0x3c4] = 2; +			port[0x3ce] = 4; +			port[0x3c5] = 1 << bit; +			port[0x3cf] = bit; +			blockread(f, mem[0xa000 * 400 + 49 + gm * 80], 30); +		} +	close(f); + +	gd = getpixel(0, 0); /* clear codes */ +	setcolor(4); +	rectangle(394, 50, 634, 197); +	setfillstyle(1, 6); +	bar(395, 51, 633, 196); +	rectangle(10, 5, 380, 70); +	bar(11, 6, 379, 69); +	setcolor(15); +	outtextxy(475, 53, "SCOREBOARD:"); +	setcolor(14); +	outtextxy(420, 63, "Turn:"); +	outtextxy(490, 63, "Player:"); +	outtextxy(570, 63, "Move:"); + +	for (gd = 1; gd <= 3; gd ++) stones[gd] = gd + 2; + +	turns = 0; +	dogfoodsturn = true; + +	chalk(27, 15, "Take pieces away with:"); +	chalk(77, 25, "1) the mouse (click leftmost)"); +	chalk(53, 35, "or 2) the keyboard:"); +	chalk(220, 35, string('\30') + '/' + '\31' + ": choose row,"); +	chalk(164, 45, string("+/- or ") + '\33' + '/' + '\32' + ": more/fewer,"); +	chalk(204, 55, "Enter: take stones."); + +	row = 1; +	number = 1; +	fillchar(old, sizeof(old), '\0'); +	stonesleft = 12; +	resetmouse();  } -void plotstone(byte x,byte y) -{ -    byte fv,bit; word ofs; -; - ofs=3200+y*2800+x*8; - for( fv=0; fv <= 22; fv ++) -  for( bit=0; bit <= 3; bit ++) -  {; -   port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -   move(stonepic[bit][fv],mem[0xa000*ofs+fv*80],7); -  } +void plotstone(byte x, byte y) { +	byte fv, bit; +	word ofs; +	; +	ofs = 3200 + y * 2800 + x * 8; +	for (fv = 0; fv <= 22; fv ++) +		for (bit = 0; bit <= 3; bit ++) { +			; +			port[0x3c4] = 2; +			port[0x3ce] = 4; +			port[0x3c5] = 1 << bit; +			port[0x3cf] = bit; +			move(stonepic[bit][fv], mem[0xa000 * ofs + fv * 80], 7); +		}  } -void board() -{ -    byte fv,ff; -; - for( fv=1; fv <= 3; fv ++) -  for( ff=1; ff <= stones[fv]; ff ++) -   plotstone(ff,fv); +void board() { +	byte fv, ff; +	; +	for (fv = 1; fv <= 3; fv ++) +		for (ff = 1; ff <= stones[fv]; ff ++) +			plotstone(ff, fv);  } -void startmove() -{ -    varying_string<2> tstr; integer ypos; -; - turns += 1; str(turns,2,tstr); ypos=63+turns*10; - dogfoodsturn=! dogfoodsturn; - chalk(433,ypos,tstr); - chalk(493,ypos,names[dogfoodsturn]); - old=stones; +void startmove() { +	varying_string<2> tstr; +	integer ypos; +	; +	turns += 1; +	str(turns, 2, tstr); +	ypos = 63 + turns * 10; +	dogfoodsturn = ! dogfoodsturn; +	chalk(433, ypos, tstr); +	chalk(493, ypos, names[dogfoodsturn]); +	old = stones;  } -void show_changes() -{ -    byte fv,ff,fq; -; - chalk(573,63+turns*10,string(chr(64+row))+chr(48+number)); - for( fv=1; fv <= 3; fv ++) -  if (old[fv]>stones[fv])  -   for( ff=stones[fv]+1; ff <= old[fv]; ff ++) -    for( fq=0; fq <= 22; fq ++) fillchar(mem[0xa000*3200+fv*2800+ff*8+fq*80],7,'\0'); - stonesleft -= number; +void show_changes() { +	byte fv, ff, fq; +	; +	chalk(573, 63 + turns * 10, string(chr(64 + row)) + chr(48 + number)); +	for (fv = 1; fv <= 3; fv ++) +		if (old[fv] > stones[fv]) +			for (ff = stones[fv] + 1; ff <= old[fv]; ff ++) +				for (fq = 0; fq <= 22; fq ++) fillchar(mem[0xa000 * 3200 + fv * 2800 + ff * 8 + fq * 80], 7, '\0'); +	stonesleft -= number;  }  void checkmouse(); -static void blip() {; sound(1771); delay(3); nosound; clicked=false; } - -void checkmouse() -{; -           {; ax=5; bx=0; } intr(0x33,r); - clicked=r.bx>0; - if (clicked)  -  {;     /* The mouse was clicked. Where?  */ -   mrow=(dx-38) / 35; -   if ((mrow<1) || (mrow>3))  blip(); -   mnum=stones[mrow]-(cx / 64)+1; -   if ((mnum<1) || (mnum>(unsigned char)stones[mrow]))  blip(); -  } +static void blip() { +	; +	sound(1771); +	delay(3); +	nosound; +	clicked = false; +} + +void checkmouse() { +	; +	{ +		; +		ax = 5; +		bx = 0; +	} +	intr(0x33, r); +	clicked = r.bx > 0; +	if (clicked) { +		;     /* The mouse was clicked. Where?  */ +		mrow = (dx - 38) / 35; +		if ((mrow < 1) || (mrow > 3))  blip(); +		mnum = stones[mrow] - (cx / 64) + 1; +		if ((mnum < 1) || (mnum > (unsigned char)stones[mrow]))  blip(); +	}  }  void takesome(); -static void less() {; if (number>1)  number -= 1; } +static void less() { +	; +	if (number > 1)  number -= 1; +} -void takesome() -{ -    char r; byte sr; -; - number=1; - do { -  do { -   sr=stones[row]; -   if (sr==0)  {; row=row % 3+1; number=1; } -  } while (!(sr!=0)); -  if (number>sr)  number=sr; -  setcolor(1); rectangle(63+(sr-number)*64,38+35*row,54+sr*64,63+35*row); -   /* Wait for choice */ -  show(); -  do { checkmouse(); } while (!(keypressed() || clicked)); -  if (keypressed())  r=upcase(readkey()); -  hide(); - -  setcolor(0); rectangle(63+(sr-number)*64,38+35*row,54+sr*64,63+35*row); - -  if (clicked)  -  {; -   number=mnum; -   row=mrow; -   return; -  } else -  {; -   switch (r) { -    case '\0': switch (readkey()) { -         case 'H': if (row>1)  row -= 1; break; /* Up */ -         case 'P': if (row<3)  row += 1; break; /* Down */ -         case 'K': number += 1; break; -         case 'M': less(); break; -         case 'I': row=1; break; /* PgUp */ -         case 'Q': row=3; break; /* PgDn */ -         case 'G': number=5; break; /* Home- check routine will knock this down to size */ -         case 'O': number=1; break; /* End */ -        } -        break; -    case '+': number += 1; break; -    case '-': less(); break; -    case RANGE_3('A','C'): row=ord(r)-64; -    break; -    case RANGE_5('1','5'): number=ord(r)-48; -    break; -    case '\15': return; break; /* Enter was pressed */ -   } -  } - } while (!false); +void takesome() { +	char r; +	byte sr; +	; +	number = 1; +	do { +		do { +			sr = stones[row]; +			if (sr == 0)  { +				; +				row = row % 3 + 1; +				number = 1; +			} +		} while (!(sr != 0)); +		if (number > sr)  number = sr; +		setcolor(1); +		rectangle(63 + (sr - number) * 64, 38 + 35 * row, 54 + sr * 64, 63 + 35 * row); +		/* Wait for choice */ +		show(); +		do { +			checkmouse(); +		} while (!(keypressed() || clicked)); +		if (keypressed())  r = upcase(readkey()); +		hide(); + +		setcolor(0); +		rectangle(63 + (sr - number) * 64, 38 + 35 * row, 54 + sr * 64, 63 + 35 * row); + +		if (clicked) { +			; +			number = mnum; +			row = mrow; +			return; +		} else { +			; +			switch (r) { +			case '\0': +				switch (readkey()) { +				case 'H': +					if (row > 1)  row -= 1; +					break; /* Up */ +				case 'P': +					if (row < 3)  row += 1; +					break; /* Down */ +				case 'K': +					number += 1; +					break; +				case 'M': +					less(); +					break; +				case 'I': +					row = 1; +					break; /* PgUp */ +				case 'Q': +					row = 3; +					break; /* PgDn */ +				case 'G': +					number = 5; +					break; /* Home- check routine will knock this down to size */ +				case 'O': +					number = 1; +					break; /* End */ +				} +				break; +			case '+': +				number += 1; +				break; +			case '-': +				less(); +				break; +			case RANGE_3('A', 'C'): +				row = ord(r) - 64; +				break; +			case RANGE_5('1', '5'): +				number = ord(r) - 48; +				break; +			case '\15': +				return; +				break; /* Enter was pressed */ +			} +		} +	} while (!false);  } -void endofgame() -{ -    char rr; -; - chalk(595,63+turns*10,"Wins!"); - outtextxy(100,190,"- - -   Press any key...  - - -"); - while (keypressed())  rr=readkey(); -           do { ax=5; bx=0; intr(0x33,r); } while (!(keypressed() || (bx>0))); - if (keypressed())  rr=readkey(); +void endofgame() { +	char rr; +	; +	chalk(595, 63 + turns * 10, "Wins!"); +	outtextxy(100, 190, "- - -   Press any key...  - - -"); +	while (keypressed())  rr = readkey(); +	do { +		ax = 5; +		bx = 0; +		intr(0x33, r); +	} while (!(keypressed() || (bx > 0))); +	if (keypressed())  rr = readkey();  }  void dogfood(); -                   /* AI procedure to play the game */ -const matrix<1,3,1,2,byte> other = {{{{2,3}},{{1,3}},{{1,2}}}}; +/* AI procedure to play the game */ +const matrix<1, 3, 1, 2, byte> other = {{{{2, 3}}, {{1, 3}}, {{1, 2}}}}; -static byte live,fv,ff,matches,thisone,where; +static byte live, fv, ff, matches, thisone, where; -static array<1,3,byte> r,sr; -static array<1,3,boolean> inap; +static array<1, 3, byte> r, sr; +static array<1, 3, boolean> inap;  static boolean lmo; /* Let Me Out! */ @@ -278,131 +355,167 @@ static byte ooo; /* Odd one out */  static boolean find(byte x) - /* This gives True if there's a pile with x stones in. */ +/* This gives True if there's a pile with x stones in. */  { -    boolean q; byte p; -boolean find_result; -; - q=false; - for( p=1; p <= 3; p ++) if (stones[p]==x)  {; q=true; inap[p]=true; } - find_result=q; -return find_result; +	boolean q; +	byte p; +	boolean find_result; +	; +	q = false; +	for (p = 1; p <= 3; p ++) if (stones[p] == x)  { +			; +			q = true; +			inap[p] = true; +		} +	find_result = q; +	return find_result;  } -static void find_ap(byte start,byte stepsize) -{ -    byte ff; -; - matches=0; - fillchar(inap,sizeof(inap),'\0'); /* blank 'em all */ - for( ff=0; ff <= 2; ff ++) if (find(start+ff*stepsize))  matches += 1; -  else thisone=ff; - - /* Now.. Matches must be 0, 1, 2, or 3. -     0/1 mean there are no A.P.s here, so we'll keep looking, -     2 means there is a potential A.P. that we can create (ideal!), and -     3 means that we're already in an A.P. (Trouble!). */ - - switch (matches) { -  case 2: {; -      for( ff=1; ff <= 3; ff ++) /* find which one didn't fit the A.P. */ -       if (! inap[ff])  ooo=ff; -      if (stones[ooo]>(start+thisone*stepsize)) /* check it's possible! */ -           {;     /* create an A.P. */ -       row=ooo;  /* already calculated */ -       /* Start+thisone*stepsize will give the amount we SHOULD have here. */ -       number=stones[row]-(start+thisone*stepsize); lmo=true; return; -      } -     } -     break; -  case 3: {; /* we're actually IN an A.P! Trouble! Oooh dear. */ -      row=r[3]; number=1; lmo=true; return;  /* take 1 from the largest pile */ -     } -     break; - } +static void find_ap(byte start, byte stepsize) { +	byte ff; +	; +	matches = 0; +	fillchar(inap, sizeof(inap), '\0'); /* blank 'em all */ +	for (ff = 0; ff <= 2; ff ++) if (find(start + ff * stepsize))  matches += 1; +		else thisone = ff; + +	/* Now.. Matches must be 0, 1, 2, or 3. +	    0/1 mean there are no A.P.s here, so we'll keep looking, +	    2 means there is a potential A.P. that we can create (ideal!), and +	    3 means that we're already in an A.P. (Trouble!). */ + +	switch (matches) { +	case 2: { +		; +		for (ff = 1; ff <= 3; ff ++) /* find which one didn't fit the A.P. */ +			if (! inap[ff])  ooo = ff; +		if (stones[ooo] > (start + thisone * stepsize)) { /* check it's possible! */ +			;     /* create an A.P. */ +			row = ooo; /* already calculated */ +			/* Start+thisone*stepsize will give the amount we SHOULD have here. */ +			number = stones[row] - (start + thisone * stepsize); +			lmo = true; +			return; +		} +	} +	break; +	case 3: { +		; /* we're actually IN an A.P! Trouble! Oooh dear. */ +		row = r[3]; +		number = 1; +		lmo = true; +		return;  /* take 1 from the largest pile */ +	} +	break; +	}  } -void dogfood() -{ - boolean sorted; byte temp; - -; - live=0; lmo=false; - for( fv=1; fv <= 3; fv ++) - {; -  if (stones[fv]>0)  -  {; -   live += 1; -   r[live]=fv; sr[live]=stones[fv]; -  } - } - switch (live) { -  case 1: /* Only one is free- so take 'em all */ -       {; row=r[1]; number=stones[r[1]]; return; } -       break; -  case 2: /* Two are free- make them equal */ -     {; -      if (sr[1]>sr[2])  -      {; row=r[1]; number=sr[1]-sr[2]; return; } else       /* T > b */ -       if (sr[1]<sr[2])  -       {; row=r[2]; number=sr[2]-sr[1]; return; } else       /* B > t */ -        {; row=r[1]; number=1; return; }        /* B = t... oh no, we've lost! */ -     } -     break; -  case 3: /* Ho hum... this'll be difficult! */ -     {; -      /* There are three possible courses of action when we have 3 lines left: -          1) Look for 2 equal lines, then take the odd one out. -          2) Look for A.P.s, and capitalise on them. -          3) Go any old where. */ - -      for( fv=1; fv <= 3; fv ++) /* Look for 2 equal lines */ -       if (stones[other[fv][1]]==stones[other[fv][2]])  -       {; -        row=fv;  /* this row */ number=stones[fv]; /* all of 'em */ return; -       } - -      do { -       sorted=true; -       for( fv=1; fv <= 2; fv ++) -        if (sr[fv]>sr[fv+1])  -        {; -         temp=sr[fv+1]; sr[fv+1]=sr[fv]; sr[fv]=temp; -         temp= r[fv+1];  r[fv+1]= r[fv];  r[fv]=temp; -         sorted=false; -        } -      } while (!sorted); -      /* Now we look for A.P.s ... */ -      for( fv=1; fv <= 3; fv ++) -      {; -       find_ap(fv,1); /* there are 3 "1"s */ -       if (lmo)  return; /* cut-out */ -      } -      find_ap(1,2); /* only "2" possible */ -      if (lmo)  return; - -      /* A.P. search must have failed- use the default move. */ -      row=r[3]; number=1; return; -     } -     break; - } +void dogfood() { +	boolean sorted; +	byte temp; + +	; +	live = 0; +	lmo = false; +	for (fv = 1; fv <= 3; fv ++) { +		; +		if (stones[fv] > 0) { +			; +			live += 1; +			r[live] = fv; +			sr[live] = stones[fv]; +		} +	} +	switch (live) { +	case 1: { /* Only one is free- so take 'em all */ +		; +		row = r[1]; +		number = stones[r[1]]; +		return; +	} +	break; +	case 2: { /* Two are free- make them equal */ +		; +		if (sr[1] > sr[2]) { +			; +			row = r[1]; +			number = sr[1] - sr[2]; +			return; +		} else       /* T > b */ +			if (sr[1] < sr[2]) { +				; +				row = r[2]; +				number = sr[2] - sr[1]; +				return; +			} else {     /* B > t */ +				;    /* B = t... oh no, we've lost! */ +				row = r[1]; +				number = 1; +				return; +			} +	} +	break; +	case 3: { /* Ho hum... this'll be difficult! */ +		; +		/* There are three possible courses of action when we have 3 lines left: +		    1) Look for 2 equal lines, then take the odd one out. +		    2) Look for A.P.s, and capitalise on them. +		    3) Go any old where. */ + +		for (fv = 1; fv <= 3; fv ++) /* Look for 2 equal lines */ +			if (stones[other[fv][1]] == stones[other[fv][2]]) { +				; +				row = fv;  /* this row */ number = stones[fv]; /* all of 'em */ return; +			} + +		do { +			sorted = true; +			for (fv = 1; fv <= 2; fv ++) +				if (sr[fv] > sr[fv + 1]) { +					; +					temp = sr[fv + 1]; +					sr[fv + 1] = sr[fv]; +					sr[fv] = temp; +					temp = r[fv + 1]; +					r[fv + 1] = r[fv]; +					r[fv] = temp; +					sorted = false; +				} +		} while (!sorted); +		/* Now we look for A.P.s ... */ +		for (fv = 1; fv <= 3; fv ++) { +			; +			find_ap(fv, 1); /* there are 3 "1"s */ +			if (lmo)  return; /* cut-out */ +		} +		find_ap(1, 2); /* only "2" possible */ +		if (lmo)  return; + +		/* A.P. search must have failed- use the default move. */ +		row = r[3]; +		number = 1; +		return; +	} +	break; +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - setup(); - board(); - do { -  startmove(); -  if (dogfoodsturn)  dogfood(); else takesome(); -  stones[row] -= number; -  show_changes(); - } while (!(stonesleft==0)); - endofgame(); /* Winning sequence is A1, B3, B1, C1, C1, btw. */ -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	setup(); +	board(); +	do { +		startmove(); +		if (dogfoodsturn)  dogfood(); +		else takesome(); +		stones[row] -= number; +		show_changes(); +	} while (!(stonesleft == 0)); +	endofgame(); /* Winning sequence is A1, B3, B1, C1, C1, btw. */ +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/nimdraw.cpp b/engines/avalanche/nimdraw.cpp index a81d69fd24..9464d64d8e 100644 --- a/engines/avalanche/nimdraw.cpp +++ b/engines/avalanche/nimdraw.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 @@ -29,93 +29,118 @@  namespace Avalanche { -const string header = string("Datafile for Avalot, copyright (c) 1992.")+'\32'; +const string header = string("Datafile for Avalot, copyright (c) 1992.") + '\32'; -integer gd,gm,x,y; +integer gd, gm, x, y;  untyped_file f;  byte bit; -void plot(char ch, byte x) -{; - setcolor(blue);     outtextxy(x*80+4,0,ch); outtextxy(x*80+10,0,ch); - setcolor(lightblue); outtextxy(x*80+5,0,ch); outtextxy(x*80+9,0,ch); - setcolor(darkgray); outtextxy(x*80+6,0,ch); outtextxy(x*80+8,0,ch); - setcolor(yellow);     outtextxy(x*80+7,0,ch); +void plot(char ch, byte x) { +	; +	setcolor(blue); +	outtextxy(x * 80 + 4, 0, ch); +	outtextxy(x * 80 + 10, 0, ch); +	setcolor(lightblue); +	outtextxy(x * 80 + 5, 0, ch); +	outtextxy(x * 80 + 9, 0, ch); +	setcolor(darkgray); +	outtextxy(x * 80 + 6, 0, ch); +	outtextxy(x * 80 + 8, 0, ch); +	setcolor(yellow); +	outtextxy(x * 80 + 7, 0, ch);  } -void load() -{ -    byte z; - array<1,4,pointer> a; - varying_string<12> check; - untyped_file f; word s; -; - assign(f,"c:\\avalot\\nimstone.avd"); reset(f,1); - seek(f,85); z=3; - s=imagesize(0,0,getmaxx(),75); - getmem(a[z],s); - blockread(f,a[z],s); - putimage(0,7,a[z],0); - freemem(a[z],s); close(f); +void load() { +	byte z; +	array<1, 4, pointer> a; +	varying_string<12> check; +	untyped_file f; +	word s; +	; +	assign(f, "c:\\avalot\\nimstone.avd"); +	reset(f, 1); +	seek(f, 85); +	z = 3; +	s = imagesize(0, 0, getmaxx(), 75); +	getmem(a[z], s); +	blockread(f, a[z], s); +	putimage(0, 7, a[z], 0); +	freemem(a[z], s); +	close(f);  } -void spludge(integer x,integer y, string z) -{ -    shortint dx,dy; -; - setcolor(15); - for( dx=-1; dx <= 1; dx ++) -  for( dy=-1; dy <= 1; dy ++) -   outtextxy(x+dx,y+dy,z); - setcolor(0); - outtextxy(x,y,z); +void spludge(integer x, integer y, string z) { +	shortint dx, dy; +	; +	setcolor(15); +	for (dx = -1; dx <= 1; dx ++) +		for (dy = -1; dy <= 1; dy ++) +			outtextxy(x + dx, y + dy, z); +	setcolor(0); +	outtextxy(x, y, z);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,""); - load(); - settextstyle(4,0,0); setusercharsize(2,1,1,1); - plot('A',1); - plot('B',2); - plot('C',3); -/* rectangle(gd*80,7,56+gd*80,29); */ - - setfillstyle(1,1); setcolor(9); - fillellipse( 97,104,6,4); fillellipse(321,104,6,4); - fillellipse( 97,131,6,4); fillellipse(321,131,6,4); - bar(97,100,321,134); - bar(92,104,326,131); - setfillstyle(1,9); - bar(91,103, 91,131); bar(327,104,327,131); - bar(98, 99,321, 99); bar( 97,135,321,135); - - settextstyle(2,0,0); setusercharsize(20,10,11,10); - spludge( 99,100,"The Ancient Game of"); - settextstyle(1,0,0); setusercharsize(40,10,10,10); - spludge( 99,105,"NIM"); - - /* now save it all! */ - - assign(f,"c:\\avalot\\nim.avd"); - rewrite(f,1); - blockwrite(f,header[1],length(header)); - for( gd=0; gd <= 3; gd ++) -  for( gm=7; gm <= 29; gm ++) -   for( bit=0; bit <= 3; bit ++) -   {; -    port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -    blockwrite(f,mem[0xa000*gd*10+gm*80],7); -   } - for( gm=99; gm <= 135; gm ++) -  for( bit=0; bit <= 3; bit ++) -  {; -   port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -   blockwrite(f,mem[0xa000*11+gm*80],30); -  } - close(f); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	load(); +	settextstyle(4, 0, 0); +	setusercharsize(2, 1, 1, 1); +	plot('A', 1); +	plot('B', 2); +	plot('C', 3); +	/* rectangle(gd*80,7,56+gd*80,29); */ + +	setfillstyle(1, 1); +	setcolor(9); +	fillellipse(97, 104, 6, 4); +	fillellipse(321, 104, 6, 4); +	fillellipse(97, 131, 6, 4); +	fillellipse(321, 131, 6, 4); +	bar(97, 100, 321, 134); +	bar(92, 104, 326, 131); +	setfillstyle(1, 9); +	bar(91, 103, 91, 131); +	bar(327, 104, 327, 131); +	bar(98, 99, 321, 99); +	bar(97, 135, 321, 135); + +	settextstyle(2, 0, 0); +	setusercharsize(20, 10, 11, 10); +	spludge(99, 100, "The Ancient Game of"); +	settextstyle(1, 0, 0); +	setusercharsize(40, 10, 10, 10); +	spludge(99, 105, "NIM"); + +	/* now save it all! */ + +	assign(f, "c:\\avalot\\nim.avd"); +	rewrite(f, 1); +	blockwrite(f, header[1], length(header)); +	for (gd = 0; gd <= 3; gd ++) +		for (gm = 7; gm <= 29; gm ++) +			for (bit = 0; bit <= 3; bit ++) { +				; +				port[0x3c4] = 2; +				port[0x3ce] = 4; +				port[0x3c5] = 1 << bit; +				port[0x3cf] = bit; +				blockwrite(f, mem[0xa000 * gd * 10 + gm * 80], 7); +			} +	for (gm = 99; gm <= 135; gm ++) +		for (bit = 0; bit <= 3; bit ++) { +			; +			port[0x3c4] = 2; +			port[0x3ce] = 4; +			port[0x3c5] = 1 << bit; +			port[0x3cf] = bit; +			blockwrite(f, mem[0xa000 * 11 + gm * 80], 30); +		} +	close(f); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/nimunit.cpp b/engines/avalanche/nimunit.cpp index cfec877c33..785dbe6759 100644 --- a/engines/avalanche/nimunit.cpp +++ b/engines/avalanche/nimunit.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 @@ -39,249 +39,308 @@  namespace Avalanche { -const array<false,true,varying_string<7> > names = {{"Avalot","Dogfood"}}; +const array<false, true, varying_string<7> > names = {{"Avalot", "Dogfood"}}; -array<1,3,byte> old,stones; -array<0,3,0,22,1,7,byte> stonepic;       /* picture of Nimstone */ +array<1, 3, byte> old, stones; +array<0, 3, 0, 22, 1, 7, byte> stonepic; /* picture of Nimstone */  byte turns; -boolean dogfoodsturn; byte fv; byte stonesleft; +boolean dogfoodsturn; +byte fv; +byte stonesleft;  boolean clicked; -byte row,number; +byte row, number;  boolean squeak; -shortint mnum,mrow; - -void chalk(integer x,integer y, string z) -{ -      const array<0,3,byte> greys = {{0,8,7,15}}; -    byte fv; - - for( fv=0; fv <= 3; fv ++) - { -  setcolor(greys[fv]); -  outtextxy(x-fv,y,z); -  sound(fv*100*length(z)); delay(3); nosound; delay(30); - } +shortint mnum, mrow; + +void chalk(integer x, integer y, string z) { +	const array<0, 3, byte> greys = {{0, 8, 7, 15}}; +	byte fv; + +	for (fv = 0; fv <= 3; fv ++) { +		setcolor(greys[fv]); +		outtextxy(x - fv, y, z); +		sound(fv * 100 * length(z)); +		delay(3); +		nosound; +		delay(30); +	}  } -void setup() -{ -      const integer page3 = 0xac00; - byte gd,gm; - untyped_file f; - byte bit; - - setactivepage(3); - setvisualpage(3); - cleardevice(); - dawn(); - - assign(f,"nim.avd"); - reset(f,1); - seek(f,41); - for( gm=0; gm <= 22; gm ++) -  for( bit=0; bit <= 3; bit ++) -  { -   port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -   blockread(f,stonepic[bit][gm],7); -  } - for( gd=1; gd <= 3; gd ++) -  for( gm=0; gm <= 22; gm ++) -   for( bit=0; bit <= 3; bit ++) -   { -    port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -    blockread(f,mem[page3*3200+gd*2800+gm*80],7); -   } - for( gm=0; gm <= 36; gm ++) -  for( bit=0; bit <= 3; bit ++) -  { -   port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -   blockread(f,mem[page3*400+49+gm*80],30); -  } - close(f); - - gd=getpixel(0,0);  /* clear codes */ - setcolor(4); rectangle(394,50,634,197); - setfillstyle(1,6); bar(395,51,633,196); - rectangle(10,5,380,70); bar(11,6,379,69); - setcolor(15); - outtextxy(475,53,"SCOREBOARD:"); - setcolor(14); - outtextxy(420,63,"Turn:"); - outtextxy(490,63,"Player:"); - outtextxy(570,63,"Move:"); - - for( gd=1; gd <= 3; gd ++) stones[gd]=gd+2; - - turns=0; dogfoodsturn=true; - - chalk(27,15,"Take pieces away with:"); - chalk(77,25,"1) the mouse (click leftmost)"); - chalk(53,35,"or 2) the keyboard:"); - chalk(220,35,string('\30')+'/'+'\31'+": choose row,"); - chalk(164,45,string("+/- or ")+'\33'+'/'+'\32'+": more/fewer,"); - chalk(204,55,"Enter: take stones."); - - row=1; number=1; fillchar(old,sizeof(old),'\0'); stonesleft=12; - - /* Set up mouse. */ - off_virtual(); - oncandopageswap=false; - - setactivepage(3); - setvisualpage(3); +void setup() { +	const integer page3 = 0xac00; +	byte gd, gm; +	untyped_file f; +	byte bit; + +	setactivepage(3); +	setvisualpage(3); +	cleardevice(); +	dawn(); + +	assign(f, "nim.avd"); +	reset(f, 1); +	seek(f, 41); +	for (gm = 0; gm <= 22; gm ++) +		for (bit = 0; bit <= 3; bit ++) { +			port[0x3c4] = 2; +			port[0x3ce] = 4; +			port[0x3c5] = 1 << bit; +			port[0x3cf] = bit; +			blockread(f, stonepic[bit][gm], 7); +		} +	for (gd = 1; gd <= 3; gd ++) +		for (gm = 0; gm <= 22; gm ++) +			for (bit = 0; bit <= 3; bit ++) { +				port[0x3c4] = 2; +				port[0x3ce] = 4; +				port[0x3c5] = 1 << bit; +				port[0x3cf] = bit; +				blockread(f, mem[page3 * 3200 + gd * 2800 + gm * 80], 7); +			} +	for (gm = 0; gm <= 36; gm ++) +		for (bit = 0; bit <= 3; bit ++) { +			port[0x3c4] = 2; +			port[0x3ce] = 4; +			port[0x3c5] = 1 << bit; +			port[0x3cf] = bit; +			blockread(f, mem[page3 * 400 + 49 + gm * 80], 30); +		} +	close(f); + +	gd = getpixel(0, 0); /* clear codes */ +	setcolor(4); +	rectangle(394, 50, 634, 197); +	setfillstyle(1, 6); +	bar(395, 51, 633, 196); +	rectangle(10, 5, 380, 70); +	bar(11, 6, 379, 69); +	setcolor(15); +	outtextxy(475, 53, "SCOREBOARD:"); +	setcolor(14); +	outtextxy(420, 63, "Turn:"); +	outtextxy(490, 63, "Player:"); +	outtextxy(570, 63, "Move:"); + +	for (gd = 1; gd <= 3; gd ++) stones[gd] = gd + 2; + +	turns = 0; +	dogfoodsturn = true; + +	chalk(27, 15, "Take pieces away with:"); +	chalk(77, 25, "1) the mouse (click leftmost)"); +	chalk(53, 35, "or 2) the keyboard:"); +	chalk(220, 35, string('\30') + '/' + '\31' + ": choose row,"); +	chalk(164, 45, string("+/- or ") + '\33' + '/' + '\32' + ": more/fewer,"); +	chalk(204, 55, "Enter: take stones."); + +	row = 1; +	number = 1; +	fillchar(old, sizeof(old), '\0'); +	stonesleft = 12; + +	/* Set up mouse. */ +	off_virtual(); +	oncandopageswap = false; + +	setactivepage(3); +	setvisualpage(3);  } -void plotstone(byte x,byte y) -{ -    byte fv,bit; word ofs; - - ofs=3200+y*2800+x*8; - for( fv=0; fv <= 22; fv ++) -  for( bit=0; bit <= 3; bit ++) -  { -   port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -   move(stonepic[bit][fv],mem[0xac00*ofs+fv*80],7); -  } +void plotstone(byte x, byte y) { +	byte fv, bit; +	word ofs; + +	ofs = 3200 + y * 2800 + x * 8; +	for (fv = 0; fv <= 22; fv ++) +		for (bit = 0; bit <= 3; bit ++) { +			port[0x3c4] = 2; +			port[0x3ce] = 4; +			port[0x3c5] = 1 << bit; +			port[0x3cf] = bit; +			move(stonepic[bit][fv], mem[0xac00 * ofs + fv * 80], 7); +		}  } -void board() -{ -    byte fv,ff; +void board() { +	byte fv, ff; - for( fv=1; fv <= 3; fv ++) -  for( ff=1; ff <= stones[fv]; ff ++) -   plotstone(ff,fv); +	for (fv = 1; fv <= 3; fv ++) +		for (ff = 1; ff <= stones[fv]; ff ++) +			plotstone(ff, fv);  } -void startmove() -{ -    varying_string<2> tstr; integer ypos; - - turns += 1; str(turns,2,tstr); ypos=63+turns*10; - dogfoodsturn=! dogfoodsturn; - chalk(433,ypos,tstr); - chalk(493,ypos,names[dogfoodsturn]); - old=stones; +void startmove() { +	varying_string<2> tstr; +	integer ypos; + +	turns += 1; +	str(turns, 2, tstr); +	ypos = 63 + turns * 10; +	dogfoodsturn = ! dogfoodsturn; +	chalk(433, ypos, tstr); +	chalk(493, ypos, names[dogfoodsturn]); +	old = stones;  } -void show_changes() -{ -    byte fv,ff,fq; varying_string<2> move; +void show_changes() { +	byte fv, ff, fq; +	varying_string<2> move; - move=string(chr(64+row))+chr(48+number); - chalk(573,63+turns*10,move); - log_aside(names[dogfoodsturn]+" plays "+move+'.'); +	move = string(chr(64 + row)) + chr(48 + number); +	chalk(573, 63 + turns * 10, move); +	log_aside(names[dogfoodsturn] + " plays " + move + '.'); - for( fv=1; fv <= 3; fv ++) -  if (old[fv]>stones[fv])  -   for( ff=stones[fv]+1; ff <= old[fv]; ff ++) -    for( fq=0; fq <= 22; fq ++) fillchar(mem[0xac00*3200+fv*2800+ff*8+fq*80],7,'\0'); - stonesleft -= number; +	for (fv = 1; fv <= 3; fv ++) +		if (old[fv] > stones[fv]) +			for (ff = stones[fv] + 1; ff <= old[fv]; ff ++) +				for (fq = 0; fq <= 22; fq ++) fillchar(mem[0xac00 * 3200 + fv * 2800 + ff * 8 + fq * 80], 7, '\0'); +	stonesleft -= number;  }  void checkmouse(); -static void blip() { note(1771); delay(3); nosound; clicked=false; } +static void blip() { +	note(1771); +	delay(3); +	nosound; +	clicked = false; +} -void checkmouse() -{ - xycheck(); /* Check the mouse */ - clicked=keystatus>0; - if (clicked)  - { -   void& with = r;  -        /* The mouse was clicked. Where?  */ -   mrow=(my-38) / 35; -   if ((mrow<1) || (mrow>3))  blip(); -   mnum=stones[mrow]-(mx / 64)+1; -   if ((mnum<1) || (mnum>(unsigned char)stones[mrow]))  blip(); - } +void checkmouse() { +	xycheck(); /* Check the mouse */ +	clicked = keystatus > 0; +	if (clicked) { +		void &with = r; +		/* The mouse was clicked. Where?  */ +		mrow = (my - 38) / 35; +		if ((mrow < 1) || (mrow > 3))  blip(); +		mnum = stones[mrow] - (mx / 64) + 1; +		if ((mnum < 1) || (mnum > (unsigned char)stones[mrow]))  blip(); +	}  }  void takesome(); -static void less() { if (number>1)  number -= 1; } - -void takesome() -{ -    char r; byte sr; - - number=1; - do { -  do { -   sr=stones[row]; -   if (sr==0)  { row=row % 3+1; number=1; } -  } while (!(sr!=0)); -  if (number>sr)  number=sr; -  setcolor(1); rectangle(63+(sr-number)*64,38+35*row,54+sr*64,63+35*row); -   /* Wait for choice */ -  on(); -  do { checkmouse(); } while (!(keypressed() || clicked)); -  if (keypressed())  r=upcase(readkey()); -  off(); - -  setcolor(0); rectangle(63+(sr-number)*64,38+35*row,54+sr*64,63+35*row); - -  if (clicked)  -  { -   number=mnum; -   row=mrow; -   return; -  } else -  { -   switch (r) { -    case '\0': switch (readkey()) { -         case 'H': if (row>1)  row -= 1; break; /* Up */ -         case 'P': if (row<3)  row += 1; break; /* Down */ -         case 'K': number += 1; break; -         case 'M': less(); break; -         case 'I': row=1; break; /* PgUp */ -         case 'Q': row=3; break; /* PgDn */ -         case 'G': number=5; break; /* Home- check routine will knock this down to size */ -         case 'O': number=1; break; /* End */ -        } -        break; -    case '+': number += 1; break; -    case '-': less(); break; -    case RANGE_3('A','C'): row=ord(r)-64; -    break; -    case RANGE_5('1','5'): number=ord(r)-48; -    break; -    case '\15': return; break; /* Enter was pressed */ -   } -  } - } while (!false); +static void less() { +	if (number > 1)  number -= 1;  } -void endofgame() -{ -    char rr; - - chalk(595,63+turns*10,"Wins!"); - outtextxy(100,190,"- - -   Press any key...  - - -"); - while (keypressed())  rr=readkey(); - do { check(); } while (!(mpress==0)); - - { void& with = r;  do { check(); } while (!(keypressed() || (mrelease>0)));} - if (keypressed())  rr=readkey(); +void takesome() { +	char r; +	byte sr; + +	number = 1; +	do { +		do { +			sr = stones[row]; +			if (sr == 0)  { +				row = row % 3 + 1; +				number = 1; +			} +		} while (!(sr != 0)); +		if (number > sr)  number = sr; +		setcolor(1); +		rectangle(63 + (sr - number) * 64, 38 + 35 * row, 54 + sr * 64, 63 + 35 * row); +		/* Wait for choice */ +		on(); +		do { +			checkmouse(); +		} while (!(keypressed() || clicked)); +		if (keypressed())  r = upcase(readkey()); +		off(); + +		setcolor(0); +		rectangle(63 + (sr - number) * 64, 38 + 35 * row, 54 + sr * 64, 63 + 35 * row); + +		if (clicked) { +			number = mnum; +			row = mrow; +			return; +		} else { +			switch (r) { +			case '\0': +				switch (readkey()) { +				case 'H': +					if (row > 1)  row -= 1; +					break; /* Up */ +				case 'P': +					if (row < 3)  row += 1; +					break; /* Down */ +				case 'K': +					number += 1; +					break; +				case 'M': +					less(); +					break; +				case 'I': +					row = 1; +					break; /* PgUp */ +				case 'Q': +					row = 3; +					break; /* PgDn */ +				case 'G': +					number = 5; +					break; /* Home- check routine will knock this down to size */ +				case 'O': +					number = 1; +					break; /* End */ +				} +				break; +			case '+': +				number += 1; +				break; +			case '-': +				less(); +				break; +			case RANGE_3('A', 'C'): +				row = ord(r) - 64; +				break; +			case RANGE_5('1', '5'): +				number = ord(r) - 48; +				break; +			case '\15': +				return; +				break; /* Enter was pressed */ +			} +		} +	} while (!false); +} - mousepage(cp); - off(); - on_virtual(); +void endofgame() { +	char rr; + +	chalk(595, 63 + turns * 10, "Wins!"); +	outtextxy(100, 190, "- - -   Press any key...  - - -"); +	while (keypressed())  rr = readkey(); +	do { +		check(); +	} while (!(mpress == 0)); + +	{ +		void &with = r; +		do { +			check(); +		} while (!(keypressed() || (mrelease > 0))); +	} +	if (keypressed())  rr = readkey(); + +	mousepage(cp); +	off(); +	on_virtual();  }  void dogfood(); -                   /* AI procedure to play the game */ -const matrix<1,3,1,2,byte> other = {{{{2,3}},{{1,3}},{{1,2}}}}; +/* AI procedure to play the game */ +const matrix<1, 3, 1, 2, byte> other = {{{{2, 3}}, {{1, 3}}, {{1, 2}}}}; -static byte live,fv,ff,matches,thisone,where; +static byte live, fv, ff, matches, thisone, where; -static array<1,3,byte> r,sr; -static array<1,3,boolean> inap; +static array<1, 3, byte> r, sr; +static array<1, 3, boolean> inap;  static boolean lmo; /* Let Me Out! */ @@ -289,183 +348,206 @@ static byte ooo; /* Odd one out */  static boolean find(byte x) - /* This gives True if there's a pile with x stones in. */ +/* This gives True if there's a pile with x stones in. */  { -    boolean q; byte p; - - boolean find_result; - q=false; - for( p=1; p <= 3; p ++) if (stones[p]==x)  { q=true; inap[p]=true; } - find_result=q; - return find_result; +	boolean q; +	byte p; + +	boolean find_result; +	q = false; +	for (p = 1; p <= 3; p ++) if (stones[p] == x)  { +			q = true; +			inap[p] = true; +		} +	find_result = q; +	return find_result;  } -static void find_ap(byte start,byte stepsize) -{ -    byte ff; - - matches=0; - fillchar(inap,sizeof(inap),'\0'); /* blank 'em all */ - for( ff=0; ff <= 2; ff ++) if (find(start+ff*stepsize))  matches += 1; -  else thisone=ff; - - /* Now.. Matches must be 0, 1, 2, or 3. -     0/1 mean there are no A.P.s here, so we'll keep looking, -     2 means there is a potential A.P. that we can create (ideal!), and -     3 means that we're already in an A.P. (Trouble!). */ - - switch (matches) { -  case 2: { -      for( ff=1; ff <= 3; ff ++) /* find which one didn't fit the A.P. */ -       if (! inap[ff])  ooo=ff; -      if (stones[ooo]>(start+thisone*stepsize)) /* check it's possible! */ -           {     /* create an A.P. */ -       row=ooo;  /* already calculated */ -       /* Start+thisone*stepsize will give the amount we SHOULD have here. */ -       number=stones[row]-(start+thisone*stepsize); lmo=true; return; -      } -     } -     break; -  case 3: { /* we're actually IN an A.P! Trouble! Oooh dear. */ -      row=r[3]; number=1; lmo=true; return;  /* take 1 from the largest pile */ -     } -     break; - } +static void find_ap(byte start, byte stepsize) { +	byte ff; + +	matches = 0; +	fillchar(inap, sizeof(inap), '\0'); /* blank 'em all */ +	for (ff = 0; ff <= 2; ff ++) if (find(start + ff * stepsize))  matches += 1; +		else thisone = ff; + +	/* Now.. Matches must be 0, 1, 2, or 3. +	    0/1 mean there are no A.P.s here, so we'll keep looking, +	    2 means there is a potential A.P. that we can create (ideal!), and +	    3 means that we're already in an A.P. (Trouble!). */ + +	switch (matches) { +	case 2: { +		for (ff = 1; ff <= 3; ff ++) /* find which one didn't fit the A.P. */ +			if (! inap[ff])  ooo = ff; +		if (stones[ooo] > (start + thisone * stepsize)) { /* check it's possible! */ +			/* create an A.P. */ +			row = ooo; /* already calculated */ +			/* Start+thisone*stepsize will give the amount we SHOULD have here. */ +			number = stones[row] - (start + thisone * stepsize); +			lmo = true; +			return; +		} +	} +	break; +	case 3: { /* we're actually IN an A.P! Trouble! Oooh dear. */ +		row = r[3]; +		number = 1; +		lmo = true; +		return;  /* take 1 from the largest pile */ +	} +	break; +	}  } -void dogfood() -{ - boolean sorted; byte temp; - - - live=0; lmo=false; - for( fv=1; fv <= 3; fv ++) - { -  if (stones[fv]>0)  -  { -   live += 1; -   r[live]=fv; sr[live]=stones[fv]; -  } - } - switch (live) { -  case 1: /* Only one is free- so take 'em all */ -       { row=r[1]; number=stones[r[1]]; return; } -       break; -  case 2: /* Two are free- make them equal */ -     { -      if (sr[1]>sr[2])  -      { row=r[1]; number=sr[1]-sr[2]; return; } else       /* T > b */ -       if (sr[1]<sr[2])  -       { row=r[2]; number=sr[2]-sr[1]; return; } else       /* B > t */ -        { row=r[1]; number=1; return; }        /* B = t... oh no, we've lost! */ -     } -     break; -  case 3: /* Ho hum... this'll be difficult! */ -     { -      /* There are three possible courses of action when we have 3 lines left: -          1) Look for 2 equal lines, then take the odd one out. -          2) Look for A.P.s, and capitalise on them. -          3) Go any old where. */ - -      for( fv=1; fv <= 3; fv ++) /* Look for 2 equal lines */ -       if (stones[other[fv][1]]==stones[other[fv][2]])  -       { -        row=fv;  /* this row */ number=stones[fv]; /* all of 'em */ return; -       } - -      do { -       sorted=true; -       for( fv=1; fv <= 2; fv ++) -        if (sr[fv]>sr[fv+1])  -        { -         temp=sr[fv+1]; sr[fv+1]=sr[fv]; sr[fv]=temp; -         temp= r[fv+1];  r[fv+1]= r[fv];  r[fv]=temp; -         sorted=false; -        } -      } while (!sorted); -      /* Now we look for A.P.s ... */ -      for( fv=1; fv <= 3; fv ++) -      { -       find_ap(fv,1); /* there are 3 "1"s */ -       if (lmo)  return; /* cut-out */ -      } -      find_ap(1,2); /* only "2" possible */ -      if (lmo)  return; - -      /* A.P. search must have failed- use the default move. */ -      row=r[3]; number=1; return; -     } -     break; - } +void dogfood() { +	boolean sorted; +	byte temp; + + +	live = 0; +	lmo = false; +	for (fv = 1; fv <= 3; fv ++) { +		if (stones[fv] > 0) { +			live += 1; +			r[live] = fv; +			sr[live] = stones[fv]; +		} +	} +	switch (live) { +	case 1: { /* Only one is free- so take 'em all */ +		row = r[1]; +		number = stones[r[1]]; +		return; +	} +	break; +	case 2: { /* Two are free- make them equal */ +		if (sr[1] > sr[2]) { +			row = r[1]; +			number = sr[1] - sr[2]; +			return; +		} else       /* T > b */ +			if (sr[1] < sr[2]) { +				row = r[2]; +				number = sr[2] - sr[1]; +				return; +			} else {     /* B > t */ +				row = r[1];    /* B = t... oh no, we've lost! */ +				number = 1; +				return; +			} +	} +	break; +	case 3: { /* Ho hum... this'll be difficult! */ +		/* There are three possible courses of action when we have 3 lines left: +		    1) Look for 2 equal lines, then take the odd one out. +		    2) Look for A.P.s, and capitalise on them. +		    3) Go any old where. */ + +		for (fv = 1; fv <= 3; fv ++) /* Look for 2 equal lines */ +			if (stones[other[fv][1]] == stones[other[fv][2]]) { +				row = fv;  /* this row */ number = stones[fv]; /* all of 'em */ return; +			} + +		do { +			sorted = true; +			for (fv = 1; fv <= 2; fv ++) +				if (sr[fv] > sr[fv + 1]) { +					temp = sr[fv + 1]; +					sr[fv + 1] = sr[fv]; +					sr[fv] = temp; +					temp = r[fv + 1]; +					r[fv + 1] = r[fv]; +					r[fv] = temp; +					sorted = false; +				} +		} while (!sorted); +		/* Now we look for A.P.s ... */ +		for (fv = 1; fv <= 3; fv ++) { +			find_ap(fv, 1); /* there are 3 "1"s */ +			if (lmo)  return; /* cut-out */ +		} +		find_ap(1, 2); /* only "2" possible */ +		if (lmo)  return; + +		/* A.P. search must have failed- use the default move. */ +		row = r[3]; +		number = 1; +		return; +	} +	break; +	}  }  void play_nim()     /* Plays the game. Only procedure in this unit to   be declared in the interface section. */  { -    byte groi; - - if (dna.wonnim)  - {     /* Already won the game. */ -  dixi('Q',6); -  return; - } - - if (! dna.asked_dogfood_about_nim)  - { -   dixi('q',84); -   return; - } - - dixi('Q',3); - dna.playednim += 1; - dusk(); - oncandopageswap=false; - copypage(3,1-cp); /* Store old screen. */ groi=getpixel(0,0); - off(); - - setup(); - board(); - on(); - mousepage(3); - - do { -  startmove(); -  if (dogfoodsturn)  dogfood(); else takesome(); -  stones[row] -= number; -  show_changes(); - } while (!(stonesleft==0)); - endofgame(); /* Winning sequence is A1, B3, B1, C1, C1, btw. */ - - dusk(); off(); - oncandopageswap=true; - copypage(1-cp,3); /* Restore old screen. */ groi=getpixel(0,0); - on(); dawn(); - - if (dogfoodsturn)  - {     /* Dogfood won - as usual */ -  log_aside("He won."); -  if (dna.playednim==1)   /* Your first game */ -   dixi('Q',4); /* Goody! Play me again? */ -  else -   dixi('Q',5); /* Oh, look at that! I've won again! */ -  pennycheck(4); /* And you've just lost 4d! */ - } else - {     /* You won - strange! */ -  log_aside("You won."); -  dixi('Q',7); /* You won! Give us a lute! */ -  dna.obj[lute]=true; -  objectlist(); -  dna.wonnim=true; -  show_one(1); /* Show the settle with no lute on it. */ -  points(7); /* 7 points for winning! */ - } - - if (dna.playednim==1)  points(3);  /* 3 points for playing your 1st game. */ +	byte groi; + +	if (dna.wonnim) { +		/* Already won the game. */ +		dixi('Q', 6); +		return; +	} + +	if (! dna.asked_dogfood_about_nim) { +		dixi('q', 84); +		return; +	} + +	dixi('Q', 3); +	dna.playednim += 1; +	dusk(); +	oncandopageswap = false; +	copypage(3, 1 - cp); /* Store old screen. */ groi = getpixel(0, 0); +	off(); + +	setup(); +	board(); +	on(); +	mousepage(3); + +	do { +		startmove(); +		if (dogfoodsturn)  dogfood(); +		else takesome(); +		stones[row] -= number; +		show_changes(); +	} while (!(stonesleft == 0)); +	endofgame(); /* Winning sequence is A1, B3, B1, C1, C1, btw. */ + +	dusk(); +	off(); +	oncandopageswap = true; +	copypage(1 - cp, 3); /* Restore old screen. */ groi = getpixel(0, 0); +	on(); +	dawn(); + +	if (dogfoodsturn) { +		/* Dogfood won - as usual */ +		log_aside("He won."); +		if (dna.playednim == 1) /* Your first game */ +			dixi('Q', 4); /* Goody! Play me again? */ +		else +			dixi('Q', 5); /* Oh, look at that! I've won again! */ +		pennycheck(4); /* And you've just lost 4d! */ +	} else { +		/* You won - strange! */ +		log_aside("You won."); +		dixi('Q', 7); /* You won! Give us a lute! */ +		dna.obj[lute] = true; +		objectlist(); +		dna.wonnim = true; +		show_one(1); /* Show the settle with no lute on it. */ +		points(7); /* 7 points for winning! */ +	} + +	if (dna.playednim == 1)  points(3); /* 3 points for playing your 1st game. */  } -     /* No init part. */ +/* No init part. */  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/nimunit.h b/engines/avalanche/nimunit.h index 8919b1af3a..1397367d16 100644 --- a/engines/avalanche/nimunit.h +++ b/engines/avalanche/nimunit.h @@ -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 @@ -29,8 +29,8 @@  #define __nimunit_h__  #include "gyro.h" -  #include "Graph.h" -  /*#include "Crt.h"*/ +#include "Graph.h" +/*#include "Crt.h"*/  #include "pingo.h"  #include "visa.h"  #include "lucerna.h" @@ -39,7 +39,7 @@  namespace Avalanche { -  void play_nim(); +void play_nim();  } // End of namespace Avalanche. diff --git a/engines/avalanche/oldfiler.cpp b/engines/avalanche/oldfiler.cpp index c813f37648..581f68abfb 100644 --- a/engines/avalanche/oldfiler.cpp +++ b/engines/avalanche/oldfiler.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 @@ -34,251 +34,298 @@  namespace Avalanche {  const char more[] = " (more) "; -const string up = string('-')+'\30'+more+'\30'; -const string down = string('+')+'\31'+more+'\31'; +const string up = string('-') + '\30' + more + '\30'; +const string down = string('+') + '\31' + more + '\31';  const graphcursmasktype fletch = /* Mask 4 in Avalot */ -    {( -     (255,511,1023,2047,1023,4607,14591,31871,65031,65283,65281,65280,65280,65409,65473,65511), -     (0,10240,20480,24576,26624,17408,512,256,128,88,32,86,72,20,16,0)), -               0, -               0}; +{ +	( +	    (255, 511, 1023, 2047, 1023, 4607, 14591, 31871, 65031, 65283, 65281, 65280, 65280, 65409, 65473, 65511), +	    (0, 10240, 20480, 24576, 26624, 17408, 512, 256, 128, 88, 32, 86, 72, 20, 16, 0)), +	0, +	0 +};  string cdir; -matrix<0,2,1,18,varying_string<15> > info; -matrix<0,2,1,100,varying_string<15> > possible; +matrix<0, 2, 1, 18, varying_string<15> > info; +matrix<0, 2, 1, 100, varying_string<15> > possible;  byte fv; -array<0,2,byte> light,page_; -array<0,2,boolean> blank; -byte chtcode,where; +array<0, 2, byte> light, page_; +array<0, 2, boolean> blank; +byte chtcode, where;  string answer; -void split(string x) -{ -    byte fv; -; - x=copy(x,4,255); if (x=="")  {; blank[0]=true; return; } - x=x+'\\'; possible[0][1]="b\\"; fv=2; - while (pos("\\",x)!=0)  - {; -  possible[0][fv]=string('b')+copy(x,1,pos("\\",x)-1); fv += 1; -  x=copy(x,pos("\\",x)+1,255); - } - possible[0][fv-1]=""; +void split(string x) { +	byte fv; +	; +	x = copy(x, 4, 255); +	if (x == "")  { +		; +		blank[0] = true; +		return; +	} +	x = x + '\\'; +	possible[0][1] = "b\\"; +	fv = 2; +	while (pos("\\", x) != 0) { +		; +		possible[0][fv] = string('b') + copy(x, 1, pos("\\", x) - 1); +		fv += 1; +		x = copy(x, pos("\\", x) + 1, 255); +	} +	possible[0][fv - 1] = "";  } -void block(integer x1,integer y1,integer x2,integer y2, string x) -{; - bar(x1,y1,x2,y2); - setcolor( 9); outtextxy(x1+(x2-x1) / 2-1,y1+5,x); - setcolor(15); outtextxy(x1+(x2-x1) / 2+1,y1+6,x); +void block(integer x1, integer y1, integer x2, integer y2, string x) { +	; +	bar(x1, y1, x2, y2); +	setcolor(9); +	outtextxy(x1 + (x2 - x1) / 2 - 1, y1 + 5, x); +	setcolor(15); +	outtextxy(x1 + (x2 - x1) / 2 + 1, y1 + 6, x);  } -void message(string x) -{; - block(5,189,640,200,x); +void message(string x) { +	; +	block(5, 189, 640, 200, x);  } -void bigbar(byte x) -{; - bar(15+210*x,36,210+210*x,187); +void bigbar(byte x) { +	; +	bar(15 + 210 * x, 36, 210 + 210 * x, 187);  }  void getem(); -static void sub_getem(char prefix, string spec, byte attrib,byte infonum) -{ -    searchrec s; byte fv; -; - fv=0; - findfirst(spec,attrib,s); - while ((doserror==0) && (fv<100))  - {; -  if (((s.attr & attrib)>0) && (s.name[1]!='.'))  -  {;     /* circumvent inclusive searching! */ -   fv += 1; -   possible[infonum][fv]=string(prefix)+s.name; -  } -  findnext(s); - } - if (fv==0)  blank[infonum]=true; +static void sub_getem(char prefix, string spec, byte attrib, byte infonum) { +	searchrec s; +	byte fv; +	; +	fv = 0; +	findfirst(spec, attrib, s); +	while ((doserror == 0) && (fv < 100)) { +		; +		if (((s.attr & attrib) > 0) && (s.name[1] != '.')) { +			;     /* circumvent inclusive searching! */ +			fv += 1; +			possible[infonum][fv] = string(prefix) + s.name; +		} +		findnext(s); +	} +	if (fv == 0)  blank[infonum] = true;  }  void getem() -{; - message("Please wait... scanning directory..."); - sub_getem('a',"*.asg",archive+hidden,1); /* Scan for .ASG files */ - sub_getem('f',"*.*",directory,2); /* Scan for sub-directories */ +{ +	; +	message("Please wait... scanning directory..."); +	sub_getem('a', "*.asg", archive + hidden, 1); /* Scan for .ASG files */ +	sub_getem('f', "*.*", directory, 2); /* Scan for sub-directories */  } -void minisc(string& x)          /* Converts to lower-case */ -{ -    byte fv; -; - for( fv=1; fv <= length(x); fv ++) -  if ((x[fv]>='A') && (x[fv]<='Z'))  x[fv] += 32; +void minisc(string &x) {        /* Converts to lower-case */ +	byte fv; +	; +	for (fv = 1; fv <= length(x); fv ++) +		if ((x[fv] >= 'A') && (x[fv] <= 'Z'))  x[fv] += 32;  } -void showall() -{ -    byte fv,ff; -; - for( fv=0; fv <= 2; fv ++) - {; -  bigbar(fv); /* blank out anything else */ -  if (blank[fv])  -  {;     /* nothing here at all */ -/*   setcolor(14); -   outtextxy(113+210*fv,43,'(Nothing here!)'); */ -   setcolor(14); settextstyle(0,0,2); -   outtextxy(113+210*fv, 77,"Nothing"); -   outtextxy(113+210*fv,100,"here!"); -   settextstyle(0,0,1); -  } else -  {;     /* something here- what? */ -   setcolor(11); -   for( ff=0; ff <= 15; ff ++) -   {; -    info[fv][ff+2]=possible[fv][page_[fv]*15+ff+1]; minisc(info[fv][ff+2]); -   } -   if (page_[fv]>0)  info[fv][1]=up; else info[fv][1]=""; -   if (possible[fv][page_[fv]*15+17]!="")  -    info[fv][18]=down; else info[fv][18]=""; -   for( ff=1; ff <= 18; ff ++) -   {; -    outtextxy(113+210*fv,35+ff*8,copy(info[fv][ff],2,255)); -   } -  } - } - block(5,12,640,22,cdir); +void showall() { +	byte fv, ff; +	; +	for (fv = 0; fv <= 2; fv ++) { +		; +		bigbar(fv); /* blank out anything else */ +		if (blank[fv]) { +			;     /* nothing here at all */ +			/*   setcolor(14); +			   outtextxy(113+210*fv,43,'(Nothing here!)'); */ +			setcolor(14); +			settextstyle(0, 0, 2); +			outtextxy(113 + 210 * fv, 77, "Nothing"); +			outtextxy(113 + 210 * fv, 100, "here!"); +			settextstyle(0, 0, 1); +		} else { +			;     /* something here- what? */ +			setcolor(11); +			for (ff = 0; ff <= 15; ff ++) { +				; +				info[fv][ff + 2] = possible[fv][page_[fv] * 15 + ff + 1]; +				minisc(info[fv][ff + 2]); +			} +			if (page_[fv] > 0)  info[fv][1] = up; +			else info[fv][1] = ""; +			if (possible[fv][page_[fv] * 15 + 17] != "") +				info[fv][18] = down; +			else info[fv][18] = ""; +			for (ff = 1; ff <= 18; ff ++) { +				; +				outtextxy(113 + 210 * fv, 35 + ff * 8, copy(info[fv][ff], 2, 255)); +			} +		} +	} +	block(5, 12, 640, 22, cdir);  } -void changedir(string x) -{; +void changedir(string x) { +	; - chdir(x); getdir(0,cdir); +	chdir(x); +	getdir(0, cdir);  } -void drawup() -{ -    integer gd; -; - block( 15, 0,630,10,"Choose an .ASG file to load or save."); - block( 15,24,210,34,"Looking back:"); - block(225,24,420,34,"Here:"); - block(435,24,630,34,"Looking forwards:"); - for( gd=0; gd <= 2; gd ++) bigbar(gd); /* just to tide us over the wait... */ - showall(); +void drawup() { +	integer gd; +	; +	block(15, 0, 630, 10, "Choose an .ASG file to load or save."); +	block(15, 24, 210, 34, "Looking back:"); +	block(225, 24, 420, 34, "Here:"); +	block(435, 24, 630, 34, "Looking forwards:"); +	for (gd = 0; gd <= 2; gd ++) bigbar(gd); /* just to tide us over the wait... */ +	showall();  } -void setup() -{; - settextjustify(1,1); setfillstyle(1,1); - fillchar(blank,sizeof(blank),'\0'); fillchar( info,sizeof( info),'\0'); - fillchar(possible,sizeof(possible),'\0'); - fillchar( page_,sizeof( page_),'\0'); - split(cdir); getem(); drawup(); +void setup() { +	; +	settextjustify(1, 1); +	setfillstyle(1, 1); +	fillchar(blank, sizeof(blank), '\0'); +	fillchar(info, sizeof(info), '\0'); +	fillchar(possible, sizeof(possible), '\0'); +	fillchar(page_, sizeof(page_), '\0'); +	split(cdir); +	getem(); +	drawup();  } -void setup1() -{ -    integer gd,gm; -; - gd=3; gm=0; initgraph(gd,gm,""); answer=""; - getdir(0,cdir); resetmouse; setgraphicscursor(fletch); - fillchar(light,sizeof(light),'\0'); - setup(); +void setup1() { +	integer gd, gm; +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	answer = ""; +	getdir(0, cdir); +	resetmouse; +	setgraphicscursor(fletch); +	fillchar(light, sizeof(light), '\0'); +	setup();  } -void clickwait() -{ - const array<1,4,varying_string<30> > msg =  -  {{"change to another drive.", -   "return to a lower directory.", -   "use the file named.", -   "enter a sub-directory."}}; -    byte oldcht; /* Click Here To... code */ -; - showmousecursor; oldcht=177; - do { -  if (mousey<38)  chtcode=1; else -   switch (mousex) { -    case 0 ... 210: chtcode=2; break; -    case 211 ... 421: chtcode=3; break; -    default: chtcode=4; -   } -  if (oldcht!=chtcode)  -  {; -   hidemousecursor; message(string("Click here to ")+msg[chtcode]); -   showmousecursor; oldcht=chtcode; -  } - } while (!leftmousekeypressed); - hidemousecursor; where=((mousey-39) / 8)+1; +void clickwait() { +	const array<1, 4, varying_string<30> > msg = { +		{ +			"change to another drive.", +			"return to a lower directory.", +			"use the file named.", +			"enter a sub-directory." +		} +	}; +	byte oldcht; /* Click Here To... code */ +	; +	showmousecursor; +	oldcht = 177; +	do { +		if (mousey < 38)  chtcode = 1; +		else +			switch (mousex) { +			case 0 ... 210: +				chtcode = 2; +				break; +			case 211 ... 421: +				chtcode = 3; +				break; +			default: +				chtcode = 4; +			} +		if (oldcht != chtcode) { +			; +			hidemousecursor; +			message(string("Click here to ") + msg[chtcode]); +			showmousecursor; +			oldcht = chtcode; +		} +	} while (!leftmousekeypressed); +	hidemousecursor; +	where = ((mousey - 39) / 8) + 1;  } -void blip() -{; - sound(32); delay(3); nosound; +void blip() { +	; +	sound(32); +	delay(3); +	nosound;  } -void do_cht() -{ -    char r; byte fv; string x; -; - if (chtcode==1)  - {;     /* change drives */ -  message("Enter the drive letter (e.g. A)..."); -  r=readkey(); -  changedir(string(r)+':'); setup(); - } else - {; -  x=info[chtcode-2][where]; r=x[1]; x=copy(x,2,255); -  switch (r) { -   case 'b': {; /* back some dirs */ -         if (x=='\\')  x=""; -         for( fv=where-1; fv >= 3; fv --) -          x=copy(info[0][fv],2,255)+'\\'+x; -         changedir(string('\\')+x); -         setup(); -        } -        break; -   case 'f': {; /* sub-directory */ -         changedir(x); -         setup(); -        } -        break; -   case '+': {; /* scroll one panel down */ -         page_[chtcode-2] += 1; -         drawup(); -        } -        break; -   case '-': {; /* scroll one panel up */ -         page_[chtcode-2] -= 1; -         drawup(); -        } -        break; -   case 'a': answer=x; break; -  } - } +void do_cht() { +	char r; +	byte fv; +	string x; +	; +	if (chtcode == 1) { +		;     /* change drives */ +		message("Enter the drive letter (e.g. A)..."); +		r = readkey(); +		changedir(string(r) + ':'); +		setup(); +	} else { +		; +		x = info[chtcode - 2][where]; +		r = x[1]; +		x = copy(x, 2, 255); +		switch (r) { +		case 'b': { +			; /* back some dirs */ +			if (x == '\\')  x = ""; +			for (fv = where - 1; fv >= 3; fv --) +				x = copy(info[0][fv], 2, 255) + '\\' + x; +			changedir(string('\\') + x); +			setup(); +		} +		break; +		case 'f': { +			; /* sub-directory */ +			changedir(x); +			setup(); +		} +		break; +		case '+': { +			; /* scroll one panel down */ +			page_[chtcode - 2] += 1; +			drawup(); +		} +		break; +		case '-': { +			; /* scroll one panel up */ +			page_[chtcode - 2] -= 1; +			drawup(); +		} +		break; +		case 'a': +			answer = x; +			break; +		} +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - setup1(); - do { -  clickwait(); -  do_cht(); - } while (!(answer!="")); - if (length(cdir)>3)  cdir=cdir+'\\'; - answer=cdir+answer; - closegraph(); - output << "Routine completed." << NL; - output << "Answer: " << answer << NL; - output << "Hit Enter:"; input >> NL; -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	setup1(); +	do { +		clickwait(); +		do_cht(); +	} while (!(answer != "")); +	if (length(cdir) > 3)  cdir = cdir + '\\'; +	answer = cdir + answer; +	closegraph(); +	output << "Routine completed." << NL; +	output << "Answer: " << answer << NL; +	output << "Hit Enter:"; +	input >> NL; +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/oldhighs.cpp b/engines/avalanche/oldhighs.cpp index eaee8eb502..b53768f893 100644 --- a/engines/avalanche/oldhighs.cpp +++ b/engines/avalanche/oldhighs.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 @@ -31,46 +31,47 @@  namespace Avalanche {  struct scoretype { -             varying_string<39> name; -             word score; +	varying_string<39> name; +	word score;  };  struct ratetype { -            varying_string<10> rank; -            word lowest; +	varying_string<10> rank; +	word lowest;  };  struct tabletype { -             array<1,12,scoretype> a; -             byte light; +	array<1, 12, scoretype> a; +	byte light;  }; -const array<1,9,ratetype> ratings =  - {{{"Rubbish",    0}, -  {"Beginner",   1}, -  {"Poor",       10}, -  {"Average",    30}, -  {"Fair",       50}, -  {"Not bad",    70}, -  {"Good",       100}, -  {"Great",      200}, -  {"Fantastic!", 330}}}; - -integer gd,gm; +const array<1, 9, ratetype> ratings = { +	{	{"Rubbish",    0}, +		{"Beginner",   1}, +		{"Poor",       10}, +		{"Average",    30}, +		{"Fair",       50}, +		{"Not bad",    70}, +		{"Good",       100}, +		{"Great",      200}, +		{"Fantastic!", 330} +	} +}; + +integer gd, gm;  tabletype table; -byte ratingname(word x) -{ -    byte fv; -byte ratingname_result; -; - for( fv=9; fv >= 1; fv --) -  if (x>=ratings[fv].lowest)  -  {; -   ratingname_result=fv; -   return ratingname_result; -  }    /* bad style */ -return ratingname_result; +byte ratingname(word x) { +	byte fv; +	byte ratingname_result; +	; +	for (fv = 9; fv >= 1; fv --) +		if (x >= ratings[fv].lowest) { +			; +			ratingname_result = fv; +			return ratingname_result; +		}    /* bad style */ +	return ratingname_result;  }  void title(); @@ -78,199 +79,235 @@ void title();  const string message = "A v a l o t  :  H i g h - S c o r e s"; -static void sayfast(integer x,integer y) -{ - integer anchor; byte fv; -; - anchor=-296; - for( fv=1; fv <= length(message); fv ++) - {; -  if (message[fv-1]!='\40')  outtextxy(x+anchor,y-8,message[fv-1]); -  anchor += 16; - } +static void sayfast(integer x, integer y) { +	integer anchor; +	byte fv; +	; +	anchor = -296; +	for (fv = 1; fv <= length(message); fv ++) { +		; +		if (message[fv - 1] != '\40')  outtextxy(x + anchor, y - 8, message[fv - 1]); +		anchor += 16; +	}  } -void title() -{ - const array<0,6,byte> shades =  -  {{blue,lightgray,darkgray,blue,lightblue,blue,darkgray}}; - byte x; - integer len; - -; - settextstyle(0,0,2); /*settextjustify(1,1);*/ - len=textheight(message); - for( x=6; x >= 0; x --) - {; -  setcolor(shades[x]); -  sayfast(320-x*2,20-x); -  if (x>0)  -  {; -   sayfast(320+x*2,20-x); -   sayfast(320+x*2,20+x); -   sayfast(320-x*2,20+x); -  } - } +void title() { +	const array<0, 6, byte> shades = +	{{blue, lightgray, darkgray, blue, lightblue, blue, darkgray}}; +	byte x; +	integer len; + +	; +	settextstyle(0, 0, 2); /*settextjustify(1,1);*/ +	len = textheight(message); +	for (x = 6; x >= 0; x --) { +		; +		setcolor(shades[x]); +		sayfast(320 - x * 2, 20 - x); +		if (x > 0) { +			; +			sayfast(320 + x * 2, 20 - x); +			sayfast(320 + x * 2, 20 + x); +			sayfast(320 - x * 2, 20 + x); +		} +	}  } -void newtable() -{ - const array<1,12,varying_string<15> > names =  -  {{"Mike","Liz","Thomas","Mark","Mandy","Andrew","Lucy Tryphena","", -   "Thanks to all","who helped...","","Have fun!"}}; -    byte fv; -; - fillchar(table,sizeof(table),'\261'); - for( fv=1; fv <= 12; fv ++) -  { -  scoretype& with = table.a[fv];  -  ; -   with.name=names[fv]; -   with.score=193-fv*16; -  } - table.light=1; +void newtable() { +	const array<1, 12, varying_string<15> > names = { +		{ +			"Mike", "Liz", "Thomas", "Mark", "Mandy", "Andrew", "Lucy Tryphena", "", +			"Thanks to all", "who helped...", "", "Have fun!" +		} +	}; +	byte fv; +	; +	fillchar(table, sizeof(table), '\261'); +	for (fv = 1; fv <= 12; fv ++) { +		scoretype &with = table.a[fv]; +		; +		with.name = names[fv]; +		with.score = 193 - fv * 16; +	} +	table.light = 1;  } -string strf(longint x)           /* From Gyro. Delete when integrated. */ -{ -    string q; -string strf_result; -; - str(x,q); strf_result=q; -return strf_result; +string strf(longint x) {         /* From Gyro. Delete when integrated. */ +	string q; +	string strf_result; +	; +	str(x, q); +	strf_result = q; +	return strf_result;  } -void sparkle(integer x,integer y, string z) -{; - setcolor(cyan);  outtextxy(x-1,y-1,z); - setcolor(blue);  outtextxy(x+1,y+1,z); - setcolor(white); outtextxy(x  ,y  ,z); +void sparkle(integer x, integer y, string z) { +	; +	setcolor(cyan); +	outtextxy(x - 1, y - 1, z); +	setcolor(blue); +	outtextxy(x + 1, y + 1, z); +	setcolor(white); +	outtextxy(x  , y  , z);  } -void drawtable() -{ -    byte fv,last,now; -; - setfillstyle(1,8); - bar(  0, 40,105, 58); bar(110, 40,400, 58); - bar(405, 40,490, 58); bar(495, 40,640, 58); - bar(  5, 60,105,181); bar(110, 60,400,181); - bar(405, 60,490,181); bar(495, 60,635,181); - bar(  0,185,640,190); - setcolor(lightred); settextstyle(0,0,1); settextjustify(0,0); - outtextxy( 45,55,"Number:"); - outtextxy(120,55,"Name:"); - outtextxy(420,55,"Score:"); - outtextxy(500,55,"Rating:"); - setcolor(white); last=177; - for( fv=1; fv <= 12; fv ++) -  { -  scoretype& with = table.a[fv];  -  ; -   settextjustify(righttext,bottomtext); -   sparkle(100,60+fv*10,strf(fv)+'.'); -   sparkle(455,60+fv*10,strf(with.score)); -   if (fv==table.light)  sparkle(70,60+fv*10,string("ÍÍ")+'\20'); - -   settextjustify(lefttext,bottomtext); -   sparkle(120,60+fv*10,with.name); -   now=ratingname(with.score); -   if (now!=last)  -    sparkle(510,60+fv*10,ratings[ratingname(with.score)].rank); -   else -    sparkle(517,57+fv*10,",,"); -   last=now; -  } +void drawtable() { +	byte fv, last, now; +	; +	setfillstyle(1, 8); +	bar(0, 40, 105, 58); +	bar(110, 40, 400, 58); +	bar(405, 40, 490, 58); +	bar(495, 40, 640, 58); +	bar(5, 60, 105, 181); +	bar(110, 60, 400, 181); +	bar(405, 60, 490, 181); +	bar(495, 60, 635, 181); +	bar(0, 185, 640, 190); +	setcolor(lightred); +	settextstyle(0, 0, 1); +	settextjustify(0, 0); +	outtextxy(45, 55, "Number:"); +	outtextxy(120, 55, "Name:"); +	outtextxy(420, 55, "Score:"); +	outtextxy(500, 55, "Rating:"); +	setcolor(white); +	last = 177; +	for (fv = 1; fv <= 12; fv ++) { +		scoretype &with = table.a[fv]; +		; +		settextjustify(righttext, bottomtext); +		sparkle(100, 60 + fv * 10, strf(fv) + '.'); +		sparkle(455, 60 + fv * 10, strf(with.score)); +		if (fv == table.light)  sparkle(70, 60 + fv * 10, string("ÍÍ") + '\20'); + +		settextjustify(lefttext, bottomtext); +		sparkle(120, 60 + fv * 10, with.name); +		now = ratingname(with.score); +		if (now != last) +			sparkle(510, 60 + fv * 10, ratings[ratingname(with.score)].rank); +		else +			sparkle(517, 57 + fv * 10, ",,"); +		last = now; +	}  } -void message1(string x) -{; - setfillstyle(1,8); bar(0,190,640,200); - settextjustify(1,1); sparkle(320,195,x); +void message1(string x) { +	; +	setfillstyle(1, 8); +	bar(0, 190, 640, 200); +	settextjustify(1, 1); +	sparkle(320, 195, x);  } -void sorthst() -{ -    byte fv; boolean ok; scoretype temp; -; - do { -  ok=true; -  for( fv=1; fv <= 11; fv ++) -    if (table.a[fv].score<table.a[fv+1].score)  -    {; -     temp=table.a[fv]; table.a[fv]=table.a[fv+1]; table.a[fv+1]=temp; /* swap 'em */ -     table.light=fv; /* must be- that's the only unsorted one */ -     ok=false;  /* So, we try again. */ -    } - } while (!ok); +void sorthst() { +	byte fv; +	boolean ok; +	scoretype temp; +	; +	do { +		ok = true; +		for (fv = 1; fv <= 11; fv ++) +			if (table.a[fv].score < table.a[fv + 1].score) { +				; +				temp = table.a[fv]; +				table.a[fv] = table.a[fv + 1]; +				table.a[fv + 1] = temp; /* swap 'em */ +				table.light = fv; /* must be- that's the only unsorted one */ +				ok = false; /* So, we try again. */ +			} +	} while (!ok);  }  void entername(); -static integer x,y;  +static integer x, y; -static void cursor(byte col) -{; - setcolor(col); - outtextxy(x,y,"?"); +static void cursor(byte col) { +	; +	setcolor(col); +	outtextxy(x, y, "?");  } -void entername() -{ -    varying_string<34> i;char r; integer counter; byte flash; - -; - y=60+table.light*10; i=""; settextjustify(2,0); counter=999; flash=0; - do { -  x=128+length(i)*8; -  do { -   counter += 1; -   if (counter==1000)  -   {; -    cursor(4+flash*10); -    flash=1-flash; -    counter=0; -   } -   delay(1); -  } while (!keypressed()); -  cursor(8); -  sound(17177); r=readkey(); nosound; -  if (r=='\10')  {; -   if (i[0]>'\0')  {; -    bar(x-17,y-10,x-8,y); -    i[0] -= 1; sparkle(x-16,y,i[length(i)]); -   } -  } else {; -   if ((i[0]<'\42') && (r!='\15'))  {; -    sparkle(x,y,r); -    i=i+r; -   } -  } -  counter=999; - } while (!(r=='\15')); +void entername() { +	varying_string<34> i; +	char r; +	integer counter; +	byte flash; + +	; +	y = 60 + table.light * 10; +	i = ""; +	settextjustify(2, 0); +	counter = 999; +	flash = 0; +	do { +		x = 128 + length(i) * 8; +		do { +			counter += 1; +			if (counter == 1000) { +				; +				cursor(4 + flash * 10); +				flash = 1 - flash; +				counter = 0; +			} +			delay(1); +		} while (!keypressed()); +		cursor(8); +		sound(17177); +		r = readkey(); +		nosound; +		if (r == '\10')  { +			; +			if (i[0] > '\0')  { +				; +				bar(x - 17, y - 10, x - 8, y); +				i[0] -= 1; +				sparkle(x - 16, y, i[length(i)]); +			} +		} else { +			; +			if ((i[0] < '\42') && (r != '\15'))  { +				; +				sparkle(x, y, r); +				i = i + r; +			} +		} +		counter = 999; +	} while (!(r == '\15'));  } -void newscore(word sc) -{; - { scoretype& with = table.a[12];  -  if (sc>with.score)  -  {; -   with.name=""; with.score=sc; table.light=10; sorthst(); drawtable(); -   message1("Well done! Please enter your name, then press Return..."); -   entername(); -  } else drawtable();} /* too low for score */ - message1("Press Space to continue..."); - do {; } while (!(keypressed() && (readkey()=='\40'))); +void newscore(word sc) { +	; +	{ +		scoretype &with = table.a[12]; +		if (sc > with.score) { +			; +			with.name = ""; +			with.score = sc; +			table.light = 10; +			sorthst(); +			drawtable(); +			message1("Well done! Please enter your name, then press Return..."); +			entername(); +		} else drawtable(); +	} /* too low for score */ +	message1("Press Space to continue..."); +	do { +		; +	} while (!(keypressed() && (readkey() == '\40')));  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,""); - title(); - newtable(); - newscore(/*177*/0); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	title(); +	newtable(); +	newscore(/*177*/0); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/oldincln.cpp b/engines/avalanche/oldincln.cpp index a364cbcfdd..89bc907051 100644 --- a/engines/avalanche/oldincln.cpp +++ b/engines/avalanche/oldincln.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 @@ -51,227 +51,266 @@ const integer bug_notyesorno = 251;  byte fv;  char t;  string bugline; -boolean usingp,usingl; -boolean zoomy,numlockhold; +boolean usingp, usingl; +boolean zoomy, numlockhold;  boolean filename_specified; -string inihead,initail;  /* For reading the .INI file. */ - - -void linebug(byte which) -{; - output << "AVALOT : "; - switch (which) { -  case bug_twonames : output << "You may only specify ONE filename." << NL; break; -  case bug_pandl : output << "/p and /l cannot be used together." << NL; break; -  case bug_weirdswitch : output << "Unknown switch (\"" << bugline <<  -                       "\"). Type AVALOT /? for a list of switches." << NL; -                       break; -  case bug_invalidini: output << "Invalid line in AVALOT.INI (\"" << bugline << "\")" << NL; break; -  case bug_notyesorno: output << "Error in AVALOT.INI: \"" << inihead << "\" must be \"yes\" or \"no.\"" << NL; break; - } - exit(which); +string inihead, initail; /* For reading the .INI file. */ + + +void linebug(byte which) { +	; +	output << "AVALOT : "; +	switch (which) { +	case bug_twonames : +		output << "You may only specify ONE filename." << NL; +		break; +	case bug_pandl : +		output << "/p and /l cannot be used together." << NL; +		break; +	case bug_weirdswitch : +		output << "Unknown switch (\"" << bugline << +		       "\"). Type AVALOT /? for a list of switches." << NL; +		break; +	case bug_invalidini: +		output << "Invalid line in AVALOT.INI (\"" << bugline << "\")" << NL; +		break; +	case bug_notyesorno: +		output << "Error in AVALOT.INI: \"" << inihead << "\" must be \"yes\" or \"no.\"" << NL; +		break; +	} +	exit(which);  } -void syntax() -{; - assign(output,""); rewrite(output); - output << NL; - output << string("Lord Avalot d'Argent\n\n(c) ")+copyright+" Mark, Mike and Thomas Thurman." << NL; - output << string("~~~~~~~~~~~~~~~~~~~~~\n\n")+vernum << NL; - output << NL; - output << "Syntax:" << NL; - output << "\n/?\ndisplays this screen," << NL; - output << "\n/O\noverrides EGA check," << NL; - output << "\n/L<f>\nlogs progress to <f>, default AVVY.LOG," << NL; - output << "\n/P<x>\nlogs with Epson codes to <x>, default PRN," << NL; - output << "\n/Q\ncancels sound effects," << NL; - output << "\n/S\ndisables Soundblaster," << NL; - output << "\n/Z\ngoes straight into the game." << NL; - output << NL; - output << "\n\n\n\n\n\n\n... Have fun!" << NL; - exit(177); +void syntax() { +	; +	assign(output, ""); +	rewrite(output); +	output << NL; +	output << string("Lord Avalot d'Argent\n\n(c) ") + copyright + " Mark, Mike and Thomas Thurman." << NL; +	output << string("~~~~~~~~~~~~~~~~~~~~~\n\n") + vernum << NL; +	output << NL; +	output << "Syntax:" << NL; +	output << "\n/?\ndisplays this screen," << NL; +	output << "\n/O\noverrides EGA check," << NL; +	output << "\n/L<f>\nlogs progress to <f>, default AVVY.LOG," << NL; +	output << "\n/P<x>\nlogs with Epson codes to <x>, default PRN," << NL; +	output << "\n/Q\ncancels sound effects," << NL; +	output << "\n/S\ndisables Soundblaster," << NL; +	output << "\n/Z\ngoes straight into the game." << NL; +	output << NL; +	output << "\n\n\n\n\n\n\n... Have fun!" << NL; +	exit(177);  } -void upstr(string& x) -{ -    byte fv; -; - for( fv=1; fv <= length(x); fv ++) x[fv]=upcase(x[fv]); +void upstr(string &x) { +	byte fv; +	; +	for (fv = 1; fv <= length(x); fv ++) x[fv] = upcase(x[fv]);  } -boolean yesno() -{boolean yesno_result; -; - if (initail=="YES")  yesno_result=true; else -  if (initail=="NO")  yesno_result=false; else -   linebug(bug_notyesorno); -return yesno_result; +boolean yesno() { +	boolean yesno_result; +	; +	if (initail == "YES")  yesno_result = true; +	else if (initail == "NO")  yesno_result = false; +	else +		linebug(bug_notyesorno); +	return yesno_result;  } -void ini_parse() -{; - upstr(inihead); - upstr(initail); - - if (inihead=="QUIET")  soundfx=! yesno(); else -  if (inihead=="ZOOMYSTART")  zoomy=yesno(); else -   if (inihead=="NUMLOCKHOLD")  numlockhold=yesno(); else -    if (inihead=="LOADFIRST")  filetoload=initail; else -     if (inihead=="OVERRIDEEGACHECK")  cl_override=yesno(); else -      if (inihead=="KEYBOARDCLICK")  keyboardclick=yesno(); +void ini_parse() { +	; +	upstr(inihead); +	upstr(initail); + +	if (inihead == "QUIET")  soundfx = ! yesno(); +	else if (inihead == "ZOOMYSTART")  zoomy = yesno(); +	else if (inihead == "NUMLOCKHOLD")  numlockhold = yesno(); +	else if (inihead == "LOADFIRST")  filetoload = initail; +	else if (inihead == "OVERRIDEEGACHECK")  cl_override = yesno(); +	else if (inihead == "KEYBOARDCLICK")  keyboardclick = yesno();  } -void strip_ini() -{ -    byte fv; -; - if (inihead=="")  return; +void strip_ini() { +	byte fv; +	; +	if (inihead == "")  return; - /* Firstly, delete any comments. */ - fv=pos(";",inihead); - if (fv>0)  Delete(inihead,fv,255); +	/* Firstly, delete any comments. */ +	fv = pos(";", inihead); +	if (fv > 0)  Delete(inihead, fv, 255); - /* Lose the whitespace... */ +	/* Lose the whitespace... */ - while (inihead[length(inihead)]==' ')  inihead[0] -= 1; - while ((inihead!="") && (inihead[1]==' '))  Delete(inihead,1,1); +	while (inihead[length(inihead)] == ' ')  inihead[0] -= 1; +	while ((inihead != "") && (inihead[1] == ' '))  Delete(inihead, 1, 1); - /* It's possible that now we'll end up with a blank line. */ +	/* It's possible that now we'll end up with a blank line. */ - if ((inihead=="") || (inihead[1]=='['))  return; +	if ((inihead == "") || (inihead[1] == '['))  return; - fv=pos("=",inihead); +	fv = pos("=", inihead); - if (fv==0)  - {;     /* No "="! Weird! */ -  bugline=inihead; -  linebug(bug_invalidini); - } +	if (fv == 0) { +		;     /* No "="! Weird! */ +		bugline = inihead; +		linebug(bug_invalidini); +	} - initail=copy(inihead,fv+1,255); - inihead[0]=chr(fv-1); +	initail = copy(inihead, fv + 1, 255); +	inihead[0] = chr(fv - 1);  } -void load_ini() -{ -    text ini; -; - assign(ini,"AVALOT.INI"); - reset(ini); - - while (! eof(ini))  - {; -  ini >> inihead >> NL; -  strip_ini(); -  if (inihead!="")  ini_parse(); - } - - close(ini); +void load_ini() { +	text ini; +	; +	assign(ini, "AVALOT.INI"); +	reset(ini); + +	while (! eof(ini)) { +		; +		ini >> inihead >> NL; +		strip_ini(); +		if (inihead != "")  ini_parse(); +	} + +	close(ini);  }  void parse(string x);  static string arg; -static string getarg(string otherwis) -{string getarg_result; -; - if (arg=="")  getarg_result=otherwis; else getarg_result=""; -return getarg_result; +static string getarg(string otherwis) { +	string getarg_result; +	; +	if (arg == "")  getarg_result = otherwis; +	else getarg_result = ""; +	return getarg_result;  }  void parse(string x) -{; - switch (x[1]) { -  case '/':case '-': {; -            arg=copy(x,3,255); -            switch (upcase(x[2])) { -             case '?': syntax(); break; -             case 'O': cl_override=true; break; -             case 'L': if (! usingp)  -                  {; -                   log_setup(getarg("avvy.log"),false); -                   usingl=true; -                  } else {; close(logfile); linebug(bug_pandl); } -                  break; -             case 'P': if (! usingl)  -                  {; -                   log_setup(getarg("prn"),true); -                   usingp=true; -                  } else {; close(logfile); linebug(bug_pandl); } -                  break; -             case 'Q': soundfx=false; break; -             case 'Z': zoomy=true; break; -             case 'K': keyboardclick=true; break; -             case 'D': demo=true; break; -             default: {; -              bugline=x; -              linebug(bug_weirdswitch); -             } -            } -           } -           break; -  case '*': {; -        inihead=copy(x,2,255); -        strip_ini(); -        if (inihead!="")  ini_parse(); -       } -       break; -  default: {; /* filename */ -        if (filename_specified)  -         linebug(bug_twonames); -        else -         filetoload=x; -        filename_specified=true; -       } - } +{ +	; +	switch (x[1]) { +	case '/': +	case '-': { +		; +		arg = copy(x, 3, 255); +		switch (upcase(x[2])) { +		case '?': +			syntax(); +			break; +		case 'O': +			cl_override = true; +			break; +		case 'L': +			if (! usingp) { +				; +				log_setup(getarg("avvy.log"), false); +				usingl = true; +			} else { +				; +				close(logfile); +				linebug(bug_pandl); +			} +			break; +		case 'P': +			if (! usingl) { +				; +				log_setup(getarg("prn"), true); +				usingp = true; +			} else { +				; +				close(logfile); +				linebug(bug_pandl); +			} +			break; +		case 'Q': +			soundfx = false; +			break; +		case 'Z': +			zoomy = true; +			break; +		case 'K': +			keyboardclick = true; +			break; +		case 'D': +			demo = true; +			break; +		default: { +			; +			bugline = x; +			linebug(bug_weirdswitch); +		} +		} +	} +	break; +	case '*': { +		; +		inihead = copy(x, 2, 255); +		strip_ini(); +		if (inihead != "")  ini_parse(); +	} +	break; +	default: { +		; /* filename */ +		if (filename_specified) +			linebug(bug_twonames); +		else +			filetoload = x; +		filename_specified = true; +	} +	}  } -void not_through_bootstrap() -{ - output << "Avalot must be loaded through the bootstrap." << NL; - exit(0); +void not_through_bootstrap() { +	output << "Avalot must be loaded through the bootstrap." << NL; +	exit(0);  } -void get_storage_addr() -{ -    integer e; +void get_storage_addr() { +	integer e; - val(paramstr(2),storage_seg,e); if (e!=0)  not_through_bootstrap(); - val(paramstr(3),storage_ofs,e); if (e!=0)  not_through_bootstrap(); - skellern=storage_ofs+1; +	val(paramstr(2), storage_seg, e); +	if (e != 0)  not_through_bootstrap(); +	val(paramstr(3), storage_ofs, e); +	if (e != 0)  not_through_bootstrap(); +	skellern = storage_ofs + 1;  }  class unit_incline_initialize { -  public: unit_incline_initialize(); +public: +	unit_incline_initialize();  };  static unit_incline_initialize incline_constructor; -unit_incline_initialize::unit_incline_initialize() {; - filetoload=""; - usingl=false; - usingp=false; - logging=false; - cl_override=false; - soundfx=true; - zoomy=false; - numlockhold=false; - filename_specified=false; - keyboardclick=false; +unit_incline_initialize::unit_incline_initialize() { +	; +	filetoload = ""; +	usingl = false; +	usingp = false; +	logging = false; +	cl_override = false; +	soundfx = true; +	zoomy = false; +	numlockhold = false; +	filename_specified = false; +	keyboardclick = false; - load_ini(); +	load_ini(); - if ((paramcount<3) || -  ((paramstr(1)!="Go") && (paramstr(1)!="et")))  not_through_bootstrap(); +	if ((paramcount < 3) || +	        ((paramstr(1) != "Go") && (paramstr(1) != "et")))  not_through_bootstrap(); - reloaded=paramstr(1)=="et"; +	reloaded = paramstr(1) == "et"; - get_storage_addr(); +	get_storage_addr(); - for( fv=4; fv <= paramcount; fv ++) -  parse(paramstr(fv)); +	for (fv = 4; fv <= paramcount; fv ++) +		parse(paramstr(fv));  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/oldincln.h b/engines/avalanche/oldincln.h index 9590d66c4d..2e872e77bb 100644 --- a/engines/avalanche/oldincln.h +++ b/engines/avalanche/oldincln.h @@ -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 diff --git a/engines/avalanche/oldtrip.cpp b/engines/avalanche/oldtrip.cpp index 9a3476e82d..0c0665180e 100644 --- a/engines/avalanche/oldtrip.cpp +++ b/engines/avalanche/oldtrip.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 @@ -33,7 +33,7 @@                   TRIP4            Trippancy IV- "Trip Oop". */  #define __trip4_implementation__ -            /* Trippancy IV (Trip Oop) */ +/* Trippancy IV (Trip Oop) */  #include "oldtrip.h" @@ -44,432 +44,607 @@  namespace Avalanche { -void copier(integer x1,integer y1,integer x2,integer y2,integer x3,integer y3,integer x4,integer y4); +void copier(integer x1, integer y1, integer x2, integer y2, integer x3, integer y3, integer x4, integer y4); -static boolean dropin(integer xc,integer yc,integer x1,integer y1,integer x2,integer y2) +static boolean dropin(integer xc, integer yc, integer x1, integer y1, integer x2, integer y2)  /* Dropin returns True if the point xc,yc falls within the 1-2 rectangle. */ -{boolean dropin_result; -; - dropin_result=((xc>=x1) && (xc<=x2) && (yc>=y1) && (yc<=y2)); -return dropin_result; -} - - - -static integer lesser(integer a,integer b) -{integer lesser_result; -; - if (a<b)  lesser_result=a; else lesser_result=b; -return lesser_result; -} - - - -static integer greater(integer a,integer b) -{integer greater_result; -; - if (a>b)  greater_result=a; else greater_result=b; -return greater_result; -} - -void copier(integer x1,integer y1,integer x2,integer y2,integer x3,integer y3,integer x4,integer y4) - -{; - if (dropin(x3,y3,x1,y1,x2,y2) - || dropin(x3,y4,x1,y1,x2,y2) - || dropin(x4,y3,x1,y1,x2,y2) - || dropin(x4,y4,x1,y1,x2,y2))  - {;     /* Overlaps */ -  mblit(lesser(x1,x3),lesser(y1,y3),greater(x2,x4),greater(y2,y4),1,0); - } else - {;     /* Doesn't overlap- copy both of them seperately */ -  mblit(x3,y3,x4,y4,1,0); /* backwards- why not...? */ -  mblit(x1,y1,x2,y2,1,0); - } -} - -void loadtrip() -{ -    byte gm; -; - for( gm=1; gm <= numtr; gm ++) tr[gm].original(); - tr[1].init(0); -} - -byte checkfeet(integer x1,integer x2,integer oy,integer y, byte yl) -{ -    byte a,c; integer fv,ff; -byte checkfeet_result; -; - a=0; setactivepage(2); if (x1<0)  x1=0; if (x2>639)  x2=639; - if (oy<y)  -  for( fv=x1; fv <= x2; fv ++) -   for( ff=oy+yl; ff <= y+yl; ff ++) -   {; -    c=getpixel(fv,ff); -    if (c>a)  a=c; -   } else -  for( fv=x1; fv <= x2; fv ++) -   for( ff=y+yl; ff <= oy+yl; ff ++) -   {; -    c=getpixel(fv,ff); -    if (c>a)  a=c; -   } - checkfeet_result=a; setactivepage(1); -return checkfeet_result; -} - -void touchcol(byte tc); -static boolean bug;  - -static void fr(byte a,byte b) {; fliproom(a,b); bug=false; } - -void touchcol(byte tc) -{; - bug=true;  /* j.i.c. */ - switch (dna.room) { -  case 1: fr(2,3); break; -  case 2: {; /* main corridor */ -      switch (tc) { -       case 1: fr(3,1); break; /* to the other corridor */ -       case 2: fr(2,1); break; /* to this corridor! Fix this later... */ -      } -     } -     break; -  case 3: {; /* turn corridor */ -      switch (tc) { -       case 1: fr(2,1); break; /* to the other corridor */ -       case 2: fr(12,1); break; /* through Spludwick's door */ -      } -     } -     break; -  case 12: fr(3,2); break; - } - if (bug)  - {; -  setactivepage(0); -  display(string('\7')+"Unknown touchcolour ("+strf(tc)+')'+" in "+strf(dna.room) -   +'.'); setactivepage(1); tr[1].bounce(); - } -} - -triptype* triptype::init(byte spritenum) -{ -    integer gd,gm; word s; untyped_file f; varying_string<2> xx; byte sort,n; - word bigsize; pointer p,q; -; - str(spritenum,xx); assign(f,string("c:\\avalot\\sprite")+xx+".avd"); - reset(f,1); seek(f,59); - blockread(f,a,sizeof(a)); blockread(f,bigsize,2); - setactivepage(3); - for( sort=0; sort <= 1; sort ++) - {; -  mark(q); getmem(p,bigsize); -  blockread(f,p,bigsize); -  off; putimage(0,0,p,0); release(q); n=1; -  { adxtype& with = a;  -   for( gm=0; gm <= (with.num / with.seq)-1; gm ++) /* directions */ -    for( gd=0; gd <= with.seq-1; gd ++) /* steps */ -    {; -     getmem(pic[n][sort],a.size); /* grab the memory */ -     getimage((gm / 2)*(with.xl*6)+gd*with.xl,(gm % 2)*with.yl, -       (gm / 2)*(with.xl*6)+gd*with.xl+with.xl-1,(gm % 2)*with.yl+with.yl-1, -       pic[n][sort]); /* grab the pic */ -     n += 1; -   }} on; - } - close(f); setactivepage(0); - - x=0; y=0; quick=true; visible=false; getmem(behind,a.size); - homing=false; ix=0; iy=0; step=0; check_me=a.name=="Avalot"; -return this; -} - -void triptype::original() -{; - quick=false; -} - -void triptype::getback() -{; - tax=x; tay=y; - off; /*getimage(x,y,x+a.xl,y+a.yl,behind^);*/ - mblit(x,y,x+a.xl,y+a.yl,1,3); on; -} - -void triptype::andexor()  { -    byte picnum; /* Picnum, Picnic, what ye heck */ -; - picnum=face*a.seq+step+1; off; - putimage(x,y,pic[picnum][0],andput); - putimage(x,y,pic[picnum][1],xorput); on; +	boolean dropin_result; +	; +	dropin_result = ((xc >= x1) && (xc <= x2) && (yc >= y1) && (yc <= y2)); +	return dropin_result;  } -void triptype::turn(byte whichway) -{; - face=whichway; -} -void triptype::appear(integer wx,integer wy, byte wf) -{; - x=(wx / 8)*8; y=wy; ox=wx; oy=wy; turn(wf); visible=true; ix=0; iy=0; -} -void triptype::walk() -{ -    byte tc; -; - ox=x; oy=y; - if ((ix==0) && (iy==0))  return; - if (homing)  homestep(); - x=x+ix; y=y+iy; - if (check_me)  {; -  tc=checkfeet(x,x+a.xl,oy,y,a.yl); -  { void& with = magics[tc];  -   switch (op) { -    case exclaim: blip; break; -    case bounces: bounce(); break; -    case transport: fliproom(hi(data),lo(data)); break; -   }} - } -/* if x<0 then x:=0; else if x+a.xl>640 then x:=640-a.xl;*/ - if (y<0)  y=0;    /* else if y+a.yl>161 then y:=161-a.yl; */ - step += 1; if (step==a.seq)  step=0; getback(); -} - -void triptype::bounce() -{; setactivepage(1); putback(); x=ox; y=oy; stopwalk(); return; } - -void triptype::do_it() -{; - if (((ix!=0) || (iy!=0)) & (~ ddm_o.menunow))  - {; -  off; copier(ox,oy,ox+a.xl,oy+a.yl,x,y,x+a.xl,y+a.yl); -  putback(); on; - } -} - -void triptype::putback() -{; -/* putimage(tax,tay,behind^,0);*/ mblit(tax,tay,tax+a.xl,tay+a.yl,3,1); -} - -void triptype::walkto(integer xx,integer yy) -{; - speed(xx-x,yy-y); hx=xx; hy=yy; homing=true; -} - -void triptype::stophoming() -{; - homing=false; -} - -void triptype::homestep() -{ -    integer temp; -; - if ((hx==x) && (hy==y))  - {;     /* touching the target */ -  homing=false; return; - } - ix=0; iy=0; - if (hy!=y)  - {; -  temp=hy-y; if (temp>4)  iy=4; else if (temp<-4)  iy=-4; else iy=temp; - } - if (hx!=x)  - {; -  temp=hx-x; if (temp>4)  ix=4; else if (temp<-4)  ix=-4; else ix=temp; - } +static integer lesser(integer a, integer b) { +	integer lesser_result; +	; +	if (a < b)  lesser_result = a; +	else lesser_result = b; +	return lesser_result;  } -void triptype::speed(shortint xx,shortint yy) -{; - ix=xx; iy=yy; - if ((ix==0) && (iy==0))  return; /* no movement */ - if (ix==0)  - {;     /* No horz movement */ -  if (iy<0)  turn(up); else turn(down); - } else - {; -  if (ix<0)  turn(left); else turn(right); - } -} -void triptype::stopwalk() -{; - ix=0; iy=0; homing=false; -} -void triptype::chatter() -{; - talkx=x+a.xl / 2; talky=y; talkf=a.fgc; talkb=a.bgc; +static integer greater(integer a, integer b) { +	integer greater_result; +	; +	if (a > b)  greater_result = a; +	else greater_result = b; +	return greater_result;  } +void copier(integer x1, integer y1, integer x2, integer y2, integer x3, integer y3, integer x4, integer y4) -getsettype* getsettype::init() -{; - numleft=0;  /* initialise array pointer */ - return this; -} - -void remember(fieldtype r) -{; - numleft += 1; - gs[numleft]=r; -} - -void recall() -{void recall_result; -; - recall_result=gs[numleft]; - numleft -= 1; -return recall_result; -} - -void rwsp(byte t,byte r)  { -      const integer xs = 4; const integer ys = 2; -; - { triptype& with = tr[t];  switch (r) { -      case up: speed(  0,-ys); break; case down: speed(  0, ys); break; case left: speed(-xs,  0); break; -   case right: speed( xs,  0); break;   case ul: speed(-xs,-ys); break;   case ur: speed( xs,-ys); break; -      case dl: speed(-xs, ys); break;   case dr: speed( xs, ys); break; -  }} +	; +	if (dropin(x3, y3, x1, y1, x2, y2) +	        || dropin(x3, y4, x1, y1, x2, y2) +	        || dropin(x4, y3, x1, y1, x2, y2) +	        || dropin(x4, y4, x1, y1, x2, y2)) { +		;     /* Overlaps */ +		mblit(lesser(x1, x3), lesser(y1, y3), greater(x2, x4), greater(y2, y4), 1, 0); +	} else { +		;     /* Doesn't overlap- copy both of them seperately */ +		mblit(x3, y3, x4, y4, 1, 0); /* backwards- why not...? */ +		mblit(x1, y1, x2, y2, 1, 0); +	} +} + +void loadtrip() { +	byte gm; +	; +	for (gm = 1; gm <= numtr; gm ++) tr[gm].original(); +	tr[1].init(0); +} + +byte checkfeet(integer x1, integer x2, integer oy, integer y, byte yl) { +	byte a, c; +	integer fv, ff; +	byte checkfeet_result; +	; +	a = 0; +	setactivepage(2); +	if (x1 < 0)  x1 = 0; +	if (x2 > 639)  x2 = 639; +	if (oy < y) +		for (fv = x1; fv <= x2; fv ++) +			for (ff = oy + yl; ff <= y + yl; ff ++) { +				; +				c = getpixel(fv, ff); +				if (c > a)  a = c; +			} +	else +		for (fv = x1; fv <= x2; fv ++) +			for (ff = y + yl; ff <= oy + yl; ff ++) { +				; +				c = getpixel(fv, ff); +				if (c > a)  a = c; +			} +	checkfeet_result = a; +	setactivepage(1); +	return checkfeet_result;  } -void apped(byte trn,byte np) -{; - { - triptype& with = tr[trn];  - ; { void& with1 = peds[np];  appear(with.x-with.a.xl / 2,with.y-with.a.yl,dir);} -  rwsp(trn,tr[trn].face); } +void touchcol(byte tc); +static boolean bug; + +static void fr(byte a, byte b) { +	; +	fliproom(a, b); +	bug = false; +} + +void touchcol(byte tc) { +	; +	bug = true; /* j.i.c. */ +	switch (dna.room) { +	case 1: +		fr(2, 3); +		break; +	case 2: { +		; /* main corridor */ +		switch (tc) { +		case 1: +			fr(3, 1); +			break; /* to the other corridor */ +		case 2: +			fr(2, 1); +			break; /* to this corridor! Fix this later... */ +		} +	} +	break; +	case 3: { +		; /* turn corridor */ +		switch (tc) { +		case 1: +			fr(2, 1); +			break; /* to the other corridor */ +		case 2: +			fr(12, 1); +			break; /* through Spludwick's door */ +		} +	} +	break; +	case 12: +		fr(3, 2); +		break; +	} +	if (bug) { +		; +		setactivepage(0); +		display(string('\7') + "Unknown touchcolour (" + strf(tc) + ')' + " in " + strf(dna.room) +		        + '.'); +		setactivepage(1); +		tr[1].bounce(); +	} +} + +triptype *triptype::init(byte spritenum) { +	integer gd, gm; +	word s; +	untyped_file f; +	varying_string<2> xx; +	byte sort, n; +	word bigsize; +	pointer p, q; +	; +	str(spritenum, xx); +	assign(f, string("c:\\avalot\\sprite") + xx + ".avd"); +	reset(f, 1); +	seek(f, 59); +	blockread(f, a, sizeof(a)); +	blockread(f, bigsize, 2); +	setactivepage(3); +	for (sort = 0; sort <= 1; sort ++) { +		; +		mark(q); +		getmem(p, bigsize); +		blockread(f, p, bigsize); +		off; +		putimage(0, 0, p, 0); +		release(q); +		n = 1; +		{ +			adxtype &with = a; +			for (gm = 0; gm <= (with.num / with.seq) - 1; gm ++) /* directions */ +				for (gd = 0; gd <= with.seq - 1; gd ++) { /* steps */ +					; +					getmem(pic[n][sort], a.size); /* grab the memory */ +					getimage((gm / 2) * (with.xl * 6) + gd * with.xl, (gm % 2)*with.yl, +					         (gm / 2) * (with.xl * 6) + gd * with.xl + with.xl - 1, (gm % 2)*with.yl + with.yl - 1, +					         pic[n][sort]); /* grab the pic */ +					n += 1; +				} +		} +		on; +	} +	close(f); +	setactivepage(0); + +	x = 0; +	y = 0; +	quick = true; +	visible = false; +	getmem(behind, a.size); +	homing = false; +	ix = 0; +	iy = 0; +	step = 0; +	check_me = a.name == "Avalot"; +	return this; +} + +void triptype::original() { +	; +	quick = false; +} + +void triptype::getback() { +	; +	tax = x; +	tay = y; +	off; /*getimage(x,y,x+a.xl,y+a.yl,behind^);*/ +	mblit(x, y, x + a.xl, y + a.yl, 1, 3); +	on; +} + +void triptype::andexor() { +	byte picnum; /* Picnum, Picnic, what ye heck */ +	; +	picnum = face * a.seq + step + 1; +	off; +	putimage(x, y, pic[picnum][0], andput); +	putimage(x, y, pic[picnum][1], xorput); +	on; +} + +void triptype::turn(byte whichway) { +	; +	face = whichway; +} + +void triptype::appear(integer wx, integer wy, byte wf) { +	; +	x = (wx / 8) * 8; +	y = wy; +	ox = wx; +	oy = wy; +	turn(wf); +	visible = true; +	ix = 0; +	iy = 0; +} + +void triptype::walk() { +	byte tc; +	; +	ox = x; +	oy = y; +	if ((ix == 0) && (iy == 0))  return; +	if (homing)  homestep(); +	x = x + ix; +	y = y + iy; +	if (check_me)  { +		; +		tc = checkfeet(x, x + a.xl, oy, y, a.yl); +		{ +			void &with = magics[tc]; +			switch (op) { +			case exclaim: +				blip; +				break; +			case bounces: +				bounce(); +				break; +			case transport: +				fliproom(hi(data), lo(data)); +				break; +			} +		} +	} +	/* if x<0 then x:=0; else if x+a.xl>640 then x:=640-a.xl;*/ +	if (y < 0)  y = 0; /* else if y+a.yl>161 then y:=161-a.yl; */ +	step += 1; +	if (step == a.seq)  step = 0; +	getback(); +} + +void triptype::bounce() { +	; +	setactivepage(1); +	putback(); +	x = ox; +	y = oy; +	stopwalk(); +	return; +} + +void triptype::do_it() { +	; +	if (((ix != 0) || (iy != 0)) & (~ ddm_o.menunow)) { +		; +		off; +		copier(ox, oy, ox + a.xl, oy + a.yl, x, y, x + a.xl, y + a.yl); +		putback(); +		on; +	} +} + +void triptype::putback() { +	; +	/* putimage(tax,tay,behind^,0);*/ mblit(tax, tay, tax + a.xl, tay + a.yl, 3, 1); +} + +void triptype::walkto(integer xx, integer yy) { +	; +	speed(xx - x, yy - y); +	hx = xx; +	hy = yy; +	homing = true; +} + +void triptype::stophoming() { +	; +	homing = false; +} + +void triptype::homestep() { +	integer temp; +	; +	if ((hx == x) && (hy == y)) { +		;     /* touching the target */ +		homing = false; +		return; +	} +	ix = 0; +	iy = 0; +	if (hy != y) { +		; +		temp = hy - y; +		if (temp > 4)  iy = 4; +		else if (temp < -4)  iy = -4; +		else iy = temp; +	} +	if (hx != x) { +		; +		temp = hx - x; +		if (temp > 4)  ix = 4; +		else if (temp < -4)  ix = -4; +		else ix = temp; +	} +} + +void triptype::speed(shortint xx, shortint yy) { +	; +	ix = xx; +	iy = yy; +	if ((ix == 0) && (iy == 0))  return; /* no movement */ +	if (ix == 0) { +		;     /* No horz movement */ +		if (iy < 0)  turn(up); +		else turn(down); +	} else { +		; +		if (ix < 0)  turn(left); +		else turn(right); +	} +} + +void triptype::stopwalk() { +	; +	ix = 0; +	iy = 0; +	homing = false; +} + +void triptype::chatter() { +	; +	talkx = x + a.xl / 2; +	talky = y; +	talkf = a.fgc; +	talkb = a.bgc; +} + + +getsettype *getsettype::init() { +	; +	numleft = 0; /* initialise array pointer */ +	return this; +} + +void remember(fieldtype r) { +	; +	numleft += 1; +	gs[numleft] = r; +} + +void recall() { +	void recall_result; +	; +	recall_result = gs[numleft]; +	numleft -= 1; +	return recall_result; +} + +void rwsp(byte t, byte r) { +	const integer xs = 4; +	const integer ys = 2; +	; +	{ +		triptype &with = tr[t]; +		switch (r) { +		case up: +			speed(0, -ys); +			break; +		case down: +			speed(0, ys); +			break; +		case left: +			speed(-xs,  0); +			break; +		case right: +			speed(xs,  0); +			break; +		case ul: +			speed(-xs, -ys); +			break; +		case ur: +			speed(xs, -ys); +			break; +		case dl: +			speed(-xs, ys); +			break; +		case dr: +			speed(xs, ys); +			break; +		} +	} +} + +void apped(byte trn, byte np) { +	; +	{ +		triptype &with = tr[trn]; +		; +		{ +			void &with1 = peds[np]; +			appear(with.x - with.a.xl / 2, with.y - with.a.yl, dir); +		} +		rwsp(trn, tr[trn].face); +	}  }  void trippancy(); -static boolean allstill() -{ -    boolean xxx; byte fv; -boolean allstill_result; -; - xxx=true; - for( fv=1; fv <= numtr; fv ++) -  { triptype& with = tr[fv];  -   if (with.quick && ((with.ix!=0) || (with.iy!=0)))  xxx=false;} - allstill_result=xxx; -return allstill_result; -} - -void trippancy() -{ -    byte fv; -; - if ((ddm_o.menunow) | ontoolbar | seescroll | allstill())  return; - setactivepage(1); - for( fv=1; fv <= numtr; fv ++) -  { triptype& with = tr[fv];  -  if (with.quick)  -  {; -   walk(); -   if (with.visible && ((with.ix!=0) || (with.iy!=0)))  andexor(); -   do_it(); -  }} - setactivepage(0); +static boolean allstill() { +	boolean xxx; +	byte fv; +	boolean allstill_result; +	; +	xxx = true; +	for (fv = 1; fv <= numtr; fv ++) { +		triptype &with = tr[fv]; +		if (with.quick && ((with.ix != 0) || (with.iy != 0)))  xxx = false; +	} +	allstill_result = xxx; +	return allstill_result; +} + +void trippancy() { +	byte fv; +	; +	if ((ddm_o.menunow) | ontoolbar | seescroll | allstill())  return; +	setactivepage(1); +	for (fv = 1; fv <= numtr; fv ++) { +		triptype &with = tr[fv]; +		if (with.quick) { +			; +			walk(); +			if (with.visible && ((with.ix != 0) || (with.iy != 0)))  andexor(); +			do_it(); +		} +	} +	setactivepage(0);  }  void tripkey(char dir); -static void stopwalking() -{; - tr[1].stopwalk(); dna.rw=stopped; -} - -void tripkey(char dir) -{; - { triptype& with = tr[1];  -  {; -   switch (dir) { -    case 'H': if (rw!=up)     -            {; rw=up;    rwsp(1,rw); } else stopwalking(); -            break; -    case 'P': if (rw!=down)   -            {; rw=down;  rwsp(1,rw); } else stopwalking(); -            break; -    case 'K': if (rw!=left)   -            {; rw=left;  rwsp(1,rw); } else stopwalking(); -            break; -    case 'M': if (rw!=right)  -            {; rw=right; rwsp(1,rw); } else stopwalking(); -            break; -    case 'I': if (rw!=ur)     -            {; rw=ur;    rwsp(1,rw); } else stopwalking(); -            break; -    case 'Q': if (rw!=dr)     -            {; rw=dr;    rwsp(1,rw); } else stopwalking(); -            break; -    case 'O': if (rw!=dl)     -            {; rw=dl;    rwsp(1,rw); } else stopwalking(); -            break; -    case 'G': if (rw!=ul)     -            {; rw=ul;    rwsp(1,rw); } else stopwalking(); -            break; -    case 'L': stopwalking(); break; -   } - }} -} - -void fliproom(byte room,byte ped) -{; - dusk; tr[1].putback(); dna.room=room; load(room); apped(1,ped); - oldrw=dna.rw; dna.rw=tr[1].face; showrw; dawn; -} - -boolean infield(byte x)           /* returns True if you're within field "x" */ -{ -    integer ux,uy; -boolean infield_result; -; - { - triptype& with = tr[1];  - ; -  ux=with.x; -  uy=with.y+with.a.yl; - } - { - void& with = fields[x];  - ; -  infield_result=(ux>=x1) && (ux<=x2) && (uy>=y1) && (uy<=y2); - } -return infield_result; -} - -boolean neardoor()         /* returns True if you're near a door! */ -{ -    integer ux,uy; byte fv; boolean nd; -boolean neardoor_result; -; - if (numfields<9)  - {;     /* there ARE no doors here! */ -  neardoor_result=false; -  return neardoor_result; - } - { - triptype& with = tr[1];  - ; -  ux=with.x; -  uy=with.y+with.a.yl; - } nd=false; - for( fv=9; fv <= numfields; fv ++) -  { -  void& with = fields[fv];  -  ; -   if ((ux>=x1) && (ux<=x2) && (uy>=y1) && (uy<=y2))  nd=true; -  } - neardoor_result=nd; -return neardoor_result; +static void stopwalking() { +	; +	tr[1].stopwalk(); +	dna.rw = stopped; +} + +void tripkey(char dir) { +	; +	{ +		triptype &with = tr[1]; +		{ +			; +			switch (dir) { +			case 'H': +				if (rw != up) { +					; +					rw = up; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'P': +				if (rw != down) { +					; +					rw = down; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'K': +				if (rw != left) { +					; +					rw = left; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'M': +				if (rw != right) { +					; +					rw = right; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'I': +				if (rw != ur) { +					; +					rw = ur; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'Q': +				if (rw != dr) { +					; +					rw = dr; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'O': +				if (rw != dl) { +					; +					rw = dl; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'G': +				if (rw != ul) { +					; +					rw = ul; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'L': +				stopwalking(); +				break; +			} +		} +	} +} + +void fliproom(byte room, byte ped) { +	; +	dusk; +	tr[1].putback(); +	dna.room = room; +	load(room); +	apped(1, ped); +	oldrw = dna.rw; +	dna.rw = tr[1].face; +	showrw; +	dawn; +} + +boolean infield(byte x) {         /* returns True if you're within field "x" */ +	integer ux, uy; +	boolean infield_result; +	; +	{ +		triptype &with = tr[1]; +		; +		ux = with.x; +		uy = with.y + with.a.yl; +	} +	{ +		void &with = fields[x]; +		; +		infield_result = (ux >= x1) && (ux <= x2) && (uy >= y1) && (uy <= y2); +	} +	return infield_result; +} + +boolean neardoor() {       /* returns True if you're near a door! */ +	integer ux, uy; +	byte fv; +	boolean nd; +	boolean neardoor_result; +	; +	if (numfields < 9) { +		;     /* there ARE no doors here! */ +		neardoor_result = false; +		return neardoor_result; +	} +	{ +		triptype &with = tr[1]; +		; +		ux = with.x; +		uy = with.y + with.a.yl; +	} +	nd = false; +	for (fv = 9; fv <= numfields; fv ++) { +		void &with = fields[fv]; +		; +		if ((ux >= x1) && (ux <= x2) && (uy >= y1) && (uy <= y2))  nd = true; +	} +	neardoor_result = nd; +	return neardoor_result;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/oldtrip.h b/engines/avalanche/oldtrip.h index 70782ee7da..eb5e7d28dc 100644 --- a/engines/avalanche/oldtrip.h +++ b/engines/avalanche/oldtrip.h @@ -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 @@ -37,60 +37,63 @@ namespace Avalanche {  const integer maxgetset = 10;  struct adxtype { -           varying_string<12> name; /* name of character */ -           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 */ +	varying_string<12> name; /* name of character */ +	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 */  };  class triptype {  public: -            adxtype a; /* vital statistics */ -            byte face,step; -            integer x,y; /* current xy coords */ -            integer ox,oy; /* last xy coords */ -            integer tax,tay; /* "behind" taken at... */ -            shortint ix,iy; /* amount to move sprite by, each step */ -            matrix<1,24,0,1,pointer> pic;     /* the pictures themselves */ -            boolean quick,visible,homing,check_me; -            pointer behind; /* what's behind you */ -            integer hx,hy; /* homing x & y coords */ - -            triptype* init(byte spritenum);   /* loads & sets up the sprite */ -            void original();    /* just sets Quick to false */ -            void andexor();    /* drops sprite onto screen 1 */ -            void turn(byte whichway);      /* turns him round */ -            void appear(integer wx,integer wy, byte wf); /* switches him on */ -            void bounce();    /* bounces off walls. */ -            void walk();    /* prepares for do_it, andexor, etc. */ -            void do_it();    /* Actually copies the picture over */ -            void getback();    /* gets background before sprite is drawn */ -            void putback();    /* ...and wipes sprite from screen 1 */ -            void walkto(integer xx,integer yy); /* home in on a point */ -            void stophoming();    /* self-explanatory */ -            void homestep();    /* calculates ix & iy for one homing step */ -            void speed(shortint xx,shortint yy); /* sets ix & iy, non-homing, etc */ -            void stopwalk();    /* Stops the sprite from moving */ -            void chatter();    /* Sets up talk vars */ +	adxtype a; /* vital statistics */ +	byte face, step; +	integer x, y; /* current xy coords */ +	integer ox, oy; /* last xy coords */ +	integer tax, tay; /* "behind" taken at... */ +	shortint ix, iy; /* amount to move sprite by, each step */ +	matrix<1, 24, 0, 1, pointer> pic; /* the pictures themselves */ +	boolean quick, visible, homing, check_me; +	pointer behind; /* what's behind you */ +	integer hx, hy; /* homing x & y coords */ + +	triptype *init(byte spritenum);   /* loads & sets up the sprite */ +	void original();    /* just sets Quick to false */ +	void andexor();    /* drops sprite onto screen 1 */ +	void turn(byte whichway);      /* turns him round */ +	void appear(integer wx, integer wy, byte wf); /* switches him on */ +	void bounce();    /* bounces off walls. */ +	void walk();    /* prepares for do_it, andexor, etc. */ +	void do_it();    /* Actually copies the picture over */ +	void getback();    /* gets background before sprite is drawn */ +	void putback();    /* ...and wipes sprite from screen 1 */ +	void walkto(integer xx, integer yy); /* home in on a point */ +	void stophoming();    /* self-explanatory */ +	void homestep();    /* calculates ix & iy for one homing step */ +	void speed(shortint xx, shortint yy); /* sets ix & iy, non-homing, etc */ +	void stopwalk();    /* Stops the sprite from moving */ +	void chatter();    /* Sets up talk vars */  };  class getsettype {  public: -              array<1,maxgetset,fieldtype> gs; -              byte numleft; +	array<1, maxgetset, fieldtype> gs; +	byte numleft; -              getsettype* init(); -              void remember(fieldtype r); -              void recall(); +	getsettype *init(); +	void remember(fieldtype r); +	void recall();  };  const integer up = 0;  const integer right = 1;  const integer down = 2;  const integer left = 3; -const integer ur = 4; const integer dr = 5; const integer dl = 6; const integer ul = 7; +const integer ur = 4; +const integer dr = 5; +const integer dl = 6; +const integer ul = 7;  const integer stopped = 8;  const integer numtr = 5; /* current max no. of sprites */ @@ -101,9 +104,9 @@ void loadtrip();  void tripkey(char dir); -void apped(byte trn,byte np); +void apped(byte trn, byte np); -void fliproom(byte room,byte ped); +void fliproom(byte room, byte ped);  boolean infield(byte x);          /* returns True if you're within field "x" */ @@ -115,7 +118,7 @@ boolean neardoor();        /* returns True if you're near a door! */  #define EXTERN  #endif -EXTERN array<1,numtr,triptype> tr; +EXTERN array<1, numtr, triptype> tr;  #undef EXTERN  #define EXTERN extern diff --git a/engines/avalanche/omtest.cpp b/engines/avalanche/omtest.cpp index c102b3f0ec..9cab8796f5 100644 --- a/engines/avalanche/omtest.cpp +++ b/engines/avalanche/omtest.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 @@ -36,170 +36,194 @@ namespace Avalanche {  varying_string<5> st;  byte fv; -void graphics() -                    { -     integer gd,gm; ; gd=3; gm=0; initgraph(gd,gm,""); } +void graphics() { +	integer gd, gm; ; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +}  /*$F+ ... All ddm__procs and do__procs must be compiled in Far-Call state. */ -void ddm__file() -{; - {; -  start_afresh; -  opt("Load...",'L',"f3",true); -  opt("Save...",'S',"f2",false); -  opt("Save As...",'A',"ctrl-f2",false); -  opt("OS Shell...",'O',"f2",true); -  opt("Untrash screen",'U',"f11",true); -  display; - } +void ddm__file() { +	; +	{ +		; +		start_afresh; +		opt("Load...", 'L', "f3", true); +		opt("Save...", 'S', "f2", false); +		opt("Save As...", 'A', "ctrl-f2", false); +		opt("OS Shell...", 'O', "f2", true); +		opt("Untrash screen", 'U', "f11", true); +		display; +	}  } -void ddm__heart() -{; - {; -  start_afresh; -  opt("About...",'A',"shift-f10",true); -  opt("Boss Key",'B',"alt-B",true); -  opt("Help...",'H',"f1",true); -  opt("Status screen",'S',"f12",true); -  opt("Quit",'Q',"f10",true); -  display; - } +void ddm__heart() { +	; +	{ +		; +		start_afresh; +		opt("About...", 'A', "shift-f10", true); +		opt("Boss Key", 'B', "alt-B", true); +		opt("Help...", 'H', "f1", true); +		opt("Status screen", 'S', "f12", true); +		opt("Quit", 'Q', "f10", true); +		display; +	}  } -void ddm__action() -{; - {; -  start_afresh; -  opt("Get up",'G',"",true); -  opt("Open door",'O',"",true); -  opt("Pause game",'P',"",true); -  opt("Look around",'L',"",true); -  opt("Inventory",'I',"Tab",true); -  opt("Do the boogie",'b',"",true); -  display; - } +void ddm__action() { +	; +	{ +		; +		start_afresh; +		opt("Get up", 'G', "", true); +		opt("Open door", 'O', "", true); +		opt("Pause game", 'P', "", true); +		opt("Look around", 'L', "", true); +		opt("Inventory", 'I', "Tab", true); +		opt("Do the boogie", 'b', "", true); +		display; +	}  } -void ddm__objects() -{; - {; -  start_afresh; -  opt("Bell",'B',"",true); -  opt("Wine",'W',"",true); -  opt("Chastity Belt",'C',"",true); -  opt("Crossbow Bolt",'t',"",true); -  opt("Crossbow",'r',"",true); -  opt("Potion",'P',"",true); -  display; - } +void ddm__objects() { +	; +	{ +		; +		start_afresh; +		opt("Bell", 'B', "", true); +		opt("Wine", 'W', "", true); +		opt("Chastity Belt", 'C', "", true); +		opt("Crossbow Bolt", 't', "", true); +		opt("Crossbow", 'r', "", true); +		opt("Potion", 'P', "", true); +		display; +	}  } -void ddm__people() -{; - {; -  start_afresh; -  opt("Avalot",'A',"",true); -  opt("Spludwick",'S',"",true); -  opt("Arkata",'k',"",true); -  opt("Dogfood",'D',"",true); -  opt("Geida",'G',"",true); -  display; - } +void ddm__people() { +	; +	{ +		; +		start_afresh; +		opt("Avalot", 'A', "", true); +		opt("Spludwick", 'S', "", true); +		opt("Arkata", 'k', "", true); +		opt("Dogfood", 'D', "", true); +		opt("Geida", 'G', "", true); +		display; +	}  } -void ddm__use() -{; - {; -  start_afresh; -  opt("Drink",'D',"",true); -  opt("Wear",'W',"",true); -  opt("Give to [du Lustie]",'G',"",true); -  display; - } +void ddm__use() { +	; +	{ +		; +		start_afresh; +		opt("Drink", 'D', "", true); +		opt("Wear", 'W', "", true); +		opt("Give to [du Lustie]", 'G', "", true); +		display; +	}  } -void do__stuff() -{ -    varying_string<2> st; -; - str(o.choicenum+1,st); - setfillstyle(1,6); setcolor(14); - bar(0,177,640,200); - outtextxy(320,177,string("You just chose: ")+st); +void do__stuff() { +	varying_string<2> st; +	; +	str(o.choicenum + 1, st); +	setfillstyle(1, 6); +	setcolor(14); +	bar(0, 177, 640, 200); +	outtextxy(320, 177, string("You just chose: ") + st);  } -void do__heart() -{; - switch (o.choicenum) { -  case 0: outtextxy(100,100,"A really funny game!"); break; -  case 1: outtextxy(100,120,"You ought to be working!"); break; -  case 2: outtextxy(100,140,"No help available, so THERE!"); break; -  case 3: outtextxy(100,160,"Everything's COOL and FROODY!"); break; -  case 4: exit(0); break; - } +void do__heart() { +	; +	switch (o.choicenum) { +	case 0: +		outtextxy(100, 100, "A really funny game!"); +		break; +	case 1: +		outtextxy(100, 120, "You ought to be working!"); +		break; +	case 2: +		outtextxy(100, 140, "No help available, so THERE!"); +		break; +	case 3: +		outtextxy(100, 160, "Everything's COOL and FROODY!"); +		break; +	case 4: +		exit(0); +		break; +	}  }  /*$F- ... End of ddm__procs */ -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - graphics(); - setfillstyle(6,6); bar(0,0,639,199); - resetmouse; - m.init; o.init; - {; -  create('H','\3','#',ddm__heart(),do__heart()); -  create('F',"File",'!',ddm__file(),do__stuff()); -  create('A',"Action",'\36',ddm__action(),do__stuff()); -  create('O',"Objects",'\30',ddm__objects(),do__stuff()); -  create('P',"People",'\31',ddm__people(),do__stuff()); -  create('W',"With",'\21',ddm__use(),do__stuff()); -  update; - } - do { -  showmousecursor; -  do { -   getbuttonpressinfo(1); -   getbuttonreleaseinfo(1); -   getbuttonstatus; -             if (menunow)  o.lightup; -  } while (!((buttonpresscount>0) || (buttonreleasecount>0) | keypressede)); -  hidemousecursor; -  if (buttonpresscount>0)  -  {; -   if (mousey>10)  -     {; -      if (! ((o.firstlix) & -       ((mousex>=flx1) && (mousex<=flx2) && -       (mousey>=12) && (mousey<=fly))))  -      {;     /* Clicked OUTSIDE the menu. */ -       if (o.menunow)  wipe; -       setcolor(2); for( fv=1; fv <= 17; fv ++) circle(mousex,mousey,fv*3); -       setcolor(0); for( fv=1; fv <= 17; fv ++) circle(mousex,mousey,fv*3); -      } -     } else -    {;     /* Clicked on menu bar */ -     m.getmenu(mousex); -    } -  } else -  {;     /* NOT clicked button... */ -   if (buttonreleasecount>0)  -   {; -     if ((firstlix) & -      ((mousex>=flx1) && (mousex<=flx2) && -      (mousey>=12) && (mousey<=fly)))  -       select((mousey-14) / 10); -   } else -   {;     /* NOT clicked or released button, so must be keypress */ -    readkeye; -    parsekey(inchar,extd); -   } -  } - } while (!false); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	graphics(); +	setfillstyle(6, 6); +	bar(0, 0, 639, 199); +	resetmouse; +	m.init; +	o.init; +	{ +		; +		create('H', '\3', '#', ddm__heart(), do__heart()); +		create('F', "File", '!', ddm__file(), do__stuff()); +		create('A', "Action", '\36', ddm__action(), do__stuff()); +		create('O', "Objects", '\30', ddm__objects(), do__stuff()); +		create('P', "People", '\31', ddm__people(), do__stuff()); +		create('W', "With", '\21', ddm__use(), do__stuff()); +		update; +	} +	do { +		showmousecursor; +		do { +			getbuttonpressinfo(1); +			getbuttonreleaseinfo(1); +			getbuttonstatus; +			if (menunow)  o.lightup; +		} while (!((buttonpresscount > 0) || (buttonreleasecount > 0) | keypressede)); +		hidemousecursor; +		if (buttonpresscount > 0) { +			; +			if (mousey > 10) { +				; +				if (!((o.firstlix) & +				        ((mousex >= flx1) && (mousex <= flx2) && +				         (mousey >= 12) && (mousey <= fly)))) { +					;     /* Clicked OUTSIDE the menu. */ +					if (o.menunow)  wipe; +					setcolor(2); +					for (fv = 1; fv <= 17; fv ++) circle(mousex, mousey, fv * 3); +					setcolor(0); +					for (fv = 1; fv <= 17; fv ++) circle(mousex, mousey, fv * 3); +				} +			} else { +				;     /* Clicked on menu bar */ +				m.getmenu(mousex); +			} +		} else { +			;     /* NOT clicked button... */ +			if (buttonreleasecount > 0) { +				; +				if ((firstlix) & +				        ((mousex >= flx1) && (mousex <= flx2) && +				         (mousey >= 12) && (mousey <= fly))) +					select((mousey - 14) / 10); +			} else { +				;     /* NOT clicked or released button, so must be keypress */ +				readkeye; +				parsekey(inchar, extd); +			} +		} +	} while (!false); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/oopmenu.cpp b/engines/avalanche/oopmenu.cpp index 2d8ae42d84..94b3b0d343 100644 --- a/engines/avalanche/oopmenu.cpp +++ b/engines/avalanche/oopmenu.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 @@ -60,263 +60,309 @@ const integer disabled = lightgray;  char r;  byte fv; -void chalk(integer x,integer y, char t, string z) -{ -    byte p; -; - outtextxy(x,y,z); - p=pos(t,z); if (p==0)  return; p -= 1; - outtextxy(x+p*8,y+1,"_"); +void chalk(integer x, integer y, char t, string z) { +	byte p; +	; +	outtextxy(x, y, z); +	p = pos(t, z); +	if (p == 0)  return; +	p -= 1; +	outtextxy(x + p * 8, y + 1, "_");  } -void say(integer x,integer y, char t, string z, byte f,byte b) -{; - settextjustify(0,2); setfillstyle(1,b); setcolor(f); - bar(x-3,y-1,x+textwidth(z)+3,y+textheight(z)+1); - chalk(x,y,t,z); +void say(integer x, integer y, char t, string z, byte f, byte b) { +	; +	settextjustify(0, 2); +	setfillstyle(1, b); +	setcolor(f); +	bar(x - 3, y - 1, x + textwidth(z) + 3, y + textheight(z) + 1); +	chalk(x, y, t, z);  } -void mblit(integer x1,integer y1,integer x2,integer y2, byte f,byte t) /* NOT The Minstrel Blitter */ -{ -    pointer p,q; word s; -; - mark(q); - s=imagesize(x1,y1,x2,y2); getmem(p,s); - setactivepage(f); getimage(x1,y1,x2,y2,p); - setactivepage(t); putimage(x1,y1,p,0); - setactivepage(0); release(q); +void mblit(integer x1, integer y1, integer x2, integer y2, byte f, byte t) { /* NOT The Minstrel Blitter */ +	pointer p, q; +	word s; +	; +	mark(q); +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	setactivepage(f); +	getimage(x1, y1, x2, y2, p); +	setactivepage(t); +	putimage(x1, y1, p, 0); +	setactivepage(0); +	release(q);  } -void onemenu::start_afresh() -{; - number=0; width=0; firstlix=false; oldy=0; highlightnum=0; +void onemenu::start_afresh() { +	; +	number = 0; +	width = 0; +	firstlix = false; +	oldy = 0; +	highlightnum = 0;  } -onemenu* onemenu::init() -{; - menunow=false; - return this; +onemenu *onemenu::init() { +	; +	menunow = false; +	return this;  } -void onemenu::opt(string n, char tr, string key, boolean val) -{ -    integer l; -; - number += 1; - l=textwidth(n+key)+30; if (width<l)  width=l; - { - optiontype& with = oo[number];  - ; -  with.title=n; -  with.trigger=tr; -  with.shortcut=key; -  with.valid=val; - } +void onemenu::opt(string n, char tr, string key, boolean val) { +	integer l; +	; +	number += 1; +	l = textwidth(n + key) + 30; +	if (width < l)  width = l; +	{ +		optiontype &with = oo[number]; +		; +		with.title = n; +		with.trigger = tr; +		with.shortcut = key; +		with.valid = val; +	}  } -void onemenu::displayopt(byte y,byte b,byte f,byte d) -{; - { - optiontype& with = oo[y];  - ; -  if (with.valid)  setcolor(f); else setcolor(d); -  if (b!=177)  -  {; -   setfillstyle(1,b); -   bar(flx1,3+y*10,flx2,12+y*10); -  } -  settextjustify(2,2); -   if (with.shortcut>"")  outtextxy(flx2,4+y*10,with.shortcut); -  settextjustify(0,2); -   chalk(left+3,4+y*10,with.trigger,with.title); - } +void onemenu::displayopt(byte y, byte b, byte f, byte d) { +	; +	{ +		optiontype &with = oo[y]; +		; +		if (with.valid)  setcolor(f); +		else setcolor(d); +		if (b != 177) { +			; +			setfillstyle(1, b); +			bar(flx1, 3 + y * 10, flx2, 12 + y * 10); +		} +		settextjustify(2, 2); +		if (with.shortcut > "")  outtextxy(flx2, 4 + y * 10, with.shortcut); +		settextjustify(0, 2); +		chalk(left + 3, 4 + y * 10, with.trigger, with.title); +	}  } -void onemenu::display() -{ -    byte y; -; - setfillstyle(1,menu_b); setcolor(menu_border); - firstlix=true; - flx1=left-2; flx2=left+width; fly=14+number*10; - mblit(flx1-3,11,flx2+1,fly+1,0,1); - menunow=true; - - bar(flx1,12,flx2,fly); - rectangle(flx1-1,11,flx2+1,fly+1); - - setcolor(menu_f); settextjustify(0,2); - displayopt(1,highlight_b,highlight_f,177); - for( y=2; y <= number; y ++) -  { optiontype& with = oo[y];  displayopt(y,177,menu_f,disabled);} +void onemenu::display() { +	byte y; +	; +	setfillstyle(1, menu_b); +	setcolor(menu_border); +	firstlix = true; +	flx1 = left - 2; +	flx2 = left + width; +	fly = 14 + number * 10; +	mblit(flx1 - 3, 11, flx2 + 1, fly + 1, 0, 1); +	menunow = true; + +	bar(flx1, 12, flx2, fly); +	rectangle(flx1 - 1, 11, flx2 + 1, fly + 1); + +	setcolor(menu_f); +	settextjustify(0, 2); +	displayopt(1, highlight_b, highlight_f, 177); +	for (y = 2; y <= number; y ++) { +		optiontype &with = oo[y]; +		displayopt(y, 177, menu_f, disabled); +	}  } -void onemenu::wipe() -{; - { headtype& with = m.ddms[o.menunum];  say(flx1+2,1,with.trigger,with.title,menu_f,menu_b);} - mblit(flx1-3,11,flx2+1,fly+1,1,0); - menunow=false; firstlix=false; +void onemenu::wipe() { +	; +	{ +		headtype &with = m.ddms[o.menunum]; +		say(flx1 + 2, 1, with.trigger, with.title, menu_f, menu_b); +	} +	mblit(flx1 - 3, 11, flx2 + 1, fly + 1, 1, 0); +	menunow = false; +	firstlix = false;  } -void onemenu::movehighlight(shortint add) -{ -    shortint hn; -; - if (add!=0)  - {; -  hn=highlightnum+add; -  if ((hn<0) || (hn>=(unsigned char)number))  return; -  highlightnum=hn; - } - hidemousecursor; - displayopt(oldy+1,menu_b,menu_f,disabled); - displayopt(highlightnum+1,highlight_b,highlight_f,disabled); - showmousecursor; - oldy=highlightnum; +void onemenu::movehighlight(shortint add) { +	shortint hn; +	; +	if (add != 0) { +		; +		hn = highlightnum + add; +		if ((hn < 0) || (hn >= (unsigned char)number))  return; +		highlightnum = hn; +	} +	hidemousecursor; +	displayopt(oldy + 1, menu_b, menu_f, disabled); +	displayopt(highlightnum + 1, highlight_b, highlight_f, disabled); +	showmousecursor; +	oldy = highlightnum;  } -void onemenu::lightup()    /* This makes the menu highlight follow the mouse.*/ -{; - if ((mousex<flx1) || (mousex>flx2) -  || (mousey<=12) || (mousey>fly-3))  return; - highlightnum=(mousey-12) / 10; - if (highlightnum==oldy)  return; - movehighlight(0); +void onemenu::lightup() {  /* This makes the menu highlight follow the mouse.*/ +	; +	if ((mousex < flx1) || (mousex > flx2) +	        || (mousey <= 12) || (mousey > fly - 3))  return; +	highlightnum = (mousey - 12) / 10; +	if (highlightnum == oldy)  return; +	movehighlight(0);  } -void onemenu::select(byte n)      /* Choose which one you want. */ -{; - if (! oo[n+1].valid)  return; - choicenum=n; - m.ddms[menunum].do_choose(); - wipe(); +void onemenu::select(byte n) {    /* Choose which one you want. */ +	; +	if (! oo[n + 1].valid)  return; +	choicenum = n; +	m.ddms[menunum].do_choose(); +	wipe();  } -void onemenu::keystroke(char c) -{ -    byte fv; -; - c=upcase(c); - for( fv=1; fv <= number; fv ++) -  if (upcase(oo[fv].trigger)==c)  select(fv-1); +void onemenu::keystroke(char c) { +	byte fv; +	; +	c = upcase(c); +	for (fv = 1; fv <= number; fv ++) +		if (upcase(oo[fv].trigger) == c)  select(fv - 1);  } -void bleep() -{; - sound(177); delay(7); nosound; +void bleep() { +	; +	sound(177); +	delay(7); +	nosound;  } -  headtype* headtype::init -   (char trig,char alttrig, string name, byte p, proc dw,proc dc) -  {; -   trigger=trig; alttrigger=alttrig; title=name; -   position=p; xpos=(position-1)*spacing+indent; -   xright=xpos+textwidth(name)+3; -   do_setup=dw; do_choose=dc; -   return this; -  } - -  void headtype::display() -  {; -   say(xpos,1,trigger,title,menu_f,menu_b); -  } - -  void headtype::highlight() -  {; -   say(xpos,1,trigger,title,highlight_f,highlight_b); -   {; -    o.left=xpos; -    o.menunow=true; o.menunum=position; -   } -  } - -  boolean headtype::extdparse(char c) -  {boolean extdparse_result; -  ; -   if (c!=alttrigger)  {; extdparse_result=true; return extdparse_result; } -   extdparse_result=false; -  return extdparse_result; -  } - -  menuset* menuset::init() -  {; -   howmany=0; -   return this; -  } - -  void menuset::create(char t, string n, char alttrig, proc dw,proc dc) -  {; -   howmany += 1; -   ddms[howmany].init(t,alttrig,n,howmany,dw,dc); -  } - -  void menuset::update() -  { -      byte fv; -  ; -   setfillstyle(1,menu_b); bar(0,0,640,10); -   for( fv=1; fv <= howmany; fv ++) ddms[fv].display(); -  } - -  void menuset::extd(char c) -  { -      byte fv; -  ; -   fv=1; -   while ((fv<=howmany) && (ddms[fv].extdparse(c)))  fv += 1; -   if (fv>howmany)  return; getmenu(fv*spacing-indent); -  } - -  void menuset::getmenu(integer x) -  { -      byte fv; -  ; -   fv=0; -   do { -    fv += 1; -    if ((x>ddms[fv].xpos-3) && (x<ddms[fv].xright))  -     { headtype& with = ddms[fv];  -      {; -       if (o.menunow)  -       {; -        wipe(); /* get rid of menu */ -        if (o.menunum==with.position)  return; /* click on own highlight */ -       } -       highlight(); do_setup(); -       return; -      }} -   } while (!(fv>howmany)); -  } - -void parsekey(char r,char re) -{; -  switch (r) { -   case '\0': {; -        switch (re) { -         case 'K': {; -               wipe(); -               m.getmenu((o.menunum-2)*spacing+indent); -              } -              break; -         case 'M': {; -               wipe(); -               m.getmenu((o.menunum*spacing+indent)); -              } -              break; -         case 'H': movehighlight(-1); break; -         case 'P': movehighlight(1); break; -         default: m.extd(re); -         } -        } -        break; -   case '\33': if (o.menunow)  wipe(); break; -   case '\15': select(o.highlightnum); break; -   default: -   {; -    if (o.menunow)  keystroke(r); else -     kbuffer=kbuffer+r+re; -   } -  } +headtype *headtype::init +(char trig, char alttrig, string name, byte p, proc dw, proc dc) { +	; +	trigger = trig; +	alttrigger = alttrig; +	title = name; +	position = p; +	xpos = (position - 1) * spacing + indent; +	xright = xpos + textwidth(name) + 3; +	do_setup = dw; +	do_choose = dc; +	return this; +} + +void headtype::display() { +	; +	say(xpos, 1, trigger, title, menu_f, menu_b); +} + +void headtype::highlight() { +	; +	say(xpos, 1, trigger, title, highlight_f, highlight_b); +	{ +		; +		o.left = xpos; +		o.menunow = true; +		o.menunum = position; +	} +} + +boolean headtype::extdparse(char c) { +	boolean extdparse_result; +	; +	if (c != alttrigger)  { +		; +		extdparse_result = true; +		return extdparse_result; +	} +	extdparse_result = false; +	return extdparse_result; +} + +menuset *menuset::init() { +	; +	howmany = 0; +	return this; +} + +void menuset::create(char t, string n, char alttrig, proc dw, proc dc) { +	; +	howmany += 1; +	ddms[howmany].init(t, alttrig, n, howmany, dw, dc); +} + +void menuset::update() { +	byte fv; +	; +	setfillstyle(1, menu_b); +	bar(0, 0, 640, 10); +	for (fv = 1; fv <= howmany; fv ++) ddms[fv].display(); +} + +void menuset::extd(char c) { +	byte fv; +	; +	fv = 1; +	while ((fv <= howmany) && (ddms[fv].extdparse(c)))  fv += 1; +	if (fv > howmany)  return; +	getmenu(fv * spacing - indent); +} + +void menuset::getmenu(integer x) { +	byte fv; +	; +	fv = 0; +	do { +		fv += 1; +		if ((x > ddms[fv].xpos - 3) && (x < ddms[fv].xright)) { +			headtype &with = ddms[fv]; +			{ +				; +				if (o.menunow) { +					; +					wipe(); /* get rid of menu */ +					if (o.menunum == with.position)  return; /* click on own highlight */ +				} +				highlight(); +				do_setup(); +				return; +			} +		} +	} while (!(fv > howmany)); +} + +void parsekey(char r, char re) { +	; +	switch (r) { +	case '\0': { +		; +		switch (re) { +		case 'K': { +			; +			wipe(); +			m.getmenu((o.menunum - 2)*spacing + indent); +		} +		break; +		case 'M': { +			; +			wipe(); +			m.getmenu((o.menunum * spacing + indent)); +		} +		break; +		case 'H': +			movehighlight(-1); +			break; +		case 'P': +			movehighlight(1); +			break; +		default: +			m.extd(re); +		} +	} +	break; +	case '\33': +		if (o.menunow)  wipe(); +		break; +	case '\15': +		select(o.highlightnum); +		break; +	default: { +		; +		if (o.menunow)  keystroke(r); +		else +			kbuffer = kbuffer + r + re; +	} +	}  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/oopmenu.h b/engines/avalanche/oopmenu.h index 32f171e824..b80b5ad31d 100644 --- a/engines/avalanche/oopmenu.h +++ b/engines/avalanche/oopmenu.h @@ -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 @@ -34,61 +34,61 @@ typedef void(*proc)();  class headtype {  public: -            varying_string<8> title; -            char trigger,alttrigger; -            byte position; -            integer xpos,xright; -            proc do_setup,do_choose; - -            headtype* init -             (char trig,char alttrig, string name, byte p, proc dw,proc dc); -            void display(); -            void highlight(); -            boolean extdparse(char c); +	varying_string<8> title; +	char trigger, alttrigger; +	byte position; +	integer xpos, xright; +	proc do_setup, do_choose; + +	headtype *init +	(char trig, char alttrig, string name, byte p, proc dw, proc dc); +	void display(); +	void highlight(); +	boolean extdparse(char c);  };  struct optiontype { -              string title; -              char trigger; -              varying_string<9> shortcut; -              boolean valid; +	string title; +	char trigger; +	varying_string<9> shortcut; +	boolean valid;  };  class onemenu {  public: -           array<1,12,optiontype> oo; -           byte number; -           integer width,left; -           boolean firstlix; -           integer flx1,flx2,fly; -           byte oldy; /* used by Lightup */ -           boolean menunow; /* Is there a menu now? */ -           byte menunum; /* And if so, which is it? */ -           byte choicenum; /* Your choice? */ -           byte highlightnum; - -           void start_afresh(); -           void opt(string n, char tr, string key, boolean val); -           void display(); -           void wipe(); -           void lightup(); -           void displayopt(byte y,byte b,byte f,byte d); -           void movehighlight(shortint add); -           void select(byte n); -           void keystroke(char c); -           onemenu* init(); +	array<1, 12, optiontype> oo; +	byte number; +	integer width, left; +	boolean firstlix; +	integer flx1, flx2, fly; +	byte oldy; /* used by Lightup */ +	boolean menunow; /* Is there a menu now? */ +	byte menunum; /* And if so, which is it? */ +	byte choicenum; /* Your choice? */ +	byte highlightnum; + +	void start_afresh(); +	void opt(string n, char tr, string key, boolean val); +	void display(); +	void wipe(); +	void lightup(); +	void displayopt(byte y, byte b, byte f, byte d); +	void movehighlight(shortint add); +	void select(byte n); +	void keystroke(char c); +	onemenu *init();  };  class menuset {  public: -           array<1,8,headtype> ddms; -           byte howmany; - -           menuset* init(); -           void create(char t, string n, char alttrig, proc dw,proc dc); -           void update(); -           void extd(char c); -           void getmenu(integer x); +	array<1, 8, headtype> ddms; +	byte howmany; + +	menuset *init(); +	void create(char t, string n, char alttrig, proc dw, proc dc); +	void update(); +	void extd(char c); +	void getmenu(integer x);  }; @@ -105,7 +105,7 @@ EXTERN string kbuffer;  #define EXTERN extern -  void parsekey(char r,char re); +void parsekey(char r, char re);  } // End of namespace Avalanche. diff --git a/engines/avalanche/overlap.cpp b/engines/avalanche/overlap.cpp index 14d5dc8a17..3c72e1178b 100644 --- a/engines/avalanche/overlap.cpp +++ b/engines/avalanche/overlap.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 @@ -30,52 +30,62 @@  namespace Avalanche { -integer gd,gm; +integer gd, gm; -void flash(integer x1,integer y1,integer x2,integer y2) -{; - setcolor(14); rectangle(x1,y1,x2,y2); - sound(x1+x2); delay(100); nosound; delay(500); - setcolor( 9); rectangle(x1,y1,x2,y2); delay(500); +void flash(integer x1, integer y1, integer x2, integer y2) { +	; +	setcolor(14); +	rectangle(x1, y1, x2, y2); +	sound(x1 + x2); +	delay(100); +	nosound; +	delay(500); +	setcolor(9); +	rectangle(x1, y1, x2, y2); +	delay(500);  } -boolean dropin(integer xc,integer yc,integer x1,integer y1,integer x2,integer y2) +boolean dropin(integer xc, integer yc, integer x1, integer y1, integer x2, integer y2)  /* Dropin returns True if the point xc,yc falls within the 1-2 rectangle. */ -{boolean dropin_result; -; - dropin_result=((xc>=x1) && (xc<=x2) && (yc>=y1) && (yc<=y2)); -return dropin_result; +{ +	boolean dropin_result; +	; +	dropin_result = ((xc >= x1) && (xc <= x2) && (yc >= y1) && (yc <= y2)); +	return dropin_result;  } -void test(integer x1,integer y1,integer x2,integer y2,integer x3,integer y3,integer x4,integer y4) -{; - cleardevice(); - rectangle(x1,y1,x2,y2); - rectangle(x3,y3,x4,y4); - flash(x1,y1,x2,y2); - flash(x3,y3,x4,y4); +void test(integer x1, integer y1, integer x2, integer y2, integer x3, integer y3, integer x4, integer y4) { +	; +	cleardevice(); +	rectangle(x1, y1, x2, y2); +	rectangle(x3, y3, x4, y4); +	flash(x1, y1, x2, y2); +	flash(x3, y3, x4, y4); - if (dropin(x3,y3,x1,y1,x2,y2) - || dropin(x3,y4,x1,y1,x2,y2) - || dropin(x4,y3,x1,y1,x2,y2) - || dropin(x4,y4,x1,y1,x2,y2))  - {;     /* Overlaps */ -  flash(x1,y1,x4,y4); - } else - {;     /* Doesn't overlap- flash 'em both again */ -  flash(x3,y3,x4,y4); /* backwards- why not...? */ -  flash(x1,y1,x2,y2); - } +	if (dropin(x3, y3, x1, y1, x2, y2) +	        || dropin(x3, y4, x1, y1, x2, y2) +	        || dropin(x4, y3, x1, y1, x2, y2) +	        || dropin(x4, y4, x1, y1, x2, y2)) { +		;     /* Overlaps */ +		flash(x1, y1, x4, y4); +	} else { +		;     /* Doesn't overlap- flash 'em both again */ +		flash(x3, y3, x4, y4); /* backwards- why not...? */ +		flash(x1, y1, x2, y2); +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=1; initgraph(gd,gm,""); setcolor(9); - test(100,50,200,100,400,200,600,250); - test(100,50,200,100,120, 70,220,120); - test(100,50,200,100,150, 50,250,100); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 1; +	initgraph(gd, gm, ""); +	setcolor(9); +	test(100, 50, 200, 100, 400, 200, 600, 250); +	test(100, 50, 200, 100, 120, 70, 220, 120); +	test(100, 50, 200, 100, 150, 50, 250, 100); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/overscro.cpp b/engines/avalanche/overscro.cpp index 9617e2efb4..58ab270419 100644 --- a/engines/avalanche/overscro.cpp +++ b/engines/avalanche/overscro.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 @@ -29,53 +29,64 @@  namespace Avalanche { -integer gd,gm; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,""); - setactivepage(1); setcolor(9); - settextstyle(0,0,2); - outtextxy(0,  0,"This is a test to see whether you can"); - outtextxy(0, 20,"scroll text over the top of a picture."); - outtextxy(0, 40,"I was wondering whether it would work."); - outtextxy(0, 60,"Well, does it, or not?"); - outtextxy(0, 80,"If so, it could be useful for the"); - outtextxy(0,100,"Avalot title sequence."); - outtextxy(0,120,"Good, isn't it?"); - outtextxy(0,140,"The quick brown fox jumps over the"); - outtextxy(0,160,"lazy dog..."); - outtextxy(0,180,"This is the last line..."); - setactivepage(0); - gm=0; - for( gd=0; gd <= 640; gd ++) - {; -  gm += 1; if (gm==8)  gm=1; setcolor(gm); -  line(gd,0,gm,350); -  line(640-gd,0,640-gm,350); - } -/* for gd:=1 to 15 do - begin; -  setfillstyle(1,gd); bar(gd*20,10,gd*20+19,100); - end;*/ -/* setfillstyle(1,6); bar(100,100,500,100);*/ gd=getpixel(0,0); - for( gm=8; gm <= 15; gm ++) setpalette(gm,egayellow); - for( gd=0; gd <= 199; gd ++) - {; -  port[0x3c4]=2; port[0x3cf]=4; port[0x3c5]=8; port[0x3cf]=0; -  move(mem[0xa000*80],mem[0xa000*0],16000); -  port[0x3c4]=2; port[0x3cf]=4; port[0x3c5]=8; port[0x3cf]=0; -  move(mem[0xa000*gd*80+16384],mem[0xa000*15920],80); - } -/* for gd:=0 to 199 do - begin; -  port[$3C4]:=2; port[$3CF]:=4; port[$3C5]:=8; port[$3CF]:=0; -  move(mem[$A000*160],mem[$A000*0],15920); -  port[$3C4]:=2; port[$3CF]:=4; port[$3C5]:=8; port[$3CF]:=0; -  move(mem[$A000*gd*80+16384],mem[$A000*15920],80); -  move(mem[$A000*15920],mem[$A000*15840],80); - end;*/ -return EXIT_SUCCESS; +integer gd, gm; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	setactivepage(1); +	setcolor(9); +	settextstyle(0, 0, 2); +	outtextxy(0,  0, "This is a test to see whether you can"); +	outtextxy(0, 20, "scroll text over the top of a picture."); +	outtextxy(0, 40, "I was wondering whether it would work."); +	outtextxy(0, 60, "Well, does it, or not?"); +	outtextxy(0, 80, "If so, it could be useful for the"); +	outtextxy(0, 100, "Avalot title sequence."); +	outtextxy(0, 120, "Good, isn't it?"); +	outtextxy(0, 140, "The quick brown fox jumps over the"); +	outtextxy(0, 160, "lazy dog..."); +	outtextxy(0, 180, "This is the last line..."); +	setactivepage(0); +	gm = 0; +	for (gd = 0; gd <= 640; gd ++) { +		; +		gm += 1; +		if (gm == 8)  gm = 1; +		setcolor(gm); +		line(gd, 0, gm, 350); +		line(640 - gd, 0, 640 - gm, 350); +	} +	/* for gd:=1 to 15 do +	 begin; +	  setfillstyle(1,gd); bar(gd*20,10,gd*20+19,100); +	 end;*/ +	/* setfillstyle(1,6); bar(100,100,500,100);*/ gd = getpixel(0, 0); +	for (gm = 8; gm <= 15; gm ++) setpalette(gm, egayellow); +	for (gd = 0; gd <= 199; gd ++) { +		; +		port[0x3c4] = 2; +		port[0x3cf] = 4; +		port[0x3c5] = 8; +		port[0x3cf] = 0; +		move(mem[0xa000 * 80], mem[0xa000 * 0], 16000); +		port[0x3c4] = 2; +		port[0x3cf] = 4; +		port[0x3c5] = 8; +		port[0x3cf] = 0; +		move(mem[0xa000 * gd * 80 + 16384], mem[0xa000 * 15920], 80); +	} +	/* for gd:=0 to 199 do +	 begin; +	  port[$3C4]:=2; port[$3CF]:=4; port[$3C5]:=8; port[$3CF]:=0; +	  move(mem[$A000*160],mem[$A000*0],15920); +	  port[$3C4]:=2; port[$3CF]:=4; port[$3C5]:=8; port[$3CF]:=0; +	  move(mem[$A000*gd*80+16384],mem[$A000*15920],80); +	  move(mem[$A000*15920],mem[$A000*15840],80); +	 end;*/ +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/particle.cpp b/engines/avalanche/particle.cpp index bcccdb9bb8..b6b830542b 100644 --- a/engines/avalanche/particle.cpp +++ b/engines/avalanche/particle.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 @@ -32,17 +32,17 @@  namespace Avalanche { -typedef matrix<'\0','\377',0,15,byte> fonttype; +typedef matrix < '\0', '\377', 0, 15, byte > fonttype;  struct markertype { -              word length; -              longint offset; -              byte checksum; +	word length; +	longint offset; +	byte checksum;  };  string rawname; -array<0,1999,char> buffer,was; -word bufpos,bufsize; +array<0, 1999, char> buffer, was; +word bufpos, bufsize;  fonttype font;  integer cpos;  char r; @@ -50,212 +50,299 @@ boolean ok;  const char marker = '\33'; -void cursor() -{ -    byte fv; -; - for( fv=12; fv <= 15; fv ++) -  mem[0xa000*cpos+fv*80]=~(mem[0xa000*cpos+fv*80]); +void cursor() { +	byte fv; +	; +	for (fv = 12; fv <= 15; fv ++) +		mem[0xa000 * cpos + fv * 80] = ~(mem[0xa000 * cpos + fv * 80]);  } -void xy() -{; - cpos=(bufpos / 80)*1280+(bufpos % 80); +void xy() { +	; +	cpos = (bufpos / 80) * 1280 + (bufpos % 80);  } -void show() -{ -    word fv,orig,y; -; - for( fv=0; fv <= 1999; fv ++) -  if (buffer[fv]!=was[fv])  -  {; -   orig=(fv / 80)*1280+(fv % 80); -   for( y=0; y <= 15; y ++) -    mem[0xa000*orig+y*80]=(byte)(font[buffer[fv]][y]); -  } - xy(); - move(buffer,was,sizeof(buffer)); +void show() { +	word fv, orig, y; +	; +	for (fv = 0; fv <= 1999; fv ++) +		if (buffer[fv] != was[fv]) { +			; +			orig = (fv / 80) * 1280 + (fv % 80); +			for (y = 0; y <= 15; y ++) +				mem[0xa000 * orig + y * 80] = (byte)(font[buffer[fv]][y]); +		} +	xy(); +	move(buffer, was, sizeof(buffer));  } -void sizeup() -{; - do { -  switch (buffer[bufsize]) { -   case marker: return; break; /* we've found it OK! */ -   case '\0': bufsize -= 1; break; -   default: bufsize += 1; -  } - } while (!false); +void sizeup() { +	; +	do { +		switch (buffer[bufsize]) { +		case marker: +			return; +			break; /* we've found it OK! */ +		case '\0': +			bufsize -= 1; +			break; +		default: +			bufsize += 1; +		} +	} while (!false);  } -void graphics() -{ - integer gd,gm; - file<fonttype> fontfile; -; - gd=3; gm=1; initgraph(gd,gm,"c:\\bp\\bgi"); - assign(fontfile,"c:\\thomas\\lanche.fnt"); - reset(fontfile); fontfile >> font; close(fontfile); +void graphics() { +	integer gd, gm; +	file<fonttype> fontfile; +	; +	gd = 3; +	gm = 1; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	assign(fontfile, "c:\\thomas\\lanche.fnt"); +	reset(fontfile); +	fontfile >> font; +	close(fontfile);  }  void helpscreen(); -static byte l,fv; +static byte l, fv; -static void addon(char b, string st) -{; - buffer[3+80*l]=b; b -= 64; - buffer[5+80*l]=b; - move(st[1],buffer[7+80*l],length(st)); - l += 1; +static void addon(char b, string st) { +	; +	buffer[3 + 80 * l] = b; +	b -= 64; +	buffer[5 + 80 * l] = b; +	move(st[1], buffer[7 + 80 * l], length(st)); +	l += 1;  } -void helpscreen() -{ - array<0,1999,char> temp; - char r; -; - l=0; move(buffer,temp,2000); fillchar(buffer,sizeof(buffer),'\0'); - addon('B',"Bubble"); - addon('C',"Centre text"); - addon('D',"Don't add \20 (at end)"); - addon('F',"Italic Font"); - addon('G',"Bell"); - addon('H',"Not allocated (=backspace)"); - addon('I',"Not allocated (=tab)"); - addon('L',"Left-justify text"); - addon('K',"Keyboard input"); - addon('M',"Carriage return (same as \r key)"); - addon('P',"Scroll (Paragraph break)"); - addon('Q',"Yes/no scroll (question)"); - addon('R',"Roman font"); - addon('S',"Fix to sprite"); - addon('U',"Money (in œsd format)"); - addon('V',"View icon (number from ^S)"); - show(); do { r=readkey(); } while (!(! keypressed())); - cleardevice(); - fillchar(was,sizeof(was),'\0'); move(temp,buffer,2000); show(); +void helpscreen() { +	array<0, 1999, char> temp; +	char r; +	; +	l = 0; +	move(buffer, temp, 2000); +	fillchar(buffer, sizeof(buffer), '\0'); +	addon('B', "Bubble"); +	addon('C', "Centre text"); +	addon('D', "Don't add \20 (at end)"); +	addon('F', "Italic Font"); +	addon('G', "Bell"); +	addon('H', "Not allocated (=backspace)"); +	addon('I', "Not allocated (=tab)"); +	addon('L', "Left-justify text"); +	addon('K', "Keyboard input"); +	addon('M', "Carriage return (same as \r key)"); +	addon('P', "Scroll (Paragraph break)"); +	addon('Q', "Yes/no scroll (question)"); +	addon('R', "Roman font"); +	addon('S', "Fix to sprite"); +	addon('U', "Money (in œsd format)"); +	addon('V', "View icon (number from ^S)"); +	show(); +	do { +		r = readkey(); +	} while (!(! keypressed())); +	cleardevice(); +	fillchar(was, sizeof(was), '\0'); +	move(temp, buffer, 2000); +	show();  }  void edit_it(); -static void legit(char r) -{;     /* it's a legit keystroke */ - move(buffer[bufpos],buffer[bufpos+1],1999-bufpos); - buffer[bufpos]=r; - bufpos += 1; show(); +static void legit(char r) { +	;     /* it's a legit keystroke */ +	move(buffer[bufpos], buffer[bufpos + 1], 1999 - bufpos); +	buffer[bufpos] = r; +	bufpos += 1; +	show();  } -void edit_it() -{ -    byte fv; -; - bufpos=0; - fillchar(was,sizeof(was),'\0'); show(); - do { -  cursor(); r=readkey(); cursor(); -  switch (r) { -   case '\0': switch (readkey()) { /* extd keystrokes */ -        case 'K': if (bufpos>0)     {; bufpos -= 1; xy(); } break; /* Left */ -        case 'M': if (bufpos<bufsize)  {; bufpos += 1; xy(); } break; /* Right */ -        case 'H': if (bufpos>80)    {; bufpos -= 80; xy(); } break; /* Up */ -        case 'P': if (bufpos<(cardinal)bufsize-79)  {; bufpos += 80; xy(); } break; /* Down */ -        case 's': if (bufpos>10)  {; bufpos -= 10; xy(); } break; -        case 't': if (bufpos<(cardinal)bufsize-10)  {; bufpos += 10; xy(); } break; -        case 'G': {; bufpos=0; xy(); } break; /* Home */ -        case 'O': {; bufpos=bufsize; xy(); } break; /* End */ -        case 'S': if (bufpos<bufsize)  {;  /* Del */ -              move(buffer[bufpos+1],buffer[bufpos],1999-bufpos); show(); -             } -             break; -        case ';': helpscreen(); break; -        case 'A': legit('\357'); break; /* copyright symbol */ -        case 'B': legit('\221'); break; /* uppercase AE */ -        case 'C': legit('\222'); break; /* lowercase AE */ -       } -       break; -   case '\10': if (bufpos>0)  {; /* backspace */ -        bufpos -= 1; -        move(buffer[bufpos+1],buffer[bufpos],1999-bufpos); -        show(); -       } -       break; -   case '\33': {; -         restorecrtmode(); -         return; -        } -        break; /* end of editing */ -  default: legit(r); -  } -  sizeup(); - } while (!false); +void edit_it() { +	byte fv; +	; +	bufpos = 0; +	fillchar(was, sizeof(was), '\0'); +	show(); +	do { +		cursor(); +		r = readkey(); +		cursor(); +		switch (r) { +		case '\0': +			switch (readkey()) { /* extd keystrokes */ +			case 'K': +				if (bufpos > 0)     { +					; +					bufpos -= 1; +					xy(); +				} +				break; /* Left */ +			case 'M': +				if (bufpos < bufsize)  { +					; +					bufpos += 1; +					xy(); +				} +				break; /* Right */ +			case 'H': +				if (bufpos > 80)    { +					; +					bufpos -= 80; +					xy(); +				} +				break; /* Up */ +			case 'P': +				if (bufpos < (cardinal)bufsize - 79)  { +					; +					bufpos += 80; +					xy(); +				} +				break; /* Down */ +			case 's': +				if (bufpos > 10)  { +					; +					bufpos -= 10; +					xy(); +				} +				break; +			case 't': +				if (bufpos < (cardinal)bufsize - 10)  { +					; +					bufpos += 10; +					xy(); +				} +				break; +			case 'G': { +				; +				bufpos = 0; +				xy(); +			} +			break; /* Home */ +			case 'O': { +				; +				bufpos = bufsize; +				xy(); +			} +			break; /* End */ +			case 'S': +				if (bufpos < bufsize)  { +					;  /* Del */ +					move(buffer[bufpos + 1], buffer[bufpos], 1999 - bufpos); +					show(); +				} +				break; +			case ';': +				helpscreen(); +				break; +			case 'A': +				legit('\357'); +				break; /* copyright symbol */ +			case 'B': +				legit('\221'); +				break; /* uppercase AE */ +			case 'C': +				legit('\222'); +				break; /* lowercase AE */ +			} +			break; +		case '\10': +			if (bufpos > 0)  { +				; /* backspace */ +				bufpos -= 1; +				move(buffer[bufpos + 1], buffer[bufpos], 1999 - bufpos); +				show(); +			} +			break; +		case '\33': { +			; +			restorecrtmode(); +			return; +		} +		break; /* end of editing */ +		default: +			legit(r); +		} +		sizeup(); +	} while (!false);  } -void loadit() -{ -    untyped_file f; -; - if (pos(".",rawname)==0)  rawname=rawname+".raw"; - fillchar(buffer,sizeof(buffer),'\0'); - /*$I-*/ - assign(f,rawname); - reset(f,1); - if (ioresult!=0)  - {; -  output << string('\7')+"New file!"+'\7' << NL; -  buffer[0]=marker; -  return; - } - bufsize=filesize(f); - blockread(f,buffer,bufsize); - close(f); - while (buffer[bufsize]=='\0')  bufsize -= 1; - if (buffer[bufsize]!=marker)  - {;     /* add on a marker */ -  bufsize += 1; -  buffer[bufsize]=marker; - } +void loadit() { +	untyped_file f; +	; +	if (pos(".", rawname) == 0)  rawname = rawname + ".raw"; +	fillchar(buffer, sizeof(buffer), '\0'); +	/*$I-*/ +	assign(f, rawname); +	reset(f, 1); +	if (ioresult != 0) { +		; +		output << string('\7') + "New file!" + '\7' << NL; +		buffer[0] = marker; +		return; +	} +	bufsize = filesize(f); +	blockread(f, buffer, bufsize); +	close(f); +	while (buffer[bufsize] == '\0')  bufsize -= 1; +	if (buffer[bufsize] != marker) { +		;     /* add on a marker */ +		bufsize += 1; +		buffer[bufsize] = marker; +	}  } -void saveit() -{ -    untyped_file f; -; - output << "Saving " << rawname << ", " << bufsize << " bytes..." << NL; - assign(f,rawname); rewrite(f,1); - blockwrite(f,buffer,bufsize); - close(f); +void saveit() { +	untyped_file f; +	; +	output << "Saving " << rawname << ", " << bufsize << " bytes..." << NL; +	assign(f, rawname); +	rewrite(f, 1); +	blockwrite(f, buffer, bufsize); +	close(f);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - output << "Filename of .RAW file?"; input >> rawname >> NL; - loadit(); - ok=false; - do { -  graphics(); -  edit_it(); -  output << "Now what?" << NL; -  output << NL; -  output << " Filename: " << rawname << NL; -  output << " Size of text: " << bufsize << NL; -  output << " Cursor position: " << bufpos << NL; -  output << NL; -  output << " C) Cancel this & continue edit" << NL; -  output << " S) Save under current name" << NL; -  output << " A) Save under a different name" << NL; -  output << " X) Exit & lose all changes." << NL; -  output << NL; -  output << "Pick one!" << NL; -  do { r=upcase(readkey()); } while (!(set::of('C','S','A','X', eos).has(r))); -  switch (r) { -   case 'X': ok=true; break; -   case 'S': {; saveit(); exit(0); } break; -  } - } while (!ok); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	output << "Filename of .RAW file?"; +	input >> rawname >> NL; +	loadit(); +	ok = false; +	do { +		graphics(); +		edit_it(); +		output << "Now what?" << NL; +		output << NL; +		output << " Filename: " << rawname << NL; +		output << " Size of text: " << bufsize << NL; +		output << " Cursor position: " << bufpos << NL; +		output << NL; +		output << " C) Cancel this & continue edit" << NL; +		output << " S) Save under current name" << NL; +		output << " A) Save under a different name" << NL; +		output << " X) Exit & lose all changes." << NL; +		output << NL; +		output << "Pick one!" << NL; +		do { +			r = upcase(readkey()); +		} while (!(set::of('C', 'S', 'A', 'X', eos).has(r))); +		switch (r) { +		case 'X': +			ok = true; +			break; +		case 'S': { +			; +			saveit(); +			exit(0); +		} +		break; +		} +	} while (!ok); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/pictemp.cpp b/engines/avalanche/pictemp.cpp index cbc8474828..261e59297f 100644 --- a/engines/avalanche/pictemp.cpp +++ b/engines/avalanche/pictemp.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 @@ -31,62 +31,74 @@ namespace Avalanche {  const integer picsize = 966; -integer gd,gm; +integer gd, gm;  untyped_file f;  pointer p; -void save() -{ -    varying_string<40> adf;  untyped_file f; byte z; array<1,2,pointer> c; -string nam,screenname; -      const string header =  - string("This is a file from an Avvy game, and its contents are subject to ")+ - "copyright."+'\15'+'\12'+'\15'+'\12'+"Have fun!"+'\32'; - byte a /*absolute $A000:1200i*/; - byte bit; -; - nam="d:thingtmp.avd"; - screenname="Temp."; - assign(f,nam); - -     assign(f,nam); rewrite(f,1); blockwrite(f,header[1],146); -     blockwrite(f,screenname,31); -     for( bit=0; bit <= 3; bit ++) -     {; -      port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -      blockwrite(f,a,12080); -     } - close(f); +void save() { +	varying_string<40> adf; +	untyped_file f; +	byte z; +	array<1, 2, pointer> c; +	string nam, screenname; +	const string header = +	    string("This is a file from an Avvy game, and its contents are subject to ") + +	    "copyright." + '\15' + '\12' + '\15' + '\12' + "Have fun!" + '\32'; +	byte a /*absolute $A000:1200i*/; +	byte bit; +	; +	nam = "d:thingtmp.avd"; +	screenname = "Temp."; +	assign(f, nam); + +	assign(f, nam); +	rewrite(f, 1); +	blockwrite(f, header[1], 146); +	blockwrite(f, screenname, 31); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockwrite(f, a, 12080); +	} +	close(f);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - - assign(f,"thinks.avd"); - getmem(p,picsize); - reset(f,1); - seek(f,65); - gd=10; gm=20; - - while (gm<120)  - {; -  if (! eof(f))  -   blockread(f,p,picsize); -  putimage(gd,gm,p,0); -  gd += 70; - -  if (gd==640)  -  {; -   gd=10; gm += 40; -  } - - } - - close(f); freemem(p,picsize); - save(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); + +	assign(f, "thinks.avd"); +	getmem(p, picsize); +	reset(f, 1); +	seek(f, 65); +	gd = 10; +	gm = 20; + +	while (gm < 120) { +		; +		if (! eof(f)) +			blockread(f, p, picsize); +		putimage(gd, gm, p, 0); +		gd += 70; + +		if (gd == 640) { +			; +			gd = 10; +			gm += 40; +		} + +	} + +	close(f); +	freemem(p, picsize); +	save(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/pictemp2.cpp b/engines/avalanche/pictemp2.cpp index f0ebccde03..8d5cdfe4c2 100644 --- a/engines/avalanche/pictemp2.cpp +++ b/engines/avalanche/pictemp2.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 @@ -33,60 +33,70 @@ namespace Avalanche {  const integer picsize = 966;  const integer number_of_objects = 17; -const array<1,65,char> thinks_header =  - string("This is an Avalot file, which is subject to copyright. Have fun.")+'\32'; +const array<1, 65, char> thinks_header = +    string("This is an Avalot file, which is subject to copyright. Have fun.") + '\32'; -integer gd,gm; +integer gd, gm;  untyped_file f;  pointer p;  byte noo; -void load() -{ - byte a0 /*absolute $A000:1200*/; - byte bit; - untyped_file f; -; - assign(f,"d:thingtmp.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); bit=getpixel(0,0); +void load() { +	byte a0 /*absolute $A000:1200*/; +	byte bit; +	untyped_file f; +	; +	assign(f, "d:thingtmp.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); +	bit = getpixel(0, 0);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - - load(); noo=0; - - assign(f,"thinks.avd"); - getmem(p,picsize); - rewrite(f,1); - blockwrite(f,thinks_header,65); - gd=10; gm=20; - - while (noo<=number_of_objects)  - {; -  getimage(gd,gm,gd+59,gm+29,p); -  putimage(gd,gm,p,notput); -  blockwrite(f,p,picsize); -  gd += 70; - -  if (gd==640)  -  {; -   gd=10; gm += 40; -  } - -  noo += 1; - } - - close(f); freemem(p,picsize); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); + +	load(); +	noo = 0; + +	assign(f, "thinks.avd"); +	getmem(p, picsize); +	rewrite(f, 1); +	blockwrite(f, thinks_header, 65); +	gd = 10; +	gm = 20; + +	while (noo <= number_of_objects) { +		; +		getimage(gd, gm, gd + 59, gm + 29, p); +		putimage(gd, gm, p, notput); +		blockwrite(f, p, picsize); +		gd += 70; + +		if (gd == 640) { +			; +			gd = 10; +			gm += 40; +		} + +		noo += 1; +	} + +	close(f); +	freemem(p, picsize); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/pingo.cpp b/engines/avalanche/pingo.cpp index 2c68a8c3a9..df50cb0b94 100644 --- a/engines/avalanche/pingo.cpp +++ b/engines/avalanche/pingo.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 @@ -47,10 +47,12 @@  namespace Avalanche { -void dplot(integer x,integer y, string z) -{; - setcolor( 9); outtextxy(x,y  ,z); - setcolor(11); outtextxy(x,y-1,z); +void dplot(integer x, integer y, string z) { +	; +	setcolor(9); +	outtextxy(x, y  , z); +	setcolor(11); +	outtextxy(x, y - 1, z);  }  void bosskey() @@ -85,171 +87,232 @@ begin;   dusk; setvisualpage(0); setactivepage(0); mousepage(0); dawn;   copy02;*/  { -    byte fv; -; - dusk(); - off_virtual(); - for( fv=0; fv <= 1; fv ++) - {; -  setactivepage(fv); -  cleardevice(); - } - load(98); off(); - setactivepage(1); setvisualpage(1); - settextjustify(1,0); setcolor(8); - outtextxy(320,177,"Graph/Histo/Draw/Sample: \"JANJUN93.GRA\": (W3-AB3)"); - outtextxy(320,190,"Press any key or click the mouse to return."); - settextjustify(2,0); - on(); mousepage(1); newpointer(1); dawn(); - do { check(); } while (!((mpress>0) || keypressed())); - off(); on_virtual(); - major_redraw(); - - mousepage(cp); +	byte fv; +	; +	dusk(); +	off_virtual(); +	for (fv = 0; fv <= 1; fv ++) { +		; +		setactivepage(fv); +		cleardevice(); +	} +	load(98); +	off(); +	setactivepage(1); +	setvisualpage(1); +	settextjustify(1, 0); +	setcolor(8); +	outtextxy(320, 177, "Graph/Histo/Draw/Sample: \"JANJUN93.GRA\": (W3-AB3)"); +	outtextxy(320, 190, "Press any key or click the mouse to return."); +	settextjustify(2, 0); +	on(); +	mousepage(1); +	newpointer(1); +	dawn(); +	do { +		check(); +	} while (!((mpress > 0) || keypressed())); +	off(); +	on_virtual(); +	major_redraw(); + +	mousepage(cp);  } -void copy02()     /* taken from Wobble (below) */ -{ -    byte a0 /*absolute $A000:0*/; byte a2/*absolute $A800:0*/; byte bit; -; - off(); - for( bit=0; bit <= 3; bit ++) {; -  port[0x3c4]=2; port[0x3ce]=4; -  port[0x3c5]=1 << bit; -  port[0x3cf]=bit; -  move(a0,a2,16000); - } on(); +void copy02() {   /* taken from Wobble (below) */ +	byte a0 /*absolute $A000:0*/; +	byte a2/*absolute $A800:0*/; +	byte bit; +	; +	off(); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		move(a0, a2, 16000); +	} +	on();  } -void copy03()     /* taken from Wobble (below) */ -{ -    byte a0 /*absolute $A000:0*/; byte a2/*absolute $AC00:0*/; byte bit; - byte squeaky_code; - -   switch (visible) { -      case m_virtual : { squeaky_code = 1; off_virtual(); } break; -      case m_no      :       squeaky_code = 2; break; -      case m_yes     : { squeaky_code = 3; off();         } break; -   } - - for( bit=0; bit <= 3; bit ++) {; -  port[0x3c4]=2; port[0x3ce]=4; -  port[0x3c5]=1 << bit; -  port[0x3cf]=bit; -  move(a0,a2,16000); - } - - switch (squeaky_code) { -   case 1 : on_virtual(); break; -   case 2 :; break; /* zzzz, it was off anyway */ -   case 3 : on(); break; - } +void copy03() {   /* taken from Wobble (below) */ +	byte a0 /*absolute $A000:0*/; +	byte a2/*absolute $AC00:0*/; +	byte bit; +	byte squeaky_code; + +	switch (visible) { +	case m_virtual : { +		squeaky_code = 1; +		off_virtual(); +	} +	break; +	case m_no      : +		squeaky_code = 2; +		break; +	case m_yes     : { +		squeaky_code = 3; +		off(); +	} +	break; +	} + +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		move(a0, a2, 16000); +	} + +	switch (squeaky_code) { +	case 1 : +		on_virtual(); +		break; +	case 2 : +		; +		break; /* zzzz, it was off anyway */ +	case 3 : +		on(); +		break; +	}  } -void copypage(byte frp,byte top)  /* taken from Copy02 (above) */ -{ - byte bit; -; - off(); - for( bit=0; bit <= 3; bit ++) {; -  port[0x3c4]=2; port[0x3ce]=4; -  port[0x3c5]=1 << bit; -  port[0x3cf]=bit; -  move(mem[0xa000*frp*pagetop],mem[0xa000*top*pagetop],16000); - } on(); +void copypage(byte frp, byte top) { /* taken from Copy02 (above) */ +	byte bit; +	; +	off(); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		move(mem[0xa000 * frp * pagetop], mem[0xa000 * top * pagetop], 16000); +	} +	on();  } -void wobble() -{ - byte bit; - byte a2 /*absolute $A800:80i*/; -; - off(); - setactivepage(2); bit=getpixel(0,0); - cleardevice(); - for( bit=0; bit <= 3; bit ++) {; -  port[0x3c4]=2; port[0x3ce]=4; -  port[0x3c5]=1 << bit; -  port[0x3cf]=bit; -  move(mem[0xa000*cp*pagetop],a2,16000); - } - for( bit=0; bit <= 25; bit ++) - {; -  setvisualpage(2);  delay(bit*7); -  setvisualpage(cp); delay(bit*7); - } - bit=getpixel(0,0); - draw_also_lines(); - setactivepage(1-cp); on(); +void wobble() { +	byte bit; +	byte a2 /*absolute $A800:80i*/; +	; +	off(); +	setactivepage(2); +	bit = getpixel(0, 0); +	cleardevice(); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		move(mem[0xa000 * cp * pagetop], a2, 16000); +	} +	for (bit = 0; bit <= 25; bit ++) { +		; +		setvisualpage(2); +		delay(bit * 7); +		setvisualpage(cp); +		delay(bit * 7); +	} +	bit = getpixel(0, 0); +	draw_also_lines(); +	setactivepage(1 - cp); +	on();  }  void zonk(); -static void zl(integer x1,integer y1,integer x2,integer y2) -{; - setlinestyle(0,0,3); setcolor( 1); line(x1,y1,x2,y2); - setlinestyle(0,0,1); setcolor(11); line(x1,y1,x2,y2); +static void zl(integer x1, integer y1, integer x2, integer y2) { +	; +	setlinestyle(0, 0, 3); +	setcolor(1); +	line(x1, y1, x2, y2); +	setlinestyle(0, 0, 1); +	setcolor(11); +	line(x1, y1, x2, y2);  } -void zonk() -{ - integer xx,yy; -/* a0:byte absolute $A000:0; a3:byte absolute $A000:245760;*/ byte bit,fv; -; - off(); - copypage(3,1-cp); - { - triptype& with = tr[1];  - ; xx=with.x+with.a.xl / 2; yy=with.y; } - - setactivepage(3); cleardevice(); -/* for bit:=0 to 3 do begin; -  port[$3C4]:=2; port[$3CE]:=4; -  port[$3C5]:=1 shl bit; -  port[$3CF]:=bit; -  move(a0,a3,16000); - end;*/ - copypage(cp,3); off(); - zl(640,0,0,yy / 4); - zl(0,yy / 4,640,yy / 2); - zl(640,yy / 2,xx,yy); setbkcolor(yellow); - - for( bit=0; bit <= 255; bit ++) - {; -  note(270-bit); setvisualpage(3); -  note(2700-10*bit); delay(5); nosound; -  note(270-bit); setvisualpage(cp); -  note(2700-10*bit); delay(5); nosound; - } setactivepage(0); setbkcolor(black); on(); state(2); - copypage(1-cp,3); +void zonk() { +	integer xx, yy; +	/* a0:byte absolute $A000:0; a3:byte absolute $A000:245760;*/ byte bit, fv; +	; +	off(); +	copypage(3, 1 - cp); +	{ +		triptype &with = tr[1]; +		; +		xx = with.x + with.a.xl / 2; +		yy = with.y; +	} + +	setactivepage(3); +	cleardevice(); +	/* for bit:=0 to 3 do begin; +	  port[$3C4]:=2; port[$3CE]:=4; +	  port[$3C5]:=1 shl bit; +	  port[$3CF]:=bit; +	  move(a0,a3,16000); +	 end;*/ +	copypage(cp, 3); +	off(); +	zl(640, 0, 0, yy / 4); +	zl(0, yy / 4, 640, yy / 2); +	zl(640, yy / 2, xx, yy); +	setbkcolor(yellow); + +	for (bit = 0; bit <= 255; bit ++) { +		; +		note(270 - bit); +		setvisualpage(3); +		note(2700 - 10 * bit); +		delay(5); +		nosound; +		note(270 - bit); +		setvisualpage(cp); +		note(2700 - 10 * bit); +		delay(5); +		nosound; +	} +	setactivepage(0); +	setbkcolor(black); +	on(); +	state(2); +	copypage(1 - cp, 3);  } -void winning_pic() -{ - byte bit; - untyped_file f; - char r; - - dusk(); - - assign(f,"finale.avd"); - reset(f,1); - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c4]=2; port[0x3ce]=4; -  port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,mem[0xa000*0],16000); - } - close(f); blitfix(); - - setvisualpage(0); - - dawn(); - - do { check(); } while (!(keypressed() || (mrelease>0))); - while (keypressed())  r=readkey(); - major_redraw(); +void winning_pic() { +	byte bit; +	untyped_file f; +	char r; + +	dusk(); + +	assign(f, "finale.avd"); +	reset(f, 1); +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, mem[0xa000 * 0], 16000); +	} +	close(f); +	blitfix(); + +	setvisualpage(0); + +	dawn(); + +	do { +		check(); +	} while (!(keypressed() || (mrelease > 0))); +	while (keypressed())  r = readkey(); +	major_redraw();  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/pingo.h b/engines/avalanche/pingo.h index 2bda4780c7..9d76db63b6 100644 --- a/engines/avalanche/pingo.h +++ b/engines/avalanche/pingo.h @@ -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 @@ -36,7 +36,7 @@ void copy02();  void copy03(); -void copypage(byte frp,byte top); +void copypage(byte frp, byte top);  void wobble(); diff --git a/engines/avalanche/plottest.cpp b/engines/avalanche/plottest.cpp index 909088c0e5..9a03718067 100644 --- a/engines/avalanche/plottest.cpp +++ b/engines/avalanche/plottest.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 @@ -29,42 +29,47 @@  namespace Avalanche { -integer gd,gm; byte fv; -matrix<1,35,0,39,byte> a; -array<0,3,0,4,1,35,byte> b; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,""); - for( gd=0; gd <= 39; gd ++) -  for( gm=1; gm <= 35; gm ++) -   a[gm][gd]=(gd+gm) % 16; - for( gd=0; gd <= 39; gd ++) -  for( gm=1; gm <= 35; gm ++) -   putpixel(gd+100,gm+100,a[gm][gd]); +integer gd, gm; +byte fv; +matrix<1, 35, 0, 39, byte> a; +array<0, 3, 0, 4, 1, 35, byte> b; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	for (gd = 0; gd <= 39; gd ++) +		for (gm = 1; gm <= 35; gm ++) +			a[gm][gd] = (gd + gm) % 16; +	for (gd = 0; gd <= 39; gd ++) +		for (gm = 1; gm <= 35; gm ++) +			putpixel(gd + 100, gm + 100, a[gm][gd]); - fillchar(b,sizeof(b),'\0'); - for( gm=1; gm <= 35; gm ++) -  for( gd=0; gd <= 39; gd ++) -  {; -   for( fv=0; fv <= 3; fv ++) -   {; -    b[fv][gd / 8][gm]=(b[fv][gd / 8][gm] << 1); -    b[fv][gd / 8][gm] += ((cardinal)(a[gm][gd] & (1 << fv)) >> fv); -   } -  } +	fillchar(b, sizeof(b), '\0'); +	for (gm = 1; gm <= 35; gm ++) +		for (gd = 0; gd <= 39; gd ++) { +			; +			for (fv = 0; fv <= 3; fv ++) { +				; +				b[fv][gd / 8][gm] = (b[fv][gd / 8][gm] << 1); +				b[fv][gd / 8][gm] += ((cardinal)(a[gm][gd] & (1 << fv)) >> fv); +			} +		} - for( gd=1; gd <= 35; gd ++) -  for( gm=0; gm <= 4; gm ++) -  {; -   for( fv=0; fv <= 3; fv ++) -   {; -    port[0x3c4]=2; port[0x3ce]=4; -    port[0x3c5]=1 << fv; port[0x3cf]=fv; -    mem[0xa000*gd*80+gm]=b[fv][gm][gd]; -   } -  } -return EXIT_SUCCESS; +	for (gd = 1; gd <= 35; gd ++) +		for (gm = 0; gm <= 4; gm ++) { +			; +			for (fv = 0; fv <= 3; fv ++) { +				; +				port[0x3c4] = 2; +				port[0x3ce] = 4; +				port[0x3c5] = 1 << fv; +				port[0x3cf] = fv; +				mem[0xa000 * gd * 80 + gm] = b[fv][gm][gd]; +			} +		} +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/preview1.cpp b/engines/avalanche/preview1.cpp index 861127714b..da5b71dae7 100644 --- a/engines/avalanche/preview1.cpp +++ b/engines/avalanche/preview1.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 @@ -30,120 +30,124 @@  namespace Avalanche { -array<0,3,palettetype> fxpal; - -void load() -{ - byte a0 /*absolute $A000:800*/; - byte bit; - untyped_file f; - - - assign(f,"preview2.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - - close(f); - bit=getpixel(0,0); - - settextjustify(1,1); - setcolor(3); - outtextxy(320,166,"...This is a preview of things to come..."); - setcolor(14); - outtextxy(320,176,"AVAROID"); - outtextxy(320,183,"(a space so dizzy)"); - setcolor(9); - outtextxy(320,194,"the next Avvy adventure-- in 256 colours."); - setcolor(7); - outtextxy(590,195,"Any key..."); +array<0, 3, palettetype> fxpal; + +void load() { +	byte a0 /*absolute $A000:800*/; +	byte bit; +	untyped_file f; + + +	assign(f, "preview2.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} + +	close(f); +	bit = getpixel(0, 0); + +	settextjustify(1, 1); +	setcolor(3); +	outtextxy(320, 166, "...This is a preview of things to come..."); +	setcolor(14); +	outtextxy(320, 176, "AVAROID"); +	outtextxy(320, 183, "(a space so dizzy)"); +	setcolor(9); +	outtextxy(320, 194, "the next Avvy adventure-- in 256 colours."); +	setcolor(7); +	outtextxy(590, 195, "Any key...");  } -void setup() -{ - integer gd,gm; - palettetype p; +void setup() { +	integer gd, gm; +	palettetype p; - if (paramstr(1)!="jsb")  exit(255); - gd=3; gm=0; initgraph(gd,gm,""); - getpalette(fxpal[0]); +	if (paramstr(1) != "jsb")  exit(255); +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	getpalette(fxpal[0]); - fillchar(p.colors,sizeof(p.colors),'\0'); /* Blank out the screen. */ - p.size=16; setallpalette(p); +	fillchar(p.colors, sizeof(p.colors), '\0'); /* Blank out the screen. */ +	p.size = 16; +	setallpalette(p);  } -void wait() -{ -    word w; char r; +void wait() { +	word w; +	char r; - w=0; - do { -  delay(1); w += 1; - } while (!(keypressed() || (w==15000))); +	w = 0; +	do { +		delay(1); +		w += 1; +	} while (!(keypressed() || (w == 15000))); - while (keypressed())  r=readkey(); /* Keyboard sink. */ +	while (keypressed())  r = readkey(); /* Keyboard sink. */  } -void show(byte n) -{ - setallpalette(fxpal[n]); - delay(55); +void show(byte n) { +	setallpalette(fxpal[n]); +	delay(55);  } -shortint fades(shortint x) -{ -    byte r,g,b; - - shortint fades_result; - r=x / 16; x=x % 16; - g=x / 4;  b=x % 4; - if (r>0)  r -= 1; if (g>0)  g -= 1; if (b>0)  b -= 1; - fades_result=(16*r+4*g+b); -/* fades:=x-1;*/ - return fades_result; +shortint fades(shortint x) { +	byte r, g, b; + +	shortint fades_result; +	r = x / 16; +	x = x % 16; +	g = x / 4; +	b = x % 4; +	if (r > 0)  r -= 1; +	if (g > 0)  g -= 1; +	if (b > 0)  b -= 1; +	fades_result = (16 * r + 4 * g + b); +	/* fades:=x-1;*/ +	return fades_result;  }  void dawn(); -static void calc(byte n) -{ -    byte fv; +static void calc(byte n) { +	byte fv; - fxpal[n]=fxpal[n-1]; +	fxpal[n] = fxpal[n - 1]; - for( fv=1; fv <= fxpal[n].size-1; fv ++) -  fxpal[n].colors[fv]=fades(fxpal[n].colors[fv]); +	for (fv = 1; fv <= fxpal[n].size - 1; fv ++) +		fxpal[n].colors[fv] = fades(fxpal[n].colors[fv]);  } -void dawn() -{ - byte fv; +void dawn() { +	byte fv; - for( fv=1; fv <= 3; fv ++) calc(fv); +	for (fv = 1; fv <= 3; fv ++) calc(fv); - for( fv=3; fv >= 0; fv --) show(fv); +	for (fv = 3; fv >= 0; fv --) show(fv);  } -void dusk() -{ -    byte fv; +void dusk() { +	byte fv; - for( fv=1; fv <= 3; fv ++) show(fv); +	for (fv = 1; fv <= 3; fv ++) show(fv);  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - setup(); - load(); - dawn(); - wait(); - dusk(); - closegraph(); - return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	setup(); +	load(); +	dawn(); +	wait(); +	dusk(); +	closegraph(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/qintro.cpp b/engines/avalanche/qintro.cpp index 22e6f3f1b8..0d15a9d7da 100644 --- a/engines/avalanche/qintro.cpp +++ b/engines/avalanche/qintro.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 @@ -31,7 +31,7 @@  namespace Avalanche { - /* This is a stand-alone program. */ +/* This is a stand-alone program. */  /* 0, black, remains 0.     Other numbers: the bits take precedence from the left. @@ -44,15 +44,16 @@ namespace Avalanche {       Second bit: 7  (light grey)        First bit: 1  (blue). */ -const palettetype our_palette =  -                {16, -                         /* sic */ -{{  0,  1, 57, 57,  7,  7,  7,  7, 63, 63, 63, 63, 63, 63, 63, 63}}}; +const palettetype our_palette = { +	16, +	/* sic */ +	{{  0,  1, 57, 57,  7,  7,  7,  7, 63, 63, 63, 63, 63, 63, 63, 63}} +}; -typedef matrix<'\0','\377',1,16,byte> fonttype; +typedef matrix < '\0', '\377', 1, 16, byte > fonttype;  fonttype f; -matrix<0,39,1,16,byte> next_line; +matrix<0, 39, 1, 16, byte> next_line;  byte next_bitline; @@ -62,244 +63,260 @@ boolean cut_out;  word cut_out_time; -array<1,117,varying_string<40> > x; +array<1, 117, varying_string<40> > x;  byte this_line; -word* skellern; +word *skellern;  /*$L intro.obj*/ -extern void introduction();  +extern void introduction(); -void graphmode(integer mode) -{ -    registers regs; +void graphmode(integer mode) { +	registers regs; - regs.ax=mode; - intr(0x10,regs); +	regs.ax = mode; +	intr(0x10, regs);  }  /* Firstly, port[$3C4]:=2; port[$3CF]:=4;,    Then port[$3C5]:=1 shl bit; port[$3CF]:=bit;. */ -void loadfont() -{ -    file<fonttype> ff; +void loadfont() { +	file<fonttype> ff; - assign(ff,"avalot.fnt"); - reset(ff); - ff >> f; - close(ff); +	assign(ff, "avalot.fnt"); +	reset(ff); +	ff >> f; +	close(ff);  }  void calc_next_line() - /* This proc sets up next_line. */ +/* This proc sets up next_line. */  { - string l; - byte fv,ff; - boolean oddlen; - byte start; - byte this_; - - fillchar(next_line,sizeof(next_line),'\0'); /* All blanks. */ - - if (this_line==117)  - { -  cut_out=true; -  return; - } - - l=x[this_line]; - this_line += 1; - - start=(20-length(l) / 2)-1; - oddlen=odd(length(l)); - - for( fv=1; fv <= length(l); fv ++) -  for( ff=1; ff <= 16; ff ++) -  { -   this_=f[l[fv]][ff]; -   if (oddlen)  -   {     /* Odd, => 4 bits shift to the right. */ -    next_line[start+fv][ff] += this_ << 4; -    next_line[start+fv-1][ff] += (cardinal)this_ >> 4; -   } else -   {     /* Even, => no bit shift. */ -    next_line[start+fv][ff]=this_; -   } -  } - next_bitline=1; +	string l; +	byte fv, ff; +	boolean oddlen; +	byte start; +	byte this_; + +	fillchar(next_line, sizeof(next_line), '\0'); /* All blanks. */ + +	if (this_line == 117) { +		cut_out = true; +		return; +	} + +	l = x[this_line]; +	this_line += 1; + +	start = (20 - length(l) / 2) - 1; +	oddlen = odd(length(l)); + +	for (fv = 1; fv <= length(l); fv ++) +		for (ff = 1; ff <= 16; ff ++) { +			this_ = f[l[fv]][ff]; +			if (oddlen) { +				/* Odd, => 4 bits shift to the right. */ +				next_line[start + fv][ff] += this_ << 4; +				next_line[start + fv - 1][ff] += (cardinal)this_ >> 4; +			} else { +				/* Even, => no bit shift. */ +				next_line[start + fv][ff] = this_; +			} +		} +	next_bitline = 1;  } -void display() -{ -    byte fv,ff; +void display() { +	byte fv, ff; - if (next_bitline == 17)  calc_next_line(); +	if (next_bitline == 17)  calc_next_line(); - if (cut_out)  - { -  cut_out_time -= 1; -  return; - } +	if (cut_out) { +		cut_out_time -= 1; +		return; +	} - move(mem[0xa000*40],mem[0xa000*0],7960); - for( fv=0; fv <= 39; fv ++) -   mem[0xa1f1*8+fv]=next_line[fv][next_bitline]; - next_bitline += 1; +	move(mem[0xa000 * 40], mem[0xa000 * 0], 7960); +	for (fv = 0; fv <= 39; fv ++) +		mem[0xa1f1 * 8 + fv] = next_line[fv][next_bitline]; +	next_bitline += 1;  } -void plot_a_star(integer x,integer y) -{ -    byte ofs; +void plot_a_star(integer x, integer y) { +	byte ofs; - ofs=x % 8; - x=x / 8; - mem[0xa000*x+y*40] += (cardinal)128 >> ofs; +	ofs = x % 8; +	x = x / 8; +	mem[0xa000 * x + y * 40] += (cardinal)128 >> ofs;  } -void plot_some_stars(integer y) -{ -    byte fv,times; - - switch (Random(7)) { -  case 1: times=1; break; -  case 2: times=2; break; -  case 3: times=3; break; -  default: return; - } - - for( fv=1; fv <= times; fv ++) -  plot_a_star(Random(320),y); +void plot_some_stars(integer y) { +	byte fv, times; + +	switch (Random(7)) { +	case 1: +		times = 1; +		break; +	case 2: +		times = 2; +		break; +	case 3: +		times = 3; +		break; +	default: +		return; +	} + +	for (fv = 1; fv <= times; fv ++) +		plot_a_star(Random(320), y);  } -void starry_starry_night() -{ - integer y; - byte bit; - - port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; - - for( bit=0; bit <= 2; bit ++) - { -  port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( y=1; y <= 200; y ++) -   plot_some_stars(y); - } +void starry_starry_night() { +	integer y; +	byte bit; + +	port[0x3c4] = 2; +	port[0x3ce] = 4; +	port[0x3c5] = 1 << bit; +	port[0x3cf] = bit; + +	for (bit = 0; bit <= 2; bit ++) { +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (y = 1; y <= 200; y ++) +			plot_some_stars(y); +	}  }  void setupgraphics()     /* Fix this proc. This prog SHOULDN'T use the   Graph unit. */  { -    integer gd,gm; +	integer gd, gm; - gd=3; gm=1; initgraph(gd,gm,""); +	gd = 3; +	gm = 1; +	initgraph(gd, gm, "");  } -void shovestars() -{ - move(mem[0xa000*0],mem[0xa000*40],7960); - fillchar(mem[0xa000*0],40,'\0'); - plot_some_stars(0); +void shovestars() { +	move(mem[0xa000 * 0], mem[0xa000 * 40], 7960); +	fillchar(mem[0xa000 * 0], 40, '\0'); +	plot_some_stars(0);  } -void do_next_line() -{ -    byte bit; - - port[0x3c4]=2; port[0x3ce]=4; - - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c5]=1 << bit; port[0x3cf]=bit; - -  switch (bit) { -   case 0: if ((displaycounter % 10)==0)  shovestars(); break; -   case 1: if ((displaycounter % 2)==0)  shovestars(); break; -   case 2: shovestars(); break; -   case 3: display(); break; /* The text. */ -  } - } - - if (displaycounter==40)  displaycounter=0; +void do_next_line() { +	byte bit; + +	port[0x3c4] = 2; +	port[0x3ce] = 4; + +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; + +		switch (bit) { +		case 0: +			if ((displaycounter % 10) == 0)  shovestars(); +			break; +		case 1: +			if ((displaycounter % 2) == 0)  shovestars(); +			break; +		case 2: +			shovestars(); +			break; +		case 3: +			display(); +			break; /* The text. */ +		} +	} + +	if (displaycounter == 40)  displaycounter = 0;  } -void load_text() -{ - word fv; - char* c; - byte thisline; - - - c=addr(introduction()); - thisline=0; - fillchar(x,sizeof(x),'\0'); - - for( fv=1; fv <= 2456; fv ++) - { -  switch (*c) { -   case '\15': thisline += 1; break; -   case '\12':/*nop*/; break; -   default: x[thisline]=x[thisline]+*c; -  } - -  c += 1; - } +void load_text() { +	word fv; +	char *c; +	byte thisline; + + +	c = addr(introduction()); +	thisline = 0; +	fillchar(x, sizeof(x), '\0'); + +	for (fv = 1; fv <= 2456; fv ++) { +		switch (*c) { +		case '\15': +			thisline += 1; +			break; +		case '\12':/*nop*/ +			; +			break; +		default: +			x[thisline] = x[thisline] + *c; +		} + +		c += 1; +	}  } -void check_params() -{ -    word s,o; integer e; +void check_params() { +	word s, o; +	integer e; - if (paramstr(1)!="jsb")  exit(0); - val(paramstr(2),s,e); if (e!=0)  exit(0); - val(paramstr(3),o,e); if (e!=0)  exit(0); - skellern=ptr(s,o+1); +	if (paramstr(1) != "jsb")  exit(0); +	val(paramstr(2), s, e); +	if (e != 0)  exit(0); +	val(paramstr(3), o, e); +	if (e != 0)  exit(0); +	skellern = ptr(s, o + 1);  } -int main(int argc, const char* argv[]) -{ +int main(int argc, const char *argv[]) { - pio_initialize(argc, argv); - check_params(); +	pio_initialize(argc, argv); +	check_params(); - setupgraphics(); +	setupgraphics(); - randseed=177; checkbreak=false; +	randseed = 177; +	checkbreak = false; - load_text(); +	load_text(); - this_line=1; +	this_line = 1; - graphmode(0xd); - loadfont(); +	graphmode(0xd); +	loadfont(); - next_bitline=17; - displaycounter=0; +	next_bitline = 17; +	displaycounter = 0; - cut_out_time=333; +	cut_out_time = 333; - setallpalette(our_palette); +	setallpalette(our_palette); - starry_starry_night(); +	starry_starry_night(); - while ((cut_out_time>0) && (! keypressed()))  - { +	while ((cut_out_time > 0) && (! keypressed())) { -  *skellern=0; +		*skellern = 0; -  do_next_line(); +		do_next_line(); -  displaycounter += 1; +		displaycounter += 1; -  do {; } while (!(*skellern>0)); - } +		do { +			; +		} while (!(*skellern > 0)); +	} - graphmode(3); - return EXIT_SUCCESS; +	graphmode(3); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/qstars.cpp b/engines/avalanche/qstars.cpp index d512838121..69920ef292 100644 --- a/engines/avalanche/qstars.cpp +++ b/engines/avalanche/qstars.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 @@ -33,234 +33,271 @@  namespace Avalanche { -integer gd,gm; +integer gd, gm; -typedef matrix<'\0','\377',0,15,byte> fonttype; +typedef matrix < '\0', '\377', 0, 15, byte > fonttype;  boolean reverse;  word spinnum; -array<0,1,fonttype> f; +array<0, 1, fonttype> f;  file<fonttype> ff; -array<0,7,0,15,0,79,byte> strip; +array<0, 7, 0, 15, 0, 79, byte> strip;  byte across; -word w; byte y; +word w; +byte y;  byte charnum;  byte cfont; /* current font. 0=roman, 1=italic. */ -char* c; +char *c;  const integer colours = 12; /* Run Workout to see possible values of these two. */  const integer steps = 6; /* 60,30,20,15,12,10,6,5,4,3,2,1 */  const integer gmtop = 360 / steps; -/*$L credits.obj*/ extern void credits();  - -void bigo2(string date) -{ - integer gd,gm; - byte c; - palettetype p; - untyped_file f; pointer pp; word s; - - - getpalette(p); - setvisualpage(1); setactivepage(0); - assign(f,"logo.avd"); reset(f,1); - for( gd=7; gd <= 194; gd ++) -  blockread(f,mem[0xa000*(gd*80)],53); - close(f); - s=imagesize(0,7,415,194); getmem(pp,s); getimage(0,7,415,194,pp); - - cleardevice(); - for( gd=1; gd <= 64; gd ++) - { -  for( gm=0; gm <= gmtop; gm ++) -  { -   c=(c % colours)+1; -/*   putpixel(trunc(sin(gm*steps*n)*gd*6)+320, -              trunc(cos(gm*steps*n)*gd*3)+175,c); */ -   if (c>5)  continue_; -   setcolor(c); arc(320,175,gm*steps,gm*steps+1,gd*6); -  } -  if (keypressed())  { closegraph(); exit(0); } - } - settextstyle(0,0,1); setcolor(13); - outtextxy(550,343,"(press any key)"); - - putimage(112,0,pp,orput); freemem(pp,s); - resetmouse; setvisualpage(0); +/*$L credits.obj*/ extern void credits(); + +void bigo2(string date) { +	integer gd, gm; +	byte c; +	palettetype p; +	untyped_file f; +	pointer pp; +	word s; + + +	getpalette(p); +	setvisualpage(1); +	setactivepage(0); +	assign(f, "logo.avd"); +	reset(f, 1); +	for (gd = 7; gd <= 194; gd ++) +		blockread(f, mem[0xa000 * (gd * 80)], 53); +	close(f); +	s = imagesize(0, 7, 415, 194); +	getmem(pp, s); +	getimage(0, 7, 415, 194, pp); + +	cleardevice(); +	for (gd = 1; gd <= 64; gd ++) { +		for (gm = 0; gm <= gmtop; gm ++) { +			c = (c % colours) + 1; +			/*   putpixel(trunc(sin(gm*steps*n)*gd*6)+320, +			              trunc(cos(gm*steps*n)*gd*3)+175,c); */ +			if (c > 5)  continue_; +			setcolor(c); +			arc(320, 175, gm * steps, gm * steps + 1, gd * 6); +		} +		if (keypressed())  { +			closegraph(); +			exit(0); +		} +	} +	settextstyle(0, 0, 1); +	setcolor(13); +	outtextxy(550, 343, "(press any key)"); + +	putimage(112, 0, pp, orput); +	freemem(pp, s); +	resetmouse; +	setvisualpage(0);  } -void nextchar()     /* Sets up charnum & cline for the next character. */ -{ +void nextchar() {   /* Sets up charnum & cline for the next character. */ - c += 1; +	c += 1;  } -void getchar() -{ - do { -  nextchar(); - -  switch (*c) { -   case '@': { cfont=1; nextchar(); } break; -   case '^': { cfont=0; nextchar(); } break; -   case '%': { closegraph(); exit(0); } break; -  } - - } while (!((*c!='\15') && (*c!='\12'))); - - for( w=0; w <= 7; w ++) -  for( y=0; y <= 15; y ++) -   move(strip[w][y][1],strip[w][y][0],79); - - for( w=0; w <= 7; w ++) -  for( y=0; y <= 15; y ++) -   strip[w][y][79]=(byte)((strip[7][y][78] << (w+1)))+ -    ((cardinal)f[cfont][*c][y] >> (7-w)); - - across=0; +void getchar() { +	do { +		nextchar(); + +		switch (*c) { +		case '@': { +			cfont = 1; +			nextchar(); +		} +		break; +		case '^': { +			cfont = 0; +			nextchar(); +		} +		break; +		case '%': { +			closegraph(); +			exit(0); +		} +		break; +		} + +	} while (!((*c != '\15') && (*c != '\12'))); + +	for (w = 0; w <= 7; w ++) +		for (y = 0; y <= 15; y ++) +			move(strip[w][y][1], strip[w][y][0], 79); + +	for (w = 0; w <= 7; w ++) +		for (y = 0; y <= 15; y ++) +			strip[w][y][79] = (byte)((strip[7][y][78] << (w + 1))) + +			                  ((cardinal)f[cfont][*c][y] >> (7 - w)); + +	across = 0;  } -void scrolltext() -{ - byte c,w,y; +void scrolltext() { +	byte c, w, y; - across += 1; - if (across==8)  getchar(); +	across += 1; +	if (across == 8)  getchar(); - for( y=0; y <= 15; y ++) -  for( w=0; w <= 1; w ++) -  move(strip[across][y][0],mem[0xa000*24000+(y*2+w)*80],80); +	for (y = 0; y <= 15; y ++) +		for (w = 0; w <= 1; w ++) +			move(strip[across][y][0], mem[0xa000 * 24000 + (y * 2 + w) * 80], 80);  } -void do_stuff() -{ - switch (spinnum) { -  case 50 ... 110: { -            setfillstyle(1,14); -            bar(0,315+(spinnum-50) / 3,640,315+(spinnum-50) / 3); -            bar(0,316-(spinnum-50) / 3,640,316-(spinnum-50) / 3); -            if (spinnum>56)  -            { -             setfillstyle(1,13); -             bar(0,315+(spinnum-56) / 3,640,315+(spinnum-56) / 3); -             bar(0,316-(spinnum-56) / 3,640,316-(spinnum-56) / 3); -            } -          } -          break; -  case 150 ... 198: { -             setfillstyle(1,0); -             bar(0,315+(spinnum-150) / 3,640,315+(spinnum-150) / 3); -             bar(0,316-(spinnum-150) / 3,640,316-(spinnum-150) / 3); -            } -            break; -  case 200: scrolltext(); break; - } +void do_stuff() { +	switch (spinnum) { +	case 50 ... 110: { +		setfillstyle(1, 14); +		bar(0, 315 + (spinnum - 50) / 3, 640, 315 + (spinnum - 50) / 3); +		bar(0, 316 - (spinnum - 50) / 3, 640, 316 - (spinnum - 50) / 3); +		if (spinnum > 56) { +			setfillstyle(1, 13); +			bar(0, 315 + (spinnum - 56) / 3, 640, 315 + (spinnum - 56) / 3); +			bar(0, 316 - (spinnum - 56) / 3, 640, 316 - (spinnum - 56) / 3); +		} +	} +	break; +	case 150 ... 198: { +		setfillstyle(1, 0); +		bar(0, 315 + (spinnum - 150) / 3, 640, 315 + (spinnum - 150) / 3); +		bar(0, 316 - (spinnum - 150) / 3, 640, 316 - (spinnum - 150) / 3); +	} +	break; +	case 200: +		scrolltext(); +		break; +	}  } -void setcol(byte which,byte what) +void setcol(byte which, byte what)  /*var dummy:byte;*/ -{; -/* setpalette(which,what); - asm -(*  mov dx,$3DA; -  in ax,dx; - -  or ah,ah; - -  mov dx,$3C0; -  mov al,which; -  out dx,al; - -  mov dx,$3C0; -  mov al,what; -  out dx,al; - end; -(* dummy:=port[$3DA]; - port[$3C0]:=which; port[$3C0]:=what;*/ -} - -void bigo2go()  { - palettetype p; byte c; boolean lmo; - boolean altnow,altbefore; - - for( gd=0; gd <= 13; gd ++) p.colors[gd]=0; - - setcol(13,24); /* murk */ setcol(14,38); /* gold */ - setcol(15,egawhite); /* white- of course */ - p.colors[13]=24; p.colors[14]=38; p.colors[15]=egawhite; - - /***/ - -    p.colors[5]=egawhite; -    p.colors[4]=egalightcyan; -    p.colors[3]=egacyan; -    p.colors[2]=egalightblue; -    p.colors[1]=egablue; - - /***/ - - c=1; p.size=16; lmo=false; - setallpalette(p); - - do { -/*  if reverse then -  begin -   dec(c); if c=0 then c:=colours; -  end else -  begin -   inc(c); if c>colours then c:=1; -  end; -  for gm:=1 to colours do -   case p.colors[gm] of -    egaWhite: begin p.colors[gm]:=egaLightcyan; setcol(gm,egaLightCyan); end; -    egaLightcyan: begin p.colors[gm]:=egaCyan; setcol(gm,egaCyan); end; -    egaCyan: begin p.colors[gm]:=egaLightblue; setcol(gm,egaLightblue); end; -    egaLightblue: begin p.colors[gm]:=egaBlue; setcol(gm,egaBlue); end; -    egaBlue: begin p.colors[gm]:=0; setcol(gm,0); end; -   end; -  p.colors[c]:=egaWhite; setcol(c,egaWhite); - -  AltBefore:=AltNow; AltNow:=testkey(sAlt);*/ - -  if (anymousekeypressed)  lmo=true; -  if (keypressed())  lmo=true; - - /* if (AltNow=True) and (AltBefore=False) then reverse:=not reverse;*/ - -  do_stuff(); -  if (spinnum<200)  spinnum += 1; - } while (!lmo); +	; +	/* setpalette(which,what); +	 asm +	(*  mov dx,$3DA; +	  in ax,dx; + +	  or ah,ah; + +	  mov dx,$3C0; +	  mov al,which; +	  out dx,al; + +	  mov dx,$3C0; +	  mov al,what; +	  out dx,al; +	 end; +	(* dummy:=port[$3DA]; +	 port[$3C0]:=which; port[$3C0]:=what;*/  } -void parse_cline() -{ -    integer e; - - if (paramstr(1)!="jsb")  - { -  output << "Not a standalone program." << NL; exit(255); - } +void bigo2go() { +	palettetype p; +	byte c; +	boolean lmo; +	boolean altnow, altbefore; + +	for (gd = 0; gd <= 13; gd ++) p.colors[gd] = 0; + +	setcol(13, 24); /* murk */ setcol(14, 38); /* gold */ +	setcol(15, egawhite); /* white- of course */ +	p.colors[13] = 24; +	p.colors[14] = 38; +	p.colors[15] = egawhite; + +	/***/ + +	p.colors[5] = egawhite; +	p.colors[4] = egalightcyan; +	p.colors[3] = egacyan; +	p.colors[2] = egalightblue; +	p.colors[1] = egablue; + +	/***/ + +	c = 1; +	p.size = 16; +	lmo = false; +	setallpalette(p); + +	do { +		/*  if reverse then +		  begin +		   dec(c); if c=0 then c:=colours; +		  end else +		  begin +		   inc(c); if c>colours then c:=1; +		  end; +		  for gm:=1 to colours do +		   case p.colors[gm] of +		    egaWhite: begin p.colors[gm]:=egaLightcyan; setcol(gm,egaLightCyan); end; +		    egaLightcyan: begin p.colors[gm]:=egaCyan; setcol(gm,egaCyan); end; +		    egaCyan: begin p.colors[gm]:=egaLightblue; setcol(gm,egaLightblue); end; +		    egaLightblue: begin p.colors[gm]:=egaBlue; setcol(gm,egaBlue); end; +		    egaBlue: begin p.colors[gm]:=0; setcol(gm,0); end; +		   end; +		  p.colors[c]:=egaWhite; setcol(c,egaWhite); + +		  AltBefore:=AltNow; AltNow:=testkey(sAlt);*/ + +		if (anymousekeypressed)  lmo = true; +		if (keypressed())  lmo = true; + +		/* if (AltNow=True) and (AltBefore=False) then reverse:=not reverse;*/ + +		do_stuff(); +		if (spinnum < 200)  spinnum += 1; +	} while (!lmo);  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - parse_cline(); - - gd=3; gm=1; initgraph(gd,gm,""); - assign(ff,"avalot.fnt"); reset(ff); ff >> f[0]; close(ff); - assign(ff,"avitalic.fnt"); reset(ff); ff >> f[1]; close(ff); +void parse_cline() { +	integer e; - c=addr(credits()); c -= 1; +	if (paramstr(1) != "jsb") { +		output << "Not a standalone program." << NL; +		exit(255); +	} +} - fillchar(strip,sizeof(strip),'\0'); - reverse=false; spinnum=0; across=7; charnum=1; cfont=0; - bigo2("1189"); /* 1189? 79? 2345? 1967? */ - bigo2go(); - return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	parse_cline(); + +	gd = 3; +	gm = 1; +	initgraph(gd, gm, ""); +	assign(ff, "avalot.fnt"); +	reset(ff); +	ff >> f[0]; +	close(ff); +	assign(ff, "avitalic.fnt"); +	reset(ff); +	ff >> f[1]; +	close(ff); + +	c = addr(credits()); +	c -= 1; + +	fillchar(strip, sizeof(strip), '\0'); +	reverse = false; +	spinnum = 0; +	across = 7; +	charnum = 1; +	cfont = 0; +	bigo2("1189"); /* 1189? 79? 2345? 1967? */ +	bigo2go(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/rawupd.cpp b/engines/avalanche/rawupd.cpp index 4f2a5f7b36..8c2c36784f 100644 --- a/engines/avalanche/rawupd.cpp +++ b/engines/avalanche/rawupd.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 @@ -31,69 +31,67 @@  namespace Avalanche {  searchrec s; -string x,y; -longint hash_time,s_time; +string x, y; +longint hash_time, s_time;  boolean s_exists; -void find_out_about_s(string name) -{ -    searchrec ss; -; - findfirst(name,anyfile,ss); - s_exists=doserror==0; +void find_out_about_s(string name) { +	searchrec ss; +	; +	findfirst(name, anyfile, ss); +	s_exists = doserror == 0; - if (s_exists)  -  s_time=ss.time; +	if (s_exists) +		s_time = ss.time;  } -void get_y() -{ - y=x; - if (set::of(range('0','9'), eos).has(x[2]))  -  y[1]='h'; else -  if (x[3]=='K')  -   y[1]='a'; else -    y[1]='s'; +void get_y() { +	y = x; +	if (set::of(range('0', '9'), eos).has(x[2])) +		y[1] = 'h'; +	else if (x[3] == 'K') +		y[1] = 'a'; +	else +		y[1] = 's';  } -void rename_it() -{ -    untyped_file f; +void rename_it() { +	untyped_file f; - output << x << " -> " << y; - assign(f,x); reset(f); rename(f,y); close(f); - output << " ...done." << NL; +	output << x << " -> " << y; +	assign(f, x); +	reset(f); +	rename(f, y); +	close(f); +	output << " ...done." << NL;  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - output << NL; - findfirst("#*.*",anyfile,s); - while (doserror==0)  - { -  x=s.name; -  get_y(); -  hash_time=s.time; -  output << format(x,15); clreol; -  find_out_about_s(y); -  if (s_exists)  -  { -   output << ": s exists and is "; -   if (s_time<hash_time)  -    output << "NEWER!" << NL; -    else if (s_time==hash_time)  -     output << string("equal.")+'\15'; -      else output << "older." << NL; -  } else -  { -   output << " ... NO S FOUND! Renaming..."; -   rename_it(); -  } +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	output << NL; +	findfirst("#*.*", anyfile, s); +	while (doserror == 0) { +		x = s.name; +		get_y(); +		hash_time = s.time; +		output << format(x, 15); +		clreol; +		find_out_about_s(y); +		if (s_exists) { +			output << ": s exists and is "; +			if (s_time < hash_time) +				output << "NEWER!" << NL; +			else if (s_time == hash_time) +				output << string("equal.") + '\15'; +			else output << "older." << NL; +		} else { +			output << " ... NO S FOUND! Renaming..."; +			rename_it(); +		} -  findnext(s); - } - return EXIT_SUCCESS; +		findnext(s); +	} +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/readsez.cpp b/engines/avalanche/readsez.cpp index b55d45ab3b..bdf3a7ee8c 100644 --- a/engines/avalanche/readsez.cpp +++ b/engines/avalanche/readsez.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 @@ -28,80 +28,88 @@  namespace Avalanche {  struct markertype { -              word length; -              longint offset; -              byte checksum; +	word length; +	longint offset; +	byte checksum;  };  struct sezheader { -             array<1,2,char> initials;     /* should be "TT" */ -             word gamecode; -             word revision; /* as 3- or 4-digit code (eg v1.00 = 100) */ -             longint chains; /* number of scroll chains */ -             longint size; /* total size of all chains */ +	array<1, 2, char> initials;   /* should be "TT" */ +	word gamecode; +	word revision; /* as 3- or 4-digit code (eg v1.00 = 100) */ +	longint chains; /* number of scroll chains */ +	longint size; /* total size of all chains */  };  untyped_file f;  longint number;  markertype marker;  sezheader sezhead; -array<0,1999,char> x; +array<0, 1999, char> x;  word fv;  byte sum; -byte sumup() -{ -    word fv; byte total; -byte sumup_result; -; - total=0; - for( fv=0; fv <= marker.length; fv ++) - {; -  total += ord(x[fv]); - } - sumup_result=total; -return sumup_result; +byte sumup() { +	word fv; +	byte total; +	byte sumup_result; +	; +	total = 0; +	for (fv = 0; fv <= marker.length; fv ++) { +		; +		total += ord(x[fv]); +	} +	sumup_result = total; +	return sumup_result;  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - output << "READ-SEZ by TT." << NL; output << NL; - assign(f,"avalot.sez"); reset(f,1); - seek(f,255); blockread(f,sezhead,sizeof(sezhead)); - {; -  if (sezhead.initials!="TT")  -  {; -   output << "Not a valid Sez file!" << NL; -   exit(0); -  } -  output << "Number of chains in file = " << sezhead.chains << NL; -  output << "Total size of all chains = " << sezhead.size << " bytes." << NL; - } - output << NL; - output << "Number of scrollchain to display?"; input >> number >> NL; - seek(f,longint(262)+number*longint(7)); blockread(f,marker,7); - {; -  output << "Scrollchain no. " << number << NL; -  output << "Length: " << marker.length << NL; -  output << "Offset: " << marker.offset << NL; -  output << NL; -  output << "Contents:" << NL; -  seek(f,longint(270)+sezhead.chains*longint(7)+marker.offset); -  blockread(f,x,marker.length+1); -  for( fv=0; fv <= marker.length; fv ++) x[fv] -= 3+177*fv*marker.length; /* unscramble */ -  for( fv=0; fv <= marker.length; fv ++) output << x[fv]; -  output << NL; sum=sumup(); -  output << "Checksum in file: " << marker.checksum << ". Actual value: " << sum << '.' << NL; -  output << NL; -  if (sum!=marker.checksum)  -  {; -   output << "Bleargh! Checksum failed!" << NL; -   exit(0); -  } - } - close(f); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	output << "READ-SEZ by TT." << NL; +	output << NL; +	assign(f, "avalot.sez"); +	reset(f, 1); +	seek(f, 255); +	blockread(f, sezhead, sizeof(sezhead)); +	{ +		; +		if (sezhead.initials != "TT") { +			; +			output << "Not a valid Sez file!" << NL; +			exit(0); +		} +		output << "Number of chains in file = " << sezhead.chains << NL; +		output << "Total size of all chains = " << sezhead.size << " bytes." << NL; +	} +	output << NL; +	output << "Number of scrollchain to display?"; +	input >> number >> NL; +	seek(f, longint(262) + number * longint(7)); +	blockread(f, marker, 7); +	{ +		; +		output << "Scrollchain no. " << number << NL; +		output << "Length: " << marker.length << NL; +		output << "Offset: " << marker.offset << NL; +		output << NL; +		output << "Contents:" << NL; +		seek(f, longint(270) + sezhead.chains * longint(7) + marker.offset); +		blockread(f, x, marker.length + 1); +		for (fv = 0; fv <= marker.length; fv ++) x[fv] -= 3 + 177 * fv * marker.length; /* unscramble */ +		for (fv = 0; fv <= marker.length; fv ++) output << x[fv]; +		output << NL; +		sum = sumup(); +		output << "Checksum in file: " << marker.checksum << ". Actual value: " << sum << '.' << NL; +		output << NL; +		if (sum != marker.checksum) { +			; +			output << "Bleargh! Checksum failed!" << NL; +			exit(0); +		} +	} +	close(f); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/reginam.cpp b/engines/avalanche/reginam.cpp index 0458acb337..441a35ace0 100644 --- a/engines/avalanche/reginam.cpp +++ b/engines/avalanche/reginam.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 @@ -27,7 +27,7 @@  namespace Avalanche { -const array<1,36,char> letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; +const array<1, 36, char> letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";  varying_string<30> name;  varying_string<5> number; @@ -38,82 +38,82 @@ static string z;  static byte p; -static void replace(char what,char whatwith) -{; - p=pos(what,z); if (p>0)  z[p]=whatwith; +static void replace(char what, char whatwith) { +	; +	p = pos(what, z); +	if (p > 0)  z[p] = whatwith;  } -void alphanum() -{ - byte fv; - -; - z=""; - for( fv=1; fv <= length(name); fv ++) -  if (set::of(range('A','Z'), eos).has(name[fv]))  -   z=z+'7'+name[fv]; else -   z=z+upcase(name[fv]); - replace(' ','1'); - replace('.','2'); - replace('-','3'); - replace('\'','4'); - replace('"','5'); - replace('!','6'); - replace(',','9'); - replace('?','0'); - - for( fv=1; fv <= length(number); fv ++) -  number[fv]=upcase(number[fv]); - - name=z+'8'+number; +void alphanum() { +	byte fv; + +	; +	z = ""; +	for (fv = 1; fv <= length(name); fv ++) +		if (set::of(range('A', 'Z'), eos).has(name[fv])) +			z = z + '7' + name[fv]; +		else +			z = z + upcase(name[fv]); +	replace(' ', '1'); +	replace('.', '2'); +	replace('-', '3'); +	replace('\'', '4'); +	replace('"', '5'); +	replace('!', '6'); +	replace(',', '9'); +	replace('?', '0'); + +	for (fv = 1; fv <= length(number); fv ++) +		number[fv] = upcase(number[fv]); + +	name = z + '8' + number;  } -void scramble() -{ -    byte fv,what; -; - for( fv=1; fv <= length(name); fv ++) - {; -  what=pos(name[fv],letters); -  what += 177; -  what += (fv+1)*3; -  name[fv]=letters[(what % 36)+1-1]; - } +void scramble() { +	byte fv, what; +	; +	for (fv = 1; fv <= length(name); fv ++) { +		; +		what = pos(name[fv], letters); +		what += 177; +		what += (fv + 1) * 3; +		name[fv] = letters[(what % 36) + 1 - 1]; +	}  } -void checks() -{ -    byte fv,total; -; - total=177; - for( fv=1; fv <= length(name); fv ++) -  total += ord(name[fv]); - name=string('T')+name+letters[total % 36-1]; +void checks() { +	byte fv, total; +	; +	total = 177; +	for (fv = 1; fv <= length(name); fv ++) +		total += ord(name[fv]); +	name = string('T') + name + letters[total % 36 - 1];  } -void negate() -{ -    byte fv; -; - name[1]='N'; - for( fv=2; fv <= length(name); fv ++) -  name[fv]=letters[37-pos(name[fv],letters)-1]; +void negate() { +	byte fv; +	; +	name[1] = 'N'; +	for (fv = 2; fv <= length(name); fv ++) +		name[fv] = letters[37 - pos(name[fv], letters) - 1];  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - output << "Registrant's name?"; input >> name >> NL; - output << "And number (eg, A1)?"; input >> number >> NL; - alphanum(); - output << "Name = " << name << NL; - scramble(); - output << "Scrambled = " << name << NL; - checks(); - output << "With checks = " << name << NL; - negate(); - output << "Or, negated, = " << name << NL; -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	output << "Registrant's name?"; +	input >> name >> NL; +	output << "And number (eg, A1)?"; +	input >> number >> NL; +	alphanum(); +	output << "Name = " << name << NL; +	scramble(); +	output << "Scrambled = " << name << NL; +	checks(); +	output << "With checks = " << name << NL; +	negate(); +	output << "Or, negated, = " << name << NL; +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/sackb1.cpp b/engines/avalanche/sackb1.cpp index e3369db8c7..54d860c5c6 100644 --- a/engines/avalanche/sackb1.cpp +++ b/engines/avalanche/sackb1.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 @@ -42,38 +42,37 @@  #include "sackb1.h" -/*$L v:MOD-obj.OBJ*/ 	        /* Link in Object file */ -/*$F+*/ 				/* force calls to be 'far'*/ +/*$L v:MOD-obj.OBJ*/            /* Link in Object file */ +/*$F+*/                 /* force calls to be 'far'*/  namespace Avalanche { -extern void modvolume(integer v1,integer v2,integer v3,integer v4);  /*Can do while playing*/ -extern void moddevice(integer& device);  -extern void modsetup(integer& status,integer device,integer mixspeed,integer pro,integer loop,string& stri);  -extern void modstop();  -extern void modinit();  +extern void modvolume(integer v1, integer v2, integer v3, integer v4); /*Can do while playing*/ +extern void moddevice(integer &device); +extern void modsetup(integer &status, integer device, integer mixspeed, integer pro, integer loop, string &stri); +extern void modstop(); +extern void modinit();  /*$F-*/ -void sb_start(string md) -{ - integer dev,mix,stat,pro,loop; - - modinit(); - dev=7;  /* Sound Blaster */ - mix = 10000;    /*use 10000 normally */ - pro = 0;  /*Leave at 0*/ - loop =4;  /*4 means mod will play forever*/ - modvolume (255,255,255,255);    /* Full volume */ - modsetup ( stat, dev, mix, pro, loop, md ); +void sb_start(string md) { +	integer dev, mix, stat, pro, loop; + +	modinit(); +	dev = 7; /* Sound Blaster */ +	mix = 10000;    /*use 10000 normally */ +	pro = 0;  /*Leave at 0*/ +	loop = 4; /*4 means mod will play forever*/ +	modvolume(255, 255, 255, 255);  /* Full volume */ +	modsetup(stat, dev, mix, pro, loop, md);  } -void sb_stop() -{; - modstop(); +void sb_stop() { +	; +	modstop();  } -void sb_link()     /* At the moment, this does nothing. */ -{; +void sb_link() {   /* At the moment, this does nothing. */ +	;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/sackb1.h b/engines/avalanche/sackb1.h index c660c36117..7ac3cce0a3 100644 --- a/engines/avalanche/sackb1.h +++ b/engines/avalanche/sackb1.h @@ -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 diff --git a/engines/avalanche/sackb3.cpp b/engines/avalanche/sackb3.cpp index 0abca98d17..a77431077f 100644 --- a/engines/avalanche/sackb3.cpp +++ b/engines/avalanche/sackb3.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 @@ -27,25 +27,24 @@  /*$M 16384,0,0*/ -              /* to demonstrate the SBVoice Unit */ -              /* Copyright 1991 Amit K. Mathur, Windsor, Ontario */ +/* to demonstrate the SBVoice Unit */ +/* Copyright 1991 Amit K. Mathur, Windsor, Ontario */  /*#include "SBVoice.h"*/  namespace Avalanche { -int main(int argc, const char* argv[]) -{ -pio_initialize(argc, argv); -if (paramcount>0)  { -    loadvoice(paramstr(1),0,0); -    sb_output(seg(soundfile),ofs(soundfile)+26); -    do { -         output << "Demo of the SBVoice Unit, Copyright 1991 by Amit K. Mathur --- "; -    } while (!(statusword==0)); -} else -    output << "Usage: DEMO [d:\\path\\]filename.voc" << NL; -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	if (paramcount > 0)  { +		loadvoice(paramstr(1), 0, 0); +		sb_output(seg(soundfile), ofs(soundfile) + 26); +		do { +			output << "Demo of the SBVoice Unit, Copyright 1991 by Amit K. Mathur --- "; +		} while (!(statusword == 0)); +	} else +		output << "Usage: DEMO [d:\\path\\]filename.voc" << NL; +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/sackblas.cpp b/engines/avalanche/sackblas.cpp index 9cec14da29..0c35671e9b 100644 --- a/engines/avalanche/sackblas.cpp +++ b/engines/avalanche/sackblas.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 diff --git a/engines/avalanche/saving.cpp b/engines/avalanche/saving.cpp index 5385a6c28f..8075225e7b 100644 --- a/engines/avalanche/saving.cpp +++ b/engines/avalanche/saving.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 @@ -29,48 +29,54 @@  namespace Avalanche { -integer gd,gm; +integer gd, gm;  byte a /*absolute $A000:(15*80)*/;  byte bit;  untyped_file f; -void load(string nam) -{ -    byte z; - array<1,4,pointer> a; - untyped_file f; word s; - string check; -; - assign(f,nam); - reset(f,1); - blockread(f,check,41); - blockread(f,check,13); - blockread(f,check,31); - s=imagesize(0,0,getmaxx(),75); - for( z=1; z <= 2; z ++) - {; -  getmem(a[z],s); -  blockread(f,a[z],s); -  setactivepage(0); -  putimage(0,15+(z-1)*75,a[z],0); -  freemem(a[z],s); - } - close(f); +void load(string nam) { +	byte z; +	array<1, 4, pointer> a; +	untyped_file f; +	word s; +	string check; +	; +	assign(f, nam); +	reset(f, 1); +	blockread(f, check, 41); +	blockread(f, check, 13); +	blockread(f, check, 31); +	s = imagesize(0, 0, getmaxx(), 75); +	for (z = 1; z <= 2; z ++) { +		; +		getmem(a[z], s); +		blockread(f, a[z], s); +		setactivepage(0); +		putimage(0, 15 + (z - 1) * 75, a[z], 0); +		freemem(a[z], s); +	} +	close(f);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,""); - load("d:britain.avd"); - assign(f,"c:\\sleep\\test.ega"); rewrite(f,1); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockwrite(f,a,12000); - } - close(f); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	load("d:britain.avd"); +	assign(f, "c:\\sleep\\test.ega"); +	rewrite(f, 1); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockwrite(f, a, 12000); +	} +	close(f); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/scr_1.cpp b/engines/avalanche/scr_1.cpp index 6228bf86f5..5d8bc7d23b 100644 --- a/engines/avalanche/scr_1.cpp +++ b/engines/avalanche/scr_1.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 @@ -31,86 +31,110 @@ namespace Avalanche {  const varying_string<4> codes = " ßÜÛ"; -typedef matrix<'\0','\377',0,15,byte> fonttype; +typedef matrix < '\0', '\377', 0, 15, byte > fonttype; -byte x,xx,y; -string title,fn; +byte x, xx, y; +string title, fn;  file<fonttype> f;  fonttype font;  byte code; -typedef array<1,3840,byte> atype; +typedef array<1, 3840, byte> atype; -void save() -{ - file<atype> f; - word fv; - atype a /*absolute $B800:0*/; -; - assign(f,"TEXT1.SCR"); - rewrite(f); f << a; close(f); +void save() { +	file<atype> f; +	word fv; +	atype a /*absolute $B800:0*/; +	; +	assign(f, "TEXT1.SCR"); +	rewrite(f); +	f << a; +	close(f);  } -void centre(byte y, string z) -{; - gotoxy(40-length(z) / 2,y); output << z; +void centre(byte y, string z) { +	; +	gotoxy(40 - length(z) / 2, y); +	output << z;  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; -/* write('Title?'); readln(title); - write('Font?'); readln(fn); */ - textattr=0; clrscr; - title="Bug Alert!"; fn=""; - for( xx=1; xx <= 77; xx ++) - {; -  gotoxy(Random(80)+1,Random(24)+1); -  switch (Random(2)) { -   case 0: textattr=red; break; -   case 1: textattr=lightred; break; -  } -  switch (Random(4)) { -   case 0: output << '*'; break; -   case 1: output << '\17'; break; -   case 2: output << 'ù'; break; -   case 3: output << 'ú'; break; -  } - } - textattr=12; - assign(f,"c:\\thomas\\ttsmall.fnt"); - reset(f); f >> font; close(f); - for( y=0; y <= 3; y ++) - {; -  for( x=1; x <= length(title); x ++) -  {; -   for( xx=7; xx >= 0; xx --) -   {; -    code=(byte)(((1 << xx) & font[title[x]][y*2])>0)+ -     (byte)(((1 << xx) & font[title[x]][y*2+1])>0)*2; -    gotoxy(1+x*8-xx,y+1); -    if (code>0)  output << codes[code+1-1]; -   } -  } -  /*if wherex<>1 then writeln;*/ - } - textattr=red; - centre(7,"An internal error has just occurred within the program."); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	/* write('Title?'); readln(title); +	 write('Font?'); readln(fn); */ +	textattr = 0; +	clrscr; +	title = "Bug Alert!"; +	fn = ""; +	for (xx = 1; xx <= 77; xx ++) { +		; +		gotoxy(Random(80) + 1, Random(24) + 1); +		switch (Random(2)) { +		case 0: +			textattr = red; +			break; +		case 1: +			textattr = lightred; +			break; +		} +		switch (Random(4)) { +		case 0: +			output << '*'; +			break; +		case 1: +			output << '\17'; +			break; +		case 2: +			output << 'ù'; +			break; +		case 3: +			output << 'ú'; +			break; +		} +	} +	textattr = 12; +	assign(f, "c:\\thomas\\ttsmall.fnt"); +	reset(f); +	f >> font; +	close(f); +	for (y = 0; y <= 3; y ++) { +		; +		for (x = 1; x <= length(title); x ++) { +			; +			for (xx = 7; xx >= 0; xx --) { +				; +				code = (byte)(((1 << xx) & font[title[x]][y * 2]) > 0) + +				       (byte)(((1 << xx) & font[title[x]][y * 2 + 1]) > 0) * 2; +				gotoxy(1 + x * 8 - xx, y + 1); +				if (code > 0)  output << codes[code + 1 - 1]; +			} +		} +		/*if wherex<>1 then writeln;*/ +	} +	textattr = red; +	centre(7, "An internal error has just occurred within the program."); - textattr=white; gotoxy(26, 9); output << "Error number: "; -  textattr=lightred; output << "   "; - textattr=white; gotoxy(27,10); output << "at location: "; -  textattr=lightred; output << "           "; - centre(12,"This screen should never come up..."); - centre(13,"but it just has!"); - textattr=15; - centre(15,"So, please tell Thorsoft about this as soon as"); - centre(16,"possible, so that we can fix it."); - textattr=red; - centre(20,"Thanks..."); - save(); -return EXIT_SUCCESS; +	textattr = white; +	gotoxy(26, 9); +	output << "Error number: "; +	textattr = lightred; +	output << "   "; +	textattr = white; +	gotoxy(27, 10); +	output << "at location: "; +	textattr = lightred; +	output << "           "; +	centre(12, "This screen should never come up..."); +	centre(13, "but it just has!"); +	textattr = 15; +	centre(15, "So, please tell Thorsoft about this as soon as"); +	centre(16, "possible, so that we can fix it."); +	textattr = red; +	centre(20, "Thanks..."); +	save(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/scr_2.cpp b/engines/avalanche/scr_2.cpp index 6cb6fca6e9..c3de473a0a 100644 --- a/engines/avalanche/scr_2.cpp +++ b/engines/avalanche/scr_2.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 @@ -31,110 +31,130 @@ namespace Avalanche {  const varying_string<4> codes = " ßÜÛ"; -typedef matrix<'\0','\377',0,15,byte> fonttype; +typedef matrix < '\0', '\377', 0, 15, byte > fonttype; -byte x,xx,y; +byte x, xx, y;  string qq;  file<fonttype> f;  fonttype font;  byte code; -typedef array<1,3840,byte> atype; +typedef array<1, 3840, byte> atype; -void save() -{ - file<atype> f; - word fv; - atype a /*absolute $B800:0*/; -; - assign(f,"TEXT2.SCR"); - rewrite(f); f << a; close(f); +void save() { +	file<atype> f; +	word fv; +	atype a /*absolute $B800:0*/; +	; +	assign(f, "TEXT2.SCR"); +	rewrite(f); +	f << a; +	close(f);  } -void centre(byte y, string z) -{ -    byte fv; -; - for( fv=1; fv <= length(z); fv ++) - {; -  gotoxy(39-length(z) / 2+fv,y); -  if (odd(fv+y))  textattr=2; else textattr=cyan; -  if (z[fv]!='\40')  output << z[fv]; - } +void centre(byte y, string z) { +	byte fv; +	; +	for (fv = 1; fv <= length(z); fv ++) { +		; +		gotoxy(39 - length(z) / 2 + fv, y); +		if (odd(fv + y))  textattr = 2; +		else textattr = cyan; +		if (z[fv] != '\40')  output << z[fv]; +	}  } -void line(byte yy, string title) -{ -      const integer offset = 5; -; - for( y=1; y <= 6; y ++) - {; -  qq=""; -  for( x=1; x <= length(title); x ++) -  {; -   for( xx=7; xx >= 0; xx --) -   {; -    code=(byte)(((1 << xx) & font[title[x]][y*2-offset])>0)+ -     (byte)(((1 << xx) & font[title[x]][y*2+1-offset])>0)*2; -    qq=qq+codes[code+1-1]; -   } -  } -  centre(y+yy,qq); - } +void line(byte yy, string title) { +	const integer offset = 5; +	; +	for (y = 1; y <= 6; y ++) { +		; +		qq = ""; +		for (x = 1; x <= length(title); x ++) { +			; +			for (xx = 7; xx >= 0; xx --) { +				; +				code = (byte)(((1 << xx) & font[title[x]][y * 2 - offset]) > 0) + +				       (byte)(((1 << xx) & font[title[x]][y * 2 + 1 - offset]) > 0) * 2; +				qq = qq + codes[code + 1 - 1]; +			} +		} +		centre(y + yy, qq); +	}  } -void chips() -{ -    byte fv,x,y; -; - for( fv=0; fv <= 1; fv ++) - {; -  textattr=120; -  for( y=2; y <= 6; y ++) -   {; -    gotoxy(fv*67+3,y); output << "     "; if (fv==1)  output << ' '; -   } -  gotoxy(fv*67+4,4); -  if (fv==0)  output << "RAM"; else output << "CRAM"; -  textattr=7; -  for( x=0; x <= 1; x ++) -   for( y=2; y <= 6; y ++) -    {; gotoxy(fv*67+2+x*(6+fv),y); output << 'ð'; } - } +void chips() { +	byte fv, x, y; +	; +	for (fv = 0; fv <= 1; fv ++) { +		; +		textattr = 120; +		for (y = 2; y <= 6; y ++) { +			; +			gotoxy(fv * 67 + 3, y); +			output << "     "; +			if (fv == 1)  output << ' '; +		} +		gotoxy(fv * 67 + 4, 4); +		if (fv == 0)  output << "RAM"; +		else output << "CRAM"; +		textattr = 7; +		for (x = 0; x <= 1; x ++) +			for (y = 2; y <= 6; y ++) { +				; +				gotoxy(fv * 67 + 2 + x * (6 + fv), y); +				output << 'ð'; +			} +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - textattr=0; clrscr; - chips(); - assign(f,"c:\\thomas\\ttsmall.fnt"); - reset(f); f >> font; close(f); - line(0,"Out of"); - line(4,"memory!"); - centre(11,"Yes, RAM cram strikes again- Avvy has just run out of RAM (not the"); - centre(12,"hydraulic, woolly or village kinds.) Fortunately, there are a few things"); - centre(13,"you can do about this:"); - textattr=3; - for( xx=15; xx <= 17; xx ++) - {; -  gotoxy(23,xx); output << '\20'; - } - textattr=2; - gotoxy(25,15); output << "Don't run Avvy in a DOS shell."; - gotoxy(25,16); output << "If that fails, try un-installing your TSRs."; - gotoxy(25,17); output << "If you've got DOS 5ù0 or above, try using"; - gotoxy(28,18); textattr=3; output << "dos=high"; - textattr=2; output << ','; - textattr=3; output << " loadhigh"; - textattr=2; output << " and"; - textattr=3; output << " devicehigh"; - textattr=2; output << '.'; - gotoxy(28,19); output << "See your DOS manual for details..."; - centre(23,"Sorry for any inconvenience..."); - save(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	textattr = 0; +	clrscr; +	chips(); +	assign(f, "c:\\thomas\\ttsmall.fnt"); +	reset(f); +	f >> font; +	close(f); +	line(0, "Out of"); +	line(4, "memory!"); +	centre(11, "Yes, RAM cram strikes again- Avvy has just run out of RAM (not the"); +	centre(12, "hydraulic, woolly or village kinds.) Fortunately, there are a few things"); +	centre(13, "you can do about this:"); +	textattr = 3; +	for (xx = 15; xx <= 17; xx ++) { +		; +		gotoxy(23, xx); +		output << '\20'; +	} +	textattr = 2; +	gotoxy(25, 15); +	output << "Don't run Avvy in a DOS shell."; +	gotoxy(25, 16); +	output << "If that fails, try un-installing your TSRs."; +	gotoxy(25, 17); +	output << "If you've got DOS 5ù0 or above, try using"; +	gotoxy(28, 18); +	textattr = 3; +	output << "dos=high"; +	textattr = 2; +	output << ','; +	textattr = 3; +	output << " loadhigh"; +	textattr = 2; +	output << " and"; +	textattr = 3; +	output << " devicehigh"; +	textattr = 2; +	output << '.'; +	gotoxy(28, 19); +	output << "See your DOS manual for details..."; +	centre(23, "Sorry for any inconvenience..."); +	save(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/scr_3.cpp b/engines/avalanche/scr_3.cpp index b71353c9e0..54ad5b0f4d 100644 --- a/engines/avalanche/scr_3.cpp +++ b/engines/avalanche/scr_3.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 @@ -31,90 +31,112 @@ namespace Avalanche {  const varying_string<4> codes = " ßÜÛ"; -typedef matrix<'\0','\377',0,15,byte> fonttype; +typedef matrix < '\0', '\377', 0, 15, byte > fonttype; -byte x,xx,y; +byte x, xx, y;  string qq;  file<fonttype> f;  fonttype font;  byte code; -typedef array<1,3840,byte> atype; +typedef array<1, 3840, byte> atype; -void save() -{ - file<atype> f; - word fv; - atype a /*absolute $B800:0*/; -; - assign(f,"TEXT3.SCR"); - rewrite(f); f << a; close(f); +void save() { +	file<atype> f; +	word fv; +	atype a /*absolute $B800:0*/; +	; +	assign(f, "TEXT3.SCR"); +	rewrite(f); +	f << a; +	close(f);  } -void centre(byte y, string z) -{ -    byte fv; -; - for( fv=1; fv <= length(z); fv ++) - {; -  gotoxy(39-length(z) / 2+fv,y); -  if (z[fv]!='\40')  output << z[fv]; - } +void centre(byte y, string z) { +	byte fv; +	; +	for (fv = 1; fv <= length(z); fv ++) { +		; +		gotoxy(39 - length(z) / 2 + fv, y); +		if (z[fv] != '\40')  output << z[fv]; +	}  } -void line(byte cx,byte cy, string title) -{; - for( y=0; y <= 4; y ++) - {; -  qq=""; -  for( x=1; x <= length(title); x ++) -  {; -   for( xx=7; xx >= 0; xx --) -   {; -    code=(byte)(((1 << xx) & font[title[x]][y*2])>0)+ -     (byte)(((1 << xx) & font[title[x]][y*2+1])>0)*2; -    qq=qq+codes[code+1-1]; -   } -  } -  gotoxy(cx,cy+y); output << qq; - } +void line(byte cx, byte cy, string title) { +	; +	for (y = 0; y <= 4; y ++) { +		; +		qq = ""; +		for (x = 1; x <= length(title); x ++) { +			; +			for (xx = 7; xx >= 0; xx --) { +				; +				code = (byte)(((1 << xx) & font[title[x]][y * 2]) > 0) + +				       (byte)(((1 << xx) & font[title[x]][y * 2 + 1]) > 0) * 2; +				qq = qq + codes[code + 1 - 1]; +			} +		} +		gotoxy(cx, cy + y); +		output << qq; +	}  } -void big_t() -{ - text t; - string x; - byte y; -; - assign(t,"c:\\avalot\\t.txt"); reset(t); y=1; - while (! eof(t))  - {; -  t >> x >> NL; -  gotoxy(1,y); output << x; y += 1; - } +void big_t() { +	text t; +	string x; +	byte y; +	; +	assign(t, "c:\\avalot\\t.txt"); +	reset(t); +	y = 1; +	while (! eof(t)) { +		; +		t >> x >> NL; +		gotoxy(1, y); +		output << x; +		y += 1; +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - textattr=4; clrscr; - assign(f,"c:\\thomas\\ttsmall.fnt"); - reset(f); f >> font; close(f); - textattr=4; line(19,4,"hanks"); - textattr=6; line(23,8,"for"); - line(7,12,"playing"); textattr += 8; - line(12,16,"Avalot."); - textattr=12; big_t(); - textattr=8; gotoxy(40,2); output << "(c) 1994, Mike, Mark and Thomas Thurman."; - textattr=11; gotoxy(50,10); output << "* Goodbyte! *"; - textattr=10; gotoxy(9,20); output << '\20'; - textattr=12; output << " If you'd like to see yet more of these games, then don't forget to"; - gotoxy(12,21); output << "register, or your"; clreol; - gotoxy(12,22); output << "for the rest of your life!"; - gotoxy(60,22); output << "(Only joking!)"; - save(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	textattr = 4; +	clrscr; +	assign(f, "c:\\thomas\\ttsmall.fnt"); +	reset(f); +	f >> font; +	close(f); +	textattr = 4; +	line(19, 4, "hanks"); +	textattr = 6; +	line(23, 8, "for"); +	line(7, 12, "playing"); +	textattr += 8; +	line(12, 16, "Avalot."); +	textattr = 12; +	big_t(); +	textattr = 8; +	gotoxy(40, 2); +	output << "(c) 1994, Mike, Mark and Thomas Thurman."; +	textattr = 11; +	gotoxy(50, 10); +	output << "* Goodbyte! *"; +	textattr = 10; +	gotoxy(9, 20); +	output << '\20'; +	textattr = 12; +	output << " If you'd like to see yet more of these games, then don't forget to"; +	gotoxy(12, 21); +	output << "register, or your"; +	clreol; +	gotoxy(12, 22); +	output << "for the rest of your life!"; +	gotoxy(60, 22); +	output << "(Only joking!)"; +	save(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/scr_4.cpp b/engines/avalanche/scr_4.cpp index 7f5cb6ada0..befde2a7f3 100644 --- a/engines/avalanche/scr_4.cpp +++ b/engines/avalanche/scr_4.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 @@ -31,86 +31,102 @@ namespace Avalanche {  const varying_string<4> codes = " ÞÝÛ"; -typedef matrix<'\0','\377',0,15,byte> fonttype; +typedef matrix < '\0', '\377', 0, 15, byte > fonttype; -byte x,xx,y; +byte x, xx, y;  string qq;  file<fonttype> f;  fonttype font;  byte code; -void centre(byte y, string z) -{ -    byte fv; -; - for( fv=1; fv <= length(z); fv ++) - {; -  gotoxy(39-length(z) / 2+fv,y); -  if (z[fv]!='\40')  output << z[fv]; - } +void centre(byte y, string z) { +	byte fv; +	; +	for (fv = 1; fv <= length(z); fv ++) { +		; +		gotoxy(39 - length(z) / 2 + fv, y); +		if (z[fv] != '\40')  output << z[fv]; +	}  } -void line(byte cy, string title) -{; - for( y=0; y <= 6; y ++) - {; -  qq=""; -  for( x=1; x <= length(title); x ++) -  {; -   for( xx=3; xx >= 0; xx --) -   {; -    code=(byte)(((1 << (xx*2)) & font[title[x]][y])>0)+ -     (byte)(((1 << (xx*2+1)) & font[title[x]][y])>0)*2; -    qq=qq+codes[code+1-1]; -   } -  } -  centre(cy+y,qq); - } +void line(byte cy, string title) { +	; +	for (y = 0; y <= 6; y ++) { +		; +		qq = ""; +		for (x = 1; x <= length(title); x ++) { +			; +			for (xx = 3; xx >= 0; xx --) { +				; +				code = (byte)(((1 << (xx * 2)) & font[title[x]][y]) > 0) + +				       (byte)(((1 << (xx * 2 + 1)) & font[title[x]][y]) > 0) * 2; +				qq = qq + codes[code + 1 - 1]; +			} +		} +		centre(cy + y, qq); +	}  } -void big_t() -{ - text t; - string x; - byte y; -; - assign(t,"c:\\avalot\\t.txt"); reset(t); y=1; - while (! eof(t))  - {; -  t >> x >> NL; -  gotoxy(1,y); output << x; y += 1; - } +void big_t() { +	text t; +	string x; +	byte y; +	; +	assign(t, "c:\\avalot\\t.txt"); +	reset(t); +	y = 1; +	while (! eof(t)) { +		; +		t >> x >> NL; +		gotoxy(1, y); +		output << x; +		y += 1; +	}  } -void box(byte x1,byte y1,byte x2,byte y2, string z) -{ -    byte fv; -; - gotoxy(x1,y1); output << z[1]; /* tl */ - gotoxy(x2,y1); output << z[2]; /* tr */ - gotoxy(x1,y2); output << z[3]; /* bl */ - gotoxy(x2,y2); output << z[4]; /* br */ - for( fv=y1+1; fv <= y2-1; fv ++) - {; -  gotoxy(x1,fv); output << z[5]; /* verticals */ -  gotoxy(x2,fv); output << z[6]; - } - gotoxy(x1+1,y1); for( fv=x1+1; fv <= x2-1; fv ++) output << z[7]; - gotoxy(x1+1,y2); for( fv=x1+1; fv <= x2-1; fv ++) output << z[8]; +void box(byte x1, byte y1, byte x2, byte y2, string z) { +	byte fv; +	; +	gotoxy(x1, y1); +	output << z[1]; /* tl */ +	gotoxy(x2, y1); +	output << z[2]; /* tr */ +	gotoxy(x1, y2); +	output << z[3]; /* bl */ +	gotoxy(x2, y2); +	output << z[4]; /* br */ +	for (fv = y1 + 1; fv <= y2 - 1; fv ++) { +		; +		gotoxy(x1, fv); +		output << z[5]; /* verticals */ +		gotoxy(x2, fv); +		output << z[6]; +	} +	gotoxy(x1 + 1, y1); +	for (fv = x1 + 1; fv <= x2 - 1; fv ++) output << z[7]; +	gotoxy(x1 + 1, y2); +	for (fv = x1 + 1; fv <= x2 - 1; fv ++) output << z[8];  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - textattr=26; clrscr; - assign(f,"c:\\thomas\\ttsmall.fnt"); - reset(f); f >> font; close(f); - line(3,"CONGRATULATIONS!"); - textattr=30; box(4,1,74,11,"ɻȼººÍÍ"); - textattr=33; box(6,2,72,10,"/\\\\/°°Üß"); - textattr=30; centre(12,"Well done!"); - textattr=27; centre(14,"You completed the game!"); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	textattr = 26; +	clrscr; +	assign(f, "c:\\thomas\\ttsmall.fnt"); +	reset(f); +	f >> font; +	close(f); +	line(3, "CONGRATULATIONS!"); +	textattr = 30; +	box(4, 1, 74, 11, "ɻȼººÍÍ"); +	textattr = 33; +	box(6, 2, 72, 10, "/\\\\/°°Üß"); +	textattr = 30; +	centre(12, "Well done!"); +	textattr = 27; +	centre(14, "You completed the game!"); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/scr_5.cpp b/engines/avalanche/scr_5.cpp index 5a4aa12b22..bc4472a6c8 100644 --- a/engines/avalanche/scr_5.cpp +++ b/engines/avalanche/scr_5.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 @@ -31,90 +31,121 @@ namespace Avalanche {  const varying_string<4> codes = " ßÜÛ"; -typedef matrix<'\0','\377',0,15,byte> fonttype; +typedef matrix < '\0', '\377', 0, 15, byte > fonttype; -byte x,xx,y; +byte x, xx, y;  string qq;  file<fonttype> f;  fonttype font;  byte code; -typedef array<1,3840,byte> atype; +typedef array<1, 3840, byte> atype; -void save() -{ - file<atype> f; - word fv; - atype a /*absolute $B800:0*/; -; - assign(f,"TEXT5.SCR"); - rewrite(f); f << a; close(f); +void save() { +	file<atype> f; +	word fv; +	atype a /*absolute $B800:0*/; +	; +	assign(f, "TEXT5.SCR"); +	rewrite(f); +	f << a; +	close(f);  } -void line(byte cx,byte cy, string title) -{; - for( y=0; y <= 4; y ++) - {; -  qq=""; -  for( x=1; x <= length(title); x ++) -  {; -   for( xx=7; xx >= 0; xx --) -   {; -    code=(byte)(((1 << xx) & font[title[x]][y*2])>0)+ -     (byte)(((1 << xx) & font[title[x]][y*2+1])>0)*2; -    qq=qq+codes[code+1-1]; -   } -  } -  gotoxy(cx,cy+y); output << qq; - } +void line(byte cx, byte cy, string title) { +	; +	for (y = 0; y <= 4; y ++) { +		; +		qq = ""; +		for (x = 1; x <= length(title); x ++) { +			; +			for (xx = 7; xx >= 0; xx --) { +				; +				code = (byte)(((1 << xx) & font[title[x]][y * 2]) > 0) + +				       (byte)(((1 << xx) & font[title[x]][y * 2 + 1]) > 0) * 2; +				qq = qq + codes[code + 1 - 1]; +			} +		} +		gotoxy(cx, cy + y); +		output << qq; +	}  } -void uline() -{ -    byte fv,ff; -; - for( fv=1; fv <= 10; fv ++) - {; -  gotoxy(16-fv,21-fv); textattr=fv; -  for( ff=1; ff <= fv; ff ++) output << "ÄÍÍ-"; - } +void uline() { +	byte fv, ff; +	; +	for (fv = 1; fv <= 10; fv ++) { +		; +		gotoxy(16 - fv, 21 - fv); +		textattr = fv; +		for (ff = 1; ff <= fv; ff ++) output << "ÄÍÍ-"; +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - textattr=0; clrscr; - assign(f,"c:\\thomas\\ttsmall.fnt"); - reset(f); f >> font; close(f); - textattr=11; - line( 1, 3,"Two at"); - line( 3, 7,"once?!"); - textattr=9; gotoxy(55,4); output << string('\4')+'\377'; - textattr=3; output << "You're trying to run"; - gotoxy(54,5); output << "two copies of Avalot"; - gotoxy(54,6); output << "at once."; - gotoxy(57,8); output << "Although this "; textattr=9; output << "is"; - textattr=3; - gotoxy(54,9); output << "usually possible, it's"; - gotoxy(54,10); output << "probably more sensible"; - gotoxy(54,11); output << "to type "; - textattr=7; output << "EXIT "; - textattr=3; output << "now, which"; - gotoxy(54,12); output << "should return you to the"; - gotoxy(54,13); output << "first copy in memory."; - - textattr=11; gotoxy(55,15); output << "BUT:"; textattr=9; - gotoxy(40,16); output << "If you want to run two copies anyway,"; - gotoxy(40,17); output << "or you think that I've got it wrong,"; - gotoxy(40,18); output << "(even computers can make mistakes!) then"; - gotoxy(40,19); output << "try running the game again, but this time"; - gotoxy(40,20); output << "use "; textattr=7; output << "/i "; - textattr=9; output << "on the command line."; - uline(); - - save(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	textattr = 0; +	clrscr; +	assign(f, "c:\\thomas\\ttsmall.fnt"); +	reset(f); +	f >> font; +	close(f); +	textattr = 11; +	line(1, 3, "Two at"); +	line(3, 7, "once?!"); +	textattr = 9; +	gotoxy(55, 4); +	output << string('\4') + '\377'; +	textattr = 3; +	output << "You're trying to run"; +	gotoxy(54, 5); +	output << "two copies of Avalot"; +	gotoxy(54, 6); +	output << "at once."; +	gotoxy(57, 8); +	output << "Although this "; +	textattr = 9; +	output << "is"; +	textattr = 3; +	gotoxy(54, 9); +	output << "usually possible, it's"; +	gotoxy(54, 10); +	output << "probably more sensible"; +	gotoxy(54, 11); +	output << "to type "; +	textattr = 7; +	output << "EXIT "; +	textattr = 3; +	output << "now, which"; +	gotoxy(54, 12); +	output << "should return you to the"; +	gotoxy(54, 13); +	output << "first copy in memory."; + +	textattr = 11; +	gotoxy(55, 15); +	output << "BUT:"; +	textattr = 9; +	gotoxy(40, 16); +	output << "If you want to run two copies anyway,"; +	gotoxy(40, 17); +	output << "or you think that I've got it wrong,"; +	gotoxy(40, 18); +	output << "(even computers can make mistakes!) then"; +	gotoxy(40, 19); +	output << "try running the game again, but this time"; +	gotoxy(40, 20); +	output << "use "; +	textattr = 7; +	output << "/i "; +	textattr = 9; +	output << "on the command line."; +	uline(); + +	save(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/scr_9.cpp b/engines/avalanche/scr_9.cpp index 1fb494257e..f71afd0f61 100644 --- a/engines/avalanche/scr_9.cpp +++ b/engines/avalanche/scr_9.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 @@ -33,17 +33,19 @@ text t;  string x;  byte fv;  untyped_file f; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - assign(f,"v:paralogo.scr"); - clrscr; - reset(f,1); - blockread(f,mem[0xb800*0],4000); - close(f); - gotoxy(1,1); insline; - gotoxy(1,23); clreol; -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	assign(f, "v:paralogo.scr"); +	clrscr; +	reset(f, 1); +	blockread(f, mem[0xb800 * 0], 4000); +	close(f); +	gotoxy(1, 1); +	insline; +	gotoxy(1, 23); +	clreol; +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/scrolls.cpp b/engines/avalanche/scrolls.cpp index c109624671..878f8d0f78 100644 --- a/engines/avalanche/scrolls.cpp +++ b/engines/avalanche/scrolls.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 @@ -39,13 +39,13 @@  #include "scrolls.h"  #include "lucerna.h" - #include "Graph.h" - /*#include "Crt.h"*/ +#include "Graph.h" +/*#include "Crt.h"*/  #include "trip5.h"  #include "enhanced.h" - /*#include "Dos.h"*/ +/*#include "Dos.h"*/  #include "logger.h" - #include "Acci.h" +#include "Acci.h"  #include "basher.h"  #include "visa.h"  #include "timeout.h" @@ -57,753 +57,891 @@ const integer italic = 1;  const integer halficonwidth = 19; /* Half the width of an icon. */ -integer dix,diy; -array<roman,italic,raw> ch; +integer dix, diy; +array<roman, italic, raw> ch;  byte cfont; /* Current font */ -integer dodgex,dodgey; +integer dodgex, dodgey;  byte param; /* For using arguments code */  byte use_icon; -void state(byte x)       /* Sets "Ready" light to whatever */ -{ -    byte page_; - - if (ledstatus==x)  return; /* Already like that! */ - switch (x) { -  case 0: setfillstyle(1,black); break; /* Off */ -  case 1: setfillstyle(9,green); break; /* Half-on (menus) */ -  case 2: setfillstyle(1,green); break; /* On (kbd) */ -  case 3: setfillstyle(6,green); break; /* Hit a key */ - } - super_off(); - for( page_=0; page_ <= 1; page_ ++) -  { setactivepage(page_); bar(419,195,438,197); } super_on(); - ledstatus=x; +void state(byte x) {     /* Sets "Ready" light to whatever */ +	byte page_; + +	if (ledstatus == x)  return; /* Already like that! */ +	switch (x) { +	case 0: +		setfillstyle(1, black); +		break; /* Off */ +	case 1: +		setfillstyle(9, green); +		break; /* Half-on (menus) */ +	case 2: +		setfillstyle(1, green); +		break; /* On (kbd) */ +	case 3: +		setfillstyle(6, green); +		break; /* Hit a key */ +	} +	super_off(); +	for (page_ = 0; page_ <= 1; page_ ++) { +		setactivepage(page_); +		bar(419, 195, 438, 197); +	} +	super_on(); +	ledstatus = x;  } -void easteregg() -{ - word fv,ff; - - background(15); - for( fv=4; fv <= 100; fv ++) -  for( ff=0; ff <= 70; ff ++) -   { sound(fv*100+ff*10); delay(1); } - nosound; setcolor(10); - settextstyle(0,0,3); settextjustify(1,1); outtextxy(320,100,"GIED"); - settextstyle(0,0,1); settextjustify(0,2); - background(0); +void easteregg() { +	word fv, ff; + +	background(15); +	for (fv = 4; fv <= 100; fv ++) +		for (ff = 0; ff <= 70; ff ++) { +			sound(fv * 100 + ff * 10); +			delay(1); +		} +	nosound; +	setcolor(10); +	settextstyle(0, 0, 3); +	settextjustify(1, 1); +	outtextxy(320, 100, "GIED"); +	settextstyle(0, 0, 1); +	settextjustify(0, 2); +	background(0);  } -void say(integer x,integer y, string z) /* Fancy FAST screenwriting */ -{ -      const integer locol = 2; - byte xx,yy,ox,bit,lz,t; integer yp; boolean offset; - matrix<1,12,1,80,byte> itw; - - offset=x % 8==4; x=x / 8; lz=length(z); ox=0; - log_scrollline(); - - for( xx=1; xx <= lz; xx ++) - { -  switch (z[xx]) { -   case '\22': { cfont=roman; log_roman(); } break; -   case '\6': { cfont=italic; log_italic(); } break; -   default: { -    ox += 1; -    for( yy=1; yy <= 12; yy ++) itw[yy][ox]=~ ch[cfont][z[xx]][yy+1]; -    log_scrollchar(z[xx]); -   } -  } - } - - lz=ox; - if (offset)  - {     /* offsetting routine */ -  lz += 1; -  for( yy=1; yy <= 12; yy ++) -  { -   bit=240; itw[yy][lz]=255; -   for( xx=1; xx <= lz; xx ++) -   { -    t=itw[yy][xx]; -    itw[yy][xx]=bit+t / 16; -    bit=t << 4; -   } -  } - } - yp=x+y*80+(1-cp)*pagetop; - for( yy=1; yy <= 12; yy ++) - { -  yp += 80; -  for( bit=0; bit <= locol; bit ++) -  { -   port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -   move(itw[yy],mem[0xa000*yp],lz); -  } - } +void say(integer x, integer y, string z) { /* Fancy FAST screenwriting */ +	const integer locol = 2; +	byte xx, yy, ox, bit, lz, t; +	integer yp; +	boolean offset; +	matrix<1, 12, 1, 80, byte> itw; + +	offset = x % 8 == 4; +	x = x / 8; +	lz = length(z); +	ox = 0; +	log_scrollline(); + +	for (xx = 1; xx <= lz; xx ++) { +		switch (z[xx]) { +		case '\22': { +			cfont = roman; +			log_roman(); +		} +		break; +		case '\6': { +			cfont = italic; +			log_italic(); +		} +		break; +		default: { +			ox += 1; +			for (yy = 1; yy <= 12; yy ++) itw[yy][ox] = ~ ch[cfont][z[xx]][yy + 1]; +			log_scrollchar(z[xx]); +		} +		} +	} + +	lz = ox; +	if (offset) { +		/* offsetting routine */ +		lz += 1; +		for (yy = 1; yy <= 12; yy ++) { +			bit = 240; +			itw[yy][lz] = 255; +			for (xx = 1; xx <= lz; xx ++) { +				t = itw[yy][xx]; +				itw[yy][xx] = bit + t / 16; +				bit = t << 4; +			} +		} +	} +	yp = x + y * 80 + (1 - cp) * pagetop; +	for (yy = 1; yy <= 12; yy ++) { +		yp += 80; +		for (bit = 0; bit <= locol; bit ++) { +			port[0x3c4] = 2; +			port[0x3ce] = 4; +			port[0x3c5] = 1 << bit; +			port[0x3cf] = bit; +			move(itw[yy], mem[0xa000 * yp], lz); +		} +	}  }  /* Here are the procedures that Scroll calls */ /* So they must be... */ /*$F+*/ -void normscroll() -{ - const array<1,8,char> egg = string("\20\f\25\7\b")+"***"; - const array<1,8,char> e = "(c) 1994"; - char r; - boolean oktoexit; - - state(3); seescroll=true; - off_virtual(); - on(); newpointer(4); - mousepage(1-cp); - - if (demo)  get_demorec(); - - do { -  do { -   check(); /* was "checkclick;" */ - - #ifdef RECORD slowdown(); basher::count += 1; #endif - -   if (demo)  -   { -    if (demo_ready())  flush(); -    if (keypressede())  exit(0); -   } else -    if (keypressede())  flush(); -  } while (!((mrelease>0) || (buttona1()) || (buttonb1()))); - - -  if (mrelease==0)  -  { -   inkey(); -   if (aboutscroll)  -   { -    move(e[2-1],e[1-1],7); -    e[8-1]=inchar; -    if (egg==e)  easteregg(); -   } -   oktoexit=set::of('\15','\33','+','#', eos).has(inchar); -   if (! oktoexit)  errorled(); -  } - - } while (!((oktoexit) || (mrelease>0))); - #ifdef RECORD record_one(); #endif - screturn=r=='#'; /* "back door" */ - state(0); seescroll=false; mousepage(cp); off(); +void normscroll() { +	const array<1, 8, char> egg = string("\20\f\25\7\b") + "***"; +	const array<1, 8, char> e = "(c) 1994"; +	char r; +	boolean oktoexit; + +	state(3); +	seescroll = true; +	off_virtual(); +	on(); +	newpointer(4); +	mousepage(1 - cp); + +	if (demo)  get_demorec(); + +	do { +		do { +			check(); /* was "checkclick;" */ + +#ifdef RECORD slowdown(); basher::count += 1; #endif + +			if (demo) { +				if (demo_ready())  flush(); +				if (keypressede())  exit(0); +			} else if (keypressede())  flush(); +		} while (!((mrelease > 0) || (buttona1()) || (buttonb1()))); + + +		if (mrelease == 0) { +			inkey(); +			if (aboutscroll) { +				move(e[2 - 1], e[1 - 1], 7); +				e[8 - 1] = inchar; +				if (egg == e)  easteregg(); +			} +			oktoexit = set::of('\15', '\33', '+', '#', eos).has(inchar); +			if (! oktoexit)  errorled(); +		} + +	} while (!((oktoexit) || (mrelease > 0))); +#ifdef RECORD record_one(); #endif +	screturn = r == '#'; /* "back door" */ +	state(0); +	seescroll = false; +	mousepage(cp); +	off();  } -void dialogue() -{ -    char r; - - state(3); seescroll=true; r='\0'; - newpointer(6); on(); - mousepage(1-cp); - do { -  do { -   check(); -   if (mrelease>0)  -   { -    if ((mx>=(cardinal)dix-65) && (my>=(cardinal)diy-24) && (mx<=(cardinal)dix- 5) && (my<=(cardinal)diy-10)) -           r='Y'; -    if ((mx>=(cardinal)dix+ 5) && (my>=(cardinal)diy-24) && (mx<=(cardinal)dix+65) && (my<=(cardinal)diy-10)) -           r='N'; -   } else -       if (keypressede())  -       { -        inkey(); -        r=upcase(inchar); -       } -  } while (!(r!='\0')); - } while (!(set::of('Y','N','O','J', eos).has(r))); /* Yes, Ja, Oui, or No, Non, Nein */ - screturn=r!='N'; - state(0); seescroll=false; mousepage(cp); off(); +void dialogue() { +	char r; + +	state(3); +	seescroll = true; +	r = '\0'; +	newpointer(6); +	on(); +	mousepage(1 - cp); +	do { +		do { +			check(); +			if (mrelease > 0) { +				if ((mx >= (cardinal)dix - 65) && (my >= (cardinal)diy - 24) && (mx <= (cardinal)dix - 5) && (my <= (cardinal)diy - 10)) +					r = 'Y'; +				if ((mx >= (cardinal)dix + 5) && (my >= (cardinal)diy - 24) && (mx <= (cardinal)dix + 65) && (my <= (cardinal)diy - 10)) +					r = 'N'; +			} else if (keypressede()) { +				inkey(); +				r = upcase(inchar); +			} +		} while (!(r != '\0')); +	} while (!(set::of('Y', 'N', 'O', 'J', eos).has(r))); /* Yes, Ja, Oui, or No, Non, Nein */ +	screturn = r != 'N'; +	state(0); +	seescroll = false; +	mousepage(cp); +	off();  }  void music_scroll(); -static void store_(byte what, tunetype& played) -{ - move(played[2],played[1],sizeof(played)-1); - played[31]=what; +static void store_(byte what, tunetype &played) { +	move(played[2], played[1], sizeof(played) - 1); +	played[31] = what;  } -static boolean they_match(tunetype& played) -{ -    byte fv,mistakes; +static boolean they_match(tunetype &played) { +	byte fv, mistakes; - boolean they_match_result; - mistakes=0; +	boolean they_match_result; +	mistakes = 0; - for( fv=1; fv <= sizeof(played); fv ++) -  if (played[fv]!=tune[fv])  -  { -   mistakes += 1; -  } +	for (fv = 1; fv <= sizeof(played); fv ++) +		if (played[fv] != tune[fv]) { +			mistakes += 1; +		} - they_match_result=mistakes<5; - return they_match_result; +	they_match_result = mistakes < 5; +	return they_match_result;  } -void music_scroll() -{ - char r; - byte value; +void music_scroll() { +	char r; +	byte value; - byte last_one,this_one; +	byte last_one, this_one; - tunetype played; +	tunetype played; - state(3); seescroll=true; on(); - newpointer(4); - do { -  do { -   check(); /* was "checkclick;" */ -   if (keypressede())  flush(); -  } while (!((mpress>0) || (buttona1()) || (buttonb1()))); +	state(3); +	seescroll = true; +	on(); +	newpointer(4); +	do { +		do { +			check(); /* was "checkclick;" */ +			if (keypressede())  flush(); +		} while (!((mpress > 0) || (buttona1()) || (buttonb1()))); -  if (mpress==0)  -  { -   inkey(); -   r=upcase(inchar);  if (r=='Z')  r='Y';    /* Euro keyboards */ +		if (mpress == 0) { +			inkey(); +			r = upcase(inchar); +			if (r == 'Z')  r = 'Y'; /* Euro keyboards */ -   value=pos(r,keys); +			value = pos(r, keys); -   if (value>0)  -   { +			if (value > 0) { -    last_one=this_one; -    this_one=value; +				last_one = this_one; +				this_one = value; -    sound(notes[this_one]); -    delay(100); -    nosound; +				sound(notes[this_one]); +				delay(100); +				nosound; -    if (! dna.ringing_bells)  -    {     /* These handle playing the right tune. */ +				if (! dna.ringing_bells) { +					/* These handle playing the right tune. */ -     if (this_one<last_one)  -      store_(lower, played); else +					if (this_one < last_one) +						store_(lower, played); +					else -       if (this_one==last_one)  -        store_(same, played); else +						if (this_one == last_one) +							store_(same, played); +						else -         store_(higher, played); +							store_(higher, played); -     if (they_match(played))  -     { -      screturn=true; -      off(); -      state(0); seescroll=false; +					if (they_match(played)) { +						screturn = true; +						off(); +						state(0); +						seescroll = false; -      set_up_timer(8,procjacques_wakes_up,reason_jacques_waking_up); -      return; -     } +						set_up_timer(8, procjacques_wakes_up, reason_jacques_waking_up); +						return; +					} -    } +				} -   } +			} -  } +		} - } while (!((set::of('\15','\33','+','#', eos).has(r)) || (mpress>0))); - screturn=false; - off(); - state(0); seescroll=false; +	} while (!((set::of('\15', '\33', '+', '#', eos).has(r)) || (mpress > 0))); +	screturn = false; +	off(); +	state(0); +	seescroll = false;  }  /* ThatsAll, so put us back to */ /*$F-*/ -void resetscrolldriver()     /* phew */ -{ - scrollbells=0; cfont=roman; log_epsonroman(); use_icon=0; - interrogation=0;  /* always reset after a scroll comes up. */ +void resetscrolldriver() {   /* phew */ +	scrollbells = 0; +	cfont = roman; +	log_epsonroman(); +	use_icon = 0; +	interrogation = 0; /* always reset after a scroll comes up. */  } -void dingdongbell()     /* Pussy's in the well. Who put her in? Little... */ -{ -    byte fv; +void dingdongbell() {   /* Pussy's in the well. Who put her in? Little... */ +	byte fv; - for( fv=1; fv <= scrollbells; fv ++) errorled(); /* ring the bell "x" times */ +	for (fv = 1; fv <= scrollbells; fv ++) errorled(); /* ring the bell "x" times */  }  void dodgem()     /* This moves the mouse pointer off the scroll so that   you can read it. */  { - xycheck(); /* Mx & my now contain xy pos of mouse */ - dodgex=mx; dodgey=my;   /* Store 'em */ - hopto(dodgex,underscroll); /* Move the pointer off the scroll. */ +	xycheck(); /* Mx & my now contain xy pos of mouse */ +	dodgex = mx; +	dodgey = my; /* Store 'em */ +	hopto(dodgex, underscroll); /* Move the pointer off the scroll. */  }  void undodgem()     /* This is the opposite of Dodgem. It moves the   mouse pointer back, IF you haven't moved it in the meantime. */  { - xycheck(); - if ((mx==(cardinal)dodgex) && (my==(cardinal)underscroll))  -  /* No change, so restore the pointer's original position. */ -  hopto(dodgex,dodgey); +	xycheck(); +	if ((mx == (cardinal)dodgex) && (my == (cardinal)underscroll)) +		/* No change, so restore the pointer's original position. */ +		hopto(dodgex, dodgey);  } -void geticon(integer x,integer y, byte which) -{ - untyped_file f; - pointer p; - - assign(f,"icons.avd"); - reset(f,1); - which -= 1; - seek(f,which*426); - getmem(p,426); - blockread(f,p,426); - putimage(x,y,p,0); - freemem(p,426); - close(f); +void geticon(integer x, integer y, byte which) { +	untyped_file f; +	pointer p; + +	assign(f, "icons.avd"); +	reset(f, 1); +	which -= 1; +	seek(f, which * 426); +	getmem(p, 426); +	blockread(f, p, 426); +	putimage(x, y, p, 0); +	freemem(p, 426); +	close(f);  } -void block_drop(string fn, integer xl,integer yl,integer y) -{ - untyped_file f; byte bit; - integer fv; word st; - - st=(y-1)*80+(40-xl / 2)+((1-cp)*pagetop); - - assign(f,fn+".avd"); - reset(f,1); - - for( fv=1; fv <= yl; fv ++) -  for( bit=0; bit <= 3; bit ++) -  {; -   port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -   blockread(f,mem[0xa000*st+(fv*80)],xl); -  } - - close(f); - bit=getpixel(0,0); +void block_drop(string fn, integer xl, integer yl, integer y) { +	untyped_file f; +	byte bit; +	integer fv; +	word st; + +	st = (y - 1) * 80 + (40 - xl / 2) + ((1 - cp) * pagetop); + +	assign(f, fn + ".avd"); +	reset(f, 1); + +	for (fv = 1; fv <= yl; fv ++) +		for (bit = 0; bit <= 3; bit ++) { +			; +			port[0x3c4] = 2; +			port[0x3ce] = 4; +			port[0x3c5] = 1 << bit; +			port[0x3cf] = bit; +			blockread(f, mem[0xa000 * st + (fv * 80)], xl); +		} + +	close(f); +	bit = getpixel(0, 0);  } -void drawscroll(proc gotoit)       /* This is one of the oldest procs in the game. */ -{ - byte b,groi; integer lx,ly,mx,my,ex,ey; boolean centre; - byte icon_indent; +void drawscroll(proc gotoit) {     /* This is one of the oldest procs in the game. */ +	byte b, groi; +	integer lx, ly, mx, my, ex, ey; +	boolean centre; +	byte icon_indent; - off_virtual(); - setvisualpage(cp); setactivepage(1-cp); - oncandopageswap=false;  /* On can now no longer swap pages. So we can +	off_virtual(); +	setvisualpage(cp); +	setactivepage(1 - cp); +	oncandopageswap = false;  /* On can now no longer swap pages. So we can    do what we want without its interference! */ - log_epsonroman(); /* Scrolls always START with Roman. */ - lx=0; ly=scrolln*6; - for( b=1; b <= scrolln; b ++) - { -  ex=length(scroll[b])*8; if (lx<ex)  lx=ex; - } - mx=320; my=100;   /* Getmaxx & getmaxy div 2, both. */ - lx=lx / 2; ly -= 2; - - if (set::of(range(1,34), eos).has(use_icon))  lx += halficonwidth; - - off(); -/* mblit(mx-lx-46,my-ly-6,mx+lx+15,my+ly+6,0,3);*/ - setfillstyle(1,7); - setcolor(7); - pieslice(mx+lx,my-ly,360,90,15); - pieslice(mx+lx,my+ly,270,360,15); - setcolor(4); - arc(mx+lx,my-ly,360,90,15); - arc(mx+lx,my+ly,270,360,15); - bar(mx-lx-30,my+ly+6,mx+lx,my+ly); - bar(mx-lx-30,my-ly-6,mx+lx,my-ly); - bar(mx-lx-15,my-ly,mx+lx+15,my+ly); - setfillstyle(1,8); - pieslice(mx-lx-31,my-ly,360,180,15); - pieslice(mx-lx-31,my+ly,180,360,15); - setfillstyle(1,4); - bar(mx-lx-30,my-ly-6,mx+lx,my-ly-6); - bar(mx-lx-30,my+ly+6,mx+lx,my+ly+6); - bar(mx-lx-15,my-ly,mx-lx-15,my+ly); - bar(mx+lx+15,my-ly,mx+lx+15,my+ly); - ex=mx-lx; ey=my-ly; - mx -= lx; my -= ly+2; - setcolor(0); centre=false; - - switch (use_icon) { -      case 0: icon_indent=0; break; /* No icon. */ -  case 1 ... 33: {           /* Standard icon */ -          geticon(mx,my+ly / 2,use_icon); -          icon_indent=53; -         } -         break; -     case 34: { block_drop("about",28,76,15);    icon_indent=0; } break; -     case 35: { block_drop("gameover",52,59,71); icon_indent=0; } break; - } - - for( b=1; b <= scrolln; b ++) - { -  switch (scroll[b][length(scroll[b])]) { -   case '\3' : { centre=true;  scroll[b][0] -= 1; } break; -   case '\14' : { centre=false; scroll[b][0] -= 1; } break; -   case '\21' : { settextjustify(1,1); -         dix=mx+lx; diy=my+ly; scroll[b][1]='\40'; groi=getpixel(0,0); -/*         inc(diy,14);*/ -         shbox(dix-65,diy-24,dix- 5,diy-10,"Yes."); -         shbox(dix+ 5,diy-24,dix+65,diy-10,"No."); -        } -        break; -  } - -  if (centre)  -   say(320-length(scroll[b])*4+icon_indent,my,scroll[b]); -  else -   say(mx+icon_indent,my,scroll[b]); -  log_scrollendline(centre); -  my += 12; - } - - underscroll=my+3; - setvisualpage(1-cp); dingdongbell(); - my=getpixel(0,0); dropsok=false; dodgem(); - - gotoit(); - - undodgem(); dropsok=true; - log_divider(); - setvisualpage(cp); mousepage(cp); off(); -/* mblit(ex-46,ey-6,ex+lx*2+15,ey+ly*2+6,3,0);*/ - mblit((ex-46) / 8,ey-6,1+(ex+lx*2+15) / 8,ey+ly*2+6,cp,1-cp); - blitfix(); - oncandopageswap=true;  /* Normality again */ - on(); settextjustify(0,0); /*sink*/ - resetscrolldriver(); - if (mpress>0)  after_the_scroll=true; +	log_epsonroman(); /* Scrolls always START with Roman. */ +	lx = 0; +	ly = scrolln * 6; +	for (b = 1; b <= scrolln; b ++) { +		ex = length(scroll[b]) * 8; +		if (lx < ex)  lx = ex; +	} +	mx = 320; +	my = 100; /* Getmaxx & getmaxy div 2, both. */ +	lx = lx / 2; +	ly -= 2; + +	if (set::of(range(1, 34), eos).has(use_icon))  lx += halficonwidth; + +	off(); +	/* mblit(mx-lx-46,my-ly-6,mx+lx+15,my+ly+6,0,3);*/ +	setfillstyle(1, 7); +	setcolor(7); +	pieslice(mx + lx, my - ly, 360, 90, 15); +	pieslice(mx + lx, my + ly, 270, 360, 15); +	setcolor(4); +	arc(mx + lx, my - ly, 360, 90, 15); +	arc(mx + lx, my + ly, 270, 360, 15); +	bar(mx - lx - 30, my + ly + 6, mx + lx, my + ly); +	bar(mx - lx - 30, my - ly - 6, mx + lx, my - ly); +	bar(mx - lx - 15, my - ly, mx + lx + 15, my + ly); +	setfillstyle(1, 8); +	pieslice(mx - lx - 31, my - ly, 360, 180, 15); +	pieslice(mx - lx - 31, my + ly, 180, 360, 15); +	setfillstyle(1, 4); +	bar(mx - lx - 30, my - ly - 6, mx + lx, my - ly - 6); +	bar(mx - lx - 30, my + ly + 6, mx + lx, my + ly + 6); +	bar(mx - lx - 15, my - ly, mx - lx - 15, my + ly); +	bar(mx + lx + 15, my - ly, mx + lx + 15, my + ly); +	ex = mx - lx; +	ey = my - ly; +	mx -= lx; +	my -= ly + 2; +	setcolor(0); +	centre = false; + +	switch (use_icon) { +	case 0: +		icon_indent = 0; +		break; /* No icon. */ +	case 1 ... 33: {           /* Standard icon */ +		geticon(mx, my + ly / 2, use_icon); +		icon_indent = 53; +	} +	break; +	case 34: { +		block_drop("about", 28, 76, 15); +		icon_indent = 0; +	} +	break; +	case 35: { +		block_drop("gameover", 52, 59, 71); +		icon_indent = 0; +	} +	break; +	} + +	for (b = 1; b <= scrolln; b ++) { +		switch (scroll[b][length(scroll[b])]) { +		case '\3' : { +			centre = true; +			scroll[b][0] -= 1; +		} +		break; +		case '\14' : { +			centre = false; +			scroll[b][0] -= 1; +		} +		break; +		case '\21' : { +			settextjustify(1, 1); +			dix = mx + lx; +			diy = my + ly; +			scroll[b][1] = '\40'; +			groi = getpixel(0, 0); +			/*         inc(diy,14);*/ +			shbox(dix - 65, diy - 24, dix - 5, diy - 10, "Yes."); +			shbox(dix + 5, diy - 24, dix + 65, diy - 10, "No."); +		} +		break; +		} + +		if (centre) +			say(320 - length(scroll[b]) * 4 + icon_indent, my, scroll[b]); +		else +			say(mx + icon_indent, my, scroll[b]); +		log_scrollendline(centre); +		my += 12; +	} + +	underscroll = my + 3; +	setvisualpage(1 - cp); +	dingdongbell(); +	my = getpixel(0, 0); +	dropsok = false; +	dodgem(); + +	gotoit(); + +	undodgem(); +	dropsok = true; +	log_divider(); +	setvisualpage(cp); +	mousepage(cp); +	off(); +	/* mblit(ex-46,ey-6,ex+lx*2+15,ey+ly*2+6,3,0);*/ +	mblit((ex - 46) / 8, ey - 6, 1 + (ex + lx * 2 + 15) / 8, ey + ly * 2 + 6, cp, 1 - cp); +	blitfix(); +	oncandopageswap = true; /* Normality again */ +	on(); +	settextjustify(0, 0); /*sink*/ +	resetscrolldriver(); +	if (mpress > 0)  after_the_scroll = true;  } -void bubble(proc gotoit) -{ - integer xl,yl,my,xw,yw; byte fv; array<1,3,pointtype> p; - pointer rp1,rp2; /* replace: 1=bubble, 2=pointer */ - integer xc; /* x correction */ +void bubble(proc gotoit) { +	integer xl, yl, my, xw, yw; +	byte fv; +	array<1, 3, pointtype> p; +	pointer rp1, rp2; /* replace: 1=bubble, 2=pointer */ +	integer xc; /* x correction */ - setvisualpage(cp); setactivepage(1-cp); - oncandopageswap=false;  /* On can now no longer swap pages. So we can +	setvisualpage(cp); +	setactivepage(1 - cp); +	oncandopageswap = false;  /* On can now no longer swap pages. So we can    do what we want without its interference! */ - mousepage(1-cp); /* Mousepage */ - - setfillstyle(1,talkb); setcolor(talkb); off(); - - xl=0; yl=scrolln*5; - for( fv=1; fv <= scrolln; fv ++) -  if (textwidth(scroll[fv])>xl)  xl=textwidth(scroll[fv]); - xl=xl / 2; - - xw=xl+18; yw=yl+7; - my=yw*2-2; xc=0; - - if ((talkx-xw)<0)  xc=-(talkx-xw); - if ((talkx+xw)>639)  xc=639-(talkx+xw); - - p[1].x=talkx-10; p[1].y=yw; - p[2].x=talkx+10; p[2].y=yw; - p[3].x=talkx;    p[3].y=talky; - -/* mblit(talkx-xw+xc,7,talkx+xw+xc,my,0,3); - mblit(talkx-10,my,talkx+10,talky,0,3);*/ - bar(xc+talkx-xw+10,7,talkx+xw-10+xc,my); - bar(xc+talkx-xw,12,talkx+xw+xc,my-5); - pieslice(xc+talkx+xw-10,12,360,90,9);    /* TR */ - pieslice(xc+talkx+xw-10,my-5,270,360,9); /* BR */ - pieslice(xc+talkx-xw+10,12,90,180,9);    /* TL */ - pieslice(xc+talkx-xw+10,my-5,180,270,9); /* BL */ - fillpoly(3,p.body()); - - setcolor(talkf); yl -= 3; settextjustify(1,2); - for( fv=0; fv <= scrolln-1; fv ++) -  outtextxy(talkx+xc,(fv*10)+12,scroll[fv+1]); - for( fv=1; fv <= scrolln; fv ++) /* These should be separate loops. */ -  log_bubbleline(fv,param,scroll[fv]); - log_divider(); - - setvisualpage(1-cp); - dingdongbell(); - oncandopageswap=false; - on(); dropsok=false; gotoit(); off(); dropsok=true; - mblit((talkx-xw+xc) / 8,7,1+(talkx+xw+xc) / 8,my,3,1-cp); - mblit((talkx-10) / 8,my,1+(talkx+10) / 8,talky,3,1-cp); - blitfix(); - - setvisualpage(cp); - settextjustify(0,0); on(); /*sink;*/ - oncandopageswap=true; - resetscrolldriver(); - if (mpress>0)  after_the_scroll=true; +	mousepage(1 - cp); /* Mousepage */ + +	setfillstyle(1, talkb); +	setcolor(talkb); +	off(); + +	xl = 0; +	yl = scrolln * 5; +	for (fv = 1; fv <= scrolln; fv ++) +		if (textwidth(scroll[fv]) > xl)  xl = textwidth(scroll[fv]); +	xl = xl / 2; + +	xw = xl + 18; +	yw = yl + 7; +	my = yw * 2 - 2; +	xc = 0; + +	if ((talkx - xw) < 0)  xc = -(talkx - xw); +	if ((talkx + xw) > 639)  xc = 639 - (talkx + xw); + +	p[1].x = talkx - 10; +	p[1].y = yw; +	p[2].x = talkx + 10; +	p[2].y = yw; +	p[3].x = talkx; +	p[3].y = talky; + +	/* mblit(talkx-xw+xc,7,talkx+xw+xc,my,0,3); +	 mblit(talkx-10,my,talkx+10,talky,0,3);*/ +	bar(xc + talkx - xw + 10, 7, talkx + xw - 10 + xc, my); +	bar(xc + talkx - xw, 12, talkx + xw + xc, my - 5); +	pieslice(xc + talkx + xw - 10, 12, 360, 90, 9); /* TR */ +	pieslice(xc + talkx + xw - 10, my - 5, 270, 360, 9); /* BR */ +	pieslice(xc + talkx - xw + 10, 12, 90, 180, 9); /* TL */ +	pieslice(xc + talkx - xw + 10, my - 5, 180, 270, 9); /* BL */ +	fillpoly(3, p.body()); + +	setcolor(talkf); +	yl -= 3; +	settextjustify(1, 2); +	for (fv = 0; fv <= scrolln - 1; fv ++) +		outtextxy(talkx + xc, (fv * 10) + 12, scroll[fv + 1]); +	for (fv = 1; fv <= scrolln; fv ++) /* These should be separate loops. */ +		log_bubbleline(fv, param, scroll[fv]); +	log_divider(); + +	setvisualpage(1 - cp); +	dingdongbell(); +	oncandopageswap = false; +	on(); +	dropsok = false; +	gotoit(); +	off(); +	dropsok = true; +	mblit((talkx - xw + xc) / 8, 7, 1 + (talkx + xw + xc) / 8, my, 3, 1 - cp); +	mblit((talkx - 10) / 8, my, 1 + (talkx + 10) / 8, talky, 3, 1 - cp); +	blitfix(); + +	setvisualpage(cp); +	settextjustify(0, 0); +	on(); /*sink;*/ +	oncandopageswap = true; +	resetscrolldriver(); +	if (mpress > 0)  after_the_scroll = true;  } -boolean ask(string question) -{ - boolean ask_result; - display(question+'\15'+'\21'); - if (screturn && (Random(2)==0)) /* half-and-half chance */  - { -  display("...Positive about that?\23I\26\r\21"); /* be annoying! */ -  if (screturn && (Random(4)==3)) /* another 25% chance */  -   display("\n100% certain\??!\n\26\r\21"); /* be very annoying! */ - } - ask_result=screturn; - return ask_result; +boolean ask(string question) { +	boolean ask_result; +	display(question + '\15' + '\21'); +	if (screturn && (Random(2) == 0)) { /* half-and-half chance */ +		display("...Positive about that?\23I\26\r\21"); /* be annoying! */ +		if (screturn && (Random(4) == 3)) /* another 25% chance */ +			display("\n100% certain\??!\n\26\r\21"); /* be very annoying! */ +	} +	ask_result = screturn; +	return ask_result;  } -void resetscroll() -{ - scrolln=1; fillchar(scroll,sizeof(scroll),'\0'); +void resetscroll() { +	scrolln = 1; +	fillchar(scroll, sizeof(scroll), '\0');  } -void natural()     /* Natural state of bubbles */ -{ - talkx=320; talky=200; talkb=8; talkf=15; +void natural() {   /* Natural state of bubbles */ +	talkx = 320; +	talky = 200; +	talkb = 8; +	talkf = 15;  } -string lsd() -{ -    string x; - - string lsd_result; - if (dna.pence<12)  - {     /* just pence */ -  x=strf(dna.pence)+'d'; - } else -  if (dna.pence<240)  -  {     /* shillings & pence */ -   x=strf(dna.pence / longint(12))+'/'; -   if ((dna.pence % longint(12))==0)  x=x+'-'; else x=x+strf(dna.pence % longint(12)); -  } else   /* L, s & d */ -   x=string('œ')+strf(dna.pence / longint(240))+'.'+strf((dna.pence / longint(12)) % longint(20))+'.'+ -    strf(dna.pence % longint(12)); - if (dna.pence>12)  x=x+" (that's "+strf(dna.pence)+"d)"; - lsd_result=x; - return lsd_result; +string lsd() { +	string x; + +	string lsd_result; +	if (dna.pence < 12) { +		/* just pence */ +		x = strf(dna.pence) + 'd'; +	} else if (dna.pence < 240) { +		/* shillings & pence */ +		x = strf(dna.pence / longint(12)) + '/'; +		if ((dna.pence % longint(12)) == 0)  x = x + '-'; +		else x = x + strf(dna.pence % longint(12)); +	} else   /* L, s & d */ +		x = string('œ') + strf(dna.pence / longint(240)) + '.' + strf((dna.pence / longint(12)) % longint(20)) + '.' + +		    strf(dna.pence % longint(12)); +	if (dna.pence > 12)  x = x + " (that's " + strf(dna.pence) + "d)"; +	lsd_result = x; +	return lsd_result;  }  void calldrivers(); -                      /* Was the mouse cursor virtual on entry to this proc? */ +/* Was the mouse cursor virtual on entry to this proc? */ -static void strip(string& q) -{ - while (pos("\40",q[length(q)])>0)  q[0] -= 1; /* strip trailing spaces */ +static void strip(string &q) { +	while (pos("\40", q[length(q)]) > 0)  q[0] -= 1; /* strip trailing spaces */  } -static void solidify(byte n) -{ - if (pos("\40",scroll[n])==0)  return; /* no spaces */ - /* so there MUST be a space there, somewhere... */ - do { -  scroll[n+1]=string(scroll[n][length(scroll[n])])+scroll[n+1]; -  scroll[n][0] -= 1; - } while (!(scroll[n][length(scroll[n])]=='\40')); - strip(scroll[n]); +static void solidify(byte n) { +	if (pos("\40", scroll[n]) == 0)  return; /* no spaces */ +	/* so there MUST be a space there, somewhere... */ +	do { +		scroll[n + 1] = string(scroll[n][length(scroll[n])]) + scroll[n + 1]; +		scroll[n][0] -= 1; +	} while (!(scroll[n][length(scroll[n])] == '\40')); +	strip(scroll[n]);  } -void calldrivers() -{ - word fv; byte nn; char nnn; boolean mouthnext; - boolean call_spriterun; /* Only call sprite_run the FIRST time. */ - - boolean was_virtual; - - - nosound; state(0); screturn=false; mouthnext=false; - call_spriterun=true; - - switch (buffer[bufsize]) { -   case '\4': bufsize -= 1; break; /* ^D = (D)on't include pagebreak */ -   case '\2':case '\21':; break; /* ^B = speech (B)ubble, ^Q = (Q)uestion in dialogue box */ -  default: { -        bufsize += 1; buffer[bufsize]='\20'; -       } - } - for( fv=1; fv <= bufsize; fv ++) -  if (mouthnext)  -  { -   if (buffer[fv]=='\23')  param=0; else -   switch (buffer[fv]) { -    case RANGE_10('0','9'): param=ord(buffer[fv])-48; -    break; -    case RANGE_26('A','Z'): param=ord(buffer[fv])-55; -    break; -   } -   mouthnext=false; -  } else -   switch (buffer[fv]) { -    case '\20': { -         if ((scrolln==1) && (scroll[1]==""))  flush(); - -         if (call_spriterun)  sprite_run(); -         call_spriterun=false; - -         was_virtual=visible==m_virtual; -         if (was_virtual)  off_virtual(); -         drawscroll(normscroll); -         if (was_virtual)  on_virtual(); -         resetscroll(); -         if (screturn)  return; -        } -        break; -    case '\7': scrollbells += 1; break; /* #7 = "Bel" */ -    case '\2': { -         if ((scrolln==1) && (scroll[1]==""))  flush(); - -         if (call_spriterun)  sprite_run(); -         call_spriterun=false; -         switch (param) { -          case 0: natural(); break; /* Not attached: generic bubble with no speaker. */ -          case RANGE_9(1,9): if ((param>numtr) || (! tr[param].quick))  -                 {     /* not valid */ -                  errorled(); -                  natural(); -                 } -                 else tr[param].chatter(); -                 break;                  /* Normal sprite talking routine. */ -          case 10 ... 36: { -                   quasiped_type& with = quasipeds[param];  -                        /* Quasi-peds. (This routine performs the same -                   thing with QPs as triptype.chatter does with the -                   sprites.) */ -                   { -                    pedtype& with1 = peds[with.whichped];  - -                    talkx=with1.x; talky=with1.y; /* Position. */ -                   } -                   talkf=with.fgc; talkb=with.bgc; /* Colours. */ -                          } -                          break; -          default: { errorled(); natural(); } /* not valid */ -         } - -         was_virtual=visible==m_virtual; -         if (was_virtual)  off_virtual(); -         bubble(normscroll); -         if (was_virtual)  on_virtual(); -         resetscroll(); -         if (screturn)  return; -        } -        break; -    case '\25': { -         { dnatype& with = dna;  -          switch (param) { -           case 1: display(lsd()+'\4'); break; /* insert cash balance (recursion) */ -           case 2: display(words[first_password+with.pass_num].w+'\4'); break; -           case 3: display(with.like2drink+'\4'); break; -           case 4: display(with.favourite_song+'\4'); break; -           case 5: display(with.worst_place_on_earth+'\4'); break; -           case 6: display(with.spare_evening+'\4'); break; -           /* ... */ -           case 9: display(strf(with.cat_x)+','+strf(with.cat_y)+'\4'); break; -           case 10: switch (with.box_contents) { -                case '\0': { /* Sixpence. */ -                     dixi('q',37); /* You find the sixpence. */ -                     with.pence += 6; -                     with.box_contents=nowt; -                     points(2); return; -                    } -                    break; -                case nowt: display("nothing at all. It's completely empty."); break; -                default: display(get_better(with.box_contents)+'.'); -               } -               break; -           case 11: { -                nn=1; -                for( nnn='\1'; nnn <= numobjs; nnn ++) -                if (with.obj[nnn])  -                { -                 nn += 1; -                 display(get_better(nnn)+", "+'\4'); -                } -               } -               break; -          }} -        } -        break; -    case '\26': use_icon=param; break; -    case '\15': scrolln += 1; break; -    case '\21': { -         if (call_spriterun)  sprite_run(); -         call_spriterun=false; - -         scrolln += 1; scroll[scrolln]='\21'; -         was_virtual=visible==m_virtual; -         if (was_virtual)  off_virtual(); -         drawscroll(dialogue);  -         if (was_virtual)  on_virtual(); -         resetscroll(); -        } -        break; -    case '\23' : mouthnext=true; break; -    case '\11' : for( nn=1; nn <= 9; nn ++) scroll[scrolln]=scroll[scrolln]+' '; -    break; -    default: -    {     /* add new char */ -     if (length(scroll[scrolln])==50)  -     { -      solidify(scrolln); -      scrolln += 1; -     } -     scroll[scrolln]=scroll[scrolln]+buffer[fv]; -   } -  } +void calldrivers() { +	word fv; +	byte nn; +	char nnn; +	boolean mouthnext; +	boolean call_spriterun; /* Only call sprite_run the FIRST time. */ + +	boolean was_virtual; + + +	nosound; +	state(0); +	screturn = false; +	mouthnext = false; +	call_spriterun = true; + +	switch (buffer[bufsize]) { +	case '\4': +		bufsize -= 1; +		break; /* ^D = (D)on't include pagebreak */ +	case '\2': +	case '\21': +		; +		break; /* ^B = speech (B)ubble, ^Q = (Q)uestion in dialogue box */ +	default: { +		bufsize += 1; +		buffer[bufsize] = '\20'; +	} +	} +	for (fv = 1; fv <= bufsize; fv ++) +		if (mouthnext) { +			if (buffer[fv] == '\23')  param = 0; +			else +				switch (buffer[fv]) { +				case RANGE_10('0', '9'): +					param = ord(buffer[fv]) - 48; +					break; +				case RANGE_26('A', 'Z'): +					param = ord(buffer[fv]) - 55; +					break; +				} +			mouthnext = false; +		} else +			switch (buffer[fv]) { +			case '\20': { +				if ((scrolln == 1) && (scroll[1] == ""))  flush(); + +				if (call_spriterun)  sprite_run(); +				call_spriterun = false; + +				was_virtual = visible == m_virtual; +				if (was_virtual)  off_virtual(); +				drawscroll(normscroll); +				if (was_virtual)  on_virtual(); +				resetscroll(); +				if (screturn)  return; +			} +			break; +			case '\7': +				scrollbells += 1; +				break; /* #7 = "Bel" */ +			case '\2': { +				if ((scrolln == 1) && (scroll[1] == ""))  flush(); + +				if (call_spriterun)  sprite_run(); +				call_spriterun = false; +				switch (param) { +				case 0: +					natural(); +					break; /* Not attached: generic bubble with no speaker. */ +				case RANGE_9(1, 9): +					if ((param > numtr) || (! tr[param].quick)) { +						/* not valid */ +						errorled(); +						natural(); +					} else tr[param].chatter(); +					break;                  /* Normal sprite talking routine. */ +				case 10 ... 36: { +					quasiped_type &with = quasipeds[param]; +					/* Quasi-peds. (This routine performs the same +					thing with QPs as triptype.chatter does with the +					sprites.) */ +					{ +						pedtype &with1 = peds[with.whichped]; + +						talkx = with1.x; +						talky = with1.y; /* Position. */ +					} +					talkf = with.fgc; +					talkb = with.bgc; /* Colours. */ +				} +				break; +				default: { +					errorled();    /* not valid */ +					natural(); +				} +				} + +				was_virtual = visible == m_virtual; +				if (was_virtual)  off_virtual(); +				bubble(normscroll); +				if (was_virtual)  on_virtual(); +				resetscroll(); +				if (screturn)  return; +			} +			break; +			case '\25': { +				{ +					dnatype &with = dna; +					switch (param) { +					case 1: +						display(lsd() + '\4'); +						break; /* insert cash balance (recursion) */ +					case 2: +						display(words[first_password + with.pass_num].w + '\4'); +						break; +					case 3: +						display(with.like2drink + '\4'); +						break; +					case 4: +						display(with.favourite_song + '\4'); +						break; +					case 5: +						display(with.worst_place_on_earth + '\4'); +						break; +					case 6: +						display(with.spare_evening + '\4'); +						break; +						/* ... */ +					case 9: +						display(strf(with.cat_x) + ',' + strf(with.cat_y) + '\4'); +						break; +					case 10: +						switch (with.box_contents) { +						case '\0': { /* Sixpence. */ +							dixi('q', 37); /* You find the sixpence. */ +							with.pence += 6; +							with.box_contents = nowt; +							points(2); +							return; +						} +						break; +						case nowt: +							display("nothing at all. It's completely empty."); +							break; +						default: +							display(get_better(with.box_contents) + '.'); +						} +						break; +					case 11: { +						nn = 1; +						for (nnn = '\1'; nnn <= numobjs; nnn ++) +							if (with.obj[nnn]) { +								nn += 1; +								display(get_better(nnn) + ", " + '\4'); +							} +					} +					break; +					} +				} +			} +			break; +			case '\26': +				use_icon = param; +				break; +			case '\15': +				scrolln += 1; +				break; +			case '\21': { +				if (call_spriterun)  sprite_run(); +				call_spriterun = false; + +				scrolln += 1; +				scroll[scrolln] = '\21'; +				was_virtual = visible == m_virtual; +				if (was_virtual)  off_virtual(); +				drawscroll(dialogue); +				if (was_virtual)  on_virtual(); +				resetscroll(); +			} +			break; +			case '\23' : +				mouthnext = true; +				break; +			case '\11' : +				for (nn = 1; nn <= 9; nn ++) scroll[scrolln] = scroll[scrolln] + ' '; +				break; +			default: { +				/* add new char */ +				if (length(scroll[scrolln]) == 50) { +					solidify(scrolln); +					scrolln += 1; +				} +				scroll[scrolln] = scroll[scrolln] + buffer[fv]; +			} +			}  } -void display(string z) -{ - bufsize=length(z); - move(z[1],buffer,bufsize); - calldrivers(); +void display(string z) { +	bufsize = length(z); +	move(z[1], buffer, bufsize); +	calldrivers();  } -void loadfont() -{ -    file<raw> f; - - assign(f,"avalot.fnt"); reset(f); f >> ch[0]; close(f); - assign(f,"avitalic.fnt"); reset(f); f >> ch[1]; close(f); - assign(f,"ttsmall.fnt"); reset(f); f >> little; close(f); +void loadfont() { +	file<raw> f; + +	assign(f, "avalot.fnt"); +	reset(f); +	f >> ch[0]; +	close(f); +	assign(f, "avitalic.fnt"); +	reset(f); +	f >> ch[1]; +	close(f); +	assign(f, "ttsmall.fnt"); +	reset(f); +	f >> little; +	close(f);  } -void okay() -{ - display("Okay!"); +void okay() { +	display("Okay!");  } -void musical_scroll() -{ -    boolean was_virtual; +void musical_scroll() { +	boolean was_virtual; - display(string("To play the harp...\r\rUse these keys:\r\n")+ -  "Q W E R T Y U I O P [ ]\r\rOr press Enter to stop playing.\4"); +	display(string("To play the harp...\r\rUse these keys:\r\n") + +	        "Q W E R T Y U I O P [ ]\r\rOr press Enter to stop playing.\4"); - sprite_run(); +	sprite_run(); - was_virtual=visible==m_virtual; - if (was_virtual)  off_virtual(); - drawscroll(music_scroll); - if (was_virtual)  on_virtual(); - resetscroll(); +	was_virtual = visible == m_virtual; +	if (was_virtual)  off_virtual(); +	drawscroll(music_scroll); +	if (was_virtual)  on_virtual(); +	resetscroll();  }  class unit_scrolls_initialize { -  public: unit_scrolls_initialize(); +public: +	unit_scrolls_initialize();  };  static unit_scrolls_initialize scrolls_constructor;  unit_scrolls_initialize::unit_scrolls_initialize() { - loadfont(); - resetscrolldriver(); +	loadfont(); +	resetscrolldriver();  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/scrolls.h b/engines/avalanche/scrolls.h index a22cfb7c2e..13928ef4ff 100644 --- a/engines/avalanche/scrolls.h +++ b/engines/avalanche/scrolls.h @@ -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 diff --git a/engines/avalanche/sequence.cpp b/engines/avalanche/sequence.cpp index cf1cb0ae3f..2715e648b3 100644 --- a/engines/avalanche/sequence.cpp +++ b/engines/avalanche/sequence.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 @@ -45,75 +45,78 @@  namespace Avalanche { -void then_show(byte what) -{ -    byte fv; -; - for( fv=1; fv <= seq_length; fv ++) -  if (seq[fv]==0)  -  {; -   seq[fv]=what; -   return; -  } +void then_show(byte what) { +	byte fv; +	; +	for (fv = 1; fv <= seq_length; fv ++) +		if (seq[fv] == 0) { +			; +			seq[fv] = what; +			return; +		}  } -void first_show(byte what) -{; - /* First, we need to blank out the entire array. */ - fillchar(seq,sizeof(seq),'\0'); +void first_show(byte what) { +	; +	/* First, we need to blank out the entire array. */ +	fillchar(seq, sizeof(seq), '\0'); - /* Then it's just the same as then_show. */ - then_show(what); +	/* Then it's just the same as then_show. */ +	then_show(what);  } -void then_flip(byte where,byte ped) -{; - then_show(now_flip); +void then_flip(byte where, byte ped) { +	; +	then_show(now_flip); - dna.flip_to_where=where; -   dna.flip_to_ped=ped; +	dna.flip_to_where = where; +	dna.flip_to_ped = ped;  } -void start_to_close() -{; - lose_timer(reason_sequencer); - set_up_timer(7,procsequence,reason_sequencer); +void start_to_close() { +	; +	lose_timer(reason_sequencer); +	set_up_timer(7, procsequence, reason_sequencer);  } -void start_to_open() -{; - dna.user_moves_avvy=false;  /* They can't move. */ - stopwalking; /* And they're not moving now. */ - start_to_close(); /* Apart from that, it's the same thing. */ +void start_to_open() { +	; +	dna.user_moves_avvy = false; /* They can't move. */ +	stopwalking; /* And they're not moving now. */ +	start_to_close(); /* Apart from that, it's the same thing. */  }  void call_sequencer(); - /* This proc is called by Timeout when it's time to do another frame. */ -static void shove_left() -{; - move(seq[2],seq[1],seq_length-1); /* Shift everything to the left. */ +/* This proc is called by Timeout when it's time to do another frame. */ +static void shove_left() { +	; +	move(seq[2], seq[1], seq_length - 1); /* Shift everything to the left. */  } -void call_sequencer() -{; - switch (seq[1]) { -  case 0: return; break; /* No more routines. */ -  case 1 ... 176: {; /* Show a frame. */ -           show_one(seq[1]); -           shove_left(); -          } -          break; -  case 177: {; -        user_moves_avvy=true; -        fliproom(flip_to_where,flip_to_ped); /* 177 = Flip room. */ -        if (seq[1]==177)  shove_left(); -       } -       break; - } - - start_to_close(); /* Make sure this proc gets called again. */ +void call_sequencer() { +	; +	switch (seq[1]) { +	case 0: +		return; +		break; /* No more routines. */ +	case 1 ... 176: { +		; /* Show a frame. */ +		show_one(seq[1]); +		shove_left(); +	} +	break; +	case 177: { +		; +		user_moves_avvy = true; +		fliproom(flip_to_where, flip_to_ped); /* 177 = Flip room. */ +		if (seq[1] == 177)  shove_left(); +	} +	break; +	} + +	start_to_close(); /* Make sure this proc gets called again. */  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/sequence.h b/engines/avalanche/sequence.h index 2d773ca181..54bb1e72f2 100644 --- a/engines/avalanche/sequence.h +++ b/engines/avalanche/sequence.h @@ -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 @@ -40,7 +40,7 @@ const integer seq_length = 10;  #define EXTERN  #endif -EXTERN array<1,seq_length,byte> seq; +EXTERN array<1, seq_length, byte> seq;  #undef EXTERN  #define EXTERN extern @@ -49,7 +49,7 @@ void first_show(byte what);  void then_show(byte what); -void then_flip(byte where,byte ped); +void then_flip(byte where, byte ped);  void start_to_close(); diff --git a/engines/avalanche/setup.cpp b/engines/avalanche/setup.cpp index 245a119bd6..072c3ef2a4 100644 --- a/engines/avalanche/setup.cpp +++ b/engines/avalanche/setup.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 @@ -33,37 +33,38 @@ namespace Avalanche {  const integer selected = 0x60; /* Background for selected lines of text. */ -typedef array<1,400,varying_string<80> > mobytype; +typedef array<1, 400, varying_string<80> > mobytype;  typedef set byteset;   /* Define its typemark. */  enum option {_overrideegacheck, _zoomystart, _loadfirst, _numlockhold, _usemouse, -           _controller, _logging, _logfile, +             _controller, _logging, _logfile, -           _joystickinstalled, _joytop, _joybottom, _joyleft, _joyright, _joymidx, -           _joymidy, _joycentringfactor, _whichjoy, _quiet, _soundcard, -           _baseaddress, _irq, _dma, -           _samplerate, _keyboardclick, +             _joystickinstalled, _joytop, _joybottom, _joyleft, _joyright, _joymidx, +             _joymidy, _joycentringfactor, _whichjoy, _quiet, _soundcard, +             _baseaddress, _irq, _dma, +             _samplerate, _keyboardclick, -           _printer, +             _printer, -           option_error, last_option}; +             option_error, last_option +            }; -mobytype* moby; +mobytype *moby;  word mobylength;  byte background; /* The current background colour, times 16. */  byte line; /* Which line you're on in the menus. */ -string registrant,reginum; +string registrant, reginum;  byte num_printers; -array<1,10,string> printers; +array<1, 10, string> printers;  string this_printer;  /* THE STATUS VARIABLES: */ -  /* general */ +/* general */  boolean override_ega;  boolean skip_loading_screens; @@ -76,141 +77,141 @@ boolean log_to_file;  string log_filename;  string autotype; -  /* joystick */ +/* joystick */  boolean has_a_joystick; -word jtop,jbottom,jleft,jright,jmidx,jmidy; +word jtop, jbottom, jleft, jright, jmidx, jmidy;  byte jcentre;  word whichjoy; -  /* sound */ +/* sound */  boolean suppress_sfx;  byte your_card;  longint samplerate; -longint sound_addr,sound_irq,sound_dma; +longint sound_addr, sound_irq, sound_dma;  boolean wants_keyclick; - /* registration */ +/* registration */ -string regname,regnum,chkname,chknum; +string regname, regnum, chkname, chknum; -string trim_and_caps(string this_) -{ -    byte fv; - - string trim_and_caps_result; - while ((this_[1]==' ') && (this_!=""))  -                      Delete(this_,1,1);         /* Strip leading blanks. */ - while ((this_[length(this_)]==' ') && (this_!=""))  -                      this_[0] -= 1;             /* Strip trailing blanks. */ - for( fv=1; fv <= length(this_); fv ++) this_[fv]=upcase(this_[fv]);/* And capitalise. */ - trim_and_caps_result=this_; - return trim_and_caps_result; +string trim_and_caps(string this_) { +	byte fv; + +	string trim_and_caps_result; +	while ((this_[1] == ' ') && (this_ != "")) +		Delete(this_, 1, 1);       /* Strip leading blanks. */ +	while ((this_[length(this_)] == ' ') && (this_ != "")) +		this_[0] -= 1;             /* Strip trailing blanks. */ +	for (fv = 1; fv <= length(this_); fv ++) this_[fv] = upcase(this_[fv]); /* And capitalise. */ +	trim_and_caps_result = this_; +	return trim_and_caps_result;  } -option string_2_option(string field) -{ +option string_2_option(string field) { - option string_2_option_result; - field=trim_and_caps(field); +	option string_2_option_result; +	field = trim_and_caps(field); - if (field=="OVERRIDEEGACHECK")  string_2_option_result=_overrideegacheck; else - if (field=="ZOOMYSTART")        string_2_option_result=_zoomystart;       else - if (field=="LOADFIRST")         string_2_option_result=_loadfirst;        else - if (field=="NUMLOCKHOLD")       string_2_option_result=_numlockhold;      else - if (field=="USEMOUSE")          string_2_option_result=_usemouse;         else - if (field=="CONTROLLER")        string_2_option_result=_controller;       else - if (field=="LOGGING")           string_2_option_result=_logging;          else - if (field=="LOGFILE")           string_2_option_result=_logfile;          else +	if (field == "OVERRIDEEGACHECK")  string_2_option_result = _overrideegacheck; +	else if (field == "ZOOMYSTART")        string_2_option_result = _zoomystart; +	else if (field == "LOADFIRST")         string_2_option_result = _loadfirst; +	else if (field == "NUMLOCKHOLD")       string_2_option_result = _numlockhold; +	else if (field == "USEMOUSE")          string_2_option_result = _usemouse; +	else if (field == "CONTROLLER")        string_2_option_result = _controller; +	else if (field == "LOGGING")           string_2_option_result = _logging; +	else if (field == "LOGFILE")           string_2_option_result = _logfile; +	else -  /* joystick */ +		/* joystick */ - if (field=="JOYSTICKINSTALLED")  string_2_option_result=_joystickinstalled; else - if (field=="JOYTOP")             string_2_option_result=_joytop;            else - if (field=="JOYBOTTOM")          string_2_option_result=_joybottom;         else - if (field=="JOYLEFT")            string_2_option_result=_joyleft;           else - if (field=="JOYRIGHT")           string_2_option_result=_joyright;          else - if (field=="JOYMIDX")            string_2_option_result=_joymidx;           else - if (field=="JOYMIDY")            string_2_option_result=_joymidy;           else - if (field=="JOYCENTRINGFACTOR")  string_2_option_result=_joycentringfactor; else - if (field=="WHICHJOY")           string_2_option_result=_whichjoy;          else +		if (field == "JOYSTICKINSTALLED")  string_2_option_result = _joystickinstalled; +		else if (field == "JOYTOP")             string_2_option_result = _joytop; +		else if (field == "JOYBOTTOM")          string_2_option_result = _joybottom; +		else if (field == "JOYLEFT")            string_2_option_result = _joyleft; +		else if (field == "JOYRIGHT")           string_2_option_result = _joyright; +		else if (field == "JOYMIDX")            string_2_option_result = _joymidx; +		else if (field == "JOYMIDY")            string_2_option_result = _joymidy; +		else if (field == "JOYCENTRINGFACTOR")  string_2_option_result = _joycentringfactor; +		else if (field == "WHICHJOY")           string_2_option_result = _whichjoy; +		else -  /* sound */ +			/* sound */ - if (field=="QUIET")              string_2_option_result=_quiet;             else - if (field=="SOUNDCARD")          string_2_option_result=_soundcard;         else - if (field=="SAMPLERATE")         string_2_option_result=_samplerate;        else - if (field=="KEYBOARDCLICK")      string_2_option_result=_keyboardclick;     else - if (field=="BASEADDRESS")        string_2_option_result=_baseaddress;       else - if (field=="IRQ")                string_2_option_result=_irq;               else - if (field=="DMA")                string_2_option_result=_dma;               else +			if (field == "QUIET")              string_2_option_result = _quiet; +			else if (field == "SOUNDCARD")          string_2_option_result = _soundcard; +			else if (field == "SAMPLERATE")         string_2_option_result = _samplerate; +			else if (field == "KEYBOARDCLICK")      string_2_option_result = _keyboardclick; +			else if (field == "BASEADDRESS")        string_2_option_result = _baseaddress; +			else if (field == "IRQ")                string_2_option_result = _irq; +			else if (field == "DMA")                string_2_option_result = _dma; +			else -  /* printer */ +				/* printer */ - if (field=="PRINTER")            string_2_option_result=_printer;           else +				if (field == "PRINTER")            string_2_option_result = _printer; +				else -   string_2_option_result=option_error; +					string_2_option_result = option_error; - return string_2_option_result; +	return string_2_option_result;  } -void clear_to(byte colour) -{ - window(1,1,80,24); background=colour*16; textattr=background; clrscr; +void clear_to(byte colour) { +	window(1, 1, 80, 24); +	background = colour * 16; +	textattr = background; +	clrscr;  } -void centre(byte where,byte colour, string what) -{ - textattr=background+colour; - gotoxy(40-length(what) / 2,where); - output << what; +void centre(byte where, byte colour, string what) { +	textattr = background + colour; +	gotoxy(40 - length(what) / 2, where); +	output << what;  } -void load_file() -{ - text t; +void load_file() { +	text t; - mobylength=0; - /*$I-*/ - assign(t,"avalot.ini"); - reset(t); - /*$I+*/ +	mobylength = 0; +	/*$I-*/ +	assign(t, "avalot.ini"); +	reset(t); +	/*$I+*/ - if (ioresult!=0)    /* No file. */ - { -  output << "SETUP: Avalot.ini not found!" << NL; -  exit(255); - } +	if (ioresult != 0) { /* No file. */ +		output << "SETUP: Avalot.ini not found!" << NL; +		exit(255); +	} - while (! eof(t))  - { -  mobylength += 1; /* Preincrement mode. */ -  t >> (*moby)[mobylength] >> NL; - } +	while (! eof(t)) { +		mobylength += 1; /* Preincrement mode. */ +		t >> (*moby)[mobylength] >> NL; +	} - close(t); +	close(t);  } -string strhf(longint x)            /* assume x is +ve */ -{ -      const array<0,16,char> hexdigits = "0123456789ABCDEF"; -    string y; longint v; +string strhf(longint x) {          /* assume x is +ve */ +	const array<0, 16, char> hexdigits = "0123456789ABCDEF"; +	string y; +	longint v; -   string strhf_result; -   v=x; y=""; +	string strhf_result; +	v = x; +	y = ""; -   while (v!=0)  -   { -      y=string(hexdigits[v % longint(16)-1])+y; -      v=v / longint(16); -   } +	while (v != 0) { +		y = string(hexdigits[v % longint(16) - 1]) + y; +		v = v / longint(16); +	} -   strhf_result=string('$')+y; -   return strhf_result; +	strhf_result = string('$') + y; +	return strhf_result;  }  void update_moby(); @@ -220,257 +221,293 @@ static byte fv;  static string field; -static void get_field(string x) -{ -    if (pos(";",x)!=0)  x=copy(x,1,pos(";",x)-1); - -    if (pos("=",x)==0)  -        field=""; -    else -    { -        field=copy(x,0,pos("=",x)-1); -        while (field[1]==' ')  field=copy(field,2,255); -    } +static void get_field(string x) { +	if (pos(";", x) != 0)  x = copy(x, 1, pos(";", x) - 1); + +	if (pos("=", x) == 0) +		field = ""; +	else { +		field = copy(x, 0, pos("=", x) - 1); +		while (field[1] == ' ')  field = copy(field, 2, 255); +	}  } -static string yn1(boolean x) - { string yn1_result; -       if (x)  yn1_result="Yes"; else yn1_result="No"; return yn1_result; - } +static string yn1(boolean x) { +	string yn1_result; +	if (x)  yn1_result = "Yes"; +	else yn1_result = "No"; +	return yn1_result; +} -static string kj(boolean x) - { string kj_result; -       if (x)  kj_result="Keyboard"; else kj_result="Joystick"; return kj_result; - } +static string kj(boolean x) { +	string kj_result; +	if (x)  kj_result = "Keyboard"; +	else kj_result = "Joystick"; +	return kj_result; +} -static string put_logcodes() -{ -    byte q; +static string put_logcodes() { +	byte q; -    string put_logcodes_result; -    q=(byte)(log_to_file)+(byte)(log_to_printer)*2; +	string put_logcodes_result; +	q = (byte)(log_to_file) + (byte)(log_to_printer) * 2; -    switch (q) { -        case 0: put_logcodes_result="No"; break; -        case 1: put_logcodes_result="Disk"; break; -        case 2: put_logcodes_result="Printer"; break; -    } -    return put_logcodes_result; +	switch (q) { +	case 0: +		put_logcodes_result = "No"; +		break; +	case 1: +		put_logcodes_result = "Disk"; +		break; +	case 2: +		put_logcodes_result = "Printer"; +		break; +	} +	return put_logcodes_result;  } -static string card() -{ -   string card_result; -   switch (your_card) { -       case 0: card_result="None"; break; -       case 1: card_result="SB"; break; -       case 2: card_result="SBPro"; break; -       case 3: card_result="SB16"; break; -       case 4: card_result="Pas"; break; -       case 5: card_result="PasPlus"; break; -       case 6: card_result="Pas16"; break; -       case 7: card_result="Aria"; break; -       case 8: card_result="WinSound"; break; -       case 9: card_result="Gravis"; break; -      case 10: card_result="DacLPT"; break; -      case 11: card_result="StereoDacs"; break; -      case 12: card_result="StereoOn1"; break; -      case 13: card_result="Speaker"; break; -   } -   return card_result; +static string card() { +	string card_result; +	switch (your_card) { +	case 0: +		card_result = "None"; +		break; +	case 1: +		card_result = "SB"; +		break; +	case 2: +		card_result = "SBPro"; +		break; +	case 3: +		card_result = "SB16"; +		break; +	case 4: +		card_result = "Pas"; +		break; +	case 5: +		card_result = "PasPlus"; +		break; +	case 6: +		card_result = "Pas16"; +		break; +	case 7: +		card_result = "Aria"; +		break; +	case 8: +		card_result = "WinSound"; +		break; +	case 9: +		card_result = "Gravis"; +		break; +	case 10: +		card_result = "DacLPT"; +		break; +	case 11: +		card_result = "StereoDacs"; +		break; +	case 12: +		card_result = "StereoOn1"; +		break; +	case 13: +		card_result = "Speaker"; +		break; +	} +	return card_result;  } -static void entail(string x) -{ -    string before,after; +static void entail(string x) { +	string before, after; - before=copy((*moby)[fv],1,pos("=",(*moby)[fv])-1); +	before = copy((*moby)[fv], 1, pos("=", (*moby)[fv]) - 1); - if (pos(";",(*moby)[fv])==0)  - { -    (*moby)[fv]=before+'='+x; - } else - { -    after=copy((*moby)[fv],pos(";",(*moby)[fv]),255); +	if (pos(";", (*moby)[fv]) == 0) { +		(*moby)[fv] = before + '=' + x; +	} else { +		after = copy((*moby)[fv], pos(";", (*moby)[fv]), 255); -    (*moby)[fv]=before+'='+x+' '; -    while (length((*moby)[fv])<25)  (*moby)[fv]=(*moby)[fv]+' '; +		(*moby)[fv] = before + '=' + x + ' '; +		while (length((*moby)[fv]) < 25)(*moby)[fv] = (*moby)[fv] + ' '; -    (*moby)[fv]=(*moby)[fv]+after; - } +		(*moby)[fv] = (*moby)[fv] + after; +	}  } -void update_moby() -{ - option o; +void update_moby() { +	option o; -    for( fv=1; fv <= mobylength; fv ++) -    { -      get_field((*moby)[fv]); +	for (fv = 1; fv <= mobylength; fv ++) { +		get_field((*moby)[fv]); -      if (field!="")  -      { -       o=string_2_option(field); +		if (field != "") { +			o = string_2_option(field); -       if (o==_overrideegacheck)  entail(yn1(override_ega)); else -       if (o==_zoomystart)  entail(yn1(skip_loading_screens)); else -       if (o==_loadfirst)  entail(load_particular); else -       if (o==_numlockhold)  entail(yn1(force_numlock)); else -       if (o==_usemouse)  entail(yn1(ignore_mouse)); else -       if (o==_controller)  entail(kj(use_keyboard)); else -       if (o==_logging)  entail(put_logcodes()); else -       if (o==_logfile)  entail(log_filename); else +			if (o == _overrideegacheck)  entail(yn1(override_ega)); +			else if (o == _zoomystart)  entail(yn1(skip_loading_screens)); +			else if (o == _loadfirst)  entail(load_particular); +			else if (o == _numlockhold)  entail(yn1(force_numlock)); +			else if (o == _usemouse)  entail(yn1(ignore_mouse)); +			else if (o == _controller)  entail(kj(use_keyboard)); +			else if (o == _logging)  entail(put_logcodes()); +			else if (o == _logfile)  entail(log_filename); +			else -        /* joystick */ +				/* joystick */ -       if (o==_joystickinstalled)  entail(yn1(has_a_joystick)); else -       if (o==_joytop)  entail(strf(jtop)); else -       if (o==_joybottom)  entail(strf(jbottom)); else -       if (o==_joyleft)  entail(strf(jleft)); else -       if (o==_joyright)  entail(strf(jright)); else -       if (o==_joymidx)  entail(strf(jmidx)); else -       if (o==_joymidy)  entail(strf(jmidy)); else -       if (o==_joycentringfactor)  entail(strf(jcentre)); else -       if (o==_whichjoy)  entail(strf(whichjoy)); else +				if (o == _joystickinstalled)  entail(yn1(has_a_joystick)); +				else if (o == _joytop)  entail(strf(jtop)); +				else if (o == _joybottom)  entail(strf(jbottom)); +				else if (o == _joyleft)  entail(strf(jleft)); +				else if (o == _joyright)  entail(strf(jright)); +				else if (o == _joymidx)  entail(strf(jmidx)); +				else if (o == _joymidy)  entail(strf(jmidy)); +				else if (o == _joycentringfactor)  entail(strf(jcentre)); +				else if (o == _whichjoy)  entail(strf(whichjoy)); +				else -        /* sound */ +					/* sound */ -       if (o==_quiet)  entail(yn1(suppress_sfx)); else -       if (o==_soundcard)  entail(card()); else -       if (o==_samplerate)  entail(strf(samplerate)); else -       if (o==_baseaddress)  entail(strhf(sound_addr)); else -       if (o==_irq)  entail(strf(sound_irq)); else -       if (o==_dma)  entail(strf(sound_dma)); else -       if (o==_keyboardclick)  entail(yn1(wants_keyclick)); else +					if (o == _quiet)  entail(yn1(suppress_sfx)); +					else if (o == _soundcard)  entail(card()); +					else if (o == _samplerate)  entail(strf(samplerate)); +					else if (o == _baseaddress)  entail(strhf(sound_addr)); +					else if (o == _irq)  entail(strf(sound_irq)); +					else if (o == _dma)  entail(strf(sound_dma)); +					else if (o == _keyboardclick)  entail(yn1(wants_keyclick)); +					else -        /* printer */ +						/* printer */ -       if (o==_printer)  entail(this_printer); +						if (o == _printer)  entail(this_printer); -      } -    } +		} +	}  } -void save_file() -{ - text t; - word fv; +void save_file() { +	text t; +	word fv; - textattr=10; - update_moby(); +	textattr = 10; +	update_moby(); - clear_to(black); - centre(14,14,"Saving..."); +	clear_to(black); +	centre(14, 14, "Saving..."); - assign(t,"avalot.ini"); - rewrite(t); +	assign(t, "avalot.ini"); +	rewrite(t); - for( fv=1; fv <= mobylength; fv ++) - { -  t << (*moby)[fv] << NL; - } +	for (fv = 1; fv <= mobylength; fv ++) { +		t << (*moby)[fv] << NL; +	} - close(t); +	close(t);  } -boolean detect() -{ - word x,y,xo,yo; - byte count; - - boolean detect_result; - count=0; - if (joystickpresent())  - { -  detect_result=true; -  return detect_result; - } - readjoya(xo,yo); - do { -  if (count<7)  count += 1;   /* Take advantage of "flutter" */ -  if (count==6)  -  { -   centre(7,1,"The Bios says you don't have a joystick. However, it's often wrong"); -   centre(8,1,"about such matters. So, do you? If you do, move joystick A to"); -   centre(9,1,"continue. If you don't, press any key to cancel."); -  } -  readjoya(x,y); - } while (!((keypressed()) | (x!=xo) || (y!=yo))); - detect_result=~ keypressed(); - return detect_result; +boolean detect() { +	word x, y, xo, yo; +	byte count; + +	boolean detect_result; +	count = 0; +	if (joystickpresent()) { +		detect_result = true; +		return detect_result; +	} +	readjoya(xo, yo); +	do { +		if (count < 7)  count += 1; /* Take advantage of "flutter" */ +		if (count == 6) { +			centre(7, 1, "The Bios says you don't have a joystick. However, it's often wrong"); +			centre(8, 1, "about such matters. So, do you? If you do, move joystick A to"); +			centre(9, 1, "continue. If you don't, press any key to cancel."); +		} +		readjoya(x, y); +	} while (!((keypressed()) | (x != xo) || (y != yo))); +	detect_result = ~ keypressed(); +	return detect_result;  } -void display() -{ - gotoxy(28,10); output << jleft << "  "; - gotoxy(28,11); output << jright; - gotoxy(28,12); output << jtop << "  "; - gotoxy(28,13); output << jbottom; +void display() { +	gotoxy(28, 10); +	output << jleft << "  "; +	gotoxy(28, 11); +	output << jright; +	gotoxy(28, 12); +	output << jtop << "  "; +	gotoxy(28, 13); +	output << jbottom;  } -void readjoy(word& x,word& y) -{ - if (whichjoy==1)  readjoya(x,y); else readjoyb(x,y); +void readjoy(word &x, word &y) { +	if (whichjoy == 1)  readjoya(x, y); +	else readjoyb(x, y);  } -void getmaxmin() -{ -    word x,y; char r; - - clear_to(green); - centre(5,1,"Rotate the joystick around in a circle, as far from the centre as it"); - centre(6,1,"can get. Then press any key."); - centre(7,1,"Press Esc to cancel this part."); - centre(16,1,"(To reset these figures, set \"Do you have a joystick?\" to No, then Yes.)"); - - gotoxy(20,10); output << "Left  :"; - gotoxy(20,11); output << "Right :"; - gotoxy(20,12); output << "Top   :"; - gotoxy(20,13); output << "Bottom:"; - - - if (jleft==0)  jleft=maxint; - if  (jtop==0)   jtop=maxint; - do { -  readjoy(x,y); -  if (x<jleft)  jleft=x; -  if (y<jtop)  jtop=y; -  if (x>jright)  jright=x; -  if (y>jbottom)  jbottom=y; -  display(); - } while (!keypressed()); - - do { r=readkey(); } while (!(~ keypressed())); - if (r=='\33')  return; - - centre(19,1,"Thank you. Now please centre your joystick and hit a button."); - do {; } while (!(buttona1() || buttona2())); - - readjoya(jmidx,jmidy); - - has_a_joystick=true; +void getmaxmin() { +	word x, y; +	char r; + +	clear_to(green); +	centre(5, 1, "Rotate the joystick around in a circle, as far from the centre as it"); +	centre(6, 1, "can get. Then press any key."); +	centre(7, 1, "Press Esc to cancel this part."); +	centre(16, 1, "(To reset these figures, set \"Do you have a joystick?\" to No, then Yes.)"); + +	gotoxy(20, 10); +	output << "Left  :"; +	gotoxy(20, 11); +	output << "Right :"; +	gotoxy(20, 12); +	output << "Top   :"; +	gotoxy(20, 13); +	output << "Bottom:"; + + +	if (jleft == 0)  jleft = maxint; +	if (jtop == 0)   jtop = maxint; +	do { +		readjoy(x, y); +		if (x < jleft)  jleft = x; +		if (y < jtop)  jtop = y; +		if (x > jright)  jright = x; +		if (y > jbottom)  jbottom = y; +		display(); +	} while (!keypressed()); + +	do { +		r = readkey(); +	} while (!(~ keypressed())); +	if (r == '\33')  return; + +	centre(19, 1, "Thank you. Now please centre your joystick and hit a button."); +	do { +		; +	} while (!(buttona1() || buttona2())); + +	readjoya(jmidx, jmidy); + +	has_a_joystick = true;  } -void joysetup() -{ - clear_to(green); - if (! detect())  return; - getmaxmin(); +void joysetup() { +	clear_to(green); +	if (! detect())  return; +	getmaxmin();  }  byte choose_one_of(byteset which); @@ -478,564 +515,660 @@ byte choose_one_of(byteset which);  static shortint direction; -static void move(shortint d) -{ - direction=d; line=line+d; +static void move(shortint d) { +	direction = d; +	line = line + d;  } -static void highlight(word where,word how) -{ -    byte fv; +static void highlight(word where, word how) { +	byte fv; - where=where*160-159; - for( fv=0; fv <= 79; fv ++) -  mem[0xb800*where+fv*2]=(mem[0xb800*where+fv*2] & 0xf)+how; +	where = where * 160 - 159; +	for (fv = 0; fv <= 79; fv ++) +		mem[0xb800 * where + fv * 2] = (mem[0xb800 * where + fv * 2] & 0xf) + how;  }  byte choose_one_of(byteset which)  { - const integer upwards = -1; - const integer downwards = 1; - - boolean done; - char r; - - - byte choose_one_of_result; - done=false; direction=1; - do { -  while (! (which.has(line)))  -  { -   line=line+direction; -   if (line>26)  line=1; -   if (line==0)  line=26; -  } - -  highlight(line,selected); -  r=readkey(); -  highlight(line,background); -  switch (r) { -   case '\0': switch (readkey()) { -        case cup: move(upwards); break; -        case cdown: move(downwards); break; -       } -       break; -   case creturn: done=true; break; -   case cescape: { -             choose_one_of_result=15; /* bottom line is always 15. */ -             return choose_one_of_result; -            } -            break; -  } - - } while (!done); - - choose_one_of_result=line; - return choose_one_of_result; +	const integer upwards = -1; +	const integer downwards = 1; + +	boolean done; +	char r; + + +	byte choose_one_of_result; +	done = false; +	direction = 1; +	do { +		while (!(which.has(line))) { +			line = line + direction; +			if (line > 26)  line = 1; +			if (line == 0)  line = 26; +		} + +		highlight(line, selected); +		r = readkey(); +		highlight(line, background); +		switch (r) { +		case '\0': +			switch (readkey()) { +			case cup: +				move(upwards); +				break; +			case cdown: +				move(downwards); +				break; +			} +			break; +		case creturn: +			done = true; +			break; +		case cescape: { +			choose_one_of_result = 15; /* bottom line is always 15. */ +			return choose_one_of_result; +		} +		break; +		} + +	} while (!done); + +	choose_one_of_result = line; +	return choose_one_of_result;  }  void bottom_bar();  static void load_regi_info(); -static char decode1(char c) -{ -    byte b; +static char decode1(char c) { +	byte b; -  char decode1_result; -  b=ord(c)-32; -  decode1_result=chr(( (b & 0xf) << 3) + ((cardinal)(b & 0x70) >> 4)); -  return decode1_result; +	char decode1_result; +	b = ord(c) - 32; +	decode1_result = chr(((b & 0xf) << 3) + ((cardinal)(b & 0x70) >> 4)); +	return decode1_result;  } -static char decode2(char c) -{ -  char decode2_result; -  decode2_result=chr( ((ord(c) & 0xf) << 2) + 0x43); -  return decode2_result; +static char decode2(char c) { +	char decode2_result; +	decode2_result = chr(((ord(c) & 0xf) << 2) + 0x43); +	return decode2_result;  } -static boolean checker(string proper,string check) -{ -    byte fv; boolean ok; +static boolean checker(string proper, string check) { +	byte fv; +	boolean ok; -  boolean checker_result; -  ok=true; -  for( fv=1; fv <= length(proper); fv ++) -    if ((ord(proper[fv]) & 0xf)!=((cardinal)(ord(check[fv])-0x43) >> 2)) -           ok=false; +	boolean checker_result; +	ok = true; +	for (fv = 1; fv <= length(proper); fv ++) +		if ((ord(proper[fv]) & 0xf) != ((cardinal)(ord(check[fv]) - 0x43) >> 2)) +			ok = false; -  checker_result=ok; -  return checker_result; +	checker_result = ok; +	return checker_result;  } -static void load_regi_info() -{ - text t; - byte fv; - string x; - byte namelen,numlen; - string namechk,numchk; +static void load_regi_info() { +	text t; +	byte fv; +	string x; +	byte namelen, numlen; +	string namechk, numchk; -  /*$I-*/ -  assign(t,"register.dat"); reset(t); -  /*$I+*/ +	/*$I-*/ +	assign(t, "register.dat"); +	reset(t); +	/*$I+*/ -  if (ioresult!=0)  -  { -    registrant=""; -    return; -  } +	if (ioresult != 0) { +		registrant = ""; +		return; +	} -  for( fv=1; fv <= 53; fv ++) t >> NL; -  t >> x >> NL; -  close(t); +	for (fv = 1; fv <= 53; fv ++) t >> NL; +	t >> x >> NL; +	close(t); -  namelen=107-ord(x[1]); numlen=107-ord(x[2]); +	namelen = 107 - ord(x[1]); +	numlen = 107 - ord(x[2]); -  registrant=copy(x,3,namelen); -  reginum=copy(x,4+namelen,numlen); -  namechk=copy(x,4+namelen+numlen,namelen); -  numchk=copy(x,4+namelen+numlen+namelen,numlen); +	registrant = copy(x, 3, namelen); +	reginum = copy(x, 4 + namelen, numlen); +	namechk = copy(x, 4 + namelen + numlen, namelen); +	numchk = copy(x, 4 + namelen + numlen + namelen, numlen); -  for( fv=1; fv <= namelen; fv ++) registrant[fv]=decode1(registrant[fv]); -  for( fv=1; fv <= numlen; fv ++) reginum[fv]=decode1(reginum[fv]); +	for (fv = 1; fv <= namelen; fv ++) registrant[fv] = decode1(registrant[fv]); +	for (fv = 1; fv <= numlen; fv ++) reginum[fv] = decode1(reginum[fv]); -  if ((! checker(registrant,namechk)) || (! checker(reginum,numchk))) -        { registrant="\?\"!?"; reginum="(."; } +	if ((! checker(registrant, namechk)) || (! checker(reginum, numchk))) { +		registrant = "\?\"!?"; +		reginum = "(."; +	}  } -void bottom_bar() -{ - load_regi_info(); - textattr=96; background=96; - window(1,1,80,25); - gotoxy(1,25); clreol; - if (registrant=="")  -   centre(25,15,"Unregistered copy."); - else -   centre(25,15,string("Registered to ")+registrant+" ("+reginum+")."); +void bottom_bar() { +	load_regi_info(); +	textattr = 96; +	background = 96; +	window(1, 1, 80, 25); +	gotoxy(1, 25); +	clreol; +	if (registrant == "") +		centre(25, 15, "Unregistered copy."); +	else +		centre(25, 15, string("Registered to ") + registrant + " (" + reginum + ").");  } -void new_menu() -{ - line=1;  /* now that we've got a new menu. */ +void new_menu() { +	line = 1; /* now that we've got a new menu. */  } -string two_answers(string ans_true,string ans_false, boolean which) -{ - string two_answers_result; - if (which)  -  two_answers_result=string(" (")+ans_true+')'; - else -  two_answers_result=string(" (")+ans_false+')'; - return two_answers_result; +string two_answers(string ans_true, string ans_false, boolean which) { +	string two_answers_result; +	if (which) +		two_answers_result = string(" (") + ans_true + ')'; +	else +		two_answers_result = string(" (") + ans_false + ')'; +	return two_answers_result;  } -string yes_or_no(boolean which) -{ - string yes_or_no_result; - yes_or_no_result=two_answers("yes","no",which); - return yes_or_no_result; +string yes_or_no(boolean which) { +	string yes_or_no_result; +	yes_or_no_result = two_answers("yes", "no", which); +	return yes_or_no_result;  } -string give_name(string what) -{ - string give_name_result; - if (what=="")  -  give_name_result=" (none)"; - else -  give_name_result=string(" (\"")+what+"\")"; - return give_name_result; +string give_name(string what) { +	string give_name_result; +	if (what == "") +		give_name_result = " (none)"; +	else +		give_name_result = string(" (\"") + what + "\")"; +	return give_name_result;  } -string sound_card(byte which) -{ - string sound_card_result; - switch (which) { -  case 0: sound_card_result="none"; break; -  case 1: sound_card_result="SoundBlaster"; break; -  case 2: sound_card_result="SoundBlaster Pro"; break; -  case 3: sound_card_result="SoundBlaster 16"; break; -  case 4: sound_card_result="Pro Audio Spectrum"; break; -  case 5: sound_card_result="Pro Audio Spectrum+"; break; -  case 6: sound_card_result="Pro Audio Spectrum 16"; break; -  case 7: sound_card_result="Aria"; break; -  case 8: sound_card_result="Windows Sound System or compatible"; break; -  case 9: sound_card_result="Gravis Ultrasound"; break; -  case 10: sound_card_result="DAC on LPT1"; break; -  case 11: sound_card_result="Stereo DACs on LPT1 and LPT2"; break; -  case 12: sound_card_result="Stereo-on-1 DAC on LPT"; break; -  case 13: sound_card_result="PC speaker"; break; - } - return sound_card_result; +string sound_card(byte which) { +	string sound_card_result; +	switch (which) { +	case 0: +		sound_card_result = "none"; +		break; +	case 1: +		sound_card_result = "SoundBlaster"; +		break; +	case 2: +		sound_card_result = "SoundBlaster Pro"; +		break; +	case 3: +		sound_card_result = "SoundBlaster 16"; +		break; +	case 4: +		sound_card_result = "Pro Audio Spectrum"; +		break; +	case 5: +		sound_card_result = "Pro Audio Spectrum+"; +		break; +	case 6: +		sound_card_result = "Pro Audio Spectrum 16"; +		break; +	case 7: +		sound_card_result = "Aria"; +		break; +	case 8: +		sound_card_result = "Windows Sound System or compatible"; +		break; +	case 9: +		sound_card_result = "Gravis Ultrasound"; +		break; +	case 10: +		sound_card_result = "DAC on LPT1"; +		break; +	case 11: +		sound_card_result = "Stereo DACs on LPT1 and LPT2"; +		break; +	case 12: +		sound_card_result = "Stereo-on-1 DAC on LPT"; +		break; +	case 13: +		sound_card_result = "PC speaker"; +		break; +	} +	return sound_card_result;  } -void get_str(string& n) -{ - string x; - char r; +void get_str(string &n) { +	string x; +	char r; -    clear_to(black); -    centre(3,3,"Enter the new value. Press Enter to accept, or Esc to cancel."); -    x=""; +	clear_to(black); +	centre(3, 3, "Enter the new value. Press Enter to accept, or Esc to cancel."); +	x = ""; -    do { +	do { -        r=readkey(); +		r = readkey(); -        switch (r) { -            case cbackspace: if (x[0]>'\0')  x[0] -= 1; break; -            case creturn: { -                         n=x; -                         return; -                     } -                     break; -            case cescape: return; break; +		switch (r) { +		case cbackspace: +			if (x[0] > '\0')  x[0] -= 1; +			break; +		case creturn: { +			n = x; +			return; +		} +		break; +		case cescape: +			return; +			break; -            default: -                if (x[0]<'\106')  x=x+r; -        } +		default: +			if (x[0] < '\106')  x = x + r; +		} -        centre(7,2,string(' ')+x+' '); +		centre(7, 2, string(' ') + x + ' '); -    } while (!false); +	} while (!false);  } -void get_num(longint& n) -{ - string x; - char r; - integer e; +void get_num(longint &n) { +	string x; +	char r; +	integer e; -    clear_to(black); -    centre(3,3,"Enter the new value. Press Enter to accept, or Esc to cancel."); -    centre(4,3,"Precede with $ for a hex value."); -    x=""; +	clear_to(black); +	centre(3, 3, "Enter the new value. Press Enter to accept, or Esc to cancel."); +	centre(4, 3, "Precede with $ for a hex value."); +	x = ""; -    do { +	do { -        r=upcase(readkey()); +		r = upcase(readkey()); -        switch (r) { -            case cbackspace: if (x[0]>'\0')  x[0] -= 1; break; -            case creturn: { -                         val(x,n,e); -                         return; -                     } -                     break; -            case cescape: return; break; +		switch (r) { +		case cbackspace: +			if (x[0] > '\0')  x[0] -= 1; +			break; +		case creturn: { +			val(x, n, e); +			return; +		} +		break; +		case cescape: +			return; +			break; -            default: -                if ((x[0]<'\106') &&  -                  ((set::of(range('0','9'), eos).has(r)) || ((x[1]=='$') && (set::of(range('A','F'), eos).has(r))) || -                    ((x=="") && (r=='$')))) -                     x=x+r; -        } +		default: +			if ((x[0] < '\106') && +			        ((set::of(range('0', '9'), eos).has(r)) || ((x[1] == '$') && (set::of(range('A', 'F'), eos).has(r))) || +			         ((x == "") && (r == '$')))) +				x = x + r; +		} -        centre(7,2,string(' ')+x+' '); +		centre(7, 2, string(' ') + x + ' '); -    } while (!false); +	} while (!false);  } -void general_menu() -{ - new_menu(); - do { -  clear_to(blue); - -  centre( 3,15,"General Menu"); - -  centre( 5, 7,string("Override EGA check?")+yes_or_no(override_ega)); -  centre( 6, 7,string("Skip loading screens?")+yes_or_no(skip_loading_screens)); -  centre( 7, 7,string("Load a particular file by default?")+give_name(load_particular)); -  centre( 8, 7,string("Force NumLock off?")+yes_or_no(force_numlock)); -/*  centre( 9, 7,'Ignore the mouse?'+yes_or_no(ignore_mouse));*/ -  centre(10, 7,string("Default controller?")+two_answers("keyboard","joystick",use_keyboard)); -  centre(12, 7,string("Log to printer?")+yes_or_no(log_to_printer)); -  centre(13, 7,string("Log to file?")+yes_or_no(log_to_file)); -  centre(14, 7,string("Filename to log to?")+give_name(log_filename)); - -  centre(15,15,"Return to main menu."); - -  switch (choose_one_of(set::of(5,6,7,8,/*9,*/10,12,13,14,15, eos))) { -    case 5: override_ega=! override_ega; break; -    case 6: skip_loading_screens=! skip_loading_screens; break; -    case 7: get_str(load_particular); break; -    case 8: force_numlock=! force_numlock; break; -/*    9: ignore_mouse:=not ignore_mouse;*/ -   case 10: use_keyboard=! use_keyboard; break; -   case 12: { -        log_to_printer=! log_to_printer; -        if (log_to_file && log_to_printer)  log_to_file=false; -       } -       break; -   case 13: { -        log_to_file=! log_to_file; -        if (log_to_file && log_to_printer)  log_to_printer=false; -       } -       break; -   case 14: get_str(log_filename); break; -   case 15: { new_menu(); return; } break; -  } - - } while (!false); +void general_menu() { +	new_menu(); +	do { +		clear_to(blue); + +		centre(3, 15, "General Menu"); + +		centre(5, 7, string("Override EGA check?") + yes_or_no(override_ega)); +		centre(6, 7, string("Skip loading screens?") + yes_or_no(skip_loading_screens)); +		centre(7, 7, string("Load a particular file by default?") + give_name(load_particular)); +		centre(8, 7, string("Force NumLock off?") + yes_or_no(force_numlock)); +		/*  centre( 9, 7,'Ignore the mouse?'+yes_or_no(ignore_mouse));*/ +		centre(10, 7, string("Default controller?") + two_answers("keyboard", "joystick", use_keyboard)); +		centre(12, 7, string("Log to printer?") + yes_or_no(log_to_printer)); +		centre(13, 7, string("Log to file?") + yes_or_no(log_to_file)); +		centre(14, 7, string("Filename to log to?") + give_name(log_filename)); + +		centre(15, 15, "Return to main menu."); + +		switch (choose_one_of(set::of(5, 6, 7, 8,/*9,*/10, 12, 13, 14, 15, eos))) { +		case 5: +			override_ega = ! override_ega; +			break; +		case 6: +			skip_loading_screens = ! skip_loading_screens; +			break; +		case 7: +			get_str(load_particular); +			break; +		case 8: +			force_numlock = ! force_numlock; +			break; +			/*    9: ignore_mouse:=not ignore_mouse;*/ +		case 10: +			use_keyboard = ! use_keyboard; +			break; +		case 12: { +			log_to_printer = ! log_to_printer; +			if (log_to_file && log_to_printer)  log_to_file = false; +		} +		break; +		case 13: { +			log_to_file = ! log_to_file; +			if (log_to_file && log_to_printer)  log_to_printer = false; +		} +		break; +		case 14: +			get_str(log_filename); +			break; +		case 15: { +			new_menu(); +			return; +		} +		break; +		} + +	} while (!false);  } -void joystick_menu() -{ - new_menu(); - do { -  clear_to(green); - -  centre(3,15,"Joystick Menu"); - -  centre(5,14,string("Do you have a joystick?")+yes_or_no(has_a_joystick)); -  centre(6,14,string("Which joystick to use? ")+chr(whichjoy+48)); -  centre(7,14,"Select this one to set it up."); - -  centre(15,15,"Return to main menu"); - -  switch (choose_one_of(set::of(5,6,7,15, eos))) { -    case 5: { -        has_a_joystick=! has_a_joystick; -        if (! has_a_joystick)  -         { jleft=0; jright=0; jtop=0; jbottom=0; } -       } -       break; -    case 6: whichjoy=3-whichjoy; break; /* Flips between 2 and 1. */ -    case 7: joysetup(); break; -   case 15: { new_menu(); return; } break; -  } - - } while (!false); +void joystick_menu() { +	new_menu(); +	do { +		clear_to(green); + +		centre(3, 15, "Joystick Menu"); + +		centre(5, 14, string("Do you have a joystick?") + yes_or_no(has_a_joystick)); +		centre(6, 14, string("Which joystick to use? ") + chr(whichjoy + 48)); +		centre(7, 14, "Select this one to set it up."); + +		centre(15, 15, "Return to main menu"); + +		switch (choose_one_of(set::of(5, 6, 7, 15, eos))) { +		case 5: { +			has_a_joystick = ! has_a_joystick; +			if (! has_a_joystick) { +				jleft = 0; +				jright = 0; +				jtop = 0; +				jbottom = 0; +			} +		} +		break; +		case 6: +			whichjoy = 3 - whichjoy; +			break; /* Flips between 2 and 1. */ +		case 7: +			joysetup(); +			break; +		case 15: { +			new_menu(); +			return; +		} +		break; +		} + +	} while (!false);  } -void cycle(byte& what, byte upper_limit) -{ - if (what==upper_limit)  -  what=0; - else -  what += 1; +void cycle(byte &what, byte upper_limit) { +	if (what == upper_limit) +		what = 0; +	else +		what += 1;  } -void sound_menu() -{ - new_menu(); - do { -  clear_to(cyan); - -  centre(3, 0,"Sound menu"); - -  centre(5, 0,string("Do you want to suppress sound effects?")+yes_or_no(suppress_sfx)); -  centre(6, 0,string("Sound output device\? (")+sound_card(your_card)+')'); -  centre(7, 0,string("Sampling rate\? (")+strf(samplerate)+"Hz)"); -  centre(8, 0,string("Base address\? (")+strhf(sound_addr)+" *hex*)"); -  centre(9, 0,string("IRQ\? (")+strf(sound_irq)+')'); -  centre(10,0,string("DMA\? (")+strf(sound_dma)+')'); -  centre(11,0,string("Do you want keyclick?")+yes_or_no(wants_keyclick)); - -  centre(15,15,"Return to main menu"); - -  centre(17,1,"WARNING: Incorrect values of IRQ and DMA may damage your computer!"); -  centre(18,1,"Read AVALOT.INI for the correct values."); - -  switch (choose_one_of(set::of(5,6,7,8,9,10,11,15, eos))) { -    case 5: suppress_sfx=! suppress_sfx; break; -    case 6: cycle(your_card,13); break; -    case 7: get_num(samplerate); break; -    case 8: get_num(sound_addr); break; -    case 9: get_num(sound_irq); break; -   case 10: get_num(sound_dma); break; -   case 11: wants_keyclick=! wants_keyclick; break; -   case 15: { new_menu(); return; } break; -  } - - } while (!false); +void sound_menu() { +	new_menu(); +	do { +		clear_to(cyan); + +		centre(3, 0, "Sound menu"); + +		centre(5, 0, string("Do you want to suppress sound effects?") + yes_or_no(suppress_sfx)); +		centre(6, 0, string("Sound output device\? (") + sound_card(your_card) + ')'); +		centre(7, 0, string("Sampling rate\? (") + strf(samplerate) + "Hz)"); +		centre(8, 0, string("Base address\? (") + strhf(sound_addr) + " *hex*)"); +		centre(9, 0, string("IRQ\? (") + strf(sound_irq) + ')'); +		centre(10, 0, string("DMA\? (") + strf(sound_dma) + ')'); +		centre(11, 0, string("Do you want keyclick?") + yes_or_no(wants_keyclick)); + +		centre(15, 15, "Return to main menu"); + +		centre(17, 1, "WARNING: Incorrect values of IRQ and DMA may damage your computer!"); +		centre(18, 1, "Read AVALOT.INI for the correct values."); + +		switch (choose_one_of(set::of(5, 6, 7, 8, 9, 10, 11, 15, eos))) { +		case 5: +			suppress_sfx = ! suppress_sfx; +			break; +		case 6: +			cycle(your_card, 13); +			break; +		case 7: +			get_num(samplerate); +			break; +		case 8: +			get_num(sound_addr); +			break; +		case 9: +			get_num(sound_irq); +			break; +		case 10: +			get_num(sound_dma); +			break; +		case 11: +			wants_keyclick = ! wants_keyclick; +			break; +		case 15: { +			new_menu(); +			return; +		} +		break; +		} + +	} while (!false);  } -void printer_menu() -{ - byte fv; - byteset chooseable_lines; +void printer_menu() { +	byte fv; +	byteset chooseable_lines; - new_menu(); +	new_menu(); - chooseable_lines=set::of(15, eos); - for( fv=1; fv <= num_printers; fv ++) -  chooseable_lines=chooseable_lines+set::of(fv+8, eos); +	chooseable_lines = set::of(15, eos); +	for (fv = 1; fv <= num_printers; fv ++) +		chooseable_lines = chooseable_lines + set::of(fv + 8, eos); - do { -  clear_to(red); +	do { +		clear_to(red); -  centre(3,15,"Printer menu"); +		centre(3, 15, "Printer menu"); -  centre(5,15,"Select one of the following printers:"); -  centre(6,15,string("The current choice is ")+this_printer+'.'); +		centre(5, 15, "Select one of the following printers:"); +		centre(6, 15, string("The current choice is ") + this_printer + '.'); -  for( fv=1; fv <= num_printers; fv ++) -   centre(8+fv,14,printers[fv]); +		for (fv = 1; fv <= num_printers; fv ++) +			centre(8 + fv, 14, printers[fv]); -  centre(15,15,"Return to main menu"); +		centre(15, 15, "Return to main menu"); -  fv=choose_one_of(chooseable_lines); +		fv = choose_one_of(chooseable_lines); -  if (fv==15)  { new_menu(); return; } +		if (fv == 15)  { +			new_menu(); +			return; +		} -  this_printer=printers[fv-8]; +		this_printer = printers[fv - 8]; - } while (!false); +	} while (!false);  } -void regi_split(string x) -{ -    byte fv; +void regi_split(string x) { +	byte fv; - regname[0]=chr(107-ord(x[1])); chkname[0]=regname[0]; - regnum[0]=chr(107-ord(x[2]));   chknum[0]=chknum[0]; +	regname[0] = chr(107 - ord(x[1])); +	chkname[0] = regname[0]; +	regnum[0] = chr(107 - ord(x[2])); +	chknum[0] = chknum[0]; - move(x[3],regname[1],ord(regname[0])); -  for( fv=1; fv <= length(regname); fv ++) -   regname[fv]=chr(abs(((ord(regname[fv])-33)-177*fv) % 94)+33); +	move(x[3], regname[1], ord(regname[0])); +	for (fv = 1; fv <= length(regname); fv ++) +		regname[fv] = chr(abs(((ord(regname[fv]) - 33) - 177 * fv) % 94) + 33);  } -void registration_menu() -{ - char r; - text t,o; - string x; - byte fv; - - clear_to(black); - - centre(3,15,"REGISTRATION"); - centre(5,14,"Please insert the disk you were sent when you registered"); - centre(6,14,"into any drive, and press its letter. For example, if the"); - centre(7,14,"disk is in drive A:, press A."); - centre(9,14,"Press Esc to cancel this menu."); - - do { r=upcase(readkey()); } while (!(set::of('\33',range('A','Z'), eos).has(r))); if (r=='\33')  return; - - /*$I-*/ - assign(t,string(r)+":\\REGISTER.DAT"); - reset(t); - /*$I+*/ - if (ioresult!=0)  - { -   centre(17,15,"But it isn't in that drive..."); -   centre(19,15,"Press any key."); -   r=readkey(); -   return; - } - for( fv=1; fv <= 54; fv ++) t >> x >> NL; - regi_split(x); - - /* Copy the file... */ - - assign(o,"register.dat"); rewrite(o); reset(t); - - while (! eof(t))  - { -   t >> x >> NL; o << x << NL; - } - close(t); close(o); - - centre(17,15,"Done! Press any key..."); - bottom_bar(); - r=readkey(); +void registration_menu() { +	char r; +	text t, o; +	string x; +	byte fv; + +	clear_to(black); + +	centre(3, 15, "REGISTRATION"); +	centre(5, 14, "Please insert the disk you were sent when you registered"); +	centre(6, 14, "into any drive, and press its letter. For example, if the"); +	centre(7, 14, "disk is in drive A:, press A."); +	centre(9, 14, "Press Esc to cancel this menu."); + +	do { +		r = upcase(readkey()); +	} while (!(set::of('\33', range('A', 'Z'), eos).has(r))); +	if (r == '\33')  return; + +	/*$I-*/ +	assign(t, string(r) + ":\\REGISTER.DAT"); +	reset(t); +	/*$I+*/ +	if (ioresult != 0) { +		centre(17, 15, "But it isn't in that drive..."); +		centre(19, 15, "Press any key."); +		r = readkey(); +		return; +	} +	for (fv = 1; fv <= 54; fv ++) t >> x >> NL; +	regi_split(x); + +	/* Copy the file... */ + +	assign(o, "register.dat"); +	rewrite(o); +	reset(t); + +	while (! eof(t)) { +		t >> x >> NL; +		o << x << NL; +	} +	close(t); +	close(o); + +	centre(17, 15, "Done! Press any key..."); +	bottom_bar(); +	r = readkey();  } -void menu() -{ - bottom_bar(); - new_menu(); - do { -  clear_to(black); - -  centre(3,15,"Avalot Setup - Main Menu"); - -  centre(5, 9,"General setup"); -  centre(6,10,"Joystick setup"); -  centre(7,11,"Sound setup"); -  centre(8,12,"Printer setup"); -  centre(9,14,"REGISTRATION setup"); - -  centre(15,15,"--- EXIT SETUP ---"); - -  switch (choose_one_of(set::of(5,6,7,8,9,15, eos))) { -    case 5: general_menu(); break; -    case 6: joystick_menu(); break; -    case 7: sound_menu(); break; -    case 8: printer_menu(); break; -    case 9: registration_menu(); break; -   case 15: { -        new_menu(); -        clear_to(lightgray); -        centre(3,0,"Quit: would you like to save changes?"); -        centre(5,1,"Quit and SAVE changes."); -        centre(6,1,"Quit and DON'T save changes."); -        centre(15,0,"Cancel and return to the main menu."); -        switch (choose_one_of(set::of(5,6,15, eos))) { -         case 5: { -             save_file(); -             return; -            } -            break; -         case 6: return; break; -        } -        new_menu(); -       } -       break; -  } - - } while (!false); +void menu() { +	bottom_bar(); +	new_menu(); +	do { +		clear_to(black); + +		centre(3, 15, "Avalot Setup - Main Menu"); + +		centre(5, 9, "General setup"); +		centre(6, 10, "Joystick setup"); +		centre(7, 11, "Sound setup"); +		centre(8, 12, "Printer setup"); +		centre(9, 14, "REGISTRATION setup"); + +		centre(15, 15, "--- EXIT SETUP ---"); + +		switch (choose_one_of(set::of(5, 6, 7, 8, 9, 15, eos))) { +		case 5: +			general_menu(); +			break; +		case 6: +			joystick_menu(); +			break; +		case 7: +			sound_menu(); +			break; +		case 8: +			printer_menu(); +			break; +		case 9: +			registration_menu(); +			break; +		case 15: { +			new_menu(); +			clear_to(lightgray); +			centre(3, 0, "Quit: would you like to save changes?"); +			centre(5, 1, "Quit and SAVE changes."); +			centre(6, 1, "Quit and DON'T save changes."); +			centre(15, 0, "Cancel and return to the main menu."); +			switch (choose_one_of(set::of(5, 6, 15, eos))) { +			case 5: { +				save_file(); +				return; +			} +			break; +			case 6: +				return; +				break; +			} +			new_menu(); +		} +		break; +		} + +	} while (!false);  } -void defaults()     /* Sets everything to its default value. */ -{ -   /* general */ +void defaults() {   /* Sets everything to its default value. */ +	/* general */ - override_ega=false; - skip_loading_screens=false; - load_particular=""; - force_numlock=true; - ignore_mouse=false; - use_keyboard=true; - log_to_printer=false; - log_to_file=false; - log_filename="avalot.log"; +	override_ega = false; +	skip_loading_screens = false; +	load_particular = ""; +	force_numlock = true; +	ignore_mouse = false; +	use_keyboard = true; +	log_to_printer = false; +	log_to_file = false; +	log_filename = "avalot.log"; -   /* joystick */ +	/* joystick */ - has_a_joystick=false; - /* jtop,jbottom,jleft,jright,jmidx,jmidy need no initialisation. */ +	has_a_joystick = false; +	/* jtop,jbottom,jleft,jright,jmidx,jmidy need no initialisation. */ -   /* sound */ +	/* sound */ - suppress_sfx=false; - your_card=0;  /* none */ - wants_keyclick=false; +	suppress_sfx = false; +	your_card = 0; /* none */ +	wants_keyclick = false; - /* other stuff */ +	/* other stuff */ - registrant=""; +	registrant = ""; - num_printers=0; this_printer="??"; +	num_printers = 0; +	this_printer = "??";  }  void parse_file(); @@ -1053,243 +1186,256 @@ const integer parse_weird_logcode = 5;  const integer parse_weird_card = 6; -static varying_string<80> this_,thiswas; - -static boolean error_found,ignoring; - - -static void error(byte what) -{ - textattr=15; - if (! error_found)  - { -  clrscr; textattr=12; -  output << "SETUP: *** ERROR FOUND IN AVALOT.INI! ***" << NL; textattr=15; - } - output << ' '; - switch (what) { -  case parse_weird_field: output << "Unknown identifier on the left"; break; -  case parse_not_yes_or_no: output << "Value on the right should be Yes or No"; break; -  case parse_not_numeric: output << "Value on the right is not numeric"; break; -  case parse_not_kbd_or_joy: output << "Value on the right should be Keyboard or Joystick"; break; -  case parse_weird_logcode: output << "Value on the right should be No, Printer or Disk"; break; -  case parse_weird_card: output << "Never heard of the card"; break; - } - output << " in:" << NL; textattr=10; output << thiswas << NL; - error_found=true; +static varying_string<80> this_, thiswas; + +static boolean error_found, ignoring; + + +static void error(byte what) { +	textattr = 15; +	if (! error_found) { +		clrscr; +		textattr = 12; +		output << "SETUP: *** ERROR FOUND IN AVALOT.INI! ***" << NL; +		textattr = 15; +	} +	output << ' '; +	switch (what) { +	case parse_weird_field: +		output << "Unknown identifier on the left"; +		break; +	case parse_not_yes_or_no: +		output << "Value on the right should be Yes or No"; +		break; +	case parse_not_numeric: +		output << "Value on the right is not numeric"; +		break; +	case parse_not_kbd_or_joy: +		output << "Value on the right should be Keyboard or Joystick"; +		break; +	case parse_weird_logcode: +		output << "Value on the right should be No, Printer or Disk"; +		break; +	case parse_weird_card: +		output << "Never heard of the card"; +		break; +	} +	output << " in:" << NL; +	textattr = 10; +	output << thiswas << NL; +	error_found = true;  } -static boolean yesno(string x) -{ - boolean yesno_result; - if (x=="YES")  -  yesno_result=true; - else if (x=="NO")  -  yesno_result=false; - else - { -  error(parse_not_yes_or_no); -  yesno_result=false; - } - return yesno_result; +static boolean yesno(string x) { +	boolean yesno_result; +	if (x == "YES") +		yesno_result = true; +	else if (x == "NO") +		yesno_result = false; +	else { +		error(parse_not_yes_or_no); +		yesno_result = false; +	} +	return yesno_result;  } -static boolean kbdjoy(string x) -{ - boolean kbdjoy_result; - if (x=="KEYBOARD")  -  kbdjoy_result=true; - else if (x=="JOYSTICK")  -  kbdjoy_result=false; - else - { -  error(parse_not_kbd_or_joy); -  kbdjoy_result=false; - } - return kbdjoy_result; +static boolean kbdjoy(string x) { +	boolean kbdjoy_result; +	if (x == "KEYBOARD") +		kbdjoy_result = true; +	else if (x == "JOYSTICK") +		kbdjoy_result = false; +	else { +		error(parse_not_kbd_or_joy); +		kbdjoy_result = false; +	} +	return kbdjoy_result;  } -static word numeric(string x) -{ -      const varying_string<15> hexdigits = "0123456789ABCDEF"; -    word answer; integer e; - -   word numeric_result; -   if (x[1]=='$')  -   { -      answer=0; -      for( e=2; e <= length(x); e ++) -      { -         answer=answer << 4; -         answer += pos(upcase(x[e]),hexdigits)-1; -      } -   } else -   { -      val(x,answer,e); -      if (e!=0)  error(parse_not_numeric); -   } - numeric_result=answer; -   return numeric_result; +static word numeric(string x) { +	const varying_string<15> hexdigits = "0123456789ABCDEF"; +	word answer; +	integer e; + +	word numeric_result; +	if (x[1] == '$') { +		answer = 0; +		for (e = 2; e <= length(x); e ++) { +			answer = answer << 4; +			answer += pos(upcase(x[e]), hexdigits) - 1; +		} +	} else { +		val(x, answer, e); +		if (e != 0)  error(parse_not_numeric); +	} +	numeric_result = answer; +	return numeric_result;  } -static void get_logcodes(string x) -{ - if (x=="NO")  { log_to_file=false; log_to_printer=false; } else - if (x=="DISK")  { log_to_file=true; log_to_printer=false; } else - if (x=="PRINTER")  { log_to_file=false; log_to_printer=true; } else -  error(parse_weird_logcode); +static void get_logcodes(string x) { +	if (x == "NO")  { +		log_to_file = false; +		log_to_printer = false; +	} else if (x == "DISK")  { +		log_to_file = true; +		log_to_printer = false; +	} else if (x == "PRINTER")  { +		log_to_file = false; +		log_to_printer = true; +	} else +		error(parse_weird_logcode);  } -static void get_card(string x) -{ - if (x=="NONE")  your_card=0; else - if (x=="SB")  your_card=1; else - if (x=="SBPRO")  your_card=2; else - if (x=="SB16")  your_card=3; else - if (x=="PAS")  your_card=4; else - if (x=="PASPLUS")  your_card=5; else - if (x=="PAS16")  your_card=6; else - if (x=="ARIA")  your_card=7; else - if (x=="WINSOUND")  your_card=8; else - if (x=="GRAVIS")  your_card=9; else - if (x=="DACLPT")  your_card=10; else - if (x=="STEREODACS")  your_card=11; else - if (x=="STEREOON1")  your_card=12; else - if (x=="SPEAKER")  your_card=13; else -  error(parse_weird_card); +static void get_card(string x) { +	if (x == "NONE")  your_card = 0; +	else if (x == "SB")  your_card = 1; +	else if (x == "SBPRO")  your_card = 2; +	else if (x == "SB16")  your_card = 3; +	else if (x == "PAS")  your_card = 4; +	else if (x == "PASPLUS")  your_card = 5; +	else if (x == "PAS16")  your_card = 6; +	else if (x == "ARIA")  your_card = 7; +	else if (x == "WINSOUND")  your_card = 8; +	else if (x == "GRAVIS")  your_card = 9; +	else if (x == "DACLPT")  your_card = 10; +	else if (x == "STEREODACS")  your_card = 11; +	else if (x == "STEREOON1")  your_card = 12; +	else if (x == "SPEAKER")  your_card = 13; +	else +		error(parse_weird_card);  } -void parse_file(){ +void parse_file() { - word where; - byte position; - varying_string<80> field,data,pure_data; - option o; +	word where; +	byte position; +	varying_string<80> field, data, pure_data; +	option o; - error_found=false; - ignoring=false; +	error_found = false; +	ignoring = false; - for( where=1; where <= mobylength; where ++) - { -  this_=(*moby)[where]; thiswas=this_; +	for (where = 1; where <= mobylength; where ++) { +		this_ = (*moby)[where]; +		thiswas = this_; -  position=pos(";",this_); -  if (position>0)  this_=copy(this_,1,position-1); +		position = pos(";", this_); +		if (position > 0)  this_ = copy(this_, 1, position - 1); -  if (this_=="")  continue_; /* Don't carry on if by now it's empty. */ +		if (this_ == "")  continue_; /* Don't carry on if by now it's empty. */ -  if (this_[1]=='[')  -  { -   ignoring=! (trim_and_caps(this_)=="[END]"); +		if (this_[1] == '[') { +			ignoring = !(trim_and_caps(this_) == "[END]"); -   if (copy(this_,1,8)=="[printer")  -   { -    num_printers += 1; -    printers[num_printers]=copy(this_,10,length(this_)-10); -   } -  } +			if (copy(this_, 1, 8) == "[printer") { +				num_printers += 1; +				printers[num_printers] = copy(this_, 10, length(this_) - 10); +			} +		} -  if (ignoring)  continue_; +		if (ignoring)  continue_; -  position=pos("=",this_); -  field=trim_and_caps(copy(this_,1,position-1));   if (field=="")  continue_; -  pure_data=copy(this_,position+1,255); -  data=trim_and_caps(pure_data); -  o=string_2_option(field); +		position = pos("=", this_); +		field = trim_and_caps(copy(this_, 1, position - 1)); +		if (field == "")  continue_; +		pure_data = copy(this_, position + 1, 255); +		data = trim_and_caps(pure_data); +		o = string_2_option(field); -       /* general */ +		/* general */ -  if (o==_overrideegacheck)  override_ega=yesno(data); else -  if (o==_zoomystart)  skip_loading_screens=yesno(data); else -  if (o==_loadfirst)  load_particular=data; else -  if (o==_numlockhold)  force_numlock=yesno(data); else -  if (o==_usemouse)  ignore_mouse=yesno(data); else -  if (o==_controller)  use_keyboard=kbdjoy(data); else -  if (o==_logging)  get_logcodes(data); else -  if (o==_logfile)  log_filename=data; else +		if (o == _overrideegacheck)  override_ega = yesno(data); +		else if (o == _zoomystart)  skip_loading_screens = yesno(data); +		else if (o == _loadfirst)  load_particular = data; +		else if (o == _numlockhold)  force_numlock = yesno(data); +		else if (o == _usemouse)  ignore_mouse = yesno(data); +		else if (o == _controller)  use_keyboard = kbdjoy(data); +		else if (o == _logging)  get_logcodes(data); +		else if (o == _logfile)  log_filename = data; +		else -   /* joystick */ +			/* joystick */ -  if (o==_joystickinstalled)  has_a_joystick=yesno(data); else -  if (o==_joytop)  jtop=numeric(data); else -  if (o==_joybottom)  jbottom=numeric(data); else -  if (o==_joyleft)  jleft=numeric(data); else -  if (o==_joyright)  jright=numeric(data); else -  if (o==_joymidx)  jmidx=numeric(data); else -  if (o==_joymidy)  jmidy=numeric(data); else -  if (o==_joycentringfactor)  jcentre=numeric(data); else -  if (o==_whichjoy)  whichjoy=numeric(data); else +			if (o == _joystickinstalled)  has_a_joystick = yesno(data); +			else if (o == _joytop)  jtop = numeric(data); +			else if (o == _joybottom)  jbottom = numeric(data); +			else if (o == _joyleft)  jleft = numeric(data); +			else if (o == _joyright)  jright = numeric(data); +			else if (o == _joymidx)  jmidx = numeric(data); +			else if (o == _joymidy)  jmidy = numeric(data); +			else if (o == _joycentringfactor)  jcentre = numeric(data); +			else if (o == _whichjoy)  whichjoy = numeric(data); +			else -   /* sound */ +				/* sound */ -  if (o==_quiet)  suppress_sfx=yesno(data); else -  if (o==_soundcard)  get_card(data); else -  if (o==_samplerate)  samplerate=numeric(data); else -  if (o==_baseaddress)  sound_addr=numeric(data); else -  if (o==_irq)  sound_irq=numeric(data); else -  if (o==_dma)  sound_dma=numeric(data); else -  if (o==_keyboardclick)  wants_keyclick=yesno(data); else +				if (o == _quiet)  suppress_sfx = yesno(data); +				else if (o == _soundcard)  get_card(data); +				else if (o == _samplerate)  samplerate = numeric(data); +				else if (o == _baseaddress)  sound_addr = numeric(data); +				else if (o == _irq)  sound_irq = numeric(data); +				else if (o == _dma)  sound_dma = numeric(data); +				else if (o == _keyboardclick)  wants_keyclick = yesno(data); +				else -   /* printer */ +					/* printer */ -  if (o==_printer)  this_printer=pure_data; else +					if (o == _printer)  this_printer = pure_data; +					else -   /* others */ +						/* others */ -   error(parse_weird_field); - } +						error(parse_weird_field); +	} - if (error_found)  - { -  textattr=15; -  output << " Try and fix the above errors. As a last resort, try deleting or" << NL; -  output << " renaming AVALOT.INI, and the default values will be used. Good luck." << NL; -  exit(177); - } -                 } +	if (error_found) { +		textattr = 15; +		output << " Try and fix the above errors. As a last resort, try deleting or" << NL; +		output << " renaming AVALOT.INI, and the default values will be used. Good luck." << NL; +		exit(177); +	} +} -void clear_up() -{ - window(1,1,80,25); - textattr=31; - clrscr; - output << NL; - output << "Enjoy the game..." << NL; - output << NL; - cga_cursor_on; +void clear_up() { +	window(1, 1, 80, 25); +	textattr = 31; +	clrscr; +	output << NL; +	output << "Enjoy the game..." << NL; +	output << NL; +	cga_cursor_on;  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - cursor_off; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	cursor_off; - moby = new mobytype; /* Allocate memory space */ +	moby = new mobytype; /* Allocate memory space */ - defaults(); +	defaults(); - load_file(); +	load_file(); - parse_file(); +	parse_file(); - menu(); +	menu(); - delete moby;   /* Deallocate memory space again */ +	delete moby;   /* Deallocate memory space again */ - clear_up(); - return EXIT_SUCCESS; +	clear_up(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/seu.cpp b/engines/avalanche/seu.cpp index 883a810cdb..8025b9a4c1 100644 --- a/engines/avalanche/seu.cpp +++ b/engines/avalanche/seu.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 @@ -45,7 +45,7 @@ const integer avvy_y = 150;  const integer left_margin = 10;  const integer right_margin = 605; -const array<0,6,byte> shooting = {{87,80,81,82,81,80,87}}; +const array<0, 6, byte> shooting = {{87, 80, 81, 82, 81, 80, 87}};  const integer stocks = 28; @@ -56,7 +56,7 @@ const integer maxrunners = 4;  const integer times_a_second = /*31*/18;  const integer flash_time = 20; /* If flash_time is <= this, the word "time" will flash. */ -                 /* Should be about 20. */ +/* Should be about 20. */  /*  --- Scores for various things ---  */ @@ -64,42 +64,43 @@ const integer score_for_hitting_face = 3;  const integer bonus_for_hitting_escaper = 5;  struct mtype { -         shortint ix,iy; -         integer x,y; -         byte p; -         integer timeout; -         boolean cameo; -         byte cameo_frame; -         boolean missile; -         boolean wipe; +	shortint ix, iy; +	integer x, y; +	byte p; +	integer timeout; +	boolean cameo; +	byte cameo_frame; +	boolean missile; +	boolean wipe;  };  struct xtype { -         word s; -         pointer p; +	word s; +	pointer p;  };  class rectype {  public: -           integer x1,y1,x2,y2; +	integer x1, y1, x2, y2;  };  class plottype : public rectype {  public: -            byte which; +	byte which;  };  class plotmasktype : public plottype {  public: -                byte whichmask; +	byte whichmask;  }; -array<1,100,xtype> x; -array<1,100,mtype> m; -matrix<0,1,1,100,rectype> r; -array<0,1,byte> rsize; +array<1, 100, xtype> x; +array<1, 100, mtype> m; +matrix<0, 1, 1, 100, rectype> r; +array<0, 1, byte> rsize;  byte cp; -word score; byte time1; +word score; +byte time1;  byte shiftstate;    /*ABSOLUTE $40:$17; */ @@ -116,15 +117,15 @@ byte throw_next;  boolean firing; -array<0,6,byte> stockstatus; +array<0, 6, byte> stockstatus; -array<1,maxrunners,struct A1 { -                        integer x,y; -                        byte frame; -                        byte toohigh,lowest; -                        shortint ix,iy; -                        byte framedelay; -                   }> running; +array < 1, maxrunners, struct A1 { +	integer x, y; +	byte frame; +	byte toohigh, lowest; +	shortint ix, iy; +	byte framedelay; +} > running;  varying_string<5> score_is;  varying_string<3> time_is; @@ -133,432 +134,418 @@ byte time_this_second;  word escape_count;  byte escape_stock; -boolean escaping,got_out; +boolean escaping, got_out; -array<0,6,boolean> has_escaped; +array<0, 6, boolean> has_escaped;  byte count321; -word storage_seg,storage_ofs; +word storage_seg, storage_ofs;  byte how_many_have_escaped; -void flippage() -{ - setactivepage(cp); - cp=1-cp; - setvisualpage(cp); +void flippage() { +	setactivepage(cp); +	cp = 1 - cp; +	setvisualpage(cp);  } -void flesh_colours() {;        /*assembler; +void flesh_colours() { +	;        /*assembler;  asm    mov ax,$1012;    mov bx,21;                 { 21 = light pink (why?) */ -  /*mov cx,1; -  mov dx,seg    @flesh; -  mov es,dx; -  mov dx,offset @flesh; -  int $10; +	/*mov cx,1; +	mov dx,seg    @flesh; +	mov es,dx; +	mov dx,offset @flesh; +	int $10; -  mov dx,seg    @darkflesh; -  mov es,dx; -  mov dx,offset @darkflesh; -  mov bx,5;                 { 5 = dark pink. */ -  /*int $10; - -  jmp @TheEnd; - - @flesh: -  db 56,35,35; - - @darkflesh: -  db 43,22,22; - - @TheEnd: */ -                     } - -boolean overlap(word a1x,word a1y,word a2x,word a2y,word b1x,word b1y,word b2x,word b2y) -{     /* By De Morgan's law: */ - boolean overlap_result; - overlap_result=(a2x>=b1x) && (b2x>=a1x) && (a2y>=b1y) && (b2y>=a1y); - return overlap_result; -} - -void getsize(byte w, integer& xx,integer& yy) -{ -    array<0,1,integer> n; - - move(x[w].p,n,4); - xx=n[0]; yy=n[1]; -} - -void display(integer xx,integer yy, byte w) -{ - putimage(xx,yy,x[w].p,0); -} - -byte get_stock_number(byte x) -{ - byte get_stock_number_result; - while (has_escaped[x])  - { -  x += 1; -  if (x==7)  x=0; - } - get_stock_number_result=x; - return get_stock_number_result; -} - -void cameo_display(integer xx,integer yy, byte w1,byte w2) -{ - putimage(xx,yy,x[w2].p,andput); - putimage(xx,yy,x[w1].p,xorput); -} - -void blankit() -{ -    byte fv; - - for( fv=1; fv <= rsize[cp]; fv ++) - { rectype& with = r[cp][fv];  -  bar(with.x1,with.y1,with.x2,with.y2);} - rsize[cp]=0; -} - -void blank(integer xx1,integer yy1,integer xx2,integer yy2) -{ - rsize[cp] += 1; - { -  rectype& with = r[cp][rsize[cp]];  - -  with.x1=xx1; -  with.y1=yy1; -  with.x2=xx2; -  with.y2=yy2; - } -} - -void movethem() -{ -    byte fv; - - for( fv=1; fv <= msize; fv ++) -  { mtype& with = m[fv];  -   if (with.x!=flag)  -   { -    with.x=with.x+with.ix; -    with.y=with.y+with.iy; -   }} -} - -void plotthem() -{ -    byte fv; integer xx,yy; - - for( fv=1; fv <= msize; fv ++) -  { mtype& with = m[fv];  -  if (with.x!=flag)  -   { -    if (with.cameo)  -    { -     cameo_display(with.x,with.y,with.p,with.cameo_frame); -     if (cp==0)  { with.cameo_frame += 2; with.p += 2; } -    } else display(with.x,with.y,with.p); -    getsize(with.p,xx,yy); -    if (with.wipe)  blank(with.x,with.y,with.x+xx,with.y+yy); -    if (with.timeout>0)  -    { -     with.timeout -= 1; -     if (with.timeout==0)  with.x=flag; -    } -   }} -} - -void define(integer xx,integer yy, byte pp, shortint ixx,shortint iyy, integer timetime, - boolean is_a_missile,boolean do_we_wipe) -{ -    byte which; - - for( which=1; which <= msize; which ++) -  { -   mtype& with = m[which];  - -   if (with.x==flag)  -   { -    with.x=xx; -    with.y=yy; -    with.p=pp; -    with.ix=ixx; -    with.iy=iyy; -    with.timeout=timetime; -    with.cameo=false; -    with.missile=is_a_missile; -    with.wipe=do_we_wipe; - -    return; -   } -  } -} - -void define_cameo(integer xx,integer yy, byte pp, integer timetime) -{ -    byte which; - - for( which=1; which <= msize; which ++) -  { -   mtype& with = m[which];  - -   if (with.x==flag)  -   { -    with.x=xx; -    with.y=yy; -    with.p=pp; -    with.ix=0; -    with.iy=0; -    with.timeout=timetime; -    with.cameo=true; -    with.cameo_frame=pp+1; -    with.missile=false; -    with.wipe=false; - -    return; -   } -  } -} - -void get_score() -{ -    byte fv; - - str(score,5,score_is); - for( fv=1; fv <= 5; fv ++) -  if (score_is[fv]==' ')  -   score_is[fv]='0'; -} - -void get_time1() -{ -    byte fv; - - str(time1,5,time_is); - for( fv=1; fv <= 3; fv ++) -  if (time_is[fv]==' ')  -   time_is[fv]='0'; -} - -void display_const(integer x,integer y, byte what) -{ -    byte page_; - - for( page_=0; page_ <= 1; page_ ++) - { -  setactivepage(page_); -  display(x,y,what); - } - setactivepage(1-cp); -} - -void show_stock(byte x) -{ - if (escaping && (x==escape_stock))  - { -  display_const(x*90+20,30,stocks+2); -  return; - } - if (stockstatus[x]>5)  return; - display_const(x*90+20,30,stocks+stockstatus[x]); - stockstatus[x]=1-stockstatus[x]; -} - -void show_score() -{ - byte fv; - varying_string<5> score_was; - - score_was=score_is; get_score(); - for( fv=1; fv <= 5; fv ++) -  if (score_was[fv]!=score_is[fv])  -   display_const(30+fv*10,0,ord(score_is[fv])-47); -} - -void show_time() -{ - byte fv; - varying_string<3> time_was; - - time_was=time_is; get_time1(); - for( fv=1; fv <= 3; fv ++) -  if (time_was[fv]!=time_is[fv])  -   display_const(130+fv*10,0,ord(time_is[fv])-47); +	mov dx,seg    @darkflesh; +	mov es,dx; +	mov dx,offset @darkflesh; +	mov bx,5;                 { 5 = dark pink. */ +	/*int $10; + +	jmp @TheEnd; + +	@flesh: +	db 56,35,35; + +	@darkflesh: +	db 43,22,22; + +	@TheEnd: */ +} + +boolean overlap(word a1x, word a1y, word a2x, word a2y, word b1x, word b1y, word b2x, word b2y) { +	/* By De Morgan's law: */ +	boolean overlap_result; +	overlap_result = (a2x >= b1x) && (b2x >= a1x) && (a2y >= b1y) && (b2y >= a1y); +	return overlap_result; +} + +void getsize(byte w, integer &xx, integer &yy) { +	array<0, 1, integer> n; + +	move(x[w].p, n, 4); +	xx = n[0]; +	yy = n[1]; +} + +void display(integer xx, integer yy, byte w) { +	putimage(xx, yy, x[w].p, 0); +} + +byte get_stock_number(byte x) { +	byte get_stock_number_result; +	while (has_escaped[x]) { +		x += 1; +		if (x == 7)  x = 0; +	} +	get_stock_number_result = x; +	return get_stock_number_result; +} + +void cameo_display(integer xx, integer yy, byte w1, byte w2) { +	putimage(xx, yy, x[w2].p, andput); +	putimage(xx, yy, x[w1].p, xorput); +} + +void blankit() { +	byte fv; + +	for (fv = 1; fv <= rsize[cp]; fv ++) { +		rectype &with = r[cp][fv]; +		bar(with.x1, with.y1, with.x2, with.y2); +	} +	rsize[cp] = 0; +} + +void blank(integer xx1, integer yy1, integer xx2, integer yy2) { +	rsize[cp] += 1; +	{ +		rectype &with = r[cp][rsize[cp]]; + +		with.x1 = xx1; +		with.y1 = yy1; +		with.x2 = xx2; +		with.y2 = yy2; +	} +} + +void movethem() { +	byte fv; + +	for (fv = 1; fv <= msize; fv ++) { +		mtype &with = m[fv]; +		if (with.x != flag) { +			with.x = with.x + with.ix; +			with.y = with.y + with.iy; +		} +	} +} + +void plotthem() { +	byte fv; +	integer xx, yy; + +	for (fv = 1; fv <= msize; fv ++) { +		mtype &with = m[fv]; +		if (with.x != flag) { +			if (with.cameo) { +				cameo_display(with.x, with.y, with.p, with.cameo_frame); +				if (cp == 0)  { +					with.cameo_frame += 2; +					with.p += 2; +				} +			} else display(with.x, with.y, with.p); +			getsize(with.p, xx, yy); +			if (with.wipe)  blank(with.x, with.y, with.x + xx, with.y + yy); +			if (with.timeout > 0) { +				with.timeout -= 1; +				if (with.timeout == 0)  with.x = flag; +			} +		} +	}  } -void gain(shortint howmuch) -{ - if (-howmuch>score)  score=0; else -  score=score+howmuch; - show_score(); +void define(integer xx, integer yy, byte pp, shortint ixx, shortint iyy, integer timetime, +            boolean is_a_missile, boolean do_we_wipe) { +	byte which; + +	for (which = 1; which <= msize; which ++) { +		mtype &with = m[which]; + +		if (with.x == flag) { +			with.x = xx; +			with.y = yy; +			with.p = pp; +			with.ix = ixx; +			with.iy = iyy; +			with.timeout = timetime; +			with.cameo = false; +			with.missile = is_a_missile; +			with.wipe = do_we_wipe; + +			return; +		} +	} +} + +void define_cameo(integer xx, integer yy, byte pp, integer timetime) { +	byte which; + +	for (which = 1; which <= msize; which ++) { +		mtype &with = m[which]; + +		if (with.x == flag) { +			with.x = xx; +			with.y = yy; +			with.p = pp; +			with.ix = 0; +			with.iy = 0; +			with.timeout = timetime; +			with.cameo = true; +			with.cameo_frame = pp + 1; +			with.missile = false; +			with.wipe = false; + +			return; +		} +	} +} + +void get_score() { +	byte fv; + +	str(score, 5, score_is); +	for (fv = 1; fv <= 5; fv ++) +		if (score_is[fv] == ' ') +			score_is[fv] = '0'; +} + +void get_time1() { +	byte fv; + +	str(time1, 5, time_is); +	for (fv = 1; fv <= 3; fv ++) +		if (time_is[fv] == ' ') +			time_is[fv] = '0';  } -void new_escape() -{ - escape_count=Random(18)*20; - escaping=false; +void display_const(integer x, integer y, byte what) { +	byte page_; + +	for (page_ = 0; page_ <= 1; page_ ++) { +		setactivepage(page_); +		display(x, y, what); +	} +	setactivepage(1 - cp); +} + +void show_stock(byte x) { +	if (escaping && (x == escape_stock)) { +		display_const(x * 90 + 20, 30, stocks + 2); +		return; +	} +	if (stockstatus[x] > 5)  return; +	display_const(x * 90 + 20, 30, stocks + stockstatus[x]); +	stockstatus[x] = 1 - stockstatus[x]; +} + +void show_score() { +	byte fv; +	varying_string<5> score_was; + +	score_was = score_is; +	get_score(); +	for (fv = 1; fv <= 5; fv ++) +		if (score_was[fv] != score_is[fv]) +			display_const(30 + fv * 10, 0, ord(score_is[fv]) - 47); +} + +void show_time() { +	byte fv; +	varying_string<3> time_was; + +	time_was = time_is; +	get_time1(); +	for (fv = 1; fv <= 3; fv ++) +		if (time_was[fv] != time_is[fv]) +			display_const(130 + fv * 10, 0, ord(time_is[fv]) - 47); +} + +void gain(shortint howmuch) { +	if (-howmuch > score)  score = 0; +	else +		score = score + howmuch; +	show_score(); +} + +void new_escape() { +	escape_count = Random(18) * 20; +	escaping = false;  }  void instructions(); -static void nextpage() -{ -    char c; - - outtextxy(400,190,"Press a key for next page >"); - c=readkey(); - cleardevice(); -} - -void instructions() -{ - display(25,25,facing_right); - outtextxy(60,35,"< Avvy, our hero, needs your help - you must move him around."); - outtextxy(80,45,"(He's too terrified to move himself!)"); - - outtextxy(0,75,"Your task is to prevent the people in the stocks from escaping"); - outtextxy(0,85,"by pelting them with rotten fruit, eggs and bread. The keys are:"); -  outtextxy(80,115,"LEFT SHIFT"); outtextxy(200,115,"Move left."); - outtextxy(72,135,"RIGHT SHIFT"); outtextxy(200,135,"Move right."); -        outtextxy(136,155,"ALT"); outtextxy(200,155,"Throw something."); - nextpage(); - - display(25,35,stocks); - outtextxy(80,35,"This man is in the stocks. Your job is to stop him getting out."); - outtextxy(88,45,"UNFORTUNATELY... the locks on the stocks are loose, and every"); - outtextxy(88,55,"so often, someone will discover this and try to get out."); - display(25, 85,stocks+2); - outtextxy(80, 85,"< Someone who has found a way out!"); - outtextxy(88, 95,"You MUST IMMEDIATELY hit people smiling like this, or they"); - outtextxy(88,105,"will disappear and lose you points."); - display(25,125,stocks+5); - display(25,155,stocks+4); - outtextxy(80,125,"< Oh dear!"); - nextpage(); - - outtextxy(0,35,"Your task is made harder by:"); - display(25,55,48); - outtextxy(60,55,"< Yokels. These people will run in front of you. If you hit"); - outtextxy(68,65,"them, you will lose MORE points than you get hitting people"); - outtextxy(68,75,"in the stocks. So BEWARE!"); - outtextxy(80,125,"Good luck with the game!"); - nextpage(); -} - -void setup() -{ - integer gd,gm; - untyped_file f; - char rkv; - - rkv=upcase(readkey()); - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - flesh_colours(); - - assign(f,"notts.avd"); - reset(f,1); gd=1; - score=0; time1=120; score_is="(c)94"; - time_this_second=0; - - while (! eof(f))  -  { -   xtype& with = x[gd];  - -   blockread(f,with.s,2); -   getmem(with.p,with.s); -   blockread(f,with.p,with.s); -   gd += 1; -  } - close(f); - - if ((rkv=='I') || ((rkv=='\0') && (readkey()==cf1)))  instructions(); - - for( gd=0; gd <= 6; gd ++) - { -  stockstatus[gd]=Random(2); -  show_stock(gd); - } - - fillchar(m,sizeof(m),'\261'); - setfillstyle(1,0); - cp=0; - flippage(); - fillchar(rsize,sizeof(rsize),'\0'); - avvywas=320; - avvypos=320; - avvyanim=1; - avvyfacing=facing_left; - - alt_was_pressed_before=false; - throw_next=74; - firing=false; - - for( gd=1; gd <= maxrunners; gd ++) -  { -   A1& with = running[gd];  - -   with.x=flag; -  } - - new_escape(); - fillchar(has_escaped,sizeof(has_escaped),'\0'); /* All false. */ - count321=255;  /* Counting down. */ - - /* Set up status line. */ - - display_const(0,0,17); /* Score: */ - show_score();            /* value of score (00000 here) */ - display_const(110,0,20); /* Time: */ - show_time();            /* value of time */ - - Randomize(); - - how_many_have_escaped=0; -} - -void init_runner(integer xx,integer yy, byte f1,byte f2, shortint ixx,shortint iyy) -{ -    byte fv; - - for( fv=1; fv <= maxrunners; fv ++) -  { A1& with = running[fv];  -   if (with.x==flag)  -   { -    with.x=xx; with.y=yy; -    with.frame=f1; -    with.toohigh=f2; -    with.lowest=f1; -    with.ix=ixx; with.iy=iyy; -    if ((with.ix==0) && (with.iy==0))  with.ix=2; /* To stop them running on the spot! */ -    with.framedelay=framedelaymax; -    return; -   }} -} - -void titles() -{ - registers r; - byte a; /*absolute $A000:0; */ - untyped_file f; - byte bit; - - r.ax=0xd; - intr(0x10,r); - - assign(f,"shoot1.avd"); - reset(f,1); - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a,8000); - } - close(f); +static void nextpage() { +	char c; + +	outtextxy(400, 190, "Press a key for next page >"); +	c = readkey(); +	cleardevice(); +} + +void instructions() { +	display(25, 25, facing_right); +	outtextxy(60, 35, "< Avvy, our hero, needs your help - you must move him around."); +	outtextxy(80, 45, "(He's too terrified to move himself!)"); + +	outtextxy(0, 75, "Your task is to prevent the people in the stocks from escaping"); +	outtextxy(0, 85, "by pelting them with rotten fruit, eggs and bread. The keys are:"); +	outtextxy(80, 115, "LEFT SHIFT"); +	outtextxy(200, 115, "Move left."); +	outtextxy(72, 135, "RIGHT SHIFT"); +	outtextxy(200, 135, "Move right."); +	outtextxy(136, 155, "ALT"); +	outtextxy(200, 155, "Throw something."); +	nextpage(); + +	display(25, 35, stocks); +	outtextxy(80, 35, "This man is in the stocks. Your job is to stop him getting out."); +	outtextxy(88, 45, "UNFORTUNATELY... the locks on the stocks are loose, and every"); +	outtextxy(88, 55, "so often, someone will discover this and try to get out."); +	display(25, 85, stocks + 2); +	outtextxy(80, 85, "< Someone who has found a way out!"); +	outtextxy(88, 95, "You MUST IMMEDIATELY hit people smiling like this, or they"); +	outtextxy(88, 105, "will disappear and lose you points."); +	display(25, 125, stocks + 5); +	display(25, 155, stocks + 4); +	outtextxy(80, 125, "< Oh dear!"); +	nextpage(); + +	outtextxy(0, 35, "Your task is made harder by:"); +	display(25, 55, 48); +	outtextxy(60, 55, "< Yokels. These people will run in front of you. If you hit"); +	outtextxy(68, 65, "them, you will lose MORE points than you get hitting people"); +	outtextxy(68, 75, "in the stocks. So BEWARE!"); +	outtextxy(80, 125, "Good luck with the game!"); +	nextpage(); +} + +void setup() { +	integer gd, gm; +	untyped_file f; +	char rkv; + +	rkv = upcase(readkey()); +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	flesh_colours(); + +	assign(f, "notts.avd"); +	reset(f, 1); +	gd = 1; +	score = 0; +	time1 = 120; +	score_is = "(c)94"; +	time_this_second = 0; + +	while (! eof(f)) { +		xtype &with = x[gd]; + +		blockread(f, with.s, 2); +		getmem(with.p, with.s); +		blockread(f, with.p, with.s); +		gd += 1; +	} +	close(f); + +	if ((rkv == 'I') || ((rkv == '\0') && (readkey() == cf1)))  instructions(); + +	for (gd = 0; gd <= 6; gd ++) { +		stockstatus[gd] = Random(2); +		show_stock(gd); +	} + +	fillchar(m, sizeof(m), '\261'); +	setfillstyle(1, 0); +	cp = 0; +	flippage(); +	fillchar(rsize, sizeof(rsize), '\0'); +	avvywas = 320; +	avvypos = 320; +	avvyanim = 1; +	avvyfacing = facing_left; + +	alt_was_pressed_before = false; +	throw_next = 74; +	firing = false; + +	for (gd = 1; gd <= maxrunners; gd ++) { +		A1 &with = running[gd]; + +		with.x = flag; +	} + +	new_escape(); +	fillchar(has_escaped, sizeof(has_escaped), '\0'); /* All false. */ +	count321 = 255; /* Counting down. */ + +	/* Set up status line. */ + +	display_const(0, 0, 17); /* Score: */ +	show_score();            /* value of score (00000 here) */ +	display_const(110, 0, 20); /* Time: */ +	show_time();            /* value of time */ + +	Randomize(); + +	how_many_have_escaped = 0; +} + +void init_runner(integer xx, integer yy, byte f1, byte f2, shortint ixx, shortint iyy) { +	byte fv; + +	for (fv = 1; fv <= maxrunners; fv ++) { +		A1 &with = running[fv]; +		if (with.x == flag) { +			with.x = xx; +			with.y = yy; +			with.frame = f1; +			with.toohigh = f2; +			with.lowest = f1; +			with.ix = ixx; +			with.iy = iyy; +			if ((with.ix == 0) && (with.iy == 0))  with.ix = 2; /* To stop them running on the spot! */ +			with.framedelay = framedelaymax; +			return; +		} +	} +} + +void titles() { +	registers r; +	byte a; /*absolute $A000:0; */ +	untyped_file f; +	byte bit; + +	r.ax = 0xd; +	intr(0x10, r); + +	assign(f, "shoot1.avd"); +	reset(f, 1); +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a, 8000); +	} +	close(f);  }  /*  procedure animate3; @@ -608,397 +595,395 @@ begin  end;  */ -void move_avvy() -{ -  if (avvywas<avvypos)  -  { -/*   bar(avvyWas,avvy_Y,avvyPos,Avvy_Y+85);*/ -   avvyfacing=facing_right; -  } else if (avvywas>avvypos)  -  { -/*   bar(avvyWas+32,Avvy_Y,avvyPos+33,Avvy_Y+85);*/ -   avvyfacing=facing_left; -  } - -  if (! firing)  -  { -   if (avvywas==avvypos)  -    avvyanim=1; -   else -   { -    avvyanim += 1; -    if (avvyanim==6)  avvyanim=0; -   } -  } - - if (avvyfacing==avvy_shoot)  -  define(avvypos,avvy_y,shooting[avvyanim],0,0,1,false,true); - else -  define(avvypos,avvy_y,avvyanim+avvyfacing,0,0,1,false,true); - - avvywas=avvypos; - - if (avvyfacing==avvy_shoot)  - { -  if (avvyanim==6)  -  { -   avvyfacing=was_facing; -   avvyanim=0; -   firing=false; -  } else avvyanim += 1; - } -} - -void read_kbd() -{ - - if (firing)  return; - - if ((shiftstate & 8)>0)  - {     /* Alt - shoot */ -  if ((alt_was_pressed_before) || (count321!=0))  return; -  alt_was_pressed_before=true; -  firing=true; -  define(avvypos+27,avvy_y+5,throw_next,0,-2,53,true,true); -  throw_next += 1; if (throw_next==80)  throw_next=74; -  avvyanim=0; -  was_facing=avvyfacing; -  avvyfacing=avvy_shoot; -  return; - } - - alt_was_pressed_before=false; - - if ((shiftstate & 1)>0)  - {     /* Move right. */ -  avvypos += 5; -  if (avvypos>right_margin)  avvypos=right_margin; -  return; - } - - if ((shiftstate & 2)>0)  - {     /* Move left. */ -  avvypos -= 5; -  if (avvypos<left_margin)  avvypos=left_margin; - } - -} - -void animate() -{ -    byte fv; - - if (Random(10)==1)  show_stock(get_stock_number(Random(6))); - for( fv=0; fv <= 6; fv ++) -  if (stockstatus[fv]>5)  -  { -   stockstatus[fv] -= 1; -   if (stockstatus[fv]==8)  -   { -    stockstatus[fv]=0; -    show_stock(fv); -   } -  } -} - -void collision_check() -{ - byte fv; - integer dist_from_side; - byte this_stock; - - for( fv=1; fv <= 100; fv ++) -  { mtype& with = m[fv];  -   if (with.x!=flag)  -   { -    if ((with.missile) && (with.y<60) && (with.timeout==1))  -    { -/*     sound(177); delay(1); nosound;*/ -     dist_from_side=(with.x-20) % 90; -     this_stock=((with.x-20) / 90); -     if ((! has_escaped[this_stock]) && -      (dist_from_side>17) && (dist_from_side<34))  -     { -      sound(999); delay(3); nosound; -      define(with.x+20,with.y,26+Random(2),3,1,12,false,true); /* Well done! */ -      define(this_stock*90+20,30,31,0,0,7,false,false); /* Face of man */ -      define_cameo(this_stock*90+20+10,35,40,7); /* Splat! */ -      define(this_stock*90+20+20,50,34+Random(5),0,2,9,false,true); /* Oof! */ -      stockstatus[this_stock]=17; -      gain(score_for_hitting_face); - -      if ((escaping) && (escape_stock==this_stock))  -      {     /* Hit the escaper. */ -       sound(1777); delay(1); nosound; -       gain(bonus_for_hitting_escaper); -       escaping=false; new_escape(); -      } -     } else -     { -      define(with.x,with.y,83+Random(3),2,2,17,false,true); /* Missed! */ -      if ((! has_escaped[this_stock]) && -       ((dist_from_side>3) && (dist_from_side<43)))  -      { -       define(this_stock*90+20,30,30,0,0,7,false,false); /* Face of man */ -       if (dist_from_side>35)  -        define_cameo(with.x-27,35,40,7); /* Splat! */ -       else -        define_cameo(with.x-7,35,40,7); -       stockstatus[this_stock]=17; -      } -     } -    } -   }} -} - -shortint sgn(integer a) -{ - shortint sgn_result; - if (a==0)  { sgn_result=0; return sgn_result; } - if (a>0)  { sgn_result=1; return sgn_result; } - sgn_result=-1; - return sgn_result; -} - -void turn_around(byte who, boolean randomx) -{ - { -  A1& with = running[who];  - -  if (randomx)  -  { -   if (with.ix>0)  with.ix=-(Random(5)+1); else with.ix=(Random(5)+1); -  } else -   with.ix=-with.ix; -  with.iy=-with.iy; - } -} - -void bump_folk() -{ -    byte fv,ff; - - for( fv=1; fv <= maxrunners; fv ++) -  if (running[fv].x!=flag)  -   for( ff=fv+1; ff <= maxrunners; ff ++) -    if ((running[ff].x!=flag) && -     overlap(running[fv].x,running[fv].y, -             running[fv].x+17,running[fv].y+24, -             running[ff].x,running[ff].y, -             running[ff].x+17,running[ff].y+24))  -     { -      turn_around(fv,false); /* Opp. directions. */ -      turn_around(ff,false); -     } -} - -void people_running() -{ -    byte fv; - - if (count321!=0)  return; - for( fv=1; fv <= maxrunners; fv ++) -  { A1& with = running[fv];  -   if (with.x!=flag)  -   { -    if (((with.y+with.iy)<=53) || ((with.y+with.iy)>=120))  -    { -     with.iy=-with.iy; -    } - -    if (with.ix<0)  -     define(with.x,with.y,with.frame,0,0,1,false,true); -    else -     define(with.x,with.y,with.frame+7,0,0,1,false,true); -    if (with.framedelay==0)  -    { -     with.frame += 1; if (with.frame==with.toohigh)  with.frame=with.lowest; -     with.framedelay=framedelaymax; -     with.y=with.y+with.iy; -    } else with.framedelay -= 1; - -    if (((with.x+with.ix)<=0) || ((with.x+with.ix)>=620))  turn_around(fv,true); - -    with.x=with.x+with.ix; -   }} -} - -void update_time() -{ - if (count321!=0)  return; - time_this_second += 1; - if (time_this_second < times_a_second)  return; - time1 -= 1; - show_time(); - time_this_second=0; - if (time1<=flash_time)  -  if (odd(time1))  display_const(110,0,20); /* Normal time */ -   else display_const(110,0,86); /* Flash time */ -} - -void hit_people() -{ -    byte fv,ff; - - if (count321!=0)  return; - for( fv=1; fv <= 100; fv ++) -  { mtype& with = m[fv];  -   if (with.missile && (with.x!=flag))  -    for( ff=1; ff <= maxrunners; ff ++) -     if ((running[ff].x!=flag) && -        overlap(with.x,with.y,with.x+7,with.y+10, -                running[ff].x,running[ff].y, -                running[ff].x+17, -                running[ff].y+24))  -      { -       sound(7177); -/*       setcolor(4); -       rectangle(x,y,x+7,y+10); -       rectangle(running[ff].x,running[ff].y, -                 running[ff].x+17, -                 running[ff].y+24);*/ -       nosound; -       with.x=flag; -       gain(-5); -       define(running[ff].x+20,running[ff].y+3, -              34+Random(6),1,3,9,false,true); /* Oof! */ -       define(with.x,with.y,83,1,0,17,false,true); /* Oops! */ -      }} -} - -void escape_check() -{ - if (count321!=0)  return; - if (escape_count>0)  { escape_count -= 1; return; } - - /* Escape_count = 0; now what? */ - - if (escaping)  - { -  if (got_out)  -  { -   new_escape(); escaping=false; -   display_const(escape_stock*90+20,30,stocks+4); -  } else -  { -   display_const(escape_stock*90+20,30,stocks+5); -   escape_count=20; got_out=true; -   define(escape_stock*90+20,50,25,0,2,17,false,true); /* Escaped! */ -   gain(-10); -   has_escaped[escape_stock]=true; - -   how_many_have_escaped += 1; - -   if (how_many_have_escaped == 7)  -   { -    for( time1=0; time1 <= 1; time1 ++) -    { -     setactivepage(time1); -     cleardevice(); -    } -    setactivepage(1-cp); - -    memw[storage_seg*storage_ofs+1]=0; -    do {; } while (!(memw[storage_seg*storage_ofs+1]>9)); - -    setvisualpage(1-cp); -    display(266,90,23); - -    memw[storage_seg*storage_ofs+1]=0; -    do {; } while (!(memw[storage_seg*storage_ofs+1]>72)); - -    setvisualpage(cp); - -    memw[storage_seg*storage_ofs+1]=0; -    do {; } while (!(memw[storage_seg*storage_ofs+1]>9)); - -    time1=0; -   } -  } - } else - { -  escape_stock=get_stock_number(Random(7)); escaping=true; got_out=false; -  display_const(escape_stock*90+20,30,stocks+2); /* Smiling! */ -  escape_count=200; - } -} - -void check321() -{ - if (count321==0)  return; - count321 -= 1; - switch (count321) { -   case 84: define(320, 60,16, 2, 1,94,false,true); break; -  case 169: define(320, 60,15, 0, 1,94,false,true); break; -  case 254: { -        define(320, 60,14,-2, 1,94,false,true); -        define(  0,100,18, 2, 0,254,false,true); -       } -       break; - } +void move_avvy() { +	if (avvywas < avvypos) { +		/*   bar(avvyWas,avvy_Y,avvyPos,Avvy_Y+85);*/ +		avvyfacing = facing_right; +	} else if (avvywas > avvypos) { +		/*   bar(avvyWas+32,Avvy_Y,avvyPos+33,Avvy_Y+85);*/ +		avvyfacing = facing_left; +	} + +	if (! firing) { +		if (avvywas == avvypos) +			avvyanim = 1; +		else { +			avvyanim += 1; +			if (avvyanim == 6)  avvyanim = 0; +		} +	} + +	if (avvyfacing == avvy_shoot) +		define(avvypos, avvy_y, shooting[avvyanim], 0, 0, 1, false, true); +	else +		define(avvypos, avvy_y, avvyanim + avvyfacing, 0, 0, 1, false, true); + +	avvywas = avvypos; + +	if (avvyfacing == avvy_shoot) { +		if (avvyanim == 6) { +			avvyfacing = was_facing; +			avvyanim = 0; +			firing = false; +		} else avvyanim += 1; +	} +} + +void read_kbd() { + +	if (firing)  return; + +	if ((shiftstate & 8) > 0) { +		/* Alt - shoot */ +		if ((alt_was_pressed_before) || (count321 != 0))  return; +		alt_was_pressed_before = true; +		firing = true; +		define(avvypos + 27, avvy_y + 5, throw_next, 0, -2, 53, true, true); +		throw_next += 1; +		if (throw_next == 80)  throw_next = 74; +		avvyanim = 0; +		was_facing = avvyfacing; +		avvyfacing = avvy_shoot; +		return; +	} + +	alt_was_pressed_before = false; + +	if ((shiftstate & 1) > 0) { +		/* Move right. */ +		avvypos += 5; +		if (avvypos > right_margin)  avvypos = right_margin; +		return; +	} + +	if ((shiftstate & 2) > 0) { +		/* Move left. */ +		avvypos -= 5; +		if (avvypos < left_margin)  avvypos = left_margin; +	} + +} + +void animate() { +	byte fv; + +	if (Random(10) == 1)  show_stock(get_stock_number(Random(6))); +	for (fv = 0; fv <= 6; fv ++) +		if (stockstatus[fv] > 5) { +			stockstatus[fv] -= 1; +			if (stockstatus[fv] == 8) { +				stockstatus[fv] = 0; +				show_stock(fv); +			} +		} +} + +void collision_check() { +	byte fv; +	integer dist_from_side; +	byte this_stock; + +	for (fv = 1; fv <= 100; fv ++) { +		mtype &with = m[fv]; +		if (with.x != flag) { +			if ((with.missile) && (with.y < 60) && (with.timeout == 1)) { +				/*     sound(177); delay(1); nosound;*/ +				dist_from_side = (with.x - 20) % 90; +				this_stock = ((with.x - 20) / 90); +				if ((! has_escaped[this_stock]) && +				        (dist_from_side > 17) && (dist_from_side < 34)) { +					sound(999); +					delay(3); +					nosound; +					define(with.x + 20, with.y, 26 + Random(2), 3, 1, 12, false, true); /* Well done! */ +					define(this_stock * 90 + 20, 30, 31, 0, 0, 7, false, false); /* Face of man */ +					define_cameo(this_stock * 90 + 20 + 10, 35, 40, 7); /* Splat! */ +					define(this_stock * 90 + 20 + 20, 50, 34 + Random(5), 0, 2, 9, false, true); /* Oof! */ +					stockstatus[this_stock] = 17; +					gain(score_for_hitting_face); + +					if ((escaping) && (escape_stock == this_stock)) { +						/* Hit the escaper. */ +						sound(1777); +						delay(1); +						nosound; +						gain(bonus_for_hitting_escaper); +						escaping = false; +						new_escape(); +					} +				} else { +					define(with.x, with.y, 83 + Random(3), 2, 2, 17, false, true); /* Missed! */ +					if ((! has_escaped[this_stock]) && +					        ((dist_from_side > 3) && (dist_from_side < 43))) { +						define(this_stock * 90 + 20, 30, 30, 0, 0, 7, false, false); /* Face of man */ +						if (dist_from_side > 35) +							define_cameo(with.x - 27, 35, 40, 7); /* Splat! */ +						else +							define_cameo(with.x - 7, 35, 40, 7); +						stockstatus[this_stock] = 17; +					} +				} +			} +		} +	} +} + +shortint sgn(integer a) { +	shortint sgn_result; +	if (a == 0)  { +		sgn_result = 0; +		return sgn_result; +	} +	if (a > 0)  { +		sgn_result = 1; +		return sgn_result; +	} +	sgn_result = -1; +	return sgn_result; +} + +void turn_around(byte who, boolean randomx) { +	{ +		A1 &with = running[who]; + +		if (randomx) { +			if (with.ix > 0)  with.ix = -(Random(5) + 1); +			else with.ix = (Random(5) + 1); +		} else +			with.ix = -with.ix; +		with.iy = -with.iy; +	} +} + +void bump_folk() { +	byte fv, ff; + +	for (fv = 1; fv <= maxrunners; fv ++) +		if (running[fv].x != flag) +			for (ff = fv + 1; ff <= maxrunners; ff ++) +				if ((running[ff].x != flag) && +				        overlap(running[fv].x, running[fv].y, +				                running[fv].x + 17, running[fv].y + 24, +				                running[ff].x, running[ff].y, +				                running[ff].x + 17, running[ff].y + 24)) { +					turn_around(fv, false); /* Opp. directions. */ +					turn_around(ff, false); +				} +} + +void people_running() { +	byte fv; + +	if (count321 != 0)  return; +	for (fv = 1; fv <= maxrunners; fv ++) { +		A1 &with = running[fv]; +		if (with.x != flag) { +			if (((with.y + with.iy) <= 53) || ((with.y + with.iy) >= 120)) { +				with.iy = -with.iy; +			} + +			if (with.ix < 0) +				define(with.x, with.y, with.frame, 0, 0, 1, false, true); +			else +				define(with.x, with.y, with.frame + 7, 0, 0, 1, false, true); +			if (with.framedelay == 0) { +				with.frame += 1; +				if (with.frame == with.toohigh)  with.frame = with.lowest; +				with.framedelay = framedelaymax; +				with.y = with.y + with.iy; +			} else with.framedelay -= 1; + +			if (((with.x + with.ix) <= 0) || ((with.x + with.ix) >= 620))  turn_around(fv, true); + +			with.x = with.x + with.ix; +		} +	} +} + +void update_time() { +	if (count321 != 0)  return; +	time_this_second += 1; +	if (time_this_second < times_a_second)  return; +	time1 -= 1; +	show_time(); +	time_this_second = 0; +	if (time1 <= flash_time) +		if (odd(time1))  display_const(110, 0, 20); /* Normal time */ +		else display_const(110, 0, 86); /* Flash time */ +} + +void hit_people() { +	byte fv, ff; + +	if (count321 != 0)  return; +	for (fv = 1; fv <= 100; fv ++) { +		mtype &with = m[fv]; +		if (with.missile && (with.x != flag)) +			for (ff = 1; ff <= maxrunners; ff ++) +				if ((running[ff].x != flag) && +				        overlap(with.x, with.y, with.x + 7, with.y + 10, +				                running[ff].x, running[ff].y, +				                running[ff].x + 17, +				                running[ff].y + 24)) { +					sound(7177); +					/*       setcolor(4); +					       rectangle(x,y,x+7,y+10); +					       rectangle(running[ff].x,running[ff].y, +					                 running[ff].x+17, +					                 running[ff].y+24);*/ +					nosound; +					with.x = flag; +					gain(-5); +					define(running[ff].x + 20, running[ff].y + 3, +					       34 + Random(6), 1, 3, 9, false, true); /* Oof! */ +					define(with.x, with.y, 83, 1, 0, 17, false, true); /* Oops! */ +				} +	} +} + +void escape_check() { +	if (count321 != 0)  return; +	if (escape_count > 0)  { +		escape_count -= 1; +		return; +	} + +	/* Escape_count = 0; now what? */ + +	if (escaping) { +		if (got_out) { +			new_escape(); +			escaping = false; +			display_const(escape_stock * 90 + 20, 30, stocks + 4); +		} else { +			display_const(escape_stock * 90 + 20, 30, stocks + 5); +			escape_count = 20; +			got_out = true; +			define(escape_stock * 90 + 20, 50, 25, 0, 2, 17, false, true); /* Escaped! */ +			gain(-10); +			has_escaped[escape_stock] = true; + +			how_many_have_escaped += 1; + +			if (how_many_have_escaped == 7) { +				for (time1 = 0; time1 <= 1; time1 ++) { +					setactivepage(time1); +					cleardevice(); +				} +				setactivepage(1 - cp); + +				memw[storage_seg * storage_ofs + 1] = 0; +				do { +					; +				} while (!(memw[storage_seg * storage_ofs + 1] > 9)); + +				setvisualpage(1 - cp); +				display(266, 90, 23); + +				memw[storage_seg * storage_ofs + 1] = 0; +				do { +					; +				} while (!(memw[storage_seg * storage_ofs + 1] > 72)); + +				setvisualpage(cp); + +				memw[storage_seg * storage_ofs + 1] = 0; +				do { +					; +				} while (!(memw[storage_seg * storage_ofs + 1] > 9)); + +				time1 = 0; +			} +		} +	} else { +		escape_stock = get_stock_number(Random(7)); +		escaping = true; +		got_out = false; +		display_const(escape_stock * 90 + 20, 30, stocks + 2); /* Smiling! */ +		escape_count = 200; +	} +} + +void check321() { +	if (count321 == 0)  return; +	count321 -= 1; +	switch (count321) { +	case 84: +		define(320, 60, 16, 2, 1, 94, false, true); +		break; +	case 169: +		define(320, 60, 15, 0, 1, 94, false, true); +		break; +	case 254: { +		define(320, 60, 14, -2, 1, 94, false, true); +		define(0, 100, 18, 2, 0, 254, false, true); +	} +	break; +	}  }  void check_params(); -static void not_bootstrap() -{ - output << "This is not a standalone program!" << NL; - exit(255); +static void not_bootstrap() { +	output << "This is not a standalone program!" << NL; +	exit(255);  } -void check_params() -{ -    integer e; +void check_params() { +	integer e; - if (paramstr(1)!="jsb")  not_bootstrap(); +	if (paramstr(1) != "jsb")  not_bootstrap(); - val(paramstr(2),storage_seg,e); if (e!=0)  not_bootstrap(); - val(paramstr(3),storage_ofs,e); if (e!=0)  not_bootstrap(); +	val(paramstr(2), storage_seg, e); +	if (e != 0)  not_bootstrap(); +	val(paramstr(3), storage_ofs, e); +	if (e != 0)  not_bootstrap();  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - check_params(); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	check_params(); - titles(); - setup(); - init_runner( 20, 70,48,54, Random(5)+1,Random(4)-2); - init_runner(600, 70,48,54, Random(5)+1,Random(4)-2); - init_runner(600,100,61,67,-Random(5)+1,Random(4)-2); - init_runner( 20,100,61,67,-Random(5)+1,Random(4)-2); - do { -  memw[storage_seg*storage_ofs+1]=0; +	titles(); +	setup(); +	init_runner(20, 70, 48, 54, Random(5) + 1, Random(4) - 2); +	init_runner(600, 70, 48, 54, Random(5) + 1, Random(4) - 2); +	init_runner(600, 100, 61, 67, -Random(5) + 1, Random(4) - 2); +	init_runner(20, 100, 61, 67, -Random(5) + 1, Random(4) - 2); +	do { +		memw[storage_seg * storage_ofs + 1] = 0; -  blankit(); -  hit_people(); -  plotthem(); -  movethem(); -  move_avvy(); -  bump_folk(); -  people_running(); -  animate(); -  escape_check(); +		blankit(); +		hit_people(); +		plotthem(); +		movethem(); +		move_avvy(); +		bump_folk(); +		people_running(); +		animate(); +		escape_check(); -  collision_check(); +		collision_check(); -  update_time(); +		update_time(); -  check321(); +		check321(); -  read_kbd(); -  flippage(); -  do {; } while (!(memw[storage_seg*storage_ofs+1]>0)); +		read_kbd(); +		flippage(); +		do { +			; +		} while (!(memw[storage_seg * storage_ofs + 1] > 0)); - } while (!(time1==0)); +	} while (!(time1 == 0)); -/* textmode(259); - textattr:=1; - writeln('Your final score was: ',score,'.'); - readln;*/ - mem[storage_seg*storage_ofs]=score; - return EXIT_SUCCESS; +	/* textmode(259); +	 textattr:=1; +	 writeln('Your final score was: ',score,'.'); +	 readln;*/ +	mem[storage_seg * storage_ofs] = score; +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/seu_avvy.cpp b/engines/avalanche/seu_avvy.cpp index 479f8c174a..931fbf05b6 100644 --- a/engines/avalanche/seu_avvy.cpp +++ b/engines/avalanche/seu_avvy.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 @@ -31,87 +31,97 @@  namespace Avalanche {  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.) */ +	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.) */  }; -integer gd,gm; +integer gd, gm;  untyped_file sf;  longint id;  word soa;  adxtype a;  byte xw; -array<5,2053,byte> mani; -matrix<0,35,0,4,byte> sil; -array<1,16000,byte> aa; +array<5, 2053, byte> mani; +matrix<0, 35, 0, 4, byte> sil; +array<1, 16000, byte> aa;  untyped_file outfile; -void plotat(integer xx,integer yy) /* Does NOT cameo the picture!*/ -{ -    word soaa; -; - 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); - soaa=sizeof(mani); - blockwrite(outfile,soaa,2); - blockwrite(outfile,aa,sizeof(mani)); +void plotat(integer xx, integer yy) { /* Does NOT cameo the picture!*/ +	word soaa; +	; +	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); +	soaa = sizeof(mani); +	blockwrite(outfile, soaa, 2); +	blockwrite(outfile, aa, sizeof(mani));  }  const integer shouldid = -1317732048;  void explode(byte which)       /* 0 is the first one! */ - /* Each character takes five-quarters of (a.size-6) on disk. */ +/* 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 */ - } - plotat(100,100); - delay(100); +	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 */ +	} +	plotat(100, 100); +	delay(100);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); - assign(outfile,"notts.avd"); - reset(outfile,1); - seek(outfile,filesize(outfile)); +	assign(outfile, "notts.avd"); +	reset(outfile, 1); +	seek(outfile, filesize(outfile)); - assign(sf,"sprite0.avd"); - reset(sf,1); +	assign(sf, "sprite0.avd"); +	reset(sf, 1); - seek(sf,177); - blockread(sf,id,4); - blockread(sf,soa,2); - blockread(sf,a,soa); +	seek(sf, 177); +	blockread(sf, id, 4); +	blockread(sf, soa, 2); +	blockread(sf, a, soa); - explode(1); - for( gd=6; gd <= 11; gd ++) explode(gd); - for( gd=18; gd <= 23; gd ++) explode(gd); +	explode(1); +	for (gd = 6; gd <= 11; gd ++) explode(gd); +	for (gd = 18; gd <= 23; gd ++) explode(gd); - close(sf); - close(outfile); -return EXIT_SUCCESS; +	close(sf); +	close(outfile); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/sez.cpp b/engines/avalanche/sez.cpp index e3261d7c1e..d0f88a1e85 100644 --- a/engines/avalanche/sez.cpp +++ b/engines/avalanche/sez.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 diff --git a/engines/avalanche/sezedit.cpp b/engines/avalanche/sezedit.cpp index 4ec0bf37b0..73f5be19cf 100644 --- a/engines/avalanche/sezedit.cpp +++ b/engines/avalanche/sezedit.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 @@ -34,400 +34,489 @@ namespace Avalanche {  const char marker = '\33';  const char game[] = "Avalot"; -typedef matrix<'\0','\377',0,15,byte> fonttype; +typedef matrix < '\0', '\377', 0, 15, byte > fonttype;  struct markertype { -              word length; -              longint offset; -              byte checksum; +	word length; +	longint offset; +	byte checksum;  };  struct sezheader { -             array<1,2,char> initials;     /* should be "TT" */ -             word gamecode; -             word revision; /* as 3- or 4-digit code (eg v1.00 = 100) */ -             longint chains; /* number of scroll chains */ -             longint size; /* total size of all chains */ +	array<1, 2, char> initials;   /* should be "TT" */ +	word gamecode; +	word revision; /* as 3- or 4-digit code (eg v1.00 = 100) */ +	longint chains; /* number of scroll chains */ +	longint size; /* total size of all chains */  }; -array<0,1999,char> buffer,was; -word bufpos,bufsize; +array<0, 1999, char> buffer, was; +word bufpos, bufsize;  longint chainnum;  varying_string<40> nickname; -array<1,255,char> junk; +array<1, 255, char> junk;  string temp;  char r;  fonttype font;  integer cpos;  sezheader sezhead; -untyped_file f,tempf; +untyped_file f, tempf;  text nicknames; -byte sumup() -{ -    word fv; byte total; -byte sumup_result; -; - total=0; - for( fv=0; fv <= bufsize-1; fv ++) - {; -  total += ord(was[fv]); - } - sumup_result=total; -return sumup_result; +byte sumup() { +	word fv; +	byte total; +	byte sumup_result; +	; +	total = 0; +	for (fv = 0; fv <= bufsize - 1; fv ++) { +		; +		total += ord(was[fv]); +	} +	sumup_result = total; +	return sumup_result;  } -string findname(longint which) -{ -    string x; varying_string<10> q; -string findname_result; -; - str(which,q); - reset(nicknames); - do { nicknames >> x >> NL; } while (!(x=="{go}")); - do { -  nicknames >> x >> NL; - } while (!(pos(q,x)>0)); - if (eof(nicknames))  - {; -  findname_result="noname"; - } else - {; -  Delete(x,1,3); /* lose "{__" */ -  Delete(x,pos(" ",x),255); /* lose all chars after first space */ -  findname_result=x; - } - close(nicknames); -return findname_result; +string findname(longint which) { +	string x; +	varying_string<10> q; +	string findname_result; +	; +	str(which, q); +	reset(nicknames); +	do { +		nicknames >> x >> NL; +	} while (!(x == "{go}")); +	do { +		nicknames >> x >> NL; +	} while (!(pos(q, x) > 0)); +	if (eof(nicknames)) { +		; +		findname_result = "noname"; +	} else { +		; +		Delete(x, 1, 3); /* lose "{__" */ +		Delete(x, pos(" ", x), 255); /* lose all chars after first space */ +		findname_result = x; +	} +	close(nicknames); +	return findname_result;  } -void cursor() -{ -    byte fv; -; - for( fv=12; fv <= 15; fv ++) -  mem[0xa000*cpos+fv*80]=~(mem[0xa000*cpos+fv*80]); +void cursor() { +	byte fv; +	; +	for (fv = 12; fv <= 15; fv ++) +		mem[0xa000 * cpos + fv * 80] = ~(mem[0xa000 * cpos + fv * 80]);  } -void xy() -{; - cpos=(bufpos / 80)*1280+(bufpos % 80); +void xy() { +	; +	cpos = (bufpos / 80) * 1280 + (bufpos % 80);  } -void show() -{ -    word fv,orig,y; -; - for( fv=0; fv <= 1999; fv ++) -  if (buffer[fv]!=was[fv])  -  {; -   orig=(fv / 80)*1280+(fv % 80); -   for( y=0; y <= 15; y ++) -    mem[0xa000*orig+y*80]=(byte)(font[buffer[fv]][y]); -  } - xy(); - move(buffer,was,sizeof(buffer)); +void show() { +	word fv, orig, y; +	; +	for (fv = 0; fv <= 1999; fv ++) +		if (buffer[fv] != was[fv]) { +			; +			orig = (fv / 80) * 1280 + (fv % 80); +			for (y = 0; y <= 15; y ++) +				mem[0xa000 * orig + y * 80] = (byte)(font[buffer[fv]][y]); +		} +	xy(); +	move(buffer, was, sizeof(buffer));  } -void sizeup() -{; - do { -  switch (buffer[bufsize]) { -   case marker: return; break; /* we've found it OK! */ -   case '\0': bufsize -= 1; break; -   default: bufsize += 1; -  } - } while (!false); +void sizeup() { +	; +	do { +		switch (buffer[bufsize]) { +		case marker: +			return; +			break; /* we've found it OK! */ +		case '\0': +			bufsize -= 1; +			break; +		default: +			bufsize += 1; +		} +	} while (!false);  } -void graphics() -{ - integer gd,gm; - file<fonttype> fontfile; -; - gd=3; gm=1; initgraph(gd,gm,""); - assign(fontfile,"c:\\thomas\\lanche.fnt"); - reset(fontfile); fontfile >> font; close(fontfile); +void graphics() { +	integer gd, gm; +	file<fonttype> fontfile; +	; +	gd = 3; +	gm = 1; +	initgraph(gd, gm, ""); +	assign(fontfile, "c:\\thomas\\lanche.fnt"); +	reset(fontfile); +	fontfile >> font; +	close(fontfile);  }  void edit_it(); -static void legit(char r) -{;     /* it's a legit keystroke */ - move(buffer[bufpos],buffer[bufpos+1],1999-bufpos); - buffer[bufpos]=r; - bufpos += 1; show(); +static void legit(char r) { +	;     /* it's a legit keystroke */ +	move(buffer[bufpos], buffer[bufpos + 1], 1999 - bufpos); +	buffer[bufpos] = r; +	bufpos += 1; +	show();  } -void edit_it() -{ -    byte fv; -; - for( fv=1; fv <= bufsize; fv ++) buffer[fv] -= (byte)(177*bufsize); - fillchar(was,sizeof(was),'\0'); show(); - do { -  cursor(); r=readkey(); cursor(); -  switch (r) { -   case '\0': switch (readkey()) { /* extd keystrokes */ -        case 'K': if (bufpos>0)     {; bufpos -= 1; xy(); } break; /* Left */ -        case 'M': if (bufpos<bufsize)  {; bufpos += 1; xy(); } break; /* Right */ -        case 'H': if (bufpos>80)    {; bufpos -= 80; xy(); } break; /* Up */ -        case 'P': if (bufpos<(cardinal)bufsize-79)  {; bufpos += 80; xy(); } break; /* Down */ -        case 'G': {; bufpos=0; xy(); } break; /* Home */ -        case 'O': {; bufpos=bufsize; xy(); } break; /* End */ -        case 'S': {; /* Del */ -              move(buffer[bufpos+1],buffer[bufpos],1999-bufpos); show(); -             } -             break; -        case 'A': legit('\357'); break; /* copyright symbol */ -       } -       break; -   case '\10': if (bufpos>0)  {; /* backspace */ -        bufpos -= 1; -        move(buffer[bufpos+1],buffer[bufpos],1999-bufpos); -        show(); -       } -       break; -   case '\33': {; -         for( fv=1; fv <= bufsize; fv ++) buffer[fv] += (byte)(177*bufsize); -         restorecrtmode(); -         return; -        } -        break; /* end of editing */ -  default: legit(r); -  } -  sizeup(); - } while (!false); +void edit_it() { +	byte fv; +	; +	for (fv = 1; fv <= bufsize; fv ++) buffer[fv] -= (byte)(177 * bufsize); +	fillchar(was, sizeof(was), '\0'); +	show(); +	do { +		cursor(); +		r = readkey(); +		cursor(); +		switch (r) { +		case '\0': +			switch (readkey()) { /* extd keystrokes */ +			case 'K': +				if (bufpos > 0)     { +					; +					bufpos -= 1; +					xy(); +				} +				break; /* Left */ +			case 'M': +				if (bufpos < bufsize)  { +					; +					bufpos += 1; +					xy(); +				} +				break; /* Right */ +			case 'H': +				if (bufpos > 80)    { +					; +					bufpos -= 80; +					xy(); +				} +				break; /* Up */ +			case 'P': +				if (bufpos < (cardinal)bufsize - 79)  { +					; +					bufpos += 80; +					xy(); +				} +				break; /* Down */ +			case 'G': { +				; +				bufpos = 0; +				xy(); +			} +			break; /* Home */ +			case 'O': { +				; +				bufpos = bufsize; +				xy(); +			} +			break; /* End */ +			case 'S': { +				; /* Del */ +				move(buffer[bufpos + 1], buffer[bufpos], 1999 - bufpos); +				show(); +			} +			break; +			case 'A': +				legit('\357'); +				break; /* copyright symbol */ +			} +			break; +		case '\10': +			if (bufpos > 0)  { +				; /* backspace */ +				bufpos -= 1; +				move(buffer[bufpos + 1], buffer[bufpos], 1999 - bufpos); +				show(); +			} +			break; +		case '\33': { +			; +			for (fv = 1; fv <= bufsize; fv ++) buffer[fv] += (byte)(177 * bufsize); +			restorecrtmode(); +			return; +		} +		break; /* end of editing */ +		default: +			legit(r); +		} +		sizeup(); +	} while (!false);  } -void saveit(longint ourchain, word oldsize,word newsize) -{ - array<1,17777,byte> buffer; - word numread,numwritten,total; - char check; - word fv; - markertype m; - integer sizechange; /* so's it can be +ve or -ve */ - longint wheresit; /* "offset" value for "ourchain" */ -; - assign(tempf,"sez.tmp"); - /* OK, here goes... */ - sezhead.size=sezhead.size-longint(oldsize)+longint(newsize); /* adjust our size */ - sizechange=newsize-oldsize;  /* +ve if bigger, -ve if smaller, 0 if same */ - textattr=27; - - rewrite(tempf,1); reset(f,1); - seek(f,255+sizeof(sezhead)); /* bypass the junk & sezhead (they're in RAM) */ - - blockwrite(tempf,junk,255); /* move the junk... */ - blockwrite(tempf,sezhead,sizeof(sezhead)); /* and the header to new files */ - - /* Now to move the markers */ - output << "Moving markers..." << NL; - for( fv=1; fv <= sezhead.chains; fv ++) - {; -  output << fv << '\15'; -  blockread(f,m,sizeof(m)); -  if (fv==ourchain)   /* Right, this one's ours! */ -            {; -   wheresit=m.offset; /* recorded for later */ -   m.length=newsize-1; -   m.checksum=sumup(); -  } else -   if (fv>ourchain)  -   {;     /* After ours- its offset will have to be changed... */ -    m.offset=m.offset+longint(sizechange); -   }    /* Otherwise, before ours- leave it well alone */ -  blockwrite(tempf,m,sizeof(m)); - } - output << "Done OK." << NL; - - /* Right, that's the markers done... thank goodness... now it's just the -   chains themselves! */ - - total=0; - - output << "Updating the chains..." << NL; - while (total<=wheresit)  - {; -  blockread(f,buffer,1,numread); -  blockwrite(tempf,buffer,numread,numwritten); -  output << '.'; -  total += numwritten; - } - output << NL; output << "Updating our chain..." << NL; - /* We're now in the right place (at last...) */ - for( fv=0; fv <= (bufsize-1); fv ++) was[fv] += 3+177*fv*(bufsize-1); /* scramble "was" */ - blockwrite(tempf,was,newsize); /* "was" contains what the values *were* */ - seek(f,filepos(f)+oldsize); - output << NL; output << "Copying everything else..." << NL; - while (! eof(f))    /* high-speed copy */ - {; -  blockread(f,buffer,17777,numread); -  blockwrite(tempf,buffer,numread); -  output << '.'; - } - output << NL; - - /* Closedown */ - close(f); close(tempf); - erase(f); rename(tempf,string(game)+".SEZ"); +void saveit(longint ourchain, word oldsize, word newsize) { +	array<1, 17777, byte> buffer; +	word numread, numwritten, total; +	char check; +	word fv; +	markertype m; +	integer sizechange; /* so's it can be +ve or -ve */ +	longint wheresit; /* "offset" value for "ourchain" */ +	; +	assign(tempf, "sez.tmp"); +	/* OK, here goes... */ +	sezhead.size = sezhead.size - longint(oldsize) + longint(newsize); /* adjust our size */ +	sizechange = newsize - oldsize; /* +ve if bigger, -ve if smaller, 0 if same */ +	textattr = 27; + +	rewrite(tempf, 1); +	reset(f, 1); +	seek(f, 255 + sizeof(sezhead)); /* bypass the junk & sezhead (they're in RAM) */ + +	blockwrite(tempf, junk, 255); /* move the junk... */ +	blockwrite(tempf, sezhead, sizeof(sezhead)); /* and the header to new files */ + +	/* Now to move the markers */ +	output << "Moving markers..." << NL; +	for (fv = 1; fv <= sezhead.chains; fv ++) { +		; +		output << fv << '\15'; +		blockread(f, m, sizeof(m)); +		if (fv == ourchain) { /* Right, this one's ours! */ +			; +			wheresit = m.offset; /* recorded for later */ +			m.length = newsize - 1; +			m.checksum = sumup(); +		} else if (fv > ourchain) { +			;     /* After ours- its offset will have to be changed... */ +			m.offset = m.offset + longint(sizechange); +		}    /* Otherwise, before ours- leave it well alone */ +		blockwrite(tempf, m, sizeof(m)); +	} +	output << "Done OK." << NL; + +	/* Right, that's the markers done... thank goodness... now it's just the +	  chains themselves! */ + +	total = 0; + +	output << "Updating the chains..." << NL; +	while (total <= wheresit) { +		; +		blockread(f, buffer, 1, numread); +		blockwrite(tempf, buffer, numread, numwritten); +		output << '.'; +		total += numwritten; +	} +	output << NL; +	output << "Updating our chain..." << NL; +	/* We're now in the right place (at last...) */ +	for (fv = 0; fv <= (bufsize - 1); fv ++) was[fv] += 3 + 177 * fv * (bufsize - 1); /* scramble "was" */ +	blockwrite(tempf, was, newsize); /* "was" contains what the values *were* */ +	seek(f, filepos(f) + oldsize); +	output << NL; +	output << "Copying everything else..." << NL; +	while (! eof(f)) {  /* high-speed copy */ +		; +		blockread(f, buffer, 17777, numread); +		blockwrite(tempf, buffer, numread); +		output << '.'; +	} +	output << NL; + +	/* Closedown */ +	close(f); +	close(tempf); +	erase(f); +	rename(tempf, string(game) + ".SEZ");  } -void particular() -{ -    word origsize; -; - bufsize=0; - output << "Which one\? (? for a list)"; input >> chainnum >> NL; - if ((chainnum<0) || (chainnum>sezhead.chains))  - {; -  output << "Don't be silly!" << NL; return; - } - - origsize=0 /*bufsize*/; bufpos=0; cpos=0; nickname=findname(chainnum); - fillchar(buffer,sizeof(buffer),'\0'); - buffer[0]=marker; - do { -  textattr=30; output << NL; -  output << "SEZ EDITOR (c) 1992, Thomas Thurman." << NL; -  output << NL; -  output << "Editing scrollchain no." << chainnum << NL; -  output << "Your text is " << bufsize << " bytes long." << NL; -  output << NL; -  output << "Its nickname is \"" << nickname << "\"." << NL; -  output << NL; -  output << "Enter a command:" << NL; -  output << "  S) Save the text to disk," << NL; -  output << "  E) Edit this particular chain," << NL; -  output << "  N) change the Nickname," << NL; -  output << "  R) Revert text to the original," << NL; -  output << "Esc) Exit and do something else!" << NL; -  output << NL; -  output << "Your choice? "; -  r=upcase(readkey()); output << r << NL; -  switch (r) { -   case 'N': {; -         output << NL; output << "New nickname (max 40 chars, Enter to cancel)?"; -         input >> temp >> NL; -         if (temp!="")  nickname=temp; -        } -        break; -   case 'E': {; setgraphmode(1); edit_it(); } break; -   case 'S': saveit(chainnum,origsize,bufsize); break; -   case '\33': return; break; -  } - } while (!false); +void particular() { +	word origsize; +	; +	bufsize = 0; +	output << "Which one\? (? for a list)"; +	input >> chainnum >> NL; +	if ((chainnum < 0) || (chainnum > sezhead.chains)) { +		; +		output << "Don't be silly!" << NL; +		return; +	} + +	origsize = 0 /*bufsize*/; +	bufpos = 0; +	cpos = 0; +	nickname = findname(chainnum); +	fillchar(buffer, sizeof(buffer), '\0'); +	buffer[0] = marker; +	do { +		textattr = 30; +		output << NL; +		output << "SEZ EDITOR (c) 1992, Thomas Thurman." << NL; +		output << NL; +		output << "Editing scrollchain no." << chainnum << NL; +		output << "Your text is " << bufsize << " bytes long." << NL; +		output << NL; +		output << "Its nickname is \"" << nickname << "\"." << NL; +		output << NL; +		output << "Enter a command:" << NL; +		output << "  S) Save the text to disk," << NL; +		output << "  E) Edit this particular chain," << NL; +		output << "  N) change the Nickname," << NL; +		output << "  R) Revert text to the original," << NL; +		output << "Esc) Exit and do something else!" << NL; +		output << NL; +		output << "Your choice? "; +		r = upcase(readkey()); +		output << r << NL; +		switch (r) { +		case 'N': { +			; +			output << NL; +			output << "New nickname (max 40 chars, Enter to cancel)?"; +			input >> temp >> NL; +			if (temp != "")  nickname = temp; +		} +		break; +		case 'E': { +			; +			setgraphmode(1); +			edit_it(); +		} +		break; +		case 'S': +			saveit(chainnum, origsize, bufsize); +			break; +		case '\33': +			return; +			break; +		} +	} while (!false);  } -void titles() -{ - const varying_string<7> title = "SEZedit"; - byte fv; char r; -; - settextstyle(1,0,0); - for( fv=7; fv >= 1; fv --) - {; -  setcolor(fv*2); -  setusercharsize(8-fv,1,8-fv,1); -  outtextxy(fv*65,fv*40-30,title[fv-1]); - } - setusercharsize(17,7,1,1); setcolor(green); - outtextxy(300,10,"Thorsoft"); - outtextxy(10,310,"Press any key..."); - do { r=readkey(); } while (!(! keypressed())); - restorecrtmode(); textattr=30; clrscr; +void titles() { +	const varying_string<7> title = "SEZedit"; +	byte fv; +	char r; +	; +	settextstyle(1, 0, 0); +	for (fv = 7; fv >= 1; fv --) { +		; +		setcolor(fv * 2); +		setusercharsize(8 - fv, 1, 8 - fv, 1); +		outtextxy(fv * 65, fv * 40 - 30, title[fv - 1]); +	} +	setusercharsize(17, 7, 1, 1); +	setcolor(green); +	outtextxy(300, 10, "Thorsoft"); +	outtextxy(10, 310, "Press any key..."); +	do { +		r = readkey(); +	} while (!(! keypressed())); +	restorecrtmode(); +	textattr = 30; +	clrscr;  } -void addone()     /* Adds a new, empty chain to the end of the list. */ -{ - longint fv; - markertype m; - array<1,17777,byte> buffer; - word numread; -; - assign(tempf,"sez.tmp"); - textattr=27; - rewrite(tempf,1); reset(f,1); /* f = AVALOT.SEZ (original file) */ - seek(f,255+sizeof(sezhead)); - sezhead.chains += 1; /* we're adding a new chain */ - - blockwrite(tempf,junk,255); /* move the junk */ - blockwrite(tempf,sezhead,sizeof(sezhead)); /* move the header */ - - /* Now to move the markers */ - output << "Moving markers..." << NL; - for( fv=1; fv <= sezhead.chains-longint(1); fv ++) /* -1 because we've added 1 to it */ - {; -  output << fv << '\12'; -  blockread(f,m,sizeof(m)); -  blockwrite(tempf,m,sizeof(m)); - } - output << "Done OK." << NL; - /* Now we add a new marker onto the end! */ - {; -  m.offset=sezhead.size; /* right onto the end */ -  m.length=0; /* it's empty */ - } - blockwrite(tempf,m,sizeof(m)); /* write it out to disk */ - - /* Copy everything else... including the #177 check char */ - output << "Copying everything else over..." << NL; - while (! eof(f))  - {; -  blockread(f,buffer,17777,numread); -  blockwrite(tempf,buffer,numread); -  output << '.'; - } - output << NL; - close(f); close(tempf); - erase(f); rename(tempf,string(game)+".SEZ"); +void addone() {   /* Adds a new, empty chain to the end of the list. */ +	longint fv; +	markertype m; +	array<1, 17777, byte> buffer; +	word numread; +	; +	assign(tempf, "sez.tmp"); +	textattr = 27; +	rewrite(tempf, 1); +	reset(f, 1); /* f = AVALOT.SEZ (original file) */ +	seek(f, 255 + sizeof(sezhead)); +	sezhead.chains += 1; /* we're adding a new chain */ + +	blockwrite(tempf, junk, 255); /* move the junk */ +	blockwrite(tempf, sezhead, sizeof(sezhead)); /* move the header */ + +	/* Now to move the markers */ +	output << "Moving markers..." << NL; +	for (fv = 1; fv <= sezhead.chains - longint(1); fv ++) { /* -1 because we've added 1 to it */ +		; +		output << fv << '\12'; +		blockread(f, m, sizeof(m)); +		blockwrite(tempf, m, sizeof(m)); +	} +	output << "Done OK." << NL; +	/* Now we add a new marker onto the end! */ +	{ +		; +		m.offset = sezhead.size; /* right onto the end */ +		m.length = 0; /* it's empty */ +	} +	blockwrite(tempf, m, sizeof(m)); /* write it out to disk */ + +	/* Copy everything else... including the #177 check char */ +	output << "Copying everything else over..." << NL; +	while (! eof(f)) { +		; +		blockread(f, buffer, 17777, numread); +		blockwrite(tempf, buffer, numread); +		output << '.'; +	} +	output << NL; +	close(f); +	close(tempf); +	erase(f); +	rename(tempf, string(game) + ".SEZ");  } -void general() -{ -    char r; -; - do { -  textattr=31; -  output << NL; output << string(game)+".SEZ" << NL; -  output << NL; -  output << "No. of chains: " << sezhead.chains << NL; -  output << NL; -  output << "Choose one of these:" << NL; -  output << "  A) Add a new scrollchain" << NL; -  output << "  E) Edit one" << NL; -  output << "Esc) Exit" << NL; -  output << NL; -  output << "Your choice? "; -  r=upcase(readkey()); output << r << NL; -  switch (r) { -   case 'A': addone(); break; -   case 'E': particular(); break; -   case '\33': exit(0); break; -  } - } while (!false); +void general() { +	char r; +	; +	do { +		textattr = 31; +		output << NL; +		output << string(game) + ".SEZ" << NL; +		output << NL; +		output << "No. of chains: " << sezhead.chains << NL; +		output << NL; +		output << "Choose one of these:" << NL; +		output << "  A) Add a new scrollchain" << NL; +		output << "  E) Edit one" << NL; +		output << "Esc) Exit" << NL; +		output << NL; +		output << "Your choice? "; +		r = upcase(readkey()); +		output << r << NL; +		switch (r) { +		case 'A': +			addone(); +			break; +		case 'E': +			particular(); +			break; +		case '\33': +			exit(0); +			break; +		} +	} while (!false);  } -void loadit() -{; - reset(f,1); - blockread(f,junk,255); - blockread(f,sezhead,sizeof(sezhead)); - close(f); +void loadit() { +	; +	reset(f, 1); +	blockread(f, junk, 255); +	blockread(f, sezhead, sizeof(sezhead)); +	close(f);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - assign(f,string(game)+".SEZ"); - assign(tempf,"sez.tmp"); - assign(nicknames,string(game)+".NIK"); - loadit(); - graphics(); - titles(); - general(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	assign(f, string(game) + ".SEZ"); +	assign(tempf, "sez.tmp"); +	assign(nicknames, string(game) + ".NIK"); +	loadit(); +	graphics(); +	titles(); +	general(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/sezunit.cpp b/engines/avalanche/sezunit.cpp index e9dda13267..fa7bbb8c79 100644 --- a/engines/avalanche/sezunit.cpp +++ b/engines/avalanche/sezunit.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 @@ -33,9 +33,9 @@  namespace Avalanche {  struct markertype { -              word length; -              longint offset; -              byte checksum; +	word length; +	longint offset; +	byte checksum;  };  untyped_file f; @@ -44,60 +44,69 @@ markertype marker;  word fv;  byte sum; -void sez_setup()     /* This procedure sets up the Sez system (obviously!) */ -{; - -  /* Set up variables */ - - fillchar(chain,sizeof(chain),'\261'); /* blank out gunk in "chain" */ - chainsize=0;  /* it's empty (for now...) */ - sezerror=sezok;  /* everything's fine! */ - -  /* Set up AVALOT.SEZ */ - - assign(f,"avalot.sez"); reset(f,1); - seek(f,255); blockread(f,sezhead,sizeof(sezhead)); - if (ioresult!=0)  {; sezerror=sezgunkyfile; return; }         /* too short */ - {; -  if ((sezhead.initials!="TT") || (sezhead.gamecode!=thisgamecode) -   || (sezhead.revision!=thisvercode))  -  {; -   sezerror=sezgunkyfile;  /* not a valid file */ -   return; -  } - } +void sez_setup() {   /* This procedure sets up the Sez system (obviously!) */ +	; + +	/* Set up variables */ + +	fillchar(chain, sizeof(chain), '\261'); /* blank out gunk in "chain" */ +	chainsize = 0; /* it's empty (for now...) */ +	sezerror = sezok; /* everything's fine! */ + +	/* Set up AVALOT.SEZ */ + +	assign(f, "avalot.sez"); +	reset(f, 1); +	seek(f, 255); +	blockread(f, sezhead, sizeof(sezhead)); +	if (ioresult != 0)  { +		;    /* too short */ +		sezerror = sezgunkyfile; +		return; +	} +	{ +		; +		if ((sezhead.initials != "TT") || (sezhead.gamecode != thisgamecode) +		        || (sezhead.revision != thisvercode)) { +			; +			sezerror = sezgunkyfile; /* not a valid file */ +			return; +		} +	}  } -byte sumup() -{ -    word fv; byte total; -byte sumup_result; -; - total=0; - for( fv=0; fv <= chainsize; fv ++) - {; -  total += ord(chain[fv]); - } - sumup_result=total; -return sumup_result; +byte sumup() { +	word fv; +	byte total; +	byte sumup_result; +	; +	total = 0; +	for (fv = 0; fv <= chainsize; fv ++) { +		; +		total += ord(chain[fv]); +	} +	sumup_result = total; +	return sumup_result;  } -void getchain(longint number) -{; - seek(f,longint(262)+number*longint(7)); blockread(f,marker,7); - {; -  seek(f,longint(270)+sezhead.chains*longint(7)+marker.offset); -  blockread(f,chain,marker.length+1); -  for( fv=0; fv <= marker.length; fv ++) chain[fv] -= 3+177*fv*marker.length; /* unscramble */ -  chainsize=marker.length; -  if (sumup()!=marker.checksum)  -  {; -   sezerror=sezhacked; -   return; -  } - } - close(f); - sezerror=sezok;  /* nowt went wrong */ +void getchain(longint number) { +	; +	seek(f, longint(262) + number * longint(7)); +	blockread(f, marker, 7); +	{ +		; +		seek(f, longint(270) + sezhead.chains * longint(7) + marker.offset); +		blockread(f, chain, marker.length + 1); +		for (fv = 0; fv <= marker.length; fv ++) chain[fv] -= 3 + 177 * fv * marker.length; /* unscramble */ +		chainsize = marker.length; +		if (sumup() != marker.checksum) { +			; +			sezerror = sezhacked; +			return; +		} +	} +	close(f); +	sezerror = sezok; /* nowt went wrong */  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/sezunit.h b/engines/avalanche/sezunit.h index fa1f750b0a..5f067e537e 100644 --- a/engines/avalanche/sezunit.h +++ b/engines/avalanche/sezunit.h @@ -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 @@ -34,11 +34,11 @@  namespace Avalanche {  struct sezheader { -             array<1,2,char> initials;     /* should be "TT" */ -             word gamecode; -             word revision; /* as 3- or 4-digit code (eg v1.00 = 100) */ -             longint chains; /* number of scroll chains */ -             longint size; /* total size of all chains */ +	array<1, 2, char> initials;   /* should be "TT" */ +	word gamecode; +	word revision; /* as 3- or 4-digit code (eg v1.00 = 100) */ +	longint chains; /* number of scroll chains */ +	longint size; /* total size of all chains */  }; @@ -48,7 +48,7 @@ struct sezheader {  #define EXTERN  #endif -EXTERN array<0,1999,char> chain; /* This chain */ +EXTERN array<0, 1999, char> chain; /* This chain */  EXTERN word chainsize; /* Length of "chain" */  EXTERN byte sezerror; /* Error code */  EXTERN sezheader sezhead; @@ -56,7 +56,7 @@ EXTERN sezheader sezhead;  #define EXTERN extern -     /* Error codes for "sezerror" */ +/* Error codes for "sezerror" */  const integer sezok = 0;  const integer sezgunkyfile = 1;  const integer sezhacked = 2; diff --git a/engines/avalanche/sezxfr.cpp b/engines/avalanche/sezxfr.cpp index 3c2cff62f5..7d56e668fe 100644 --- a/engines/avalanche/sezxfr.cpp +++ b/engines/avalanche/sezxfr.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,99 +26,123 @@   */  /*#include "Crt.h"*/ - /*$V-*/ +/*$V-*/  namespace Avalanche {  text t;  string x; -matrix<1,100,1,2,string> data; -word dp,ip,fv; -array<1,20,word> index1; -array<1,20,varying_string<10> > names; -array<1,1777,longint> thumb; longint total; +matrix<1, 100, 1, 2, string> data; +word dp, ip, fv; +array<1, 20, word> index1; +array<1, 20, varying_string<10> > names; +array<1, 1777, longint> thumb; +longint total;  untyped_file f; -void strip() {; x=copy(x,2,255); } - -void squish(string& q) -{ -    string n; boolean ctrl; byte fv; -; - ctrl=false; n=""; - for( fv=1; fv <= length(q); fv ++) -  if (q[fv]=='^')  ctrl=true; else -  {;     /* not a caret */ -   if (ctrl)  q[fv]=chr(ord(upcase(q[fv]))-64); -   n=n+q[fv]; ctrl=false; -  } - while (n[length(n)]=='\40')  n[0] -= 1; /* strip trailing spaces */ - for( fv=1; fv <= length(n); fv ++) n[fv] += 177; /* scramble */ - q=n; +void strip() { +	; +	x = copy(x, 2, 255);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - dp=0; ip=0; fillchar(data,sizeof(data),'\0'); - fillchar(thumb,sizeof(thumb),'\261'); - fillchar(index1,sizeof(index1),'\3'); - assign(t,"v:sez.dat"); reset(t); - while (! eof(t))  - {; -  t >> x >> NL; -  switch (x[1]) { -   case ';': {; textattr=lightred; strip(); } break; -   case ':': {; -         textattr=lightblue; strip(); -         if (dp>0)  squish(data[dp][2]); -         dp += 1; data[dp][1]=x; -         if (pos("*",x)>0)  -         {;     /* index */ -          ip += 1; index1[ip]=dp; names[ip]=copy(x,1,pos("*",x)-1); -         } -        } -        break; -   default: -   {; -    textattr=white; -    data[dp][2]=data[dp][2]+x+'\40'; -   } -  } -  output << x << NL; - } - squish(data[dp][2]); - - total=1; - for( fv=1; fv <= dp; fv ++) - {; -  thumb[fv]=total; -  total += length(data[fv][2])+1; - } - - thumb[dp+1]=total; - - /* save it all! Firstly, the Sez file... */ - - assign(f,"v:avalot.sez"); rewrite(f,1); - x=string("This is a Sez file for an Avvy game, and it's copyright!")+'\32'; - blockwrite(f,x[1],57); - blockwrite(f,dp,2); blockwrite(f,ip,2); - blockwrite(f,index1,40); - blockwrite(f,thumb,dp*4+4); - for( fv=1; fv <= dp; fv ++) -  blockwrite(f,data[fv][2],length(data[fv][2])+1); - close(f); - - /* ...then the Sed file. */ - - assign(t,"v:avalot.sed"); rewrite(t); - for( fv=1; fv <= ip; fv ++) t << names[fv] << NL; - for( fv=1; fv <= dp; fv ++) t << data[fv][1] << NL; - close(t); - - /* Done! */ -return EXIT_SUCCESS; +void squish(string &q) { +	string n; +	boolean ctrl; +	byte fv; +	; +	ctrl = false; +	n = ""; +	for (fv = 1; fv <= length(q); fv ++) +		if (q[fv] == '^')  ctrl = true; +		else { +			;     /* not a caret */ +			if (ctrl)  q[fv] = chr(ord(upcase(q[fv])) - 64); +			n = n + q[fv]; +			ctrl = false; +		} +	while (n[length(n)] == '\40')  n[0] -= 1; /* strip trailing spaces */ +	for (fv = 1; fv <= length(n); fv ++) n[fv] += 177; /* scramble */ +	q = n; +} + +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	dp = 0; +	ip = 0; +	fillchar(data, sizeof(data), '\0'); +	fillchar(thumb, sizeof(thumb), '\261'); +	fillchar(index1, sizeof(index1), '\3'); +	assign(t, "v:sez.dat"); +	reset(t); +	while (! eof(t)) { +		; +		t >> x >> NL; +		switch (x[1]) { +		case ';': { +			; +			textattr = lightred; +			strip(); +		} +		break; +		case ':': { +			; +			textattr = lightblue; +			strip(); +			if (dp > 0)  squish(data[dp][2]); +			dp += 1; +			data[dp][1] = x; +			if (pos("*", x) > 0) { +				;     /* index */ +				ip += 1; +				index1[ip] = dp; +				names[ip] = copy(x, 1, pos("*", x) - 1); +			} +		} +		break; +		default: { +			; +			textattr = white; +			data[dp][2] = data[dp][2] + x + '\40'; +		} +		} +		output << x << NL; +	} +	squish(data[dp][2]); + +	total = 1; +	for (fv = 1; fv <= dp; fv ++) { +		; +		thumb[fv] = total; +		total += length(data[fv][2]) + 1; +	} + +	thumb[dp + 1] = total; + +	/* save it all! Firstly, the Sez file... */ + +	assign(f, "v:avalot.sez"); +	rewrite(f, 1); +	x = string("This is a Sez file for an Avvy game, and it's copyright!") + '\32'; +	blockwrite(f, x[1], 57); +	blockwrite(f, dp, 2); +	blockwrite(f, ip, 2); +	blockwrite(f, index1, 40); +	blockwrite(f, thumb, dp * 4 + 4); +	for (fv = 1; fv <= dp; fv ++) +		blockwrite(f, data[fv][2], length(data[fv][2]) + 1); +	close(f); + +	/* ...then the Sed file. */ + +	assign(t, "v:avalot.sed"); +	rewrite(t); +	for (fv = 1; fv <= ip; fv ++) t << names[fv] << NL; +	for (fv = 1; fv <= dp; fv ++) t << data[fv][1] << NL; +	close(t); + +	/* Done! */ +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/shell1.cpp b/engines/avalanche/shell1.cpp index 1618174fe4..358f679e61 100644 --- a/engines/avalanche/shell1.cpp +++ b/engines/avalanche/shell1.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 @@ -31,34 +31,35 @@  namespace Avalanche {  struct infotype { -            matrix<128,255,1,8,byte> chars; -            string data; +	matrix<128, 255, 1, 8, byte> chars; +	string data;  };  infotype table;  pointer where;  string comspec; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - getintvec(0x1f,where); move(where,table,1280); - comspec=getenv("comspec"); - table.data=table.data+"Avalot;"; - setintvec(0x1f,&table); - output << NL; - output << "The Astounding Avvy DOS Shell...       don't forget to register!" << NL; - output << NL; - output << "Use the command EXIT to return to your game." << NL; - output << NL; - output << "Remember: You *mustn't* load any TSRs while in this DOS shell." << NL; - output << NL; - output << "This includes: GRAPHICS, PRINT, DOSKEY, and pop-up programs (like Sidekick.)" << NL; - output << NL; - output << "About to execute \"" << comspec << "\"..." << NL; - swapvectors; - exec("c:\\command.com",""); - swapvectors; - setintvec(0x1f,where); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	getintvec(0x1f, where); +	move(where, table, 1280); +	comspec = getenv("comspec"); +	table.data = table.data + "Avalot;"; +	setintvec(0x1f, &table); +	output << NL; +	output << "The Astounding Avvy DOS Shell...       don't forget to register!" << NL; +	output << NL; +	output << "Use the command EXIT to return to your game." << NL; +	output << NL; +	output << "Remember: You *mustn't* load any TSRs while in this DOS shell." << NL; +	output << NL; +	output << "This includes: GRAPHICS, PRINT, DOSKEY, and pop-up programs (like Sidekick.)" << NL; +	output << NL; +	output << "About to execute \"" << comspec << "\"..." << NL; +	swapvectors; +	exec("c:\\command.com", ""); +	swapvectors; +	setintvec(0x1f, where); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/shell2.cpp b/engines/avalanche/shell2.cpp index 1bc68dfc1c..9ca4e29599 100644 --- a/engines/avalanche/shell2.cpp +++ b/engines/avalanche/shell2.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 @@ -31,24 +31,28 @@  namespace Avalanche {  struct infotype { -            matrix<128,255,1,8,byte> chars; -            string data; +	matrix<128, 255, 1, 8, byte> chars; +	string data;  };  infotype table;  pointer where; -integer gd,gm; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - getintvec(0x1f,where); move(where,table,1280); - gd=1; gm=0; initgraph(gd,gm,"c:\\turbo"); - output << "Now in CGA low-res 320x200." << NL; - output << "High ASCII codes work- œœœ °±² ðððññóòôõ" << NL; - output << "And the code is..." << NL; - output << table.data << NL; - output << "Press Enter..." << NL; - input >> NL; closegraph(); -return EXIT_SUCCESS; +integer gd, gm; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	getintvec(0x1f, where); +	move(where, table, 1280); +	gd = 1; +	gm = 0; +	initgraph(gd, gm, "c:\\turbo"); +	output << "Now in CGA low-res 320x200." << NL; +	output << "High ASCII codes work- œœœ °±² ðððññóòôõ" << NL; +	output << "And the code is..." << NL; +	output << table.data << NL; +	output << "Press Enter..." << NL; +	input >> NL; +	closegraph(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/slope.cpp b/engines/avalanche/slope.cpp index 54ab3d0aa8..f54439178b 100644 --- a/engines/avalanche/slope.cpp +++ b/engines/avalanche/slope.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 @@ -28,8 +28,8 @@  namespace Avalanche {  struct joysetup { -            word xmid,ymid,xmin,ymin,xmax,ymax; -            byte centre; /* Size of centre in tenths */ +	word xmid, ymid, xmin, ymin, xmax, ymax; +	byte centre; /* Size of centre in tenths */  };  const integer bug_twonames = 255; @@ -42,335 +42,356 @@ const integer bug_weirdcard = 250;  byte fv;  char t;  string bugline; -boolean usingp,usingl; -boolean zoomy,numlockhold; +boolean usingp, usingl; +boolean zoomy, numlockhold;  boolean doing_syntax; -joysetup js; boolean use_joy_a; +joysetup js; +boolean use_joy_a;  boolean filename_specified;  boolean soundfx; -string inihead,initail; /* For reading the .INI file. */ +string inihead, initail; /* For reading the .INI file. */  string filetoload; -boolean cl_override,keyboardclick,demo; +boolean cl_override, keyboardclick, demo;  string slopeline; -word storage_seg,storage_ofs; +word storage_seg, storage_ofs;  string argon; -longint soundcard,baseaddr,speed,irq,dma; +longint soundcard, baseaddr, speed, irq, dma; -string strf(longint x) -{ -    string q; +string strf(longint x) { +	string q; - string strf_result; - str(x,q); strf_result=q; - return strf_result; +	string strf_result; +	str(x, q); +	strf_result = q; +	return strf_result;  } -void linebug(byte which) -{ - output << "AVALOT : "; - switch (which) { -  case bug_twonames : output << "You may only specify ONE filename." << NL; break; -  case bug_pandl : output << "/p and /l cannot be used together." << NL; break; -  case bug_weirdswitch : output << "Unknown switch (\"" << bugline <<  -                       "\"). Type AVALOT /? for a list of switches." << NL; -                       break; -  case bug_invalidini: output << "Invalid line in AVALOT.INI (\"" << bugline << "\")" << NL; break; -  case bug_notyesorno: output << "Error in AVALOT.INI: \"" << inihead << "\" must be \"yes\" or \"no.\"" << NL; break; -  case bug_weirdcard: output << "Unknown card: " << bugline << '.' << NL; break; - } - - exit(which); +void linebug(byte which) { +	output << "AVALOT : "; +	switch (which) { +	case bug_twonames : +		output << "You may only specify ONE filename." << NL; +		break; +	case bug_pandl : +		output << "/p and /l cannot be used together." << NL; +		break; +	case bug_weirdswitch : +		output << "Unknown switch (\"" << bugline << +		       "\"). Type AVALOT /? for a list of switches." << NL; +		break; +	case bug_invalidini: +		output << "Invalid line in AVALOT.INI (\"" << bugline << "\")" << NL; +		break; +	case bug_notyesorno: +		output << "Error in AVALOT.INI: \"" << inihead << "\" must be \"yes\" or \"no.\"" << NL; +		break; +	case bug_weirdcard: +		output << "Unknown card: " << bugline << '.' << NL; +		break; +	} + +	exit(which);  } -longint card(string x) -{ - longint card_result; - if (x=="NONE")  card_result=0; else - if (x=="SB")  card_result=1; else - if (x=="SBPRO")  card_result=2; else - if (x=="SB16")  card_result=3; else - if (x=="PAS")  card_result=4; else - if (x=="PASPLUS")  card_result=5; else - if (x=="PAS16")  card_result=6; else - if (x=="ARIA")  card_result=7; else - if (x=="WINSOUND")  card_result=8; else - if (x=="GRAVIS")  card_result=9; else - if (x=="DACLPT")  card_result=10; else - if (x=="STEREODACS")  card_result=11; else - if (x=="STEREOON1")  card_result=12; else - if (x=="SPEAKER")  card_result=13; else -  linebug(bug_weirdcard); - return card_result; +longint card(string x) { +	longint card_result; +	if (x == "NONE")  card_result = 0; +	else if (x == "SB")  card_result = 1; +	else if (x == "SBPRO")  card_result = 2; +	else if (x == "SB16")  card_result = 3; +	else if (x == "PAS")  card_result = 4; +	else if (x == "PASPLUS")  card_result = 5; +	else if (x == "PAS16")  card_result = 6; +	else if (x == "ARIA")  card_result = 7; +	else if (x == "WINSOUND")  card_result = 8; +	else if (x == "GRAVIS")  card_result = 9; +	else if (x == "DACLPT")  card_result = 10; +	else if (x == "STEREODACS")  card_result = 11; +	else if (x == "STEREOON1")  card_result = 12; +	else if (x == "SPEAKER")  card_result = 13; +	else +		linebug(bug_weirdcard); +	return card_result;  } -void upstr(string& x) -{ -    byte fv; +void upstr(string &x) { +	byte fv; - for( fv=1; fv <= length(x); fv ++) x[fv]=upcase(x[fv]); +	for (fv = 1; fv <= length(x); fv ++) x[fv] = upcase(x[fv]);  } -boolean yesno() -{ - boolean yesno_result; - if (initail=="YES")  yesno_result=true; else -  if (initail=="NO")  yesno_result=false; else -   linebug(bug_notyesorno); - return yesno_result; +boolean yesno() { +	boolean yesno_result; +	if (initail == "YES")  yesno_result = true; +	else if (initail == "NO")  yesno_result = false; +	else +		linebug(bug_notyesorno); +	return yesno_result;  } -word value(string x) -{ -      const varying_string<15> hexdigits = "0123456789ABCDEF"; -    word w; integer e; - -   word value_result; -   if (x[1]=='$')  -   { -      w=0; -      for( e=2; e <= length(x); e ++) -      { -         w=w << 4; -         w += pos(upcase(x[e]),hexdigits)-1; -      } -      value_result=w; -   } else -   { -      val(x,w,e); -      if (e==0)  value_result=w; else value_result=0; -   } -   return value_result; +word value(string x) { +	const varying_string<15> hexdigits = "0123456789ABCDEF"; +	word w; +	integer e; + +	word value_result; +	if (x[1] == '$') { +		w = 0; +		for (e = 2; e <= length(x); e ++) { +			w = w << 4; +			w += pos(upcase(x[e]), hexdigits) - 1; +		} +		value_result = w; +	} else { +		val(x, w, e); +		if (e == 0)  value_result = w; +		else value_result = 0; +	} +	return value_result;  } -void ini_parse() -{ - upstr(inihead); - upstr(initail); - - if (inihead=="QUIET")  soundfx=! yesno(); else -  if (inihead=="ZOOMYSTART")  zoomy=yesno(); else -   if (inihead=="NUMLOCKHOLD")  numlockhold=yesno(); else -    if (inihead=="LOADFIRST")  filetoload=initail; else -     if (inihead=="OVERRIDEEGACHECK")  cl_override=yesno(); else -      if (inihead=="KEYBOARDCLICK")  keyboardclick=yesno(); else -       if (inihead=="JOYTOP")  js.ymin=value(initail); else -        if (inihead=="JOYBOTTOM")  js.ymax=value(initail); else -         if (inihead=="JOYLEFT")  js.xmin=value(initail); else -          if (inihead=="JOYRIGHT")  js.xmax=value(initail); else -           if (inihead=="JOYMIDX")  js.xmid=value(initail); else -            if (inihead=="JOYMIDY")  js.ymid=value(initail); else -             if (inihead=="JOYCENTRINGFACTOR")  js.centre=value(initail); else -              if (inihead=="WHICHJOY")  use_joy_a=value(initail)==1; else -               if (inihead=="SOUNDCARD")  soundcard=card(initail); else -                if (inihead=="BASEADDRESS")  baseaddr=value(initail); else -                 if (inihead=="IRQ")  irq=value(initail); else -                  if (inihead=="DMA")  dma=value(initail); else -                   if (inihead=="SAMPLERATE")  speed=value(initail); +void ini_parse() { +	upstr(inihead); +	upstr(initail); + +	if (inihead == "QUIET")  soundfx = ! yesno(); +	else if (inihead == "ZOOMYSTART")  zoomy = yesno(); +	else if (inihead == "NUMLOCKHOLD")  numlockhold = yesno(); +	else if (inihead == "LOADFIRST")  filetoload = initail; +	else if (inihead == "OVERRIDEEGACHECK")  cl_override = yesno(); +	else if (inihead == "KEYBOARDCLICK")  keyboardclick = yesno(); +	else if (inihead == "JOYTOP")  js.ymin = value(initail); +	else if (inihead == "JOYBOTTOM")  js.ymax = value(initail); +	else if (inihead == "JOYLEFT")  js.xmin = value(initail); +	else if (inihead == "JOYRIGHT")  js.xmax = value(initail); +	else if (inihead == "JOYMIDX")  js.xmid = value(initail); +	else if (inihead == "JOYMIDY")  js.ymid = value(initail); +	else if (inihead == "JOYCENTRINGFACTOR")  js.centre = value(initail); +	else if (inihead == "WHICHJOY")  use_joy_a = value(initail) == 1; +	else if (inihead == "SOUNDCARD")  soundcard = card(initail); +	else if (inihead == "BASEADDRESS")  baseaddr = value(initail); +	else if (inihead == "IRQ")  irq = value(initail); +	else if (inihead == "DMA")  dma = value(initail); +	else if (inihead == "SAMPLERATE")  speed = value(initail);  } -void strip_ini() -{ -    byte fv; +void strip_ini() { +	byte fv; - if (inihead=="")  return; +	if (inihead == "")  return; - /* Firstly, delete any comments. */ - fv=pos(";",inihead); - if (fv>0)  Delete(inihead,fv,255); +	/* Firstly, delete any comments. */ +	fv = pos(";", inihead); +	if (fv > 0)  Delete(inihead, fv, 255); - /* Lose the whitespace... */ +	/* Lose the whitespace... */ - while (inihead[length(inihead)]==' ')  inihead[0] -= 1; - while ((inihead!="") && (inihead[1]==' '))  Delete(inihead,1,1); +	while (inihead[length(inihead)] == ' ')  inihead[0] -= 1; +	while ((inihead != "") && (inihead[1] == ' '))  Delete(inihead, 1, 1); - /* It's possible that now we'll end up with a blank line. */ +	/* It's possible that now we'll end up with a blank line. */ - if ((inihead=="") || (inihead[1]=='['))  return; +	if ((inihead == "") || (inihead[1] == '['))  return; - fv=pos("=",inihead); +	fv = pos("=", inihead); - if (fv==0)  - {     /* No "="! Weird! */ -  bugline=inihead; -  linebug(bug_invalidini); - } +	if (fv == 0) { +		/* No "="! Weird! */ +		bugline = inihead; +		linebug(bug_invalidini); +	} - initail=copy(inihead,fv+1,255); - inihead[0]=chr(fv-1); +	initail = copy(inihead, fv + 1, 255); +	inihead[0] = chr(fv - 1);  } -void load_ini() -{ -    text ini; +void load_ini() { +	text ini; - assign(ini,"AVALOT.INI"); - reset(ini); +	assign(ini, "AVALOT.INI"); +	reset(ini); - while (! eof(ini))  - { -  ini >> inihead >> NL; -  strip_ini(); -  if (inihead!="")  ini_parse(); - } +	while (! eof(ini)) { +		ini >> inihead >> NL; +		strip_ini(); +		if (inihead != "")  ini_parse(); +	} - close(ini); +	close(ini);  }  void parse(string x);  static string arg; -static string getarg(string otherwis) -{ - string getarg_result; - if (arg=="")  getarg_result=otherwis; else getarg_result=arg; - return getarg_result; +static string getarg(string otherwis) { +	string getarg_result; +	if (arg == "")  getarg_result = otherwis; +	else getarg_result = arg; +	return getarg_result;  }  void parse(string x)  { - switch (x[1]) { -  case '/':case '-': { -            arg=copy(x,3,255); -            switch (upcase(x[2])) { -             case '?': doing_syntax=true; break; -             case 'O': cl_override=true; break; -             case 'L': if (! usingp)  -                  { -                   usingl=true; -                   argon=getarg("avvy.log"); -                  } else linebug(bug_pandl); -                  break; -             case 'P': if (! usingl)  -                  { -                   usingp=true; -                   argon=getarg("prn"); -                  } else linebug(bug_pandl); -                  break; -             case 'Q': soundfx=false; break; -             case 'Z': zoomy=true; break; -             case 'K': keyboardclick=true; break; -             case 'D': demo=true; break; -             default: { -              bugline=x; -              linebug(bug_weirdswitch); -             } -            } -           } -           break; -  case '*': { -        inihead=copy(x,2,255); -        strip_ini(); -        if (inihead!="")  ini_parse(); -       } -       break; -  default: { /* filename */ -        if (filename_specified)  -         linebug(bug_twonames); -        else -         filetoload=x; -        filename_specified=true; -       } - } +	switch (x[1]) { +	case '/': +	case '-': { +		arg = copy(x, 3, 255); +		switch (upcase(x[2])) { +		case '?': +			doing_syntax = true; +			break; +		case 'O': +			cl_override = true; +			break; +		case 'L': +			if (! usingp) { +				usingl = true; +				argon = getarg("avvy.log"); +			} else linebug(bug_pandl); +			break; +		case 'P': +			if (! usingl) { +				usingp = true; +				argon = getarg("prn"); +			} else linebug(bug_pandl); +			break; +		case 'Q': +			soundfx = false; +			break; +		case 'Z': +			zoomy = true; +			break; +		case 'K': +			keyboardclick = true; +			break; +		case 'D': +			demo = true; +			break; +		default: { +			bugline = x; +			linebug(bug_weirdswitch); +		} +		} +	} +	break; +	case '*': { +		inihead = copy(x, 2, 255); +		strip_ini(); +		if (inihead != "")  ini_parse(); +	} +	break; +	default: { /* filename */ +		if (filename_specified) +			linebug(bug_twonames); +		else +			filetoload = x; +		filename_specified = true; +	} +	}  }  void make_slopeline(); -static char yn1(boolean b) -{ - char yn1_result; - if (b)  yn1_result='y'; else yn1_result='n'; - return yn1_result; +static char yn1(boolean b) { +	char yn1_result; +	if (b)  yn1_result = 'y'; +	else yn1_result = 'n'; +	return yn1_result;  } -static char pln() -{ - char pln_result; - if ((! usingp) && (! usingl))  pln_result='n'; else -   if (usingp)  pln_result='p'; else -    if (usingl)  pln_result='l'; - return pln_result; +static char pln() { +	char pln_result; +	if ((! usingp) && (! usingl))  pln_result = 'n'; +	else if (usingp)  pln_result = 'p'; +	else if (usingl)  pln_result = 'l'; +	return pln_result;  }  void make_slopeline()  { - if (argon=="")  argon="nul"; - -  slopeline=string('1')+yn1(doing_syntax)+yn1(soundfx)+yn1(cl_override)+ -   yn1(keyboardclick)+pln()+yn1(demo)+yn1(zoomy)+yn1(numlockhold)+ -   yn1(use_joy_a)+ -    ' '+strf(js.xmid)+ -    ' '+strf(js.ymid)+ -    ' '+strf(js.xmin)+ -    ' '+strf(js.ymin)+ -    ' '+strf(js.xmax)+ -    ' '+strf(js.ymax)+ -    ' '+strf(js.centre)+ -    ' '+argon+' '+filetoload; +	if (argon == "")  argon = "nul"; + +	slopeline = string('1') + yn1(doing_syntax) + yn1(soundfx) + yn1(cl_override) + +	            yn1(keyboardclick) + pln() + yn1(demo) + yn1(zoomy) + yn1(numlockhold) + +	            yn1(use_joy_a) + +	            ' ' + strf(js.xmid) + +	            ' ' + strf(js.ymid) + +	            ' ' + strf(js.xmin) + +	            ' ' + strf(js.ymin) + +	            ' ' + strf(js.xmax) + +	            ' ' + strf(js.ymax) + +	            ' ' + strf(js.centre) + +	            ' ' + argon + ' ' + filetoload;  } -void store_slopeline() -{ - move(slopeline,mem[storage_seg*storage_ofs+3],sizeof(slopeline)); - move(js,mem[storage_seg*storage_ofs+300],sizeof(js)); - move(soundcard,mem[storage_seg*storage_ofs+5000],4); - move(baseaddr,mem[storage_seg*storage_ofs+5004],4); - move(irq,mem[storage_seg*storage_ofs+5008],4); - move(dma,mem[storage_seg*storage_ofs+5012],4); - move(speed,mem[storage_seg*storage_ofs+5016],4); +void store_slopeline() { +	move(slopeline, mem[storage_seg * storage_ofs + 3], sizeof(slopeline)); +	move(js, mem[storage_seg * storage_ofs + 300], sizeof(js)); +	move(soundcard, mem[storage_seg * storage_ofs + 5000], 4); +	move(baseaddr, mem[storage_seg * storage_ofs + 5004], 4); +	move(irq, mem[storage_seg * storage_ofs + 5008], 4); +	move(dma, mem[storage_seg * storage_ofs + 5012], 4); +	move(speed, mem[storage_seg * storage_ofs + 5016], 4);  }  void get_storage_addr(); -static void not_through_bootstrap() -{ output << "Not standalone!" << NL; exit(255); } +static void not_through_bootstrap() { +	output << "Not standalone!" << NL; +	exit(255); +} -void get_storage_addr() -{ -    integer e; +void get_storage_addr() { +	integer e; - if (paramstr(1)!="jsb")  not_through_bootstrap(); - val(paramstr(2),storage_seg,e); if (e!=0)  not_through_bootstrap(); - val(paramstr(3),storage_ofs,e); if (e!=0)  not_through_bootstrap(); +	if (paramstr(1) != "jsb")  not_through_bootstrap(); +	val(paramstr(2), storage_seg, e); +	if (e != 0)  not_through_bootstrap(); +	val(paramstr(3), storage_ofs, e); +	if (e != 0)  not_through_bootstrap();  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - get_storage_addr(); - - filetoload=""; argon=""; - usingl=false; - usingp=false; - cl_override=false; - soundfx=true; - zoomy=false; - numlockhold=false; - filename_specified=false; - keyboardclick=false; - doing_syntax=false; - soundcard=0; baseaddr=0; irq=0; dma=0; - - load_ini(); - - for( fv=4; fv <= paramcount; fv ++) -  parse(paramstr(fv)); - - make_slopeline(); - - store_slopeline(); - return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	get_storage_addr(); + +	filetoload = ""; +	argon = ""; +	usingl = false; +	usingp = false; +	cl_override = false; +	soundfx = true; +	zoomy = false; +	numlockhold = false; +	filename_specified = false; +	keyboardclick = false; +	doing_syntax = false; +	soundcard = 0; +	baseaddr = 0; +	irq = 0; +	dma = 0; + +	load_ini(); + +	for (fv = 4; fv <= paramcount; fv ++) +		parse(paramstr(fv)); + +	make_slopeline(); + +	store_slopeline(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/spread.cpp b/engines/avalanche/spread.cpp index acc9535b64..21e73cac46 100644 --- a/engines/avalanche/spread.cpp +++ b/engines/avalanche/spread.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 @@ -31,303 +31,390 @@  namespace Avalanche {  struct adxtype { -           varying_string<12> name; /* name of character */ -           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 */ +	varying_string<12> name; /* name of character */ +	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 */  };  varying_string<3> sn;  adxtype a; -matrix<1,24,0,1,pointer> pic;     /* the pictures themselves */ +matrix<1, 24, 0, 1, pointer> pic; /* the pictures themselves */  word bigsize; -const array<0,15,varying_string<6> > col =  - {{"Black","Blue","Green","Cyan","Red","Pink","Brown","Grey+", -  "Grey-","Blue+","Green+","Cyan+","Red+","Pink+","Yellow","White"}}; -const string prompt = string('\32')+'\257'; +const array<0, 15, varying_string<6> > col = { +	{ +		"Black", "Blue", "Green", "Cyan", "Red", "Pink", "Brown", "Grey+", +		"Grey-", "Blue+", "Green+", "Cyan+", "Red+", "Pink+", "Yellow", "White" +	} +}; +const string prompt = string('\32') + '\257'; -void load() -{ - untyped_file f; byte gd,gm,sort,n; pointer p,q; -; - assign(f,string("v:sprite")+sn+".avd"); reset(f,1); seek(f,59); - blockread(f,a,sizeof(a)); blockread(f,bigsize,2); - setactivepage(3); - for( sort=0; sort <= 1; sort ++) - {; -  mark(q); getmem(p,bigsize); -  blockread(f,p,bigsize); -  putimage(0,0,p,0); release(q); n=1; -   for( gm=0; gm <= (a.num / a.seq)-1; gm ++) /* directions */ -    for( gd=0; gd <= a.seq-1; gd ++) /* steps */ -    {; -     getmem(pic[n][sort],a.size); /* grab the memory */ -     getimage((gm / 2)*(a.xl*6)+gd*a.xl,(gm % 2)*a.yl, -       (gm / 2)*(a.xl*6)+gd*a.xl+a.xl-1,(gm % 2)*a.yl+a.yl-1, -       pic[n][sort]); /* grab the pic */ -     n += 1; -   } - } - close(f); setactivepage(0); +void load() { +	untyped_file f; +	byte gd, gm, sort, n; +	pointer p, q; +	; +	assign(f, string("v:sprite") + sn + ".avd"); +	reset(f, 1); +	seek(f, 59); +	blockread(f, a, sizeof(a)); +	blockread(f, bigsize, 2); +	setactivepage(3); +	for (sort = 0; sort <= 1; sort ++) { +		; +		mark(q); +		getmem(p, bigsize); +		blockread(f, p, bigsize); +		putimage(0, 0, p, 0); +		release(q); +		n = 1; +		for (gm = 0; gm <= (a.num / a.seq) - 1; gm ++) /* directions */ +			for (gd = 0; gd <= a.seq - 1; gd ++) { /* steps */ +				; +				getmem(pic[n][sort], a.size); /* grab the memory */ +				getimage((gm / 2) * (a.xl * 6) + gd * a.xl, (gm % 2)*a.yl, +				         (gm / 2) * (a.xl * 6) + gd * a.xl + a.xl - 1, (gm % 2)*a.yl + a.yl - 1, +				         pic[n][sort]); /* grab the pic */ +				n += 1; +			} +	} +	close(f); +	setactivepage(0);  } -void save() -{ - untyped_file f; byte gd,gm,sort,n; pointer p,q; - string x; integer txl,tyl; -; - {; -  txl=a.seq*a.xl*2; tyl=a.yl*2; - } +void save() { +	untyped_file f; +	byte gd, gm, sort, n; +	pointer p, q; +	string x; +	integer txl, tyl; +	; +	{ +		; +		txl = a.seq * a.xl * 2; +		tyl = a.yl * 2; +	} - assign(f,string("v:sprite")+sn+".avd"); - x=string("Sprite file for Avvy - Trippancy IV. Subject to copyright.")+'\32'; - rewrite(f,1); blockwrite(f,x[1],59); +	assign(f, string("v:sprite") + sn + ".avd"); +	x = string("Sprite file for Avvy - Trippancy IV. Subject to copyright.") + '\32'; +	rewrite(f, 1); +	blockwrite(f, x[1], 59); - blockwrite(f,a,sizeof(a)); blockwrite(f,bigsize,2); - setactivepage(3); - for( sort=0; sort <= 1; sort ++) - {; -  mark(q); getmem(p,bigsize); n=1; -   for( gm=0; gm <= (a.num / a.seq)-1; gm ++) /* directions */ -    for( gd=0; gd <= a.seq-1; gd ++) /* steps */ -    {; -     putimage((gm / 2)*(a.xl*6)+gd*a.xl,(gm % 2)*a.yl, -       pic[n][sort],0); /* drop the pic */ -     n += 1; -   } -  getimage(0,0,txl,tyl,p); -  blockwrite(f,p,bigsize); release(q); - } - close(f); setactivepage(0); +	blockwrite(f, a, sizeof(a)); +	blockwrite(f, bigsize, 2); +	setactivepage(3); +	for (sort = 0; sort <= 1; sort ++) { +		; +		mark(q); +		getmem(p, bigsize); +		n = 1; +		for (gm = 0; gm <= (a.num / a.seq) - 1; gm ++) /* directions */ +			for (gd = 0; gd <= a.seq - 1; gd ++) { /* steps */ +				; +				putimage((gm / 2) * (a.xl * 6) + gd * a.xl, (gm % 2)*a.yl, +				         pic[n][sort], 0); /* drop the pic */ +				n += 1; +			} +		getimage(0, 0, txl, tyl, p); +		blockwrite(f, p, bigsize); +		release(q); +	} +	close(f); +	setactivepage(0);  } -void setup() -{ -    integer gd,gm; -; - output << "SPREAD (c) 1992, Thomas Thurman." << NL; output << NL; - output << "Enter number of SPRITE*.AVD file to edit:"; input >> sn >> NL; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); +void setup() { +	integer gd, gm; +	; +	output << "SPREAD (c) 1992, Thomas Thurman." << NL; +	output << NL; +	output << "Enter number of SPRITE*.AVD file to edit:"; +	input >> sn >> NL; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load();  } -string strf(longint x) -{ -    string q; -string strf_result; -; - str(x,q); strf_result=q; -return strf_result; +string strf(longint x) { +	string q; +	string strf_result; +	; +	str(x, q); +	strf_result = q; +	return strf_result;  } -void likethis() -{; - {; -  setfillstyle(1,a.bgc); setcolor(a.fgc); settextstyle(0,0,1); -  bar(0,190,100,200); outtextxy(12,191,"Like this!"); - } +void likethis() { +	; +	{ +		; +		setfillstyle(1, a.bgc); +		setcolor(a.fgc); +		settextstyle(0, 0, 1); +		bar(0, 190, 100, 200); +		outtextxy(12, 191, "Like this!"); +	}  } -void values() -{ -    byte fv; -; - settextstyle(2,0,9); setcolor(14); - outtextxy(277,0,string("Spread: editing ")+sn); setcolor(15); -           for( fv=0; fv <= 3; fv ++) putimage(77+(a.xl+10)*fv,17,pic[a.seq*fv+1][1],0); - settextstyle(2,0,7); - outtextxy(0, 30,"Views:"); - {; -  outtextxy(0, 50,string("N: Name: ")+a.name); -  outtextxy(0, 70,string("No. of pictures: ")+strf(a.num)+" ("+strf(a.num / a.seq)+" ways)"); -  outtextxy(0, 90,string("XY: Size: ")+strf(a.xl)+'x'+strf(a.yl)); -  outtextxy(0,110,string("S: Stride size: ")+strf(a.seq)); -  outtextxy(0,130,string("Imagesize (bytes): ")+strf(a.size)); -  outtextxy(0,150,string("B: Bubble background: ")+col[a.bgc]); -  outtextxy(0,170,string("F: Bubble foreground: ")+col[a.fgc]); -  likethis(); - } - setcolor(lightgreen); settextstyle(0,0,1); - outtextxy(400,50,"A) Animate"); - outtextxy(400,60,"E) Edit pictures"); - outtextxy(400,70,"alt-f2) Save"); - outtextxy(400,80,"ctrl-f3) Load"); - outtextxy(400,90,"or any key to the left..."); +void values() { +	byte fv; +	; +	settextstyle(2, 0, 9); +	setcolor(14); +	outtextxy(277, 0, string("Spread: editing ") + sn); +	setcolor(15); +	for (fv = 0; fv <= 3; fv ++) putimage(77 + (a.xl + 10)*fv, 17, pic[a.seq * fv + 1][1], 0); +	settextstyle(2, 0, 7); +	outtextxy(0, 30, "Views:"); +	{ +		; +		outtextxy(0, 50, string("N: Name: ") + a.name); +		outtextxy(0, 70, string("No. of pictures: ") + strf(a.num) + " (" + strf(a.num / a.seq) + " ways)"); +		outtextxy(0, 90, string("XY: Size: ") + strf(a.xl) + 'x' + strf(a.yl)); +		outtextxy(0, 110, string("S: Stride size: ") + strf(a.seq)); +		outtextxy(0, 130, string("Imagesize (bytes): ") + strf(a.size)); +		outtextxy(0, 150, string("B: Bubble background: ") + col[a.bgc]); +		outtextxy(0, 170, string("F: Bubble foreground: ") + col[a.fgc]); +		likethis(); +	} +	setcolor(lightgreen); +	settextstyle(0, 0, 1); +	outtextxy(400, 50, "A) Animate"); +	outtextxy(400, 60, "E) Edit pictures"); +	outtextxy(400, 70, "alt-f2) Save"); +	outtextxy(400, 80, "ctrl-f3) Load"); +	outtextxy(400, 90, "or any key to the left...");  } -byte ccol() -{ -    byte fv; -byte ccol_result; -; - restorecrtmode(); - output << "Choose a colour- one of these..." << NL; - for( fv=0; fv <= 15; fv ++) - {; -  textattr=14; output << fv << ") "; textattr=fv; output << string('\376')+'\40'; -  textattr=14; output << col[fv] << NL; - } - textattr=14; - do { -  output << prompt; input >> fv >> NL; - } while (!(fv<16)); - ccol_result=fv; setgraphmode(0); -return ccol_result; +byte ccol() { +	byte fv; +	byte ccol_result; +	; +	restorecrtmode(); +	output << "Choose a colour- one of these..." << NL; +	for (fv = 0; fv <= 15; fv ++) { +		; +		textattr = 14; +		output << fv << ") "; +		textattr = fv; +		output << string('\376') + '\40'; +		textattr = 14; +		output << col[fv] << NL; +	} +	textattr = 14; +	do { +		output << prompt; +		input >> fv >> NL; +	} while (!(fv < 16)); +	ccol_result = fv; +	setgraphmode(0); +	return ccol_result;  } -string cstr(string oc) -{ -    string x; -string cstr_result; -; - restorecrtmode(); - output << string("Old choice is: <")+oc+'>' << NL; - output << NL; - output << "(Anything after a semi-colon will not be displayed by the game, e.g. Avvy;Monk" << NL; - output << " will be displayed as Avvy.)" << NL; - output << NL; - output << string("New choice, Enter for no change, Space+Enter for a blank?")+prompt; input >> x >> NL; - if (x=="")  cstr_result=oc; else if (x==' ')  cstr_result=""; else cstr_result=x; - setgraphmode(0); -return cstr_result; +string cstr(string oc) { +	string x; +	string cstr_result; +	; +	restorecrtmode(); +	output << string("Old choice is: <") + oc + '>' << NL; +	output << NL; +	output << "(Anything after a semi-colon will not be displayed by the game, e.g. Avvy;Monk" << NL; +	output << " will be displayed as Avvy.)" << NL; +	output << NL; +	output << string("New choice, Enter for no change, Space+Enter for a blank?") + prompt; +	input >> x >> NL; +	if (x == "")  cstr_result = oc; +	else if (x == ' ')  cstr_result = ""; +	else cstr_result = x; +	setgraphmode(0); +	return cstr_result;  } -longint cnum(longint on) -{ -    string x; longint q; integer e; -longint cnum_result; -; - restorecrtmode(); - do { -  output << "Old value is: " << on << '.' << NL; -  output << string("New choice, or Enter for no change?")+prompt; input >> x >> NL; -  if (x=="")  -  {; -   e=0;  /* must be OK here */ q=on; -  } else val(x,q,e); -  if (e!=0)  output << x << " isn't a number, silly!" << NL; - } while (!(e==0)); - setgraphmode(0); cnum_result=q; -return cnum_result; +longint cnum(longint on) { +	string x; +	longint q; +	integer e; +	longint cnum_result; +	; +	restorecrtmode(); +	do { +		output << "Old value is: " << on << '.' << NL; +		output << string("New choice, or Enter for no change?") + prompt; +		input >> x >> NL; +		if (x == "") { +			; +			e = 0;  /* must be OK here */ q = on; +		} else val(x, q, e); +		if (e != 0)  output << x << " isn't a number, silly!" << NL; +	} while (!(e == 0)); +	setgraphmode(0); +	cnum_result = q; +	return cnum_result;  } -void animate() -{ -    byte facing,step,slow,fv; -; - cleardevice(); - settextstyle(0,0,2); setcolor(12); outtextxy(0,0,"Animate"); - settextstyle(0,0,1); setcolor(15); - outtextxy(0,20,"Enter = Turn, + = Faster, - = Slower, Esc = stop this."); - facing=0; step=1; slow=100; -  do { -   for( fv=0; fv <= 1; fv ++) -    putimage(200*fv+177,77,pic[facing*a.seq+step][fv],4-fv*4); -   if (keypressed())  -    switch (upcase(readkey())) { -     case '\15': {; -           facing += 1; if (facing*a.seq>=a.num)  facing=0; -          } -          break; -     case '\33': {; cleardevice(); return; } break; -     case '+': if (slow>0)  slow -= 5; break; -     case '-': if (slow<255)  slow += 5; break; default: output << '\7'; -    } -   step += 1; if (step>a.seq)  step=1; -   delay(slow); -  } while (!false); +void animate() { +	byte facing, step, slow, fv; +	; +	cleardevice(); +	settextstyle(0, 0, 2); +	setcolor(12); +	outtextxy(0, 0, "Animate"); +	settextstyle(0, 0, 1); +	setcolor(15); +	outtextxy(0, 20, "Enter = Turn, + = Faster, - = Slower, Esc = stop this."); +	facing = 0; +	step = 1; +	slow = 100; +	do { +		for (fv = 0; fv <= 1; fv ++) +			putimage(200 * fv + 177, 77, pic[facing * a.seq + step][fv], 4 - fv * 4); +		if (keypressed()) +			switch (upcase(readkey())) { +			case '\15': { +				; +				facing += 1; +				if (facing * a.seq >= a.num)  facing = 0; +			} +			break; +			case '\33': { +				; +				cleardevice(); +				return; +			} +			break; +			case '+': +				if (slow > 0)  slow -= 5; +				break; +			case '-': +				if (slow < 255)  slow += 5; +				break; +			default: +				output << '\7'; +			} +		step += 1; +		if (step > a.seq)  step = 1; +		delay(slow); +	} while (!false);  } -byte tabpel(integer x,integer y) -{byte tabpel_result; -; - if (getpixel(400+x,17+y)==15)  tabpel_result=17; -  else tabpel_result=getpixel(500+x,17+y); -return tabpel_result; +byte tabpel(integer x, integer y) { +	byte tabpel_result; +	; +	if (getpixel(400 + x, 17 + y) == 15)  tabpel_result = 17; +	else tabpel_result = getpixel(500 + x, 17 + y); +	return tabpel_result;  } -void bigpixel(integer x,integer y, byte size,byte col) -{; - if (col==17)  setfillstyle(9,8); else setfillstyle(1,col); - bar(x*size,y*size,x*size+size-2,y*size+size-2); +void bigpixel(integer x, integer y, byte size, byte col) { +	; +	if (col == 17)  setfillstyle(9, 8); +	else setfillstyle(1, col); +	bar(x * size, y * size, x * size + size - 2, y * size + size - 2);  } -void blowup(byte n) -{ -    byte fv,x,y,xyl; -; - {; -  for( fv=0; fv <= 1; fv ++) putimage(400+fv*100,17,pic[n][fv],0); -  xyl=200 / a.yl; -  for( x=0; x <= a.xl; x ++) -   for( y=0; y <= a.yl; y ++) -    bigpixel(x,y,xyl,tabpel(x,y)); - } +void blowup(byte n) { +	byte fv, x, y, xyl; +	; +	{ +		; +		for (fv = 0; fv <= 1; fv ++) putimage(400 + fv * 100, 17, pic[n][fv], 0); +		xyl = 200 / a.yl; +		for (x = 0; x <= a.xl; x ++) +			for (y = 0; y <= a.yl; y ++) +				bigpixel(x, y, xyl, tabpel(x, y)); +	}  }  void edit(); -static void putnum(byte x,byte p) -{ -    varying_string<2> z; -; - str(x,z); outtextxy(x*53+17,87,z); putimage(x*53,100,pic[p][1],0); +static void putnum(byte x, byte p) { +	varying_string<2> z; +	; +	str(x, z); +	outtextxy(x * 53 + 17, 87, z); +	putimage(x * 53, 100, pic[p][1], 0);  } -static void title() -{; - cleardevice(); setcolor(11); settextstyle(0,0,2); - outtextxy(0,0,"Edit- which one?"); settextstyle(0,0,1); setcolor(15); +static void title() { +	; +	cleardevice(); +	setcolor(11); +	settextstyle(0, 0, 2); +	outtextxy(0, 0, "Edit- which one?"); +	settextstyle(0, 0, 1); +	setcolor(15);  } -void edit() -{ - byte fv,ra,rb; -; - {; -  title(); for( fv=1; fv <= (a.num / a.seq); fv ++) putnum(fv,fv*a.seq); -  do { ra=ord(readkey())-48; } while (!(ra<(a.num / a.seq))); ra -= 1; -  title(); for( fv=1; fv <= a.seq; fv ++) putnum(fv,ra*a.seq+fv); -  do { rb=ord(readkey())-48; } while (!(rb<a.seq)); -  cleardevice(); -  blowup(ra*a.seq+rb); input >> NL; -  cleardevice(); - } +void edit() { +	byte fv, ra, rb; +	; +	{ +		; +		title(); +		for (fv = 1; fv <= (a.num / a.seq); fv ++) putnum(fv, fv * a.seq); +		do { +			ra = ord(readkey()) - 48; +		} while (!(ra < (a.num / a.seq))); +		ra -= 1; +		title(); +		for (fv = 1; fv <= a.seq; fv ++) putnum(fv, ra * a.seq + fv); +		do { +			rb = ord(readkey()) - 48; +		} while (!(rb < a.seq)); +		cleardevice(); +		blowup(ra * a.seq + rb); +		input >> NL; +		cleardevice(); +	}  } -void pickone() -{ -    char r; -; - r=upcase(readkey()); -  switch (r) { -   case 'N': a.name=cstr(a.name); break; -   case 'S': a.seq=cnum(a.seq); break; -   case 'F': a.fgc=ccol(); break; -   case 'B': a.bgc=ccol(); break; -   case 'A': animate(); break; -   case 'E': edit(); break; -   case '\0': switch (readkey()) { -        case 'i': save(); break; /* alt-f2 */ -       } -       break; -  } +void pickone() { +	char r; +	; +	r = upcase(readkey()); +	switch (r) { +	case 'N': +		a.name = cstr(a.name); +		break; +	case 'S': +		a.seq = cnum(a.seq); +		break; +	case 'F': +		a.fgc = ccol(); +		break; +	case 'B': +		a.bgc = ccol(); +		break; +	case 'A': +		animate(); +		break; +	case 'E': +		edit(); +		break; +	case '\0': +		switch (readkey()) { +		case 'i': +			save(); +			break; /* alt-f2 */ +		} +		break; +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - setup(); - do { -  values(); -  pickone(); - } while (!false); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	setup(); +	do { +		values(); +		pickone(); +	} while (!false); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/spread2.cpp b/engines/avalanche/spread2.cpp index 6fa215900e..c6c586921d 100644 --- a/engines/avalanche/spread2.cpp +++ b/engines/avalanche/spread2.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 @@ -34,723 +34,919 @@  namespace Avalanche {  const integer pattern = 12; /* Pattern for transparencies. */ -const fillpatterntype grey50 = {{0xaa, 0x55, 0xaa, - 0x55, 0xaa, 0x55, 0xaa, 0x55}}; +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.) */ +	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; +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; +byte leftc, rightc;  boolean lmo; -array<1,2,pointer> clip; -integer clipx,clipy; +array<1, 2, pointer> clip; +integer clipx, clipy;  boolean boardfull; -integer xofs,yofs; /* Distance of TL corner of cut from TL corner of pic. */ +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; +} -byte bigpix_size,bigpix_gap;  /* Size & gap betwixt big pixels. */ +string strf(longint x) { +	string q; +	string strf_result; +	; +	str(x, q); +	strf_result = q; +	return strf_result; +} -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); +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; -; +static void loseold() { +	; +	output << string('\10') + '\377'; +} - /* Sil... */ - getimage(500,150,500+a.xl,150+a.yl,aa); +static void drawnew() { +	; +	gotoxy(3 + fv * 5, 11); +	output << '\30'; +} - 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]; -   } +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); +} - /* ...Mani. */ +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; +} - getimage(500,50,500+a.xl,50+a.yl,aa); +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); +} - move(aa[5],mani,sizeof(mani)); +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 */ +/* Each character takes five-quarters of (a.size-6) on disk. */  { - byte fv,ff; word so1; /* size of one */ -; - {; +	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 */ +	} +} -  getsilmani(); /* Restore original arrays */ +void implode(byte which) {     /* Writes a pic back onto the 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 */ +		getsilmani(); /* Restore original arrays */ -  xw=a.xl / 8; if ((a.xl % 8)>0)  xw += 1; +		so1 = a.size - 6; +		so1 += so1 / 4; +		seek(sf, 183 + soa + so1 * which); /* First is at 221 */ -  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 */ - } +		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 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()  {; subplot( leftc,239,'\32'); }          /* palette arrows */ -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 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 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) +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. */  { -    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; +	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 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 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 animate() -{; +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 undo() -{; +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; -; +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; +	} +} - if ((leftc==16) || (rightc==16))  /* See-through can't be one of the colours. */ - {; -  output << '\7'; /* Bleep! */ -  return; - } +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); +} -  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); +void change_colours() {   /* Swaps one colour with another. */ +	byte fv, ff; +	; - for( fv=0; fv <= a.xl; fv ++) -  for( ff=0; ff <= a.yl; ff ++) -   bigpixel(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 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); @@ -759,125 +955,142 @@ 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')); +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; +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 diff --git a/engines/avalanche/squish.cpp b/engines/avalanche/squish.cpp index 231aae2168..fc49a5e7f1 100644 --- a/engines/avalanche/squish.cpp +++ b/engines/avalanche/squish.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 @@ -44,12 +44,12 @@ const integer empty = -3        /* Indicates empty                        */;  typedef varying_string<255> anystr/* General string type                  */; -                                /* One node in parsing table.             */ +/* One node in parsing table.             */  struct string_table_entry { -                        boolean used        /* Is this node used yet?      */; -                        integer prevchar    /* Code for preceding string   */; -                        integer follchar    /* Code for current character  */; -                        integer next        /* Next dupl in collision list */; +	boolean used        /* Is this node used yet?      */; +	integer prevchar    /* Code for preceding string   */; +	integer follchar    /* Code for current character  */; +	integer next        /* Next dupl in collision list */;  };  untyped_file input_file                   /* Input file   */; @@ -57,15 +57,15 @@ untyped_file output_file                  /* Output file  */;  integer inbufsize                         /* Count of chars in input buffer */; -array<1,maxbuff,byte> input_buffer         /* Input buffer area         */; -array<1,maxbuff,byte> output_buffer        /* Output buffer area        */; +array<1, maxbuff, byte> input_buffer         /* Input buffer area         */; +array<1, maxbuff, byte> output_buffer        /* Output buffer area        */;  integer input_pos                         /* Cur. pos. in input buffer   */;  integer output_pos                        /* Cur. pos. in output buffer  */; -                                          /* String table */ +/* String table */ -array<0,maxtab,string_table_entry> string_table; +array<0, maxtab, string_table_entry> string_table;  integer table_used                        /* # string table entries used */;  integer output_code                       /* Output compressed code      */; @@ -73,25 +73,28 @@ integer input_code                        /* Input compressed code       */;  boolean if_compressing                    /* TRUE if compressing file    */;  integer ierr                              /* Input/output error          */; -string header; varying_string<30> describe; byte method; +string header; +varying_string<30> describe; +byte method;  void terminate() -{     /* Terminate */ -                                   /* Write any remaining characters */ -                                   /* to output file.                */ -   if ( output_pos > 0 )  -      blockwrite( output_file, output_buffer, output_pos ); +{ +	/* Terminate */ +	/* Write any remaining characters */ +	/* to output file.                */ +	if (output_pos > 0) +		blockwrite(output_file, output_buffer, output_pos); -   ierr = ioresult; -                                   /* Close input and output files   */ -   close( input_file  ); -   ierr = ioresult; +	ierr = ioresult; +	/* Close input and output files   */ +	close(input_file); +	ierr = ioresult; -   close( output_file ); -   ierr = ioresult; +	close(output_file); +	ierr = ioresult; -   output << "done." << NL; +	output << "done." << NL;  }     /* Terminate */ @@ -99,90 +102,90 @@ void terminate()  /*          Get_Hash_Code --- Gets hash code for given <w>C string          */  /*--------------------------------------------------------------------------*/ -integer get_hash_code( integer prevc, integer follc ) +integer get_hash_code(integer prevc, integer follc)  { -   integer index; -   integer index2; +	integer index; +	integer index2; -      /* Get_Hash_Code */ -                                   /* Get initial index using hashing */ +	/* Get_Hash_Code */ +	/* Get initial index using hashing */ -   integer get_hash_code_result; -   index = ( ( prevc << 5 ) ^ follc ) & maxtab; +	integer get_hash_code_result; +	index = ((prevc << 5) ^ follc) & maxtab; -                                   /* If entry not already used, return */ -                                   /* its index as hash code for <w>C.  */ +	/* If entry not already used, return */ +	/* its index as hash code for <w>C.  */ -   if ( ! string_table[index].used )  -      get_hash_code_result = index; -   else -                                   /* If entry already used, search to  */ -                                   /* end of list of hash collision     */ -                                   /* entries for this hash code.       */ -                                   /* Do linear probe to find an        */ -                                   /* available slot.                   */ -      { +	if (! string_table[index].used) +		get_hash_code_result = index; +	else +		/* If entry already used, search to  */ +		/* end of list of hash collision     */ +		/* entries for this hash code.       */ +		/* Do linear probe to find an        */ +		/* available slot.                   */ +	{ -                                   /* Skip to end of collision list ... */ +		/* Skip to end of collision list ... */ -         while ( string_table[index].next != end_list )  -            index = string_table[index].next; +		while (string_table[index].next != end_list) +			index = string_table[index].next; -                                   /* Begin linear probe down a bit from  */ -                                   /* last entry in collision list ...    */ +		/* Begin linear probe down a bit from  */ +		/* last entry in collision list ...    */ -         index2 = ( index + 101 ) & maxtab; +		index2 = (index + 101) & maxtab; -                                   /* Look for unused entry using linear  */ -                                   /* probing ...                         */ +		/* Look for unused entry using linear  */ +		/* probing ...                         */ -         while ( string_table[index2].used )  -            index2 = succ(integer, index2 ) & maxtab; +		while (string_table[index2].used) +			index2 = succ(integer, index2) & maxtab; -                                   /* Point prior end of collision list   */ -                                   /* to this new node.                   */ +		/* Point prior end of collision list   */ +		/* to this new node.                   */ -         string_table[index].next = index2; +		string_table[index].next = index2; -                                   /* Return hash code for <w>C           */ +		/* Return hash code for <w>C           */ -         get_hash_code_result          = index2; +		get_hash_code_result          = index2; -      } +	} -   return get_hash_code_result; +	return get_hash_code_result;  }     /* Get_Hash_Code */  /*--------------------------------------------------------------------------*/  /*          Make_Table_Entry --- Enter <w>C string in string table          */  /*--------------------------------------------------------------------------*/ -void make_table_entry( integer prevc, integer follc ) - -{     /* Make_Table_Entry */ -                                   /* Only enter string if there is room left */ - -   if ( table_used <= maxtab )  -      { -         { -               string_table_entry& with = string_table[ get_hash_code( prevc , follc ) ];  +void make_table_entry(integer prevc, integer follc) -               with.used     = true; -               with.next     = end_list; -               with.prevchar = prevc; -               with.follchar = follc; -         } -                                   /* Increment count of items used */ - -         table_used += 1; -/* -         IF ( Table_Used > ( MaxTab + 1 ) ) THEN -            BEGIN -               WRITELN('Hash table full.'); -            END; -*/ -      } +{ +	/* Make_Table_Entry */ +	/* Only enter string if there is room left */ + +	if (table_used <= maxtab) { +		{ +			string_table_entry &with = string_table[ get_hash_code(prevc , follc) ]; + +			with.used     = true; +			with.next     = end_list; +			with.prevchar = prevc; +			with.follchar = follc; +		} +		/* Increment count of items used */ + +		table_used += 1; +		/* +		         IF ( Table_Used > ( MaxTab + 1 ) ) THEN +		            BEGIN +		               WRITELN('Hash table full.'); +		            END; +		*/ +	}  }     /* Make_Table_Entry */ @@ -193,26 +196,25 @@ void make_table_entry( integer prevc, integer follc )  void initialize_string_table()  { -   integer i; - -      /* Initialize_String_Table */ - -                                   /* No entries used in table yet */ -   table_used  = 0; -                                   /* Clear all table entries      */ -   for( i = 0; i <= maxtab; i ++) -      { -            string_table_entry& with = string_table[i];  - -            with.prevchar = no_prev; -            with.follchar = no_prev; -            with.next     = -1; -            with.used     = false; -      } -                                   /* Enter all single characters into */ -                                   /* table                            */ -   for( i = 0; i <= 255; i ++) -      make_table_entry( no_prev , i ); +	integer i; + +	/* Initialize_String_Table */ + +	/* No entries used in table yet */ +	table_used  = 0; +	/* Clear all table entries      */ +	for (i = 0; i <= maxtab; i ++) { +		string_table_entry &with = string_table[i]; + +		with.prevchar = no_prev; +		with.follchar = no_prev; +		with.next     = -1; +		with.used     = false; +	} +	/* Enter all single characters into */ +	/* table                            */ +	for (i = 0; i <= 255; i ++) +		make_table_entry(no_prev , i);  }     /* Initialize_String_Table */ @@ -223,60 +225,61 @@ void initialize_string_table()  void initialize()  { -   anystr input_name               /* Input file name  */; -   anystr output_name              /* Output file name */; - -      /* Initialize */ - - output << "Number of file to compress:"; input >> input_name >> NL; - output << "For the moment, I'm writing the compressed version to v:compr" <<  -            input_name << ".avd." << NL; - output_name=string("d:compr")+input_name+".avd"; -  input_name=string("d:place")+input_name+".avd"; - - output << "Wait... "; - -                                   /* Open input file */ - -   assign ( input_file , input_name ); -   reset  ( input_file , 1 ); -   ierr = ioresult; - - blockread(input_file,header,146); - blockread(input_file,describe,30); - blockread(input_file,method,1); - - if (method==177)  - {; -  output << "It's already compressed!" << NL; -  exit(177); - } - -                                   /* Open output file */ - -   assign ( output_file , output_name ); -   rewrite( output_file , 1 ); -   ierr = ioresult; - - method=177; - - blockwrite(output_file,header,146); - blockwrite(output_file,describe,30); - blockwrite(output_file,method,1); - -                                   /* Point input point past end of */ -                                   /* buffer to force initial read  */ -   input_pos  = maxbuff + 1; -                                   /* Nothing written out yet       */ -   output_pos = 0; -                                   /* Nothing read in yet           */ -   inbufsize  = 0; -                                   /* No input or output codes yet  */ -                                   /* constructed                   */ -   output_code = empty; -   input_code  = empty; -                                   /* Initialize string hash table  */ -   initialize_string_table(); +	anystr input_name               /* Input file name  */; +	anystr output_name              /* Output file name */; + +	/* Initialize */ + +	output << "Number of file to compress:"; +	input >> input_name >> NL; +	output << "For the moment, I'm writing the compressed version to v:compr" << +	       input_name << ".avd." << NL; +	output_name = string("d:compr") + input_name + ".avd"; +	input_name = string("d:place") + input_name + ".avd"; + +	output << "Wait... "; + +	/* Open input file */ + +	assign(input_file , input_name); +	reset(input_file , 1); +	ierr = ioresult; + +	blockread(input_file, header, 146); +	blockread(input_file, describe, 30); +	blockread(input_file, method, 1); + +	if (method == 177) { +		; +		output << "It's already compressed!" << NL; +		exit(177); +	} + +	/* Open output file */ + +	assign(output_file , output_name); +	rewrite(output_file , 1); +	ierr = ioresult; + +	method = 177; + +	blockwrite(output_file, header, 146); +	blockwrite(output_file, describe, 30); +	blockwrite(output_file, method, 1); + +	/* Point input point past end of */ +	/* buffer to force initial read  */ +	input_pos  = maxbuff + 1; +	/* Nothing written out yet       */ +	output_pos = 0; +	/* Nothing read in yet           */ +	inbufsize  = 0; +	/* No input or output codes yet  */ +	/* constructed                   */ +	output_code = empty; +	input_code  = empty; +	/* Initialize string hash table  */ +	initialize_string_table();  }     /* Initialize */ @@ -284,66 +287,66 @@ void initialize()  /*            Lookup_String --- Look for string <w>C in string table        */  /*--------------------------------------------------------------------------*/ -integer lookup_string( integer prevc, integer follc ) +integer lookup_string(integer prevc, integer follc)  { -   integer index; -   integer index2; -   boolean found; +	integer index; +	integer index2; +	boolean found; -      /* Lookup_String */ -                                   /* Initialize index to check from hash */ +	/* Lookup_String */ +	/* Initialize index to check from hash */ -   integer lookup_string_result; -   index       = ( ( prevc << 5 ) ^ follc ) & maxtab; +	integer lookup_string_result; +	index       = ((prevc << 5) ^ follc) & maxtab; -                                   /* Assume we won't find string */ -   lookup_string_result = end_list; -                                   /* Search through list of hash collision */ -                                   /* entries for one that matches <w>C     */ -   do { +	/* Assume we won't find string */ +	lookup_string_result = end_list; +	/* Search through list of hash collision */ +	/* entries for one that matches <w>C     */ +	do { -      found = ( string_table[index].prevchar == prevc ) && -               ( string_table[index].follchar == follc ); +		found = (string_table[index].prevchar == prevc) && +		        (string_table[index].follchar == follc); -      if ( ! found )  -         index = string_table[index].next; +		if (! found) +			index = string_table[index].next; -   } while (!(found || ( index == end_list ))); +	} while (!(found || (index == end_list))); -                                   /* Return index if <w>C found in table. */ -   if (found)  -      lookup_string_result = index; +	/* Return index if <w>C found in table. */ +	if (found) +		lookup_string_result = index; -   return lookup_string_result; +	return lookup_string_result;  }     /* Lookup_String */  /*--------------------------------------------------------------------------*/  /*              Get_Char  ---  Read character from input file               */  /*--------------------------------------------------------------------------*/ -void get_char( integer& c ) - -{     /* Get_Char */ -                                   /* Point to next character in buffer */ -   input_pos += 1; -                                   /* If past end of block read in, then */ -                                   /* reset input pointer and read in    */ -                                   /* next block.                        */ - -   if ( input_pos > inbufsize )  -      { -         blockread( input_file, input_buffer, maxbuff, inbufsize ); -         input_pos = 1; -         ierr      = ioresult; -      } -                                  /* If end of file hit, return EOF_Char */ -                                  /* otherwise return next character in  */ -                                  /* input buffer.                       */ -   if ( inbufsize == 0 )  -      c = eof_char; -   else -      c = input_buffer[input_pos]; +void get_char(integer &c) + +{ +	/* Get_Char */ +	/* Point to next character in buffer */ +	input_pos += 1; +	/* If past end of block read in, then */ +	/* reset input pointer and read in    */ +	/* next block.                        */ + +	if (input_pos > inbufsize) { +		blockread(input_file, input_buffer, maxbuff, inbufsize); +		input_pos = 1; +		ierr      = ioresult; +	} +	/* If end of file hit, return EOF_Char */ +	/* otherwise return next character in  */ +	/* input buffer.                       */ +	if (inbufsize == 0) +		c = eof_char; +	else +		c = input_buffer[input_pos];  }     /* Get_Char */ @@ -351,23 +354,23 @@ void get_char( integer& c )  /*             Write_Char  ---  Write character to output file              */  /*--------------------------------------------------------------------------*/ -void put_char( integer c ) +void put_char(integer c) -{     /* Put_Char */ -                                   /* If buffer full, write it out and */ -                                   /* reset output buffer pointer.     */ +{ +	/* Put_Char */ +	/* If buffer full, write it out and */ +	/* reset output buffer pointer.     */ -   if ( output_pos >= maxbuff )  -      { -         blockwrite( output_file, output_buffer, maxbuff ); -         output_pos = 0; -         ierr       = ioresult; -      } -                                   /* Place character in next slot in  */ -                                   /* output buffer.                   */ +	if (output_pos >= maxbuff) { +		blockwrite(output_file, output_buffer, maxbuff); +		output_pos = 0; +		ierr       = ioresult; +	} +	/* Place character in next slot in  */ +	/* output buffer.                   */ -   output_pos += 1; -   output_buffer[output_pos] = c; +	output_pos += 1; +	output_buffer[output_pos] = c;  }     /* Put_Char */ @@ -375,31 +378,30 @@ void put_char( integer c )  /*             Put_Code  ---  Write hash code to output file.               */  /*--------------------------------------------------------------------------*/ -void put_code( integer hash_code ) - -{     /* Put_Code */ -                                   /* Output code word is empty.        */ -                                   /* Put out 1st 8 bits of compression */ -                                   /* code and save last 4 bit for next */ -                                   /* time through.                     */ - -   if ( output_code == empty )  -      { -         put_char( ( (cardinal)hash_code >> 4 ) & 0xff ); -         output_code = hash_code & 0xf; -      } -   else -                                   /* Output code word not empty.         */ -                                   /* Put out last 4 bits of previous     */ -                                   /* code appended to 1st 4 bits of this */ -                                   /* code.  Then put out last 8 bits of  */ -                                   /* this code.                          */ -      { -         put_char( ( ( output_code << 4 ) & 0xff0 ) + -                   ( ( (cardinal)hash_code >> 8 ) & 0xf ) ); -         put_char( hash_code & 0xff ); -         output_code = empty; -      } +void put_code(integer hash_code) + +{ +	/* Put_Code */ +	/* Output code word is empty.        */ +	/* Put out 1st 8 bits of compression */ +	/* code and save last 4 bit for next */ +	/* time through.                     */ + +	if (output_code == empty) { +		put_char(((cardinal)hash_code >> 4) & 0xff); +		output_code = hash_code & 0xf; +	} else +		/* Output code word not empty.         */ +		/* Put out last 4 bits of previous     */ +		/* code appended to 1st 4 bits of this */ +		/* code.  Then put out last 8 bits of  */ +		/* this code.                          */ +	{ +		put_char(((output_code << 4) & 0xff0) + +		         (((cardinal)hash_code >> 8) & 0xf)); +		put_char(hash_code & 0xff); +		output_code = empty; +	}  }     /* Put_Code */ @@ -410,53 +412,50 @@ void put_code( integer hash_code )  void do_compression()  { -   integer c                /* Current input character = C */; -   integer wc               /* Hash code value for <w>C    */; -   integer w                /* Hash code value for <w>     */; +	integer c                /* Current input character = C */; +	integer wc               /* Hash code value for <w>C    */; +	integer w                /* Hash code value for <w>     */; -      /* Do_Compression */ -                                   /* Read first character ==> Step 2 */ -   get_char( c ); -                                   /* Initial hash code -- first character */ -                                   /* has no previous string (<w> is null) */ +	/* Do_Compression */ +	/* Read first character ==> Step 2 */ +	get_char(c); +	/* Initial hash code -- first character */ +	/* has no previous string (<w> is null) */ -   w = lookup_string( no_prev , c ); +	w = lookup_string(no_prev , c); -                                   /* Get next character ==> Step 3    */ -   get_char( c ); -                                   /* Loop over input characters until */ -                                   /* end of file reached ==> Step 4.  */ -   while( c != eof_char )  -      { -                                   /* See if <w>C is in table. */ +	/* Get next character ==> Step 3    */ +	get_char(c); +	/* Loop over input characters until */ +	/* end of file reached ==> Step 4.  */ +	while (c != eof_char) { +		/* See if <w>C is in table. */ -         wc = lookup_string( w , c ); +		wc = lookup_string(w , c); -                                   /* If <w>C is not in the table, */ -                                   /* enter it into the table and  */ -                                   /* output <w>.  Reset <w> to    */ -                                   /* be the code for C ==> Step 6 */ +		/* If <w>C is not in the table, */ +		/* enter it into the table and  */ +		/* output <w>.  Reset <w> to    */ +		/* be the code for C ==> Step 6 */ -         if ( wc == end_list )  -            { +		if (wc == end_list) { -               make_table_entry( w , c ); -               put_code( w ); -               w = lookup_string( no_prev , c ); +			make_table_entry(w , c); +			put_code(w); +			w = lookup_string(no_prev , c); -            } -         else                      /* If <w>C is in table, keep looking */ -                                   /* for longer strings == Step 5      */ +		} else                    /* If <w>C is in table, keep looking */ +			/* for longer strings == Step 5      */ -            w = wc; +			w = wc; -                                   /* Get next input character ==> Step 3 */ -         get_char( c ); +		/* Get next input character ==> Step 3 */ +		get_char(c); -      } -                                   /* Make sure last code is       */ -                                   /* written out ==> Step 4.      */ -   put_code( w ); +	} +	/* Make sure last code is       */ +	/* written out ==> Step 4.      */ +	put_code(w);  }     /* Do_Compression */ @@ -464,19 +463,19 @@ void do_compression()  /*                     PibCompr --- Main program                            */  /*--------------------------------------------------------------------------*/ -int main(int argc, const char* argv[]) -{     /* PibCompr */ -                                   /* We are doing compression */ -   pio_initialize(argc, argv); -   if_compressing = true; -                                   /* Initialize compression   */ -   initialize(); -                                   /* Perform compression      */ -   do_compression(); -                                   /* Clean up and exit        */ -   terminate(); - -   return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	/* PibCompr */ +	/* We are doing compression */ +	pio_initialize(argc, argv); +	if_compressing = true; +	/* Initialize compression   */ +	initialize(); +	/* Perform compression      */ +	do_compression(); +	/* Clean up and exit        */ +	terminate(); + +	return EXIT_SUCCESS;  }     /* PibCompr */  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/ss_blank.cpp b/engines/avalanche/ss_blank.cpp index 907c09f91c..04f0da9e6b 100644 --- a/engines/avalanche/ss_blank.cpp +++ b/engines/avalanche/ss_blank.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 @@ -33,34 +33,40 @@ namespace Avalanche {  byte fv;  boolean test; -boolean the_cows_come_home() -{ -    registers rmove,rclick; -boolean the_cows_come_home_result; -; - rmove.ax=11; intr(0x33,rmove); - rclick.ax=3; intr(0x33,rclick); - the_cows_come_home_result= -   (keypressed()) | /* key pressed */ -   (rmove.cx>0) || /* mouse moved */ -   (rmove.dx>0) || -   (rclick.bx>0);  /* button clicked */ -return the_cows_come_home_result; +boolean the_cows_come_home() { +	registers rmove, rclick; +	boolean the_cows_come_home_result; +	; +	rmove.ax = 11; +	intr(0x33, rmove); +	rclick.ax = 3; +	intr(0x33, rclick); +	the_cows_come_home_result = +	    (keypressed()) | /* key pressed */ +	    (rmove.cx > 0) || /* mouse moved */ +	    (rmove.dx > 0) || +	    (rclick.bx > 0); /* button clicked */ +	return the_cows_come_home_result;  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - test=the_cows_come_home(); - textattr=0; clrscr; - do {; } while (!the_cows_come_home()); - textattr=30; clrscr; - output << "*** Blank Screen *** (c) 1992, Thomas Thurman. (An Avvy Screen Saver.)" << NL; - for( fv=1; fv <= 46; fv ++) output << '~'; output << NL; - output << "This program may be freely copied." << NL; - output << NL; - output << "Have fun!" << NL; -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	test = the_cows_come_home(); +	textattr = 0; +	clrscr; +	do { +		; +	} while (!the_cows_come_home()); +	textattr = 30; +	clrscr; +	output << "*** Blank Screen *** (c) 1992, Thomas Thurman. (An Avvy Screen Saver.)" << NL; +	for (fv = 1; fv <= 46; fv ++) output << '~'; +	output << NL; +	output << "This program may be freely copied." << NL; +	output << NL; +	output << "Have fun!" << NL; +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/ss_clock.cpp b/engines/avalanche/ss_clock.cpp index b73576506b..aa74b806ed 100644 --- a/engines/avalanche/ss_clock.cpp +++ b/engines/avalanche/ss_clock.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 @@ -35,77 +35,100 @@ namespace Avalanche {  const integer width = 88;  const integer height = 8; /* width & height of string returned by "time" */ -integer gd,gm; -integer xx,yy; -shortint ix,iy; +integer gd, gm; +integer xx, yy; +shortint ix, iy;  byte cp;  byte count; -array<0,1,pointtype> pages; +array<0, 1, pointtype> pages;  boolean test; -boolean the_cows_come_home() -{ -    registers rmove,rclick; -boolean the_cows_come_home_result; -; - rmove.ax=11; intr(0x33,rmove); - rclick.ax=3; intr(0x33,rclick); - the_cows_come_home_result= -   (keypressed()) || /* key pressed */ -   (rmove.cx>0) || /* mouse moved */ -   (rmove.dx>0) || -   (rclick.bx>0);  /* button clicked */ -return the_cows_come_home_result; +boolean the_cows_come_home() { +	registers rmove, rclick; +	boolean the_cows_come_home_result; +	; +	rmove.ax = 11; +	intr(0x33, rmove); +	rclick.ax = 3; +	intr(0x33, rclick); +	the_cows_come_home_result = +	    (keypressed()) || /* key pressed */ +	    (rmove.cx > 0) || /* mouse moved */ +	    (rmove.dx > 0) || +	    (rclick.bx > 0); /* button clicked */ +	return the_cows_come_home_result;  } -string time1() -{ -    word h,m,s,s1; varying_string<2> hh,mm,ss; char ampm; -string time1_result; -; - gettime(h,m,s,s1); - if (h<12)  -  ampm='a'; - else {; -  ampm='p'; -  if (h==0)  h=12; else h -= 12;    /* 24-hr adjustment */ - } - str(h,2,hh); str(m,2,mm); str(s,2,ss); /* stringify them */ - time1_result=hh+'.'+mm+'.'+ss+' '+ampm+'m'; -return time1_result; +string time1() { +	word h, m, s, s1; +	varying_string<2> hh, mm, ss; +	char ampm; +	string time1_result; +	; +	gettime(h, m, s, s1); +	if (h < 12) +		ampm = 'a'; +	else { +		; +		ampm = 'p'; +		if (h == 0)  h = 12; +		else h -= 12;    /* 24-hr adjustment */ +	} +	str(h, 2, hh); +	str(m, 2, mm); +	str(s, 2, ss); /* stringify them */ +	time1_result = hh + '.' + mm + '.' + ss + ' ' + ampm + 'm'; +	return time1_result;  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - test=the_cows_come_home(); - gm=registerbgidriver(&egavgadriverproc); - gd=3; gm=1; initgraph(gd,gm,""); - ix=3; iy=1; xx=177; yy=177; setcolor(11); cp=0; - setfillstyle(1,0); count=2; - do { -  setactivepage(cp); setvisualpage(1-cp); cp=1-cp; -  delay(20); if (count>0)  count -= 1; -  { -  pointtype& with = pages[cp];  -  ; -   if (count==0)  -    bar(with.x,with.y,with.x+width,with.y+height); -   with.x=xx; with.y=yy; /* update record for next time */ -  } -  outtextxy(xx,yy,time1()); -  xx=xx+ix; yy=yy+iy; -  if (xx<= 10)  ix=Random(9)+1; if (xx>=629-width)   ix=-Random(9)+1; -  if (yy<= 10)  iy=Random(9)+1; if (yy>=339-height)  iy=-Random(9)+1; - } while (!the_cows_come_home()); - closegraph(); - textattr=30; clrscr; - output << "*** Bouncing Clock *** (c) 1992, Thomas Thurman. (An Avvy Screen Saver.)" << NL; - for( gd=1; gd <= 48; gd ++) output << '~'; output << NL; - output << "This program may be freely copied." << NL; - output << NL; - output << "Have fun!" << NL; -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	test = the_cows_come_home(); +	gm = registerbgidriver(&egavgadriverproc); +	gd = 3; +	gm = 1; +	initgraph(gd, gm, ""); +	ix = 3; +	iy = 1; +	xx = 177; +	yy = 177; +	setcolor(11); +	cp = 0; +	setfillstyle(1, 0); +	count = 2; +	do { +		setactivepage(cp); +		setvisualpage(1 - cp); +		cp = 1 - cp; +		delay(20); +		if (count > 0)  count -= 1; +		{ +			pointtype &with = pages[cp]; +			; +			if (count == 0) +				bar(with.x, with.y, with.x + width, with.y + height); +			with.x = xx; +			with.y = yy; /* update record for next time */ +		} +		outtextxy(xx, yy, time1()); +		xx = xx + ix; +		yy = yy + iy; +		if (xx <= 10)  ix = Random(9) + 1; +		if (xx >= 629 - width)   ix = -Random(9) + 1; +		if (yy <= 10)  iy = Random(9) + 1; +		if (yy >= 339 - height)  iy = -Random(9) + 1; +	} while (!the_cows_come_home()); +	closegraph(); +	textattr = 30; +	clrscr; +	output << "*** Bouncing Clock *** (c) 1992, Thomas Thurman. (An Avvy Screen Saver.)" << NL; +	for (gd = 1; gd <= 48; gd ++) output << '~'; +	output << NL; +	output << "This program may be freely copied." << NL; +	output << NL; +	output << "Have fun!" << NL; +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/stars.cpp b/engines/avalanche/stars.cpp index aaeada2a36..83490de6d5 100644 --- a/engines/avalanche/stars.cpp +++ b/engines/avalanche/stars.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 @@ -34,21 +34,22 @@  namespace Avalanche { -integer gd,gm; +integer gd, gm; -typedef matrix<'\0','\377',0,15,byte> fonttype; +typedef matrix < '\0', '\377', 0, 15, byte > fonttype;  boolean reverse;  word spinnum; -array<0,1,fonttype> f; +array<0, 1, fonttype> f;  file<fonttype> ff; -array<0,7,0,15,0,79,byte> strip; +array<0, 7, 0, 15, 0, 79, byte> strip;  byte across; -word w; byte y; +word w; +byte y;  byte charnum;  byte cfont; /* current font. 0=roman, 1=italic. */ -char* c; +char *c;  boolean nomusic; @@ -56,309 +57,328 @@ const integer colours = 12; /* Run Workout to see possible values of these two.  const integer steps = 6; /* 60,30,20,15,12,10,6,5,4,3,2,1 */  const integer gmtop = 360 / steps; - const integer scardcount = 13; - -     const array<0,scardcount-1,integer> soundcards =  -       {{1,2,6,3,4,5,8,9,10,7,7,7,7}}; - -/*$L credits.obj*/ extern void credits();  - -void bigo2(string date) -{ - integer gd,gm; - byte c; - palettetype p; - untyped_file f; pointer pp; word s; - - - getpalette(p); - setvisualpage(1); setactivepage(0); - assign(f,"logo.avd"); reset(f,1); - for( gd=7; gd <= 194; gd ++) -  blockread(f,mem[0xa000*(gd*80)],53); - close(f); - s=imagesize(0,7,415,194); getmem(pp,s); getimage(0,7,415,194,pp); - - cleardevice(); - for( gd=1; gd <= 64; gd ++) - { -  for( gm=0; gm <= gmtop; gm ++) -  { -   c=(c % colours)+1; -/*   putpixel(trunc(sin(gm*steps*n)*gd*6)+320, -              trunc(cos(gm*steps*n)*gd*3)+175,c); */ -   if (c>5)  continue_; -   setcolor(c); arc(320,175,gm*steps,gm*steps+1,gd*6); -  } -  if (keypressed())  { closegraph(); exit(0); } - } - settextstyle(0,0,1); setcolor(13); - outtextxy(550,343,"(press any key)"); - - putimage(112,0,pp,orput); freemem(pp,s); - resetmouse; setvisualpage(0); +const integer scardcount = 13; + +const array < 0, scardcount - 1, integer > soundcards = +{{1, 2, 6, 3, 4, 5, 8, 9, 10, 7, 7, 7, 7}}; + +/*$L credits.obj*/ extern void credits(); + +void bigo2(string date) { +	integer gd, gm; +	byte c; +	palettetype p; +	untyped_file f; +	pointer pp; +	word s; + + +	getpalette(p); +	setvisualpage(1); +	setactivepage(0); +	assign(f, "logo.avd"); +	reset(f, 1); +	for (gd = 7; gd <= 194; gd ++) +		blockread(f, mem[0xa000 * (gd * 80)], 53); +	close(f); +	s = imagesize(0, 7, 415, 194); +	getmem(pp, s); +	getimage(0, 7, 415, 194, pp); + +	cleardevice(); +	for (gd = 1; gd <= 64; gd ++) { +		for (gm = 0; gm <= gmtop; gm ++) { +			c = (c % colours) + 1; +			/*   putpixel(trunc(sin(gm*steps*n)*gd*6)+320, +			              trunc(cos(gm*steps*n)*gd*3)+175,c); */ +			if (c > 5)  continue_; +			setcolor(c); +			arc(320, 175, gm * steps, gm * steps + 1, gd * 6); +		} +		if (keypressed())  { +			closegraph(); +			exit(0); +		} +	} +	settextstyle(0, 0, 1); +	setcolor(13); +	outtextxy(550, 343, "(press any key)"); + +	putimage(112, 0, pp, orput); +	freemem(pp, s); +	resetmouse; +	setvisualpage(0);  } -void nextchar()     /* Sets up charnum & cline for the next character. */ -{ +void nextchar() {   /* Sets up charnum & cline for the next character. */ - c += 1; +	c += 1;  } -void getchar() -{ - do { -  nextchar(); - -  switch (*c) { -   case '@': { cfont=1; nextchar(); } break; -   case '^': { cfont=0; nextchar(); } break; -   case '%': if (nomusic)  -        { -          closegraph(); exit(0);      /* End of text and no music => stop. */ -        } -        else c=addr(credits()); -        break;                   /* End of test, but still playing => again. */ -  } - - } while (!((*c!='\15') && (*c!='\12'))); - - for( w=0; w <= 7; w ++) -  for( y=0; y <= 15; y ++) -   move(strip[w][y][1],strip[w][y][0],79); - - for( w=0; w <= 7; w ++) -  for( y=0; y <= 15; y ++) -   strip[w][y][79]=(byte)((strip[7][y][78] << (w+1)))+ -    ((cardinal)f[cfont][*c][y] >> (7-w)); - - across=0; +void getchar() { +	do { +		nextchar(); + +		switch (*c) { +		case '@': { +			cfont = 1; +			nextchar(); +		} +		break; +		case '^': { +			cfont = 0; +			nextchar(); +		} +		break; +		case '%': +			if (nomusic) { +				closegraph(); +				exit(0);      /* End of text and no music => stop. */ +			} else c = addr(credits()); +			break;                   /* End of test, but still playing => again. */ +		} + +	} while (!((*c != '\15') && (*c != '\12'))); + +	for (w = 0; w <= 7; w ++) +		for (y = 0; y <= 15; y ++) +			move(strip[w][y][1], strip[w][y][0], 79); + +	for (w = 0; w <= 7; w ++) +		for (y = 0; y <= 15; y ++) +			strip[w][y][79] = (byte)((strip[7][y][78] << (w + 1))) + +			                  ((cardinal)f[cfont][*c][y] >> (7 - w)); + +	across = 0;  } -void scrolltext() -{ - byte c,w,y; +void scrolltext() { +	byte c, w, y; - across += 1; - if (across==8)  getchar(); +	across += 1; +	if (across == 8)  getchar(); - for( y=0; y <= 15; y ++) -  for( w=0; w <= 1; w ++) -  move(strip[across][y][0],mem[0xa000*24000+(y*2+w)*80],80); +	for (y = 0; y <= 15; y ++) +		for (w = 0; w <= 1; w ++) +			move(strip[across][y][0], mem[0xa000 * 24000 + (y * 2 + w) * 80], 80);  } -void do_stuff() -{ - switch (spinnum) { -  case 50 ... 110: { -            setfillstyle(1,14); -            bar(0,315+(spinnum-50) / 3,640,315+(spinnum-50) / 3); -            bar(0,316-(spinnum-50) / 3,640,316-(spinnum-50) / 3); -            if (spinnum>56)  -            { -             setfillstyle(1,13); -             bar(0,315+(spinnum-56) / 3,640,315+(spinnum-56) / 3); -             bar(0,316-(spinnum-56) / 3,640,316-(spinnum-56) / 3); -            } -          } -          break; -  case 150 ... 198: { -             setfillstyle(1,0); -             bar(0,315+(spinnum-150) / 3,640,315+(spinnum-150) / 3); -             bar(0,316-(spinnum-150) / 3,640,316-(spinnum-150) / 3); -            } -            break; -  case 200: scrolltext(); break; - } +void do_stuff() { +	switch (spinnum) { +	case 50 ... 110: { +		setfillstyle(1, 14); +		bar(0, 315 + (spinnum - 50) / 3, 640, 315 + (spinnum - 50) / 3); +		bar(0, 316 - (spinnum - 50) / 3, 640, 316 - (spinnum - 50) / 3); +		if (spinnum > 56) { +			setfillstyle(1, 13); +			bar(0, 315 + (spinnum - 56) / 3, 640, 315 + (spinnum - 56) / 3); +			bar(0, 316 - (spinnum - 56) / 3, 640, 316 - (spinnum - 56) / 3); +		} +	} +	break; +	case 150 ... 198: { +		setfillstyle(1, 0); +		bar(0, 315 + (spinnum - 150) / 3, 640, 315 + (spinnum - 150) / 3); +		bar(0, 316 - (spinnum - 150) / 3, 640, 316 - (spinnum - 150) / 3); +	} +	break; +	case 200: +		scrolltext(); +		break; +	}  } -void setcol(byte which,byte what) +void setcol(byte which, byte what)  /*var dummy:byte;*/ -{; -/* setpalette(which,what); - asm -(*  mov dx,$3DA; -  in ax,dx; - -  or ah,ah; - -  mov dx,$3C0; -  mov al,which; -  out dx,al; - -  mov dx,$3C0; -  mov al,what; -  out dx,al; - end; -(* dummy:=port[$3DA]; - port[$3C0]:=which; port[$3C0]:=what;*/ +{ +	; +	/* setpalette(which,what); +	 asm +	(*  mov dx,$3DA; +	  in ax,dx; + +	  or ah,ah; + +	  mov dx,$3C0; +	  mov al,which; +	  out dx,al; + +	  mov dx,$3C0; +	  mov al,what; +	  out dx,al; +	 end; +	(* dummy:=port[$3DA]; +	 port[$3C0]:=which; port[$3C0]:=what;*/  } -void bigo2go() -{ - palettetype p; byte c; boolean lmo; - boolean altnow,altbefore; - - for( gd=0; gd <= 13; gd ++) p.colors[gd]=0; - - setcol(13,24); /* murk */ setcol(14,38); /* gold */ - setcol(15,egawhite); /* white- of course */ - p.colors[13]=24; p.colors[14]=38; p.colors[15]=egawhite; - - /***/ - -    p.colors[5]=egawhite; -    p.colors[4]=egalightcyan; -    p.colors[3]=egacyan; -    p.colors[2]=egalightblue; -    p.colors[1]=egablue; - - /***/ - - c=1; p.size=16; lmo=false; - setallpalette(p); - - do { -/*  if reverse then -  begin -   dec(c); if c=0 then c:=colours; -  end else -  begin -   inc(c); if c>colours then c:=1; -  end; -  for gm:=1 to colours do -   case p.colors[gm] of -    egaWhite: begin p.colors[gm]:=egaLightcyan; setcol(gm,egaLightCyan); end; -    egaLightcyan: begin p.colors[gm]:=egaCyan; setcol(gm,egaCyan); end; -    egaCyan: begin p.colors[gm]:=egaLightblue; setcol(gm,egaLightblue); end; -    egaLightblue: begin p.colors[gm]:=egaBlue; setcol(gm,egaBlue); end; -    egaBlue: begin p.colors[gm]:=0; setcol(gm,0); end; -   end; -  p.colors[c]:=egaWhite; setcol(c,egaWhite); - -  AltBefore:=AltNow; AltNow:=testkey(sAlt);*/ - -  if (anymousekeypressed)  lmo=true; -  if (keypressed())  lmo=true; -  if ((! nomusic) && (ampgetmodulestatus != md_playing))  lmo=true; - - /* if (AltNow=True) and (AltBefore=False) then reverse:=not reverse;*/ - -  do_stuff(); -  if (spinnum<200)  spinnum += 1; - } while (!lmo); +void bigo2go() { +	palettetype p; +	byte c; +	boolean lmo; +	boolean altnow, altbefore; + +	for (gd = 0; gd <= 13; gd ++) p.colors[gd] = 0; + +	setcol(13, 24); /* murk */ setcol(14, 38); /* gold */ +	setcol(15, egawhite); /* white- of course */ +	p.colors[13] = 24; +	p.colors[14] = 38; +	p.colors[15] = egawhite; + +	/***/ + +	p.colors[5] = egawhite; +	p.colors[4] = egalightcyan; +	p.colors[3] = egacyan; +	p.colors[2] = egalightblue; +	p.colors[1] = egablue; + +	/***/ + +	c = 1; +	p.size = 16; +	lmo = false; +	setallpalette(p); + +	do { +		/*  if reverse then +		  begin +		   dec(c); if c=0 then c:=colours; +		  end else +		  begin +		   inc(c); if c>colours then c:=1; +		  end; +		  for gm:=1 to colours do +		   case p.colors[gm] of +		    egaWhite: begin p.colors[gm]:=egaLightcyan; setcol(gm,egaLightCyan); end; +		    egaLightcyan: begin p.colors[gm]:=egaCyan; setcol(gm,egaCyan); end; +		    egaCyan: begin p.colors[gm]:=egaLightblue; setcol(gm,egaLightblue); end; +		    egaLightblue: begin p.colors[gm]:=egaBlue; setcol(gm,egaBlue); end; +		    egaBlue: begin p.colors[gm]:=0; setcol(gm,0); end; +		   end; +		  p.colors[c]:=egaWhite; setcol(c,egaWhite); + +		  AltBefore:=AltNow; AltNow:=testkey(sAlt);*/ + +		if (anymousekeypressed)  lmo = true; +		if (keypressed())  lmo = true; +		if ((! nomusic) && (ampgetmodulestatus != md_playing))  lmo = true; + +		/* if (AltNow=True) and (AltBefore=False) then reverse:=not reverse;*/ + +		do_stuff(); +		if (spinnum < 200)  spinnum += 1; +	} while (!lmo);  } -void parse_cline() -{ -    integer e; +void parse_cline() { +	integer e; - if (paramstr(1)!="jsb")  - { -  output << "Not a standalone program." << NL; exit(255); - } +	if (paramstr(1) != "jsb") { +		output << "Not a standalone program." << NL; +		exit(255); +	}  } -integer getsoundhardware(psoundcard scard) -{ -    integer sc,i,autosel,select; -    char ch; -    integer e; +integer getsoundhardware(psoundcard scard) { +	integer sc, i, autosel, select; +	char ch; +	integer e; -integer getsoundhardware_result; +	integer getsoundhardware_result;  Lagain: -  sc=detectgus(scard); -  if (sc!=0)  sc=detectpas(scard); -  if (sc!=0)  sc=detectaria(scard); -  if (sc!=0)  sc=detectsb(scard); - -  /* if no sound card found, zero scard */ -  if (sc!=0)  fillchar(scard,sizeof(tsoundcard),0); - -  autosel=-1; -/*  if sc=0 then -    for i:=0 to scardcount-1 do -      if scard^.ID=soundcards[i].ID then begin -        { Set auto selection mark } -        autosel:=i+1; -        break; -      end;*/ - -  /* Print the list of sound cards */ - -  val(paramstr(13),select,e); - -  /* Default entry? */ -  if (select==0)  select=autosel; -  if (select!=autosel)  { -    /* clear all assumptions */ -    sc=-1; -    fillchar(scard,sizeof(tsoundcard),0); -    scard->id=soundcards[select-1];  /* set correct ID */ -  } - -  /* Query I/O address */ -  if (scard->id==id_dac)  scard->ioport=0x378; - -  /* Read user input */ -  val(paramstr(15),i,e); - -  if (i!=0)  scard->ioport=i; -  if (sc!=1)    /* Not autodetected */ -    switch (scard->id) { -      case id_sb16: -      case id_pas16: -      case id_wss: -      case id_aria: -      case id_gus    : scard->samplesize=2; -      break;                            /* 16-bit card */ -      case id_sbpro: -      case id_pas: -      case id_pasplus: scard->stereo=true; -      break;                            /* enable stereo */ -      default: { -        scard->samplesize=1; -        scard->stereo=false; -      } -    } - -  if (scard->id!=id_dac)  { -    val(paramstr(17),i,e); - -    if (i!=0)  scard->dmairq=i; - -    val(paramstr(16),i,e); - -    if (i!=0)  scard->dmachannel=i; -  } else { -    /* Select correct DAC */ -    scard->maxrate=44100; -    if (select==11)  { -      scard->stereo=true; -      scard->dmachannel=1;    /* Special 'mark' */ -      scard->maxrate=60000; -    } else -    if (select==12)  { -      scard->stereo=true; -      scard->dmachannel=2; -      scard->maxrate=60000; -      if (scard->ioport==0)  scard->ioport=0x378; -    } else -    if (select==13)  { -      scard->dmachannel=0; -      scard->ioport=0x42;     /* Special 'mark' */ -      scard->maxrate=44100; -    } -  } - -/*    writeln('Your selection: ',select,' at ',scard^.ioPort, -            ' using IRQ ',scard^.dmaIRQ,' and DMA channel ',scard^.dmaChannel); -  readln;*/ - -  getsoundhardware_result=0; -return getsoundhardware_result; +	sc = detectgus(scard); +	if (sc != 0)  sc = detectpas(scard); +	if (sc != 0)  sc = detectaria(scard); +	if (sc != 0)  sc = detectsb(scard); + +	/* if no sound card found, zero scard */ +	if (sc != 0)  fillchar(scard, sizeof(tsoundcard), 0); + +	autosel = -1; +	/*  if sc=0 then +	    for i:=0 to scardcount-1 do +	      if scard^.ID=soundcards[i].ID then begin +	        { Set auto selection mark } +	        autosel:=i+1; +	        break; +	      end;*/ + +	/* Print the list of sound cards */ + +	val(paramstr(13), select, e); + +	/* Default entry? */ +	if (select == 0)  select = autosel; +	if (select != autosel)  { +		/* clear all assumptions */ +		sc = -1; +		fillchar(scard, sizeof(tsoundcard), 0); +		scard->id = soundcards[select - 1]; /* set correct ID */ +	} + +	/* Query I/O address */ +	if (scard->id == id_dac)  scard->ioport = 0x378; + +	/* Read user input */ +	val(paramstr(15), i, e); + +	if (i != 0)  scard->ioport = i; +	if (sc != 1)  /* Not autodetected */ +		switch (scard->id) { +		case id_sb16: +		case id_pas16: +		case id_wss: +		case id_aria: +		case id_gus    : +			scard->samplesize = 2; +			break;                            /* 16-bit card */ +		case id_sbpro: +		case id_pas: +		case id_pasplus: +			scard->stereo = true; +			break;                            /* enable stereo */ +		default: { +			scard->samplesize = 1; +			scard->stereo = false; +		} +		} + +	if (scard->id != id_dac)  { +		val(paramstr(17), i, e); + +		if (i != 0)  scard->dmairq = i; + +		val(paramstr(16), i, e); + +		if (i != 0)  scard->dmachannel = i; +	} else { +		/* Select correct DAC */ +		scard->maxrate = 44100; +		if (select == 11)  { +			scard->stereo = true; +			scard->dmachannel = 1;  /* Special 'mark' */ +			scard->maxrate = 60000; +		} else if (select == 12)  { +			scard->stereo = true; +			scard->dmachannel = 2; +			scard->maxrate = 60000; +			if (scard->ioport == 0)  scard->ioport = 0x378; +		} else if (select == 13)  { +			scard->dmachannel = 0; +			scard->ioport = 0x42;   /* Special 'mark' */ +			scard->maxrate = 44100; +		} +	} + +	/*    writeln('Your selection: ',select,' at ',scard^.ioPort, +	            ' using IRQ ',scard^.dmaIRQ,' and DMA channel ',scard^.dmaChannel); +	  readln;*/ + +	getsoundhardware_result = 0; +	return getsoundhardware_result;  }  tsoundcard scard; @@ -367,225 +387,241 @@ tdds dds;  pmodule module;  tsdi_init sdi;  integer e, -bufsize; +        bufsize;  char ch;  boolean v86, -vdsok; -longint a,rate, -tempseg; +        vdsok; +longint a, rate, +        tempseg;  string answer;  pointer temp;  word flags;  word curch;  byte modulevolume; -array<0,4,tsampleinfo> sample; -array<0,31,word> voltable; - -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - parse_cline(); - - nomusic=paramstr(13)=='0'; - - if (! nomusic)  - { -    /* Read sound card information */ -    if (getsoundhardware(&scard)==-1)  exit(1); - - -    /* Initialize Timer Service */ -    tsinit; -    atexit(&tsclose); -    if (scard.id==id_gus)  { -      /* Initialize GUS player */ -      #ifndef DPMI -      scard.extrafield[2]=1;  /* GUS DMA transfer does not work in V86 */ -      #endif -      gusinit(&scard); -      atexit(&gusclose); - -      /* Initialize GUS heap manager */ -      gushminit; - -      /* Init CDI */ -      cdiinit; - -      /* Register GUS into CDI */ -      cdiregister(&cdi_gus,0,31); - -      /* Add GUS event player engine into Timer Service */ -      tsaddroutine(&gusinterrupt,gus_timer); -    } else { -      /* Initialize Virtual DMA Specification */ -      #ifndef DPMI -      vdsok=vdsinit==0; -      #else -      vdsok=false; -      #endif - -      fillchar(mcpstrc,sizeof(tmcpstruct),0); - -      /* Query for sampling rate */ -      val(paramstr(14),a,e); -      if (a>4000)  rate=a; else rate=21000; - -      /* Query for quality */ -      mcpstrc.options=mcp_quality; - -      switch (scard.id) { -        case id_sb     : { -                      sdi=sdi_sb; -                      scard.maxrate=22000; -                    } -                    break; -        case id_sbpro  : { -                      sdi=sdi_sbpro; -                      scard.maxrate=22000; -                    } -                    break; -        case id_pas: -        case id_pasplus: -        case id_pas16  : { -                      sdi=sdi_pas; -                      scard.maxrate=44100; -                    } -                    break; -        case id_sb16   : { -                      sdi=sdi_sb16; -                      scard.maxrate=44100; -                    } -                    break; -        case id_aria   : { -                      sdi=sdi_aria; -                      scard.maxrate=44100; -                    } -                    break; -        case id_wss    : { -                      sdi=sdi_wss; -                      scard.maxrate=48000; -                    } -                    break; -        #ifndef DPMI -        case id_dac    : sdi=sdi_dac; break; /* Only available in real mode */ -        #endif -      } - -      mcpinitsounddevice(sdi,&scard); -      a=mcp_tablesize; -      mcpstrc.reqsize=0; - -      /* Calculate mixing buffer size */ -      bufsize=(longint)(2800*(integer)(scard.samplesize) << (byte)(scard.stereo))* -               (longint)(rate) / (longint)(22000); -      mcpstrc.reqsize=0; -      if ((mcpstrc.options & mcp_quality)>0)  -        if (scard.samplesize==1)  a += mcp_qualitysize; else -          a=mcp_tablesize16+mcp_qualitysize16; -      if ((longint)(bufsize)+(longint)(a)>65500)  bufsize=longint(65500)-a; - -      #ifdef DPMI -      dpmiversion((byte)(e),(byte)(e),(byte)(e),flags); -      v86=(flags & 2)==0; -      #endif - -      /* Allocate volume table + mixing buffer */ -      #ifdef DPMI - -      /* In the V86 mode, the buffer must be allocated below 1M */ -      if (v86)  { -        tempseg=0; -        dpmiallocdos((a+longint(bufsize)) / longint(16)+longint(1),flags,(word)(tempseg)); -      } else { -      #endif -      getmem(temp,a+longint(bufsize)); -      if (temp==nil)  exit(2); -      #ifdef DPMI -      tempseg=seg(temp); -      } -      #else -      tempseg=seg(temp)+ofs(temp) / 16+1; -      #endif -      mcpstrc.bufferseg=tempseg; -      mcpstrc.bufferphysical=-1; - -      if (vdsok && (scard.id!=id_dac))  { -        dds.size=bufsize; -        dds.segment=tempseg; -        dds.offset=0; - -        /* Lock DMA buffer if VDS present */ -        if (vdslockdma(&dds)==0)  mcpstrc.bufferphysical=dds.address; -      } -      if (mcpstrc.bufferphysical==-1)  -        #ifdef DPMI -        mcpstrc.bufferphysical=dpmigetlinearaddr(tempseg); -        #else -        mcpstrc.bufferphysical=(longint)(tempseg) << 4; -        #endif - -      mcpstrc.buffersize=bufsize; -      mcpstrc.samplingrate=rate; -      /* Initialize Multi Channel Player */ -      if (mcpinit(&mcpstrc)!=0)  exit(3); -      atexit(&mcpclose); - -      /* Initialize Channel Distributor */ -      cdiinit; - -      /* Register MCP into CDI*/ -      cdiregister(&cdi_mcp,0,31); -    } - -    /* Try to initialize AMP */ -    if (ampinit(0)!=0)  exit(3); -    atexit(&close); - -    /* Hook AMP player routine into Timer Service */ -    tsaddroutine(&interrupt,amp_timer); - -    #ifndef DPMI -    /* If using DAC, then adjust DAC timer */ -    if (scard.id==id_dac)  setdactimer(tsgettimerrate); -    #endif - -    if (scard.id!=id_gus)  mcpstartvoice; else gusstartvoice; - -    /* Load an example AMF */ -    module=amploadmod("avalot2.mod",0); -    if (module==nil)  exit(4); - -    /* Is it MCP, Quality mode and 16-bit card? */ -    if ((scard.id!=id_gus) && ((mcpstrc.options & mcp_quality)>0) -       && (scard.samplesize==2))  { -      /* Open module+2 channels with amplified volumetable (4.7 gain) */ -      for( a=1; a <= 32; a ++) voltable[a-longint(1)]=a*longint(150) / longint(32); -      cdisetupchannels(0,module->channelcount+2,&voltable); -    } else { -      /* Open module+2 channels with regular volumetable */ -      cdisetupchannels(0,module->channelcount+2,nil); -    } - -    curch=module->channelcount; -    modulevolume=64; - -   /***/ ampplaymodule(module,0); - } - - gd=3; gm=1; initgraph(gd,gm,""); - assign(ff,"avalot.fnt"); reset(ff); ff >> f[0]; close(ff); - assign(ff,"avitalic.fnt"); reset(ff); ff >> f[1]; close(ff); - - c=addr(credits()); c -= 1; - - fillchar(strip,sizeof(strip),'\0'); - reverse=false; spinnum=0; across=7; charnum=1; cfont=0; - bigo2("1189"); /* 1189? 79? 2345? 1967? */ - bigo2go(); - - if (! nomusic)  ampstopmodule; - closegraph(); - return EXIT_SUCCESS; +array<0, 4, tsampleinfo> sample; +array<0, 31, word> voltable; + +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	parse_cline(); + +	nomusic = paramstr(13) == '0'; + +	if (! nomusic) { +		/* Read sound card information */ +		if (getsoundhardware(&scard) == -1)  exit(1); + + +		/* Initialize Timer Service */ +		tsinit; +		atexit(&tsclose); +		if (scard.id == id_gus)  { +			/* Initialize GUS player */ +#ifndef DPMI +			scard.extrafield[2] = 1; /* GUS DMA transfer does not work in V86 */ +#endif +			gusinit(&scard); +			atexit(&gusclose); + +			/* Initialize GUS heap manager */ +			gushminit; + +			/* Init CDI */ +			cdiinit; + +			/* Register GUS into CDI */ +			cdiregister(&cdi_gus, 0, 31); + +			/* Add GUS event player engine into Timer Service */ +			tsaddroutine(&gusinterrupt, gus_timer); +		} else { +			/* Initialize Virtual DMA Specification */ +#ifndef DPMI +			vdsok = vdsinit == 0; +#else +			vdsok = false; +#endif + +			fillchar(mcpstrc, sizeof(tmcpstruct), 0); + +			/* Query for sampling rate */ +			val(paramstr(14), a, e); +			if (a > 4000)  rate = a; +			else rate = 21000; + +			/* Query for quality */ +			mcpstrc.options = mcp_quality; + +			switch (scard.id) { +			case id_sb     : { +				sdi = sdi_sb; +				scard.maxrate = 22000; +			} +			break; +			case id_sbpro  : { +				sdi = sdi_sbpro; +				scard.maxrate = 22000; +			} +			break; +			case id_pas: +			case id_pasplus: +			case id_pas16  : { +				sdi = sdi_pas; +				scard.maxrate = 44100; +			} +			break; +			case id_sb16   : { +				sdi = sdi_sb16; +				scard.maxrate = 44100; +			} +			break; +			case id_aria   : { +				sdi = sdi_aria; +				scard.maxrate = 44100; +			} +			break; +			case id_wss    : { +				sdi = sdi_wss; +				scard.maxrate = 48000; +			} +			break; +#ifndef DPMI +			case id_dac    : +				sdi = sdi_dac; +				break; /* Only available in real mode */ +#endif +			} + +			mcpinitsounddevice(sdi, &scard); +			a = mcp_tablesize; +			mcpstrc.reqsize = 0; + +			/* Calculate mixing buffer size */ +			bufsize = (longint)(2800 * (integer)(scard.samplesize) << (byte)(scard.stereo)) * +			          (longint)(rate) / (longint)(22000); +			mcpstrc.reqsize = 0; +			if ((mcpstrc.options & mcp_quality) > 0) +				if (scard.samplesize == 1)  a += mcp_qualitysize; +				else +					a = mcp_tablesize16 + mcp_qualitysize16; +			if ((longint)(bufsize) + (longint)(a) > 65500)  bufsize = longint(65500) - a; + +#ifdef DPMI +			dpmiversion((byte)(e), (byte)(e), (byte)(e), flags); +			v86 = (flags & 2) == 0; +#endif + +			/* Allocate volume table + mixing buffer */ +#ifdef DPMI + +			/* In the V86 mode, the buffer must be allocated below 1M */ +			if (v86)  { +				tempseg = 0; +				dpmiallocdos((a + longint(bufsize)) / longint(16) + longint(1), flags, (word)(tempseg)); +			} else { +#endif +				getmem(temp, a + longint(bufsize)); +				if (temp == nil)  exit(2); +#ifdef DPMI +				tempseg = seg(temp); +			} +#else +				tempseg = seg(temp) + ofs(temp) / 16 + 1; +#endif +			mcpstrc.bufferseg = tempseg; +			mcpstrc.bufferphysical = -1; + +			if (vdsok && (scard.id != id_dac))  { +				dds.size = bufsize; +				dds.segment = tempseg; +				dds.offset = 0; + +				/* Lock DMA buffer if VDS present */ +				if (vdslockdma(&dds) == 0)  mcpstrc.bufferphysical = dds.address; +			} +			if (mcpstrc.bufferphysical == -1) +#ifdef DPMI +				mcpstrc.bufferphysical = dpmigetlinearaddr(tempseg); +#else +				mcpstrc.bufferphysical = (longint)(tempseg) << 4; +#endif + +			mcpstrc.buffersize = bufsize; +			mcpstrc.samplingrate = rate; +			/* Initialize Multi Channel Player */ +			if (mcpinit(&mcpstrc) != 0)  exit(3); +			atexit(&mcpclose); + +			/* Initialize Channel Distributor */ +			cdiinit; + +			/* Register MCP into CDI*/ +			cdiregister(&cdi_mcp, 0, 31); +		} + +		/* Try to initialize AMP */ +		if (ampinit(0) != 0)  exit(3); +		atexit(&close); + +		/* Hook AMP player routine into Timer Service */ +		tsaddroutine(&interrupt, amp_timer); + +#ifndef DPMI +		/* If using DAC, then adjust DAC timer */ +		if (scard.id == id_dac)  setdactimer(tsgettimerrate); +#endif + +		if (scard.id != id_gus)  mcpstartvoice; +		else gusstartvoice; + +		/* Load an example AMF */ +		module = amploadmod("avalot2.mod", 0); +		if (module == nil)  exit(4); + +		/* Is it MCP, Quality mode and 16-bit card? */ +		if ((scard.id != id_gus) && ((mcpstrc.options & mcp_quality) > 0) +		        && (scard.samplesize == 2))  { +			/* Open module+2 channels with amplified volumetable (4.7 gain) */ +			for (a = 1; a <= 32; a ++) voltable[a - longint(1)] = a * longint(150) / longint(32); +			cdisetupchannels(0, module->channelcount + 2, &voltable); +		} else { +			/* Open module+2 channels with regular volumetable */ +			cdisetupchannels(0, module->channelcount + 2, nil); +		} + +		curch = module->channelcount; +		modulevolume = 64; + +		/***/ ampplaymodule(module, 0); +	} + +	gd = 3; +	gm = 1; +	initgraph(gd, gm, ""); +	assign(ff, "avalot.fnt"); +	reset(ff); +	ff >> f[0]; +	close(ff); +	assign(ff, "avitalic.fnt"); +	reset(ff); +	ff >> f[1]; +	close(ff); + +	c = addr(credits()); +	c -= 1; + +	fillchar(strip, sizeof(strip), '\0'); +	reverse = false; +	spinnum = 0; +	across = 7; +	charnum = 1; +	cfont = 0; +	bigo2("1189"); /* 1189? 79? 2345? 1967? */ +	bigo2go(); + +	if (! nomusic)  ampstopmodule; +	closegraph(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/status.cpp b/engines/avalanche/status.cpp index f9c5ddb75b..b4dd206c2a 100644 --- a/engines/avalanche/status.cpp +++ b/engines/avalanche/status.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 @@ -29,34 +29,44 @@  namespace Avalanche { -integer gd,gm; +integer gd, gm; -void data(integer y, string a,string b) -{; - setcolor(1); settextjustify(2,0); outtextxy(315,y,a+':'); - setcolor(0); settextjustify(0,0); outtextxy(325,y,b); +void data(integer y, string a, string b) { +	; +	setcolor(1); +	settextjustify(2, 0); +	outtextxy(315, y, a + ':'); +	setcolor(0); +	settextjustify(0, 0); +	outtextxy(325, y, b);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\turbo"); - setcolor(1); setfillstyle(1,7); bar(0,0,640,200); - settextstyle(1,0,0); setusercharsize(10,4,8,6); settextjustify(1,1); - outtextxy(317,20,"Status Screen"); - settextstyle(0,0,1); - data( 60,"Current game","NoName.ASG"); - data( 70,"Saved?","Yes"); - data( 90,"Current town","Thurringham"); - data(100,"Score","177"); - data(110,"Cash","1/-"); - data(130,"Game","Lord Avalot D'Argent"); - data(140,"Version","1.00 (beta)"); - data(150,"Registered to","Unregistered!"); - data(160,"Number","nix"); - data(177,"Bios/keyboard","AT (enhanced)"); /* or XT (bog standard) */ - data(187,"Display","VGA"); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\turbo"); +	setcolor(1); +	setfillstyle(1, 7); +	bar(0, 0, 640, 200); +	settextstyle(1, 0, 0); +	setusercharsize(10, 4, 8, 6); +	settextjustify(1, 1); +	outtextxy(317, 20, "Status Screen"); +	settextstyle(0, 0, 1); +	data(60, "Current game", "NoName.ASG"); +	data(70, "Saved?", "Yes"); +	data(90, "Current town", "Thurringham"); +	data(100, "Score", "177"); +	data(110, "Cash", "1/-"); +	data(130, "Game", "Lord Avalot D'Argent"); +	data(140, "Version", "1.00 (beta)"); +	data(150, "Registered to", "Unregistered!"); +	data(160, "Number", "nix"); +	data(177, "Bios/keyboard", "AT (enhanced)"); /* or XT (bog standard) */ +	data(187, "Display", "VGA"); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/sticks.cpp b/engines/avalanche/sticks.cpp index 840ca27ab7..97b60f74f6 100644 --- a/engines/avalanche/sticks.cpp +++ b/engines/avalanche/sticks.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 @@ -39,80 +39,110 @@  namespace Avalanche { -enum lmc {l,m,r, last_lmc}; /* Left, middle & right */ +enum lmc {l, m, r, last_lmc}; /* Left, middle & right */  file<joysetup> jf;  byte joyway(); -static lmc getlmc(word n,word max,word min) -{lmc getlmc_result; -; - if (n<min)  getlmc_result=l; else -  if (n>max)  getlmc_result=r; else -   getlmc_result=m; -return getlmc_result; +static lmc getlmc(word n, word max, word min) { +	lmc getlmc_result; +	; +	if (n < min)  getlmc_result = l; +	else if (n > max)  getlmc_result = r; +	else +		getlmc_result = m; +	return getlmc_result;  } -byte joyway() -{ - word x,y; - lmc xx,yy; -byte joyway_result; -; - if (~ dna.user_moves_avvy)  return joyway_result; - if (use_joy_a)  readjoya(x,y); else readjoyb(x,y); - - {; -  xx=getlmc(x,cxmax,cxmin); -  yy=getlmc(y,cymax,cymin); - } - - switch (xx) { -  case l: switch (yy) { -      case l: joyway_result=ul; break; -      case m: joyway_result=left; break; -      case r: joyway_result=dl; break; -     } -     break; -  case m: switch (yy) { -      case l: joyway_result=up; break; -      case m: joyway_result=stopped; break; -      case r: joyway_result=down; break; -     } -     break; -  case r: switch (yy) { -      case l: joyway_result=ur; break; -      case m: joyway_result=right; break; -      case r: joyway_result=dr; break; -     } -     break; - } -return joyway_result; +byte joyway() { +	word x, y; +	lmc xx, yy; +	byte joyway_result; +	; +	if (~ dna.user_moves_avvy)  return joyway_result; +	if (use_joy_a)  readjoya(x, y); +	else readjoyb(x, y); + +	{ +		; +		xx = getlmc(x, cxmax, cxmin); +		yy = getlmc(y, cymax, cymin); +	} + +	switch (xx) { +	case l: +		switch (yy) { +		case l: +			joyway_result = ul; +			break; +		case m: +			joyway_result = left; +			break; +		case r: +			joyway_result = dl; +			break; +		} +		break; +	case m: +		switch (yy) { +		case l: +			joyway_result = up; +			break; +		case m: +			joyway_result = stopped; +			break; +		case r: +			joyway_result = down; +			break; +		} +		break; +	case r: +		switch (yy) { +		case l: +			joyway_result = ur; +			break; +		case m: +			joyway_result = right; +			break; +		case r: +			joyway_result = dr; +			break; +		} +		break; +	} +	return joyway_result;  }  void joykeys() - /* The 2 joystick keys may be reprogrammed. This parses them. */ +/* The 2 joystick keys may be reprogrammed. This parses them. */  { -    byte v; -; - if (use_joy_a)  - { -   v=(byte)(buttona1); v += (byte)(buttona2)*2; - } else - { -   v=(byte)(buttonb1); v += (byte)(buttonb2)*2; - } - - switch (v) { -  case 0: return; break; /* No buttons pressed. */ -  case 1: opendoor; break; /* Button 1 pressed: open door. */ -/*  2: blip; { Button 2 pressed: nothing (joylock?). }*/ -  case 2:case 3: lookaround; break; /* Both buttons pressed: look around. */ - } +	byte v; +	; +	if (use_joy_a) { +		v = (byte)(buttona1); +		v += (byte)(buttona2) * 2; +	} else { +		v = (byte)(buttonb1); +		v += (byte)(buttonb2) * 2; +	} + +	switch (v) { +	case 0: +		return; +		break; /* No buttons pressed. */ +	case 1: +		opendoor; +		break; /* Button 1 pressed: open door. */ +		/*  2: blip; { Button 2 pressed: nothing (joylock?). }*/ +	case 2: +	case 3: +		lookaround; +		break; /* Both buttons pressed: look around. */ +	}  } -     /* No init code. */ +/* No init code. */  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/sticks.h b/engines/avalanche/sticks.h index c9235c065d..fef3464d22 100644 --- a/engines/avalanche/sticks.h +++ b/engines/avalanche/sticks.h @@ -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 @@ -32,7 +32,7 @@  /*#include "Joystick.h"*/  /*#include "Acci.h"*/  /*#include "Gyro.h"*/ -     /* for solidarity */ +/* for solidarity */  namespace Avalanche { diff --git a/engines/avalanche/sunrise.cpp b/engines/avalanche/sunrise.cpp index a5c6b28d9b..7baa88fe87 100644 --- a/engines/avalanche/sunrise.cpp +++ b/engines/avalanche/sunrise.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 @@ -30,56 +30,67 @@  namespace Avalanche { -integer gd,gm; +integer gd, gm;  longint tskellern /*absolute $0:244*/; /* Over int $61 */ -void hold() -{; - do {; } while (!(tskellern>=1)); - tskellern=0; +void hold() { +	; +	do { +		; +	} while (!(tskellern >= 1)); +	tskellern = 0;  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=1; initgraph(gd,gm,"c:\\bp\\bgi"); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 1; +	initgraph(gd, gm, "c:\\bp\\bgi"); - setvisualpage(1); - setfillstyle(1,1); - for( gd=1; gd <= 640; gd ++) -  bar(gd,177+trunc(20*sin((real)(gd)/39)),gd,350); - setfillstyle(1,3); setcolor(3); - fillellipse(320,277,60,50); - settextjustify(1,1); settextstyle(0,0,2); setcolor(9); - outtextxy(320,50,"The sun rises over Hertfordshire..."); - settextjustify(2,0); settextstyle(0,0,1); setcolor(0); - outtextxy(635,350,"Press any key..."); +	setvisualpage(1); +	setfillstyle(1, 1); +	for (gd = 1; gd <= 640; gd ++) +		bar(gd, 177 + trunc(20 * sin((real)(gd) / 39)), gd, 350); +	setfillstyle(1, 3); +	setcolor(3); +	fillellipse(320, 277, 60, 50); +	settextjustify(1, 1); +	settextstyle(0, 0, 2); +	setcolor(9); +	outtextxy(320, 50, "The sun rises over Hertfordshire..."); +	settextjustify(2, 0); +	settextstyle(0, 0, 1); +	setcolor(0); +	outtextxy(635, 350, "Press any key..."); - setpalette(0,egablue); - setpalette(1,egagreen); - setpalette(2,egayellow); - setpalette(3,egagreen); - setpalette(9,egalightblue); - setpalette(11,egalightblue); - setvisualpage(0); +	setpalette(0, egablue); +	setpalette(1, egagreen); +	setpalette(2, egayellow); +	setpalette(3, egagreen); +	setpalette(9, egalightblue); +	setpalette(11, egalightblue); +	setvisualpage(0); - port[0x3c4]=2; port[0x3ce]=4; - port[0x3c5]=1 << 1; port[0x3cf]=1; +	port[0x3c4] = 2; +	port[0x3ce] = 4; +	port[0x3c5] = 1 << 1; +	port[0x3cf] = 1; - for( gm=227; gm >= 1; gm --) /* <<< try running this loop the other way round! */ - {; -  move(mem[0xa000*gm*80+80],mem[0xa000*gm*80],8042); -  hold(); -  if (keypressed())  return 0; - } +	for (gm = 227; gm >= 1; gm --) { /* <<< try running this loop the other way round! */ +		; +		move(mem[0xa000 * gm * 80 + 80], mem[0xa000 * gm * 80], 8042); +		hold(); +		if (keypressed())  return 0; +	} - for( gm=101; gm >= 1; gm --) - {; -  move(mem[0xa000*80],mem[0xa000*0],gm*80); -  hold(); -  if (keypressed())  return 0; - } -return EXIT_SUCCESS; +	for (gm = 101; gm >= 1; gm --) { +		; +		move(mem[0xa000 * 80], mem[0xa000 * 0], gm * 80); +		hold(); +		if (keypressed())  return 0; +	} +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/tempo.cpp b/engines/avalanche/tempo.cpp index 21ee150ea1..914ba60d3a 100644 --- a/engines/avalanche/tempo.cpp +++ b/engines/avalanche/tempo.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 @@ -29,76 +29,80 @@  namespace Avalanche { -enum flavourtype {ch_ega,ch_bgi,ch_natural,ch_two,ch_one, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, ch_natural, ch_two, ch_one, last_flavourtype};  struct chunkblocktype { -                  union { -                   struct {flavourtype flavour; -                          integer x,y; -                          integer xl,yl; -                          longint size;} s_true; -                   array<1,14,byte> all; -                  }; +	union { +		struct { +			flavourtype flavour; +			integer x, y; +			integer xl, yl; +			longint size; +		} s_true; +		array<1, 14, byte> all; +	};  };  byte screennum;  untyped_file f; -string strf(longint x) -{ -    string q; -string strf_result; -; - str(x,q); strf_result=q; -return strf_result; +string strf(longint x) { +	string q; +	string strf_result; +	; +	str(x, q); +	strf_result = q; +	return strf_result;  } -void load() -{ -    byte a /*absolute $A000:1200*/; byte bit; -; - reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a,12080); - } - close(f); - bit=getpixel(0,0); +void load() { +	byte a /*absolute $A000:1200*/; +	byte bit; +	; +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a, 12080); +	} +	close(f); +	bit = getpixel(0, 0);  } -void init() -{ -    integer gd,gm; -; - output << "*** Tempo file creater ***" << NL; - output << "Enter place*.avd number:"; - input >> screennum >> NL; - gd=3; gm=0; - initgraph(gd,gm,"c:\\bp\\bgi"); - assign(f,string("place")+strf(screennum)+".avd"); - load(); - setactivepage(1); - setcolor(10); - outtextxy(0,150,"CHUNK FILE: please don't change these codes! ->"); - setactivepage(0); +void init() { +	integer gd, gm; +	; +	output << "*** Tempo file creater ***" << NL; +	output << "Enter place*.avd number:"; +	input >> screennum >> NL; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	assign(f, string("place") + strf(screennum) + ".avd"); +	load(); +	setactivepage(1); +	setcolor(10); +	outtextxy(0, 150, "CHUNK FILE: please don't change these codes! ->"); +	setactivepage(0);  } -void choose() -{ -    integer x1,y1,xl,yl; -; +void choose() { +	integer x1, y1, xl, yl; +	;  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - init(); - choose(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	init(); +	choose(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/test.cpp b/engines/avalanche/test.cpp index 22e49d0872..220c92c2c2 100644 --- a/engines/avalanche/test.cpp +++ b/engines/avalanche/test.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 @@ -30,18 +30,18 @@  namespace Avalanche { -const array<1,22,char> signature = string("*AVALOT* v1.00 ±tt± ")+'\3'+'\0'; +const array<1, 22, char> signature = string("*AVALOT* v1.00 ±tt± ") + '\3' + '\0';  pointer saveint1f; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - getintvec(0x1f,saveint1f); - setintvec(0x1f,&signature); - swapvectors; - exec("c:\\command.com",""); - swapvectors; - setintvec(0x1f,saveint1f); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	getintvec(0x1f, saveint1f); +	setintvec(0x1f, &signature); +	swapvectors; +	exec("c:\\command.com", ""); +	swapvectors; +	setintvec(0x1f, saveint1f); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/test2.cpp b/engines/avalanche/test2.cpp index 7efe64e77e..dfdaae5227 100644 --- a/engines/avalanche/test2.cpp +++ b/engines/avalanche/test2.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 @@ -29,17 +29,18 @@  namespace Avalanche { -const array<1,22,char> signature = string("*AVALOT* v1.00 ±tt± ")+'\3'+'\0'; +const array<1, 22, char> signature = string("*AVALOT* v1.00 ±tt± ") + '\3' + '\0';  pointer getint1f; -array<1,22,char> x; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - getintvec(0x1f,getint1f); - move(getint1f,x,22); - if (x==signature)  -  output << "Signature found." << NL; else output << "Signature NOT found!" << NL; -return EXIT_SUCCESS; +array<1, 22, char> x; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	getintvec(0x1f, getint1f); +	move(getint1f, x, 22); +	if (x == signature) +		output << "Signature found." << NL; +	else output << "Signature NOT found!" << NL; +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/testblit.cpp b/engines/avalanche/testblit.cpp index 5fe1e3aca1..b58ddc628d 100644 --- a/engines/avalanche/testblit.cpp +++ b/engines/avalanche/testblit.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 @@ -34,43 +34,51 @@ const integer borland = xorput;  const integer mb1 = 2; /* 2 */  const integer mb2 = 4; /* 4 */ -integer gd,gm; +integer gd, gm;  pointer p;  word s; -void mblit() -{ -    byte bit; longint st; -; - st=ttp; - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=mb1; -  portw[0x3ce]=copyput*256+3; -  portw[0x3ce]=0x205; -  port[0x3ce]=0x8; -  port[0x3c5]=1 << bit; -  port[0x3cf]=bit; -  move(mem[longint(0xa000)*st],mem[0xa000*0],7200); - } +void mblit() { +	byte bit; +	longint st; +	; +	st = ttp; +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = mb1; +		portw[0x3ce] = copyput * 256 + 3; +		portw[0x3ce] = 0x205; +		port[0x3ce] = 0x8; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		move(mem[longint(0xa000)*st], mem[0xa000 * 0], 7200); +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,""); - settextstyle(1,0,7); - for( gd=0; gd <= 1; gd ++) - {; -  setactivepage(gd); setcolor(6*gd+6); -  outtextxy(0,0,chr(65+gd)); - } - s=imagesize(0,0,90,90); setactivepage(0); getmem(p,s); - getimage(0,0,90,90,p); putimage(100,100,p,0); - setactivepage(1); getimage(0,0,90,90,p); setactivepage(0); - putimage(100,100,p,borland); - mblit(); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	settextstyle(1, 0, 7); +	for (gd = 0; gd <= 1; gd ++) { +		; +		setactivepage(gd); +		setcolor(6 * gd + 6); +		outtextxy(0, 0, chr(65 + gd)); +	} +	s = imagesize(0, 0, 90, 90); +	setactivepage(0); +	getmem(p, s); +	getimage(0, 0, 90, 90, p); +	putimage(100, 100, p, 0); +	setactivepage(1); +	getimage(0, 0, 90, 90, p); +	setactivepage(0); +	putimage(100, 100, p, borland); +	mblit(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/testcard.cpp b/engines/avalanche/testcard.cpp index f435df0c9b..aec0d92aed 100644 --- a/engines/avalanche/testcard.cpp +++ b/engines/avalanche/testcard.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 @@ -30,55 +30,65 @@  namespace Avalanche { -integer gd,gm; +integer gd, gm;  string filename; -untyped_file f; byte bit; +untyped_file f; +byte bit;  byte a /*absolute $A000:800*/;  searchrec r; -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); - for( gd=0; gd <= 14; gd ++) -  for( gm=0; gm <= 11; gm ++) -  {; -   setfillstyle(gm,gd+1); -   bar(gd*43,gm*12+10,42+gd*43,gm*12+21); -  } +	for (gd = 0; gd <= 14; gd ++) +		for (gm = 0; gm <= 11; gm ++) { +			; +			setfillstyle(gm, gd + 1); +			bar(gd * 43, gm * 12 + 10, 42 + gd * 43, gm * 12 + 21); +		} - output << NL; output << NL; output << NL; output << NL; +	output << NL; +	output << NL; +	output << NL; +	output << NL; - output << "Thorsoft testcard." << NL; - output << NL; - output << "Room number? "; input >> filename >> NL; +	output << "Thorsoft testcard." << NL; +	output << NL; +	output << "Room number? "; +	input >> filename >> NL; - findfirst(string("place")+filename+".avd",anyfile,r); - if (doserror==0)  - {; -  output << "*** ALREADY EXISTS! CANCELLED! ***" << NL; -  input >> NL; -  exit(0); - } +	findfirst(string("place") + filename + ".avd", anyfile, r); +	if (doserror == 0) { +		; +		output << "*** ALREADY EXISTS! CANCELLED! ***" << NL; +		input >> NL; +		exit(0); +	} - output << NL; - output << "*** Until this room is drawn, this screen is standing in for it. ***" << NL; - output << NL; - output << "Any other comments? "; - input >> NL; +	output << NL; +	output << "*** Until this room is drawn, this screen is standing in for it. ***" << NL; +	output << NL; +	output << "Any other comments? "; +	input >> NL; - assign(f,string("place")+filename+".avd"); - rewrite(f,1); - blockwrite(f,gd,177); /* just anything */ - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockwrite(f,a,12080); - } - close(f); -return EXIT_SUCCESS; +	assign(f, string("place") + filename + ".avd"); +	rewrite(f, 1); +	blockwrite(f, gd, 177); /* just anything */ +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockwrite(f, a, 12080); +	} +	close(f); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/testenh.cpp b/engines/avalanche/testenh.cpp index 86b01b5737..d0a0ac31f6 100644 --- a/engines/avalanche/testenh.cpp +++ b/engines/avalanche/testenh.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 @@ -29,18 +29,23 @@  namespace Avalanche { -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - do { -  readkeye; -  switch (inchar) { -   case '\0': output << string('[')+extd+']'; break; -   case '\340': output << string('<')+extd+'>'; break; -   default: output << inchar; -  } - } while (!(inchar=='\33')); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	do { +		readkeye; +		switch (inchar) { +		case '\0': +			output << string('[') + extd + ']'; +			break; +		case '\340': +			output << string('<') + extd + '>'; +			break; +		default: +			output << inchar; +		} +	} while (!(inchar == '\33')); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/timeout.cpp b/engines/avalanche/timeout.cpp index 2c83104a5d..553d503d0d 100644 --- a/engines/avalanche/timeout.cpp +++ b/engines/avalanche/timeout.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 @@ -51,89 +51,169 @@ namespace Avalanche {  byte fv; -void set_up_timer(longint howlong, byte whither,byte why) -{ - fv=1; - while ((fv<8) && (times[fv].time_left!=0))  fv += 1; - if (fv==8)  return; /* Oh dear... */ - - { -  timetype& with = times[fv];  /* Everything's OK here! */ - -  with.time_left=howlong; -  with.then_where=whither; -  with.what_for=why; - } -} - -void one_tick() -{ - - if (ddmnow)  return; - - for( fv=1; fv <= 7; fv ++) -  { timetype& with = times[fv];  -   if (with.time_left>0)  -   { -    with.time_left -= 1; - -    if (with.time_left==0)  -    switch (with.then_where) { -     case procopen_drawbridge : open_drawbridge(); break; -     case procavaricius_talks : avaricius_talks(); break; -     case procurinate : urinate(); break; -     case proctoilet2 : toilet2(); break; -     case procbang: bang(); break; -     case procbang2: bang2(); break; -     case procstairs: stairs(); break; -     case proccardiffsurvey: cardiff_survey(); break; -     case proccardiff_return: cardiff_return(); break; -     case proc_cwytalot_in_herts: cwytalot_in_herts(); break; -     case procget_tied_up: get_tied_up(); break; -     case procget_tied_up2: get_tied_up2(); break; -     case prochang_around: hang_around(); break; -     case prochang_around2: hang_around2(); break; -     case procafter_the_shootemup: after_the_shootemup(); break; -     case procjacques_wakes_up: jacques_wakes_up(); break; -     case procnaughty_duke: naughty_duke(); break; -     case procnaughty_duke2: naughty_duke2(); break; -     case procnaughty_duke3: naughty_duke3(); break; -     case procjump: jump(); break; -     case procsequence: call_sequencer(); break; -     case proccrapulus_splud_out: crapulus_says_splud_out(); break; -     case procdawn_delay: dawn(); break; -     case procbuydrinks: buydrinks(); break; -     case procbuywine: buywine(); break; -     case proccallsguards: callsguards(); break; -     case procgreetsmonk: greetsmonk(); break; -     case procfall_down_oubliette: fall_down_oubliette(); break; -     case procmeet_avaroid: meet_avaroid(); break; -     case procrise_up_oubliette: rise_up_oubliette(); break; -     case procrobin_hood_and_geida: robin_hood_and_geida(); break; -     case procrobin_hood_and_geida_talk: robin_hood_and_geida_talk(); break; -     case procavalot_returns: avalot_returns(); break; -     case procavvy_sit_down: avvy_sit_down(); break; -     case procghost_room_phew: ghost_room_phew(); break; -     case procarkata_shouts: arkata_shouts(); break; -     case procwinning: winning(); break; -     case procavalot_falls: avalot_falls(); break; -     case procspludwick_goes_to_cauldron: spludwick_goes_to_cauldron(); break; -     case procspludwick_leaves_cauldron: spludwick_leaves_cauldron(); break; -     case procgive_lute_to_geida: give_lute_to_geida(); break; -    } -   }} - roomtime += 1; /* Cycles since you've been in this room. */ - dna.total_time += 1; /* Total amount of time for this game. */ -} - -void lose_timer(byte which) -{ -    byte fv; - - for( fv=1; fv <= 7; fv ++) -  { timetype& with = times[fv];  -   if (with.what_for==which)  -    with.time_left=0;} /* Cancel this one! */ +void set_up_timer(longint howlong, byte whither, byte why) { +	fv = 1; +	while ((fv < 8) && (times[fv].time_left != 0))  fv += 1; +	if (fv == 8)  return; /* Oh dear... */ + +	{ +		timetype &with = times[fv];  /* Everything's OK here! */ + +		with.time_left = howlong; +		with.then_where = whither; +		with.what_for = why; +	} +} + +void one_tick() { + +	if (ddmnow)  return; + +	for (fv = 1; fv <= 7; fv ++) { +		timetype &with = times[fv]; +		if (with.time_left > 0) { +			with.time_left -= 1; + +			if (with.time_left == 0) +				switch (with.then_where) { +				case procopen_drawbridge : +					open_drawbridge(); +					break; +				case procavaricius_talks : +					avaricius_talks(); +					break; +				case procurinate : +					urinate(); +					break; +				case proctoilet2 : +					toilet2(); +					break; +				case procbang: +					bang(); +					break; +				case procbang2: +					bang2(); +					break; +				case procstairs: +					stairs(); +					break; +				case proccardiffsurvey: +					cardiff_survey(); +					break; +				case proccardiff_return: +					cardiff_return(); +					break; +				case proc_cwytalot_in_herts: +					cwytalot_in_herts(); +					break; +				case procget_tied_up: +					get_tied_up(); +					break; +				case procget_tied_up2: +					get_tied_up2(); +					break; +				case prochang_around: +					hang_around(); +					break; +				case prochang_around2: +					hang_around2(); +					break; +				case procafter_the_shootemup: +					after_the_shootemup(); +					break; +				case procjacques_wakes_up: +					jacques_wakes_up(); +					break; +				case procnaughty_duke: +					naughty_duke(); +					break; +				case procnaughty_duke2: +					naughty_duke2(); +					break; +				case procnaughty_duke3: +					naughty_duke3(); +					break; +				case procjump: +					jump(); +					break; +				case procsequence: +					call_sequencer(); +					break; +				case proccrapulus_splud_out: +					crapulus_says_splud_out(); +					break; +				case procdawn_delay: +					dawn(); +					break; +				case procbuydrinks: +					buydrinks(); +					break; +				case procbuywine: +					buywine(); +					break; +				case proccallsguards: +					callsguards(); +					break; +				case procgreetsmonk: +					greetsmonk(); +					break; +				case procfall_down_oubliette: +					fall_down_oubliette(); +					break; +				case procmeet_avaroid: +					meet_avaroid(); +					break; +				case procrise_up_oubliette: +					rise_up_oubliette(); +					break; +				case procrobin_hood_and_geida: +					robin_hood_and_geida(); +					break; +				case procrobin_hood_and_geida_talk: +					robin_hood_and_geida_talk(); +					break; +				case procavalot_returns: +					avalot_returns(); +					break; +				case procavvy_sit_down: +					avvy_sit_down(); +					break; +				case procghost_room_phew: +					ghost_room_phew(); +					break; +				case procarkata_shouts: +					arkata_shouts(); +					break; +				case procwinning: +					winning(); +					break; +				case procavalot_falls: +					avalot_falls(); +					break; +				case procspludwick_goes_to_cauldron: +					spludwick_goes_to_cauldron(); +					break; +				case procspludwick_leaves_cauldron: +					spludwick_leaves_cauldron(); +					break; +				case procgive_lute_to_geida: +					give_lute_to_geida(); +					break; +				} +		} +	} +	roomtime += 1; /* Cycles since you've been in this room. */ +	dna.total_time += 1; /* Total amount of time for this game. */ +} + +void lose_timer(byte which) { +	byte fv; + +	for (fv = 1; fv <= 7; fv ++) { +		timetype &with = times[fv]; +		if (with.what_for == which) +			with.time_left = 0; +	} /* Cancel this one! */  }  /*function timer_is_on(which:byte):boolean; @@ -151,472 +231,469 @@ end;*/  /* Timeout procedures: */ -void open_drawbridge() -{ - { -  dnatype& with = dna;  +void open_drawbridge() { +	{ +		dnatype &with = dna; -  with.drawbridge_open += 1; -  show_one(with.drawbridge_open-1); +		with.drawbridge_open += 1; +		show_one(with.drawbridge_open - 1); -  if (with.drawbridge_open==4)  -   magics[2].op=nix; /* You may enter the drawbridge. */ -  else set_up_timer(7,procopen_drawbridge,reason_drawbridgefalls); - } +		if (with.drawbridge_open == 4) +			magics[2].op = nix; /* You may enter the drawbridge. */ +		else set_up_timer(7, procopen_drawbridge, reason_drawbridgefalls); +	}  }  /* --- */ -void avaricius_talks() -{ - { -  dnatype& with = dna;  +void avaricius_talks() { +	{ +		dnatype &with = dna; -  dixi('q',with.avaricius_talk); -  with.avaricius_talk += 1; +		dixi('q', with.avaricius_talk); +		with.avaricius_talk += 1; -  if (with.avaricius_talk<17)  -   set_up_timer(177,procavaricius_talks,reason_avariciustalks); -  else points(3); +		if (with.avaricius_talk < 17) +			set_up_timer(177, procavaricius_talks, reason_avariciustalks); +		else points(3); - } +	}  } -void urinate() -{ - tr[1].turn(up); - stopwalking(); - showrw(); - set_up_timer(14,proctoilet2,reason_gototoilet); +void urinate() { +	tr[1].turn(up); +	stopwalking(); +	showrw(); +	set_up_timer(14, proctoilet2, reason_gototoilet);  } -void toilet2() -{ - display("That's better!"); +void toilet2() { +	display("That's better!");  } -void bang() -{ - display("\6< BANG! >"); - set_up_timer(30,procbang2,reason_explosion); +void bang() { +	display("\6< BANG! >"); +	set_up_timer(30, procbang2, reason_explosion);  } -void bang2() -{ - display("Hmm... sounds like Spludwick's up to something..."); +void bang2() { +	display("Hmm... sounds like Spludwick's up to something...");  } -void stairs() -{ - blip(); - tr[1].walkto(4); - show_one(2); - dna.brummie_stairs=2; - magics[11].op=special; - magics[11].data=2;  /* Reached the bottom of the stairs. */ - magics[4].op=nix;  /* Stop them hitting the sides (or the game will hang.) */ +void stairs() { +	blip(); +	tr[1].walkto(4); +	show_one(2); +	dna.brummie_stairs = 2; +	magics[11].op = special; +	magics[11].data = 2; /* Reached the bottom of the stairs. */ +	magics[4].op = nix; /* Stop them hitting the sides (or the game will hang.) */  } -void cardiff_survey() -{ - { -  dnatype& with = dna;  - -  switch (with.cardiff_things) { -   case 0: { -       with.cardiff_things += 1; -       dixi('q',27); -      } -      break; -  } -  dixi('z',with.cardiff_things); - } - interrogation=dna.cardiff_things; - set_up_timer(182,proccardiffsurvey,reason_cardiffsurvey); -} - -void cardiff_return() -{ - dixi('q',28); - cardiff_survey(); /* add end of question. */ -} +void cardiff_survey() { +	{ +		dnatype &with = dna; -void cwytalot_in_herts() -{ - dixi('q',29); +		switch (with.cardiff_things) { +		case 0: { +			with.cardiff_things += 1; +			dixi('q', 27); +		} +		break; +		} +		dixi('z', with.cardiff_things); +	} +	interrogation = dna.cardiff_things; +	set_up_timer(182, proccardiffsurvey, reason_cardiffsurvey);  } -void get_tied_up() -{ - dixi('q',34); /* ...Trouble! */ - dna.user_moves_avvy=false; - dna.been_tied_up=true; - stopwalking(); - tr[2].stopwalk(); tr[2].stophoming(); - tr[2].call_eachstep=true; - tr[2].eachstep=procgrab_avvy; - set_up_timer(70,procget_tied_up2,reason_getting_tied_up); +void cardiff_return() { +	dixi('q', 28); +	cardiff_survey(); /* add end of question. */  } -void get_tied_up2() -{ - tr[1].walkto(4); - tr[2].walkto(5); - magics[4].op=nix;  /* No effect when you touch the boundaries. */ - dna.friar_will_tie_you_up=true; +void cwytalot_in_herts() { +	dixi('q', 29);  } -void hang_around() -{ - tr[2].check_me=false; - tr[1].init(7,true); /* Robin Hood */ - whereis[probinhood]=r__robins; - apped(1,2); - dixi('q',39); - tr[1].walkto(7); - set_up_timer(55,prochang_around2,reason_hanging_around); -} - -void hang_around2() -{ - dixi('q',40); - tr[2].vanishifstill=false; - tr[2].walkto(4); - whereis[pfriartuck]=r__robins; - dixi('q',41); - tr[1].done(); tr[2].done(); /* Get rid of Robin Hood and Friar Tuck. */ - - set_up_timer(1,procafter_the_shootemup,reason_hanging_around); /* Immediately -  call the following proc (when you have a chance). */ - - dna.tied_up=false; - - back_to_bootstrap(1); /* Call the shoot-'em-up. */ +void get_tied_up() { +	dixi('q', 34); /* ...Trouble! */ +	dna.user_moves_avvy = false; +	dna.been_tied_up = true; +	stopwalking(); +	tr[2].stopwalk(); +	tr[2].stophoming(); +	tr[2].call_eachstep = true; +	tr[2].eachstep = procgrab_avvy; +	set_up_timer(70, procget_tied_up2, reason_getting_tied_up);  } -void after_the_shootemup() -{ -    byte shootscore,gain; - - tr[1].init(0,true); /* Avalot. */ - apped(1,2); dna.user_moves_avvy=true; - dna.obj[crossbow]=true; objectlist(); - - shootscore=mem[storage_seg*storage_ofs]; - gain=(shootscore+5) / 10;    /* Rounding up. */ - - display(string("\6Your score was ")+strf(shootscore)+'.'+"\r\rYou gain ("+ -    strf(shootscore)+" ö 10) = "+strf(gain)+" points."); - - if (gain>20)  - { -   display("But we won't let you have more than 20 points!"); -   points(20); - } else -   points(gain); - - dixi('q',70); +void get_tied_up2() { +	tr[1].walkto(4); +	tr[2].walkto(5); +	magics[4].op = nix; /* No effect when you touch the boundaries. */ +	dna.friar_will_tie_you_up = true;  } -void jacques_wakes_up() -{ - dna.jacques_awake += 1; - - switch (dna.jacques_awake) { /* Additional pictures. */ -  case 1 : { -       show_one(1); /* Eyes open. */ -       dixi('Q',45); -      } -      break; -  case 2 : { /* Going through the door. */ -       show_one(2); /* Not on the floor. */ -       show_one(3); /* But going through the door. */ -       magics[6].op=nix;  /* You can't wake him up now. */ -      } -      break; -  case 3 : { /* Gone through the door. */ -       show_one(2); /* Not on the floor, either. */ -       show_one(4); /* He's gone... so the door's open. */ -       whereis[pjacques]=0;  /* Gone! */ -      } -      break; - } - - - if (dna.jacques_awake==5)  - { -  dna.ringing_bells=true; -  dna.ayles_is_awake=true; -  points(2); - } - - switch (dna.jacques_awake) { -  case RANGE_3(1,3): set_up_timer(12,procjacques_wakes_up,reason_jacques_waking_up); -  break; -  case 4: set_up_timer(24,procjacques_wakes_up,reason_jacques_waking_up); break; - } - +void hang_around() { +	tr[2].check_me = false; +	tr[1].init(7, true); /* Robin Hood */ +	whereis[probinhood] = r__robins; +	apped(1, 2); +	dixi('q', 39); +	tr[1].walkto(7); +	set_up_timer(55, prochang_around2, reason_hanging_around);  } -void naughty_duke() - /* This is when the Duke comes in and takes your money. */ -{ - tr[2].init(9,false); /* Here comes the Duke. */ - apped(2,1); /* He starts at the door... */ - tr[2].walkto(3); /* He walks over to you. */ +void hang_around2() { +	dixi('q', 40); +	tr[2].vanishifstill = false; +	tr[2].walkto(4); +	whereis[pfriartuck] = r__robins; +	dixi('q', 41); +	tr[1].done(); +	tr[2].done(); /* Get rid of Robin Hood and Friar Tuck. */ - /* Let's get the door opening. */ +	set_up_timer(1, procafter_the_shootemup, reason_hanging_around); /* Immediately +  call the following proc (when you have a chance). */ - show_one(1); first_show(2); start_to_close(); +	dna.tied_up = false; - set_up_timer(50,procnaughty_duke2,reason_naughty_duke); +	back_to_bootstrap(1); /* Call the shoot-'em-up. */  } -void naughty_duke2() -{ - dixi('q',48); /* Ha ha, it worked again! */ - tr[2].walkto(1); /* Walk to the door. */ - tr[2].vanishifstill=true;  /* Then go away! */ - set_up_timer(32,procnaughty_duke3,reason_naughty_duke); -} +void after_the_shootemup() { +	byte shootscore, gain; -void naughty_duke3() -{ - show_one(1); first_show(2); start_to_close(); -} +	tr[1].init(0, true); /* Avalot. */ +	apped(1, 2); +	dna.user_moves_avvy = true; +	dna.obj[crossbow] = true; +	objectlist(); -void jump() -{ - { -  dnatype& with = dna;  - -  with.jumpstatus += 1; - -  { triptype& with1 = tr[1];  -   switch (with.jumpstatus) { -    case 1:case 2:case 3:case 5:case 7:case 9: with1.y -= 1; break; -    case 12:case 13:case 14:case 16:case 18:case 19: with1.y += 1; break; -   }} - -  if (with.jumpstatus==20)  -  {     /* End of jump. */ -   dna.user_moves_avvy=true; -   dna.jumpstatus=0; -  } else -  {     /* Still jumping. */ -   set_up_timer(1,procjump,reason_jumping); -  } - -  if ((with.jumpstatus==10) /* You're at the highest point of your jump. */ -   && (dna.room==r__insidecardiffcastle) -    && (dna.arrow_in_the_door==true) -     && (infield(3))) /* beside the wall*/  -    {     /* Grab the arrow! */ -       if (dna.carrying>=maxobjs)  -          display("You fail to grab it, because your hands are full."); -       else -       { -          show_one(2); -          dna.arrow_in_the_door=false;  /* You've got it. */ -          dna.obj[bolt]=true; -          objectlist(); -          dixi('q',50); -          points(3); -       } -    } - } -} - -void crapulus_says_splud_out() -{ - dixi('q',56); - dna.crapulus_will_tell=false; -} +	shootscore = mem[storage_seg * storage_ofs]; +	gain = (shootscore + 5) / 10; /* Rounding up. */ -void buydrinks() -{ - show_one(11); /* Malagauche gets up again. */ - dna.malagauche=0; +	display(string("\6Your score was ") + strf(shootscore) + '.' + "\r\rYou gain (" + +	        strf(shootscore) + " ö 10) = " + strf(gain) + " points."); - dixi('D',ord(dna.drinking)); /* Display message about it. */ - wobble(); /* Do the special effects. */ - dixi('D',1); /* That'll be thruppence. */ - if (pennycheck(3)) /* Pay 3d. */ -       dixi('D',3); /* Tell 'em you paid up. */ - have_a_drink(); -} +	if (gain > 20) { +		display("But we won't let you have more than 20 points!"); +		points(20); +	} else +		points(gain); -void buywine() -{ - show_one(11); /* Malagauche gets up again. */ - dna.malagauche=0; - - dixi('D',50); /* You buy the wine. */ - dixi('D',1); /* It'll be thruppence. */ - if (pennycheck(3))  - { -  dixi('D',4); /* You paid up. */ -  dna.obj[wine]=true; -  objectlist(); -  dna.winestate=1;  /* OK Wine */ - } +	dixi('q', 70);  } -void callsguards() -{ - dixi('Q',58); /* GUARDS!!! */ - gameover(); -} +void jacques_wakes_up() { +	dna.jacques_awake += 1; -void greetsmonk() -{ - dixi('Q',59); dna.entered_lusties_room_as_monk=true; -} +	switch (dna.jacques_awake) { /* Additional pictures. */ +	case 1 : { +		show_one(1); /* Eyes open. */ +		dixi('Q', 45); +	} +	break; +	case 2 : { /* Going through the door. */ +		show_one(2); /* Not on the floor. */ +		show_one(3); /* But going through the door. */ +		magics[6].op = nix; /* You can't wake him up now. */ +	} +	break; +	case 3 : { /* Gone through the door. */ +		show_one(2); /* Not on the floor, either. */ +		show_one(4); /* He's gone... so the door's open. */ +		whereis[pjacques] = 0; /* Gone! */ +	} +	break; +	} -void fall_down_oubliette() -{ - magics[9].op=nix; - tr[1].iy += 1; /* increments dx/dy! */ - tr[1].y += tr[1].iy;   /* Dowwwn we go... */ - set_up_timer(3,procfall_down_oubliette,reason_falling_down_oubliette); -} -void meet_avaroid() -{ - if (dna.met_avaroid)  - { -  display("You can't expect to be \6that\22 lucky twice in a row!"); -  gameover(); - } else - { -  dixi('Q',60); dna.met_avaroid=true; -  set_up_timer(1,procrise_up_oubliette,reason_rising_up_oubliette); -  { -                      triptype& with = tr[1];   with.face=left; with.x=151; with.ix=-3; with.iy=-5; } -  background(2); - } -} - -void rise_up_oubliette() -{ - { -  triptype& with = tr[1];  +	if (dna.jacques_awake == 5) { +		dna.ringing_bells = true; +		dna.ayles_is_awake = true; +		points(2); +	} -  with.visible=true; -  with.iy += 1; /* decrements dx/dy! */ -  with.y -= with.iy; /* Uuuupppp we go... */ -  if (with.iy>0)  -   set_up_timer(3,procrise_up_oubliette,reason_rising_up_oubliette); -  else -   dna.user_moves_avvy=true; - } -} +	switch (dna.jacques_awake) { +	case RANGE_3(1, 3): +		set_up_timer(12, procjacques_wakes_up, reason_jacques_waking_up); +		break; +	case 4: +		set_up_timer(24, procjacques_wakes_up, reason_jacques_waking_up); +		break; +	} -void robin_hood_and_geida() -{ - tr[1].init(7,true); - apped(1,7); - tr[1].walkto(6); - tr[2].stopwalk(); - tr[2].face=left; - set_up_timer(20,procrobin_hood_and_geida_talk,reason_robin_hood_and_geida); - dna.geida_follows=false;  } -void robin_hood_and_geida_talk() -{ - dixi('q',66); tr[1].walkto(2); tr[2].walkto(2); - tr[1].vanishifstill=true; tr[2].vanishifstill=true; - set_up_timer(162,procavalot_returns,reason_robin_hood_and_geida); +void naughty_duke() +/* This is when the Duke comes in and takes your money. */ +{ +	tr[2].init(9, false); /* Here comes the Duke. */ +	apped(2, 1); /* He starts at the door... */ +	tr[2].walkto(3); /* He walks over to you. */ + +	/* Let's get the door opening. */ + +	show_one(1); +	first_show(2); +	start_to_close(); + +	set_up_timer(50, procnaughty_duke2, reason_naughty_duke); +} + +void naughty_duke2() { +	dixi('q', 48); /* Ha ha, it worked again! */ +	tr[2].walkto(1); /* Walk to the door. */ +	tr[2].vanishifstill = true; /* Then go away! */ +	set_up_timer(32, procnaughty_duke3, reason_naughty_duke); +} + +void naughty_duke3() { +	show_one(1); +	first_show(2); +	start_to_close(); +} + +void jump() { +	{ +		dnatype &with = dna; + +		with.jumpstatus += 1; + +		{ +			triptype &with1 = tr[1]; +			switch (with.jumpstatus) { +			case 1: +			case 2: +			case 3: +			case 5: +			case 7: +			case 9: +				with1.y -= 1; +				break; +			case 12: +			case 13: +			case 14: +			case 16: +			case 18: +			case 19: +				with1.y += 1; +				break; +			} +		} + +		if (with.jumpstatus == 20) { +			/* End of jump. */ +			dna.user_moves_avvy = true; +			dna.jumpstatus = 0; +		} else { +			/* Still jumping. */ +			set_up_timer(1, procjump, reason_jumping); +		} + +		if ((with.jumpstatus == 10) /* You're at the highest point of your jump. */ +		        && (dna.room == r__insidecardiffcastle) +		        && (dna.arrow_in_the_door == true) +		        && (infield(3))) { /* beside the wall*/ +			/* Grab the arrow! */ +			if (dna.carrying >= maxobjs) +				display("You fail to grab it, because your hands are full."); +			else { +				show_one(2); +				dna.arrow_in_the_door = false; /* You've got it. */ +				dna.obj[bolt] = true; +				objectlist(); +				dixi('q', 50); +				points(3); +			} +		} +	} +} + +void crapulus_says_splud_out() { +	dixi('q', 56); +	dna.crapulus_will_tell = false; +} + +void buydrinks() { +	show_one(11); /* Malagauche gets up again. */ +	dna.malagauche = 0; + +	dixi('D', ord(dna.drinking)); /* Display message about it. */ +	wobble(); /* Do the special effects. */ +	dixi('D', 1); /* That'll be thruppence. */ +	if (pennycheck(3)) /* Pay 3d. */ +		dixi('D', 3); /* Tell 'em you paid up. */ +	have_a_drink(); +} + +void buywine() { +	show_one(11); /* Malagauche gets up again. */ +	dna.malagauche = 0; + +	dixi('D', 50); /* You buy the wine. */ +	dixi('D', 1); /* It'll be thruppence. */ +	if (pennycheck(3)) { +		dixi('D', 4); /* You paid up. */ +		dna.obj[wine] = true; +		objectlist(); +		dna.winestate = 1; /* OK Wine */ +	} +} + +void callsguards() { +	dixi('Q', 58); /* GUARDS!!! */ +	gameover(); +} + +void greetsmonk() { +	dixi('Q', 59); +	dna.entered_lusties_room_as_monk = true; +} + +void fall_down_oubliette() { +	magics[9].op = nix; +	tr[1].iy += 1; /* increments dx/dy! */ +	tr[1].y += tr[1].iy;   /* Dowwwn we go... */ +	set_up_timer(3, procfall_down_oubliette, reason_falling_down_oubliette); +} + +void meet_avaroid() { +	if (dna.met_avaroid) { +		display("You can't expect to be \6that\22 lucky twice in a row!"); +		gameover(); +	} else { +		dixi('Q', 60); +		dna.met_avaroid = true; +		set_up_timer(1, procrise_up_oubliette, reason_rising_up_oubliette); +		{ +			triptype &with = tr[1]; +			with.face = left; +			with.x = 151; +			with.ix = -3; +			with.iy = -5; +		} +		background(2); +	} +} + +void rise_up_oubliette() { +	{ +		triptype &with = tr[1]; + +		with.visible = true; +		with.iy += 1; /* decrements dx/dy! */ +		with.y -= with.iy; /* Uuuupppp we go... */ +		if (with.iy > 0) +			set_up_timer(3, procrise_up_oubliette, reason_rising_up_oubliette); +		else +			dna.user_moves_avvy = true; +	} +} + +void robin_hood_and_geida() { +	tr[1].init(7, true); +	apped(1, 7); +	tr[1].walkto(6); +	tr[2].stopwalk(); +	tr[2].face = left; +	set_up_timer(20, procrobin_hood_and_geida_talk, reason_robin_hood_and_geida); +	dna.geida_follows = false; +} + +void robin_hood_and_geida_talk() { +	dixi('q', 66); +	tr[1].walkto(2); +	tr[2].walkto(2); +	tr[1].vanishifstill = true; +	tr[2].vanishifstill = true; +	set_up_timer(162, procavalot_returns, reason_robin_hood_and_geida);  } - -void avalot_returns() -{ - tr[1].done(); tr[2].done(); - tr[1].init(0,true); - apped(1,1); - dixi('q',67); - dna.user_moves_avvy=true; + +void avalot_returns() { +	tr[1].done(); +	tr[2].done(); +	tr[1].init(0, true); +	apped(1, 1); +	dixi('q', 67); +	dna.user_moves_avvy = true;  }  void avvy_sit_down() - /* This is used when you sit down in the pub in Notts. It loops around so -   that it will happen when Avvy stops walking. */ +/* This is used when you sit down in the pub in Notts. It loops around so +  that it will happen when Avvy stops walking. */  { - if (tr[1].homing)    /* Still walking */ -  set_up_timer(1,procavvy_sit_down,reason_sitting_down); - else - { -  show_one(3); -  dna.sitting_in_pub=true; -  dna.user_moves_avvy=false; -  tr[1].visible=false; - } -} - -void ghost_room_phew() -{ - display("\6PHEW!\22 You're glad to get out of \6there!"); +	if (tr[1].homing)    /* Still walking */ +		set_up_timer(1, procavvy_sit_down, reason_sitting_down); +	else { +		show_one(3); +		dna.sitting_in_pub = true; +		dna.user_moves_avvy = false; +		tr[1].visible = false; +	}  } -void arkata_shouts() -{ -  if (dna.teetotal)  return; -  dixi('q',76); -  set_up_timer(160,procarkata_shouts,reason_arkata_shouts); +void ghost_room_phew() { +	display("\6PHEW!\22 You're glad to get out of \6there!");  } -void winning() -{ - dixi('q',79); - winning_pic(); - do { checkclick(); } while (!(mrelease==0)); - callverb(vb_score); - display(" T H E    E N D "); - lmo=true; +void arkata_shouts() { +	if (dna.teetotal)  return; +	dixi('q', 76); +	set_up_timer(160, procarkata_shouts, reason_arkata_shouts);  } -void avalot_falls() -{ - if (tr[1].step<5)  - { -  tr[1].step += 1; -  set_up_timer(3,procavalot_falls,reason_falling_over); - } else -  display("\r\r\r\r\r\r\n\n\n\n\n\n\23Z\26"); +void winning() { +	dixi('q', 79); +	winning_pic(); +	do { +		checkclick(); +	} while (!(mrelease == 0)); +	callverb(vb_score); +	display(" T H E    E N D "); +	lmo = true;  } -void spludwick_goes_to_cauldron() -{ -  if (tr[2].homing)  -    set_up_timer(1,procspludwick_goes_to_cauldron,reason_spludwalk); -  else -    set_up_timer(17,procspludwick_leaves_cauldron,reason_spludwalk); +void avalot_falls() { +	if (tr[1].step < 5) { +		tr[1].step += 1; +		set_up_timer(3, procavalot_falls, reason_falling_over); +	} else +		display("\r\r\r\r\r\r\n\n\n\n\n\n\23Z\26");  } -void spludwick_leaves_cauldron() -{ -  tr[2].call_eachstep=true;  /* So that normal procs will continue. */ +void spludwick_goes_to_cauldron() { +	if (tr[2].homing) +		set_up_timer(1, procspludwick_goes_to_cauldron, reason_spludwalk); +	else +		set_up_timer(17, procspludwick_leaves_cauldron, reason_spludwalk);  } -void give_lute_to_geida()     /* Moved here from Acci. */ -{ -  dixi('Q',86); -  points(4); -  dna.lustie_is_asleep=true; -  first_show(5); then_show(6); /* He falls asleep... */ -  start_to_close(); /* Not really closing, but we're using the same procedure. */ +void spludwick_leaves_cauldron() { +	tr[2].call_eachstep = true; /* So that normal procs will continue. */ +} + +void give_lute_to_geida() {   /* Moved here from Acci. */ +	dixi('Q', 86); +	points(4); +	dna.lustie_is_asleep = true; +	first_show(5); +	then_show(6); /* He falls asleep... */ +	start_to_close(); /* Not really closing, but we're using the same procedure. */  }  /* "This is all!" */  class unit_timeout_initialize { -  public: unit_timeout_initialize(); +public: +	unit_timeout_initialize();  };  static unit_timeout_initialize timeout_constructor;  unit_timeout_initialize::unit_timeout_initialize() { - fillchar(times,sizeof(times),'\0'); +	fillchar(times, sizeof(times), '\0');  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/timeout.h b/engines/avalanche/timeout.h index ceb8c36dcc..8bb2f8798c 100644 --- a/engines/avalanche/timeout.h +++ b/engines/avalanche/timeout.h @@ -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 @@ -150,9 +150,9 @@ const integer procspludwick_leaves_cauldron = 40;  const integer procgive_lute_to_geida = 41;  struct timetype { -            longint time_left; -            byte then_where; -            byte what_for; +	longint time_left; +	byte then_where; +	byte what_for;  }; @@ -161,12 +161,12 @@ struct timetype {  #define EXTERN  #endif -EXTERN array<1,7,timetype> times; +EXTERN array<1, 7, timetype> times;  #undef EXTERN  #define EXTERN extern -void set_up_timer(longint howlong, byte whither,byte why); +void set_up_timer(longint howlong, byte whither, byte why);  void one_tick(); @@ -174,86 +174,86 @@ void lose_timer(byte which);  /*function timer_is_on(which:byte):boolean;*/ - /* Procedures to do things at the end of amounts of time: */ +/* Procedures to do things at the end of amounts of time: */ - void open_drawbridge(); +void open_drawbridge(); - void avaricius_talks(); +void avaricius_talks(); - void urinate(); +void urinate(); - void toilet2(); +void toilet2(); - void bang(); +void bang(); - void bang2(); +void bang2(); - void stairs(); +void stairs(); - void cardiff_survey(); +void cardiff_survey(); - void cardiff_return(); +void cardiff_return(); - void cwytalot_in_herts(); +void cwytalot_in_herts(); - void get_tied_up(); +void get_tied_up(); - void get_tied_up2(); +void get_tied_up2(); - void hang_around(); +void hang_around(); - void hang_around2(); +void hang_around2(); - void after_the_shootemup(); +void after_the_shootemup(); - void jacques_wakes_up(); +void jacques_wakes_up(); - void naughty_duke(); +void naughty_duke(); - void naughty_duke2(); +void naughty_duke2(); - void naughty_duke3(); +void naughty_duke3(); - void jump(); +void jump(); - void crapulus_says_splud_out(); +void crapulus_says_splud_out(); - void buydrinks(); +void buydrinks(); - void buywine(); +void buywine(); - void callsguards(); +void callsguards(); - void greetsmonk(); +void greetsmonk(); - void fall_down_oubliette(); +void fall_down_oubliette(); - void meet_avaroid(); +void meet_avaroid(); - void rise_up_oubliette(); +void rise_up_oubliette(); - void robin_hood_and_geida(); +void robin_hood_and_geida(); - void robin_hood_and_geida_talk(); +void robin_hood_and_geida_talk(); - void avalot_returns(); +void avalot_returns(); - void avvy_sit_down(); +void avvy_sit_down(); - void ghost_room_phew(); +void ghost_room_phew(); - void arkata_shouts(); +void arkata_shouts(); - void winning(); +void winning(); - void avalot_falls(); +void avalot_falls(); - void spludwick_goes_to_cauldron(); +void spludwick_goes_to_cauldron(); - void spludwick_leaves_cauldron(); +void spludwick_leaves_cauldron(); - void give_lute_to_geida(); +void give_lute_to_geida(); - } // End of namespace Avalanche. +} // End of namespace Avalanche.  #endif
\ No newline at end of file diff --git a/engines/avalanche/travel.cpp b/engines/avalanche/travel.cpp index a9117c2e74..84b6f04ed7 100644 --- a/engines/avalanche/travel.cpp +++ b/engines/avalanche/travel.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 @@ -30,63 +30,65 @@  namespace Avalanche { -integer gd,gm; +integer gd, gm; -void zoomout(integer x,integer y) -{ - integer x1,y1,x2,y2; - byte fv; -; - setcolor(white); setwritemode(xorput); - setlinestyle(dottedln,0,1); +void zoomout(integer x, integer y) { +	integer x1, y1, x2, y2; +	byte fv; +	; +	setcolor(white); +	setwritemode(xorput); +	setlinestyle(dottedln, 0, 1); - for( fv=1; fv <= 20; fv ++) - {; -  x1=x-(x / 20)*fv; -  y1=y-((y-10) / 20)*fv; -  x2=x+(((639-x) / 20)*fv); -  y2=y+(((161-y) / 20)*fv); +	for (fv = 1; fv <= 20; fv ++) { +		; +		x1 = x - (x / 20) * fv; +		y1 = y - ((y - 10) / 20) * fv; +		x2 = x + (((639 - x) / 20) * fv); +		y2 = y + (((161 - y) / 20) * fv); -  rectangle(x1,y1,x2,y2); -  delay(17); -  rectangle(x1,y1,x2,y2); - } +		rectangle(x1, y1, x2, y2); +		delay(17); +		rectangle(x1, y1, x2, y2); +	}  } -void zoomin(integer x,integer y) -{ - integer x1,y1,x2,y2; - byte fv; -; - setcolor(white); setwritemode(xorput); - setlinestyle(dottedln,0,1); +void zoomin(integer x, integer y) { +	integer x1, y1, x2, y2; +	byte fv; +	; +	setcolor(white); +	setwritemode(xorput); +	setlinestyle(dottedln, 0, 1); - for( fv=20; fv >= 1; fv --) - {; -  x1=x-(x / 20)*fv; -  y1=y-((y-10) / 20)*fv; -  x2=x+(((639-x) / 20)*fv); -  y2=y+(((161-y) / 20)*fv); +	for (fv = 20; fv >= 1; fv --) { +		; +		x1 = x - (x / 20) * fv; +		y1 = y - ((y - 10) / 20) * fv; +		x2 = x + (((639 - x) / 20) * fv); +		y2 = y + (((161 - y) / 20) * fv); -  rectangle(x1,y1,x2,y2); -  delay(17); -  rectangle(x1,y1,x2,y2); - } +		rectangle(x1, y1, x2, y2); +		delay(17); +		rectangle(x1, y1, x2, y2); +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - zoomout(177,77); - zoomout(7,31); - zoomout(577,124); - zoomout(320,85); - zoomin(177,77); - zoomin(7,31); - zoomin(577,124); - zoomin(320,85); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	zoomout(177, 77); +	zoomout(7, 31); +	zoomout(577, 124); +	zoomout(320, 85); +	zoomin(177, 77); +	zoomin(7, 31); +	zoomin(577, 124); +	zoomin(320, 85); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/trip.cpp b/engines/avalanche/trip.cpp index 867ea344bc..8ef57c591a 100644 --- a/engines/avalanche/trip.cpp +++ b/engines/avalanche/trip.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 @@ -51,115 +51,187 @@ namespace Avalanche {  /*       Description: Write a array of colors in a vertical line.  The current  */  /*       merge setting is used to control the combining of bits.                */  /*                                                                              */ - void gpwtcol(void* buf, integer n)      /* Cedola */ - {;     /* +void gpwtcol(void *buf, integer n) {    /* Cedola */ +	;     /*     inline       ($1E/$A1/GDCUR_Y/$D1/$E0/$D1/$E0/$03/$06/GDCUR_Y/$05/$A000/$8E/$C0/$8B/$3E/        GDCUR_X/$8B/$CF/$D1/$EF/$D1/$EF/$D1/$EF/$BA/$03CE/$8A/$26/GDMERGE/$B0/$03/        $EF/$B8/$0205/$EF/$B0/$08/$EE/$42/$B0/$80/$80/$E1/$07/$D2/$C8/$EE/$8B/$4E/        $04/$C5/$76/$06/$8A/$24/$46/$26/$8A/$1D/$26/$88/$25/$83/$C7/$50/$E2/$F2/        $B0/$FF/$EE/$4A/$B8/>$05/$EF/$B8/>$03/$EF/$1F); */ - } +} -void loadtrip() -{ -    untyped_file inf; -; - assign(inf,"t:avvy.trp"); reset(inf,1); - seek(inf,0x27); - blockread(inf,pozzes,sizeof(pozzes)); - blockread(inf,blue3,sizeof(blue3)); close(inf); +void loadtrip() { +	untyped_file inf; +	; +	assign(inf, "t:avvy.trp"); +	reset(inf, 1); +	seek(inf, 0x27); +	blockread(inf, pozzes, sizeof(pozzes)); +	blockread(inf, blue3, sizeof(blue3)); +	close(inf);  } -void plot(word count, integer ox,integer oy) /* orig x & y. Page is always 1. */ -{ -    byte x,y,len; -; - do { -  len=blue3[count]; if (len==177)  return; -  x=blue3[count+1]; y=blue3[count+2]; count += 3; -  {; -   gdcur_x=x+ox; gdcur_y=y+oy; -   /* fiddle xy coords to match page 1 */ -    gdcur_y += 205;   /* 203 */ gdcur_x -= 128; /* 114 */ -    if (gdcur_x<0)  -     {; gdcur_x += 640; gdcur_y -= 1; } -   gpwtcol(&blue3[count],len); count += len; -  } - } while (!false); +void plot(word count, integer ox, integer oy) { /* orig x & y. Page is always 1. */ +	byte x, y, len; +	; +	do { +		len = blue3[count]; +		if (len == 177)  return; +		x = blue3[count + 1]; +		y = blue3[count + 2]; +		count += 3; +		{ +			; +			gdcur_x = x + ox; +			gdcur_y = y + oy; +			/* fiddle xy coords to match page 1 */ +			gdcur_y += 205;   /* 203 */ gdcur_x -= 128; /* 114 */ +			if (gdcur_x < 0) { +				; +				gdcur_x += 640; +				gdcur_y -= 1; +			} +			gpwtcol(&blue3[count], len); +			count += len; +		} +	} while (!false);  } -void boundscheck() -{; - if (dna.uy>123)  dna.uy=123; - if (dna.uy<10)  dna.uy=10; - if (dna.ux<5)  dna.ux=5; - if (dna.ux>600)  dna.ux=600; +void boundscheck() { +	; +	if (dna.uy > 123)  dna.uy = 123; +	if (dna.uy < 10)  dna.uy = 10; +	if (dna.ux < 5)  dna.ux = 5; +	if (dna.ux > 600)  dna.ux = 600;  } -void budge() -{; - if (set::of(up,ul,ur, eos).has(dna.rw))  dna.uy -= 3; - if (set::of(down,dl,dr, eos).has(dna.rw))  dna.uy += 3; - if (set::of(left,ul,dl, eos).has(dna.rw))  dna.ux -= 5; - if (set::of(right,ur,dr, eos).has(dna.rw))  dna.ux += 5; +void budge() { +	; +	if (set::of(up, ul, ur, eos).has(dna.rw))  dna.uy -= 3; +	if (set::of(down, dl, dr, eos).has(dna.rw))  dna.uy += 3; +	if (set::of(left, ul, dl, eos).has(dna.rw))  dna.ux -= 5; +	if (set::of(right, ur, dr, eos).has(dna.rw))  dna.ux += 5; - boundscheck(); +	boundscheck(); - if (dna.rw>0)  - {; -  anim += 1; if (anim==7)  anim=1; - } +	if (dna.rw > 0) { +		; +		anim += 1; +		if (anim == 7)  anim = 1; +	}  } -void tripkey(char dir) -{; - if (cw!=177)  return; - { - dnatype& with = dna;  - ; -  switch (dir) { -   case 'H': if (with.rw!=up)     {; with.rw=up;    ww=up;    } else with.rw=0; break; -   case 'P': if (with.rw!=down)   {; with.rw=down;  ww=down;  } else with.rw=0; break; -   case 'K': if (with.rw!=left)   {; with.rw=left;  ww=left;  } else with.rw=0; break; -   case 'M': if (with.rw!=right)  {; with.rw=right; ww=right; } else with.rw=0; break; -   case 'I': if (with.rw!=ur)     {; with.rw=ur;    ww=right; } else with.rw=0; break; -   case 'Q': if (with.rw!=dr)     {; with.rw=dr;    ww=right; } else with.rw=0; break; -   case 'O': if (with.rw!=dl)     {; with.rw=dl;    ww=left;  } else with.rw=0; break; -   case 'G': if (with.rw!=ul)     {; with.rw=ul;    ww=left;  } else with.rw=0; break; -  } -  if (with.rw==0)  -  {; -   ux=ppos[0][0]; uy=ppos[0][1]; anim -= 1; -   if (anim==0)  anim=6; -  } - } +void tripkey(char dir) { +	; +	if (cw != 177)  return; +	{ +		dnatype &with = dna; +		; +		switch (dir) { +		case 'H': +			if (with.rw != up)     { +				; +				with.rw = up; +				ww = up; +			} else with.rw = 0; +			break; +		case 'P': +			if (with.rw != down)   { +				; +				with.rw = down; +				ww = down; +			} else with.rw = 0; +			break; +		case 'K': +			if (with.rw != left)   { +				; +				with.rw = left; +				ww = left; +			} else with.rw = 0; +			break; +		case 'M': +			if (with.rw != right)  { +				; +				with.rw = right; +				ww = right; +			} else with.rw = 0; +			break; +		case 'I': +			if (with.rw != ur)     { +				; +				with.rw = ur; +				ww = right; +			} else with.rw = 0; +			break; +		case 'Q': +			if (with.rw != dr)     { +				; +				with.rw = dr; +				ww = right; +			} else with.rw = 0; +			break; +		case 'O': +			if (with.rw != dl)     { +				; +				with.rw = dl; +				ww = left; +			} else with.rw = 0; +			break; +		case 'G': +			if (with.rw != ul)     { +				; +				with.rw = ul; +				ww = left; +			} else with.rw = 0; +			break; +		} +		if (with.rw == 0) { +			; +			ux = ppos[0][0]; +			uy = ppos[0][1]; +			anim -= 1; +			if (anim == 0)  anim = 6; +		} +	}  } -void trippancy() -{; - if ((dna.rw==0) || (cw!=177) || (! dropsok))  return; - r.ax=11; intr(0x33,r); - setactivepage(1); off(); - if (ppos[0][1]!=-177)  - {; -  putimage(ppos[0][0],ppos[0][1],replace[0],0); - } - - getimage(dna.ux,dna.uy,dna.ux+xw,dna.uy+yw,replace[0]); - ppos[0][0]=dna.ux; ppos[0][1]=dna.uy; - - plot(pozzes[anim*4+dna.ww-4],dna.ux,dna.uy); - - { void& with = r;  if ((cx==0) && (dx==0))  on();} - getimage(dna.ux-margin,dna.uy-margin,dna.ux+xw+margin,dna.uy+yw+margin,copier); - setactivepage(0); off(); putimage(dna.ux-margin,dna.uy-margin,copier,0); on(); - - { -                   void& with = mouths[0];  ; x=dna.ux+20; y=dna.uy; } - - budge(); +void trippancy() { +	; +	if ((dna.rw == 0) || (cw != 177) || (! dropsok))  return; +	r.ax = 11; +	intr(0x33, r); +	setactivepage(1); +	off(); +	if (ppos[0][1] != -177) { +		; +		putimage(ppos[0][0], ppos[0][1], replace[0], 0); +	} + +	getimage(dna.ux, dna.uy, dna.ux + xw, dna.uy + yw, replace[0]); +	ppos[0][0] = dna.ux; +	ppos[0][1] = dna.uy; + +	plot(pozzes[anim * 4 + dna.ww - 4], dna.ux, dna.uy); + +	{ +		void &with = r; +		if ((cx == 0) && (dx == 0))  on(); +	} +	getimage(dna.ux - margin, dna.uy - margin, dna.ux + xw + margin, dna.uy + yw + margin, copier); +	setactivepage(0); +	off(); +	putimage(dna.ux - margin, dna.uy - margin, copier, 0); +	on(); + +	{ +		void &with = mouths[0];  ; +		x = dna.ux + 20; +		y = dna.uy; +	} + +	budge();  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/trip.h b/engines/avalanche/trip.h index bfb645e3b5..0e55717158 100644 --- a/engines/avalanche/trip.h +++ b/engines/avalanche/trip.h @@ -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 @@ -30,17 +30,17 @@  namespace Avalanche { - void loadtrip(); +void loadtrip(); - void plot(word count, integer ox,integer oy); +void plot(word count, integer ox, integer oy); - void boundscheck(); +void boundscheck(); - void budge(); +void budge(); - void tripkey(char dir); +void tripkey(char dir); - void trippancy(); +void trippancy();  } // End of namespace Avalanche. diff --git a/engines/avalanche/trip3.cpp b/engines/avalanche/trip3.cpp index 1ca78fbf47..4889b264a5 100644 --- a/engines/avalanche/trip3.cpp +++ b/engines/avalanche/trip3.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 __trip3_implementation__ -            /* Project Minstrel- Trippancy routines */ +/* Project Minstrel- Trippancy routines */  #include "trip3.h" @@ -42,22 +42,29 @@ const integer avvy = 1;  const integer test = 177;  struct triprec { -           byte handle; /* who is it? */ -           integer x,y; /* current x&y */ -           byte xm,ym; /* x&y margins */ -           shortint ix,iy; /* inc x&y */ -           byte stage; /* animation */ -           integer xl,yl; /* x&y length */ -           boolean prime; /* true on first move */ -           boolean alive; /* true if it moves */ +	byte handle; /* who is it? */ +	integer x, y; /* current x&y */ +	byte xm, ym; /* x&y margins */ +	shortint ix, iy; /* inc x&y */ +	byte stage; /* animation */ +	integer xl, yl; /* x&y length */ +	boolean prime; /* true on first move */ +	boolean alive; /* true if it moves */  }; -array<1,10,triprec> tr; +array<1, 10, triprec> tr;  byte tramt; -array<1,20000,byte> blue3; -array<1,24,word> pozzes; - -const integer up = 1; const integer right = 2; const integer down = 3; const integer left = 4; const integer ur = 5; const integer dr = 6; const integer dl = 7; const integer ul = 8; +array<1, 20000, byte> blue3; +array<1, 24, word> pozzes; + +const integer up = 1; +const integer right = 2; +const integer down = 3; +const integer left = 4; +const integer ur = 5; +const integer dr = 6; +const integer dl = 7; +const integer ul = 8;  /*                                                                              */  /*       EGA Graphic Primitive for Turbo Pascal 3.01A, Version 01FEB86.         */ @@ -66,195 +73,299 @@ const integer up = 1; const integer right = 2; const integer down = 3; const int  /*       Description: Write a array of colors in a vertical line.  The current  */  /*       merge setting is used to control the combining of bits.                */  /*                                                                              */ - void gpwtcol(void* buf, integer n)      /* Cedola */ - {; -   /* inline -     ($1E/$A1/GDCUR_Y/$D1/$E0/$D1/$E0/$03/$06/GDCUR_Y/$05/$A000/$8E/$C0/$8B/$3E/ -      GDCUR_X/$8B/$CF/$D1/$EF/$D1/$EF/$D1/$EF/$BA/$03CE/$8A/$26/GDMERGE/$B0/$03/ -      $EF/$B8/$0205/$EF/$B0/$08/$EE/$42/$B0/$80/$80/$E1/$07/$D2/$C8/$EE/$8B/$4E/ -      $04/$C5/$76/$06/$8A/$24/$46/$26/$8A/$1D/$26/$88/$25/$83/$C7/$50/$E2/$F2/ -      $B0/$FF/$EE/$4A/$B8/>$05/$EF/$B8/>$03/$EF/$1F); */ - } - - -void loadtrip() -{ -    untyped_file inf; -; - assign(inf,"t:avvy.trp"); reset(inf,1); - seek(inf,0x27); - blockread(inf,pozzes,sizeof(pozzes)); - blockread(inf,blue3,sizeof(blue3)); close(inf); +void gpwtcol(void *buf, integer n) {    /* Cedola */ +	; +	/* inline +	  ($1E/$A1/GDCUR_Y/$D1/$E0/$D1/$E0/$03/$06/GDCUR_Y/$05/$A000/$8E/$C0/$8B/$3E/ +	   GDCUR_X/$8B/$CF/$D1/$EF/$D1/$EF/$D1/$EF/$BA/$03CE/$8A/$26/GDMERGE/$B0/$03/ +	   $EF/$B8/$0205/$EF/$B0/$08/$EE/$42/$B0/$80/$80/$E1/$07/$D2/$C8/$EE/$8B/$4E/ +	   $04/$C5/$76/$06/$8A/$24/$46/$26/$8A/$1D/$26/$88/$25/$83/$C7/$50/$E2/$F2/ +	   $B0/$FF/$EE/$4A/$B8/>$05/$EF/$B8/>$03/$EF/$1F); */ +} + + +void loadtrip() { +	untyped_file inf; +	; +	assign(inf, "t:avvy.trp"); +	reset(inf, 1); +	seek(inf, 0x27); +	blockread(inf, pozzes, sizeof(pozzes)); +	blockread(inf, blue3, sizeof(blue3)); +	close(inf);  } -void enter(byte what_handle, integer xx,integer yy,integer lx,integer ly, byte mmx,byte mmy,byte st) -{; - tramt += 1; - { - triprec& with = tr[tramt];  - ; -  with.handle=what_handle; -  with.ix=0; with.iy=0; -  with.x=xx; with.y=yy; -  with.xl=lx; with.yl=ly; -  with.xm=mmx; with.ym=mmy; with.stage=st; -  with.prime=true; with.alive=true; - } +void enter(byte what_handle, integer xx, integer yy, integer lx, integer ly, byte mmx, byte mmy, byte st) { +	; +	tramt += 1; +	{ +		triprec &with = tr[tramt]; +		; +		with.handle = what_handle; +		with.ix = 0; +		with.iy = 0; +		with.x = xx; +		with.y = yy; +		with.xl = lx; +		with.yl = ly; +		with.xm = mmx; +		with.ym = mmy; +		with.stage = st; +		with.prime = true; +		with.alive = true; +	}  } -void plot(byte stage, integer ox,integer oy) /* orig x & y. Page is always 1/UNSEEN. */ -{ -    byte x,y,len; word count; -; - count=pozzes[stage]; - do { -  len=blue3[count]; if (len==177)  return; -  x=blue3[count+1]; y=blue3[count+2]; count += 3; -  {; -   gdcur_x=x+ox; gdcur_y=y+oy; -   /* fiddle xy coords to match page 1 */ -    gdcur_y += 205;   /* 203 */ gdcur_x -= 128; /* 114 */ -    if (gdcur_x<0)  -     {; gdcur_x += 640; gdcur_y -= 1; } -   gpwtcol(&blue3[count],len); count += len; -  } - } while (!false); +void plot(byte stage, integer ox, integer oy) { /* orig x & y. Page is always 1/UNSEEN. */ +	byte x, y, len; +	word count; +	; +	count = pozzes[stage]; +	do { +		len = blue3[count]; +		if (len == 177)  return; +		x = blue3[count + 1]; +		y = blue3[count + 2]; +		count += 3; +		{ +			; +			gdcur_x = x + ox; +			gdcur_y = y + oy; +			/* fiddle xy coords to match page 1 */ +			gdcur_y += 205;   /* 203 */ gdcur_x -= 128; /* 114 */ +			if (gdcur_x < 0) { +				; +				gdcur_x += 640; +				gdcur_y -= 1; +			} +			gpwtcol(&blue3[count], len); +			count += len; +		} +	} while (!false);  } -void trippancy() -{ - byte fv; pointer p,saved1,saved2; word s; array<1,10,pointer> q; - boolean allstill; -; - if ((cw!=177) || (! dropsok) || keypressed())  return; - - /* Do the Avvy Walk */ - - switch (dna.rw) { -     case up: budge(avvy, 0,-3,anim*4-3); break; -   case down: budge(avvy, 0, 3,anim*4-1); break; -  case right: budge(avvy, 5, 0,anim*4-2); break; -   case left: budge(avvy,-5, 0,anim*4  ); break; -     case ul: budge(avvy,-5,-3,anim*4  ); break; -     case dl: budge(avvy,-5, 3,anim*4  ); break; -     case ur: budge(avvy, 5,-3,anim*4-2); break; -     case dr: budge(avvy, 5, 3,anim*4-2); break; - } - - for( fv=1; fv <= tramt; fv ++) { triprec& with = tr[fv];  boundscheck(with.x,with.y,with.xm,with.ym);} - - allstill=true; - for( fv=1; fv <= tramt; fv ++) -  { triprec& with = tr[fv];  -   if (((with.alive) && (! ((with.ix==0) && (with.iy==0)))) || with.prime)  allstill=false;} - if (allstill)  return; - - if (dna.rw>0)  - {; -  anim += 1; if (anim==7)  anim=1; - } - - /* Trippancy Step 1 - Grab moon array of unmargined sprites (phew) */ - mark(saved1); - setactivepage(1); off(); - for( fv=1; fv <= tramt; fv ++) -  { -  triprec& with = tr[fv];  -  ; -   s=imagesize(with.x-with.xm,with.y-with.ym,with.x+with.xl+with.xm,with.y+with.yl+with.ym); -   getmem(q[fv],s); getimage(with.x-with.xm,with.y-with.ym,with.x+with.xl+with.xm,with.y+with.yl+with.ym,q[fv]); -  } - /* Step 2 - Plot sprites on 1/UNSEEN */ - for( fv=1; fv <= tramt; fv ++) -  { -  triprec& with = tr[fv];  -  ; -   plot(with.stage,with.x,with.y); -  } - /* Step 3 - Copy all eligible from 1/UNSEEN to 0/SEEN */ - mark(saved2); - for( fv=1; fv <= tramt; fv ++) -  { triprec& with = tr[fv];  -   if (((with.alive) && (! ((with.ix==0) && (with.iy==0)))) || with.prime)  -   {; -    s=imagesize(with.x-with.xm,with.y-with.ym,with.x+with.xl+with.xm,with.y+with.yl+with.ym); -    getmem(p,s); -    setactivepage(1); getimage(with.x-with.xm,with.y-with.ym,with.x+with.xl+with.xm,with.y+with.yl+with.ym,p); -    setactivepage(0); putimage(with.x-with.xm,with.y-with.ym,p,0); -    release(saved2); with.prime=false; -   }} - /* Step 4 - Unplot sprites from 1/UNSEEN */ - setactivepage(1); - for( fv=1; fv <= tramt; fv ++) -  { -  triprec& with = tr[fv];  -  ; -   putimage(with.x-with.xm,with.y-with.ym,q[fv],0); -   if (with.ix!=0)  with.x=with.x+with.ix; -   if (with.iy!=0)  with.y=with.y+with.iy; -   with.ix=0; with.iy=0; -   if (with.handle==avvy)  { -                                   dnatype& with1 = dna;  ; ux=with.x; uy=with.y; } -  } - on(); release(saved1); - for( fv=1; fv <= tramt; fv ++) /* synch xy coords of mouths */ -  { -   triprec& with = tr[fv];  -   ; mouths[fv].x=with.x+20; mouths[fv].y=with.y; } - - setactivepage(0); +void trippancy() { +	byte fv; +	pointer p, saved1, saved2; +	word s; +	array<1, 10, pointer> q; +	boolean allstill; +	; +	if ((cw != 177) || (! dropsok) || keypressed())  return; + +	/* Do the Avvy Walk */ + +	switch (dna.rw) { +	case up: +		budge(avvy, 0, -3, anim * 4 - 3); +		break; +	case down: +		budge(avvy, 0, 3, anim * 4 - 1); +		break; +	case right: +		budge(avvy, 5, 0, anim * 4 - 2); +		break; +	case left: +		budge(avvy, -5, 0, anim * 4); +		break; +	case ul: +		budge(avvy, -5, -3, anim * 4); +		break; +	case dl: +		budge(avvy, -5, 3, anim * 4); +		break; +	case ur: +		budge(avvy, 5, -3, anim * 4 - 2); +		break; +	case dr: +		budge(avvy, 5, 3, anim * 4 - 2); +		break; +	} + +	for (fv = 1; fv <= tramt; fv ++) { +		triprec &with = tr[fv]; +		boundscheck(with.x, with.y, with.xm, with.ym); +	} + +	allstill = true; +	for (fv = 1; fv <= tramt; fv ++) { +		triprec &with = tr[fv]; +		if (((with.alive) && (!((with.ix == 0) && (with.iy == 0)))) || with.prime)  allstill = false; +	} +	if (allstill)  return; + +	if (dna.rw > 0) { +		; +		anim += 1; +		if (anim == 7)  anim = 1; +	} + +	/* Trippancy Step 1 - Grab moon array of unmargined sprites (phew) */ +	mark(saved1); +	setactivepage(1); +	off(); +	for (fv = 1; fv <= tramt; fv ++) { +		triprec &with = tr[fv]; +		; +		s = imagesize(with.x - with.xm, with.y - with.ym, with.x + with.xl + with.xm, with.y + with.yl + with.ym); +		getmem(q[fv], s); +		getimage(with.x - with.xm, with.y - with.ym, with.x + with.xl + with.xm, with.y + with.yl + with.ym, q[fv]); +	} +	/* Step 2 - Plot sprites on 1/UNSEEN */ +	for (fv = 1; fv <= tramt; fv ++) { +		triprec &with = tr[fv]; +		; +		plot(with.stage, with.x, with.y); +	} +	/* Step 3 - Copy all eligible from 1/UNSEEN to 0/SEEN */ +	mark(saved2); +	for (fv = 1; fv <= tramt; fv ++) { +		triprec &with = tr[fv]; +		if (((with.alive) && (!((with.ix == 0) && (with.iy == 0)))) || with.prime) { +			; +			s = imagesize(with.x - with.xm, with.y - with.ym, with.x + with.xl + with.xm, with.y + with.yl + with.ym); +			getmem(p, s); +			setactivepage(1); +			getimage(with.x - with.xm, with.y - with.ym, with.x + with.xl + with.xm, with.y + with.yl + with.ym, p); +			setactivepage(0); +			putimage(with.x - with.xm, with.y - with.ym, p, 0); +			release(saved2); +			with.prime = false; +		} +	} +	/* Step 4 - Unplot sprites from 1/UNSEEN */ +	setactivepage(1); +	for (fv = 1; fv <= tramt; fv ++) { +		triprec &with = tr[fv]; +		; +		putimage(with.x - with.xm, with.y - with.ym, q[fv], 0); +		if (with.ix != 0)  with.x = with.x + with.ix; +		if (with.iy != 0)  with.y = with.y + with.iy; +		with.ix = 0; +		with.iy = 0; +		if (with.handle == avvy)  { +			dnatype &with1 = dna;  ; +			ux = with.x; +			uy = with.y; +		} +	} +	on(); +	release(saved1); +	for (fv = 1; fv <= tramt; fv ++) { /* synch xy coords of mouths */ +		triprec &with = tr[fv]; +		; +		mouths[fv].x = with.x + 20; +		mouths[fv].y = with.y; +	} + +	setactivepage(0);  } -void budge(byte who, shortint xx,shortint yy, byte frame) /* Moving & animation controller */ -{ -    byte fv; -; - for( fv=1; fv <= tramt; fv ++) -  { triprec& with = tr[fv];  -   if (with.handle==who)  -   {; -    with.ix=xx; with.iy=yy; -    with.stage=frame; -   }} +void budge(byte who, shortint xx, shortint yy, byte frame) { /* Moving & animation controller */ +	byte fv; +	; +	for (fv = 1; fv <= tramt; fv ++) { +		triprec &with = tr[fv]; +		if (with.handle == who) { +			; +			with.ix = xx; +			with.iy = yy; +			with.stage = frame; +		} +	}  } -void tripkey(char dir) -{; - if (cw!=177)  return; - { - dnatype& with = dna;  - ; -  switch (dir) { -   case 'H': if (with.rw!=up)     {; with.rw=up;    ww=up;    } else with.rw=0; break; -   case 'P': if (with.rw!=down)   {; with.rw=down;  ww=down;  } else with.rw=0; break; -   case 'K': if (with.rw!=left)   {; with.rw=left;  ww=left;  } else with.rw=0; break; -   case 'M': if (with.rw!=right)  {; with.rw=right; ww=right; } else with.rw=0; break; -   case 'I': if (with.rw!=ur)     {; with.rw=ur;    ww=right; } else with.rw=0; break; -   case 'Q': if (with.rw!=dr)     {; with.rw=dr;    ww=right; } else with.rw=0; break; -   case 'O': if (with.rw!=dl)     {; with.rw=dl;    ww=left;  } else with.rw=0; break; -   case 'G': if (with.rw!=ul)     {; with.rw=ul;    ww=left;  } else with.rw=0; break; -  } -  if (with.rw==0)  -  {; -   ux=ppos[0][0]; uy=ppos[0][1]; anim -= 1; -   if (anim==0)  anim=6; -  } - } +void tripkey(char dir) { +	; +	if (cw != 177)  return; +	{ +		dnatype &with = dna; +		; +		switch (dir) { +		case 'H': +			if (with.rw != up)     { +				; +				with.rw = up; +				ww = up; +			} else with.rw = 0; +			break; +		case 'P': +			if (with.rw != down)   { +				; +				with.rw = down; +				ww = down; +			} else with.rw = 0; +			break; +		case 'K': +			if (with.rw != left)   { +				; +				with.rw = left; +				ww = left; +			} else with.rw = 0; +			break; +		case 'M': +			if (with.rw != right)  { +				; +				with.rw = right; +				ww = right; +			} else with.rw = 0; +			break; +		case 'I': +			if (with.rw != ur)     { +				; +				with.rw = ur; +				ww = right; +			} else with.rw = 0; +			break; +		case 'Q': +			if (with.rw != dr)     { +				; +				with.rw = dr; +				ww = right; +			} else with.rw = 0; +			break; +		case 'O': +			if (with.rw != dl)     { +				; +				with.rw = dl; +				ww = left; +			} else with.rw = 0; +			break; +		case 'G': +			if (with.rw != ul)     { +				; +				with.rw = ul; +				ww = left; +			} else with.rw = 0; +			break; +		} +		if (with.rw == 0) { +			; +			ux = ppos[0][0]; +			uy = ppos[0][1]; +			anim -= 1; +			if (anim == 0)  anim = 6; +		} +	}  } -void boundscheck(integer& x,integer& y, byte xm,byte ym) -{; - if (y>127-ym)  y=127-ym; if (y<ym+10)  y=ym+10; - if (x<xm)  x=xm; if (x>640-xm)  x=640-xm; +void boundscheck(integer &x, integer &y, byte xm, byte ym) { +	; +	if (y > 127 - ym)  y = 127 - ym; +	if (y < ym + 10)  y = ym + 10; +	if (x < xm)  x = xm; +	if (x > 640 - xm)  x = 640 - xm;  }  class unit_trip3_initialize { -  public: unit_trip3_initialize(); +public: +	unit_trip3_initialize();  };  static unit_trip3_initialize trip3_constructor; -unit_trip3_initialize::unit_trip3_initialize() {; /* init portion of Trip3 */ - tramt=0; +unit_trip3_initialize::unit_trip3_initialize() { +	; /* init portion of Trip3 */ +	tramt = 0;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/trip3.h b/engines/avalanche/trip3.h index 4a5f6fb9d0..01428081d6 100644 --- a/engines/avalanche/trip3.h +++ b/engines/avalanche/trip3.h @@ -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 @@ -33,18 +33,18 @@  namespace Avalanche { - void loadtrip(); +void loadtrip(); - void boundscheck(integer& x,integer& y, byte xm,byte ym); +void boundscheck(integer &x, integer &y, byte xm, byte ym); - void budge(byte who, shortint xx,shortint yy, byte frame); /* Moving & animation controller */ +void budge(byte who, shortint xx, shortint yy, byte frame); /* Moving & animation controller */ - void tripkey(char dir); +void tripkey(char dir); - void trippancy(); +void trippancy(); - void enter(byte what_handle, integer xx,integer yy,integer lx,integer ly, byte mmx,byte mmy,byte st); +void enter(byte what_handle, integer xx, integer yy, integer lx, integer ly, byte mmx, byte mmy, byte st); - } // End of namespace Avalanche. +} // End of namespace Avalanche.  #endif
\ No newline at end of file diff --git a/engines/avalanche/trip42.cpp b/engines/avalanche/trip42.cpp index a587dc1e7e..04acf36f74 100644 --- a/engines/avalanche/trip42.cpp +++ b/engines/avalanche/trip42.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 @@ -33,7 +33,7 @@                   TRIP42           Trippancy IV point 2 - "Trip Oop 2" */  #define __trip42_implementation__ -             /* Trippancy IV.2 (Trip Oop) */ +/* Trippancy IV.2 (Trip Oop) */  #include "trip42.h" @@ -76,403 +76,584 @@ begin;   end;  end; */ -void loadtrip() -{ -    byte gm; -; - for( gm=1; gm <= numtr; gm ++) tr[gm].original(); - tr[1].init(0); -} - -byte checkfeet(integer x1,integer x2,integer oy,integer y, byte yl) -{ -    byte a,c; integer fv,ff; -byte checkfeet_result; -; - a=0; setactivepage(2); if (x1<0)  x1=0; if (x2>639)  x2=639; - if (oy<y)  -  for( fv=x1; fv <= x2; fv ++) -   for( ff=oy+yl; ff <= y+yl; ff ++) -   {; -    c=getpixel(fv,ff); -    if (c>a)  a=c; -   } else -  for( fv=x1; fv <= x2; fv ++) -   for( ff=y+yl; ff <= oy+yl; ff ++) -   {; -    c=getpixel(fv,ff); -    if (c>a)  a=c; -   } - checkfeet_result=a; setactivepage(1-cp); -return checkfeet_result; +void loadtrip() { +	byte gm; +	; +	for (gm = 1; gm <= numtr; gm ++) tr[gm].original(); +	tr[1].init(0); +} + +byte checkfeet(integer x1, integer x2, integer oy, integer y, byte yl) { +	byte a, c; +	integer fv, ff; +	byte checkfeet_result; +	; +	a = 0; +	setactivepage(2); +	if (x1 < 0)  x1 = 0; +	if (x2 > 639)  x2 = 639; +	if (oy < y) +		for (fv = x1; fv <= x2; fv ++) +			for (ff = oy + yl; ff <= y + yl; ff ++) { +				; +				c = getpixel(fv, ff); +				if (c > a)  a = c; +			} +	else +		for (fv = x1; fv <= x2; fv ++) +			for (ff = y + yl; ff <= oy + yl; ff ++) { +				; +				c = getpixel(fv, ff); +				if (c > a)  a = c; +			} +	checkfeet_result = a; +	setactivepage(1 - cp); +	return checkfeet_result;  }  void touchcol(byte tc); -static boolean bug;  - -static void fr(byte a,byte b) {; fliproom(a,b); bug=false; } - -void touchcol(byte tc) -{; - bug=true;  /* j.i.c. */ - switch (dna.room) { -  case 1: fr(2,3); break; -  case 2: {; /* main corridor */ -      switch (tc) { -       case 1: fr(3,1); break; /* to the other corridor */ -       case 2: fr(2,1); break; /* to this corridor! Fix this later... */ -      } -     } -     break; -  case 3: {; /* turn corridor */ -      switch (tc) { -       case 1: fr(2,1); break; /* to the other corridor */ -       case 2: fr(12,1); break; /* through Spludwick's door */ -      } -     } -     break; -  case 12: fr(3,2); break; - } - if (bug)  - {; -  display(string('\7')+"Unknown touchcolour ("+strf(tc)+')'+" in "+strf(dna.room) -   +'.'); tr[1].bounce(); - } -} - -triptype* triptype::init(byte spritenum) -{ -    integer gd,gm; word s; untyped_file f; varying_string<2> xx; byte sort,n; - word bigsize; pointer p,q; -; - str(spritenum,xx); assign(f,string("c:\\avalot\\sprite")+xx+".avd"); - reset(f,1); seek(f,59); - blockread(f,a,sizeof(a)); blockread(f,bigsize,2); - setactivepage(3); - for( sort=0; sort <= 1; sort ++) - {; -  mark(q); getmem(p,bigsize); -  blockread(f,p,bigsize); -  off; putimage(0,0,p,0); release(q); n=1; -  { adxtype& with = a;  -   for( gm=0; gm <= (with.num / with.seq)-1; gm ++) /* directions */ -    for( gd=0; gd <= with.seq-1; gd ++) /* steps */ -    {; -     getmem(pic[n][sort],a.size); /* grab the memory */ -     getimage((gm / 2)*(with.xl*6)+gd*with.xl,(gm % 2)*with.yl, -       (gm / 2)*(with.xl*6)+gd*with.xl+with.xl-1,(gm % 2)*with.yl+with.yl-1, -       pic[n][sort]); /* grab the pic */ -     n += 1; -   }}   /*on;*/ - } - close(f); setactivepage(1-cp); - - x=0; y=0; quick=true; visible=false; -/* for x:=0 to 1 do getmem(behind[x],a.size);*/ - homing=false; ix=0; iy=0; step=0; check_me=a.name=="Avalot"; - count=0; -return this; -} - -void triptype::original() -{; - quick=false; -} - -void triptype::andexor() -{ -    byte picnum; /* Picnum, Picnic, what ye heck */ -; - picnum=face*a.seq+step+1; off; - putimage(x,y,pic[picnum][0],andput); - putimage(x,y,pic[picnum][1],xorput); /*on;*/ -} - -void triptype::turn(byte whichway) -{; - if (whichway==8)  face=0; else face=whichway; -} - -void triptype::appear(integer wx,integer wy, byte wf) -{; - x=(wx / 8)*8; y=wy; ox[cp]=wx; oy[cp]=wy; turn(wf); - visible=true; ix=0; iy=0; -} - -void triptype::walk() -{ -    byte tc; fieldtype r; -; - {; -  x1=x-1; y1=y-2; x2=x+a.xl+1; y2=y+a.yl+2; - } - getset[1-cp].remember(r); - ox[cp]=x; oy[cp]=y; - if (homing)  homestep(); - x=x+ix; y=y+iy; - if (check_me)  {; -  tc=checkfeet(x,x+a.xl,oy[cp],y,a.yl); -  if (tc!=0)  -   { void& with = magics[tc];  -    switch (op) { -     case exclaim: {; bounce(); dixi('x',data); } break; -     case bounces: bounce(); break; -     case transport: fliproom(hi(data),lo(data)); break; -     case unfinished: {; -                  bounce(); -                  display("\7Sorry.\3\rThis place is not avaliable yet!"); -                 } -                 break; -    }} - } - count += 1; - if (((ix!=0) || (iy!=0)) && (count>1))  - {; -  step += 1; if (step==a.seq)  step=0; count=0; - } -} - -void triptype::bounce() -{; x=ox[cp]; y=oy[cp]; stopwalk(); return; } - -void triptype::walkto(integer xx,integer yy) -{; - speed(xx-x,yy-y); hx=xx; hy=yy; homing=true; -} - -void triptype::stophoming() -{; - homing=false; -} - -void triptype::homestep() -{ -    integer temp; -; - if ((hx==x) && (hy==y))  - {;     /* touching the target */ -  homing=false; return; - } - ix=0; iy=0; - if (hy!=y)  - {; -  temp=hy-y; if (temp>4)  iy=4; else if (temp<-4)  iy=-4; else iy=temp; - } - if (hx!=x)  - {; -  temp=hx-x; if (temp>4)  ix=4; else if (temp<-4)  ix=-4; else ix=temp; - } -} - -void triptype::speed(shortint xx,shortint yy) -{; - ix=xx; iy=yy; - if ((ix==0) && (iy==0))  return; /* no movement */ - if (ix==0)  - {;     /* No horz movement */ -  if (iy<0)  turn(up); else turn(down); - } else - {; -  if (ix<0)  turn(left); else turn(right); - } -} - -void triptype::stopwalk() -{; - ix=0; iy=0; homing=false; -} - -void triptype::chatter() -{; - talkx=x+a.xl / 2; talky=y; talkf=a.fgc; talkb=a.bgc; -} - -getsettype* getsettype::init() -{; - numleft=0;  /* initialise array pointer */ - return this; -} - -void getsettype::remember(fieldtype r) -{; - numleft += 1; - gs[numleft]=r; -} - -void getsettype::recall(fieldtype& r) -{; - r=gs[numleft]; - numleft -= 1; -} - -void rwsp(byte t,byte r) -{ -      const integer xs = 3; const integer ys = 1; -; - { triptype& with = tr[t];  switch (r) { -      case up: speed(  0,-ys); break; case down: speed(  0, ys); break; case left: speed(-xs,  0); break; -   case right: speed( xs,  0); break;   case ul: speed(-xs,-ys); break;   case ur: speed( xs,-ys); break; -      case dl: speed(-xs, ys); break;   case dr: speed( xs, ys); break; -  }} -} - -void apped(byte trn,byte np) -{; - { - triptype& with = tr[trn];  - ; { void& with1 = peds[np];  appear(with.x-with.a.xl / 2,with.y-with.a.yl,dir);} -  rwsp(trn,tr[trn].face); } -} - -void getback() -{ - byte fv; - fieldtype r; -; -  { getsettype& with = getset[1-cp];  -   while (with.numleft>0)  -   {; -    recall(r); -    mblit(x1,y1,x2,y2,3,1-cp); -   }} -} - -void trippancy_link() -{ - byte fv; -; - if ((ddm_o.menunow) | ontoolbar | seescroll | (~ alive))  return; - for( fv=1; fv <= numtr; fv ++) { triptype& with = tr[fv];  if (with.quick)  getback();} - for( fv=1; fv <= numtr; fv ++) { triptype& with = tr[fv];  if (with.quick)  walk();} - for( fv=1; fv <= numtr; fv ++) { triptype& with = tr[fv];  if (with.quick && with.visible)  andexor();} -} - -void stopwalking() -{; - tr[1].stopwalk(); dna.rw=stopped; -} - -void tripkey(char dir) -{; - if (ctrl==cjoy)  return; - - { triptype& with = tr[1];  -  {; -   switch (dir) { -    case 'H': if (rw!=up)     -            {; rw=up;    rwsp(1,rw); } else stopwalking(); -            break; -    case 'P': if (rw!=down)   -            {; rw=down;  rwsp(1,rw); } else stopwalking(); -            break; -    case 'K': if (rw!=left)   -            {; rw=left;  rwsp(1,rw); } else stopwalking(); -            break; -    case 'M': if (rw!=right)  -            {; rw=right; rwsp(1,rw); } else stopwalking(); -            break; -    case 'I': if (rw!=ur)     -            {; rw=ur;    rwsp(1,rw); } else stopwalking(); -            break; -    case 'Q': if (rw!=dr)     -            {; rw=dr;    rwsp(1,rw); } else stopwalking(); -            break; -    case 'O': if (rw!=dl)     -            {; rw=dl;    rwsp(1,rw); } else stopwalking(); -            break; -    case 'G': if (rw!=ul)     -            {; rw=ul;    rwsp(1,rw); } else stopwalking(); -            break; -    case 'L': stopwalking(); break; -   } - }} -} - -void getsetclear() -{ -    byte fv; -; - for( fv=0; fv <= 1; fv ++) getset[fv].init(); -} - -void fliproom(byte room,byte ped) -{; - dusk; getsetclear(); enterroom(room); apped(1,ped); - oldrw=dna.rw; dna.rw=tr[1].face; showrw; dawn; -} - -boolean infield(byte x)           /* returns True if you're within field "x" */ -{ -    integer yy; -boolean infield_result; -; - { void& with = fields[x];  { - triptype& with = tr[1];  - ; -  yy=with.y+with.a.yl; -  infield_result=(with.x>=x1) && (with.x<=x2) && (yy>=y1) && (yy<=y2); -                            }} -return infield_result; -} - -boolean neardoor()         /* returns True if you're near a door! */ -{ -    integer ux,uy; byte fv; boolean nd; -boolean neardoor_result; -; - if (numfields<9)  - {;     /* there ARE no doors here! */ -  neardoor_result=false; -  return neardoor_result; - } - { - triptype& with = tr[1];  - ; -  ux=with.x; -  uy=with.y+with.a.yl; - } nd=false; - for( fv=9; fv <= numfields; fv ++) -  { -  void& with = fields[fv];  -  ; -   if ((ux>=x1) && (ux<=x2) && (uy>=y1) && (uy<=y2))  nd=true; -  } - neardoor_result=nd; -return neardoor_result; -} - -void readstick() -{ -    byte jw; -; - if (ctrl==ckey)  return; - - jw=joyway; - - { - triptype& with = tr[1];  - ; -  if (jw==stopped)  stopwalking(); else -  {; -   dna.rw=jw; rwsp(1,dna.rw); -  } - } - - if (jw!=oldjw)  - {; -  showrw; -  oldjw=jw; - } +static boolean bug; + +static void fr(byte a, byte b) { +	; +	fliproom(a, b); +	bug = false; +} + +void touchcol(byte tc) { +	; +	bug = true; /* j.i.c. */ +	switch (dna.room) { +	case 1: +		fr(2, 3); +		break; +	case 2: { +		; /* main corridor */ +		switch (tc) { +		case 1: +			fr(3, 1); +			break; /* to the other corridor */ +		case 2: +			fr(2, 1); +			break; /* to this corridor! Fix this later... */ +		} +	} +	break; +	case 3: { +		; /* turn corridor */ +		switch (tc) { +		case 1: +			fr(2, 1); +			break; /* to the other corridor */ +		case 2: +			fr(12, 1); +			break; /* through Spludwick's door */ +		} +	} +	break; +	case 12: +		fr(3, 2); +		break; +	} +	if (bug) { +		; +		display(string('\7') + "Unknown touchcolour (" + strf(tc) + ')' + " in " + strf(dna.room) +		        + '.'); +		tr[1].bounce(); +	} +} + +triptype *triptype::init(byte spritenum) { +	integer gd, gm; +	word s; +	untyped_file f; +	varying_string<2> xx; +	byte sort, n; +	word bigsize; +	pointer p, q; +	; +	str(spritenum, xx); +	assign(f, string("c:\\avalot\\sprite") + xx + ".avd"); +	reset(f, 1); +	seek(f, 59); +	blockread(f, a, sizeof(a)); +	blockread(f, bigsize, 2); +	setactivepage(3); +	for (sort = 0; sort <= 1; sort ++) { +		; +		mark(q); +		getmem(p, bigsize); +		blockread(f, p, bigsize); +		off; +		putimage(0, 0, p, 0); +		release(q); +		n = 1; +		{ +			adxtype &with = a; +			for (gm = 0; gm <= (with.num / with.seq) - 1; gm ++) /* directions */ +				for (gd = 0; gd <= with.seq - 1; gd ++) { /* steps */ +					; +					getmem(pic[n][sort], a.size); /* grab the memory */ +					getimage((gm / 2) * (with.xl * 6) + gd * with.xl, (gm % 2)*with.yl, +					         (gm / 2) * (with.xl * 6) + gd * with.xl + with.xl - 1, (gm % 2)*with.yl + with.yl - 1, +					         pic[n][sort]); /* grab the pic */ +					n += 1; +				} +		}   /*on;*/ +	} +	close(f); +	setactivepage(1 - cp); + +	x = 0; +	y = 0; +	quick = true; +	visible = false; +	/* for x:=0 to 1 do getmem(behind[x],a.size);*/ +	homing = false; +	ix = 0; +	iy = 0; +	step = 0; +	check_me = a.name == "Avalot"; +	count = 0; +	return this; +} + +void triptype::original() { +	; +	quick = false; +} + +void triptype::andexor() { +	byte picnum; /* Picnum, Picnic, what ye heck */ +	; +	picnum = face * a.seq + step + 1; +	off; +	putimage(x, y, pic[picnum][0], andput); +	putimage(x, y, pic[picnum][1], xorput); /*on;*/ +} + +void triptype::turn(byte whichway) { +	; +	if (whichway == 8)  face = 0; +	else face = whichway; +} + +void triptype::appear(integer wx, integer wy, byte wf) { +	; +	x = (wx / 8) * 8; +	y = wy; +	ox[cp] = wx; +	oy[cp] = wy; +	turn(wf); +	visible = true; +	ix = 0; +	iy = 0; +} + +void triptype::walk() { +	byte tc; +	fieldtype r; +	; +	{ +		; +		x1 = x - 1; +		y1 = y - 2; +		x2 = x + a.xl + 1; +		y2 = y + a.yl + 2; +	} +	getset[1 - cp].remember(r); +	ox[cp] = x; +	oy[cp] = y; +	if (homing)  homestep(); +	x = x + ix; +	y = y + iy; +	if (check_me)  { +		; +		tc = checkfeet(x, x + a.xl, oy[cp], y, a.yl); +		if (tc != 0) { +			void &with = magics[tc]; +			switch (op) { +			case exclaim: { +				; +				bounce(); +				dixi('x', data); +			} +			break; +			case bounces: +				bounce(); +				break; +			case transport: +				fliproom(hi(data), lo(data)); +				break; +			case unfinished: { +				; +				bounce(); +				display("\7Sorry.\3\rThis place is not avaliable yet!"); +			} +			break; +			} +		} +	} +	count += 1; +	if (((ix != 0) || (iy != 0)) && (count > 1)) { +		; +		step += 1; +		if (step == a.seq)  step = 0; +		count = 0; +	} +} + +void triptype::bounce() { +	; +	x = ox[cp]; +	y = oy[cp]; +	stopwalk(); +	return; +} + +void triptype::walkto(integer xx, integer yy) { +	; +	speed(xx - x, yy - y); +	hx = xx; +	hy = yy; +	homing = true; +} + +void triptype::stophoming() { +	; +	homing = false; +} + +void triptype::homestep() { +	integer temp; +	; +	if ((hx == x) && (hy == y)) { +		;     /* touching the target */ +		homing = false; +		return; +	} +	ix = 0; +	iy = 0; +	if (hy != y) { +		; +		temp = hy - y; +		if (temp > 4)  iy = 4; +		else if (temp < -4)  iy = -4; +		else iy = temp; +	} +	if (hx != x) { +		; +		temp = hx - x; +		if (temp > 4)  ix = 4; +		else if (temp < -4)  ix = -4; +		else ix = temp; +	} +} + +void triptype::speed(shortint xx, shortint yy) { +	; +	ix = xx; +	iy = yy; +	if ((ix == 0) && (iy == 0))  return; /* no movement */ +	if (ix == 0) { +		;     /* No horz movement */ +		if (iy < 0)  turn(up); +		else turn(down); +	} else { +		; +		if (ix < 0)  turn(left); +		else turn(right); +	} +} + +void triptype::stopwalk() { +	; +	ix = 0; +	iy = 0; +	homing = false; +} + +void triptype::chatter() { +	; +	talkx = x + a.xl / 2; +	talky = y; +	talkf = a.fgc; +	talkb = a.bgc; +} + +getsettype *getsettype::init() { +	; +	numleft = 0; /* initialise array pointer */ +	return this; +} + +void getsettype::remember(fieldtype r) { +	; +	numleft += 1; +	gs[numleft] = r; +} + +void getsettype::recall(fieldtype &r) { +	; +	r = gs[numleft]; +	numleft -= 1; +} + +void rwsp(byte t, byte r) { +	const integer xs = 3; +	const integer ys = 1; +	; +	{ +		triptype &with = tr[t]; +		switch (r) { +		case up: +			speed(0, -ys); +			break; +		case down: +			speed(0, ys); +			break; +		case left: +			speed(-xs,  0); +			break; +		case right: +			speed(xs,  0); +			break; +		case ul: +			speed(-xs, -ys); +			break; +		case ur: +			speed(xs, -ys); +			break; +		case dl: +			speed(-xs, ys); +			break; +		case dr: +			speed(xs, ys); +			break; +		} +	} +} + +void apped(byte trn, byte np) { +	; +	{ +		triptype &with = tr[trn]; +		; +		{ +			void &with1 = peds[np]; +			appear(with.x - with.a.xl / 2, with.y - with.a.yl, dir); +		} +		rwsp(trn, tr[trn].face); +	} +} + +void getback() { +	byte fv; +	fieldtype r; +	; +	{ +		getsettype &with = getset[1 - cp]; +		while (with.numleft > 0) { +			; +			recall(r); +			mblit(x1, y1, x2, y2, 3, 1 - cp); +		} +	} +} + +void trippancy_link() { +	byte fv; +	; +	if ((ddm_o.menunow) | ontoolbar | seescroll | (~ alive))  return; +	for (fv = 1; fv <= numtr; fv ++) { +		triptype &with = tr[fv]; +		if (with.quick)  getback(); +	} +	for (fv = 1; fv <= numtr; fv ++) { +		triptype &with = tr[fv]; +		if (with.quick)  walk(); +	} +	for (fv = 1; fv <= numtr; fv ++) { +		triptype &with = tr[fv]; +		if (with.quick && with.visible)  andexor(); +	} +} + +void stopwalking() { +	; +	tr[1].stopwalk(); +	dna.rw = stopped; +} + +void tripkey(char dir) { +	; +	if (ctrl == cjoy)  return; + +	{ +		triptype &with = tr[1]; +		{ +			; +			switch (dir) { +			case 'H': +				if (rw != up) { +					; +					rw = up; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'P': +				if (rw != down) { +					; +					rw = down; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'K': +				if (rw != left) { +					; +					rw = left; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'M': +				if (rw != right) { +					; +					rw = right; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'I': +				if (rw != ur) { +					; +					rw = ur; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'Q': +				if (rw != dr) { +					; +					rw = dr; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'O': +				if (rw != dl) { +					; +					rw = dl; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'G': +				if (rw != ul) { +					; +					rw = ul; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'L': +				stopwalking(); +				break; +			} +		} +	} +} + +void getsetclear() { +	byte fv; +	; +	for (fv = 0; fv <= 1; fv ++) getset[fv].init(); +} + +void fliproom(byte room, byte ped) { +	; +	dusk; +	getsetclear(); +	enterroom(room); +	apped(1, ped); +	oldrw = dna.rw; +	dna.rw = tr[1].face; +	showrw; +	dawn; +} + +boolean infield(byte x) {         /* returns True if you're within field "x" */ +	integer yy; +	boolean infield_result; +	; +	{ +		void &with = fields[x]; +		{ +			triptype &with = tr[1]; +			; +			yy = with.y + with.a.yl; +			infield_result = (with.x >= x1) && (with.x <= x2) && (yy >= y1) && (yy <= y2); +		} +	} +	return infield_result; +} + +boolean neardoor() {       /* returns True if you're near a door! */ +	integer ux, uy; +	byte fv; +	boolean nd; +	boolean neardoor_result; +	; +	if (numfields < 9) { +		;     /* there ARE no doors here! */ +		neardoor_result = false; +		return neardoor_result; +	} +	{ +		triptype &with = tr[1]; +		; +		ux = with.x; +		uy = with.y + with.a.yl; +	} +	nd = false; +	for (fv = 9; fv <= numfields; fv ++) { +		void &with = fields[fv]; +		; +		if ((ux >= x1) && (ux <= x2) && (uy >= y1) && (uy <= y2))  nd = true; +	} +	neardoor_result = nd; +	return neardoor_result; +} + +void readstick() { +	byte jw; +	; +	if (ctrl == ckey)  return; + +	jw = joyway; + +	{ +		triptype &with = tr[1]; +		; +		if (jw == stopped)  stopwalking(); +		else { +			; +			dna.rw = jw; +			rwsp(1, dna.rw); +		} +	} + +	if (jw != oldjw) { +		; +		showrw; +		oldjw = jw; +	}  }  class unit_trip42_initialize { -  public: unit_trip42_initialize(); +public: +	unit_trip42_initialize();  };  static unit_trip42_initialize trip42_constructor; -unit_trip42_initialize::unit_trip42_initialize() {; - getsetclear(); +unit_trip42_initialize::unit_trip42_initialize() { +	; +	getsetclear();  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/trip42.h b/engines/avalanche/trip42.h index 644a72190e..69f01c34ac 100644 --- a/engines/avalanche/trip42.h +++ b/engines/avalanche/trip42.h @@ -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 @@ -40,49 +40,49 @@ namespace Avalanche {  const integer maxgetset = 10;  struct adxtype { -           varying_string<12> name; /* name of character */ -           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 */ +	varying_string<12> name; /* name of character */ +	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 */  };  class triptype {  public: -            adxtype a; /* vital statistics */ -            byte face,step; -            integer x,y; /* current xy coords */ -            array<0,1,integer> ox,oy;     /* last xy coords */ -            shortint ix,iy; /* amount to move sprite by, each step */ -            matrix<1,24,0,1,pointer> pic;     /* the pictures themselves */ -            boolean quick,visible,homing,check_me; -            integer hx,hy; /* homing x & y coords */ -            byte count; /* counts before changing step */ - -            triptype* init(byte spritenum);   /* loads & sets up the sprite */ -            void original();    /* just sets Quick to false */ -            void andexor();    /* drops sprite onto screen */ -            void turn(byte whichway);      /* turns him round */ -            void appear(integer wx,integer wy, byte wf); /* switches him on */ -            void bounce();    /* bounces off walls. */ -            void walk();    /* prepares for andexor, etc. */ -            void walkto(integer xx,integer yy); /* home in on a point */ -            void stophoming();    /* self-explanatory */ -            void homestep();    /* calculates ix & iy for one homing step */ -            void speed(shortint xx,shortint yy); /* sets ix & iy, non-homing, etc */ -            void stopwalk();    /* Stops the sprite from moving */ -            void chatter();    /* Sets up talk vars */ +	adxtype a; /* vital statistics */ +	byte face, step; +	integer x, y; /* current xy coords */ +	array<0, 1, integer> ox, oy;  /* last xy coords */ +	shortint ix, iy; /* amount to move sprite by, each step */ +	matrix<1, 24, 0, 1, pointer> pic; /* the pictures themselves */ +	boolean quick, visible, homing, check_me; +	integer hx, hy; /* homing x & y coords */ +	byte count; /* counts before changing step */ + +	triptype *init(byte spritenum);   /* loads & sets up the sprite */ +	void original();    /* just sets Quick to false */ +	void andexor();    /* drops sprite onto screen */ +	void turn(byte whichway);      /* turns him round */ +	void appear(integer wx, integer wy, byte wf); /* switches him on */ +	void bounce();    /* bounces off walls. */ +	void walk();    /* prepares for andexor, etc. */ +	void walkto(integer xx, integer yy); /* home in on a point */ +	void stophoming();    /* self-explanatory */ +	void homestep();    /* calculates ix & iy for one homing step */ +	void speed(shortint xx, shortint yy); /* sets ix & iy, non-homing, etc */ +	void stopwalk();    /* Stops the sprite from moving */ +	void chatter();    /* Sets up talk vars */  };  class getsettype {  public: -              array<1,maxgetset,fieldtype> gs; -              byte numleft; +	array<1, maxgetset, fieldtype> gs; +	byte numleft; -              getsettype* init(); -              void remember(fieldtype r); -              void recall(fieldtype& r); +	getsettype *init(); +	void remember(fieldtype r); +	void recall(fieldtype &r);  };  const integer numtr = 5; /* current max no. of sprites */ @@ -93,9 +93,9 @@ void loadtrip();  void tripkey(char dir); -void apped(byte trn,byte np); +void apped(byte trn, byte np); -void fliproom(byte room,byte ped); +void fliproom(byte room, byte ped);  boolean infield(byte x);          /* returns True if you're within field "x" */ @@ -109,8 +109,8 @@ void readstick();  #define EXTERN  #endif -EXTERN array<1,numtr,triptype> tr; -EXTERN array<0,1,getsettype> getset; +EXTERN array<1, numtr, triptype> tr; +EXTERN array<0, 1, getsettype> getset;  #undef EXTERN  #define EXTERN extern diff --git a/engines/avalanche/trip5.cpp b/engines/avalanche/trip5.cpp index fc9429bc95..9a6a82f637 100644 --- a/engines/avalanche/trip5.cpp +++ b/engines/avalanche/trip5.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 @@ -33,7 +33,7 @@                   TRIP5            Trippancy V */  #define __trip5_implementation__ -            /* Trippancy V */ /* Define NOASM to use Pascal instead of asm. */ +/* Trippancy V */ /* Define NOASM to use Pascal instead of asm. */  /*$S- Fast!*/  #include "trip5.h" @@ -49,1290 +49,1403 @@  namespace Avalanche { -void loadtrip() -{ -    byte gm; +void loadtrip() { +	byte gm; - for( gm=1; gm <= numtr; gm ++) tr[gm].original(); - fillchar(aa,sizeof(aa),'\0'); +	for (gm = 1; gm <= numtr; gm ++) tr[gm].original(); +	fillchar(aa, sizeof(aa), '\0');  } -byte checkfeet(integer x1,integer x2,integer oy,integer y, byte yl) -{ -    byte a,c; integer fv,ff; - -/* if not alive then begin checkfeet:=0; exit; end;*/ - byte checkfeet_result; - a=0; setactivepage(2); if (x1<0)  x1=0; if (x2>639)  x2=639; - if (oy<y)  -  for( fv=x1; fv <= x2; fv ++) -   for( ff=oy+yl; ff <= y+yl; ff ++) -   { -    c=getpixel(fv,ff); -    if (c>a)  a=c; -   } else -  for( fv=x1; fv <= x2; fv ++) -   for( ff=y+yl; ff <= oy+yl; ff ++) -   { -    c=getpixel(fv,ff); -    if (c>a)  a=c; -   } - checkfeet_result=a; setactivepage(1-cp); - return checkfeet_result; +byte checkfeet(integer x1, integer x2, integer oy, integer y, byte yl) { +	byte a, c; +	integer fv, ff; + +	/* if not alive then begin checkfeet:=0; exit; end;*/ +	byte checkfeet_result; +	a = 0; +	setactivepage(2); +	if (x1 < 0)  x1 = 0; +	if (x2 > 639)  x2 = 639; +	if (oy < y) +		for (fv = x1; fv <= x2; fv ++) +			for (ff = oy + yl; ff <= y + yl; ff ++) { +				c = getpixel(fv, ff); +				if (c > a)  a = c; +			} +	else +		for (fv = x1; fv <= x2; fv ++) +			for (ff = y + yl; ff <= oy + yl; ff ++) { +				c = getpixel(fv, ff); +				if (c > a)  a = c; +			} +	checkfeet_result = a; +	setactivepage(1 - cp); +	return checkfeet_result;  } -byte geida_ped(byte which) -{ - byte geida_ped_result; - switch (which) { -    case 1: geida_ped_result= 7; break; -  case 2:case 6: geida_ped_result= 8; break; -  case 3:case 5: geida_ped_result= 9; break; -    case 4: geida_ped_result=10; break; - } - return geida_ped_result; +byte geida_ped(byte which) { +	byte geida_ped_result; +	switch (which) { +	case 1: +		geida_ped_result = 7; +		break; +	case 2: +	case 6: +		geida_ped_result = 8; +		break; +	case 3: +	case 5: +		geida_ped_result = 9; +		break; +	case 4: +		geida_ped_result = 10; +		break; +	} +	return geida_ped_result;  }  void catamove(byte ped) - /* When you enter a new position in the catacombs, this procedure should -   be called. It changes the Also codes so that they may match the picture -   on the screen. (Coming soon: It draws up the screen, too.) */ +/* When you enter a new position in the catacombs, this procedure should +  be called. It changes the Also codes so that they may match the picture +  on the screen. (Coming soon: It draws up the screen, too.) */  { - longint here; - word xy_word; - byte fv,ff; - -/* XY_word is cat_x+cat_y*256. Thus, every room in the -  catacombs has a different number for it. */ - - - { -  xy_word=cat_x+cat_y*256; -  geida_spin=0; - } - switch (xy_word) { -  case 1801: { /* Exit catacombs */ -         fliproom(r__lustiesroom,4); -         display("Phew! Nice to be out of there!"); -         return; -        } -        break; -  case 1033: { /* Oubliette */ -         fliproom(r__oubliette,1); -         display("Oh, NO!\231\2"); -         return; -        } -        break; -     case 4: { -         fliproom(r__geidas,1); -         return; -        } -        break; -  case 2307: { -         fliproom(r__lusties,5); -         display("Oh no... here we go again..."); -         dna.user_moves_avvy=false; -         tr[1].iy=1; tr[1].ix=0; -         return; -        } -        break; - } - - if (~ dna.enter_catacombs_from_lusties_room)  load(29); -             here=catamap[cat_y][cat_x]; - - switch (here & 0xf) { /* West. */ -  case 0: { /* no connection (wall) */ -      magics[2].op=bounces;  /* Sloping wall. */ -      magics[3].op=nix;  /* Straight wall. */ -      portals[13].op=nix;  /* Door. */ -      show_one(28); -     } -     break; -  case 0x1: { /* no connection (wall + shield), */ -      magics[2].op=bounces;  /* Sloping wall. */ -      magics[3].op=nix;  /* Straight wall. */ -      portals[13].op=nix;  /* Door. */ -      show_one(28); /* Wall, plus... */ -      show_one(29); /* ...shield. */ -     } -     break; -  case 0x2: { /* wall with door */ -      magics[2].op=bounces;  /* Sloping wall. */ -      magics[3].op=nix;  /* Straight wall. */ -      portals[13].op=special;  /* Door. */ -      show_one(28); /* Wall, plus... */ -      show_one(30); /* ...door. */ -     } -     break; -  case 0x3: { /* wall with door and shield */ -      magics[2].op=bounces;  /* Sloping wall. */ -      magics[3].op=nix;  /* Straight wall. */ -      portals[13].op=special;  /* Door. */ -      show_one(28); /* Wall, plus... */ -      show_one(30); /* ...door, and... */ -      show_one(29); /* ...shield. */ -     } -     break; -  case 0x4: { /* no connection (wall + window), */ -      magics[2].op=bounces;  /* Sloping wall. */ -      magics[3].op=nix;  /* Straight wall. */ -      portals[13].op=nix;  /* Door. */ -      show_one(28); /* Wall, plus... */ -      show_one(5);  /* ...window. */ -     } -     break; -  case 0x5: { /* wall with door and window */ -      magics[2].op=bounces;  /* Sloping wall. */ -      magics[3].op=nix;  /* Straight wall. */ -      portals[13].op=special;  /* Door. */ -      show_one(28); /* Wall, plus... */ -      show_one(30); /* ...door, and... */ -      show_one(5); /* ...window. */ -     } -     break; -  case 0x6: { /* no connection (wall + torches), */ -      magics[2].op=bounces;  /* Sloping wall. */ -      magics[3].op=nix;  /* Straight wall. */ -      portals[13].op=nix;  /* No door. */ -      show_one(28); /* Wall, plus... */ -      show_one(7); /* ...torches. */ -     } -     break; -  case 0x7: { /* wall with door and torches */ -      magics[2].op=bounces;  /* Sloping wall. */ -      magics[3].op=nix;  /* Straight wall. */ -      portals[13].op=special;  /* Door. */ -      show_one(28); /* Wall, plus... */ -      show_one(30); /* ...door, and... */ -      show_one(7); /* ...torches. */ -     } -     break; -  case 0xf: { /* straight-through corridor. */ -      magics[2].op=nix;  /* Sloping wall. */ -      magics[3].op=special;  /* Straight wall. */ -     } -     break; - } - -                         /*  ---- */ - - switch ((cardinal)(here & 0xf0) >> 4) { /* East */ -  case 0: { /* no connection (wall) */ -      magics[5].op=bounces;  /* Sloping wall. */ -      magics[6].op=nix;  /* Straight wall. */ -      portals[15].op=nix;  /* Door. */ -      show_one(19); -     } -     break; -  case 0x1: { /* no connection (wall + window), */ -      magics[5].op=bounces;  /* Sloping wall. */ -      magics[6].op=nix;  /* Straight wall. */ -      portals[15].op=nix;  /* Door. */ -      show_one(19); /* Wall, plus... */ -      show_one(20); /* ...window. */ -     } -     break; -  case 0x2: { /* wall with door */ -      magics[5].op=bounces;  /* Sloping wall. */ -      magics[6].op=nix;  /* Straight wall. */ -      portals[15].op=special;  /* Door. */ -      show_one(19); /* Wall, plus... */ -      show_one(21); /* ...door. */ -     } -     break; -  case 0x3: { /* wall with door and window */ -      magics[5].op=bounces;  /* Sloping wall. */ -      magics[6].op=nix;  /* Straight wall. */ -      portals[15].op=special;  /* Door. */ -      show_one(19); /* Wall, plus... */ -      show_one(20); /* ...door, and... */ -      show_one(21); /* ...window. */ -     } -     break; -  case 0x6: { /* no connection (wall + torches), */ -      magics[5].op=bounces;  /* Sloping wall. */ -      magics[6].op=nix;  /* Straight wall. */ -      portals[15].op=nix;  /* No door. */ -      show_one(19); /* Wall, plus... */ -      show_one(18); /* ...torches. */ -     } -     break; -  case 0x7: { /* wall with door and torches */ -      magics[5].op=bounces;  /* Sloping wall. */ -      magics[6].op=nix;  /* Straight wall. */ -      portals[15].op=special;  /* Door. */ -      show_one(19); /* Wall, plus... */ -      show_one(21); /* ...door, and... */ -      show_one(18); /* ...torches. */ -     } -     break; -  case 0xf: { /* straight-through corridor. */ -      magics[5].op=nix;  /* Sloping wall. */ -      magics[6].op=special;  /* Straight wall. */ -      portals[15].op=nix;  /* Door. */ -     } -     break; - } - -                         /*  ---- */ - - switch ((cardinal)(here & 0xf00) >> 8) { /* South */ -  case 0: { /* No connection. */ -      magics[7].op=bounces; -      magics[12].op=bounces; -      magics[13].op=bounces; -     } -     break; -  case 0x1: { -       show_one(22); -       { void& with = magics[13];  -        if ((xy_word==2051) & (dna.geida_follows))  -         op=exclaim; -        else op=special;} /* Right exit south. */ -       magics[7].op=bounces; -       magics[12].op=bounces; -     } -     break; -  case 0x2: { -      show_one(23); -      magics[7].op=special;  /* Middle exit south. */ -       magics[12].op=bounces; -       magics[13].op=bounces; -     } -     break; -  case 0x3: { -       show_one(24); -       magics[12].op=special;  /* Left exit south. */ -       magics[7].op=bounces; -       magics[13].op=bounces; -      } -      break; - } - - switch ((cardinal)(here & 0xf000) >> 12) { /* North */ -  case 0: { /* No connection */ -      magics[1].op=bounces; -      portals[12].op=nix;  /* Door. */ -     } -     break; -   /* LEFT handles: */ -/*  $1: begin -      show_one(4); -      magics[1].op:=bounces; { Left exit north. } { Change magic number! } -      portals[12].op:=special; { Door. } -     end;*/ -  case 0x2: { -      show_one(4); -      magics[1].op=bounces;  /* Middle exit north. */ -      portals[12].op=special;  /* Door. */ -     } -     break; -/*  $3: begin -      show_one(4); -      magics[1].op:=bounces; { Right exit north. } { Change magic number! } -      portals[12].op:=special; { Door. } -     end; -  { RIGHT handles: } -  $4: begin -      show_one(3); -      magics[1].op:=bounces; { Left exit north. } { Change magic number! } -      portals[12].op:=special; { Door. } -     end;*/ -  case 0x5: { -      show_one(3); -      magics[1].op=bounces;  /* Middle exit north. */ -      portals[12].op=special;  /* Door. */ -     } -     break; -/*  $6: begin -      show_one(3); -      magics[1].op:=bounces; { Right exit north. } -      portals[12].op:=special; { Door. } -     end;*/ - /* ARCHWAYS: */ -  case 0x7:case 0x8:case 0x9: { -      show_one(6); - -      if (((cardinal)(here & 0xf000) >> 12)>0x7)  show_one(31); -      if (((cardinal)(here & 0xf000) >> 12)==0x9)  show_one(32); - -      magics[1].op=special;  /* Middle arch north. */ -      portals[12].op=nix;  /* Door. */ -     } -     break; -  /* DECORATIONS: */ -  case 0xd: { /* No connection + WINDOW */ -      magics[1].op=bounces; -      portals[12].op=nix;  /* Door. */ -      show_one(14); -     } -     break; -  case 0xe: { /* No connection + TORCH */ -      magics[1].op=bounces; -      portals[12].op=nix;  /* Door. */ -      show_one(8); -     } -     break; - /* Recessed door: */ -  case 0xf: { -      magics[1].op=nix;  /* Door to Geida's room. */ -      show_one(1); -      portals[12].op=special;  /* Door. */ -     } -     break; - } - - switch (xy_word) { -   case 514: show_one(17); break;     /* [2,2] : "Art Gallery" sign over door. */ -   case 264: show_one(9); break;      /* [8,1] : "The Wrong Way!" sign. */ -  case 1797: show_one(2); break;      /* [5,7] : "Ite Mingite" sign. */ -   case 258: for( fv=0; fv <= 2; fv ++) /* [2,1] : Art gallery - pictures */ -         { -          show_one_at(15,130+fv*120,70); -          show_one_at(16,184+fv*120,78); -         } -         break; -  case 1287: for( fv=10; fv <= 13; fv ++) show_one(fv); break; /* [7,5] : 4 candles. */ -   case 776: show_one(10); break;     /* [8,3] : 1 candle. */ -  case 2049: show_one(11); break;     /* [1,8] : another candle. */ -   case 257: { show_one(12); show_one(13); } break; /* [1,1] : the other two. */ - } - - if ((dna.geida_follows) & (ped>0))  - { -   triptype& with = tr[2];  - -   if (! with.quick)  /* If we don't already have her... */ -    tr[2].init(5,true); /* ...Load Geida. */ -   apped(2,geida_ped(ped)); -   tr[2].call_eachstep =true; -   tr[2].eachstep=procgeida_procs; - } +	longint here; +	word xy_word; +	byte fv, ff; + +	/* XY_word is cat_x+cat_y*256. Thus, every room in the +	  catacombs has a different number for it. */ + + +	{ +		xy_word = cat_x + cat_y * 256; +		geida_spin = 0; +	} +	switch (xy_word) { +	case 1801: { /* Exit catacombs */ +		fliproom(r__lustiesroom, 4); +		display("Phew! Nice to be out of there!"); +		return; +	} +	break; +	case 1033: { /* Oubliette */ +		fliproom(r__oubliette, 1); +		display("Oh, NO!\231\2"); +		return; +	} +	break; +	case 4: { +		fliproom(r__geidas, 1); +		return; +	} +	break; +	case 2307: { +		fliproom(r__lusties, 5); +		display("Oh no... here we go again..."); +		dna.user_moves_avvy = false; +		tr[1].iy = 1; +		tr[1].ix = 0; +		return; +	} +	break; +	} + +	if (~ dna.enter_catacombs_from_lusties_room)  load(29); +	here = catamap[cat_y][cat_x]; + +	switch (here & 0xf) { /* West. */ +	case 0: { /* no connection (wall) */ +		magics[2].op = bounces; /* Sloping wall. */ +		magics[3].op = nix; /* Straight wall. */ +		portals[13].op = nix; /* Door. */ +		show_one(28); +	} +	break; +	case 0x1: { /* no connection (wall + shield), */ +		magics[2].op = bounces; /* Sloping wall. */ +		magics[3].op = nix; /* Straight wall. */ +		portals[13].op = nix; /* Door. */ +		show_one(28); /* Wall, plus... */ +		show_one(29); /* ...shield. */ +	} +	break; +	case 0x2: { /* wall with door */ +		magics[2].op = bounces; /* Sloping wall. */ +		magics[3].op = nix; /* Straight wall. */ +		portals[13].op = special; /* Door. */ +		show_one(28); /* Wall, plus... */ +		show_one(30); /* ...door. */ +	} +	break; +	case 0x3: { /* wall with door and shield */ +		magics[2].op = bounces; /* Sloping wall. */ +		magics[3].op = nix; /* Straight wall. */ +		portals[13].op = special; /* Door. */ +		show_one(28); /* Wall, plus... */ +		show_one(30); /* ...door, and... */ +		show_one(29); /* ...shield. */ +	} +	break; +	case 0x4: { /* no connection (wall + window), */ +		magics[2].op = bounces; /* Sloping wall. */ +		magics[3].op = nix; /* Straight wall. */ +		portals[13].op = nix; /* Door. */ +		show_one(28); /* Wall, plus... */ +		show_one(5);  /* ...window. */ +	} +	break; +	case 0x5: { /* wall with door and window */ +		magics[2].op = bounces; /* Sloping wall. */ +		magics[3].op = nix; /* Straight wall. */ +		portals[13].op = special; /* Door. */ +		show_one(28); /* Wall, plus... */ +		show_one(30); /* ...door, and... */ +		show_one(5); /* ...window. */ +	} +	break; +	case 0x6: { /* no connection (wall + torches), */ +		magics[2].op = bounces; /* Sloping wall. */ +		magics[3].op = nix; /* Straight wall. */ +		portals[13].op = nix; /* No door. */ +		show_one(28); /* Wall, plus... */ +		show_one(7); /* ...torches. */ +	} +	break; +	case 0x7: { /* wall with door and torches */ +		magics[2].op = bounces; /* Sloping wall. */ +		magics[3].op = nix; /* Straight wall. */ +		portals[13].op = special; /* Door. */ +		show_one(28); /* Wall, plus... */ +		show_one(30); /* ...door, and... */ +		show_one(7); /* ...torches. */ +	} +	break; +	case 0xf: { /* straight-through corridor. */ +		magics[2].op = nix; /* Sloping wall. */ +		magics[3].op = special; /* Straight wall. */ +	} +	break; +	} + +	/*  ---- */ + +	switch ((cardinal)(here & 0xf0) >> 4) { /* East */ +	case 0: { /* no connection (wall) */ +		magics[5].op = bounces; /* Sloping wall. */ +		magics[6].op = nix; /* Straight wall. */ +		portals[15].op = nix; /* Door. */ +		show_one(19); +	} +	break; +	case 0x1: { /* no connection (wall + window), */ +		magics[5].op = bounces; /* Sloping wall. */ +		magics[6].op = nix; /* Straight wall. */ +		portals[15].op = nix; /* Door. */ +		show_one(19); /* Wall, plus... */ +		show_one(20); /* ...window. */ +	} +	break; +	case 0x2: { /* wall with door */ +		magics[5].op = bounces; /* Sloping wall. */ +		magics[6].op = nix; /* Straight wall. */ +		portals[15].op = special; /* Door. */ +		show_one(19); /* Wall, plus... */ +		show_one(21); /* ...door. */ +	} +	break; +	case 0x3: { /* wall with door and window */ +		magics[5].op = bounces; /* Sloping wall. */ +		magics[6].op = nix; /* Straight wall. */ +		portals[15].op = special; /* Door. */ +		show_one(19); /* Wall, plus... */ +		show_one(20); /* ...door, and... */ +		show_one(21); /* ...window. */ +	} +	break; +	case 0x6: { /* no connection (wall + torches), */ +		magics[5].op = bounces; /* Sloping wall. */ +		magics[6].op = nix; /* Straight wall. */ +		portals[15].op = nix; /* No door. */ +		show_one(19); /* Wall, plus... */ +		show_one(18); /* ...torches. */ +	} +	break; +	case 0x7: { /* wall with door and torches */ +		magics[5].op = bounces; /* Sloping wall. */ +		magics[6].op = nix; /* Straight wall. */ +		portals[15].op = special; /* Door. */ +		show_one(19); /* Wall, plus... */ +		show_one(21); /* ...door, and... */ +		show_one(18); /* ...torches. */ +	} +	break; +	case 0xf: { /* straight-through corridor. */ +		magics[5].op = nix; /* Sloping wall. */ +		magics[6].op = special; /* Straight wall. */ +		portals[15].op = nix; /* Door. */ +	} +	break; +	} + +	/*  ---- */ + +	switch ((cardinal)(here & 0xf00) >> 8) { /* South */ +	case 0: { /* No connection. */ +		magics[7].op = bounces; +		magics[12].op = bounces; +		magics[13].op = bounces; +	} +	break; +	case 0x1: { +		show_one(22); +		{ +			void &with = magics[13]; +			if ((xy_word == 2051) & (dna.geida_follows)) +				op = exclaim; +			else op = special; +		} /* Right exit south. */ +		magics[7].op = bounces; +		magics[12].op = bounces; +	} +	break; +	case 0x2: { +		show_one(23); +		magics[7].op = special; /* Middle exit south. */ +		magics[12].op = bounces; +		magics[13].op = bounces; +	} +	break; +	case 0x3: { +		show_one(24); +		magics[12].op = special; /* Left exit south. */ +		magics[7].op = bounces; +		magics[13].op = bounces; +	} +	break; +	} + +	switch ((cardinal)(here & 0xf000) >> 12) { /* North */ +	case 0: { /* No connection */ +		magics[1].op = bounces; +		portals[12].op = nix; /* Door. */ +	} +	break; +	/* LEFT handles: */ +	/*  $1: begin +	      show_one(4); +	      magics[1].op:=bounces; { Left exit north. } { Change magic number! } +	      portals[12].op:=special; { Door. } +	     end;*/ +	case 0x2: { +		show_one(4); +		magics[1].op = bounces; /* Middle exit north. */ +		portals[12].op = special; /* Door. */ +	} +	break; +	/*  $3: begin +	      show_one(4); +	      magics[1].op:=bounces; { Right exit north. } { Change magic number! } +	      portals[12].op:=special; { Door. } +	     end; +	  { RIGHT handles: } +	  $4: begin +	      show_one(3); +	      magics[1].op:=bounces; { Left exit north. } { Change magic number! } +	      portals[12].op:=special; { Door. } +	     end;*/ +	case 0x5: { +		show_one(3); +		magics[1].op = bounces; /* Middle exit north. */ +		portals[12].op = special; /* Door. */ +	} +	break; +	/*  $6: begin +	      show_one(3); +	      magics[1].op:=bounces; { Right exit north. } +	      portals[12].op:=special; { Door. } +	     end;*/ +	/* ARCHWAYS: */ +	case 0x7: +	case 0x8: +	case 0x9: { +		show_one(6); + +		if (((cardinal)(here & 0xf000) >> 12) > 0x7)  show_one(31); +		if (((cardinal)(here & 0xf000) >> 12) == 0x9)  show_one(32); + +		magics[1].op = special; /* Middle arch north. */ +		portals[12].op = nix; /* Door. */ +	} +	break; +	/* DECORATIONS: */ +	case 0xd: { /* No connection + WINDOW */ +		magics[1].op = bounces; +		portals[12].op = nix; /* Door. */ +		show_one(14); +	} +	break; +	case 0xe: { /* No connection + TORCH */ +		magics[1].op = bounces; +		portals[12].op = nix; /* Door. */ +		show_one(8); +	} +	break; +	/* Recessed door: */ +	case 0xf: { +		magics[1].op = nix; /* Door to Geida's room. */ +		show_one(1); +		portals[12].op = special; /* Door. */ +	} +	break; +	} + +	switch (xy_word) { +	case 514: +		show_one(17); +		break;     /* [2,2] : "Art Gallery" sign over door. */ +	case 264: +		show_one(9); +		break;      /* [8,1] : "The Wrong Way!" sign. */ +	case 1797: +		show_one(2); +		break;      /* [5,7] : "Ite Mingite" sign. */ +	case 258: +		for (fv = 0; fv <= 2; fv ++) { /* [2,1] : Art gallery - pictures */ +			show_one_at(15, 130 + fv * 120, 70); +			show_one_at(16, 184 + fv * 120, 78); +		} +		break; +	case 1287: +		for (fv = 10; fv <= 13; fv ++) show_one(fv); +		break; /* [7,5] : 4 candles. */ +	case 776: +		show_one(10); +		break;     /* [8,3] : 1 candle. */ +	case 2049: +		show_one(11); +		break;     /* [1,8] : another candle. */ +	case 257: { +		show_one(12); +		show_one(13); +	} +	break; /* [1,1] : the other two. */ +	} + +	if ((dna.geida_follows) & (ped > 0)) { +		triptype &with = tr[2]; + +		if (! with.quick)  /* If we don't already have her... */ +			tr[2].init(5, true); /* ...Load Geida. */ +		apped(2, geida_ped(ped)); +		tr[2].call_eachstep = true; +		tr[2].eachstep = procgeida_procs; +	}  }  void call_special(word which); - /* This proc gets called whenever you touch a line defined as Special. */ -static void dawndelay() - { set_up_timer(2,procdawn_delay,reason_dawndelay); } +/* This proc gets called whenever you touch a line defined as Special. */ +static void dawndelay() { +	set_up_timer(2, procdawn_delay, reason_dawndelay); +} -void call_special(word which) -{ - switch (which) { -  case 1: { /* Special 1: Room 22: top of stairs. */ -      show_one(1); -      dna.brummie_stairs=1; -      magics[10].op=nix; -      set_up_timer(10,procstairs,reason_brummiestairs); -      stopwalking(); -      dna.user_moves_avvy=false; -     } -     break; -  case 2: { /* Special 2: Room 22: bottom of stairs. */ -      dna.brummie_stairs=3; -      magics[11].op=nix; -      magics[12].op=exclaim; -      magics[12].data=5; -      magics[4].op=bounces;  /* Now works as planned! */ -      stopwalking(); -      dixi('q',26); -      dna.user_moves_avvy=true; -     } -     break; -  case 3: { /* Special 3: Room 71: triggers dart. */ -      tr[1].bounce(); /* Must include that. */ - -      if (~ dna.arrow_triggered)  -      { -       dna.arrow_triggered=true; -       apped(2,4); /* The dart starts at ped 4, and... */ -       tr[2].walkto(5); /* flies to ped 5. */ -       tr[2].face=0;  /* Only face. */ -       /* Should call some kind of Eachstep procedure which will deallocate -         the sprite when it hits the wall, and replace it with the chunk -         graphic of the arrow buried in the plaster. */ -       /* OK! */ -       tr[2].call_eachstep=true; -       tr[2].eachstep=procarrow_procs; -      } -     } -     break; - -  case 4: { /* This is the ghost room link. */ -      dusk; -      tr[1].turn(right); /* you'll see this after we get back from bootstrap */ -      set_up_timer(1,procghost_room_phew,reason_ghost_room_phew); -      back_to_bootstrap(3); -     } -     break; - -  case 5: if (dna.friar_will_tie_you_up)  -     {     /* Special 5: Room 42: touched tree, and get tied up. */ -      magics[4].op=bounces;  /* Boundary effect is now working again. */ -      dixi('q',35); -      tr[1].done(); -      /*tr[1].vanishifstill:=true;*/ -      show_one(2); -      dixi('q',36); -      dna.tied_up=true; -      dna.friar_will_tie_you_up=false; -      tr[2].walkto(3); -      tr[2].vanishifstill=true; -      tr[2].check_me=true;  /* One of them must have Check_Me switched on. */ -      whereis[pfriartuck]=177;  /* Not here, then. */ -      set_up_timer(364,prochang_around,reason_hanging_around); -     } -     break; - -   case 6: { /* Special 6: fall down oubliette. */ -       dna.user_moves_avvy=false; -       tr[1].ix=3; -       tr[1].iy=0; -       tr[1].face=right; -       set_up_timer(1,procfall_down_oubliette,reason_falling_down_oubliette); -      } -      break; - -   case 7: { /* Special 7: stop falling down oubliette. */ -       tr[1].visible=false; -       magics[10].op=nix; -       stopwalking(); -       lose_timer(reason_falling_down_oubliette); -       mblit(12,80,38,160,3,0); -       mblit(12,80,38,160,3,1); -       display("Oh dear, you seem to be down the bottom of an oubliette."); -       set_up_timer(200,procmeet_avaroid,reason_meeting_avaroid); -      } -      break; - -   case 8:        /* Special 8: leave du Lustie's room. */ -       if ((geida_follows) & (~ lustie_is_asleep))  -       { -        dixi('q',63); -        tr[2].turn(down); tr[2].stopwalk(); tr[2].call_eachstep=false; /* Geida */ -        gameover; -       } -       break; - -   case 9: { /* Special 9: lose Geida to Robin Hood... */ -       if (~ dna.geida_follows)  return;   /* DOESN'T COUNT: no Geida. */ -       tr[2].call_eachstep=false;  /* She no longer follows Avvy around. */ -       tr[2].walkto(4); /* She walks to somewhere... */ -       tr[1].done();     /* Lose Avvy. */ -       dna.user_moves_avvy=false; -       set_up_timer(40,procrobin_hood_and_geida,reason_robin_hood_and_geida); -      } -      break; - -  case 10: { /* Special 10: transfer north in catacombs. */ -       if ((dna.cat_x==4) && (dna.cat_y==1))  -       {     /* Into Geida's room. */ -        if (dna.obj[key])  dixi('q',62); else -        { -         dixi('q',61); -         return; -        } -       } -       dusk; -       dna.cat_y -= 1; -       catamove(4); if (dna.room!=r__catacombs)  return; -       delavvy; -       switch ((cardinal)(catamap[cat_y][cat_x] & 0xf00) >> 8) { -        case 0x1: apped(1,12); break; -        case 0x3: apped(1,11); break; -        default: apped(1,4); -       } -       getback(); -       dawndelay(); -      } -      break; -  case 11: { /* Special 11: transfer east in catacombs. */ -       dusk; -       dna.cat_x += 1; -       catamove(1); if (dna.room!=r__catacombs)  return; -       delavvy; -       apped(1,1); -       getback(); -       dawndelay(); -      } -      break; -  case 12: { /* Special 12: transfer south in catacombs. */ -       dusk; -       dna.cat_y += 1; -       catamove(2); if (dna.room!=r__catacombs)  return; -       delavvy; -       apped(1,2); -       getback(); -       dawndelay(); -      } -      break; -  case 13: { /* Special 13: transfer west in catacombs. */ -       dusk; -       dna.cat_x -= 1; -       catamove(3); if (dna.room!=r__catacombs)  return; -       delavvy; -       apped(1,3); -       getback(); -       dawndelay(); -      } -      break; - } +void call_special(word which) { +	switch (which) { +	case 1: { /* Special 1: Room 22: top of stairs. */ +		show_one(1); +		dna.brummie_stairs = 1; +		magics[10].op = nix; +		set_up_timer(10, procstairs, reason_brummiestairs); +		stopwalking(); +		dna.user_moves_avvy = false; +	} +	break; +	case 2: { /* Special 2: Room 22: bottom of stairs. */ +		dna.brummie_stairs = 3; +		magics[11].op = nix; +		magics[12].op = exclaim; +		magics[12].data = 5; +		magics[4].op = bounces; /* Now works as planned! */ +		stopwalking(); +		dixi('q', 26); +		dna.user_moves_avvy = true; +	} +	break; +	case 3: { /* Special 3: Room 71: triggers dart. */ +		tr[1].bounce(); /* Must include that. */ + +		if (~ dna.arrow_triggered) { +			dna.arrow_triggered = true; +			apped(2, 4); /* The dart starts at ped 4, and... */ +			tr[2].walkto(5); /* flies to ped 5. */ +			tr[2].face = 0; /* Only face. */ +			/* Should call some kind of Eachstep procedure which will deallocate +			  the sprite when it hits the wall, and replace it with the chunk +			  graphic of the arrow buried in the plaster. */ +			/* OK! */ +			tr[2].call_eachstep = true; +			tr[2].eachstep = procarrow_procs; +		} +	} +	break; + +	case 4: { /* This is the ghost room link. */ +		dusk; +		tr[1].turn(right); /* you'll see this after we get back from bootstrap */ +		set_up_timer(1, procghost_room_phew, reason_ghost_room_phew); +		back_to_bootstrap(3); +	} +	break; + +	case 5: +		if (dna.friar_will_tie_you_up) { +			/* Special 5: Room 42: touched tree, and get tied up. */ +			magics[4].op = bounces; /* Boundary effect is now working again. */ +			dixi('q', 35); +			tr[1].done(); +			/*tr[1].vanishifstill:=true;*/ +			show_one(2); +			dixi('q', 36); +			dna.tied_up = true; +			dna.friar_will_tie_you_up = false; +			tr[2].walkto(3); +			tr[2].vanishifstill = true; +			tr[2].check_me = true; /* One of them must have Check_Me switched on. */ +			whereis[pfriartuck] = 177; /* Not here, then. */ +			set_up_timer(364, prochang_around, reason_hanging_around); +		} +		break; + +	case 6: { /* Special 6: fall down oubliette. */ +		dna.user_moves_avvy = false; +		tr[1].ix = 3; +		tr[1].iy = 0; +		tr[1].face = right; +		set_up_timer(1, procfall_down_oubliette, reason_falling_down_oubliette); +	} +	break; + +	case 7: { /* Special 7: stop falling down oubliette. */ +		tr[1].visible = false; +		magics[10].op = nix; +		stopwalking(); +		lose_timer(reason_falling_down_oubliette); +		mblit(12, 80, 38, 160, 3, 0); +		mblit(12, 80, 38, 160, 3, 1); +		display("Oh dear, you seem to be down the bottom of an oubliette."); +		set_up_timer(200, procmeet_avaroid, reason_meeting_avaroid); +	} +	break; + +	case 8:        /* Special 8: leave du Lustie's room. */ +		if ((geida_follows) & (~ lustie_is_asleep)) { +			dixi('q', 63); +			tr[2].turn(down); +			tr[2].stopwalk(); +			tr[2].call_eachstep = false; /* Geida */ +			gameover; +		} +		break; + +	case 9: { /* Special 9: lose Geida to Robin Hood... */ +		if (~ dna.geida_follows)  return;   /* DOESN'T COUNT: no Geida. */ +		tr[2].call_eachstep = false; /* She no longer follows Avvy around. */ +		tr[2].walkto(4); /* She walks to somewhere... */ +		tr[1].done();     /* Lose Avvy. */ +		dna.user_moves_avvy = false; +		set_up_timer(40, procrobin_hood_and_geida, reason_robin_hood_and_geida); +	} +	break; + +	case 10: { /* Special 10: transfer north in catacombs. */ +		if ((dna.cat_x == 4) && (dna.cat_y == 1)) { +			/* Into Geida's room. */ +			if (dna.obj[key])  dixi('q', 62); +			else { +				dixi('q', 61); +				return; +			} +		} +		dusk; +		dna.cat_y -= 1; +		catamove(4); +		if (dna.room != r__catacombs)  return; +		delavvy; +		switch ((cardinal)(catamap[cat_y][cat_x] & 0xf00) >> 8) { +		case 0x1: +			apped(1, 12); +			break; +		case 0x3: +			apped(1, 11); +			break; +		default: +			apped(1, 4); +		} +		getback(); +		dawndelay(); +	} +	break; +	case 11: { /* Special 11: transfer east in catacombs. */ +		dusk; +		dna.cat_x += 1; +		catamove(1); +		if (dna.room != r__catacombs)  return; +		delavvy; +		apped(1, 1); +		getback(); +		dawndelay(); +	} +	break; +	case 12: { /* Special 12: transfer south in catacombs. */ +		dusk; +		dna.cat_y += 1; +		catamove(2); +		if (dna.room != r__catacombs)  return; +		delavvy; +		apped(1, 2); +		getback(); +		dawndelay(); +	} +	break; +	case 13: { /* Special 13: transfer west in catacombs. */ +		dusk; +		dna.cat_x -= 1; +		catamove(3); +		if (dna.room != r__catacombs)  return; +		delavvy; +		apped(1, 3); +		getback(); +		dawndelay(); +	} +	break; +	}  } -void hide_in_the_cupboard();  +void hide_in_the_cupboard(); -void open_the_door(byte whither,byte ped,byte magicnum) - /* This slides the door open. (The data really ought to be saved in -   the Also file, and will be next time. However, for now, they're -   here.) */ +void open_the_door(byte whither, byte ped, byte magicnum) +/* This slides the door open. (The data really ought to be saved in +  the Also file, and will be next time. However, for now, they're +  here.) */  { - switch (dna.room) { -  case r__outsideyours:case r__outsidenottspub:case r__outsideducks: -   { -    first_show(1); -    then_show(2); -    then_show(3); -   } -   break; -  case r__insidecardiffcastle: -   { -    first_show(1); -    then_show(5); -   } -   break; -  case r__avvysgarden:case r__entrancehall:case r__insideabbey: -   { -    first_show(1); -    then_show(2); -   } -   break; -  case r__musicroom:case r__outsideargentpub: -   { -    first_show(5); -    then_show(6); -   } -   break; -  case r__lusties: -   switch (magicnum) { -    case 14: if (dna.avvys_in_the_cupboard)  -         { -          hide_in_the_cupboard(); -          first_show(8); then_show(7); -          start_to_close; -          return; -         } else -         { -            apped(1,6); -            tr[1].face=right;  /* added by TT 12/3/1995 */ -            first_show(8); then_show(9); -         } -         break; -    case 12: { -         first_show(4); then_show(5); then_show(6); -        } -        break; -   } -   break; - } - - then_flip(whither,ped); - start_to_open; +	switch (dna.room) { +	case r__outsideyours: +	case r__outsidenottspub: +	case r__outsideducks: { +		first_show(1); +		then_show(2); +		then_show(3); +	} +	break; +	case r__insidecardiffcastle: { +		first_show(1); +		then_show(5); +	} +	break; +	case r__avvysgarden: +	case r__entrancehall: +	case r__insideabbey: { +		first_show(1); +		then_show(2); +	} +	break; +	case r__musicroom: +	case r__outsideargentpub: { +		first_show(5); +		then_show(6); +	} +	break; +	case r__lusties: +		switch (magicnum) { +		case 14: +			if (dna.avvys_in_the_cupboard) { +				hide_in_the_cupboard(); +				first_show(8); +				then_show(7); +				start_to_close; +				return; +			} else { +				apped(1, 6); +				tr[1].face = right; /* added by TT 12/3/1995 */ +				first_show(8); +				then_show(9); +			} +			break; +		case 12: { +			first_show(4); +			then_show(5); +			then_show(6); +		} +		break; +		} +		break; +	} + +	then_flip(whither, ped); +	start_to_open;  }  void newspeed() - /* Given that you've just changed the speed in triptype.xs, this adjusts -   ix. */ +/* Given that you've just changed the speed in triptype.xs, this adjusts +  ix. */  { -       const bytefield lightspace = {40, 199, 47, 199}; -     byte page_; +	const bytefield lightspace = {40, 199, 47, 199}; +	byte page_; - { -   triptype& with = tr[1];  +	{ +		triptype &with = tr[1]; -   with.ix=(with.ix / 3)*with.xs; -   setactivepage(3); +		with.ix = (with.ix / 3) * with.xs; +		setactivepage(3); -   setfillstyle(1,14); -   if (with.xs==run)  bar(371,199,373,199); else bar(336,199,338,199); -   setfillstyle(1,9); -   if (with.xs==run)  bar(336,199,338,199); else bar(371,199,373,199); +		setfillstyle(1, 14); +		if (with.xs == run)  bar(371, 199, 373, 199); +		else bar(336, 199, 338, 199); +		setfillstyle(1, 9); +		if (with.xs == run)  bar(336, 199, 338, 199); +		else bar(371, 199, 373, 199); -   setactivepage(1-cp); -   for( page_=0; page_ <= 1; page_ ++) getset[page_].remember(lightspace); - } +		setactivepage(1 - cp); +		for (page_ = 0; page_ <= 1; page_ ++) getset[page_].remember(lightspace); +	}  } -triptype* triptype::init(byte spritenum, boolean do_check) -{ -      const integer idshould = -1317732048; - integer gd,gm; varying_string<2> xx; - byte fv/*,nds*/; - byte aa,bb; - longint id; word soa; - untyped_file inf; - - if (spritenum==177)  return; /* Already running! */ - str(spritenum,xx); assign(inf,string("sprite")+xx+".avd"); - reset(inf,1); - seek(inf,177); - blockread(inf,id,4); - if (id!=idshould)  - { -  output << '\7'; -  close(inf); -  exit(0); - } - - blockread(inf,soa,2); - blockread(inf,a,soa); - - { -                        adxtype& with = a;  - -  /*nds:=num div seq;*/ totalnum=1; -  xw=with.xl / 8; if ((with.xl % 8)>0)  xw += 1; -  for( aa=1; aa <= /*nds*seq*/with.num; aa ++) -  { -   getmem(sil[totalnum],11*(with.yl+1)); -   getmem(mani[totalnum],with.size-6); -   for( fv=0; fv <= with.yl; fv ++) -   { -    blockread(inf,(*sil[totalnum])[fv],xw); -   } -   blockread(inf,*mani[totalnum],with.size-6); -   totalnum += 1; -  } - } - - /* on; */ - x=0; y=0; quick=true; visible=false; xs=3; ys=1; -/* if spritenum=1 then newspeed; { Just for the lights. }*/ - - homing=false; ix=0; iy=0; step=0; check_me=do_check; - count=0; whichsprite=spritenum; vanishifstill=false; - call_eachstep=false; - close(inf); - return this; +triptype *triptype::init(byte spritenum, boolean do_check) { +	const integer idshould = -1317732048; +	integer gd, gm; +	varying_string<2> xx; +	byte fv/*,nds*/; +	byte aa, bb; +	longint id; +	word soa; +	untyped_file inf; + +	if (spritenum == 177)  return; /* Already running! */ +	str(spritenum, xx); +	assign(inf, string("sprite") + xx + ".avd"); +	reset(inf, 1); +	seek(inf, 177); +	blockread(inf, id, 4); +	if (id != idshould) { +		output << '\7'; +		close(inf); +		exit(0); +	} + +	blockread(inf, soa, 2); +	blockread(inf, a, soa); + +	{ +		adxtype &with = a; + +		/*nds:=num div seq;*/ totalnum = 1; +		xw = with.xl / 8; +		if ((with.xl % 8) > 0)  xw += 1; +		for (aa = 1; aa <= /*nds*seq*/with.num; aa ++) { +			getmem(sil[totalnum], 11 * (with.yl + 1)); +			getmem(mani[totalnum], with.size - 6); +			for (fv = 0; fv <= with.yl; fv ++) { +				blockread(inf, (*sil[totalnum])[fv], xw); +			} +			blockread(inf, *mani[totalnum], with.size - 6); +			totalnum += 1; +		} +	} + +	/* on; */ +	x = 0; +	y = 0; +	quick = true; +	visible = false; +	xs = 3; +	ys = 1; +	/* if spritenum=1 then newspeed; { Just for the lights. }*/ + +	homing = false; +	ix = 0; +	iy = 0; +	step = 0; +	check_me = do_check; +	count = 0; +	whichsprite = spritenum; +	vanishifstill = false; +	call_eachstep = false; +	close(inf); +	return this;  } -void triptype::original() -{ - quick=false; whichsprite=177; +void triptype::original() { +	quick = false; +	whichsprite = 177;  } -void triptype::andexor() -{ - byte picnum; /* Picnum, Picnic, what ye heck */ - byte lay,laz; /* Limits for Qaz and Qay or equivs. (Laz always = 3). */ +void triptype::andexor() { +	byte picnum; /* Picnum, Picnic, what ye heck */ +	byte lay, laz; /* Limits for Qaz and Qay or equivs. (Laz always = 3). */  #ifdef NOASM - word offs,fv; - byte qax,qay,qaz; +	word offs, fv; +	byte qax, qay, qaz;  #else - word segmani,ofsmani; - word ofsaa,realofsaa; - word segsil,ofssil; - word z; byte xwidth; +	word segmani, ofsmani; +	word ofsaa, realofsaa; +	word segsil, ofssil; +	word z; +	byte xwidth;  #endif - if ((vanishifstill) && (ix==0) && (iy==0))  return; - picnum=face*a.seq+step+1; +	if ((vanishifstill) && (ix == 0) && (iy == 0))  return; +	picnum = face * a.seq + step + 1; - { -  adxtype& with = a;  +	{ +		adxtype &with = a; -  getimage(x,y,x+with.xl,y+with.yl,aa); /* Now loaded into our local buffer. */ +		getimage(x, y, x + with.xl, y + with.yl, aa); /* Now loaded into our local buffer. */ -  /* Now we've got to modify it! */ +		/* Now we've got to modify it! */ -   /* Qaz ranges over the width of the sprite/8. -     Qay    "    "   the height. -     Qax    "    "   1 to 4 (the planes). */ +		/* Qaz ranges over the width of the sprite/8. +		  Qay    "    "   the height. +		  Qax    "    "   1 to 4 (the planes). */ -  { -    adxtype& with1 = a;  +		{ +			adxtype &with1 = a; -    #ifdef NOASM -    laz=xw-1; lay=with1.yl;  /* -1's only for Pascal. */ -    #else -    laz=xw; lay=with1.yl+1;  /* +1's only for ASM! */ -    #endif -  } - -  /* ASSEMBLERISED: */  #ifdef NOASM -  for( qax=0; qax <= 3; qax ++) /* 3 */ -   for( qay=0; qay <= lay; qay ++) /* 35 */ -    for( qaz=0; qaz <= laz; qaz ++) /* 4 */ -    { -     offs=5+qay*xw*4+xw*qax+qaz; -     aa[offs]=aa[offs] & (*sil[picnum])[qay][qaz]; -    } - -  for( fv=5; fv <= with.size-2; fv ++) -   aa[fv]=aa[fv] ^ (*mani[picnum])[fv]; - +			laz = xw - 1; +			lay = with1.yl; /* -1's only for Pascal. */  #else -  /* OK, here's the same thing in assembler... - -         AL is Qax, -         BL is Qay, -         CL is Qaz, -         DX is Offs */ - - /* For the first part: */ - xwidth=xw; - segsil=seg(*sil[picnum]); - ofssil=ofs(*sil[picnum]); - - /* For the first and second parts: */ - segmani=seg(*mani[picnum]);  /* It's easier to do this in Pascal, and */ - ofsmani=ofs(*mani[picnum])+1;  /* besides it only goes round once here. */ - /* Segment of AA is always the current data segment. */ - ofsaa=ofs(aa)+5; - realofsaa=ofs(aa)-1;  /* We may not need this. */ - z=with.size-7; -/* - asm - -  xor ax,ax;             { Initialise ax, bx, and cx, using a rather } -  @QAXloop: { AL } - -   xor bx,bx;            { nifty speed trick. } -   @QAYloop: { BL } - -    xor cx,cx; -    @QAZloop: { CL } - -     { Right, well, here we are. We have to do some rather nifty array -       manipulation, stuff like that. We're trying to assemblerise: -         DX:= 5 + BX * xw * 4 + xw * AX + CX; -         aa[DX]:=aa[DX] and sil[picnum]^[BL,CL]; } - -     push ax;  {AXcdx}   { OK, we're going to do some strange things } -                         { with ax, so we'd better save it. } -     mov dx,5;           { First of all... set dx to 5. } -     add dx,cx;          { DX now = 5+CX } -     mul xwidth;         { Multiply ax by xw (the Pascal variable.) } -     add dx,ax;          { DX now = 5+CX+xw*AX } - -     { Right. Mul only works on ax. Don't ask me why. Ask Intel. Anyway, -     since ax is saved on the stack, we can move bx over it. Note that -     if xw was a word, using mul would have destroyed the contents of -     dx. NOT a good idea! } - -     push cx;  {CXmul}   { We must just borrow cx for a second. } -     mov ax,bx;          { Make ax = bx. } -     mul xwidth;         { Do the same to it as we did to ax before. } -     mov cl,2; -     shl ax,cl;          { And multiply it by 4 (i.e., shl it by 2.) } -     add dx,ax;          { DX now = 5+CX+xw*AX+xw*BX*4. That's OK. } +			laz = xw; +			lay = with1.yl + 1; /* +1's only for ASM! */ +#endif +		} -     pop cx;   {CXmul} -     pop ax;   {AXcdx}   { Now we have to get ax and cx back again. } +		/* ASSEMBLERISED: */ +#ifdef NOASM +		for (qax = 0; qax <= 3; qax ++) /* 3 */ +			for (qay = 0; qay <= lay; qay ++) /* 35 */ +				for (qaz = 0; qaz <= laz; qaz ++) { /* 4 */ +					offs = 5 + qay * xw * 4 + xw * qax + qaz; +					aa[offs] = aa[offs] & (*sil[picnum])[qay][qaz]; +				} -   { Registers are now returned to original status. } +		for (fv = 5; fv <= with.size - 2; fv ++) +			aa[fv] = aa[fv] ^ (*mani[picnum])[fv]; -     { Righto. DX is now all worked out OK. We must now find out the -     contents of: 1) aa[dx], and 2) (harder) sil[picnum]^[BL,CL]. Gulp. } +#else +		/* OK, here's the same thing in assembler... + +		       AL is Qax, +		       BL is Qay, +		       CL is Qaz, +		       DX is Offs */ + +		/* For the first part: */ +		xwidth = xw; +		segsil = seg(*sil[picnum]); +		ofssil = ofs(*sil[picnum]); + +		/* For the first and second parts: */ +		segmani = seg(*mani[picnum]); /* It's easier to do this in Pascal, and */ +		ofsmani = ofs(*mani[picnum]) + 1; /* besides it only goes round once here. */ +		/* Segment of AA is always the current data segment. */ +		ofsaa = ofs(aa) + 5; +		realofsaa = ofs(aa) - 1; /* We may not need this. */ +		z = with.size - 7; +		/* +		 asm + +		  xor ax,ax;             { Initialise ax, bx, and cx, using a rather } +		  @QAXloop: { AL } + +		   xor bx,bx;            { nifty speed trick. } +		   @QAYloop: { BL } + +		    xor cx,cx; +		    @QAZloop: { CL } + +		     { Right, well, here we are. We have to do some rather nifty array +		       manipulation, stuff like that. We're trying to assemblerise: +		         DX:= 5 + BX * xw * 4 + xw * AX + CX; +		         aa[DX]:=aa[DX] and sil[picnum]^[BL,CL]; } + +		     push ax;  {AXcdx}   { OK, we're going to do some strange things } +		                         { with ax, so we'd better save it. } +		     mov dx,5;           { First of all... set dx to 5. } +		     add dx,cx;          { DX now = 5+CX } +		     mul xwidth;         { Multiply ax by xw (the Pascal variable.) } +		     add dx,ax;          { DX now = 5+CX+xw*AX } + +		     { Right. Mul only works on ax. Don't ask me why. Ask Intel. Anyway, +		     since ax is saved on the stack, we can move bx over it. Note that +		     if xw was a word, using mul would have destroyed the contents of +		     dx. NOT a good idea! } + +		     push cx;  {CXmul}   { We must just borrow cx for a second. } +		     mov ax,bx;          { Make ax = bx. } +		     mul xwidth;         { Do the same to it as we did to ax before. } +		     mov cl,2; +		     shl ax,cl;          { And multiply it by 4 (i.e., shl it by 2.) } +		     add dx,ax;          { DX now = 5+CX+xw*AX+xw*BX*4. That's OK. } + +		     pop cx;   {CXmul} +		     pop ax;   {AXcdx}   { Now we have to get ax and cx back again. } + +		   { Registers are now returned to original status. } + +		     { Righto. DX is now all worked out OK. We must now find out the +		     contents of: 1) aa[dx], and 2) (harder) sil[picnum]^[BL,CL]. Gulp. } -     { DS already points to the segment of AA. So... let's use CL to -     put aa[dx] in, and use BX for the offset. Looks like we're going -     to have to push a few registers! } +		     { DS already points to the segment of AA. So... let's use CL to +		     put aa[dx] in, and use BX for the offset. Looks like we're going +		     to have to push a few registers! } -     push ax; { AXaa. Saving loop value of AX. } -      { Let's use ax to do our dirty work with. } -     push dx; { Saving Offs(DX.) } +		     push ax; { AXaa. Saving loop value of AX. } +		      { Let's use ax to do our dirty work with. } +		     push dx; { Saving Offs(DX.) } -     push bx; { BXaa. Saving loop value of BX. } +		     push bx; { BXaa. Saving loop value of BX. } -     mov bx,realofsaa; { aa is now pointed to by [ds:bx]. } -     add bx,dx;        { Offset is dx bytes. } -     mov dl,[bx];      { cl now holds the contents of aa[dx]. } +		     mov bx,realofsaa; { aa is now pointed to by [ds:bx]. } +		     add bx,dx;        { Offset is dx bytes. } +		     mov dl,[bx];      { cl now holds the contents of aa[dx]. } -     pop bx; { BXaa. Restoring loop value of BX. } +		     pop bx; { BXaa. Restoring loop value of BX. } -   { Stack now holds: Offs(DX). } +		   { Stack now holds: Offs(DX). } -     { ^^^ That works. Now to find sil[picnum]^[BL,CL]. Our first task is -     to find the address of sil[picnum]^. Since it's dynamic, we must -     push and pop ds. } +		     { ^^^ That works. Now to find sil[picnum]^[BL,CL]. Our first task is +		     to find the address of sil[picnum]^. Since it's dynamic, we must +		     push and pop ds. } -     push ds; { DXaa. Saving value of Trip5's data segment. } -      { Push ds. Now we can put the segment of sil[picnum]^... } -     mov ds,segsil; { ...into ds, and... } -     mov ax,ofssil; { ...its offset into ax. } -      { Addr of sil[picnum]^ is now in [ds:ax]. BUT we want a particular -      offset: to wit, [BL,CL]. Now, siltype is defined so that this offset -      will be at an offset of (BL*11)+CL. } +		     push ds; { DXaa. Saving value of Trip5's data segment. } +		      { Push ds. Now we can put the segment of sil[picnum]^... } +		     mov ds,segsil; { ...into ds, and... } +		     mov ax,ofssil; { ...its offset into ax. } +		      { Addr of sil[picnum]^ is now in [ds:ax]. BUT we want a particular +		      offset: to wit, [BL,CL]. Now, siltype is defined so that this offset +		      will be at an offset of (BL*11)+CL. } -     push bx; { Saving loop value of BX. } -     push cx; { Saving loop value of CX. } -     push ax; { Saving offset of sil[picnum]^. } -       { Save them for a bit (!) } -     mov al,bl;          { Put bl into al. } -     mov bl,11;          { ... } -     mul bl;             { ...times it by 11. } -     mov bx,ax;          { Put it back into bx (now = bx*11) } -     pop ax; { Restoring offset of sil[picnum]^. } -                         { Get ax back again. } -     add ax,bx;          { Add (original bl)*11 to al. } -     add ax,cx;          { Add cl to al. } -      { AX now holds the offset of sil[picnum]^[bx,cl]. } +		     push bx; { Saving loop value of BX. } +		     push cx; { Saving loop value of CX. } +		     push ax; { Saving offset of sil[picnum]^. } +		       { Save them for a bit (!) } +		     mov al,bl;          { Put bl into al. } +		     mov bl,11;          { ... } +		     mul bl;             { ...times it by 11. } +		     mov bx,ax;          { Put it back into bx (now = bx*11) } +		     pop ax; { Restoring offset of sil[picnum]^. } +		                         { Get ax back again. } +		     add ax,bx;          { Add (original bl)*11 to al. } +		     add ax,cx;          { Add cl to al. } +		      { AX now holds the offset of sil[picnum]^[bx,cl]. } -   { Stack now holds: loop value of AX, Trip5's DS, lv of BX, lv of CX. } +		   { Stack now holds: loop value of AX, Trip5's DS, lv of BX, lv of CX. } -     { Right. Now the address of sil[picnum]^[bl,cl] is in [ds:ax]. Let's -       get the elusive byte itself, and put it into ax. Firstly, we must -       swap ax and bx. } +		     { Right. Now the address of sil[picnum]^[bl,cl] is in [ds:ax]. Let's +		       get the elusive byte itself, and put it into ax. Firstly, we must +		       swap ax and bx. } -     xchg ax,bx; -     mov al,[bx]; { AX now contains sil[picnum]^[bl,cl], AT LAST!! } +		     xchg ax,bx; +		     mov al,[bx]; { AX now contains sil[picnum]^[bl,cl], AT LAST!! } -      { So now AL contains the sil stuff, and DL holds aa[offs]. } +		      { So now AL contains the sil stuff, and DL holds aa[offs]. } -     and al,dl; { aa[offs]:=aa[offs] and sil[picnum]^[Qay,Qaz]. } +		     and al,dl; { aa[offs]:=aa[offs] and sil[picnum]^[Qay,Qaz]. } -     pop cx; { Restoring loop value of CX. } -     pop bx; { Restoring loop value of BX. } -     pop ds; { Restore value of Trip5's data segment. } +		     pop cx; { Restoring loop value of CX. } +		     pop bx; { Restoring loop value of BX. } +		     pop ds; { Restore value of Trip5's data segment. } -     { Right. AL contains the byte we need to replace aa[offs] with. -       All that's left to do is to put it back. Remember that we already -       have the segment of aa in the current DS, so... } +		     { Right. AL contains the byte we need to replace aa[offs] with. +		       All that's left to do is to put it back. Remember that we already +		       have the segment of aa in the current DS, so... } -     pop dx; { Restore Offs(DX). } +		     pop dx; { Restore Offs(DX). } -     { Stack is now as when we entered the loop. Since this copy of DX -       is now being used for the last time, we can muck around with it. } +		     { Stack is now as when we entered the loop. Since this copy of DX +		       is now being used for the last time, we can muck around with it. } -     { Recap: DX now holds the offset from the start of AA. If we add -       the offset of aa to it, we'll get the offset of the byte we want. -       DS is already set up. } +		     { Recap: DX now holds the offset from the start of AA. If we add +		       the offset of aa to it, we'll get the offset of the byte we want. +		       DS is already set up. } -     push bx; { I'm just borrowing bx for a sec. I'll put it back in 5 lines.} -     mov bx,realofsaa; -     add dx,bx; { Now aa[offs] is at aa[ds:dx]. } -     mov bx,dx; { But we can't address memory with dx, so use bx. } -     mov [bx],al;   { Shove it into the memory! } -     pop bx; { See! I said I would. } +		     push bx; { I'm just borrowing bx for a sec. I'll put it back in 5 lines.} +		     mov bx,realofsaa; +		     add dx,bx; { Now aa[offs] is at aa[ds:dx]. } +		     mov bx,dx; { But we can't address memory with dx, so use bx. } +		     mov [bx],al;   { Shove it into the memory! } +		     pop bx; { See! I said I would. } -     pop ax; { Restore loop value of AX. } +		     pop ax; { Restore loop value of AX. } -     { Right, the fancy stuff's all done now. Finish off the loop code. } +		     { Right, the fancy stuff's all done now. Finish off the loop code. } -     inc cl; -     cmp cl,laz;           { CL must not reach 5. Does it?  } -     jnz @QAZloop;       { no, keep going around the QAZloop. } +		     inc cl; +		     cmp cl,laz;           { CL must not reach 5. Does it?  } +		     jnz @QAZloop;       { no, keep going around the QAZloop. } -    inc bl; -    cmp bl,lay;           { BL must not reach 36. Does it? } -    jnz @QAYloop;        { no, keep going around the QAYloop. } +		    inc bl; +		    cmp bl,lay;           { BL must not reach 36. Does it? } +		    jnz @QAYloop;        { no, keep going around the QAYloop. } -   inc al; -   cmp al,4;             { AL must not reach 4. Does it? } -   jnz @QAXloop;         { no, keep going around the QAXloop. } +		   inc al; +		   cmp al,4;             { AL must not reach 4. Does it? } +		   jnz @QAXloop;         { no, keep going around the QAXloop. } -  { al, bl and cl are now at their maxima, so we can stop the loops. } +		  { al, bl and cl are now at their maxima, so we can stop the loops. } -  { *** SECOND ASSEMBLER BIT. *** } +		  { *** SECOND ASSEMBLER BIT. *** } -  mov cx,z;             { Find the size of the array, -7. } -  mov bx,ofsmani;       { Now find the offset and put that into bx. } -  mov dx,ofsaa;         { We'll use dx to be the same as fv, +5. } +		  mov cx,z;             { Find the size of the array, -7. } +		  mov bx,ofsmani;       { Now find the offset and put that into bx. } +		  mov dx,ofsaa;         { We'll use dx to be the same as fv, +5. } -  { DS should already hold the segment of aa. } +		  { DS should already hold the segment of aa. } -  @nextbyte:            { Main loop... } +		  @nextbyte:            { Main loop... } -   { Firstly, we must get hold of aa[fv] (here called aa[dx].)} -   push bx;             { We need to "borrow" bx for a second... } -   mov bx,dx;           { Wrong register- shove it into bx. } -   mov al,[bx];         { Get aa[fv] and put it into al. } -   pop bx;              { Right, you can have bx back again. } +		   { Firstly, we must get hold of aa[fv] (here called aa[dx].)} +		   push bx;             { We need to "borrow" bx for a second... } +		   mov bx,dx;           { Wrong register- shove it into bx. } +		   mov al,[bx];         { Get aa[fv] and put it into al. } +		   pop bx;              { Right, you can have bx back again. } -   { Secondly, we must get hold of mani[picnum]^[fv]. } -   push cx;             { Let's borrow cx for this one. } -   push ds;             { we must use ds to point to segmani. } -   mov ds,segmani;      { Find the segment of mani[picnum]^, } -   mov cl,[bx];         { now get the byte at [ds:bx] and put it into cl. } -   pop ds;              { Put ds back to being the current data segment. } +		   { Secondly, we must get hold of mani[picnum]^[fv]. } +		   push cx;             { Let's borrow cx for this one. } +		   push ds;             { we must use ds to point to segmani. } +		   mov ds,segmani;      { Find the segment of mani[picnum]^, } +		   mov cl,[bx];         { now get the byte at [ds:bx] and put it into cl. } +		   pop ds;              { Put ds back to being the current data segment. } -   { Right: now we can do what we came here for in the first place. -     AL contains aa[fv], CL contains mani[picnum]^[fv]. } +		   { Right: now we can do what we came here for in the first place. +		     AL contains aa[fv], CL contains mani[picnum]^[fv]. } -   xor al,cl;           { Xor al with bl. That's it! } +		   xor al,cl;           { Xor al with bl. That's it! } -   pop cx;              { We don't need cx any more for this now. } +		   pop cx;              { We don't need cx any more for this now. } -   push bx;             { Borrow bx... } -   mov bx,dx;           { Put dx into bx. } -   mov [bx],al;         { Put the changed al back into [ds:bx] (ie, [ds:dx].} -   pop bx;              { Get it back. } +		   push bx;             { Borrow bx... } +		   mov bx,dx;           { Put dx into bx. } +		   mov [bx],al;         { Put the changed al back into [ds:bx] (ie, [ds:dx].} +		   pop bx;              { Get it back. } -   inc bx;              { Add one to bx, for the next char. } -   inc dx;              { And dx, for the same reason. } +		   inc bx;              { Add one to bx, for the next char. } +		   inc dx;              { And dx, for the same reason. } -  loop @nextbyte;       { Keep going round until cx=0. } -*/ -{; -} +		  loop @nextbyte;       { Keep going round until cx=0. } +		*/ +		{ +			; +		}  #endif -  /* Now.. let's try pasting it back again! */ +		/* Now.. let's try pasting it back again! */ -  putimage(x,y,aa,0); - } +		putimage(x, y, aa, 0); +	}  } -void triptype::turn(byte whichway) -{ - if (whichway==8)  face=0; else face=whichway; +void triptype::turn(byte whichway) { +	if (whichway == 8)  face = 0; +	else face = whichway;  } -void triptype::appear(integer wx,integer wy, byte wf) -{ - x=(wx / 8)*8; y=wy; ox[cp]=wx; oy[cp]=wy; turn(wf); - visible=true; ix=0; iy=0; +void triptype::appear(integer wx, integer wy, byte wf) { +	x = (wx / 8) * 8; +	y = wy; +	ox[cp] = wx; +	oy[cp] = wy; +	turn(wf); +	visible = true; +	ix = 0; +	iy = 0;  } -static boolean collision_check() -{ -    byte fv; - - boolean collision_check_result; - for( fv=1; fv <= numtr; fv ++) -  if (tr[fv].quick && (tr[fv].whichsprite!=whichsprite) && -     ((x+a.xl)>tr[fv].x) && -      (x<(tr[fv].x+tr[fv].a.xl)) && -       (tr[fv].y==y))  -       { -        collision_check_result=true; -        return collision_check_result; -       } - collision_check_result=false; - return collision_check_result; +static boolean collision_check() { +	byte fv; + +	boolean collision_check_result; +	for (fv = 1; fv <= numtr; fv ++) +		if (tr[fv].quick && (tr[fv].whichsprite != whichsprite) && +		        ((x + a.xl) > tr[fv].x) && +		        (x < (tr[fv].x + tr[fv].a.xl)) && +		        (tr[fv].y == y)) { +			collision_check_result = true; +			return collision_check_result; +		} +	collision_check_result = false; +	return collision_check_result;  } -void triptype::walk() -{ -    byte tc; bytefield r; - - - if (visible)  - { -  { -   x1=(x / 8)-1; -   if (x1==255)  x1=0; -   y1=y-2; -   x2=((x+a.xl) / 8)+1; -   y2=y+a.yl+2; -  } -  getset[1-cp].remember(r); - } - - if (~ doing_sprite_run)  - { -  ox[cp]=x; oy[cp]=y; -  if (homing)  homestep(); -  x=x+ix; y=y+iy; - } - -  if (check_me)  -  { -   if (collision_check())  -   { -    bounce(); -    return; -   } - -   tc=checkfeet(x,x+a.xl,oy[cp],y,a.yl); - -   if ((tc!=0) & (~ doing_sprite_run))  -    { void& with = magics[tc];  -     switch (op) { -      case exclaim: { -                bounce(); mustexclaim=true; saywhat=data; -               } -               break; -      case bounces: bounce(); break; -      case transport: fliproom(hi(data),lo(data)); break; -      case unfinished: { -                   bounce(); -                   display("\7Sorry.\3\rThis place is not available yet!"); -                  } -                  break; -      case special: call_special(data); break; -      case mopendoor: open_the_door(hi(data),lo(data),tc); break; -     }} -  } - - if (~ doing_sprite_run)  - { -  count += 1; -  if (((ix!=0) || (iy!=0)) && (count>1))  -  { -   step += 1; if (step==a.seq)  step=0; count=0; -  } - } +void triptype::walk() { +	byte tc; +	bytefield r; + + +	if (visible) { +		{ +			x1 = (x / 8) - 1; +			if (x1 == 255)  x1 = 0; +			y1 = y - 2; +			x2 = ((x + a.xl) / 8) + 1; +			y2 = y + a.yl + 2; +		} +		getset[1 - cp].remember(r); +	} + +	if (~ doing_sprite_run) { +		ox[cp] = x; +		oy[cp] = y; +		if (homing)  homestep(); +		x = x + ix; +		y = y + iy; +	} + +	if (check_me) { +		if (collision_check()) { +			bounce(); +			return; +		} + +		tc = checkfeet(x, x + a.xl, oy[cp], y, a.yl); + +		if ((tc != 0) & (~ doing_sprite_run)) { +			void &with = magics[tc]; +			switch (op) { +			case exclaim: { +				bounce(); +				mustexclaim = true; +				saywhat = data; +			} +			break; +			case bounces: +				bounce(); +				break; +			case transport: +				fliproom(hi(data), lo(data)); +				break; +			case unfinished: { +				bounce(); +				display("\7Sorry.\3\rThis place is not available yet!"); +			} +			break; +			case special: +				call_special(data); +				break; +			case mopendoor: +				open_the_door(hi(data), lo(data), tc); +				break; +			} +		} +	} + +	if (~ doing_sprite_run) { +		count += 1; +		if (((ix != 0) || (iy != 0)) && (count > 1)) { +			step += 1; +			if (step == a.seq)  step = 0; +			count = 0; +		} +	}  } -void triptype::bounce() -{ - x=ox[cp]; y=oy[cp]; - if (check_me)  stopwalking(); else stopwalk(); - oncandopageswap=false; - showrw; - oncandopageswap=true; +void triptype::bounce() { +	x = ox[cp]; +	y = oy[cp]; +	if (check_me)  stopwalking(); +	else stopwalk(); +	oncandopageswap = false; +	showrw; +	oncandopageswap = true;  } -shortint sgn(integer x) -{ - shortint sgn_result; - if (x>0)  sgn_result=1; else -  if (x<0)  sgn_result=-1; else -   sgn_result=0; /* x=0 */ - return sgn_result; +shortint sgn(integer x) { +	shortint sgn_result; +	if (x > 0)  sgn_result = 1; +	else if (x < 0)  sgn_result = -1; +	else +		sgn_result = 0; /* x=0 */ +	return sgn_result;  } -void triptype::walkto(byte pednum) -{ - speed(sgn(peds[pednum].x-x)*4,sgn(peds[pednum].y-y)); - hx=peds[pednum].x-a.xl / 2; - hy=peds[pednum].y-a.yl; homing=true; +void triptype::walkto(byte pednum) { +	speed(sgn(peds[pednum].x - x) * 4, sgn(peds[pednum].y - y)); +	hx = peds[pednum].x - a.xl / 2; +	hy = peds[pednum].y - a.yl; +	homing = true;  } -void triptype::stophoming() -{ - homing=false; +void triptype::stophoming() { +	homing = false;  } -void triptype::homestep() -{ -    integer temp; - - if ((hx==x) && (hy==y))  - {     /* touching the target */ -  stopwalk(); -  return; - } - ix=0; iy=0; - if (hy!=y)  - { -  temp=hy-y; if (temp>4)  iy=4; else if (temp<-4)  iy=-4; else iy=temp; - } - if (hx!=x)  - { -  temp=hx-x; if (temp>4)  ix=4; else if (temp<-4)  ix=-4; else ix=temp; - } +void triptype::homestep() { +	integer temp; + +	if ((hx == x) && (hy == y)) { +		/* touching the target */ +		stopwalk(); +		return; +	} +	ix = 0; +	iy = 0; +	if (hy != y) { +		temp = hy - y; +		if (temp > 4)  iy = 4; +		else if (temp < -4)  iy = -4; +		else iy = temp; +	} +	if (hx != x) { +		temp = hx - x; +		if (temp > 4)  ix = 4; +		else if (temp < -4)  ix = -4; +		else ix = temp; +	}  } -void triptype::speed(shortint xx,shortint yy) -{ - ix=xx; iy=yy; - if ((ix==0) && (iy==0))  return; /* no movement */ - if (ix==0)  - {     /* No horz movement */ -  if (iy<0)  turn(up); else turn(down); - } else - { -  if (ix<0)  turn(left); else turn(right); - } +void triptype::speed(shortint xx, shortint yy) { +	ix = xx; +	iy = yy; +	if ((ix == 0) && (iy == 0))  return; /* no movement */ +	if (ix == 0) { +		/* No horz movement */ +		if (iy < 0)  turn(up); +		else turn(down); +	} else { +		if (ix < 0)  turn(left); +		else turn(right); +	}  } -void triptype::stopwalk() -{ - ix=0; iy=0; homing=false; +void triptype::stopwalk() { +	ix = 0; +	iy = 0; +	homing = false;  } -void triptype::chatter() -{ - talkx=x+a.xl / 2; talky=y; talkf=a.fgc; talkb=a.bgc; +void triptype::chatter() { +	talkx = x + a.xl / 2; +	talky = y; +	talkf = a.fgc; +	talkb = a.bgc;  } -void triptype::set_up_saver(trip_saver_type& v) -{ - v.whichsprite=whichsprite; - v.face=face; - v.step=step; - v.x=x; - v.y=y; - v.ix=ix; - v.iy=iy; - v.visible=visible; - v.homing=homing; - v.check_me=check_me; - v.count=count; - v.xw=xw; - v.xs=xs; - v.ys=ys; - v.totalnum=totalnum; - v.hx=hx; - v.hy=hy; - v.call_eachstep=call_eachstep; - v.eachstep=eachstep; - v.vanishifstill=vanishifstill; +void triptype::set_up_saver(trip_saver_type &v) { +	v.whichsprite = whichsprite; +	v.face = face; +	v.step = step; +	v.x = x; +	v.y = y; +	v.ix = ix; +	v.iy = iy; +	v.visible = visible; +	v.homing = homing; +	v.check_me = check_me; +	v.count = count; +	v.xw = xw; +	v.xs = xs; +	v.ys = ys; +	v.totalnum = totalnum; +	v.hx = hx; +	v.hy = hy; +	v.call_eachstep = call_eachstep; +	v.eachstep = eachstep; +	v.vanishifstill = vanishifstill;  } -void triptype::unload_saver(trip_saver_type v) -{ - whichsprite=v.whichsprite; - face=v.face; - step=v.step; - x=v.x; - y=v.y; - ix=v.ix; - iy=v.iy; - visible=v.visible; - homing=v.homing; - check_me=v.check_me; - count=v.count; - xw=v.xw; - xs=v.xs; - ys=v.ys; - totalnum=v.totalnum; - hx=v.hx; - hy=v.hy; - call_eachstep=v.call_eachstep; - eachstep=v.eachstep; - vanishifstill=v.vanishifstill; +void triptype::unload_saver(trip_saver_type v) { +	whichsprite = v.whichsprite; +	face = v.face; +	step = v.step; +	x = v.x; +	y = v.y; +	ix = v.ix; +	iy = v.iy; +	visible = v.visible; +	homing = v.homing; +	check_me = v.check_me; +	count = v.count; +	xw = v.xw; +	xs = v.xs; +	ys = v.ys; +	totalnum = v.totalnum; +	hx = v.hx; +	hy = v.hy; +	call_eachstep = v.call_eachstep; +	eachstep = v.eachstep; +	vanishifstill = v.vanishifstill;  } -void triptype::savedata(untyped_file& f) -{ - trip_saver_type tripsaver; - - set_up_saver(tripsaver); - - { -  blockwrite(f,tripsaver.whichsprite,1); -  blockwrite(f,tripsaver.face,1); blockwrite(f,tripsaver.step,1); -  blockwrite(f,tripsaver.x,2);    blockwrite(f,tripsaver.y,2); -  blockwrite(f,tripsaver.ix,1);   blockwrite(f,tripsaver.iy,1); -  blockwrite(f,tripsaver.visible,1); -  blockwrite(f,tripsaver.homing,1); -  blockwrite(f,tripsaver.check_me,1); -  blockwrite(f,tripsaver.count,1); -  blockwrite(f,tripsaver.xw,1); -  blockwrite(f,tripsaver.xs,1); blockwrite(f,tripsaver.ys,1); -  blockwrite(f,tripsaver.totalnum,1); -  blockwrite(f,tripsaver.hx,2); blockwrite(f,tripsaver.hy,2); -  blockwrite(f,tripsaver.call_eachstep,1); -  blockwrite(f,tripsaver.eachstep,1); -  blockwrite(f,tripsaver.vanishifstill,1); - } +void triptype::savedata(untyped_file &f) { +	trip_saver_type tripsaver; + +	set_up_saver(tripsaver); + +	{ +		blockwrite(f, tripsaver.whichsprite, 1); +		blockwrite(f, tripsaver.face, 1); +		blockwrite(f, tripsaver.step, 1); +		blockwrite(f, tripsaver.x, 2); +		blockwrite(f, tripsaver.y, 2); +		blockwrite(f, tripsaver.ix, 1); +		blockwrite(f, tripsaver.iy, 1); +		blockwrite(f, tripsaver.visible, 1); +		blockwrite(f, tripsaver.homing, 1); +		blockwrite(f, tripsaver.check_me, 1); +		blockwrite(f, tripsaver.count, 1); +		blockwrite(f, tripsaver.xw, 1); +		blockwrite(f, tripsaver.xs, 1); +		blockwrite(f, tripsaver.ys, 1); +		blockwrite(f, tripsaver.totalnum, 1); +		blockwrite(f, tripsaver.hx, 2); +		blockwrite(f, tripsaver.hy, 2); +		blockwrite(f, tripsaver.call_eachstep, 1); +		blockwrite(f, tripsaver.eachstep, 1); +		blockwrite(f, tripsaver.vanishifstill, 1); +	}  } -void triptype::loaddata(untyped_file& f) -{ - word spritewas,spriteis,saveface,savex,savey,savestep; - boolean wasquick; - trip_saver_type tripsaver; - - - wasquick=quick; - quick=true; spritewas=whichsprite; - - { -  blockread(f,tripsaver.whichsprite,1); -  blockread(f,tripsaver.face,1); blockread(f,tripsaver.step,1); -  blockread(f,tripsaver.x,2);    blockread(f,tripsaver.y,2); -  blockread(f,tripsaver.ix,1);   blockread(f,tripsaver.iy,1); - -  if ((! wasquick) || ((unsigned char)tripsaver.whichsprite!=spritewas))  -  { -   spriteis=tripsaver.whichsprite; -   savex=tripsaver.x; savey=tripsaver.y; saveface=tripsaver.face; savestep=tripsaver.step; - -   if (wasquick)  done(); - -   init(spriteis,tripsaver.check_me); - -   appear(savex,savey,saveface); tripsaver.step=savestep; -  } - -  blockread(f,tripsaver.visible,1); -  blockread(f,tripsaver.homing,1); -  blockread(f,tripsaver.check_me,1); -  blockread(f,tripsaver.count,1); -  blockread(f,tripsaver.xw,1); -  blockread(f,tripsaver.xs,1); blockread(f,tripsaver.ys,1); -  blockread(f,tripsaver.totalnum,1); -  blockread(f,tripsaver.hx,2); blockread(f,tripsaver.hy,2); -  blockread(f,tripsaver.call_eachstep,1); -  blockread(f,tripsaver.eachstep,1); -  blockread(f,tripsaver.vanishifstill,1); - } - - unload_saver(tripsaver); +void triptype::loaddata(untyped_file &f) { +	word spritewas, spriteis, saveface, savex, savey, savestep; +	boolean wasquick; +	trip_saver_type tripsaver; + + +	wasquick = quick; +	quick = true; +	spritewas = whichsprite; + +	{ +		blockread(f, tripsaver.whichsprite, 1); +		blockread(f, tripsaver.face, 1); +		blockread(f, tripsaver.step, 1); +		blockread(f, tripsaver.x, 2); +		blockread(f, tripsaver.y, 2); +		blockread(f, tripsaver.ix, 1); +		blockread(f, tripsaver.iy, 1); + +		if ((! wasquick) || ((unsigned char)tripsaver.whichsprite != spritewas)) { +			spriteis = tripsaver.whichsprite; +			savex = tripsaver.x; +			savey = tripsaver.y; +			saveface = tripsaver.face; +			savestep = tripsaver.step; + +			if (wasquick)  done(); + +			init(spriteis, tripsaver.check_me); + +			appear(savex, savey, saveface); +			tripsaver.step = savestep; +		} + +		blockread(f, tripsaver.visible, 1); +		blockread(f, tripsaver.homing, 1); +		blockread(f, tripsaver.check_me, 1); +		blockread(f, tripsaver.count, 1); +		blockread(f, tripsaver.xw, 1); +		blockread(f, tripsaver.xs, 1); +		blockread(f, tripsaver.ys, 1); +		blockread(f, tripsaver.totalnum, 1); +		blockread(f, tripsaver.hx, 2); +		blockread(f, tripsaver.hy, 2); +		blockread(f, tripsaver.call_eachstep, 1); +		blockread(f, tripsaver.eachstep, 1); +		blockread(f, tripsaver.vanishifstill, 1); +	} + +	unload_saver(tripsaver);  } -triptype* triptype::done() -{ - integer gd,gm; varying_string<2> xx; - byte fv/*,nds*/; - byte aa,bb; - longint id; word soa; - - { -  adxtype& with = a;  - -/*  nds:=num div seq;*/ -  xw=with.xl / 8; if ((with.xl % 8)>0)  xw += 1; -  for( aa=1; aa <= /*nds*seq*/ with.num; aa ++) -  { -   totalnum -= 1; -   freemem(mani[totalnum],with.size-6); -   freemem(sil[totalnum],11*(with.yl+1));  /* <<- Width of a siltype. */ -  } - } - - quick=false; whichsprite=177; - return this; +triptype *triptype::done() { +	integer gd, gm; +	varying_string<2> xx; +	byte fv/*,nds*/; +	byte aa, bb; +	longint id; +	word soa; + +	{ +		adxtype &with = a; + +		/*  nds:=num div seq;*/ +		xw = with.xl / 8; +		if ((with.xl % 8) > 0)  xw += 1; +		for (aa = 1; aa <= /*nds*seq*/ with.num; aa ++) { +			totalnum -= 1; +			freemem(mani[totalnum], with.size - 6); +			freemem(sil[totalnum], 11 * (with.yl + 1)); /* <<- Width of a siltype. */ +		} +	} + +	quick = false; +	whichsprite = 177; +	return this;  } -getsettype* getsettype::init() -{ - numleft=0;  /* initialise array pointer */ - return this; +getsettype *getsettype::init() { +	numleft = 0; /* initialise array pointer */ +	return this;  } -void getsettype::remember(bytefield r) -{ - numleft += 1; - if (numleft>maxgetset)  runerror(runerr_getset_overflow); - gs[numleft]=r; +void getsettype::remember(bytefield r) { +	numleft += 1; +	if (numleft > maxgetset)  runerror(runerr_getset_overflow); +	gs[numleft] = r;  } -void getsettype::recall(bytefield& r) -{ - r=gs[numleft]; - numleft -= 1; +void getsettype::recall(bytefield &r) { +	r = gs[numleft]; +	numleft -= 1;  } -void rwsp(byte t,byte r) -{ - { triptype& with = tr[t];  switch (r) { -      case up: speed(  0,-with.ys); break; case down: speed(  0, with.ys); break; case left: speed(-with.xs,  0); break; -   case right: speed( with.xs,  0); break;   case ul: speed(-with.xs,-with.ys); break;   case ur: speed( with.xs,-with.ys); break; -      case dl: speed(-with.xs, with.ys); break;   case dr: speed( with.xs, with.ys); break; -  }} +void rwsp(byte t, byte r) { +	{ +		triptype &with = tr[t]; +		switch (r) { +		case up: +			speed(0, -with.ys); +			break; +		case down: +			speed(0, with.ys); +			break; +		case left: +			speed(-with.xs,  0); +			break; +		case right: +			speed(with.xs,  0); +			break; +		case ul: +			speed(-with.xs, -with.ys); +			break; +		case ur: +			speed(with.xs, -with.ys); +			break; +		case dl: +			speed(-with.xs, with.ys); +			break; +		case dr: +			speed(with.xs, with.ys); +			break; +		} +	}  } -void apped(byte trn,byte np) -{ - { triptype& with = tr[trn];  -  { -   void& with1 = peds[np];  +void apped(byte trn, byte np) { +	{ +		triptype &with = tr[trn]; +		{ +			void &with1 = peds[np]; -   appear(with.x-with.a.xl / 2,with.y-with.a.yl,dir); -   rwsp(trn,dir); -  }} +			appear(with.x - with.a.xl / 2, with.y - with.a.yl, dir); +			rwsp(trn, dir); +		} +	}  }  void getback(); @@ -1344,122 +1457,126 @@ static bytefield r;     begin { By De Morgan's law: }      overlap:=(x2>=x3) and (x4>=x1) and (y2>=y3) and (y4>=y1);     end;*/ -   /* x1,x2 - as bytefield, but *8. y1,y2 - as bytefield. -     x3,y3 = mx,my. x4,y4 = mx+16,my+16. */ -static boolean overlaps_with_mouse() -{ -  boolean overlaps_with_mouse_result; -  overlaps_with_mouse_result= -   (x2*8>=mx) && (mx+16>=x1*8) && (y2>=my) && (my+16>=y1); -  return overlaps_with_mouse_result; +/* x1,x2 - as bytefield, but *8. y1,y2 - as bytefield. +  x3,y3 = mx,my. x4,y4 = mx+16,my+16. */ +static boolean overlaps_with_mouse() { +	boolean overlaps_with_mouse_result; +	overlaps_with_mouse_result = +	    (x2 * 8 >= mx) && (mx + 16 >= x1 * 8) && (y2 >= my) && (my + 16 >= y1); +	return overlaps_with_mouse_result;  } -void getback() -{ - byte fv; - boolean endangered; +void getback() { +	byte fv; +	boolean endangered; - endangered=false; -/* Super_Off;*/ +	endangered = false; +	/* Super_Off;*/ -  { getsettype& with = getset[1-cp];  -   while (with.numleft>0)  -   { -    recall(r); +	{ +		getsettype &with = getset[1 - cp]; +		while (with.numleft > 0) { +			recall(r); -/*    if overlaps_with_mouse and not endangered then -    begin -     endangered:=true; -     blitfix; -     Super_Off; -    end;*/ +			/*    if overlaps_with_mouse and not endangered then +			    begin +			     endangered:=true; +			     blitfix; +			     Super_Off; +			    end;*/ -    mblit(x1,y1,x2,y2,3,1-cp); -   }} +			mblit(x1, y1, x2, y2, 3, 1 - cp); +		} +	} - blitfix; - /*if endangered then*/ /*Super_On;*/ +	blitfix; +	/*if endangered then*/ /*Super_On;*/  }  /* Eachstep procedures: */ -void follow_avvy_y(byte tripnum) -{ - { -  triptype& with = tr[tripnum];  - -  if (tr[1].face==left)  return; -  if (with.homing)  with.hy=tr[1].y; else -  { -   if (with.y<tr[1].y)  -    with.y += 1; else -     if (with.y>tr[1].y)  -      with.y -= 1; else -       return; -   if (with.ix==0)  { with.step += 1; if (with.step==with.a.seq)  with.step=0; with.count=0; } -  } - } +void follow_avvy_y(byte tripnum) { +	{ +		triptype &with = tr[tripnum]; + +		if (tr[1].face == left)  return; +		if (with.homing)  with.hy = tr[1].y; +		else { +			if (with.y < tr[1].y) +				with.y += 1; +			else if (with.y > tr[1].y) +				with.y -= 1; +			else +				return; +			if (with.ix == 0)  { +				with.step += 1; +				if (with.step == with.a.seq)  with.step = 0; +				with.count = 0; +			} +		} +	}  } -void back_and_forth(byte tripnum) -{ - { triptype& with = tr[tripnum];  -  if (! with.homing)  -  { -   if (with.face==right)  walkto(4); else walkto(5); -  }} +void back_and_forth(byte tripnum) { +	{ +		triptype &with = tr[tripnum]; +		if (! with.homing) { +			if (with.face == right)  walkto(4); +			else walkto(5); +		} +	}  } -void face_avvy(byte tripnum) -{ - { triptype& with = tr[tripnum];  -  if (! with.homing)  -  { -   if (tr[1].x>=with.x)  with.face=right; -    else with.face=left; -  }} +void face_avvy(byte tripnum) { +	{ +		triptype &with = tr[tripnum]; +		if (! with.homing) { +			if (tr[1].x >= with.x)  with.face = right; +			else with.face = left; +		} +	}  } -void arrow_procs(byte tripnum) -{ -    byte fv; - - { triptype& with = tr[tripnum];  -  if (with.homing)  -  {     /* Arrow is still in flight. */ -   /* We must check whether or not the arrow has collided with Avvy's head. -     This is so if: a) the bottom of the arrow is below Avvy's head, -      b) the left of the arrow is left of the right of Avvy's head, and -      c) the right of the arrow is right of the left of Avvy's head. */ -   if (((with.y+with.a.yl)>=tr[1].y) /* A */ -    && (with.x<=(tr[1].x+tr[1].a.xl)) /* B */ -     && ((with.x+with.a.xl)>=tr[1].x)) /* C */ -         {     /* OK, it's hit him... what now? */ - -     tr[2].call_eachstep=false;  /* prevent recursion. */ -     dixi('Q',47); /* Complaint! */ -     done(); /* Deallocate the arrow. */ -/*     tr[1].done; { Deallocate normal pic of Avvy. } - -     off; -     for fv:=0 to 1 do -     begin -      cp:=1-cp; -      getback; -     end; -     on;*/ - -     gameover; - -     dna.user_moves_avvy=false;  /* Stop the user from moving him. */ -     set_up_timer(55,procnaughty_duke,reason_naughty_duke); -    } -  } else   /* Arrow has hit the wall! */ -  { -   done(); /* Deallocate the arrow. */ -   show_one(3); /* Show pic of arrow stuck into the door. */ -   dna.arrow_in_the_door=true;  /* So that we can pick it up. */ -  }} +void arrow_procs(byte tripnum) { +	byte fv; + +	{ +		triptype &with = tr[tripnum]; +		if (with.homing) { +			/* Arrow is still in flight. */ +			/* We must check whether or not the arrow has collided with Avvy's head. +			  This is so if: a) the bottom of the arrow is below Avvy's head, +			   b) the left of the arrow is left of the right of Avvy's head, and +			   c) the right of the arrow is right of the left of Avvy's head. */ +			if (((with.y + with.a.yl) >= tr[1].y) /* A */ +			        && (with.x <= (tr[1].x + tr[1].a.xl)) /* B */ +			        && ((with.x + with.a.xl) >= tr[1].x)) { /* C */ +				/* OK, it's hit him... what now? */ + +				tr[2].call_eachstep = false; /* prevent recursion. */ +				dixi('Q', 47); /* Complaint! */ +				done(); /* Deallocate the arrow. */ +				/*     tr[1].done; { Deallocate normal pic of Avvy. } + +				     off; +				     for fv:=0 to 1 do +				     begin +				      cp:=1-cp; +				      getback; +				     end; +				     on;*/ + +				gameover; + +				dna.user_moves_avvy = false; /* Stop the user from moving him. */ +				set_up_timer(55, procnaughty_duke, reason_naughty_duke); +			} +		} else { /* Arrow has hit the wall! */ +			done(); /* Deallocate the arrow. */ +			show_one(3); /* Show pic of arrow stuck into the door. */ +			dna.arrow_in_the_door = true; /* So that we can pick it up. */ +		} +	}  }  /*procedure Spludwick_procs(tripnum:byte); @@ -1476,441 +1593,490 @@ begin     end;  end;*/ -void grab_avvy(byte tripnum)       /* For Friar Tuck, in Nottingham. */ -{ -    byte fv; integer tox,toy; - - { triptype& with = tr[tripnum];  -   { -    tox=tr[1].x + 17; -    toy=tr[1].y - 1; -    if ((with.x==tox) && (with.y==toy))  -    { -     with.call_eachstep=false; -     with.face=left; -     stopwalk(); -     /* ... whatever ... */ -    } else -    {     /* Still some way to go. */ -     if (with.x<tox)  -     { -      with.x += 5; -      if (with.x>tox)  with.x=tox; -     } -     if (with.y<toy)  with.y += 1; -     with.step += 1; if (with.step==with.a.seq)  with.step=0; -    } -   }} +void grab_avvy(byte tripnum) {     /* For Friar Tuck, in Nottingham. */ +	byte fv; +	integer tox, toy; + +	{ +		triptype &with = tr[tripnum]; +		{ +			tox = tr[1].x + 17; +			toy = tr[1].y - 1; +			if ((with.x == tox) && (with.y == toy)) { +				with.call_eachstep = false; +				with.face = left; +				stopwalk(); +				/* ... whatever ... */ +			} else { +				/* Still some way to go. */ +				if (with.x < tox) { +					with.x += 5; +					if (with.x > tox)  with.x = tox; +				} +				if (with.y < toy)  with.y += 1; +				with.step += 1; +				if (with.step == with.a.seq)  with.step = 0; +			} +		} +	}  }  void geida_procs(byte tripnum); -static void take_a_step(byte& tripnum) -{ - { triptype& with = tr[tripnum];  - if (with.ix==0)  -  { with.step += 1; if (with.step==with.a.seq)  with.step=0; with.count=0; }} +static void take_a_step(byte &tripnum) { +	{ +		triptype &with = tr[tripnum]; +		if (with.ix == 0) { +			with.step += 1; +			if (with.step == with.a.seq)  with.step = 0; +			with.count = 0; +		} +	}  } -static void spin(byte whichway, byte& tripnum) -{ - { triptype& with = tr[tripnum];  - if (with.face!=whichway)  - { -  with.face=whichway; -  if (with.whichsprite==2)  return; /* Not for Spludwick */ - -  dna.geida_spin += 1; -  dna.geida_time=20; -  if (dna.geida_spin==5)  -  { -   display("Steady on, Avvy, you'll make the poor girl dizzy!"); -   dna.geida_spin=0; dna.geida_time=0;   /* knock out records */ -  } - }} +static void spin(byte whichway, byte &tripnum) { +	{ +		triptype &with = tr[tripnum]; +		if (with.face != whichway) { +			with.face = whichway; +			if (with.whichsprite == 2)  return; /* Not for Spludwick */ + +			dna.geida_spin += 1; +			dna.geida_time = 20; +			if (dna.geida_spin == 5) { +				display("Steady on, Avvy, you'll make the poor girl dizzy!"); +				dna.geida_spin = 0; +				dna.geida_time = 0; /* knock out records */ +			} +		} +	}  } -void geida_procs(byte tripnum) -{ - { -  triptype& with = tr[tripnum];  - -  if (dna.geida_time>0)  -  { -   dna.geida_time -= 1; -   if (dna.geida_time==0)  dna.geida_spin=0; -  } - -  if (with.y<(tr[1].y-2))  -  {     /* Geida is further from the screen than Avvy. */ -   spin(down, tripnum); -   with.iy=1; with.ix=0; -   take_a_step(tripnum); -   return; -  } else -   if (with.y>(tr[1].y+2))  -   {     /* Avvy is further from the screen than Geida. */ -    spin(up, tripnum); -    with.iy=-1; with.ix=0; -    take_a_step(tripnum); -    return; -   } - -  with.iy=0; -  if (with.x<tr[1].x-tr[1].xs*8)  -  { -   with.ix=tr[1].xs; -   spin(right, tripnum); -   take_a_step(tripnum); -  } else -    if (with.x>tr[1].x+tr[1].xs*8)  -    { -     with.ix=-tr[1].xs; -     spin(left, tripnum); -     take_a_step(tripnum); -    } else with.ix=0; - } +void geida_procs(byte tripnum) { +	{ +		triptype &with = tr[tripnum]; + +		if (dna.geida_time > 0) { +			dna.geida_time -= 1; +			if (dna.geida_time == 0)  dna.geida_spin = 0; +		} + +		if (with.y < (tr[1].y - 2)) { +			/* Geida is further from the screen than Avvy. */ +			spin(down, tripnum); +			with.iy = 1; +			with.ix = 0; +			take_a_step(tripnum); +			return; +		} else if (with.y > (tr[1].y + 2)) { +			/* Avvy is further from the screen than Geida. */ +			spin(up, tripnum); +			with.iy = -1; +			with.ix = 0; +			take_a_step(tripnum); +			return; +		} + +		with.iy = 0; +		if (with.x < tr[1].x - tr[1].xs * 8) { +			with.ix = tr[1].xs; +			spin(right, tripnum); +			take_a_step(tripnum); +		} else if (with.x > tr[1].x + tr[1].xs * 8) { +			with.ix = -tr[1].xs; +			spin(left, tripnum); +			take_a_step(tripnum); +		} else with.ix = 0; +	}  }  /* That's all... */ -void call_andexors() -{ - array<1,5,byte> order; - byte fv,temp; - boolean ok; - - fillchar(order,5,'\0'); - for( fv=1; fv <= numtr; fv ++) { triptype& with = tr[fv];  -  if (with.quick && with.visible)  -   order[fv]=fv;} - - do { -  ok=true; -  for( fv=1; fv <= 4; fv ++) -   if (((order[fv]!=0) && (order[fv+1]!=0)) -    && (tr[order[fv]].y>tr[order[fv+1]].y))  -   {     /* Swap them! */ -    temp=order[fv]; -    order[fv]=order[fv+1]; -    order[fv+1]=temp; -    ok=false; -   } - } while (!ok); - - for( fv=1; fv <= 5; fv ++) -  if (order[fv]>0)  -   tr[order[fv]].andexor(); +void call_andexors() { +	array<1, 5, byte> order; +	byte fv, temp; +	boolean ok; + +	fillchar(order, 5, '\0'); +	for (fv = 1; fv <= numtr; fv ++) { +		triptype &with = tr[fv]; +		if (with.quick && with.visible) +			order[fv] = fv; +	} + +	do { +		ok = true; +		for (fv = 1; fv <= 4; fv ++) +			if (((order[fv] != 0) && (order[fv + 1] != 0)) +			        && (tr[order[fv]].y > tr[order[fv + 1]].y)) { +				/* Swap them! */ +				temp = order[fv]; +				order[fv] = order[fv + 1]; +				order[fv + 1] = temp; +				ok = false; +			} +	} while (!ok); + +	for (fv = 1; fv <= 5; fv ++) +		if (order[fv] > 0) +			tr[order[fv]].andexor();  } -void trippancy_link() -{ - byte fv; - - if (ddmnow | ontoolbar | seescroll)  return; - for( fv=1; fv <= numtr; fv ++) { triptype& with = tr[fv];  if (with.quick)  walk();} - call_andexors(); - for( fv=1; fv <= numtr; fv ++) { triptype& with = tr[fv];  -  if (with.quick && with.call_eachstep)  -  { -   switch (tr[fv].eachstep) { -    case procfollow_avvy_y : follow_avvy_y(fv); break; -    case procback_and_forth : back_and_forth(fv); break; -    case procface_avvy : face_avvy(fv); break; -    case procarrow_procs : arrow_procs(fv); break; -/*    PROCSpludwick_procs : spludwick_procs(fv);*/ -    case procgrab_avvy : grab_avvy(fv); break; -    case procgeida_procs : geida_procs(fv); break; -   } -  }} - if (mustexclaim)  - { -  mustexclaim=false; -  dixi('x',saywhat); - } +void trippancy_link() { +	byte fv; + +	if (ddmnow | ontoolbar | seescroll)  return; +	for (fv = 1; fv <= numtr; fv ++) { +		triptype &with = tr[fv]; +		if (with.quick)  walk(); +	} +	call_andexors(); +	for (fv = 1; fv <= numtr; fv ++) { +		triptype &with = tr[fv]; +		if (with.quick && with.call_eachstep) { +			switch (tr[fv].eachstep) { +			case procfollow_avvy_y : +				follow_avvy_y(fv); +				break; +			case procback_and_forth : +				back_and_forth(fv); +				break; +			case procface_avvy : +				face_avvy(fv); +				break; +			case procarrow_procs : +				arrow_procs(fv); +				break; +				/*    PROCSpludwick_procs : spludwick_procs(fv);*/ +			case procgrab_avvy : +				grab_avvy(fv); +				break; +			case procgeida_procs : +				geida_procs(fv); +				break; +			} +		} +	} +	if (mustexclaim) { +		mustexclaim = false; +		dixi('x', saywhat); +	}  } -void get_back_loretta() -{ -    byte fv; - -/* for fv:=1 to numtr do with tr[fv] do if quick then getback;*/ - for( fv=1; fv <= numtr; fv ++) if (tr[fv].quick)  - { -  getback(); -  return; - } -/* for fv:=0 to 1 do begin cp:=1-cp; getback; end;*/ +void get_back_loretta() { +	byte fv; + +	/* for fv:=1 to numtr do with tr[fv] do if quick then getback;*/ +	for (fv = 1; fv <= numtr; fv ++) if (tr[fv].quick) { +			getback(); +			return; +		} +	/* for fv:=0 to 1 do begin cp:=1-cp; getback; end;*/  } -void stopwalking() -{ - tr[1].stopwalk(); dna.rw=stopped; if (alive)  tr[1].step=1; +void stopwalking() { +	tr[1].stopwalk(); +	dna.rw = stopped; +	if (alive)  tr[1].step = 1;  } -void tripkey(char dir) -{ - if ((ctrl==cjoy) | (~ dna.user_moves_avvy))  return; - - { triptype& with = tr[1];  -  { -   switch (dir) { -    case 'H': if (rw!=up)     -            { rw=up;    rwsp(1,rw); } else stopwalking(); -            break; -    case 'P': if (rw!=down)   -            { rw=down;  rwsp(1,rw); } else stopwalking(); -            break; -    case 'K': if (rw!=left)   -            { rw=left;  rwsp(1,rw); } else stopwalking(); -            break; -    case 'M': if (rw!=right)  -            { rw=right; rwsp(1,rw); } else stopwalking(); -            break; -    case 'I': if (rw!=ur)     -            { rw=ur;    rwsp(1,rw); } else stopwalking(); -            break; -    case 'Q': if (rw!=dr)     -            { rw=dr;    rwsp(1,rw); } else stopwalking(); -            break; -    case 'O': if (rw!=dl)     -            { rw=dl;    rwsp(1,rw); } else stopwalking(); -            break; -    case 'G': if (rw!=ul)     -            { rw=ul;    rwsp(1,rw); } else stopwalking(); -            break; -    case 'L': stopwalking(); break; -   } - }} +void tripkey(char dir) { +	if ((ctrl == cjoy) | (~ dna.user_moves_avvy))  return; + +	{ +		triptype &with = tr[1]; +		{ +			switch (dir) { +			case 'H': +				if (rw != up) { +					rw = up; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'P': +				if (rw != down) { +					rw = down; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'K': +				if (rw != left) { +					rw = left; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'M': +				if (rw != right) { +					rw = right; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'I': +				if (rw != ur) { +					rw = ur; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'Q': +				if (rw != dr) { +					rw = dr; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'O': +				if (rw != dl) { +					rw = dl; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'G': +				if (rw != ul) { +					rw = ul; +					rwsp(1, rw); +				} else stopwalking(); +				break; +			case 'L': +				stopwalking(); +				break; +			} +		} +	}  } -void readstick() -{ -    byte jw; +void readstick() { +	byte jw; - if (ctrl==ckey)  return; +	if (ctrl == ckey)  return; - jw=joyway; +	jw = joyway; - { -  triptype& with = tr[1];  +	{ +		triptype &with = tr[1]; -  if (jw==stopped)  stopwalking(); else -  { -   dna.rw=jw; rwsp(1,dna.rw); -  } - } +		if (jw == stopped)  stopwalking(); +		else { +			dna.rw = jw; +			rwsp(1, dna.rw); +		} +	} - if (jw!=oldjw)  - { -  showrw; -  oldjw=jw; - } +	if (jw != oldjw) { +		showrw; +		oldjw = jw; +	}  } -void getsetclear() -{ -    byte fv; +void getsetclear() { +	byte fv; - for( fv=0; fv <= 1; fv ++) getset[fv].init(); +	for (fv = 0; fv <= 1; fv ++) getset[fv].init();  } -void hide_in_the_cupboard() -{ -      const char nowt = '\372'; /* As in Acci. */ - - { -  if (avvys_in_the_cupboard)  -  { -   if (wearing==nowt)  -    display("\6AVVY!\22 Get dressed first!"); -   else -   { -    tr[1].visible=true; -    user_moves_avvy=true; -    apped(1,3); /* Walk out of the cupboard. */ -    display("You leave the cupboard. Nice to be out of there!"); -    avvys_in_the_cupboard=false; -    first_show(8); then_show(7); start_to_close; -   } -  } else -  {     /* Not hiding in the cupboard */ -   tr[1].visible=false; -   user_moves_avvy=false; -   display(string("You walk into the room...\20It seems to be an empty, ")+ -    "but dusty, cupboard. Hmmmm... you leave the door slightly open to "+ -    "avoid suffocation."); -   avvys_in_the_cupboard=true; -   show_one(8); -  } - } +void hide_in_the_cupboard() { +	const char nowt = '\372'; /* As in Acci. */ + +	{ +		if (avvys_in_the_cupboard) { +			if (wearing == nowt) +				display("\6AVVY!\22 Get dressed first!"); +			else { +				tr[1].visible = true; +				user_moves_avvy = true; +				apped(1, 3); /* Walk out of the cupboard. */ +				display("You leave the cupboard. Nice to be out of there!"); +				avvys_in_the_cupboard = false; +				first_show(8); +				then_show(7); +				start_to_close; +			} +		} else { +			/* Not hiding in the cupboard */ +			tr[1].visible = false; +			user_moves_avvy = false; +			display(string("You walk into the room...\20It seems to be an empty, ") + +			        "but dusty, cupboard. Hmmmm... you leave the door slightly open to " + +			        "avoid suffocation."); +			avvys_in_the_cupboard = true; +			show_one(8); +		} +	}  } -void fliproom(byte room,byte ped); -static integer beforex,beforey; +void fliproom(byte room, byte ped); +static integer beforex, beforey;  static void tidy_after_mouse(); -static void tidy_up(integer a,integer b,integer c,integer d) -{ -    bytefield bf; - -   { -      x1=a / 8; -      y1=b; -      x2=(c+7) / 8; -      y2=d; -      setactivepage(0); -      rectangle(x1*8,y1,x2*8+7,y2); -   } -   getset[0].remember(bf); -   getset[1].remember(bf); +static void tidy_up(integer a, integer b, integer c, integer d) { +	bytefield bf; + +	{ +		x1 = a / 8; +		y1 = b; +		x2 = (c + 7) / 8; +		y2 = d; +		setactivepage(0); +		rectangle(x1 * 8, y1, x2 * 8 + 7, y2); +	} +	getset[0].remember(bf); +	getset[1].remember(bf);  } -static void tidy_after_mouse() -{ -   tidy_up(beforex,beforey,beforex+15,beforey+15); -   xycheck; -   tidy_up(mx,my,mx+15,my+15); +static void tidy_after_mouse() { +	tidy_up(beforex, beforey, beforex + 15, beforey + 15); +	xycheck; +	tidy_up(mx, my, mx + 15, my + 15);  } -void fliproom(byte room,byte ped) -{ -    byte fv; +void fliproom(byte room, byte ped) { +	byte fv; - if (~ alive)  - {     /* You can't leave the room if you're dead. */ -   tr[1].ix=0; tr[1].iy=0;   /* Stop him from moving. */ -   return; - } +	if (~ alive) { +		/* You can't leave the room if you're dead. */ +		tr[1].ix = 0; +		tr[1].iy = 0; /* Stop him from moving. */ +		return; +	} - if ((ped==177) && (dna.room==r__lusties))  - { -  hide_in_the_cupboard(); -  return; - } +	if ((ped == 177) && (dna.room == r__lusties)) { +		hide_in_the_cupboard(); +		return; +	} - if ((dna.jumpstatus>0) && (dna.room==r__insidecardiffcastle))  - {     /* You can't *jump* out of Cardiff Castle! */ -  tr[1].ix=0; -  return; - } +	if ((dna.jumpstatus > 0) && (dna.room == r__insidecardiffcastle)) { +		/* You can't *jump* out of Cardiff Castle! */ +		tr[1].ix = 0; +		return; +	} - xycheck; beforex=mx; beforey=my; +	xycheck; +	beforex = mx; +	beforey = my; - exitroom(dna.room); - dusk; getsetclear(); +	exitroom(dna.room); +	dusk; +	getsetclear(); - for( fv=2; fv <= numtr; fv ++) -  { triptype& with = tr[fv];  -  if (with.quick)  done();} /* Deallocate sprite */ +	for (fv = 2; fv <= numtr; fv ++) { +		triptype &with = tr[fv]; +		if (with.quick)  done(); +	} /* Deallocate sprite */ - if (dna.room==r__lustiesroom)  -  dna.enter_catacombs_from_lusties_room=true; +	if (dna.room == r__lustiesroom) +		dna.enter_catacombs_from_lusties_room = true; - enterroom(room,ped); apped(1,ped); - dna.enter_catacombs_from_lusties_room=false; - oldrw=dna.rw; dna.rw=tr[1].face; showrw; +	enterroom(room, ped); +	apped(1, ped); +	dna.enter_catacombs_from_lusties_room = false; +	oldrw = dna.rw; +	dna.rw = tr[1].face; +	showrw; - for( fv=0; fv <= 1; fv ++) - { -  cp=1-cp; -  getback(); - } - dawn; +	for (fv = 0; fv <= 1; fv ++) { +		cp = 1 - cp; +		getback(); +	} +	dawn; - /* Tidy up after mouse. I know it's a kludge... */ -/*  tidy_after_mouse;*/ +	/* Tidy up after mouse. I know it's a kludge... */ +	/*  tidy_after_mouse;*/  }  boolean infield(byte which) - /* returns True if you're within field "which" */ +/* returns True if you're within field "which" */  { -    integer yy; - - boolean infield_result; - { void& with = fields[which];  { -  triptype& with = tr[1];  - -  yy=with.y+with.a.yl; -  infield_result=(with.x>=x1) && (with.x<=x2) && (yy>=y1) && (yy<=y2); -                                }} - return infield_result; +	integer yy; + +	boolean infield_result; +	{ +		void &with = fields[which]; +		{ +			triptype &with = tr[1]; + +			yy = with.y + with.a.yl; +			infield_result = (with.x >= x1) && (with.x <= x2) && (yy >= y1) && (yy <= y2); +		} +	} +	return infield_result;  } -boolean neardoor()         /* returns True if you're near a door! */ -{ -    integer ux,uy; byte fv; boolean nd; - - boolean neardoor_result; - if (numfields<9)  - {     /* there ARE no doors here! */ -  neardoor_result=false; -  return neardoor_result; - } - { -  triptype& with = tr[1];  - -  ux=with.x; -  uy=with.y+with.a.yl; - } nd=false; - for( fv=9; fv <= numfields; fv ++) -  { -   void& with = fields[fv];  - -   if ((ux>=x1) && (ux<=x2) && (uy>=y1) && (uy<=y2))  nd=true; -  } - neardoor_result=nd; - return neardoor_result; +boolean neardoor() {       /* returns True if you're near a door! */ +	integer ux, uy; +	byte fv; +	boolean nd; + +	boolean neardoor_result; +	if (numfields < 9) { +		/* there ARE no doors here! */ +		neardoor_result = false; +		return neardoor_result; +	} +	{ +		triptype &with = tr[1]; + +		ux = with.x; +		uy = with.y + with.a.yl; +	} +	nd = false; +	for (fv = 9; fv <= numfields; fv ++) { +		void &with = fields[fv]; + +		if ((ux >= x1) && (ux <= x2) && (uy >= y1) && (uy <= y2))  nd = true; +	} +	neardoor_result = nd; +	return neardoor_result;  } -void new_game_for_trippancy()     /* Called by gyro.newgame */ -{ - tr[1].visible=false; +void new_game_for_trippancy() {   /* Called by gyro.newgame */ +	tr[1].visible = false;  } -void triptype::save_data_to_mem(word& where) -{ - trip_saver_type tripsaver; +void triptype::save_data_to_mem(word &where) { +	trip_saver_type tripsaver; - set_up_saver(tripsaver); - move(tripsaver,mem[storage_seg*where],sizeof(tripsaver)); - where += sizeof(tripsaver); +	set_up_saver(tripsaver); +	move(tripsaver, mem[storage_seg * where], sizeof(tripsaver)); +	where += sizeof(tripsaver);  } -void triptype::load_data_from_mem(word& where) -{ - word spritewas,spriteis,saveface,savex,savey,savestep; - boolean wasquick; - trip_saver_type tripsaver; +void triptype::load_data_from_mem(word &where) { +	word spritewas, spriteis, saveface, savex, savey, savestep; +	boolean wasquick; +	trip_saver_type tripsaver; - move(mem[storage_seg*where],tripsaver,sizeof(tripsaver)); - where += sizeof(tripsaver); - unload_saver(tripsaver); +	move(mem[storage_seg * where], tripsaver, sizeof(tripsaver)); +	where += sizeof(tripsaver); +	unload_saver(tripsaver); - spriteis=whichsprite; - savex=x; savey=y; saveface=face; savestep=step; +	spriteis = whichsprite; +	savex = x; +	savey = y; +	saveface = face; +	savestep = step; - init(spriteis,check_me); +	init(spriteis, check_me); - appear(savex,savey,saveface); unload_saver(tripsaver); - step=savestep; +	appear(savex, savey, saveface); +	unload_saver(tripsaver); +	step = savestep;  }  class unit_trip5_initialize { -  public: unit_trip5_initialize(); +public: +	unit_trip5_initialize();  };  static unit_trip5_initialize trip5_constructor;  unit_trip5_initialize::unit_trip5_initialize() { - getsetclear(); mustexclaim=false; +	getsetclear(); +	mustexclaim = false;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/trip5.h b/engines/avalanche/trip5.h index 6c18232110..06642813e6 100644 --- a/engines/avalanche/trip5.h +++ b/engines/avalanche/trip5.h @@ -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 @@ -39,90 +39,94 @@ namespace Avalanche {  const integer maxgetset = 35; -typedef array<5,2053,byte> manitype; +typedef array<5, 2053, byte> manitype; -typedef matrix<0,50,0,10,byte> siltype; /* 35, 4 */ +typedef matrix<0, 50, 0, 10, byte> siltype; /* 35, 4 */  struct adxtype { /* Second revision of ADX type */ -           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.) */ +	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.) */  };  struct trip_saver_type { -                   byte whichsprite; -                   byte face; byte step; -                   integer x;    integer y; -                   shortint ix;   shortint iy; -                   boolean visible; -                   boolean homing; -                   boolean check_me; -                   byte count; -                   byte xw,xs,ys; -                   byte totalnum; -                   integer hx; integer hy; -                   boolean call_eachstep; -                   byte eachstep; -                   boolean vanishifstill; +	byte whichsprite; +	byte face; +	byte step; +	integer x; +	integer y; +	shortint ix; +	shortint iy; +	boolean visible; +	boolean homing; +	boolean check_me; +	byte count; +	byte xw, xs, ys; +	byte totalnum; +	integer hx; +	integer hy; +	boolean call_eachstep; +	byte eachstep; +	boolean vanishifstill;  };  class triptype {  public: -            adxtype a; /* vital statistics */ -            byte face,step; -            integer x,y; /* current xy coords */ -            array<0,1,integer> ox,oy;     /* last xy coords */ -            shortint ix,iy; /* amount to move sprite by, each step */ -            array<1,24,manitype*> mani; -            array<1,24,siltype*> sil; -            byte whichsprite; -            boolean quick,visible,homing,check_me; -            integer hx,hy; /* homing x & y coords */ -            byte count; /* counts before changing step */ -            byte xw; /* x-width in bytes */ -            byte xs,ys; /* x & y speed */ -            byte totalnum; /* total number of sprites */ -            boolean vanishifstill; /* Do we show this sprite if it's still? */ - -            boolean call_eachstep; /* Do we call the eachstep procedure? */ -            byte eachstep; - -            triptype* init(byte spritenum, boolean do_check); -             /* loads & sets up the sprite */ -            void original();    /* just sets Quick to false */ -            void andexor();    /* drops sprite onto screen */ -            void turn(byte whichway);      /* turns him round */ -            void appear(integer wx,integer wy, byte wf); /* switches him on */ -            void bounce();    /* bounces off walls. */ -            void walk();    /* prepares for andexor, etc. */ -            void walkto(byte pednum);      /* home in on a point */ -            void stophoming();    /* self-explanatory */ -            void homestep();    /* calculates ix & iy for one homing step */ -            void speed(shortint xx,shortint yy); /* sets ix & iy, non-homing, etc */ -            void stopwalk();    /* Stops the sprite from moving */ -            void chatter();    /* Sets up talk vars */ -            void set_up_saver(trip_saver_type& v); -            void unload_saver(trip_saver_type v); -              void savedata(untyped_file& f); /* Self-explanatory, */ -              void loaddata(untyped_file& f);  /* really. */ -              void save_data_to_mem(word& where); -              void load_data_from_mem(word& where); -            triptype* done(); +	adxtype a; /* vital statistics */ +	byte face, step; +	integer x, y; /* current xy coords */ +	array<0, 1, integer> ox, oy;  /* last xy coords */ +	shortint ix, iy; /* amount to move sprite by, each step */ +	array<1, 24, manitype *> mani; +	array<1, 24, siltype *> sil; +	byte whichsprite; +	boolean quick, visible, homing, check_me; +	integer hx, hy; /* homing x & y coords */ +	byte count; /* counts before changing step */ +	byte xw; /* x-width in bytes */ +	byte xs, ys; /* x & y speed */ +	byte totalnum; /* total number of sprites */ +	boolean vanishifstill; /* Do we show this sprite if it's still? */ + +	boolean call_eachstep; /* Do we call the eachstep procedure? */ +	byte eachstep; + +	triptype *init(byte spritenum, boolean do_check); +	/* loads & sets up the sprite */ +	void original();    /* just sets Quick to false */ +	void andexor();    /* drops sprite onto screen */ +	void turn(byte whichway);      /* turns him round */ +	void appear(integer wx, integer wy, byte wf); /* switches him on */ +	void bounce();    /* bounces off walls. */ +	void walk();    /* prepares for andexor, etc. */ +	void walkto(byte pednum);      /* home in on a point */ +	void stophoming();    /* self-explanatory */ +	void homestep();    /* calculates ix & iy for one homing step */ +	void speed(shortint xx, shortint yy); /* sets ix & iy, non-homing, etc */ +	void stopwalk();    /* Stops the sprite from moving */ +	void chatter();    /* Sets up talk vars */ +	void set_up_saver(trip_saver_type &v); +	void unload_saver(trip_saver_type v); +	void savedata(untyped_file &f); /* Self-explanatory, */ +	void loaddata(untyped_file &f);  /* really. */ +	void save_data_to_mem(word &where); +	void load_data_from_mem(word &where); +	triptype *done();  };  class getsettype {  public: -              array<1,maxgetset,bytefield> gs; -              byte numleft; +	array<1, maxgetset, bytefield> gs; +	byte numleft; -              getsettype* init(); -              void remember(bytefield r); -              void recall(bytefield& r); +	getsettype *init(); +	void remember(bytefield r); +	void recall(bytefield &r);  }; @@ -130,7 +134,10 @@ const integer up = 0;  const integer right = 1;  const integer down = 2;  const integer left = 3; -const integer ur = 4; const integer dr = 5; const integer dl = 6; const integer ul = 7; +const integer ur = 4; +const integer dr = 5; +const integer dl = 6; +const integer ul = 7;  const integer stopped = 8;  const integer numtr = 5; /* current max no. of sprites */ @@ -160,7 +167,7 @@ void loadtrip();  void call_special(word which); -void open_the_door(byte whither,byte ped,byte magicnum); /* Handles slidey-open doors. */ +void open_the_door(byte whither, byte ped, byte magicnum); /* Handles slidey-open doors. */  void catamove(byte ped); @@ -168,13 +175,13 @@ void stopwalking();  void tripkey(char dir); -void rwsp(byte t,byte r); +void rwsp(byte t, byte r); -void apped(byte trn,byte np); +void apped(byte trn, byte np);  void getback(); -void fliproom(byte room,byte ped); +void fliproom(byte room, byte ped);  boolean infield(byte which);          /* returns True if you're within field "which" */ @@ -192,11 +199,12 @@ void new_game_for_trippancy();  #define EXTERN  #endif -EXTERN array<1,numtr,triptype> tr; -EXTERN array<0,1,getsettype> getset; -EXTERN array<1,16000,byte> aa; +EXTERN array<1, numtr, triptype> tr; +EXTERN array<0, 1, getsettype> getset; +EXTERN array<1, 16000, byte> aa; -EXTERN boolean mustexclaim; EXTERN word saywhat; +EXTERN boolean mustexclaim; +EXTERN word saywhat;  #undef EXTERN  #define EXTERN extern diff --git a/engines/avalanche/trip5tst.cpp b/engines/avalanche/trip5tst.cpp index 8dbd985ab4..191d8f3756 100644 --- a/engines/avalanche/trip5tst.cpp +++ b/engines/avalanche/trip5tst.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 @@ -33,131 +33,135 @@  namespace Avalanche {  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 */ +	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 */  }; -integer gd,gm; +integer gd, gm;  untyped_file inf;  adxtype a; -array<1,16000,byte> aa; -array<5,2053,byte> mani; -matrix<0,35,0,4,byte> sil; +array<1, 16000, byte> aa; +array<5, 2053, byte> mani; +matrix<0, 35, 0, 4, byte> sil;  byte xw; -void filesetup() -{ -      const integer idshould = -1317732048; - longint id; - word soa; -; - assign(inf,"v:sprite2.avd"); - reset(inf,1); - seek(inf,177); - blockread(inf,id,4); - if (id!=idshould)  - {; -  output << '\7'; -  close(inf); -  exit(0); - } - - blockread(inf,soa,2); - blockread(inf,a,soa); +void filesetup() { +	const integer idshould = -1317732048; +	longint id; +	word soa; +	; +	assign(inf, "v:sprite2.avd"); +	reset(inf, 1); +	seek(inf, 177); +	blockread(inf, id, 4); +	if (id != idshould) { +		; +		output << '\7'; +		close(inf); +		exit(0); +	} + +	blockread(inf, soa, 2); +	blockread(inf, a, soa);  } -void loadpic() -{ -    byte fv,ff; -; - {; -  xw=a.xl / 8; if ((a.xl % 8)>0)  xw += 1; - -/*  aa[1]:=xl; aa[2]:=0; aa[3]:=yl; aa[4]:=0;*/ -   /* The putimage x&y codes are words but xl & yl are bytes, hence the #0s. */ -/*  seek(inf,filepos(inf)+xw*(yl+1));*/ -  for( fv=0; fv <= a.yl; fv ++) -   blockread(inf,sil[fv],xw); -  blockread(inf,mani,a.size-6); -/*    blockread(inf,aa[5+fv*xw*4+xw*ff],xw);*/ -  aa[a.size-1]=0; aa[a.size]=0; /* footer */ - } -/* putimage(0,0,aa,0);*/ +void loadpic() { +	byte fv, ff; +	; +	{ +		; +		xw = a.xl / 8; +		if ((a.xl % 8) > 0)  xw += 1; + +		/*  aa[1]:=xl; aa[2]:=0; aa[3]:=yl; aa[4]:=0;*/ +		/* The putimage x&y codes are words but xl & yl are bytes, hence the #0s. */ +		/*  seek(inf,filepos(inf)+xw*(yl+1));*/ +		for (fv = 0; fv <= a.yl; fv ++) +			blockread(inf, sil[fv], xw); +		blockread(inf, mani, a.size - 6); +		/*    blockread(inf,aa[5+fv*xw*4+xw*ff],xw);*/ +		aa[a.size - 1] = 0; +		aa[a.size] = 0; /* footer */ +	} +	/* putimage(0,0,aa,0);*/  } -void plotone(integer xx,integer yy) -{ - word s; - word ofs,fv; - byte x,y,z; -; - {; -  s=imagesize(x,y,xx+a.xl,yy+a.yl); -  getimage(xx,yy,xx+a.xl,yy+a.yl,aa); /* Now loaded into our local buffer. */ - -  /* Now we've got to modify it! */ - -  for( x=0; x <= 3; x ++) -   for( y=0; y <= 35; y ++) -    for( z=0; z <= 4; z ++) -    {; -     ofs=5+y*xw*4+xw*x+z; -     aa[ofs]=aa[ofs] & sil[y][z]; -    } - - /* mov ax,5   ; AX = ofs -   mov bx,xw  ; wherever we get xw from -   mov cx,x   ; ditto -   mov dx,y   ; ditto -   mul cx,bx  ; x*xw -   mul dx,bx  ; y*yw -   add ax,cx  ; now add 'em all up -   add ax,dx  ; ... -   mov bx,z   ; get z (we don't need x any more) -   mov cx,syz ; get silyz (where from??!) -   add ax,bx  ; add on the last part of the addition -   and ax,cx  ; AND ax with cx. That's it! */ - -/* -  for x:=1 to 4 do -  begin; -   for y:=0 to 35 do -    for z:=0 to 4 do -    begin; -     ofs:=5+y*xw*4+xw*x+z; -     aa[ofs]:=aa[ofs] xor pic[x,y,z]; -    end; -  end; -*/ - -  for( fv=5; fv <= a.size-2; fv ++) -   aa[fv]=aa[fv] ^ mani[fv]; - -  /* Now.. let's try pasting it back again! */ - -  putimage(xx,yy,aa,0); - } +void plotone(integer xx, integer yy) { +	word s; +	word ofs, fv; +	byte x, y, z; +	; +	{ +		; +		s = imagesize(x, y, xx + a.xl, yy + a.yl); +		getimage(xx, yy, xx + a.xl, yy + a.yl, aa); /* Now loaded into our local buffer. */ + +		/* Now we've got to modify it! */ + +		for (x = 0; x <= 3; x ++) +			for (y = 0; y <= 35; y ++) +				for (z = 0; z <= 4; z ++) { +					; +					ofs = 5 + y * xw * 4 + xw * x + z; +					aa[ofs] = aa[ofs] & sil[y][z]; +				} + +		/* mov ax,5   ; AX = ofs +		  mov bx,xw  ; wherever we get xw from +		  mov cx,x   ; ditto +		  mov dx,y   ; ditto +		  mul cx,bx  ; x*xw +		  mul dx,bx  ; y*yw +		  add ax,cx  ; now add 'em all up +		  add ax,dx  ; ... +		  mov bx,z   ; get z (we don't need x any more) +		  mov cx,syz ; get silyz (where from??!) +		  add ax,bx  ; add on the last part of the addition +		  and ax,cx  ; AND ax with cx. That's it! */ + +		/* +		  for x:=1 to 4 do +		  begin; +		   for y:=0 to 35 do +		    for z:=0 to 4 do +		    begin; +		     ofs:=5+y*xw*4+xw*x+z; +		     aa[ofs]:=aa[ofs] xor pic[x,y,z]; +		    end; +		  end; +		*/ + +		for (fv = 5; fv <= a.size - 2; fv ++) +			aa[fv] = aa[fv] ^ mani[fv]; + +		/* Now.. let's try pasting it back again! */ + +		putimage(xx, yy, aa, 0); +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - initgraph(gd,gm,""); - setfillstyle(6,1); bar(0,0,640,200); - filesetup(); - for( gd=1; gd <= 9; gd ++) loadpic(); - do { -  plotone(Random(500),Random(150)); - } while (!keypressed()); - plotone(0,0); - close(inf); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	initgraph(gd, gm, ""); +	setfillstyle(6, 1); +	bar(0, 0, 640, 200); +	filesetup(); +	for (gd = 1; gd <= 9; gd ++) loadpic(); +	do { +		plotone(Random(500), Random(150)); +	} while (!keypressed()); +	plotone(0, 0); +	close(inf); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/trip5xf.cpp b/engines/avalanche/trip5xf.cpp index f83f9c7ec2..eecfa75de2 100644 --- a/engines/avalanche/trip5xf.cpp +++ b/engines/avalanche/trip5xf.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 @@ -30,170 +30,187 @@  namespace Avalanche { -const string crlf = string('\15')+'\12'; const char eof_ = '\32'; -const array<1,177,char> trip5head =  -         string("Sprite*.AVD  ...  data file for Trippancy Five")+crlf+crlf+ -         "[Thorsoft relocatable fiveplane sprite image format]"+crlf+crlf+ -         "Thomas Thurman was here.  ...  Have fun!"+crlf+crlf+eof_+ -         "±±±±±±± * G. I. E. D. ! * "; +const string crlf = string('\15') + '\12'; +const char eof_ = '\32'; +const array<1, 177, char> trip5head = +    string("Sprite*.AVD  ...  data file for Trippancy Five") + crlf + crlf + +    "[Thorsoft relocatable fiveplane sprite image format]" + crlf + crlf + +    "Thomas Thurman was here.  ...  Have fun!" + crlf + crlf + eof_ + +    "±±±±±±± * G. I. E. D. ! * "; -const array<1,4,char> tripid = string('\x30')+'\x1'+'\x75'+'\261'; +const array<1, 4, char> tripid = string('\x30') + '\x1' + '\x75' + '\261'; -const array<1,50,char> trip5foot = crlf+crlf+ -         " and that's it! Enjoy the game. "+'\3'+crlf+crlf+ -            "\n\n\n\n\n\n\n"+"tt"; +const array<1, 50, char> trip5foot = crlf + crlf + +                                     " and that's it! Enjoy the game. " + '\3' + crlf + crlf + +                                     "\n\n\n\n\n\n\n" + "tt";  struct adxotype { -           varying_string<12> name; /* name of character */ -           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 */ +	varying_string<12> name; /* name of character */ +	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 */  };  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 */ +	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 */  };  varying_string<2> sn;  adxotype oa;  adxtype a; -matrix<1,24,0,1,pointer> pic;     /* the pictures themselves */ -array<1,16000,byte> aa; +matrix<1, 24, 0, 1, pointer> pic; /* the pictures themselves */ +array<1, 16000, byte> aa;  untyped_file out;  integer bigsize; -void copyaoa() -{; - {; -  a.name=oa.name; -  a.comment="Transferred"; -  a.num=oa.num; -  a.xl=oa.xl; -  a.yl=oa.yl; -  a.seq=oa.seq; -  a.size=oa.size; -  a.fgc=oa.fgc; -  a.bgc=oa.bgc; - } +void copyaoa() { +	; +	{ +		; +		a.name = oa.name; +		a.comment = "Transferred"; +		a.num = oa.num; +		a.xl = oa.xl; +		a.yl = oa.yl; +		a.seq = oa.seq; +		a.size = oa.size; +		a.fgc = oa.fgc; +		a.bgc = oa.bgc; +	}  } -void load() -{ - untyped_file f; byte gd,gm,sort,n; pointer p,q; - pointer xf; -; - assign(f,string("v:osprte")+sn+".avd"); reset(f,1); seek(f,59); - blockread(f,oa,sizeof(oa)); blockread(f,bigsize,2); - copyaoa(); - - getmem(xf,a.size); - - for( sort=0; sort <= 1; sort ++) - {; -  mark(q); getmem(p,bigsize); -  blockread(f,p,bigsize); -  putimage(0,0,p,0); release(q); n=1; - -  if (sort==0)  setfillstyle(1,15); else setfillstyle(1,0); -  bar(177,125,300,200); - -   for( gm=0; gm <= (a.num / a.seq)-1; gm ++) /* directions */ -    for( gd=0; gd <= a.seq-1; gd ++) /* steps */ -    {; -     getmem(pic[n][sort],a.size); /* grab the memory */ -     getimage((gm / 2)*(a.xl*6)+gd*a.xl,(gm % 2)*a.yl, -       (gm / 2)*(a.xl*6)+gd*a.xl+a.xl-1,(gm % 2)*a.yl+a.yl-1, -       xf); -     putimage(177,125,xf,0); -     getimage(177,125,177+a.xl,125+a.yl,pic[n][sort]); /* grab the pic */ -     n += 1; -   } - } - close(f); - freemem(xf,a.size); - cleardevice(); -  for( gm=0; gm <= 1; gm ++) -   for( gd=1; gd <= a.num; gd ++) -    putimage(gd*15,gm*40,pic[gd][gm],0); +void load() { +	untyped_file f; +	byte gd, gm, sort, n; +	pointer p, q; +	pointer xf; +	; +	assign(f, string("v:osprte") + sn + ".avd"); +	reset(f, 1); +	seek(f, 59); +	blockread(f, oa, sizeof(oa)); +	blockread(f, bigsize, 2); +	copyaoa(); + +	getmem(xf, a.size); + +	for (sort = 0; sort <= 1; sort ++) { +		; +		mark(q); +		getmem(p, bigsize); +		blockread(f, p, bigsize); +		putimage(0, 0, p, 0); +		release(q); +		n = 1; + +		if (sort == 0)  setfillstyle(1, 15); +		else setfillstyle(1, 0); +		bar(177, 125, 300, 200); + +		for (gm = 0; gm <= (a.num / a.seq) - 1; gm ++) /* directions */ +			for (gd = 0; gd <= a.seq - 1; gd ++) { /* steps */ +				; +				getmem(pic[n][sort], a.size); /* grab the memory */ +				getimage((gm / 2) * (a.xl * 6) + gd * a.xl, (gm % 2)*a.yl, +				         (gm / 2) * (a.xl * 6) + gd * a.xl + a.xl - 1, (gm % 2)*a.yl + a.yl - 1, +				         xf); +				putimage(177, 125, xf, 0); +				getimage(177, 125, 177 + a.xl, 125 + a.yl, pic[n][sort]); /* grab the pic */ +				n += 1; +			} +	} +	close(f); +	freemem(xf, a.size); +	cleardevice(); +	for (gm = 0; gm <= 1; gm ++) +		for (gd = 1; gd <= a.num; gd ++) +			putimage(gd * 15, gm * 40, pic[gd][gm], 0);  } -void setup() -{ -    integer gd,gm; -; - output << "TRIP5XF (c) 1992, Thomas Thurman." << NL; output << NL; - output << "Enter number of SPRITE*.AVD file to convert:"; input >> sn >> NL; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - load(); +void setup() { +	integer gd, gm; +	; +	output << "TRIP5XF (c) 1992, Thomas Thurman." << NL; +	output << NL; +	output << "Enter number of SPRITE*.AVD file to convert:"; +	input >> sn >> NL; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	load();  } -string strf(longint x) -{ -    string q; -string strf_result; -; - str(x,q); strf_result=q; -return strf_result; +string strf(longint x) { +	string q; +	string strf_result; +	; +	str(x, q); +	strf_result = q; +	return strf_result;  } -void save() -{ - byte sort,n; - word fv,ff; char r; byte xw; - byte nxl,nyl; - word soa; -; - cleardevice(); - {; -  a.size=imagesize(0,0,a.xl,a.yl); -  soa=sizeof(a); - -  assign(out,string("v:sprite")+sn+".avd"); rewrite(out,1); -  blockwrite(out,trip5head,177); -  blockwrite(out,tripid,4); -  blockwrite(out,soa,2); -  blockwrite(out,a,soa); - -  nxl=a.xl; nyl=a.yl; -  xw=nxl / 8; -  if ((nxl % 8)>0)  xw += 1; - -  for( n=1; n <= a.num; n ++) -  {; -   putimage(  0,0,pic[n][0],0); -   getimage(  0,0,a.xl,a.yl,aa); -   for( fv=0; fv <= nyl; fv ++) -    blockwrite(out,aa[5+fv*xw*4],xw); - -   putimage(100,0,pic[n][1],0); -   getimage(100,0,100+a.xl,a.yl,aa); -   putimage(100,100,aa,4); -/*   for ff:=1 to 4 do        { actually 2 to 5, but it doesn't matter here } -    for fv:=0 to nyl do*/ -/*   for ff:=5 to size-2 do -    blockwrite(out,aa[ff],1);*/ -   blockwrite(out,aa[5],a.size-6); -  } - } +void save() { +	byte sort, n; +	word fv, ff; +	char r; +	byte xw; +	byte nxl, nyl; +	word soa; +	; +	cleardevice(); +	{ +		; +		a.size = imagesize(0, 0, a.xl, a.yl); +		soa = sizeof(a); + +		assign(out, string("v:sprite") + sn + ".avd"); +		rewrite(out, 1); +		blockwrite(out, trip5head, 177); +		blockwrite(out, tripid, 4); +		blockwrite(out, soa, 2); +		blockwrite(out, a, soa); + +		nxl = a.xl; +		nyl = a.yl; +		xw = nxl / 8; +		if ((nxl % 8) > 0)  xw += 1; + +		for (n = 1; n <= a.num; n ++) { +			; +			putimage(0, 0, pic[n][0], 0); +			getimage(0, 0, a.xl, a.yl, aa); +			for (fv = 0; fv <= nyl; fv ++) +				blockwrite(out, aa[5 + fv * xw * 4], xw); + +			putimage(100, 0, pic[n][1], 0); +			getimage(100, 0, 100 + a.xl, a.yl, aa); +			putimage(100, 100, aa, 4); +			/*   for ff:=1 to 4 do        { actually 2 to 5, but it doesn't matter here } +			    for fv:=0 to nyl do*/ +			/*   for ff:=5 to size-2 do +			    blockwrite(out,aa[ff],1);*/ +			blockwrite(out, aa[5], a.size - 6); +		} +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - setup(); - save(); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	setup(); +	save(); - blockwrite(out,trip5foot,50); - close(out); -return EXIT_SUCCESS; +	blockwrite(out, trip5foot, 50); +	close(out); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/tripoop.cpp b/engines/avalanche/tripoop.cpp index 0edd926628..2fe8f5f4cb 100644 --- a/engines/avalanche/tripoop.cpp +++ b/engines/avalanche/tripoop.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 @@ -39,280 +39,344 @@ const integer left = 3;  const integer numtr = 1; /* current max no. of sprites */  struct adxtype { -           varying_string<12> name; /* name of character */ -           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 */ +	varying_string<12> name; /* name of character */ +	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 */  };  class triptype {  public: -            adxtype a; /* vital statistics */ -            byte face,step; -            integer x,y; /* current xy coords */ -            integer ox,oy; /* last xy coords */ -            integer tax,tay; /* "behind" taken at... */ -            shortint ix,iy; /* amount to move sprite by, each step */ -            matrix<1,24,0,1,pointer> pic;     /* the pictures themselves */ -            boolean quick,visible,homing; -            pointer behind; /* what's behind you */ -            integer hx,hy; /* homing x & y coords */ - -            triptype* init(byte spritenum);   /* loads & sets up the sprite */ -            void original();    /* just sets Quick to false */ -            void andexor();    /* drops sprite onto screen 1 */ -            void turn(byte whichway);      /* turns him round */ -            void appear(integer wx,integer wy, byte wf); /* switches him on */ -            void walk();    /* prepares for do_it, andexor, etc. */ -            void do_it();    /* Actually copies the picture over */ -            void getback();    /* gets background before sprite is drawn */ -            void putback();    /* ...and wipes sprite from screen 1 */ -            void walkto(integer xx,integer yy); /* home in on a point */ -            void stophoming();    /* self-explanatory */ -            void homestep();    /* calculates ix & iy for one homing step */ -            void speed(shortint xx,shortint yy); /* sets ix & iy, non-homing, etc */ -            void halt();    /* Stops the sprite from moving */ +	adxtype a; /* vital statistics */ +	byte face, step; +	integer x, y; /* current xy coords */ +	integer ox, oy; /* last xy coords */ +	integer tax, tay; /* "behind" taken at... */ +	shortint ix, iy; /* amount to move sprite by, each step */ +	matrix<1, 24, 0, 1, pointer> pic; /* the pictures themselves */ +	boolean quick, visible, homing; +	pointer behind; /* what's behind you */ +	integer hx, hy; /* homing x & y coords */ + +	triptype *init(byte spritenum);   /* loads & sets up the sprite */ +	void original();    /* just sets Quick to false */ +	void andexor();    /* drops sprite onto screen 1 */ +	void turn(byte whichway);      /* turns him round */ +	void appear(integer wx, integer wy, byte wf); /* switches him on */ +	void walk();    /* prepares for do_it, andexor, etc. */ +	void do_it();    /* Actually copies the picture over */ +	void getback();    /* gets background before sprite is drawn */ +	void putback();    /* ...and wipes sprite from screen 1 */ +	void walkto(integer xx, integer yy); /* home in on a point */ +	void stophoming();    /* self-explanatory */ +	void homestep();    /* calculates ix & iy for one homing step */ +	void speed(shortint xx, shortint yy); /* sets ix & iy, non-homing, etc */ +	void halt();    /* Stops the sprite from moving */  }; -integer gd,gm; -array<1,1,triptype> tr; +integer gd, gm; +array<1, 1, triptype> tr; -void copier(integer x1,integer y1,integer x2,integer y2,integer x3,integer y3,integer x4,integer y4); +void copier(integer x1, integer y1, integer x2, integer y2, integer x3, integer y3, integer x4, integer y4); -static boolean dropin(integer xc,integer yc,integer x1,integer y1,integer x2,integer y2) +static boolean dropin(integer xc, integer yc, integer x1, integer y1, integer x2, integer y2)  /* Dropin returns True if the point xc,yc falls within the 1-2 rectangle. */ -{boolean dropin_result; -; - dropin_result=((xc>=x1) && (xc<=x2) && (yc>=y1) && (yc<=y2)); -return dropin_result; +{ +	boolean dropin_result; +	; +	dropin_result = ((xc >= x1) && (xc <= x2) && (yc >= y1) && (yc <= y2)); +	return dropin_result;  } -static void transfer(integer x1,integer y1,integer x2,integer y2) -{ -    pointer p,q; word s; -; - s=imagesize(x1,y1,x2,y2); setfillstyle(1,0); - mark(q); getmem(p,s); - setactivepage(1); getimage(x1,y1,x2,y2,p); - setactivepage(0); putimage(x1,y1,p,copyput); - setactivepage(1); release(q); +static void transfer(integer x1, integer y1, integer x2, integer y2) { +	pointer p, q; +	word s; +	; +	s = imagesize(x1, y1, x2, y2); +	setfillstyle(1, 0); +	mark(q); +	getmem(p, s); +	setactivepage(1); +	getimage(x1, y1, x2, y2, p); +	setactivepage(0); +	putimage(x1, y1, p, copyput); +	setactivepage(1); +	release(q);  } -static integer lesser(integer a,integer b) -{integer lesser_result; -; - if (a<b)  lesser_result=a; else lesser_result=b; -return lesser_result; +static integer lesser(integer a, integer b) { +	integer lesser_result; +	; +	if (a < b)  lesser_result = a; +	else lesser_result = b; +	return lesser_result;  } -static integer greater(integer a,integer b) -{integer greater_result; -; - if (a>b)  greater_result=a; else greater_result=b; -return greater_result; +static integer greater(integer a, integer b) { +	integer greater_result; +	; +	if (a > b)  greater_result = a; +	else greater_result = b; +	return greater_result;  } -void copier(integer x1,integer y1,integer x2,integer y2,integer x3,integer y3,integer x4,integer y4) - -{; - if (dropin(x3,y3,x1,y1,x2,y2) - || dropin(x3,y4,x1,y1,x2,y2) - || dropin(x4,y3,x1,y1,x2,y2) - || dropin(x4,y4,x1,y1,x2,y2))  - {;     /* Overlaps */ -  transfer(lesser(x1,x3),lesser(y1,y3),greater(x2,x4),greater(y2,y4)); - } else - {;     /* Doesn't overlap- copy both of them seperately */ -  transfer(x3,y3,x4,y4); /* backwards- why not...? */ -  transfer(x1,y1,x2,y2); - } -} +void copier(integer x1, integer y1, integer x2, integer y2, integer x3, integer y3, integer x4, integer y4) -void setup()  { -    integer gd,gm; -; - gd=3; gm=0; initgraph(gd,gm,""); - for( gd=0; gd <= 1; gd ++) - {; -  setactivepage(gd); -  setfillstyle(9,1); bar(0,0,640,200); - } - for( gm=1; gm <= numtr; gm ++) tr[gm].original(); +	; +	if (dropin(x3, y3, x1, y1, x2, y2) +	        || dropin(x3, y4, x1, y1, x2, y2) +	        || dropin(x4, y3, x1, y1, x2, y2) +	        || dropin(x4, y4, x1, y1, x2, y2)) { +		;     /* Overlaps */ +		transfer(lesser(x1, x3), lesser(y1, y3), greater(x2, x4), greater(y2, y4)); +	} else { +		;     /* Doesn't overlap- copy both of them seperately */ +		transfer(x3, y3, x4, y4); /* backwards- why not...? */ +		transfer(x1, y1, x2, y2); +	}  } -triptype* triptype::init(byte spritenum) -{ - integer gd,gm; word s; untyped_file f; varying_string<2> xx; pointer p,q; word bigsize; - byte sort,n; -; - str(spritenum,xx); assign(f,string("v:sprite")+xx+".avd"); - reset(f,1); seek(f,59); - blockread(f,a,sizeof(a)); blockread(f,bigsize,2); - setvisualpage(3); setactivepage(3); - for( sort=0; sort <= 1; sort ++) - {; -  mark(q); getmem(p,bigsize); -  blockread(f,p,bigsize); -  putimage(0,0,p,0); release(q); n=1; -  { adxtype& with = a;  -   for( gm=0; gm <= (with.num / with.seq)-1; gm ++) /* directions */ -    for( gd=0; gd <= with.seq-1; gd ++) /* steps */ -    {; -     getmem(pic[n][sort],a.size); /* grab the memory */ -     getimage((gm / 2)*(with.xl*6)+gd*with.xl,(gm % 2)*with.yl, -       (gm / 2)*(with.xl*6)+gd*with.xl+with.xl-1,(gm % 2)*with.yl+with.yl-1, -       pic[n][sort]); /* grab the pic */ -     putimage((gm / 2)*(with.xl*6)+gd*with.xl,(gm % 2)*with.yl, -       pic[n][sort],notput); /* test the pic */ -     n += 1; -   }} - } - close(f); setactivepage(0); setvisualpage(0); - x=0; y=0; quick=true; visible=false; getmem(behind,a.size); - homing=false; ix=0; iy=0; -return this; +void setup() { +	integer gd, gm; +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, ""); +	for (gd = 0; gd <= 1; gd ++) { +		; +		setactivepage(gd); +		setfillstyle(9, 1); +		bar(0, 0, 640, 200); +	} +	for (gm = 1; gm <= numtr; gm ++) tr[gm].original();  } -void triptype::original() -{; - quick=false; +triptype *triptype::init(byte spritenum) { +	integer gd, gm; +	word s; +	untyped_file f; +	varying_string<2> xx; +	pointer p, q; +	word bigsize; +	byte sort, n; +	; +	str(spritenum, xx); +	assign(f, string("v:sprite") + xx + ".avd"); +	reset(f, 1); +	seek(f, 59); +	blockread(f, a, sizeof(a)); +	blockread(f, bigsize, 2); +	setvisualpage(3); +	setactivepage(3); +	for (sort = 0; sort <= 1; sort ++) { +		; +		mark(q); +		getmem(p, bigsize); +		blockread(f, p, bigsize); +		putimage(0, 0, p, 0); +		release(q); +		n = 1; +		{ +			adxtype &with = a; +			for (gm = 0; gm <= (with.num / with.seq) - 1; gm ++) /* directions */ +				for (gd = 0; gd <= with.seq - 1; gd ++) { /* steps */ +					; +					getmem(pic[n][sort], a.size); /* grab the memory */ +					getimage((gm / 2) * (with.xl * 6) + gd * with.xl, (gm % 2)*with.yl, +					         (gm / 2) * (with.xl * 6) + gd * with.xl + with.xl - 1, (gm % 2)*with.yl + with.yl - 1, +					         pic[n][sort]); /* grab the pic */ +					putimage((gm / 2) * (with.xl * 6) + gd * with.xl, (gm % 2)*with.yl, +					         pic[n][sort], notput); /* test the pic */ +					n += 1; +				} +		} +	} +	close(f); +	setactivepage(0); +	setvisualpage(0); +	x = 0; +	y = 0; +	quick = true; +	visible = false; +	getmem(behind, a.size); +	homing = false; +	ix = 0; +	iy = 0; +	return this;  } -void triptype::getback() -{; - tax=x; tay=y; - getimage(x,y,x+a.xl,y+a.yl,behind); +void triptype::original() { +	; +	quick = false;  } -void triptype::andexor() -{ -    byte picnum; /* Picnum, Picnic, what ye heck */ -; - picnum=face*a.seq+step+1; - putimage(x,y,pic[picnum][0],andput); - putimage(x,y,pic[picnum][1],xorput); +void triptype::getback() { +	; +	tax = x; +	tay = y; +	getimage(x, y, x + a.xl, y + a.yl, behind);  } -void triptype::turn(byte whichway) -{; - face=whichway; step=0; +void triptype::andexor() { +	byte picnum; /* Picnum, Picnic, what ye heck */ +	; +	picnum = face * a.seq + step + 1; +	putimage(x, y, pic[picnum][0], andput); +	putimage(x, y, pic[picnum][1], xorput);  } -void triptype::appear(integer wx,integer wy, byte wf) -{; - x=wx; y=wy; ox=wx; oy=wy; turn(wf); visible=true; +void triptype::turn(byte whichway) { +	; +	face = whichway; +	step = 0;  } -void triptype::walk() -{; - ox=x; oy=y; - if (homing)  homestep(); - x=x+ix; y=y+iy; - step += 1; if (step==a.seq)  step=0; getback(); +void triptype::appear(integer wx, integer wy, byte wf) { +	; +	x = wx; +	y = wy; +	ox = wx; +	oy = wy; +	turn(wf); +	visible = true;  } -void triptype::do_it() -{; - copier(ox,oy,ox+a.xl,oy+a.yl,x,y,x+a.xl,y+a.yl); +void triptype::walk() { +	; +	ox = x; +	oy = y; +	if (homing)  homestep(); +	x = x + ix; +	y = y + iy; +	step += 1; +	if (step == a.seq)  step = 0; +	getback();  } -void triptype::putback() -{; - putimage(tax,tay,behind,0); +void triptype::do_it() { +	; +	copier(ox, oy, ox + a.xl, oy + a.yl, x, y, x + a.xl, y + a.yl);  } -void triptype::walkto(integer xx,integer yy) -{; - speed(xx-x,yy-y); hx=xx; hy=yy; homing=true; +void triptype::putback() { +	; +	putimage(tax, tay, behind, 0);  } -void triptype::stophoming() -{; - homing=false; +void triptype::walkto(integer xx, integer yy) { +	; +	speed(xx - x, yy - y); +	hx = xx; +	hy = yy; +	homing = true;  } -void triptype::homestep() -{ -    integer temp; -; - if ((hx==x) && (hy==y))  - {;     /* touching the target */ -  homing=false; return; - } - ix=0; iy=0; - if (hy!=y)  - {; -  temp=hy-y; if (temp>4)  iy=4; else if (temp<-4)  iy=-4; else iy=temp; - } - if (hx!=x)  - {; -  temp=hx-x; if (temp>4)  ix=4; else if (temp<-4)  ix=-4; else ix=temp; - } +void triptype::stophoming() { +	; +	homing = false;  } -void triptype::speed(shortint xx,shortint yy) -{; - ix=xx; iy=yy; - if ((ix==0) && (iy==0))  return; /* no movement */ - if (ix==0)  - {;     /* No horz movement */ -  if (iy<0)  turn(up); else turn(down); - } else - {; -  if (ix<0)  turn(left); else turn(right); - } +void triptype::homestep() { +	integer temp; +	; +	if ((hx == x) && (hy == y)) { +		;     /* touching the target */ +		homing = false; +		return; +	} +	ix = 0; +	iy = 0; +	if (hy != y) { +		; +		temp = hy - y; +		if (temp > 4)  iy = 4; +		else if (temp < -4)  iy = -4; +		else iy = temp; +	} +	if (hx != x) { +		; +		temp = hx - x; +		if (temp > 4)  ix = 4; +		else if (temp < -4)  ix = -4; +		else ix = temp; +	}  } -void triptype::halt() -{; - ix=0; iy=0; homing=false; +void triptype::speed(shortint xx, shortint yy) { +	; +	ix = xx; +	iy = yy; +	if ((ix == 0) && (iy == 0))  return; /* no movement */ +	if (ix == 0) { +		;     /* No horz movement */ +		if (iy < 0)  turn(up); +		else turn(down); +	} else { +		; +		if (ix < 0)  turn(left); +		else turn(right); +	}  } -void trip() -{ -    byte fv; -; - for( fv=1; fv <= numtr; fv ++) -  { -  triptype& with = tr[fv];  -  ; -   walk(); -   if (with.quick && with.visible)  andexor(); -   do_it(); -   putback(); -  } +void triptype::halt() { +	; +	ix = 0; +	iy = 0; +	homing = false; +} + +void trip() { +	byte fv; +	; +	for (fv = 1; fv <= numtr; fv ++) { +		triptype &with = tr[fv]; +		; +		walk(); +		if (with.quick && with.visible)  andexor(); +		do_it(); +		putback(); +	}  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - setup(); - { - triptype& with = tr[1];  - ; -  init(1); -  appear(600,100,left); -  do { -   /* -   speed(-5,0); repeat trip until keypressed or (x=  0); -   speed( 5,0); repeat trip until keypressed or (x=600); -   */ -   walkto( 10, 10); do { trip(); } while (!(keypressed() || ! with.homing)); -   walkto( 70,150); do { trip(); } while (!(keypressed() || ! with.homing)); -   walkto(600, 77); do { trip(); } while (!(keypressed() || ! with.homing)); -  } while (!keypressed()); - } -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	setup(); +	{ +		triptype &with = tr[1]; +		; +		init(1); +		appear(600, 100, left); +		do { +			/* +			speed(-5,0); repeat trip until keypressed or (x=  0); +			speed( 5,0); repeat trip until keypressed or (x=600); +			*/ +			walkto(10, 10); +			do { +				trip(); +			} while (!(keypressed() || ! with.homing)); +			walkto(70, 150); +			do { +				trip(); +			} while (!(keypressed() || ! with.homing)); +			walkto(600, 77); +			do { +				trip(); +			} while (!(keypressed() || ! with.homing)); +		} while (!keypressed()); +	} +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/ttmenuxf.cpp b/engines/avalanche/ttmenuxf.cpp index 536ebcdccc..1a10794940 100644 --- a/engines/avalanche/ttmenuxf.cpp +++ b/engines/avalanche/ttmenuxf.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 @@ -31,110 +31,141 @@  namespace Avalanche { -integer gd,gm; -word s; pointer p; +integer gd, gm; +word s; +pointer p;  file<byte> f;  byte bit; -void load()     /* Load2, actually */ -{ - byte a0;  /*absolute $A000:800;*/ - byte a1;  /*absolute $A000:17184;*/ - byte bit; - untyped_file f; varying_string<2> xx; - boolean was_virtual; - - assign(f,"v:ttmenu.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - bit=getpixel(0,0); +void load() {   /* Load2, actually */ +	byte a0;  /*absolute $A000:800;*/ +	byte a1;  /*absolute $A000:17184;*/ +	byte bit; +	untyped_file f; +	varying_string<2> xx; +	boolean was_virtual; + +	assign(f, "v:ttmenu.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); +	bit = getpixel(0, 0);  } -void finder() -{ -    char r; integer x,y; -; - setfillstyle(0,0); setcolor(14); - x=320; y=100; setwritemode(xorput); - do { -  bar(0,0,200,10); -  outtextxy(0,0,strf(x)+','+strf(y)); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  do {; } while (!keypressed()); -  line(x-20,y,x+20,y); line(x,y-20,x,y+20); -  switch (readkey()) { -   case '\15': return; break; -   case '8': y -= 10; break; -   case '4': x -= 10; break; -   case '6': x += 10; break; -   case '2': y += 10; break; -    case '\0': switch (readkey()) { -         case cup: y -= 1; break; -         case cdown: y += 1; break; -         case cleft: x -= 1; break; -         case cright: x += 1; break; -        } -        break; -  } - } while (!false); +void finder() { +	char r; +	integer x, y; +	; +	setfillstyle(0, 0); +	setcolor(14); +	x = 320; +	y = 100; +	setwritemode(xorput); +	do { +		bar(0, 0, 200, 10); +		outtextxy(0, 0, strf(x) + ',' + strf(y)); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		do { +			; +		} while (!keypressed()); +		line(x - 20, y, x + 20, y); +		line(x, y - 20, x, y + 20); +		switch (readkey()) { +		case '\15': +			return; +			break; +		case '8': +			y -= 10; +			break; +		case '4': +			x -= 10; +			break; +		case '6': +			x += 10; +			break; +		case '2': +			y += 10; +			break; +		case '\0': +			switch (readkey()) { +			case cup: +				y -= 1; +				break; +			case cdown: +				y += 1; +				break; +			case cleft: +				x -= 1; +				break; +			case cright: +				x += 1; +				break; +			} +			break; +		} +	} while (!false);  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - gd=3; gm=1; initgraph(gd,gm,""); - load(); - finder(); - s=imagesize(342,21,407,119); - getmem(p,s); - getimage(342,21,407,119,p); - putimage(342,21,p,4); - input >> NL; - putimage(264,120,p,0); - input >> NL; - freemem(p,s); - - s=imagesize(264,12,329,217); - getmem(p,s); - getimage(264,21,329,218,p); - putimage(264,21,p,4); - putimage(0,0,p,0); - freemem(p,s); - input >> NL; - - s=imagesize(180,103,188,135); - getmem(p,s); - getimage(180,103,188,135,p); - putimage(0,200,p,0); - input >> NL; - - assign(f,"v:menu.avd"); - rewrite(f); - - for( bit=0; bit <= 3; bit ++) - { -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( gd=0; gd <= 196; gd ++) -   for( gm=0; gm <= 8; gm ++) -   { -    f << mem[0xa000*gd*80+gm]; -    mem[0xa000*gd*80+gm]=~ mem[0xa000*gd*80+gm]; -   } - -  for( gd=200; gd <= 232; gd ++) -  { -   f << mem[0xa000*gd*80]; -   mem[0xa000*gd*80]=~ mem[0xa000*gd*80]; -  } - } - - close(f); - return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	gd = 3; +	gm = 1; +	initgraph(gd, gm, ""); +	load(); +	finder(); +	s = imagesize(342, 21, 407, 119); +	getmem(p, s); +	getimage(342, 21, 407, 119, p); +	putimage(342, 21, p, 4); +	input >> NL; +	putimage(264, 120, p, 0); +	input >> NL; +	freemem(p, s); + +	s = imagesize(264, 12, 329, 217); +	getmem(p, s); +	getimage(264, 21, 329, 218, p); +	putimage(264, 21, p, 4); +	putimage(0, 0, p, 0); +	freemem(p, s); +	input >> NL; + +	s = imagesize(180, 103, 188, 135); +	getmem(p, s); +	getimage(180, 103, 188, 135, p); +	putimage(0, 200, p, 0); +	input >> NL; + +	assign(f, "v:menu.avd"); +	rewrite(f); + +	for (bit = 0; bit <= 3; bit ++) { +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (gd = 0; gd <= 196; gd ++) +			for (gm = 0; gm <= 8; gm ++) { +				f << mem[0xa000 * gd * 80 + gm]; +				mem[0xa000 * gd * 80 + gm] = ~ mem[0xa000 * gd * 80 + gm]; +			} + +		for (gd = 200; gd <= 232; gd ++) { +			f << mem[0xa000 * gd * 80]; +			mem[0xa000 * gd * 80] = ~ mem[0xa000 * gd * 80]; +		} +	} + +	close(f); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/unsquish.cpp b/engines/avalanche/unsquish.cpp index e0ede8e35d..63d2562f8b 100644 --- a/engines/avalanche/unsquish.cpp +++ b/engines/avalanche/unsquish.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 @@ -30,53 +30,62 @@  namespace Avalanche { -typedef array<1,50000,byte> buffertype; +typedef array<1, 50000, byte> buffertype; -integer gd,gm; +integer gd, gm;  varying_string<29> describe;  byte method;  shortint bit;  word offset;  byte a0; /*absolute $A000:800;*/ -array<1,12080,byte> a7;     /*absolute $A000:800;*/ -buffertype* buffer; +array<1, 12080, byte> a7;   /*absolute $A000:800;*/ +buffertype *buffer;  word bufsize; -void putup(byte what) -{; - if (offset>12080)  - {; -  bit += 1; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  offset=1; - } - - a7[offset]=what; - offset += 1; +void putup(byte what) { +	; +	if (offset > 12080) { +		; +		bit += 1; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		offset = 1; +	} + +	a7[offset] = what; +	offset += 1;  }  void load_uncomp(string xx)       /* Load2, actually */  /* a1:byte absolute $A000:17184;*/  { - byte this_; - untyped_file f; - word place; -; - assign(f,string("v:place")+xx+".avd"); reset(f,1); seek(f,146); - blockread(f,describe,30); blockread(f,method,1); - bufsize=filesize(f)-177; blockread(f,*buffer,bufsize); - close(f); - - bit=-1; offset=12081; place=1; - - while (place<=bufsize)  - {; -  this_=(*buffer)[place]; -  place += 1; -  putup(this_); - } - - output << method << " : \"" << describe << '"' << NL; +	byte this_; +	untyped_file f; +	word place; +	; +	assign(f, string("v:place") + xx + ".avd"); +	reset(f, 1); +	seek(f, 146); +	blockread(f, describe, 30); +	blockread(f, method, 1); +	bufsize = filesize(f) - 177; +	blockread(f, *buffer, bufsize); +	close(f); + +	bit = -1; +	offset = 12081; +	place = 1; + +	while (place <= bufsize) { +		; +		this_ = (*buffer)[place]; +		place += 1; +		putup(this_); +	} + +	output << method << " : \"" << describe << '"' << NL;  }  void load_comp(string xx); @@ -92,33 +101,33 @@ const integer maxstack = 4096   /* Decompression stack size  */; -                                /* One node in parsing table.             */ +/* One node in parsing table.             */  struct string_table_entry { -                        boolean unused      /* Is this node *NOT* used yet?*/; -                        integer prevchar    /* Code for preceding string   */; -                        integer follchar    /* Code for current character  */; -                        integer next        /* Next dupl in collision list */; +	boolean unused      /* Is this node *NOT* used yet?*/; +	integer prevchar    /* Code for preceding string   */; +	integer follchar    /* Code for current character  */; +	integer next        /* Next dupl in collision list */;  }; -typedef array<0,maxtab,string_table_entry> sttype; +typedef array<0, maxtab, string_table_entry> sttype; -                                             /* String table */ +/* String table */ -static sttype* string_table; +static sttype *string_table;  static integer table_used                 /* # string table entries used */;  static byte input_code                    /* Input compressed code       */; -static boolean inempty,popempty; +static boolean inempty, popempty; -                                   /* Decompression stack       */ +/* Decompression stack       */ -static array<1,maxstack,byte> stack; +static array<1, maxstack, byte> stack;  static integer stack_pointer    /* Decompression stack depth */; @@ -126,92 +135,92 @@ static integer stack_pointer    /* Decompression stack depth */;  static word place; -static integer get_hash_code( integer& prevc, integer& follc ) +static integer get_hash_code(integer &prevc, integer &follc)  { -   integer index; -   integer index2; +	integer index; +	integer index2; -      /* Get_Hash_Code */ -                                   /* Get initial index using hashing */ +	/* Get_Hash_Code */ +	/* Get initial index using hashing */ -   integer get_hash_code_result; -   index = ( ( prevc << 5 ) ^ follc ) & maxtab; +	integer get_hash_code_result; +	index = ((prevc << 5) ^ follc) & maxtab; -                                   /* If entry not already used, return */ -                                   /* its index as hash code for <w>C.  */ +	/* If entry not already used, return */ +	/* its index as hash code for <w>C.  */ -   if ( (*string_table)[index].unused )  -      get_hash_code_result = index; -   else -                                   /* If entry already used, search to  */ -                                   /* end of list of hash collision     */ -                                   /* entries for this hash code.       */ -                                   /* Do linear probe to find an        */ -                                   /* available slot.                   */ -      { +	if ((*string_table)[index].unused) +		get_hash_code_result = index; +	else +		/* If entry already used, search to  */ +		/* end of list of hash collision     */ +		/* entries for this hash code.       */ +		/* Do linear probe to find an        */ +		/* available slot.                   */ +	{ -                                   /* Skip to end of collision list ... */ +		/* Skip to end of collision list ... */ -         while ( (*string_table)[index].next != end_list )  -            index = (*string_table)[index].next; +		while ((*string_table)[index].next != end_list) +			index = (*string_table)[index].next; -                                   /* Begin linear probe down a bit from  */ -                                   /* last entry in collision list ...    */ +		/* Begin linear probe down a bit from  */ +		/* last entry in collision list ...    */ -         index2 = ( index + 101 ) & maxtab; +		index2 = (index + 101) & maxtab; -                                   /* Look for unused entry using linear  */ -                                   /* probing ...                         */ +		/* Look for unused entry using linear  */ +		/* probing ...                         */ -         while ( ! (*string_table)[index2].unused )  -            index2 = succ(integer, index2 ) & maxtab; +		while (!(*string_table)[index2].unused) +			index2 = succ(integer, index2) & maxtab; -                                   /* Point prior end of collision list   */ -                                   /* to this new node.                   */ +		/* Point prior end of collision list   */ +		/* to this new node.                   */ -         (*string_table)[index].next = index2; +		(*string_table)[index].next = index2; -                                   /* Return hash code for <w>C           */ +		/* Return hash code for <w>C           */ -         get_hash_code_result          = index2; +		get_hash_code_result          = index2; -      } +	} -   return get_hash_code_result; +	return get_hash_code_result;  }     /* Get_Hash_Code */ -       /*--------------------------------------------------------------------------*/ -       /*          Make_Table_Entry --- Enter <w>C string in string table          */ -       /*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ +/*          Make_Table_Entry --- Enter <w>C string in string table          */ +/*--------------------------------------------------------------------------*/ -static void make_table_entry( integer& prevc, integer& follc ) +static void make_table_entry(integer &prevc, integer &follc) -{     /* Make_Table_Entry */ -                                   /* Only enter string if there is room left */ - -   if ( table_used <= maxtab )  -      { -         { -               string_table_entry& with = (*string_table)[ get_hash_code( prevc , follc ) ];  - -               with.unused   = false; -               with.next     = end_list; -               with.prevchar = prevc; -               with.follchar = follc; -         } -                                   /* Increment count of items used */ - -         table_used += 1; -/* -                IF ( Table_Used > ( MaxTab + 1 ) ) THEN -                   BEGIN -                      WRITELN('Hash table full.'); -                   END; -       */ -      } +{ +	/* Make_Table_Entry */ +	/* Only enter string if there is room left */ + +	if (table_used <= maxtab) { +		{ +			string_table_entry &with = (*string_table)[ get_hash_code(prevc , follc) ]; + +			with.unused   = false; +			with.next     = end_list; +			with.prevchar = prevc; +			with.follchar = follc; +		} +		/* Increment count of items used */ + +		table_used += 1; +		/* +		                IF ( Table_Used > ( MaxTab + 1 ) ) THEN +		                   BEGIN +		                      WRITELN('Hash table full.'); +		                   END; +		       */ +	}  }     /* Make_Table_Entry */ @@ -221,330 +230,332 @@ static void firstentries()  /* This is just a fast version of the above, when PrevC = No_Prev. TT. */  { -    integer i,j; +	integer i, j; -  /* There MUST be room- we've only just started! */ +	/* There MUST be room- we've only just started! */ -  j=no_prev; +	j = no_prev; -  for( i=0; i <= 255; i ++) -   { -    string_table_entry& with = (*string_table)[ ((no_prev << 5 ) ^ i) & maxtab];  +	for (i = 0; i <= 255; i ++) { +		string_table_entry &with = (*string_table)[((no_prev << 5) ^ i) & maxtab]; -    with.unused   = false; -    with.next     = end_list; -    with.prevchar = no_prev; -    with.follchar = i; -   } +		with.unused   = false; +		with.next     = end_list; +		with.prevchar = no_prev; +		with.follchar = i; +	} -  table_used += 256;      /* Increment count of items used */ +	table_used += 256;      /* Increment count of items used */  } -       /*--------------------------------------------------------------------------*/ -       /*            Initialize_String_Table --- Initialize string table           */ -       /*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ +/*            Initialize_String_Table --- Initialize string table           */ +/*--------------------------------------------------------------------------*/  static void initialize_string_table()  { -   integer i; +	integer i; -      /* Initialize_String_Table */ +	/* Initialize_String_Table */ -                                   /* No entries used in table yet */ -   table_used  = 0; +	/* No entries used in table yet */ +	table_used  = 0; - fillchar(*string_table,(maxtab+1)*sizeof((*string_table)[1]),'\377'); -                                   /* Enter all single characters into */ -                                   /* table                            */ - firstentries(); +	fillchar(*string_table, (maxtab + 1)*sizeof((*string_table)[1]), '\377'); +	/* Enter all single characters into */ +	/* table                            */ +	firstentries();  }     /* Initialize_String_Table */ -       /*--------------------------------------------------------------------------*/ -       /*            Lookup_String --- Look for string <w>C in string table        */ -       /*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ +/*            Lookup_String --- Look for string <w>C in string table        */ +/*--------------------------------------------------------------------------*/ -static integer lookup_string( integer prevc, integer follc ) +static integer lookup_string(integer prevc, integer follc)  { -   integer index; -   integer index2; -   boolean found; +	integer index; +	integer index2; +	boolean found; -      /* Lookup_String */ -                                   /* Initialize index to check from hash */ +	/* Lookup_String */ +	/* Initialize index to check from hash */ -   integer lookup_string_result; -   index       = ( ( prevc << 5 ) ^ follc ) & maxtab; +	integer lookup_string_result; +	index       = ((prevc << 5) ^ follc) & maxtab; -                                   /* Assume we won't find string */ -   lookup_string_result = end_list; -                                   /* Search through list of hash collision */ -                                   /* entries for one that matches <w>C     */ -   do { +	/* Assume we won't find string */ +	lookup_string_result = end_list; +	/* Search through list of hash collision */ +	/* entries for one that matches <w>C     */ +	do { -      found = ( (*string_table)[index].prevchar == prevc ) && -               ( (*string_table)[index].follchar == follc ); +		found = ((*string_table)[index].prevchar == prevc) && +		        ((*string_table)[index].follchar == follc); -      if ( ! found )  -         index = (*string_table)[index].next; +		if (! found) +			index = (*string_table)[index].next; -   } while (!(found || ( index == end_list ))); +	} while (!(found || (index == end_list))); -                                   /* Return index if <w>C found in table. */ -   if (found)  -      lookup_string_result = index; +	/* Return index if <w>C found in table. */ +	if (found) +		lookup_string_result = index; -   return lookup_string_result; +	return lookup_string_result;  }     /* Lookup_String */ -       /*--------------------------------------------------------------------------*/ -       /*                  Push --- Push character onto stack                      */ -       /*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ +/*                  Push --- Push character onto stack                      */ +/*--------------------------------------------------------------------------*/ -static void push( byte c) +static void push(byte c) -{     /* Push */ +{ +	/* Push */ -  stack_pointer += 1; -  stack[ stack_pointer ] = c; +	stack_pointer += 1; +	stack[ stack_pointer ] = c; -  if ( stack_pointer >= maxstack )  -     { -        output << "Stack overflow!" << NL; -        exit(0); -     } +	if (stack_pointer >= maxstack) { +		output << "Stack overflow!" << NL; +		exit(0); +	}  }    /* Push */ -       /*--------------------------------------------------------------------------*/ -       /*                  Pop --- Pop character from stack                        */ -       /*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ +/*                  Pop --- Pop character from stack                        */ +/*--------------------------------------------------------------------------*/ -static void pop( integer& c ) +static void pop(integer &c) -{     /* Pop */ +{ +	/* Pop */ - popempty=stack_pointer==0; +	popempty = stack_pointer == 0; -   if (! popempty)  -      { -         c = stack[stack_pointer]; -         stack_pointer -= 1; -      } +	if (! popempty) { +		c = stack[stack_pointer]; +		stack_pointer -= 1; +	}  }     /* Pop */ -       /*--------------------------------------------------------------------------*/ -       /*            Get_Code --- Get compression code from input file             */ -       /*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ +/*            Get_Code --- Get compression code from input file             */ +/*--------------------------------------------------------------------------*/ -static void get_code( integer& hash_code ) +static void get_code(integer &hash_code)  { -   byte local_buf; +	byte local_buf; -      /* Get_Code */ +	/* Get_Code */ -   if (inempty)  -      { +	if (inempty) { -         if (place>bufsize)  return; else -         {; -          local_buf=(*buffer)[place]; -          place += 1; -         } +		if (place > bufsize)  return; +		else { +			; +			local_buf = (*buffer)[place]; +			place += 1; +		} -         if (place>bufsize)  return; else -         {; -          input_code=(*buffer)[place]; -          place += 1; -         } +		if (place > bufsize)  return; +		else { +			; +			input_code = (*buffer)[place]; +			place += 1; +		} -         hash_code  = ( ( local_buf << 4  ) & 0xff0 ) + -                       ( ( (cardinal)input_code >> 4 ) & 0xf ); +		hash_code  = ((local_buf << 4) & 0xff0) + +		             (((cardinal)input_code >> 4) & 0xf); -         input_code = input_code & 0xf; -         inempty=false; +		input_code = input_code & 0xf; +		inempty = false; -      } -   else -      { +	} else { -         if (place>bufsize)  return; else -         {; -          local_buf=(*buffer)[place]; -          place += 1; -         } +		if (place > bufsize)  return; +		else { +			; +			local_buf = (*buffer)[place]; +			place += 1; +		} -         hash_code  = local_buf + ( ( input_code << 8 ) & 0xf00 ); -         inempty=true; +		hash_code  = local_buf + ((input_code << 8) & 0xf00); +		inempty = true; -      } +	}  }     /* Get_Code */ -       /*--------------------------------------------------------------------------*/ -       /*            Do_Decompression --- Perform decompression                    */ -       /*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ +/*            Do_Decompression --- Perform decompression                    */ +/*--------------------------------------------------------------------------*/  static void do_decompression()  { -   integer c                       /* Current input character */; -   integer code                    /* Current code string     */; -   integer old_code                /* Previous code string    */; -   integer fin_char                /* Final input character   */; -   integer in_code                 /* Current input code      */; -   integer last_char               /* Previous character      */; -   boolean unknown                 /* TRUE if code not found  */; -   integer temp_c                  /* Char popped off stack   */; - -      /* Do_Decompression */ - -  stack_pointer = 0;      /* Decompression stack is empty */ -  unknown       = false;  /* First string is always known */ -  get_code( old_code );   /* Get first string == Step 1   */ -  code          = old_code; - -  c=(*string_table)[code].follchar; /* Output corresponding character */ -  putup( c ); -  fin_char = c;  /* Remember this character  -- it    */ -                 /* is final character of next string */ - -  get_code( in_code ); /* Get next code  == Step 2 */ - -  while (place<=bufsize)  -     { -        code = in_code;  /* Set code to this input code */ - -        /* If code not in table, do special */ -        /* case ==> Step 3                  */ - -        if ( (*string_table)[code].unused )  -           { -              last_char = fin_char; -              code      = old_code; -              unknown   = true; -           } -                                   /* Run through code extracting single */ -                                   /* characters from code string until  */ -                                   /* no more characters can be removed. */ -                                   /* Push these onto stack.  They will  */ -                                   /* be entered in reverse order, and   */ -                                   /* will come out in forwards order    */ -                                   /* when popped off.                   */ -                                   /*                                    */ -                                   /* ==> Step 4                         */ - -        while( (*string_table)[code].prevchar != no_prev )  -           { -                 string_table_entry& with = (*string_table)[code];  - -                 push( with.follchar ); -                 code = with.prevchar; -           } -                                   /* We now have the first character in */ -                                   /* the string.                        */ - -        fin_char = (*string_table)[code].follchar; - -                                   /* Output first character  ==> Step 5   */ -        putup( fin_char ); -                                   /* While the stack is not empty, remove */ -                                   /* and output all characters from stack */ -                                   /* which are rest of characters in the  */ -                                   /* string.                              */ -                                   /*                                      */ -                                   /* ==> Step 6                           */ -        pop( temp_c ); - -        while (! popempty)  -           { -              putup( temp_c ); -              pop( temp_c ); -           } -                                   /* If code isn't known, output the      */ -                                   /* follower character of last character */ -                                   /* of string.                           */ -        if (unknown)  -           { -              fin_char = last_char; -              putup( fin_char ); -              unknown  = false; -           } -                                   /* Enter code into table ==> Step 7 */ - -        make_table_entry( old_code , fin_char ); - -                                   /* Make current code the previous code */ -        old_code = in_code; - -                                   /* Get next code  == Step 2 */ -        get_code( in_code ); - -     } +	integer c                       /* Current input character */; +	integer code                    /* Current code string     */; +	integer old_code                /* Previous code string    */; +	integer fin_char                /* Final input character   */; +	integer in_code                 /* Current input code      */; +	integer last_char               /* Previous character      */; +	boolean unknown                 /* TRUE if code not found  */; +	integer temp_c                  /* Char popped off stack   */; + +	/* Do_Decompression */ + +	stack_pointer = 0;      /* Decompression stack is empty */ +	unknown       = false;  /* First string is always known */ +	get_code(old_code);     /* Get first string == Step 1   */ +	code          = old_code; + +	c = (*string_table)[code].follchar; /* Output corresponding character */ +	putup(c); +	fin_char = c;  /* Remember this character  -- it    */ +	/* is final character of next string */ + +	get_code(in_code);   /* Get next code  == Step 2 */ + +	while (place <= bufsize) { +		code = in_code;  /* Set code to this input code */ + +		/* If code not in table, do special */ +		/* case ==> Step 3                  */ + +		if ((*string_table)[code].unused) { +			last_char = fin_char; +			code      = old_code; +			unknown   = true; +		} +		/* Run through code extracting single */ +		/* characters from code string until  */ +		/* no more characters can be removed. */ +		/* Push these onto stack.  They will  */ +		/* be entered in reverse order, and   */ +		/* will come out in forwards order    */ +		/* when popped off.                   */ +		/*                                    */ +		/* ==> Step 4                         */ + +		while ((*string_table)[code].prevchar != no_prev) { +			string_table_entry &with = (*string_table)[code]; + +			push(with.follchar); +			code = with.prevchar; +		} +		/* We now have the first character in */ +		/* the string.                        */ + +		fin_char = (*string_table)[code].follchar; + +		/* Output first character  ==> Step 5   */ +		putup(fin_char); +		/* While the stack is not empty, remove */ +		/* and output all characters from stack */ +		/* which are rest of characters in the  */ +		/* string.                              */ +		/*                                      */ +		/* ==> Step 6                           */ +		pop(temp_c); + +		while (! popempty) { +			putup(temp_c); +			pop(temp_c); +		} +		/* If code isn't known, output the      */ +		/* follower character of last character */ +		/* of string.                           */ +		if (unknown) { +			fin_char = last_char; +			putup(fin_char); +			unknown  = false; +		} +		/* Enter code into table ==> Step 7 */ + +		make_table_entry(old_code , fin_char); + +		/* Make current code the previous code */ +		old_code = in_code; + +		/* Get next code  == Step 2 */ +		get_code(in_code); + +	}  }     /* Do_Decompression */ -void load_comp(string xx){ +void load_comp(string xx) { -                                /* This loads in the compressed file. */ +	/* This loads in the compressed file. */ -const integer maxbuff = 8192    /* Buffer size for input and output files */; +	const integer maxbuff = 8192    /* Buffer size for input and output files */; -integer output_code                       /* Output compressed code      */; -boolean if_compressing                    /* TRUE if compressing file    */; +	integer output_code                       /* Output compressed code      */; +	boolean if_compressing                    /* TRUE if compressing file    */; -byte this_; -untyped_file f; +	byte this_; +	untyped_file f; -; -string_table = new sttype; -inempty=true; -initialize_string_table(); +	; +	string_table = new sttype; +	inempty = true; +	initialize_string_table(); -assign(f,string("v:compr")+xx+".avd"); reset(f,1); seek(f,146); -blockread(f,describe,30); blockread(f,method,1); -bufsize=filesize(f)-177; blockread(f,*buffer,bufsize); -close(f); +	assign(f, string("v:compr") + xx + ".avd"); +	reset(f, 1); +	seek(f, 146); +	blockread(f, describe, 30); +	blockread(f, method, 1); +	bufsize = filesize(f) - 177; +	blockread(f, *buffer, bufsize); +	close(f); -bit=-1; offset=12081; place=1; +	bit = -1; +	offset = 12081; +	place = 1; -do_decompression(); +	do_decompression(); -output << method << " : \"" << describe << '"' << NL; +	output << method << " : \"" << describe << '"' << NL; -delete string_table; -                         } +	delete string_table; +} -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; -gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); -buffer = new buffertype; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	buffer = new buffertype;  #ifdef uncomp -load_uncomp("21"); +	load_uncomp("21");  #else -load_comp("21"); +	load_comp("21");  #endif -delete buffer; -return EXIT_SUCCESS; +	delete buffer; +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/viewdocs.cpp b/engines/avalanche/viewdocs.cpp index 58dc7b6e35..b205474879 100644 --- a/engines/avalanche/viewdocs.cpp +++ b/engines/avalanche/viewdocs.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 @@ -32,519 +32,561 @@  namespace Avalanche { -typedef array<0,49999,byte> bigtextarray; +typedef array<0, 49999, byte> bigtextarray;  struct chaptertype { - varying_string<60> headername; - word headeroffset; +	varying_string<60> headername; +	word headeroffset;  }; -typedef array<1,1120,byte> sbtype; +typedef array<1, 1120, byte> sbtype;  const integer contsize = 29; /*number of headers in AVALOT.DOC*/  const varying_string<80> contentsheader = " -=- The contents of the Lord AVALOT D'Argent (version 1.3) documentation -=-"; -const array<0,15,byte> listpal = {{1,0,3,0,7,0,7,7,0,0,0,0,0,0,0,0}}; -const array<0,15,byte> blankpal = {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}}; +const array<0, 15, byte> listpal = {{1, 0, 3, 0, 7, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0}}; +const array<0, 15, byte> blankpal = {{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}};  const integer tabstop = 8; /*length of tab stops*/  /*NOTE: Tabs are not properly implemented. The program just interprets them*/  /*as a number of spaces.*/ -matrix<1,256, 0,15,byte> textvar,textvar8; -array<0,1500,word> posof13; -array<1,65535,byte> scvar;      /*absolute $A000:$0000;*/ -sbtype stbar,stbar2; +matrix<1, 256, 0, 15, byte> textvar, textvar8; +array<0, 1500, word> posof13; +array<1, 65535, byte> scvar;    /*absolute $A000:$0000;*/ +sbtype stbar, stbar2;  pointer dpt; -word sot,nol,bat,bab,tlab,nosl,bfseg,bfofs,useless; -bigtextarray* textmem; -boolean atsof,fast,regimode; +word sot, nol, bat, bab, tlab, nosl, bfseg, bfofs, useless; +bigtextarray *textmem; +boolean atsof, fast, regimode;  byte hol;  varying_string<80> stline; -array<1,contsize,chaptertype> contlist; +array<1, contsize, chaptertype> contlist;  integer lat; -void wipeit(longint pos, word count)       /*Like fillchar, but wraps*/ -{ -    longint wpos; +void wipeit(longint pos, word count) {     /*Like fillchar, but wraps*/ +	longint wpos; - wpos=(word)(pos); - fillchar(mem[longint(0xa000)+wpos / longint(16)*wpos % longint(16)],count,0); +	wpos = (word)(pos); +	fillchar(mem[longint(0xa000) + wpos / longint(16)*wpos % longint(16)], count, 0);  } -void wrapcopy(sbtype fromarr, longint pos)       /*Like fillchar, but wraps*/ -{ -    longint wpos; +void wrapcopy(sbtype fromarr, longint pos) {     /*Like fillchar, but wraps*/ +	longint wpos; - wpos=(word)(pos); - move(fromarr,mem[longint(0xa000)+wpos / longint(16)*wpos % longint(16)],1120); +	wpos = (word)(pos); +	move(fromarr, mem[longint(0xa000) + wpos / longint(16)*wpos % longint(16)], 1120);  } -void blankscreen()     /*blanks the screen (!)*/ -{ -    registers r; +void blankscreen() {   /*blanks the screen (!)*/ +	registers r; - r.ax=0x1002; - r.es=seg(blankpal); - r.dx=ofs(blankpal); - intr(0x10,r); +	r.ax = 0x1002; +	r.es = seg(blankpal); +	r.dx = ofs(blankpal); +	intr(0x10, r);  } -void showscreen()     /*shows the screen (!)*/ -{ -    registers r; +void showscreen() {   /*shows the screen (!)*/ +	registers r; - r.ax=0x1002; - r.es=seg(listpal); - r.dx=ofs(listpal); - intr(0x10,r); +	r.ax = 0x1002; +	r.es = seg(listpal); +	r.dx = ofs(listpal); +	intr(0x10, r);  } -void wipesb(word wheretop) -{ -    byte plane; - - for( plane=2; plane <= 3; plane ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << plane; port[0x3cf]=plane; -  fillchar(scvar[(wheretop+336)*80+1],1120,0); - } - port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=2; port[0x3cf]=1; +void wipesb(word wheretop) { +	byte plane; + +	for (plane = 2; plane <= 3; plane ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << plane; +		port[0x3cf] = plane; +		fillchar(scvar[(wheretop + 336) * 80 + 1], 1120, 0); +	} +	port[0x3c4] = 2; +	port[0x3ce] = 4; +	port[0x3c5] = 2; +	port[0x3cf] = 1;  } -void displstat(byte wipepos)       /*displays the status bar*/ -{ -    byte plane; - - port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=4; port[0x3cf]=2; - wrapcopy(stbar,(lat+336)*80); - port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=8; port[0x3cf]=3; - wrapcopy(stbar2,(lat+336)*80); - for( plane=2; plane <= 3; plane ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << plane; port[0x3cf]=plane; -  switch (wipepos) { -   case 0: wipeit((lat+335)*80-1,80); break; -   case 1: wipeit(lat*80-1,80); break; -  } - } - port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=2; port[0x3cf]=1; +void displstat(byte wipepos) {     /*displays the status bar*/ +	byte plane; + +	port[0x3c4] = 2; +	port[0x3ce] = 4; +	port[0x3c5] = 4; +	port[0x3cf] = 2; +	wrapcopy(stbar, (lat + 336) * 80); +	port[0x3c4] = 2; +	port[0x3ce] = 4; +	port[0x3c5] = 8; +	port[0x3cf] = 3; +	wrapcopy(stbar2, (lat + 336) * 80); +	for (plane = 2; plane <= 3; plane ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << plane; +		port[0x3cf] = plane; +		switch (wipepos) { +		case 0: +			wipeit((lat + 335) * 80 - 1, 80); +			break; +		case 1: +			wipeit(lat * 80 - 1, 80); +			break; +		} +	} +	port[0x3c4] = 2; +	port[0x3ce] = 4; +	port[0x3c5] = 2; +	port[0x3cf] = 1;  } -void udstat()     /*updates the status bar*/ -{ -    varying_string<3> pt; -    byte fv,fv2; - - fillchar(pt,4,'\0'); - str(round((real)((tlab-21))/(nol-21)*100),pt); - for( fv=1; fv <= 3; fv ++) -  for( fv2=0; fv2 <= 13; fv2 ++) -  {; -   stbar[fv2*80+fv+68]=~ textvar[ord(pt[fv])+1][fv2]; -   stbar2[fv2*80+fv+68]=textvar[ord(pt[fv])+1][fv2]; -  } +void udstat() {   /*updates the status bar*/ +	varying_string<3> pt; +	byte fv, fv2; + +	fillchar(pt, 4, '\0'); +	str(round((real)((tlab - 21)) / (nol - 21) * 100), pt); +	for (fv = 1; fv <= 3; fv ++) +		for (fv2 = 0; fv2 <= 13; fv2 ++) { +			; +			stbar[fv2 * 80 + fv + 68] = ~ textvar[ord(pt[fv]) + 1][fv2]; +			stbar2[fv2 * 80 + fv + 68] = textvar[ord(pt[fv]) + 1][fv2]; +		}  }  void finddocinfo()     /*finds the line breaks in AVALOT.DOC & finds the  headers by searching for '"""'*/  { -    word wv,oldwv,varpos,varpos2,contlpos; -    boolean thisaheader; -    varying_string<60> headerstring; - - thisaheader=false; - posof13[0]=65535;  /*this +2 will wrap around to 1*/ - wv=1; - oldwv=1; - varpos=1; - contlist[1].headername="Start of documentation"; - contlist[1].headeroffset=0; - contlpos=2; - while (wv<sot)  - { -  while (((*textmem)[wv]!=13) && ((*textmem)[wv]!=34) && (wv-oldwv<80))  wv += 1; -  switch ((*textmem)[wv]) { -  case 13: { -       posof13[varpos]=wv; -       varpos += 1; -       oldwv=wv+1; -       thisaheader=false; -      } -      break; -  case 34: if (((*textmem)[wv-1]==34) && ((*textmem)[wv-2]==34) && (varpos>12) -       && (thisaheader==false))  -      { -       thisaheader=true; -       headerstring[0]='\0'; -       varpos2=posof13[varpos-2]+2; -       while (((*textmem)[varpos2]==32) || ((*textmem)[varpos2]==9))  varpos2 += 1; -       while (varpos2!=posof13[varpos-1])  -       {; -        headerstring=headerstring+chr((*textmem)[varpos2]); -        varpos2 += 1; -       } -       contlist[contlpos].headername=headerstring; -       contlist[contlpos].headeroffset=varpos-2; -       contlpos += 1; -      } -      break; -    } -  wv += 1; - } - nol=varpos-2; - nosl=nol*14; +	word wv, oldwv, varpos, varpos2, contlpos; +	boolean thisaheader; +	varying_string<60> headerstring; + +	thisaheader = false; +	posof13[0] = 65535; /*this +2 will wrap around to 1*/ +	wv = 1; +	oldwv = 1; +	varpos = 1; +	contlist[1].headername = "Start of documentation"; +	contlist[1].headeroffset = 0; +	contlpos = 2; +	while (wv < sot) { +		while (((*textmem)[wv] != 13) && ((*textmem)[wv] != 34) && (wv - oldwv < 80))  wv += 1; +		switch ((*textmem)[wv]) { +		case 13: { +			posof13[varpos] = wv; +			varpos += 1; +			oldwv = wv + 1; +			thisaheader = false; +		} +		break; +		case 34: +			if (((*textmem)[wv - 1] == 34) && ((*textmem)[wv - 2] == 34) && (varpos > 12) +			        && (thisaheader == false)) { +				thisaheader = true; +				headerstring[0] = '\0'; +				varpos2 = posof13[varpos - 2] + 2; +				while (((*textmem)[varpos2] == 32) || ((*textmem)[varpos2] == 9))  varpos2 += 1; +				while (varpos2 != posof13[varpos - 1]) { +					; +					headerstring = headerstring + chr((*textmem)[varpos2]); +					varpos2 += 1; +				} +				contlist[contlpos].headername = headerstring; +				contlist[contlpos].headeroffset = varpos - 2; +				contlpos += 1; +			} +			break; +		} +		wv += 1; +	} +	nol = varpos - 2; +	nosl = nol * 14;  } -void graphmode(byte gm)       /*puts the display adaptor into a specified mode*/ -{ -    registers regs; +void graphmode(byte gm) {     /*puts the display adaptor into a specified mode*/ +	registers regs; - regs.ax=gm; - intr(0x10,regs); +	regs.ax = gm; +	intr(0x10, regs);  } -void setoffset(word where_on_screen) {;          /*assembler; {for scrolling the screen*/ -/*asm - mov bx, where_on_screen - mov dx, $03D4 - mov ah, bh - mov al, $C - out dx, ax - - mov ah, bl - inc al - out dx, ax*/ -                                     } +void setoffset(word where_on_screen) { +	;          /*assembler; {for scrolling the screen*/ +	/*asm +	 mov bx, where_on_screen +	 mov dx, $03D4 +	 mov ah, bh +	 mov al, $C +	 out dx, ax + +	 mov ah, bl +	 inc al +	 out dx, ax*/ +} -void setupsb(byte sbtype)       /*sets up the status bar in several styles*/ -{ -    integer fv; - - switch (sbtype) { -  case 1: if (regimode==false)  stline=string("Doc lister: PgUp, PgDn, Home & End to move. Esc exits. C=") -   +'\32'+"contents "+'\263'+"   % through   "; else -   stline=string("Doc lister: PgUp, PgDn, Home & End to move. Esc exits to main menu.") -   +'\263'+"   % through"; -   break; -  case 2: stline=string("Esc=to doc lister ")+'\263'+" Press the key listed next to the section you wish to jump to"; break; - } - for( fv=0; fv <= 1118; fv ++) {; -  stbar[fv+1]=~ textvar[ord(stline[fv % 80+1])+1][fv / 80]; -  stbar2[fv+1]=textvar[ord(stline[fv % 80+1])+1][fv / 80]; - } +void setupsb(byte sbtype) {     /*sets up the status bar in several styles*/ +	integer fv; + +	switch (sbtype) { +	case 1: +		if (regimode == false)  stline = string("Doc lister: PgUp, PgDn, Home & End to move. Esc exits. C=") +			                                 + '\32' + "contents " + '\263' + "   % through   "; +		else +			stline = string("Doc lister: PgUp, PgDn, Home & End to move. Esc exits to main menu.") +			         + '\263' + "   % through"; +		break; +	case 2: +		stline = string("Esc=to doc lister ") + '\263' + " Press the key listed next to the section you wish to jump to"; +		break; +	} +	for (fv = 0; fv <= 1118; fv ++) { +		; +		stbar[fv + 1] = ~ textvar[ord(stline[fv % 80 + 1]) + 1][fv / 80]; +		stbar2[fv + 1] = textvar[ord(stline[fv % 80 + 1]) + 1][fv / 80]; +	}  } -void setup()     /*sets up graphics, variables, etc.*/ -{ -    untyped_file f; -    integer fv; -    registers r; - - if ((paramstr(1)!="REGI") && (paramstr(1)!="ELMPOYTEN")) - -  { -   clrscr; -   output << "This program cannot be run on its own. Run AVALOT.EXE." << NL; -   exit(123); -  } - val(paramstr(2),bfseg,useless); - val(paramstr(3),bfofs,useless); - bfofs += 1; - atsof=true; - fast=false; - assign(f,"avalot.fnt"); - reset(f,1); - blockread(f,textvar,4096); - close(f); - assign(f,"ttsmall.fnt"); - reset(f,1); - blockread(f,textvar8,4096); - close(f); - assign(f,"avalot.doc"); - reset(f,1); - sot=filesize(f); - mark(dpt); - textmem = new bigtextarray; - blockread(f,*textmem,sot); - close(f); - finddocinfo(); - if (paramstr(1)=="REGI")  -  {; -   regimode=true; -   tlab=contlist[contsize].headeroffset+24; -   lat=contlist[contsize].headeroffset*14; -  } -  else -  {; -   lat=0; tlab=24; -   regimode=false; -  } - setupsb(1); - graphmode(16); - directvideo=false; - showscreen(); - port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=2; port[0x3cf]=1; +void setup() {   /*sets up graphics, variables, etc.*/ +	untyped_file f; +	integer fv; +	registers r; + +	if ((paramstr(1) != "REGI") && (paramstr(1) != "ELMPOYTEN")) + +	{ +		clrscr; +		output << "This program cannot be run on its own. Run AVALOT.EXE." << NL; +		exit(123); +	} +	val(paramstr(2), bfseg, useless); +	val(paramstr(3), bfofs, useless); +	bfofs += 1; +	atsof = true; +	fast = false; +	assign(f, "avalot.fnt"); +	reset(f, 1); +	blockread(f, textvar, 4096); +	close(f); +	assign(f, "ttsmall.fnt"); +	reset(f, 1); +	blockread(f, textvar8, 4096); +	close(f); +	assign(f, "avalot.doc"); +	reset(f, 1); +	sot = filesize(f); +	mark(dpt); +	textmem = new bigtextarray; +	blockread(f, *textmem, sot); +	close(f); +	finddocinfo(); +	if (paramstr(1) == "REGI") { +		; +		regimode = true; +		tlab = contlist[contsize].headeroffset + 24; +		lat = contlist[contsize].headeroffset * 14; +	} else { +		; +		lat = 0; +		tlab = 24; +		regimode = false; +	} +	setupsb(1); +	graphmode(16); +	directvideo = false; +	showscreen(); +	port[0x3c4] = 2; +	port[0x3ce] = 4; +	port[0x3c5] = 2; +	port[0x3cf] = 1;  }  void drawscreenf(integer tl)       /*draws a screen from a line forwards*/  /*N.B. tl>1*/  { -    word fv,fv2,curbyte,plane; -    byte xpos; - - blankscreen(); - wipesb(lat); - if (tl>nol-24)  tl=nol-24; - if (tl<0)  tl=0; - lat=tl*14; - for( plane=2; plane <= 3; plane ++) /*wipe sb off*/ - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << plane; port[0x3cf]=plane; -  /*fillchar(mem [$A000:((lat-1)*80) mod 65536],26800,0);*/ -  wipeit(lat*80,26800); - } - port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=2; port[0x3cf]=1; /*back to normal*/ - if (tl>0)  curbyte=posof13[tl-1]+2; else curbyte=0; - bat=curbyte; - for( fv=lat; fv <= lat+335; fv ++) - { -  fv2=curbyte; -  xpos=1; -  while (xpos<=80)  -  { -   if (fv2<posof13[tl])  -   { -    if ((*textmem)[fv2]==9)  -    { -     wipeit(fv*80+xpos,tabstop); -     xpos += tabstop; -    } else -    { -     mem[0xa000*(word)(fv*80+xpos-1)]= -      textvar[(*textmem)[fv2]+1][fv % 14]; -     xpos += 1; -    } -   } else -   { -    wipeit(fv*80+xpos-1,82-xpos); -    xpos=81; -   } -   fv2 += 1; -  } -  if (fv % 14==0)  -  { -   tl += 1; -   curbyte=posof13[tl-1]+2; -  } - } - bab=curbyte; - tlab=tl; - udstat(); - displstat(2); - setoffset((word)(lat*80)); - if (tl-23>1)  atsof=false; - showscreen(); +	word fv, fv2, curbyte, plane; +	byte xpos; + +	blankscreen(); +	wipesb(lat); +	if (tl > nol - 24)  tl = nol - 24; +	if (tl < 0)  tl = 0; +	lat = tl * 14; +	for (plane = 2; plane <= 3; plane ++) { /*wipe sb off*/ +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << plane; +		port[0x3cf] = plane; +		/*fillchar(mem [$A000:((lat-1)*80) mod 65536],26800,0);*/ +		wipeit(lat * 80, 26800); +	} +	port[0x3c4] = 2; +	port[0x3ce] = 4; +	port[0x3c5] = 2; +	port[0x3cf] = 1; /*back to normal*/ +	if (tl > 0)  curbyte = posof13[tl - 1] + 2; +	else curbyte = 0; +	bat = curbyte; +	for (fv = lat; fv <= lat + 335; fv ++) { +		fv2 = curbyte; +		xpos = 1; +		while (xpos <= 80) { +			if (fv2 < posof13[tl]) { +				if ((*textmem)[fv2] == 9) { +					wipeit(fv * 80 + xpos, tabstop); +					xpos += tabstop; +				} else { +					mem[0xa000 * (word)(fv * 80 + xpos - 1)] = +					    textvar[(*textmem)[fv2] + 1][fv % 14]; +					xpos += 1; +				} +			} else { +				wipeit(fv * 80 + xpos - 1, 82 - xpos); +				xpos = 81; +			} +			fv2 += 1; +		} +		if (fv % 14 == 0) { +			tl += 1; +			curbyte = posof13[tl - 1] + 2; +		} +	} +	bab = curbyte; +	tlab = tl; +	udstat(); +	displstat(2); +	setoffset((word)(lat * 80)); +	if (tl - 23 > 1)  atsof = false; +	showscreen();  } -void displcont()     /*displays the contents*/ -{ -    byte fv,fv2,fv3,keyon,jumppos,plane; -    word olat; -    varying_string<62> curstr; -    char rkv; - - blankscreen(); - olat=lat; lat=0; keyon=1; jumppos=0; - setoffset(0); - for( plane=1; plane <= 3; plane ++) /*wipe sb off*/ - { -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << plane; port[0x3cf]=plane; -  fillchar(scvar,26800,0); - } - port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=2; port[0x3cf]=1; /*back to normal*/ - setupsb(2); - displstat(2); - for( fv=1; fv <= 80; fv ++) -  for( fv2=0; fv2 <= 27; fv2 ++) -  { -   scvar[fv2*80+fv]=textvar[ord(contentsheader[fv-1])+1][fv2 / 2]; -  } - for( fv=1; fv <= contsize; fv ++) - { -  if (keyon<10)  curstr=strf(keyon)+". "+contlist[fv].headername; else -   curstr=string(chr(keyon+55))+". "+contlist[fv].headername; -  for( fv2=1; fv2 <= length(curstr); fv2 ++) -   for( fv3=0; fv3 <= 7; fv3 ++) -    scvar[(fv+3)*640+fv3*80+fv2]=textvar8[ord(curstr[fv2])+1][fv3]; -  keyon += 1; - } - showscreen(); - do {; } while (!keypressed()); - rkv=readkey(); - switch (rkv) { -  case RANGE_9('\61','\71'):  jumppos=ord(rkv)-48; -  break; -  case RANGE_26('\101','\132'):  jumppos=ord(rkv)-55; -  break; -  case RANGE_26('\141','\172'): jumppos=ord(rkv)-87; -  break; -  default: lat=olat; - } - if (jumppos>0)  lat=contlist[jumppos].headeroffset; - setupsb(1); - if (fast==false)  wipesb(0); - drawscreenf(lat); +void displcont() {   /*displays the contents*/ +	byte fv, fv2, fv3, keyon, jumppos, plane; +	word olat; +	varying_string<62> curstr; +	char rkv; + +	blankscreen(); +	olat = lat; +	lat = 0; +	keyon = 1; +	jumppos = 0; +	setoffset(0); +	for (plane = 1; plane <= 3; plane ++) { /*wipe sb off*/ +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << plane; +		port[0x3cf] = plane; +		fillchar(scvar, 26800, 0); +	} +	port[0x3c4] = 2; +	port[0x3ce] = 4; +	port[0x3c5] = 2; +	port[0x3cf] = 1; /*back to normal*/ +	setupsb(2); +	displstat(2); +	for (fv = 1; fv <= 80; fv ++) +		for (fv2 = 0; fv2 <= 27; fv2 ++) { +			scvar[fv2 * 80 + fv] = textvar[ord(contentsheader[fv - 1]) + 1][fv2 / 2]; +		} +	for (fv = 1; fv <= contsize; fv ++) { +		if (keyon < 10)  curstr = strf(keyon) + ". " + contlist[fv].headername; +		else +			curstr = string(chr(keyon + 55)) + ". " + contlist[fv].headername; +		for (fv2 = 1; fv2 <= length(curstr); fv2 ++) +			for (fv3 = 0; fv3 <= 7; fv3 ++) +				scvar[(fv + 3) * 640 + fv3 * 80 + fv2] = textvar8[ord(curstr[fv2]) + 1][fv3]; +		keyon += 1; +	} +	showscreen(); +	do { +		; +	} while (!keypressed()); +	rkv = readkey(); +	switch (rkv) { +	case RANGE_9('\61', '\71'): +		jumppos = ord(rkv) - 48; +		break; +	case RANGE_26('\101', '\132'): +		jumppos = ord(rkv) - 55; +		break; +	case RANGE_26('\141', '\172'): +		jumppos = ord(rkv) - 87; +		break; +	default: +		lat = olat; +	} +	if (jumppos > 0)  lat = contlist[jumppos].headeroffset; +	setupsb(1); +	if (fast == false)  wipesb(0); +	drawscreenf(lat);  } -void down()     /*scrolls the screen down one line*/ -{ -    word fv,xpos,wpos,lab; - - lat += 1; - lab=lat+335; - setoffset((word)(lat*80)); - if (lab % 14==0)  { - bat=posof13[tlab-24]+2; bab=posof13[tlab]+2; tlab += 1; udstat(); } - fv=bab; - xpos=1; - while (xpos<=80)  - { -  if (fv<posof13[tlab])  -  { -   if ((*textmem)[fv]==9)  -   { -    wipeit(lab*80+xpos-1,tabstop); -    xpos += tabstop; -   } else -   { -    wpos=(lab*80+xpos) % 65536; -    /*fillchar(mem[$A000+wpos div 16*wpos mod 16],count,0)*/ -    mem[0xa000*wpos-1]=textvar[(*textmem)[fv]+1][lab % 14]; -    xpos += 1; -   } -  } else -   { -    wipeit(lab*80+xpos-1,81-xpos); -    xpos=81; -   } -  fv += 1; - } - atsof=false; - if (fast==true)  displstat(0); +void down() {   /*scrolls the screen down one line*/ +	word fv, xpos, wpos, lab; + +	lat += 1; +	lab = lat + 335; +	setoffset((word)(lat * 80)); +	if (lab % 14 == 0)  { +		bat = posof13[tlab - 24] + 2; +		bab = posof13[tlab] + 2; +		tlab += 1; +		udstat(); +	} +	fv = bab; +	xpos = 1; +	while (xpos <= 80) { +		if (fv < posof13[tlab]) { +			if ((*textmem)[fv] == 9) { +				wipeit(lab * 80 + xpos - 1, tabstop); +				xpos += tabstop; +			} else { +				wpos = (lab * 80 + xpos) % 65536; +				/*fillchar(mem[$A000+wpos div 16*wpos mod 16],count,0)*/ +				mem[0xa000 * wpos - 1] = textvar[(*textmem)[fv] + 1][lab % 14]; +				xpos += 1; +			} +		} else { +			wipeit(lab * 80 + xpos - 1, 81 - xpos); +			xpos = 81; +		} +		fv += 1; +	} +	atsof = false; +	if (fast == true)  displstat(0);  } -void up()     /*scrolls the screen up one line*/ -{ -    word fv,xpos,wpos; - - if (lat==0)  { atsof=true; return; } - if (lat % 14==0)  -  if (tlab>24)  -  { -   tlab -= 1; bat=posof13[tlab-24]+2; bab=posof13[tlab-1]+2; udstat(); } else -  { atsof=true; udstat(); return; } - lat -= 1; - setoffset((word)(lat*80)); - fv=bat; - xpos=1; - while (xpos<=80)  - { -  if (fv<posof13[tlab-23])  -  { -   if ((*textmem)[fv]==9)  -   { -    wipeit(lat*80+xpos-1,tabstop); -    xpos += tabstop; -   } else -   { -    wpos=(word)((lat*80+xpos) % 65536); -    mem[0xa000*wpos-1]=textvar[(*textmem)[fv]+1][lat % 14]; -    xpos += 1; -   } -  } else -   { -    wipeit(lat*80+xpos-1,81-xpos); -    xpos=81; -   } -  fv += 1; - } - if (fast==true)  displstat(1); - /*ateof:=false;*/ +void up() {   /*scrolls the screen up one line*/ +	word fv, xpos, wpos; + +	if (lat == 0)  { +		atsof = true; +		return; +	} +	if (lat % 14 == 0) +		if (tlab > 24) { +			tlab -= 1; +			bat = posof13[tlab - 24] + 2; +			bab = posof13[tlab - 1] + 2; +			udstat(); +		} else { +			atsof = true; +			udstat(); +			return; +		} +	lat -= 1; +	setoffset((word)(lat * 80)); +	fv = bat; +	xpos = 1; +	while (xpos <= 80) { +		if (fv < posof13[tlab - 23]) { +			if ((*textmem)[fv] == 9) { +				wipeit(lat * 80 + xpos - 1, tabstop); +				xpos += tabstop; +			} else { +				wpos = (word)((lat * 80 + xpos) % 65536); +				mem[0xa000 * wpos - 1] = textvar[(*textmem)[fv] + 1][lat % 14]; +				xpos += 1; +			} +		} else { +			wipeit(lat * 80 + xpos - 1, 81 - xpos); +			xpos = 81; +		} +		fv += 1; +	} +	if (fast == true)  displstat(1); +	/*ateof:=false;*/  } -void endit()     /*Ends the program*/ -{ - release(dpt); - graphmode(2); +void endit() {   /*Ends the program*/ +	release(dpt); +	graphmode(2);  } -void control()     /*User control*/ -{ -    char rkv,rkv2/*the sequel*/,rkv3; -    integer fv; -    boolean first; - - if (regimode==false)  displcont(); else drawscreenf(tlab-24); - first=true; - do {; -  rkv=readkey(); -  switch (rkv) { -   case '\0': { -        rkv2=readkey(); -        switch (rkv2) { -         case chome:drawscreenf(0); break; -         case cend: drawscreenf(nol-24); break; -         case cpgdn: -          {; -           memw[bfseg*bfofs]=0; -           if (fast==false)  wipesb(lat); -           fv=1; -           while (((cardinal)lat+336<nosl) && (fv<337))  -           { -            fv += 1; -            down(); -           } -           if ((first==true) && (memw[bfseg*bfofs]<=2))  fast=true; -           if ((fast==false) || (first==true))  displstat(0); -          } -          break; -         case cpgup: -          {; -           memw[bfseg*bfofs]=0; -           if (fast==false)  wipesb(lat); -           fv=1; -           while ((atsof==false) && (fv<337))  -           { -            fv += 1; -            up(); -           } -           if ((first==true) && (memw[bfseg*bfofs]<=2))  fast=true; -           if ((fast==false) || (first==true))  displstat(0); -           } -           break; -/*         cUp:repeat; -              up; -              readkey; -             until (readkey<>cUp) or (atsof=true); -         cDown: repeat; -                 down; -                 readkey; -                until (readkey<>cDown) or (ateof=true);*/ -        } -        first=false; -       } -       break; -   case '\33': return; break; -   case '\103':case '\143': if (regimode==false)  { wipesb(lat); displcont(); } break; -  } - } while (!false); +void control() {   /*User control*/ +	char rkv, rkv2/*the sequel*/, rkv3; +	integer fv; +	boolean first; + +	if (regimode == false)  displcont(); +	else drawscreenf(tlab - 24); +	first = true; +	do { +		; +		rkv = readkey(); +		switch (rkv) { +		case '\0': { +			rkv2 = readkey(); +			switch (rkv2) { +			case chome: +				drawscreenf(0); +				break; +			case cend: +				drawscreenf(nol - 24); +				break; +			case cpgdn: { +				; +				memw[bfseg * bfofs] = 0; +				if (fast == false)  wipesb(lat); +				fv = 1; +				while (((cardinal)lat + 336 < nosl) && (fv < 337)) { +					fv += 1; +					down(); +				} +				if ((first == true) && (memw[bfseg * bfofs] <= 2))  fast = true; +				if ((fast == false) || (first == true))  displstat(0); +			} +			break; +			case cpgup: { +				; +				memw[bfseg * bfofs] = 0; +				if (fast == false)  wipesb(lat); +				fv = 1; +				while ((atsof == false) && (fv < 337)) { +					fv += 1; +					up(); +				} +				if ((first == true) && (memw[bfseg * bfofs] <= 2))  fast = true; +				if ((fast == false) || (first == true))  displstat(0); +			} +			break; +			/*         cUp:repeat; +			              up; +			              readkey; +			             until (readkey<>cUp) or (atsof=true); +			         cDown: repeat; +			                 down; +			                 readkey; +			                until (readkey<>cDown) or (ateof=true);*/ +			} +			first = false; +		} +		break; +		case '\33': +			return; +			break; +		case '\103': +		case '\143': +			if (regimode == false)  { +				wipesb(lat); +				displcont(); +			} +			break; +		} +	} while (!false);  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - setup(); - control(); - endit(); - return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	setup(); +	control(); +	endit(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/visa.cpp b/engines/avalanche/visa.cpp index c801a741d6..b705fac675 100644 --- a/engines/avalanche/visa.cpp +++ b/engines/avalanche/visa.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 @@ -51,240 +51,240 @@ const boolean report_dixi_errors = true;  boolean went_ok; -void unskrimble() -{ -    word fv; +void unskrimble() { +	word fv; - for( fv=1; fv <= bufsize; fv ++) buffer[fv]=(char)((~(ord(buffer[fv])-fv)) % 256); +	for (fv = 1; fv <= bufsize; fv ++) buffer[fv] = (char)((~(ord(buffer[fv]) - fv)) % 256);  } -void do_the_bubble() -{ - bufsize += 1; - buffer[bufsize]='\2'; +void do_the_bubble() { +	bufsize += 1; +	buffer[bufsize] = '\2';  } -void dixi(char block, byte point) -{ - untyped_file indexfile,sezfile; - word idx_offset,sez_offset; - boolean error; +void dixi(char block, byte point) { +	untyped_file indexfile, sezfile; +	word idx_offset, sez_offset; +	boolean error; - error=false; +	error = false; - assign(indexfile,"avalot.idx"); assign(sezfile,"avalot.sez"); +	assign(indexfile, "avalot.idx"); +	assign(sezfile, "avalot.sez"); - reset(indexfile,1); - seek(indexfile,(ord(upcase(block))-65)*2); - blockread(indexfile,idx_offset,2); - if (idx_offset==0)  error=true; - seek(indexfile,idx_offset+point*2); - blockread(indexfile,sez_offset,2); - if (sez_offset==0)  error=true; - close(indexfile); +	reset(indexfile, 1); +	seek(indexfile, (ord(upcase(block)) - 65) * 2); +	blockread(indexfile, idx_offset, 2); +	if (idx_offset == 0)  error = true; +	seek(indexfile, idx_offset + point * 2); +	blockread(indexfile, sez_offset, 2); +	if (sez_offset == 0)  error = true; +	close(indexfile); - went_ok=! error; +	went_ok = ! error; - if (error)  - { -  if (report_dixi_errors)  -   display(string('\7')+"Error accessing scroll "+block+strf(point)); -  return; - } +	if (error) { +		if (report_dixi_errors) +			display(string('\7') + "Error accessing scroll " + block + strf(point)); +		return; +	} - reset(sezfile,1); - seek(sezfile,sez_offset); - blockread(sezfile,bufsize,2); - blockread(sezfile,buffer,bufsize); - close(sezfile); - unskrimble(); +	reset(sezfile, 1); +	seek(sezfile, sez_offset); +	blockread(sezfile, bufsize, 2); +	blockread(sezfile, buffer, bufsize); +	close(sezfile); +	unskrimble(); - if (bubbling)  do_the_bubble(); +	if (bubbling)  do_the_bubble(); - calldrivers; +	calldrivers;  } -void speech(byte who, byte subject) -{ - untyped_file indexfile,sezfile; - word idx_offset,sez_offset,next_idx_offset; - - if (subject==0)  - {     /* No subject. */ -  bubbling=true; report_dixi_errors=false; -  dixi('s',who); -  bubbling=false; report_dixi_errors=true; - } else - {     /* Subject given. */ -  assign(indexfile,"converse.avd"); assign(sezfile,"avalot.sez"); - -  went_ok=false;  /* Assume that until we know otherwise. */ -  reset(indexfile,1); -  seek(indexfile,who*2-2); -  blockread(indexfile,idx_offset,2); -  blockread(indexfile,next_idx_offset,2); - -  if ((idx_offset==0) || -    ((((next_idx_offset-idx_offset) / 2)-1) < subject))  return; - -  seek(indexfile,idx_offset+subject*2); -  /*$I-*/ -  blockread(indexfile,sez_offset,2); -  if ((sez_offset==0) || (ioresult!=0))  return; -  /*$I+*/ -  close(indexfile); - -  reset(sezfile,1); -  seek(sezfile,sez_offset); -  blockread(sezfile,bufsize,2); -  blockread(sezfile,buffer,bufsize); -  close(sezfile); - -  unskrimble(); -  do_the_bubble(); - -  calldrivers; -  went_ok=true; - } +void speech(byte who, byte subject) { +	untyped_file indexfile, sezfile; +	word idx_offset, sez_offset, next_idx_offset; + +	if (subject == 0) { +		/* No subject. */ +		bubbling = true; +		report_dixi_errors = false; +		dixi('s', who); +		bubbling = false; +		report_dixi_errors = true; +	} else { +		/* Subject given. */ +		assign(indexfile, "converse.avd"); +		assign(sezfile, "avalot.sez"); + +		went_ok = false; /* Assume that until we know otherwise. */ +		reset(indexfile, 1); +		seek(indexfile, who * 2 - 2); +		blockread(indexfile, idx_offset, 2); +		blockread(indexfile, next_idx_offset, 2); + +		if ((idx_offset == 0) || +		        ((((next_idx_offset - idx_offset) / 2) - 1) < subject))  return; + +		seek(indexfile, idx_offset + subject * 2); +		/*$I-*/ +		blockread(indexfile, sez_offset, 2); +		if ((sez_offset == 0) || (ioresult != 0))  return; +		/*$I+*/ +		close(indexfile); + +		reset(sezfile, 1); +		seek(sezfile, sez_offset); +		blockread(sezfile, bufsize, 2); +		blockread(sezfile, buffer, bufsize); +		close(sezfile); + +		unskrimble(); +		do_the_bubble(); + +		calldrivers; +		went_ok = true; +	}  } -void talkto(byte whom) -{ - byte fv; - boolean no_matches; - - if (person==pardon)  - { -  person=chr(subjnumber); -  subjnumber=0; - } - - if (subjnumber==0)  - switch (chr(whom)) { -  case pspludwick: - -    if ((dna.lustie_is_asleep) & (~ dna.obj[potion]))  -    { -     dixi('q',68); -     dna.obj[potion]=true; -     objectlist; points(3); return; -    } else -    { -     if (dna.talked_to_crapulus)  -      switch (dna.given2spludwick) { /* Spludwick - what does he need? */ -         /* 0 - let it through to use normal routine. */ -         case RANGE_2(1,2): { -                display(string("Can you get me ")+ -                 get_better(spludwick_order[dna.given2spludwick])+", please?"+ -                  "\232\2"); -                return; -               } -               break; -         case 3: { -             dixi('q',30); /* need any help with the game? */ -             return; -            } -            break; -       } -     else { -           dixi('q',42); /* Haven't talked to Crapulus. Go and talk to him. */ -           return; -          } -    } -    break; - -  case pibythneth: if (dna.givenbadgetoiby)  -              { -               dixi('q',33); /* Thanks a lot! */ -               return; /* And leave the proc. */ -              } -              break; /* Or... just continue, 'cos he hasn't got it. */ -  case pdogfood: if (dna.wonnim)  -            {     /* We've won the game. */ -             dixi('q',6); /* "I'm Not Playing!" */ -             return; /* Zap back. */ -            } else dna.asked_dogfood_about_nim=true; -            break; -  case payles: if (~ dna.ayles_is_awake)  -          { -           dixi('q',43); /* He's fast asleep! */ -           return; -          } else -           if (~ dna.given_pen_to_ayles)  -           { -            dixi('q',44); /* Can you get me a pen, Avvy? */ -            return; -           } -           break; - -  case pjacques: { dixi('q',43); return; } break; -  case pgeida: if (dna.geida_given_potion)  -           dna.geida_follows=true; else -          { -           dixi('u',17); -           return; -          } -          break; -  case pspurge: if (~ dna.sitting_in_pub)  -           { -            dixi('q',71); /* Try going over and sitting down. */ -            return; -           } else -            { -             if (spurge_talk<5)  spurge_talk += 1; -             if (spurge_talk>1)  -             {     /* no. 1 falls through */ -              dixi('q',70+spurge_talk); -              return; -             } -            } -            break; - } else    /* On a subject. Is there any reason to block it? */ -   switch (chr(whom)) { -     case payles: if (~ dna.ayles_is_awake)  -          { -           dixi('q',43); /* He's fast asleep! */ -           return; -          } -          break; -   } - - if (whom>149)  whom -= 149; - - no_matches=true; - for( fv=1; fv <= numtr; fv ++) -  if (tr[fv].a.accinum==whom)  -  { -   display(string('\23')+chr(fv+48)+'\4'); -   no_matches=false; -   flush(); -  } - - if (no_matches)  display("\23\23\4"); - - speech(whom,subjnumber); - if (! went_ok)      /* File not found! */ -  dixi('n',whom); - - if (subjnumber==0)  - switch (chr(whom+149)) { -  case pcrapulus: -     {     /* Crapulus: get the badge - first time only */ -      dna.obj[badge]=true; -      objectlist; -      dixi('q',1); /* Circular from Cardiff. */ -      dna.talked_to_crapulus=true; - -      whereis[pcrapulus]=177;  /* Crapulus walks off. */ - -      tr[2].vanishifstill=true; -      tr[2].walkto(4); /* Walks away. */ - -      points(2); -     } -     break; - - } +void talkto(byte whom) { +	byte fv; +	boolean no_matches; + +	if (person == pardon) { +		person = chr(subjnumber); +		subjnumber = 0; +	} + +	if (subjnumber == 0) +		switch (chr(whom)) { +		case pspludwick: + +			if ((dna.lustie_is_asleep) & (~ dna.obj[potion])) { +				dixi('q', 68); +				dna.obj[potion] = true; +				objectlist; +				points(3); +				return; +			} else { +				if (dna.talked_to_crapulus) +					switch (dna.given2spludwick) { /* Spludwick - what does he need? */ +						/* 0 - let it through to use normal routine. */ +					case RANGE_2(1, 2): { +						display(string("Can you get me ") + +						        get_better(spludwick_order[dna.given2spludwick]) + ", please?" + +						        "\232\2"); +						return; +					} +					break; +					case 3: { +						dixi('q', 30); /* need any help with the game? */ +						return; +					} +					break; +					} +				else { +					dixi('q', 42); /* Haven't talked to Crapulus. Go and talk to him. */ +					return; +				} +			} +			break; + +		case pibythneth: +			if (dna.givenbadgetoiby) { +				dixi('q', 33); /* Thanks a lot! */ +				return; /* And leave the proc. */ +			} +			break; /* Or... just continue, 'cos he hasn't got it. */ +		case pdogfood: +			if (dna.wonnim) { +				/* We've won the game. */ +				dixi('q', 6); /* "I'm Not Playing!" */ +				return; /* Zap back. */ +			} else dna.asked_dogfood_about_nim = true; +			break; +		case payles: +			if (~ dna.ayles_is_awake) { +				dixi('q', 43); /* He's fast asleep! */ +				return; +			} else if (~ dna.given_pen_to_ayles) { +				dixi('q', 44); /* Can you get me a pen, Avvy? */ +				return; +			} +			break; + +		case pjacques: { +			dixi('q', 43); +			return; +		} +		break; +		case pgeida: +			if (dna.geida_given_potion) +				dna.geida_follows = true; +			else { +				dixi('u', 17); +				return; +			} +			break; +		case pspurge: +			if (~ dna.sitting_in_pub) { +				dixi('q', 71); /* Try going over and sitting down. */ +				return; +			} else { +				if (spurge_talk < 5)  spurge_talk += 1; +				if (spurge_talk > 1) { +					/* no. 1 falls through */ +					dixi('q', 70 + spurge_talk); +					return; +				} +			} +			break; +		} +	else    /* On a subject. Is there any reason to block it? */ +		switch (chr(whom)) { +		case payles: +			if (~ dna.ayles_is_awake) { +				dixi('q', 43); /* He's fast asleep! */ +				return; +			} +			break; +		} + +	if (whom > 149)  whom -= 149; + +	no_matches = true; +	for (fv = 1; fv <= numtr; fv ++) +		if (tr[fv].a.accinum == whom) { +			display(string('\23') + chr(fv + 48) + '\4'); +			no_matches = false; +			flush(); +		} + +	if (no_matches)  display("\23\23\4"); + +	speech(whom, subjnumber); +	if (! went_ok)      /* File not found! */ +		dixi('n', whom); + +	if (subjnumber == 0) +		switch (chr(whom + 149)) { +		case pcrapulus: { +			/* Crapulus: get the badge - first time only */ +			dna.obj[badge] = true; +			objectlist; +			dixi('q', 1); /* Circular from Cardiff. */ +			dna.talked_to_crapulus = true; + +			whereis[pcrapulus] = 177; /* Crapulus walks off. */ + +			tr[2].vanishifstill = true; +			tr[2].walkto(4); /* Walks away. */ + +			points(2); +		} +		break; + +		}  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/visa.h b/engines/avalanche/visa.h index 474a0098c6..6a1ee6265e 100644 --- a/engines/avalanche/visa.h +++ b/engines/avalanche/visa.h @@ -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 diff --git a/engines/avalanche/visatest.cpp b/engines/avalanche/visatest.cpp index 8544239473..487cc142ab 100644 --- a/engines/avalanche/visatest.cpp +++ b/engines/avalanche/visatest.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 @@ -32,80 +32,79 @@ namespace Avalanche {  char block;  word point; -array<1,2000,char> result; +array<1, 2000, char> result;  word result_len; -void unskrimble() -{ -    word fv; +void unskrimble() { +	word fv; - for( fv=1; fv <= 2000; fv ++) result[fv]=(char)((~(ord(result[fv])-fv)) % 256); +	for (fv = 1; fv <= 2000; fv ++) result[fv] = (char)((~(ord(result[fv]) - fv)) % 256);  } -void visa_get_scroll(char block, word point) -{ - untyped_file indexfile,sezfile; - word idx_offset,sez_offset; - - assign(indexfile,"avalot.idx"); assign(sezfile,"avalot.sez"); - - reset(indexfile,1); - seek(indexfile,(ord(upcase(block))-65)*2); - blockread(indexfile,idx_offset,2); - seek(indexfile,idx_offset+point*2); - blockread(indexfile,sez_offset,2); - close(indexfile); - - reset(sezfile,1); - seek(sezfile,sez_offset); - blockread(sezfile,result_len,2); - blockread(sezfile,result,result_len); - close(sezfile); - unskrimble(); +void visa_get_scroll(char block, word point) { +	untyped_file indexfile, sezfile; +	word idx_offset, sez_offset; + +	assign(indexfile, "avalot.idx"); +	assign(sezfile, "avalot.sez"); + +	reset(indexfile, 1); +	seek(indexfile, (ord(upcase(block)) - 65) * 2); +	blockread(indexfile, idx_offset, 2); +	seek(indexfile, idx_offset + point * 2); +	blockread(indexfile, sez_offset, 2); +	close(indexfile); + +	reset(sezfile, 1); +	seek(sezfile, sez_offset); +	blockread(sezfile, result_len, 2); +	blockread(sezfile, result, result_len); +	close(sezfile); +	unskrimble();  } -void access_get_scroll(char block, word point) -{ - string x; - untyped_file f; - - str(point,x); - x=string('S')+block+x+".RAW"; - assign(f,x); - reset(f,1); - result_len=filesize(f); - blockread(f,result,result_len); - close(f); +void access_get_scroll(char block, word point) { +	string x; +	untyped_file f; + +	str(point, x); +	x = string('S') + block + x + ".RAW"; +	assign(f, x); +	reset(f, 1); +	result_len = filesize(f); +	blockread(f, result, result_len); +	close(f);  } -void display_it() -{ -    word fv; +void display_it() { +	word fv; - for( fv=1; fv <= result_len; fv ++) output << result[fv]; +	for (fv = 1; fv <= result_len; fv ++) output << result[fv];  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - do { -  output << NL; -  output << NL; -  output << "Block?"; input >> block >> NL; -  output << "Point?"; input >> point >> NL; - -  output << "ACCESS reports (this one is always correct):" << NL; -  output << NL;  -  access_get_scroll(block,point); -  display_it(); - -  output << NL; output << NL; -  output << "VISA reports:" << NL; -  output << NL; -  visa_get_scroll(block,point); -  display_it(); - } while (!false); - return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	do { +		output << NL; +		output << NL; +		output << "Block?"; +		input >> block >> NL; +		output << "Point?"; +		input >> point >> NL; + +		output << "ACCESS reports (this one is always correct):" << NL; +		output << NL; +		access_get_scroll(block, point); +		display_it(); + +		output << NL; +		output << NL; +		output << "VISA reports:" << NL; +		output << NL; +		visa_get_scroll(block, point); +		display_it(); +	} while (!false); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/waver.cpp b/engines/avalanche/waver.cpp index e3261d7c1e..d0f88a1e85 100644 --- a/engines/avalanche/waver.cpp +++ b/engines/avalanche/waver.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 diff --git a/engines/avalanche/xf_gover.cpp b/engines/avalanche/xf_gover.cpp index 074c3b1178..f8726c3a62 100644 --- a/engines/avalanche/xf_gover.cpp +++ b/engines/avalanche/xf_gover.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 @@ -29,94 +29,99 @@  namespace Avalanche { -void load() -{ -    byte a;  /*absolute $A000:1200;*/ byte bit; untyped_file f; -; - assign(f,"avagame.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a,12080); - } - close(f); - bit=getpixel(0,0); +void load() { +	byte a;  /*absolute $A000:1200;*/ byte bit; +	untyped_file f; +	; +	assign(f, "avagame.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a, 12080); +	} +	close(f); +	bit = getpixel(0, 0);  } -void gfx() -{ -    integer gd,gm; +void gfx() { +	integer gd, gm; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi");  } -void blit(integer x1,integer y1,integer x2,integer y2,integer x3,integer y3) -{ -    pointer p,q; word s; +void blit(integer x1, integer y1, integer x2, integer y2, integer x3, integer y3) { +	pointer p, q; +	word s; - mark(q); +	mark(q); - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - putimage(x3,y3,p,0); +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); +	putimage(x3, y3, p, 0); - release(q); +	release(q);  } -void copy_hammer() -{ - blit(274,47,311,67,92,10); +void copy_hammer() { +	blit(274, 47, 311, 67, 92, 10);  } -void do_text() -{ - settextjustify(1,1); setcolor(0); - settextstyle(2,0,4); - setusercharsize(120,100,100,100); - outtextxy(112,32,"Thorsoft of Letchworth presents"); - blit(3,30,218,31,4,30); - blit(4,35,219,38,3,35); +void do_text() { +	settextjustify(1, 1); +	setcolor(0); +	settextstyle(2, 0, 4); +	setusercharsize(120, 100, 100, 100); +	outtextxy(112, 32, "Thorsoft of Letchworth presents"); +	blit(3, 30, 218, 31, 4, 30); +	blit(4, 35, 219, 38, 3, 35);  } -void dump_to_file(byte x1,byte y1,byte x2,byte y2, string fn) -{ - byte y,bit; - untyped_file f; +void dump_to_file(byte x1, byte y1, byte x2, byte y2, string fn) { +	byte y, bit; +	untyped_file f; - assign(f,fn); - rewrite(f,1); +	assign(f, fn); +	rewrite(f, 1); - for( y=y1; y <= y2; y ++) -  for( bit=0; bit <= 3; bit ++) -  {; -   port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -   blockwrite(f,mem[0xa000*y*80+x1],x2-x1); -  } +	for (y = y1; y <= y2; y ++) +		for (bit = 0; bit <= 3; bit ++) { +			; +			port[0x3c4] = 2; +			port[0x3ce] = 4; +			port[0x3c5] = 1 << bit; +			port[0x3cf] = bit; +			blockwrite(f, mem[0xa000 * y * 80 + x1], x2 - x1); +		} - close(f); +	close(f);  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - gfx(); - load(); - - setfillstyle(1,7); - bar(2,10,219,37); - bar(0,0,1,200); - bar(220,0,250, 88); - bar(0,88,213,147); - bar(622,88,640,147); - copy_hammer(); - do_text(); - - dump_to_file( 0,10,28,86,"about.avd"); - dump_to_file(26,88,78,147,"gameover.avd"); - return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	gfx(); +	load(); + +	setfillstyle(1, 7); +	bar(2, 10, 219, 37); +	bar(0, 0, 1, 200); +	bar(220, 0, 250, 88); +	bar(0, 88, 213, 147); +	bar(622, 88, 640, 147); +	copy_hammer(); +	do_text(); + +	dump_to_file(0, 10, 28, 86, "about.avd"); +	dump_to_file(26, 88, 78, 147, "gameover.avd"); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/xf_help.cpp b/engines/avalanche/xf_help.cpp index 7a99b50646..fc953a5628 100644 --- a/engines/avalanche/xf_help.cpp +++ b/engines/avalanche/xf_help.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 @@ -37,77 +37,76 @@ text i;  untyped_file o;  string x;  char t; -byte p,w; +byte p, w; -array<0,max_pages,word> where; +array<0, max_pages, word> where; -void out(string x) -{ -    byte fz; +void out(string x) { +	byte fz; - for( fz=1; fz <= length(x); fz ++) -   x[fz]=chr(ord(x[fz]) ^ 177); - blockwrite(o,x[0],1); - blockwrite(o,x[1],length(x)); +	for (fz = 1; fz <= length(x); fz ++) +		x[fz] = chr(ord(x[fz]) ^ 177); +	blockwrite(o, x[0], 1); +	blockwrite(o, x[1], length(x));  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - assign(o,"help.avd"); - rewrite(o,1); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	assign(o, "help.avd"); +	rewrite(o, 1); - blockwrite(o,where,sizeof(where)); +	blockwrite(o, where, sizeof(where)); - for( fv=0; fv <= max_pages; fv ++) - { -  where[fv]=filepos(o); +	for (fv = 0; fv <= max_pages; fv ++) { +		where[fv] = filepos(o); -  assign(i,string('h')+strf(fv)+".raw"); -  reset(i); +		assign(i, string('h') + strf(fv) + ".raw"); +		reset(i); -  i >> x >> NL; /* Title. */ -  out(x); +		i >> x >> NL; /* Title. */ +		out(x); -  i >> p >> NL; /* Picture. */ -  blockwrite(o,p,1); +		i >> p >> NL; /* Picture. */ +		blockwrite(o, p, 1); -  do { -   i >> x >> NL; -   out(x); -  } while (!(x=='!')); +		do { +			i >> x >> NL; +			out(x); +		} while (!(x == '!')); -  while (! eof(i))  -  { -   i >> x >> NL; -   if (x=='-')  -   {     /* Null point */ -    t='\0'; p=0; w=177; -   } else -   {     /* Has a point. */ -    i >> t >> NL; -    i >> p >> NL; -    i >> w >> NL; -   } +		while (! eof(i)) { +			i >> x >> NL; +			if (x == '-') { +				/* Null point */ +				t = '\0'; +				p = 0; +				w = 177; +			} else { +				/* Has a point. */ +				i >> t >> NL; +				i >> p >> NL; +				i >> w >> NL; +			} -   blockwrite(o,t,1); -   blockwrite(o,p,1); -   blockwrite(o,w,1); -  } +			blockwrite(o, t, 1); +			blockwrite(o, p, 1); +			blockwrite(o, w, 1); +		} -  t='\261'; -  blockwrite(o,t,1); -  blockwrite(o,p,1); -  blockwrite(o,w,1); +		t = '\261'; +		blockwrite(o, t, 1); +		blockwrite(o, p, 1); +		blockwrite(o, w, 1); -  close(i); +		close(i); - } +	} - seek(o,0); blockwrite(o,where,sizeof(where)); +	seek(o, 0); +	blockwrite(o, where, sizeof(where)); - close(o); - return EXIT_SUCCESS; +	close(o); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/xf_visa.cpp b/engines/avalanche/xf_visa.cpp index 4df55cdce5..4dde0e3fc4 100644 --- a/engines/avalanche/xf_visa.cpp +++ b/engines/avalanche/xf_visa.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 @@ -34,173 +34,167 @@ namespace Avalanche {  const varying_string<9> used = "DNPQSTUXZ"; -const varying_string<12> header = string("Avalot Sez:")+'\32'; +const varying_string<12> header = string("Avalot Sez:") + '\32'; -untyped_file sez,infile; +untyped_file sez, infile;  searchrec s; -matrix<'A','Z',0,99,word> positions; -array<'A','Z',word> maxlen; +matrix < 'A', 'Z', 0, 99, word > positions; +array < 'A', 'Z', word > maxlen; -matrix<1,50,0,255,word> speak_positions; -array<1,50,word> speak_maxlen; +matrix<1, 50, 0, 255, word> speak_positions; +array<1, 50, word> speak_maxlen; -array<1,2000,char> data; +array<1, 2000, char> data;  word data_length;  byte fv; -byte numeric_bit() -{ -    varying_string<5> x; integer e; byte result; - - byte numeric_bit_result; - x=copy(s.name,3,pos(".",s.name)-3); - val(x,result,e); - if (e!=0)  - { -  output << "NUMERIC ERROR: " << s.name << '/' << x << NL; -  exit(255); - } - numeric_bit_result=result; - return numeric_bit_result; +byte numeric_bit() { +	varying_string<5> x; +	integer e; +	byte result; + +	byte numeric_bit_result; +	x = copy(s.name, 3, pos(".", s.name) - 3); +	val(x, result, e); +	if (e != 0) { +		output << "NUMERIC ERROR: " << s.name << '/' << x << NL; +		exit(255); +	} +	numeric_bit_result = result; +	return numeric_bit_result;  } -byte speak_left() -{ -    string x; integer e; byte result; - - byte speak_left_result; - x=copy(s.name,3,pos(".",s.name)-3); - x=copy(x,1,pos("-",x)-1); - val(x,result,e); - if (e!=0)  - { -  output << "NUMERIC ERROR (left): " << s.name << '/' << x << NL; -  exit(255); - } - speak_left_result=result; - return speak_left_result; +byte speak_left() { +	string x; +	integer e; +	byte result; + +	byte speak_left_result; +	x = copy(s.name, 3, pos(".", s.name) - 3); +	x = copy(x, 1, pos("-", x) - 1); +	val(x, result, e); +	if (e != 0) { +		output << "NUMERIC ERROR (left): " << s.name << '/' << x << NL; +		exit(255); +	} +	speak_left_result = result; +	return speak_left_result;  } -byte speak_right() -{ -    string x; integer e; byte result; - - byte speak_right_result; - x=copy(s.name,3,pos(".",s.name)-3); - x=copy(x,pos("-",x)+1,255); - val(x,result,e); - if (e!=0)  - { -  output << "NUMERIC ERROR (right): " << s.name << '/' << x << NL; -  exit(255); - } - speak_right_result=result; - return speak_right_result; +byte speak_right() { +	string x; +	integer e; +	byte result; + +	byte speak_right_result; +	x = copy(s.name, 3, pos(".", s.name) - 3); +	x = copy(x, pos("-", x) + 1, 255); +	val(x, result, e); +	if (e != 0) { +		output << "NUMERIC ERROR (right): " << s.name << '/' << x << NL; +		exit(255); +	} +	speak_right_result = result; +	return speak_right_result;  } -void write_out() -{ - array<'A','Z',word> points; - array<1,50,word> speak_points; - untyped_file outf; - byte fv; +void write_out() { +	array < 'A', 'Z', word > points; +	array<1, 50, word> speak_points; +	untyped_file outf; +	byte fv; - fillchar(points,sizeof(points),'\0'); - fillchar(speak_points,sizeof(speak_points),'\0'); +	fillchar(points, sizeof(points), '\0'); +	fillchar(speak_points, sizeof(speak_points), '\0'); - assign(outf,"v:avalot.idx"); - rewrite(outf,1); - blockwrite(outf,points,sizeof(points)); +	assign(outf, "v:avalot.idx"); +	rewrite(outf, 1); +	blockwrite(outf, points, sizeof(points)); - for( fv=1; fv <= length(used); fv ++) - { -  points[used[fv-1]]=filepos(outf); -  blockwrite(outf,positions[used[fv-1]],maxlen[used[fv-1]]*2+2); - } +	for (fv = 1; fv <= length(used); fv ++) { +		points[used[fv - 1]] = filepos(outf); +		blockwrite(outf, positions[used[fv - 1]], maxlen[used[fv - 1]] * 2 + 2); +	} - seek(outf,0); - blockwrite(outf,points,sizeof(points)); +	seek(outf, 0); +	blockwrite(outf, points, sizeof(points)); - close(outf); +	close(outf); - /* --- now the speech records --- */ +	/* --- now the speech records --- */ - assign(outf,"v:converse.avd"); - rewrite(outf,1); - blockwrite(outf,speak_points,sizeof(speak_points)); +	assign(outf, "v:converse.avd"); +	rewrite(outf, 1); +	blockwrite(outf, speak_points, sizeof(speak_points)); - for( fv=1; fv <= 15; fv ++) - { -  speak_points[fv]=filepos(outf); +	for (fv = 1; fv <= 15; fv ++) { +		speak_points[fv] = filepos(outf); -  blockwrite(outf,speak_positions[fv],speak_maxlen[fv]*2+2); - } +		blockwrite(outf, speak_positions[fv], speak_maxlen[fv] * 2 + 2); +	} - seek(outf,0); - blockwrite(outf,speak_points,sizeof(speak_points)); +	seek(outf, 0); +	blockwrite(outf, speak_points, sizeof(speak_points)); - close(outf); +	close(outf);  } -void skrimble() -{ -    word fv; +void skrimble() { +	word fv; - for( fv=1; fv <= 2000; fv ++) data[fv]=(char)((~(ord(data[fv]))+fv) % 256); +	for (fv = 1; fv <= 2000; fv ++) data[fv] = (char)((~(ord(data[fv])) + fv) % 256);  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - fillchar(positions,sizeof(positions),'\0'); - fillchar(maxlen,sizeof(maxlen),'\0'); +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	fillchar(positions, sizeof(positions), '\0'); +	fillchar(maxlen, sizeof(maxlen), '\0'); - clrscr; +	clrscr; - assign(sez,"v:avalot.sez"); - rewrite(sez,1); - blockwrite(sez,header[1],12); +	assign(sez, "v:avalot.sez"); +	rewrite(sez, 1); +	blockwrite(sez, header[1], 12); - findfirst("s*.raw",anyfile,s); - while (doserror==0)  - { -  assign(infile,s.name); -  reset(infile,1); -  blockread(infile,data,2000,data_length); -  close(infile); +	findfirst("s*.raw", anyfile, s); +	while (doserror == 0) { +		assign(infile, s.name); +		reset(infile, 1); +		blockread(infile, data, 2000, data_length); +		close(infile); -  clrscr; -  if (pos("-",s.name)==0)  -  {     /* Not a speech record. */ -   output << s.name << format(numeric_bit(),10) << NL; +		clrscr; +		if (pos("-", s.name) == 0) { +			/* Not a speech record. */ +			output << s.name << format(numeric_bit(), 10) << NL; -   positions[s.name[2]][numeric_bit()]=filepos(sez); -   if (maxlen[s.name[2]]<(unsigned char)numeric_bit())  maxlen[s.name[2]]=numeric_bit(); +			positions[s.name[2]][numeric_bit()] = filepos(sez); +			if (maxlen[s.name[2]] < (unsigned char)numeric_bit())  maxlen[s.name[2]] = numeric_bit(); -  } else -  {     /* A speech record. */ -   output << s.name << format(speak_left(),10) << format(speak_right(),10) << " SR" << NL; +		} else { +			/* A speech record. */ +			output << s.name << format(speak_left(), 10) << format(speak_right(), 10) << " SR" << NL; -   speak_positions[speak_left()][speak_right()]=filepos(sez); -   if (speak_maxlen[speak_left()]<(unsigned char)speak_right())  -       speak_maxlen[speak_left()]=speak_right(); -  } +			speak_positions[speak_left()][speak_right()] = filepos(sez); +			if (speak_maxlen[speak_left()] < (unsigned char)speak_right()) +				speak_maxlen[speak_left()] = speak_right(); +		} -  skrimble(); +		skrimble(); -  blockwrite(sez,data_length,2); -  blockwrite(sez,data,data_length); +		blockwrite(sez, data_length, 2); +		blockwrite(sez, data, data_length); -  findnext(s); -  clreol; - } +		findnext(s); +		clreol; +	} - close(sez); +	close(sez); - write_out();  - return EXIT_SUCCESS; +	write_out(); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/xfbutton.cpp b/engines/avalanche/xfbutton.cpp index 013a121666..d2c552dae9 100644 --- a/engines/avalanche/xfbutton.cpp +++ b/engines/avalanche/xfbutton.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 @@ -29,62 +29,65 @@  namespace Avalanche { -integer x,y; -untyped_file f,out; +integer x, y; +untyped_file f, out; -void load()     /* Load2, actually */ -{ - byte a0;  /*absolute $A000:800;*/ - byte bit; - untyped_file f; - integer gd,gm; +void load() {   /* Load2, actually */ +	byte a0;  /*absolute $A000:800;*/ +	byte bit; +	untyped_file f; +	integer gd, gm; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); - assign(f,"d:butnraw.avd"); reset(f,1); - seek(f,177); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a0,12080); - } - close(f); - bit=getpixel(0,0); +	assign(f, "d:butnraw.avd"); +	reset(f, 1); +	seek(f, 177); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a0, 12080); +	} +	close(f); +	bit = getpixel(0, 0);  } -void grab(integer x1,integer y1,integer x2,integer y2) /* s=930 */ -{ -    word s; pointer p; +void grab(integer x1, integer y1, integer x2, integer y2) { /* s=930 */ +	word s; +	pointer p; - s=imagesize(x1,y1,x2,y2); - getmem(p,s); - getimage(x1,y1,x2,y2,p); - putimage(0,0,p,0); - blockwrite(out,p,s); - freemem(p,s); - rectangle(x1,y1,x2,y2); +	s = imagesize(x1, y1, x2, y2); +	getmem(p, s); +	getimage(x1, y1, x2, y2, p); +	putimage(0, 0, p, 0); +	blockwrite(out, p, s); +	freemem(p, s); +	rectangle(x1, y1, x2, y2);  } -int main(int argc, const char* argv[]) -{ - pio_initialize(argc, argv); - assign(f,"d:butnraw.avd"); - assign(out,"v:buttons.avd"); rewrite(out,1); - load(); - for( x=0; x <= 5; x ++) -  for( y=0; y <= 3; y ++) -  { -   if (! -    (((x==1) && (y==0)) -  || ((x==4) && (y==2)) -  || ((y==3) && (x>2) && (x<5))))  -     { -      input >> NL; -      grab(100+x*83,51+y*22,180+x*83,71+y*22); -     } -  } - close(out); - return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	assign(f, "d:butnraw.avd"); +	assign(out, "v:buttons.avd"); +	rewrite(out, 1); +	load(); +	for (x = 0; x <= 5; x ++) +		for (y = 0; y <= 3; y ++) { +			if (! +			        (((x == 1) && (y == 0)) +			         || ((x == 4) && (y == 2)) +			         || ((y == 3) && (x > 2) && (x < 5)))) { +				input >> NL; +				grab(100 + x * 83, 51 + y * 22, 180 + x * 83, 71 + y * 22); +			} +		} +	close(out); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/xfghost.cpp b/engines/avalanche/xfghost.cpp index 1c7673c401..28e7efddd6 100644 --- a/engines/avalanche/xfghost.cpp +++ b/engines/avalanche/xfghost.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 @@ -30,244 +30,281 @@  namespace Avalanche { -const array<1,44,char> chunkheader =  -string("Spooky file! Nearly a Chunk... (c) MT.")+'\32'+'\261'+'\x30'+'\x1'+'\x75'+'\261'; +const array<1, 44, char> chunkheader = +    string("Spooky file! Nearly a Chunk... (c) MT.") + '\32' + '\261' + '\x30' + '\x1' + '\x75' + '\261';  const integer n = -1; /* "No change" in new-whatever */  const integer aa = -2; /* This is an aargh. */ -const integer aargh_x_ofs = -177; const integer aargh_y_ofs = 52; +const integer aargh_x_ofs = -177; +const integer aargh_y_ofs = 52; -enum flavourtype {ch_ega,ch_bgi,ch_natural,ch_two,ch_one, last_flavourtype}; +enum flavourtype {ch_ega, ch_bgi, ch_natural, ch_two, ch_one, last_flavourtype};  struct chunkblocktype { -                  flavourtype flavour; -                  integer x,y; -                  integer xl,yl; -                  longint size; +	flavourtype flavour; +	integer x, y; +	integer xl, yl; +	longint size;  }; -integer gd,gm,x,y; -untyped_file f; byte bit; +integer gd, gm, x, y; +untyped_file f; +byte bit;  byte a;  /*absolute $A000:0;*/  palettetype cc; -char r; text t; -word s; pointer p; +char r; +text t; +word s; +pointer p;  untyped_file chunkfile;  chunkblocktype cb; -pointer a_p; word a_s; +pointer a_p; +word a_s; -void open_chunk() -{; - assign(chunkfile,"v:spooky.avd"); - rewrite(chunkfile,1); - blockwrite(chunkfile,chunkheader,sizeof(chunkheader)); +void open_chunk() { +	; +	assign(chunkfile, "v:spooky.avd"); +	rewrite(chunkfile, 1); +	blockwrite(chunkfile, chunkheader, sizeof(chunkheader));  } -void close_chunk() -{; - close(chunkfile); +void close_chunk() { +	; +	close(chunkfile);  } -void grab(integer x1,integer y1,integer x2,integer y2, flavourtype how, integer newx,integer newy) -{ - pointer p; - word s; - integer y; - byte bit; +void grab(integer x1, integer y1, integer x2, integer y2, flavourtype how, integer newx, integer newy) { +	pointer p; +	word s; +	integer y; +	byte bit; -; +	;  #ifndef DRYRUN - {; -  cb.flavour=how; -  switch (newx) { -   case n: cb.x=x1; break; -   case aa: cb.x=x1+aargh_x_ofs; break; -   default: cb.x=newx; -  } - -  switch (newy) { -   case n: cb.y=y1; break; -   case aa: cb.y=y1+aargh_y_ofs; break; -   default: cb.y=newy; -  } - -  cb.xl=x2-x1; -  if (set_of_enum(flavourtype)::of(ch_ega,ch_one,ch_two, eos).has(how))  cb.xl=((cb.xl+7) / 8)*8; -  cb.yl=y2-y1; - } - - if (how!=ch_natural)  - {; -  s=imagesize(x1,y1,x2,y2); -  getmem(p,s); -  getimage(x1,y1,x2,y2,p); - } - - rectangle(x1,y1,x2,y2); - -  switch (how) { -   case ch_bgi: cb.size=s; break; -  } - - blockwrite(chunkfile,cb,sizeof(cb)); - - switch (how) { -  case ch_bgi: blockwrite(chunkfile,p,s); break; -  case ch_ega: {; -           setactivepage(1); -           cleardevice(); -           putimage(0,0,p,0); -           setactivepage(0); - -           for( bit=0; bit <= 3; bit ++) -            for( y=0; y <= cb.yl; y ++) -            {; -             port[0x3c4]=2; port[0x3ce]=4; -             port[0x3c5]=1 << bit; port[0x3cf]=bit; -             blockwrite(chunkfile,mem[0xa400*y*80],cb.xl / 8); -           } - -           y=getpixel(0,0); -          } -          break; -  case ch_two: {; /* Same as EGA, but with only 2 planes. */ -           setactivepage(1); -           cleardevice(); -           putimage(0,0,p,0); -           setactivepage(0); - -           for( bit=2; bit <= 3; bit ++) /* << Bit to grab? */ -            for( y=0; y <= cb.yl; y ++) -            {; -             port[0x3c4]=2; port[0x3ce]=4; -             port[0x3c5]=1 << bit; port[0x3cf]=bit; -             blockwrite(chunkfile,mem[0xa400*y*80],cb.xl / 8); -           } - -           y=getpixel(0,0); -          } -          break; -  case ch_one: {; /* ...but with only one plane! */ -           setactivepage(1); -           cleardevice(); -           putimage(0,0,p,0); -           setactivepage(0); - -           for( bit=3; bit <= 3; bit ++) -            for( y=0; y <= cb.yl; y ++) -            {; -             port[0x3c4]=2; port[0x3ce]=4; -             port[0x3c5]=1 << bit; port[0x3cf]=bit; -             blockwrite(chunkfile,mem[0xa400*y*80],cb.xl / 8); -           } - -           y=getpixel(0,0); -          } -          break; - } - - freemem(p,s); #endif - rectangle(x1,y1,x2,y2); +	{ +		; +		cb.flavour = how; +		switch (newx) { +		case n: +			cb.x = x1; +			break; +		case aa: +			cb.x = x1 + aargh_x_ofs; +			break; +		default: +			cb.x = newx; +		} + +		switch (newy) { +		case n: +			cb.y = y1; +			break; +		case aa: +			cb.y = y1 + aargh_y_ofs; +			break; +		default: +			cb.y = newy; +		} + +		cb.xl = x2 - x1; +		if (set_of_enum(flavourtype)::of(ch_ega, ch_one, ch_two, eos).has(how))  cb.xl = ((cb.xl + 7) / 8) * 8; +		cb.yl = y2 - y1; +	} + +	if (how != ch_natural) { +		; +		s = imagesize(x1, y1, x2, y2); +		getmem(p, s); +		getimage(x1, y1, x2, y2, p); +	} + +	rectangle(x1, y1, x2, y2); + +	switch (how) { +	case ch_bgi: +		cb.size = s; +		break; +	} + +	blockwrite(chunkfile, cb, sizeof(cb)); + +	switch (how) { +	case ch_bgi: +		blockwrite(chunkfile, p, s); +		break; +	case ch_ega: { +		; +		setactivepage(1); +		cleardevice(); +		putimage(0, 0, p, 0); +		setactivepage(0); + +		for (bit = 0; bit <= 3; bit ++) +			for (y = 0; y <= cb.yl; y ++) { +				; +				port[0x3c4] = 2; +				port[0x3ce] = 4; +				port[0x3c5] = 1 << bit; +				port[0x3cf] = bit; +				blockwrite(chunkfile, mem[0xa400 * y * 80], cb.xl / 8); +			} + +		y = getpixel(0, 0); +	} +	break; +	case ch_two: { +		; /* Same as EGA, but with only 2 planes. */ +		setactivepage(1); +		cleardevice(); +		putimage(0, 0, p, 0); +		setactivepage(0); + +		for (bit = 2; bit <= 3; bit ++) /* << Bit to grab? */ +			for (y = 0; y <= cb.yl; y ++) { +				; +				port[0x3c4] = 2; +				port[0x3ce] = 4; +				port[0x3c5] = 1 << bit; +				port[0x3cf] = bit; +				blockwrite(chunkfile, mem[0xa400 * y * 80], cb.xl / 8); +			} + +		y = getpixel(0, 0); +	} +	break; +	case ch_one: { +		; /* ...but with only one plane! */ +		setactivepage(1); +		cleardevice(); +		putimage(0, 0, p, 0); +		setactivepage(0); + +		for (bit = 3; bit <= 3; bit ++) +			for (y = 0; y <= cb.yl; y ++) { +				; +				port[0x3c4] = 2; +				port[0x3ce] = 4; +				port[0x3c5] = 1 << bit; +				port[0x3cf] = bit; +				blockwrite(chunkfile, mem[0xa400 * y * 80], cb.xl / 8); +			} + +		y = getpixel(0, 0); +	} +	break; +	} + +	freemem(p, s); +#endif +	rectangle(x1, y1, x2, y2);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	;  #ifndef DRYRUN - open_chunk(); +	open_chunk();  #endif - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - assign(f,"c:\\sleep4\\colour.ptx"); reset(f,1); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  blockread(f,a,16000); /* 28000 */ - } - close(f); +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	assign(f, "c:\\sleep4\\colour.ptx"); +	reset(f, 1); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		blockread(f, a, 16000); /* 28000 */ +	} +	close(f); - setwritemode(xorput); +	setwritemode(xorput); - /* Grab the big ghost. */ +	/* Grab the big ghost. */ - grab(  0,  0,160, 65,ch_two,n,n); /* First column, */ - grab(  0, 67,172,127,ch_two,n,n); - grab(  0,132,158,190,ch_two,n,n); +	grab(0,  0, 160, 65, ch_two, n, n); /* First column, */ +	grab(0, 67, 172, 127, ch_two, n, n); +	grab(0, 132, 158, 190, ch_two, n, n); - a_s=imagesize(349,36,361,43); getmem(a_p,a_s); - getimage(349,36,361,43,a_p); - setfillstyle(1,0); bar(349,36,361,43); +	a_s = imagesize(349, 36, 361, 43); +	getmem(a_p, a_s); +	getimage(349, 36, 361, 43, a_p); +	setfillstyle(1, 0); +	bar(349, 36, 361, 43); - grab(173, 66,347,124,ch_two,n,n); /* Second column. */ - grab(173,  6,352, 64,ch_two,n,n); +	grab(173, 66, 347, 124, ch_two, n, n); /* Second column. */ +	grab(173,  6, 352, 64, ch_two, n, n); - putimage(349,36,a_p,0); +	putimage(349, 36, a_p, 0); - /* Grab Avvy's eyes and the exclamation mark. */ +	/* Grab Avvy's eyes and the exclamation mark. */ - grab(605, 10,620, 12,ch_bgi,n,n); /* Eyes looking left */ - grab(622, 10,638, 12,ch_bgi,n,n); /* Ditto looking right (eye eye, sir) */ - grab(611,  0,616,  5,ch_bgi,n,n); /* ! */ +	grab(605, 10, 620, 12, ch_bgi, n, n); /* Eyes looking left */ +	grab(622, 10, 638, 12, ch_bgi, n, n); /* Ditto looking right (eye eye, sir) */ +	grab(611,  0, 616,  5, ch_bgi, n, n); /* ! */ - /* Grab the cobweb. */ +	/* Grab the cobweb. */ - grab(535, 25,639, 75,ch_one,n,0); -  /* ^^^ Interesting point here: the ch_EGA save routine pads with black -    space to the RIGHT of the object. Since this cobweb needs to be right- -    justified, we must decrease x1 until xl is a multiple of 8. */ +	grab(535, 25, 639, 75, ch_one, n, 0); +	/* ^^^ Interesting point here: the ch_EGA save routine pads with black +	  space to the RIGHT of the object. Since this cobweb needs to be right- +	  justified, we must decrease x1 until xl is a multiple of 8. */ - /* Grab Mark's signature. */ +	/* Grab Mark's signature. */ - grab(462, 61,525, 65,ch_ega,576,195); +	grab(462, 61, 525, 65, ch_ega, 576, 195); - /* Grab the open door. */ +	/* Grab the open door. */ - grab(180,132,294,180,ch_ega,520,127); +	grab(180, 132, 294, 180, ch_ega, 520, 127); - /* Grab the bat. */ +	/* Grab the bat. */ - grab(354,  0,474, 28,ch_bgi,n,n); - grab(484,  0,526, 23,ch_bgi,n,n); - grab(542,  2,564, 22,ch_bgi,n,n); +	grab(354,  0, 474, 28, ch_bgi, n, n); +	grab(484,  0, 526, 23, ch_bgi, n, n); +	grab(542,  2, 564, 22, ch_bgi, n, n); - /* Grab the big fade-in face. */ +	/* Grab the big fade-in face. */ - grab(350, 71,420,105,ch_ega,n,n); /* Top line. */ - grab(421, 71,491,105,ch_ega,n,n); +	grab(350, 71, 420, 105, ch_ega, n, n); /* Top line. */ +	grab(421, 71, 491, 105, ch_ega, n, n); - grab(350,107,419,141,ch_ega,n,n); /* Second line. */ - grab(421,107,490,141,ch_ega,n,n); +	grab(350, 107, 419, 141, ch_ega, n, n); /* Second line. */ +	grab(421, 107, 490, 141, ch_ega, n, n); - grab(350,143,420,177,ch_ega,n,n); /* Third line. */ - grab(422,143,489,177,ch_ega,n,n); +	grab(350, 143, 420, 177, ch_ega, n, n); /* Third line. */ +	grab(422, 143, 489, 177, ch_ega, n, n); - /* Grab the "AARGH!" */ +	/* Grab the "AARGH!" */ - grab(349, 36,361, 43,ch_bgi,aa,aa); /* A */ - grab(366, 31,385, 46,ch_bgi,aa,aa); /* Aa */ - grab(394, 34,415, 52,ch_bgi,aa,aa); /* Aar */ - grab(428, 33,457, 57,ch_bgi,aa,aa); /* Aarg */ - grab(471, 30,508, 59,ch_bgi,aa,aa); /* Aargh */ - grab(524, 30,524, 58,ch_bgi,aa,aa); /* Aargh! */ +	grab(349, 36, 361, 43, ch_bgi, aa, aa); /* A */ +	grab(366, 31, 385, 46, ch_bgi, aa, aa); /* Aa */ +	grab(394, 34, 415, 52, ch_bgi, aa, aa); /* Aar */ +	grab(428, 33, 457, 57, ch_bgi, aa, aa); /* Aarg */ +	grab(471, 30, 508, 59, ch_bgi, aa, aa); /* Aargh */ +	grab(524, 30, 524, 58, ch_bgi, aa, aa); /* Aargh! */ - for( gd=0; gd <= 4; gd ++) -  grab(509, 76+gd*22,551, 96+gd*22,ch_bgi,n,n); /* The big green eyes. */ +	for (gd = 0; gd <= 4; gd ++) +		grab(509, 76 + gd * 22, 551, 96 + gd * 22, ch_bgi, n, n); /* The big green eyes. */ - for( gd=5; gd >= 0; gd --) -  grab(181+gd*34,186,214+gd*34,199,ch_bgi,n,n); /* The red greldet. */ +	for (gd = 5; gd >= 0; gd --) +		grab(181 + gd * 34, 186, 214 + gd * 34, 199, ch_bgi, n, n); /* The red greldet. */ - for( gd=0; gd <= 5; gd ++) -  grab(390+gd*34,186,423+gd*34,199,ch_bgi,n,n); /* The blue greldet. */ +	for (gd = 0; gd <= 5; gd ++) +		grab(390 + gd * 34, 186, 423 + gd * 34, 199, ch_bgi, n, n); /* The blue greldet. */  #ifndef DRYRUN - close_chunk(); +	close_chunk();  #endif -return EXIT_SUCCESS; +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file diff --git a/engines/avalanche/zapdraw.cpp b/engines/avalanche/zapdraw.cpp index fe1619a4c3..cae7b04cf6 100644 --- a/engines/avalanche/zapdraw.cpp +++ b/engines/avalanche/zapdraw.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 @@ -34,32 +34,37 @@ namespace Avalanche {  untyped_file f;  byte bit;  byte a;  /*absolute $A000:0; */ -integer gd,gm; +integer gd, gm; -void graphmode(integer mode) -{ -    registers regs; -; - regs.ax=(mode % 0x100); - intr(0x10,regs); +void graphmode(integer mode) { +	registers regs; +	; +	regs.ax = (mode % 0x100); +	intr(0x10, regs);  } -int main(int argc, const char* argv[]) -{pio_initialize(argc, argv); -; - gd=3; gm=0; initgraph(gd,gm,"c:\\bp\\bgi"); - assign(f,"d:avltzap.raw"); reset(f,1); - for( bit=0; bit <= 3; bit ++) - {; -  port[0x3c4]=2; port[0x3ce]=4; port[0x3c5]=1 << bit; port[0x3cf]=bit; -  for( gd=0; gd <= 199; gd ++) -   blockread(f,mem[0xa000*gd*80],40); /* 28000 */ - } - close(f); - setwritemode(xorput); - rectangle(  0,  0,  5,  8); - rectangle(  0, 10, 27, 19); -return EXIT_SUCCESS; +int main(int argc, const char *argv[]) { +	pio_initialize(argc, argv); +	; +	gd = 3; +	gm = 0; +	initgraph(gd, gm, "c:\\bp\\bgi"); +	assign(f, "d:avltzap.raw"); +	reset(f, 1); +	for (bit = 0; bit <= 3; bit ++) { +		; +		port[0x3c4] = 2; +		port[0x3ce] = 4; +		port[0x3c5] = 1 << bit; +		port[0x3cf] = bit; +		for (gd = 0; gd <= 199; gd ++) +			blockread(f, mem[0xa000 * gd * 80], 40); /* 28000 */ +	} +	close(f); +	setwritemode(xorput); +	rectangle(0,  0,  5,  8); +	rectangle(0, 10, 27, 19); +	return EXIT_SUCCESS;  }  } // End of namespace Avalanche.
\ No newline at end of file  | 
