America Online
APPLE II DEVELOPMENT FORUM CONFERENCE LOG
Tuesday, June 12, 1990  10:00 p.m. eastern time
Topic:  Resource Programming
Forum Leader:  Dave Sugar  (AFL Dyfet)

AFL Dyfet  I see our banner flying...Good evening and welcome to the Apple II
          Development
AFL Dyfet  Forum.  Tonight our topic is Resources.  We will be discussing how
          to take
AFL Dyfet  advantage of resources in GS/OS and various products that help in
          using
AFL Dyfet  resources.  We will be using protocol tonight starting NOW.  This
          means that
AFL Dyfet  if you wish to ask a question, you must enter a '?' on a line by
          itself, and if
AFL Dyfet  you wish to comment on what's being discussed, you must enter a
          '!' on a line
AFL Dyfet  by itself.  You will each be called in turn.  Okay, the floor is
          now open for
AFL Dyfet  questions...
AFL Dyfet  Okay Lalanovich, you have the first question and the floor
          now...
Lalanovich Ok, what the heck are resources really good for?
Lalanovich I, mean what do they do that is so important?
AFL Dyfet  Coach, you look ready for this one...GA :)
Coach101   Well, actually I waited for Dave Lyons, but....
Coach101   Much of the interface that is presented to a user,
Coach101   the desktop, messages, etc., involves a lot of code
Coach101   that is not really instructions (like a=b) but is
Coach101   really a series of "data" statements that describe
Coach101   the location and size of window, the appearance of
Coach101   a control, menu, or whatever.  Resources are a
Coach101   means of taking this "data" out of the program and
Coach101   storing it in a "resource fork".  Once this is
Coach101   done, a programmer can play with (really tune) the
Coach101   interface using a suite of tools that are a lot
Coach101   more productive than changing "data" statements
Coach101   in assembler, pascal, C, etc.
Coach101   There are probably a lot more opinions on what
Coach101   resources are really good for, but thats my basic
Coach101   usage of them.   Done.  GA
AFL Dyfet  I was going to add to what Coach had to say, but he has done such
          a wonderful
AFL Dyfet  sumnation there, it seems now unnessisary :)
Coach101   I left you the opening, and you wont take it :)
AFL Dyfet  The other important point about having a resource fork is that it
          is integral
AFL Dyfet  to the file.  When you copy the file, you copy all the resource
          data with it.
AFL Dyfet  You do not need to keep a bunch of messy little data files about
          for static
AFL Dyfet  data, screen images, etc.
AFL Dyfet  Okay, I see that Doctor Why has the next question...GA Doctor
          Why...
Doctor Why I asked this last week but didn't get an answer as to why it was
          necessary...
Doctor Why I had defined a cursor as a resource and when I used it in an
          ORCA/Pascal
Doctor Why program it displayed OK until I moved it around. It would
          periodiccally be
Doctor Why junked. I found the solution. I had defined the cursor record as a
          local
Doctor Why variable. When I made it a global, it worked. Why is it necessary
          to make
Doctor Why it a global?
AFL Dyfet  GA Dave...
Dave Lyons Local variables in C and Pascal are stored on the stack only
Dave Lyons as long as you're still in the procedure or function where they're
          declared.  Many toolbox
Dave Lyons routines (like, just to choose an example
Dave Lyons completely at random, SetCursor) require that the
Dave Lyons data you feed them a pointer to stick around.  When your function
          exited, the
Dave Lyons space on the stack was re-used in short order, and the
          cursor-update routine tried
Dave Lyons to use the original cursor record again (it has that right).  Does
          that answer the question?
Doctor Why Yes. Thanks
Dave Lyons ga
AFL Dyfet  In C, if you had specified that it was a static (local) variable,
          you would
AFL Dyfet  have not had a problem.  Unfortunately, in Pascal, there is no
          standard way
AFL Dyfet  to control storage like that.  Some Pascal implimentations do have
          extensions
AFL Dyfet  to allow something like 'static' (fixed, non stack allocated)
          local variables,
AFL Dyfet  but I do not recall off-hand if Orca/Pascal has any such unusual
          support.
