AU693516B2 - Use of multiple applications and allocation of memory or other resources in a GUI environment - Google Patents

Use of multiple applications and allocation of memory or other resources in a GUI environment Download PDF

Info

Publication number
AU693516B2
AU693516B2 AU17013/95A AU1701395A AU693516B2 AU 693516 B2 AU693516 B2 AU 693516B2 AU 17013/95 A AU17013/95 A AU 17013/95A AU 1701395 A AU1701395 A AU 1701395A AU 693516 B2 AU693516 B2 AU 693516B2
Authority
AU
Australia
Prior art keywords
rom
windows
application
resources
class
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
AU17013/95A
Other versions
AU1701395A (en
Inventor
Bruce Peter Parker
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NI-TECH Pty Ltd
Original Assignee
NI TECH Pty Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from AUPM3875A external-priority patent/AUPM387594A0/en
Priority claimed from AUPM8698A external-priority patent/AUPM869894A0/en
Application filed by NI TECH Pty Ltd filed Critical NI TECH Pty Ltd
Priority to AU17013/95A priority Critical patent/AU693516B2/en
Priority claimed from PCT/AU1995/000068 external-priority patent/WO1995022104A1/en
Publication of AU1701395A publication Critical patent/AU1701395A/en
Application granted granted Critical
Publication of AU693516B2 publication Critical patent/AU693516B2/en
Anticipated expiration legal-status Critical
Ceased legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Description

ONI DATE 29/00h,95 APPLU. 10 17013/95 1 j Iu1 iiIIiI1I~~rr~ AW DAIL 12§104/95 PCT tNUMBIR PCT/AU95/00O68 I4 iII!I1ll1111 Ill 1itIIII,:IIIII'ltJtl (51) lntcruatlo"Al Patent CtA~s1cation (11) Intcroatlonid Publkatlon Numkrvl WO 95/22104 006P 944~, IMS, 1202 Al(43)1 1iel~i)~ A~ktoi~t: i4u31 1095 (11~08 951 (21) Irittwitlonal Application Number: PCTAAU95VW8~ (81i tksiaaatcd Stiles4: AMK A. AV. 11111 D R. BY. CA, CIL U DUI W FY [Us. Go, MIE. 1 P. KU. MG (22) International filing Date*. 14 etfuaiy 1905 (I4.02.95 KJ% KR, WKZ. LIi, LT. LU,. MV ID, MIG. M.N. MW,
MV
4 NI, NO* NZ. PL, PF, RO, Rt, SDX SU, SI, SX, T71, IT US, 17, VS, U ra .Int IAT. BEU. CIL flU, 130) Priority Data: DR. Es,, aul, (IRS. it-, tfv, me. Nu. IT. SE). oAP pMi 3875 14 Febmary 1994 (1401.94) AV, patent (11F. 111. CF., CO. CI, CM. GA, (iN, NIL, MR. NF.
PM 8698 10 Gmtce 1994 (1&010.94) AU SN, 11), TO1, ARIPO rpat.nt (RE. MW, SD, 5Z. UMG (71) Applicant CAadiniS.n~ x'p NI-TUCHlPT. Published LISMI) [AV/AIi Suite 1206, 88 Pitt Street, Sydney, itah inaaUwi jearch NSW 2000 (AUM (72) Inventor; and Inventor/Applicant (for US only): PARKER, Bruce, Peter (AAUj); 23 Karinya Place, Normanhurst, NSW 2076 (AlU (74) Agent: SPRUSON MERGUSON, G.P.O. Iln 3898, Sydney, NSW 2001 (AM), (54) Thtle: USE OP MULTIPLE APPLICATIONS AND A[LOCION OF MEMORY OR 0OTHE1R RESOURCES IN A GUI
EINVIRONMENT
Abstract A number of GUI applications. and related dat files, can be run and used at the same time. A first GUI application with a first dama file or weord is run. One or more puimary symbols (26, 28, 30, 32) representing one or more further (JVl applications are displayed.
Actuation of one or tie puimary symbols (26, 28, 30, 32) by a user causes a search for a second data file or record associated with tlie first data file or record, If an associated second data file or record exists, the further GUI application runs with the associated second data file or recod automatically loaded. On request for allocation of virtual memory or "Windows" resources in a Microsoft Windows environment, memory or resources greater than that requested are actually allocated.
wn acm) i ni "PT111tactf"Aft Iw~n U4~' USE OF MULTIPLE APPLICATIONS AND ALLOCATION OF ME14ORY OR O71hER RESOURCES IN A GUI ENVIRONMENT 7hw iventiont relates to a method of facilitating the use of a plurality of G.TJ.I.
applications, and to a device for putting this method into effect. The invention is 6 particularly useful to the field of legal work, and especially in litigation, but has uses in many other fields. A second aspect of the Invention relates to a method of allocating virtual memory and resouces in a G.U.I. or Windows environment.
The term G.U.L. is derived from the words "graphical user Interface".
However, for the purpose of this specification a more generalised meaning is required.
Thus, In this specification, a G.TJ.I. application is defined to be a program for performing a particular task, such as word processing or image manipulation, in which options and commands available to the user are displayed in graphical form, and in which options and commarids are represented by symbols which can be actuated by the i o user. The words "symbol" and "actuate" are defined below.
rFor the purposes of this specification, a symbol includes any symbol, whether alphanumeric, pictorial, or a combination of both. For example, the so called "icons" which are commonly used in many OU.J, applications can be regarded as symbols, In this spccification, the word "actuate" when used in relation to a symbol should be taken to include any form of actuation, including "clicking" on a symbol using a mouse, selecting a symbol using a keyboard, pressing a symbol on a touch sensitive screen, and even using a voice actuation program to actuate a symbol by speaking into a microphone.
A file is defined to be a named set of data stored in machine readable form, for example on magnetic media or in RAM, for use with a G.U.I. application.
A data ile is defined to be a file containing data which has been input by a user, manually or otherwise. A data ile is created and saved by a GI1.I. application once the required data has been entered by the user of the G.U.I. application. If the user then needs to view or edit the data in a particular data file, he must first instruct the G.UI. application to load the data file. Most G.U.I. applications allow the user to allocate names to data files and records (defined below) so as to allow the user to identify and select a particular data file or record at a later date.
A record is defined to be a group of related items of data in a data ile. For example, a business can, decide to store the names and addresses of its customers and suppliers using a database, In this case, the names and addresses can be stored in two separate data files called, for example, CUSTOMERS and SUPPIJERS, and each individual customer or client can occupy a separate record within each file. However, in this specification the word "record" is not limited solely to databases. Also, in this W09M2104 Pff 1AM, JO068 .214 specification, when a data file has been loaded and a particular record in that data file has been selected, that record is referred to as "loaded".
It Is well known that, ny operating systems nowadays are multi..tasking and allow a G.UI application to run. while one or more other G.AI. applications are o running in the background. However, in thlis specification, the use of the word "run" in relation to a G.U.I. application should be taken to indicate that the G.U.L. application is running in the foreground, ie. as the main application, and not in the background. This does not, of course, preclude the possibility that other G.UI. applications are running in the background, Normally, when a G.U.l. application is running in the foreground information relating to the application Is displayed to the user.
As has been stated above, the Invention is particularly usefil in the field of litigation. When a legal practitioner is involved in litigation on behalf of a client, it is often necessary for the legal practitioner to store a whole range of different types of informnaton relating to the case. If a computer is used to store the information then it i can be necessary to make use of a range of different software applications. For example, written documents can be recorded and edited using a word processor, images can be stored and displayed using a graphics package, general information relating to the case can be stored using a database, and financial information can be recorded using a spreadsheet. Each application, of course, makes use of its own data files, and, in order to keep track of the locations of files, it is usually necessary to store the files relating to different applications in separate directories. For example, all the word processing files can be stored in a directory called WORD, all the image rles can be stored in a directory called IMAGE, and so on.
Furthermore, it can be necessary to further subdivide the data files withini each 2s directory. For example, the practitioner may want to keep all iles relating to a particular client together, and may therefore wish to subdivide each directory into a number of subdirectories, each relating to a separate client. Still more subdivisions can be necessary for a variety of other reasons. For example, the practitioner can be dealing with a number of separate cases relating to the same client, and can wish to 3o form a separate subdirectory for eachi case, This can result i a large and complex directory tree structure.
In litigation, it often happens that two data files relating to different applications are closely related to each other. For example, a written document, stored in a word processing data file, can make reference to a picture which is stored as an 3s image data file. In order to read the written document the practitioner must run the word processing application and then load the data file: corresponding to the written documnent. If hie then wishes to view the picture referred to by the document, he must then run the appropriate image processing application and load the image data file corresponding to the picture. In order to do this he must first identify the file name of WO 9S5fl104 ei rertAttgow the Image data file. A cons iderable amount of time can be wasted by the practitioner In finding the file name of the Image data file. Furtherniore, even when the file name has been found, more time can be wasted by the practitioner In locating the data file on his computer system. It will be appreciated that the problem of locating the data file on the c computer systemf can be particularly acute in a case where die data files of the different applications available to the practitioner are spread over a complex directory tree structure, The invention has arisen from an attempt to overcome the above difficulties, but is applicable to a wide range of fields in addition to litigation.
h i ven io According to the Invention there is provided a method of facilitating the use of a plurality of G.U.I. applications, the method comprising running a first G.11.1.
application with a first data file or record loaded and at the same time displaying one or more primary symbols representing one or more further G.UI. applications, and, on 16 actuation of one of the primary symbols by a user, searching for a second data file or record associated with said first data file or record and, if such an associated second data file or record exists, causing the further G.J.I. application represented by said one of the primary symbols to be run with the associated. second data file or record automatically loaded.
It will be appreciated that, in the example of litigation discussed above, such a method saves the practitioner both the time Involved In searching for the file name of the Image file associated with his word processing file, and the time involved in locating on the computer the image file to be loaded Into the graphics package.
Preferably, if no such associated second data file or record exists then, on 2s actuation of said one of the primary symbols by a user, the method includes the step of informing the user of this fact.
In such a case, the method can include the step of, on actuation of said one of the primary symbols by a user, causing the further G.U.I. application represented by that primary symbol to be run with no data file automatically loaded.
Clearly, the user must have some way of specifying which data files and records are to be considered as associated with each other. Conveniently, two data files or records are considered to be associated when their names are the same, or when designated parts, for exvmple the first parts, of their names are the same.
Preferably, the method also includes, wvhile the first 0,11,. application is 3s running, displaying one or more secondary symbols representing said one or more further G.11.1. applications, and, on actuation of one of said secondary symbols by a user, running the G.U.I. application associated with that secondary symbol with no data file or record automatically loaded.
WO W3I22104 PMrIAlIo068 It will be apprecwted that this feature allows the user to switch from the first G.U.L application to one of the imbher applications regardless of whether the two applications have associated data files or records.
Preferably, the method further includes the step of, when one of the further o G.U.I. applications is running, displaying a return symbol representing tie first G.U.I.
application, and, on actuation of the return symbol by a user, running the first G.U.I.
application.
In this case. the first G.U.I. application is preferably run with a third data file or record automatically loaded if, when die return symbol is actuated, said one of the to firther applications is running with a fourth data file or record loaded and the third and fourth data files or records are associated with each other.
Clearly, die first and third data files or records can be one and the same thing, and the second and fourth data files or records can also be one and the same thing, but this need not necessarily be die case since, after running said one of the further G.U.I.
is applications with the second data file or record preloaded, the user can switch to a different data file or record (ie. the fourth data file or record) before returning to the first G.U.I. application by actuating the return symbol.
In a more sophisticated embodiment of die invention, if there is more than one further G.U.I, application, the mewod also includes, when one of the further G.U.I.
applications is running with a particular data file or record loaded, displaying one or more further application symbols representing the other further applications, and, on actuation of one of the further application symbols by a user, causing the further G.U.I.
application represented by said one of the further application symbols to be run with a data file or record automatically loaded which is associated with said particular data file or record.
It will be appreciated that this feature allows the user to "hop" directly between die various different further applications in order to view and/or edit a complete set of related data files or records.
t Ideally, the user is able to specify, at any stage during die method, the default 3o directories to be used by the G.U.I. applications (including the first G.U.I. application) when the G.U.I. applications are caused to be run by actuation of a relevant symbol.
In die example of die legal practitioner given above, this feature allows a practitioner who happened to be working on a document in a word processing application, to switch to his graphics package and create an image data file without as worrying about which directory the image data file should be saved in.
As a corollary, a further feature only allows two data files or records to be associated with each other, for example by virtue of their names, when each of the data files or records is located in a respective default directory.
WO 93/22104 PMAUM00068 it wvill be appreciated that tis feature helps to ensure that unrelated data files and records are not accidentally associated with each other.
Conveniently, the method further includes displaying a number generatig symbol and, on actuation of the number generating symbol, and input of st=r and finish s values, by the user, generating a sequence of numbers, or alphanumeric strings, between the start and finish values.
The method can also include generating a bar code corresponding to each number or string, andlor printing a label corresponding to each number or string, and/or creating a data file or record having a name corresponding to each string, This feature has the advantage of ensuring thlat human error does not arise in the creation of a sequence of bar codes, labels, or data files or records.
In the example of the legal practitioner given above, tis feature can be used to create labels for a series of consecutively numbered case files, together with associated bar codes and data files or records.
Is The invention also provides a device for carrying out the above method, comprising computing means for running the G.U.I. applications, display means for displaying said symbols and information relating to the G.U.I. applications, first input means for allowing the user to operate the G.U.I. applications, and second input means for allowing the user to actuate said symbols.
The first and second input means can, of course, be combined with each other to form a single input means, or combined with the display means, as in the case of a touch sensitive screen.
According to a further aspect of the invention, there is provided a method of allocating virtual memory in a GUI environment, said method comprising the steps of:, providing an allocation request for virtual memory; increasing said allocation request to define an extra virtual memory space for storing GUI objects; and allocating an increased virtual memory space in response to said increased allocation request when said increased allocation request is less than or equal to the amount of free virtual memory available.
According to a further aspect of the invention, there is provided a method of allocating windows resources in the Microsoft Windowso environment, said method comprising the steps of: providing an allocation request for windows resources; 36 increasing said allocation request to define a buffer for storing GUI objects; and allocating an increased portion of said windows resources in response to said increased allocation request when said increased allocation request is less than or equal to the amount of free windows resources available.
WO 95/22104 I'CT/Al95100068 .0.
According to a further aspect of the invention, there is provided a method of managing windows resources in the Microsoft Windows? environment, said method comprising the steps of: allocating an increased percentage of windows resources for an application 6 displayed in a main window, said increased percentage of windows resources comprising a nominal portion of windows resources for said application and a buffer which are contiguously arranged in relation to one another; and storing windows resources of one or more child windows of said main window in said buffer.
to Brief Description of Drawings The preferred embodiment of the present invention will now be more particularly described, by way of example only, with reference to the accompanying drawings, in which: Fig. 1 shows the main menu of a program for facilitating the use of a number 1i of G.U.I. applications; Fig. 2 shows the screen layout for a database application, when run with the program; Fig. 3 shows the screen layout for a graphics application, when run with the program; Fig. 4 shows the program's Utilities Menu; Fig. 5 shows the screen layout for tie program's Change Paths utility; Fig. 6 shows the screen layout for the program's Numbering utility; Figs 7A and 7B show allocation of windows resources in Microsoft Windows; Figs. 8A and 8B show allocation of windows resources according to an 26 embodiment of the invention; Fig. 9 is a flow diagram illustrating the method of allocating free windows resources according to an embodiment of the invention; Fig. 10 is a flow diagram illustrating step 190 of Fig. 9 in detail; and Fig. 11 is a flow diagram illustrating the method of freeing 'ndows resources 3o according to an embodiment of the invention.
Modes for Carrying Out the Invention The appendix contains program listings for implementing preferred embodiments. For the sake of keeping the number of pages in the specification to a manageable size, the code in the appendix has been compressed by replacing each hard as return by the symbol The preferred embodiment is implemented by means of a program, which will be referred to simply as the program, which can be run on a conventional computer (not shown) connected to a VDU having a screen 2.
WO 95/22104 PTWSAU5/00068 7 When the program is started a copyright warning message (not shown) is displayed on the screen 2, Once the user has read and accepted the copyright warning message, the program's main menu is displayed on the screen 2, as shown in Fig. 1.
The main menu comprises eight symbols which can be actuated by the user by means of s clicking on the appropriate symbol using a mouse (not shown), The "DB" symbol 4 represents the first, or central, application, which, in the present example, is a database application. The four symbols 6, 8, 10 and 12 on the right hand side of the main menu represent four additional applications, which will be referred to simply as the further applications for consistency with the termin y used earlier in this specification.
These four symbols are labelled "GRAPH", "SS" and "FLOW", and represent a word processing application, a graphics application, a spread sheet application, and a flowchart application respectively. For reasons which will become clear below, the four symbols 6, 8, 10 and 12 will be referred to as secondary symbols. Actuation by a user of one of the secondary symbols causes the further application represented by that 16 secondary symbol to be run. Furthermore, when a further application is run by actuating a secondary symbol, the further application is run with no data file or record automatically loaded.
When the DB symbol 4 is actuated, the central application, namely the database application, is caused to be run, and the screen shown in Fig. 2 is displayed.
This screen is essentially the same as the screen which would be displayed if the database application were running normally, i.e. without the use of the program of the preferred embodiment, except that five symbols are displayed in a strip 14 across the top of the screen 2. The rest of the screen 2, outside the strip 14, is laid out in the same way as when the database is run normally. For example, the normal pull-down 26 menus, file 16, edit 18 and help 20, are available at the top of the screen 2, and the database field names 22 are displayed down the left hand side of the data area 24 of the screen 2. The user can enter appropriate data adjacent each field name 22 in order to create a database comprising a number of records. Each record has a unique record number which is displayed at the top of the data area 24, adjacent the label "Record The database application allows the user to store information in a number of different records, with each record being divided into a number of different fields.
The five symbols 26, 28, 30, 32 and 34 in the strip 14 are labelled "WP", "GRAPH", "FLOW" and "MENU", and their operation will now be described.
Actuation of the MENU symbol 34 simply returns the user to the main menu shown in Fig. 1. The remaining four symbols 26, 28, 30 and 32 will be referred to as primary symbols, and represent the same four further applications as the secondary symbols 6, 8, 10 and 12. The difference between the primary and secondary symbols is that actuation of a primary symbol allows the user to run the further application represented by that primary symbol with a data file automatically loaded. When a primary symbol WO 95122104 Per/AU95/00068 -8is actuated the program looks to see whether there is a data ile for the relevant further application having a file mne (excluding the file name extension, e.g. DOC, TXT, TMF which is identical to the record number of the record which is currently displayed by the database application. If such a data file (referred to as an associated data file) s exists, the further application is caused to be run with the associated data ile automatically loaded. If no such associated data file exists, a message is displayed on the screen 2 informing the user of this fact. The user is then given (in a dialogue box which is not shown in the drawings) the following three choices: to return to the screen layout of Fig. 2; to run the further application with no data fie automatically loaded; or i o to automatically create an associated data file and run the further application with the automatically created data file automatically loaded.
As an example, the user may select record no. 1234 while using the database application shown in Fig. 2, and then click on the "GRAPH" symbol 28. The program then looks, in the default directory (explained below) of the graphics application, to see whether an image data file named 1234 exists. If an image file named 1234 exists, the graphics application will be run with the image data file 1234 automatically loaded, and the screen of Fig. 3 will be displayed. The image corresponding to the image data file 1234 will be displayed in window 36, and all the normal pull-down menus 38 of the graphics application will be available to the user. It will be seen, therefore, that the user can jump straight from a database record to the image associated with that database record, displayed in the graphics application. The program also provides a RETURN symbol 40, actuation of which returns the user to the screen view of Fig. 2. If the image data file 1234 is displayed in the graphics application when the return symbol is actuated, the user is returned to database record no. 1234, i.e. the original record from which the user moved to the graphics application. However, if the user switches to a different image data file before actuating the return symbol 40, the user is given the option of returning to the database record associated with that different image data file, assuming such an associated record exists, or of returning to the original database record, i.e. record no. 1234. If no such associated record exists, the user is returned to 3o the original database record, i.e. record no. 1234. Although this example has been given in relation to the graphics application, the same process applies for the remaining further applications.
It will be seen, therefore, that if the user wishes to associate a data file with a particular database record, all that the user has to do is to save the data file with a file as name which corresponds to the record number of the database record.
When the utilities symbol 42 of the main menu (shown in Fig. 1) is actuated, the utilities menu screen shown in Fig. 4 is displayed. The utilities menu screen has ten symbols which allow the user to make use of various utilities provided by the program, and described below.
WO 95/22104 PCT/AU95/00068 -9- Actuation of the "Change Paths" symbol 44 displays the Paths screen shown in Fig. 5. The Paths screen allows the user to enter, in the boxes 46, the default directory path to be used by each of the four further applications. The default directory paths perform two useful functions.
Firstly, when a further application is run by actuation of a primary or secondary symbol, the default directory for that further application is the default directory specified in the relevant box 46. Alternatively a default area of a file, such as a database file, can be specified. The user can, of course, change directory while using the further application, but if he does not change directory then the further application l0 will save files and look for existing files only in the default directory.
Secondly, when a primary symbol is actuated, and the program is searching for an associated data file, the program will search for the associated data file only in the relevant default directory, or the associated record only in the relevant default area of the relevant file. This is particularly useful, since it allows a number of copies of the program to be run on the same computer (not necessarily simultaneously), with each copy of the program being allocated a different set of default directories. It will be seen that it is, for example, possible to have two different image data files both named 1234 residing in different directories, for use by different copies of the program.
When the "Numbering" symbol 48 on the Utilities Menu is actuated by the user, the screen layout shown in Fig. 6 is displayed on the screen 2. The numbering utility is used to generate a sequence of consecutive labels, bar codes and/or database records. The user can enter a starting number of up to seven digits in the "Starting No." box 50, and an ending number of up to seven digits in the "Ending No," box 52: When the "Generater" symbol 54 is actuated, a sequence of numbers between the starting and ending values is generated. It is also possible to give the numbers a fixed prefix by entering a letter or number in the "Prefix" box 56. In addition, a letter can be entered in the "From" box 58, and another letter entered in the "To" box 60, in order to provide each number with a sequence of extensions between the "From" and "To" letters. In this context, an extension is a letter which is placed at the end of the 3o number. If the "Bar Codes" option 62 is selected by the user, a bar code will be generated corresponding to each of the generated numbers. If the "Database Records" option 64 is selected, then database records will be generated having record numbers corresponding to the generated numbers. The "View" symbol 66 simply allows the user to view the generated numbers on the screen 2, before database records, bar codes, 3s or labels are generated. The "Print" symbol 68 is used to activate a print run wvhich actually prints the labels and bar codes. The "Cancel" symbol 70 returns the user to the utilities menu of Fig. 4 without generating any labels, bar codes or database records.
The remaining options on the utilities menu of Fig. 4 will be discussed briefly below.
WO 95/22104 PCT/AI1t95110068 Actuation of the "Resource Calculator" symbol 72 displays a calculator on the screen 2 which can be used for a variety of purposes, including calculating the total amount to be charged to a client for performing a particular task.
The "OCR Capture" symbol 74 allows the user to scan documents into the word processing application, and perform optical character recognition on the text of those documents.
The "Convert File" symbol 76 allows the user to convert word processing documents from one format to another, and the "Join Files" symbol 78 allows the user to join a number of different word processing files together.
The "Audio Read Back" symbol 80 initiates any standard program for reading the text of a document aloud, and the "Voice Control" symbol 82 initiates any standard program whit allows the computer to be controlled by means of the user speaking commands into a microphone (not shown).
The "Image Capture" symbol 84 initiates the graphics application, and allows the user to scan in new images.
The "MENU" symbol 86 returns the user to the main menu of Fig. 1.
Returning to the main menu of Fig. 1, the "Print Reports" symbol 88 is used to print a number of predefined database reports. For example, the "Print Reports" symbol 88 can be used to print out all database records between two particular dates.
The "Print Reports" symbol 88 can also be used to print out information relating to the program itself, for example, a list of the default directories used by the various applications.
Actuation of the "EXIT" symbol 90 causes the program to close all open data' files, stop running all applications, and terminate the program itself. If the program comes across a data file of any one of the applications which has been amended and not saved, known as a "dirty" data file, then, as a safety measure, the program asks the user whether the dirty data file is to be saved before being closed. In addition, the user is also given the option of saving dirty files, if any, whenever the RETURN symbol is actuated.
In a further, non-illustrated embodiment of the invention, the primary symbols 26, 28, 30 and 32, and the MENU symbol 34 are displayed not only in the database application as shown in Fig. 2, but also on the screen layouts of all of the further applications. In this case, the five symbols 26 to 34 operate in exactly the same way as has been described above, in order to allow the user to jump directly from a data file in one further application to the associated data file in another further application. As above, two data files are considered to be associated if they have the same file name and are both located in the default direc "ries which are specified by the user in the screen layout of Fig. WO 922 04 PrIAUt 0006 11 Although the invention has been described above in relaion to a database application, being the central application, and a number of ftrther applications the data files of which may be associated with records of the database, other arrangements are possible. For example, in other embodiments of the invention, dat files of the central o application can be associated with data files of the further applications, or with records of the further applications. Alternatively, records of the central application can be associated with records of the further applications.
It is commonly known that many G.U.I.s, such as Windows, suffer from problems known by such terms as General Protection Faults (GPFs) or Terminal to Application errors, for example. One particular form of such faults is a memory access fault. In the Windows environment, memory acces is controlled by the memory manager files such as KRNL386.EXI, EM M386.EXE and SMARTDRV.EXE for example.
Windows environment applications programs, when run (launched). grab a 1t portion of available virtual memory space which can be any combination of RAM and disk space. Thus various applications occupy contiguous blocks of virtual memory.
Memory GPFs occur wlere aa applicatins program attempts to read or write data (i.e.
such as a data file) outside nf the allocated virtual memory space, and a collision with data already residing at that location occurs, else a virtual memory address cannot be found to which to write the data.
The technique adopted in the prior art that seeks to resolve memory access faults is to reserve a proportion of the total available virtual memory space and prohibit applications programs to reside in that space. As a rule of thumb, at least 30%, and often as much as 50% of the available memory space is held in reserve.
as The embodiment described in the appended program listing achieves a result where near zero memory GPFs occur. The three files, Romulus.exe, Romlinkddll and Romulus.dll, have effect over the memory manager file (such as KRNL386.EXE in the Windows environment). During the assignment of virtual memory space these files cause extra virtual memory space to be allocated for each applications program. The extra space is for the purposes of storing (again in the Windows environment) the window name, window class, desk class (if any) and child class. A further approximate margin also is included. This extra space is sufficient such that any "overflow' data sought to be written within the nominal virtual memory space can be accommodated, thus memory GPFs rarely if ever occur.
as A further advantage, therefore, is that the prior art practice of reserving a significant portion of the available virtual memory space need not be continued, thus the full available virtual memory space can be effectively utilised.
A further beneficial aspect of the preferred embodiment is that in the instance of a Windows applications program being consigned to the 'background', the invention WO 9022104 PTI/A UK.i00068 ftnetions to release the virtual memory space previously occupidl by the applications program, in distinction to the prior art practices of merely clf i.e. stop the running o) the ",exe" file. This has particular advantage of avoiding t. effect of 'memory leakage', Memory leakage can be described as the phenomenon whereby if the same 8 applications program is continually opened then closed, the total available system resources will unavoidably reduce with each opening and closing instance. This is so even though the applications program seeks only to occupy the same virtual memory space each time it is opened.
A number of operating systems and environments currently exist which utilise to a G.UJ. Examples of such G.U.I environments include Microsoft Windows®, OS/2 X-Windows, and the Apple operating system, all of which art well known in the art.
An embodiment of the invention is utilised in the MS Windows environment as will be described below.
The MS Windows environment incorporates a memory management system in which both random access memory (RAM) and hard drive disk space can be utilised as a single, contiguous addressable memory space for storing applications and data. The usage of a portion of available hard drive disk space in this manner is commonly referred to as virtual memory. Ideally, using this arrangement of virtual memory 2o space, a G.U.I. environment such as MS Windows should be able to store more applications and data, as well as larger size applications and data, in memory than would be the case if only RAM were utilised.
For example, the amount of free memory available immediately after loading MS Windows without using virtual memrory might be 4 MB. However, by utilising a 10 MB swapfile (that is, virtual memory), the total free memory available after loading MS Windows is increased to nearly 14 MB. Thus, a total of 14 MB of addressable memory, rather than 4 MB, is available for loading and executing both applications and data.
The size of the virtual memory space can be adjusted dependent upon available ao free hard drive disk space, as is well known in the art. Thus, for example, a 1 GB hard drive having 800 MB of free disk space available can be utillsed under the MS Windows environment to provide virtual memory up to an upper limit.
In MS Windows, each application currently loaded in memory is displayed within a window. Similarly, each instance of a data file loaded into memory for such an application is displayed within a window as well. A region of memory known as the Windows Resources is also maintained for storing information such as the name, size, position, font, etc., of each and every graphical windows object active in the MS Windows environment, as is well known in the art. The structure known as the Windows Resources of MS Windows will be denoted by capitalisation, whereas the WO 104 MIA11050060 013windows resources, which the Windows Resources is comprised of, will nlot be capitalised.
The total addressable memory space, which Includes both RAM and virtual memory, and dhe Windows Resources are controlled by a memory manager such as s KRNL38G.EXB, The Windows Resources itself comprises one or more fixed portions of the total addressab!'e memory space, which each are 64 KB In size, for storing windows resources.
Thus, each application and data file loaded into the MS Windows environment is stored in a region(s) of the total addressable memory space and dhe corresponding io window, which the application or data tils are displayed in, has windows resources stored in the Windows Resources. That is, in order for an appliC~don or a data file to be loaded into the MS Windows environment, both a portion of the total addressable memory and a portion of the Windows Resources must be allocated for each application or data file.
Is When the MS Windows environment is launched, it grabs a portion of the Windows Resources for its own configuration. Each application when launched also attempts to grab the largest possible slot available of Windows Resources to meet its allocation requirement.
In the MS Windows environment, the primary restriction limiting the number 2o of applications and/or data files that can be opened and operated safely and in a stable environment is not typically limited by the size of the total addressrble memory space, since this can be enlarged dependent upon the available free hard drive disk space, but by the Windows Resources as will be described below.
Using virtual memory space, it would appear that a large number of 26 applications and data files could be maintained in memory in the MS Windows environment by utilising virtual memory. However, this in fact is not the case as the MS Windowvs environment becomes increasingly unstable as more and more applications and data files are loaded into memory. That is, it is commonly known that many GU.L.'s, such as MS Windows, suffer from problems known as General 3o Protection Faults (GPFs). General Protection Faults are produced by a memory access fault and are strongly influenced in their likelihood of occurring by the anlount of free Windows Resources available rather than by the size of the total addressable memory available.
in early versions of the MS Windows environment, thle total size of the 36 Windows Resources was liied to 64 KB. The size of the Windowvs Resources was therefore one factor affecting the likelihood of a GPF occurring.
However, using current computer technology, this problem of the fxed size Windows Resources is partially alleviated by the usage of hardware and software memory caching and virtual memory. Computer systems using such caching allow WO 95122104 ITT/095100M 14filled blocks or portions of the Windows Resources to be "swapped out" of memory and onto the disk space of a hard drive temporarily until the particular portion of cache memory is again required, An empty block is swapped into the Windows Resources accordingly. Nonetheless, GPFs continue to be a primary limitation of the number of s applications and data files that can be loaded Into memory and have the MS Windows environment operate in a stable manner, In fact, GPFs continue to occur with little or no reduction in their rate of occurrence and are generated by improper memory accesses into the Windows Resources in which one application attempts to access a portion of the Windows io Resources allocated to another application or data file, thereby generating a GPF which not only causes the currently executing application to fail but also makes the MS Windows environment unstable. A user must therefore restart the entire MS Windows environment after a GPF occurs.
Fig. 7A is a diagram illustrating the allocation of Windows Resources 100 in the MS Windows environment for several applications and data files in accordance with the prior art.
A first application (APPi) is initiated in block 105 by double-clicking on the application icon, for example, and then opened and loaded into memory as shown in block 106. A block (or portion) 120 of the Windows Resources 100 is then allocated for first application.
The block 120 is located between addresses AO) and A2 of the Windows Resources 100 for storing the mhiin window of the first application. As is well known in the art, the amount of windows resources required by an application is typically expressed as a percentage of the Windows Resources 100, and the percentage required 2s by any particular application is heavily dependent upon the application, Thus, for example, an application for displaying computer animations may require 25%5 of Windows Resources 100, whereas a word processing application may only require of Windows Resources 100.
Another disadvantage of the prior art allocation of Windows Resourcs 100 is 3o a phenomenon known as memory leakage in which the entire block allocated for an application is not freed when it is closed, For example, if the first application is closed, the block 120 of Windows Resources 100 between addresses AO and A2 should be freed for other applications to use, however, a leakage memory 130 between addresses AO and Al in Fig. 7A (the upper address of the memory leakage block 130 as 3s indicated by a dashed line) is not freed and therefore is not available for other applications to use. Thus, for example, an application allocated 25%7 of Windows Resources 100 when it is initially loaded only releases 23%7 of Windows Resources 100 when it closes, thereby reducing the total amount of Windows Resources available for other applications. Frequent opening and closing of applications leads to a considerable WO 9S/22104 MIA-M100068 reduction in the amount of free Windows Resources 100 available duo to the existence of these leakage memory blocks (130-134).
A first document (DOCI) is opened by the first application shown in block 107, and a portion 121 of the Windows Resources 100 between addresses A2 and A4 is s allocated for the first document. While block 121 of the Windows Resources for the first document is shown contiguous with the block 120 of Windows Resources 100 for the first application, it will be apparent to a person skilled in the art that the prior art allocation method for Windows Resources 100 does not require this to be the case. In fact, Windows Resources 100 are allocated in a manner in which the largest available slot of the free Windows Resources 100 is allocated when the application or the data file is loaded and the remainder of the request is stored in other blocks if the request is not wholly satisfied. Thus, an application requiring 25% of the Windows Resources 100 can be allocated in several non-contiguous regions of the Windows Resources 100.
For example, three non-contiguous portions of the Windows Resources 100 having sizes of 15%1, and respectively, can be allocated for the application.
When the block 121 of the Windows Resources 100 for the first document is freed by closing the window containing the first document, this block is also subject to memory leakage as shown by the memory leakage block 131 between addresses A2 and A3.
A second application (APP2) is initiated as shown in the block 113, and is opened as shown in block 114. A portion 125 of the Windows Resources 100 is allocated between memory addresses A4 and A6 for the second application. Again, it will be apparent to a person skilled in the art that, while the allocation 125 of Windows Resources 100 for the second application is shown as a single contiguous block to simplify the diagram, the allocation 125 could consist of several smaller, noncontiguous portions of the Windows Resources 100.
The first application opened in block 106 opens a second data file (DOC2) in block 108, such as a document for a word processor, and is allocated a portion 122 the free Windows Resources 100 located between addresses A6 and A8.
A first chart (CHART1) opened by the second application shown in block 115 is allocated a portion 126 of the Windows Resources 100 between addresses A8 and Both portions 122 and 126 are subject to having a leakage memory 133 and 134, respectively.
A region 127 of free Windows Resources 100 (indicated by hatching) remains available between addresses A10 and All as shown in Fig. 7A.
It will be apparent to a person skilled in the art that Fig. 7A does not necessarily represent a chronological allocation of memory since a window or child window is allocated on the basis of the largest slot of Windows Resources 100 available when an application or a data file is opened. Allocation of the percentage of Windows WO 95122104 ]ICT/091100068 Resources 100 requested by an application or file is allocated on basis of the largest slots available. Thus, the windows resources for a window or a child window are typically allocated throughout the Windows Resources 100 in non-contiguous blocks.
That is, the requested windows resources are allocated by "hopping" through the Windows Resources and grabbing the largest blocks available. This method of allocating Windows Resources 100 leads to, and results in, general protection faults occurring by its very nature. Thus, while 60% of Windows Resources 100 might be free (that is, only 40% of the Windows Resources 100 are used), the MS Windows environment becomes increasingly unstable as more windows for applications and data files are opened and is prone to general protection faults occurring as the free Windows Resources 100 decreases.
Many general protection faults occur because an application attempts to overwrite the Windows Resources 100 allocated for another application. This is illustrated in Fig. 7B in which an application APP3 is allocated a block 137 of is Windows Resources 100 up to address A12 and another application APP4 is allocated block 138 which starts at address A12. A general protection fault will occur in the MS Windows environment when the application APP3 attempts to increase its allocation of Windows Resources 100 by writing into the block 139 (indicated by hatching) between addresses A12 and A13, which was allocated to the application APP4 as part of its block 138. The overwriting of the windows resources of the application APP4 by the application APP3 will produce a GPF.
Thus, the method of allocating Windows Resources 100 by "hopping around" to allocate resources is a severe limitation affecting the total number of windows, and therefore the number of applications and data files, that can be opened at any given time. Many users of the MS Windows environment therefore find it necessary to close down applications to free up Windows Resources 100 in order to load other applications and data files. Thus, the total available addressable memory space comprising RAM and virtual memory does not limit the number of applications that can be loaded, but instead it is the method of allocating Windows Resources that does this.
A user is generally alerted to a general protection fault by a dialog box appearing on the screen. The user is then required to either click an OK button to exit out of the application or click an IGNORE button to continue. Regardless of the choice, many applications frequently fail at this point. The general protection fault effectively kills the application which is currently in the foreground of the MS 36 Windows environment, although it may not have been the application that generated the GPF. While no longer useable, the .DLL module of the application remains in memory and the allocated portion of the Windows Resources 100 is not freed. This is another problem of the prior art which is distinct from the problem of memory leakage.
Subsequent execution of the application generally fails since the .DLL module of the WO 912104 JIMAU95100068 -17application already exists in memory, which is detected by the application, but which cannot be communicated with.
Thus, the memory manager of the MS Windows environment has a number of longstanding disadvantages. The method of allocating Windows Resources 100 on the s largest-slot-available basis and "hopping around" as each and every window is opened leads to fragmented allocation of Windows Resources 100. In this connection, child windows of an application are allocated according to this method, leading to further fragmentation of Windows Resources and consequently to general protection faults.
Thus, the prior art method of allocating Windows Resources 100 limits the number of applications and data files that can be opened. Furthermore, the problem of memory leakage is exacerbated by the opening and closing of windows allocated in this manner in response to users attempting to keep the MS Windows environment stable by freeing Windows Resources 100 so that other applications to be loaded.
Thus, the most serious disadvantage affecting the number of applications and is data files that can be opened in windows into the MS Windows environment is not dependent on the total addressable memory space or the size of the Windows Resources, since the Windows Resources can be swapped out using caching hardware and software, but by the prior art method of allocating Winows Resources 100 which produces memory access faults and other GPFs, The effect of using virtual memory in the MS Windows environment is that it effectively increases the running of applications so that they operate faster, but it does not allow more applications to be loaded.
An embodiment of the invention for allocating Windows Resources 100 to dramatically reduce the occurrences of GPFs will now be described with reference to Figs. 8A and 8B. A first application (APPI) is initiated in block 140 shown in Fig. 8A and is opened in block 141. A portion 155 of the Windows Resources 100 is allocated between addresses AO and A2 for the first application.
The portion 155 of the Windows Resources 100 allocated for the first application APP1 includes a nominal portion 155A and a buffer 155B shown in Fig. 8B for storing child windows, thereby dramatically reducing the occurrences of GPFs and more fully utilising the entire Windows Resources 100, as described below. The buffer region 155B of the portion 155 of the Windows Resources 155 is indicated at the upper end of the block 155 by a dashed-dotted line. Subsequently opened data files shown in blocks 142 and 143 are provided Windows Resources 100 for their corresponding windows from the buffer 155B of the block 155 of the Windows Resources 100 allocated for the first application. This is in contrast to the separate, non-contiguous portions 121 and 122 of the Windows Resources 100 of the first and second data files of blocks 107 and 108 as shown in Fig. 7A. The likelihood of general protection faults is dramatically reduced since the child windows do not have blocks of windows resources allocated by "hopping" around.
WO 95/22104 JIMAU91100068 Thus, by providing a buffer 155B in the allocation of Windows Resources 100 for an application to store window objects, the occurrences of GPFs can be greatly reduced and the Windows Resources can be utilised down to 0%51 in contrast to the prior art in which the MS Windows environment tends to become unstable when less than s 40%-60% of free Windows Resources are available, In, addition, only a single leakage memory 160 occurs for the portion 155 of the Windows Resources 100 shown in Fig.
8A in comparison to the three leakage memory blocks 130, 131 and 133 for the main and child windows of the first application in Fig. 7A.
A second application (APP2) is initiated as shown in block 148 in Fig. 8A and lo is opened in block 149. A portion 156 of the Windows Resources 100 is then allocated for the second application. A child window of the second application containing a first chart (CHART1) shown in block 150 opened by the second application is provided an allocation of Windows Resources 100 within the buffer (not shown) of the portion 156 allocated to second application. A free portion 157 (indicated by hatching) of the Windows Resources 100 remains between memory addresses A4 and AS in Fig. 8A. It will be apparent to a person skilled in the art that, while portions 155 and 156 of the Windows Resources 100 are illustrated as memory blocks stored in contiguous memory addresses, they can in fact comprise several non-.contiguous regions, In this embodiment, the windows resources requested by each application arc increased by 10% generally to provide such a buffer for storing the windows resources of the child windows. Typically, child windows require half of a percent of free Windows Resources 100. However, as mentioned above, applications require varying amounts of Windows Resources 100 and thus various size buffers (typically expressed, as a percentage of the free Windows Resources) can be allocated for each main 251 window. The buffer allocation of Windows Resources 100 for each application can be independently hard coded into the memory manager, or optionally can be independently configured using an inlitialisation file (.INI file) or other predetermined means for storing such data including a database record, etc., stored on a hard disk, a floppy disk, or other storage means such as a ROM, or can be a combination thereof.
Preferably, the Windows Resources is defragmented by the memory manager when the memory manager is loaded the first time. This can be done using conventional memory defragmentation techniques.
In this manner, the occurrences of general protection faults are dramatically reduced by providing buffers in the allocation of free Windows Resources 100 for each 3S main window. Thus, when child windows are opened for data files and subsequent launchings of applications, the windows resources for the child windows are allocated in a region that is typically contiguous with the windows resources allocated for the main window.
WO 95121104 PCIYAU95/00068 19- Utilising this embodiment of the invention, it has been possible to launch 6 or 7 resource hungry applications in the MS Windows, which reduced the free Windows Resources 100 down to nearly yet the MS Windows environment operates in a stable manner. This is in marked contrast to the prior art in which the MS Windows s environment becomes unstable and prone to general protection faults and other terminal application errors when four resource hungry applications are opened, and the free Windows Resources is reduced by 40%-60% (that is, 60% to 40% is still free, respectively), for example.
An embodiment of the invention is shown in Fig. 9 for allocating the Windows Resources 00 in accordance with Fig. 8A and 8B. In step 180, an instruction is received to open an application. This can be done by providing an actuation signal to open the application (for example, double-clicking on the application icon using a pointing device). In step 181, the memory manager of this embodiment is loaded into memory. In step 182, the memory manager obtains the memory parameters for the application. That is, in step 182, the percentage of free Windows Resources required by the particular application is determined by the memory manager. This value expressed as a percentage of the free Windows Resources can be stored in a data file.
In step 183, the memory manager finds or otherwise locates the application.
This is done by identifying the window handle of the application. In decision block 184, a check is made to determine if the particular application is already loaded into the total addressable memory space. When decision block 184 returns true (yes), execution continues at step 186 in which a the child window is initiated for the application. In step 187, the memory manager assigns a portion of the buffer a portion of buffer 155B of Fig. 813) to the child window from the allocation of Windows Resources 100 block 155) for the application. Execution then returns to the calling procedure.
Otherwise, when decision block 184 returns false execution continues at step 185 in which the parent window of the application is inititited. In step 188, the application issues a system resource request for the main window. In step 189, the memory manager intercepts the system resource request. That is, the system resource 3o request is not delivered to the memory allocation routine of the system library of the MS Windows environment, In step 190, the memory manager provides a buffer within the portion of windows resources allocated for the application.
Thus, the first time that an application is executed, a buffer is allocated in the applications allocated portion of Windows Resources 100 to store windows resources of 3s any child windows of the application. The child windows of the application can be generated by subsequently loading the application and/or by opening one or more data files within the application. When a child window is initiated, the memory manager intercepts the system resource request and assigns a portion of the buffer to the child WO 95/22104 PCTIAV95/0006 window. Thus, fragmentation of the Windows Resources 100 shown in Fig. 7A is dramatically reduced.
The substeps comprising step 190 of Fig. 9 are shown in detail in Fig. 10. In step 195, the memory manager finds the request for Windows Resources 100. In step 196, the memory manager identifies the particular application. This includes identifying the percentage of free Windows Resources required by the application. In step 197, the request for Windows Resources 100 is increased by a known factor (that is, the percentage of free Windows Resources is increased) to provide a buffer for the storage of child windows of the auplication.
In decision block 198, a check is made to determine if there is sufficient free space available in the Windows Resources to allocate the increased portion of Windows Resources 100 that includes the buffer for the application. When decision block 198 returns faults execution continues at step 199 in which a message is displayed alerting the user that the application can-iot be loaded. Otherwise, when decision block 198 returns true (yes), execution continues at step 200 in whith the requested Windows Resources 100 are allocated.
As previously described above, the requested windows resources for the application are allocated in the largest contiguous block(s) of free Windows Resources 100 available. Execution then returns to the main procedure illustrated in Fig. 9.
The procedure for freeing windows resources is illustrated in Fig. 11. In step 210, the closure of a window is initiated, which can be done by clicking on an icon or button. In step 211, the memory manager intercepts the request for closing the window that is sent to the MS Windows system library. In step 212, the memory manager closes the window, This includes shutting down the application and causing the .DLL module associated with the window, if necessary, tc, be closed, In decision block 213. a check is made to determine if the window to be closed is the last remaining window of the applicsdon. When decision block 213 returns false execution continues at step 214 in which the portion of the buffer allocated for the storing child window is freed, however, the buffer itself remains allocated to the windows resources assigned to the application. Otherwise, when decision block returns true (yes), execution continues at step 215 in which the entire windows resources allocation for the application is freed, except for the amount of windows resources frozen in the stack leakage memory), if any. After steps 214 or 215, execution returns to the calling procedure.
Furthermore, when an application terminates due to a general protection fault, the whole block of windows resources allocdted to the application, including the child windows, is closed by the memory manager. This is in contrast to the prior art in which the .DLL module of the application stays in memory. That is, when the WO 95/22104 PCT/AU95/00068 -21 application closes, the embodiment of the invention sends a kill command to the .DLL module in memory, if it still exists.
The memory manager of the present invention continuously monitors resource allocation for child windows to ensure that resources are available within the buffer of 6 the corresponding application for the child windows.
In this embodiment, the methods illustrated in Figs. 8-11 are carried out by three modules which are described in detail in the appended source code. In particular, the Romlinkd.DLL controls the usage and closing of child windows in an application.
That is, the Romlinkd.DLL module monitors the allocation and availability of free to Windows Resources that each child window has in the buffer allocated for the particular application. The Romulus.DLL module controls the handling of files between applications. Finally, the Romlink.EXE program handles all applications and operations that are directed to an application. As described above the Romlink.EXE program displays a floating button either in the top of the current window or in a tool 1s bar. Thus, the Romlink.EXE program provides the buttons for initiating and closing applications. The RomlinkEXE program is continuously monitoring when a user clicks a button, attempts to close the application, or switches amongst applications using the task list of the MS Windows environment. When any of these events occurs the Romlink.EXE program closes all child windows in the application one at a time. If the child windows are dirty, it provides a SAVE prompt to save the contents of the window. When the Romlink.EXE program ends it removes the floating Romlink button. In this embodiment, the Romulus.INI file contains the full path and file names of the applications.
The program listing contained in the appendix is the subject of copyright owned by the applicant, and may not be reproduced in any way, except for the purposes of reproduction of this specification, without the express prior written authority of the applicant.
WO 95122104 MT1095100068 22 ROHUtLUS.DI4L^ R0M3TLUS.MAK Microsuoft Visual generated buid script Do not mod,,fy' PROJ R01U)LU^ DEBUG Q PROGTYtPE CALLER \..romulus~romlink\romlink^ ARGS D LLS D -RCDEFINES -d DEBUG' R-RCDEFINLS -dNDEBUG^ ORIGIN MSVCA ORIGIN VER a 1.00^~ PROJPATH C:\_RoMuLus\RomDLL\^ usrEMFC o^ cc ciA cpp cl' cxx cl^ CCREATEPCHFLAG ^CPPCREATEPCHFLAG to^CUSEPCHPLAG CPPUSEPCHFLAG ^FIRSTC -ROMULUS.0 FIRSTCPP m4RC a ro' CFLAGS-DWDLL =/nologo /G2 /W3 /Zi /A~w /Od /D "-DEBUG" /FR /GD /Fd"ROMULUS.PDB"^ CFLAGS -R WDLL /nologo /W3 /A~w /01 /D "NDEBUG" /FR.
/GD ^LFLAGS-D WDLL /NOLOGO /ONERROR:NOEXE /NOD /PACKC:61440 /CO /NOE /ALIGN:16 /MAP:FULL- LFLAGSRWDLL /NOLOGO /ONEROR:NOEXE /NOD /PACKC:.61440 /NOE /ALIGN:16 /MAP:FULL^ LIES_-D_-WDLL oldnaxnes libw comnmdlg shall olecli oleavr mdllcew^ LIESRWOLL oldnames libw commdlg shell olecli olesvr mdlloew' RCFLAGS =/nologo^ RESFLAGS -/nologo^ RUNFLAGS DEFFILE= ROMULUS.DEF' OBJS-EXT LIES EXT li~f "$(DEBUG)" 111 CFLAGS $(CFLAGS.DWDLL)^ LFLAGS $(LFLAGS-DWDLL)^ LIES $(LIBSDWDLL)^ MAPFILEa nul^ RCDEFINES =$(D-RCDEFINES)' lelse^ CFLAGS $(CFLAGSRNDLL)^ LFLAGSa $(LFLAGSR WDLL)^ LIES a (LIBSRWDLL)- MAPFILE nul' RCDEFINES= (RRCDEPINES)' ^IendifA I f Cif exist MSVC. BND del MSVC. BUD I Iendif ^SERS ROMULUS.SER^ all: $(PROJ) .DLL $(PROJ) .BSC' ROMULUS.OBJ: ROMULUS.C (ROMULUS DEP)- (CC) (CFLAGS) (CCREATEPCHFLAG) /c ROHULUS.C^ ROMULUS .RES: ROMULUS.RC $(ROMULUS-RCDEP)- S(RCPLAGS) $(RCDEFINES) _r ROMULUS.RC^ $(PROJ).DLL:: ROMULUS.RES^ $(PROJ) .DLLt: ROMULUS.OBJ S(OEJS-EXT) $(DEFFILE)' echo >NUL ROMULUS.OBJ $(OEJS-EXT)^ $(PR0J).DLL^ $(MAPFILE)' c:\msvc\lib\+A c:\msvc\mfc\lib\+- c:\vb\cdk\+- $(LIBS)- $(DEFFILE);^ link $(LFL.AGS) @$(PROJ).CRF^ $(RESFLAGS) ROMULUS.RES @Opy $(PROJ).CRF MSVC.END^ irnplib /nowep $(PROJ).LIE $(PROJ).DLL^ $(PROJ).DLL:: ROMULUS.RES^ if not exist HSVC.END $(EESPLAGS) ROHULUS.RES run: $(PROJ).DLL- $(PROJ) $(RUNFLAGS)- $(PROJ).ESC: $(SBRS)- baemaks $(SERS)' ROMU US.C^ #include <windows3.h>^ #Include <atring.h>- #include <stdio.h>' #include <stdlib.h>^ #include <commdlg.h>' #include <diroct.h>^ #include <dlgs.h>' #include <dos.h>^ #include "remource.h"^ typedef struct LPSTR lpszClassName;^ LPSTR lpszWindow;^ HWND hwnd;^ I FUZZypARAMs;* typedef struct LPARAH lParam;^ WPARAH wParam;4 UINT msg;- HWND hWnd;'- HOOKINFO;' #def ine STAPRMHARXLEN 4' #define ENDMARKLEN S4 #def ine MAX FILENAME LEN 128 1^ #define BUFFER-SIZE 10000^ #define MAX STRING LEN 256^ tdefine MAX ITEMSSEL 100' GLOBAL VARIAB3LES HINSTANCE ghlnst!' OPENFILENAME SUBsflTuT S=EE (Rule 26) WO 95/22104 10MAU9.1100060 23 ofnr char JoinedliloNam(MXFILENAME-LN];' char RetTempfanle LXFXJLENAME LEN) char SaveFiloNane (MAX -FILENAM'E LEN]; 7char TeMPStringfMAX-STRINGLEN~p'1 char TempStorage(MXSTRING HHOO0K hi~ack NULL;" FARPROC OldHook =NULL;^ HMN ghCurrentWnd, ghRomlinkWnd, ghChildWnd;r FUNCTION DECLrAToNS int __export CALLBACK LibMain(HINSTAICE, WORD, WOR, LPSTR);^ it __export CALLBACK WEP (int);0 LPSTR _export CALLBACK RomJoinFileg(HWND)V^ UINT __export CALLBACK Open Proc(HWND, flINT, WPARAMf LPAP.AH);^ BOOL __export CALLBACK RomUnJoinFiles(HWND, LPSTR);^ LPSTR __export CALLBACK RomTampName(LPSTRt LPSTR);" LPSTR __export CALLBACK RomSaveAs(HWND);^ void FindFiles(HND);^ void AddFile(HWND);4 BOOL Joinlt(HWND);r void DisplayMes-"zge(HWND, WORD, WORD);"' HND -export CALLBACK FuzzyFindWindow(LPSTRI LPSTR);" BOOL -export CALLBACK Fuzzy-Proc(HWND, FLYZZYPARAMS FAR BOOL __export CALLBACK RomKill~ile(HWND, LPSTR);^ LibMain it -export CALLBACK Lib~ain(HINSTANCE hinst, WORD wDataSegt WORD cbHeapSizel^ LPSTR lpozCmdLiney' ghlnst -hinat;' if(cbHeapSize 1= 0) UnlockData(0);^ return J^ int __export CALLBACK WEP(int nParanmeter)^ return LPSTR _export .ALLBACK RomJoinFile(HWND hWordWnd)^ UTNT it cbftring;" char chReplaco;4 char ozFilter(256];- load file filters if ((cbString =Loadgtring(ghnst, FILTERSTRINGS,^ ozFiltor, sizeof(ozFilter))) 1- 0) chfleplace -szFiltertcbString for (i w 0; szFilterti] I- '\Of; (4 if (azFilter(i] -m chReplace)^ sz~ilter(i] 1^ )A~ ofn.lStructsize sizeof(OPENFILENAME);^ ofn.hwndowner =hwordWnd;ofn.hlnsstance -ghlnat;' ofn.lpatrlriltor szFilter;' ofn.lpstrcuntomFilter NULL;-' ofn.nMaxCuotFilter a ;4 ofn.n~iltorlndox 1W" ofn.lpstrrile= NULL; ofn.nHlax~ile ofn.lpstrFileTitle NULL;,* ofn.nHaxFiloTitle -O0; ofn.lpstrlnitialDir NULL;" ofn.lpatrTitle "Select files to join",*ofn.Plage OFN-SHOWHELP I OFN-PATHMUSTEXIST OFNFILEMUSTEXIST OFN-ALLOMULTISELECT IOFN-HIDEREADONLY I OFN-ENABLETEMPLATE 1 OFN ENABLEHOOK;"' ofn.nFileOff set NULMv' ofn.nFileExtension -NULL;^' ofn..lpstrDefExt -NULMv" ofn.lCuotData -NULL;- ofn.lpfnHook a Open Prood" ofn. lpTemplateNamei MAKEINTRESOURCE (OPENFILE if (Got~penFileName (&offl) -m NULL)^ JoinadFileName[f 0] return (joinedileNane) p UINT __export CALLBACK Open -Proc(HWND hDlg, UINT mag, WPARAH wParam#^ LPAPAM lParam)^ (A imt Selected [MMXITEM'S-SEL mt Num~el, in;^ char Buffor[128];^ switch(mag) case WMINITDIALOGI" return TRUE;^ case WH COMMAND:" switch(wParam) case ID-FILELISTt^ if(HIWORD(lPaai) -LBNDBLCLK) J^ AddFile(hDlg);^ return TRUE," )P break;^ case OPENBUTID ADD:^ Addrile(hDlg);" return TRUE;"^ case OPENBUTIDyREMOVE:" NumSel =(int) SendfllgltemMessage(hDlgt suBsnTuTE SHEE (Rule- 26) WO 95122104 WO 95fl J'CTAU95IOOO60 24 OPENCNTID -JOINLIST," LBEGETSELITEMS, MX) ITEHS-SEL," (LPARAM) (int FAR Selected);" if(NumSel an0) DisplayMessage(hD~go No FILES -TOREMOVE)' JOIN APP NAE);" else for(i a Num~ca] 1; 1 J^ SendfllgltemMessage(hDlg, OPENCNTID3COXNLIST, LB DELETESTRING," Selectedfij, J" return TRUE;^ case OPENBUTID JOIN:" if(Joinlt(hDlg)- TRUE)^ PostMecaage(hDlg, WMtCOMMAND, IDABORT# (LONG) TRUE);^ return TRUE;^ case IDOK:^ GetDlgltemText(hDlg, ZO-FILENAME, Buffer, sizeof(Buffer));" for~i 0; L latrlen(Buffer); if((Bufferfil -m 11 (Buffer(i) return FALSE;4 return TRUE;^ case pahlielp:" WinHelp(hDlgl "winhelp.hlp", HELP-CONTENTS, return TRUE;" 1" return FALSE; Allow standard processing. Allow standard processing. return FALSE;" }4 void AddFile(HWND h~ig)" char Buffer(2S61;' char FileNmf2561;4 char Directory(2561;4 int Selectod[MAX ITEMS SEL];" int NumSol, i;^ GetDlgltemText(hDlg, ID-DIRECTORYNAHE, Directory, sizeof (Directory));4 if(Directoryflatrlen(Directory) 11 I= lotrcat(Directory, NumSel =(int) SendDlgltemMessage(hDlg, ID -FILELIST, LB GETSELITEMS," HAX ITEMS SEL, (LPARAM) (mnt FAR*) Selected);^ if ,NuSel -m0) DisplayMessage(hDlg, NO FILES TOADD,^ JOIN APP NAME);" else for(i 0; 1 NumSel; Se'ldfgltonMessage(hDlg, ID -FILELIST, LB-GETTEXT," Selected[iJ, (LPARAM) (LPSTR) FileNm);^ lstrcpy(Buf for, Directory);^ lstrcat(Buf for, FileNm);^ AnsiL~ower(Buffer);4 Lf(SendfllgltaxMesage(hDlg, OPENCNTID-JOINLIST, LBPINDSTRINGEXACT," (WPARAM) (LPARAM) (LPSTR) Buffer) SendDlgltemMesgaga(hDlg, OPENCNTID -JOINLIST, LB ADDSTRIM%" 0, (LPAPAM) (LPSTR) Buffer);^ J^ OOL Joinlt(HWND hDlg)^ '.jOBAL hfuff;" LPSTR Buffer;" HFILE InFile, Out~ile;" it NuniSel, unsigned readin;" char PileName(1281;^ LPSTR TempName;" Numfel =(int) SendfllgltemMessage(hfllg, OPENCNTID-JOINLIST, LB-GETCOUNT," 0, if(NumSel 2) (4 DisplayMeasagethllg, AT -LEAST -TWO, JOIN -APP -NAME);" return rMSE;" 1 if(((hBuff GlobalAllcic(GPTR, BUFFER -SIZE)) -N ULL) 11- ((Buffer GlobalLock(hfuff)) a- NULL)) Dinplay~emsage(hDlg, NO -BUFFER, JOIN APP-NAME);" z'eturn FALSE;" /*TempPath getenv("1TEM");^ if (TempPath mNULL)" TempPath _getcwd(NULL, NULL);" TempName m tempnam(TempPath, latrcat(TempName, tt Temp~ame RomTempName ("JOIN"# if((Outrile -loreat(Temp~ame, HrILE ERROR) DisplayMessage(hnlg, NO TEMP JOXN, JOIN APP NAME);" GlobalUnlock(hfuff);" GlobalFree(hBuff);" return FALSE;^ for~i 0 I NuniSel; sendfllgltemMessage(hDlg, OPENCNTID -JOINLIST, LB-GETTEXT,- L, (LPARAM) (LPSTR) FileName);" if((InFile -lopen(FileName, READl)) HFILE ERROR){ StJBSfTUTE SHEET oRnI 26) W~O 95122104 rMAU5~t061 LOAdString(Ohnatt U&10 Ptm.YZL, Bffter, MXZTX&LU ~ltctfutt FLlNAM*)I^ I' using FJileame to star* the dialeg title LoAd~tr±ng(ghflits JOIN APP NPm# F1ailarn. M STRXVQ ZAN)t- HeusagsH3X(hDlg, BffeUr# 'llehmmi MB_0K I i{BZ.CONZXcLAM4TZIfl)j GlobalUnloak(hfluft);A alob&lFxv#(hDft)IA return FALSJ, jwri~te(Outftlef.'*-~ 4)1* 1write(Outr7loe J7ilellat l1road(Innile, sutter, DUFER1IZEI*~ Lt(readin In 0) 1write(Outrile# Bfuter, roadin)r' if(readin Barn s1UzE) breaklo* -lalosv(Zfl1)i -lwr~to(Outrila, 12)14~n~ lclcceoutlo)1A free up the butffer 6/4 Globalllnlock(huff); 1* lobalFrae(hluff);* 1ntrapy(J7oinedW±1OName, TempN=Dl),A return T1RUCA )4 BOOL __pxport CAL=fACK Re.IflJoinkrils(IrmnD hWordWnd, LPSTl Jo~nedilanam) 1GLOIBhL hfluft f1* LDSTR flufft 14FILE Wnile, Out~iloa- unsigned vesdin# 1, MarkerPost StartPost F11@Uh1GPO51A* char Ooot~ilo~aa(HAX-'XLEAETLEZ ENI 4AM~ LSN) char BaginHark[3TAl AIU(_L1E a1* BOOL InPilolfamarl if(((hfluff a lobalAllca(OPTR# DU~FltZGZE)) N=L) ~I((Bffer a GlobalLock(hluff)) =a NULL)) DinplayMeonago(hWord~nd, 11O0BUFER, J0ZZ1 ADIj1AmZ)i return F~li if ((ZnFilo a _lopen(Joined~ileafma, RlEA)) so -I EZ~jfROR) Dieoplay~oo nag@e(hWordWnd, NQ0.QPEH JOIN, J0111 At~1AE)1 lebmlUnlck(hft) 1 GlobalFreo(hfut);* return FALGEIA p arkerPon OJA XnFileNanoa LS OutFi2.o n HIFLEERRORI^ while(TarU) roadin a read(Inrilo# Butfer, BUER GZZE)IA for(i a 01 i. 4 readin; (4 if(nFilNare) ikf(BUfftrti) an Ox~a) (A DestrileName(FiLleNiwmePon ZHD~X LEJ4N 11) 01^ if(latrcnip(DotPilLIONAe, "END") on 0) OutLla 11I=.L.PfRRJA r*eiai a 01. breakl* p* also if ((OutPila a l1croat(Dost~iltla1.e# a IWPILE-,EflflOf Load~tring(gh~nst# NO OPMflVyLl Butffer# MAX .TRZNG.LEII)) latreat(Duf for, Ddoutrilouanv), LoAd~tring(ghlnott J011 PPj11ME, DantPiloNaino, 4 XJ-TlIflG.LVN) I {euagofox(hWord~nd# Bffter# tioatl'iNarne 4 MBDOK I MB .ZC0NZXChMTI0N) ;I 0lobl~fllock(h~flt)1 4 GlobalI~roe(hluff)g 4 return FALCvg 4 14 fltartran a I. 1j'4 znFle~NameS PiloNam*Pos44,A if (1WileNamsPom vii.of (Destriloafm) Fiile~amOPos aiz00f(DastPilNam) It* 1A p' also (4 it(fluffortil IBogin~ark[MarkerPos)) (A if (MHrkvrPoa a 0) U& MAfTHARI _Ltl) Bu7rmnSZu)) ue(nio nuFF)~flBim, 1)1 bremak 1 HarkarPom++,A else MarkerPon 01A I i(MarkerPos an SA jL X tE) Harkarl~na ZnrIleumme, a TRUE;-% FilesamePos a 0Or if(toutrlO in IFPIL1.-ElflO) &A STAflTXA3K Lw') :1 tartPom)) 4 )write(cutpilft, StJBSMrIM SHMr (RUIG WO OVIII04 PMAM100069 26 AntufferStartroMJ,* L TATKXLEN StartPon _10102e(OUtlil*) I )A rA r if((ine~oaze) &(outril* In HIFLEERROR) A& (i StAtPoa))A* l..writs(Outlile, &Buff arf tartPoE, I L startrou), 1 &tartPos a 01A if (readin BUMfR SZE) brsakA )4 lcloue(OUt~ile) j* _lo00u(XnFil0) ;A OlobalUnlock (huf I OlobalFras (hfluf f) I return TRUE;A LPSTR __export ChLUfACK llomSavehu(RIWN hWordWnd)A* (A1 UXNT i, cbfltringlA, char chfloplacoA* char azIilter(256117A if ((cb~tring a Load~tring(qhznat, LFXLTEflSTR!NOSt4 azT, 1 jtor, sizeof(azirnterm) In 0) chfloplace n nzrilter~cbString 111A for (i 0 uzirilterm in \o0t 1't) (A if (azirilterli] son Chleplace)A an:FJltorli) #\O01" )4 ofn.lStruct~lizo 9izeof(OPEN1ZNEIA),A ofn~hwnd~wnar hWordWndp' ofn~hlnstanco a ghznutIA ofn.lpntrriltar -azileI ofn.lpatxCuutooFAilter a NULL;* ofn.,nHaxCurjt~iltar a OIA ofnonriltor~ndox A ofn.lpstriloa Saveilelaro;* ofn~n~axPilo oiz~eof(Savo~ilo~ame);A ofn~lpotrFAiloTitlo o HIULL;^ of n.Max~il0Titlc a 01A ofnolpotr~nitialDir ~?VLL:A ofnolpstr~itlo a "Save ofn.Fiagon OFH.'flOWIIELP I OFN-PATIMUSTEXIST I OFUUDEREADONLY I- OFN -OVERWRZTEVAOHPT; A ofn.nFiloOffunt a HULL i' ofn.nFiloExtension a NULLIA ofn.lpatrDefExt aNULLI" ofn.lCuutData a HULLI" ofn.lpfnilook NULL;" ofn.lpTomplateNanoa NULLI* 3.f(Gotfave~ileNanie(Coft) =a hULL)4 6av@PiloName(O' w 0;" return(SavsFilaNm*~);* JA void Diuplay~es sage (HwHD hWnd, WORD wID, W4ORD tZD)4 (4 char Mesna~je[MAX -STRIZNG LtN)1 char TitlOEHAX flTRING LEN);" LoAdString(ghlnst, WZD# Massager HAX STRING LoadString(ghnzt, tID# Title, MAX -STRING Manuagoilox(hWnd, Moimage, Title, M130K I HD3ICONTEXCLAHATIOH) I" )A MMU -export CALLBACK FuzzyFindWindow (LPSTR 1puz~laausame, LPSTR lpazWindow)" FUZZYPARAMS Puzzyftranw;" FuzzyParaumu~lpazClauuName a (lpxzClaauNamatO] arn NULL i lpnzClaauNane;" ruzzyParaxnu.1pu:Window (1pazWindow(0] an NULL i lpuzWindow;" ruzzyParas.hWnd a NIILLIA EnumWindowu(Fuzzy Arc MDOD ((UZPRH AR *)&ruzzyParamu));A1 return FuzzyParammehWnd;" BOOL __export CALLBACK ruz:y~proc(HWND hWnd, PUZIPPAMS PAR *lprzzyParaznh)A (4 char fluffnft STAZN0 LEN];" if(lpFI1::-yParamu->lp-.clasuh~ame Its NULL) (4, GetClahuNaMe(hWnd, Buffer, x LSRXNG LEN);^ if(latromp(Buf for, lpFuz-yParAinh- >*lpuzClaA#Nama) 1- return (1)1A )A if(lpFuztyParams->lpnrWindow IN NULL) (At CetWindowText(hWnd Bluf fer# nioof (Buf for) if( fotrntr(Buf for, lpFuzzyParama->lpsrWindow) wtNULL) A return lpFuzzyParams->zhWnd hWnd; Araturn(0)l JA BOOL __export ChLLBACK RomKillrile(HWND hWnd# LPSTR FileName)A (At latrcpy(Tempgtorage# Fileftme);" while (XnWindow (hWnd) A Yield 1 if (remove (TeinpStorage) on 0) A return TRUE I return FALSE;" A)*/A SUBSiUTE SHEET (Rn1t 26) WO 95122104 PCTIAM/00068 27 LPBTR -export CALLBAC1K RomT~impName (LPSTR Prefix, LPsTR Ext) A char *TompPatht TempPrufix(6];" mnt Num, it, NumPon;^ rempPath agetsnv("TEMP")j^ if (TampPath am NULL)^ TempPath a getcwd(NULL, NULL);" 1ntrcpyn(TempPrefJ~x, Prefix# Isltrcpy(TempString, TempPath);" if(TempString( latrlen(TempStrilg) 13 In lotrcat(TompString, "\"."letrcat(TompString, TompPrefix)1" Nutidos lutrlen(TeMpString); In .trcat(TernpString, "0000. H) jA latrcat(TompString, Ext);" for(Nuni 01 Nuni 10000; Num++) waprintt(TempStorage, 11%04d", Num);- for(J. 0; 1 41 TempString(NumPoU i3 u TampStorage(iJ;"* if(dou -findfirt(TmpString, A kARCH I _AHIDDEN -NORMAL I- _ARONLY I _ASUBDXR I ASSTEM _AVOLID, NULL) 1- 0) breakl" J^ if(Num amn 10000) TempStringtOl a NJq UL return ROMULUSIDEF" LIBRARY Romulus" DESCRIPTION 'Romulus DLL extra functionality for Romulua'" EXETYPE WINDOWS- STUB 'WINSTUB.EXE'" CODE PRELOAD MOVEABLE DISCARDABLE" DATA PRELOAD MOVEABLE SINGLE" HEAPSIZE 4096^ EXPORTS^ WEP @I PESIDENTNAHE^ RomioinFilau 02- OpanyProc 03^ RomUnJoinFilQI 04^ RomTempNamm W5 RomSaveA0 06" Fuzzy~indWlndow Q7" Fuzzy .Proc Q8- RomKillFila 09^ JoINRC.H^ #define OPENFILE-DB #define FXLTERSTRINGS 100" #define JOIN-APP NAHE 110^ #define CONV APP NAME Ill^ #define JOIN-TITLE 112^ #define SAVEAS TITLE 113" #define NO FILES TOREMOVE 120^ #define NF-ILES TOADD 121^ *define AT LEAST TWO 122^ #def ine NO-BUFFER 123^ #define NO TEMP JOIN 124^ #def ine NO OPEN JOIN 12S^ #def in. NO OPEN FILE 126A #def ine TEMP ENV-VAR 130^ #define TEMP FILE MASK 131" #define START-MARK 132^ #dafino END -MARX 133A #define COMPLETED-HARK 134^ #fdefine ID-FILELIST 1120^ #define ID-DIRECTORYNAME 1088 #dofino ID FILENAME 1152" #define OPENCNTDJOINLIST 100^ #def ine OPENDUTID ADD 101^ #dofine OPENBUTID REMOVE 102^ #define OPENBUTID JOIN 103^ ROMLINKD*DLL^ ROMLINKD.MAK^ Microsoft Visual generated build sicript -Do not modify^ PROJ a ROHLINXD" DEBUG a 0^ PROGTYPE 1"I CALLER a ARGS DLLS a DURCOEFINES a -d DEBUG" R RCDEFINES a -cINDEBUG' ORIGIN a HSVC" OAIGINjJERa 1.00" PROJPATH C-d:RO4ULUS\LINrDLL\- USEMFO 0" CC CPP at l- CX c2." CCREATEPCHFLAG CPPCREATEPCIIFLAG CUSEPCHFLAG CPPUStPCHFLAGa FIRSTC ROMLINKD.C "FIRSTCPP RC rc^ CFLAGS D WLL -/nologo /G2 /W3 /Zi /ALw /Od /D "-DEBUG" /r-R /GD /rd"ROHLIND.PDBrv* CFLAGSRWDLL a/nologo /W3 /AMw /01 /D "UDEBUG" /FR lCD LFLAGS-D WDLL =/NOLoGO /OHERRORtNOEXE /NOD /PliCKC:61440 /CO /NOE /ALIGNsl6 /MAPtFULL- LFLAGS-RWDLL -/NOLOGO /ONZERROR:NOEXE /NOD /PAC1KC:61440 /NOE /ALXGN:16 /MAPzFULL' LIBS-D WDLL oldnaxnen libw corndlg shell olecli olesvr ldllcew^ LIDS R WOLL m oldnamas libw SUBSfTJUh SHEET (Rule 26) WO 9.5/22104 Par/AIM/00060 28 commdlg shell olecli olessvr umdllcewm RC FLA GS /nologoA RESPLAGS w /nologO^ RUNFLAGS w DEFFILE =ROMLXNKD.DEFI* OBJS EXT ^LIBS EXT hf "$(DEBUG)" on CELAGS $(CFLAGS D WDLLp LFLAGS -$(LFLAGSDWDLL)4 LIBS w $(LI3S-D-WDLL)- HAPPILE anul RCDEFINES =$(DEPINES)^ 191W& CFLAGS $(CFLAGS-RWDLL)' LFLAGS u$(LFLAGS-RWDLL)A LIBS $(LZSR-WDLL)4 MAPPLEnulA RCDEFINES a RCDEFINES)4 lendif lijf if exist MSVCoBND del MSVC.BNDjA lendif A SBRS ROMLINKD.SBR" ROMLINKO-DEP all: $(PROJ).DLL S(PROJ).BSCA ROMLINKD.OBJ: ROMLINKD.C (ROMLINiRD-DEP)-' (CC) (CFLAGS) (CCREATEPCHFLAG) /c ROHLINKD.C^ $(PROJ).DLL:: ROMLINXD.OBj $(OBJS-EXT) $(DEFFILE)^ echo >NU @<$(PROJ).CRF- RC-..INKD.OBJ +A $(OBJS-EXT)- $(PROJ).DLL- S(MAPFILZ)c:\Msvc\3.ib\+^ c:\mavc\rnfc\lib\+^ $(LIBS)^ $(DEFFILE),A link S(LFLAGS) @$(PROJ).CRFA $(RESFLAGS) implib /nowep $(PROJ).LIB $(PROJ).DLL^ run: $(PROJ).DLL^ $(PROJ) $(RUNMLGS)- $(PROJ).BSCt S(SBRS)^ bacwake $(SBRS)^ ROMLINKD.C- #include <windows.h>^ #include iiltrilg.h>A #include <atdio.h>^ #includo 4atdlib.h>^ #include <commdlg.h>^ #include <direct.h>^ #incl.ude <dlgs.h>' #include 4dom.h>^ GLOBAL VARIABLES HINSTANCE ghlnst;A HHOOK hliook NULL;^ HMN ghCurrentWnd, ghRomlinkWnd, ghChildWnd;^ HWND ghFTParent;^ HHOOK hHookCBT NULLr FUNCTION DECLARATIONS mt -export CALLBACK LibHain(HINSTANCE, WORD, WORD, LPSTR)I^ int _export CALLBACK WEP(int);- BOOL _export CALLBACK RomSet(HWND, BMWND BOOL -export CALLBACK RomExtraSet(HWND) ;A void __export CALLBACK Romfte(void);A void __export CALLBACK ItFunc(int, WORD, DWORD);A void eqxport CALLBACK RomSetChildWindow(HWND)jA int __export CALLBACK UsFunc(into WORD, DWORD);'^ LibMain int _export CALLBACK LibMain(HINSTA1,CE hinot, WORD wDataSeg# WORD cbHaapSizo#^ LPSTR lpszCm0dLino)^ ghinat hinst,*A if(cbHeapSize 3- 0) UnlockData(0)1A return 1i'^ it _export CALLBACK WEP(int nParaineter)^ return 1;4 BOOL _export CALLBACK Romset(HmN hWnd# HWND hflWnd)A J^ ghCurreritWnd a hWndA ghflomlinkWnd hRftd;A ghChildWnd NULL;^ h~ook SetWindowsHookEx(WCALLWNDPROC, (HOORPROC) (PARPROC) ItFunlo, ghlnst, NULL/*GetWindowTak(h~nd)*/);A if~hiook) return TRUZ;- return FALSE;^ )A BOOL -export CALLBACK RomExtraSt(HWND hWnd)^ (A gjhPTPaxent a hWnd;if((hHookCBT aSetWindowsliookEx(WILCBT, (HOOKPRIOC)(FARPROO)UaFunc, ghlnatt NUL))--NULL)' return FALSE;A return TRUE;^ void -export CALLBACK RomPree()^ if(hiook) UnhookWindowsHookgx(hliook);^ if (hHookCBT) UnhookWindowsHookEx(hHookCBT)*^ hliook NULL;^} void _export CALLBACK ItFunc(int nCode, WORD wPaamf DWORD lParanx)- structure used for CallWpriProc struct tempStruct LONG lParan;^ WORD wParam;- WORD mesage;4 HWND hwndrA PAR lptsParamStruct;^ if( nCode 0 St)BsTSTMr sHEmI "1i 26) WO 95/22104 WO 952104PMAV95/00068 29 lpteParamStruct a (0truct tompStruct PAR iParam;0 if (lpteParamStruct- >message -w WMNCDESTROY) if(lptaParamstruct->hwnd ghCurrantWnd)^ PostMesaage(ghRomlinkWnd# WH -USER SO, 0, else if(lptsPaxamSt-Wct->hwnc1 ghChildWnd) Post~aasaga(ghRomlinkWndt WHkUSER 51, 0, ghChildWnd NULL;' 14 1' CallNextHookEx(hHook, nCodo, wParam, lfaram);' returnl,' void __export CALLBACK RomSatChildWindow(HWND hWnd)' ghChildwnd w hwnd;' int __export CALLBACK UsFunc (int nCode, WORD wParam, DWORD lParai)^ LPCBT CREATEWND CreatefndParanir HWND hWndApp;^ if(nCode HCBT -CREATEWND) V' CreateWndParan (LPCBT-CREATEWN) lParam;' if(CroataWndParani->lpCs- >hwndParent ghFTParent) hWndApp aGetParent(ghFTParont);4 PostMeasaga(ghFTPaxent, WH{KDIMAXIHIZE, wParam, PoatMeosage(hWndApp, WU-COMMAND, Oxl3b, PostMessaga(hWndApp, WUCOMMAD, 0xI33p 1 return (int) CallNextHookEx(hHookCBTf nCode, wParam, iParam);' ROHLINKD.DEF^ LIBRARY roznlinkd' DESCRIPTION 'Romuluo DLL. copyright 1993 1994 Ni-Tech Pty Limited. Patent Pending."' EXETYPE WINDOWS^ STUB 'WINSTUB.EXE'^ CODE PRELOAD HOVEABLE DISCARDABLE' DATA PRELOAD HOVEABLE SINGLE^ M-APSXZE 4096' EXPORTS^ WEP @1 RESIDENTNAME' ROtnSet RomExtraSat W3 Rom~ree ItFunc RomSetChildWindow W6 Usluno 97' ROMLINK.EXE' ROHLINK.HAK4 Nicrosoft Visual generated build script -Do not modify^ PROJ mROHLINK* DEBUG a 14 PROGTYP4 04 CALLER a' ARGS DLLS D-RCDEFINES -d-DEBUG' R RCDEFINES -dNDEBUG' ORIGIN H SVC' ORIGIN -VER a 1.00^ PROJPATH a C:\AFILES\ROMLINK\' USEHFC 14 CC ci' CPP cl^ CXX cl' CCREATEPCHFLAG ^CPPCREATEPCHFLAG CUSEPCHFLAG CPPUSEPCHFLAG a FIRSTC aROMLINK.C- FIRSTCPP RC w rc^ C MAGS D WEXE -/nologo /W3 /FR /G2 /Zi /DDEBUG /Od /AM /GA /Fd"ROMLINK..PDB"^ CFLAGS -R -WEXE /nologo /W3 /rR /01 /DNDEBUG /AM /GA4 LPLAGS-DWEXE /NOLOGO /ONERROR:NOEXE /NOD /PACKC:61440 /co /ALiGN:16 /STACK:102404 LFLAGS -R WEXE /NOLOGO, /ONERRORtNOEXE /NOD /pACKC:61440 /ALXGNtl6 /STACK:10240^ LIES-DWEX a mafxcwd oldnames libw commdlg shall olooli oleavr niliboew' LIESRWEXE w mafxcw oldnames libw commndlg shall olocli oleavr mlibcaw' RFL-AGS -/nologo' RESPLAGS /nologo' RUNFLAGS 'g DEPFILE- ROH'LINK.DEF' OBJS-EXT a* LISEXT aROMLINXD.LIB lif "$(DEB3UG)" t~s o"- CFLhGS aS(CFLAGSDWEXE)' LFLAGS $(LFLAGSDWEXE)' LIES -$(LIDSDWEXE)' HAPFILE nul^ RCDEFINES (D -RCDEFINES)' lelse4 OFLAGS (CFLAGSRWEXE)^ LFLAGS S(LPLAGS-RWEXE)' LIES S (LIBS-RWEXE)^ MAPPILE t: nul' RCDEFII4ES ca $(RRCDEFIN4ES)^ lendif' lif [if exist HSVC.BND del HSVC.BNDI' lendif' SERS ROHLINK. SBR' ROHLINK -DEP -c:*\a,_fileu\romlink\romlink.h c:\afiles\romlink\romlrC.h' RomLI:NKD DEP alit $(PROJ).EXE $(PROJ).BSC4 SUBsfTuTESHEET PRik 26) WO 95122104 WO 9512104 I cT/AUV95/0O68 30 ROHLZNK.OBJs ROMLXN1K.C $(ROHLINI. DEP)- $(CFLAGS) $(CCP.EATEPCHFLAG) /c ROHLINK.C4 $(PROJ)*EXE:s ROHLXNX.oBJ $(OBJS-EXT) $(DEFFILE)- echo >'NUL @<$(PR03).CRP" ROMJXU1K.OBJ +A $(OOJS-EXT)A $(PAOa).ZXE- $(MAWPZLE)c:\mavc\lib\+- c:\mavc\mfc\lib\+" ROHLXNKD.LIB+- (LIDS) (DEFFILE)- link INLFLAGS) 0$(PROJ).CRF^ $(RESFLAOS) run: $(PROJ).EXE" $(PROJ) $(RUNFLAGS)" $(P1ROJ).DSCs $(SBRS)" bscmake /o$G $(SBRS)^ ROZLLINK.Cft #include "fomlink.hll" HANDLE ghlnst;- HWND ghWnd, ButWndf ghAppWndl^ char AppName(200];" char MainClaaa(MAX CLASS-LEN):^ char DaakClasu[MAX _CLASS LEN];^ char ChildClass[MAX CLASS.LEN);" BOOL SpecialClose;" BCCL Hookset FALSE, FTHookSet FALSE;^ int gAppID;" DCCL gLeaveOpen;^ int PASCAL Win~ain(H AND LE hlnstanco, HANDLE hPrevlnstance," LPSTR lpszCmdLine, int nCwdShow)4 WUDCLASS Claus;" MSG mug;^ RECT rc; if(hPxevlnhtance) GatlnstancaData(hPrsvlnotanca, (BYTE &Butwnd, 0izeof(HWND));^ SatFocus(ButWnd);^ return FALSE;^ qhlnst hlnatancel^ LoadString(ghlnot, APP-AME, AppName, Gizaof(AppName));" Claso.otylo NULLI" Class..lpfnWndProc a (WNDPROC) Main Proc;" Class.cbClsExtra a 0;^ Class.cbWndExtra Class.hlnotance w ghlnst;- Clauu.hlcon =NULL;^ Claus.hCursor Loadeurvor (NULL, IDC-ARROW);" Claos.hbroackground =NULL;^ Clasu.lpszMenuName a NULL;" Class.lpszClassName a "RomlinkclO";^ if (IlfegisterClass(AClasu)) return FALSE;^ GetWindowRect (QetDeoktopWindowoI ghWnd CreateWindow(^ "RomlinklO",^ "Romulus"#^ WS OPUp*^ re.right RON WIN WIDTH, rc-bottom ROM-WIN-HEIGHT," ROM-WIN-WIDTH, ROH-WINHEIGHT," N ULL,#A N ULL,^ ghlnst,^ NULL); if(ghWnd -N ULL) return FALSE; 4if(lpszCmdLine[0j NULL)- return FALSE;- Lf(HookSotup(lpuzCmdLin0) anFALSE)" return FALSE;" ButWnd CraatsWildow ("B3UTTON", "Romulusll," DS PUSHBUTTON I WS-CHILD jWS-VISIDLE WS-TABSTOP,- 0, ROHNDUT-WXUTH, ROM-BUT-HEIGHT, ghWnd,^ ROM BUTTON-,ID# ghrInstt N ULL setWindowPos(ghWnd, H WND -TOPMOST, 532p 0, 70, /*SWP-NZOVE 5WPNOSIZE /*SWP-DRAWFRAME) ShowWindow(ghWndo SW-SHCWNOACTIVATE);" UpdateWindow(ghWnd);- whila(GatMeuuage(&mug, NULL, 0, 0)) TranslateMmusa'e (&mug) Diupatch~eumage(&mug);" return mag.wParal" 1300L Hook~itup(LPSTR AppWindowane)" (A char Buffort2C00 m NULL HWND DeskWnd; FARPROC Proc; ghAppWnd a NULL;" if (latremp (AppWindowName WORD WINDOW NAME) -a0) {"ghAppWnd uzzyrindWindow (WORD MAIN -CLASS, AppWindowName);" gAppID -WORD Istrapy(MainClass, WORD MAIN -CLASS):" Istrepy(DeukClau 'WORD-DESK CLASS);" 3strcpy(ChildClace, WORD-CHILD CLASS); GetPrivateProfileString (LEAVEAPPSOPEN -SECTION, WPINI-ENTRY, Buffer, uizoof(Buf fer), XI NAME);^ SpecialCicue w FALSE;" else sIJBslTuTE SHEET (R&b 26) WO 95/22104 rcrIAV95100060 -31. if (lstrcmpAppWindowName, WOP.DPERJECT WINDOW NAM) 0) ghAppWnd Fuzzy~iidWindow (WORDPERFECTJIAIN-CLASSI AppWindowNam);" gAppID WORDPERECTID;" lsjtrcpY(HainClass, WORDPERIECT-HMAIN CLASS);latrcpy(DeskClass, WORDPER.FECT-DESK CLASS);1 intrcpy(childClas WORDPERFECT-CHILD-CLASS); 1"oetPrivatoProfileString(LEAVEAPPSOPEN-SECTION, WPCXNI-ENTRY, 11-r Buffer, sizoof(Buffer), INI NAME);" SpecialClose PALSE;" else if(lotrcmp(AppWindowName, AHIPRO-WINDOW-NAME) 0) ghAppWnd -FuzzyFindWindow(AMIPRO MAI"; CLASS, AppWindowfanme);^ gAppID" AMIPRO-ID;" latrcpy(Hainolans, AMIPRO-MAIN CLASS); lvtrcpy(D09kCais, AHPODESK-CLASS);^ latrcpy(Childolaos, AMIPRO CHILD CLASS);^ GetPrivateProfileString(LEAVEAPPSOPEN SECTION, WPI1NI-ENTRY, "',Buffer, eizoof(Buffer)# INI -NAME);" SpecialClooe FALSE;^ a" lso if(lstrcmp(AppWindowNaue, EXCEL WINDOW NAME) 0) {"ghAppWnd FuzzyFindWindow(EXCEL MAIN CLASS, AppWindowfame);^ gAppID EXCEL -ID;" Intrcpy(MainClans, EXCEL MAIN CLASS);" lstrcpy(DoukClaso, EXCEL DESK CLASS);^ lotropy(ChildClaas, EXCEL-CHILD -CLASS);- GotPrivatoProfiloString (LEAVEAPPSOPEN SECTION, SPREAD INI-ENTRY, #too' Buffer, nizeof(Buffer), XNI NAME);" SpecialClose FALSE;^ else if(lstrcmp(AppWindowNama, LOTUS123-WINDOW-NAME) mm0) ghAppWnd FuzzyFindWindow(LOTUS123 MAIN CLASS, AppWindowName);^ gAppID =LOTUS123ID;" letrcpy(MainClaos, LOTUS123-MAIN-CLASS);" latrcpy(DeukClaos, LOTUSl23-DESK-CLASS);^ lstrcpy(childClass, LOTUSl23 CHILD CLASS);" GotPrivateProfileString (LEAVEAPPSOPEN -SECTION, SPREAD INI.ENTRY, Buffer, sizoof(Buffor), INI NAME);" SpecialClose FALSE;^ I a loe if(lutrcmp(AppWindowNamot QPRO -WINDOW-NAME) 0) ghAppWrad Fuzzy~indwindow (QPROMAIN -CLASS, AppWindowName);" gAppID QPRO ID;" lotrcpy(MainClauss QPOMAIN-CLASS);- lctrpy(DeskClass, QPROjDESKCLASS)"^ istrcpy(ChildClass, QPRO-CHILD -CLASS);" GetPrivateProfileString (LEAVEAPPSOPEN SECTION, SPREAD-INI-ENTRY, "I Buffer, uizoof(Buf for), INI NAME);" SpecialClose a FALSE;" )4 eloe if(lstrcmp(AppWindbwNamo, ABC WINDOW -NAME) -w 0) (4 ghAppWnd z FuzzyFindWindow(A8C MAIN CLASS, AppWindowfamo);^ gAppID mABC ID;" lmtrcpy(MainClassr ABCMHAIN-CLASS)14 lntrcpy(DenkClaon, ABC DESK CLASS);" latrcpy(ChildClans, ABC-CHILD CLASS);" GetPrivateProfileString(LEAVEAPPSOPEN SECTION, CHART INI-ENTPX, "'"Buffer, uizoof(Buffer)p XIII NAME);^ SpecialClose TRUE;" J^ else if(latremp(AppWindowName, PSTYLER WINDOW NAME) 0) f^ ghAppWnd PuzzyFindWiridow (PSTYLER MAXN CLASS, AppWindowfame);" gAppID -PSTYLERID"1 SUBSITUE SHEET (Rul 8VO 95122104 WO 95f22104 '1195/0(1(68 32 letrcpy(MainClaaso PSTYLER MAIN CLASS)1 I stropy(DemkClass, PSTYLER DESK CLASS);^ lstrcpy(ChillClaeso PSTYLER CHILD CLASS);' GetPrivateProfileString (LEAVEAPPSOPEN SECTION, VIEWER INI-ENTRY, Buffer, sizeof(Buffer), INI-NAE).' SpecialClose aTRUE;^' els if(latrcmp(AppWindowName, FTCOLOR-WINDOW-NAME) 0) ghAppWnd FuzzyFifdWifdow(TCOLOR MAINCLASSf AppWindowNamm);^ gAppID aFTCOLOR3ID;^ latrcpy(MainClanu, FTCOLOR MAIN CLASS);.' lotrcpy(Dask~lass, FTCOLOR-DESK-CLASS) l.ztrcpy(ChildClaus, FTCOLOR CHILD CLASS);^ GetPrivateProfileString (LEAVEAPPSOPEN SECTION, VIEWER INI-ENTRY, Buffer, sizeof(Buffer), INI-NAME);' SpecialClose 0 TRUE;^' 1* start special hook for FT Color DaskWnd NULL;.' Proc MakeProclnatance (Desk -Proc, ghlnot);.' EnuxnChildWindowo(ghAppwnd, Proc, (DWORD) ((HWND FAR *)&DeskWfld));4 FreeProclnotance(Proc);' if((DeskWnd -a NULL) 11 ((FTHookSat RomExtraSet(DeskWnd)) =m FALSE))^' return FALSE; 14 oleo if(latrcmp(AppWindowNane, WORDSCAN-WINDOW-NAME) =m0) qhAppWnd FuzzyFindWindow( WORDSCAN MAIN CLASS, AppWindowName);' g~ppfl WORDSCAN-ID;' lstrcpy(MainClaser WODCNMAIN-CLASS);'4 /*lstrcpy(Deok1.laos, WORDSCAN DESK CLASS)I;*/.' latrcpy(ChildClanu, WORDSCAN CHILD (.LASS);^ GetPrivatoProfileString (LEAVEAPPSOPEN SECTION, VIEWER-INI-ENTRY, Buffer, aizoof(Buf fer)# INI-NAME);^ SpecialClose FALSE;^' J^ eloe if(lstrcmp(AppWindowName, OPENIMAGE -WINDOW-NAME) -m 0) {A ghAppWnd in FuzzyFifldWindow(OPENIMAGE MAIN CLASS, AppWindowame);' gAppID =OPENIMAGE ID;.' lstrcpy(MainClans, OPENIMAGE MAIN CLASS);: lstrcpy(DerakClass, OPENIMAGE DESK-CLASS);.' latrcpy(ChildClaau, OPENIMAGE CHILD-CLASS);^ GetPrivateProfileString (LEAVEAPPSOPEN SECTION, VIEWER INI ENTRY, Buf for, sizoof(Buffer), INI-NAME);' SpecialClose FALSE; e lse if(latrcmp(AppWindowName, ISYS-WINDOW-NAME) -a 0) ghhppWnd PuzzyFifldWindow(ISYS MAIN-CLASS, AppWindowNam);' gAppID ISYS ID;.' lutrcpy(MainClass, ISYS M AIN CLASS);.' GetPrivateProfileStzing (LEAVEAPPSOPEN SECTION, TR INI ENTRY, ",'Buffer, simeof (Buffer), ININAME);' alse if(lotramp(AppWindowName, ISYSUTILS WINDOW NAM) "a 0) ghAppwnd Fuzzy~indWindow(ISYSUTILS MAINCLASS, AppWindowNam).' gAppID ISYSUTILSID;' this app is always closed J. else if(lstrcmp(AppWindowNane, AVERY-WINDOW NAME) 0) ghAppWnd is FuzzyFindWindow (NULL, AppWindowNlfe);.
gAppID AVERY this app is always closed */'}'else if (lstrcmp(AppWindowNane, ROHCALCWINDOW-NAME) -m 0) {'ghAppwnd FuzzyrindWindow (ROMCALC MAIN-CLASS, AppWindowName);' gAppID m ROMCALC ID;^ A SUBS==UT SHEET (Ru 26) WO 9$122104 WO 951224 J PCTAV95O()Q6 33 thin app in always closed 1* aes if(lstrcmp(Ap,,w.ndowNanet LOTUSORG-WXNDOW-NAM) a= 0) (4 ghAppWnd a FuzzyFindWindow(LOTUSORGjMAXN-CLASS# AppWindowfame),A gAppID, LOTUSORO ID;- this app in always closed alse if(lutrcmp(AppWindowName, DOSBACKUP WXNDOW UAM~E) wa 0) J ghAppWfld FuzzyFindWindow (DOSI3ACKUP MAIN CLASS, ApVWindowfame) gAppID =DOSBACKUP-ID; A this app in always closed gLeaveOpen (intrcmp(AnoiLower(Buffer), TRUE-STRING) -nm TRUE FALSE;^ if(ghAppWnd -so NULL) return FALSE;^ HookSet aRomSet(ghAppWnd, ghWnd);- if(HookSat un return FALSE; return TRUW;A} long FAR PASCAL -export Main Proc(hND hWnd, unsigned Mcseaget WORD wParan, LONG lParam) switch (Mesaage)- cane WH -USER S0:^ cane WHMDESTROY:*A if((HookSet) fl(FTHookSet))A RomPreeoA hWnd= FindWindow(I"OMain", NULL) !f(hWnd) ^if( ilsZoomed(hWnd)) ShowWindow(hWnd, SW-SHOWMAXIMIZED);^ else SetActiveWindow(hWnd);A elso (A lessagaBox(ghWnd, "The Romulus MS Access Database has been closed. g,1A AppName, HBOK);A1 PontQuitMessago(O);A break;- case WH USER 51:A CloseAndswitcho14 breakvA case WMCOHHAND:A owitch(wParam) Cage ROM -BUTTON CloseAndSwitcho;^ break;- )A braakI4 default:A return DefWindoWPrcc(hWnd, Message, w~aram, lfaram)r return(O);A void CloseAndSwitchoA SetActiveWindow(ghAppWnd) if ((gAppID ==AVERY ID) 11 (gAppID m=ROMCALCJID) 11A (gAppID -0 XSYSUTILS ID) 11j (gAppID LOTUSORGID) 11I(gAppID DOSBACKUP-ID)) if(IsWindow(ghAppWnd)) PostMessage(ghAppWnd, WMCLOSE, 0, 0);4 eloe clone romlink DestroyWindow(ghwnd);A else if (gAppID ISYS ID) {~if(gLeaveopen) Enunmindown(ISYS_-Proc, NULL);- else PoetMessage(ghAppwnd, WkLCLOSE, 0, 1' DestroyWindow(ghWnd);^ 4 if(CloseChildWindowa() ==FALSE) JA if(gLeaveopen -FALSE)^ Post~essage(ghAppWnd, WkCLOSE, 0, 0).t Destroywindow(ghftd);A BOOL ClosaChildWindowsa() (A HMWN MainWndp DeskWndjA 1300L Result =FALSE"^~ FARPROC Proc; MainWnd indWindow(MainClass, N JLL if(Mainftd) {~DeakWnd -NULL; Proc w MakaProclnstance(Denk Proc, ghInet);^ flnumChildWindowa(Mainftd, proof (DWOP.D) ((HWND PAR *)&DeukWnd))jA FreeProclnstance(Proc);^ if(DoskWnd) f^ Proc w MakeProclnstancg(Child-Proc, ghlnst) r^ EnumChildWindowe(MainWnd, Proc, (DWORD) (flOOL FAR *)&Result);- FreeProclnatanco(Proc);^ }A J^ return(Result);A JA BOOL, CALLBACK -export Desk-Pro(HWqND hWndChild, HWND FAR *DeakWnd)^ char ozClaseMAX CLASSLEN) NULL GetClassNanie(hWndChild, nzclasst MAX CLASS LE); if(lstrcmp(szClags, DeskClass) 0) *DeskWld hWndChild;^ return(O);- }A raturn(l); A BOOL CALLBACK export Child Proc(HWND hWndChild, BOOL PAR *Reeult)A char szClassjHAX CLASS LENj NUL GetClasName(hWndChild, sz~lass, MAX _CLASS LEN);A SUBSTTUT SHBFT (Rule 26) WO 95122104 ~VO 9/2210 rc(rAU95/0(I068 34 if (Istrcizp( uzClass, ChildClass) 0) J- RomSatChi1ldWindow(hWfldChild); if(SpecialCloo)^ Pont~assaga(hWndChild, WXMSYSCOMMAND, Sc CLOSE, 01684 PoatMsagm(hWndChild, WILCLOSEt 0, *Result -TRUE;- raturn(O);^ I} return(l); BOOL CALLBACK -export ISYS-Proc(HUND hWnd, LP7ARAA lParam)' char Buffor[MAX _STRING-LEN) GetClassami(hWnd, Buffer, MAXSTRING LEN) I if(latrcmp(Buffer, ISYS-MAIN-CLASS) m- 0) GetWindow!Text(hWnd, Buf far$ latrlen(ISYS-WINDOWjNAME) if( (lstrcup(Buff or, ISYS-WINDOW-NAM) 1- 0) (IaWindowVisible(hWnd)) )A SandMeaaage(hWnd, WHMCLOSE, 0, }4 return(1); }'HWND Puzzy~indWindow(LPSTR lpszClaaoName, LPSTR lpazWindow)^ J^ FUZZYPARAMS FuzzyParams;A FARPROC Proc;^ FuzzyParm.1pzC&sNaUS 1pszClasaName;- FuzzyParams.lpazWindow -lpazWindowv^ FuzzyParams.hWld NULL; Proc MakaProclnotance(Fuzzy~proc, gnflst);% EnuxnWindOWs(Proc, (DWORD) ((FUZZYPARAMS PAR *)&Fuzzy~arams)) FreeProcinstance(Proc) return Fuzzy .rams.hWnd;^ BOOL CALLBACK -export Fuzzy Proc(HWND hWnd, FUZZYPA2RAMS FARJ *lpFuzzyParams)'- char Btuffer(MAX STRING -LEN]:4 if(lpFuzzyParams- >lpazClasoNaa 1= NULL) GetClassName(hWnd, Buffer, MAX STRING LEN)V" if(letrcnip(Buffer, lpFuzzyParaxss->lpszClassNana) 1- return if(lpFuzzyParanis->lpszWindow 1=z NULL) GatWindowText(h'Wnd, Buffer, eizoof (Buf fer) if fntrstr (Buffeor, lpFuzzyParama->lpozWindow) N ULL) return (1);14 )4 lpFuzzyParaxna->hWnd a hWnd; return(O); ROMLINK.H^ #include <windows.h>^ #include <string.h>- #include "rom].rc.h"^ typedef struct LPSTR l.pozClaasNaxne;^ LPSTR 3pozWindowj" HWND hWndi' I FUZZYPARAMS;^ typedef unsigned int near* NPUINT;4 typadof unsigned int far* LPUINT;" typadef unsigned long near* NPULONGI" typedof unsigned lcng far* LPULONG;" ty-pedef long NEAR* NPLONG;" #def ine ROM BUTTON ID 17^ #define ROMWINWIDTH #define ROM WIN HEIGHT 20^ #def ine ROM BUT WIDTH 70" 4defifla ROM BUT HEIGHT 20^ #def ins MAX CLASS LEN 30" #define MAX STRING LEN 256- #def ins INU AME llromuluu.inill #def ine LEAVEAPPSOPEN-SECTION "LeaveApplicationsopen'" #def ins WP-INI-ENTRY "WordProceesorlf #af ins VIEWER INI-ENTRY "Viewer"" #dafina TR-INI-ENTRY "TextRetrieval"" #define SPP.EAD INI ENTRY kSprmadfheetll" #dmf inG CHART INI-ENTRY "Chart"-^ #define TRUE-STRING "true""i /*#define WORD-NAME "Winword"*/- #define WORD WINDOW NAME "Microsoft Word" #def ine WORD MAIN CLASS "OpuBApp"^ #def ins WORD DESK CLASS "OpusDesk"" #define WORD CHILD CLASS 1opuu~wd"4 #define WORD ID 1- /*#define ABCNAME "1abc #def ine ABC-WINDOW-NAME "ABC Flowcharter"" #define ABC MAIN CLASS "Ran &x Stinipy""- #def ins ABC DESK CLASS "MDIClient"" #define ABC CHILD-CLASS "Ren Hoek"- #define ABC ID 2 /*tdefine ABC-NAME "1abc #def ins SJBSITrUTE SMEET (Ruile 26) WO 95112104 WO 912Z104PCTAU9IOOO069 35 ABC WINDOW-NAME "Micrografx ABC PlowCharter"" #define ABC-MAIN CLASS "AflCFraxe"" #defins ABC DESK-CLASS "MDIClient"" #define ABC CHILD CLASS "ABCChart""- #define ABC-ID 2V /*define EXCEL 4-NAME "excel"*/^ #define EXCEL WINDOW-NAME "Microsoft Excel"' #def ins EXCEL-MAIN-CLASS "XLMAIN"^ #define EXCELDESKCLASS "XLDESK"- #def ine EXCEL CHILD CLASS "EXCELS"^ #def ine EXCEL ID 3" /*#define EXCEL-S NAME ,excel"*/^ #define EXCEL-WINDOW-NAME "Microsoft Excel"^ #define EXCEL-MAIN-CLASS "XLMAIN"" #def ine EXCEL DESK-CLASS "XLDESK"" #define EXCEL-CHILD CLASS "EXCEL9"- #def ine EXCEL ID 3^ /*define PSTYLER-NAME 1qpstyler"1*/^ #define PSTYLERWINDOW-NAME "PhotoStyler Special Edition"" #def ins PSTYLER-MAIN-CLASS "Frame"^ #def ins PSTYLER-DESK-CLASS "tMDIClient"^ #define PSTYLERCHILDCLASS "MHDIChild"4 #define PSTYLER -ID 4" /*#define FTCOLOR NAME "0ftcolor"1*/^ #def ine FTCOLOR-WINDOW NAME "FotoTouch color"" #definle FTCOLOR MAIN-CLASS "appwindow"^ #define FTCOLOR DESK CLASS "IMDIClient""^ #define FTCOLOR CHILD CLASS "mdichildwindow"" #define FTCOLOR-ID S /*#define FTCOLOR NAME 1.Oa "ftcolor"*/^ #define FTCOLOR-WINDOW-NAME "FotoTouch color"- #define FTCOLOR MAIN CLASS 11FTColor"" #def ine FTCOLOR DESK-CLASS "HMDIClient"^ #define FTCOLOR CHILD-CLASS "mdichildwindow"" #define FTCOLOR -ID 5S /*#define ISYS-NAME 1fiq"1*/" #define ISYSWINDOW-NAME "ISYS Query"" #define ISYS MAIN-CLASS "ThunderForm"^ #def ine ISYS-ID 6" /*define ISYSUTILS NAME "idbw"*/^ #def ine ISYSUTILSWINDOW-NAME "1ISYS Utilities"" #def ins ISYSUTILS-MAIN-CLASS "ThunderForm"^ #def ine ISYSTTILs-ID 7" /*#define AVERY NAME twi*/ #def ins AVERY-WINDOW-NAME "LabsiPro'14 #def ins AVERY ID 8^ /*define ROMCALC-NAME "1romcalc11*/" #define ROMCALC-MAIN-CLASS "RomCalclO"^ #def ins ROMCALC WINDOW NAME "Romulus Resource Calculator-" #def ins ROHCALC-ID 9" /*#define ORGANISER-NAME "torganizes"*/^ #def ine LOTUSORG-MAIN-CLASS "TZ PORG"" #def ins LOTUSORG-WINDOW-NAME "tLotus Organizer',- #definle LOTUSORG-ID 10^ /*define WORDSCAN NAME "wordecan #def ins WORDSCAN-WINDOW-NAME "WordScan Plus JOB0l"" #def ins WORDSCAN-MAIN-CLASS "Calara.WordScant" #define WORDSCAN CHILD-CLASS "Calera.*WordScan. Viewer"" #def ins WORDSCAN -ID 11 /*define WORDPERFECT -NAME "wordperfect #def ins WORDPERFECT-WINDOW-NAME "'WordPerfectl- #def ins WORDPERFECT-MAIN-CLASS "WordPerfect"" #def ine WORDPERFECT DESK-CLASS "MDClient"^ #def ins WORDPERFECT-CHILD CLASS "IWPDocFrame"" #def ins WORDPERFECT ID 12- /*#define AMIPRONAME "Anti Pro #def ine AMIPROWINDOW-NAME "Ami Pro"" #define AMIPRO-MAIN CLASS "AxiProWfldA"" #def ins AMIPRO DESK CLASS "MDIClient'l" #def ins AMIPRO CHILD CLASS -St3ST1TUT SUEET (ule 26) WO 95/22104 WO 9522104PCTIA11)5IO0068 -36- "MDICHILD"^ #define AMIPRO-ID 13A /*#define lotusl23 NAME "lotus 123 #def ine LOTUS123-WINDOW-NAM "Lotus 1-2-3 Release 4- #define LOTUIS123-MAIN-CLASS "1Z3WPaxont""- #def ine LOTUS123-DESK CLASS "l23WMDClient"^ #def ine LOTUS123-CHILD-CLASS "l123WSheet"^ #define LOTUS123-ID 14- /*define QPRO NAME "Quattro pro dsf ins QPRO-WINDOW-NAME "Quattro Pro for Windows',- #def ine QPR0 MAIN CLASS "QPWBaseWdw"^ #def ine QPRO DESK CLASS "MDIClient"^ #define QPRO -CHILD -CLASS "QPWChildWdw"^ #def ine QPRO-ID 15^ /*#define DOSBACKUP NAME "Backup #def ine DOSBACKUP WINDOW NAME "Microsoft Backup #def ine DOSBACKUPMAIN CLASS "MWUACKUP"" #define DOSBACKU.PID 16" /*#define OPENIMAGE NAME "OPEN/image"*/^ #define OPENIMAGE WINDOWNAME "OPEN/image Cabinet"^ #define OPENIMAGE MAIN CLASS '"WIISDisplay" -#definie OPENIMAGE DESK CLASS "ImageWindow"A #def ine OPENIMAGE -CHILD_-CLASS "ImageWindow"^ #define OPENIMAGEID 17A FUNCTION DECLARATIONS mnt PASChL WinMain(HANDLE, HANDLE, LPSTR, int)r' BOOL HookSetup(LPSTR);^ long _export FAR PASCAL MainProc(HWND, unsigned, WORD, LONG); void CloseAndSwitch(void);" BOOL CloseAppFile(void);^ BOOL CloseChildWindows(void);" BOOL __export CALLBACK Desk Proc(HWND, HWND FAR BOOL __export CALLBACK Child Proc (HWND, BOOL FAR BOOL _-export CALLBACK ISYS-Proc (HWND, LPARAM) HWND FuzzyFindWindow (LPSTR, LPSTR) BOOL __export CALLBACK FuzzyProc(HWND, FUZZYPARAMS FAR long _export FAR PASCAL SubClass Proc(HWND, unsigned, WORD, LONG);" extern HANDLE ghinst;- extern HWND ghWnd, ButWnd;^ extern char AppName[200];^ BOOL _export CALLBACK RomSet(HWNDt HWND);^ BOOL _export CALLBACK RomExtraSet(HWND);^ void __export CALLBACK RomFree(void);- void -export CALLBACK RomSetChildWindow(HWND);^ EXTERNAL.H^ mnt PASCAL WinMain(HANDLE, HANDLE, LPSTR, int);" long FAR PASCAL _export Main Proc(HWND, unsigned, WORD, LONG); -void CloseAndSwitch(void);" BOOL CloseAppFile(void);- BOOL CloseChildWindows(void);" BOOL CALLBACK -export Desk-Proc(HWND, HWND FAR BOOL CALLBACK e.xport Child proc(HWND? BOOL FAR BOOL CALLBACK _export ISYS-Proc(HWND, LPARAM);" HEND FuzzyFindWindow(L] STRt LPSTR)e*^ BOOL CALLBACK _export FuzzyProc(HWND, FUZZYPAP.AMS FAR extern HANDLE ghinat;- extern HWND ghWnd, ButWnd;^ extern char AppNaznet200];^ ROMLINK.DEF" NAME RomLink" DESCRIPTION 'Romulus RomLink.
Copyright 1993 1995 Ni-Tech Pty Limited. Patent Pending.'^ EXETYPE WINDOWS^ STUB 'WINSTUB.EXE'" CODE MOVEABLE PRELOAD^ DATA MOVEABLE MULTIPLE PRELOAD^ HEAPSIZE 8192" INITIATING FILES- Romulus Global Module^ Copyright 1993 Romulus Software- Option Compare Database 'Use database order for string comparisons- Option Explicit- I Global document and image SUJBS==~r SHEET (Rula 26) WO 95/22104 PCOVAM/00068 -37 patWs Global Rom DocumentPath As String^ Global ROM I magePath As String- Global RON ISYSTEXTPATH As String^ Global flota SpreadSheatPath An String" Global Rom-ChartPath As String^ tis name will be used in all dialog boxes Global Conet RONULUS-APP NAX4J "Romulus"-" some ini names Global Conat ROM-INI-NAME -"lromulus.ini""^ Global Conat RON APP INI SECTION "Applicatic is"" Global Conat ROMLINKINI-ENTRY "RomulusLink"" Global Conet ROM-WPINIENTRY I"WordProi sor"" Global Conat RON WP2 INI-ENTRY= 'WordProcesoor2""A Global Const RON WP3 INI ENTRY "WordProcessor3""^ Gldbal Const ROM VIEWER-INI ENTRY "Viewer"^ Global Const RON VIEWER2 INI ENTRY "'Viewer2""^ Global Const RON VIEWER3 INI ENTRY "Viewer3"^ Global Const ROM-TRINIENTRY "TextRetrieval"" Global Conat RON TRUTILSINI-ENTRY "TextRtrievalUtilities""- Global Conat RON SPREAD INI ENTRY ="SpreadSheet"" Global Const RONSPREAD2 INI ENTRY "SpreadSheet2"" Global Const ROM SPREAD3 INI ENTRY I'SpreadSheet3"" Global Const RONCHARTINI ENTRY= "Chart"^ Global Const RON LABEL INI-ENTRY "Labels,- Global Const RONCALC INI ENTRY "RomulusCalc"^ Global Conet ROM-VOICE-INI-ENTRY "VoiceControl"" Global Conat RON READDACKINIENTRY "AudioReadBa'kl" Global Const RON JOIN INI-ENTRY "JoinTemplate""- Global Const RON CONVER.' :NI ENTR.? -"ConvertTemplate"" Global Conat ROM TEXTSAVEINIENTRY "TextS.veTemlplate"^ Global Const RON ORG INI ENTRY "Organizer"" Global Const ROM BACKUP INI-ENTRY "Backup"^ Global Const RON MAX STRINGLEN =256"A application main window classes *4 Global Conat ROM WORDWINDOW'CLASS IqOpusApp""^ Global Const RON PSTYLER-WINDOWCLASS "Frame"A Global Const RON WORDPERFECTWINDOWCLASS -"WordPerfect"^ Global Const RON AMIPRO-WINDOWCLASS ="IAmiProWndA""^ Global Const RON FTCOLORWINDOWCLASS "IFTColor""^ Global Conat RON EXCEL WINDOWCLASS "IXLMAIN"A Global Conat RON LOTUS123-WINDOWCLASS "l123WParent"" Global Conat RON _Q1~rZ.OWINDOWCLASS "QPWBaseWdw"" Global Const RON ABC-WINDOW ILASS "IAfCFraxne"^ Global Const RON ISYS-WINDOWCLASS ="ThunderForm"" Global Const RON-VR-IDWLS Global Conat RONCALC-WINDOW CLASS "IRomCalclO"- Global Const RONISYSUTILS-WINDOWCLASS -"ThunderForm""- Global Conat RON ORG-WINDOWCLASS "TZ POEG"" Global Const RON WORDSCAN WINDOWCLASS "Calera.WordScan'" Global Const RON OPENIMAGEWINDOWCLASS "WIlSuisplay"- Global Const RON BACKUP-WINDOWCLASS "MWBACKUP"^ Global, Const RON WORD-WINDOWNAM "Microsoft Word"^ Global Const RON PSTYLER -WINDOWNAME "PhotoStyler Special Edition"' Global Conat RON WORDPERFECT WINDOWNAME ="WordPerfect"- Global Const RON AMIPRO-WINDOWNAME "'Ami Pro"- Global Const RON FTCOLORWINDOWNAME "FotoTouch Color"^ Global Conat ROH EXCEL-WINDOWINAME "Microsoft Excel"" SUBSTITUT SHEET (Rule 26) WO 95/22104 WO 95/ 104P/AU95/00068 38 Global Const ROH-LOTtJS123-WINDOWNAME "Lotus 1-2-3 Release Global Conat RON QPRO WINDOWNAME w "Quattro Pro for Windows"^~ Global Conat RON ABC-WINDOWNAME "Micrografx ABC FlowChaxter"^ Global Conet RON ISYS-WINDOWNAME -"ISYS Query"- Global Const ROH-AVERY-WINDOWN.NE "LabelProl"^ Global Const RONCALC -WINDOW-NAME "Romulus Resource Calculator".
Global Corist RON ISYSUTILS-WIND0IWNAliE "ISYS Utilities"^ Global Co'nst ROMORG WINDOWNAME -"Lotus Organizer"l Global Conat ROM WORDSCAN-WI 1,DOVNAME "WordScan Plus JOB01"^ Global Const ROH OPENINAGE WINDOWNAME "OPEN/image Cabinet"^ Global Const ROM BACKUPWINDOWNAME "Microsoft Backup alobal Conat ROM ISYS-AINDEX ="ISYS.IXM"^ I Windows API ShowWindow() defines Global Conat ROZLSW SHOWMAXZNIZED 1 message box defines msgbox^ Global Const ROH-NB OK Global Const RON NB-YESNO 4^ Global Const RON NB ICONEXCLAMATION n 48^ Global Conat RON B -ICONINFORNATION =64^ Globr 1 Conet ROMHB ICONQT3ESTION 32^ Global Const NB DEFBUTTON2 =256, IDYES 6, IDNO 7^ ini entries to hold the file nante to store numbers in^~ Global Const RON NUMFILEINI SECTION "Numbers"l^ Global Conat ROM NUMFILE -INI -ENTRY "TextFile'- Global Const RON BARFILE INI ENTRY "BarFilelf Global Const ROM PLAINFILE INI-ENTRY "Plairile"l- ini entry in avery labels of the last loaded label form^ Global Const ROM AVERY LAYOUT SECTION "Layout Editor"^ Global Comet RON AVERY LASTEILE-ENTRY "lLastSaved-Ayout"' Global Coixet RCH-AVERYINI-NAM= "lpwin.ini"- Windows API WH CLOSE^ Global Const ROM-WM CLOSE 16^ 'Global Comet RON WN SYSCOMMAND 274^ 'Global Const RON SC-CLOSE =-4000^ DLL function declarations^ 'Declare Function RomyFindWindow Lib "user" Ali.s "FindWindow" (ByVal ClassName As String, ByVal Title As Long) As Integer^ Declare Function Rom ShowWindow Lib "user" Alias "ShowWindow" (ByVal WindowHand As Integer, ByVal ShowType As Integer) As integer^ Declare Function Rom -SetActivoWindow Lib "user" Alias "SetActiveWindow" (ByVal WindowHand As integer) As Integer^ 'Declare Function RomjGetActiveWindow Lib llusnr" Alias "GetAct. AtIndow" As integer^ Declare Function Rom-GetModuleHendle Lib "kernel" Alias "Get~oduleHandle" (ByVal lpAp. ,Iame As String)'As Integer- Declare Function Rom -lazoomed Lib "luser" Alias "laZoomed" (ByVal WindowHand As Integer) As integer^ Declare Sub RomYield Lib "kernel" Alias "Yield" Declare Function Rom-GetPrivateProfileftr3 ng Lib "Kernel" Alias "GetPrivateftifileString' (ByVal lpAppName As String, ByVal lpKeyNane As String, ByVal lpDefault As String, ByVal lpReturnedstring As String, ByVal nSize As Integer, ByVal lpFileliame As String) As Integer- Declare Function Rom -Post~essage Lib "user" Alias "Poet~essage"l (ByVal hWnd As Integer, ByVal msg As integer, ByVal wParam SUBSITrUT SHEET (Rule 26)f wo 022104 95214P 1/V000)60 39 W An Integerf l~aram An Long) As Intoer4 'Declare Function Rom.Ssnd~ieeeaqe Lib %user" Alias "CaZnd~essage" (!IyVa2. hWnd Al Integer# flyVal mug Al Integer, BYVAl wPam As Integer, IParam As Long) As Integer- Decl~are function fomyWritePrivateProfileString Lib "Kernel" Alias "WritePrivateftofileString" (flyVal IpAPPRAMS As Stringt ByVa. lpfeyflame As string, ByVal 1ent~tring As string, GyVAl lprileN&-!, String) Integer* Declare Function RcmjuzzryindWindow I lusedll" Alias "FuzzyrindWindow" (flyVal lpezClaasUame As String, 4yVal. lpu:Window AnsString) As Integer^ Function Ram Roturnlniftring (section An String, Entry An String) he String* on Error COTO No~tring.rr- Dim lplnifletString An String" Dim ret As Integer* 'Create a buf fer for the returned min string^ lplni~etftring w Spaco6(ROKXAXCTRXNGLV11), ret a Rom OetPrivatriProfileString(section, Entry, to#IplniRotatrings ROM HAX 8TA!NGLEI, ROM-INI-NAHE)" 'Truncate the fixedlength atring to the left of the Hull terminator4 iplniRot~tring Loft lplni~etString# (Instr(lplniRet~tring, Chr$ Rom-.oturnlni~tring a Iplnifletatringft RIS Exit:"* Exit Function& Nos;trinyyrrt* Rom Roturnlnistring a Resume RIS Exit" End Function" 1 Romulus OpenFiloRoutinmi Module* Copyright 1993 Romulus Software" option Compare Database #Use database order for string cofnparisons" option Explicit' FunctLcn, Rom.PpenABC On Error GoT* NoOpenA3C Err4 Dim ret An Integer" rat aRam -Openhpp(ROH CI ARTIjNXETR~, ROIK ABCO WIflDOWCLASS, ROMJWBC WI1DOWNJ{E)- ABC Exit:" Exit Function" toOpenABC Errt*" HsgBox "Cannot open ABC Flowchaxter, Errort 0 Error$, ROM XE OK ROI{XnO ZCONEXCLAI4TIOu, ROHULUSAPPUNAME- Resume AIIC Exit" End Function" Function RottnOpenhnCrilo (Filename As String)4 On Error COTO A8CFilsE!rr4 Dim ret An Integer" I see if the fiename in valid^ Filename a RomChartPath A rilename" If .0ir$(Filename) a Then^ ret Hagflox("There in no Associated flowchart. Would you like to create a flowchart?", RO HDUSHO, MB DEF3UT0ON2 RO MBICONQUESTIOU, ROMULUS-APP MAHE)"* If ret a 7 Then COTO AnCFSie Exit" Downd Run~acro "Indicator"* ret -fom OpnApp(OH CITNE-NT?, ROM ADCIDOWCLADS.
ROHKABCOWXDOWNAHE)"1 Sandxeys otfs* Filename a "{ENitErul Exit Function,* and If4 I open ABC or make it the active window" ret a RoO-pnApp(RO1XCHAA1LX14"H=Yt~ RoktADynqW LASS, ROM AC INlO',MA4E)open the filename" If rat a True Then" Send~eys Otfo" a Filename a "(ENTER) End If AnCril*eXxitt Exit Punction"4 AHCrile-Zrrt: Hagnox "Cannot open ADO flowchart. Errort rrors, ROMI HBOX UGH XE ICOKEXCLAMATIONO ROMULUS APP hAHZ" Reumre AflOrile Exit" End Function,* Function Rom OenhzmiPro on Error COTO NoapenAmiPro Err" Dim ret As Integer ret SUDS~1T= SHMT (Weu 26) WO 95121104 Per/09MI0068 40 flotuopenApp (fOWP3 flfZNTR' fOM AH=10WXHDO WCL1W3 fHAMZPROWINDOWNhME)- Amifro-Exitvl Exit Function', Hoon miProrrsiA Magnox "Cannot open Ami, Pro.
Irror: 0 Errors, flOM MB OK AOMM#COVVCZLMATZON# ROMULUS APP AMEA Rlesume AmiftcoExit" End Function** Function Rom-pnAmipropile (Filename As String)^ On Error GoTo APrile-Err- Dim ret An Xnteger^ sea if the filename in valid^ Filename Rom DocumentPath 4 VilonameV If Dir$(Filsnams) u Then^~ ret w Hugflox("Tber in no associated document. Would you like to create a document?", ROk.HlBYESNO MS-DEFOUTTON2 RaM MB ICONX14FORHATION, ROMUYLUS APP NAME1A If rot w 7 Thenl GoTo APri. Exit^ DoCmd Run~acro "Xndiemator"^ ret a RomOponhpp(fOWP3INI ENTRY, ROM AHIPRO WIDOWCLASSI ROM MIPfl0WINDOWNAME)A tSend~eyu a "(ENTER)"^A sendKeys "%fall Filename A "(ENTER)"^ Exit Function^ End If A open Word or make it the active window^ ret a Rom Openpp(ROH WP3 -INI ENTRY, ROMAIPRO INDOWCLASS* RO *HPOWNDWAE open the .ilenamo,* I& rot w True Then^ Zend.Keya 1'%foll Filename &A "(ENTER"" End 111 APFilo -Exit:A Exit Function^ APIiloErt Mug~ox "Cannot open Ami Pro document. Errori 11 Error$, R014 ME OK ROM MBICONEXCLAMATION, ROMULUS APP-NAMEA Resume APFileOExit^ End Function^ Function Rom openApp (ApplniEntry As String, AppClasm As String$ AppWindow An String) As Integer,, on Error GoTo Open-Err I Set up error handler.^ ftffmOpenApp TrusA Dim WindowHandle An IntegerA Dim rot As IntegerA Dim lplniftstring As String', Dim AppName As String', Dim RomName An String" Dim AppModuleName A9 String'4 Dim ParamPos An Integer^ I find the filname of the app from the inijfile' App~ame w RomRoturnIniString(ROH-APPI11. SECTIOfl, Applnifntry)A If (AppName a Then- Mugeox "There in no filname listed for A AppWindow a "in the ROHULUS.INi file.", ROM MB-OK ROH MB ICONEXCLAMT~XONt ROMULUs APP NAME- RomOpenApp False^~ GoTo Open-txit^ End If I load the app if it is not already loaded^ to find th. module ignore any command line parameter. in the name,* ParamPou InStr(AppName," 11)4 If (ParamPos) Thon4 App~oduleNamo Laft$(App~ama, ParamPon Else* AppModuleName a AppNamea End if^ Aif (Rom -eGt~odulHandl(AppModuloNama) -0) Then 'App io utot loaded4 ret a Shell(Applame, 1) 'start APPA If ret n 0 Than GoTo Open-Erel,* wait until the main window of the app has been dizplayedA 22?? if It doeu not start up correctly we get stuck here foreverA While (RotkFuzzrindWindow(AppClaus, AppWindow) aO)A* Ro-ilf Wend4 End Xf AI make sure we can find the window handle before we open Rom linkA WindowHandle a Rom FuzzyFindWindow(AppClass# AppWindow)- If WindowHandle 0 Then', Megfox "Cannot Aiccess AppWindow, ROM MBE OX ROM ME ICONEXCLAMATION# ROMULUS APP NAME' Rom OponApp u False" GoTo Open-Exit^ End If- I Start the suBs2TmUT SHBT (Rule 26) WO 95122104 11MAV95/00068 41 Romulus floating top button window^ I If it doesn't start we still let them go ahead' Rom~ame RomjReturnlnistring CR014APP INI SECTION, ROMLINK INI-ENTRY)" ROMName RomNa~me A G AppWindow, If (ROMNam9 44 Than- IMsg~ox "There is no filename listed for the Romulus link program in the ROMULUS.ZNZ file.", ROM MB0 ROM MB XCONEXCLAMATIOIIf ROMMUS )PPAME11 Else^ ret a Shall(RomName, 8) #start Romulus floating top window.- End If^ maximize the window and make it the active window4 If (RomlIsZoomed(WindowHandle) a 0) Then" ret Rom -ShowWindow(WindowUandlQ, ROM SW SHOWMhXIMXZED)^ Else- ret- Rom-SetActivWindow(Windowiandle)^ End If^A Open-Exit:^ Exit Function4 Open Err:- Mageox "Cannot open AppWindow Error: 11 Error$# RONME BOK ROH-MB ICONEXCLAMATION, ROHULUSJAPPYAMEA Rom-Ppenhpp a False' Resume Open ExitA End Function^ Function Romf Openaxcel On Error GoTo NoOpanExcol-Err- Dim rat An IntegorA rot Rom OpenApp (ROH SPREALD 1111ENTRY# RON. EXCEL WINDOWCLASS# ROM EXCELIIIDOWNAHE)A Excel Exit:" Exit Function^ NoOponExcel-ErrtA MHJgBox "Cannot open Excel. Error: Error$, ROH ME OK RON MB ICONEXCLAHATXON, ROMULUS-PPJNAME4 Resumne Excel-Exit^ End Functizv Function Rom OpenExcelFile (Filename As String) On Error GoTo Excelrile ErrA Dim rat As IntegerA *e if the filname is validft Filename w Rom SpreadShoetPath Filenana^ If Dir$(Filnams) 14" Then^ ret Msguox("There is no associated spreadsheet.
Would you like to create a spreadsheet?", ROM MB _YESNO MB-DEPBUTTON2 RON MB ICONQUESTION, ROHULUS APP NAME)At If ret 7 Then GoTo ExcelFile ExitA DoCmd RunMacro "Indicator"A ret -Rom-OpenApp(ROM SPREAD INI-ENTRY, ROM EXCEL-WINDOWCLASS, ROH EXCEL WINDOWNAHE)- Send~oys "%tfall Filename& "{ENTER}"" Exit Function^ End If^ open Excel or make it the activo window ret Romw OpenApp (RON SPREAD INI-ENTRY, ROM-EXCEL W1NDOWCLASS# ROM EXCEL-WINDOWNAE)^ open the filname" If ret True Then- Send~eys Pilename A "{ENTERI"4 End If^ ExcelFile -Exit:" Exit Function^ Excelrile Err:" HogI~ox "Cannot open Excel spreadsheet. Error: Error$1 RONMB UOK ROM MB ICONEXCLAI{ATXON, ROMULUS-APP NAME" Resume ExcelFilsQExit^ End Function" Fundtion Rom OpmnFTColor (p On Error GoTo NoOpenFTC-Err" Dim ret As Integerft ret a Rom OpsnApp(ROM-VIEWER3I1NXENTRYi RON. FTCOLOR WINDOWCLASS, RON. FTCOLOR WINDOWNAME)- FTC Exit:" Exit Function^ NoOpenFTCErr:" Nigliox "Cannot open FotoTouch Color. Error: Error$, ROM MB OK ROM HnBXCONEXCLAMATION# ROMULUS APP NAMEA Resume FTC Exit' End Function^ Function Rotw OpenFTColorrile (Filename As string)' On Error GoTo FTCFile Err" Dim ret As Integer" I see if the filename is valid^ Filename Rom ImagePath Pilename" If Dir$(Filename) Then" ret MogBox("There is SUBST1UIB SHET (Rule 26) WO 95/12104 PCTIAM/00068 42 no associated image. Would you like to create an image?", RO)HEBYESHO MB DEFBUTTON2 ROM-MB-ICONQUESTION, ROXULUS-APP NAME)- if ret 7 Then GoTo FTC?ile-Zxit4 Docmd Run~acro "Indicatorll rat RemOpenhpp(ROH VIEWER3 1HZ ENTRY, ROM PTCOLOR WINDOWCLASSt ROM PTCOLOR-WINDOWNAME)' Sendl~eys te%fnilf "JENTER" SendKeys Filename A "(ENTER)"" SendKeys "%q"Exit Function- End If^ I open FT Color or make it the active window- rat RomOpanApp(RQM VIEWER3 NI ENTRY* ROMJFTCOLOR-WINDOWLASS, ROH FTCOLOR WINDOWNANE)- open the filename" If ret True Then^ SendKeys Filename a "{ENTER}"4 End If4 FTCFile Exit:^ Exit Function^ PTCFile Err:" Mugeox "Cannot open FotoTouch image. Error: H Error$, ROHi KB OK ROH-MB ICONEXCLAMATION, ROHULUS APP NAME^ Resume FTCrile-Exit" End Function" Function Rom -opmnISYS (ApplniEntry As String, AppClass As String, AppWindow As String) As Integer^ On Error GoTo ISYS-Err Set up error handler.^ Rnm_0penISYS True- Dim WindowHandle As Integer^ Dim ret As Integer" Dim lplniRetString As String^ Dim AppName As Str-ing^ Dim RamName As String^ Dim App~oduleName As String^ Dim ParamPos An Integerfind the filname of the app from the iifile" AppName ROM-ReturniniString(ROM APP 1HZ SECTION, AppiniEntry)o If (AppName Then" Hsgi~ox "There is no filname listed for 11 AppWindow "in the ROHULUS.INI file.", ROM 30KO RONMS BCOHEXCLAMATION, ROHULUS-APP NAME"1 Rem-PpenISYS False^ GoTo ISYSExit" End If^ I load the app if it is not already loaded^ *to find th2 module ignore any command line parameters in the name^ ParaniPos X nStr(AppNamas 11 If (ParamPos) Then- App~odulaName Laft$(AppName, ParamPos 1)4 Else" App.4odulaName -AppName" End If^ If (ROM-Get~odulellandle(App~odulaName) Then 'App, in not loaded" rot Shell(AppName, 1) 'stluct App- If ret -0 Then GoTo ISYS -Err^ I wait until the main window of the app has been displayed," I if it does net start up correctly we get stuck here forover" While (Rom uzzyFindWindow(App~lame, AppWindow) Rem-Yield" Wend^ SendKeys 0%fc%ff" "(DELI" "JENT1URI"^ SendKeye SendKeys 11+{ENDI"^ Send~eys "(DELI" A Rem ISYSTextPath 6? "wENTER)"- End If I make aure we can find the window handle before we open Rem link" WindowHandle w Rem uzzyPindWindow (App~lass, AppWindow)" If WindowHandle 0 Then^ Hagaox "Cannot Access AppWindow, ROM MB-OX ROHJ4I3ICONEXOLAMATIOH, ROMULUS -APP -NAME" RemorrpenISYS -False^ GoTo ISYS Exit" End If^" Start the Romulus floating top button windowA If it doesnt start we -let them go ahead^ RomName Rem-RetiarnlniString(ROHAPP1HZ SECTION, ROMLINX 1HZ ENTRY)" RemName RemName a AppWindow" If (RemName 11") Then^ Hsg~ox "There is no filname listed SUBSITUT s=EE (Rule 26) WO 95/22104 PCr/AU95/00068 43 for the Romulus link program in the ROHULUS.ZNI file.", ROH1HB-OK ROll ME ICON'EXCLAMATION, ROll US-APP-NAME^ Blue- ret Shell(RomNamet 8) 'start Romulus floating top window.4 End lf' I maximize the window and make it the active window4 If (Rom-1sZoomed(Windowlandle) a 0) Then rat Rom-showWindow(Windowlandle, ROll SW SHOWMAXXHIZED)^ Else^ ret Rom-SatActiveWindow(WindowHandle)A End 1!0A ISYS Exits4 Exit FunctiWn ISYSErrA MagBox "Cannot open 11 AppWindow Error: Error$, ROMJIB-OK ROll {BICO4EXCLAMATION, ROMULUSjAPPjhME' ReopenISYS -False^ Resume ISYS-Exit^ End Function^ Function Rom-OpenISYSAll~iles On Error GoTo NoOpenISYSAll ErrA Dim rat As Integer^ Dim DEFile~amo As String' Dim DB~anie As StringA Dim ISYS~irst As IntagerA Dim Paath Aa String^ see if there is an ISYS database in the Rom-ISYSTextPath4 DBFileName Rom3ISYSTextPath ROH ISYS AINDEX^ If Dir$(DBFileName) H" Then*' Mag~ox "There is no Full Text database.", ROll MB OK ROll MB ICONXNFORMATION, ROHULUS APPNAMEA GoTo ISYSAll ExitO End lf I open ISYS or make it the active window- retw Rom-OpenISYS(ROHTR-INI-ENTRY, ROll ISYS WINDOWCLASS, Rem iISYS Windowname) clear the last search and make sure there is no filter sat4 DEName w Rom-ISYSTaxtPath4 It ret ThWn Sendl~eys "%fc%ff" "(DELI" "{ENTERI"^ 'SendKeys 1"%fd" 11(TABJ"A 'Send~eys 'SendKeys DBNama JENTER1 t A End IfA Send~eys &x (TAB)"' SendKeys If Paath DbName Then- SendKeys (ENTER}IlA SendKeys "1%fc%ff" "{fENTER" I GoTo ISYSAII ExitA I End If^EA Xf Paath DbNaine ThenA SendKeys I SendKeyn "(DELI" &DbNaMs f"{TAB}"0 II(ENTER} 1 A I SendKeys 11%fc%ff' 1 End Xf4 ISYSAll Exit:^ Exit Function4 Noopen~lr BAll Err:^ Mag~ox "Cannot open ISYS.
Error: Error$t ROllMMBOK ROM .3 a,,CONEXCLAHATION, ROHULUS APP NAME- Resume ISYSAIIlExitA End Function4 Function Rem OPenXSYSrile (Filename As String)^ on Error GoTo ISYSFile-ErrA Dim ret An Integer^ Dim FullFilNaflI As String- Dim DBFileName As String' Dim DBName As String* ase if there is an ISYS database in the Rem-ISYSTextftth KBWileNams Rom-ISYSTaxtPath Roll ISYS-AINDEX- 2?f' Dir$(DBFilsNam%) Thon' Magaox "There in no Full Text database.",f ROllME O-K ROll MB ICONINFORHATXON, ROHtJLUS-APP-NAMEA GoTo ISYS~ileExit^ End If^ see if the filename is valid' Fullrilo~ame a Rom ISYSTextPath Filename* If DirS (FullFileftme) 11 Then- llsgBox "There Is no associated Full Text file", ROll ME _OK ROll MB ICONINFORMATXON, ROHJLUS-APP-NAHE^ GoTo XSYS~ile Exit' End If, A open ISYS or make it the active windowA ret Rom OpenISYS(ROMTR-INI-ENTRY, ROll ISYS WINDOWCLASS, Rem ISYS Windowname) I clear last search and open filenamea DEName SUBsMI-ru' SHEET (Rude 26) WO 95122104 1'CIVAV9SJOO060 44 Rom ISYSTextPatV* If rat Then- sendKeys "tfc~ff" A Filename A "JENTEJR}"o tleudKeys End Xf 4 ISY5FJile xits** Exit Functiono ZSYSril*Errt 4 Magflox "Cannot open ISYS text fi~le. Error: Error$# ROM ME OK RaM MD3ICONZXcLAMATZONf ROHULUS-APP NAHZ,1 Resume ISYSFile-Exit 4 End Function', Function Rom_0ponLotusl23 On Error QoTo VoOpen otusl23 Err 4 Dim rat An Integer" ret ompenhpp(ROM SPREAD2 INI ENTRY, ROMLOTUS123 WINDOWCLASSo ROM LOTUS123-WINDOWNAHE)* Lotusl23 ExWtt- Exit Punction 4 NoOpnLotus23Errto Mug~ox "Cannot open Lotus 123. Error: 0 Error$# ROM-MB OK ROM MICONEXCLAMTION, ROHULUS APP NAME- Resume Lotusl23 Exit 4 End Function" Function Rom OpnLotusl23rile (Filename An String)^ On Error GoTo Lotusl23File Err Dim rat An IntegerI sme if the filename is valid4 Filename RomSpreadSheetPath A Filename'^ If Dir$(Filname) Then 4 rat Mogflox("Thero in no associated spreadshee~t. Would you like to create a spreadsheet?", ROM MDB ESNO HSBDEPBUTTON2 ROM MBICONINFORMATIO-, ROMULUS APP NAME' If ret a 7 Theft GaTo Lotua123rilqeExit DoCmd Run~acro "Indicator"' ret Ram penApp(ROH SPREAD2 IN! ENTRY, ROM LOTUS123.INDOWC:ASS, ROM LOTUS123 WINDOWNAMEp' SmndKeya 11%fa" a Filename "IENTER111 Exit Function^ End If^ I open Lotus 123 or make it the active window 4 ret a Rom_penpp (ROM SPREAD2 INX ENTRY, ROM LOTUS123-WINDlOWCLASS, ROM LOTUS123-WINDOWNAHE)^ open the filname 4 If ret a True Then 4 SondKeys a Filename Q "(ENTER)"- End If" Lotus123riile its^ Exit Punction Lotusl23rii&eErr:4 MagEix "Cannot open Lotus 123 spreadsheet. Error: Error$# ROMJ4B-OK ROMHB-ICONEXCLAmATION, ROMULUS-APP NAME^ Rosumek Lotus123FilaoExit1* End Function 4 Function Rom Openol (Applnitntry As String# App~lans As String, AppWindow An String) An Integer 4 On Error GoTo openOX Err I set up error handlar,- RomOpenOI True," Dim WindowHandle As Integer 4 Dim ret As Integer- Dim lplnifletString As String^ Dim AppName An String 4 Dim RomName As String4 Dim App~odulaName An String^ Dim ParamPas Al Integer 4
I
find the filename of the app from the in! file^ AppName RomfleturnlniString(ROH APP INX SECTION, ApplniEntry) 4 If (AppName )Then4 Mog~ax "There is noa filename listed for &t AppWindow A oir the ROHLUS.XNX file,", ROMHBE0K ROM 4E-CONEXCLhMATION0 ROMULUS APP NAME 4 Rom _OpenO! False,, GaTo OpsnOX Exit End If *I load the app if it is not already loaded 4 0 to find the module ignore any comamnd line parameters In the name 4 t ParamPos InStr(AppNama, If (ParamPos) Ther.
4 App~oduleName Left$ fAppName, ParamPos 1)1, Else^ App~oduleName -AppName 4 End If 4 If (Rom et~oduleJHandle(pp~odulQName) 0) Then "App is not loaded 4 ret* Sholl(Appflame, 1) 'start App 4 If ret -0 Then GoTo OpenOX-Err 4 I wait until SUrBMrTrrM sMEE (hub 26) WO 95/12104 1ICTIAlU95100068 45 this main window of the App has boen displayed- if it doos not start up correctly we got stuck hero forever^ While (Rom FuzzyFindWindow(AppClanss AppWindow) wO)^ Rom Yield^ Wend- End Xf A I makce sure we can find the window handle before we open Rom link- WindowHandle a Rom -FuzzyrindWindow(AppClaEI, AppWindow)' If WindowHandle a 0 Thezro lMgBox "Cannot Access AppWindow, ROM MEQOK ROMHBICONEXCLAMATXON, ROHULUS APP NAME4 Rom 0penOI a FAISGA GoTo OponOX Exit^ End If^ I start the Romulus floating top button window^* If it do.sn't start we still lot them go ahead^ RomName Rom RoturnlniString(ROM APP INI SECTION, ROHLINX INI ENTRY)^ RomName RonName a AppWindow- if (RowName Theno Magaox "There is no filename listed for the Romulus link program in the RomULus.IN file.", ROMJHBO0K ROM MB3ICONEXCLAMATIONI ROHT3LUS-APP-NAHEA ElUQA rat Shell(RomName, 8) 'start Romulus floating top window.", End If^ I maximize the window and make it the active window^ If (Rom-InsZoomed (WindowHandle) 0) Then^ retw Rom ShowWindow(WindowHandle, ROH-SW-SHOWHAXIMIZED)- #Else^ rat Rom-SetActiveWindow(WindowHandle)" End If A OpenOl Exit:" Exit Vunction^ OpanOX Err:" Msgnox "Cannot open AppWindow Error: "1 Error$, ROM ME OK ROM-MEICONEXCLAMATION, ROMULUS APP NAHE^ Rom-OpenOI a False" Resume OpenQI Exit" End Function" Function Rem openOIDFile (Filename As String)" on Error QoTo OXOFila Err^ Dim ret As Intaor" Sand~eya G Filename I open OPEN/image or make it the active window^ ret Rom 0onApp (ROM VIEWER2 INX E NRY, ROM OPENIMAGE WINDOWCLABS, ROHMOPENIMAGE-WINDOWNAHE)" open the filename" If ret a True Then" SandXeys 4 Filename "(ENTER)"^ End If^" OXUFile Exit:" Exit Function^ OIDPila Err:" Mageox "Cannot open OPEN/image image document. Error: Error$, ROH-MB-OK ROM MBICONEXCLAMATION, ROXULUS-APP-NAME" Resume OID~ile-Exit" End Function,* Function Romp _penOXFFile (Fi.lename As String)^ On Error GoTe OIFFile Err" Dim rot As Integer" I see if the filename is valid^ Filename w Rom Imaga~ath Filename" If Dir$(Filenamo) a Then- ret w Msgllox("There is no associated image. Would you like to create an image?"# RONME BYESNO MBbEPBUTTON2 ROMMEI3-CONQUESTION, ROHULUS-APP _NAME)" If rot a 7 Then GaTo aIFrile Exit" DoCmd RunMacro "Ilndicator"" ret Rom 0psnApp (ROH VIEWER2 INI ENTRY, ROM OFBNXHAQE WINDOWCLASS, ROM OPENMAGE WINDOWNAM)" ret -Rom OpenApp(ROH VIEWR3-IN ENTRY# ROM FTCOLOR WINDOICLASS, ROM FTCOLOR WINDOWNAME)- Sandxeys "%fnil" {ENTERJ"" SendKeys Filename "(ENTERj"" I SendKeys "tfq"^ Exit Function^ End Ifft Sandl(Qys "'din" Filana "{ENTERJ"" open OPEN/image or make it the active window4 ret a Rom OpenApp(ROH VIEWER21NI ENTRY, SUBSTITUTE SHEEI (Rule 26) WO 95t22104 WO 95/2104 CzrAU9.1100068 46 R0o4.OPENXMAGE-WINDOWCLASS, ROM OPENXMAGEWNDOWNAHE) *open the f ilename' If ret True Then' SendKeys a Filename "{ENTER}"' End If' QIF~ile Exit:' xit Function" OlF~ile Err:'4 Hageox "Cannot open OPEN/image image document. Error: Error$, ROM-MBOK ROM-MB-ICONEXCLMATION# ROHULUS-APP-NAME' ResuMe aIFFIle Exit' End Function' Function Rom _OpenOpanlmage On Error GoTo NoOpenOl Err' Dim ret As Integer' ret* Rom-0panApp (ROH VIEWE2INI-ENTPX, ROHMOPENIMAGE-WINDOWCLASS#! ROM OPENIHAGEyWINDOWAME)4 01 Exit:' Exit Function' NoOpenOIErr:' Hog~ox "Cannot open OPEN/image. Error: "0 Error$, ROM MB OK ROMEMICONEXCLAHATION, ROMULUS-APP-NAME' Resume 01 Exit' End Function' Function Rem OpenORG On Error GoTo NoOpenORG-Err' Dim ret As Integer^ rat -Rem OpenApp(ROHORGINI ENTRY, ROH ORG-WINDOWCLASS, ROM. ORG WINDOWNAHE)- ORG Exit:^ Exit Function' NoOpenORG Err:' Mag~ox "Cannot open Organizer.
Error: "1 Error$, ROM MB OK ROM-MB ICONEXCLAHATION, ROMULUS APP-NAME' Resume ORG Exit' End Function- Function ROM OpenPstyler 0' on Error GoTo NoOpenPSty.er Err^ Dim ret As Integer' ret RomkOpenApp (ROHMVIEWER2INI-ENTRY, ROM PSTYLER WINDOWCLASS, ROHMPSTYLER-WINDOWNAME)' PStyler Exit:^ Exit Function^ NoOpenPStylar-Zrr*:' Mag~ox "Cannot open Photo Styler. Error: Error$, ROM M B -OK ROMHEICONEXCLAMATION, ROMULUS APP NAME' Resume PStyler Exit' End Function' Function Rem OpenPStylerFile (Filename As String)- on Error GoTo PStylerFile Err' Dim ret As Integer' I see if the filename is valid' Filename Rem ImagePath Filename' if Dir$(Filename) Then- ret Msg~ox("'There is no associated image. Would you like to create an image?", ROMMEBYESNO MB-DEFBUTTON2 4- ROM-MB ICONINFORMATION, ROMULUS APP NAME)' If ret a 7 Then GoTo PStylerFile Exit' Doemd Run~acro "Indicator"' ret Rom-OpenApp (ROH.VIEWER3INI-ENTRY, ROM FTCOLOR WINDOWCLASS, ROMFPTCOLOR-WINDOWNAM)' SendKeys "1%fnil" "{ENTER}"' SendKeys "1%fa"& Filename SendKeys Exit Function' GoTO PStylerFile-Exit' End if' open PStyler or make it the active window' ret Rom OpenApp (ROH VZ WER23INIENTRY, ROM PSTYLER WINDOWCLASS, ROM-PSTYLER WINDOWNAM)' open the f ilename' If ret True Then^ SendKeys Filename "tENTER)."' End If' PftylerFile Exit:' Exit Function' PStylerFile Err:'- Mag~ox "Cannot open Photo Styler image. Error: Error$# ROM ME OX ROMMBICONEXCLAMATION, ROMULUS-APP NAME' Resume PStyler~ile-Exit' End Function^ Function Rom OpenQpro On Error GoTo NoOpenQpro Err' Dim ret As Integer' ret RemOpenApp(ROH SPREAD3 INI-ENTRY, ROMQPROWINDOWCLASSe ROMQPRO-WINDOWNAME)- QproExit:' Exit Function' NoOpenQpro Err:'- MsgBOx SUBMfTtJTE SHEET (Rut 26) WO 95/22104 WO ')SIZ 104 CIIAM150I060 47 wCannot open Quattro Pro. Error: Error$, ROM-MB OK ROMHBCOEXCLMATO4, ROHULUS APP NAE^ Regume Qpro-Exit End Function^ Function Rom-OpanQproFila (Filename An String)^ on Error GoTo Qpro~ilq-Err' Dim rat As IntegerA I sea if the filename is valid- Filename w Rom SproadSheetPath 4 Filenama^ If Dir$(Filename) Thon ret MsgBox("There is no associated spreadsheet. Would you like to create a oproadaheet?"t ROM HB-YESNO UB-DEFBUTTON2 ROH-BICONINFORHATIONf ROMULUS APP NAHE)^ If rat 7 Then GoTo Qpro~ile-Exit DoCmd flunMacro "Indicator" ret Rom 0penApp (ROM SPREAD3 INTENTRY, RokQPRO WIDOWCLASS# RaM QPRO-WINfl0WNME)^ SendKeys 1"%fa" Filename &x "{ENTER}I" Exit Function^ End If^~ I open Quattro Pro or make It the active windowA ret w Rom 0penApp (ROH SPREAD3 INIENTRY, ROkQPRO WINDOWCLASS, noQPRO WINDOWHAME)- *open the filnama^ If ret a True ThenO SendKeys Filename "{ENTER}"~ End 1V4 Qpro~ile-Exitr^ Exit Punction QproFiloeErr:^ M0gBOX "Cannot open Quattro Pro spreadsheet. Error: 11 Error$, ROHMBEOK ROM-HB-COEXCL.MATION, ROMULUS-APP-NAME^ Resume QproFile-Exit^ End Function Function Rom\OpenWord on Error GoTo NoOpenWord-Err^ Dim rat As Inlteger^ ret Rom-9penpp(ROM-WP-INIENTRY, ROM-WORD WINDOWCLASS, ROM WORD WINDOWNAHE)^ Word Exit:- Exit Function,% NoOpenWord-Errl.A Magnox "Cannot open Word for Windows. Error: 11 Error$, ROHMBE..K ROM-MBICONEXCLAMATION, ROMLUSAPPNAE' Resume Word Exit End Function" Function Rem OpanWord6File (Filename As String)4 On Error GoTo Word6Fle-Err" Dim rot As Integer" I see if the filename Is valid" Filename Rom DocumentPath Filename" If DirS(Filenane) w 11 Then" rot Msg~ox("There is no associated document. Would you like to create a document?", ROM MBYESNO MB DEFSUTTON2 ROM-MBICONINFORlwATZON, ROMULUS-APP -NV4E)" If rat 7 Then GoTo Word6File Exit" DoCmd RunMacro "Indicator"A ret= Rem OponApp (ROM-WPI1NIENTRY, ROH WORD WXNDOWCLASS, ROMLWORD-WINDOWNAME)A SendKeys O%fn" "{ENTER}"" SendKeys Qx Filename "JENTER}"" Exit Function" End If- I open Word or make it the active window" ret a Rorn OponApp (ROM Wit INI -ENTRY, ROM- WORD-WINDOWCLASS, ROM-WORD-WNDOWNAME) I open the filename" If rat True Then" SendKeys Filename "(ENTER}"" End if- Word6Fila-Exit:" Exit Function Word6File Err:" Msg~ox "Cannot open Word for Windows document. Error: Error$, ROM -MB OK ROM HS ICONEXCL-AHATION, RO1{ULUS-APP NAME" Resume Wordd~ile -Exit" End Function6 Function RomOpenWord~jle (Docnum As String)4 On Error GoTo WordFile-Err" Dim rat As Integer" Dim Imagename As String^ Dim Filename As String^ I see if the filname is valid" Filename =Rom DocumentPath Docnum ".doc"" SUBSnuTE sHEE (Rule 26) W095/2210.1 PCV095100060 48 imagename Rom ImagePath Docnum If 'DirS(Filename) "Then'I rat 0 Magaox("There is no associated document. Would you like to create a document?", ROM-MB YESNO MB DEFBUTTON2 ROMMBICONQUESTION, ROMULUS APP NAME)^ If ret 7 Then GoTo WordFile Exit' Docmd Run~acro "Indicator"^ If Diz$(Imagename) Then Else GoTo WordFileyNext^ ret Magflox("Would you like to OCR the related image?", ROM-4MB3ESNO MB-DEFBJTTON2 ROM MB ICONQUESTION, ROMULUS APP NAME)^ If rat 7 Then GoTo WordFileNext^ ret Rom-OpsnApp(ROM WP-INI-ENTRY, ROM-WORD -WINDOWCLASS, ROHMWORD-WINDOWNAME)^ SendKeys "{ENTER}"' SendKeys 1"%fa" Filename& "{ENTER}"' SendKeys True^ SendKeys "(RIGHT 500}", Tr~ue^ SendKeys "(LEFT 500}", True^ SendKeys "(RIGHT 500}"1, True^ SendKeys "(LEFT S00}", True^ SendKeys 11%d" "{ENTER}"^ SendKeys Imagename "(ENTER)"^ Exit Function' End If' I open Word or make it the active window ret Rom-OpenApp (ROHMWP-INIENTRY# ROM WORD WINDOWCLASS, ROHMWOP4-WINDOWNAME)A open the filename- If ret -True Then^ SendKeys "1%foll Filename "(ENTER)"^ Exit Function' End If^ WordFile Next:' ret Rom-OpenApp(ROK-WP-INI-ENTRY, ROM-WORD-WINDOWCLASS, ROM WORD WINDOWNAME)- SendKeys "{ENTER}"' SendKeys 11%fa" Filename "{ENTER}"1 Exit Function' WordFileExit:' Exit Function^ WordFile Err:' MsgBox "Cannot open Word for Windows document. Error*.
Error$, ROMMB-OK ROM-MB-ICONEXCLAMATION, ROMULUS-APP NAME' Resume WordFileExit^ End Function' Function Rom_0penWordPerfect On Error GoTo NoOpenWordPrfect Err' Dim ret As Integer' ret Rom-openApp (ROMWP2INI-ENTRY, ROM-WORDPERFECT-WINDOWCLASS, ROM WORDPERFECT WINDOWNAME)' WordPerfect-Exit:' Exit Function' NoopenWordPerfect Err:' Msgaox "Cannot open Word Perfect. F-ror: 11 Error$, ROM-KqOK ROM-MB-ICONEXCLAMATION, ROMULUS APP NAME' Resume WordPerfect-Exit' End Function' Function Rom openWordPerfectFile (Filename As String)' On Error GoTo WPFile-Err' Dim ret As Integer' I see if the filename is valid' Filename Rom DocumentPath Filename' If DirS (Filename) 12'" Then' ret MsgBox('There is no associated document. Would you like to create a document?", ROM-M~rYESNO MB-DEFBUTTON2 ROM-MB ICONINFORMATXON, ROMULUS-APP NAE)' If rat -7 Then GoTo WPFile-Exit' DoCmd Run~acro "Indicator"' ret Rom OpenApp(ROH WP2 1HZ ENTRY, ROM-WORDPERFECT-WINDOWCLASS, ROM WORDPERFECT WINDOWNAME)- While (Rom-PuzzyrindWindow (ROM WORDPERFECT WINDOWCLASS, RaM WORDPERFECT WINDOWNAHE) Rom Yield^ Wend' SendKeys "{ENTER}"' SendKeys Filename "{ENTERI"' Exit Function' End If' I open Word or make it the active window^ ret Rem OpenApp(ROMWP2_INIENTRY, ROM-WORDPERFECT WINDOWCLASS, SUBSTIUTE SHEET (Rule 26) WO 95/22 104 ITT/AlU9.1/00060 49 ROH WORDPERFECT WINDOWNAHE) open the filename" If ret True Then^ Send~ays Filename "{ENTER}"" End lf" WPFile Exit:" Exit Function" WP~ilo Err:" Megflox "Cannot open Word Perfect document. Error: ErrorS, ROM _ME Ox RO MBICONECLAMATION, ROMULUS-APP-NAME" Resume WPFilefixit" End Function" Function RomppenWordScan On Error GoTo NoOpenWSCErr" Dim ret As Integer" rat -Rom OpenApp(ROH VIEWER INI-ENTRY, ROM WORDSCAN WINDOWCLASSr ROM-WORDSCAN-WINDOWNAME)" WSC Exit:" Exit Function" NoOpenWSC Err:"^ HagBox "Cannot open Word Scan. Error: '1 Error$, ROMMBOK ROiH MB ICONEXCLAMATIONr ROMULUS APP NAME" Resume WSC Exit- End Function" Function Rom-OpnWordSCalFile (Filename As String)" On Error GoTo WSCFile Err" Dim ret As Integer^ *See if the filename is valid" Filename ROM magePath Filename^ If Dir$(Filenenme) Then" ret MagBox("There is no associated image. Would you like to create an image?", ROHMHMBYESNO MB DEFBUTTON2 RON. MB ICONINFORHATIONr ROMULUS APP NAME)" If ret -7 Then GoTo WSCFile Exit" DoCmd RunMacro "Indicator"" ret -Rom-OpenApp(ROH VIEWER3_INIENTRY, ROM-FTCOLOR-WINDOWCLASS, ROH FTCOLOR -WIZ4DOWNAME)- Send~eys "1%fnil" "(ENTER)"" Send~eys 11%fa" Filename Sendl~eys Exit Function" GoTo WSCFLe Exit" End If"^ open Word Scan or make it the active window" ret -Rom operxApp(ROM VIEWER INI ENTRY, RON. WORDSCAN-WINDOWCLASS, ROM WORDSCAN-WINDOWNAME)" I open the filename" if ret =True Then^ Send~eys "%fnd11 Filename "(ENTER)"" End If" WSCFile Exit:" Exit Function" WSCFile Err:" MsgBox "Cannot open Word Scan image. Error: "1 ErrorS, ROM BOK RMMB-ICONEXCLAMATION, ROMULUS-APP-NAME" Resume WSCFile Exit" End Function" Romulus Path Module" 1* Copyright 1993 Romulus Software^ Option Compare Database 'Use database order for string comparisons" option Explicit Function Rom SavePaths On Error GoTo SavePath Err" Dim DB As Database" Dim PathsDyna As Dynaset" Dim ret As Integer" Set DB CurrentDB 0" set PathsDyna DB.CreateDynaset("Romulus Paths")" PathsDyn&.Edit" Rom DocumentPath -forms("Romulus Paths Form"1).form("DocPath11)" If Right$ (RoM-DocumentPath, 1) Then Rom DocumentPath Rem DocumentPath "\"PathsDyna("Ddcument Path") -Rom DocumentPath" Rem-ImagePath forms("Romulus Paths Form"). f or("ImagePath")" ^if Right$(Rom -ImagePath, 1) Then Rom ImagePath Rom ImagePath PathoDyna("Image Path") Rom ImagePath" Rom ISYSTextPath forsis("Romulus Paths Form"). form("TextPath")"- If Right$ (Rom iSYSTextPath, 1) Then Rom ISYSText'ath RomjISYSTextPath PathoDyna("ISYSTaxt Path") Rem.ISYSTextPath" Rom SpreadsheetPath forma("Romulus Paths Form"). form ("SpreadPath") If Right$ (Rom-SpreadSheetPath, 1) Then SUBSTrrUM SHEET (Rule 26) WO 95/22104 WO 952104PAU95/00O68 so Rom-SpreadSheetPath Rom SpreadSheetPath PatheDyna ("Spreadsheet Path") Rom-SpreadSheetPath^ Rom-ChartPath forms("Romulus Paths Form"l). form("ChartPath")^ If Right$ (Rom ChartPath, 1) Then Rom ChartPath RemChartPath PatheDyna ("Chart Path") Rom ChartPath" PathaDyna.Update^ DB.Close^ PathsDyna.Close^ ret =Rom_-ClosePathForm('" SavePath Exit:^ Exit Function^ SavePath Err:" MsgBox "Error: "1 Error$$ ROM ME OK ROMBICONEXCLAMATION, ROMULUSAPP-NAME^ Resume SavePath-Exit" End Function^ Function Rom InitPathForm On Error GoTo InitPath Err" Dim DB As Database- Dim PathsDyna As Dynaset" Set DB CurrentDB0^ Set PathsDyna DB.CreateDynaset ("Romulus Paths"')- forms ("Romulus Paths Form"). form( "DocPath") Pathsoyna("Document Path")^ forms("Romulus Paths Form"l).form("IlmagePath") PathsDyna ("Image Path")^ forms("Romulus Paths Form"). form("TextPath"')= PathaDyna (I"ISYSText Path")^ forms ("Romulus Paths Form"). form ("SpreadPath") PathsDyna ("Spreadsheet Path")" forms("Romulus Paths Form"l).form("ChartPath") PathisDyna ("Chart Path")^ DB.Close- PathsDyna. Close- InitPath -Exit:^ Exit Function- InitPath Err:" MsgBox "Error: 11 Error$, ROM MB OK ROM MB-ICONEXCLAAMATION, ROMULUSAPPNAME" Resume InitPath Exit" End Function" Romulus Utilities module- 1* Copyright 1993 Romulus Software" Option Compare Database 'Use database order for string comparisons- Option Explicit" Function Rom-Backup on Error GoTo Backup_E rr" Dim ret As Integer" Dim F.
4 eName As String" Dim RemName As String"^ find the filename of the app from the iifile" FileName Rom ReturnlniString(OM APP INI SECTION, ROl4_BACKUPINI ENTRY)" If (FileName Then" MsgBox "There is no filename listed for the Backup program in the ROMULUS.INI file.", ROM MB OK ROMMB ICONEXCLAMATION, ROMULUSAPPNAME" GoTo Backup_ Exit" End If" I open Backup or make it the active window" ret Shell(FileName, Backup_.Exit:" Exit Function" Backup E.rr:" MsgBox 'Error: Error$, RMEBOK RMHB-ICONEXCLAMATION, ROMULUS APP NAME" ResuJme Backup. Exit" End Function" Function Rom -WordGConvert on Error GaTe Word6ConvertErr" Dim ret As Integer" Dim FileName As String- find the convert template ni'ame from the ini -file" FileName Rom ReturnlniString(ROHAPPINI SECTION, ROM CONVERTINI ENTRY)" If (FileName Then" MsgBox "The Convert template is not listed in the ROMULUS.INI fi ROM MB OK ROM MB ICONEXCLAMATION, ROMULUSAPPNAME" GoTo Word6ConvertExit" End If" I open Word or make It the active window" ret Rom_ OpenApp(ROMWPINI-ENTRY, ROM-WORDWINDOWCLASS, ROMWORDWINDOWNAME)open the filename" If ret True Then" SendKeys File~ame "{ENTER}"" End If" Word6Convert-Exit:" Exit Function" Word6Convert Err:- MsgBox "Error: f SUBSTuTE SHEET (Rule 26) WO 95/22104 WO ')S22 104I'c'rAT95/00068 51 Error$, O MB -OK ROM-MB-ICONEXCLAMATION, RORULUS APP NAME" Resume Word6Convert Exit" End Function" Function Rom-Word61SYSCapture On Error GoTo Word6Captiire Err" Dim ret As Integer^ Dim FileName As String^ find the text edit template name from the i file- FileName Rem ReturnlniString (ROMtAPPINI-SECTION, ROM-TEXTSAVE -INI_-ENTRY)- If (FileName Then^ Msg~ox "The ISYS Capture template is not listed in the ROMULUS.INI file.", ROHMBE K ROM-MB-ICONEXCLAMATION, ROMULUS -APP -NAME- GaTe Word6Capture Exit" End If^ I open Word or make it the active window" ret RemOpenApp(ROM_WP_INI ENTRY, ROM WORDWINDOWCLASS, ROM WORD WIDONAM)^ open the filename- If ret True Then^ SendKeys 11%fn"1 FileName "{ENTER}r"^ SendKeys End If^ Word6Capture-Exit:" Exit Function^ Word6Capture Err:" MsgBox "Error: "1 Error$, RM ME-OK HO-B-ICONEXCLAMATION, ROMULUSAPPNAME^ Resume Wordt6Capture Exit" End Function^ Function Rem-Word6Join On Error GoTo Word6Join -Err^ Dim ret As Integer^ Dim FileName As String^ I shut the utilities form first so that we don't lock up when romlink sets Access as the active window" 'DoCmd Close A_-FORM, "Romulus Utilities"^ I find the join template name from the iifile" FileName Rem ReturnlniString(ROM APP INI SECTION, ROM-JOININI_-ENTRY)- If (FileName Then^ MsgBox "The Join template is not listed in the ROMULUS.INI file.", RMAB-OK ROM-MBICNEXCLAMATION, ROMULUS -APP -NAME" GoTe Word6Join Exit" End If" I open Word or make it the active window" ret= ReopenApp(ROMWPINI E,2'RY, ROM WORD WINDOWCLASs, ROMWORDWINDOWNAME)" open the filename" If ret. =True Then" SendKeys "1%fn" FileName "(ENTERj"" End If^ Word6Join Exit:" Exit Function" Word6Join-Err:" MsgBox "Error: "1 Error$, ROM-MBOK ROMMBICONEXCLAMATION, ROMULUS-APP NAME" Resume Word6Join Exit" End Function" Function RemWordOCRCapture On Error GoTo WordOCR Err" Dim ret As Integer" ret Rom -OpenApp(ROM_WP INI ENTRY, ROM WORD WINDOWCLASS, ROM WORD WINDOWNAME)" SendKeys 11%fn{ENTER}"" WordOCR Exit:" Exit Function^ WordOCRErr:- Magsox "Error: Error$, RMMEOK ROM-MBICONEXCLAATION, ROMULUS APP-NAME" Resume WordOCR-Exit" End Function" iAomulus Menus Module" 1* copyright 1993 Romulus Software" Option Compare Database 'Use database order for string comparisons" Option Explicit" Function Rem-Exit ~"On Error GoTo RomErkit Err" Dim hWnd As Integer" Dim ret As Integer"^ conf irm they really want to exit" ret Msgsox("Are you sure you wish to exit?" Error$, ROM_-MB -YESNO MB -DEFBUTTON2 ROMMBICONQUESTION, ROMULUSAPPNAME) If (ret 7) or (ret Then GoTo RemExit Exit" hWnd Rem FuzzyFindWindow(ROM WORD WINDOWCLASS, ROMWORDWINDOWNAME)" If hWnd Then" ret Rem Post~essage(hWnd, ROM-WM CLOSE, suBsTuTE sHEEr PRua 26) WO 95/22104 t/AU91100068 S2 0, 0W End If^ hWnd -m Fuzzy~indWindow( RoM EXCEL WINDOtqCLASS, ROH EXCEL WINDOWNAME)^ If hWnd Then^ rat Row PostMessage(hWnd, ROMWMCLOSE, 0, End If^ hWnd Rom FuzzyFindWindow(ROM ISYS WINDOWCLASS, ROM XSYSWINDWNA4E)- If hWnd Then- ret Row PostMessage(hWnd, RCH WMCLOSE, 0, End lf' '.Wnd Rom PuzzyFindWindow (ROM PSTYLER-WIIMOWCLASS, ROM PSTYLER WINDOWNAME)- If hWnd Then^ ret w Rom PostMessage(hWndf ROM-WM CLOSE, 0, End If^ hWnd RomFuzzyFindWindow(ROM-PTCOLOR-WINDOWCLASs, ROMFPTCOLOR-WINDOWNAHE)- If hWnd Then^ ret =Rom Post.Message(hWnd, ROM-WM CLOSE, 0, %nd If^ hWnd Rom FuzzyFindWindrj.w(ROlq ABC WINDOWCLASS, ROM4 ABC WINDOWNAHE)" If hWnd Thou^' ret =Row PostMessage(hWnd, ROM-WH CLOSE, 0, End If^ hWnd Rom FuzzyFind Window (ROM WORDPERFECTWINDOWCLASS, RON WORDrZ'RFECT WINDOWNAME)' If hWnd Then- ret -RC-TPPostMesaage(hWnd, ROM -WM -CLOSE, 0, End If' hWnd Rom FuzzyFindWindow(ROM _AMIPRo-WINDOWCLASS, ROMAMIPROWINDOWNAME)- If h~ad Then^ ret =Row PostMessage(hWnd, RONWMCLOSE, 0, End If^ hWnd= RomFuzzyFindWindow(ROMLOTUS123-WTNDoWcLAss, ROH LOTUS123 WINDOWUIAME)' if hWrid Then^ ret =Row PostMeseage(hWnd, ROM-WM CLOSE, 0, End If^ hWnd Row FuzzyFinelindow (RON QPRO WINDOWCLASS, RObkQPRO WINDOWNANE)- If hWnd Then^ ret Row Post~essage(hwnd, ROM -WM CLOSE, 0, End If^ hWnd= Rom FuzzyFindWindow (RON. WORDSCAN WINDOWCLASS, ROM WORDSCAN WINDOWNAME)- If h% hen- ret Rom Postuessaage (hWnd, ROMNW1.7CLOSE, 0, End If^ hWnd Roru_,:uzzyFindWindow (ROM OPENIMAGE WINDOWCLAS-., RON OPENIMAGE WINDOWNAME)- If hWnd Then' ret Row PostMessage(hWnd, RM-WH -CLOSE, 0, End If^ label package and audio and voice and retaource calc and isys update^ I shut down Access- Do~md Quit A PROMPT^ RomExit-Exit:' Exit Function^ RowExitErr:' MsgBox "Error: "1 Error$, ROM-MB OK ROM-MB ICONEXCLAMATION, ROMULUS APP NAME' Resume RowExit Exit^ End Functicn^,'* Romulus Numbering Module Copyright 1993 Romulus software, *^Option Compare Database 'Use database order for string comparisons'Option Explicit" set module variable'Dim gRow NuniaDirty As Iteger'Function Row AddNumbers Error GoTo AddNums ErrRom-Add~umbers False-Dim Prefix As StringDim StartNum As StringDim Endlium As String-Dim StartExt As StringDim EndExt As string^Dini PrefixVar As VariantDim StartNumVar As VariantDim EndNumVar As Variant'Diw StartExtVar As Variant'Dim EndExtVar As VariantDini PrefixLen As IntegerDiw StartNumLen As Integer-Dim EndNuxnLen As IntegerDim StartExtLen As IntegerDin End'lxtLen As Integer^Dim Num As IntegerDim Ext As Integer-Dim Buffer As String-Dim FileName As String-Dim FormatLine As StringDiri MaxWidth As Integer" get the values of the text controls'PrefixVar SUBSTIUTE SHEET (Rule 26) Wo 95122104 ~Vt) 95122104V 0TA 9510006ff *0 53 Waue (forms ("Romulus Numbering") .form ("Prefix")) If ZsI~ull (proefixV~x) Thsn^Prof ix a "04PrefixLen a O"Else"Prefix Prof LxVar"*PrefixLen s Lon (Prof ixVar) "End Ifo"8 rNumVar a formu(ftRonulg Numbering") .form( "Starting Numbor")41f XsNull(Btart~umVar) Then,"StaxtNum w """4StartNumLen n O^lo~itart~un a StartNum~aroCtArtlumLon N Lsn(StartNumVar)"E9nd XfAEndNmVLr forma( "Romulus Numbering") .form("Znding Numberv)4 "U ZNul2.(EodflumVar) Thon^EndNum ""OtndflumLen so O"lseEnd~um n EndNum~Va"ndumLon- Lon(EndNumVar) "End If4Start~xtVar UWase(foriu "Romulus Numbering") .form( "From Extension"*) Muull(Start~xtVar) ThonOStarttt ""StrtExt~en a. O"Els*4Star.Wxt -Staxt~xtVax"StartExtLen a Lon(StartExtVar) "End Xt"EndExtVar -UCaae(form "Romulus Numbori'g") .form( "To Cxtensicfn"))AXf XuNull(Endlxtvar) Then"EndExt 11""EndExtLrjn w 0O"ElzsEndExt- EndExtVarAEnd~xtLen Len(RndExtVar) "End If" 1 validate the start and end atringo^Xf (XaNumeric(Start~um) 1* False) Or (Val(StartNum) 1) ThWn"M9gOX "The 'Starting Number, must be a positive number (with optional leading zeroes)", ROH MB OK ROH NB ICONEXCLAMATXOU, ROMULUSAPPNAMMDo0=d GoToControl "Starting Numbar"*GoTo AddNumsExit"End Xf"If (EndNm And ((ZaNwnoric(EndNum) a False) Or (Val(End~um) Then-Mugaox "The 'Ending Number' must be a positive Number (with optional leading zeroax)", RO1ME....OK ROH NB rCONEXCLAHATION, ROHULUS APP AHE-DoCmd GoToControl "Starting Numbor"GoTo Addliums-Exit4Znd validate that startnum is greater than end num if they are both thero^If (End~um And (Val(EndNum) Val(StartNum)) Then"Musgox "The 'Ending Number, must must be greater than the 'starting Number.", ROI1 NB OK ROH MB _XCONEXCLAMATIONI ROMULUS APP NAME"DoCmd GoToControl "Ending Numbor"^GoTo AddNums Exit End If"' *validate total lengths*Xf ((StartNumLen PrefixLmn) 7) or ((9ndNumLon Praf ixLon) Then4Msg~ox "The total number of digits in the Prefix and the number cannot exceed ROH M13 OK ROH HB ICONZXCLaMATION# ROHULUS APP NMME"DoCmd GoToContro2. "Prefix"4foTo Add~umu ExitEnd If^"' validate the *xtensionu"Xf StartgxtLen I or (StartExt And (Startzxt or StartExt Then"Ngnox "The #Prom Extension' must be a single letter between and RON MB OK 1101 MB ICONEXCLAMITIONt ROMULUS APP NAM"foCmd GoTcControl "Prom Extension"**GoTo Addflums Exit"nd 1f'If End~xtien I. Or (EndExt And (EndExt Or EndEXt: Then-Magox "The 'Tc Extension' must be a single letter between and ROHM 143OK RONME Z-COI#EXCAHATXON, ROHULUS APP NAME-DoCmd GoToControl "To Extension"GoTo AddNums Exit",End If-if Endlxt And StartExt Thon^HugBox "There must be a 'From, Xxtension' if you enter a 'To Extension'.", StMSfTVtrB SUMBE P&u 26) WO 95122104 WO 9512104 CT/AU95IUO068 S4 ROIMBOK ROHN lI CONICXCLAMATXON, ROMULUS APP NAME-DoCmd CoToControl "From Extansion"GoTo AddNumuBxit'~nd IfAUI (EndExt And (EndExt Start~xt) ThenoMag~ox "The 'To Extension, must must be a letter that occurs after the 'Prom ExtensionO.", ROM HE OK ROH MD IcoNEXCLAMTION, ROMuLUS App NAM"DoCmd GoToControl "To Extension"oGoTo Add~ums ExitOEnd If-, If the c~ i number iN blank met it equal to the otart"'lf EndNum w Then End~um at startftm'lf EndExt a Then EndExt a StartExt"' determine the number of leading zeroes (if any)41f Left$(StartNz, 1) Or Left$(EndNum, 1) Thenlf StartNumLin DEdNumLon Theni^SaxWidth StartNumLen"Else^MaxWidthn EndfwnLenEnd lf Else^HaxWidth lAEnd If^FormatLine String$(HaxWidth, show hourglaso4DoCmd Hourglass Truel add the requested numbers to the filo4FileNamo a RomRturnlniString(RoN H UMFILE 1HZ SECTION, ROH UMFILSEJNZ ENTRY)^Opan FileName For Appi;.d AG #1^1f StartExt Then4For Num Val(StartNum) To Val(EndNum)^Print chr$(34) Prefix& Pormat$(Num, FormatLine) &x Chr$(34)^Next El0e^Fcr Num Val(StartNum) To Val(EndNum)' For Ext m Asc(StartExt) To Asc(EndExt)^Print ChrS(34) Prefix A Pormat$(Num, FormatLine) Chr$(Ext)j Chr$(34)^Next' Noxt^End If"I* got module variable to indicate we are now dirty~gRom -NumaDirty w True^' *make the print and view buttons active~forms(,'Romulus Numbering") .form( "Disabled ViewNumbers"l).Visible Ftilasefors( "Romulus Numbering") .form("Digabled PrintNumbers") .Visible Falseforms ("Romulus Numbering") .form( "View Numbers") .Enabled *True~forms ("Romulus Numbering").form('Print Numbers").Enabled aTrue^' clear all the edit controls'~forms ("Romulus Numbering") .form ("Prefix") -Null forms ("Romulus Numbring") .form( "Starting Number") -Nullforma("Romulus Numbering") .form( "Ending Number,-) =Null~forms( "fomulus Numbering"l).form( "Prom Extension") Null~forms("Romulus Numbring"l).form("Tt ntenuion") Null DoCmd GoToControl "Prefix"^Rom AddNumbers True*'A1dlumsuExit'^DoCMd Hourglass Pals^'Close 4Exit Punction"AddNums-Err: Nsgsox "Error: "1 Error$# RONM1B OK RON. NB ICONEXCLAMATXON, ROMULUS APP NAHE~'enume Add~ums ExitAEnd Punction~Wunation RomnClossNums Error GoTo CloseNums Err^Dim ExtraText As string^flim ret As Intogor~xf forms("Romulus Numbering").forM("Generato Records") aTrue Then'"ExtraToxt 1 and use them to generate database records"'ElseAExtraText ""AEnd Xf*If glOM-NumaDirty a True Then-~rot MagBox("You have created a list of numbers. Do you want to print them"& ExtraText RON. NE ICONEXCLAHATION 3, RONULUS -APP -NAME)^Zf ret -6 Then Yes oelected-ret Rom-Printuums(p^GoTo CloseNums Exit;^End If^Xf ret m 2 Then Cancel selectedGoTo Close~ums ExWtEnd If4End If No selected it SUBSTITUTE SHEET (RULE 26) WO 95/22104 WO 95221041cJ'1AU95/00068 s5 drops out4'DoCmd Close AFOflMt "Romulus Numbering"-ClooeNum Exit:^Exit ?unctiWnClocsNumsUErr* Mzg~ox "Error: "1 Error$, ROMEBOK RMMB-ICONEXCLAMATION, ROMULUS-APP NAME'"Reoume CloseNums Exit"End FunctionAFunction Rom OpenNumbering Error GoTo OpenI~um-ErrADoCmd OpenForm "Romulus Numbering"AOpfl~um-Exit: ^EXit FunctiWnOpenftmErr: MegBox "Error: 11 Error$, ROM-ME OK ROM-MB-ICONEXCLAI4ATXON, ROMULUS APP-NAMEResume OpenNum ExitEnd FunctionFunctior Rom PrintNums ()On Error GoTo PrintNumn ErrADim rot As Intsger^Dim FileName As String^Dim DB As flatabame-Dim MainDyna As Dynaest flim DocNum, As String~' No longer needed I disable the buttons instead"f If gRom-NUMBDirty False Then-' Msgflox "You have not created any numbers yet", ROM ME OK RON. MB ICONEXCLAMATIONt ROMULUS APP NAME4' GoTo PrintNums-ExitA' End If 'If Not IoNull(forms("RomulUs Numbaring").form("Starting Number")) Thenrst Rom -Adduumbers^lf ret 0 Then GoTo Print~ume-Exit^End If"l create the database records if requented~If forms("Romuluo Numbering") .form("Gonerate Records") True Thon^FiloName a Rom ReturnlniString(ROH NUMFILE INI SECTION, RON. NUMFILE INI ENTRY) AOpen FileName For Input As #IlASet D3 ft CurrantDsO)ASat Mainflyna DB.CreateDynaet("Romulus Databass")4BoginTrane^On Error Resume Next,"*nput DocNumWhile Err -O4MainDyna.AddNew^MainDyna ("Doc Number") DocNumHainDyna.Update flrr 0 '*so that if there is a duplicate key error we keep going^Xnput DocNumA WendCommitTrans AfB. Clone ^MainDyna. Clouea^On Error GoTo PrintNums Err^ClosEnd If^' according to selection set Avery labels up to open correct file'~If forms("Romulus Nur-bering").form("Bar Codes") True Then^FilNane Rom ReturnlniString(ROMNUN.ILE INX SECTION, RON. BARFILE TIIENTRY) AElseOileNamea RomfleturnlniString(ROM NUMPILE -INX-SECTION, RON. PLAINFILE IN INTRY) ABnd If'ret -RomyritePrivateProfileString (RON. AVERY LAYOUT SECTION, ROM _AVERY LASTFILE ENTRY, FileName, RMAVERY INX NAME)4A open Avery Labels or make it the active window'ret a Rom _Opanhpp(ROM LABEL INI ENTRY, RO..AVERY WINDOWCLASS, RON. AVERY WINDOWNAME)Ae*^1 update display of the linked item needed if already openw' open the filoname'' problem getting the list to link on first opening so will rely on a label that is already linked opening automatically~lpileName ft RomReturnlniString(RO. NUMPILE IN? SECTION, RON. NUMFXLE IN? ENTRY)"X~f ret I True Then-SendKeys FileName "tTABJ}{TABI TAE}{DOWN{(UPI}{UP}(UPI (UPI (UPI(UP) (UPI (UPI(DOWN){ENTERI {ENTER}%ml( ENER"4IEIseIGoTo Printflums -ExitlEnd IfAI*-Docmd close AFORM, "Romulus Numbering"^ PrintNums-Exit: Close-Exit Function^ PrintNums Err: ANhogBox "Error: SUBMTUMJ~ SHEET (RubC 26) WO 95/22104 11CMU95100060 56 Error$$ ROH 148OK ROHMEICONEXLAMIONt ROMULUSAPPNAHE'^Resum PrintNums Exit Znd runction^Function Rom-SetupNumbering ()On Error GoTo SstupNuUI Err- et module variable ti indicate we are now clearv-gfomNumoDirty FalWeDAiu FileName As String^' oat up the numbering file as empty' FileNama w Rom ReturnlniString(ROHMNUMFXLE-INI-SECTION, ROM-NUMPILEIXNIENTRY) Opan FileName For Output As *VSetupNum-Exit:^Clcse^Exit Function SetupNuMnErr:'Msg~ox "Error: 11 ErrorS, ROHMMB OK ROHMBIXCONEXCLAHATION, ROMULUS APP NAM^Resume SatupNumExit End FunctionFunction Rom -ViewNums Error GoTo ViewNum Err'ADim ret As IntegarADim FileName As String~' No longer needed I disable the buttons instead^' If gRornNum8Dirty False Then^' Hagaox 1"vou have not created any numbers yet", ROHMB OX, ROMULUS -APP -NAME^' GoTo ViewNum Exit" End lf' FileNama RomjReturninistring (ROHMNtMFILE-INI-SECTIONI ROHMNUHFILE-INIENTRY) -rot Shell("lnotepad "1 FileNae, 1) ^ViewNum Exit: ^Exit Function ViewNum Err:^MsgBox "Error: "1 ROHMME OK ROHMBICONEXCWAMTION, ROHULUS APP NAME^ReoUnie ViGWNUMEXit REnd Function SUBSTUErE SHE (Rubo 26)

Claims (28)

1. A method of facilitating the use of a plurality of G..L applications, the method comprising running a first G.U.I. application with a first data file or record loaded and at the same time displaying one or more primary symbols representing one or more further G.U.I. applications, and, on actuation of one of the primary symbols by a user, searching for a second data file or record associated with said first data file or record and, if such an associated second data file or record e~ists, causing the fu~rther G.tJ.I. application represented by said one of the primary symbols to be run with the associated second data file or record automatically loaded.
2. A method as claimed in Claim 1, wherein two data files or records are considered to be associated when their names are the same, or when designated parts, for example the first parts, of their names are the same.
3. A method as claimed in Claim I or 2, which further includes, while the first G.U.I. application is running, displaying one or more secondary symbols is representing said one or more further G.U.I. applications, and, on actuation of one of said secondary symbols by a user, running the G.tJ.I application associated with that secondary symbol with no data, file or record automatically loaded.
4, A method as claimed in any preceding claim, which further includes the step of, when one of the further G.U.I. applications is running, displaying a return symbol representing the first application, and, on actuation of the return symbol by a user, running the first GAttIL application.
A method as claimned i Claim 4, wherein the first G.U.I. application is run with a third data file or record automatically loaded if, when the return symbol is actuated, said one of the further G.U.I. applications is running with a fourth data file or record loaded and the third and fourth data files or records are associated with each oilier.
6. A method as claimed in any preceding claim, which further includes, when one of the further G.U.I. applications is running with a particular dama file or record loaded, displaying one or more further application symbols representing the other further applications, and, on actuation of one of the further application symbols by a user, causing the further G.tJ.I. application represented by said one of the further application symbols to be run with a data file or record automatically loaded which is associated with said particular data file or record.
7. A method as claimed in any preceding claim, wherein the user is able to specify, at any stage during the method, the default directories to be used by the G.U.I. applications (including the first G.U.I. application) when the G.U.I. applications are caused to be run by actuation of a relevant symbol. suBSmTUT sHE (Ruk 26) PCt/AU 95 /0 06 8 RECEIVED 0 5 JAN 1996
8. A mnethod as c timcd fin Claim 7, wherein two data files or records can only be associated with eich other, for example by virtue of their names, whatn each of thia dlata files or records is located in a respective default directory.
9. A method as claimed in Claim 8, which further includes displaying a 9 u r generating symbol and, on actuation of the number generating symbol, and iq-.of start and finish values, by the user, generating a sequence of numbers, or alphanumeric strings, between the start and finish values.
A method as claimed in Claim 9, which also includes generating a bar code corresponding to each number or string, and/or printing a label corresponding to each number or string, and/or creatirig a data file or record having a nlame corresponding to each string.
11. A device for carrying out the method claimed in any one of Claims I to 10, the device comprising computing means for running the G.U.J. applications, display means for displaying said symbols and information relating to the G.U,.L is applications~, first input means for allowing the user to actuate said symbols.
12. A method for allocating virtual memory in the Microsoft Widovso environment, said method comprising the steps of: providing an allocation request for virtual memory-, increasing said allocation request to define an extra virtual memory space for storing GUI objects-, and allocating an increased virtual memory space in response to said increased allocation request when said increased allocation request is less than or equal to the amount of free virtual memory available.
13. The method according to claim 12 further comprising the step of 2s writing overflow data in said allocated increased virtual memory space,
14. The method according to claims I I or 13 wherein said allocation request for virtual memory is provided for an application.
The method according to claim 14 further comprising the step of releasing said allocated virtual memory when. said application is closed.
16. The method according to any one of claims 12-15 wherein said allocation request is increased by a percentage value of said virtual memory.
17. The method according to any one of claims 12-16 wherein said GUI objects comprise a window name and a window class.
18. The method according to claim 17 wherein. said GUI objects further 36 comprise a desk class, or a child class, or a child class and a desk class.
19. A method of allocating windows resources in the Microsoft: Windows's environment, said method comprising tie steps of: providing an allocation request for windows resources:, AMENDED SHEET IPENAU .59. increasing said allocation request to define a buffer for storing GUI objects; and allocating an increased portion of said windows resources in response to said increased allocation request when said increased allocation request is less than or equal s to the amount of free windows resources available.
The method according to claim 19 further comprising the step of storing overflow data in said allocated increased portion of windows resources.
21. The method according to claim 19 or 20 wherein said allocation request for windows resources is provided for an application.
22, The method according to any one of claims 19-21 wherein said allocation request is increased by a percentage value of said windows resources.
23. The method according to any one of claims 19-22 wherein said GUI objects comprise a window name and a window class.
24. The method according to claim 23 wherein said GUI objects further *0 i comprise a desk class, or a child class, or a desk class and a child class.
25. A method of managing windows resources in the Microsoft Windows® environment, said method comprising the steps of: allocating an increased percentage of windows resources for an application displayed in a main window, said increased percentage of windows resources o. comprising a nominal portion of windows resources for said application and a buffer which are contiguously arranged in relation to one another; and i.n storing windows resources of one or more child windows of said main window in said buffer.
26. The method according to claim 25, wherein said step of allocating an as increased percentage of windows resources comprises the steps of: obtaining a request for said nominal portion of said windows resources generated by opening said application in said main windows; increasing said request by a factor for allocating said buffer contiguously with said nominal portion of said windows resources; reserving said increased percentage of windows resources in response to said increased request for windows resources when said increased request is less than or equal to the amount of free windows resources available.
27. The method according to claim 26 wherein said step of storing windows resources of one or more child windows of said main window in said buffer as comprises the steps of: obtaining a second request for windows resources generated by a child window; and S^ A n y t v, o 5 providing a portion of said buffer for said child window in response to said second request when said second request is less than or equal to the amount of free windows resources available in said buffer.
28. Method substantially as described herein with reference to the accompanying drawings. DATED this THIRTEENTH day of AUGUST 1996 NI-Tech Pty Limited Patent Attorneys for the Applicant SPRUSON FERGUSON 0* S. S.. S S S. SSSeS SS S S. S S S S S. S *S S S S S SS .5 S. S S. 55 S .2? I L~J IN Lfflti3063~4 Maa
AU17013/95A 1994-02-14 1995-02-14 Use of multiple applications and allocation of memory or other resources in a GUI environment Ceased AU693516B2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
AU17013/95A AU693516B2 (en) 1994-02-14 1995-02-14 Use of multiple applications and allocation of memory or other resources in a GUI environment

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
AUPM3875A AUPM387594A0 (en) 1994-02-14 1994-02-14 Improvements in and relating to the use of a plurality of G.U.I. applications
AUPM3875 1994-02-14
AUPM8698A AUPM869894A0 (en) 1994-10-10 1994-10-10 Improvements in and relating to the use of a plurality of G.U.I. applications
AUPM8698 1994-10-10
AU17013/95A AU693516B2 (en) 1994-02-14 1995-02-14 Use of multiple applications and allocation of memory or other resources in a GUI environment
PCT/AU1995/000068 WO1995022104A1 (en) 1994-02-14 1995-02-14 Use of multiple applications and allocation of memory or other resources in a gui environment

Publications (2)

Publication Number Publication Date
AU1701395A AU1701395A (en) 1995-08-29
AU693516B2 true AU693516B2 (en) 1998-07-02

Family

ID=27152334

Family Applications (1)

Application Number Title Priority Date Filing Date
AU17013/95A Ceased AU693516B2 (en) 1994-02-14 1995-02-14 Use of multiple applications and allocation of memory or other resources in a GUI environment

Country Status (1)

Country Link
AU (1) AU693516B2 (en)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0325885A2 (en) * 1988-01-26 1989-08-02 International Business Machines Corporation Direct cursor-controlled access to multiple application programs
EP0456275A2 (en) * 1990-05-11 1991-11-13 Fujitsu Limited A static memory allocation system

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0325885A2 (en) * 1988-01-26 1989-08-02 International Business Machines Corporation Direct cursor-controlled access to multiple application programs
EP0456275A2 (en) * 1990-05-11 1991-11-13 Fujitsu Limited A static memory allocation system

Also Published As

Publication number Publication date
AU1701395A (en) 1995-08-29

Similar Documents

Publication Publication Date Title
US7509345B2 (en) Method and system for persisting and managing computer program clippings
JP3181592B2 (en) Method and system for in-place interaction with embedded objects
US7600197B2 (en) Graphical user interface having contextual menus
US8132106B2 (en) Providing a document preview
US5897650A (en) Encapsulation of extracted portions of documents into objects
US5652876A (en) Method and apparatus for launching files created by non-resident application programs
JP4425348B2 (en) Compound document framework
US20050097577A1 (en) Application program interfaces and structures in a resource limited operating system
US7877701B2 (en) In-context total document views for manipulating data
US6633313B1 (en) Event routing mechanism in a computer system
US20050102607A1 (en) Method and system for setting document-linked timed reminders
JP2001216463A (en) Method and system for adding or removing element within cell designation range of spreadsheet
US6388686B1 (en) Method, system and computer program product for rotating through a sequence of display states in a multi-field text string class in a graphical user interface
JPH05216692A (en) Method and system for controlling program execution
US7363348B2 (en) Method and system in an office application for providing content dependent help information
EP1445707B1 (en) System and method for checking and resolving publication design problems
US20030009442A1 (en) Fat file system in Palm OS computer
US8732661B2 (en) User experience customization framework
US6592628B1 (en) Modular storage method and apparatus for use with software applications
US6046739A (en) System and method for organizing objects managed within a desktop
WO1995022104A1 (en) Use of multiple applications and allocation of memory or other resources in a gui environment
AU693516B2 (en) Use of multiple applications and allocation of memory or other resources in a GUI environment
JPH0756753A (en) Method and apparatus for sharing of utility function between operating systems
US20080162549A1 (en) System for automating the definition of application objects supporting undoing, redoing compressing and logging operations
US7228494B2 (en) Methods and systems for providing navigation within an application

Legal Events

Date Code Title Description
MK14 Patent ceased section 143(a) (annual fees not paid) or expired