(* wlists.mod word lists module. Copyright (C) 2015-2024 Free Software Foundation, Inc. Contributed by Gaius Mulley . This file is part of GNU Modula-2. GNU Modula-2 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Modula-2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Modula-2; see the file COPYING3. If not see . *) IMPLEMENTATION MODULE wlists ; FROM Storage IMPORT ALLOCATE, DEALLOCATE ; CONST maxNoOfElements = 5 ; TYPE wlist = POINTER TO RECORD noOfElements: CARDINAL ; elements : ARRAY [1..maxNoOfElements] OF WORD ; next : wlist ; END ; (* initList - creates a new wlist, l. *) PROCEDURE initList () : wlist ; VAR l: wlist ; BEGIN NEW (l) ; WITH l^ DO noOfElements := 0 ; next := NIL END ; RETURN l END initList ; (* killList - deletes the complete wlist, l. *) PROCEDURE killList (VAR l: wlist) ; BEGIN IF l#NIL THEN IF l^.next#NIL THEN killList (l^.next) END ; DISPOSE (l) END END killList ; (* replaceItemInList - replace the nth WORD in wlist, l. The first item in a wlists is at index, 1. If the index, n, is out of range nothing is changed. *) PROCEDURE replaceItemInList (l: wlist; n: CARDINAL; w: WORD) ; BEGIN WHILE l#NIL DO WITH l^ DO IF n<=noOfElements THEN elements[n] := w ELSE DEC (n, noOfElements) END END ; l := l^.next END END replaceItemInList ; (* putItemIntoList - places an WORD, c, into wlist, l. *) PROCEDURE putItemIntoList (l: wlist; c: WORD) ; BEGIN WITH l^ DO IF noOfElements