| La procedura è scritta
in Pascal. L’analisi delle istruzioni del programma sorgente evidenzia le varie fasi della procedura:
| predispone
il campo di acquisizione con (“tipo”=1), o senza
(“tipo”=0), cornice
[1] |
| organizza
il ciclo d'acquisizione dei caratteri della stringa
[2]
| controlla la presenza del cursore
[3] |
| legge di tasti, con “eco a video” e
memorizza nel vettore i soli caratteri ammessi
[4] |
| eventuale servizio del tasto <BackSpace>
[5] |
| segnala errore se si cancella indietro
troppo [6] |
| segnala errore alla pressione di ogni altro
tasto [7] |
| uscita dal ciclo d’acquisizione esclusivamente con la pressione di <Enter>
[8] |
|
| se
“giust”=1
“giustifica a destra” i caratteri nella stringa
d’acquisizione [9] |
Codice Sorgente |
|
|
|
|
PROCEDURE
INstring (VAR
lunghezza:integer;
VAR stringa:Array of
char;
max,rig,col,txt,sfo,tipo,giust:integer);
VAR n,l,i,j,r,err:integer;
ex,tot:longint;
tasto:char;
BEGIN
RipCur;
{------[1]---------------------------------------------}
textcolor(txt);
textbackground(sfo);
IF tipo<>0 THEN
{Cornice1(rig , col ,
lar ,alt,txt,sfo,tipo,modo)}
Cornice1(rig-1,col-3,max+6,
3 ,txt,sfo,
2 , 1) ;
ELSE
FOR i:=1 TO max+2 DO
begin
gotoxy(col-2+i,rig);
write (' ');
end;
{-----[2]----------------------------------------------}
i:=0;
gotoxy(col,rig);
REPEAT
IF i<max THEN RipCur ELSE ViaCur; {---[3]----------}
REPEAT UNTIL keypressed;
tasto:=readkey;
IF (tasto>=' ') AND (i<max)
{---[4]----------}
begin
{* Gestione dei *}
i:=i+1;
{* Caratteri *}
stringa[i]:=tasto;write(tasto);
{* Validi
*}
end
ELSE IF tasto=char(8) THEN
{---[5]----------}
IF i>=1 THEN
{* Gestione per *}
begin
{* il tasto *}
i:=i-1;
{* BackSpace *}
write(tasto,' ',tasto);RipCur;
{*
*}
end
ELSE
{---[6]----------}
begin
{* In ogni altro*}
sound(100);delay2(300);
{* caso segnala *}
nosound;
{* errore
*}
end;
ELSE IF tasto<>char(13) THEN
{---[7]----------}
begin
{* In ogni altro*}
sound(100);delay2(300);
{* caso segnala *}
nosound;
{* errore *}
end;
UNTIL
tasto=char(13);
{---[8]----------}
lunghezza:=i;
{*Lascia l'informazione in uscita*}
{-----[9]----------------------------------------------}
IF (giust=1) AND (i<>max) THEN
begin
{* Se è il caso *}
gotoxy(col,rig);
{* giustifica a *}
FOR i:=1 TO max-lunghezza DO
{* destra nel *}
write (' ');
{*campo di acqui- *}
FOR i:=1 TO lunghezza DO
{*sizione i carat-*}
write (stringa[i]);
{* teri digitati *}
end;
{* in precedenza *}
END;
|
|