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   
Text File  |  1996-05-17  |  22KB  |  620 lines

  1.  
  2. { ───────────────────────────────────────────────────────────────────────── }
  3. {  Name        : XSTRINGS.PAS                                               }
  4. {  Description : Extended strings unit                                      }
  5. { ───────────────────────────────────────────────────────────────────────── }
  6.  
  7. UNIT xStrings;
  8.  
  9. {$B-} { . . . . . . . . . . . . . . . . . . . . Shortcut boolean evaluation }
  10. {$F+} { . . . . . . . . . . . . . . . . . . . .  Force far calls for safety }
  11. {$I-} { . . . . . . . . . . . . . . . . . . . Disable input/output checking }
  12. {$O+} { . . . . . . . . . . . . . . . . . . Allow this unit to be overlayed }
  13. {$Q-} { . . . . . . . . . . . . . .  Do not generate overflow-checking code }
  14. {$R-} { . . . . . . . . . . . . . . . . Do not generate range-checking code }
  15. {$S-} { . . . . . . . . . . . . . . . . Do not generate stack-checking code }
  16. {$X+} { . . . . . . . . . . . Extended syntax for pChars and function calls }
  17.  
  18. INTERFACE
  19.  
  20. TYPE
  21.  
  22.   pChar1   = ARRAY[0 ..   1] OF Char;    pChar2   = ARRAY[0 ..   2] OF Char;
  23.   pChar3   = ARRAY[0 ..   3] OF Char;    pChar4   = ARRAY[0 ..   4] OF Char;
  24.   pChar5   = ARRAY[0 ..   5] OF Char;    pChar6   = ARRAY[0 ..   6] OF Char;
  25.   pChar7   = ARRAY[0 ..   7] OF Char;    pChar8   = ARRAY[0 ..   8] OF Char;
  26.   pChar9   = ARRAY[0 ..   9] OF Char;
  27.  
  28.   pChar10  = ARRAY[0 ..  10] OF Char;
  29.   pChar15  = ARRAY[0 ..  15] OF Char;
  30.   pChar20  = ARRAY[0 ..  20] OF Char;
  31.   pChar30  = ARRAY[0 ..  30] OF Char;
  32.   pChar40  = ARRAY[0 ..  40] OF Char;
  33.   pChar50  = ARRAY[0 ..  50] OF Char;
  34.   pChar60  = ARRAY[0 ..  60] OF Char;
  35.   pChar70  = ARRAY[0 ..  70] OF Char;
  36.   pChar80  = ARRAY[0 ..  80] OF Char;
  37.   pChar90  = ARRAY[0 ..  90] OF Char;
  38.  
  39.   pChar100 = ARRAY[0 .. 100] OF Char;
  40.   pChar200 = ARRAY[0 .. 200] OF Char;
  41.   pChar300 = ARRAY[0 .. 300] OF Char;
  42.   pChar400 = ARRAY[0 .. 400] OF Char;
  43.  
  44.   String1   = STRING[1];    String2   = STRING[2];    String3   = STRING[3];
  45.   String4   = STRING[4];    String5   = STRING[5];    String6   = STRING[6];
  46.   String7   = STRING[7];    String8   = STRING[8];    String9   = STRING[9];
  47.   String10  = STRING[10];   String11  = STRING[11];   String12  = STRING[12];
  48.   String13  = STRING[13];   String14  = STRING[14];   String15  = STRING[15];
  49.   String16  = STRING[16];   String17  = STRING[17];   String18  = STRING[18];
  50.   String19  = STRING[19];   String20  = STRING[20];   String21  = STRING[21];
  51.   String22  = STRING[22];   String23  = STRING[23];   String24  = STRING[24];
  52.   String25  = STRING[25];   String26  = STRING[26];   String27  = STRING[27];
  53.   String28  = STRING[28];   String29  = STRING[29];   String30  = STRING[30];
  54.   String31  = STRING[31];   String32  = STRING[32];   String33  = STRING[33];
  55.   String34  = STRING[34];   String35  = STRING[35];   String36  = STRING[36];
  56.   String37  = STRING[37];   String38  = STRING[38];   String39  = STRING[39];
  57.   String40  = STRING[40];   String41  = STRING[41];   String42  = STRING[42];
  58.   String43  = STRING[43];   String44  = STRING[44];   String45  = STRING[45];
  59.   String46  = STRING[46];   String47  = STRING[47];   String48  = STRING[48];
  60.   String49  = STRING[49];   String50  = STRING[50];   String51  = STRING[51];
  61.   String52  = STRING[52];   String53  = STRING[53];   String54  = STRING[54];
  62.   String55  = STRING[55];   String56  = STRING[56];   String57  = STRING[57];
  63.   String58  = STRING[58];   String59  = STRING[59];   String60  = STRING[60];
  64.   String61  = STRING[61];   String62  = STRING[62];   String63  = STRING[63];
  65.   String64  = STRING[64];   String65  = STRING[65];   String66  = STRING[66];
  66.   String67  = STRING[67];   String68  = STRING[68];   String69  = STRING[69];
  67.   String70  = STRING[70];   String71  = STRING[71];   String72  = STRING[72];
  68.   String73  = STRING[73];   String74  = STRING[74];   String75  = STRING[75];
  69.   String76  = STRING[76];   String77  = STRING[77];   String78  = STRING[78];
  70.   String79  = STRING[79];   String80  = STRING[80];   String81  = STRING[81];
  71.   String82  = STRING[82];   String83  = STRING[83];   String84  = STRING[84];
  72.   String85  = STRING[85];   String86  = STRING[86];   String87  = STRING[87];
  73.   String88  = STRING[88];   String89  = STRING[89];   String90  = STRING[90];
  74.   String91  = STRING[91];   String92  = STRING[92];   String93  = STRING[93];
  75.   String94  = STRING[94];   String95  = STRING[95];   String96  = STRING[96];
  76.   String97  = STRING[97];   String98  = STRING[98];   String99  = STRING[99];
  77.   String100 = STRING[100];  String101 = STRING[101];  String102 = STRING[102];
  78.   String103 = STRING[103];  String104 = STRING[104];  String105 = STRING[105];
  79.   String106 = STRING[106];  String107 = STRING[107];  String108 = STRING[108];
  80.   String109 = STRING[109];  String110 = STRING[110];  String111 = STRING[111];
  81.   String112 = STRING[112];  String113 = STRING[113];  String114 = STRING[114];
  82.   String115 = STRING[115];  String116 = STRING[116];  String117 = STRING[117];
  83.   String118 = STRING[118];  String119 = STRING[119];  String120 = STRING[120];
  84.   String121 = STRING[121];  String122 = STRING[122];  String123 = STRING[123];
  85.   String124 = STRING[124];  String125 = STRING[125];  String126 = STRING[126];
  86.   String127 = STRING[127];  String128 = STRING[128];  String129 = STRING[129];
  87.   String130 = STRING[130];  String131 = STRING[131];  String132 = STRING[132];
  88.   String133 = STRING[133];  String134 = STRING[134];  String135 = STRING[135];
  89.   String136 = STRING[136];  String137 = STRING[137];  String138 = STRING[138];
  90.   String139 = STRING[139];  String140 = STRING[140];  String141 = STRING[141];
  91.   String142 = STRING[142];  String143 = STRING[143];  String144 = STRING[144];
  92.   String145 = STRING[145];  String146 = STRING[146];  String147 = STRING[147];
  93.   String148 = STRING[148];  String149 = STRING[149];  String150 = STRING[150];
  94.   String151 = STRING[151];  String152 = STRING[152];  String153 = STRING[153];
  95.   String154 = STRING[154];  String155 = STRING[155];  String156 = STRING[156];
  96.   String157 = STRING[157];  String158 = STRING[158];  String159 = STRING[159];
  97.   String160 = STRING[160];  String161 = STRING[161];  String162 = STRING[162];
  98.   String163 = STRING[163];  String164 = STRING[164];  String165 = STRING[165];
  99.   String166 = STRING[166];  String167 = STRING[167];  String168 = STRING[168];
  100.   String169 = STRING[169];  String170 = STRING[170];  String171 = STRING[171];
  101.   String172 = STRING[172];  String173 = STRING[173];  String174 = STRING[174];
  102.   String175 = STRING[175];  String176 = STRING[176];  String177 = STRING[177];
  103.   String178 = STRING[178];  String179 = STRING[179];  String180 = STRING[180];
  104.   String181 = STRING[181];  String182 = STRING[182];  String183 = STRING[183];
  105.   String184 = STRING[184];  String185 = STRING[185];  String186 = STRING[186];
  106.   String187 = STRING[187];  String188 = STRING[188];  String189 = STRING[189];
  107.   String190 = STRING[190];  String191 = STRING[191];  String192 = STRING[192];
  108.   String193 = STRING[193];  String194 = STRING[194];  String195 = STRING[195];
  109.   String196 = STRING[196];  String197 = STRING[197];  String198 = STRING[198];
  110.   String199 = STRING[199];  String200 = STRING[200];  String201 = STRING[201];
  111.   String202 = STRING[202];  String203 = STRING[203];  String204 = STRING[204];
  112.   String205 = STRING[205];  String206 = STRING[206];  String207 = STRING[207];
  113.   String208 = STRING[208];  String209 = STRING[209];  String210 = STRING[210];
  114.   String211 = STRING[211];  String212 = STRING[212];  String213 = STRING[213];
  115.   String214 = STRING[214];  String215 = STRING[215];  String216 = STRING[216];
  116.   String217 = STRING[217];  String218 = STRING[218];  String219 = STRING[219];
  117.   String220 = STRING[220];  String221 = STRING[221];  String222 = STRING[222];
  118.   String223 = STRING[223];  String224 = STRING[224];  String225 = STRING[225];
  119.   String226 = STRING[226];  String227 = STRING[227];  String228 = STRING[228];
  120.   String229 = STRING[229];  String230 = STRING[230];  String231 = STRING[231];
  121.   String232 = STRING[232];  String233 = STRING[233];  String234 = STRING[234];
  122.   String235 = STRING[235];  String236 = STRING[236];  String237 = STRING[237];
  123.   String238 = STRING[238];  String239 = STRING[239];  String240 = STRING[240];
  124.   String241 = STRING[241];  String242 = STRING[242];  String243 = STRING[243];
  125.   String244 = STRING[244];  String245 = STRING[245];  String246 = STRING[246];
  126.   String247 = STRING[247];  String248 = STRING[248];  String249 = STRING[249];
  127.   String250 = STRING[250];  String251 = STRING[251];  String252 = STRING[252];
  128.   String253 = STRING[253];  String254 = STRING[254];  String255 = STRING[255];
  129.  
  130.  
  131. TYPE
  132.  
  133.   CharSet = SET OF Char;
  134.  
  135.   tCRC16_Table = ARRAY[0..255] OF Word;
  136.   pCRC16_Table = ^tCRC16_Table;
  137.  
  138.   tCRC32_Table = ARRAY[0..255] OF LongInt;
  139.   pCRC32_Table = ^tCRC32_Table;
  140.  
  141.  
  142. CONST
  143.  
  144.   CRC16_Seed  = 0;
  145.   CRC32_Seed  = $FFFFFFFF;
  146.  
  147.   CRC16_Table : pCRC16_Table = NIL;
  148.   CRC32_Table : pCRC32_Table = NIL;
  149.  
  150.  
  151.   {$IFDEF FRENCH}
  152.  
  153.     DayName : ARRAY[0..6] OF pChar15 = (
  154.  
  155.       {00} 'dimanche',
  156.       {01} 'lundi',
  157.       {02} 'mardi',
  158.       {03} 'mercredi',
  159.       {04} 'jeudi',
  160.       {05} 'vendredi',
  161.       {06} 'samedi');
  162.  
  163.     MonthName : ARRAY[1..12] OF pChar15 = (
  164.  
  165.       {01} 'janvier',
  166.       {02} 'février',
  167.       {03} 'mars',
  168.       {04} 'avril',
  169.       {05} 'mai',
  170.       {06} 'juin',
  171.       {07} 'juillet',
  172.       {08} 'août',
  173.       {09} 'septembre',
  174.       {10} 'octobre',
  175.       {11} 'novembre',
  176.       {12} 'décembre');
  177.  
  178.     SeasonName : ARRAY[1..4] OF pChar15 =
  179.  
  180.       {01} 'le printemps',
  181.       {02} 'l''été',
  182.       {03} 'l''automne',
  183.       {04} 'l''hiver');
  184.  
  185.   {$ENDIF}
  186.  
  187.   {$IFDEF GERMAN}
  188.  
  189.     DayName : ARRAY[0..6] OF pChar15 = (
  190.  
  191.       {00} 'Sonntag',
  192.       {01} 'Montag',
  193.       {02} 'Dienstag',
  194.       {03} 'Mittwoch',
  195.       {04} 'Donnerstag',
  196.       {05} 'Freitag',
  197.       {06} 'Sonnabend');
  198.  
  199.     MonthName : ARRAY[1..12] OF pChar15 = (
  200.  
  201.       {01} 'Januar',
  202.       {02} 'Februar',
  203.       {03} 'März',
  204.       {04} 'April',
  205.       {05} 'Mai',
  206.       {06} 'Juni',
  207.       {07} 'Juli',
  208.       {08} 'August',
  209.       {09} 'September',
  210.       {10} 'Oktober',
  211.       {11} 'November',
  212.       {12} 'Dezember');
  213.  
  214.     SeasonName : ARRAY[1..4] OF pChar15 = (
  215.  
  216.       {01} 'Frühling',
  217.       {02} 'Sommer',
  218.       {03} 'Herbst',
  219.       {04} 'Winter');
  220.  
  221.   {$ENDIF}
  222.  
  223.   {$IFDEF SPANISH}
  224.  
  225.     DayName : ARRAY[0..6] OF pChar15 = (
  226.  
  227.       {00} 'el domingo',
  228.       {01} 'el lunes',
  229.       {02} 'el martes',
  230.       {03} 'el miércoles',
  231.       {04} 'el jueves',
  232.       {05} 'el viernes',
  233.       {06} 'el sábado');
  234.  
  235.     MonthName : ARRAY[1..12] OF pChar15 = (
  236.  
  237.       {01} 'enero',
  238.       {02} 'febrero',
  239.       {03} 'marzo',
  240.       {04} 'abril',
  241.       {05} 'mayo',
  242.       {06} 'junio',
  243.       {07} 'julio',
  244.       {08} 'agosto',
  245.       {09} 'septiembre',
  246.       {10} 'octubre',
  247.       {11} 'noviembre',
  248.       {12} 'diciembre');
  249.  
  250.     NoYes : ARRAY[False..True] OF pChar3 = ('no','sí');
  251.  
  252.     SeasonName : ARRAY[1..4] OF pChar15 = (
  253.  
  254.       {01} 'la primavera',
  255.       {02} 'el verano',
  256.       {03} 'el otoño',
  257.       {04} 'el invierno');
  258.  
  259.   {$ENDIF}
  260.  
  261.   {$IFNDEF FRENCH}
  262.   {$IFNDEF GERMAN}
  263.   {$IFNDEF SPANISH}
  264.  
  265.     DayName : ARRAY[0..6] OF pChar15 = (
  266.  
  267.       {00} 'Sunday',
  268.       {01} 'Monday',
  269.       {02} 'Tuesday',
  270.       {03} 'Wednesday',
  271.       {04} 'Thursday',
  272.       {05} 'Friday',
  273.       {06} 'Saturday');
  274.  
  275.     MonthName: ARRAY[1..12] OF pChar15 = (
  276.  
  277.       {01} 'January',
  278.       {02} 'February',
  279.       {03} 'March',
  280.       {04} 'April',
  281.       {05} 'May',
  282.       {06} 'June',
  283.       {07} 'July',
  284.       {08} 'August',
  285.       {09} 'September',
  286.       {10} 'October',
  287.       {11} 'November',
  288.       {12} 'December');
  289.  
  290.     SeasonName : ARRAY[1..4] OF pChar15 = (
  291.  
  292.       {01} 'spring',
  293.       {02} 'summer',
  294.       {03} 'autumn',
  295.       {04} 'winter');
  296.  
  297.     NoYes : ARRAY[False..True] OF pChar3 = ('No','Yes');
  298.  
  299.   {$ENDIF}
  300.   {$ENDIF}
  301.   {$ENDIF}
  302.  
  303.  
  304.   HexChars    = ['0'..'9','A'..'F','a'..'f'];
  305.   Hex_Digit   : ARRAY[0..15] OF Char = '0123456789ABCDEF';
  306.   Tmp_pChar   : ARRAY[0..255] OF Char = '';
  307.   UpCaseChars : SET OF Char = [#0..#47,'·'];
  308.  
  309.  
  310. FUNCTION AllDigits(p:pChar):Boolean;
  311.   {
  312.   PURPOSE  : Returns TRUE if the all of the characters are digits.
  313.  
  314.   NOTES    : This function is merely a wrapper for AllInSet.
  315.  
  316.   SEE ALSO : AllInSet, CountDigits
  317.   }
  318.  
  319.  
  320. FUNCTION AllInSet(p:pChar; List:CharSet):Boolean;
  321.   {
  322.   PURPOSE  : Returns TRUE if all of the characters in the string
  323.              are in the given character set.
  324.  
  325.   SEE ALSO : AllDigits
  326.   }
  327.  
  328.  
  329. PROCEDURE Allocate_CRC16_Table(VAR p:pCRC16_Table);
  330.   {
  331.   PURPOSE  : Generates a 16-bit CRC table for future calculations.
  332.  
  333.   SEE ALSO : Allocate_CRC32_Table
  334.   }
  335.  
  336.  
  337. PROCEDURE Allocate_CRC32_Table(VAR p:pCRC32_Table);
  338.   {
  339.   PURPOSE  : Generates a 32-bit CRC table for future calculations.
  340.  
  341.   SEE ALSO : Allocate_CRC16_Table
  342.   }
  343.  
  344.  
  345. FUNCTION AppendChr(p:pChar; c:Char):pChar;
  346.   {
  347.   PURPOSE  : Appends a character to a string.
  348.  
  349.   NOTES    : No range checking is performed.
  350.   }
  351.  
  352.  
  353. FUNCTION Calculate_CRC16  (p:pChar):Word;
  354. FUNCTION Calculate_CRC16I (p:pChar):Word;
  355. FUNCTION Calculate_CRC32  (p:pChar):LongInt;
  356. FUNCTION Calculate_CRC32I (p:pChar):LongInt;
  357.   { These routines perform 16-bit and 32-bit CRC calculations. }
  358.  
  359.  
  360. PROCEDURE Capitalize(VAR s:OpenString);
  361.   {
  362.   PURPOSE  : Capitalizes a Turbo Pascal string.
  363.   }
  364.  
  365.  
  366. FUNCTION Char_pChar(p:pChar; c:Char):pChar;
  367.   {
  368.   PURPOSE  : Converts a character to a string.
  369.  
  370.   NOTES    : The destination must have enough room to hold the character
  371.              and the terminating null-zero.
  372.   }
  373.  
  374.  
  375. FUNCTION Clip(p:pChar; SetSize:Integer; Filler:Char):pChar;
  376.   {
  377.   PURPOSE  : Clips or pads the string to a given size.
  378.  
  379.   NOTES    : ■ SetSize < 0 : The string is left-justified.
  380.              ■ SetSize > 0 : The string is right-justified.
  381.              ■ SetSize = 0 : NOP (no operation).
  382.  
  383.              The string length cannot exceed 32767 characters.
  384.  
  385.   SEE ALSO : Delete
  386.   }
  387.  
  388.  
  389. FUNCTION CountDigits(n:LongInt):Byte;
  390.   {
  391.   PURPOSE  : Returns the size of the string representation of the number,
  392.              not including the positive or negative sign.
  393.  
  394.   SEE ALSO : AllDigits
  395.   }
  396.  
  397.  
  398. FUNCTION DayExtension(p:pChar; Day:Byte):pChar;
  399.   {
  400.   PURPOSE  : Returns the two-character extension of the day number.
  401.  
  402.   NOTES    : The destination must contain enough room to hold two
  403.              characters.  The day number cannot exceed 31.  The result
  404.              will be 'st', 'nd', 'rd' or 'th'.
  405.   }
  406.  
  407.  
  408. FUNCTION ExtractNames(p:pChar; VAR First,Last:pChar):pChar;
  409.   {
  410.   PURPOSE  : Extracts the first and last names from a string.
  411.  
  412.   WARNING  : No error or range checking!  Do not use in uncontrolled
  413.              enviroments or risk a system crash!
  414.   }
  415.  
  416.  
  417. FUNCTION FormattedBaud(p:pChar; Baud:LongInt):pChar;
  418.   {
  419.   PURPOSE  : Returns a formatted version of the baud rate.
  420.  
  421.   NOTES    : The destination must have enough room to retain 4 characters
  422.              plus the terminating null-zero.
  423.  
  424.                Baud     Result           Baud     Result
  425.              ────────────────────────────────────────────
  426.                   0      Zero             300      Slow
  427.                1200      1200            2400      2400
  428.                4800      4800            7200      7200
  429.                9600      9600           12000      12.0
  430.               14400      14.4           16800      16.8
  431.               19200      19.2           21600      21.6
  432.               24000      24.0           26400      26.4
  433.               28800      28.8           38400      38.4
  434.               57600      57.6           64000      64.0
  435.              Greater      c²
  436.   }
  437.  
  438.  
  439. FUNCTION HexByte(c:Char):Byte;
  440.   {
  441.   PURPOSE  : Concerts a hexadecimal character to a byte.
  442.  
  443.   NOTES    : Valid characters are 0 to 9, A to F and a to f.
  444.  
  445.              Hex Dec   Hex Dec
  446.               0   0     8   8
  447.               1   1     9   9
  448.               2   2     A  10
  449.               3   3     B  11
  450.               4   4     C  12
  451.               5   5     D  13
  452.               6   6     E  14
  453.               7   7     F  15
  454.  
  455.   SEE ALSO : HexInt
  456.   }
  457.  
  458.  
  459. FUNCTION HexInt(p:pChar):LongInt;
  460.   {
  461.   PURPOSE  : Converts a hexadecimal string to a longint.
  462.  
  463.   NOTES    : Valid characters are 0 to 9, A to F and a to f.
  464.  
  465.   SEE ALSO : HexByte
  466.   }
  467.  
  468.  
  469. FUNCTION Int_pChar(p:pChar; i:LongInt):pChar;
  470.   {
  471.   PURPOSE  : Converts a LongInt to a string.
  472.  
  473.   NOTES    : The destination must have enough room to hold the worst-case
  474.              scenerio: a value of -2147483648 (the smallest LongInt possible.
  475.              Twelve bytes is sufficient to hold ten digits, the negative
  476.              sign and the terminating null-zero.
  477.  
  478.   SEE ALSO : Int_Str
  479.   }
  480.  
  481.  
  482. FUNCTION Int_Str(i:LongInt):STRING;
  483.   {
  484.   PURPOSE  : Converts a LongInt to a Turbo Pascal string.
  485.  
  486.   SEE ALSO : Int_pChar
  487.   }
  488.  
  489.  
  490. FUNCTION IsAlpha(C:Char):Boolean;  { Test for letters.                      }
  491. FUNCTION IsAlNum(C:Char):Boolean;  { Test for alphanumeric characters.      }
  492. FUNCTION IsDigit(C:Char):Boolean;  { Test for digits (numbers).             }
  493. FUNCTION IsLower(C:Char):Boolean;  { Test for lower-case letters.           }
  494. FUNCTION IsUpper(C:Char):Boolean;  { Test for upper-case letters.           }
  495. FUNCTION IsHiBit(C:Char):Boolean;  { Test for high-ASCII characters.        }
  496.  
  497.  
  498. FUNCTION LoCase(c:Char):Char;
  499.   {
  500.   PURPOSE  : Returns the lower-case version of the character.
  501.  
  502.   SEE ALSO : UpCase (SYSTEM.TPU)
  503.   }
  504.  
  505.  
  506. FUNCTION LZ(p:pChar; n:LongInt):pChar;
  507.   { This procedure adds leading zeroes to the string.  The string must      }
  508.   { contain an unformatted string representation of n before calling this   }
  509.   { function; negative numbers are not supported.                           }
  510.  
  511.  
  512. FUNCTION p_Boo(p:pChar):Boolean;
  513.   { Returns the boolean value of the string.  Blank strings are assumed to  }
  514.   { be true (per the Windows INI specification).  The procedure will look   }
  515.   { for T (True), Y (Yes) or + (Plus) .                                     }
  516.  
  517.  
  518. FUNCTION p_Char(p:pChar):Char;
  519.   { This is a high-level string->character conversion routine.              }
  520.   {                                                                         }
  521.   { Method     Example    Result                                            }
  522.   { ----------------------------                                            }
  523.   { Normal      "str"       s                                               }
  524.   { Decimal     "#99"       c                                               }
  525.   { Hex         "$4A"       J                                               }
  526.  
  527.  
  528. FUNCTION p_Int(p:pChar):LongInt;
  529.   { Converts a string to a longint.  You may specify the number in hex      }
  530.   { if you start the string with a dollar sign ($).  Example: $DEADBEEF     }
  531.  
  532.  
  533. FUNCTION pDelete(p:pChar; Index,Count:Word):pChar;
  534.   {
  535.   PURPOSE  : Deletes a segment from a string.
  536.  
  537.   SEE ALSO : Clip
  538.   }
  539.  
  540.  
  541. PROCEDURE Replace(CONST ThisStr,WithStr:OpenString; VAR InStr:OpenString);
  542.   { Replaces a substring with a different string.                           }
  543.  
  544.  
  545. FUNCTION SafeCopy(VAR Dest:pChar; Source:pChar):pChar;
  546.   { Much like StrCopy, except that StrDispose is called if Dest is not NIL. }
  547.  
  548.  
  549. FUNCTION ScanChars(p:pChar; At:Word; List:CharSet):Word;
  550. FUNCTION ScanNChars(p:pChar; At:Word; List:CharSet):Word;
  551.   { ScanChars returns the index of the first character in the set.          }
  552.   { ScanNChars returns the inxex of the first character not in the set.  In }
  553.   { both cases, the index of the null-zero is returned if the search is not }
  554.   { successful.                                                             }
  555.  
  556.  
  557. FUNCTION ShiftRight(p:pChar; n:Word; c:Char):pChar;
  558.   { Shifts the characters in the string toward the right.  The start of the }
  559.   { string is filled with the specified character; normally this is #32.    }
  560.  
  561.  
  562. FUNCTION StringOf(n:Byte; c:Char):STRING;
  563.   {
  564.   PURPOSE  : Returns a TP string filled with the specified character.
  565.  
  566.   NOTES    : This function is much like the QBASIC STRING$ function.
  567.   }
  568.  
  569.  
  570. FUNCTION Str_Int(CONST s:OpenString):LongInt;
  571.   { Converts a TurboPascal string to a LongInt.                             }
  572.  
  573.  
  574. FUNCTION StrInsert(Dest,Source:pChar; Index:Word):pChar;
  575.   {
  576.   PURPOSE  : Inserts a string into another string.
  577.  
  578.   NOTES    : No range checking is performed.
  579.   }
  580.  
  581.  
  582. FUNCTION StrSegment(Dest,Source:pChar; Index,Length:Word):pChar;
  583.   {
  584.   PURPOSE  : Extracts a segment from a string.
  585.  
  586.   PARAMS   : Dest               Destination string.
  587.              Source             Source string.
  588.              Index              Start of the segment.
  589.              Length             Length of the segment.
  590.  
  591.   NOTES    : The destination must contain enough room for LENGTH characters
  592.              plus the terminating null-zero.
  593.   }
  594.  
  595.  
  596. FUNCTION TrimLeft(p:pChar; c:Char):pChar;
  597.   {
  598.   PURPOSE  : Trims the given character from the left side of a string.
  599.  
  600.   SEE ALSO : TrimRight
  601.   }
  602.  
  603.  
  604. FUNCTION TrimRight(p:pChar; c:Char):pChar;
  605.   {
  606.   PURPOSE  : Trims the given character from the right side of a string.
  607.  
  608.   SEE ALSO : TrimLeft
  609.   }
  610.  
  611.  
  612. FUNCTION TrimSpaces(p:pChar):pChar;
  613.   {
  614.   PURPOSE  : Removes any spaces from the left and right sides of the string.
  615.  
  616.   SEE ALSO : Clip, Delete, TrimLeft, TrimRight
  617.   }
  618.  
  619.  
  620.