Trailing-Edge
-
PDP-10 Archives
-
decuslib10-05
-
43,50337/23/meny.sim
There is 1 other file named meny.sim in the archive. Click here to see a list.
OPTIONS(/E/C/-A/-Q/-I/-D);
! Proceduren MENY {r konstruerad f`r att anv{ndas i validitets-
! kontroller vid meny-dialog-inmatning.
!
! Proceduren testar om inmatningen T {r en otvetydig
! f`rkortning av n}got element i tabellen TABELL.
! (Obs! Exakt match accepteras alltid, {ven om den skulle vara
! en delstr{ng av ett annat element.) Tabellen m}ste
! inneh}lle endast STORA bokst{ver utan avslutande blanka.
! Inmatningen f}r inneh}lla sm} bokst{ver.
! Om ingen tr{ff s} returnernar I v{rdet 0.
! Om T {r tvetydigt returnerar I v{rdet -1 annars
! returneras matchande tabellindex.
! Ett exempel:
!
! BEGIN TEXT ARRAY tabell[1:6];
! INTEGER index;
! BOOLEAN ok;
! TEXT t;
!
! tabell[1]:- Copy("STOP");
! tabell[2]:- Copy("START");
! tabell[3]:- Copy("END");
! tabell[4]:- Copy("ENDURE");
! tabell[5]:- Copy("EXIT");
! tabell[6]:- Copy("G$");
!
! t:- <... input ...>;
! ok:= meny(t,index,tabell,5);
!
! OK blir TRUE om T {r
!
! START (INDEX = 2)
! start (INDEX = 2)
! Sta (INDEX = 2)
! sto (INDEX = 1)
! enD (INDEX = 3)
! endure (INDEX = 4)
! endu (INDEX = 4)
! g} (INDEX = 6)
! g (INDEX = 6)
!
! och FALSE om
!
! S (INDEX = -1)
! ST (INDEX = -1)
! x (INDEX = 0)
! e (INDEX = -1)
! en (INDEX = -1)
;
EXTERNAL TEXT PROCEDURE storbokstav;
BOOLEAN PROCEDURE meny(t,i,tabell,n);
NAME i; TEXT t; TEXT ARRAY tabell; INTEGER i,n;
BEGIN TEXT u; INTEGER j,k,hit; CHARACTER c;
! Checking the array index bounds: ;
OPTIONS(/A); u:- tabell[1]; u:- tabell[n];; OPTIONS(/-A);
u:- storbokstav(t.Strip);
FOR j:= 1 STEP 1 UNTIL n DO
IF u = tabell[j] THEN
BEGIN hit:= 1; k:= j; GO TO ready END ELSE
IF u.Length < tabell[j].Length THEN
BEGIN
IF u = tabell[j].Sub(1,u.Length) THEN
BEGIN k:= j; hit:= hit + 1 END
END;
ready:
meny:= hit = 1;
i:= IF hit = 1 THEN k ELSE Sign(-hit)
END of meny;