[comp.sys.mac.programmer] Change Type & Creator under Sys 7.0

blob@Apple.COM (Brian Bechtel) (05/21/91)

This application is for System 7.0 only.  To use Change Type & Creator,
drop any file (or selection of files) on top of it.  You'll get a
dialog box which will allow you to specify a new type and creator.

Sample source code (for Think C 4.0.5) is included.  I know this isn't
the place for binaries, but the binary is short and included as well.
Both the application and the source code are freely redistributable.
You don't have to ask me for permission.  No support nor warranty is
implied by my giving this program away.

If you want to change the default type and creator displayed in the
dialog box, change the DITL resource using ResEdit.

Thanks to Juri Munkki for the inspiration.  I apologize for the bad C
code.

--Brian Bechtel     blob@apple.com     "My code, not Apple's"

/*
>>	ChangeTypeCreator.c	
>>   change the file type and creator of any file dropped onto this program.
>>	 Prompts for the file type and creator, and changes all files dropped at
>>   the same time to the same type and creator.
>>	
>>	Written by Brian Bechtel, based on code by Juri Munkki
>>	Feel free to use the code in your programs.
*/

void	ReadFinderStuff(type, creator)
long	type;
long	creator;
{
	short		message,count,i;
	AppFile		thefile;
	FileParam	block;
	
	CountAppFiles(&message,&count);
	if(message==1)
	{	return;
	}
	else
	{	for(i=1;i<=count;i++)
		{	GetAppFiles(i,&thefile);

			block.ioCompletion=0;
			block.ioNamePtr=thefile.fName;
			block.ioVRefNum=thefile.vRefNum;
			block.ioFVersNum=thefile.versNum;
			block.ioFDirIndex=0;

			if (PBGetFInfo((ParmBlkPtr)&block,0) == noErr)
			{
				block.ioFlFndrInfo.fdType = type;
				block.ioFlFndrInfo.fdCreator = creator;
				PBSetFInfo((ParmBlkPtr)&block,0);
			}
		}
	}
}

#define	OK		1
#define	CANCEL	2
#define	TYPE	3
#define	CREATOR	4

Boolean	GetTypeCreator(type, creator)
long *type;
long *creator;
{
	DialogPtr	dPtr;
	short		itemHit;
	Handle		itemHandle;
	short		itemType;
	Rect		box;
	Str255		itemString;

	dPtr = GetNewDialog(128, nil, (WindowPtr) -1);
	SelIText(dPtr, TYPE, 0, 4);
	do {
		ModalDialog(nil, &itemHit);
	} while ((itemHit != OK) && (itemHit != CANCEL));
	
	if (itemHit == CANCEL)
	{
		return (false);
	} else {
		GetDItem(dPtr, TYPE, &itemType, &itemHandle, &box);
		GetIText(itemHandle, itemString);
		BlockMove((Ptr)&itemString[1], type, 4);
		GetDItem(dPtr, CREATOR, &itemType, &itemHandle, &box);
		GetIText(itemHandle, itemString);
		BlockMove((Ptr)&itemString[1], creator, 4);
		return (true);
	}
}

void	main()
{
	long	type;
	long	creator;
	
	InitGraf(&thePort);
	InitFonts();
	InitWindows();
	InitMenus();
	TEInit();
	InitCursor();
	InitDialogs(nil);
	if (GetTypeCreator(&type, &creator))
		ReadFinderStuff(type, creator);	
}




(This file must be converted with BinHex 4.0)

