System routines must allocate and deallocate file units in order to avoid conflicts. When writing IDL procedures, the GET_LUN and FREE_LUN procedures are used. When writing system-level routines, you can access the same routines by calling IDL_FileGetUnit() and IDL_FileFreeUnit().


Use IDL_FileGetUnit() to allocate file units.

void IDL_FileGetUnit(int argc, IDL_VPTR *argv)


argc should always be 1.


argv[0] contains an IDL_VPTR to the IDL_VARIABLE that will be filled in with the resulting unit number.


Use IDL_FileFreeUnit() to free file units.

void IDL_FileFreeUnit(int argc, IDL_VPTR *argv)


argc gives the number of elements in argv.


argv should contain scalar integer values giving the Logical Unit Numbers of the file units to be returned.

Coding Patterns

The following code pattern demonstrates how these functions might be used to open and close a file named junk.dat:

IDL_VPTR argv[2]; 
/* Allocate a file unit. */
argv[0] = &unit;
unit.type = IDL_TYP_LONG; 
unit.flags = 0; 
IDL_FileGetUnit(1, argv);
/* Set up the file name */ 
name.type = IDL_TYP_STRING; 
name.flags = IDL_V_CONST; 
name.value.str.s = "junk.dat";
name.value.str.slen = sizeof("junk.dat") - 1;
name.value.str.stype = 0;
argv[1] = &name;
IDL_FileOpen(2, argv, (char *) 0, IDL_OPEN_R, 0, 1, 0);
/* Perform any required actions. */
/* Free the file unit and close the file. */ 
IDL_FileFreeUnit(1, argv);

Additional Information

See GET_LUN and FREE_LUN in the IDL online help for additional details about these functions.