Dave Lyons (Yes, I should have said "locals in Pascal" and "auto variables in
          C".  Thanks.)
Doctor Why So to be on the safe side, all record structures should be
          global.
AFL Dyfet  Okay, I see that Nuzz has the next question.  GA Nuzz
Nuzz       I have an NDA that uses Resources.Not its own Resources, but Res's
          from other
Nuzz       Apps, selected via Standard File. It works fine, but I anm not
          "logging" in
Nuzz       to the Resource Mngr with a startup, Set/get curresourceapp,
          etc.
Nuzz       Is this needed in this circumstance.
AFL Dyfet  GA Dave...
Dave Lyons Yes.  If you're not starting up the RM yourself, any resource
          files you open or close
Dave Lyons are affecting the resource-search-path of whoever
Dave Lyons the current RM user it (from GetCurResourceApp).  Not a good
          thing.  You should start it up
Dave Lyons with your own ID when your window is opened, & shut it down when
          you're closed.  When the system
Dave Lyons calls your Action routine or any Run-QUeue routines that belong to
          you, it will already have set
Dave Lyons you as the current resource app, so life it nice.  ga
Nuzz       Ok. I understand that .GA
AFL Dyfet  Thank you Dave...Okay, I see Windrider has the next question.  GA
          Wind...
Windrider5 How do you link the resource and data forks of a program?
AFL Dyfet  GA Coach...
Coach101   There are a couple of ways to do it.
Coach101   The simplist is to just specify the keep file from
Coach101   the linker as the keep file for REZ when you do
Coach101   the compile.  REZ will not destroy the material
Coach101   in the data fork (the output from the linker) but
Coach101   will place its (REZ's) output in the resource fork.
Coach101   Done... GA
AFL Dyfet  It depends, in part, on what kinds of tools you are using to
          create your
AFL Dyfet  resource fork data with, too...
Coach101   Right....  Dumb me...  Overlooked a whole different
Coach101   area...
Coach101   You can also use APW's "Duplicate" tool to copy only the resource
          fork of one file into another
Coach101   file.  Caution is advised with "Duplicate", it was/is a stopgap
          tool and it has some anomalies
Coach101   I would definitely recommend ONLY using the most current version
          from APW (that is the new stuff
Coach101   that Tim has alluded to a couple of times)...  DOne again.  GA
Matt DTS   The new APDA stuff is shipping as of today.  Call and order
          tomorrow if you like.  :)
AFL Dyfet  GA Why...
Doctor Why Also, if you are using the APW or ORCA shell, there is a REZ.TUTOR
          in the
Doctor Why software libraries in this forum that has a MAKE exec to show you
          how it
Doctor Why is done.
AFL Dyfet  Okay, I see the next question is from Lalanovich...GA Lalanovich,
          you have the
AFL Dyfet  floor now.
Lalanovich Thanks for the great answers on my previous question. I've seen
          descriptions
Lalanovich of resources elsewhere (latest Nibble, for example) that say
          something to
Lalanovich the effect that you only need to move one file instead of a lot of
          supporting
Lalanovich files.  Does this mean that the resources are included as part of
          your main
Lalanovich program in one big file or am I missing something here?  Also, is
          it safe to
Lalanovich assume that programs such as DesignMaster are using resources in
          doing what
Lalanovich they do?
AFL Dyfet  In effect yes, the resource fork is attached directly to the
          program file,
AFL Dyfet  forming one large file, as far as the external user is concerned.
          Internally,
AFL Dyfet  there are two seperate file streams, however, and the resource
          file is further
AFL Dyfet  segmented into individual resource items.  But if you are copying
          the file, you
AFL Dyfet  are copying everything all at once, together.
AFL Dyfet  Are there any other comments??
ClubBob    The object code is separate or not ...pgm/data
Coach101   The data and resource forks of a file are two
Coach101   independent entities from a programming point of view.  When
          accessing the file via GS/OS you must
Coach101   always specify which fork (data/resource) that you are using.
          Programs like Finder, interpret copy
Coach101   commands to mean, copy both parts (data/resource) of the file.
          ga
CodeMaster My brain hurts!
CodeMaster I must have missed something!...
CodeMaster I guess this is reallly not for raw beginners.
CodeMaster I use Macs, I understand Desktop...
CodeMaster I understand 75% of the GS Toolbox...
CodeMaster But I can't get a handle <grin> on Resources!
Coach101   Aha, he is looking for a pointer :)
CodeMaster Is there a conseptual problem here?
CodeMaster most likely! ;)
CodeMaster I can't spell to nite either!
AFA Gary J (use Memory Manager :)
CodeMaster thanks Gary! ;)
Coach101   What part gets you confused code?
CodeMaster I guess, how the 2 mix, and how prgsa use Rez!
CodeMaster Rez = Resource files.
CodeMaster GA
AFL Dyfet  GA Dave...
Dave Lyons Programs don't use Rez--the Rez compiler is just one way to create
          a resource fork full of