:&80SB@jRC5"8HA"P)#BJ3h*PBA4[FJ""8&"-3e4$IL!!N!F55c0p!*!%!3#3!a#
*!!!2L3!!!F+"E`!"0(i"GTpfH5NB5'lrm#m-)&3J8#*S!,a1N3%YEK9$D'&ZCf8
J9(P`C5!Q)%0bC@&dEh)#!*!$39"36%08!!""8&"-3e4$IL%!!0!!N"5NAS1N!*!
'%NY3)#J$!)T+"@Cbjh43!3Jb,C%ZIhj89eX#U@`k(hqh@`+`U!"`C`&R%,GE!V#
S!(5P9ATEfPX$Cbj+4@FU3J(f"L!")"NZ!NM&,`8c6!(cNL!9F3&J&#!4!IJ')"!
J%J)Bm2r-)!QIA!%$#)a2+L!PAj@94e!J*RRC*@e"!A!%9L!T!*!$!J#3"3)!c!#
3"J)@!&!!!8j@rU*)E[rq5'lrr%kk!CS-EJ!"rrjR!!"XF!%p32rkB&Jr,[rk5'l
qmNkk!D"#V[kZ3HlqqLe)rV3pE[lbrVJGE[ljrVa#E[kq3QG)E[kL3QG1ZJ%`-"p
+3'BD,@i!#2l#,@i!$2l'3QG)E[kL3QG1ZJ%N-"p5E[rk-#lrqV"Zrra[RNjH6R9
19[lX3UFr2!#!3UG)H2rrUA`JAbe)rr`[,[rm2c`!!d*R2c`!"+Pq3UG)E[rkUC%
-EJ!"rrTR#!aZ!!,rqQES$'i!![rkCJ4`!'"L,blrr$mm!!0)E[rd5'lrpNKZrqb
TM5mZrrC)E[lXUC!!5'lql5mZ!!K)H!!%6VS!G#mZrr`r2!!%5'lrp%KZrrC)E[r
XUBd[,[rf5'lql+Q3!%KZrZd[,J!-5(J!"%kk!%4`!8jH6R919[ri5'hrr+KZU2k
T%UN`UFbS8%+RUAY)E[ri5'lrr%kkrba3MdS!C`i[,[ri,blrr%kkrT*3MdjH6R8
L(b!I)PmJAk!Z)N&1d5*I%"mJAfB%S!aJ!U3-2S"1d5*I%"mJAfB%S!eJ!U302S"
1d5*[!!4#85"i#ZbJ*8U!E`iJ8#*[!!JbQ#*[!!3bN!!JAe"26Y")j`!`)Qm!$%+
T!!)JH!VXS#9+J'mQ*&"85M)[!"#b@QiD8d&Y&L"+F!,3+!!)!N$rrP"!e-#J,P0
"B1K-h``!)&pF6dl3!!!#,J#3!`S!N!0b3RJ+5Th16VS!*%*R5(N!!2rr5'm!"%K
A2c`!!5)krpj1Y4!!)'d!E%k3!+Rd@Bm[2&T&8Np#CkQJ*&GCMbmm4%&838*RUD!
J9b"3)RJ*##45B!ibf'B+-KTJ!N)C8FRrr,[*CZkTSkQM@Bm[2%4548a#CkQJ)&H
J*5"3iN!N$@!'-KM9Y4!!8FMrq+QM6R8JAc)B0"L`@&I*rrT+3QIq6[!Jr#"I-KJ
d',#B9mRrqNT#Crj1m#$k)&mb'$3BX%*Z#T!!3@d'd%""m!!#-""RrNl`!!!J,`!
%,d%!"#)[!!J[A`!%51Fm!#3!*J&)3X6$+!!U!8K&b-A84%K#N!2!`G##60m!2#)
I6R8J,`!%,d%!"#)[!!J[A`!%51Fa!%kk!*a-h`#-)Kp1G5![!!3[33!%)Lm!##p
I!!4)jc%!6VS!I#!"60m!M#)I6R8J,`!%,d%!"#)[!!J[A`!%51Fa!%kk!#a-h`#
-)Kp1G5![!!3[33!%)Lm!##pI!!4)jc%!6VS!$#!"60m!M#)I6R9+J'SF5S&U$%5
!4)&1ZJ!J4)&1G85!6VS!&N5!4)&1G8U"DJT%J8kk!!C%J%je,M`!!2rrXS"M"L)
!F!"1GE#(BJb!`8K!-J"#3%K!6R@bKf)D,J"#3%K!J-&)3%K(2J")4il"-!G)4c)
(6R8N!#B"iSMLLE+(B[L!`F#(-J2#`#i$5%I1`%K(dSGP#*+#BJ4%J8je8d"Jj%j
e!*!$D!#3!hJ!N!21!*!$@!#3!b!!"$mm!!'Tm!#52c`!!DR`!+Br2!!"UI!!ZMm
m!!'Tm!$@2c`!!DR`!3`r2!!"UI!",$mm!!'Tm!&12c`!!DR`!@ir2!!"UI!#+$m
m!!'Tm!%k2c`!!UR`!*!$#J#3!`%!N!-"!*!%!3)!"J#3"DN!%J#p!%`%!Np,!*!
&U3"Q!,d!S!3'3f&ZBf9X!*!&CJ"f!(B!R4!%9%9B9!#3"BF!GJ#A!*d3"%eA58N
!N!9Q!#)!GJ"YL!P1CAFJ9(P`C6S!N!D(!!d!P`"YL!a1CAFJ3h*PBA4[FMS!N!8
%!!S!9!#VL(G6CA3J4QPXC5"8HA"P,d0bC@&dEh)JBRNJC(*[F("TEQFJB5"QD@a
P)'pZG'mJG'KTFb"KF("XD@0KG'P[EY9c)'PMEfiZ)#""GA4SEh)k)%*bD@&Z)%*
PBfKdC@`Z)#"'FQ9PE(NJFQ9NDA0dFQPLGA4KBQaP,J#3"#4$9%0q!*!$!8C548B
!!3#3!i!!!3#"5801)`!"!*!$J!!"!*!&"d&38%`!N!B(+T!%!!%!N!-"!!Ij!!!
(qS!!"ra!!!)))!!#""!!!3))!!%""!!"#))!!3K"!!-)3)!&#%"!#3a!)"%D3"!
JQN!)3)b!")"&!!*!*J!")"J!!K!)!!3)#!!)"!!!%!)!!#!"!!"!!)!!J!"!!3!
!)!)!!"!%!!!)#!!!""!!!!)J!!!"3!#3!i!!"rN!!!IlJ!!(rm!!!rrJ!!2rm!!
"rrJ!!Irm!!(rrJ!"rrm!!rrrJ!Irrm!2rrrJ(rrrm$rrrrKrrrrmrj!$r[q3!rj
rrj!$2rrrrKrrrr`2rrri"rrrm!2rrq!"rrr!!2rrJ!"rr`!!2ri!!"rm!!!2q!!
!"r!!!!2J!!!"`!#3!`3!N!ErN!J!!2m!N"ArN!J!rm[r!*!8rj!*bj!$r`#3&2p
HN!Arbj!&r`#3%rpHN!Erbj!&r`#3%rpHN!Erbj!&r`#3%[pHN!Irbj!&r`#3%Ip
HN!6rAT!$rmZ3"Im!N"$rAT!%rek3"2r,N!Ar!*!1rrpHN!6rAT!%rmZ3"[m!N!c
rbrpHN!6rAT!%rmZ3"rm!N!Vrbm[rAT!%rrpHN!2rbj!)r`#3#2r,N!2rAT!$rrr
,rejHrmZ3#Im!N!Erbj!&rejHrrr,rejHrmZ3#[m!N!6rbj!'rek3!rrrAPlrbj!
-r`!!rmZ3#2pHN!2rA[r,N!lr!!$rbj!)rejHrrr,N"$r!!$rbj!)rrr,N"(r!*!
%rmZ3#2r,N"$r!*!'rmZ3"rr,N!rr!*!)rmZ3&Im!N!Vrbj!6r`#3$2r,N"(r!*!
1rmZ3$rm!N"$rbj!0r`#3%[r,N![r!*!8rmZ3#Im!N"Erbj!(r`#3'2r,N!Ar!*!
DrmZ3!rm!N"crbrm!N"lr!*!4!J#3!`rrN!2`$`#3#JrrN!2`qI!!N!N2rj!%QCm
!N!VlZl[jQCR`!*!*qlZl[jQCR`#3#3qlN!2jQCR`!*!)$lZ3!lqCQCm!N!J2Zl[
lZrQCQI!!N!F2Zl[lZlqCQCm!N!IrZl[lZlqCN!2`!*!&$jqlZrZl[jQ3!jm!N!A
jRlZlrlZrQC!%m!#3!`qCRlZrqIZrQC!%R`#3!rQCQIZrqIZrQC!&m!!2QC!$ql[
rZrQCN!@I!2QCN!1IZlqrQC!(m!qCN!6l[rQCN!HI!2QCN!1IqCQ3#2!!$jQ3"2Q
CN!HI!*!$qCQ3!rQCN!I`!*!$$jQ3#Tm!N!AjQC!*m!#3"3qCN!LI!*!(qCQ3"r!
!N!F2QC!'R`#3#IQCN!A`!*!*$jQ3"*m!N![jQC!$m!#3#`qCQCm!N!hjQI!!N!d
2R`#3$r!!N!T!2i!q`"0J%l!5Q$+-AiD,JmF"BJ)`""J)$"!')!0!!B!rJ$r!(q!
Im"ri2rarr[q3"Rrq2r`Iq!r`"q!$`!!!!3#3!rq3"`#3#Iq3"F[rr`#3#IpHA[r
rbrrr!*!)rejHrj!$brrr!*!(rejHrelrbm[rr`#3"IrrAPlrA[r,N!2rr`#3!rr
,rj!'bj!%rrm!rmZ3!rpHrj!$bj!&rj!%bj!$rj!$bj!(r`$rrmZ3!rr,N!Ir!*!
$rrr,N!Rr!*!&rrr,N!Ir!*!(rrr,N!Ar!*!*rrr,N!2r!*!,rrr,r`#3$Irr!*!
+J!$rN!2`!*!%rrrjr`#3"!qlrjr`!*!$$l[rqIm!N!-2Zr[jRr!!!2qlqrQCr`!
2RrrrqCQIm2QCqrrjQCRrrjQIrjQ3!jm2qCRjQC!$m!$rQC!%R`!!$rQCN!2`!*!
$rjQCR`#3"!rjQI!!N!ArR`#3"Jr`!*!'!3#3""J!8!#N!4)"BJ!"!3!"!*!'J!!
!+!S!N!-L!3#!!*!$!c%Z-"G$D'&ZCf8J9(P`C5p$FQ9KG'pb)$%Z-!#3!d`"!)!
!N!-$-5i`3@*j)%*bD@&Z)%*PBfKdC@c4C(*[F#"KERNJCQPXC5"[ER4[)'eP)(4
[)'0SB@jRC5"TG(-JG(P`C5pMFQ9KG'pb!!!"!*!$%)N!!!q*!!!"`J"T(KJ&iJ#
3!a`"SJ!34%&833#3!iTD49*2!*!$PN4548`!N!1L3dp%43!#!+j659T&!*!$dN4
*9%`!N!2H3Nj%6!#3!qT'8N9'!!%!pNP$6L-!!!%1D@0X1!!!!4TTBf`d!!!"*QP
MFb-!!!%bD@0c1!!!!6jTBh-d!!!"5N083hi!!!&@4%a24`!!!@*fCA*c!!%"EJ!
!rrmS!*!%D4d3!!$rr`J!!!B!D4dS!!$rrbJ!!!`!D4dJ!!,rrcJ!!"!!D4dF!!(
rra`!!LS!N!ErrbJ!"&`!N!6rN!3!!!6)!'NH%!#!rrm!!!6@!'NG$!#!rrm!!!A
F!'NG!!#!rrm!!!B%!'NG#!#"rrm!!!B2!*!&J2rr!!!''J"T(33!J2rr!!!((J"
T(63!J2rr!!!,)J"T(1!!J2rr!!!0*J"T(1`!J2rr!!!0DJ"T(2!!J2rr!!!1EJ"
T(1J!N!B1mJ"T(0`!J!!2!!!1p`"T(13!![rr!!!2%`"T(43!!Irr!!!213#3"!j
2GfjPFL"bCA0[GA*MC4"$D'&ZCf8J4QPXC5"8HA"P`dS: