rSPEC COM SPEC DOC   !9"1!]~A[+ 2 22: "2!\$$~V[#M#\!}~2H@\!*"I:2K>2!~2#~2>2|\!j:H2|\]\\]\\>$2h:::*!>F#N0( !"OTOxVHG c W2!4[*G "3| "/ "? ""V "I' """##""C#"N"a"k"{""""$ "\#"###" ""6!9":\:2:2:2:2x! F!<2"xOO :W! w/:$2!"V~2#~2#~2!">!" w" *">w:2x:2 ::$22:2x! F!<2"xO UNLAWFUL COPY$W! w/:$2!"V~2#~2#~2!">!" w" *">w:2x:2 ::$ SPEC.COM ... v. 1.0, 1985, by John Fremont Enter the number of loads [1 to 255]: $2! file not found.$ No filename specified.$ end of file found unexpectedly!$ unsuccessful write attempt into 1st record$ DOUMENTATION FOR SPEC.COM CP/M command specification: SPEC filename.COM where represents the filename and filetype of a valid CP/M file containing object code which is loaded at 100h. The program will abort with an appropriate message if (1) No filename is specified, or (2) The file does not exist on the default drive. It is recommended that both SPEC and the target file be on the default drive. Also, note that SPEC is limited to files not greater than two extents. This was both for necessity and to avoid 16-bit arithmetic, however, if anyone would like to modify the program to include larger files, I might be willing to provide the source to them. Leave me a message on the boards... The program provides two degrees of protection: (1) A reference byte is stored on the system track the first time the protected file is loaded. For this reason, the protected program must exist on a standard disk format in which the outer track (TRK00) is reserved for the operating system. If the disk is copied, without copying the same system tracks, the program will terminate with 'UNLAWFUL COPY' and a warm boot. This byte is stored in the CP/M proprietary message and should not effect the operating system. (2) A counter byte is stored and referenced in memory and compared against SPEC. SPEC is requested when the program is first called and represents the number of loads you designate for the protected file. When SPEC has been reached, the protected program will then self-erase. Any attempts to unerase will be useless since the program will also write over itself. The purpose of this program was to provide software on a trial basis for my clients. If they decided against purchasing, the software would self-destruct and they would be unable to use it further. I thought this was a good idea at the time, and I still think it is a good idea. However, it is very difficult to protect CP/M programs since there does not appear to be any way to absolutely reference the disk. SPEC uses direct BIOS calls, against all the edicts of Digital Research, and they proved, if you'll forgive my French, to be a royal pain in the butt. It was necessary to set up alternate stacks and DMA's within the protected program and even then some CP/M utilities, like STAT, seem to behave erratically after run against SPEC. Ordinary programs, however, seem to run okay and so I am releasing SPEC to the domain albeit retaining exclusive copyrights. It's back to my experiments with the 1793 to see if there is any way to mark the disk. If any of you have any insight into referencing the gap or ID, I would sure like to hear about it!!!! J. Fremont Los Angeles August 13, 1985