(****************************************************************) (* *) (* Gardens Point Modula-2 Library Definition *) (* *) (* *) (* (c) Copyright 1992 Faculty of Information Technology *) (* Queensland University of Technology *) (* *) (* Permission is granted to use, copy and change this *) (* program as long as the copyright message is left intact *) (* *) (****************************************************************) (****************************************************************) (* *) (* File name lookup and create *) (* *) (* original module : kjg July 1992 *) (* modifications : kjg Sep 1992 lowercase default, use *) (* GPNAMES=MIXED for mixed case... *) (* *) (****************************************************************) DEFINITION MODULE GpFiles; FROM UxFiles IMPORT File; (* * this module implements the gpm file lookup strategy. * It was introduced to make the change from lower case * to mixed case file names in a consistent manner for * gpm, build, gpmake, gpscript, decode, mkenumio and * other tools which lookup files based on module names. * The lookup strategy is backward compatible with the * filenames created by previous version of gpm. * * GPNAMES=MIXED GPNAMES=LOWER * lookup(1) name as given; lookup(1) lower case; * lookup(2) lower case; lookup(2) name as given; * lookup(3) DOS length; lookup(3) DOS length; *) CONST fileNameLength = 79; (* max base name length *) oldFileNameLength = 8; (* DOS compatibility *) PROCEDURE GpCreateFile( base : ARRAY OF CHAR; ext : ARRAY OF CHAR; VAR name : ARRAY OF CHAR; VAR file : File); (* NIL if can't create *) (* Truncate base name at fileNameLength. *) (* If ext <> "" then a dot and the ext are *) (* appended, otherwise the base unchanged. *) (* Name is then made lower case unless the *) (* env variable GPNAMES has first character *) (* "m" or "M" at module initialization time *) (* post : name is the name of the created file *) PROCEDURE GpFilename( base : ARRAY OF CHAR; ext : ARRAY OF CHAR; VAR name : ARRAY OF CHAR); (* Truncate base name at fileNameLength. *) (* If ext <> "" then a dot and the ext are *) (* appended, otherwise the base unchanged. *) (* Name is then made lower case unless the *) (* env variable GPNAMES has first character *) (* "m" or "M" at module initialization time *) (* post : name is the name of the created file *) PROCEDURE GpFindLocal( base : ARRAY OF CHAR; ext : ARRAY OF CHAR; VAR name : ARRAY OF CHAR; VAR file : File); (* or NIL if not found *) (* Look for file in current directory ... *) (* If ext <> "" then look for "base.ext", *) (* else look for the file "base" *) (* post : name is the name of the file, if found in *) (* the current directory, else file = NIL *) PROCEDURE GpFindOnPath( path : ARRAY OF CHAR; base : ARRAY OF CHAR; ext : ARRAY OF CHAR; VAR name : ARRAY OF CHAR; VAR file : File); (* or NIL if not found *) (* Look for file first in current directory, *) (* then on the given path. *) (* If ext <> "" then look for "base.ext", *) (* else look for the file "base" *) (* Actual "name" must be long enough for the *) (* longest possible path name! *) (* post : name is the pathname of the file, if *) (* file found, else file = NIL *) END GpFiles.