grendel-1.0.0a7/backup/
grendel-1.0.0a7/bin/
grendel-1.0.0a7/boards/
grendel-1.0.0a7/clans/
grendel-1.0.0a7/documentation/todo/
grendel-1.0.0a7/help/
grendel-1.0.0a7/logs/
grendel-1.0.0a7/players/
grendel-1.0.0a7/progs/
grendel-1.0.0a7/races/
grendel-1.0.0a7/src/contrib/
grendel-1.0.0a7/src/modules/speller/
grendel-1.0.0a7/src/modules/status/
grendel-1.0.0a7/src/tests/
grendel-1.0.0a7/src/tests/dunit/
{
	Delphi IMC3 Client - Various utility functions

	Based on client code by Samson of Alsherok.

	$Id: imc3_util.pas,v 1.1 2003/12/12 13:19:56 druid Exp $
}

unit imc3_util;

interface


uses
	imc3_const,
	chars,
	player;


procedure sendToPlayer(pl : GPlayer; buf : string);
function fishToAnsi(buf : string) : string;
function I3PERM(ch : GCharacter) : I3_PERMISSIONS;


implementation


uses
	SysUtils,
	StrUtils,
	constants;
	

procedure sendToPlayer(pl : GPlayer; buf : string);
var
	t : string;
begin
	t := fishToAnsi(buf);
	
	{ Reset color to stop bleeding }
	pl.sendBuffer(t + #27'[0m');
end;

function fishToAnsi(buf : string) : string;
var
	x, inbuf, cp, cp2, len : integer;
	t, col : string;
begin
	inbuf := 1;
	Result := '';
	col := '';
	
	{ catch the trivial case first (for speed) }
	cp := Pos('%^', buf);
	if (cp = 0) then
		begin
		Result := buf;
		exit;
		end;
		
	while (cp > 0) do
		begin
		cp2 := PosEx('%^', buf, cp + 2);
		
		if (cp2 = 0) then		{ unmatched single %^ }
			break;
		
		len := cp2 - cp + 2;
		
		if (len = 4) then
			begin
			col := '%^';
			end
		else
			begin
			t := Copy(buf, cp, len);
			
			for x := 1 to I3MAX_ANSI do
				if (t = I3_ANSI_CONVERSION[x][2]) then
					begin
					col := I3_ANSI_CONVERSION[x][3];
					break;
					end;
			end;
			
		t := Copy(buf, inbuf, cp - inbuf);
		
		Result := Result + t;
		Result := Result + col;
		
		inbuf := cp2 + 2;
      
		cp := PosEx('%^', buf, inbuf);
		end;
	
	Result := Result + Copy(buf, cp2 + 2, length(buf));
end;

function I3PERM(ch : GCharacter) : I3_PERMISSIONS;
begin
  Result := I3PERM_NOTSET;
  
	if (ch.level < LEVEL_START) then
		Result := I3PERM_NONE
	else
	if (ch.level <= LEVEL_MAX) then
		Result := I3PERM_MORT
	else
	if (ch.level <= LEVEL_BUILD) then
		Result := I3PERM_ADMIN
	else
	if (ch.level <= LEVEL_MAX_IMMORTAL) then
		Result := I3PERM_IMP;
end;


end.