********************************************************************* This article is being presented through the *StarBoard* Journal of the FlagShip/StarShip SIGs (Special Interest Groups) on the Delphi and GEnie telecommunications networks. Permission is hereby granted to non-profit organizations only to reprint this article or pass it along electronically as long as proper credit is given to both the author and the *StarBoard* Journal. ********************************************************************* - CP/M Primer #2 - Disk and File Attributes - Time/Date Stamping - Password Protection - By: Mike Mantino (GEnie address: MIKEM) - Last month we discussed the DIR and DIR.COM utilities (built-in and transient) which allowed us to view the disk directory in a variety of ways using a number of options. We were able to acquire listings of all the files we had on each drive and in each 'user area' of the disk, and in doing so we noticed that these files had their own distinct attributes. Some were SYS files, others were DIR files, and they all had a two-letter identifier signifying whether they were Read-Only (RO) or Read-Write (RW). So, too, we had brushed over the term 'time-stamping' and inferred that it was possible to password-protect individual files and/or whole disks. This month we will attempt to change and set these attributes and parameters in order to give you full control over your disk files. - The first thing we need to do upon boot-up of CP/M is to set the current time and date. This will later allow us to use time and date stamping of our files, so we can quickly locate the most recent copy of a file and check to see when it was last updated or accessed from disk. Let's do this right now. The DATE command is another transient utility that allows us to change the current date and time of day. When you boot-up CP/M, the date and time are defaulted to the creation date of your system. Let's see what that current time and date is. At the A> prompt, type DATE. CP/M will respond with something like: SAT 07/18/85 10:45:10 Now we will change this to the current date and time. There are two ways of doing this. The first is to type DATE followed by the current day and time, in the format: MM/DD/YY HH:MM:SS For example, we might type: A> DATE 08/10/86 11:30:00 CP/M would respond with: Press any key to set time. Another way of going about the same thing, would be to type DATE SET, and letting CP/M prompt us for input. For instance: A> DATE SET Would cause CP/M to respond with: Enter todays date (MM/DD/YY): Enter the date, or just press to skip the date, and CP/M will then respond with: Enter the time (HH:MM:SS): Enter the time, or press to skip the time, and CP/M will respond with: Press any key to set the time. Now that we have set the current date and current time, let us check to ensure that CP/M has indeed noticed our actions. At the A> prompt, type DATE and make sure that the date and time is actually what we had set it to. - We are ready to begin time and date-stamping of our files on disk and set up blank disks for future stamping. To do this, we must first run the INITDIR utility in order to initialize the directory. If files already exist on the disk, INITDIR will check the space available for date and time stamps in the directory. If there is not enough room there, INITDIR will not initialize it and will return an error message. If the disk is blank, the utility will set up your disk and set aside the appropriate space in the directory to store the stamping. INITDIR can also be used to clear time/date stamping from an already initialized disk, thus recovering some disk space. Let's take an example of how all of this is accomplished. A> INITDIR The system will return the following message: INITDIR WILL ACTIVATE TIME STAMPS FOR SPECIFIED DRIVE. Do you really want to re-format the directory: A (Y/N)? If the directory were already initialized for time and date stamping, then INITDIR would ask you: Directory is already re-formatted. Do you wish to recover date/time stamping directory space (Y/N)? Answering Y will eliminate stamping on that disk and recover space. If you answer N, then stamping remains active and INITDIR will then ask: Do you want the existing date/time stamping cleared (Y/N)? Entering Y will clear all current dates and times, but keep the disk initialized for further stamping. - Now we are ready to stamp some files with the current date and time, and once that is accomplished, any time we access or change that file, the current time and date can be easily assigned. We need to use the SET utility to set-up the file for the current time and date. This SET utility is one with lots of power. Besides using it for time and date stamping, it can allow us to set the file attributes (R/O and R/W, DIR and SYS), set the disk attributes (R/O and R/W), assign a label to the disk (just like a disk name in 64/128 mode), and assign passwords to the disk and/or files. More about these other options later. First, let's finish up time/date stamping. SET has three accompanying specifications for time and date stamping. They are: ACCESS, CREATE, and UPDATE. The first two, ACCESS and CREATE, are mutually exclusive options, meaning that when one is turned on, the other is automatically off. SET [CREATE=ON] is used before you create a CP/M file and will record the creation time of that file. SET [ACCESS=ON] is used to record when the last file was accessed. SET [UPDATE=ON] is used to record the time that the file was last updated. Thus, if you use both CREATE and UPDATE together, editing a file will change both the UPDATE and CREATE stamps. To view the file-stamping on your disk, all you have to do is use the DIR.COM utility with the [FULL] specification, like this: A> DIR [FULL] The best way to understand how this stamping operation works is to set ACCESS to ON, then load in a file on your disk. Abort from the program and type in the DIR [FULL] command to see what has happened. - Now we will review how to set the file attributes to READ ONLY, READ/WRITE, SYS, and DIR. As you know, files that have a SYS designation are SYStem files which, when in USER area 0 can be accessed from *any* USER area of the disk. To set a file to a SYStem file, we would call up the SET command again, but in this form (assuming that the file is called TESTING.COM): A> SET TESTING.COM [SYS] We could have, at the same time, set that same file so that it were READ ONLY by typing this: A> SET TESTING.COM [RO SYS] The same holds true for the DIR and READ/WRITE attributes. That was easy enough, and so is doing the same for the drive itself! To set drive B for READ ONLY, we would type: A> SET B: [RO] NOTE that setting a drive to READ ONLY would mean that PIP could not copy a file to it, RENAME could not rename a file on it, ERASE could not delete a file from it, and you could not perform any disk writing operation. Specifying READ/WRITE (RW) will reset the drive to its original state, as will pressing CONTROL-C. - Now, let's set up a label for your disk, just like giving the disk a name in C-64 or C-128 mode. We can assign a label name of up to eight characters, plus a three character type, similar to a file name and file type. For instance: A> SET [NAME=GAMES.108] This would give our disk the name GAMES.108. If we did not specify any name, the label would be defaulted to LABEL. Labels make it easy for us to catalog all of our CP/M disks. - We aren't done with the SET utility yet! If you've ever wanted to password-protect a disk or disk file before, now is your chance. To assign a password to the entire disk (actually to the disk label), all you need to do is use the following format. We will assume that you want to use a password of GENIE...... A> SET [PASSWORD=GENIE] Easy enough. Hereafter, the SET command will prompt for this password whenever you (or anyone else) tries to set any of the functions that are controlled by the SET utility. If you do not set up a disk password (label password), then anyone who has access to the disk can set up other attributes using SET, which will make the disk inaccessible to *you*! Any time you want to remove this password from the disk label, use the same syntax you used to assign it, but instead of the word just hit . Example: A> SET [PASSWORD= Again, note that the first bracket '[' must be used for specs, but the ending bracket ']' is optional. - Along with password-protecting the disk, we can also assign passwords to individual files on that disk. To do this, we must first tell CP/M to turn on protection for all disk files. We do this with yet another form of the SET utility: A> SET [PROTECT=ON] Now we specify the file which we want to assign a password to, and then the password itself: A> SET TESTFILE.TXT [PASSWORD=GENIE] Passwords for files do not need to be the same as those you use for the disk. Also, passwords can be up to eight characters in length, and all lower-case letters are translated to uppercase. In addition, you may use wildcards in your filespecs and SET will assign that password to all files that match. Now we can set a password-protection mode for those files with passwords. There are four forms we can use: READ, WRITE, DELETE, and NONE. An example of this would be: A> SET TESTFILE.TXT [PROTECT=READ] Here is an explanation of the individual modes and the level of protection they give your files: READ - The password is required in order to read, copy, write, delete or rename the file. WRITE - The password is required in order to write, rename, or delete the file. The password is not necessary to read the file. DELETE - The password is required only if you want to rename or delete the file. The password is not necessary to modify or read the file. NONE - No password is in existence for the file. If one does exist, you may use this to delete the password. Here are two examples of chaining specs in order to password protect files: A> SET TESTFILE.TXT [PASSWORD=GENIE PROTECT=WRITE] A> SET *.TXT [PASSWORD=GENIE PROTECT=WRITE] The first example sets the password 'GENIE' to the file called TESTFILE.TXT, and makes it WRITE protected to prevent someone from editing it. The second example does the same thing, but because we used the * wildcard, *all* text files on the disk will be given the password and WRITE protection. - WARNING!!!! Always make a record of your passwords! You will not be able to access your files without your file-passwords, unless you turn off the protection for the whole disk. AND!!.....if you forget the password to the disk itself, you cannot access the disk in order to access those files! - NOTES: I realize that the options we have discussed this month are not really basic essentials that one needs to know, but they do go a long way in familiarizing you with the CP/M environment and the syntax that is used in almost all programs and utilities encountered in this environment. Next month we will discuss the KEYFIG utility that allows us to set-up default colors, change our keyboard configuration, and execute them automatically upon boot-up. Also, we will take a peek into SUBMIT files and the PROFILE.SUB start-up file. Same time, same station! -Mike Mantino