




            ______________________________________________________________________________
            ______________________________________________________________________________
             
            Contributions
             
            ______________________________________________________________________________
            ______________________________________________________________________________
             
            Contributions for the  newsletter  can  be  sent  to  either  of the following
            addresses:
             
            Editor, DATATRIEVE Newsletter                  Joe H. Gallagher, Ph. D.
            c/o DECUS U. S. Chapter                        DATATRIEVE Newsletter Editor
            249 Northboro Road, BP02                       Director, Medical and
            Marlboro, MA  01752                             Research Computing
                                                           Cleveland Clinic Foundation
                                                           9500 Euclid Avenue
                                                           Cleveland, Ohio  44106
             
            Letters and articles for publication  are  requested  from members of the SIG.
            They may include  helpful  hints,  inquiries  to  other  users, reports on SIG
            business, summaries of  SPRs  submitted  to  Digital  or other information for
            members of the DATATRIEVE SIG.  Machine readable input is highly desirable and
            machine-to-machine  transfer  of  material  is  preferred,  but  most anything
            legible will be considered.  However,  this  newsletter is not a forum for job
            and/or head hunting, nor is commercialism appropriate.
             
            ______________________________________________________________________________
            ______________________________________________________________________________
             
            Table of Contents
             
            ______________________________________________________________________________
             
             
                       Volume 6, Number 2
             
                   2   Chairman's Corner and Fourth Generation Language SIG Proposal
                   6   DATATRIEVE SIG Sponsored Presentations at New Orleans Symposium
                  16   Hints and Kinks
                  17   Article - DATATRIEVE Application Development Standards
                  29   Hints and Kinks
                  30   Article - An Open, Menu-Driven, Graphic Report Generator using 
                                 DTR and VAX-BASIC
                  36   Article - A Useful DATATRIEVE Date Function
                  37   DATATRIEVE Masters
                  38   DATATRIEVE SIG Officers and Steering Committee
                  40   From the Editor's Pen
                  41   News Briefs
                  42   DATATRIEVE User Command File
             
            ______________________________________________________________________________
            ______________________________________________________________________________
             


            Wombat Examiner Volume 6, Number 2                                           1






            _____________________________________________________________________________
             
            Chairman's Corner
             
            Larry Jasmann, U. S. Coast Guard, Burke, VA
             
            _____________________________________________________________________________
             
                The last  several  months  have  been  very  active,  both  in  and out of
            DATATRIEVE SIG.  One of the most  pressing matters which has occupied my time,
            and that of the  Steering  Committee  is  the  need  to  change the name and a
            partial redirection of the focus of the  SIG.  The following concept paper was
            submitted and approved by the SIG  council  in the latest Florida meeting, and
            it represents a concise statement of what  we  are doing and why.  Please read
            it carefully, and I welcome your comments to it.
             
                Above all, please be reassured that  the  Wombat  is not going away, he is
            just expanding his scope of activity a bit.
             
            _____________________________________________________________________________
             
                       DATATRIEVE and Fourth Generation Language SIG Proposal
             
            Background:
             
                In order to understand why DATATRIEVE  SIG  wishes to change it's name and
            the scope of its activities,  it  is necessary to understand DEC's predicament
            with DATATRIEVE.  DATATRIEVE at this point  is second only to FORTRAN in sales
            for layered software products.  Clearly, it  will be around for quite a while.
            It is useful  on  many  levels,  from  a  novice  computer  user  up to system
            programmers.  It is an  extremely  powerful and flexible data management tool,
            making possible application production  savings  of  up  to  80%.  In spite of
            this, DEC is actively  working  on  products  which  would,  at least in part,
            replace DATATRIEVE.  Why is this?  There are several reasons:
             
               1. DATATRIEVE is  a  fairly  mature  product.    It  has  gone through many
                  revisions on the PDP side, and two   major rewrites on the VAX side.  In
                  terms of functionality, it has expanded about as far as it can go in its
                  present  form.    The  volume  of  code  is  large,  and  it  is getting
                  increasingly  difficult  to  add  new  features  without  "breaking" old
                  features.  In a business that  sees a major breakthrough every 6 months,
                  a product that has  reached  the  end  of  its functionality growth will
                  sooner or later be overtaken by the competition.
             
               2. While DATATRIEVE is indeed "user  friendly",  it  isn't as helpful as it
                  could be to non-computer users.   Menu driven packages are easier to use
                  for those who are not  computer  literate.  DATATRIEVE functionality has
                  expanded dramatically on the "top" end, but on the "low" end, other than
                  a better help  facility,  there  hasn't  been  much  growth.   Given the
                  structure of the language, this is not likely to change.
             
               3. The cost of getting the  bells and whistles incorporated into DATATRIEVE
                  is high.  Not only  is  the  software  fairly expensive (cheaper than it
                  used to be!), but it is  CPU  and memory intensive, particularly if used
                  improperly.  Unless one really  understands DATATRIEVE, it is inevitable

            2                                           Wombat Examiner Volume 6, Number 2






                  that it be used in an inefficient way.
             
                Another issue is the fact  that  significant third party software products
            now exist which do the  same  sorts  of  things that DATATRIEVE does. Users of
            these products belong to DECUS  and  their  needs,  to the extent permitted by
            commercialism guidelines, need to be addressed.
             
                Concerns such as those expressed  above  have focused the attention of the
            DATATRIEVE SIG Steering  Committee  on  the  needs  of  users  of this type of
            product, rather than DATATRIEVE exclusively.    When we searched our corporate
            soul, we found  that  beneath  the  surface,  we  represent  the  needs of DEC
            computer users  who  have  a  need  to  access  data  bases  for informational
            purposes.  Particularly,  we  represent  the  needs  of  those  who use fourth
            generation products such as DATATRIEVE to  do  this.  By changing the scope to
            focus on a type of user, rather  than  a particular product, we find that many
            of the ambiguities which have plagued us in the past disappear.
             
                So what is a fourth generation  language  anyway?  Isn't this just another
            ill-defined buzz word that leads down  a  path rosey at the beginning and full
            of rocks at the end?    I'm  not  an  expert,  but  to  me the term applies to
            languages that you tell WHAT to do (and get results) rather than HOW to do it.
            That is clearly an over simplification, but  perhaps it will work in a limited
            frame of reference.  Fourth Generation  Languages  do many things, the ones we
            are interested in  run  on  DEC  hardware,  and  are  primarily used to access
            databases for  decision  support.    DATATRIEVE  certainly  falls  within that
            category as does ADE.  We are not interested for example, in fourth generation
            products that control robots, or operate process control systems.
             
            The Proposal:
             
            We propose:
             
               1. To change the name  of  the  DATATRIEVE  SIG  to  be the "DATATRIEVE and
                  Fourth Generation Language SIG", or DTR/4GL" for short.
             
               2. To adopt the following mission:
             
                  The DTR/4GL SIG serves the informational  needs of all DECUS members who
                  are concerned with accessing  and  manipulating information in databases
                  through the use  of  DATATRIEVE  and  other fourth generation languages.
                  The SIG also serves as  a two-way communications facilitator between DEC
                  and this user community.
             
                SIG membership will initially consist of  present DTR SIG members, most of
            whom are DATATRIEVE users.  As DEC announces new products in this same product
            area, DTR/4GL would assume a leadership  role  in the user development and use
            of these products.  While the  user  base  will diversify, it is expected that
            the essential needs and motivations of  members  of the SIG will stay the same
            as the present DTR SIG  members.    DTR/4GL  would  also pick up users who are
            interested in third party  products  which  are  at  present mostly ignored by
            DECUS.  The present DTR  steering  committee will initially staff the steering
            committee of the new SIG.
             
                The primary DEC interface for the SIG initially would be with a DATATRIEVE
            product manager  in  the  VAX  Information  Architecture  development group in

            Wombat Examiner Volume 6, Number 2                                           3






            Engineering.  The new products under development are currently handled by this
            same group in DEC, so continuity will be  easy to achieve and would seem to be
            adequate for the new SIG, at least in the initial stages.
             
                The services to be  provided  by  DTR/4GL  will consist of the traditional
            services provided by an  applications  oriented  SIG.   A newsletter, symposia
            sessions, a communications relationship  with  DEC,  library support, and user
            assistance would be the  mainstay  products.    The  present DATATRIEVE SIG is
            providing these services currently, and as products appear, the services would
            be gradually expanded to meet growing needs.
             
            Issues:
             
            SIG Overlap:
             
                The primary concern in this area is  (as  it has always been for DTR) with
            DMS.  In the  view  of  the  two  present  SIG  chairs, this change in mission
            actually  clarifies  the  relationship  between  the  two  SIGs.    DTR/4GL is
            interested in users and  applications  designers  who  are satisfying end user
            needs.  DMS, on the other  hand,  is really concerned with database management
            which implies products such as RMS,  DBMS,  and  RDB and problems such as data
            architectures and corporate data management.    A fundamental fact, which both
            SIG's recognize,  is  that  the  basic  user  groups  are  quite  separate and
            distinct, although also clearly  related.    DTR/4GL  will  continue to have a
            unique, close relationship with DMS.
             
                A concern which  was  largely  responsible  for  starting  the movement to
            change the SIG's role is the need  to  avoid confusion and overlap caused by a
            single product SIG (DTR) being overtaken by  a  new SIG formed to care for the
            users of a new product in the same  general area.  Changing the mission of the
            DTR SIG to a functional orientation  from a product orientation precludes this
            from happening.
             
            Feasibility:
             
                DATATRIEVE is  currently  a  moderately  sized  SIG  with  lots  of active
            energetic members.  It has  a  reputation for getting things done effectively.
            That energy will flow into the new SIG and provide the initial boost needed to
            keep things moving.  Additionally  the  excitement and user enthusiasm created
            by a new series of  products  should  add  more  fuel  to  the fire.  I see no
            problem in getting this SIG to go.
             
                A  key  leadership  challenge  --  which  is  recognized  by  the steering
            committee -- is the  need  to  keep  the  fun  loving, dynamic and spontaneous
            atmosphere of DATATRIEVE  SIG  alive  in  the  new  SIG.    We must (and will)
            emphasize to our old DATATRIEVE  membership  that the Wombat has not abandoned
            him, he is just diversifying a bit.
             
            Implementation Strategy:
             
                Provided that the concepts expressed by this paper are accepted by the SIG
            Council, the Management  Council,  and  the  Board,  we  intend to execute the
            following steps to implement the new SIG:
             


            4                                           Wombat Examiner Volume 6, Number 2






               1. Announce to  DECUS  membership  during  the  New  Orleans  Symposium our
                  intention to modify the mission of the SIG.
             
               2. At a Woods Meeting after New  Orleans  make the necessary changes to our
                  operating procedures.
             
               3. Following  that,  to  proceed  with  the  relicensing  process.    It is
                  anticipated that minimal  changes  to  the  present  DTR  budget will be
                  required.
             
               4. Assume the role of the new SIG at the 1985 Fall Symposium.
             
            Impact on DECUS:
             
                We believe that the impact of this action upon DECUS will be positive.  It
            adds no  additional  management  overhead,  and  it  clarifies  the  roles and
            missions of SIG's in the  area  of  data  management and decision support.  It
            also provides a  structure  more  adaptable  to  future  DECUS growth and more
            flexible in meeting DEC's changing product marketing plans.
             
            Relationship to Strategic Plan:
             
                We  feel  that  this  new  structure  addresses  many  of  the initiatives
            expressed in the Strategic Plan:
             
            Membership:
             
                This structure is more adaptable to  serving a DECUS membership of 100,000
            by 1990.  This  structure  provides  a  clearer  focus on end-user application
            activities in the database area.
             
            DECUS/Vendor relationship:
             
                The DTR/4GL SIG  is  more  flexible  in  meeting  DEC's changing marketing
            patterns.  It provides a communications  link  to a market segment rather than
            the users who have already bought a specific DEC product.
             
            Services:
             
                DTR/4GL SIG will provide  more  effective  and  complete services to users
            because it is addressing the needs of  a complete segment of users rather than
            the needs of the users of a single product.
             
            Leadership:
             
                This SIG will draw people  into  leadership  from areas that have not been
            previously  tapped  because  their  needs   were   not  addressed.    This  is
            particularly true for users of third party products.
             
            DECUS Relationships to the Outside World:
             
                Because it  addresses  products  previously  ignored  by  DECUS,  this SIG
            enhances DECUS relationships to the outside world.
             


            Wombat Examiner Volume 6, Number 2                                           5






            _____________________________________________________________________________
             
            DATATRIEVE SIG Sponsored Presentations at New Orleans Symposium
             
            Chris Wool, Symposium Committee Representative, E. I. duPont, Wilmington, DE
             
            _____________________________________________________________________________
             
               The following are the abstracts of presentations which will be sponsored by
            the DATATRIEVE SIG at the 1985 Spring DECUS Symposium, May 27-31, 1985, in New
            Orleans, Louisiana.  Of particular  interest is the Fourth Generation Language
            Panel at 1:00 p.m. on the 27th and Talking to DATATRIEVE-32 and VIA in English
            at 6:00 p.m. on the  27th  in  light  of the "DATATRIEVE and Fourth Generation
            Language SIG Proposal" by Larry Jasmann which  appears on page 2 of this issue
            of the Wombat Examiner.  In  addition to the presentations listed below, there
            are a large number of presentation  which  are  sponsored by the DMS SIG which
            DATATRIEVE users will find  of  interest.    In  particular, there are several
            sessions on Thursday, May 30, on VAX Information Architecture. 
             
            _____________________________________________________________________________
             
             
                           DATA MANAGEMENT SYSTEMS SIG AND DATATRIEVE SIG
                                        JOINT OPENING SESSION
             
                     Stephen Pacheco, Chairman        Lawrence Jasmann, Chairman
                    Data Management Systems SIG             DATATRIEVE SIG      
             
            DM020 Monday, May 27, 10:00 to 11:00 a.m., Grand Salon C
            The DMS and DTR SIG's  will  outline  their  activity  for the week as well as
            highlight sessions and other activities of interest to those attending the New
            Orleans Symposia.  The steering committee people for both SIG's as well as the
            SIG's Digital counter parts will be  introduced.  The campground locations and
            schedules will be provided.    The  DMS  SIG will announce which documentation
            kits will be given away, as well as  the time and place of the announcement of
            the winners.  Questions and  comments  from symposia attendees will be welcome
            by both SIG's.
             
             
                                  FOURTH GENERATION LANGUAGE PANEL
             
                         Lawrence Jasmann                    Charles Duncan
                        U. S. Coast Guard             Digital Equipment Corporation
                            Burke, VA                           Nashua, NH
             
            DT008 Monday, May 27, 1:00 to 2:00 p.m., Grand Salon C
            This session will be a probing  discussion of the meaning, application and use
            of Fourth Generation Languages as they  are  applied to data base and decision
            support tasks.  Speakers will be  balanced between DEC and the user community,
            and both DEC's perspective and user views will be examined.  DATATRIEVE, DEC's
            primary product in this area  will  be  discussed,  as well as other products.
            Some questions which will be addressed include:
             



            6                                           Wombat Examiner Volume 6, Number 2






               * What should a Fourth Generation Language do?
               * What additional functionality is needed?
               * How does one define a Fourth  Generation Language and distinguish it from
                 other computer languages?
             
            Orientation: Intermediate/General
             
             
                               THE 20 MOST ASKED DATATRIEVE QUESTIONS
             
                                          Katherine Wrobel
                                    Digital Equipment Corporation
                                        Colorado Springs, CO
             
            DT019 Monday, May 27, 4:00 to 5:00 p.m., Elmwood
            We, at the Customer Support Center  in  Colorado Springs, have spent some time
            to come up with a  list  of  the  20  most  asked DATATRIEVE questions.  Those
            questions cover  everything  from  common  pitfalls  to  popular  how-to's and
            gotchas, most of which are also in Digital's Software Information Network.  We
            had a  lot  of  fun  preparing  this  list  and  hope  that  you  will find it
            interesting and enjoyable.
             
            Orientation: Intermediate/Technical
             
             
                                     DATATRIEVE-11 STATUS UPDATE
             
                                           Robert M. Laham
                                    Digital Equipment Corporation
                                              Stow, MA
             
            DT013 Monday, May 27, 5:00 to 6:00 p.m., Elmwood
            DATATRIEVE-11 is an  interactive  query,  report,  and data maintenance system
            that is well  suited  for  low-cost,  multi-user  systems.    At this session,
            Digital's DATATRIEVE-11 Product  Management  and  Development Group will speak
            about the most recent releases of products within the family of DATATRIEVE-11,
            Micro/RSX   DATATRIEVE-11,   PDP-11    DATATRIEVE/VAX,   and   PRO/DATATRIEVE.
            Additionally, they will talk about  future  offerings  for the family and will
            discuss some of  the  commonalities  and  differences  among the DATATRIEVE-11
            products.
             
            Orientation: Novice/General/Managerial
             
             
                             TALKING TO DATATRIEVE-32 AND VIA IN ENGLISH
             
                                              Tom Kush
                                        BBN Software Products
                                            Cambridge, MA
             
            DT030 Monday, May 27, 6:00 to 6:30 p.m., Magnolia
            This paper discusses an  English-language retrieval interface to DATATRIEVE-32
            called the IRUS system.    IRUS  makes  it  possible for end-users to retrieve
            information from DATATRIEVE without knowing either DATATRIEVE or the structure
            of the underlying files: for example, by typing a question such as "Which male

            Wombat Examiner Volume 6, Number 2                                           7






            employees have health benefits?"  The presentation will provide an overview of
            the IRUS technology and  detailed  discussion  of implementation strategies in
            working with DATATRIEVE, the CDD and VAX file systems.
             
            Orientation: Intermediate/General
             
             
                               DATATRIEVE APPLICATION DESIGN WORKSHOP
             
                                  Margaret M. Racel and Mitzi Ware
                                               E G & G
                                            Las Vegas, NV
             
            DT004 Monday, May 27, 7:00 to 8:00 p.m.
            This session will describe the  way  in  which  a typical application might be
            analyzed and implemented.   The  presentation  will  include system design and
            initial considerations such as  what  data  to  include,  when to use multiple
            files, and how to use  RMS  utilities  to optimize files. The system described
            includes a DCL menu  to  control  system  entry, a DATATRIEVE/FMS procedure to
            update  the  master  data  file,   DATATRIEVE  procedures  to  report  on  the
            information, and the RMS 'CONVERT' utility to optimize file structure.
             
            Orientation: Intermediate/Technical
             
             
                            TRAINING THE INEXPERIENCED USER IN DATATRIEVE
             
                                             Lori Korbas
                                    North Shore Sanitary District
                                             Gurnee, IL
             
            DT012 Monday, May 27, 8:00 to 8:30 p.m., Grand Salon C
            Do you feel that your  users  would  benefit  greatly from DATATRIEVE but need
            extra guidance to answer the questions that so many of us have had? DATATRIEVE
            has so many potentials  but  many  non-DP  personnel  get frustrated without a
            helping hand and predetermined  examples.    The North Shore Sanitary District
            has devised a 10-lesson introductory DATATRIEVE training program.  The lessons
            step the user through different commands  such as SHOW, PRINT, FIND, and SORT.
            The instructor can help  relate  how  DATATRIEVE  can  be used by a particular
            individual.  These DATATRIEVE lessons are  just one way to broaden your users'
            capabilities.
             
            Orientation: Intermediate/General
             
             
                              ON THE EDUCATION OF NEW DATATRIEVE USERS
             
                                           Stephen Pacheco
                                           Ship Analytics
                                        North Stonington, CT
             
            DT016 Monday, May 27, 8:30 to 9:30 p.m., Grand Salon C
               Educating  people  to  use  DATATRIEVE  usually  presents  very interesting
            problems.   The  main  reason  for  these  problems  is  because DATATRIEVE is
            powerful enough to let you consider the difficult problems very quickly, which

            8                                           Wombat Examiner Volume 6, Number 2






            is not the case with most  other  programming languages.  New DATATRIEVE users
            range in experience from none  to  system  programmers.  The range of problems
            includes simple list management  to  complete application development (e.g., a
            financial package ) in DATATRIEVE. These factors, user experience and range of
            problem types, makes education  most  challenging and possibly frustrating for
            the instructor.
               Mr. Pacheco has been teaching  DATATRIEVE  for  4 years.  This session will
            outline a number of points  which  have  proved  to be significant in terms of
            educating new users:
               * How do you deal with the naive user.
               * What are the most difficult concepts for a new user to understand.
               * What concepts are most often misunderstood.
               This session will be of interest to those people who find themselves in the
            position to introduce people to  DATATRIEVE.   Particular examples of problems
            and means of explaining them will be used.
             
            Orientation: Intermediate/Managerial
             
             
                                    SO WHAT IS DATATRIEVE ANYWAY?
             
                                   Mike Daugherty & Charles Duncan
                                    Digital Equipment Corporation
                                             Nashua, NH
             
            DT021 Tuesday, May 28, 9:00 to 10:00 a.m., Grand Salon C
            VAX DATATRIEVE is Digital's fourth generation application development language
            and programmer productivity tool.    DATATRIEVE  also  has query and reporting
            capabilities.  The  purpose  of  this  session  is  to introduce the features,
            capabilities, and uses of DATATRIEVE  across the various machine architectures
            that support it.
             
            Orientation: Novice/General
             
             
                                    SO WHY USE DATATRIEVE ANYWAY?
             
                                          Lawrence Jasmann
                                          U. S. Coast Guard
                                              Burke, VA
             
            DT003 Tuesday, May 28, 10:00 to 11:00 a.m., Grand Salon C
            Having heard a basic description of  what DATATRIEVE is, this session provides
            an insight on potential uses for  DATATRIEVE and a brief discussion on various
            strategies to use DATATRIEVE to improve user effectiveness.
             
            Orientation: Managerial
             
             







            Wombat Examiner Volume 6, Number 2                                           9






                                DATATRIEVE RECORD DEFINITION WORKSHOP
             
                                           Diana Washburn
                                            Hanes Hosiery
                                          Winston-Salem, NC
             
            DT009 Tuesday, May 28, 11:00 a.m. to 12:30 p.m., Grand Salon C
            The record definition in VAX  DATATRIEVE  is  an extremely powerful tool.  The
            many features of the  record  definition  clauses alone can dazzle programmers
            who have used record  definitions  in  other  languages.  This session expands
            upon the material in  the  DATATRIEVE  manuals  and  presents some interesting
            possibilities  for  enhancing   applications   through   the   use  of  record
            definitions.   Attendees  will  be  exposed  to  special techniques, potential
            pitfalls and beneficial  alternatives  for  the  definition and utilization of
            data.  To benefit  from  this  session,  the  attendee  should  be more than a
            beginning DATATRIEVE user and should  have  some experience defining and using
            record definitions.  The material is geared to VAX DATATRIEVE.
             
            Orientation: Intermediate/Technical
             
             
                         CONSERVING AND MAXIMIZING THE USE OF POOL SPACE IN
                                  DATATRIEVE-11 AND PRO-DATATRIEVE
             
                                          Philip Dickerson
                                    Northern Telecom Incorporated
                                             Concord, NH
             
            DT017 Tuesday, May 28, 12:30 to 1:00 p.m., Grand Salon C
            The fixed task size  creates  a  limitation  of  "pool space" in DATATRIEVE on
            PDP-11 and PRO-300 machines.   This  pool space limitation places restrictions
            on the use  of  large  domains,  complex  record structures, multiple domains,
            complex report writer  statements,  and  sorting.    Digital's suggestions for
            conserving pool space will be  briefly  mentioned, and then several techniques
            developed by  the  speaker  for  maximizing  the  use  of  pool  space will be
            explained.
             
            Orientation: Intermediate/Technical
             
             
                    USING VAX DATATRIEVE IN AN EARTH SCIENCE RESEARCH AND PUBLIC
                                   SERVICE INFORMATION ENVIRONMENT
             
                                          Steven Cordiviola
                                    KY Geological Survey U of KY
                                            Lexington, KY
             
            DT028 Tuesday, May 28, 2:00 to 2:30 p.m., Magnolia
            The Kentucky  Geological  Survey  was  established  in  1854  as  the official
            geologic research organization  in  the  Commonwealth.    Each  section at the
            Survey is charged with collecting various  types  of data related to the earth
            sciences.  The diverse nature  of  this  data  requires it be archived using a
            number  of  different  record  structure  formats,  yet  be  interrelated when
            necessary.  To manage this  broad  based earth science information, the Survey
            choose  VAX  DATATRIEVE  for  data  storage  and  manipulation.   DATATRIEVE'S

            10                                          Wombat Examiner Volume 6, Number 2






            flexibility and functionality as  a  layered  product provides a comprehensive
            data management system which will grow  as the Survey's applications grow.  By
            CROSSing fields containing  identical  geographic coordinate information, each
            section's data are linked  together  and  can  be  easily accessed.  By having
            standard data definitions, users do not have to learn a variety of query names
            or procedures to prepare reports  or  gain  access  to the data.  In addition,
            with the proper use of  the  Common  Data Dictionary and its associated Access
            Control Lists, data file access is  controlled; tables common to all users are
            only stored once and can be  easily  maintained;  and all users have access to
            field names and data definitions.
             
            Orientation: Intermediate/General
             
             
             
                           USING DOMAIN TABLES TO CONNECT INTERACTIVE AND 
                                     BATCH DATATRIEVE PROCEDURES
             
                                          Elliot F. Jaquith
                                    E.I. du Pont de Nemours & Co.
                                             Brevard, NC
             
            DT010 Tuesday, May 28, 2:30 to 3:00 p.m., Magnolia
            This paper describes how to use a domain table as a bridge between interactive
            and batch  DATATRIEVE  when  requesting  queries  on  a  very  large file with
            variable search parameters.  The need  to  use this method is because our very
            large file queries require at least 45 minutes search time.  By using a domain
            table to hold the variable information, which can be entered from the keyboard
            with interactive DATATRIEVE using two  FMS  screens, the terminal connect time
            is reduced to 10 minutes.  This then leaves the terminal free for other tasks.
            The unique use of the domain table  is important because this table is used by
            another batch program  to  supply  variable  information  to prepare a special
            report.  Before using DATATRIEVE, this report was prepared by hand in four and
            one half days.
             
            Orientation: Intermediate/Technical
             
             
                                     CUSTOMIZING VAX DATATRIEVE
             
                                     Sandy Kaplan & Kirk Searle
                                    Digital Equipment Corporation
                                             Nashua, NH
             
            DT023 Tuesday, May 28, 3:00 to 4:00 p.m., Magnolia 
            VAX DATATRIEVE can be  customized  to  suit  the  needs of individual users or
            customized to suit all users on  a  system.  DATATRIEVE allows users to modify
            or create HELP  and  message  texts,  user-defined  keywords, and user-defined
            functions.  This presentation will focus  on the design of customized features
            and will include  examples  of  customizing  DATATRIEVE  for the international
            business environment.
             
            Orientation: Intermediate/Technical
             
             

            Wombat Examiner Volume 6, Number 2                                           11






                                      MAILBOXES AND DATATRIEVE
             
                                             Lali Singh
                                         University Hospital
                                             Madison, WI
             
            DT026 Wednesday, May 29, 9:00 to 9:30 a.m., Elmwood
            This presentation  discusses  a  menu  driven  application  for Operating Room
            scheduling at the University  Hospital  in  Wisconsin.    Key features of this
            discussion are:
               * Using the DATATRIEVE call interface for all I/O
               * Using FMS for screen management
               * Using mailboxes to interface to DATATRIEVE
             
            Orientation: Advanced/Technical
             
             
                                 USING THE DATATRIEVE CALL INTERFACE
             
                                           Carolyn Sprague
                                         Dupont/NEN Products
                                            Billerica, MA
             
            DT027 Wednesday, May 29, 9:30 to 10:00 a.m., Elmwood
            In this session, the use of the DATATRIEVE call interface will be demonstrated
            using a sample FORTRAN application.   In this application, FORTRAN is used for
            initial data entry and storage.   DATATRIEVE is used for data manipulation and
            report generation.
             
            Orientation: Intermediate/Technical
             
             
                                    USING VAX DATATRIEVE GRAPHICS
             
                                     Sandy Kaplan & Kirk Searle
                                    Digital Equipment Corporation
                                             Nashua, NH
             
            DT022 Wednesday, May 29, 10:00 to 11:00 a.m., Elmwood
            The VAX DATATRIEVE PLOT statement  gives  users a quick and easy-to-use method
            of displaying information as a graph.  A wide range of predefined plot formats
            are used to enhance decision support applications and can be produced in hard-
            copy form for presentations  and  reports.    This talk will present effective
            techniques for producing graphs from data managed with VAX DATATRIEVE.
             
            Orientation: Intermediate/Technical
             
             








            12                                          Wombat Examiner Volume 6, Number 2






                                  VAX DATATRIEVE GRAPHICS INTERNALS
             
                                          Joe H. Gallagher
                                     Cleveland Clinic Foundation
                                            Cleveland, OH
             
            DT011 Wednesday, May 29, 11:00 a.m. to 12:00 noon, Elmwood
            VAX DATATRIEVE  plots  are  implemented  in  a  PASCAL-like  language which is
            internal to the plotting  library.    This  plot  language is characterized by
            multiple entry  point  routines,  strong  typed  variables,  dynamic arrays, a
            DO-loop construct, arithmetic and relational operators, and a set of functions
            which are available only from within the plotting language.  Complex plots are
            constructed of logic in the plot language  and calls to a set of utility plots
            which do most of the work of  creating ReGIS instructions.  A full explanation
            of the plot language and several new  plots will present the attendee with the
            knowledge and courage to begin modifying and extending the plot library.
             
            Orientation: Advanced/Technical
             
             
                            DATATRIEVE DISTRIBUTED MANIPULATION FACILITY
             
                                   Mike Daugherty & Andy Schneider
                                    Digital Equipment Corporation
                                             Nashua, NH
             
            DT024 Wednesday, May 29, 2:00 to 3:30 p.m., Elmwood
            This tutorial will discuss  the  DATATRIEVE Distributed Manipulation Facility,
            its features and use.  This facility provides an ability to access and process
            data that may reside on  different  systems  and in different database storage
            systems.  When using VAX  DATATRIEVE and/or DATATRIEVE-11 this facility assure
            that stored data is manipulated in  a consistent manner without regard for the
            location of the data.
             
            Orientation: Intermediate/Technical
             
             
                        EQUIPMENT MAINTENANCE PROGRAM FOR A MICROELECTRONICS
                                       MANUFACTURING FACILITY
             
                                            James Griffin
                                   Department of Defense/ATT S454
                                           Fort Meade, MD
             
            DT029 Wednesday, May 29, 3:30 to 4:00 p.m., Elmwood
            This paper outlines an  equipment  maintenance  program for a micro-electronic
            manufacturing facility.  It is an applications program utilization DATATRIEVE,
            FMS, and VMS command  procedures.    There  are  two  data bases; an equipment
            inventory  file,  and  a   maintenance   history  file.    Several  DATATRIEVE
            procedures, with FMS forms, are used to maintain the inventory file and update
            the history file.    DATATRIEVE  procedures  are  used to generate maintenance
            reports.  Access to the system  is  controlled  from an option list in a login
            command file.
             
            Orientation: Intermediate/General

            Wombat Examiner Volume 6, Number 2                                           13






             
             
             
                                 HOW SYSTEM MANAGERS USE DATATRIEVE
             
                                           Bert Roseberry
                                   U.S. Coast Guard District (DT)
                                           New Orleans, LA
             
            DT005 Wednesday, May 29, 4:00  to 5:00 p.m., Elmwood
            System managers use DATATRIEVE to manage their systems in a multitude of ways.
            System managers from both PDP-11 and VAX systems will present some of the ways
            they use DATATRIEVE to make their system management job easier.
             
            Orientation: Intermediate/Technical
             
             
             
                               DATATRIEVE-11 PERFORMANCE OPTIMIZATION
             
                                           Robert M. Laham
                                    Digital Equipment Corporation
                                              Stow, MA
             
            DT014 Wednesday, May 29, 5:00 to 6:00 p.m., Elmwood
            DATATRIEVE-11 is an  interactive  query,  report,  and data maintenance system
            that is well suited  for  low-cost,  multi-user  systems.   At this session, a
            software engineer from Digital's  DATATRIEVE-11 Development Group will provide
            helpful hints  on  how  to  optimize  DATATRIEVE-11  applications for improved
            performance.
             
            Orientation: Intermediate/Technical
             
             
                            VAX DATATRIEVE-APPLICATION DESIGN TRADE-OFFS
             
                                    Steve Baron & Kathy Jo Nelson
                                    Digital Equipment Corporation
                                             Nashua, NH
             
            DT025 Thursday, May 30, 10:00 to 11:30 a.m., Grand Salon D
            This will be a presentation and  discussion by Digital performance analysts of
            various aspects of VAX DATATRIEVE application design and implementation trade-
            offs for improved  performance.    This  session  is intended for programmers,
            systems analysts, and software specialists who currently use DATATRIEVE or are
            planning to  implement  an  application  using  DATATRIEVE  as  an application
            development  language.     Discussion   will   include:    general  DATATRIEVE
            application design issues  (e.g.,    FOR  vs  FIND, query optimization, CROSS,
            domains in nested FOR loops, dictionary vs domain tables, call interface), VAX
            RMS  file  design  and  "tuning,"  VAX  DBMS  database  tuning  for  use  with
            DATATRIEVE, VAX CDD dictionary design, and related system tuning.
             
            Orientation: Advanced/Technical
             
             

            14                                          Wombat Examiner Volume 6, Number 2






             
                              VAX DATATRIEVE INTERNALS AND OPTIMIZATION
             
                                   Mike Daugherty & Andy Schneider
                                    Digital Equipment Corporation
                                             Nashua, NH
             
            DT020 Thursday, May 30, 2:00 to 3:30 p.m., Grand Salon C
            This session  will  provide  an  overview  of  some  of  the  internals of VAX
            DATATRIEVE,  and   provide   some   suggestions   for   optimizing  DATATRIEVE
            applications based on  these  internals.    Some  of  the  areas to be covered
            include DATATRIEVE invocation  and  start-up,  procedure and loop organization
            alternatives, and trade-offs during the execution phase of DATATRIEVE.  
             
            Orientation: Intermediate/Technical
             
             
                                            WOMBAT MAGIC
             
            DT001 Thursday, May 30, 8:00 to 10:00 p.m., Grand Salon C
            Once again the GREAT WOMBAT wants all  you WOMBAT Wizards and novices alike to
            participate  in   fun-filled   evening   sharing   DATATRIEVE  techniques  and
            experiences which reach beyond the expected.    All are asked to come prepared
            to mystify  and  amaze  other  with  stores  and  examples  of  how  to do the
            impossible with DATATRIEVE.  Included  in  the festivities will be door prizes
            and a special prizes for the Wizard presenting the best magic.
             
            Orientation: Technical/Novice thru Advanced
             
             
                      MANAGING A LARGE NAVIGATIONAL AIDS SYSTEM WITH DATATRIEVE
             
                                           David Gosselin
                                      United States Coast Guard
                                           New Orleans, LA
             
            DT018 Friday, May 31, 10:00 to 11:00 a.m., Elmwood
            This session will  discuss  managing  a  large  navigational aids system using
            DATATRIEVE.  Topics to be discussed include:
               * Overview of  aids  to  navigation  information  needs  -  status of aids,
                 associated costs, inventory, worklists,
               * Design of the  system  -  stable  in  size,  partially normalized, use of
                 tables
               * FMS benefits - streamlined procedures, readability, faster
               * Inquiries made of  the  system  (with  and  without  the report writer) -
                 daily status, listing of equipment, worklists, associated costs
               * Use/Inquiries of the system by non-programmers
             
            Orientation: Intermediate/General
             
             
             




            Wombat Examiner Volume 6, Number 2                                           15






                                 VMS ACCOUNTING USING VAX DATATRIEVE
             
                                           Bert Roseberry
                                   U.S. Coast Guard District (DT)
                                           New Orleans, LA
             
            DT007 Friday, May 31, 11:00 a.m. to 12:00 noon, Elmwood
            A combination of VAX DATATRIEVE  and  VMS  command procedures was developed to
            produce charge back accounting on  the  VAX.   This method of producing charge
            back accounting was chosen because  of its low-cost development and subsequent
            upkeep.  The procedures do not  require  any programs other than VMS utilities
            and DATATRIEVE, and only minor  modifications  in DATATRIEVE will be necessary
            for future releases of VMS.    The  procedures are easily customized for site-
            specific purposes.  Users can specify  who,  what, and when to charge.  Bills,
            statistics, and other reports are all  handled by DATATRIEVE and can be easily
            modified for any purpose.
             
            Orientation: Intermediate/Technical
             
             
                                   DATATRIEVE SIG CLOSING SESSION
             
                                          Lawrence Jasmann
                                      Chairman, DATATRIEVE SIG
             
            DT002 Friday, May 31, 12:00 noon to 1:00 p.m., Elmwood
            This is the windup  session  for  the  DATATRIEVE  SIG.   Wish list items will
            receive comments for DIGITAL and any last minute questions or comments will be
            attended to.    This  session  also  kicks  off  activities  for the following
            symposium in Anaheim.
             
             
            _____________________________________________________________________________
             
            Hints and Kinks
             
            _____________________________________________________________________________
             
              * Dick Azzi reminds us that the  RUNNING  TOTAL of field which is USAGE REAL
                does not work properly.   An  error message like "Internal error (expected
                block id NN, encountered id MM)." is obtained.
             
              * Bert Rosebery reminds us that parenthesis around the left half (only) of a
                Boolean expression does not work properly.  Consider the following:
             
                          IF ( 3 - 2) EQ 1 THEN ...               !Does not work
             
                          IF ( 3 - 2 EQ 1) THEN ...               !Works
             
                          IF 3 - 2 EQ 1 THEN ...                  !Works
             
                          IF ((3 - 2) EQ 1) THEN ...              !Works




            16                                          Wombat Examiner Volume 6, Number 2






            ______________________________________________________________________________
             
            DATATRIEVE Application Development Standards
             
            Williams College Administrative Computing 
             
            _____________________________________________________________________________
             
            1.0  STANDARDS AND EGOLESS PROGRAMMING
             
                Four of the most  important  objectives  in application development are to
            develop modules that are  functionally complete, functionally accurate, easily
            understood, and easily maintained.  Although most programmers would agree with
            these objectives, individual programming  style often dominates a programmer's
            production and applications often fail  to  meet these common standards.  This
            tendency towards  individuality  is  very  natural  and  appears within almost
            everyone's work, especially when  one  remains isolated from one's programming
            piers for long periods of time.
                A proven solution to these very  common problems involves group reviews or
            'structured walkthroughs'.   Individuals  should  be  encouraged to share fre-
            quently their portion of  the  group  project  with  other members of a group.
            Very often other  members  will  easily  recognize erroneous logic, omissions,
            needed controls, and comments.   A  sharing  of  ideas helps to overcome idio-
            syncratic coding patterns and encourages programmers to keep their work within
            established standards.
                Reviews help overcome the very  natural  tendency to become possessive and
            sensitive towards ones work.    This  possessive tendency is characteristic of
            'ego programming'.    Overcoming  this  ownership  or  possessiveness leads to
            'egoless programming'.  Egoless programming is characterized by an environment
            in which programmers have not  developed sensitive and personal attachments to
            'their' work - a  very  difficult  yet  very  important objective in all major
            application development.
                Two complete examples of DATATRIEVE  code written according to recommended
            standards have been included at the end of this paper.
             
            2.0  WARNIER ORR
             
                All DATATRIEVE applications, regardless of  their size, should be designed
            as highly structured modules of code.    The most effective tool available for
            developing such code is  the  Warnier-Orr  Structured Diagram.  Completed dia-
            grams should be reviewed and critiqued by colleagues before any coding begins.
            Warnier-Orr diagrams should  become  part  of  a  systems documentation.  They
            should  be  referenced  and   updated  whenever  enhancements  or  maintenance
            'patches' are applied.
                If Warnier-Orr diagrams are  maintained  they  will  serve as an excellent
            overview of application systems.    Both  beginning and experienced staff will
            appreciate their clarity, simplicity, structure and ease of use.
                An introduction to Warnier-Orr diagrams is presented in PROGRAM DESIGN AND
            CONSTRUCTION, by David A. Higgins, published by Prentice-Hall.
             
            3.0  DESIGN METHODOLOGIES
             
                While following the  requirements  for  structured  design, all procedures
            should also be  developed  according  to  an  established  methodology.  It is


            Wombat Examiner Volume 6, Number 2                                           17






            especially important to establish a  methodology within each major application
            package.  Guidelines for a methodology are listed below.
             
            3.1  Consistency
             
                Consistency is very important.  User responses, error messages, prompting,
            looping, and other  structural  components  of  an  application should be con-
            sistent throughout the application. 
             
            3.2  No 'Bells And Whistles'
             
                An application should not contain  frivolous  code.   More often than not,
            these 'special features' appear  as  inconsistent  responses to users and com-
            plicate maintenance procedures.    Whenever  an  enhancement  is justified, it
            should be developed as a separate  and  independent procedure (to be used as a
            subroutine, described below).   Developing enhancements as subroutines enables
            programmers to eliminate them with a single comment during maintenance.
             
            3.3  Meaningful Error Messages
             
                Error messages should inform  the  user  of  the  problem and suggest cor-
            rective action.  Messages should be brief, friendly, and complete. 
             
            3.4  Standard Looping Structure
             
                The following looping structure should be applied whenever possible.
             
             
                                           /
                                prompt     | statement 1
                                value      | statement 2
                                           |    
                                           |    .
                                while      |    .
                                value     <     .
                                 = N       |
                                           | prompt next value
                                           |
                                           \
             
             
             
            Note that if the  WHILE  clause  is  not  used,  the  PROMPT NEXT VALUE clause
            is not required.
             
            3.5  Enclose Subroutine Procedures
             
                All subroutine procedures should  be  enclosed  with  BEGIN and END state-
            ments.  The BEGIN  statement  should  appear  immediately following the header
            block.  The END statement  should  appear just before the END_PROCEDURE state-
            ment.  This technique  guarantees  every  statement  in the subroutine will be
            executed.  Top level procedures invoked  by  the user are an exception to this
            recommendation if they contain DATATRIEVE commands such as READY.
             


            18                                          Wombat Examiner Volume 6, Number 2






            3.6  Prompting The User
             
                Whenever a user  is  given  a  prompt  requesting  data  entry, the prompt
            should:
             
                  1. Clearly indicate exactly what it is  the program is expecting.  Often
                     a single field is needed and a field name will suffice.
             
                  2. If the format for data entry is not immediately obvious, the expected
                     format should be included in the prompt.
             
                  3. The default response should be displayed in brackets and lower case.
             
                  4. The users response should  be  evaluated using the CONTAINING Boolean
                     operator, not the EQUAL Boolean operator.  The CONTAINING clause will
                     match on upper and lower case responses.
             
            4.0  PROCEDURES AS SUBROUTINES
             
                Structured design is easily implemented when DATATRIEVE procedures (procs)
            are used as subroutines.  Procs can be coded in such a way that a 'one to one'
            mapping can be achieved from the Warnier-Orr  design to the actual code.  Code
            should be removed from  'the  main  line'  and placed into callable DATATRIEVE
            proc (subroutine) whenever:
             
                  1. A procedure contains more than one or two screens of code.
             
                  2. A function is easily coded as a separate entity.
             
                  3. A function requiring several lines  of  code is required in more than
                     one location.
             
                  4. A PRINT statement is required that contains several lines of code. 
             
            5.0  COMMENTS
             
                Commenting is an extremely  important  component  of any software package.
            DATATRIEVE is no exception.  Every DATATRIEVE proc should begin with a 'header
            block' and should  contain  a  liberal  amount  of  comment blocks and comment
            lines.
                All comments of any  type  (header  blocks, comment blocks, comment lines)
            should be formated in the following manner:
             
                  1. Enclose all comments with blank comment lines.
             
                  2. Indent (or TAB) all comments such that they do not appear flush left.
                     Comments should appear  visually  separate  from all DATATRIEVE code.
                     When comments are flush left  they  appear to merge into commands and
                     become more difficult to read.
             
            5.1  Header Blocks
             
                Every DATATRIEVE proc should begin with a header block.  All header blocks
            should contain the following format:
             

            Wombat Examiner Volume 6, Number 2                                           19






                  1. Header blocks should be  enclosed  with  an 'asterisk block'.  Create
                     the  asterisk block such that  it  is TABed in (or indented) at least
                     one tab stop.
             
                  2. Begin each header block with a 'proc id'.  Include its CDD dictionary
                     name and proc name.
             
                  3. Indicate who (or what)  calls  this  proc.    If  a proc is called by
                     several 'calling procs', list  each  of  the calling procs within the
                     called proc.
             
                  4. Briefly describe the function(s) being performed within the proc.  If
                     several major and distinct  functions  are  being performed, list and
                     describe (using a  numerically  sequenced  outline format) each major
                     function.  Use brief yet accurate descriptions.
             
                  5. If the proc requires a calling proc to provide temporary variables or
                     a specific record context, these  requirements should be noted within
                     the header block.
             
            5.2  Comment Blocks
             
                Whenever a comment extends to more than one line a comment block should be
            constructed.  A comment block contains the following format:
             
                  1. Comment blocks should be enclosed  with  an 'asterisk block'.  Create
                     the asterisk block such that  it  is  TABed in (or indented) at least
                     one tab stop.
             
                  2. If two or  more  functions  are  being  discussed  within the comment
                     block, itemize (using a  numerical  sequence)  the comments such that
                     they reflect the logical structure being referenced.
             
            5.3  Comment Lines
             
                Whenever comments require only  a  single  line,  enclose the comment with
            blank lines and format the  comment  such  that  it  begins with a string of 5
            asterisks, a space, the comment, a  space,  and  terminates with a string of 5
            asterisks.
             
            6.0  INDENTATION
             
                The visual appearance of code  is  extremely important.  Appearance should
            reflect logical structure.  Indentation  is  a very simple yet effective tech-
            nique for visually displaying structure.
                Indentation should be applied whenever:
             
                  1. Code is subordinate to a  looping  structure (within FOR, REPEAT, and
                     WHILE loops).
             
                  2. Code is subordinate to a  conditional  statement (within an IF or IF-
                     ELSE statement).
             



            20                                          Wombat Examiner Volume 6, Number 2






                  3. The PRINT statement is  used.    Two  very simple standards should be
                     applied to the formatting of PRINT commands.  They are:
             
                    a. Every item within a PRINT command  that  causes a new print line to
                       appear should  be  formated  flush  left  (relative  to its current
                       margin).
             
                    b. Every other item within  a  PRINT  command (those items which cause
                       fields to be printed within a print line) should be formated with a
                       slight indentation, one field per line.
             
            7.0  DECLARATIVES AT THE TOP
             
                All declaratives should be included at the top of DATATRIEVE procs.
             
            8.0  VARIABLE NAMES AND CONDITIONAL VALUES
             
                The purpose and meaning of a  variable  should be reflected in the name of
            the variable.  Temporary variables (those used within a proc but not stored in
            a data record) should begin with  the  character string "TMP-".  Two and three
            character, cryptic, 'fortran type' names should NEVER be used in DATATRIEVE.
                Examples of variable  names  might  be: INTEREST-TOTALS, TMP-DEBUG-SWITCH,
            TMP-SESSION-DATE, PRINCIPAL-DUE
                Whenever conditional values are assigned  to 'switches', they should equal
            a meaningful character string  such  as:    "DO  NOT  RUN  INTEREST" or "OK TO
            PROCESS".  An example might be: "IF TMP-INTEREST-FLAG = "OK TO PROCESS" ..."
                Conditional values should  NOT  be  equal  to  something like "ON", "OFF",
            "YES" "1", or "0".
             
            9.0  PROCEDURE NAMES
             
                Naming conventions for DATATRIEVE  procs  are  determined by their calling
            mechanism.  For ease of use, procs  called  by users can be given short abbre-
            viations that are easily remembered.  However, all other procs should be given
            full and meaningful names.  Names can be as long as 31 characters.
                In addition to meaningful names procs should be given functional prefixes.
            The need for these prefixes is described below.
                Major DATATRIEVE applications consist  of  several  related, yet quite in-
            dependent, functions such as:  maintenance tasks, reporting needs, and various
            processing needs.  Each of these  functions  is defined by a structured set of
            procs.  The highest level proc  is  usually invoked directly by the user, each
            subordinate proc is called by the  proc  above it.  Sometimes procs are called
            by more than one proc within an application.
                Quite often the number of  procs  within  an  application grows to such an
            extent that it becomes difficult to locate all procs related to a single func-
            tion (such as those described above).   Occasionally all people within a work-
            ing group disclaim any knowledge of a  proc;  no one can remember why the proc
            was developed!
                For this reason all procs should  be  given  a prefix.  The prefix enables
            all procs within  a  function  to  be  clustered  together.    Whenever a SHOW
            PROCEDURES command is issued, all  related  procs appear together.  The prefix
            that appears to work best contains  the  following format: FFFN-... .  The FFF
            consists of the initials of the function name and the N indicates the level of
            the proc (level 0 is the top, level 0 procs call level 1 procs, ...).
                An example is the following:   A  major function within the Loan System is

            Wombat Examiner Volume 6, Number 2                                           21






            to report Journal entries by ID.   This  function, Journal By ID consists of a
            top level proc (called by the user) and several subordinate, structured procs.
            The name of the top proc is  JBI  (Journal  By  Id).  The proc JBI calls procs
            named JBI1-...-..., JBI1-...-... .    Each  of  these  procs calls procs named
            JBI2-...-...
                Procs that are called by  more  than one unrelated function cannot contain
            the prefix of each of the calling  procs.  Therefore these procs are given the
            prefix of "SHR-" indicating they are shared by more than one calling proc.
                The comment blocks  of  these  shared  procs  must accurately indicate the
            names of all calling procs.  If  the  shared proc is ever changed, all calling
            procs may also need modification.
             
            10.0  INCLUDE COMMENTS ON END STATEMENTS
             
                Structured DATATRIEVE code consists of  a  hierarchy of subroutines.  Each
            subroutine should begin with a BEGIN  statement and end with an END statement.
            When developing procs consisting of  multiple subroutines it is quite possible
            to misplace a single BEGIN  or  END  statement.  DATATRIEVE, however, is quite
            good about matching  BEGIN  END  statements.    Unfortunately  it  is not very
            friendly when it discovers a mismatch.  Normally it responds "...  encountered
            END ... expected statement".  If  END statements contain comments (an "!" fol-
            lowed by an ACCURATE  description  of  its  location)  the comment will appear
            along with the error message, greatly reducing the task of debugging.
                The usefulness of the commenting scheme  is  only as effective as the com-
            ment is accurate.  Do  not  comment  END  statements with phrases such as "END
            !  end of main line".  A more descriptive comment  might be "END     !  end of
            JBI3-PRINT-JOURNAL-HEADER".
             
            EXAMPLE 1
             
             
            DELETE JBI;
            DEFINE PROCEDURE JBI
            !
            !  ************************************************************
            !  * CDD$TOP.ADMIN.LOAN  JBI (Journal By ID)
            !  *
            !  * Report Journal entries for a selected ID, within a selected
            !  * date range. 
            !  *
            !  * This report should serve as an audit trail of an individual's
            !  * account.  It will show dollar values on a beginning date, all
            !  * action against the account, followed by ending values.
            !  *************************************************************
            !
            READY BIO SHARED READ
            READY LOANS SHARED READ
            READY OLDLOANS SHARED READ
            READY JOURNAL SHARED READ
            !
            DECLARE TMP_DEBUG_FLG   PIC X(10).
            DECLARE TMP_KEY     PIC X(7).
            TMP_KEY = *."KEY"
            !


            22                                          Wombat Examiner Volume 6, Number 2






            SET COLUMNS_PAGE = 132
            FN$WIDTH(132)
            !
            ! ******************************************************************
            ! * 1. print a 'before' record
            ! * 2. print all action records (add,modify,post) that follow
            ! * 3. print the last 'after' record
            ! *****************************************************************
            !
            WHILE TMP_KEY NOT = " " BEGIN
            !
              FOR BIO WITH KEY = TMP_KEY BEGIN
                :JBI1_PRINT_BIO_HEADER
                FOR LOANS WITH KEY = TMP_KEY BEGIN
                  :JBI1_PRINT_ORIGINAL_LOAN
                  :JBI1_PRINT_JOURNAL_ENTRIES
                  :JBI1_PRINT_CURRENT_LOAN
                  END          ! FOR LOANS
                END            ! FOR BIO
              TMP_KEY = *."NEXT KEY, <SPACE> TO EXIT"
              END              ! WHILE TMP_KEY
            !
            SET COLUMNS_PAGE = 80
            FN$WIDTH(80)
            !
            END-PROCEDURE
             
             
            DELETE JBI1_PRINT_BIO_HEADER;
            DEFINE PROCEDURE JBI1_PRINT_BIO_HEADER
            !
            !  *******************************************************
            !  * CDD$TOP.ADMIN.LOAN JBI1-PRINT-BIO-HEADER
            !  *
            !  * Called By: JBI
            !  *
            !  * print a biographic header
            !  *******************************************************
            BEGIN
            !
            PRINT SKIP,
              COL 32, "***** JOURNAL ENTRIES FOR:   " | KEY | "  " | NAME ||| " *****",
            SKIP 2,
              COL 1, "SESS",
              COL 6, "CODE",
              COL 12, "DATE",
              COL 19, "USER",
              COL 24, "KEY",
              COL 32, "ST",
              COL 35, "TY",
              COL 38, "RATE",
              COL 52, "ORIGINAL",
              COL 66, "B PRIN",
              COL 76, "PRIN DUE",
              COL 89, "INT DUE",

            Wombat Examiner Volume 6, Number 2                                           23






              COL 100, "LAST PAID",
              COL 114, "LATE"
            !
            END       ! JBI1-PRINT-BIO-HEADER
            !
            END-PROCEDURE
             
             
            DELETE JBI1_PRINT_CURRENT_LOAN;
            DEFINE PROCEDURE JBI1_PRINT_CURRENT_LOAN
            !
            !  **************************************************************
            !  * CDD$TOP.ADMIN.LOAN JBI1-PRINT-CURRENT-LOAN
            !  *
            !  * CALLED BY: JBI
            !  *
            !  * print an original loan (old) loan record
            !  * (CALLING PROC MUST SET TERM WIDTH TO 132 ("FN$WIDTH(132)")
            !  * AND MUST HAVE A CURRENT LOAN RECORD)
            !  **************************************************************
            !
            BEGIN
            !
            PRINT COL 51, "==================================================",
              COL 101, "=================="
            !
            PRINT COL 32, LOANS.STATUS (-),
              COL 35, LOANS.TYPE (-),
              COL 38, LOANS.RATE (-),
              COL 51, LOANS.ORIGINAL (-) USING $$,$$$.99-,
              COL 63, LOANS.BAL_PRIN (-) USING $$,$$$.99-,
              COL 75, LOANS.PRINCIPAL_DUE (-) USING $$,$$$.99-,
              COL 87, LOANS.INTEREST_DUE (-) USING $$,$$$.99-,
              COL 100, LOANS.PAID_SINCE_LAST_BILL (-) USING $$,$$$.99-,
              COL 112, LOANS.LATE_CHARGE (-) USING $$$.99,
            SKIP
            !
            END       ! JBI1-PRINT-CURRENT-LOAN
            !
            END-PROCEDURE
             
             
            DELETE JBI1_PRINT_JOURNAL_ENTRIES;
            DEFINE PROCEDURE JBI1_PRINT_JOURNAL_ENTRIES
            !
            !  ***********************************************************
            !  * CDD$TOP.ADMIN.LOAN JBI1-PRINT-JOURNAL-ENTRIES
            !  *
            !  * Called By: JBI
            !  *
            !  * print all Journal entries for the current loan
            !  ***********************************************************
            !



            24                                          Wombat Examiner Volume 6, Number 2






            BEGIN
            !
            FOR JOURNAL WITH KEY = TMP_KEY BEGIN
              IF (JOURNAL.TYPE | JOURNAL.RATE = LOANS.TYPE | LOANS.RATE) AND
              (ENTRY_CODE = "ADD", "DEL", "PST", "MOD", "INT") BEGIN
                PRINT COL 1, JOURNAL.SESSION (-),
                  COL 6, JOURNAL.ENTRY_CODE (-),
                  COL 12, JOURNAL.ENTRY_DATE (-) USING MMM_DD,
                  COL 19, JOURNAL.USER (-),
                  COL 24, JOURNAL.CLASS | ID (-) USING X(7),
                  COL 32, JOURNAL.STATUS (-),
                  COL 35, JOURNAL.TYPE (-),
                  COL 38, JOURNAL.RATE (-),
                  COL 51, JOURNAL.ORIGINAL (-) USING $$,$$$.99-,
                  COL 63, JOURNAL.BAL_PRIN (-) USING $$,$$$.99-,
                  COL 75, JOURNAL.PRINCIPAL_DUE (-) USING $$,$$$.99-,
                  COL 87, JOURNAL.INTEREST_DUE (-) USING $$,$$$.99-,
                  COL 100, JOURNAL.PAID_SINCE_LAST_BILL (-) USING $$,$$$.99-,
                  COL 112, JOURNAL.LATE_CHARGE (-) USING $$$.99
                END             ! IF (...
              END               ! FOR JOURNAL ...
            !
            END                 ! JBI1-PRINT-JOURNAL-ENTRIES
            !
            END-PROCEDURE
             
             
            DELETE JBI1_PRINT_ORIGINAL_LOAN;
            DEFINE PROCEDURE JBI1_PRINT_ORIGINAL_LOAN
            !
            !  *****************************************************
            !  * CDD$TOP.ADMIN.LOAN JBI1-PRINT-ORIGINAL-LOAN
            !  *
            !  * Called By: JBI
            !  *
            !  * print a loan record from the old loan domain ONLY IF
            !  * if is the same TYPE and RATE
            !  *****************************************************
            BEGIN
            !
            FOR OLDLOANS WITH KEY = TMP_KEY BEGIN
              IF OLDLOANS.TYPE | OLDLOANS.RATE = LOANS.TYPE | LOANS.RATE THEN BEGIN
                PRINT COL 32, OLDLOANS.STATUS (-),
                  COL 35, OLDLOANS.TYPE (-),
                  COL 38, OLDLOANS.RATE (-),
                  COL 51, OLDLOANS.ORIGINAL (-) USING $$,$$$.99-,
                  COL 63, OLDLOANS.BAL_PRIN (-) USING $$,$$$.99-,
                  COL 75, OLDLOANS.PRINCIPAL_DUE (-) USING $$,$$$.99-,
                  COL 87, OLDLOANS.INTEREST_DUE (-) USING $$,$$$.99-,
                  COL 100, OLDLOANS.PAID_SINCE_LAST_BILL (-) USING $$,$$$.99-,
                  COL 112, OLDLOANS.LATE_CHARGE (-) USING $$$.99
                END                       ! IF OLDLOANS.TYPE ...
              END                         ! FOR OLDLOANS WITH KEY ...
            END                           ! JBI1-PRINT-ORIGINAL-LOAN
            END-PROCEDURE

            Wombat Examiner Volume 6, Number 2                                           25






             
             
            EXAMPLE 2
             
             
            DELETE SHR_DISPLAY_DATA;
            DEFINE PROCEDURE SHR_DISPLAY_DATA
            !
            !  ******************************************************
            !  * CDD$TOP.ADMIN.LOAN SHR-DISPLAY-DATA
            !  *
            !  * Called By: DISP,
            !  *            MNT1-MAINT,
            !  *            PST1-POST
            !  *            
            !  *
            !  * Display the biographic and loan data for a select ID
            !  * (the calling proc must supply a current BIO record)
            !  ******************************************************
            !
            BEGIN
            !
            IF TMP_DEBUG_FLG = "DEBUG ON" DISPLAY "ENTERING PROC SHR-DISPLAY-DATA"
            !
            PRINT COL 33, "STUDENT LOAN RECORD (CURRENT FILE)"
            :SHR_DISPLAY_BIO_DATA
            !
            !  *****************************************************************
            !  * set up 'loan data' header                                     *
            !  *****************************************************************
            !
            PRINT SKIP,
              COL 1, ":",
              COL 2, "-----------------------------------------------------------",
              COL 61, "-------------------",
              COL 80, ":"
            !
            !  *****************************************************************
            !  * display variable number of loan records                       *
            !  *****************************************************************
            !
            :SHR_DISPLAY_LOAN_DATA
            !
            PRINT     COL 1, ":",
              COL 2, "-----------------------------------------------------------",
              COL 61, "-------------------",
              COL 80, ":"
            !
            IF TMP_DEBUG_FLG = "DEBUG ON" DISPLAY "LEAVING PROC SHR-DISPLAY-DATA"
            !
            END       ! SHR-DISPLAY-DATA
            !
            END-PROCEDURE
             
             

            26                                          Wombat Examiner Volume 6, Number 2






            DELETE SHR_DISPLAY_BIO_DATA;
            DEFINE PROCEDURE SHR_DISPLAY_BIO_DATA
            !
            !  *********************************************************
            !  * CDD$TOP.ADMIN.LOAN SHR-DISPLAY-BIO-DATA               *
            !  *                                                       *
            !  * Called By: SHR-DISPLAY-DATA,                          *
            !  *            MNT2-MOD-BIO-REC                           *
            !  *            MNT2_ADD_BIO_REC                           *
            !  *                                                       *
            !  * display biographic data for selected loan             *
            !  *********************************************************
            BEGIN
            !
            PRINT     COL 1, ":",
              COL 2, "-----------------------------------------------------------",
              COL 61, "-------------------",
              COL 80, ":",
            SKIP,
              COL 1, ":",
              COL 3, "CL:" ||| CLASS,
              COL 21, "NA:" ||| NAME (-),
              COL 62, "SD:",
              COL 65, SEPARATION_DATE (-) USING DD_MMM_YYYY,
              COL 80, ":",
            SKIP,
              COL 1, ":",
              COL 3, "ID:" ||| ID (-),
              COL 21, "S1:" ||| STREET1 (-) USING X(35),
              COL 62, "GE:",
              COL 65, GRACE_END_DATE (-) USING DD_MMM_YYYY,
              COL 80, ":",
            SKIP,
              COL 1, ":",
              COL 21, "S2:" ||| STREET2 (-) USING X(35),
              COL 62, "DS:",
              COL 65, DEFER_START_DATE (-) USING DD_MMM_YYYY,
              COL 80, ":",
            SKIP,
              COL 1, ":",
              COL 3, "HP:" ||| HOME_PHONE (-),
              COL 21, "CI:" ||| CITY | " ST:" | STATE | " ZP:" | ZIP USING X(40),
              COL 62, "DE:",
              COL 65,  DEFER_END_DATE (-) USING DD_MMM_YYYY,
              COL 80, ":",
            SKIP,
              COL 1, ":",
              COL 3, "WP:" ||| WORK_PHONE (-),
              COL 21, "FR:" ||| FOREIGN (-),
              COL 62, "PD:",
              COL 65,  POST_DEFER_END_DATE (-) USING DD_MMM_YYYY,
              COL 80, ":",
            SKIP,



            Wombat Examiner Volume 6, Number 2                                           27






              COL 1, ":",
              COL 2, "-----------------------------------------------------------",
              COL 61, "-------------------",
              COL 80, ":"
            !
            END       ! SHR-DISPLAY-BIO-DATA
            !
            END-PROCEDURE
             
             
            DELETE SHR_DISPLAY_LOAN_DATA;
            DEFINE PROCEDURE SHR_DISPLAY_LOAN_DATA
            !
            !  *****************************************************
            !  * CDD$TOP.ADMIN.LOAN SHR-DISPLAY-LOAN-DATA
            !  *
            !  * Called By: MNT2-ADD_LOAN_REC,
            !  *            MNT2-MOD_LOAN_REC,
            !  *            SHR-DISPLAY-DATA
            !  *
            !  * 1. compute ARREARS
            !  * 2. print loan data
            !  *****************************************************
            BEGIN
            !
            DECLARE QUARTERLY_ARREARS      PIC 9(2).
            DECLARE MONTHLY_ARREARS        PIC 9(2).
            !
            FOR LOANS WITH KEY = TMP_KEY BEGIN
            !
              :SHR_COMPUTE_ARREARS
            !
              PRINT COL 1, ":",
                    COL 3, "TYPE:",
                    COL 11, TYPE (-),
                    COL 21, "ACTIVE:",
                    COL 28, ACTIVATION_DATE (-) USING DD_MMM_YY,
                    COL 43, "ORIG:",
                    COL 50, "$" | ORIGINAL (-),
                    COL 65, "TC:",
                    COL 71, TEACHER_CANCELLATION (-),
                    COL 80, ":",
                SKIP,
                    COL 1, ":",
                    COL 3, "STATUS:",
                    COL 11, STATUS (-),
                    COL 21, "FIRST:" ,
                    COL 28, DATE_FIRST_PAID (-) USING DD_MMM_YY,
                    COL 43, "BAL P: $" | BAL_PRIN,
                    COL 65, "MBILL:" | MONTHLY_BILL,
                    COL 80, ":",
                SKIP,




            28                                          Wombat Examiner Volume 6, Number 2






                    COL 1, ":",
                    COL 3, "RATE:",
                    COL 11, RATE | "-" | GRACE_PERIOD,
                    COL 21, "LAST:",
                    COL 28, DATE_LAST_PAID (-) USING DD_MMM_YY,
                    COL 43, "P DUE: $" | PRINCIPAL_DUE (-),
                    COL 65, "LATE: $" | LATE_CHARGE (-),
                    COL 80, ":",
                SKIP,
                    COL 1, ":",
                    COL 3, "ARREARS:" | QUARTERLY_ARREARS |"Q " | MONTHLY_ARREARS | "M",
                    COL 21, "LAST:",
                    COL 28, "$" | PAID_SINCE_LAST_BILL (-),
                    COL 43, "I DUE: $" | INTEREST_DUE (-),
                    COL 80, ":",
                SKIP,
                    COL 1, ":",
                    COL 80, ":"
              END               ! FOR LOANS ...
            END                 ! SHR-DISPLAY-LOAN-DATA
            !
            END-PROCEDURE
             
             
            _____________________________________________________________________________
             
            Hints and Kinks
             
            _____________________________________________________________________________
             
              * Dick Azzi has the following hint: A  lot of my users have a complaint that
                their entry people often enter wrong  dates in fields.  This is especially
                prevalent in January of each year when people haven't gotten used to using
                the new year.  Since all of our  entry  is done within a week or so of the
                date to be entered, I came up  with  a validation check that can be placed
                in a record definition.
             
                              05  ENTERED_DATE USAGE DATE
                                   VALID IF "TODAY" LE ENTERED_DATE + 15.
             
                This validation will not allow the entering of a date that is greater than
                15 days prior to the current date.   If  you wish to be able to go back 30
                days, just change the 15 to a 30.  This little validation sure saves a lot
                of entry problems.
             











            Wombat Examiner Volume 6, Number 2                                           29






            _____________________________________________________________________________
             
            An Open, Menu-Driven, Graphic Report Generator using DTR and VAX-BASIC
             
            S. Begelman, Digital Equipment-France, Rungis, France
             
            _____________________________________________________________________________
             
                One common difficulty with DATATRIEVE,  when considered in an "Information
            Center" context, is that it is  highly unsuited as an intensive query-tool for
            users who  do  not  wish  to  learn  how  to  program  DATATRIEVE,  yet need a
            users-friendly, sophisticated interface to their own data.
                With this in mind, I had the  occasion to show a prospective customer that
            it is extremely easy to go  beyond  standard  DATATRIEVE, and offer the user a
            tool to generate reports, queries, and  graphics.  The purpose of this article
            is to show how DATATRIEVE may be interfaced with any high-level language -- in
            this  case  VAX-11/BASIC   --   to   create   an   open,  menu-driven  graphic
            report-generator.  The three most  typical  plots  are included in my example,
            and it is very simple  to  add  other  ones  if  you so wish.  French-speaking
            readers will be delighted.  [Some rough translations have been provided by the
            Newsletter Editor so that non French  speaking readers can follow the logic of
            the DATATRIEVE and BASIC  code.    These  translations appear in comment lines
            within square brackets.]
                You will find below: my DATATRIEVE  DTR$STARTUP file, as well as the BASIC
            source code, which illustrates how to  connect  to the default CDD, verify the
            existence of domains, make selections,  choose  plots,  and print reports to a
            graphics terminal.  A word to  the  wise:  unlike  a VT125, do not declare the
            type of device (SET TERM/DEV=VT125), when you are using a VT240/41, PRO-350 or
            Rainbow; trouble could result for  this...  [Declare  the device to be a VT100
            rather than a VT125].   The  program  verifies,  of course, the status of each
            call between BASIC  and  DATATRIEVE  for  success  or failure, handles errors,
            reprompts, et cetera.
                A complete application would allow the operator to "JOIN" multiple domains
            or Rdb relations.  This is left as  a exercise for those who are interested in
            completing the logic of this application.
                The compile options  command  file,  as  well  as  the  "INCLUDE" file are
            included in Version 3.0 release  of  DATATRIEVE,  and should be copied to your
            own account before compilation.   I  am  using:  VMS  V3.7, TDMS V2, CDD V2.0,
            BASIC V2.2, and, naturally, DATATRIEVE version 3.0.
                In another context, I was confronted with the problem of showing how to do
            controlled, field-by-field data input using  Rdb,  DATATRIEVE, and TDMS.  This
            is done in  the  following  way:  the  fields  <DEGREE_FIELD> and <DEGREE> are
            defined as display only in the  TDMS  form definition state;  the input-output
            information is then masked with PUTS and  GETS, as you see from the DATATRIEVE
            procedure that I  have  included.    The  magic  is  handled  by TDMS: the Rdb
            relations are in UPDATE or MODIFY mode, yet TDMS will not let you position the
            cursor in these fields to do updating ....
                It is important to notice that  the  records must be "streamed" with a FOR
            statement: in other words, FINDs and SELECTs either work very poorly or do not
            work at all.  The FIND/SELECT syntax  works very poorly - sometimes not at all
            - with Rdb.
                I hope that  these  two  simple  examples  will allow other VMS/DATATRIEVE
            users to get to the bottom of two know DATATRIEVE issues.
                [Some of the code in BASIC  program  and in the DATATRIEVE procedure below
            has been slightly modified to decrease the number of lines of material.]

            30                                          Wombat Examiner Volume 6, Number 2






            !DTR$STARTUP FILE
            SET NOVERIFY
            PRINT " "
            PRINT "  Demarrage d'une session avec DATATRIEVE V3"
            !         [Starting a session with DATATRIEVE]
            PRINT " "
            PRINT "Le Dictionnaire contient les elements suivants ..... "
            !      [The dictionary contains the following elements ...]
            SHOW ALL
            SET PLOTS CDD$TOP.DTR$LIB.PLOTS
            SET DICTIONARY DTR$DEFAULT$DIC
             
            ! A BASIC program to drive the graphics
            100    ! Generateur de Graphiques avec <DATATRIEVE> V3
                   !
                   ! S. Begelman, Digital-France, 10-Dec-84, Rungis
                   !
            110    %INCLUDE "DTR$LIBRARY:DAB.BAS"
                   OPEN "TT:" AS FILE 1%
                   ! Declarer l'initialisation fonction.
                   ! Declarer le status success/echec. [success or failure]
                   EXTERNAL INTEGER FUNCTION DTR$INIT
                   EXTERNAL LONG CONSTANT SS$_NORMAL
                   ! declare the options for the DTR$DTR call.
                   DECLARE INTEGER DTR_OPTIONS
                   DTR_OPTIONS = DTR$M_OPT_CMD + DTR$M_OPT_LINE
                   DECLARE INTEGER RET_STATUS
            120    PRINT ESC + "[2J"
                   PRINT ESC+"[10;1H"+ESC+"#3  DTR :  Generateur d'Etats Graphiques "
                   PRINT ESC+"[11;1H"+ESC+"#4  DTR :  Generateur d'Etats Graphiques "
                   PRINT ESC+"[12;1H"+ESC+"#3  -------------------------------------"
                   PRINT ESC+"[13;1H"+ESC+"#4  -------------------------------------"
                   !                              [Graphics Report Generator]
                   ! pause boucle     [pause loop]
                   !
                   FOR ZZ = 1 TO 50
                   ZZ = ZZ + 10
                   NEXT ZZ
            130    RET_STATUS = DTR$INIT (DAB BY REF, 100% BY REF, MSG_BUFF, &
                       AUX_BUFF, DTR$K_SEMI_COLON_OPT BY REF)
                   ! Verify that DATATRIEVE was initialized successfully.
                   IF RET_STATUS <> SS$_NORMAL THEN
                       PRINT "DATATRIEVE initialisation A ECHOUE."
                   !         [DATATRIEVE initialization has failed.]
                       GOTO 290
            140    CALL DTR$COMMAND (DAB BY REF,"SET PLOTS CDD$TOP.DTR$LIB.PLOTS")
                   CALL DTR$DTR BY REF (DAB, DTR$M_OPT_CMD)
                   ! Clear the screen.
                   ! Show the user the domains available.
            150    CALL LIB$ERASE_PAGE BY REF ( 1% , 1% )
                   PRINT ESC + "[10;10H Voici les domaines dans votre C.D.D.:"
                   !                    [Here are the domains in your CDD.]
                   PRINT ESC + "[15;1H  "



            Wombat Examiner Volume 6, Number 2                                           31






            160    CALL DTR$COMMAND ( DAB BY REF, "SHOW DOMAINS" )
                   ! Use DTR$DTR to display the results of SHOW DOMAINS.
                   CALL DTR$DTR BY REF (DAB, DTR$M_OPT_CMD)
                   ! Prompt the user for the domain name and ready the domain.
            170    INPUT "Quel domaine souhaitez-vous analyser"; DOM$
                   !     [Which domain do you wish to analyze?]
                   CALL DTR$COMMAND (DAB BY REF, "READY !CMD", DOM$)
                   ! check for errors.
                   IF DAB$L_CONDITION <> DTR$_SUCCESS THEN
                       CALL LIB$ERASE_PAGE BY REF ( 1% , 1% )
                       PRINT ESC + "[12;12H Veuillez entrer un domaine valide ..."
                   !                        [You have to enter a valid domain.]
                       PRINT "        "
                       GOTO 160
            180    NUE:      ![Me thinks Begelman is having fun with us non-French  ]
                             ![speaking persons.  In my old French dictionary "Nue" ]
                             !translates to bare, exposed, naked, nude, plain,      ]
                             ![denuded, destitute, or cloud.  Did I miss the joke?  ]
                   PRINT " "
                   PRINT ESC+"[1m";"   La touche [NO SCROLL] arretera l'affichage "
                   !                  [The NO SCROOL key will stop the display]
                   PRINT ESC+"[0m"
                   PRINT " "
                   PRINT ESC+"[23;20H Frapper une touche + [R/C] pour continuer "
                   !                 [Press a key and carriage return to continue]
                   INPUT " ";CE$
                   CEL = LEN(CE$)
                   IF CEL > 1 THEN GOTO NUE
            190    CALL DTR$COMMAND (DAB BY REF, "SHOW FIELDS !CMD",DOM$)
                   CALL DTR$DTR BY REF (DAB, DTR$M_OPT_CMD)
                   !SELECTION RSE OU PAS?            [RSE or not?]
            200    REPRISE:                        ! [resumption or repetition]
                   PRINT " "
                   PRINT "Voulez-vous faire une selection dans le domaine "
                   !      [Do you want to make a selection in the domain?]
                   LINPUT "OUI/NON, S.V.P"; CHOIX_CONT$
                   !      [[Enter] yes or no, please]
                   SELECT CHOIX_CONT$
                       CASE = "OUI" 
                          GOTO 210
                       CASE = "NON" 
                          GOTO 220
                       CASE ELSE 
                          GOTO REPRISE
                       END SELECT
            210    LINPUT "Quelle selection"; SEL$  ! [what selection]
                   CALL DTR$COMMAND (DAB BY REF, "FIND !CMD WITH !CMD", DOM$, SEL$)
                   ! Use DTR$DTR to handle messages and return at DTR$K_STL_CMD
                   IF DAB$W_STATE = DTR$K_STL_CMD THEN
                       CALL LIB$ERASE_PAGE BY REF ( 1% , 1% )
                       PRINT " ", " ", " "
                       PRINT ESC + "[12;12H Champs inexistants; Recommencez ... "
                   !                       [Field doesn't exist, begin again]
                       PRINT " "
                       GOTO 200

            32                                          Wombat Examiner Volume 6, Number 2






                       ELSE
                       CALL DTR$DTR BY REF (DAB, DTR$M_OPT_CMD)
                       CALL DTR$COMMAND (DAB BY REF, "SELECT")
                       CALL DTR$DTR BY REF (DAB, DTR$M_OPT_CMD)
                       END IF
                   !
            220    CALL DTR$COMMAND(DAB BY REF, "FIND !CMD",DOM$)
                   CALL DTR$DTR BY REF (DAB, DTR$M_OPT_CMD)
                   CALL DTR$COMMAND (DAB BY REF, "SELECT")
                   CALL DTR$DTR BY REF (DAB, DTR$M_OPT_CMD)
                   !
            230    CALL LIB$ERASE_PAGE BY REF ( 1% , 1% )
                   PRINT " -------------------------------------------------- "
                   PRINT "     Quel type de graphique souhaitez-vous faire?   "
                   !            [What type of graph do you wish to make?]
                   PRINT " "
                   PRINT " 1.         Histogramme              [Bar-Chart]"
                   PRINT " 2.         Camembert                [Value_Pie]"
                   PRINT " 3.         Nuage de points simples  [Scattergraph]"
                   PRINT " "
                   PRINT " -------------------------------------------------- "
             
            240    KUNG_FU:
                   INPUT "Votre Choix ( 1, 2, ou 3)";D      ! [[enter] your choice]
                   SELECT D
                       CASE = 1 
                          GOTO 250
                       CASE = 2 
                          GOTO 260
                       CASE = 3 
                          GOTO 270
                       CASE ELSE 
                          GOTO 230
                       END SELECT
                   !
            250    HISTOGRAMME:
                   PRINT "1er Champ=(Crite`re de trie), 2e Champ = (Value representee)"
                   !   [First field = sort criterion, Second field = represented value]
                   PRINT " "
                   LINPUT "PLOTTER Quels Champs";C$  ! [Plot which fields]
                   CALL DTR$COMMAND(DAB BY REF,"PLOT BAR ALL !CMD",C$)
                   CALL DTR$DTR BY REF (DAB, DTR$M_OPT_CMD)
                   GOTO 280
            260    CAMEMBERT:
                   PRINT "1er Champ=(Crite`re de regroupement), ";
                   PRINT "2e Champ =(Value representee)"
                   ! [First field=grouping criterion, Second field = represented value]
                   LINPUT "PLOTTER Quels Champs";C1$
                   CALL DTR$COMMAND(DAB BY REF,"PLOT VALUE_PIE ALL !CMD",C1$)
                   CALL DTR$DTR BY REF(DAB, DTR$M_OPT_CMD)
                   GOTO 280





            Wombat Examiner Volume 6, Number 2                                           33






            270    NUAGE_DE_POINTS:
                   PRINT "1er Champ = AXE-X , 2e Champ = AXE-Y"
                   !     [First Field = X Axis, Second Field = Y Axis]
                   PRINT " "
                   LINPUT "PLOTTER quels champs";C2$
                   CALL DTR$COMMAND(DAB BY REF,"PLOT X_Y ALL !CMD",C2$)
                   CALL DTR$DTR BY REF (DAB, DTR$M_OPT_CMD)
            280    CALL DTR$FINISH (DAB BY REF)
            290    END
             
             
            !
            !S. Begelman   Digital-France  4-Jan-85 demonstration Rdb-TDMS-DTR
            !
            declare encore                       pic x.    ! [encore -> again]
            encore = 1
            declare choix_id                     pic x(5). ! [choix_id -> chosen id]
            declare reponse                      pic x(3). ! [reponse  -> response]
            !
            declare errcont                      pic x.    ! [errcont  -> error continue]
            declare cont                         pic xxx.  ! [cont     -> continue]
            !
            ready personnel using employees      modify
            ready personnel using degrees        modify
            ready personnel using colleges       modify
            !
            while encore = 1 begin
            !
            !  boncle majeur: ---------------------------------------------[ major loop ]
            !
               reponse = "OUI"                                 ! [OUI -> yes]
               while reponse = "OUI" begin
                 reponse = "NON"                               ! [NON -> no]
                 display_form rdbform2 in rdb retrieve using begin
                   choix_id = get_form choix_id
                   reponse  = get_form reponse
                   end
            !
                 if reponse eq "OUI" then begin
                   encore = 1
                   end
            !
                 if reponse eq "NON" then begin
                   encore = 0
                   end
                 end
            !
               for e in employees cross d in degrees over employee_id cross -
                 c in colleges over college_code with e.employee_id = choix_id begin
             






            34                                          Wombat Examiner Volume 6, Number 2






                 modify using display_form rbdform1 in rbd using begin
                   put_form social_security = social_security
                   put_form last_name       = last_name
                   put_form degree_field    = degree_field
                   put_form college_name    = college_name
                   end retrieve using begin
                   degree_field             = get_form degree_field
                   degree                   = get_form degree
                   end
                 end
               commit
            !
            !  continuer or pas?                   ! [continue or not?]
            !
               errcont = 1
               while errcont = 1 begin
                 errcont = 0
                 cont = *."Voulez-vous continuer ? (OUI ou NON)"
                 !        [Do you wish to continue (yes or no)?]
                 cont = fn$upcase(cont)
                 if cont ne "OUI" and cont ne "NON" then begin
                   print " "
                   print "Repondez par OUI ou par NON, s'il vous plait."
                   !     [Respond with yes or with no, please.]
                   print " "
                   end
                 if cont eq "OUI" then begin
                   encore = 1
                   end
                 if cont eq "NON" then begin
                   encore = 0
                   end
            !
                 end
               end
            !-----------------------------------------------------------------
            print " "
            print "             Saisie/consultation terminee"
            !

















            Wombat Examiner Volume 6, Number 2                                           35






            _____________________________________________________________________________
             
            A Useful DATATRIEVE Date Function
             
            John Briggs, SPACECOM, Gaithersburg, MD
             
            _____________________________________________________________________________
             
                We often  use  DATATRIEVE  to  access  files  created  and maintained from
            non-DATATRIEVE applications.  One  problem  we  had  often encountered was the
            incompatibility of date formats  used  by  these  applications.  Searches that
            involved date comparisons were incredibly  difficult.  In addition, the output
            format of the date fields could not be changed.
                Our solution to the problem  was  to  create  a user defined function that
            converts text  string  to  a  standard  DATATRIEVE  date/time.    We call this
            conversion function "DATE".  It works like this:
             
                     DTR> PRINT DATE("TODAY")
                        DATE
                      6-Nov-1984
                     DTR>
                     
                When we have to use a  file  that  has  non-standard date fields, we use a
            COMPUTED BY field that uses the  DATE  function  to  translate the date to the
            DATATRIEVE format.  Then we can  do  date comparisons and output formatting in
            the usual way with the computed field.
                The magical  part  of  all  this  is  that  we  didn't  have  to write any
            conversion routine.  We let DATATRIEVE do it!
                When you add a user defined  function  to DATATRIEVE you put a description
            of the function into DTRFND.MAR  [in DTR$LIBRARY].  This description specifies
            the type of the arguments and the type of the result.  When DATATRIEVE invokes
            the function it automatically converts  input  arguments to the type specified
            in the function description.
                The following is the function description we added to DTRFND.MAR:
             
            $DTR$FUN_DEF DATE, TEST_TO_DATE, 2
              $DTR$FUN_OUT_ARG TYPE = FUN$K_STATUS
              $DTR$FUN_IN_ARG  TYPE = FUN$K_REF, DTYPE = DSC$K_DTYPE_ADT, ORDER = 1
              $DTR$FUN_IN_ARG  TYPE = FUN$K_REF, DTYPE = DSC$K_DTYPE_ADT, OUT_PUT = TRUE
            $DTR$FUN_END_DEF
             
                And this is the FORTRAN routine that is called.
             
                     INTEGER FUNCTION TEST_TO_DATE ( DATE_IN, DATE_OUT )
                     INTEGER * 4    DATE_IN ( 2 ), DATE_OUT ( 2 )
                     DATE_OUT ( 1 ) = DATE_IN ( 1 )
                     DATE_OUT ( 2 ) = DATE_IN ( 2 )
                     TEXT_TO_DATE = 1
                     RETURN
                     END
                     
                Details on how to add  functions  to  DATATRIEVE  are  in Chapter 6 of the
            DATATRIEVE Guide to Programming and Customizing (Version 3).



            36                                          Wombat Examiner Volume 6, Number 2






            ______________________________________________________________________________
             
            DATATRIEVE Masters
             
            ______________________________________________________________________________
             
            The following list  of  names  identifies  people  who  have agreed to provide
            assistance to other DATATRIEVE users.
             
            Operating System      Phone                      Name and Address
             
            ______________________________________________________________________________
             
               RSX & P/OS    (212) 775-3567          Bart Z. Lederman
                                                     Bankers Trust Co., 28th Floor
                                                     One Bankers Trust Plaza
                                                     New York, NY  10006
             
               RSX & VMS     (617) 839-4411 X5480    Joe Kelly
                                                     Waymon Gordon
                                                     Worchester Road
                                                     North Grafton, MA  01536
             
               IAS & VMS     (509) 376-2227          Chuck Watson
                                                     Battelle Northwest
                                                     Richland, WA  99352
             
               VMS           (202) 426-1345          Larry Jasmann
                                                     10067 Marshall Pond Rd.
                                                     Burke, VA  20015
             
               VMS           (312) 982-7430          James Swanger
                                                     G. D. Searle & Co.
                                                     4901 Searle Parkway
                                                     Skokie, IL  60077
             
               VMS           (206) 396-2501          Darrell Eade
                                                     Naval Undersea Water E. S.
                                                     Hayport, WA  98345
             
               VMS           (302) 366-4610          Chris Wool
                                                     E. I. DuPont
                                                     Engineering Dept., Louviers Bldg.
                                                     Wilmington, DE  19898
             
               VMS           (602) 244-04316         Dick Azzi
                                                     Motorola SPS
                                                     Box 2953 MS: P116
                                                     Phoenix, AZ  85062
             
            _____________________________________________________________________________
             
             



            Wombat Examiner Volume 6, Number 2                                           37






            ______________________________________________________________________________
             
            DATATRIEVE SIG Officers and Steering Committee
             
            ______________________________________________________________________________
                
                SIG Chairman                            Lawrence Jasmann
                                                        U. S. Coast Guard
                                                        10067 Marshall Pond Rd.
                                                        Burke, VA  20015
                                                        202-426-1345
                
                Symposium Committee Representative      Chris Wool
                                                        E. I. duPont
                                                        Eng. Dept., Louviers Bldg.
                                                        Wilmington, DE 19898
                                                        302-366-4610
                
                Newsletter Editor &                     Joe H. Gallagher
                Communications Committee                Cleveland Clinic Foundation
                 Representative (Acting)                9500 Euclid Avenue
                                                        Cleveland, OH  44106
                                                        216-444-2551
                
                Library Committee Representative        Katherine M. Tamer
                                                        University of Texas Med.School
                                                        6431 Fannin  RM 5.020
                                                        Houston, TX  77030
                                                        713-792-5566
                
                Symposium Session Note Editor           Elaine McWilliams
                                                        Boeing Company
                                                        P.O Box 24346, M/S 9c-55
                                                        Seattle, WA  98124
                                                        206-773-0102
                
                Pre-Symposium Seminar Coordinator       Dana J. Schwartz
                                                        US Dept. of Defense
                                                        9800 Savage Road  Attn. R822
                                                        Fort George G. Meade, MD  20755
                                                        301-859-6277
                
                Artist and Media Specialist             Bart Z. Lederman
                                                        Bankers Trust Co., 38th Floor
                                                        P.O.Box 318 Church St. Station
                                                        New York, New York  10015
                                                        212-775-3567
                








            38                                          Wombat Examiner Volume 6, Number 2






                Promotions & Campground Coordinator     Robert R. Lott
                                                        E. I. Dupont
                                                        N6514, 1007 Market St.
                                                        Wilmington, DE  19898
                                                        302-774-2752
                
                Large Systems (DEC 10/20) Liason        Lynn Duncan
                                                        Oak Ridge National Lab
                                                        P.O. Box Y, Bldg 4500N, MS H32
                                                        Oak Ridge, TN  37831
                                                        615-576-5992
                
                Data Management System SIG Liaison      Keith Hare
                                                        P.O. Box 463
                                                        Granville, Ohio  43023
                                                        614-587-0051 (Home)
                
                Finance Committee                       Joan Hilton
                                                        Biogen Research Corp.
                                                        14 Cambridge Center
                                                        Cambridge, MA  02142
                                                        617-864-8900 x392
                
                Hardware Coordinator                    Alex L. Lamb Jr.
                                                        U. S. Army
                                                        16 Wake Road
                                                        Eatontown, NJ  07724
                                                        201-532-3318/1843
                
                Hardware Specialist, Black Book         Bert Roseberry
                                                        U.S. Coast Guard District (DT)
                                                        500 Camp Street
                                                        New Orleans, LA  70130
                                                        504-589-4934
                
                Steering Committee Member               Harold T. Glaser
                                                        J. Montgomery Cons. Engrs.
                                                        P.O. Box 7009
                                                        Pasadena, CA  911097009
                                                        818-796-9141
                
                Digital Counterpart                     Chuck Duncan
                                                        Digital Equip Corp ZK02-2/M28
                                                        110 Spit Brook Road
                                                        Nashua, NH  030622642
                










            Wombat Examiner Volume 6, Number 2                                           39






            _____________________________________________________________________________
             
            From the Editor's Pen
             
            Joe H. Gallagher, Cleveland Clinic Foundation, Cleveland, OH
             
            _____________________________________________________________________________
             
            We were pleased to publish three original articles in this issue of the Wombat
            Examiner.  The  activities  of  the  semi-annual symposia generates sufficient
            material for two of the  four  issue  per  year;  however, it is from you, the
            DATATRIEVE user community, that the  remaining material must come.  DATATRIEVE
            with its wide range of machine  implementations and wide range of applications
            can not help but create  interesting,  unusual, and unique examples, problems,
            and computer solutions.   It  is  your  responsibility  and duty to share your
            triumphs and troubles with your fellow DATATRIEVE users.  You will, of course,
            notice that one of the  articles is in French/English/DATATRIEVE/BASIC.  Since
            we, as computer professionals, are  already  multi-lingual, we would be please
            to publish articles written by  our  European colleagues in French, German, or
            Spanish as long as the English translations are provided.  We will publish the
            bi-lingual articles in a side-by-side presentation.
             
            This is the time of the year  when  you should be thinking about renewing your
            subscription  to  DECUS  newsletters.    The  subscription  service  for  many
            subscribers starts at the beginning of July.  Subscribers will be sent renewal
            notices, renewal forms will be available  at the New Orleans Symposium, and in
            the next issue  of  the  Wombat  Examiner.    There  are  many fine advertiser
            supported  magazines  such  as   Hardcopy,   The  DEC  Professional,  The  VAX
            Professional,  Digital  Review,  and  others  which  provide  users  with very
            valuable information at a small  or  no  cost.   However, these magazines will
            never provide the detailed technical  information that is available within the
            wide range of DECUS SIG newsletters.    Support the activities of your Special
            Interest Group and DECUS; renew your subscription when it comes due.
             
            At a meeting of the SIG Publications Committee of the Communications Committee
            which was held  March  11-13,  1985,  the  newsletter  offerings for 1986 were
            carefully and thoughtfully reviewed.    Very,  very careful considerations was
            given to combining all DECUS  newsletters  into one big newsletter which would
            be published monthly.  While there  are  many good reasons why such a combined
            publications should be attempted, the cost of such a publication was variously
            estimated at $60 to $100 per  year.    Since  it is unlikely that some support
            mechanism (such as DEC subsidy or  advertising) could be worked out within the
            present framework of DECUS, it  was  felt  that  a user subscription fee of at
            least $60 would not be acceptable to DECUS members with small systems (RT, PC,
            micro-RSX, APL, etc).  It  was  therefore  decided  to keep the newsletters as
            separate publications.  However, at that meeting, there was some plans made to
            have several of the current newsletter  publish with the Page Swapper (VAX SIG
            Newsletter).  The new combined  newsletter  offerings will be announced at the
            New Orleans Symposium and  in  the  subscription  renewal notices.  The Wombat
            Examiner will remain as a separate  newsletter, at least through July of 1986.
            The information contained within the Wombat Examiner, however, is likely to be
            expanded in light  of  the  Fourth  Generation  Language  Proposal which Larry
            Jasmann, Chairman, DATATRIEVE  SIG,  has  made.    His  proposal  is the first
            article in this issue.
             

            40                                          Wombat Examiner Volume 6, Number 2






            _____________________________________________________________________________
             
            News Briefs
             
            _____________________________________________________________________________
             
               * The DATATREIVE SIG Steering committee has prepared a special item for the
                 DECUS store at the New Orleans Symposium.   The item is a "secret" and no
                 disclosure will be made until the  items  goes on sale in the DECUS store
                 on Monday, May  27,  1985,  when  the  DECUS  Exhibit  Hall opens.  Those
                 attending the New Orleans Symposium may  wish  to bring along a few extra
                 bucks.  Many may wish to  acquire  one  or more of these limited addition
                 items.
             
               * Glenn Everhart has sent a new  version  of PortaCalc to the DECUS library
                 which contains a DATATRIEVE interface.   Glenn says that it seems to work
                 pretty well and could be used in shops that don't have FMS where it could
                 let the PortaCalc spreadsheets be  used  for  data entry forms.  It will,
                 however, also work with FMS if you have forms attached to domains ... the
                 necessary enabling bit is set.   Glenn  doesn't  I don't know how long it
                 will take to become available through to DECUS library.  Those interested
                 in these new capabilities should check with the DECUS Library.
             
               * Chuck Duncan reports that  the  first  phases for VAX DATATRIEVE Versions
                 3.2 and 3.3 are about done.  Versions 3.2 and 3.3 will both make a number
                 of bug fixes.  In  addition,  support  is  planned for RMS Quad word keys
                 (for dates), support for Rdb  varying text strings, full cluster support,
                 real support for VT240/241  terminals,  and  an  interface to the VMS 4.0
                 SORT routine.  It is anticipated  that  Version 3.2 will ship late in the
                 summer.  In addition,  installation  of  DATATRIEVE  will not require the
                 presence of DECnet  (this  is  a  real  issue  right  now  on the uVAX!).
                 Support for Rdb segmented strings and more bugs fixes are planned for VAX
                 DATATRIEVE Version 3.3 which is expected to ship in late 1985.  [Editor's
                 note: The information related here is NOT a commitment by Digital.  It is
                 merely an attempt to let users know  what they might expect in the future
                 with regard to the VAX DATATRIEVE product.]
             



















            Wombat Examiner Volume 6, Number 2                                           41






            _____________________________________________________________________________
             
            DATATRIEVE User Command File
             
            Joe H. Gallagher, Cleveland Clinic Foundation, Cleveland, OH
             
            _____________________________________________________________________________
             
            After you have read this double  issue  of the Wombat Examiner, please execute
            the following command file on your machine.
             
                     ready datatrieve_action WRITE!
                     for all_datatrieve_users in datatrieve_action begin
                       :think_about_an_interesting_datatrieve_problem
                       :think_about_datatrieve_call_interface
                       :think_about_interaction_with_programming_languages
                       if machine eq "VAX" then begin
                         :think_about_interaction_with_CDD
                         if ((fn$status("FMS") eq "AVAILABLE") or 
                           (fn$status("TDMS") eq "AVAILABLE")) then 
                           :think_about_interaction_with_forms_tools
                         end else begin
                         :think_about_conserving_pool_space
                         end
                       if ((problem eq "EXISTS") or (solution eq "EXISTS") or 
                                 (hint eq "EXISTS")) then
                         :write_article
                       modify article with topic containing "DATATRIEVE" using begin
                         style = "Standard English"
                         content = "Information"
                         end
                       if ((fn$status("KERMIT") eq "AVAILABLE") or 
                           (fn$status("XMODEM") eq "AVAILABLE") or
                           (fn$status("MAGTAPE") eq "AVAILABLE")) then begin
                         :send_article_electronically
                         end else begin
                           :send_article_via_hardcopy
                           end
                         end
                       store treasures using begin
                         respect = "Much"
                         praise = "Undying"
                         thanks = "Well deserved"
                         end
                       end











            42                                          Wombat Examiner Volume 6, Number 2

