/* *+ * Name: * UTIL_GETCWD * Purpose: * Returns the name of the current working directory. * Language: * Starlink ANSI C * Invocation: * CALL UTIL_GETCWD( PATHNM, STATUS ) * Description: * Returns the name of the current working directory. * Arguments: * PATHNM = CHARACTER*(*) (returned) * The current working directory * STATUS = INTEGER (given and returned) * The global status. * Examples: * {routine_example_text} * {routine_example_description} * Pitfalls: * {pitfall_description}... * Notes: * {routine_notes}... * Prior Requirements: * {routine_prior_requirements}... * Side Effects: * {routine_side_effects}... * Algorithm: * {algorithm_description}... * Accuracy: * {routine_accuracy} * Timing: * {routine_timing} * External Routines Used: * {name_of_facility_or_package}: * {routine_used}... * Implementation Deficiencies: * {routine_deficiencies}... * {machine}-specific features used: * {routine_machine_specifics}... * References: * util Subroutine Guide : http://www.sr.bham.ac.uk/asterix-docs/Programmer/Guides/util.html * Keywords: * package:util, usage:public * Copyright: * Copyright (C) University of Birmingham, 1995 * Authors: * DJA: David J. Allan (Jet-X, University of Birmingham) * {enter_new_authors_here} * History: * 9 Mar 1993 (RDS): * Original version. * 26 Nov 1993 (DJA): * Given correct name UTIL_GETCWD. Error handling corrected. * {enter_changes_here} * Bugs: * {note_any_bugs_here} *- */ /* * Include files */ #include "sae_par.h" #include "f77.h" #include "cnf.h" #include "ems.h" /* Error handling */ /* VMS definitions */ #if defined(VAX) #include/* For getcwd */ /* UNIX definitions */ #else #include #endif /* * Body of code */ F77_SUBROUTINE(util_getcwd)( CHARACTER(pathnm), INTEGER(status) TRAIL(pathnm)) { GENPTR_CHARACTER(pathnm) GENPTR_INTEGER(status) char *pthstr; /* C string holding directory name */ #if defined(VAX) #else char *ptest; #endif /* Check inherited global status on entry */ if ( *status != SAI__OK ) return; /* Get the current working directory and set status GOOD if the operation * is successful */ /* Use system specific call to get the current directory */ #if defined(VAX) /* Make temp space size of Fortran string + space for trailing null */ pthstr = cnf_creat(pathnm_length+1); /* Set status from getcwd result */ *status = getcwd( pthstr, pathnm_length+1 ) ? SAI__OK : SAI__ERROR; /* Export C string to Fortran */ cnf_exprt( pthstr, pathnm, pathnm_length ); /* Free temporary string */ if ( pthstr ) cnf_free( pthstr ); #else /* Get working directory */ ptest = getcwd( (char *)0, pathnm_length + 1 ); /* Will we have to truncate the text? */ if ( ! ptest ) { *status = SAI__ERROR; ems_rep_c( " ", "Out of memory getting current directory name", status ); } else { /* Export C string to Fortran */ cnf_exprt( ptest, pathnm, pathnm_length ); free( ptest ); } #endif /* Report errors */ if (*status != SAI__OK ) { ems_rep_c( " ", "Error finding current directory", status ); ems_rep_c( " ", "...from UTIL_GETCWD", status ); } }