[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Locating a (bitmap) file



Dave Greenwood wrote:
> 
> I wrote:
> > Using IDL 5.3 and Windows NT I've created an IDL windows application
> > (thanks to the kind folks who responded to my recent posting on the
> > subject).  My application uses a couple of color bitmap labels which
> > are stored as .bmp files.  The application will be used on multiple
> > systems, possibly in a separate location on each system.  I'd prefer
> > not to hard code the location of the .bmp files.  The question is how?
> >
> [snip]
> > I wouldn't mind requiring the .bmp and .sav files to be in the same
> > directory if I could somehow find out from within my application
> > where the .sav file is located.  Is that possible?  (I tried !DIR but
> > it points to some place in the RSI distribution.)
> [snip]
> 
> From one of those anonymous RSI/Kodak lurkers came the following suggestion
> which will solve my problem:
> 
> > If you make a call to HELP, CALLS = calls, the return is a
> > string array whose first element (calls[0]) contains the name of
> > the current routine (which you'll have to STRSPLIT to get out the
> > routine name by itself.)
> >
> > HELP, CALLS = calls
> > thisroutine = (STRSPLIT(calls[0], ' ', /EXTRACT))[0]
> >
> > With that you can call ROUTINE_INFO(name, /SOURCE) to get the
> > path to the .sav or .pro file that owns that routine.  Find
> > the right-most directory separator character for your
> > platform (STRPOS(/REVERSE_SEARCH)) in the info.path field,
> > then extract the string up to that point.
> >
> > source = ROUTINE_INFO(thisroutine, /SOURCE)
> > CASE STRUPCASE(!version.os_family) of
> >         'WINDOWS' : dirsep = '\'
> >         'UNIX' : dirsep = '/'
> >         'MACOS' : dirsep = ':'
> >         'VMS' : dirsep = ']'
> >         ELSE : dirsep = ''
> > ENDCASE
> > root = STRMID(source.path, 0, STRPOS(source.path, dirsep, /REVERSE_SEARCH))
> > Let's say your bitmaps are in a subdirectory named "bitmaps" beneath
> > your source directory.  You can build the appropriate file name
> > via
> >
> > file = FILEPATH('mybitmapfile.bmp', Root = root, SubDir = ['bitmaps'])
> >
> > One advantage of using this method is that there is only one step
> > that actually requires platform-specific code, where you use
> > perhaps a CASE statement based on !version.os_family to define the
> > directory separator character.
> >
> > A second advantage is that you never have to worry about the installation
> > directory that your "customer" has defined; directory and file paths are
> > based on locations relative to wherever it is they put the .pro/.sav files.
> 
> This second advantage is exactly what I wanted to achieve.

Of course, we *could* have hoped RSI would have simply allowed embedded
representations of color bitmaps, just as they did black and white
ones.   Like:

widget_button,value=mybmp

instead of 

widget_button,value='my.bmp'

Maybe they thought we were not smart enough to encode color icons. 
5.4.1 perhaps?

JD

-- 
 J.D. Smith                  |   WORK: (607) 255-6263
 Cornell Dept. of Astronomy  |         (607) 255-5842
 304 Space Sciences Bldg.    |    FAX: (607) 255-5875  
 Ithaca, NY 14853            |