Dave Lyons fun stuff.  Once an application is built, it uses resources just
          by making appropriate toolbox
Dave Lyons calls (like NewWindow2 with a resource-id-number).  Does that
          help?
CodeMaster You mean it is like doing a _SFGetFile call?
Dave Lyons How?
Dave Lyons If my program does a NewWindow2 to create a
Dave Lyons window from a resource template, I just have to provide the
          resource id number, and the
Dave Lyons Window Manager takes care of loading the template from my resource
          fork and calls NewWindow
Dave Lyons with that template before it returns.
CodeMaster A tool call that does a Dilaog Box for you.
CodeMaster So all the resouce files, windows, BS, etc, have numbers...
CodeMaster unique to them, I use a Tool call with a Resource ID, and add some
          info...
Dave Lyons Well, inside
Dave Lyons the resource fork, there are a bunch of resources.  Each one is
          identified by a Resource Type (one
Dave Lyons word) and a resource ID (4 bytes, somewhat limited range).  The
          IDs only need to be unique within
Dave Lyons a resource type (I can have a String ID=1 and a Window Template
          ID=1, no problem).  When you
Dave Lyons do something like NewWindow2, the toolbox *knows* what type it
          wants, so you only specify the
Dave Lyons ID.  For example,
Dave Lyons NewControl2 *knows* it wants type rControlTemplate, so it feeds
          that to LoadResource for you.
Dave Lyons (I decided NewWindow2 was a bad example...you actually do have to
          pass a resource type
Dave Lyons there, since there are two different types possible.)
Dave Lyons (ga)
AFL Dyfet  Any further comments...
CodeMaster thanks :)
CodeMaster ( I think )
AFL Dyfet  Okay, I guess Windrider has the floor next...GA Wind...
Windrider5 from what little rez code that I have read, it seems that writing
          resources for
Windrider5 menus takes a lot more effort than the old fashion way.  Are there
          any short-
Windrider5 cuts
AFL Dyfet  GA Dave...
Dave Lyons Sure--use Genesys, DesignMaster, etc.  ga
Windrider5 is genesy available?
Dave Lyons (I think so)
Coach101   I agree with you Windrider.  Raw REZ code can be as complex, or
          more complex, than just dropping
Coach101   the appropriate code in your program.  However, with the advent of
          DesignMaster and Genesys
Coach101   (WSYWIG resource editors and/or compilers), the true power of
          resources will surface...   done ga
AFL Dyfet  Genesys is particularly nice because it will also generate the
          interface code
AFL Dyfet  for using the resource you have created...
A GibberFC Genesys is Available as we Speak!!! I just got my copy a couple of
          days ago!
AFL Dyfet  Genesys has been released since A-fest, actually...
A GibberFC Put together a full set of menus and about 25 dialog boxes in a 2
          hour session
A GibberFC <grin> GA
AFL Dyfet  Okay, I see that Doctor Why has the next question.  GA Why...
Doctor Why What was Matt's announcement about a new product available through
          APDA?
Matt DTS   The new version of APW Tools and Interfaces, which is final.
Matt DTS   You can order it through Developer Tools Express even if you're
          not an APDA member.
Matt DTS   It's $50, or a $25 upgrade if you have the beta version.
Doctor Why Is there a product #?
Doctor Why (for an upgrad)
Matt DTS   It started shipping today.  Yes, there is a product number.  I
          just don't have it.  <sigh>
Matt DTS   GA
Doctor Why Okay, thanks.
Coach101   But, Tim posted the product number here in the
Coach101   development environments section....   I think
Doctor Why (thanks, I'll check it out)
A GibberFC This is a question for Matt... Is there a window on the release of
          the
A GibberFC Scsi Tape and Scsi Scanner Drivers?
Matt DTS   I'm sure there is, but I don't know what it is.  It should be
          available at APDA soon if not currently.
Matt DTS   GA.
A GibberFC Great!! thanks :)
AFL Dyfet  Okay, are there any other questions for tonight?
Doctor Why (looks like Gib and I are making calls to APDA tomorrow)  :)