(* ---------------------------------------------------------------------------- * $Id: LISTTOOLS.mi,v 1.1 1994/11/28 20:32:51 dolzmann Exp $ * ---------------------------------------------------------------------------- * Copyright (c) 1994 Universitaet Passau * ---------------------------------------------------------------------------- * This file is part of MAS. * ---------------------------------------------------------------------------- * $Log: LISTTOOLS.mi,v $ * Revision 1.1 1994/11/28 20:32:51 dolzmann * New modules SYSINFO.md, SYSINFO.mi, LISTTOOLS.md, and LISTTOOLS.mi. * Makefile adapted. * * ---------------------------------------------------------------------------- *) IMPLEMENTATION MODULE LISTTOOLS; (* List Tools Implementation Module. *) FROM MASBIOS IMPORT LETTER, MASORD; FROM MASELEM IMPORT GAMMAINT, MASEVEN; FROM MASSTOR IMPORT ADV, COMP, INV, LIST, SIL; FROM SACLIST IMPORT EQUAL, LIST2, LIST5, SLELT; CONST rcsidi = "$Id: LISTTOOLS.mi,v 1.1 1994/11/28 20:32:51 dolzmann Exp $"; CONST copyrighti = "Copyright (c) 1994 Universitaet Passau"; PROCEDURE CLISTFA(atom:LIST):LIST; (* character list from atom. The decimal printable representation of atom is returned as a character list. *) VAR result:LIST; VAR minus:BOOLEAN; BEGIN result:=SIL; IF atom<0 THEN minus:=TRUE; atom:=-atom; ELSE minus:=FALSE; END; REPEAT result:=COMP((atom MOD 10),result); atom:=atom DIV 10; UNTIL atom=0; IF minus THEN result:=COMP(MASORD("-"),result); END; RETURN result; END CLISTFA; PROCEDURE LIST6(a1,a2,a3,a4,a5,a6:LIST):LIST; (* list of 6 elements. The list (a1,a2,...a6) is returned. *) BEGIN RETURN COMP(a1,LIST5(a2,a3,a4,a5,a6)); END LIST6; PROCEDURE LPAIRS(L:LIST):LIST; (* list pairs. L=(l1,...ln) is a list. A list containing all lists (li,lj), where li and lj are elements of L and i <> j is returned. *) VAR result, pointer, first, second: LIST; BEGIN result:=SIL; WHILE L<>SIL DO ADV(L, first,L); pointer:=L; WHILE pointer<>SIL DO ADV(pointer, second,pointer); result:=COMP(LIST2(first,second),result); END; END; RETURN result; END LPAIRS; PROCEDURE LSRCHQ(a,L:LIST):LIST; (* List search equal. a is an element, L is a list. The first position of a in L is returned if a is member of L, otherwise 0 is returned. *) VAR b,i: LIST; BEGIN i:=0; WHILE L<>SIL DO i:=i+1; ADV(L, b,L); IF EQUAL(a,b)=1 THEN RETURN i; END; END; RETURN 0; END LSRCHQ; PROCEDURE UPCASE(clist:LIST):LIST; (* upcase character list. clist is a character list. All letters in clist are converted to upper case. The result is returned. *) VAR c:GAMMAINT; VAR result:LIST; BEGIN result:=SIL; WHILE clist<>SIL DO ADV(clist,c,clist); IF LETTER(c) AND MASEVEN(c) THEN result:=COMP(c+1,result); ELSE result:=COMP(c,result); END; END; RETURN INV(result); END UPCASE; END LISTTOOLS. (* -EOF- *)