GliderPRO/Sources/StringUtils.c

1 line
7.3 KiB
C
Raw Normal View History

//============================================================================ //---------------------------------------------------------------------------- // 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));