ts@uwasa.fi (Timo Salmi LASK) (08/02/90)
Wed 1-Aug-90: I have updated my Turbo Pascal (4.0, 5.0, 5.5) units collection to be version (/pc/ts/)tspas21.arc. Turbo Pascal version 4.0 does not have the DosVersion function available in versions 5.0 and 5.5. I have written this function for version 4.0. Furthermore the lack of this function caused errors in TP 4.0 versions of my last two units. This has been put right. I have included a new unit (tsunti.tpu) for putting information into the .exe file, and retrieving the information (not for TP 4.0). The routines include a method for calculating the direct checksum for a file (eg for virus checking). This is not as trivial as it may sound at first sight, because in calculating the checksum, the checksum constant within the program must be skipped. (Else a change in the checksum constant would alter the checksum resulting in a "vicious circle"). Also, the method must be fast enough. I have also included a fast a date and filesize checking method for detecting if the .exe has been patched or its size altered. (Of course, the checksum method is much more difficult to defeat, but it is more complicated and not as fast). Here I have made an exception and included the source code. It is in the selftest.pas file within tspas21.arc. Available by anonymous ftp from chyde.uwasa.fi, Vaasa, Finland, 128.214.12.3. Summary of the Functions and Procedures in the TSPAS21.ARC Package Functions are indicated by the ending FN, the procedures by the lack of it. TSUNTA: (uses Dos, Crt, TSUNTE) ATTRIBFN Color attribute for direct write to video memory HIGHTFN Current height of text screen PANML Scroll screen left PANMR Scroll screen right VDAEXYFN Direct read of a screen video memory color attribute VDCHXY Direct read from the screen video memory VIDXY Direct write to the screen video memory WIDTHFN Current width of the text screen TSUNTB: (uses Dos) BINDECFN Convert binary to decimal BINFN Convert decimal to binary, fast BITONFN Status of a bit in a word CONVBFN Convert from a number of any base to any other base DECBINFN Convert decimal to binary, (outdated by BINFN) DECHEXFN Convert decimal to hexadecimal, (outdated by HEXFN) HEXDECFN Convert hexadecimal to decimal HEXFN Convert decimal to hexadecimal, fast LBINFN Convert longint to binary LHEXFN Convert longint to hexadecimal POWERFN Conventional raising of a positive number to a power POWERGFN Generalized raising of any real to a power POWERLFN Raise longint to a non-negative integer power R16TOFN Sixteen to a power TICKSFN Count of 18.2 times per second ticks TIMERFN Time elapsed since midnight TWOTOFN Two to a power TSUNTC: (uses Dos, Crt) PLAYNOTE Play a note REVCOLOR Reverse text colors (a toggle) TSUNTD: (uses Dos) AUDIO Enhanced Sound procedure, and no Crt unit needed DOSDELAY Delay without using the Crt unit GETPRTFN Get the number of default printer timeout retry times LEADFN Lead a string with a multiple character (i.e. pad left) LOWCASFN The oppsite of UpCase (inline coded) LPTONLFN Get the online status of the first parallel printer PARSE Extract all substrings from a string PRTONLFN Get the online status of a printer (may fail) PRTSCR Print the current screen SETPRT Set the number of default printer timeout retry times SPARTFN Returns a specified substring (resembles ParamStr) STRCNTFN Number of substrings in a string (resembles ParamCount) TRAILFN Trail a string with a multiple character (i.e. pad right) TRIMLFFN Trim a string left TRIMRGFN Trim a string right TSUNTE: (uses Dos) ALLSIZFN Allocated true size of a file in bytes BORDER Change border color (CGA, VGA) CAPS Turn CapsLock on, or off CAPSONFN Get CapsLock status CLB Clear the keyboard buffer CLUSIZFN Cluster size on a device (cluster is the allocation unit) CMDLNFN Returns the entire command line CURSOFF Turn off cursor (keeps other cursor attributes) CURSON Turn cursor back on as it was CURSOR Change cursor size DATEOKFN Is a date a valid, existing date DosVersion Get Dos version for Turbo Pascal 4.0 FEXISTFN File existence status, handles ReadOnly files correctly FSIZE2FN File size in bytes, alternative method FSIZEFN File size in bytes as in directory (never on open file) LASTDMFN The number of days in a given month and year MONOFN Is it a monochrome NUMLOCK Turn NumLock on, or off NUMLONFN Get NumLock status SCRLOCK Turn ScrollLock on, or off SCRLONFN Get ScrollLock status WEEKNRFN Returns the week number for a given date WKDAYFN Returns modern weekday ZELLERFN Zeller's conguence (for comparing dates etc) TSUNTF: (uses Dos, Crt) EDRDLN Readln with line-editing potential EDREADLN Readln with line-editing, recall, and insert toggle EDREABLN Edreadln with ctrl-c and break trapping TSUNTG: (uses Dos) CLS Set 25*80 text mode and clear screen (no Crt required) CLS40 Set 25*40 text mode and clear screen (no Crt required) COLDBOOT Reboot computer, including memory tests DRIVESFN Number of diskette drives on the system DSKCNTFN Get the number of disk devices (MsDos 3+ only) FDRIVEFN The name of the first diskette drive on the system FIXEDFN Is a drive a fixed disk or not GOATXY As the ordinary GoToXY but no Crt unit required INDRIVFN Is a media present in the given drive INKEYFN Basic-like timed character input KEYPREFN As the ordinary KeyPressed but no Crt unit required READKEFN As the ordinary ReadKey but no Crt unit required REVAREA Reverse the colors of an area USECON Restore write and writeln direction to the screen USEPRN Redirect write and writeln to the printer WARMBOOT Warm reboot of the coputer (as alt-ctrl-del) WHEREXFN As the ordinary WhereX but no Crt unit required WHEREYFN As the ordinary WhereY but no Crt unit required TSUNTH: (uses Dos) CHIPFN Get the type of the processor chip COPYFILE Copy a file from within a Turbo Pascal program COUNTRFN Get country code GRTABLFN Has MsDos GRAFTABL been loaded or not ISDIRFN Is a name a directory or not ISENHAFN To detect an enhanced keyboard MATHCOFN Is a math coprocessor present OPENEDFN Is an assigned textfile still open or not PARPORFN Get the number of parallel ports (printers installed) ROMDTEFN Get ROM BIOS version (date) RS232FN Get the number of serial ports TSUNTI: (uses Dos) (Not available for TP 4.0) BRANDEXE Store information within your program's .exe file CHKSUMFN Checksum selftest to detect any tampering USECOUNT Get the number of times the programs has been used SELFTEST.PAS: (uses Dos) SELFTEST Selftest .exe file's size and date to detect tampering ................................................................... Prof. Timo Salmi (Moderating at anon. ftp site 128.214.12.3) School of Business Studies, University of Vaasa, SF-65101, Finland Internet: ts@chyde.uwasa.fi Funet: gado::salmi Bitnet: salmi@finfun