Transcript
Calhoun: The NPS Institutional Archive Theses and Dissertations
Thesis Collection
1989
Graphic interface for Attribute-Based Data Language queries from a personal computer to the Multi-Lingual Sympson, William Goebel Anthony. Monterey, California. Naval Postgraduate School http://hdl.handle.net/10945/25971
NAVAL POSTGRADUATE SCHOOL Monterey, California
i»*
GRAPHIC INTERFACE FOR ATTRIBUTE-BASED DATA LANGUAGE QUERIES FROM A PERSONAL COMPUTER TO A MULTILINGUAL, MULTI-MODEL, MULTI-BACKEND DATABASE SYSTEM OVER AN ETHERNET NETWORK by William Goebel Anthony Sympson in
December 1989 Thesis Advisor:
Approved
C.
for public release; distribution
is
Thomas
Wu
unlimited
T24809.
Jnclassified lecurity Classification
of
this
page
REPORT DOCUMENTATION PAGE UNCLASSIFIED
a
Report Security Classification
a
Security Classification Authority
Restrictive
Distribution Availability of Report
Approved
Declassification/Downgrading Schedule
b
Performing Organization Report Numbers) 6b Office Symbol a Name of Performing Organization slaval
Postgraduate School
Address
c
(city, state,
Monterey, Name
a
Naval Postgraduate School
and ZIP code)
Address
7b
CA 93943-5000
(city, state,
Monterey, 8b Office Symbol
of Funding/Sponsoring Organization
for public release; distribution is unlimited.
Monitoring Organization Report Numbers) 7a Name of Monitoring Organization 5
52
(If Applicable)
Markings
lb
3
and ZIP code)
CA 93943-5000
Procurement Instrument Identification Number
9
(If Applicable)
Address
c
(city, state,
and ZIP code)
Source of Funding Numbers
1
Prom ii" Element Number
|
Project
No
I
Tisk
No
I
Wort Unit Accession No
GRAPHIC INTERFACE FOR ATTRIBUTE-BASED DATA LANGUAGE QUERIES FROM A PERSONAL COMPUTER TO THE MULTI-LINGUAL, MULTI-MODEL, MULTIJACKEND DATABASE SYSTEM OVER AN ETHERNET NETWORK 1
Title (Include Security Classification)
2
Personal Author(s)
Sympson
Type of Report Master's Thesis
HI, William G. A. Time Covered
13b
3a
Dale of Report (year, month,day)
14
15
1989 December Supplementary Notation The views expressed in this thesis are those of the author and do not 6 >olicy or position of the Department of Defense or the U.S. Government. Cosati
7
Codes
Abstract (continue
9
on reverse
Subject
Terms (continue on reverse
if necessary
and
identify by block
Page Count
128
To
18
reflect the official
number)
object-oriented language, graphical interface, database language
Subgroup
Group
icld
From
if necessary
and
identify by block,
number
This research is aimed at taking one step closer to the goal of the "paperless ship". This thesis examined the of providing a visual interface to allow queries from a front end Personal Computer (PC) using the Attribute-Based Data Language (ABDL) to a Multi-lingual, Multi-model, Multi-backend mini-computer Providing n improved Human-Machine Interface for the system will greatly increase its usability. A prototype was Tiplemented in the Graphics LAnguage for Database (GLAD) on a Zenith 248 as the front end connected to a ISI lini-computer running the Multi-Lingual, Multi-Model, Multi-Backend Database System (MBDS), a backend of ie future. The Zenith 248 was chosen as the front end because of the large quantity of these computers iroughout the Navy. was used because it is a graphics object-oriented environment for databases that ives the user access to both data manipulation and program development through visual interaction. This creates user friendly windowing environment both for development and for operational applications. Looking towards le future, MBDS is the perfect backend as it is the latest in Database management systems. This thesis provided n extension to to demonstrate the ability to send Attribute-Based Data Language to Multi-Backend easibility
GLAD
GLAD
Jatabase
System
.
Distribution/Availability of Abstract |
a
X|
Name
FORM
21
DTIC
as report
Thomas MAR
1473. 84
Abstract Security' Classification
Unclassified
users
22b
of Responsible Individual
rofessor C. 3
same
unclassified/unluTiiied
Wu
Telephone (Include Area code)
(408)646-3391 83
APR
edition
may
be used until exhausted
All other editions are obsolete
22c Office Svmbol
Code 52
Wq
security classification of this page
Unclassified
Approved
for public release; distribution
is
unlimited.
Graphic Interface for Attribute-Based Data Language Queries from a Personal Computer to the Multi-Lingual, Multi-Model, Multi-Backend Database System Over an Ethernet Network by
William Goebel Anthony Sympson III Lieutenant, United States Navy B.S.S.E., United States Naval Academy, 1984
Submitted in
partial fulfillment of the
requirements for
the degree of
MASTER OF SCIENCE
IN
COMPUTER SCIENCE
from the
NAVAL POSTGRADUATE SCHOOL December 1989
ABSTRACT This research ship".
aimed
is
at
taking one step
closer to the goal of the "paperless
This thesis examined the feasibility of providing a visual interface to allow
Computer (PC) using
queries from a front end Personal
Language (ABDL)
to a
the Attribute-Based Data
Multi-lingual, Multi-model, Multi-backend mini-computer
Providing an improved Human-Machine Interface for the system will greatly increase
A
usability.
(GLAD
on a Zenith 248 as the front end connected
)
LAnguage
prototype was implemented in the Graphics to a ISI
The Zenith 248 was chosen
as the front
these computers throughout the Navy. object-oriented
GLAD
environment for databases
that
(MBDS),
windowing environment both
Looking towards
the future,
management systems. ability to
MBDS
is
for
a
backend of
end because of the large quantity of
was used because
it
is
a
graphics
gives the user access to both data
manipulation and program development through visual interaction. friendly
for Database
mini-computer running the
Multi-Lingual, Multi-Model, Multi-Backend Database System the future.
its
This creates a user
development and for operational applications.
the perfect
backend
as
This thesis provided an extension to
it is
the latest in Database
GLAD
to
demonstrate the
send Attribute-Based Data Language to Multi-Backend Database System
in
.
TABLE OF CONTENTS I.
n.
INTRODUCTION
1
A.
BACKGROUND
1
B.
THE NEED FOR RESEARCH
2
C.
THESIS ORGANIZATION
3
OBJECT-ORIENT PROGRAMMING AND THE ACTOR ENVIRONMENT A.
OBJECT-ORIENTED PROGRAMMING (OOP)
5
1.
Introduction
5
2.
Fundamental concepts of Object-Oriented Language
6
3.
4.
B.
5
a.
Objects
6
b.
Classes
6
c.
Messages
7
Inheritance,
Polymorphism and Encapsulation
a.
Inheritance
8
b.
Polymorphism
9
c.
Encapsulation
10
Object-Oriented Programming
Summary
ACTOR ENVIRONMENT 1.
2.
8
Microsoft
10 11
Windows
11
a.
MS-Windows
b.
Sample Window
13
c.
Dialog Box
14
requirements
Actor
12
15
IV
C. HI.
Actor requirements
17
b.
Starting Actor.
17
c.
Workspace Window
17
d.
Browser Window
18
e.
The Inspector and Debug Windows
19
SUMMARY.
20
BACKEND DATA SYSTEM AND SOCKET INTERFACE A.
BACKEND DATA SYSTEM 1.
2.
B.
Database Management System
DBMS
B.
21
a.
Multi-Lingual Database System
21
b.
Multi-Model Database System
24
c.
Multi-Backend Database System
25
The Data Model and Data Language
27
a.
The Attribute-Based Data Model
27
b.
The Attribute-Based Data Language
28
Socket Interface between
30
MBDS
and
GLAD
30
a.
The
MBDS
Socket Interface
31
b.
The
GLAD
Socket Interface
34
IMPLEMENTATION A.
21 21
THE SOCKET INTERFACE 1.
IV.
a.
GRAPHICS LANGUAGE FOR DATABASE
36 36
1.
Background
36
2.
Hardware and Software requirements
36
MODIFICATIONS
38
C.
1.
Resource File
38
2.
DMWindow
40
IMPROVEMENTS 1.
D.
41
QueryWindow Class
41
a.
Edit
42
b.
Query
43
c.
Templates
45
d.
Describe
46
e.
Send Query
47
f.
Help
49
g.
Quit
49
Sample Session 1.
IV.
Class
Starting
49
Glad
to receiving Results
a.
GLAD Top-Level Window
b.
Data Manipulation Window
c.
List
d.
Display
e.
QueryWindow
49 50
(DMWindow)
53
Member Window
54
One Window
54 55
CONCLUSIONS
59
A.
A REVIEW OF THE RESEARCH
59
B.
FUTURE ENHANCEMENTS
59
C.
DISCUSSION AND BENEFITS OF THE RESEARCH
60
APPENDIX A
-
Actor.RC
RESOURCE CODE LISTING
62
APPENDIX B
-
DMWINDOW CLASS CODE LISTING
84
APPENDIX C -QUERYWINDOW CLASS CODE LISTING
VI
105
LIST OF REFERENCES
114
INITIAL DISTRIBUTION LIST.
116
vn
LIST
OF FIGURES
DOS
Figure 2.1
Windows
Figure 2.2
Sample Window
13
Figure 2.3
Sample Dialog Box
15
Figure 2.4
The Actor About Box
16
Figure 2.5
Actor Workspace
Figure 2.6
The Browser Window
19
Figure 3.1
The Multi-Lingual Database System
22
Figure 3.2
Multiple Language Interface
23
Figure 3.3
The Mixed-Processing
25
Figure 3.4
The Multi-Backend Database System
26
Figure 3.5
MBDS/GLAD
31
Figure 4.1
Initiate
Figure 4.2
QueryWindow
Figure 4.3
QueryWindow
Figure 4.4
Query option pop-up menu
Figure 4.5
Sample QueryWindow
Figure 4.6
The Template options of QueryWindow
Figure 4.7
Template
Figure 4.8
The Describe option of QueryWindow
47
Figure 4.9
The Send Query option of QueryWindow
48
Figure 4.10
Awaiting Results from
Figure 4.11
The Results displayed
Figure 4.12
The
layered over
11
Window
18
Strategy
Interface
QueryWindow from DMWindow
40 41
42
Edit option selected
Window
HELP option
43
after the Delete option of
for Delete
MBDS in the
Browse Window
of Query Window
vm
Query selected
44 45
46
48
49 50
Figure 4.13
GLAD Top-level Window
51
Figure 4.14
Database Selection Dialog Box
52
Figure 4.15
The Data Manipulation Window (DMWindow)
53
Figure 4.16
DMWindow's DESCRIBE
54
Figure
GLAD Browse and Display Windows
4.
17
Query from
Figure 4.18
Initiating a
Figure
Query ready
4.
19
to
Awaiting Results from
Figure 4.21
The Results of
the
Employee
55
DMWindow
be sent to
Figure 4.20
option on
56
MBDS from QueryWindow
MBDS
Query displayed
IX
57 58
in the
BROWSE Window
58
ACKNOWLEDGMENTS I
would
implement
like to express
this thesis.
in the conception
I
would
I
my
would
sincere thanks to the people like to
and preparation of
also like to thank
my
patience, support and love, without
my
children,
day before.
thank
who
my advisor Dr.
C.
helped
me
prepare and
Wu for his help
Thomas
this thesis.
family, particularly
which none of
Julianne, Christopher, and William
this
my
beautiful wife
would have been
who make
Susan for her possible.
And
each day brighter than the
INTRODUCTION
I.
BACKGROUND
A.
As was
the 90's begin,
first
made popular by
(Retired).
(FFG-7
we
are at the
dawn of the "paperless ship"
a former director of Surface Warfare,
concept. This concept
VADM
J.
Metcalf,
USN
Studies have determined that an Oliver Hazard Perry guided missile frigate
class) with a
crew of 185 men, and nominal 3500 ton displacement carries
in
excess of 20 tons of paper required for the ship's mission and crew [Ref. l:pp. 157-159].
The goal of
the "paperless ship" is to reduce and ultimately eliminate tons of paper. This
reduction would allow the installation of
improve
all ship's ability to fulfill its
manpower and man-hours
more offensive or defensive weaponry
required mission.
also greatly reduce the
required to maintain this paperwork. This thesis will present a
make
using existing hardware and software to
tool
would
It
to
"paperless
the
ship"
a
reality
tomorrow. Tactical computers have been in the
Navy
only been in service on board ships for the is
the Ship's Non-tactical
ADP
program
for decades.
last
15 years.
(SNAP
II).
it
seems
to
add paperwork. The
SNAP
II
The
While
forward toward reaching the goal of the "paperless ship", times
Non-tactical computers have
it
largest
SNAP
fell far
program II
short of
On
the average Destroyer, the
being added
to,
a giant leap
its
mark. At
80's.
We
need
90's.
SNAP
II
system consists of one Harris mini computer
with a storage capacity of 80 Mbytes hooked up to 6 to 8 is still
present
used hardware of the 60's with software
of the 70's and didn't reach the majority of the ships until the mid
something better for the
was
at
but
some of
the
programs
it
dumb
terminals.
The software
handles are supply requisition and
inventory, Personnel Qualification System, and several simple tickler limited
word processing
ability.
It
ships, the systems
DOD
use
at the
same
performance degrades
The second major awarded a
in
time,
which
is
its
own
specific lessons.
a normal situation on most
1985 when Zenith Data Corporation was
contract to provide PC's, Zenith 248 that time, there
incompatibility of equipment.
also has a
drastically.
step forward occurred in
Defense Department. Before
It
takes lots of man-hours to properly train individuals
on the basic functions of the system with each section requiring
With several terminals
files.
Also, for a
write a letter of justification which took six
AT
compatible computers for the
was no standardization which
command months
to purchase a
to get routed
led to a lot of
computer
it
had to
and approved. Then
it
took an additional six months for Zenith and the supply system to deliver the units. After the standardization,
and when supply was able
and squadrons were able
B.
to
keep up with the high demands, ships
to receive several units.
THE NEED FOR RESEARCH The
situation as
we
enter the 90's
installed with 8 terminals
and 5
This Thesis will propose that
is that
to 7 Zenith
we can
a destroyer class ship has a
SNAP
II
system
248 computers which are stand alone
greatly improve the ship's ability to
units.
:
reduce paperwork
reduce
man
hours
increase utilization and performance of the
SNAP II
system
increase utilization and performance of the Zenith 248's
by use of a graphical interface
to simplify procedures for all users
Using the Zenith 248's as the front end would greatly reduce the load on the system since a majority of the work could be done on the 248's
own
SNAP II
processor, and only
SNAP'S
access the
for specific information.
The 248, using commercially developed
software, can handle a majority of the programs that are
more terminals
available, time will not be wasted waiting for an
provides an interface where the user
Given the diversity of
The focus of
SNAP II C.
this research
from a front-end, or
its
is
open one. Using
GLAD
able to directly manipulate the required data.
direct manipulation of logical objects is appealing to
users,
remember for
novices, easy to
interface
now done on SNAPs. With
intermittent users and rapid for frequent users. [Ref. 2].
was
to test the feasibility of providing such a graphical
in this case, a Zenith 248,
and a backend database such as
replacement.
THESIS ORGANIZATION Chapter
II
provides a discussion of Object oriented programing and the Actor
software development environment.
Chapter
III
provides a description of the Multi-Lingual, Multi-Model, Multi-Backend
Database System
(MBDS)
and
its
Attribute
Based Data Language.
It
discusses the
connection between the Backend and the Front end through a socket interface design by another thesis student.
Chapter IV explains the implementation details of the query interface. at
the Graphics
Language
for Database
chosen as the interface for use
in
modifications and improvements to
QueryWindow, as well as
the sending of
some of
ABDL
the
(GLAD) system
GLAD.
that
is
And
discussed.
Then
it
GLAD
can be manipulated are illustrated and described.
looks
it
was
describes the
the specific implementation of the it
receives back from
the associated implementation difficulties are presented. in
it
background, and the reason
Queries and the data
sample session of the research results running
First
is
given.
And
MBDS lastly,
,
a
The various windows
Chapter
V
concludes with a summary discussion of the research and possible
enhancements as continuation of research
in this area.
n.
OBJECT-ORIENTED PROGRAMMING AND THE ACTOR
ENVIRONMENT
A.
OBJECT-ORIENTED PROGRAMMING (OOP) 1.
Introduction Object-oriented programming
is
a
new and powerful programming environment.
Rather than working with traditional procedures, subroutines and separate data structures, the
on
programmer that data.
creates objects
One of the
coding required to be
programmer
which control both the data structure and the operations
goals of object-oriented programming languages written and maintained.
to build classes of reusable objects
This
is
is
reduce the
to
accomplished by allowing the
which encapsulate behavior and ensure
data abstraction.
Many
languages claim to be object-oriented languages, however,
language to be considered object-oriented
it
must meet three
in
order for a
criteria [Ref. 3:p. 1]:
•
encapsulation of data and instructions into units of functionality called objects
•
inheritance of functionality through a class hierarchy
•
dynamic run-time binding of messages
Languages such languages
fail
Modula-2, and
as Ada,
to
meet
all
sent to objects
C++ which
three criteria.
are advertised as object-oriented
The Actor environment provides
for
message-passing paradigm, inheritance, and polymorphism, the major characteristics of object-oriented languages.
MS-DOS
Actor
is
an object-oriented programming language
microcomputers from The Whitewater Group
be discussed in detail later
in this chapter.
Inc.
(OOL)
The Actor environment
for will
The
basis of object-oriented
This
objects.
object, class,
is
programming
is
the creation and
obtained by using the fundamental concepts in any
management of
OOL
and message.
Fundamental concepts of Object-Oriented Language
2.
a.
Objects
An
object
is
and intangible
object has attributes and responds to instructions.
OOP
pictures),
entity that resembles both tangible
we
concept of an object. But
difficult to grasp the
cars,
programming
a
An
real-world objects.
model, engine, year and color.
to go,
you
A
is
a car.
A
car object has attributes such as
are not interested in the
drive train or the engine.
This
is
called
When you All cars are
data abstraction, the
manipulate an object's data without knowledge of the data's internal format.
big difference between procedural languages and object-oriented languages
procedural functions work on data passed to them as parameters, while
you send a message entities
For
car also responds to certain actions or instructions,
driven the same way, regardless of model or year. ability to
first it is
deal with objects constantly (people,
such as go (step on the gas), stop (step on the brake), turn (turn the wheel).
want the car
At
represents these physical objects as computer objects.
example, an object as a functional entity
The
which are
to the objects to
in object-oriented
perform operations on themselves.
normally considered data structures are actually objects.
is that in
In Actor,
many
For example, integers,
characters, strings and files are considered objects. b.
Classes
A what
is
class defines the structure and behavior
common
in a
category of objects, such
of an object.
as: the class
Any
class describes a set of objects,
The
instructions that an object can respond to are
A
class describes
of ships or class of students.
where these objects are called instances of
managed by
a class.
the class, while the data
associated with a particular object
Dodge
car example,
is
managed by
is
a class of car, and
all
the object
Dodge
itself.
Using the previous
cars belong to the class, but you
might have a red Dodge Daytona and a blue Dodge Caravan. The structure of a class
is
defined by instance variables which contain the data private to that class. The behavior
of an object of a class
is
defined by
its
methods. Methods allow other objects to access
this data.
Messages
c.
An
Objects perform operations in response to messages.
message based on a behavior defined by the
when we
we
press on the gas pedal,
object responds to a
Again back
object's methods.
in the car,
send a go message to the car object. The car object's
transmission system has defined methods to respond to the message, increase fuel, increase engine rpm.
There are two types of methods, what we have been using are called object
These are associated
methods.
that instance of the class.
the class itself. class,
it
can't
The
best
We
to the instances of the class,
need
to
example of
and only allow messages
to
be able to send messages not to the instances but to this is the
new method
to create a
be an object method because the object does not
exist, so
new it
is
object of a
handle by a
class method.
How
message
sending a
to an object.
a receiver, and a
selector,
looks to see
method.
does Actor execute methods and messages?
If
generated.
it
if
a
list
method of
fails to find a
The syntax of
a
the
The format
of arguments.
same name
method within method
method
message
for a
When
A
a
message
in
is
as the selector exists,
gets executed
Actor consists of a sent to an object, if so, it
is:
it
executes the
the instance of that class, an error
definition in Actor
by
message
is
/*
Comments
*/
Def
(self [argument statement
{
list
[I
]])
1;
statement 2;
statement n; }!!
Actor methods can take up to eight arguments, and up to eight local variables. The local variables are assigned and exist only during the
can be executed by sending
methodName( The
selector
it
life
The above method
of the method.
a message:
Receiver, arguments);
would be "methodName",
the receiver
is
"Receiver"
,
and the
of
list
arguments "arguments". 3.
Inheritance, a.
Polymorphism and Encapsulation
Inheritance Inheritance
is
a
mechanism
for sharing behaviors
each class inherits behavior from classes above behavior to classes below class has access to
all its
it,
its
descendants.
it,
its
between
classes.
In Actor,
ancestors, and passes
down
This behavior means that a descendant
ancestor's instance variables and methods, in addition to
Actor uses single inheritance where each class
is
its
own.
permitted only one direct ancestor.
[Ref. 4:p. 39]
This
inheritance
hierarchical ordering of
works
all its
throughout
classes.
the
Actor
The most generic
class
tree,
which
is
the
classes are at the top and the
more
specialized classes at the bottom.
Since
already defined in Actor. inherit
this object
a message
belongs to are
methods defined again the search
repeated
all
the
specific to
which
fails,
Dodge
inherits
searched.
from
b.
to the
cars.
first
the
class, parent class, are searched.
If
Object
class.
example
But not
Dodge
is
is
the car class defines
,
all
Dodges
from car
are the
class, then car class.
is sent.
to Caravan's
in the
how
cars in general behave.
class,
and adds behavior
same so we define
Assume
Dodge
all
class.
The Caravan
a
Caravan class
Dodge's use the same
When we
class does not
immediate ancestor
that
class,
press on the
define a go
Dodge
The
class.
then executed.
Polymorphism
is
literally is
defined as "the ability to take several forms".
In
used to describe a situation where the same message causes different responses
depending on
The
class.
no corresponding methods, then
If there are
method would be defined
Polymorphism it
class, all classes
then the methods of the object's grandparent are searched. This
method, so the search continues
go method of Dodge
Object
methods defined for the class which
immediate ancestor
gas pedal of a Caravan, a go message
the
must be descendants of classes
classes are descendants of
inherits the general car behavior
transmission, so that
OOL,
classes
sent to an object, the
for the object's
way
Dodge
class
is
first
In our previous
is
new
methods and instance variables defined for the Object
When
The
all
All
who
the receiver of the
message
same method names. The methods could result is that
we can send
the
is.
Actor allows different classes
to
have
also have totally different implementations.
same message
to different objects to
responses. Polymorphism allows us to write generic reusable code
produce different
more
easily, since
we
can specify general instructions and delegate the implementation details to the objects
This decreases the dependencies in the code and maintenance
that are involved.
is
therefore easier.
Dodge
In the
AM/FM radios.
Dodges have states
that
method
is
c.
method which says
can define a basic stereo
all
Caravan we can define a separate stereo method
In the
caravans have
all
who
run-time
we
class,
AM/FM
The program determines
cassette radios.
message should be so
the correct receiver of the
that at
that the correct stereo
executed.
Encapsulation
One
of the main goals of object-oriented programming
accomplished by allowing access
only through
to data
its
is
encapsulation.
own methods. No
It is
other parts
of the program can operate directly on another object's data. Therefore, this ensures that the proper instructions are operated on. This allows
messages but and
leave
will execute their
own
implementation
the
methods.
up
to
the
A
many
objects to respond to the
same
program can send a generic message
receiving
object.
This
decreases
interdependencies, and improves interchangeability and reusability.
One encapsulated. all
last
look
at
our car example,
Although brakes may
we can
think of a car's brake system as being
differ in implementation, disc or anti-lock, they are
used by the driver by using the pedal: step on the brake pedal to stop the car, then
go of the
brake pedal and keep moving
has, that detail
is
It
does not matter what type of brakes a car
insulated from the rest of the car and the driver. That
a driver to be able to use 4.
.
any
let
makes
it
easy for
car.
Object-Oriented Programming
Summary
Procedural programming and object-oriented programming are quite different,
and understanding
OOP
was
overcome
implement
this thesis.
Object-oriented programming closely links data and procedures as objects.
The main
the first obstacle to
10
to
reason for using object-oriented programming
more maintainable systems
B.
the ability to reuse code
and develop
amount of time.
ACTOR ENVIRONMENT 1.
Windows
Microsoft
Since Actor
must know how of
in a shorter
is
MS-DOS
interface.
is
a Microsoft
to operate
Windows (MS-Windows)
Windows
that layers itself
upon
in order to use
DOS
it.
application, to use
Windows
is
it
we
a visual extension
to provide the user with a friendly, graphical
See Figure 2-1 for a graphic depiction of
this concept.
In
Windows,
the user
can execute multiple programs simultaneously in an integrated environment, which gives the user a consistent interface
whatever the application.
Figure 2.1
Windows
11
Windows does
layered over
DOS
not require the
users to
memorize command
curve for tL
all
window
line
Commands and
applications dramatically. [
their syntax.
Ref
.
This reduces the learning
5: p. 4]
MS-Windows requirements MS-Windows
on which you
install
runs
on
IBM
personal computers or compatibles.
Windows must meet
the following
Any system
minimum requirements:
A personal computer with two floppy disk drives or a fixed hard drive. 512K
DOS
of
memory (640K
is
recommended)
version 2.0 or greater
A monochrome
or color monitor with graphics card
Windows can be Windows
or greater
operated without a mouse,
however,
operations using a mouse, because Actor requires one.
12
we
will
describe
)
Sample Window
b.
Figure
2.2
shows
Systtn ntnu box
Menu bar
a
typical
Notepad editor
window,
in
MS-Windows
Caption bar (or .title bar)
—
Pull-down Menu Sizing border"
Program' s. client area (work area)
MS-DOS Icon (
Minimized
Figure 2.2 Sample
environment. Each element of Figure 2
The Mouse pointer
The Program's
We can
show-up
will
client area
(Work
edit text or graphics
The Icons representing
.2 will
Window
be briefly described. [Ref. 6:p. 7]
as an arrow pointer.
area)
is
the
working area of the window.
by using the keyboard or the mouse.
applications that have been minimized by clicking on
the minimize box, located in the right
hand corner, appear
in the
Icon area
at
the bottom of the screen.
The Caption bar window.
(title
bar) displays the
In Figure 2-2,
it
is
name of
the Notepad. If the
13
the application in the
window
is active,
the area to
the left and right of the
grayed to show that •
title
this is
will
be
menu
with a color
(if
capable) or
where you are working.
The System Menu box can be used applications. This
filled in
System menus Windows programs.
to display the
common to
is
all
in the
•
The size box can adjust the size of the window by clicking on it with mouse and dragging it to either increase or decrease the window.
•
The Menu bar is unique to
•
this
similar to the
System Menu
the
bar, but this controls the features
window.
A Pull-down Menu is
a
submenu of an item displayed
in the
Menu
bar.
It
helps organize features and reduces clutter.
•
The Maximize box
window to fill the entire screen, while the window to a Icon representation at the bottom of the
increases the
minimize box reduces the screen.
•
when
Scroll bars appear
there is
more than one screen of information
to be
displayed.
•
A vertical
line
I
I-
,
specific part of the
c.
indicates that text input
is
required in that
Dialog Box For
special
Beam,
window.
short, simple
window
communications between
called a dialog
box
is
a
Window
used. Figure 2-3,
application and a user, a
shows a sample dialog box from
PCPaint. Dialogs are used to get specific information required by the application or to
warn
the user of
some
error.
They may contain
example; •
push buttons
•
radio buttons
•
check buttons
•
edit fields
14
several types of control devices, for
^
.
•
list
MS-Windows
boxes
provides a visual interface in the form of windows that contain graphic
representations of user input and system output.
The Menus
Enter print options
Nunber of copie ..|i
\ ^Q
Draft
(S
Proof
1
OK
[
|
—
J
Default
\Push ^Button
—
(Cancel)-
Whole
Information Floi
Figure 3.1 The Multi-Linqual Database System [Ref. 8:p.l2]
The LIL sends
model-based user data language (UDL). kernel mapping system
KMS
transforms a
(KMS)
UDM-based
.
The
KMS
the user transaction to the
executes one of two possible tasks.
database definition to a database definition of the kernel
data model (KDM), when the user specifies that a new database the user specifies a
UDL
transaction
is to
be executed, the
transaction to a transaction in the Kernel data language In the first task,
kernel controller (KC).
database system (KDS).
KMS KC,
The
forwards transaction
in turn, sends the
When KDS
is
(KDL)
in the
KDM
is to
KMS
be created.
translates the
UDL
equivalents.
KDM
data definition to the
database definition to the kernel
finished with processing the
22
When
KDM
database
definition,
it
definition has been processed
In the second task,
receives the
KC
informs the KC.
KDL
completion, the
and
KDS
that loading
KMS
transactions,
then notifies the user, via the LIL, that the database
it
sends the
of the database records
KDL transactions
forwards them to the
sends the results in the
form
to the
UDM
form via LIL. The LIL,
form.
user-defined data model. In a
model defined. This
is
shown
KFS
The KFS then displays
KMS, KFS,
and
MLDS,
KDS
KC
begin.
KC. When
the
for execution.
KDM form back to the KC.
the results to the kernel formatting system (KFS).
KDM
to the
may
The
KC
Upon
KC routes
reformats the results from the the results in the correct
UDM
define the language interface for a single
a separate language interface
in figure 3.2.
Figure 3.2 Multiple Language Interface
23
is
required for each
In the current system, there are four unique language interfaces defined. •
relational/SQL model
•
hierarchical/
•
network/CODASYL-DML model
•
functional/Daplex model
DL/I model
These have been developed and implemented by previous the guidance of Prof.
KDS
structure
is
David Hsiao and
a single,
his assistant
common component
Mr. Thomas Chu.
shared by
all
under
thesis students
models.
In contrast, the
The
KDS
allows
the various user-defined language interfaces to access and manipulate the physical
database.
The
attribute-based data
have been implemented as the
KDM
model and attribute-based data language (ABDL) and
will be discussed later in this chapter. b.
KDL,
respectively, for the
[Ref. 9:p.
MLDS. The ABDL
11-13]
Multi-Model Database System
The multi-model database system
is
an improvement on the
MLDS.
It
allows a
user to query any database using a data manipulation language of his choice, regardless
of the underlying data model.
An example might
be, a user
can
utilize a
SQL
query
This allows existing databases and query
transaction to access a hierarchical database.
languages to be used when upgrading to a new database system. to retrain people or rewrite the database every time
No
we expand.
longer do
we have
This reduces error
caused during translation of existing database and existing queries into new systems.
The mixed-processing the databases as
shown
in
strategy
Figure
3.3.
is
implemented
Two components
transformer and a second language interface. in the local LI,
Upon
language interface,
all
to carry out the cross-access
When
are involved, the
of
schema
a user selects a database that
is
not
other Li's are searched for the desired database.
finding the database, the original database schema
24
is
copied and transformed into
SCHEMA Transformer
LI
LI
LI
KDS
Figure 3.3
The Mixed-Processing Strategy
an equivalent schema in the local LI.
When
manipulation language, the
new language
based request's output from
this
model which thereby eliminates P-
a user executes a transaction in the local data
interface processes the request.
language interface the
is in
the
attribute
the original database
need for an extra language translation
step. [Ref. 8:
34] c.
Multi-Backend Database System
The Multi-backend database system overcomes upgrade issues related
to the traditional
accomplished through the
These backends have
A
form of
The
utilization
the performance problems and
approach of database system design.
of multiple backends connected
identical hardware, replicated software,
backend controller
is
This
is
in parallel fashion.
and their
own
disk systems.
responsible for supervising the execution of the database
transactions and for interfacing with the hosts and user, see Figure 3.4
.
The backends
perform the database operations with the database stored on the disk system of the backends.
25
As Shown computer requests)
in Figure 3.4, the user access is
When
to the controller. is
accomplished through a host
a transaction (a single request or a sequence of
received, the controller broadcasts the transaction to
the database
is
same request
all
Since
the backends.
distributed across the backends, all the backends processors execute the
in parallel.
Each backend maintains
its
own
request queue.
Backend 1
As soon
as a
Disk
Controller
Backend
2
Transaction
Applications
Operating
Disk
Controller
Backend
System
Programs
66 6 rh
Controller Answer
Backend N
Disk
Controller
Figure 3.4 The Multi-Backend Database System
backend finishes
a request,
it
i
sends the result back to the controller and continues to
process the next request independent of the other backends. [Ref. 10:p. 32-33]
Performance gains are obtained by increasing the number of backends. example,
if
the size of the database and the transactions remain constant, then
would decrease increased.
MBDS
the response time for a user transaction
Even more important,
if
when
the
For
MBDS
number of backends
the database or the transactions increased in size,
could maintain an invariant response time with proportional increase in backends.
26
2.
The Data Model and Data Language The goal of
the data-model transformation
and data-language translations
is to
maintain semantic preservation of the database and operational equivalence of the
As
transactions.
stated above, the attribute-based data
implemented as the a.
model and
ABDL
have been
KDM and KDL respectively in the multi-lingual database system.
The Attribute-Based Data Model In the attribute -based data model, the data has the following constructs:
•
Database
consists of a collection of files
•
File
contains a group of records which are characterized
by a unique
set
•
Record
is
made up of a
•
Attribute-value pairs
is
a
For example,
model
each attribute defined the directory
is
Cartesian product of the attribute
the value
domain of the
attribute.
an attribute-value pair having "Caravan" as
record contains
in the database.
most one attribute-value pair for
at
Certain attribute-value pairs of a record are called
keywords of the record, because either the attribute-value pairs or
attribute-value ranges are kept
attribute-value
keywords.
A
attribute.
collection of attribute-value pairs
member of the
name and
the value for the
of keywords
pairs
in
a
directory for identifying the records.
which are not kept
An example
of a record
is
in
the
directory
are
called
their
Those
non-directory
shown below.
(,,,{mini-van}) The angle curly brackets
,
{,},
brackets, <,>, enclose an attribute-value pair,
include the record body.
contains the attribute
FILE and
its
value
is
The
the file
27
first
i.e.,
keyword.
The
attribute-value pair of all records
name,
in this case,
USCars.
There are two major reasons for choosing the attribute-based data model. the attribute-based data
model
application independent.
is
data independent, by this
we mean,
First,
implementation and
All of the constructs mentioned above are not dependent on a
Second, the model allows the user to take
specific implementation or application.
advantage of certain constructs for system optimization. b.
The Attribute -Based Data Language The attribute-based data language (ABDL) supports
RETRIEVE-COMMON. A
request
contains a qualification which
operated on.
Two
or
UPDATE,
DELETE,
INSERT,
operations,
is
is
RETRIEVE,
the primary operation in
shown below.
It is
shown
and request is to
be
form a transaction. The
we
this thesis, their
are able to
importance
in chapter four.
The INSERT request The
to
through these transactions that
query and modify the database. These are very important to will be
ABDL. Each
used to specify the part of the database that
more requests may be grouped together
five operations will be
five primary database
qualification of an
INSERT
is
used to add a
request
is
being inserted. For example, the following
a
list
new
record into an existing database.
of attribute-value pairs and record body
INSERT request
INSERT(,,) will insert a record into the
USCars
file for the
Make Ford
with a
Model Tempo. This
record does not contain a record body.
The
UPDATE
request
parts of the qualification of the
modifier.
The query
modifier specifies following
specifies
how
is
used to modify records of a database. There are two
UPDATE
request.
The two
parts are the query
which records of the database are
to
be modified.
the records being updated are to be modified.
UPDATE request
28
and the
And
the
For example, the
UPDATE (FILE=USCars)(MODELYEAR=90) will
modify
In the
all
of the records of the USCars
above request, the (FILE=USCars)
file
by changing
the query and
is
all
model years
the
MODEL YEAR=90)
(
to 90.
the
is
modifier.
Another example for when you only want a specific part of your database
updated
shown below.
is
UPDATE((FILE=USCars)and(MAKE=AMC))(MAKE=Chrysler) This example will change Chrysler.
The query
all
The
DELETE
qualification of a
USCars of make, AMC,
to replace
((FILE=USCars)and(MAKE=AMC)), note
is
parenthesis, and the modifier
The
the records in
is
AMC with
the placement of
(MAKE=Chrysler).
is
used to remove one or more records from the the database.
DELETE is
a query. For example, the following request
DELETE((FILE=USCars)and(MAKE=Edsel)) will delete all records
The
whose make
RETRIEVE
is
request
Edsel in the USCars
file.
used to access records of the database,
is
qualification of a retrieve consist of a query, a target-list, and a by-clause.
query specifies which records are to be retrieved. attributes
whose
The
target-list
be used to group records. The following
RETRIEVE
Again the
consists of a
The optional
attribute values are to be output to the user.
the
list
by-claiise
of
may
request
RETRIEVE((FILE=USCars)and(MAKE=Chrysler))(MODEL) will output to the user the
of
Chrysler.
In
the
and(MAKE=Chrysler)), Here
is
a
RETRIEVE
model names of above
the target-list
all
the records in the
example
the
query
was (MODEL),and
USCars was
file
with a
make
((FILE=USCars)
the by-clause
was not
used.
request using the by-clause.
RETRIEVE(FILE=USCars)(MAKE,MODEL,MODELYEAR)BYMAKE
29
This example will
list
the
make, model, modelyear of
all
the records in
USCars by
their
make.
The
last
common
by a
request
is
the
attribute-value.
retrieve requests with a
RETRIEVE
COMMON
.
It is
used to merge two
This request can be considered
common
a transaction of
files
two
clause in between that are processed serially in the
following general template.
RETRIEVE(query-1)(target-list-1)
COMMON(artr ibute-1 ,attri bute-2) RETRIEVE(query-2)(target-list-2)
The
Common
numbered according
attributes are
example, The following
to their respective
RETRIEVE.
For
RETRIEVE-COMMON request
RETRIEVE((FILE=USCars))(MAKE,MODEL)
COMMON(MODELYEAR,MODELYEAR) RETRIEVE((FILE=GERMANCars))(MAKE,MODEL) will find all records in the
return a
list
RETRIEVE
USCars and GERMANCars with
MAKE
of the
requests are the
MODEL.
and
same but
the
same
MODELYEAR and
In this case, the target lists of the
that is not required.
These five database operations are simple, yet powerful enough
They
two
to be complete.
are complete in the sense that typical storage, retrieval and update
of data can
easily be accomplished.
B.
THE SOCKET INTERFACE 1.
Socket Interface between
The Socket integration
interface
of three
was
separate
MBDS and GLAD written by LT.
programming
30
Hogan
tasks,
in
[Ref.
three
11].
It
different
required the
programming
environments. The
first
which would allow the
task
was
GLAD
to
implement a "server" version of the
system to remotely interact with
MBDS
MBDS. The
involved implementing a separate socket interface written in Microsoft personal Computer using
windows could connect
FIGURE
the
Window's socket
3.5
MBDS. The
MBDS/GLAD
Glad Environment.
to the
to
last task
system
second task
C
was
that the
to connect
Interface
Figure 3.5 shows an overview of the
MBDS/GLAD interface. a.
The
MBDS Socket Interface
The
MBDS
Socket Interface establishes a communication link via an Ethernet
network from the backend, compatible PC.
Hogan chose front.
To enhance
to use
As shown
in this case the ISI
in
minicomputer to the front end, an
the reliability of the system and to aid in debugging,
IBM LT.
separate sending and receiving sockets on both the backend and the
Figure 3.5,
all
the queries
31
from
GLAD
are sent via
DDE, dynamic
by messages
data exchange,
through
its
sending socket to
GLAD
to the
MBDS's
receiving socket.
and error messages are sent through interfaces' receiving socket,
To portion of
activate the
MBDS. The
following top-level
TI
socket interface, which transmits them
MBDS's
and are then sent via
MBDS is
the reverse,
all
MBDS
GLAD
sending socket to the
data
socket
DDE messages to GLAD.
socket interface, they created a Test Interface, TI,
the user- interface for
menu upon
On
starting
MBDS
and presents the user with the
MBDS.
The Multi-Lingual/Multi-Backend Database System Select
an operation:
(a)
-
Execute the attribute-based/ABDL interface
(r)
-
Execute the relational/SQL interface
(h)
-
Execute the hierarchical/ DL/I interface
(n)
-
Execute the
(f)
-
network/CODASYL interface
Execute the functional/DAPLEX interface
(g)
-
Execute the object-oriented/GLAD interface
(x)
-
Exit to the operating system
Select->
At the present time,
a user
must
first
log onto the ISI minicomputer and start the
Multi-Lingual/Multi-Backend Database System. To
initiate
system, a user selects operation (g) which sets up the
be done prior to attempting to open any
PC.
A future
from within
enhancement
will
socket interface. This must
databases from the
be able to place the
MBDS
GLAD
GLAD
in the server
system on the
mode
directly
GLAD.
The receiving socket
MBDS
MBDS
MBDS
an interface with the
system enters
its
server
is set
up
first.
Then
the sending socket
mode, awaiting messages from
32
is
created and the
GLAD. Messages
are
sent over the network length, storage
of any message
MBDS. The
is
by sending the length of the message. Based on
this
dynamically allocated for the incoming message. The
is
the
message
three are
type. Presently, three types of
message
first
three bytes
messages are supported by
open database, query database, and terminate session.
improper or invalid message
is
received, an appropriate error
message
is
If
an
back to
sent
GLAD. The open database option allows
An example
of an open database message
GLAD to initiate an MBDS
database for use.
is:
010CARS The 010 the
the code used to signify that this is an "open database"
is
name of the database
to
be opened. After
all
message and
is
MBDS
system. If
unable to open and load the database properly, an appropriate error message
sent over the network to
MBDS
is
the records have been loaded, the user
and database IDs are broadcast to the 12 processes which make up the
MBDS
CARS
GLAD.
If
MBDS
successful, and the database
is
is
is
loaded then
waits to process other incoming messages.
The query database option allows previously opened
MBDS database.
Below
the is
GLAD user access to the data
in
any
an example of a "query database" message.
020CARS@[RETRIEVE((FILE=USCars)and(MAKE=Dodge))(MODEL)] The 020 symbol
is
is
the code used to signify that this
a query database message.
used to delimit the end of the database name, which
CARS. Anything the
is
following the
"@"
sign
is
in the
the actual query itself.
An "@"
above query
The query
is
is
sent to
Request Preparation which handles the parsing and execution of the query. After
MBDS
has processed the query, the results are gathered and translated to the
data format, which consists of an return and line feed
(CR-LF)
"&" character following each
at the
end of each record.
33
MBDS
attribute,
uses an
GLAD's
and carriage
"@" symbol
rather than the the socket in
CR-LF
at the
end of each record
saves the results in a text
file,
the
GLAD side, the GLAD's socket interface
and replaces the "@" symbols with CR-LFs.
on the length of the query
restriction
On
one continuous stream.
segment. These segments are then transmitted back to that all
next message from
GLAD.
MBDS. The
this
is
sent
placed
GLAD,
at the
menu, allowing
it
is
end of the
is
final
followed by a special
transmitted.
leaves the server mode, closes
the user to restart a
it
MBDS awaits the
GLAD wishes to close the sockets
when
message length of zero
terminate session message,
to the top-level
is
query results have been transmitted, and
The Terminate Session option interface to
MBDS has a
result responses. If a response is too large,
broken up into segments and an "end of results" marker
message indicating
through
in order to transmit the results
new
When MBDS its
sockets,
receives
and returns
MBDS
session or select another
option. b.
The Glad Socket Interface
GLAD with
MBDS
in the
to
WM_DDE_REQUEST
referenced by an atom that
is
MBDS,
the
first
GLAD
the
side, all
of
"qresults.fil"
record returned by text file.
The socket
messages
is
passed
in
it is
done on the
MBDS
protocol to sends messages
interface receives these
which
in the
message length then the message
When MBDS named
Dynamic Data Exchange
request to the socket interface.
form of
request
uses Window's
There
is
is
then sent
no error checking on
side.
returns the results from a query, they are stored in a text file
on the PC. As mentioned above, the "@" symbol
MBDS
Each record
GLAD's
the string containing
message. The message
itself.
messages
is
is
replaced by a
CR-LF combination
stored on a different line in the
34
GLAD
at the
end of each
prior to storing
data format.
it
in the
When
all
the results of the query are gathered in the
file,
indicate that the data has been received. [Ref. 12]
35
a
WM_DDE_DATA message
is
sent to
IMPLEMENTATION
IV.
In this chapter,
PC
on a front-end
Language
we
will demonstrate the ability to use a
and link
for Database
modifications
made
it
to a
MBDS
to the existing
GLAD,
it.
will discuss the Graphics
We
some of
will discuss
the
and what new classes were added. Finally,
sample session of GLAD with a sample database.
we
will present a
A.
GRAPHICS LANGUAGE FOR DATABASE 1.
We
backend.
(GLAD), and why we used
Graphics Language Interface
Background The Basis of
interface
PC
on a
this thesis
to a
MBDS
interaction tool
for developing
was needed
to explore the possibilities of providing a graphical
GLAD
backend.
Thomas
supervised by Professor C.
CA. The reason
was
Wu
GLAD
at the
is
an ongoing project developed and
Naval Postgraduate School
in
Monterey,
stems from the realization that an end-user visual
for the database systems.
Glad
will provide the end-user
,
regardless of the type of database system (relational, network, hierarchical), with a
coherent interface.
This will allow the user to visually interact with the system for data
manipulation and program development.
implemented with data to store
2.
The current
GLAD
prototype
definition, data manipulation, on-line help system,
system
and the
is
ability
and manipulate grap hie images as a part of a database.
Hardware and Software requirements In chapter two, the fundamentals of object-oriented
discussed.
GLAD
MS-Windows
was developed using
version 2.1
.
the
programming and Actor were
Actor programming language under
Using Actor allowed for rapid prototyping of the
36
GLAD
system. For most programming languages,
This
basics.
is
takes a great deal of time to learn even the
it
not the case of Actor, Actor allows the programmer to create simple
programs within a matter of days. The complexity of the programs grows rapidly. The
was not
goal of this thesis
to build a complete system,
demonstrate the feasibility of implementing our goals. flexibility to quickly test interface
but a system that would
Actor gives the programmer the
design alternatives and
make changes
to the designs
See [Ref. 12,13,14] for a more detailed discussion of the advantages of using
rapidly.
Actor to implement
The following
GLAD
GLAD. prototype system as
it
was implemented
for this thesis requires the
:
•
IBM
•
Minimum
•
Hard disk
•
Graphics display and adapter
•
Mouse
•
Microsoft
Windows
•
MS-DOS
version 2.0 or higher
compatible computer (80286 or better)
The network used
of
640K
of
memory
(one to four expanded recommended)
(EGA
or better
recommended)
(or other pointing device)
version 2.03 or higher
for this thesis
was
the Ethernet
computer network and
it
requires:
•
Excelan
EXOS 205T
•
Excelan
LAN Workplace Network
Software for
PC DOS TCP/IP Transport
LAN Workplace Network
Software for
PC DOS
Model 4
Intelligent Ethernet Controller
Board
System •
Excelan
Application Program Interface
37
Socket Library
The Microsoft Windows environment and intensive, so the
of the
sufficient for both
But for the prototype system, the Zenith
development and implementation.
MODIFICATIONS One
at
GLAD are very CPU and Memory
amount of random access memory, hard disk access time and the speed
CPU determines the user response times.
248 was
B.
that of
of the great advantages in using
GLAD under the Actor environment is the ease
which a programmer can modify already existing programs. This modularity allows
changes to be made without having to change existing methods and does not even need to 1.
know
most cases, one
anything about other methods.
Resource File
The only change required format for the in
in
in the
new QueryWindow
Appendix A.
A sample
QueryGlad
of the
class.
ACTOR.RC
A
complete
file
was
listing
the insertion of the
of
ACTOR.RC
ACTOR.RC that was modified
is listed
MENU
BEGIN
MENUITEM POPUP
"&Send Query ",21
"&Edit"
BEGIN
MENUITEM
"Cu&tNtShift+Del",
EDIT_CUT
MENUITEM
"&Copy\tCtrl+Ins",
EDIT.COPY
MENUITEM
"&Paste\tShift+Ins",
MENUITEM
"C&lear\tDel",
EDIT_PASTE
EDIT_CLEAR
MENUITEM SEPARATOR MENUITEM
"Select
&AlNCtrl+A", EDIT.SELALL
END
38
is
below.
menu
contained
MENUTTEM
"&Describe",12
POPUP "Q&uery" BEGIN
MENUTTEM
"Alnscrt",
MENUTTEM
"&Update", 24
MENUTTEM
"&Delete", 25
22
MENUTTEM SEPARATOR MENUTTEM
"&Retrieve", 23
MENUITEM
"Retrieve
&Common", 26
END POPUP "&Templates" BEGIN M
MENUTTEM
"&Insert...
MENUITEM
"&Update...", 34
MENUITEM
"&Delete...", 35
,
32
MENUITEM SEPARATOR MENUITEM
"&Retrieve...", 33
MENUITEM
"Retrieve
& Common...",
36
END MENUTTEM "&QUTT, 11 MENUITEM
"\aFl Help",
lO.Help
END This
is
made
the
the
code required
RC
file
to set
up the QueryWindow class menu. After
was compiled,
this
produced a new
changes.
39
ACTOR.EXE
all
changes were
file
with
all
the
DMWindow Class
2.
The Data Manipulation Window database schema and objects
Since
data.
For
this thesis, the
addition of two methods.
had
to
is
is
based on an object-relationship model,
only modifications to the
They were Query
MBDS
interface to allow queries of the
QueryWindow
GLAD
of the database schema are shown as rectangular boxes in the
(entities)
DMWindow.
its
gives the user the ability to manipulate the
a descendent of
is
and returnQuery.
created in a class called
EditWindow
selected in the
is
class
and not
DMWindow,
DMWindow
Class were the
The window
for the
Query Window. Since
DMWindow
The Query method
be a connection to pass information.
QueryWindow when Query
DMWindow
class,
there
initiates the call to
The Query
see figure 4.1.
initiate QueryWindow
/ Data Manipulation: MBDS First Describe Expand ListMembers Change Query ShowConnection Quit
Employee
E mp 1 o y e r
Figure 4.1
method from
creates a
DMWindow
MBDS.
Initiate
new window that
called
QueryWindow
The rerumQuery
is
a
Fl Help
Company
QueryWindow from DMWindow
QueryWindow and will
method
passes pieces of information
need to properly access the records of the
that
QueryWindow
:o
calls to use
some of
the
DMWindow.
methods already
built in
record has been
INSERTED, UPDATED,
This method or
is
DELETED.
The code
reusability of previously written code.
called
for
from QueryWindow This
is
after a
an example of the
DMWindow.cls
is
listed in
Appendix B.
C.
IMPROVEMENTS 1.
QueryWindow
Class
The QueryWindow
class gives the user a
send Queries, see figure 4.2. At
backend
MBDS
system, in the
this time,
ABDL
it
Window
in
which they
After the query has been sent the results
format.
Describe
Edit
Figure 4.2
are then displayed in the
One of a
SQL
the future
Query
np
query language to the
will be the
Templates
flUIT
QueryWindow
Browse Window, which
improvements
create and
has been implemented to send queries to the
gyl^jfiClad to MBDS Queries OF: Employee Send Query
call,
will be discussed later in this chapter.
development of a
MBDS. While
in the
41
GLAD query language,
QueryWindow,
and
a user can select the
type of query they desire by selecting the
This causes a pop-up
menu
to appear
five primary operations allowed
by
Query
which shows
five options.
remember about more
the syntax
The Describe option
QueryWindow
use the for
to the
a.
class
After making a selection editable area with the
is
the
same
is in
For a
user.
as
power of an Edit Window,
it is
in the
DMWindow
The Send Query option sends
backend. The Help option gives a
QueryWindow. The next
QueryWindow
The user
Templates option for whichever query he
the user the full
the attributes of the Selected Object. the
Common.
and decreases the amount of input required by the
The Edit option gives
corrections.
five options are the
This greatiy reduces the amount an individual has to
detailed template, the user can select the
desires.
The
QueryWindow's
will be placed in the
correct format for the query.
QueryWindow menu.
ABDL as discussed in the previous chapter.
can Insert, Delete, Update, Retrieve, or Retrieve
one a user friendly template
option in the
little
class,
the query
to
it
presents
formed
in
how
to
explanation of
sections will discuss each of these in detail.
make
The code
Appendix C.
Edit This
menu
option,
when
selected, gives the user a
pop-up menu, see figure
Glad to MBDS Queries OF: Enpluyee Send Query
Edit
Describe
Query
Shift->Del Cntl->lns SJiift-Mns
Cut Copy Paste
Templates
flUIT
F1
Help
Select nil
Figure 4.3
QueryWindow
42
Edit option selected
4.3.
It
allows the user to manipulate the query they
to edit
any errors quickly and
throughout Windows,
menu under •
•
•
b.
Cut
-
Since these are the standard edit functions used
any learning
is
required to use them.
From
it
allows the user to remove the high-lighted text from the
the pop-up
window and
on the Clipboard.
Copy - allows window and it Paste
-
insert
it
the user to is
make
a
copy of the high-lighted
text
from the
placed on the Clipboard.
allows the user to take what has been placed on the Clipboard and into the
Select All
-
Query Window.
allows the user to high-light
all
the text in the
QueryWindow.
Query This
This
written. This allows the user
Edit, the options available are:
put
•
little if
easily.
may have
Query
menu
option,
when
selected, gives the user a
pop-up menu, see figure
4.4.
option gives the user five options; Insert, Delete, Update, Retrieve, or
Glad to MBDS Queries OF: Employee Send Query
Edit
Describe
Quern
Templates
flUIT
Insert Update Delete
Retrieve Retrieue Common
Figure 4.4
Query option pop-up menu
43
lelp
Retrieve
Common.
QueryWindow's
After selecting one a user friendly template will be placed in the
editable area with the correct format for the query.
Figure 4.5 show a
sample of the results of selecting the Delete option. This greatly reduces the amount an individual has to
remember about
the syntax and decreases the
amount of input required
Figure 4.5 Sample Query Window after the Delete option of Query is
by the
user.
selected
The message code 020 and
well as the selected-object, in this case to
fill
in is the specifics
type in
it
the file that is is
open
is
automatically filled in as
Employee. The only thing
that the user
of the qualification of the transactions. For example, he could
NAME=Hogan. [DELETE((TEMP=Employee) and
(
Query
options give the user similar
•
Insert
-
•
Update
All five of
NAME = Hogan))] templates
020FIRST@[INSERT(,< -
needs
>)]
020FIRST@[UPDATE((TEMP=Employee)and( =
44
))
< =
>)]
020FIRST@ pELETE((TEMP=Employee) and ( =
•
Delete
•
Retrieve
-020FIRST@[RETRIEVE(TEMP=Employee)(
•
Retrieve
Common 020FIRST@[RETRIEVE(TEMP=Employee)(
-
,
))]
,
)]
-
COMMON(
,
,
,
)]
)
[RETRIEVE(TEMP= )(,,)] These allow the user front-end c.
to
do any type of data manipulation on the records from the
PC more easily than
on the backend system as they
a user can
Templates
Every language has constructs
ABDL
exist today.
language
will display a
no
is
more
different.
that control the execution of a
The Template option
,
detailed template for each of the five
program.
when
see figure 4.6,
ABDL
operations.
The
selected
These are
iBMPara
i iiuaimnifl
Glad to MBDS Queries OF: Employee Send Query
Edit
Describe
Query
lemplates
QUIT
Insert Update Delete
Retrieve ... Retrieue Common
Figure 4.6 The Template options of Query Window
displayed in a separate
window above
user while they type in their query.
Template.
A
further
enhancement
the
QueryWindow
so they can be visible for the
Figure 4.7 shows an example of the Delete will allow the user to
45
copy and paste
directly
between the Template five
Window and QueryWindow. There
is
a template for each of the
ABDL operations. Fornat for an DELETE Query |dbNaneG[ DELETE ((TEHP-selObj) and (flttrl -
jones))
]
Figure 4.7 Template
d.
Window
for Delete
Describe
The Describe option
calls a
to allow the user to see the structure
presently
working on.
Figure
selected-object
and the
SALARY,
PHONE.
and
the
and the 4.8
in
DMWindow
This
is
shows an example where Employee
This provides the user with
more
class.
Combining
useful
attributes for the selected-object that they are
Window shows Employee's
formulate the query correctly.
QueryWindow, and
method back
four attributes all
is
the
NAME, AGE,
the information
needed to
the templates for each query inserted in the
detailed templates accessed through the
46
Templates option,
a user has a complete picture of what he needs for each query. All three
windows remain
visible as long as the user needs them.
Glad to MBDS Queries OF: Enployee £end Query Edit Describe Query Ienplates
QUIT F1 Help
_
STRUCTUKE OF: Enployee
Nanc
I
String
AS*
I
Int
Salary
z
Int
1
String
Phone
Figure 4.8 The Describe option of
e.
Send Query The Send Query option
and sends
it
accomplished
to the
in
takes the query that
backend, see figure 4.9.
GLAD.
error occur, an error
box
MBDS
..."
see figure 4.10.
will
results
is
this
is
displayed in the
time there
done by the
is
After the query let
the user
is
A
know
of the query will be displayed
figure 4.11.
47
sent an
side;
should an
user can then just
"Awaiting Results
that their
in the
QueryWindow
no error checking
MBDS
appear with a description of the error.
dialog box will appear to
The
At
All the error checking
correct his query and resend the message.
from
QueryWindow
query was
sent,
Browser Window, see
Figure 4.9 The Send Query option of QueryWindow
3
i;
Clad to MBDS Queries OF: Employee
Send Query
Edit
Describe
Query
lemplates
QUIT F1 Help
02BFIRST eriNSERTKTEMP.EP>Dlouee>.., ,,,)] f
>
Hew Inserted record For Nardi
Figure 4.11 The Results displayed in the Browse Window
f.
Help This option
at
present only displays a dialog box that gives a brief explanation
of the use of the Query Window. In the future, this will be connected to the on-line help that
it
was done by
a previous student in the future.
Figure 4.12 shows the Help option as
exists at the present time.
g.
Quit
The Quit option allows
windows
that
were created during
the user to close the
its
use. This option returns us
where we originally called QueryWindow.
D.
SAMPLE SESSION 1.
Starting
GLAD
QueryWindow and
to receiving Results
49
back
to the
all
the other
DMWindow
Glad to MBDS Queries OF: Enployee
Send Query
Edit
Describe
Query
Ienplates
QUIT
This program demonstrates simple fiBDL queries to a MBDS back-end For a example of each type of query, look under the template's menu item and select the specific query. fOK
Figure 4.12 The
The following the
QueryWindow
is
a
HELP option of Query Window
sample session of
GLAD
through to the point where a query has been sent to a.
GLAD The
MBDS
MBDS
database and
window
will be
beginning and walk a user
and the results have returned.
Top-Level Window
GLAD Top-Level Window,
open or remove a database. Since
mouse
this level will
at the
GLAD Top-Level Window is the starting point for all
4.13 shows the
the use of a
with a sample
extension. At each level of interaction, the interface
This demonstration will enter
described.
GLAD
is
GLAD
from
this
window
be discussed
a user can create, modify,
was developed under
required for most operations. Each of the briefly.
50
transactions. Figure
the Actor environment,
menu
options available
at
Create
Modify
Open
Remove
Figure 4.13
The options
Allows the user
Create
•
Modify
•
Open
•
Remove Allows
-
-
Allows the user
session,
we
new
GLAD database.
modify an existing database schema.
open a database for display and modification.
the user to delete an existing database
Open menu
select the
In this dialog
GLAD Top-Level Window
GLAD Top-Level Window are:
to
to
word Open and double clicking
figure 4.14.
Fl Help
to create a
Allows the user
-
-
To begin our the
available under
•
3EE
Quit
box
is
the left
option.
mouse
By
from the system.
placing the
button, a dialog
box
mouse arrow on is
displayed, see
a listing of all the databases that exist in the system.
Here, instead of a menu, the user's options are displayed as buttons to the right of the database
listing.
allows the user to options.
The
Should there be more databases than can
move up and down
first is to
To open
fit
in the
window,
a scroll bar
a specific database, a user has
two
point to the desired database and, as before, double click the
left
the
list.
51
mouse
Or
button.
button that reads
the user can point at the database's
OPEN, and
click
user to do the same operation in
environment.
It
makes
it
once
many
name, click once, then point to the
This type of feature, which allows the
there.
GLAD
different ways, is used throughout the
easy for the experienced user as well as the beginner to quickly
navigate themselves through the system.
Crratt
Modify
Rtnovi
Optn
S3
Fl Help
Quit
SLAD Databases AH1S Heliooprcr OB Leisure Planning MUDS Sales NPS Lab Equipment Pine Ualley Furnitur* C Test Connection DB University Database
It.
[7
C
OPEN
)
C
ABOUT
)
(
HELP
)
(
CANCEL
)
Figure 4.14 Database Selection Dialog Box
For white
letters
this session
and click the
left
that
to
the
mouse button
GLAD
When and
a
(DMWindow)
is
once.
MBDS
First.
First is in the
showing
that the item
to select an item point the
MBDS
All the
database
is
displays
the
GLAD
After data
for this database using a locally stored database
52
it
MBDS
opened, the socket interface must be
both sockets are set up,
GLAD
mouse cursor on
databases have the prefix
in this case the First database.
opened, then
MBDS
Notice that
(this is called high-lighted)
MBDS. Once
open the database, database
MBDS
As mentioned above,
prior to their name.
MBDS
will select
on a black background,
has been selected.
up between
we
set
sends a request to
MBDS
acknowledges
manipulation
schema
file.
window
A
further
improvement sent
from b.
will not require the database
schema
to
be stored locally but
it
would be
MBDS. Data Manipulation Window (DMWindow)
DMWindow
The
displays
rectangular boxes with the object's
the
name
objects
of the database,
in the center
represented
as
of each box. Figure 4.15 shows an
<>^ Create
Modify
Remove
Open
Quit
Fl Help
MBDS Fir II Change Query
Describe Expand Littrtontxri ShowConnectlon Quit Employee
Fl Help
Employer
Figure 4.15 The Data Manipulation
example of
DMWindow
a
DMWindow
with
Company
Window (DMWindow)
our First database.
The menu options
for
are:
•
Describe
-
Allows the user to display the attributes of the selected objects. Figure 4.16 shows an example with Employee as the selected object.
•
Expand
-
•
ListMembers
Allows the user
to display sub-classes
of the selected object.
Allows the user to display and modify the object's data using an all-at-once(Browse) or one member(Display) at a time. Figure 4.17 shows an example of both. The BROWSE window shows all the data for Employee while the
•
the
Change
-
DISPLAY -
shows one record,
not implemented at this time.
53
in this case, Jones.
Query - Allows
•
When
it
List
up the
calls
ShowConnection
•
c.
selected
the user to query
-
MBDS databases using ABDL queries.
QueryWindow, see
later section for
more
details.
not implemented at this time.
Member Window
This window displays
all
the records of the database object.
Here again the
of the database which do not
scroll bars enable the user to access portions
fit
in the
^n^ Create
Modify
Open
Quit
ftenove
|
Fl Help
Dora Manipulation: MBDS First Desoribe Expand List Members Change Query Fl Help ShowConnection Quit
mnrnmnr
c
tt
™
» u ti
M*^
rT re
|
Ewloyer
=
Company STRUCTURE OF: Enployer
Figure 4.16
window. Figure 4.17 shows
Hane
i
String
Age
:
Int
Salary
:
Int
Phone
:
String
DMWindow's DESCRIBE the records of the
Employee
an individual record in detail, he can select the record. This will call the Display
d.
Display
all
-
wants
to
view
option after selecting that specific
One Window which,
as described above,
the information contained in a specific record.
One Window,
Add
If a user
One Window
enables a user to see
•
More
object.
One Window.
Figure 4.17 also shows a Display
In the Display
option on Employee
the user has the following options:
add a new record
to the selected object.
54
Delete
-
Modify
•
remove -
this selected record.
change the data
in this selected record.
GLAD Create
Modify
Remove
Open
QTft Fl Help
Quit
Data Manipulation: MBDS First ange
Add Delete Modify Prev Next GoTo All Quit Fl Help
More V*»»
BROWSE: Employee Modify Quit Fl Help
*f* G*i*r" 1B0Q00 35000 65080 36000 25000 99060 23000 12000 66000 29000 92000 130000 29000 77000 34000 78000
Name Jones Aae_ 65
Salary 130000
Jones IWillians
65 34 46 41 42
|Sr*ith
[Bruner ISpolarich
Phone xllll
Phage
xllll X3691 X7683 X5109 X6734 ll
Figure 4.17
GLAD Browse and
•
Prev
-
move one
record up in the
•
Next
-
move one
record
•
Goto
-
•
All
Opens
e.
-
Allows the user a
down
to
Display
Rifiif
Windows
list.
in the list.
move
to the first, last, or Ith record.
BROWSE or List Member Window.
QueryWindow If the
user desires to query the
option in the data manipulation
MBDS
database, they
would
window menu. Figure 4.18 shows
window
results of the selection.
After selecting Query, the query
more
on each of the menu options, please refer
detailed discussion
on QueryWindow. For
this session,
we
will skip over
55
some of
select the
Query
the selection and the is
displayed.
For a
to the previous section
the details.
The next
step
is
What we want
to create our query.
to
do
selected object, Employee. After selecting the
is insert
Query
new
a
we
option of QueryWindow,
NAME, AGE, SALARY,
the details of the record for Nardi,
record for Nardi in the
and
PHONE.
If
fill
in
we had
H>Tfr Modify
Create
Renove
Open
Quit
Fl Help
Data Manipulation: M6DS Describe Expend ListHeMbers Change | ShowConnection Quit :
111
,
Glad to Send Query
I1BDS
Fl Help
Queries OF: Employee
Query
describe
Edit
QUIT
lenplates
F1 Help
a Figure 4.18 Initiating a Query from
forgotten the attributes of Employee,
we
could select the Describe option and they would
be displayed exactly as they are displayed detailed template for the insert query
menu of
the
is
DMWindow.
in the
needed,
we
we
are ready to send
Send Query,
sent to the
notice that
MBDS
is
to the backend,
high-lighted.
via the socket interfaces.
query has been sent to query have an error
it
it
in
MBDS
it,
a
and
that
message from
user can then edit the query in the
If
by chance, a more
could select Insert from the pop-up
Now
Templates option of QueryWindow.
see figure 4.19,
option
is
DMWindow
that
we have
MBDS. To do
After
we
select
the query correct, this
we
Send Query,
select the
the
query
Figure 4.20 shows the message that the
GLAD
is
MBDS
will tell the user the type of error.
QueryWindow
56
waiting for the results.
to correct
Should the
The
any mistakes and then resend
]
When MBDS
the query.
where they
has completed the query,
will send the results
it
will be displayed for the user. Figure 4.21
shows the
results
back to
of our insertion
GLAD Create
Modify
Open
Renove
GLAD
WTft Fl Help
Quit
Data Manipulation: MBDS First
Describe
Expand
ShovConnection
ListMenbers
Change
Query
Quit
Fl Help
Glad to MBDS Queries OF: Enployee Send Query
Edit
Describe
Query
Templates
QUIT F1 Help
B28FIRST@[IKSERT(.. f , > ,,)]
a
More Modify £*MEHogan Jones Stroud Walpole Synpion Nardi Turner Wu
Clark
BMaMMta
BROWSE: Employee Quit
Aae Salary 30 100000 28 35000 27 65000 36000 32 26 25000 99000 27 23000 25 34 12000 45000 56
Help >
\±-
Fl Help
Phage x2345 X1234 x3578 X1987 X4589 x7391 X4719 X1943 xl067
a^a^MHUb
Figure 4.21 The Results of the Query displayed
58
in the
BROWSE Window
CONCLUSIONS
V.
A.
A REVIEW OF THE RESEARCH The
GLAD on the user
at
goal of the research conducted in this thesis was to provide an extension to that
would provide the user with an
MBDS
ability to access the database
The QueryWindow allows
any level of experience could use immediately.
ABDL
window
This
queries.
modifications will allow any type of queries,
B.
Query
backend. The graphical interface provides an user friendly system that any
user to use any of the five
it is
ABDL
some minor
also with
SQL or GLAD's own
the
query language when
developed.
FUTURE ENHANCEMENTS Since the
GLAD
the present system
•
system
is still
many
evolving, there are
which include, but are certainly not
possible enhancements to
limited, to the following:
Improved Socket Interface - While a socket interface presently exists, there is room for improvement. We would like the socket interface to be an integral part of the
GLAD
improvement
is
system instead of
its
present configuration. Another
remotely Also needed is the
to allow the user to
the individual front-ends.
GLAD,
once opened from
initiate the
MBDS system from MBDS system
ability for the
to send the Database's
schema
to the front-end
instead of having the front-end constantly storing them.
•
Expand
the
Query Language
Ability
-
With
the Navy's recent
push towards
the "paperless ship" concept, the need for the ability to generate and process the multitude of Database
imperative. First there
is
Models required a need for a
to maintain a large
GLAD query language
defined databases. Secondly, the development of a
•
Digital
Manuals
-
One of the major
advantage of computers'
for
SQL query
GLAD
ability.
goals of the "paperless ship"
ability to store, access
is to
and assimilate data.
take
An
GLAD should be a hypertext ability. This would greatly reduce amount, weight and storage area required by the vast number of technical
addition to the
navy becomes
59
and maintenance manuals required by each man-hours required to access the necessary
ship.
would
It
also decrease the
data.
- The Navy needs to develop under a user friendly which every user can use. GLAD and MS-Windows provide such an environment. The package should handle word processing, AMI, databases, GLAD, and graphics, PCPaint.
Integrated Package
•
interface system
SNAP II Backend Prototype
•
-
The present system shows
the ability and
beauty of GLAD as a front-end interface for a backend. Since GLAD was developed on the Zenith 248 computer, it can be used in the Fleet today not ten years from now. The next goal should be linking GLAD to a SNAP II
mini-computer and develop querying
ability to the data already out in the
fleet.
C.
DISCUSSION AND BENEFITS OF THE RESEARCH
GLAD user.
offers user friendly environment for the novice as well as the experienced
The Navy has thousands of Zenith 248s
The
expertise varies from one end of the spectrum to the other.
no background what-so-ever train these individuals to
in
computers.
perform specific
different system for each
vast majority have had
takes a considerable
It
tasks.
major operation,
and a user group whose
in service,
Right
now
amount of time
to
they are required to learn a
one for databases, one for word processing
and another for supply requisitions.
The with
GLAD
and
many major
MS-Window
environment gives the user one over
features carrying over
from one application
package has great potential for both the military and
package
that has led to the popularity of the
it
all
is
It is
just such a
Macintosh computers by Apple. The
Replacing
integrated for the user!
computers with Macintosh
This integrated
to another.
civilian sector.
computers have as much or more power, and the software
Macintosh has
system to learn
all
not the answer.
60
is
as
all
good
as the
the Zenith
IBM
Macintosh but
248s and other
Prof.
Wu
has a
sister project,
ARGOS,
being developed on the Macintosh.
outstanding demonstration of the power of a hypertext feature on a PC.
IBM
computers
Although
is
just beginning to
this sister project
named
we
believe
we have
surpasses
made
an
Hypertext on
match the ease and power of the Macintosh.
ARGOS
is
impressive,
Macintosh computers which are not readily available attempt to mirror the progress
It is
in the
ARGOS
ARGOS. GLAD is
61
it
unfortunately relies on
to the fleet today.
project;
and
in area
GLAD
is
an
of database needs
the solution today and tomorrow.
APPENDIX A. ACTOR .RC RESOURCE FILE The following
listings are the
implementation of this ;
Actor code that was either created or modified for the
thesis.
Resource Script File for Actor version
1
.2
#include "STYLE.h" #include "actor.h" #include "track.h" #include "demos.h" #include "glad.h"
ICON ICON ICON
work Browser FileWindow
ICON
Inspector
browser.ico filewind.ico
inspectico
DATA cube.dat BITMAP actor.bmp
cube Actor gladicon
work.ico
ICON glad.ico ICON sockets. ico
socketicon
GladTopMenu
MENU
BEGIN
MENUITEM MENUITEM MENUITEM MENUITEM MENUITEM MENUITEM END GladTopMenu
"Create",
1
"Modify", 2
"Open",
3
"Remove", 4 "Quit",
6
"SaFlHelp",
5,
HELP
ACCELERATORS
BEGIN VK_F1,5,VIRTKEY VK_DELETE, EDIT_CLEAR, VIRTKEY VKJDELETE, EDIT_CUT, VIRTKEY, SHIFT VK_INSERT, EDIT_COPY, VIRTKEY,
CONTROL
62
VK_INSERT, EDIT.PASTE, VIRTKEY, SHIFT
END QueryGlad
MENU
BEGIN
MENUTTEM
"&Send Query",21
POPUP "&Edit" BEGIN
MENUTTEM "Cu&t\tShift+Dd", EDIT_CUT MENUTTEM "&Copy\iCtrl+Ins", EDTT_COPY MENUTTEM "&Paste\tShift+Ins", EDTT_PASTE MENUTTEM "C&leai\tDel", EDTT_CLEAR MENUTTEM SEPARATOR MENUTTEM "Select &AlI\tCtrl+A", EDTT_SELALL END MENUTTEM
"&Describe",12
POPUP "Q&uery" BEGIN
MENUITEM "&Insert", 22 MENUTTEM "&Update", 24 MENUITEM "&Delete", 25 MENUITEM SEPARATOR MENUITEM "(feRetrieve", 23 MENUTTEM "Retrieve &Common", 26 END POPUP "&Templates" BEGIN
MENUITEM "&Insert...", 32 MENUTTEM "&Update...", 34 MENUTTEM "&Delete...", 35 MENUTTEM SEPARATOR MENUTTEM "&Retrieve...", 33 MENUITEM "Retrieve &Common...", END MENUTTEM "&QUIT", 11 MENUTTEM "\aFl Help",
10,Help
END
63
36
QueryGlad
ACCELERATORS
BEGIN VK_F1, 10,VIRTKEY
VKJNSERT, EDIT_PASTE, VIRTKEY VK_DELETE, EDIT_CUT, VIRTKEY VK.SUBTRACT, EDIT.CUT, VIRTKEY VK_ADD, EDIT_COPY, VIRTKEY VK_LEFT, VK_LEFT, VIRTKEY VKJJP, VK_UP, VIRTKEY VK.RIGHT, VK.RIGHT, VIRTKEY
VK_DOWN, VK_DOWN, VIRTKEY MA "A "A
a",
EDIT.SELALL
s",21 z",
BR_ZOOM
VK_TAB, EDITJTAB, VIRTKEY VK_PRIOR, EDIT_PRIOR, VIRTKEY VK_NEXT, EDIT_NEXT, VIRTKEY
VK_HOME, EDIT_HOME, VIRTKEY VK_END, EDIT.END, VIRTKEY VK_DELETE, EDIT.CUT, VIRTKEY, SHIFT VKJNSERT, EDIT_COPY, VIRTKEY, CONTROL VKJNSERT, EDIT_PASTE, VIRTKEY, SHIFT
END
GladDmlMenu
MENU
BEGIN
MENUITEM MENUITEM
"Describe",
1
"Expand", 2
POPUP "ListMembers" BEGIN
MENUITEM MENUITEM END
"All at Once", 3
"One by One", 4
POPUP "Change" BEGIN
MENUITEM MENUITEM
"Add
data", 5
"Delete data",6
64
MENUTTEM END MENUTTEM MENUTTEM MENUTTEM MENUTTEM END
"Modify
GladDdlMenu
MENU
data", 7
"Query",
8
"ShowConnection", 9 "Quit",
11
"\aFl Help",
10,HELP
BEGIN
MENUTTEM MENUTTEM MENUTTEM MENUTTEM MENUTTEM MENUTTEM MENUTTEM END
"Save",
GladLMMenu
MENU
1
"Define", 2 "Attribute", 3
"Expand", 4 "Delete", 5
7
"Quit",
"VaFl Help",
6,HELP
BEGIN
MENUTTEM MENUTTEM MENUTTEM MENUTTEM END
"More",
GladOMMenu BEGIN
MENU
MENUTTEM MENUTTEM MENUTTEM MENUTTEM MENUTTEM
1
"Modify", 2 "Quit",
4
"\aFl Help",
"Add",
3,HELP
1
"Delete", 2
"Modify", 3 "Prev",
4
"Next", 5
POPUP "GoTo" BEGIN
MENUTTEM MENUTTEM MENUTTEM END MENUTTEM
"First",
6
"Last",
7
"I th",
8
"All", 9
65
MENUITEM MENUITEM END
"Quit", 11
10,HELP
"\aFl Help",
MENU
GladCOMenu
BEGIN
MENUITEM END
"Quit",
1
ABOUT_GLAD DIALOG STYLE WS.DLGFRAME
90,34,122,80 I
WS.POPUP
BEGIN
CTEXT "GLAD Version 0.03", -1, 23,12,72,11, WS_CHILD CTEXT "Naval Postgraduate School", -1, 8,25,105,10, WS_CHILD CTEXT "Dept of Computer Science", -1, 9,37,100,11, WS_CHILD ICON "gladicon",-l,26,50,16,16, WS_CHILD DEFPUSHBUTTON "START", IDOK, 70,58,39,14, WS.CHILD
END DAT AW AIT DIALOG LOADONCALL MOVEABLE DISCARDABLE
12, 18, 98,
74
STYLE WS_DLGFRAME WS.POPUP BEGIN I
CONTROL "socketicon", CONTROL "Awaiting SS_CENTER WS.CHILD, I
-1, "static",
SSJCON WS_CHILD,
Results from
I
13, 20, 16,
MBDS... Please Wait",
26
101, "static",
36, 19, 58, 33
END OPNDBLIST DIALOG LOADONCALL MOVEABLE DISCARDABLE
70, 23,
166, 102
CAPTION "GLAD Databases" STYLE WS_DLGFRAME WS.POPUP BEGIN I
CONTROL "" DB_LB, "listbox", LBS_NOTIFY LBS_SORT LBS_STANDARD WS_BORDER WS_VSCROLL WS_CHILD, 5, 16, 110, 82 CONTROL "OPEN" DEFBUTTON, "button", BS_DEFPUSHBUTTON WS_TABSTOP I
I
I
I
I
I
I
WS_CHILD,
125, 17,33, 13
CONTROL "ABOUT" ABOUT_DB,
WS TABSTOPI
66
"button",
BS_PUSHBUTTON
I
WS.CHILD, 125,41,33,13 CONTROL "HELP" HELP.LB, WS_CHILD,
"button",
BS_PUSHBUTTON WS.TABSTOP I
I
126,62,32,13
CONTROL "CANCEL" WS_CHILD,
2,
"button",
BS_PUSHBUTTON
WS_TABSTOP
I
I
125, 82,
33,13
CONTROL "GLAD
Databases"
-1, "static",
SS_CENTER WS_CHILD, I
17, 4,
83,10
END RMVDBLIST DIALOG LOADONCALL MOVEABLE DISCARDABLE
70, 23,
166, 102
CAPTION "GLAD Databases" STYLE WS.DLGFRAME WS_POPUP BEGIN I
CONTROL "" DB_LB, "listbox", LBS.NOTIFY LBS_SORT LBS_STANDARD WS.BORDER WS_VSCROLL WS.CHILD, 5, 16, 115, 82 CONTROL "REMOVE" DEFBUTTON, "button", BS_DEFPUSHBUTTON I
I
I
I
I
WS_TABSTOP
WS_CHILD,
126, 16,33, 13
CONTROL "CANCEL" WS.CHILD,
I
I
2,
"button",
BS.PUSHBUTTON
WS_TABSTOP
I
I
126,81,
33, 13
CONTROL "ABOUT" ABOUT.DB, WS_TABSTOP
"button",
BS_PUSHBUTTON
I
I
WS_CHILD,
126,39,33, 13
CONTROL
"HELP" HELP_LB,
"button",
BS_PUSHBUTTON WS.TABSTOP I
I
WS_CHILD, 127,61,32, 13
CONTROL "SELECT WS.CHILD,
the
one
to
be
REMOVED"
-1,
"static",
SS_CENTER
I
0, 3,
124, 10
END DEFOBJ DIALOG LOADONCALL MOVEABLE DISCARDABLE 23, 21, 136, 98 CAPTION "OBJECT DEFINITION" STYLE WS_BORDER WS_CAPTION WS_DLGFRAME WS_POPUP BEGIN CONTROL "Enter Object Name:" 0, "static", SS_LEFT WS_CHILD, 8, 5, 74, 10 CONTROL "" OBJ_NAME, "edit", ES_LEFT WS_BORDER WS_TABSTOP WS_CHILD, I
I
I
I
I
67
I
I
II
8, 16, 117,
12
CONTROL
ATOMIC,
"Atomic"
"button",
BS.RADIOBUTTON WS_GROUP I
I
WS_TABSTOP I
WS.CHILD,
25, 44, 40, 12
CONTROL I
"Nested"
NESTED,
"button",
BS_RADIOBUTTON WS_TABSTOP I
WS.CHILD, 70,44,41,12
CONTROL WS_TABSTOP
Level"
"Nesting
LEVEL,
"button",
BS_GROUPBOX
I
I
WS.CHILD,
20, 31, 93,
CONTROL WS.TABSTOP
30
IDOK,
"Accept"
"button",
BS.PUSHBUTTON
I
WS_GROUP
I
I
WS.CHILD,
17,70,42, 14
CONTROL
IDCANCEL,
"Cancel"
BS.PUSHBUTTON
"button",
I
WS.TABSTOP WS.CHILD,
76,71,42, 14
END ATTRIB DIALOG LOADONCALL MOVEABLE DISCARDABLE
11,
18, 208,
216
STYLE WS.DLGFRAME WS.POPUP BEGIN I
CONTROL WS.CHILD,
6,
"Attribute
Name:" DT.CENTER,
"static",
SS.LEFT
I
18,64, 12
CONTROL
"Attribute Type:" 5, "static",
SS.LEFT WS.CHILD,
6,
SS.LEFT WS.CHILD,
6, 90, 86,
I
54, 79,
12
CONTROL
"Length of
field:" 15, "static",
I
10
CONTROL WS.TABSTOP
""
WS.CHILD,
5, 30, 105,
"edit",
ES.LEFT
ATTR.TYPE,
"edit",
ES.LEFT
WS.BORDER
I
I
15
CONTROL WS.TABSTOP
ATTR.NAME,
I
""
WS.BORDER
I
I
I
WS.CHILD,
5, 67,
105, 15
CONTROL
""
ATTR.LENGTH,
"edit",
ES.LEFT
I
WS.BORDER
I
WS.TABSTOP WS.CHILD,
5, 102, 105,
16
CONTROL "" ATTR.LIST, "listbox", LBS.NOTEFY LBS.SORT LBS.STANDARD WS.BORDER WS.VSCROLL WS.CHILD, 5, 126, 106, 82 CONTROL "Add" IDOK, "button", BS.PUSHBUTTON WS.TABSTOP I
I
I
I
I
I
WS.CHILD,
138,
42,44, 14
68
I
I
CONTROL WS_TABSTOP
BS_PUSHBUTTON
"Type List" TYPE.LIST, "button",
BS_PUSHBUTTON
138, 72, 44, 14
CONTROL
138, 102, 44, 15
CONTROL
"Quit"
IDCANCEL,
"button",
BS_PUSHBUTTON
I
I
WS_CHILD,
139, 132,44, 14
CONTROL 5, 86,
I
I
WS.CHILD,
WS_TABSTOP
I
I
WS.CHILD,
WS_TABSTOP
"button",
ATTR_DELETE,
"Delete"
"Attributes for object" 16, "static",
SS_LEFT WS_CHILD, I
29,
8
CONTROL
""
OBJ_NAME,
"edit",
ES_LEFT
WS_TABSTOP
I
I
\VS_CHILD, 118,5,74, 12
END ATTRLIST DIALOG LOADONCALL MOVEABLE DISCARDABLE
11, 18, 122,
122
STYLE WS_DLGFRAME WS_POPUP BEGIN I
LBS.SORT CONTROL "" TYPE_LIST, "listbox", LBS.NOTTFY LBS_STANDARD WS_BORDER WS_VSCROLL WS_CHILD, 7, 6, 105, 74 CONTROL "Accept" IDOK, "button", BS.PUSHBUTTON WS_TABSTOP I
I
I
I
I
I
WS_CHILD,
I
18,
90, 33, 14
CONTROL
"Cancel"
IDCANCEL,
WS_TABSTOP WS_CHELD,
68, 90, 29, 14
END
STRINGTABLE BEGIN IDSNAME,
"Actor"
IDSAPP, "ACTOR.IMA" 1
"Divide by 0"
,
out of bounds"
2,
"Index
5,
"Non-integer index argument to primitive"
is
16,
new primitive" "Out of static memory" "Wrong number of block arguments"
19,
"Break occurred"
7
,
10,
"invalid size sent to
69
"button",
BS_PUSHBUTTON
I
,
20, "Too large for Char conversion"
21 "Wrong number of arguments" 22,
27, 32,
33, 36,
"Wrong argument type to primitive" "Bad range to copyFrom primitive" "Can't convert to Windows short argument" "Long is too large for Int conversion" "Bad range input to munger primitive"
40, "Primitive receiver
is nil"
"<« Syntax error" "<« Premature end of input"
syntaxError, eosError,
sLitError, "Unterminated String literal"
"<« Undefined variable name" "<« Incoreect literal symbol format"
undefError,
litSymError,
curClassError,
"No
" is
ancestError, inheritError,
" is
current class in Compiler" "
not an ancestor of "
not a function in
"<« Improper literal number format" wNameError, "<« No such MS-Windows routine" wSynError, "<« Improper MS-Windows call syntax" litArrayError, "<« Improper literal array syntax" litArrayOvflError, "<« Literal array is too large" defineError, "<« Improper #define format" litRectError, "<« Improper literal rectangle format" infixError, "<« Not a valid infix expression" commentError, "<« Unterminated comment" litNumError,
registerError, "Couldn't register class"
menuError, "Couldn't load menu" wCreateError, "Couldn't create window"
emptyError, "Empty collection" elemNotFndError, "Element not found dosError,
"
reported
rangeError, "Index
undefCharError,
DOS
is
error#
in collection"
"
out of bounds"
"<« Undefined"
ivarsError, "Structs can't have instance variables"
handleError,
"No handle obtained
for object"
wCallArgsError, "Wrong number of args
numTempsError, "Total arguments and
;
Used
for results of checkError
52,
",
File not found"
53,
",
Path not found"
54,
",
No
file
handle available;
all in
in
Windows
locals can't
use"
70
Call"
exceed 15"
55,
",
Access denied"
56,
",
Invalid file handle"
58,
",
Insufficient
65,
",
Invalid drive specification"
150 "Attempted
memory"
to
move
freed object:"
151 "Adding to scavenger
152 "Dynamic 153 "Free
memory
list is
list:"
is full."
corrupted."
154 "Scavenge list is full." 155 "Out of object pointers." 156 "Snapshot write failed." 157 "Snapshot load failed."
158 "Not enough
memory
to run Actor."
159 "Not enough dynamic for
static gc."
160 "Actor Display" 161
"Requires higher
static setting."
162 "Requires higher dynamic setting." 163 "ActoAxAE 1.2"
164 "Windows/Actor stack overflowed
"
165 "Windows/Actor stack underflowed
166 "Actor stack overflowed" 167 "Corrupted object
memory"
168 "Actor symbol table
;
is full"
Miscellaneous Actor system
strings.
DO NOT MODIFY!
300, "Class Definition Error"
301
"
cannot be redefined."
302 "Recompile these classes?" 303 "Delete these classes?" 304 "Class Name Error" 305
"
already exists. Use About Class dialog."
"
exists. Should it be overwritten?" 306 307 "File Conflict" 308 "File Renamed" 309 "Old work has .BAK extension." 310 " source is unavailable."
311
"Class Source File Error"
312 313 314 315 316 317
" file
not found in
"
"Actor Error"
"FileWindow
is
not loaded"
"File Editor: Untitled" "File Edit Error"
"The
file is
too large."
71
"
318, "Discard changes?" 319, "Save text as:"
320, "workmenu" 321, "Actor Workspace" **" 322, "** Recompile classes; remove existing instances
323, "Untitled" 324, "browmenu"
325, "Browser" 326, "/* class comment */" " 327, " class definition */ 328, "debugmenu" 329, "Debugger: 330, "Can't resume!" 331,"classes\\"
332, "workW" 333, "backupW" 334, "EditWindow" 335, "File Error" 336, "FileEditMenu"
337, "File Editor" 338, "Breakpoint"
339,
"
bytes reclaimed."
340,
"
bytes available."
341, "Syntax Error" 342, "Recursive error:" 343, "Actor Error:
"
344, "Not understood:" 345, "Recursive message send failure:" 346,
"
doesn't understand:"
347, "Compilation Error" 348,
"
is
undefined. Should
349, "Undefined
it
become
a global variable?"
Name"
350, "Bytes Free"
351, "Static:" 352,
"
MS-Windows:
353, "Missing
"
BACKUP directory for source."
354, "Write the Image to this
file:"
355, "Load Error" 356, "You must assign LoadFiles before using load()." 357, "Warning!"
"Dynamic memory 359, "Run Application" 358,
360, "Application
361, "Editor:
file
is
getting low."
name:"
"
72
"
"
"
362, "Inspector: "
363, "Browser: 364, "workedit"
365, "Senders"
366, "Implementors" 367, "References" 368, "Global References" 369, "inspmenu"
371,
"Do you really wish to close "MS-Windows function "
372,
"
takes
373,
"
argument(s)."
374,
"
(CLASS)"
370,
375,
;
;
can use
in the
"
this
(OBJECT)"
if
window?"
you want
this label for object
Browser
376, "Stack frames above recompiled method are 377, "You must exit Actor before exiting
378,
;
Dynamic:
"
methods
now
invalid."
Windows"
"
template strings
TEMP_DO,
"
do(receiver, (using(elem)
});"
TEMP_IF, " if cond then stmtList; endif;" TEMP_IFEL, " if cond then stmtList: else
TEMP_BLOCK, TEMP_CASE, "
"
{
using(elem)
select case
cond
stmtList; endif;"
}" is
stmtList;endCase case cond
endSelect;"
TEMP_LOOP,
"
loop while cond begin stmtList; endLoop;"
TEMP_NMETH, 7* comment
*/
Def method(self)
END ACCELERATORS
Actor
BEGIN VKJNSERT, EDIT_PASTE, VIRTKEY VK_DELETE, EDIT_CUT, VIRTKEY VK_SUBTRACT, EDIT_CUT, VIRTKEY VK_ADD, EDIT_COPY, VIRTKEY VK_LEFT, VK_LEFT, VIRTKEY VK_UP, VK_UP, VIRTKEY VK_RIGHT, VK_RIGHT, VIRTKEY
VK_DOWN, VK_DOWN, VIRTKEY "
Aa M
"A
r",
,
EDIT.SELALL
BR_REFORM
73
}" {
is
stmtList;endCase
"A
z",
BR_ZOOM
VK_TAB, EDIT_TAB, VIRTKEY VK.PRIOR, EDIT_PRIOR, VIRTKEY VK.NEXT, EDIT.NEXT, VIRTKEY VK_HOME, EDIT_HOME, VIRTKEY VK_END, EDIT.END, VIRTKEY
VK.DELETE, EDIT_CUT, VIRTKEY, SHIFT VK.INSERT, EDIT_COPY, VIRTKEY, CONTROL VKJNSERT, EDIT.PASTE, VIRTKEY, SHIFT
END ABOUT_BOX DIALOG DISCARDABLE STYLE WS_POPUP WSJDLGFRAME
59, 79, 151, 128
I
BEGIN
CTEXT "ActoAxAE 1.2" -1, 1, 12, 147, 10 CTEXT "Copyright \xA9 1986-1988" -1, 1, 28, 147, 10 CTEXT "The Whitewater Group, Inc." -1, 1, 39, 147, 10 CTEXT "All rights reserved." -1, 1, 50, 147, 10 ICON ICON
"work"
5, 24,
"browser"
98, 13, 17 114, 98, 13, 17
6,
CTEXT "Portions Copyright\xA9 1983-1988", -1, 1, 68, 147, 10 CTEXT "Microsoft Corporation", -1, 1, 79, 147, 10 DEFPUSHBUTTON "&Ok" IDOK, 57, 99, 32, 14, WS.GROUP END INPUT.BOX DIALOG DISCARDABLE 77, 94, 165, 71 STYLE WS.BORDER WS_CAPTION WS_DLGFRAME WS.POPUP BEGIN EDITTEXT FELE_EDIT, 10, 32, 138, 12, WS.BORDER WS.CHILD WS.TABSTOP ES_AUTOHSCROLL LTEXT "", INPUT_MSG, 11, 5, 143, 18, WS.CHILD DEFPUSHBUTTON "&Ok" IDOK, 32, 50, 32, 14, WS.CHILD PUSHBUTTON "&Cancel" IDCANCEL, 99, 50, 32, 14, WS_CHILD I
I
I
I
I
END ERR_BOX DIALOG DISCARDABLE 48, STYLE WS_POPUP WS_CAPTION CAPTION "Error Dialog"
32, 210, 85
I
BEGIN
DEFPUSHBUTTON "&Ok", IDOK, PUSHBUTTON "&Debug", ID YES, LISTBOX ERRJ.B,
4, 8, 160,
WS_GROUP 14, WS_GROUP
172, 8, 28, 14, 172, 28, 28,
70
74
END
DW_BOX DIALOG DISCARDABLE 27, 27, 201, STYLE WS_DLGFRAME WS_POPUP
105
I
BEGIN LTEXT LTEXT
"The
text in the
Browser edit window has been"
2, 10, 11, 180,
10
"changed. Accept or Cut to Clipboard?" 3, 10, 24, 150, 10
PUSHBUTTON "&Accept", DW_ACC, 10, 47, 75, 14, WS_CHILD PUSHBUTTON "Cut to C&lipboard", DW_CTC, 10, 74, 75, 14, WS.CHILD DEFPUSHBUTTON "A&bandon", DW_ABA, 110, 47, 75, 14, WS_CHILD PUSHBUTTON "&Cancel", IDCANCEL, 110, 74, 75, 14, WS_CHILD END FRACTAL_BOX DIALOG DISCARDABLE 90, 69, 160, 85 CAPTION "Fractal Controls" STYLE WS_BORDER WS_CAPTION WS_DLGFRAME WS.POPUP I
I
I
BEGIN
CONTROL "Type" CONTROL I
CONTROL 12,
ID_SQKOCH,
"&Square Koch"
"button",
BS_RADIOBUTTON
I
"&Peano"
ID_PEANO,
"button",
BS_RADIOBUTTON
I
12,42,33, 12
CONTROL 86, 9, 30,
I
12, 20, 28, 12
31,56, 12
CONTROL WS_CHILD,
I
"&Koch"
WS_TABSTOP WS_CHILD, WS_CHILD,
BS_GROUPBOX WS_CHILD, 8, 9, 66, 50 ID_KOCH, "button", BS_RADIOBUTTON
-1, "button",
"Order"
-1, "button",
BS_GROUPBOX WS_GROUP WS_CHILD, I
I
70
CONTROL
"&1" ID_ORDERl, "button",
BS_RADIOBUTTON WS_CHILD,
"&2" ID_ORDER2,
BS.RADIOBUTTON
I
94,20, 16, 12
CONTROL
"button",
I
WS_CHILD,
94,31, 16, 12
CONTROL I
WS_CHILD,
"&3" ID.ORDER3,
"button",
BS.RADIOBUTTON WS_TABSTOP I
94, 43, 16, 12
CONTROL
"&4" ID_ORDER4,
"button",
BS.RADIOBUTTON WS_CHILD,
"&5" ID_ORDER5, "button",
BS.RADIOBUTTON WS_CHILD,
I
94,54, 16, 12
CONTROL
I
94,65, 16, 12
CONTROL "50" ID_LENGTH, "edit", ES.LEFT WS.BORDER WS_GROUP WS_TABSTOP \VS_CHTLD, 40, 67, 34, 12 CONTROL "Length: -1, "static", SS.LEFT WS_CHILD, 8, 69, 28, 8 CONTROL "&OK" IDOK, "button", BS.DEFPUSHBUTTON WS_TABSTOP I
I
I
I
"
I
I
I
WS_CHILD,
124,26,28, 14 CONTROL "&Cancel"
WS_TABSTOP WS_CHILD, I
IDCANCEL,
124, 53, 28, 14
END
75
"button",
BS.PUSHBUTTON
I
DCL.BOX DIALOG DISCARDABLE 44, 25, 234, STYLE WS.DLGFRAME WS_POPUP
134
I
BEGIN
PUSHBUTTON "&Delete Files" DCL_DEL, 38, 97, 60, 14, WS_CHILD PUSHBUTTON "Save &Files" DCL.SAV, 38, 113, 60, 14, WS_CHILD DEFPUSHBUTTON "&Snapshot" IDOK, 136, 97, 60, 14, WS_CHILD PUSHBUTTON "&Cancel" IDCANCEL, 136, 113, 60, 14, WS_CHILD LTEXT "You have modified the image. The modified source" 9, 12, 5, 204, 10 LTEXT "files for the following classes are located in the" 2, 12, 16, 205, 10 LTEXT "WORK directory." 2, 12, 27, 63, 10 LTEXT "" DCL_LIST, 11, 43, 212, 22, WS.BORDER WS_CHILD LTEXT "Before quitting, do you want to take a snapshot, or" 5, 13, 69, 208, 10 LTEXT "save the modified source files in the WORK directory?" 8, 12, 80, 212, I
10
END FILEJBOX DIALOG DISCARDABLE
27, 23, 192, 105
STYLE WS_DLGFRAME WS.POPUP BEGIN EDITTEXT FILE_EDIT, 54, 5, 127, 12, ES.AUTOHSCROLL WS_CHILD CONTROL "" FILE.LB, "listbox", LBS_STANDARD WS_TABSTOP WS_CHEJD, 10, 39, 99, 57 DEFPUSHBUTTON "&Open", IDOK, 135, 47, 32, 15, WS_CHILD PUSHBUTTON "&Cancel", IDCANCEL, 135, 73, 32, 15, WS.CHILD I
I
I
CONTROL "File name:" 3, "static", SS.LEFT WS.CHILD, 10, 7, 41, 11 CONTROL "" FTLE_DIR, "static", SS_LEFT WS_CHILD, 10, 23, 176, 11 END I
I
CLASS_BOX DIALOG DISCARDABLE STYLE WS_POPUP WS_CAPTION CAPTION "Class Definition"
36,48,270,160
I
BEGIN LTEXT "Name:", CLASS.LNAME, 4, 2, 20, 14 EDITTEXT CLASS_NAME, 4, 12, 100, 14 LTEXT "Ancestor:", CLASS_LANC, 4, 28, 40, 14 EDITTEXT CLASS_ANCEST, 4, 38, 100, 14 RADIOBUTTON "&Byte", CLASS.BYTE, 6, 64, 30, 14 RADIOBUTTON "&Word", CLASS_WORD, 40, 64, 30,
RADIOBUTTON "&Ptr", CLASS_PTR, 70, 64, 30, 14 GROUPBOX "Format", CLASS_FORM, 4, 54, 100, 26 CHECKBOX "&Indexed", CLASS_IDX, 4, 82, 40, 14
76
14
I
DEFPUSHBUTTON Windows
"Accept",
IDOK,
46, 86, 28, 14
default
for
2.0
PUSHBUTTON LTEXT
"Cancel",
"Variables:",
©CANCEL, 76, 86, 28,
CLASS_LVARS,
14
END methodbr.rc for lang ext
I
MBrowMenu MENU BEGIN
MENUITEM
"&Accept!",
BR_ACCEPT
POPUP "&Edit" BEGIN
MENUITEM "Cu&t\tShift+Del", EDIT_CUT MENUITEM "&Copy\tCtrl+Ins", EDIT_COPY MENUITEM "&Paste\tShift+Ins", EDIT_PASTE MENUITEM "C&lear", EDIT.CLEAR MENUITEM SEPARATOR MENUITEM "Select &AlNCtrl+A", EDIT_SELALL MENUITEM "&Reformat\tCtrl+R", BR_REFORM END
MENUITEM MENUITEM POPUP BEGIN
"&Doit!
M ,
INSP_DOIT
"&Inspect!",
INSPJSEL
"&Utility"
MENUITEM MENUITEM MENUITEM MENUITEM END
"&Implementors",
WORKJMP
WORK.SYMSEND "&Global References", WORK_GLOSEND "&References", WORK_SEND "&Senders",
POPUP "&Templates" BEGIN
MENUITEM MENUITEM
"&do",
TEMP_DO
"&if/then",TEMP_IF
77
;
no longer the default
108, 2, 50, 14
EDITTEXT CLASSJVARS, ES_AUTOVSCROLLIES_MULTILINEIWS_VSCROLL LTEXT "Comment:", CLASS.LCOM, 4, 96, 40, 14 EDITTEXT CLASS_COM, ES_AUTOVSCROLLIES_MULTILINEIWS_VSCROLL
;
new
;
108,
4,
12,
160,
90,
106,
264,
52,
MENUTTEM M if/&else", TEMP.IFEL MENUITEM "&block", TEMP.BLOCK MENUTTEM "&select/case", TEMP_CASE MENUTTEM "&loop", TEMPLOOP MENUTTEM SEPARATOR MENUTTEM "&New method", TEMP_NMETH END END demoMenu
MENU
BEGIN
MENUTTEM POPUP BEGIN
DEMO.CLEAR
"&Clear!",
"&Turtle"
MENUTTEM "&Load Demo", DEMOJTURTLOAD MENUTTEM SEPARATOR MENUITEM "&Pattem...", DEMO_FRACTAL END MENUITEM "T&rack!", DEMO.TRACLOAD MENUITEM "C&ube!", DEMO_CUBELOAD MENUITEM "&Graph!", DEMO_GRAFLOAD MENUITEM "&Fractal!", DEMO FRACLOAD POPUP BEGIN
"&Mandelbrot"
MENUITEM "Plot&l", DEMO_BRTlLOAD MENUTTEM "Plot&2", DEMO_BRT2LOAD MENUITEM "Plot&3", DEMO_BRT3LOAD END DEMO_QUENLOAD MENUITEM "&Queens!", MENUITEM "C&lassTree!", DEMO_TREELOAD MENUITEM "&ActorLogo!" DEMO LOGOLOAD END ,
track
MENU
BEGIN
POPUP "&Shape" BEGIN
MENUITEM MENUITEM MENUITEM MENUITEM MENUITEM END END
"&Clear"
IDDCLEAR
,
"&Ellipse"
,
IDDELLIPSE
IDDRECT IDDSTAR
"&Rectangle",
"&Star"
,
"&Triangle"
,
IDDTRI ANGLE
78
EditMenu
MENU
BEGIN POPUP "AEdit" BEGIN
MENUITEM MENUITEM MENUITEM MENUITEM END END DebugMenu
EDIT_CUT EDIT.COPY "&Paste", EDIT_PASTE "C&lear", EDIT.CLEAR "Cu&t",
"&Copy",
MENU
BEGIN
MENUITEM
"&Accept!",
BR_ACCEPT
POPUP "&Edit" BEGIN
MENUITEM "Cu&t", EDIT_CUT MENUITEM "&Copy", EDIT_COPY MENUITEM "&Paste", EDIT_PASTE MENUITEM "C&lear", EDIT_CLEAR MENUITEM SEPARATOR MENUITEM "Select &A11", EDIT_SELALL MENUITEM "&Reformat", BR_REFORM END MENUITEM "&Doit!", INSP.DOIT POPUP "&Inspect" BEGIN
MENUITEM MENUITEM END
"&Temporary", "&Selection",
DBG_TEMP
INSPJSEL
POPUP "&Utility" BEGIN
MENUITEM "&Implementors", WORKJMP MENUITEM "&Senders", WORK_SYMSEND MENUITEM "&Global References", WORK_GLOSEND MENUITEM "&References", WORK_SEND END MENUITEM "&Resume!", DBG_RES END InspMenu
BEGIN POPUP
MENU
"&Edit"
79
BEGIN
MENUITEM MENUITEM MENUTTEM MENUITEM END
EDIT_CUT EDIT_COPY "&Paste\tShift+Ins", EDTT_PASTE "C&lear", EDTT.CLEAR
"Cu&tNtShift+Del",
"&Copy\tCtrl+Ins",
MENUITEM "&Doit!MNSP_DOIT POPUP "&Inspect" BEGIN
MENUITEM MENUITEM MENUITEM END END BrowMenu
"&Variable'\
INSPJVAR
"&Key", INSP_IKEY "ASelection",
INSPJSEL
MENU
BEGIN
MENUITEM
"&Accept!",
BR_ACCEPT
POPUP "&Edit" BEGIN
MENUITEM "Cu&tNtShift+Del", EDIT.CUT MENUITEM "&Copy\tCtrl+Ins", EDIT_COPY MENUITEM "&Paste\tShift+Ins", EDIT.PASTE MENUITEM "C&lear", EDIT.CLEAR MENUITEM SEPARATOR MENUITEM "Select &AlNCtrl+A", EDIT_SELALL MENUITEM "&Reformat\tCtrl+R", BR.REFORM MENUITEM SEPARATOR MENUITEM "D&elete Class", BR_DELCL, grayed MENUITEM "&Delete Method", BR_DELME, grayed END
MENUITEM MENUITEM
"&Doit!",
INSP_DOIT
"&Inspect!",
INSPJSEL
POPUP "&Options" BEGIN
MENUITEM "A&bout the class", BR_CABOUT, Grayed MENUITEM "&Make descendant", BR_CDES, Grayed MENUITEM SEPARATOR MENUITEM "&Class methods", BR_CMETH MENUITEM "&Object methods", BR_OMETH MENUITEM SEPARATOR
80
MENUITEM "&Alphabetical", BR_ALPH MENUITEM "&Hierarchicar, BR_HER MENUITEM SEPARATOR MENUITEM "&ZoomEdit\tCtrl+Z", BR_ZOOM MENUITEM "&Refresh Class List", BR_REFRCL END POPUP "AUtility" BEGIN
MENUITEM MENUITEM MENUITEM MENUITEM END
WORK_IMP WORK.SYMSEND "&Global References", WORK_GLOSEND "&References", WORK.SEND "&Implementors", "&Senders",
POPUP "&Templates" BEGIN
MENUITEM "&do", TEMP.DO MENUITEM "&if/then", TEMP.IF MENUITEM "if/&else", TEMP.IFEL MENUITEM "&block", TEMP_BLOCK MENUITEM "&select/case", TEMP_CASE MENUITEM "&loop", TEMP_LOOP MENUITEM SEPARATOR MENUITEM "&New method", TEMP_NMETH END END WorkMenu
MENU
BEGIN POPUP "&File" BEGIN
MENUITEM MENUITEM MENUITEM MENUITEM END
"&Run...",
WORK_RUN
"&Edit...",
WORK_EDIT
"&Load...",
WORK_LOAD WORK.SNAP
"&Snapshot",
POPUP "&Edit" BEGIN
MENUITEM MENUITEM MENUITEM MENUITEM
EDIT_CUT EDIT_COPY "&Copy\tCtrl+Ins", "&Paste\tShift+Ins", EDIT_PASTE "C&lear", EDIT_CLEAR "Cu&t\tShift+Del",
81
MENUITEM SEPARATOR MENUTTEM "Select &AlI\tCtrl+A", EDIT_SELALL END
MENUTTEM
"&Doit!",
MENUTTEM
"&Inspect!",
INSPJSEL
MENUTTEM
"&Browse!",
WORK_BROWSE
MENUTTEM
"&Cleanup!",
MENUTTEM "&Show
TNSP.DOTT
WORK.CLEAN
Room!",
WORK_ROOM
POPUP "&Utility" BEGIN
MENUITEM "&Implementors", WORKJMP MENUITEM "&Senders", WORK_SYMSEND MENUTTEM "&Global References", WORK_GLOSEND MENUITEM "&References", WORK.SEND MENUTTEM SEPARATOR MENUITEM "&Clear Display", WORK_CLSDISP END POPUP "&Templates" BEGIN
MENUTTEM "&do", TEMP_DO MENUITEM "&if/then", TEMP.Tf MENUITEM "if/&else", TEMPJFEL MENUITEM "&block", TEMPJBLOCK MENUITEM "&select/case",TEMP_CASE MENUITEM "&loop", TEMP_LOOP END MENUITEM "Demos!", WORK_DEMO END FileEditMenu
MENU
BEGIN POPUP "&File" BEGIN
MENUITEM MENUITEM MENUITEM MENUITEM
"&New", FTLE.NEW
FTLE_OPEN FTLE_READ FILE_SAVE
"&Open...", "&Insert
File...",
"&Save",
82
MENUTTEM END
"Save &As...'\
FILE.SAVEAS
POPUP "&Edit" BEGIN
MENUITEM "Cu&tNiShift+Del", EDIT.CUT MENUITEM "&Copy\tCtrl+Ins", EDIT_COPY MENUITEM "&Paste\lShift+Ins", EDIT_PASTE MENUITEM "C&lear", EDIT_CLEAR MENUITEM SEPARATOR MENUITEM "Select &AlI\tCtrl+A", EDIT_SELALL END MENUITEM "&Doit!", INSP.DOIT MENUITEM "&Inspect!", INSPJSEL END
83
!
APPENDIX B.ACTOR CODE FOR The following
listings are the
DMWindow
modified for the implementation of this /*
DMWINDOW CLASS
class
code
that
was
either created or
thesis.
GLAD Window for data manipulation interaction */!!
inherit(MyWindow, #DMWindow, #(dbSchema /*meta data of opened db*/ prevObj /*previously selected object if any */ selObj
/""currently selected
object
if
any*/
colorTable /* available colors for
shading*/ rectSize /*width
& height of object rectangle
expressed in Point*/ obj Moved /*true
if
object
is
dragged*/
prevCurPt /*previous cursor point while object
is
dragged*/
boundRect Abounding box
that surrounds all objects.
used for scroll bars & setting windoworg*/ logOrg /*origin of logical coordinate, mapped to device coord (0,0)*/ hScroll /*true if there is HScrollBar*/ vScroll /*true
if
there
bDDEAcknowledge been acknowledged?
mbdsDB
is
/*
VscrollBar*/
has
DDE initiation
*/
/* Is the current
DB
an
MBDS
database? */
hSockets /* Handle of Socket interface window
*/
have the results of the retrieve come back? */ awaitingData /* Are we waiting for data from MBDS */ waitDialog /* Dialog box which shows while waiting for data
haveData
dbName qwin
/*
/*
/*
Name
of the database */
query window
*/), 2, nil)!!
now(DMWindowClass)!
84
*/
)
!
now(DMWindow)! comment */ Def returnQuery(self
/*
I
aCommand
win.aStr,
{
aStr := formulateRetrieve(self);
aCommand
:= addAtom(self, lP(aStr));
Call PostMessage(hSockets,
WM_DDE_REQUEST, hWnd, pack(CF_TEXT,
aCommand)); waitDialog := new(Dialog);
runModal(waitDialog, haveData := "YES";
DATAWAIT,
self);
ifhaveData = "YES"
win
:=
new(ListMemWindow,self,"GladLMMenu","BROWSE:
"+name(selObj),nil);
addWindow(selObj,win); start(win,selObj); endif; }!!
Def QueryMembers(self queryDialog I
aStr
aCommand
win)
{
if
not(selObj)
errorBox("ERROR!","No object
is
selected")
else if
mbdsDB
awaitingData := true; queryDialog := new(lnputDialog," Queries
to
MBDS";'Query:","FIRST@["); ifrunModal(queryDialog,INPUT_BOX,ThePort)==IDOK aStr:=getText(queryDialog) endif;
aStr := "020"+ aStr;
aCommand
:= addAtom(self, lP(aStr));
Call PostMessage(hSockets,
WM_DDE_REQUEST, hWnd, pack(CF_TEXT,
aCommand));
waitDialog := new(Dialog);
85
runModal(waitDialog, else
DATAWAIT,
self);
haveData := "YES";
endif;
ifhaveData = "YES" win := new(ListMemWrindow,self,"GladLMMenu","BROWSE: "+name(selObj),nil);
addWindow(selObj,win); start(win,selObj); endif;
endif !!
}
ij
/RetCommon
queries into the database*/
Def qRetCommon(self) {
errorBoxf'query Retrieve Common","") }!!
/*Delete queries into the database*/
Def qDelete(self) {
errorBox("query Delete","") }!!
/*Update queries into the database*/
Def qUpdate(self) {
errorBox("query Update","") }!!
/Insert queries into the database*/
Def qlnsert(self) {
errorBox( "query Insert","") }!!
/*
Formulate a retrieve request
Def formulate Retrieve (self
I
to get selected
aStr, attribs)
{
aStr := new(String, 100);
86
MBDS object's data
*/
"020" + asUpperCase(dbName) +
:=
aStr
name(selObj) +
"@" +
H
[RETRffiVE(TEMP=" +
")(";
attribs := new(String, 50); attribs := "";
do(attributes(selObj ), {
using(attr) attribs := attribs
+ asUpperCase(attr[NAME]) +
",";
}
);
aStr := aStr + attribs
+ "&";
aStr := subString(aStr, 0, indexOf(aStr, '&', 0) aStr := aStr
+ ")BY "; + subString(attribs,
aStr := aStr A asciiz(aStr);
-
1);
0, indexOf(attribs, 7, 0))
+
"]";
}!!
/* Tell
MBDS to load the appropriate database
Def loadMBDSDatabase(self, dbName
I
aStr,
*/
aCommand)
I
aStr := delete(dbName, 0, 4); aStr := lefJustify(aStr); aStr := asUpperCase(righUustify(aStr));
aStr := "010"
aCommand Call
+
:=
aStr;
addAtom(self, lP(asciiz(aStr)));
PostMessage(hSockets,
WM_DDE_REQUEST, hWnd, pack(CF_TEXT,
aCommand)); }!!
Handle Dynamic Data Exchange acknowledgments Def WM_DDE_ACK(self, wp, lp aServer, aTopic)
/*
*/
I
{
aServer := Call GlobalFindAtom(lP(asciiz("Sockets")));
aTopic := Call GlobalFindAtom(lP(asciiz("Database"))); deleteAtom(self, aServer); delete Atom(self, aTopic);
hSockets := wp;
bDDEAcknowledge
:= true;
}!!
/*
Get the
latest data for a
Def getMembers(self
I
MBDS
aStr
object */
aCommand)
{
aStr := formulateRetrieve(self);
87
aCommand Call
:= addAtom(self, lP(aStr));
PostMessage(hSockets,
WM_DDE_REQUEST, hWnd, pack(CF_TEXT,
aCommand)); }!!
/*
Handle Socket
interfaces's
WM_DDE_DATA messages here */
Def WM_DDE_DATA(self, wp,
lp
I
mbdsCommand,
{
aStr := getAtom(self, high(lp));
deleteAtom(self, highOp));
mbdsCommand
:= subString(aStr, 0, 3);
select
case
"020"
mbdsCommand =
objFile := new(File); delFile := new(File);
setName(delFile, memberFile(selObj)); delete(delFile);
setName(objFile, "qresults.fil");
reName(objFile, memberFile(selObj));
setHaveMembers(selObj, haveData := "YES"; if awaitingData end(waitDialog,
true);
0);
endif;
endCase; default
haveData if
:=
"ERROR";
awaitingData
end(waitDialog,
0);
endif;
errorBox("ERROR",
delete(aStr, 0, 3));
endSelect; }!!
/*
Return the string that the atom references */
Def getAtom(self, atom
I
bufStr, aStr)
{
bufStr := new(String, 100); Call
GlobalGetAtomName(atom,
lP(bufStr), 100);
aStr := removeNulls(getText(bufStr));
88
aStr, objFile, delFile)
freeHandle(bufStr);
A aStr }!!
/* Delete or decrease the count
on an atom
*/
Def deleteAtom(self, param) {
((param >= OxCOOO) and (param <= OxFFFF)) A Call GlobalDeleteAtom(param);
if
endif;
A nil }!!
/* Create a
new atom
or increment the count of one that already exists */
Def addAtom(self, param) {
A Call GlobalAddAtom(param); freeHandle(param); }!!
Dynamic Data Exchange with the Socket Def initDDE(self, reason aServer, aTopic)
/* Initiate
interface */
I
{
bDDEAcknowledge
:= false;
aServer := addAtom(self, lP(asciiz("Sockets")));
aTopic := addAtom(self, lP(asciiz("Database"))); Call
SendMessage(OxFFFFL,
WM_DDE_INITIATE, hWnd,
pack(aServer,
aTopic)); if
not(bDDEAcknowledge)
ifreason = "initDDE"
errorBox("ERROR", "Unable
to initiate
DDE
endif;
A false; else
A true; endif; }!!
Def reDraw (self,
obj
I
hdc)
{
hdc := getContext(self); setLPtoDP(self,hdc); display (self,obj, hdc);
89
with the Socket Interface");
'
releaseContext(self,hdc) }!!
!!
from the name listed in the Def getGLADfilename(self .selDbl tmpStr)
/*gets the filename
listbox*/
{
tmpStr := new(String,30); tmpStr := ""; do(selDb, (using(elem) if
elem
o
'
tmpStr := tmpStr + asString(elem) endif
});
A subString(tmpStr,0,7) + ".sen" !!
}
!!
!!
/*returns the currently selected object*/
Def
selObj(self)
{
A selObj }!!
draws an object on the window using the hdc display context */ Def display(self,obj,hdc objName, objRect, hBrush, hPen, hOldBrush, hOldPen)
/*
I
{
eraseRect(self,obj,hdc); /*first erase it*/ /* select the color
brush for
filling
used with Rectangle (via draw) */
hBrush
:= Call CreateSolidBrush(color(obj));
/*set bkcolor for shading with
DrawText*/
Call SetBkColor(hdc,color(obj));
hOldBrush := Call SelectObject(hdc,hBrush); objRect := rect(obj); if
obj.thickB order /*draw
it
wi-h a thick border*/
hPen := Call CreatePen(0,5,Call GetTextColor(hdc)); h01dPen:= Call SelectObject(hdc,hPen); draw(objRect,hdc); Call SelectObject(hdc,h01dPen);/*restore the dc*/ Call DeleteObject(hPen) else
draw(objRect,hdc) /*with a reg. border*/ endif; if
nesting(obj) /*draw the inner box
if
it
is
a nested object*/
90
)
)
draw(nestedRect(obj),hdc) endif;
objName
:= name(obj);
Call DrawText(hdc4P(objName),- 1 ,objRect,
DT_CENTER bitOr
bitOr
DT_VCENTER
DT.SINGLELINE);
Call Select0bject(hdc,h01dBnish); Call DeleteObject(hBrush);
freeHandle(objName) !!
}
/erase the region a rectangle in case
little
it
is
larger than object
displayed with a thick
border*/
Def
eraseRect(self,obj,hdc
hBrush tmpRect)
I
{
tmpRect := copy(rect(obj)); hBrush := Call CreateSolidBrush(WHITE_COLOR); CallFillRect(hdc,inflate(tmpRect,5,5),hBrush); Call DeleteObject(hBrush) !!
}
/*clientRect for
DMWindow
ignores the scroll bars
present*/
if
Def
clientRect(self
I
cRect, incr)
{
cRect := clientRect(self:WindowsObject); if
hScroll
incr := Call
GetSystemMetrics(3);/*SM_CYHSCROLL*/
setBottom(cRect, bottom(cRect)+incr- 1 endif; if
vScroll
incr := Call
GetSystemMetrics(2);/*SM_CXVSCROLL*/
setRight(cRect, right(cRect)+incr- 1 endif;
^Rect }
!!
/*move
vert scroll bar
down
Def moveDownVScroll(self,
for incr
incr
I
amount*/
newy)
{
newy
:=
min(y(logOrg) +
incr,
91
bottom(boundRect) /adjust newy so
it
-
height(clientRect(self)));
won't go beyond boundRect*/
setLogOrg(self,x(logOrg),newy);
setScrollPos(self,SB_VERT,newy); repaint(self) !!
}
/move vert
scroll bar
up for incr amount*/ incr newy)
Def moveUpVScroll(self,
I
{
/adjust newy so it won't go beyond boundRect*/ newy := max(y(logOrg) - incr,top(boundRect)); setLogOrg(self,x(logOrg),newy);
setScrollPos(self,SB_VERT,newy); repaint(self) }
tt
/*check if
if
any of four constraints
is
violated
so adust accordingly */
Def checkForViolation(self cRect) I
{
cRect := clientRect(selO; (x(logOrg)+right(cRect)) > right(boundRect) logOrg.x := max(left(boundRect),
if
right(boundRect)-right(cRect));
setRight(boundRect, max(x(logOrg)+right(cRect), right(boundRect))) endif;
if
(y(logOrg)+bottom(cRect)) > bottom(boundRect)
logOrg.y :=
max (top (boundRect),
bottom(boundRect)-bottom(cRect)); setBottorr(boundRect,max(y(logOrg)+bottom(cRect),
bottom(boundRect))) endif;
if
x(logOrg) < left(boundRect)
setLeft(boundRect, min(left(boundRect), right(boundRect)-right(cRect)));
logOrg.x := left(boundRect) endif;
92
if
y(logOrg) < top(boundRect)
setTop(boundRect, min(top(boundRect), bottom(boundRect)-bottom(cRect))); logOrg.y := top(boundRect) endif }
!!
/*clientRect has changed, process only
change bars,
is
i.e.
if
the
not by the changes in scroll
window
size really
changed
*/
Def reSize(self,wp,lp) {
adjBoundRect(self);/*always be adjusted*/ setScrollRanges(self); repaint(self)
M }
/*move horz scroll bar right for incr amount*/ Def moveRightHScroll(self, incr newx) I
{
newx
:=
min(x(logOrg) +
incr,
right(boundRect)-width(clientRect(self))); /*adjust
newx
so
it
won't go beyond boundRect*/
setLogOrg(self,newx,y(logOrg));
setScrollPos(self,SB_HORZ,newx); repaint(self) }
/*move horz scroll bar left for incr amount*/ Def moveLeftHScroll(self, incr newx) I
{
newx
:=
/*adjust
max(x(logOrg)
newx
so
it
-
incr,left(boundRect));
won't go beyond boundRect*/
setLogOrg(self,newx,y(logOrg));
setScrollPos(self,SB_HORZ,newx); repaint(self) }
it
Def hThumbPos(self,
lp
I
newx)
93
newx
:= aslnt(lp);
setLogOrg(self,newx,y(logOrg));
setScrollPos(self,SB_HORZ,newx); repaint(self) J!
Def vThurabPos(self,
newy
lp
I
newy)
:= aslnt(lp);
setLogOrg(self,x(logOrg),newy);
setScrollPos(self,SB_VERT,newy); repaint(selO I!
Def downPage(self,lp) moveDownVScroll(self,height(clientRect(selO)) jj
Def upPage(self,lp) moveUpVScroll(self,height(clientRect(self)))
n
Def rightPage(self,lp) moveRightHScroll(self,width(clientRect(selO))
H
Def
leftPage(self,lp)
moveLeftHScroll(self,width(clientRect(self))) J!
Def rightArrow(self,lp) moveRightHScroll(self,asInt(0.25*x(rectSize)))
n
Def downArrow(self,lp) {
moveDownVScroll(self,asInt(0.5*y(rectSize)))
94
}
!!
Def upArrow(self,lp) {
moveUpVScroll(self,asInt(0.5*y(rectSize))) }
!!
Def leftArrow(self,lp) {
moveLeftHScToll(self,asInt(0.25*x(rectSize))) !!
}
/convert device
pt
(DP)
to logical pt (LP)*/
DefdPtoLP(self,aPt) I
A point(aPt.x + logOrg.x, aPt.y + logOrg.y) }
!!
/*set the logical coord, origin*/
Def setLogOrg(self,x,y) {
logOrg.x :=
x;
logOrg.y := y }
!!
/*logOrg
is
now mapped
to device coord. (0,0)*/
/*need to pass hdc since there could be two disp context allocated to this
window
at
one time
*/
Def setLPtoDP(self, hdc) {
Call SetWindowOrg(hdc,x(logOrg),y(logOrg))
Def setScrollRanges(self xmin,ymin,xmax,ymax) I
{
xmin:=left(boundRect);
ymin:=top(boundRect); cRect := clientRect(self); if
(xmax:=right(boundRect)-width(cRect)) < xmin
xmax
:=
xmin
endif; if
(ymax:=bottom(boundRect)-height(cRect)) < ymin
ymax
:=
ymin
95
endif;
hScroll :=
vScroll :=
xmin < xmax; ymin < ymax;
setScrollRange(self,SB_HORZ,xmin,xmax); setScrollRange(self,SB_VERT,ymin,ymax) !!
}
Def adjBoundRect(self ItmpRect) {
tmpRect:=copy(boundRect); boundRect:=copy(rect(first(dbSchema)));
do(dbSchema, using(obj objRect) objRect := rect(obj);
{
I
setTop
(boundRect,min(top(objRect),top(boundRect)));
setLeft (boundRect,min(left(objRect),left(boundRect)));
setBottom(boundRect,max(bottom(objRect),b>ottom(boundRect))); setRight (boundRect,max(right(objRect),right(boundRect))); });
/*changes boundRect accordingly per violation*/ checkForViolation(self); if
tmpRect = boundRect
A nil endif !!
}
Def
start(self,
databaseName dosFilename, DDEInitiated) I
{
dbName
mbdsDB if
:=
databaseName;
:= false;
subString(dbName,
mbdsDB if
0, 4)
=
"MBDS"
:= true;
not(initDDE(self, "socketActive?"))
exec("sockets.exe"); endif; if
(DDEInitiated := initDDE(self, "initDDE"))
loadMBDSDatabase(self, dbName);
dbName
:=
delete(dbName,
0, 5);
endif;
endif; if
not(mbdsDB) or DDEInitiated
dosFilename
:=
getGLADfilename(self,dbName);
loadSchema(self, dosFilename); adjBoundRect(self);
96
setLogOrg(self, /*center of bRect to center of cRect*/ left(boundRect)+asInt(0.5*(width(boundRect)-width(clientRect(self)))), top(boundRect)+asInt(0.5*(height(boundRect)-height(clientRect(self))))); setScrollRanges(self);
setScTollPos(self,SB_HORZ,x(logOrg)); setScrollPos(self,SB_VERT,y(logOrg)); show(self.l); endif; !!
}
/*set the width
and height of object rectangle*/
Def setObjRectSize(self tm, wd, I
ht)
{
tm
:= new(Struct,32);
Call GetTextMetrics(hDC:=Call
GetDC(hWnd),tm);
wd:= 14*asInt(wordAt(tm,10)); ht:= 4*asInt(wordAt(tm, 0));
rectSize := point(wd,ht); Call
ReleaseDC(hWnd,hDC)
!!
}
/*mouse
is
dragged while
left
button
is
pressed.
move obj if mouse is in it */ Def mouseMoveWithLBDn(self,wp,point aLPt) I
I
if
selObj
objMoved
:= true;
eraseRect(self,selObj,hDC);
aLPt:= dPtoLP(self,point); /*convert
to
DP to
setNewRect(selObj,aLPt,prevCurPt);
prevCurPt:= aLPt; display(self,selObj,hDC)
endif }
!!
Def initMenuID(self) {
menuID
:=
%Dictionary( l->#describe
2->#expand 3->#listMembers
4->#oneMember 5->#addMember 6->#deleteMember
97
LP*/
7 ->#modify Member
8->#query 9->#showConnection 950->#help ll->#elose
21->#describe 22->#qInsert
23->#qRetrieve
24->#qUpdate 25->#qDelete
26->#qRetCommon
)
if
Def showConnection(self aConnWin) I
{
errorBox("Show Connection","") M
}
Def expand(self
Iwin
)
{
if
not(selObj)
errorBox("ERROR!","No Object
is
selected")
else if
not(nesting(selObj))
errorBox("ERR OR! "/'Selected Object
is
not a nested object")
else
win
:=
new(NestDMWindow,self,"GladDMlMenu", "Subclasses
of:
"+name(selObj),nil);
addWindow(selObj,win); start(win,selObj,colorTable)
endif endif !!
}
/*open
oneMemWin
for the selected object*/
Def oneMember(self oneMemWin, gotMembers) I
{
if
not(selObj)
errorBox("ERROR", "No Object Selected") else if
mbdsDB and
not(haveMembers(selObj))
98
;
getMembers(self)
awaitingData :=
true;
waitDialog := new(Dialog);
runModal(waitDialog, else
DATAWATT,
self);
haveData := "YES";
endif; if
haveData = "YES" := new(DisplayOne\V^ndow,self,"GladOMMenu",
oneMemWin
"DISPLAY:
"+name(selObj),nil);
addWindow(selObj,oneMemWin); start(oneMemWin,selObj,0); endif;
endif }
n /*count the number of the describe
window opened*/
Def countOpnDscrbWin(self) {
A size(extract(dbSchema,{ using(obj) obj.aDscrbWin
}))
method from the new method*/
/^initialize the color table, this
called
is
Def init(self) {
colorTable := new(ColorTable,10); set(colorTable);
logOrg :=0@0; /*need dummy assigment,so initial to checkPor Violation via reSize works*/ boundRect:=new(Rect); setObjRectSize(self); init(self:My Window) !!
}
Def rButtonRelease(self,wp,point tmpObj) I
{
if
(tmpObj
:= objSelected(self,dPtoLP(self,point)))
/*an object if
is
clicked with rbutton*/
tmpObj <> selObj
if
color(tmpObj) ==
WHITE.COLOR
errorBox("Wrong Button??", "Use
LEFT
button to select an object")
99
call
else
errorBox("E
R R O R",
"RIGHT button
clicked object
is
not"+CR_LF+
"the selected (bold-lined) object")
endif
= selObj
else /*
*/
closeOpenWindows(selObj); if
not(referenced(selObj))
/unshade
not referenced by other objects*/
it if
avail(colorTable,color(selObj));
setColor(selObj,WHITE_COLOR) endif;
/*now unselect
it*/
regBorder(selObj);
hDC
:= getContext(self);
setLPtoDP(self,hDC); display(self,selObj,hDC);
releaseContext(self,hDC);
selObj :=
nil
endif endif
H
}
/*list the
members
instances) of the
(ie
selected object*/
Def listMembers(self win, gotMembers) I
{
if
not(selObj)
errorBox("ERROR!","No object
is
selected")
else if
mbdsDB and
not(haveMembers(selObj))
getMembers(self);
awaitingData :=
true;
waitDialog := new(Dialog);
runModal(waitDialog, else
haveData
:=
DATAWAIT,
self);
"YES";
endif; if
haveData = "YES" := win
new(ListMemWindow,self,"GladLMMenu","BROWSE:
"+name(selObj),nil);
addWindow(selObj,win); start(win, selObj);
endif;
100
endif !!
}
/queries the database*/
Def query(selfl db so
aStr
qwin win aCommand)
{
if
not(selObj)
en-orBoxC'ERROR", "No Object Selected") else if
mbdsDB
awaitingData :=
true;
so:= new(String, 50);
db:= new(String, 50); so:= name(selObj); db:= asUpperCase(dbName);
qwin
:=
new(QueryWindow,self,"QueryGlad", "Glad to MBDS Queries OF: "+name(selObj),nil);
start(qwin,db,so,hSockets,selObj,self);
aStr := formulateRetrieve(self);
/*
aCommand
:=
addAtom(self, LP(aStr));
Call PostMessage(hSockets,
WM_DDE_REQUEST, hWnd, pack(CF_TEXT,
aCommand)); waitDialog := new(Dialog);
runModal(waitDialog, else
haveData
:=
DATAWAIT,
self);
"YES";*/
endif; /*
ifhaveData = "YES" win := new(ListMemWindow,self,"GladLMMenu","BROWSE:
"+name(selObj),nil);
addWindow(selObj,win); start(win,selObj);
endif;*/
endif }
H
Def help(selflaStr) {aStr :=asciiz("Data Manipulation
Window");
pcall(Lib.procs[#GUIDANCESETCONTEXT],HGuide, !P(aStr),l);
101
)
freeHandle(aStr); }
!!!!
/describe the structure of the selected object*/
Def describe(self describeWin) I
{
if
not(selObj)
errorBox("ERROR", "No Object Selected") else
describeWin := new(DescribeWindow, self, nil,
"STRUCTURE OF:
"+name(selObj),nil);
addWindow(selObj,describeWin); start(describe Win ,selObj ) endif; !!
}
/*left button is released*/
Def lButtonRelease(self,wp,pointl aLPt) {
select
case selObj and not(objMoved)
/*an object was not moved, so select
it*/
is if
prevObj /*unbold the bolded border*/
regBorder(prevObj);
/unshade
it
if
has no opened windows
and not referenced by other objects*/ not( any Open Window(prevObj) or referenced(prevObj)
if
avail(colorTable,color(prevObj));
setColor(prevObj,WHITE_COLOR) endif;
display (self, prevObj,hDC) endif; if
color(selObj)
=
WHITE_COLOR
/*not referenced in another's describe window,
so assign
it
a color*/
setColor(selObj,nextBrushColor(colorTable)) endif;
thickBorder(selObj);
display(self,selObj,hDC)
endCase case selObj and
objMoved
/*an object was just moved, so don't select
102
it*/
;
/adjust boundRect and
scroll bars accordingly*/
is
display(self,selObj,hDC);
selObj := prevObj; if
adjBoundRect(self)
setScrollRanges(self)
setScrollPos(self,SB_HORZ,x(logOrg));/*need these when*/ setScrollPos(self,SB_VERT,y(logOrg));/*bars reappear*/ repaint(self)
endif
endCase endSelect;
releaseContext(self,hDC) !!
}
/*left button is pressed;
check
if the
cursor
the object rectangle. If yes get ready to
is
within
move
or
select it*/
Def lButtonDown(self,wp,point aLPt) I
{
objMoved if
:= nil;
selObj
/*remember
if
it
some
object
is
currently selected*/
prevObj := selObj endif;
aLPt:= dPtoLP(self,point); if
(selObj := objSelected(self,aLPt))
prevCurPt := aLPt endif;
hDC
:= getContext(self);
setLPtoDP(self,hDC) !!
}
/detects whether the cursor
Def
is in
the object rect*/
objSelected(self,cursorPt)
{
do (dbSchema,{using(obj) if
containedIn(obj,cursorPt) 'Nddj /*return the selected
endif
obj*/
});
A nil }
!!
/*draws the diagram, called by the show method
103
via update
method which sends WM_PAINT
*/
Def paint(self,hdc) {
setLPtoDP(self,hdc);
do (dbSchema, {using(obj)
display(self,obj,hdc)})
!!
}
/gets the meta data of db
to be opened,
initialize other instance variables*/
Def loadSchema(self, aSchemaFile
I
aFile,
anObj)
{
aFile := new(TextFile);
setName(aFile,aSchemaFile); open(aFile,0); /*read-only*/
dbSchema anObj
:=
:= new(OrderedCollection,10);
new(GladObj);
loop while get(anObj,aFile,rectSize)
add(dbSchema,anObj); anObj := new(GladObj) endLoop; close(aFile)
M
Def addMember(self) errorBox("add member","") ;;
Def deleteMember(self) errorBox( "delete member","")
n
Def modifyMember(self) errorBox("modify member","") 11
104
!
APPENDIX The following
C.
!
ACTOR CODE FOR QUERYWINDOW CLASS
listings are the
QueryWindow
modified for the implementation of this /*
class code that
inherit(EditWindow, #QueryWindow, #(menuID /* database
selObjName
mbdsDB
name
menu
*/!!
idenities */
*/
/* selected object */
/* Is current
boundRect/*
DB
an
MDBS database
*/
*/
logOrg /* */ hSockets /* handle of Socket interface window */ haveData /* have the results of the query come back */ awaitingData /* Are we waiting for data from MBDS */ waitDialog /*Dialog box which shows while waiting for data
*/
DB an MBDS database */ bDDEAcknowledge /*has DDE initiation been acknowledged?
mbdsDB
/* is the current
selObj /* the selected object */
parentWin
/* parent
retquery /*
is
ResultWin
/*
members/*
TW/*
is
window DMWindow
*/
the query a retrieve */
textwindow for retrieve
results */
*/
the template
window
either created or
thesis.
GLAD Window for ABDL queries to backend MBDS
dbName /*
was
*/), 2, nil)!!
now(QueryWindowClass)!
now(Query Window)!
comment */ Def Help(self)
/*
{
errorBox("Help",
ABDL" + CR_LF "queries to a MBDS back-end" + CR_LF + "For a example of each type of query," + CR_LF + "look under the template's menu item" + CR_LF + "This program demonstrates simple
"and select the specific query.");
105
+
*/
}!!
/Delete queries
into the database*/
Def tDelete(self) {
TW := new(TextWindow,ThePort,nil, "Format for an DELETE Query",&(20,20,400,100)); show(TW,l); drawString(TW,"dbName]");
setFocus(self);
it
/*Retrieve queries into the database*/
Def
tRetrieve(self)
{
TW:= new(TextWindow,ThePort,nil, "Format for an RETRIEVE Query",&(20,20,400,150)); show(TW,l); printString(TW,"dbName@[RETRffiVE((TEMP=selObjA)"); eol(TW); printString(TW," and (Attrl = jones))");
106
eol(TW); printString(TW," (Attrl ,Attr2,Attr3..)]"); setFocus(self);
}!!
/RetCommon queries
into the database*/
Def tRetCommon(self) {
TW := new(TextWindow,ThePort,nil, "Format for an RETRIEVE COMMON Query",&(20,20,400,150)); show(TW,l); printString(TW,"dbName@[RETRIEVE(TEMP=selObjA)(AttrAl,AttrA2,..)"); eol(TW); printStringCTW,"
COMMON (AttrAl,AttrBl)");
eol(TW); printStringCTW,"
RETRIEVE(TEMP=
selObjB)(AttrBl,AttrB2,. .)]");
setFocus(selO;
}!!
/*Insert queries into the database*/
Def
tlnsert(self)
{
TW := new(TextWindow,ThePort,nil, "Format for an INSERT Query",&(20,20,400,100)); show(TW,l); drawString(TW,"dbName@[INSERT(,"); eol(TW); drawString(TW,",)]"); setFocus(selQ;
107
/*
Read
Def
the file
named
RetResult(selfl
f,
qwresult.dat and
And show
line)
{
break(self);
f := new(TextFile);
f.delimiter :=
CR_LF;
/* use our delimiter */
setName(f, "qwresult.dat"); open(f, 0);
/* read only */
checkError(f);
any errors?
/*
*/
initWorkText(self);
/* clear the old text */
showWaitCursO;
/* looping takes a while */
loop
while line := readLine(f) printS tring(ResultWin,line);
eol(ResultWin); /*
add(workText, line);*/
endLoop;
show01dCurs();
/* all
done
*/
close(f);
checkError(f); invalidate (self);
/* just in case */
/*
redraw the screen
*/
}
H
comment */ Def formulateQuery(selflaStr)
/*
{
aStr :=new(String,150); selectAll(self);
xCopy(seO; aStr:="";
aStr:=getClipText(selO;
deleteSelText(self); A asciiz(aStr);
If!
108
query results for retrieves*/
from
/* get the attributes
Def
DMwindow
for selobj */
describe(self)
{
describe(parentWin); }!!
/list the
members
instances) of the
(ie
selected object*/
Def listMembers(self win, gotMembers) I
{
queryMembers(self);
awaitingData :=
true;
waitDialog := new(Dialog);
runModal(waitDialog,
haveData
:=
DATAWAIT,
self);
"YES";
ifhaveData = "YES" if
not(retquery)
returnQuery(parentWin); else
ResultWin:= new(TextWindow,ThePort,nil,
"RESULTS
of a Retrieve Query",nil);
show(ResultWin,l);
RetResult(self); endif;
endif;
!!
}
/* Delete or decrease the count
on an atom
*/
Def deleteAtom(self, param) {
if
((param >= OxCOOO) and (param <= OxFFFF))
A Call GlobalDeleteAtom(param); endif;
A nil }!!
109
;
/* Return the string that the
Def getAtom(self, atom
I
atom references
*/
bufStr, aStr)
{
bufStr := new(String, 200); Call
GlobalGetAtomName(atom,
lP(bufStr), 200);
aStr := removeNulls(getText(bufStr));
freeHandle (bufStr) A aStr }!!
/*
Handle Socket
interfaces's
WM_DDE_DATA messages here */
Def WM_DDE_DATA(self, wp,
lp
I
mbdsCommand,
{
aStr := getAtom(self, high(lp));
deleteAtom(self, high(lp));
mbdsCommand
:= subString(aStr, 0, 3);
select
case
mbdsCommand =
"020"
objFile := new(File); delFile := new(File);
setName(delFile, "qwresult.dat"); delete(delFile);
setName(objFile, "qresults.fil");
reName(objFile, "qwresult.dat");
setHaveMembers(selObjName,false);
haveData if
:=
"YES";
awaitingData
end(waitDialog, 0); endif;
endCase; default
haveData if
:=
"ERROR";
awaitingData
end(waitDialog,
0);
endif;
errorBoxC'ERROR",
delete(aStr, 0, 3));
endSelect; }!!
110
aStr, objFile, delFile)
)
/* Create a
new atom
or increment the count of one that already exists */
Def addAtom(self, param ItempAtom) {
tempAtom:=Call GlobalAddAtom(param);
A tempAtom; }!!
/*
Get the
latest data for a
Def queryMembers(self
I
MBDS object */
aStr
aCommand)
{
aStr :=formulateQuery(self);
aCommand Call
:= addAtom(self, lP(aStr));
PostMessage(hSockets,
WM_DDE_REQUEST, hWnd, pack(CF_TEXT,
aCommand)); }!!
Def
start(self,
qdbName, qselObj, handSocket,selObject,PWindow)
{
initMenuED(self); show(self,l);
hSockets := handSocket; selObjName:=selObject;
dbName
:=
qdbName;
selObj := qselObj;
parentWin :=PWindow; retquery:=false; }
!!
/*RetCommon
queries into the database*/
Def qRetCommon(selfl
aStr,Rtc, attribs
{
retquery:=tme; aStr:= new(String, 150); ,,
aSt^:="020"-KlbName+ (S)[RETRIEVECTEMP="+selObj+")()
aStr:=aStr+"COMMON(,)RETRIEVE(TEMP=
111
)()]";
,
';
;
dra wS tring( self,aS tr)
}!!
/Retrieve queries into the database*/
Def qRetrieve(selfl
aStr,Ret, attribs)
{
retquery:=true;
aStr:= new(String, 150); ,,
aStr:="020"+dbName+"@[RETRIEVE(TEMP= +selObj+")("; aStr:=aStr+"
)] ";
drawString(self,aStr);
I!
/Update queries into the database*/ Def qUpdate(selfl aStr, Upd, attribs) {
retquery:=false;
aStr:= new(String, 150);
aStr:="020"+dbName+ aStr := aStr + " and ( =
,,
@[UPDATE((TEMP= =
))<
>]
";
drawString(self,aStr); }!!
Def command (self, wp,lp) {/*only interprets the if
menuED[wp] and
menu
choice now*/
high(lp)
=
1
perform(self,menuID[wp]); else if
menuID[wp]
perform(self,menuED[wp]) else
command(self:EditWindow, wp,
lp)
endif; endif; }!!
/*Insert queries into the database*/
112
"+selObj+"
)";
)
Def qlnsert(selfl
)
aStr
{
retquery:=false;
aStr:= new(String, 150); ,,
,,
,,
,,
020 +dbName+ @[INSERT(,<"; aStr := aStr + "ENAME,Nanii>,)] "; aStr:=
drawString(self,aStr);
/Delete queries
into the database*/
DefqDelete(selflaStr) {
retquery:=false;
aStr:= new(String, 150); ,,
aStr:=
020"+dbName+''@[DELETE((TEMP= "+selObj+"
aStr := aStr
+
"
and
(
))]
";
drawString(self,aStr);
}!!
Def initMenuID(self) {
menuID
:= %Dictionary(
10->#Help ll->#close
12->#de scribe 21->#listMembers 22->#qInsert
23->#qRetrieve
24->#qUpdate 25->#qDelete
26->#qRetCommon 32->#tInsert
33->#tRetrieve
34->#tUpdate 35->#tDelete
36->#tRetCommon
113
)";
.
.
LIST 1
Ruff, D., LCdr,
USN,
OF REFERENCES
from: "The Advent of the Paperless Ship," Naval Engineers
Journal, July 1988. 2.
Duff,
C, and
others, Actor
Language Manual, The Whitewater Group,
Inc.,
1989. 3.
Newburger, B. and others, "Introduction Whitewater Group, Inc., 1989.
4.
Duff,
,
C, and
Group,
others, Actor Training
to Object-Oriented
Programming", The
Course Manual, The Whitewater
1988.
Inc.,
5.
Jamsa, K., Windows Programming Secrets, Osborne McGraw-Hill, 1987.
6.
Microsoft Corporation, Microsoft Windows User's Guide, Microsoft Press, 1987.
7.
Wu,
C.T.
Object-Oriented Programming through Actor, The Whitewater Group,
,
Inc., in progress.
8.
Zawis,
J. A.
,
Accessing Hierarchical databases via
SQL Transactions
in
a
Multi-Model Database System, Masters Thesis, Naval Postgraduate School, Monterey, California, December 1987. 9.
Emdi, B. The Implementation of a Network Codasyl-DML Interface for the Multi-Lingual database System, Masters Thesis, Naval Postgraduate School, ,
Monterey, California, December 1985. 10.
Wong, A.
,
Toward highly Portable Database System Masters Thesis, Naval ,
Postgraduate School, Monterey, California, June 1986. 1 1
interconnection of the Graphics Language for Database System the Multi-Lingual, Multi-Model, Multi-Backend Database System Over an
Hogan,
T. R.
Ethernet Network, California,
to
Masters Thesis, Naval Postgraduate School, Monterey,
December 1989.
12.
Naval Postgraduate School Technical Report NPS52-88-050, Implementation of Visual Database Interface Using an Object-Oriented Language, by C. T. Wu and D. K. Hsiao, June 1988.
13.
Fore, H. R., Prototyping Visual Interface for Maintenance
and Supply Databases,
Masters Thesis, Naval Postgraduate School, Monterey, California, June 1989.
114
14.
M.
An Implementation
of a Data Definition Facility for the Graphics Language for Database, Masters Thesis, Naval Postgraduate School,
Williamson,
L.,
Monterey, California, December 1988.
115
.
INITIAL DISTRIBUTION LIST Number Copies 1
Defense Technical Information Center
Cameron
2
Station
Alexandria, Virginia 22304-6145
2.
Dudley Knox Library Code 0142 Naval Postgraduate School Monterey, California 93943-5002
2
3.
Office of Reasearch Adiministration
1
Code 012 Naval Postgraduate School Monterey, California 93943-5002 4.
Chairman, Computer Science Dept.
1
Computer Science Department Naval Postgraduate School Monterey, California 93943-5002 5.
Chief of Naval Research
1
800 N. Quincy Street Arlington, Virginia 22217-5000
6.
Center for Naval Analyses
1
4401 Ford Avenue Arlington, Virginia 22302-0268
7.
Naval Ocean Systems Center 271 Catalina Boulevard San Diego, California 92152
8.
Curriculum Officer
1
1
Computer Technology Program, code 37 Monterey, California 93943-5000
116
.
9.
Thomas Wu (Code 52Wq) Computer Science Department
Professor C.
25
Naval Postgraduate School Monterey, California 93943-5000 10.
Maria M. Jamini-Ramirez Division
2
Head
MDS Division Data Systems Department Naval Weapons Station Concord, California 94520-5000 1 1
2
Robert Calogero Director
SEA CEL-PA
Logistics Policy and Appraisal Division
Naval Sea Systems Command Washington, D. C. 20362-5101 12. Clifford
G. Geiger
1
Deputy Chief Engineer - Logistics Naval Sea Systems Command Washington, D. C. 20362-5101 13. LT.
8B
William G. A. Sympson Sellers
5
Road
Annapolis, Maryland 21402
117
.Thesis S965 C
Ic.l
Sympson Graphic interface for Attribute-Based Data Language queries from a personal computer to the Multi-Lingual, Multi-Model, Multi-Backend Database System over an ethernet network.
23 SEP ?>
3 7 8 *
*
Thesis S965 c.l
Sympson Graphic interface for Attribute-Based Data Language queries from a personal computer to the Multi-Lingual, Multi-Model, Multi-Backend Database System over an ethernet network.