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().

IDL_FileGetUnit()


Use IDL_FileGetUnit() to allocate file units.

void IDL_FileGetUnit(int argc, IDL_VPTR *argv)

argc

argc should always be 1.

argv

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

IDL_FileFreeUnit()


Use IDL_FileFreeUnit() to free file units.

void IDL_FileFreeUnit(int argc, IDL_VPTR *argv)

argc

argc gives the number of elements in argv.

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]; 
IDL_VARIABLE unit; 
IDL_VARIABLE name;
.
.
 
.
/* 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.