home *** CD-ROM | disk | FTP | other *** search
- program Terminal_ANSI_TELNET;
- var evnt,i,csx,csy:integer;
- s,xs,s1,s2,s3:string;
- v1,v2:integer;
- vv:array of integer;
-
- function getescvar(ss:string;n:integer):integer;
- var i,j,k,e:integer;
- ts:string;
- begin
- j:=3;i:=3;e:=0;k:=0;
- if(ss[length(ss)]<>';')then ss:=ss+';';
- repeat
- if ss[i]=';' then
- begin
- ts:=copy(ss,j,i-j);
- if(length(ts)<>0)then
- begin
- k:=k+1;
- vv[k]:=strtointdef(ts,0);
- if (i=length(ss))or(k=n)then e:=1;
- end;
- j:=i+1;
- end;
- i:=i+1;
- until e=1;
- result:=k;
- end;
-
-
- procedure workcmd(ss:string);
- var 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;setlength(ts,0);
- 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
- case n1 of
- 30:textcolor($000000);
- 31:textcolor($0000FF);
- 32:textcolor($00FF00);
- 33:textcolor($00FFFF);
- 34:textcolor($FF0000);
- 35:textcolor($FF00FF);
- 36:textcolor($FFFF00);
- 37:textcolor($FFFFFF);
-
- 40:textbackground($000000);
- 41:textbackground($0000FF);
- 42:textbackground($00FF00);
- 43:textbackground($00FFFF);
- 44:textbackground($FF0000);
- 45:textbackground($FF00FF);
- 46:textbackground($FFFF00);
- 47:textbackground($FFFFFF);
- end;
- 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 setlength(ts,0)
- 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 setlength(ts,0);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);setlength(ts,0);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);setlength(ts,0);iscmd:=0;end;
- end;
-
-
-
- end;
- spos:=spos+1;
- end;
- if(isesc=0)and(iscmd=0)then begin write(ts);setlength(s,0);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+#13#10;
- send(s3);
- end;
-
-
- until evnt=0;
- end.
-