extern OSErr get_file_spec( FSSpec *spec, short listid, short item, short pathsid) { Str255 itemstr; Str255 pathstr; int i,n; OSErr err; int itemlen,pathlen; getpstr(itemstr,listid,item); err=FSMakeFSSpec(0,0,itemstr,spec); if (err==noErr) { return err; } itemlen=itemstr[0]; n=countstr(pathsid); for (i=0; i<n; i++) { getpstr(pathstr,pathsid,i); pathlen=pathstr[0]; pathstr[0]=pathlen+itemlen; memcpy(pathstr+pathlen+1,itemstr+1,itemlen); err=FSMakeFSSpec(0,0,itemstr,spec); if (err==noErr) { return err; } } return fnfErr; }
int main(void) { int i; char str[100]; printf("input a string"); scanf("%s",str); i=0; while (str[i]!='\0') { countstr(str[i]); } return 0; }
//replace every occurrence of str1 with str2 a maximum of num times unsigned string::replacestr(const char* str1,const char* str2,unsigned size1,unsigned size2,unsigned num){ unsigned c=countstr(str1,size1); if(datalen+(size2-size1)*c>datasize){ resizedata(((size2-size1)*c)<<1);} unsigned x,pos=0,n=0; while(pos<=datalen && n<num){ for(x=0;x<size1 && pos<=datalen;++x,++pos){ if(data[pos]!=str1[x]){ break;}} if(x==size1){ memmove(data+pos+size2-size1,data+pos,datalen+size2-size1); memcpy(data+pos-size1,str2,size2); ++n;} else{ ++pos;}} datalen+=(size2-size1)*n; return n;}
short HOpenResFilePath( short vRefNum, long dirID, ConstStr255Param fileName, char permission, short resource_number) { short hndl= HOpenResFile(vRefNum, dirID, fileName, permission); short path_count= countstr(resource_number); Str255 new_filename; short i; for (i= 0; i<path_count && hndl==NONE; ++i) { getpstr((char *)new_filename, resource_number, i); pstrcat(new_filename, (unsigned char *) fileName); hndl= HOpenResFile(0, 0, new_filename, permission); } return hndl; }
OSErr HOpenPath( short vRefNum, long dirID, ConstStr255Param fileName, char permission, short *refNum, short resource_number) { OSErr error= HOpen(vRefNum, dirID, fileName, permission, refNum); short path_count= countstr(resource_number); Str255 new_filename; short i; for (i= 0; i<path_count && error!=noErr; ++i) { getpstr((char *)new_filename, resource_number, i); pstrcat(new_filename, (unsigned char *) fileName); error= HOpen(0, 0, new_filename, permission, refNum); if (error==noErr) pstrcpy((char *) fileName, (const char *)new_filename); } return error; }
unsigned string::count(const string& str) const{ return countstr(str.data,str.datalen);}
unsigned string::count(const char* str) const{ return countstr(str,strlen(str));}
//count unsigned string::count(const char c) const{ return countstr(&c,1);}