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!" <geez>
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 <LESS> 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. :)