unit iface; { INTERFACE, for creating TEXT interfaces. } INTERFACE uses crt,dos,link,txtwin; { NOTE : Link in POINTERS.SWG txtwin in TEXTWNDW.SWG } const kbnull=#0; kbesc=#27; kbpgup=#73; kbpgdown=#81; kbhome=#71; kbend=#79; kbleft=#75; kbright=#77; kbup=#72; kbdown=#80; kbf1=#59; kbenter=#13; kbdel=#83; kbbackspace=#8; colseg:word=$b800; type tchok=set of char; function getkey(const s:string;const chok:tchok):char; function getstring(col,x,y,max:byte;legalch:tchok):string; procedure xorbar(x1,x2,y:word;c:byte); function selectbar(xp,yp,x2,num,col,ystart:byte;abort:boolean):byte; function selectfile(wildcard:string;x,y,col:byte;abort:boolean):string; IMPLEMENTATION var dirlink:plink; dirinfo:searchrec; function getkey(const s:string;const chok:tchok):char; var ch:char; begin write(s); repeat ch:=readkey; until(ch in chok); getkey:=ch; end; function getstring(col,x,y,max:byte;legalch:tchok):string; var ch:char; input,temp:string; oldcol,i,xpos,ypos:byte; hoejre,venstre:string[23]; begin getstring:=''; gotoxy(x,y); oldcol:=textattr; textattr:=col; ch:=#0; input:=''; hoejre:=''; venstre:=''; xpos:=x; ypos:=y; repeat gotoxy(xpos,ypos); venstre:=copy(input,1,xpos-13); hoejre:=copy(input,xpos-12,36-xpos); repeat ch:=readkey; until(ch in legalch); if(ch=kbnull)then begin ch:=readkey; case ch of kbhome:xpos:=x; kbleft:if(xpos>x)then dec(xpos); kbright:if(xposkbbackspace)and (ch<>kbenter)then begin { input:=venstre+ch+hoejre; (* inds‘t karakter *)} temp:=copy(input,1,(xpos-x)); temp:=temp+ch; temp:=temp+copy(input,(xpos-x)+1,length(input)); input:=temp; write(ch); inc(xpos); end; if(ch=kbbackspace)then begin if(ord(input[0])>0)then begin if(xpos>x)then dec(xpos); delete(venstre,(xpos-x)+1,1); gotoxy(xpos,ypos); write(' '); input:=venstre+hoejre; end; end; gotoxy(x,y); clreol; write(input); until(ch=kbenter)or(ch=kbesc); if(ch=kbesc)then begin getstring:=''; exit; end; textattr:=oldcol; getstring:=input; end; procedure xorbar(x1,x2,y:word;c:byte); assembler; asm dec [y] push colseg pop es mov di,[y] mov bx,di shl di,6 shl bx,4 add di,bx add di,[x1] shl di,1 dec di mov cx,[x2] sub cx,[x1] inc cx @@loop: mov al,[c] xor es:[di],al add di,2 dec cx jnz @@loop end; function selectbar(xp,yp,x2,num,col,ystart:byte;abort:boolean):byte; var ch:char; y,oy:byte; done:boolean; begin selectbar:=0; oy:=255; y:=ystart; if(y>num)then exit; done:=false; repeat if(y<>oy)then begin if(oy<>255)then xorbar(xp,x2,pred(oy+yp),col); xorbar(xp,x2,pred(y+yp),col); oy:=y; end; ch:=readkey; if(ch=kbnull)then begin ch:=readkey; case ch of kbleft,kbup:if(y>1)then dec(y); kbright,kbdown:if(y