America Online APPLE II DEVELOPMENT FORUM CONFERENCE LOG Tuesday, September 18, 1990 10:00 p.m. Eastern Time Topic: Programming Environments Forum Leader: Gary Jacobson (AFA Gary J) AFA Gary J Dave: Any ideas on how to determine if memory handles are being goofed up.. AFA Gary J by a program? AFA Gary J (after the program is quit) Dave Lyons Gary, whaddaya mean exactly? Detect programatically, or determine the cause of a Dave Lyons crash, or what? AFA Gary J All of the above, Dave :) AFA Gary J Dave: Right now I'm just trying to determine that that is in fact the problem. AFA Gary J I'll get this event rolling here..... AFL Scott Programming environment... Desk, computer, paper, books, manuals... Pepsi's... AFA Gary J Welcome to the Apple II Development Forum. Tonight's topic is (as Scott AFA Gary J pointed out :) Programming Environments, and whatever else we want (since we AFA Gary J have such a small group). AFA Gary J Let's NOT use protocol, unless we get overwhelmed with newcomers here. AFA Gary J Anyone have a question they'd like to start off with this evening? AFL Scott As I was saying.. Pepsi's... broken clock... sunrise... sunset... no sleep... AFL Scott etc... AFL Scott Oh.. Kleenex, too... Can't forget that..:) AFA Gary J I got an Apple "charge" over the weekend. I actually got to visit the lobby AFA Gary J of Apple headquarters. Neato :) AFL Scott Great!:) AFA Gary J I even saw the ledgendary "Mariani Avenue" :) Dave Lyons Gary, which building? AFA Gary J Ahh... CC3? (If I remember correctly) AFA Gary J The big 8 story one. AFA Gary J ...where DTS is. AFL Scott What is the programming environment like at Apple? Serious question... AFA Gary J Matt or Dave.... Do you have an answer for Scott? Matt DTS I don't even have a question from Scott since I got here. Matt DTS (Incidentally, DTS is a metaphysical thing and is, in fact, everywhere.) AFA Gary J I've always believed that too, Matt :) AFL Scott Just wanted to know what the programming environment was like at Apple... you AFL Scott know... lighting, desks... atmosphere... Dave Lyons We have them all! AFL Marty I want to know about the DTS hot tub :) Matt DTS In CC3 where I work, it's spacious, well-lit and nice. If I wasn't interrupted so much I could really Matt DTS program there, too. As it is, when I want to program I usually do it here at home. Dave Lyons Lights, desks, and air. Just add M&Ms and soft drinks and that's about all you need. And Dave Lyons coputers. AFL Scott Any music? Just wondering... I've always had this vision of Apple being a AFL Scott haven for people to be creative without boundaries. Matt DTS The DTS Hot Tub continues to run into difficulty, like no place to put it and no budget to buy it. :( AFL Marty :( Dave Lyons When I want to really program here (which is more now than before, of course) I just stay until Dave Lyons about 2:30a...it's really quiet that late, except when someone Dave Lyons comes along with a VACUUM CLEANER and vacuums right under my chair for a couple minutes, probably Dave Lyons trying to memorize the source code on my screen.... Mac Hater so gary masquerades as a janitor, eh. AFA Gary J :) AFA Gary J Actually, that's not a bad idea, Mac Hater :) Matt DTS There are boundaries. There are frustrating, inflexible barriers to productivity at Apple, usually Matt DTS referred to as "meetings". Dave Lyons (Hey, speak for your own meetings. I've been to a lot of flexible ones.) Matt DTS (You've made a lot of them flexible by refusing to stick to the subject and end on time, too. :P) Dave Lyons (It's a feature!) AFL Scott So changing the world is a slow process, interrupted by frequent meetings where AFL Scott there is no agenda and if there was one it wouldn't be followed? :) Matt DTS "I know. Let's stop talking about the system software and think about speech recognition!" Mac Hater (BTW, Orca/M v2.0 is in beta testing. leave email to MIKEW50 if you want to Mac Hater get on the beta-test list!!) AFA Gary J For your latecomers this evening, tonight's scheduled topic is "Programming AFA Gary J Environments". We can take any questions you have. (We'll take them, but AFA Gary J not guaranteed to answer :) Dave Lyons On Scott's question from quite a while ago--detecting that the handle chain has been Dave Lyons toasted is pretty hard. Once it's fried, it's hard even to get much done with a debugging CDA. Dave Lyons Much better would be to detect it right before it happens, and Big Brother will (still) eventually Dave Lyons do that *sometimes* (only if it's a tool call/etc that's about to do the damage!). Dave Lyons Best solution is to have high confidence that your code is always dereferencing ptrs/handles/ Dave Lyons ptrs to handles/etc the right number of times (dereffing *not enough* is a good way to fry Dave Lyons the Mem Mgr, since you'll probably go store data in a master pointer record instead of in a block Dave Lyons you've allocated). AFA Gary J That was my question (I think), not Scott's. The problem I'm having isn't Dave Lyons (Oops, sorry. :) AFL Scott (I was wondering about that, too, Gary..:)) AFA Gary J resulting in a crash, and that's why it's VERY difficult to determine the AFA Gary J cause. It's the problem I brought up a few weeks back... it's causing the AFA Gary J ORCA editor to produce an "Invalid Text Data" error when trying to run the AFA Gary J editor after my program has been executed (ORCA is fully re-loaded). The AFA Gary J problem survives through a warm re-boot. AFA Gary J I also get a memory manager error sometimes (when trying to run the editor, AFA Gary J again). The only place the problem is manifest (so far as I've seen) has AFA Gary J been in connection with the ORCA editor. AFL Scott I've seen that, too, Gary... I've also seen "Memory Manager - invalid handle AFL Scott given. AFA Gary J Yes!! That's the error, Scott. AFA Gary J I have to do a cold re-boot in order to edit my source again. Mac Hater maybe yer prog trashes romdisk w/ block=editor. the scott-problem doesn't Mac Hater happen on a warm boot, at least to me (and it went away when I used ROSE! :) AFL Scott Near as I can tell, it happens for the reason Dave mentions... Floating handles AFL Scott I've only seen it under Orca/C, though.. I think StartDesk and having to use AFL Scott the userid() function have something to do with it, but I'll be darned if I AFL Scott can nail it. AFA Gary J I'm using ORCA/M, and it's happening to me. AFL Scott I also think it's the root of some problems encountered by setting optimize to AFL Scott -1, too... this causes, in some cases, pascal strings to be blown to hell. AFA Gary J I'd sure like to find it, as I'm not sure what other problems it might cause. AFA Gary J I'd like to nail it down before I release the program. Matt DTS It sounds almost like there's something weird in your system, Scott. AFL Scott I would like to find it, too, Gary.. it happens to me only with large programs. AFA Gary J My program is getting quite large now. AFA Gary J (It occupies 6 load segments, for a total around $30000 bytes) AFL Scott There's a lot weird in my system, Matt. No known hardware problems, though. Matt DTS This doesn't seem solvable online - does anybody else have something interesting happening? AFA Gary J Matt has a good point :) Any other questions (programming environment or not) AFA Gary J out there? AFA Gary J I have one. Is there an easy way to make a data segment that doesn't wrap AFA Gary J around a bank boundry? AFA Gary J I know there's another OMF header field that is supposed to take care of that, AFA Gary J but as far as I know, there isn't a catch-all OMF header editor out there. Matt DTS What do you mean by "wrap around a bank boundary"? Dave Lyons Eh? AFA Gary J Well, maybe I should ask another question first. I know data segments can be Dave Lyons You want one that doesn't -cross- a bank boundary at all, Gary? AFA Gary J larger than 64k. (Yes, Dave!) AFA Gary J Is it possible for a data segment that is than 64K to be loaded in at AFA Gary J a point where it could cross a bank boundry? Dave Lyons I think the answer is to just make it a code segment--I think data segments are always allowed Dave Lyons to cross banks. AFA Gary J That's what I've done to this point, Dave. But, I want to be able to use AFA Gary J using statements to include that data. Dave Lyons (If you make it a code segment, just make sure it comes -after- your first real code segment, or Dave Lyons you're in for a nasty surprise when the system jumps to your data segment.) Dave Lyons Statements? Assembly? Like APW assembler won't let you do a "USING blah" where Blah is a code Dave Lyons segment? AFA Gary J Yes. AFA Gary J No, Blah is a data segment. AFA Gary J (Can that be done with a code segment? If so, then that's my solution :) Matt DTS You can always make it a bank-aligned segment so that it won't cross a bank, but... Matt DTS ...could be troublesome (see IIgs TN #78). AFA Gary J Right, Matt. That's a possibility, but not a first choice :) Dave Lyons (Somebody released a utility for changing the KIND fields of segments--that would be handy in your Dave Lyons case, I think.) Matt DTS (LinkIIgs lets you specify the KIND field of any segment if you like - editing later is not necessary) AFA Gary J I don't think the KIND field is what I want to get at. (looking) Dave Lyons (Matt, what I don't know is whether specifying the segment kind at link time affects how the linker Dave Lyons handles the USING opcodes in the object files. I know post-editing would work, and I *think* having Dave Lyons LinkIIgs do it would work too.) AFA Gary J Oh well. Maybe I'll just edit my OMF header myself ;) A2, AFA Gary J GA AFA Gary J A2GS, did you have a question? Matt DTS I think LinkIIgs can handle it. If not, I'd venture it's a bug. (A2GS, are you there?) AFA Gary J Ah... I was thinking of the BankSize field. AFA Gary J BankSize specifies that the segment must not cross a 64K bank boundry. AFA Gary J Hello, A2GS? A2GS oops...sorry....was tied up....now for my Q's AFA Gary J GA, A2 Matt DTS Tied up? Well, I guess that's your business. :) A2GS 1) Is there a way to request 2 continuous banks of memory and be sure that A2GS the first bank was aligned on a bank boudary (so the 2nd will be also)? Dave Lyons Nope, there's no simple way to do that. A2GS That's what I thought :( Matt DTS The Memory Manager has no "bank-aligned" attribute, so you have to do it yourself, just like the Matt DTS Loader does. For a description of how the Loader does it, see IIgs TN #78. Dave Lyons If you *really* need that, you can walk through one bank at a time trying to allocate $20000 bytes Dave Lyons at $x0000 until it succeeds or you hit TotalMem or $ff0000 or whatever. A2GS Yeah, requesting a single bank which is page aligned is no prob., I guess the A2GS easiest way, although it is a waste of memory is to request 3 banks of memory, A2GS that way you can be sure that at least 2 will be aligned. AFA Gary J Maybe you could do it with a load segment, A2. AFA Gary J (sorta what I'm dealing with) Matt DTS A2GS: That doesn't follow. Matt DTS (Oh, never mind. That way you have at least two contiguous banks. I get it.) A2GS Ok... A2GS now for my 2nd Q....Anyone happen to know the delay time between when you press A2GS a key and when the system goes into Repeat Key mode? Assuming I'm reading A2GS $c000 directly. Matt DTS It depends on how the user's set the delay in the Control Panel. AFA Gary J Yes. AFA Gary J (Matt types fast :) AFL Scott (Even when he's sick!) AFA Gary J :) A2GS Even if your reading $c000 directly? A2GS reading = polling Matt DTS Even if you're reading $C000 directly. AFA Gary J Yes. Dave Lyons Yes. Matt DTS Otherwise the user-selected repeat rate would be meaningless in programs that didn't use the Event Mgr Matt DTS (which was nearly all of them when the IIgs was first introduced). A2GS Thanx...I thought that looked wrong :) AFA Gary J A2GS: On your first question, you might try having a single load segment that AFA Gary J consists entirely of a single "ds" that is 128K long. AFA Gary J It won't take up room on the disk (as sparcing takes care of that), and it AFA Gary J should have the effect you want. Matt DTS A load segment would be a good way to do it since the Loader will do the work for you. Just make it Matt DTS bank-aligned. AFA Gary J Yes. Matt DTS (Note that LinkIIgs doesn't create DS records, but the file will be sparse on a ProDOS disk.) AFA Gary J Exactly! Matt DTS ZapLink does create DS records and bank-aligned segments, but I don't know if you can do that Matt DTS selectively. (However, if you're going to have one bank-aligned, you might want to make them all that Matt DTS way so they're smaller on disk. Your decision.) AFA Gary J I'm using that method to create absolute addressable memory in an assembly AFA Gary J program. It works great. A2GS How can I guarantee that the 128k of 00's will start out on a bank boundary?... AFA Gary J The segment header, again. AFA Gary J That's sorta what my other question was all about. A2GS ah, yes..thanx... AFA Gary J Ok.. any other earth shaking question out there? AFA Gary J (even not earth shaking?) AFA Gary J (I don't think Californian's like to hear those words :) Dave Lyons Duded, I'm missing something re "Load segment." Isn't a load segment any segment in a load file Dave Lyons (that is, the output of a link, rather than an object file)? Dave Lyons Duded = Dudes AFA Gary J Yes. But the object file can specify the type of load segment it is, like AFA Gary J Init segment or DP segment. AFA Gary J (Kind field) AFA Gary J (is that what you mean?) Matt DTS (Duded = Dude Editor) AFL Scott ROTFL!!!:) AFA Parik there is a loadname & a different segname. segname ='s load segments i think AFA Parik (ie, DATA1, DATA2, LOADSEG1, etc) and loadname = ???. dunno how to set it. AFA Gary J The "blank" segment, as it's sometimes called. Dave Lyons Okay, but we still haven't *really* answered the question--how *do* you make a segment load on Dave Lyons a bank boundary, in the OMF? If it uses the BANKSIZE field, then that isn't going to work Dave Lyons for >64K segments, according to the description in Appendix F of the Addison-Wesley GS/OS reference. Dave Lyons ("It" = ZapLink or whatever.) AFA Gary J I'd say that the Align field would have to be edited somehow. Matt DTS You have to use the ALIGN field. Zaplink does this for you, and maybe LinkIIgs has a way to do it too Matt DTS but I don't know what it is. Dave Lyons (I don't think the load *name* is relevant, btw.) AFA Gary J Right, Dave. I think the sequential number is what's important. AFA Gary J Hmmm. How does Zaplink allow the user to set the Align? (Maybe I need to read AFA Gary J my docs) Matt DTS If you specify the +B flag, it makes all segments bank-aligned (I believe). Dave Lyons Okay, that should work. AFA Gary J I haven't tried it, but I think you should be able to edit a single segment's AFA Gary J header, no? A2GS I think I'll just stick to requesting 3 banks....I'm not going to get involved A2GS in things which may give me headaches the following morning. AFA Gary J A2GS: It's really quite easy. AFA Gary J The only potential problem is the bank alignment. AFA Gary J (But that can be licked) Dave Lyons A2GS, if you do allocate 3 banks, you might then proceed to Dispose of your handle and re-allocate Dave Lyons just the 2 that you'll wind up using. A2GS Exactly....that's the prob. that I've been trying to solve from the beginning. A2GS referring to Gary Dave Lyons BTW, how come you need two consecutive banks, if it's any of our business? AFA Gary J (BTW: If you want good info on segmenting, get a hold of the July/August, October, AFA Gary J and November 1988 issues of Call-A.P.P.L.E.) AFA Gary J (GOOD article by Mike Westerfield) AFA Parik couldn't you ds 65534 and have a single codeseg with "label bra label" and kee AFA Parik them both in a loadseg? A2GS Convenience...I'm working with some gorgeous transitions...going from one A2GS SHR screen to another...and I'm using 4 UNcompressed pics to test the routines A2GS I know....I could do all kinds of things to reduce the memory A2GS substantially (how do you spell that? :) But I'm just testing the routines A2GS right now. Dave Lyons Well, you're going to be unable to allocate your memory much more frequently than if you allocated Dave Lyons sepeate 32K chunks, for example. Dave Lyons (For testing, no problem.) A2GS All I need is this one 128k chunk...I'll worry about memory when the routines A2GS are done. A2GS I'm done (finally :) AFA Gary J Ok... GA, CodeMaster CodeMaster gee, thanks :) CodeMaster actually its 2 small questions... CodeMaster :) CodeMaster 1.) I have a small rotuine that will let me... CodeMaster do 16 colors from 640 mode, but I have to use _SetPenPat CodeMaster this is not so bad in it self, but I would like to now If any one... CodeMaster knows of a way to set the defalut color tables to do the same thing? CodeMaster Am I asking a questin that was al ready asked? CodeMaster any one ? ga Dave Lyons It wasn't asked tonight, CM. It's been asked before (of me anyway)--it's Dave Lyons a good question. The answer is that you *do* have to construct patterns of $00 00 00..., $11 11 Dave Lyons 11..., etc yourself and use SetPenPat. There's no "SetDithColor" QuickDraw call. Dave Lyons (I'm in a position to add one, but I'm not sure if it makes sense at this stage in the toolbox's Dave Lyons maturity--by now "everybody" is doing it themselves anyway.) AFA Gary J (oooh! That's right! Hmmmmm.. got to think of some more off-the-wall tool AFA Gary J calls for Dave to work on :) Dave Lyons :) Dave Lyons I've got some pretty off-the-wall ideas anyway. CodeMaster so, your saying the way I am doing it is OK? Dave Lyons CM, Yes--the "right" way to draw in one of the standard 16 640-dithered colors is to do a Dave Lyons SetpenPat to a pattern of, say, sixteen $55s for color 5. CodeMaster sure, like _RemoveFont CodeMaster right, thas what I'm doing now, just thought that there might be a more... CodeMaster effecent way to do it. CodeMaster thanks,... Dave Lyons RemoveFont? What would you guys use that for, and how badly do you want it? CodeMaster 2.) Is there a way to know if a NDA has been activated? CodeMaster you really want to know, dave? CodeMaster I'm not kiding... CodeMaster I would use it to help ( as a begining ) develop.. CodeMaster a typesetting application for the GS. Dave Lyons CM, Yes--I had not given any thought to a RemoveFont, so "step 0" in getting one is to Dave Lyons tell me what it's for & how useful it would be. (I can't promise that convincing me is enough to make Dave Lyons it happen, of course.) CodeMaster ok, here goes... CodeMaster I work on the Mac all day as a Systems Admin for a typesetting house, CodeMaster we have over 2000 PS fonts on a 160 Apple HD, CodeMaster an operator, or typesetter, can use any of these faces at any given time. CodeMaster now, the mac will not let me have all 2000 ( and growing ) faces loaded CodeMaster at one time, so I must use Suitcase II to load and unload faces at will. CodeMaster Now that the application we use can recongize the fact that faces have been CodeMaster added or removed, it makes life a LOT easier! CodeMaster It is my impression of the GS, that a tyesetting application CodeMaster can be developed that can do just about anythging a typesetter on the mac CodeMaster do, and a lot cheaper. A2GS Absolutely! A2GS Who's gonna write it? CodeMaster I'l right it! Dave Lyons You have postscript fonts, and you're using them with the GS Font Manager? (I'm confused.) CodeMaster no dave, I'm not using PS fonts with GS Font Manager, I'm just CodeMaster saying how I use PS fonts on the mac CodeMaster and how I would like to use them on the GS. CodeMaster now you understand? CodeMaster there is really no reason that a typesetting app cannot ber CodeMaster developed on the gs! CodeMaster the only thing the gs lacks is an easy method to load and unload faces... Dave Lyons Still not sure why we need a RemoveFont--is it just so you don't have to scroll through a Dave Lyons six-mile-tall scrolling "Font" menu? CodeMaster thast helps, but Allso there is not enough memory to hold very many faces CodeMaster at once, also, you realy don't want ALL 2000 faces in your font folder, do you? CodeMaster it really makes system admin a real pain! Dave Lyons Well, on the GS (and the Mac too, I think) fonts are not usually in memory. Although the NAMES Dave Lyons may be in memory. CodeMaster thats why I use Suitcase II on the Mac, so I don't CodeMaster have to place ALL the fonts in the SYSTEM folder. CodeMaster no, the PS fonts are not, but the bit map screen fonts are. CodeMaster the name, ID, and bit mapo info are all in memory, a block for each face. CodeMaster multiply that by 2000 possible faces! CodeMaster thats a lot of memory! Dave Lyons The bitmap fonts are *in memory* even if you haven't used them yet? I know they aren't on the GS, CodeMaster thats ore then my 4.25 meg gs. Dave Lyons and I *thought* they weren't on the Mac either--I know I've heard a lot about fonts being Purgable Dave Lyons on the Mac, so they can free up their memory when needed. CodeMaster ok, lets put it this way, if I use _AddFontVar... CodeMaster I must load the font file into memory so that I can leet CodeMaster the Font Manager know about a new face that I am adding the CodeMaster Font Mgr font list. CodeMaster I musr do this for each face I add that is not in the Font Folder. CodeMaster yes, the font info block is purgable. Dave Lyons Okay, yes--for things you add with AddFontVar, you have to have Dave Lyons the actual bitmap in memory, true. CodeMaster both on the gs and the mac, but there still several bytes used per face. Dave Lyons (For each one in the Fonts folder, you're right, there is some stuff in RAM for that. I don't Dave Lyons think it's a whole block, but it's sure significant if you have 2000 families.) CodeMaster right, thats what I'm getting at, I don't want all 200 faces in the CodeMaster systerm folder... CodeMaster my startup drive is not that big, I must access another drive for the facesd. CodeMaster If I could develop a NDA like Suitcase II, an app for real typesettingis CodeMaster one step closer to market! Dave Lyons Well...hmmm. Do you need the Font Manager to scale these fonts for you? CodeMaster absloutly! CodeMaster I really don't want 16 different faces in memory for EACh possible font size!@ Dave Lyons (Darn. I was hoping your app could manage the fonts itself! :) CodeMaster let the machines scale it! CodeMaster how do you mean, manage them it self? CodeMaster why couldn't the gs handle scaling? Dave Lyons Well, the Font file format is documented, and as far as QuickDraw is concerned you can draw in Dave Lyons any font that you have a Handle to (SetFont). QD is doing the boldfacing/etc, not the FM. The FM Dave Lyons is doing scaling & managing the Fonts directory, and that's about it. CodeMaster right, but Print Mgr needs Font Mgr to print properly. CodeMaster Or so I thought. Dave Lyons Okay, that's true--any printer drivers that are based on DrawPicture do need the Font Manager to Dave Lyons know about the fonts you're using. (Otherwise you get the same resolution on paper as you had on Dave Lyons the screen, giving ugly printed fonts even if a more detailed version was available.) Dave Lyons So you'd also need a way to do an "AddFontVar" without actually keeping a copy of the bitmap Dave Lyons in memory, right? I believe the current design requires that, since you pass a handle (rather Dave Lyons than, say, a pathname) to the font you're adding. CodeMaster right, _AddFontVar needs a pointer CodeMaster it would be VERY nice to have a call, say... Dave Lyons (sez Handle) CodeMaster _AddNewFont... CodeMaster right, sorry :( CodeMaster that woulkd take a full pathname CodeMaster and then lete FM handle its normal file operations. CodeMaster just like it does in the Font Folder. CodeMaster if that was the case, each app can deal with adding and removeing fonts CodeMaster itself, there would not be a need for a NDA to do it. Dave Lyons If there was a RemoveFont, what do you want it to do to existing font handles derived from that? CodeMaster purge and dispose CodeMaster once I pass the font handle to the _AddFontVar call, I no longer own that CodeMaster handle, FM deals wioth it. Dave Lyons Just leave them hanging? (Would be okay, I guess...they have the App's ID anyway & will go Dave Lyons away when the app quits.) CodeMaster I hope that FM also disposes of it at ShutDown time! Dave Lyons That was part of my question...if you Remove the font, that means the FM no longer knows about your Dave Lyons font, so it wouldn't specifically dispose of it at shutdown time. CodeMaster it should dispose of the handle at the same time it removes CodeMaster the font name and num,be from the font avalable list. CodeMaster so.. CodeMaster _RemoveFont ( FontID ) CodeMaster will remove the name and number from FM listings... CodeMaster and purge and dispose of the handle to that face. Dave Lyons But what if the font handle is still the current font in one or more grafports, or if an application Dave Lyons or DA has a copy of the handle & it going to use it later? CodeMaster why would a DA have a copy of that handle? Dave Lyons Because the DA called InstallFont a long time ago & kept the result so it could draw in that font? Dave Lyons (Maybe that's not polite DA behavior--I haven't used the FM much from DAs. I guess InstallWithStats Dave Lyons is better, along with careful SetPurgeStat calls.) CodeMaster all the FM calls to add a font to a grafport use the font ID, not the CodeMaster handle to the font. CodeMaster _AddFontVar is the only casll that needs that handle, and Dave Lyons Mmm...if I InstallFont and GetFont, I've got a font handle. CodeMaster once the call is made, the app CodeMaster no longr has control of that handle. CodeMaster _GetFont, thats from QD? Dave Lyons Yes. CodeMaster why do I need to get the handle of a font? Dave Lyons (I'm talking about handles to fonts the FM produces, not the ones you feed to AddFontVar-- Dave Lyons although you can *get* that same handle back when installing a "plain" font, I believe). CodeMaster what can I do with it? Dave Lyons What can you do with a Font Handle? You can call SetFont (QuickDraw) and draw with it, for one thing. Dave Lyons You could InstallFont again, instead--I'm just trying to be paranoid & figure out what could Dave Lyons cause problems. CodeMaster oh, nice, font control from QD! CodeMaster right, I like being paranoid! Dave Lyons What's wrong with that? It's always been there. QD could use fonts before the FM was even Dave Lyons written--if you load your own font off disk (or from a resource, or whatever), you can do stuff Dave Lyons with it using only QD if you want. CodeMaster problems from all directions. CodeMaster sure, there is really no way to know if an app has the handle or not. CodeMaster I know, I didn't mean to say that it waw anything wrong.. CodeMaster I just didn't think that far! :( CodeMaster I'm sorry, I guess I didn't think this thing out far enough! Dave Lyons CM, I'm still undecided on the idea.... CodeMaster dave, can you see any ay around this little problem? Dave Lyons Feel free to write up some detail on how it would work & send it to me (and/or DTS/etc)...it's Dave Lyons worth exploring. AFA Gary J Welp. I need to wrap up for the night. It's been interesting. BCS Frank Great chat folks... beginning to appreciate my Crow-Quill pen calligraphy. :)