Methods of applying software modifications5577244Abstract A software program having a plurality of separately installable features installed on a computer system is to be updated. An end user invokes an update program to update the installed software program. The user selects one of a plurality of operating modes for the computer system and identifies a target drive and directory where the software program is stored. Thereafter, the user identifies a source drive and directory where a plurality of update files are stored. If a prompted mode of operation has been selected, the system copies the update files from the source drive and directory to the target drive and directory and then applies all of the updates to the respective features stored on the target drive in a sequential manner. If a full function mode of operation has been selected, the system copies the update files from the source drive and directory to the target drive and directory and then displays the highest numbered update stored on the target drive and directory for a selected installed feature. The user can apply the highest numbered update and all of the lower numbered updates associated with the selected feature or a subset of the updates in a sequential manner. Claims We claim: Description TECHNICAL FIELD
______________________________________
MAIN PROC
INITIALIZE OS.sub.-- ERROR.sub.-- CODE TO ZERO.
IF OPERATION.sub.-- CODE IS INITIALIZE, THEN
CALL PANEL.sub.-- PREP TO SEARCH THE UPDATE
DIRECTORY FILE TO GET FIX
LIMITS AND PUT THEM IN THE
PANEL PARAMETERS.
IF NO ERRORS FROM PANEL.sub.-- PREP, THEN
IF MODE IS FULL FUNCTION, THEN
RETURN.sub.-- CODE = DISPLAY
ENDIF
ENDIF
ENDIF
IF NO ERRORS FROM PANEL.sub.-- PREP, THEN
IF OPERATION.sub.-- CODE IS PROCESS OR MODE
IS PROMPTED, THEN
IF VISIBLE.sub.-- PNL IS APPLY UPDATES AND
USER PRESSED ESC KEY, THEN
OS.sub.-- ERROR.sub.-- CODE = ZERO
RETURN.sub.-- CODE = BACKUP
ELSE USER IS NOT BACKING OUT OF
PROGRAM IF MODE IS FULL
FUNCTION, THEN
CALL COMPATIBLE TO DETERMINE
THE COMPATIBLE FIX
LIMITS.
CALL UNFIX TO REMOVE ALL
UPDATES FROM CODE
GROUPINGS THAT ARE
ALREADY APPLIED ABOVE
THE FIX LIMITS.
ENDIF
IF NO OS ERRORS, THEN
CALL APPLY.sub.-- FIXES TO APPLY
THE FIXES UP TO THE
LIMITS.
RETURN.sub.-- CODE = FINISH
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC MAIN PROC
PANEL.sub.-- PREP PROC
OPEN THE UPDATE DIRECTORY FILE
DO WHILE NOT END OF FILE AND NOT AN ERROR
READ A RECORD FROM UPDATE DIRECTORY
FILE GETTING THE GROUP.sub.-- ID
AND ITS UPDATE NUMBER.
FIX LIMIT FOR CODE GROUPING IN
RECORD = UPDATE NUMBER
FROM RECORD
ENDDO
CLOSE UPDATE DIRECTORY FILE.
IF ERROR FROM CLOSING FILE IS GREATER THAN
THE OS.sub.-- ERROR CODE THEN
OS.sub.-- ERROR.sub.-- CODE = CLOSING FILE
ERROR VALUE
ENDIF
ENDPROC PANEL.sub.-- PREP
______________________________________
Each of the subroutines will be discussed in detail. The first subroutine, PANEL.sub.-- PREP, opens an update directory file which contains information on all the updates available. Information on each update is contained in records in the file. The directory file has its records sorted in ascending order by feature or code grouping ID, update number, and sequence number. PANEL.sub.-- PREP reads each record placing the update number from the record into a FIX LIMIT variable for the corresponding code grouping. After every record has been read, the FIX LIMIT variables will contain the largest update number available for each of the code groupings. The screen panel, which is displayed to the user, shows the contents of the FIX LIMIT variables adjacent to the name of the code grouping. The update directory file is then closed and the largest error value returned from the operating system is returned to the main routine, MAIN, in the OS.sub.-- ERROR.sub.-- CODE variable. If the update program was invoked in the full function mode, then the RETURN.sub.-- CODE is set to DISPLAY and control is then returned to the driver program so that the prepared screen panel can be displayed to the user. The screen panel gives the user the opportunity to lower the FIX LIMIT variables displayed thereon. The driver program then recalls the update program with the PROCESS value in the OPERATION.sub.-- CODE parameter so that the second half of the main program can be executed to apply the updates. A test is made after the update program is invoked in order to determine if the user pressed an escape key or corresponding selection from a mouse device. This action indicates that the user wishes to return to the previous operation the driver program was engaged prior to the update program being invoked. If the user has pressed the escape key or its equivalent with the aid of the mouse or some other input device, the update program returns the BACKUP value in the RETURN.sub.-- CODE parameter to the driver program. Otherwise, the preparation of the screen panel continues by calling the subroutine COMPATIBLE to adjust the FIX LIMIT variables for each of the code groupings so that they are compatible with each other and by calling subroutine UNFIX to delete software components that have updates applied in excess of the FIX LIMIT variables.
______________________________________
COMPATIBLE PROC
OPEN THE UPDATE DIRECTORY FILE
DO WHILE NOT END OF FILE AND NOT AN ERROR
READ A RECORD FROM UPDATE DIRECTORY
FILE GETTING THE GROUP.sub.-- ID,
FIX.sub.-- NUMBER, AND ITS
BASE.sub.-- NUMBER
CALL HIGH.sub.-- BASE TO SET HIGH BASE FOR
CODE GROUPING FROM THE
RECORD.
ENDDO
CLOSE UPDATE DIRECTORY FILE.
IF ERROR FROM CLOSING FILE IS GREATER THAN
THE OS.sub.-- ERROR.sub.-- CODE THEN
OS.sub.-- ERROR.sub.-- CODE = CLOSING FILE
ERROR VALUE
ENDIF
IF OS.sub.-- ERROR.sub.-- CODE IS GOOD THEN
CALL LOW.sub.-- BASE TO SELECT THE LOWEST
BASE FIX FOR THE BASE LIMIT.
CALL FIX.sub.-- LIMITS TO DETERMINE THE FIX
LIMIT FOR EACH CODE GROUPING
CONSTRAINED BY THE LOWEST
COMMON BASE LIMIT.
ENDIF
ENDPROC COMPATIBLE
______________________________________
The subroutine COMPATIBLE opens the update directory file and reads the following variables GROUP.sub.-- ID, FIX.sub.-- NUMBER, and BASE.sub.-- NUMBER associated with records stored therein. The variable BASE.sub.-- NUMBER is the prerequisite update that must be applied to a common base component of the installed software program prior to the application of the update identified by the variable FIX.sub.-- NUMBER to its component or feature in order to have a compatible system. The variable BASE.sub.-- NUMBER contains the value of the update which is the lowest base update that must be applied. Higher updates may be acceptable without conflict.
______________________________________
HIGH.sub.-- BASE PROC
IF FIX.sub.-- NUMBER = GROUP.sub.-- FIX - LIMIT, THEN
GROUP.sub.-- BASE = BASE.sub.-- NUMBER
ENDIF
IF FIX.sub.-- NUMBER = GROUP.sub.-- FIX.sub.-- LIMIT + 1, THEN
IF BASE.sub.-- NUMBER > GROUP.sub.-- BASE, THEN
GROUP.sub.-- BASE = BASE.sub.-- NUMBER - 1
ENDIF
ENDIF
ENDPROC HIGH.sub.-- BASE
______________________________________
After each of the records is read by the subroutine COMPATIBLE, a subroutine HIGH.sub.-- BASE is called to determine the highest possible update number for updates applied against the common base component. If the value of the variable FIX.sub.-- NUMBER from the record does not match the value associated with a variable GROUP.sub.-- FIX.sub.-- LIMIT or the value of one plus the value associated with GROUP.sub.-- FIX.sub.-- LIMIT, then no action is taken and execution is returned to the subroutine COMPATIBLE. The variable GROUP.sub.-- FIX.sub.-- LIMIT contains the value of the fix limit for a particular code grouping. If the value of the variable FIX.sub.-- NUMBER from a selected record is equal to the value associated with the variable GROUP.sub.-- FIX.sub.-- LIMIT, then a variable GROUP.sub.-- BASE is set equal to the variable BASE.sub.-- NUMBER in the selected record. The variable GROUP.sub.-- BASE now contains the minimum update number of the base component to be compatible with the selected code grouping. If the user has not reduced the value associated with the variable GROUP.sub.-- FIX.sub.-- LIMIT displayed on the screen panel, then the variable GROUP.sub.-- BASE will also contain the highest possible update number for the base component. However, if updates for the given code grouping exist beyond the value associated with the variable GROUP.sub.-- FIX.sub.-- LIMIT, then the subroutine COMPATIBLE will call HIGH.sub.-- BASE again. The update that is one higher than the limit will contain a prerequisite base update number that cannot be exceeded for a compatible system. If the GROUP.sub.-- FIX.sub.-- LIMIT+1 update has the same BASE.sub.-- NUMBER as the GROUP.sub.-- FIX.sub.-- LIMIT update, then the value of the variable GROUP.sub.-- BASE remains equal to the value associated with the variable BASE.sub.-- NUMBER. If however, the GROUP.sub.-- FIX.sub.-- LIMIT+1 update has a prerequisite BASE.sub.-- NUMBER higher than the GROUP.sub.-- FIX.sub.-- LIMIT update, the value of the variable GROUP.sub.-- BASE is reduced by a value of one. Thus, a high base number for a selected code grouping will be at least as high as the prerequisite base number for the code grouping's fix limit but less than the prerequisite base number for the code grouping's update one beyond the update limit.
______________________________________
LOW.sub.-- BASE PROC
DO FOR EACH CODE GROUPING
IF CODE GROUPING BASE < BASE.sub.-- FIX.sub.-- LIMIT,
THEN
BASE.sub.-- FIX.sub.-- LIMIT = CODE GROUPING BASE
ENDIF
ENDDO
ENDPROC LOW.sub.-- BASE
______________________________________
The subroutine COMPATIBLE then closes the update directory file after all of the update records have been read and processed. A subroutine LOW.sub.-- BASE is then called in order to determine a variable BASE.sub.-- FIX.sub.-- LIMIT which is the lowest common base update number that is compatible with all of the code groupings. The subroutine LOW.sub.-- BASE facilitates the setting of the variable BASE.sub.-- FIX.sub.-- LIMIT to the lowest GROUP.sub.-- BASE from among all of the code groupings.
______________________________________
FIX.sub.-- LIMITS PROC
MAX.sub.-- FIX FOR EACH CODE GROUPING = FIX
LIMIT FOR EACH CODE GROUPING
OPEN THE UPDATE DIRECTORY FILE
DO WHILE NOT END OF FILE AND NOT AN ERROR
READ A RECORD FROM UPDATE DIRECTORY
FILE GETTING THE GROUP.sub.-- ID,
FIX.sub.-- NUMBER, AND ITS
BASE.sub.-- NUMBER.
IF NOT END OF FILE AND NOT A READ
ERROR, THEN
IF BASE.sub.-- NUMBER IS LESS OR EQUAL TO
BASE.sub.-- FIX.sub.-- LIMIT, THEN
DO FOR THE CODE GROUPING
THAT MATCHES GROUP.sub.-- ID
IF FIX.sub.-- NUMBER IS LESS OR
EQUAL TO MAX.sub.-- FIX
FOR THE CODE
GROUPING, THEN
FIX LIMIT FOR THE CODE
GROUPING =
FIX.sub.-- NUMBER
ENDIF
ENDDO
ENDIF
ENDIF
ENDDO
CLOSE THE UPDATE DIRECTORY FILE.
IF ERROR FROM CLOSING FILE IS GREATER THAN
THE ERROR FROM READING THE FILE,
THEN
OS.sub.-- ERROR.sub.-- CODE = CLOSING FILE ERROR
VALUE
ENDIF
ENDPROC FIX.sub.-- LIMITS
______________________________________
Finally, subroutine COMPATIBLE calls a subroutine FIX.sub.-- LIMITS to determine the fix limit for each code grouping constrained by this lowest common base limit, BASE.sub.-- FIX.sub.-- LIMIT. The subroutine FIX.sub.-- LIMITS initializes a set of temporary MAX.sub.-- FIX variables for each code grouping that contain the fix limits up to this point. The subroutine FIX.sub.-- LIMITS then opens the update directory file and reads every record before finally closing the file. While it is reading the file, the subroutine FIX.sub.-- LIMITS updates the fix limit for each code grouping. Thereafter, every record is read and tested to determine whether the value of the variable BASE.sub.-- NUMBER is less than or equal to the value associated with the variable BASE.sub.-- FIX.sub.-- LIMIT. If the value of BASE.sub.-- NUMBER is less than or equal to the value of BASE.sub.-- FIX.sub.-- LIMIT, then the corresponding code grouping is tested to determine whether the FIX.sub.-- NUMBER from the record is less than or equal to its temporary MAX.sub.-- FIX variable. This insures that the new limit does not exceed the limit imposed by the user earlier through the display panel. The new FIX LIMIT for the code grouping is set equal to the FIX.sub.-- NUMBER from the record. By the time all the records of the file have been thus processed, the FIX LIMIT for each of the code groupings will contain the number of the highest update that can be applied while being compatible with the common, prerequisite base update and not exceeding the limits imposed by the user. The subroutine FIX.sub.-- LIMITS then concludes by closing the file and returning to the subroutine COMPATIBLE which returns to the main program.
______________________________________
UNFIX PROC
DO FOR EACH CODE GROUPING THAT IS
INSTALLED
CALL REINSTALL TO REMOVE THE CODE
GROUPING'S FIXES.
IF THE CODE GROUPING WAS REINSTALLED,
THEN
SET CODE GROUPING'S DELETE FLAG
ON.
SET CODE GROUPING'S INSTALL FLAG
ON.
ENDIF
ENDDO
ENDPROC UNFIX
REINSTALL PROC
CLEAR THE REINSTALL.sub.-- FLAG.
INITIALIZE OS.sub.-- ERROR.sub.-- CODE TO ZERO.
IF GROUP.sub.-- APLD.sub.-- FIX > GROUP.sub.-- FIX.sub.-- LIMIT,
THEN
CALL NAME.sub.-- LISTER TO INITIALIZE FOR
GROUP.sub.-- ID.
IF NO ERROR FROM NAME.sub.-- LISTER, THEN
DO UNTIL NAME.sub.-- LISTER RETURN CODE
IS EMPTY OR OS.sub.-- ERROR IS
ENCOUNTERED.
CALL NAME.sub.-- LISTER FOR NEXT FILE
OF GROUP.sub.-- ID.
IF NAME.sub.-- LISTER RETURN CODE
IS GOOD, THEN
INVOKE OS TO DELETE THE
RETURNED FILE.
IF NO ERROR FROM DELETION,
THEN REINSTALL DELETED
FILE.
ENDIF
ELSE - NAME.sub.-- LISTER RETURN
CODE.sub.-- IS EMPTY
SET GROUP.sub.-- APLD.sub.-- FIX BACK
TO ZERO.
SET THE REINSTALL FLAG.
ENDIF
ENDDO
ENDIF
ENDIF
ENDPROC REINSTALL
NAME.sub.-- LISTER PROC
IF OPERATION.sub.-- CODE IS INITITALIZE THEN
PREPARE MEMORY BUFFER WITH FILE
NAMES COMPRISING THE SELECTED
CODE GROUPINGS.
SET POINTER TO FIRST FILE NAME IN
MEMORY BUFFER.
SET RETURN.sub.-- CODE TO GOOD.
ELSE .sub.-- OPERATION .sub.-- CODE IS GET.sub.-- NAME
IF MEMORY BUFFER IS EMPTY THEN
SET RETURN.sub.-- CODE TO EMPTY.
ELSE .sub.-- AT LEAST ONE NAME IS LEFT IN
THE BUFFER
MOVE FILE NAME AT POINTER INTO FILE
NAME PARAMETER.
DECREMENT POINTER TO POINT TO NEXT
FILE NAME IN BUFFER.
SET RETURN.sub.-- CODE TO GOOD.
DECREMENT POINTER TO POINT TO NEXT
FILE NAME IN BUFFER.
SET RETURN.sub.-- CODE TO GOOD.
ENDIF
ENDIF
ENDPROC NAME.sub.-- LISTER
______________________________________
The main program then calls a subroutine UNFIX to remove all updates from the code groupings that are already applied above the fix limits. The subroutine UNFIX then checks an installation flag from a status file associated with each of the code groupings to determine whether its associated component is installed on system 10. If the code grouping is installed, a subroutine REINSTALL is called to reinstall that code grouping without any updates if it contains updates that are beyond the FIX LIMIT. The subroutine REINSTALL then tests for updates exceeding the fix limit by comparing the value associated with a variable GROUP.sub.-- APLD.sub.-- FIX, which represents the highest applied update, to the value associated with the variable GROUP.sub.-- FIX.sub.-- LIMIT. The variable GROUP.sub.-- APLD.sub.-- FIX is stored in the status file which is updated and saved each time an update is applied. If GROUP.sub.-- FIX.sub.-- LIMIT is greater than or equal to GROUP.sub.-- APLD.sub.-- FIX, then no further action is taken and control is returned to the subroutine COMPATIBLE. Otherwise, when GROUP.sub.-- APLD.sub.-- FIX exceeds GROUP.sub.-- FIX.sub.-- LIMIT, more updates have been applied to the component than the user desires. So this component must be deleted and reinstalled without any updates. In order for the subroutine REINSTALL to delete an installed component, a subroutine NAME.sub.-- LISTER is called to initialize a file name list with names of the files of the particular code grouping that is to be removed. The main loop of REINSTALL calls the subroutine NAME.sub.-- LISTER to get the next file name in the set. The subroutine NAME.sub.-- LISTER determines whether a memory buffer is empty, returns the next file name and increments a pointer to the next entry in the buffer. If the memory buffer is empty, the RETURN.sub.-- CODE is set to EMPTY. Otherwise, the operating system is then invoked to delete the file by that name. This loop continues for every file in the component. The last call to the subroutine NAME.sub.-- LISTER results in a return code of EMPTY. Since all of the component's files are removed, the GROUP.sub.-- APLD.sub.-- FIX is set back to zero to indicate that no updates for this component are applied. A REINSTALL FLAG is set and subroutine REINSTALL returns to subroutine UNFIX. Thereafter, the subroutine UNFIX sets flags for a report showing that the component was deleted and to be installed again this session. After all the code groupings have been considered by the subroutine UNFIX, control is returned to the main program. At this point in the main program, all of the installed components of the software program have either all of their updates applied or they need to have some applied. None of the components will have updates applied that exceed those of the imposed fix limits. Subroutine APPLY.sub.-- FIXES is called to apply the unapplied updates to all of the installed components.
______________________________________
APPLY.sub.-- FIXES PROC
OPEN THE UPDATE DIRECTORY FILE
DO WHILE NOT END OF FILE AND NOT AN ERROR
READ AN UPDATE DIRECTORY TITLE RECORD
GETTING THE GROUP.sub.-- ID &
FIX.sub.-- NUMBER
DO FOR EACH CODE GROUPING
CALL FIX.sub.-- OR SKIP PASSING IT
FIX.sub.-- NUMBER FROM RECORD AND
APPLIED.sub.-- FIX.sub.-- NUM FOR CODE
GROUPING.
ENDDO
ENDDO
CLOSE UPDATE DIRECTORY FILE.
IF ERROR FROM CLOSING FILE IS GREATER THAN
THE OS ERROR CODE THEN
OS.sub.-- ERROR.sub.-- CODE = CLOSING FILE
ERROR VALUE
ENDIF
ENDPROC APPLY.sub.-- FIXES
FIX.sub.-- OR.sub.-- SKIP PROC
IF FIX NOT APPLIED
((FIX.sub.-- LIMIT >= FIX.sub.-- NUMBER) AND
(FIX.sub.-- NUMBER > APPLIED.sub.-- FIX.sub.-- NUM),
THEN
DO UNTIL LAST RECORD OF FIX OR AN
OS ERROR
READ NEXT UPDATE DIRECTORY FILE
TAIL RECORD.
IF NO READ ERROR, THEN
IF FIX IS A PATCH TYPE, THEN
INVOKE OS PATCH FACILITY TO
APPLY PATCH FROM
INSTRUCTIONS IN FILE
SPECIFIED IN FXFLSORC
OF THE TAIL RECORD.
ELSE - FIX IS A FILE REPLACEMENT
REPLACE THE FILE SPECIFIED IN
FXFLDEST WITH THE FILE
SPECIFIED IN FXFLSORC OF
THE TAIL RECORD.
ENDIF
ENDIF
ENDDO
IF NO ERROR, THEN
APPLIED.sub.-- FIX.sub.-- NUM = FIX.sub.-- NUMBER
(UPDATE THE APPLIED FIX
STATUS)
ENDIF
ELSE - THROW AWAY UPDATE DIRECTORY TAIL
RECORDS OF UPDATE NOT BEING
APPLIED
DO UNTIL LAST TAIL RECORD OF UPDATE
READ OR THERE IS A FILE READ ERROR
READ AN UPDATE DIRECTORY TAIL
RECORD.
ENDDO
ENDIF
ENDPROC FIX.sub.-- OR.sub.-- SKIP
______________________________________
Subroutine APPLY.sub.-- FIXES opens the update directory file and enters a loop reading update title records and calling a subroutine FIX.sub.-- OR.sub.-- SKIP to either apply the update or discard the remaining tail records of that update. The subroutine FIX.sub.-- OR.sub.-- SKIP performs a test to determine whether the update has been applied. This means that the FIX.sub.-- NUMBER from the record is greater than the APPLIED.sub.-- FIX.sub.-- NUM in the status file for the code grouping but less than the FIX LIMIT. If the update record indicates that the update is a patch such that instructions will be used to modify a file of the component, then a patch facility which is an integral part of the operating system is invoked to apply the patch. Otherwise, the update is a replacement of an entire file which is copied over the previous file by that name. If the update has already been applied or exceeds the limit, then, tail records are read from the update directory file until the title record of the next update is encountered. Then the subroutine FIX.sub.-- OR.sub.-- SKIP returns control to the subroutine APPLY.sub.-- FIXES. After the subroutine APPLY.sub.-- FIXES has read and processed all of the records in the update directory file, all of the updates up to the selected limits have been applied. The file is closed and subroutine APPLY.sub.-- FIXES returns control to the main program which returns control to the driver program with the FINISH value in RETURN.sub.-- CODE to indicate that all of its work has been accomplished. Referring to FIG. 2, there is shown a flow diagram which illustrates user and system 10 operations for updating the installed software program. In step 30, the user selects one of the modes of operation. As noted above, system 10 operates in the prompted mode or in the full function mode. The user in step 32 identifies a disk drive where the software program, which is to be updated, is stored. System 10 then determines in step 34 whether the user selected the prompted mode of operation in step 30. If the user has selected the prompted mode, the user instructs the system 10 in step 36 to copy the update files thereto. In step 38, the user identifies a source drive where the update files are stored. It should be noted that the update file may be located on a remote server (not shown) which the system 10 communicates with through the modem 28 or through a direct communication link. System 10 then copies the update files on the source drive to the target directory and creates the update directory file on the target directory. Thereafter, system 10 in step 40 determines which of the plurality of features of the software program have been installed on the system and then applies the respective updates to those features. If the user has selected the full function mode in step 30, system 10 in step 42 displays a full function menu which sets a plurality of functions which can be performed by the update program. System 10 then prompts the user in step 43 to determine if all of the updates have been applied. If there are additional updates to be applied, the user then instructs the system 10 by selecting an apply update function and the system prompts the user in step 44 to identify the source drive. System 10 then copies the update files on the source drive to the target drive and creates the update directory file on the target directory. Thereafter, system 10 in step 46 displays a screen panel which sets forth the highest update number or update limit appearing in the update directory file for each of the features of the software program. The highest number update and all of the lower number updates will be applied to the respective features when the user depresses an enter key on the keyboard 22. Alternately, the user may change the update limit to a lower number. System 10 in step 48 determines whether any previously installed updates exceed the changed update limit. If the update limit has been exceeded, system 10 in step 50 deletes all of the updates applied to those particular features. Thereafter, system 10, in step 52, reapplies the updates up to and including the update associated with the changed update limit. If the previously applied updates did not exceed the changed update limit, system 10 applies all unapplied updates in step 52. System 10 then returns to step 42 wherein the full function menu is displayed again. If all of the updates have been applied, the user, in step 43, terminates the update program. Otherwise, system 10 repeats steps 44 through 52 in the manner noted above. Referring to FIG. 3, there is shown a screen panel which is displayed to the user in response to the user indicating to the system 10 that a selected software program is to be updated. It is assumed that some or all of the plurality of features or components of the selected software program have been installed on system 10 and that the user has invoked the update program set forth above to facilitate the updating of the selected software program. The user then selects one of the modes of operation by (1) moving a cursor using a plurality of cursors keys on the keyboard 22 or using a mouse device so that the cursor is positioned adjacent to the mode which is to be selected, (2) pressing a "P" key or a "F" key and pressing the enter key on the keyboard to select the prompted mode or the full function mode, respectively, or (3) pressing the respective numerical key associated with the respective modes shown in the screen panel. System 10 then prompts the user to identify the target drive with a screen panel shown in FIG. 4. Prior to the display of the screen panel shown in FIG. 4, system 10 determines the location where the software program is stored therein and then displays on the screen panel a suggested target drive and directory for the software program. The user may accept the suggested target drive and directory or enter a different target drive or directory. If system 10 is operating in the prompted mode, the system then displays a screen panel shown in FIG. 5. The user enables system 10 to copy the update files by selecting a "copy update files" function as set forth in FIG. 5. System 10 then responds to the selection of the copy function with a screen panel shown in FIG. 6 wherein the user must provide the source drive and directory for the update files. The source drive and directory sets forth the location where the update files are stored. In a manner which is similar to that noted above, system 10 will suggest a source drive and directory which the user may accept or enter a different source drive or directory. The user, by pressing the enter key, enables system 10 to create the update directory file on the target drive and directory and store the update files in the directory. System 10 re-displays the screen panel shown in FIG. 5 wherein the user selects (1) the copy function if there are additional updates to be copied from a different drive and directory or (2) a "complete the installation" function. Once all of the updates have been copied to the target drive and directory, system 10 then determines which of the features of the software program has been installed and applies all of the updates stored in the update directory file to the respective features when the complete the installation function has been selected. After the system has applied all of the updates stored in the update directory file to the respective installed features, the system terminates this mode of operation. If system 10 is operating in the full function mode, a screen panel, full function selection menu, shown in FIG. 7 is displayed to the user after the display of the screen panel shown in FIG. 4. The user instructs system 10 to apply updates by selecting the appropriate function shown in FIG. 7. System 10 responds by displaying the screen panel shown in FIG. 6 wherein the user must provide the source drive and directory associated with the update files. In a similar manner as noted above, the user may accept the suggested drive and directory or enter a different source drive or directory. System 10 then responds to the input of the source drive and directory by displaying a screen panel shown in FIG. 8. The screen panel shown in FIG. 8 displays the highest update number or update limit in the update directory file for each of the features of the software program installed on the system. These updates and all of the lower updates will be applied to the associated features when the user presses the enter key. Alternately, the user may change the update limit to a lower number. System 10 will then determine if any updates which were previously applied exceed the changed update limit for the respective feature. If the previously applied updates exceed the changed update limit, system 10 will delete all of the updates and reapply all of the updates which are below or equal to the update limit. This activity enables the user to remove or backout any updates previously applied which may cause an error condition to exist in the software program. Thereafter, system 10 will display the screen panels shown in FIGS. 7, 6 and 8 until all of the updates have been applied or removed therefrom. While the invention has been particularly shown and described with reference to a preferred embodiment, it will be understood by those skilled in the art that various changes in form and detail may be made without departing from the spirit and scope of the invention.
|
Same subclass Same class Consider this |
||||||||||
