home *** CD-ROM | disk | FTP | other *** search
- program Terminal_ANSI_TELNET;
- var evnt,i,csx,csy:integer;
- s,xs,ts,s1,s2,s3:string;
- ch:char;
- v1,v2:integer;
- vv:array of integer;
-
- function getescvar(ss:string;n:integer):integer;
- var i,j,k,e:integer;
- ts:string;
- begin
- j:=0;i:=3;k:=-1;e:=0;
- if(ss[length(ss)]<>';')then ss:=ss+';';
- repeat
- if ss[i]=';' then
- begin
- j:=j+1;
- vv[j]:=strtoint(ts);
- if (i=length(ss))or(j=n)then e:=1;
- ts:='';
- end else ts:=ts+ss[i];
- i:=i+1;
- until e=1;
- result:=j;
- end;
-
-
- procedure workcmd(ss:string);
- var x:integer;
- xs:string;
- begin
- if(length(ss)>1)then
- begin
- xs:='';
- if(ss[1]=chr($fa))then
- begin
- if(ss[2]=chr($18))then xs:=chr($ff)+chr(250)+chr($18)+chr(0)+'ANSI'+chr(255)+chr(240);
- if(ss[2]=chr($25))then xs:=chr($ff)+chr(250)+chr($25)+chr(0)+chr(0)+chr(0)+chr(255)+chr(240);
- end else
- begin
-
- if ss[1]=chr($FD) then
- begin
- if(ss[2]=chr($25))or(ss[2]=chr($18))or(ss[2]=chr($1F))or(ss[2]=chr($01))then
- xs:=chr($FF)+chr($FB)+ss[2] else xs:=chr($FF)+chr($FC)+ss[2];
- end else
- if ss[1]=chr($FB)then
- begin
- if(ss[2]=chr($03))or(ss[2]=chr($01))then
- xs:=chr($FF)+chr($FD)+ss[2] else xs:=chr($FF)+chr($FE)+ss[2];
- end else
- if ss[1]=chr($FE)then
- begin
- xs:=chr($FF)+chr($FC)+ss[2];
- end;
- end;
-
- send(xs);
- end;
- end;
-
- procedure workinput;
- var ts,xs:string;
- isesc,iscmd,n1,n2,n3,spos:integer;
- begin
- isesc:=0;spos:=1;iscmd:=0;ts:='';
- while(length(s)>=spos)do
- begin
- xs:=s[spos];
- if(isesc=1)then
- begin
- if(xs='K')then
- begin
- clearline;
- isesc:=0;
- end else
- if(xs='s')then
- begin
- csx:=wherex;csy:=wherey;
- isesc:=0;
- end else
- if(xs='u')then
- begin
- gotoxy(csx,csy,0);
- isesc:=0;
- end else
- if(length(ts)>2)then
- begin
- if(xs='H')or(xs='f')then
- begin
- getescvar(ts,1);
- getescvar(ts,2);
- gotoxy(vv[2]-1,vv[1]-1,0);
- isesc:=0;
- end else
- if(xs='m')then
- begin
- n2:=getescvar(ts,8);
- for n3:=1 to n2 do
- begin
- n1:=vv[n3];
- if(n1>=30)and(n1<50)then
- begin
- if(n1=30)then textcolor($000000) else
- if(n1=31)then textcolor($0000FF) else
- if(n1=32)then textcolor($00FF00) else
- if(n1=33)then textcolor($00FFFF) else
- if(n1=34)then textcolor($FF0000) else
- if(n1=35)then textcolor($FF00FF) else
- if(n1=36)then textcolor($FFFF00) else
- if(n1=37)then textcolor($FFFFFF) else
- if(n1=40)then textbackground($000000) else
- if(n1=41)then textbackground($0000FF) else
- if(n1=42)then textbackground($00FF00) else
- if(n1=43)then textbackground($00FFFF) else
- if(n1=44)then textbackground($FF0000) else
- if(n1=45)then textbackground($FF00FF) else
- if(n1=46)then textbackground($FFFF00) else
- if(n1=47)then textbackground($FFFFFF);
- end;
-
-
- end;
- isesc:=0;
- end else
- if(xs='J')then
- begin
- getescvar(ts,1);if(vv[1]=2)then clrscr;
- isesc:=0;
- end else
- if(xs='A')then
- begin
- getescvar(ts,1);
- gotoxy(0,-vv[1],1);
- end else
- if(xs='B')then
- begin
- getescvar(ts,1);
- gotoxy(0,vv[1],1);
- end else
- if(xs='C')then
- begin
- getescvar(ts,1);
- gotoxy(vv[1],0,1);
- end else
- if(xs='D')then
- begin
- getescvar(ts,1);
- gotoxy(-vv[1],0,1);
- end;
-
- end;
- if(isesc=1)then ts:=ts+xs else ts:='';
- end else
- begin
- if(xs=chr(27))then begin write(ts);isesc:=1;ts:=chr(27);end
- else if(xs=chr($ff))then
- begin
- if(iscmd<>0)then workcmd(ts) else write(ts);
- if(iscmd<>0)and(length(ts)=0)then
- begin write(' ');iscmd:=0;end else begin ts:='';iscmd:=1;end;
- end else ts:=ts+xs;
-
- if(iscmd<>0)then
- begin
- if(xs<>chr($FA))and (iscmd=1)and (length(ts)>1)then begin workcmd(ts);ts:='';iscmd:=0;end;
- if(xs=chr($FA))and (iscmd=1) then begin iscmd:=2;end;
- if(xs=chr($F0))and (iscmd=2) then begin workcmd(ts);ts:='';iscmd:=0;end;
- end;
-
-
-
- end;
- spos:=spos+1;
- end;
- if(isesc=0)and(iscmd=0)then begin write(ts);s:='';end else s:=ts;
- end;
-
-
-
- begin
- setstatus('ANSI telnet terminal connected to '+nv_remoteip+':'+inttostr(nv_port));
- textbackground($000000);
- textfont(0);setoemcp(1);
- textcolor($00FF00);
- clrscr;
- s:='';SetArrayLength(vv,16);
- repeat
- evnt:=waitevent(v1,v2);
- if evnt=1 then
- begin
- s:=s+recv;
- workinput;
- end;
-
- if evnt=4 then
- begin
- if(v1<128) then
- begin
- if(v2=37)then begin send(chr(27)+'[D');end;
- if(v2=39)then begin send(chr(27)+'[C');end;
- if(v2=40)then begin send(chr(27)+'[B');end;
- if(v2=38)then begin send(chr(27)+'[A');end;
- end
- end;
- if evnt=5 then
- begin
- xs:=chr(v2);
- if(v2=13)then xs:=xs+chr(10);
- send(xs);
- end;
- if evnt=6 then
- begin
- s1:='';s2:='';
- i:=getinputtext(s1,s2);
-
- if(v2<>0)then begin s3:=s1+s2; setinputtext(2,'');end
- else begin s3:=s1; setinputtext(1,'');end;
- if(i and 1)<>0 then s3:=s3+chr(13)+chr(10);
- send(s3);
- end;
-
-
- until evnt=0;
- end.
-