LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous messageNext messagePrevious in topicNext in topicPrevious by same authorNext by same authorPrevious page (June 2000, week 1)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:         Wed, 7 Jun 2000 06:31:19 -0400
Reply-To:     Donald Trevoy <d.trevoy@computer.org>
Sender:       "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From:         Donald Trevoy <donaldtrevoy@SNIP.NET>
Subject:      Aggregate Storage/Directory Search under UNIX
Content-Type: text/plain; charset="iso-8859-1"

I've been asked to move a library of SAS/Graph macros from OpenVMS 6.2 to SunOS 5.6; both systems are running SAS 6.12 TS060. What I'm struggling with is how to re-create a aggregate storage location on the new platform that references multiple directories and searches them in order.

The original system uses OpenVMS logicals, one for each of the macros callable by the users, to define an aggregate storage location in which we store the code that macro requires. This we do in a .COM file executed prior to invoking SAS. In that file you would find code like this:

$ DEFINE MACRO_A LIB:[GRAPHICS.MODULES.MACRO_A],

LIB:[GRAPHICS.MODULES.UTILITIES]

$ DEFINE MACRO_B LIB:[GRAPHICS.MODULES.MACRO_B],-

LIB:[GRAPHICS.MODULES.UTILITIES]

$ DEFINE MACRO_C LIB:[GRAPHICS.MODULES.MACRO_C],-

LIB:[GRAPHICS.MODULES.UTILITIES]

These macros are modular by design and in these two directories we store the macro-invoked modules (macros as well) that the user-invoked macro requires. This code is made available with a series of %INCLUDEs located in the user-invoked macro. This code uses the OpenVMS logical as an aggregate storage location. Within macro MACRO_A, for example, you will find code that looks like this:

%INCLUDE MACRO_A(MACRO_1); %INCLUDE MACRO_A(MACRO_2); %INCLUDE MACRO_A(MACRO_3);

In the first of the directories defined by the logical - the one that bears the name of the user-called macro (MACRO_A, MACRO_B.) -- we store code used only by the named macro. In the second directory (UTILITIES) we store the code that is shared by multiple macros.

In order to find macro MACRO_1, SAS initially searches the first directory defined by logical MACRO_A - LIB:[GRAPHICS.MODULES.MACRO_A]. If macro MACRO_1 is not there, SAS then looks in the second listed location - LIB:[GRAPHICS.MODULES.UTILTIES].

This technique allows us to eliminate the storage of duplicate code, even code used by all twelve of the user-callable macros. It also makes this code readily available for browsing from the SAS Display Manager. Because we used operating system logicals, this code is accessible with OpenVMS editors such as EDT and EVE as well.

We'd like to preserve as much of this functionality as possible in the new environment. In an effort to minimize the cost of re-validating the software, we'd also strongly prefer to leave the SAS code unchanged, confining any necessary modifications to the operating specific 'wrapper' that creates the environment in which they work.

My UNIX guru tells me I can't duplicate this aggregate storage/directory search technique on the new platform. Any informed second opinions would be greatly appreciated.

Once again, many thanks to all!

Don


Back to: Top of message | Previous page | Main SAS-L page