📄 cpstringutils.cpp
字号:
ConcatPStrToCStr(theStr255,tempString,sizeof(tempString)); CopyCStrToPStr(tempString,theStr255,sizeof(theStr255)); } } ConcatPStrToPStr(theStr255,thePStr,maxPStrLength);}void CopyCStrAndConcatLongIntToCStr(const char *theSrcCStr,const long theNum,char *theDstCStr,const int maxDstStrLength){ CopyCStrToCStr(theSrcCStr,theDstCStr,maxDstStrLength); ConcatLongIntToCStr(theNum,theDstCStr,maxDstStrLength);}void CopyLongIntToCStr(const long theNum,char *theCStr,const int maxCStrLength,const int numDigits){Str255 theStr255; NumToString(theNum,theStr255); if (numDigits > 0) { int charsToInsert; charsToInsert = numDigits - PStrLength(theStr255); if (charsToInsert > 0) { char tempString[256]; CopyCStrToCStr("",tempString,sizeof(tempString)); for (;charsToInsert > 0;charsToInsert--) { ConcatCStrToCStr("0",tempString,sizeof(tempString)); } ConcatPStrToCStr(theStr255,tempString,sizeof(tempString)); CopyCStrToPStr(tempString,theStr255,sizeof(theStr255)); } } CopyPStrToCStr(theStr255,theCStr,maxCStrLength);}void CopyUnsignedLongIntToCStr(const unsigned long theNum,char *theCStr,const int maxCStrLength){char tempString[256];int srcCharIndex,dstCharIndex;unsigned long tempNum,quotient,remainder; if (theNum == 0) { CopyCStrToCStr("0",theCStr,maxCStrLength); } else { srcCharIndex = 0; tempNum = theNum; for (;;) { if (srcCharIndex >= sizeof(tempString) - 1 || tempNum == 0) { for (dstCharIndex = 0;;) { if (dstCharIndex >= maxCStrLength - 1 || srcCharIndex <= 0) { theCStr[dstCharIndex] = 0; break; } theCStr[dstCharIndex++] = tempString[--srcCharIndex]; } break; } quotient = tempNum / 10; remainder = tempNum - (quotient * 10); tempString[srcCharIndex] = '0' + remainder; srcCharIndex++; tempNum = quotient; } }}void CopyLongIntToPStr(const long theNum,unsigned char *thePStr,const int maxPStrLength,const int numDigits){char tempString[256]; CopyLongIntToCStr(theNum,tempString,sizeof(tempString),numDigits); CopyCStrToPStr(tempString,thePStr,maxPStrLength);}OSErr CopyLongIntToNewHandle(const long inTheLongInt,Handle *theHandle){OSErr errCode = noErr;char tempString[32]; CopyLongIntToCStr(inTheLongInt,tempString,sizeof(tempString)); errCode = CopyCStrToNewHandle(tempString,theHandle); return(errCode);}OSErr CopyLongIntToExistingHandle(const long inTheLongInt,Handle theHandle){OSErr errCode = noErr;char tempString[32]; CopyLongIntToCStr(inTheLongInt,tempString,sizeof(tempString)); errCode = CopyCStrToExistingHandle(tempString,theHandle); return(errCode);}OSErr CopyCStrToExistingHandle(const char *theCString,Handle theHandle){OSErr errCode = noErr;long stringLength; if (theCString == nil) { SetErrorMessageAndBail(("CopyCStrToExistingHandle: Bad parameter, theCString == nil")); } if (theHandle == nil) { SetErrorMessageAndBail(("CopyCStrToExistingHandle: Bad parameter, theHandle == nil")); } if (*theHandle == nil) { SetErrorMessageAndBail(("CopyCStrToExistingHandle: Bad parameter, *theHandle == nil")); } stringLength = CStrLength(theCString) + 1; SetHandleSize(theHandle,stringLength); if (GetHandleSize(theHandle) < stringLength) { SetErrorMessageAndLongIntAndBail("CopyCStrToExistingHandle: Can't set Handle size, MemError() = ",MemError()); } ::BlockMove(theCString,*theHandle,stringLength); EXITPOINT: return(errCode);}OSErr CopyCStrToNewHandle(const char *theCString,Handle *theHandle){OSErr errCode = noErr;long stringLength; if (theCString == nil) { SetErrorMessageAndBail(("CopyCStrToNewHandle: Bad parameter, theCString == nil")); } if (theHandle == nil) { SetErrorMessageAndBail(("CopyCStrToNewHandle: Bad parameter, theHandle == nil")); } stringLength = CStrLength(theCString) + 1; *theHandle = NewHandle(stringLength); if (*theHandle == nil) { SetErrorMessageAndLongIntAndBail("CopyCStrToNewHandle: Can't allocate Handle, MemError() = ",MemError()); } ::BlockMove(theCString,**theHandle,stringLength); EXITPOINT: return(errCode);}OSErr CopyPStrToNewHandle(const unsigned char *thePString,Handle *theHandle){OSErr errCode = noErr;long stringLength; if (thePString == nil) { SetErrorMessageAndBail(("CopyPStrToNewHandle: Bad parameter, thePString == nil")); } if (theHandle == nil) { SetErrorMessageAndBail(("CopyPStrToNewHandle: Bad parameter, theHandle == nil")); } stringLength = PStrLength(thePString) + 1; *theHandle = NewHandle(stringLength); if (*theHandle == nil) { SetErrorMessageAndLongIntAndBail("CopyPStrToNewHandle: Can't allocate Handle, MemError() = ",MemError()); } if (stringLength > 1) { BlockMove(thePString + 1,**theHandle,stringLength - 1); } (**theHandle)[stringLength - 1] = 0; EXITPOINT: return(errCode);}OSErr AppendPStrToHandle(const unsigned char *thePString,Handle theHandle,long *currentLength){OSErr errCode = noErr;char tempString[256]; CopyPStrToCStr(thePString,tempString,sizeof(tempString)); errCode = AppendCStrToHandle(tempString,theHandle,currentLength); EXITPOINT: return(errCode);}OSErr AppendCStrToHandle(const char *theCString,Handle theHandle,long *currentLength,long *maxLength){OSErr errCode = noErr;long handleMaxLength,handleCurrentLength,stringLength,byteCount; if (theCString == nil) { SetErrorMessageAndBail(("AppendCStrToHandle: Bad parameter, theCString == nil")); } if (theHandle == nil) { SetErrorMessageAndBail(("AppendCStrToHandle: Bad parameter, theHandle == nil")); } if (maxLength != nil) { handleMaxLength = *maxLength; } else { handleMaxLength = GetHandleSize(theHandle); } if (currentLength != nil && *currentLength >= 0) { handleCurrentLength = *currentLength; } else { handleCurrentLength = CStrLength(*theHandle); } stringLength = CStrLength(theCString); byteCount = handleCurrentLength + stringLength + 1; if (byteCount > handleMaxLength) { SetHandleSize(theHandle,handleCurrentLength + stringLength + 1); if (maxLength != nil) { *maxLength = GetHandleSize(theHandle); handleMaxLength = *maxLength; } else { handleMaxLength = GetHandleSize(theHandle); } if (byteCount > handleMaxLength) { SetErrorMessageAndLongIntAndBail("AppendCStrToHandle: Can't increase Handle allocation, MemError() = ",MemError()); } } BlockMove(theCString,*theHandle + handleCurrentLength,stringLength + 1); if (currentLength != nil) { *currentLength += stringLength; } errCode = noErr; EXITPOINT: return(errCode);}OSErr AppendCharsToHandle(const char *theChars,const int numChars,Handle theHandle,long *currentLength,long *maxLength){OSErr errCode = noErr;long handleMaxLength,handleCurrentLength,byteCount; if (theChars == nil) { SetErrorMessageAndBail(("AppendCharsToHandle: Bad parameter, theChars == nil")); } if (theHandle == nil) { SetErrorMessageAndBail(("AppendCharsToHandle: Bad parameter, theHandle == nil")); } if (maxLength != nil) { handleMaxLength = *maxLength; } else { handleMaxLength = GetHandleSize(theHandle); } if (currentLength != nil && *currentLength >= 0) { handleCurrentLength = *currentLength; } else { handleCurrentLength = CStrLength(*theHandle); } byteCount = handleCurrentLength + numChars + 1; if (byteCount > handleMaxLength) { SetHandleSize(theHandle,handleCurrentLength + numChars + 1); if (maxLength != nil) { *maxLength = GetHandleSize(theHandle); handleMaxLength = *maxLength; } else { handleMaxLength = GetHandleSize(theHandle); } if (byteCount > handleMaxLength) { SetErrorMessageAndLongIntAndBail("AppendCharsToHandle: Can't increase Handle allocation, MemError() = ",MemError()); } } BlockMove(theChars,*theHandle + handleCurrentLength,numChars); (*theHandle)[handleCurrentLength + numChars] = '\0'; if (currentLength != nil) { *currentLength += numChars; } errCode = noErr; EXITPOINT: return(errCode);}OSErr AppendLongIntToHandle(const long inTheLongInt,Handle theHandle,long *currentLength){OSErr errCode = noErr;char tempString[32]; CopyLongIntToCStr(inTheLongInt,tempString,sizeof(tempString)); errCode = AppendCStrToHandle(tempString,theHandle,currentLength); return(errCode);}long CStrLength(const char *theCString){long cStrLength = 0; if (theCString != nil) { for (cStrLength = 0;theCString[cStrLength] != 0;cStrLength++) { } } return(cStrLength);}long PStrLength(const unsigned char *thePString){long pStrLength = 0; if (thePString != nil) { pStrLength = thePString[0]; } return(pStrLength);}void ZeroMem(void *theMemPtr,const unsigned long numBytes){unsigned char *theBytePtr;unsigned long *theLongPtr;unsigned long numSingleBytes;unsigned long theNumBytes; theNumBytes = numBytes; if (theMemPtr != nil && theNumBytes > 0) { theBytePtr = (unsigned char *) theMemPtr; numSingleBytes = (unsigned long) theBytePtr & 0x0003; while (numSingleBytes > 0) { *theBytePtr++ = 0; theNumBytes--; numSingleBytes--; } theLongPtr = (unsigned long *) theBytePtr; while (theNumBytes >= 4) { *theLongPtr++ = 0; theNumBytes -= 4; } theBytePtr = (unsigned char *) theLongPtr; while (theNumBytes > 0) { *theBytePtr++ = 0; theNumBytes--; } }}char *FindCharInCStr(const char theChar,const char *theCString){char *theStringSearchPtr; theStringSearchPtr = (char *) theCString; if (theStringSearchPtr != nil) { while (*theStringSearchPtr != '\0' && *theStringSearchPtr != theChar) { theStringSearchPtr++; } if (*theStringSearchPtr == '\0') { theStringSearchPtr = nil; } } return(theStringSearchPtr);}long FindCharOffsetInCStr(const char theChar,const char *theCString,const Boolean inIgnoreCase){long theOffset = -1; if (theCString != nil) { theOffset = 0; if (inIgnoreCase) { char searchChar = theChar; if (searchChar >= 'a' && searchChar <= 'z') { searchChar = searchChar - 'a' + 'A'; } while (*theCString != 0) { char currentChar = *theCString; if (currentChar >= 'a' && currentChar <= 'z') { currentChar = currentChar - 'a' + 'A'; } if (currentChar == searchChar) { break; } theCString++; theOffset++; } } else { while (*theCString != 0 && *theCString != theChar) { theCString++; theOffset++; } } if (*theCString == 0) { theOffset = -1; } } return(theOffset);}long FindCStrOffsetInCStr(const char *theCSubstring,const char *theCString,const Boolean inIgnoreCase){long theOffset = -1; if (theCSubstring != nil && theCString != nil) { for (theOffset = 0;;theOffset++) { if (theCString[theOffset] == 0) { theOffset = -1; goto EXITPOINT; } for (const char *tempSubstringPtr = theCSubstring,*tempCStringPtr = theCString + theOffset;;tempSubstringPtr++,tempCStringPtr++) { if (*tempSubstringPtr == 0) { goto EXITPOINT; } else if (*tempCStringPtr == 0) { break; } char searchChar = *tempSubstringPtr; char currentChar = *tempCStringPtr; if (inIgnoreCase && searchChar >= 'a' && searchChar <= 'z') { searchChar = searchChar - 'a' + 'A';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -