Documentation for START.COM Start runs any program or makes any DOS call at a specified time. If a user is operating the computer at that time, his process is suspended, everything including the screen is saved, and the commanded process begins. When the commanded process is through, everything is restored for the user (including the screen, cursor position, etc) and the user can resume where he/she was interrupted. This program has some limitations since the IBM PC/AT/XT is not a multi task- ing system. The most obvious limitation is that the user gets interrupted! The second is that the program being invoked by START can't use all the system memory. It can only use about 62k. If it attempts to use more, the system will crash as explained later on. START.COM gives up all the memory that it "acquired" when it exits so it is possible to "chain" several START(s). For instance, START could invoke a batch program who's last line evoked START again. Usage: START [hh:mm:ss] [doscommand] Where: [hh:mm:ss] is the time in 00:00:00 format (no brackets). [doscommand] is any command (up to 64 characters in length). Note: A path must exist for the [doscommand]. For instance, the interrupt could occur when the user is in any directory or subdirectory. If you wish to run BACKUP.EXE at 1600 hours, and BACKUP.EXE is in the top directory, you must invoke START with the following command line. START 16:00:00 \BACKUP Limitations: There are NO defaults, and all fields in the [hh:mm:ss] portion must be filled (8 O'clock is 08:00:00). 24:00:00 does NOT exist! It is 00:00:00. A copy of COMMAND.COM (with the correct dos version) must exist in the top directory of the default drive. The program to be run must not attempt to use more than 64k! If is does, the system WILL crash! This is because when START.COM is envoked, it acquires 64k from the system. When it runs the program, it relinquishes all except the bare minimum that it requires to exist. It does this so there is room for COMMAND.COM and the called program to be loaded. COMMAND.COM is detached from the rest of the system and doesn't "know" that memory blocks after START.COM are probably in use by the program that just got interrupted. It will load the program overlay just after itself. If the program is not too big, there will be room and everything will be fine. If there is not enough room, the system will crash when returning to the interrupted program. This could, of course, be prevented by having START.COM acquire 128k from the system when it's loaded. Some systems don't have 128k to give up (and still be able to run another program)! A compomise. A full understanding of this program and how it works will prevent user's from having any problems. How it works: When START.COM is first loaded it "owns" all the memory in the computer just like any other .COM program. In order for you to run other programs after START.COM issues a terminate, but stay resident call to MS-DOS, it must give up some memory. It does this by keeping 64k and relinquishing the rest. START.COM parses the input command string and puts the saved time and the program to be run in a memory area safe from harm. It also redirects two interrupt vectors from the system clock. Every "TICK" of the system clock, which occurs about 18.5 times per second causes a counter to be decremented so that the system clock is "divided" by 18.5 to produce one-second ticks. A local "clock" within START.COM (which was set only once when START.COM was loaded) is incremented at each second, minute, hour, etc. Every time the seconds count is changed, START.COM checks to see if the internal time is the same as the commanded time when it was loaded. When the two times are equal, a lot of very important things are caused to happen. 1./ A flag is set to tell START.COM that the time is up. 2./ A "critical DOS" flag is checked to see if it is safe to interrupt MS-DOS. If not, the program continues (returns to the interrupted task). When is is safe to do so, the following things occur. 3./ The user's FLAGS, STACK, and REGISTERS are saved (on a private stack). 4./ The user's entire screen contents are saved (16k...all possible pages of screen memory). Also the cursor position, type, and background colors. This is saved in a temporary file called SCREEN.TMP. Unless the system crashes you probably will never see this file since it is deleted when the process exits. This file resides in the top directory of the default disk. 5./ The user's data transfer area (DTA) is saved (in memory). 6./ The user's directory and current disk is saved (in memory). 7./ It is not possible to save the user's type-ahead buffer. 8./ START.COM gives back to the system all but 2k of memory. This is to make room for COMMAND.COM and the program(s) it might load and execute. 9./ COMMAND.COM is loaded and executes the command string supplied when START.COM was loaded. This could be .COM .BAT or .EXE files. Also system calls. 10./ When COMMAND.COM is through, or when a control_C or control_Brk is entered, it returns to START.COM. 11./ START.COM restores the user's current disk, directory, screen contents, cursor type, cursor position, data transfer area. It also deletes the temporary work file SCREEN.TMP 12./ START.COM restores the interrupt vectors to where they pointed before START.COM was ever loaded. 13./ START.COM gives back to the system ALL memory that it acquired. (commits suicide). 14./ START.COM restores all the user's registers, stack, and flags. 15./ In it's last moments of existance, START.COM issues an interrupt return call and the user's program continues from where is was interrupted. Since, after the completion of START.COM's duties, it no longer exists, there is no limitation to the number ot times that is can be invoked except the available memory when all processes are loaded. Each time START.COM completes, it gives back 64k of memory to the system pool. As mentioned START.COM keeps it's own time in it's own private clock. This is to reduce the amount of CPU time that is uses from the system when it is resident. START.COM's clock get's set to the system clock ONLY when it is first loaded. If you reset the system clock, it will have NO effect upon the time that START.COM is using! START.COM divides the system "tick" by 18.2 to make one-second ticks. It really should divide it by 18.208! This means that the clock will be off about 1 second in 24 hours. All input during START.COM's program overlay should come from a FILE (like a batch file, etc.) No input should come from the system console except control_C or control_brk. This is to preserve the user's type-ahead buffer which could be ANYWHERE (and therefore can't be saved and restored). Another limitation (which I am trying to fix for a future version) is that one can't make DOS calls when DOS is is command! This is the purpose of the "critical DOS flag". This is because DOS does not save everything on a stack, but in certain memory locations (unknown ...since DOS could be loaded anywhere). If a program should make a DOS call from DOS, the original return addresses will be lost and replaced with the new ones....a crash will follow. Therefore...if you are sitting on the C> prompt when the time is up, nothing will happen! Of course, as soon as you load a program or do a directory or anything like that, START.COM will take over and do it's duty. A future version will save EVERYTHING in DOS and restore upon completion so that it can ignore the critical DOS flag. RBJ