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

IDL Bug? (Re: include files in IDL programs)



In article <3A153BC0.360BE8A7@acsys.it>,
 Nando <f.iavarone@acsys.it> writes:
>Randall Skelton wrote:
>
>> Hello all,
>>
>> This is a longshot but is there any way to have an 'include file' in IDL.
>> i.e. I have a data structure which is rather complicated (and big in type)
>> and I don't want to see it in every program/subroutine that I write.  Is
>> there anyway just to have it included with a simple '#include blah.pro' or
>> somthing similar?
>>
>> Thanks in advance,
>>
>> Randall
>
>If you have a file containing code (as batch), you can use the '@filename'
>to include that codes in your program.
>If the case of strucured data type, it coul be better to use the __define
>procedure.
>
>For example suppose you have the structure:
>
>struct = {structTest, $
>                        pippo: 0L,$
>                        pluto: lonarr(5)}
>
>In the first case   if you have the file "struct.definition",
>in your code you can insert that lines using:    @struct.definition
>It works as "#define " of C. IDL simply replace the @struct.definition with
>the contents of the file.
>
>
>In the second case you can have the file "structTest__define.pro", containing
>the declaration of your struct:
>
>
>
>pro structTest__define
>
>    struct = {structTest, $
>                        pippo: 0L,$
>                        pluto: lonarr(5)}
>
>end;
>
>
>
>
>After structTest__define.pro compilation, in your code you can use the
>statement
>
>myStruct = {structTest}.
>
>
>The difference between the two techniques is that in the first case struct is
>your variable; in the second one you define a "new data type" structTest that
>you can use to "declare" all variables you need:
>
>
>myStruct1 = {structTest}
>myStruct2 = {structTest}
>
>
>myStruct1 and myStruct2 are two different variables of the same type.
>
>bye.

Believe it or not, this example doesn't work with the Sun/Solaris version of
IDL 5.4.  I have to compile the procedure with the structure definition before
attempting to use it:

   IDL> test = {structTest}
   % Attempt to call undefined procedure/function: 'STRUCTTEST__DEFINE'.
   % Execution halted at:  $MAIN$                 
   IDL> .r structTest__define
   % Compiled module: STRUCTTEST__DEFINE.
   IDL> test = {structTest}

It turns out that this problem isn't unique to structure definitions - the
Solaris version of IDL doesn't match routine names containing uppercase
letters.  For example, I defined two routines called searchTest.pro and
searchtest.pro:

   ; searchTest.pro
   pro searchTest
      print, 'You found me'
   end

   ; searchtest.pro
   pro searchtest
      print, 'You found me'
   end

Then in IDL:

   IDL> searchtest
   You found me
   IDL> searchTest
   % Attempt to call undefined procedure/function: 'SEARCHTEST'.
   % Execution halted at:  $MAIN$                 
   IDL> .r searchTest
   % Compiled module: SEARCHTEST.
   IDL> searchTest   
   You found me

Doug