mirror of
https://github.com/softdorothy/GliderPRO.git
synced 2024-12-01 21:50:27 +00:00
1 line
7.3 KiB
C
1 line
7.3 KiB
C
|
//============================================================================
//----------------------------------------------------------------------------
// StringUtils.c
//----------------------------------------------------------------------------
//============================================================================
#include <TextUtils.h>
#include "Externs.h"
//============================================================== Functions
//-------------------------------------------------------------- PasStringCopy
// Given a source string and storage for a second, this function<6F>
// copies from one to the other. It assumes Pascal style strings.
void PasStringCopy (StringPtr p1, StringPtr p2)
{
register short stringLength;
stringLength = *p2++ = *p1++;
while (--stringLength >= 0)
*p2++ = *p1++;
}
//-------------------------------------------------------------- WhichStringFirst
// This is a sorting function that handles two Pascal strings. It<49>
// will return a 1 to indicate the 1st string is "greater", a 1 to<74>
// indicate the 2nd was greater and a 0 to indicate that the strings<67>
// are equal.
short WhichStringFirst (StringPtr p1, StringPtr p2)
{
short smallestLength, seek, greater;
char char1, char2;
Boolean foundIt;
smallestLength = p1[0];
if (p2[0] < smallestLength)
smallestLength = p2[0];
greater = 0; // neither are greater, they are equal
seek = 1; // start at character #1
foundIt = false;
do
{
char1 = p1[seek]; // make upper case (if applicable)
if ((char1 > 0x60) && (char1 < 0x7B))
char1 -= 0x20;
char2 = p2[seek]; // make upper case (if applicable)
if ((char2 > 0x60) && (char2 < 0x7B))
char2 -= 0x20;
if (char1 > char2) // first string is greater
{
greater = 1;
foundIt = true;
}
else if (char1 < char2) // second string is greater
{
greater = 2;
foundIt = true;
}
seek++;
if (seek > smallestLength) // we've reached the end of the line
{
if (!foundIt)
{
if (p1[0] < p2[0]) // shortest string wins
greater = 1;
else if (p1[0] > p2[0])
greater = 2;
}
foundIt = true;
}
}
while (!foundIt);
return (greater);
}
//-------------------------------------------------------------- PasStringCopyNum
// This function copies a specified number of characters from one<6E>
// Pascal string to another.
void PasStringCopyNum (StringPtr p1, StringPtr p2, short charsToCopy)
{
short i;
if (charsToCopy > *p1) // if trying to copy more chars than there are
charsToCopy = *p1; // reduce the number of chars to copy to this size
*p2 = charsToCopy;
*p2++;
*p1++;
for (i = 0; i < charsToCopy; i++)
*p2++ = *p1++;
}
//-------------------------------------------------------------- PasStringConcat
// This function concatenates the second Pascal string to the end of<6F>
// the first Pascal string.
void PasStringConcat (StringPtr p1, StringPtr p2)
{
short wasLength, addedLength, i;
wasLength = *p1;
if (wasLength > 255)
wasLength = 255;
addedLength = *p2;
if ((wasLength + addedLength) > 255)
addedLength = 255 - wasLength;
*p1 = wasLength + addedLength;
*p1++;
*p2++;
for (i = 0; i < wasLength; i++)
*p1++;
for (i = 0; i < addedLength; i++)
*p1++ = *p2++;
}
//-------------------------------------------------------------- GetLineOfText
// This function walks through a source string and looks for an<61>
// entire line of text. A "line" of text is assumed to be bounded<65>
// by carriage returns. The index variable indicates which line<6E>
// is sought.
void GetLineOfText (StringPtr srcStr, short index, StringPtr textLine)
{
short i, srcLength, count, start, stop;
Boolean foundIt;
PasStringCopy("\p", textLine);
srcLength = srcStr[0];
if (index == 0) // walk through to "index"
start = 1;
else
{
start = 0;
count = 0;
i = 0;
foundIt = false;
do
{
i++;
if (srcStr[i] == kReturnKeyASCII)
{
count++;
if (count == index)
{
start = i + 1;
foundIt = true;
}
}
}
while ((i < srcLength) && (!foundIt));
|