home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 31
/
CDASC_31_1996_juillet_aout.iso
/
vrac
/
cddk9605.zip
/
HEADERS.ARJ
/
XSTRINGS.INT
< prev
Wrap
Text File
|
1996-05-17
|
22KB
|
620 lines
{ ───────────────────────────────────────────────────────────────────────── }
{ Name : XSTRINGS.PAS }
{ Description : Extended strings unit }
{ ───────────────────────────────────────────────────────────────────────── }
UNIT xStrings;
{$B-} { . . . . . . . . . . . . . . . . . . . . Shortcut boolean evaluation }
{$F+} { . . . . . . . . . . . . . . . . . . . . Force far calls for safety }
{$I-} { . . . . . . . . . . . . . . . . . . . Disable input/output checking }
{$O+} { . . . . . . . . . . . . . . . . . . Allow this unit to be overlayed }
{$Q-} { . . . . . . . . . . . . . . Do not generate overflow-checking code }
{$R-} { . . . . . . . . . . . . . . . . Do not generate range-checking code }
{$S-} { . . . . . . . . . . . . . . . . Do not generate stack-checking code }
{$X+} { . . . . . . . . . . . Extended syntax for pChars and function calls }
INTERFACE
TYPE
pChar1 = ARRAY[0 .. 1] OF Char; pChar2 = ARRAY[0 .. 2] OF Char;
pChar3 = ARRAY[0 .. 3] OF Char; pChar4 = ARRAY[0 .. 4] OF Char;
pChar5 = ARRAY[0 .. 5] OF Char; pChar6 = ARRAY[0 .. 6] OF Char;
pChar7 = ARRAY[0 .. 7] OF Char; pChar8 = ARRAY[0 .. 8] OF Char;
pChar9 = ARRAY[0 .. 9] OF Char;
pChar10 = ARRAY[0 .. 10] OF Char;
pChar15 = ARRAY[0 .. 15] OF Char;
pChar20 = ARRAY[0 .. 20] OF Char;
pChar30 = ARRAY[0 .. 30] OF Char;
pChar40 = ARRAY[0 .. 40] OF Char;
pChar50 = ARRAY[0 .. 50] OF Char;
pChar60 = ARRAY[0 .. 60] OF Char;
pChar70 = ARRAY[0 .. 70] OF Char;
pChar80 = ARRAY[0 .. 80] OF Char;
pChar90 = ARRAY[0 .. 90] OF Char;
pChar100 = ARRAY[0 .. 100] OF Char;
pChar200 = ARRAY[0 .. 200] OF Char;
pChar300 = ARRAY[0 .. 300] OF Char;
pChar400 = ARRAY[0 .. 400] OF Char;
String1 = STRING[1]; String2 = STRING[2]; String3 = STRING[3];
String4 = STRING[4]; String5 = STRING[5]; String6 = STRING[6];
String7 = STRING[7]; String8 = STRING[8]; String9 = STRING[9];
String10 = STRING[10]; String11 = STRING[11]; String12 = STRING[12];
String13 = STRING[13]; String14 = STRING[14]; String15 = STRING[15];
String16 = STRING[16]; String17 = STRING[17]; String18 = STRING[18];
String19 = STRING[19]; String20 = STRING[20]; String21 = STRING[21];
String22 = STRING[22]; String23 = STRING[23]; String24 = STRING[24];
String25 = STRING[25]; String26 = STRING[26]; String27 = STRING[27];
String28 = STRING[28]; String29 = STRING[29]; String30 = STRING[30];
String31 = STRING[31]; String32 = STRING[32]; String33 = STRING[33];
String34 = STRING[34]; String35 = STRING[35]; String36 = STRING[36];
String37 = STRING[37]; String38 = STRING[38]; String39 = STRING[39];
String40 = STRING[40]; String41 = STRING[41]; String42 = STRING[42];
String43 = STRING[43]; String44 = STRING[44]; String45 = STRING[45];
String46 = STRING[46]; String47 = STRING[47]; String48 = STRING[48];
String49 = STRING[49]; String50 = STRING[50]; String51 = STRING[51];
String52 = STRING[52]; String53 = STRING[53]; String54 = STRING[54];
String55 = STRING[55]; String56 = STRING[56]; String57 = STRING[57];
String58 = STRING[58]; String59 = STRING[59]; String60 = STRING[60];
String61 = STRING[61]; String62 = STRING[62]; String63 = STRING[63];
String64 = STRING[64]; String65 = STRING[65]; String66 = STRING[66];
String67 = STRING[67]; String68 = STRING[68]; String69 = STRING[69];
String70 = STRING[70]; String71 = STRING[71]; String72 = STRING[72];
String73 = STRING[73]; String74 = STRING[74]; String75 = STRING[75];
String76 = STRING[76]; String77 = STRING[77]; String78 = STRING[78];
String79 = STRING[79]; String80 = STRING[80]; String81 = STRING[81];
String82 = STRING[82]; String83 = STRING[83]; String84 = STRING[84];
String85 = STRING[85]; String86 = STRING[86]; String87 = STRING[87];
String88 = STRING[88]; String89 = STRING[89]; String90 = STRING[90];
String91 = STRING[91]; String92 = STRING[92]; String93 = STRING[93];
String94 = STRING[94]; String95 = STRING[95]; String96 = STRING[96];
String97 = STRING[97]; String98 = STRING[98]; String99 = STRING[99];
String100 = STRING[100]; String101 = STRING[101]; String102 = STRING[102];
String103 = STRING[103]; String104 = STRING[104]; String105 = STRING[105];
String106 = STRING[106]; String107 = STRING[107]; String108 = STRING[108];
String109 = STRING[109]; String110 = STRING[110]; String111 = STRING[111];
String112 = STRING[112]; String113 = STRING[113]; String114 = STRING[114];
String115 = STRING[115]; String116 = STRING[116]; String117 = STRING[117];
String118 = STRING[118]; String119 = STRING[119]; String120 = STRING[120];
String121 = STRING[121]; String122 = STRING[122]; String123 = STRING[123];
String124 = STRING[124]; String125 = STRING[125]; String126 = STRING[126];
String127 = STRING[127]; String128 = STRING[128]; String129 = STRING[129];
String130 = STRING[130]; String131 = STRING[131]; String132 = STRING[132];
String133 = STRING[133]; String134 = STRING[134]; String135 = STRING[135];
String136 = STRING[136]; String137 = STRING[137]; String138 = STRING[138];
String139 = STRING[139]; String140 = STRING[140]; String141 = STRING[141];
String142 = STRING[142]; String143 = STRING[143]; String144 = STRING[144];
String145 = STRING[145]; String146 = STRING[146]; String147 = STRING[147];
String148 = STRING[148]; String149 = STRING[149]; String150 = STRING[150];
String151 = STRING[151]; String152 = STRING[152]; String153 = STRING[153];
String154 = STRING[154]; String155 = STRING[155]; String156 = STRING[156];
String157 = STRING[157]; String158 = STRING[158]; String159 = STRING[159];
String160 = STRING[160]; String161 = STRING[161]; String162 = STRING[162];
String163 = STRING[163]; String164 = STRING[164]; String165 = STRING[165];
String166 = STRING[166]; String167 = STRING[167]; String168 = STRING[168];
String169 = STRING[169]; String170 = STRING[170]; String171 = STRING[171];
String172 = STRING[172]; String173 = STRING[173]; String174 = STRING[174];
String175 = STRING[175]; String176 = STRING[176]; String177 = STRING[177];
String178 = STRING[178]; String179 = STRING[179]; String180 = STRING[180];
String181 = STRING[181]; String182 = STRING[182]; String183 = STRING[183];
String184 = STRING[184]; String185 = STRING[185]; String186 = STRING[186];
String187 = STRING[187]; String188 = STRING[188]; String189 = STRING[189];
String190 = STRING[190]; String191 = STRING[191]; String192 = STRING[192];
String193 = STRING[193]; String194 = STRING[194]; String195 = STRING[195];
String196 = STRING[196]; String197 = STRING[197]; String198 = STRING[198];
String199 = STRING[199]; String200 = STRING[200]; String201 = STRING[201];
String202 = STRING[202]; String203 = STRING[203]; String204 = STRING[204];
String205 = STRING[205]; String206 = STRING[206]; String207 = STRING[207];
String208 = STRING[208]; String209 = STRING[209]; String210 = STRING[210];
String211 = STRING[211]; String212 = STRING[212]; String213 = STRING[213];
String214 = STRING[214]; String215 = STRING[215]; String216 = STRING[216];
String217 = STRING[217]; String218 = STRING[218]; String219 = STRING[219];
String220 = STRING[220]; String221 = STRING[221]; String222 = STRING[222];
String223 = STRING[223]; String224 = STRING[224]; String225 = STRING[225];
String226 = STRING[226]; String227 = STRING[227]; String228 = STRING[228];
String229 = STRING[229]; String230 = STRING[230]; String231 = STRING[231];
String232 = STRING[232]; String233 = STRING[233]; String234 = STRING[234];
String235 = STRING[235]; String236 = STRING[236]; String237 = STRING[237];
String238 = STRING[238]; String239 = STRING[239]; String240 = STRING[240];
String241 = STRING[241]; String242 = STRING[242]; String243 = STRING[243];
String244 = STRING[244]; String245 = STRING[245]; String246 = STRING[246];
String247 = STRING[247]; String248 = STRING[248]; String249 = STRING[249];
String250 = STRING[250]; String251 = STRING[251]; String252 = STRING[252];
String253 = STRING[253]; String254 = STRING[254]; String255 = STRING[255];
TYPE
CharSet = SET OF Char;
tCRC16_Table = ARRAY[0..255] OF Word;
pCRC16_Table = ^tCRC16_Table;
tCRC32_Table = ARRAY[0..255] OF LongInt;
pCRC32_Table = ^tCRC32_Table;
CONST
CRC16_Seed = 0;
CRC32_Seed = $FFFFFFFF;
CRC16_Table : pCRC16_Table = NIL;
CRC32_Table : pCRC32_Table = NIL;
{$IFDEF FRENCH}
DayName : ARRAY[0..6] OF pChar15 = (
{00} 'dimanche',
{01} 'lundi',
{02} 'mardi',
{03} 'mercredi',
{04} 'jeudi',
{05} 'vendredi',
{06} 'samedi');
MonthName : ARRAY[1..12] OF pChar15 = (
{01} 'janvier',
{02} 'février',
{03} 'mars',
{04} 'avril',
{05} 'mai',
{06} 'juin',
{07} 'juillet',
{08} 'août',
{09} 'septembre',
{10} 'octobre',
{11} 'novembre',
{12} 'décembre');
SeasonName : ARRAY[1..4] OF pChar15 =
{01} 'le printemps',
{02} 'l''été',
{03} 'l''automne',
{04} 'l''hiver');
{$ENDIF}
{$IFDEF GERMAN}
DayName : ARRAY[0..6] OF pChar15 = (
{00} 'Sonntag',
{01} 'Montag',
{02} 'Dienstag',
{03} 'Mittwoch',
{04} 'Donnerstag',
{05} 'Freitag',
{06} 'Sonnabend');
MonthName : ARRAY[1..12] OF pChar15 = (
{01} 'Januar',
{02} 'Februar',
{03} 'März',
{04} 'April',
{05} 'Mai',
{06} 'Juni',
{07} 'Juli',
{08} 'August',
{09} 'September',
{10} 'Oktober',
{11} 'November',
{12} 'Dezember');
SeasonName : ARRAY[1..4] OF pChar15 = (
{01} 'Frühling',
{02} 'Sommer',
{03} 'Herbst',
{04} 'Winter');
{$ENDIF}
{$IFDEF SPANISH}
DayName : ARRAY[0..6] OF pChar15 = (
{00} 'el domingo',
{01} 'el lunes',
{02} 'el martes',
{03} 'el miércoles',
{04} 'el jueves',
{05} 'el viernes',
{06} 'el sábado');
MonthName : ARRAY[1..12] OF pChar15 = (
{01} 'enero',
{02} 'febrero',
{03} 'marzo',
{04} 'abril',
{05} 'mayo',
{06} 'junio',
{07} 'julio',
{08} 'agosto',
{09} 'septiembre',
{10} 'octubre',
{11} 'noviembre',
{12} 'diciembre');
NoYes : ARRAY[False..True] OF pChar3 = ('no','sí');
SeasonName : ARRAY[1..4] OF pChar15 = (
{01} 'la primavera',
{02} 'el verano',
{03} 'el otoño',
{04} 'el invierno');
{$ENDIF}
{$IFNDEF FRENCH}
{$IFNDEF GERMAN}
{$IFNDEF SPANISH}
DayName : ARRAY[0..6] OF pChar15 = (
{00} 'Sunday',
{01} 'Monday',
{02} 'Tuesday',
{03} 'Wednesday',
{04} 'Thursday',
{05} 'Friday',
{06} 'Saturday');
MonthName: ARRAY[1..12] OF pChar15 = (
{01} 'January',
{02} 'February',
{03} 'March',
{04} 'April',
{05} 'May',
{06} 'June',
{07} 'July',
{08} 'August',
{09} 'September',
{10} 'October',
{11} 'November',
{12} 'December');
SeasonName : ARRAY[1..4] OF pChar15 = (
{01} 'spring',
{02} 'summer',
{03} 'autumn',
{04} 'winter');
NoYes : ARRAY[False..True] OF pChar3 = ('No','Yes');
{$ENDIF}
{$ENDIF}
{$ENDIF}
HexChars = ['0'..'9','A'..'F','a'..'f'];
Hex_Digit : ARRAY[0..15] OF Char = '0123456789ABCDEF';
Tmp_pChar : ARRAY[0..255] OF Char = '';
UpCaseChars : SET OF Char = [#0..#47,'·'];
FUNCTION AllDigits(p:pChar):Boolean;
{
PURPOSE : Returns TRUE if the all of the characters are digits.
NOTES : This function is merely a wrapper for AllInSet.
SEE ALSO : AllInSet, CountDigits
}
FUNCTION AllInSet(p:pChar; List:CharSet):Boolean;
{
PURPOSE : Returns TRUE if all of the characters in the string
are in the given character set.
SEE ALSO : AllDigits
}
PROCEDURE Allocate_CRC16_Table(VAR p:pCRC16_Table);
{
PURPOSE : Generates a 16-bit CRC table for future calculations.
SEE ALSO : Allocate_CRC32_Table
}
PROCEDURE Allocate_CRC32_Table(VAR p:pCRC32_Table);
{
PURPOSE : Generates a 32-bit CRC table for future calculations.
SEE ALSO : Allocate_CRC16_Table
}
FUNCTION AppendChr(p:pChar; c:Char):pChar;
{
PURPOSE : Appends a character to a string.
NOTES : No range checking is performed.
}
FUNCTION Calculate_CRC16 (p:pChar):Word;
FUNCTION Calculate_CRC16I (p:pChar):Word;
FUNCTION Calculate_CRC32 (p:pChar):LongInt;
FUNCTION Calculate_CRC32I (p:pChar):LongInt;
{ These routines perform 16-bit and 32-bit CRC calculations. }
PROCEDURE Capitalize(VAR s:OpenString);
{
PURPOSE : Capitalizes a Turbo Pascal string.
}
FUNCTION Char_pChar(p:pChar; c:Char):pChar;
{
PURPOSE : Converts a character to a string.
NOTES : The destination must have enough room to hold the character
and the terminating null-zero.
}
FUNCTION Clip(p:pChar; SetSize:Integer; Filler:Char):pChar;
{
PURPOSE : Clips or pads the string to a given size.
NOTES : ■ SetSize < 0 : The string is left-justified.
■ SetSize > 0 : The string is right-justified.
■ SetSize = 0 : NOP (no operation).
The string length cannot exceed 32767 characters.
SEE ALSO : Delete
}
FUNCTION CountDigits(n:LongInt):Byte;
{
PURPOSE : Returns the size of the string representation of the number,
not including the positive or negative sign.
SEE ALSO : AllDigits
}
FUNCTION DayExtension(p:pChar; Day:Byte):pChar;
{
PURPOSE : Returns the two-character extension of the day number.
NOTES : The destination must contain enough room to hold two
characters. The day number cannot exceed 31. The result
will be 'st', 'nd', 'rd' or 'th'.
}
FUNCTION ExtractNames(p:pChar; VAR First,Last:pChar):pChar;
{
PURPOSE : Extracts the first and last names from a string.
WARNING : No error or range checking! Do not use in uncontrolled
enviroments or risk a system crash!
}
FUNCTION FormattedBaud(p:pChar; Baud:LongInt):pChar;
{
PURPOSE : Returns a formatted version of the baud rate.
NOTES : The destination must have enough room to retain 4 characters
plus the terminating null-zero.
Baud Result Baud Result
────────────────────────────────────────────
0 Zero 300 Slow
1200 1200 2400 2400
4800 4800 7200 7200
9600 9600 12000 12.0
14400 14.4 16800 16.8
19200 19.2 21600 21.6
24000 24.0 26400 26.4
28800 28.8 38400 38.4
57600 57.6 64000 64.0
Greater c²
}
FUNCTION HexByte(c:Char):Byte;
{
PURPOSE : Concerts a hexadecimal character to a byte.
NOTES : Valid characters are 0 to 9, A to F and a to f.
Hex Dec Hex Dec
0 0 8 8
1 1 9 9
2 2 A 10
3 3 B 11
4 4 C 12
5 5 D 13
6 6 E 14
7 7 F 15
SEE ALSO : HexInt
}
FUNCTION HexInt(p:pChar):LongInt;
{
PURPOSE : Converts a hexadecimal string to a longint.
NOTES : Valid characters are 0 to 9, A to F and a to f.
SEE ALSO : HexByte
}
FUNCTION Int_pChar(p:pChar; i:LongInt):pChar;
{
PURPOSE : Converts a LongInt to a string.
NOTES : The destination must have enough room to hold the worst-case
scenerio: a value of -2147483648 (the smallest LongInt possible.
Twelve bytes is sufficient to hold ten digits, the negative
sign and the terminating null-zero.
SEE ALSO : Int_Str
}
FUNCTION Int_Str(i:LongInt):STRING;
{
PURPOSE : Converts a LongInt to a Turbo Pascal string.
SEE ALSO : Int_pChar
}
FUNCTION IsAlpha(C:Char):Boolean; { Test for letters. }
FUNCTION IsAlNum(C:Char):Boolean; { Test for alphanumeric characters. }
FUNCTION IsDigit(C:Char):Boolean; { Test for digits (numbers). }
FUNCTION IsLower(C:Char):Boolean; { Test for lower-case letters. }
FUNCTION IsUpper(C:Char):Boolean; { Test for upper-case letters. }
FUNCTION IsHiBit(C:Char):Boolean; { Test for high-ASCII characters. }
FUNCTION LoCase(c:Char):Char;
{
PURPOSE : Returns the lower-case version of the character.
SEE ALSO : UpCase (SYSTEM.TPU)
}
FUNCTION LZ(p:pChar; n:LongInt):pChar;
{ This procedure adds leading zeroes to the string. The string must }
{ contain an unformatted string representation of n before calling this }
{ function; negative numbers are not supported. }
FUNCTION p_Boo(p:pChar):Boolean;
{ Returns the boolean value of the string. Blank strings are assumed to }
{ be true (per the Windows INI specification). The procedure will look }
{ for T (True), Y (Yes) or + (Plus) . }
FUNCTION p_Char(p:pChar):Char;
{ This is a high-level string->character conversion routine. }
{ }
{ Method Example Result }
{ ---------------------------- }
{ Normal "str" s }
{ Decimal "#99" c }
{ Hex "$4A" J }
FUNCTION p_Int(p:pChar):LongInt;
{ Converts a string to a longint. You may specify the number in hex }
{ if you start the string with a dollar sign ($). Example: $DEADBEEF }
FUNCTION pDelete(p:pChar; Index,Count:Word):pChar;
{
PURPOSE : Deletes a segment from a string.
SEE ALSO : Clip
}
PROCEDURE Replace(CONST ThisStr,WithStr:OpenString; VAR InStr:OpenString);
{ Replaces a substring with a different string. }
FUNCTION SafeCopy(VAR Dest:pChar; Source:pChar):pChar;
{ Much like StrCopy, except that StrDispose is called if Dest is not NIL. }
FUNCTION ScanChars(p:pChar; At:Word; List:CharSet):Word;
FUNCTION ScanNChars(p:pChar; At:Word; List:CharSet):Word;
{ ScanChars returns the index of the first character in the set. }
{ ScanNChars returns the inxex of the first character not in the set. In }
{ both cases, the index of the null-zero is returned if the search is not }
{ successful. }
FUNCTION ShiftRight(p:pChar; n:Word; c:Char):pChar;
{ Shifts the characters in the string toward the right. The start of the }
{ string is filled with the specified character; normally this is #32. }
FUNCTION StringOf(n:Byte; c:Char):STRING;
{
PURPOSE : Returns a TP string filled with the specified character.
NOTES : This function is much like the QBASIC STRING$ function.
}
FUNCTION Str_Int(CONST s:OpenString):LongInt;
{ Converts a TurboPascal string to a LongInt. }
FUNCTION StrInsert(Dest,Source:pChar; Index:Word):pChar;
{
PURPOSE : Inserts a string into another string.
NOTES : No range checking is performed.
}
FUNCTION StrSegment(Dest,Source:pChar; Index,Length:Word):pChar;
{
PURPOSE : Extracts a segment from a string.
PARAMS : Dest Destination string.
Source Source string.
Index Start of the segment.
Length Length of the segment.
NOTES : The destination must contain enough room for LENGTH characters
plus the terminating null-zero.
}
FUNCTION TrimLeft(p:pChar; c:Char):pChar;
{
PURPOSE : Trims the given character from the left side of a string.
SEE ALSO : TrimRight
}
FUNCTION TrimRight(p:pChar; c:Char):pChar;
{
PURPOSE : Trims the given character from the right side of a string.
SEE ALSO : TrimLeft
}
FUNCTION TrimSpaces(p:pChar):pChar;
{
PURPOSE : Removes any spaces from the left and right sides of the string.
SEE ALSO : Clip, Delete, TrimLeft, TrimRight
}