File: BuildFileImpl.mesa
Copyright © 1984 by Xerox Corporation. All rights reserved.
Created by: August 16, 1984 6:43:29 pm PDT
Last Edited by: Mayo, August 17, 1984 6:00:17 pm PDT
DIRECTORY
BuildFile,
TiogaOps, TiogaExtraOps, FS,
BuildFileImpl:
CEDAR
PROGRAM
IMPORTS TiogaOps, TiogaExtraOps,
FS, Rope
EXPORTS BuildFile =
BEGIN
OPEN BuildFile;
-- Prepare a template from a Tioga file with key fields.
OpenTemplate:
PUBLIC PROC[fileName: Rope.
ROPE]
RETURNS[Handle] =
BEGIN
-- valid = TRUE if successful
handle: Handle;
haveError: BOOL ← FALSE;
handle.rootRef ← TiogaExtraOps.GetFile[fileName ! FS.Error => {haveError ← TRUE; CONTINUE}];
handle.valid ← ~haveError;
RETURN[handle];
END;
-- Substitute all occurences of key with value
Substitute:
PUBLIC
PROC[hand: Handle, key: Rope.
ROPE, value: Rope.
ROPE] =
BEGIN
found: BOOL;
pat: TiogaOps.Pattern ← TiogaOps.CreateSimplePattern[target: Rope.Cat["", key, ""], case: TRUE, literal: TRUE];
DO
[found, start, end] ← TiogaOps.NodeSearch[pattern: pat, whichDir: $anywhere, startLoc: , endLoc: TiogaOps.LastLocWithin[hand.rootRef]];
IF ~found THEN EXIT;
ENDLOOP;
END;
-- Write the resulting file, invalidating the handle.
WriteAndClose:
PUBLIC
PROC[hand: Handle, fileName: Rope.
ROPE] =
BEGIN
TiogaExtraOps.PutFile[fileName, hand.rootRef];
TiogaExtraOps.FreeTree[hand.rootRef];
hand.rootRef ← NIL;
hand.valid ← FALSE;
END;
END.