Preview only show first 10 pages with watermark. For full document please download

Graphic Interface For Attribute-based Data Language

   EMBED


Share

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.