Open64 (mfef90, whirl2f, and IR tools)
TAG: version-openad; SVN changeset: 916
|
00001 /* 00002 00003 Copyright (C) 2000, 2001 Silicon Graphics, Inc. All Rights Reserved. 00004 00005 This program is free software; you can redistribute it and/or modify it 00006 under the terms of version 2 of the GNU General Public License as 00007 published by the Free Software Foundation. 00008 00009 This program is distributed in the hope that it would be useful, but 00010 WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00012 00013 Further, this software is distributed without any warranty that it is 00014 free of the rightful claim of any third person regarding infringement 00015 or the like. Any license provided herein, whether implied or 00016 otherwise, applies only to this software file. Patent licenses, if 00017 any, provided herein do not apply to combinations of this program with 00018 other software, or any other product whatsoever. 00019 00020 You should have received a copy of the GNU General Public License along 00021 with this program; if not, write the Free Software Foundation, Inc., 59 00022 Temple Place - Suite 330, Boston MA 02111-1307, USA. 00023 00024 Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pky, 00025 Mountain View, CA 94043, or: 00026 00027 http://www.sgi.com 00028 00029 For further information regarding this notice, see: 00030 00031 http://oss.sgi.com/projects/GenInfo/NoticeExplan 00032 00033 */ 00034 00035 /* USMID @(#) clibinc/cray/assign.h 92.2 12/18/98 09:49:04 */ 00036 00037 #ifndef _CRAY_ASSIGN_H 00038 #define _CRAY_ASSIGN_H 00039 00040 00041 #ifndef _LIB_INTERNAL 00042 #define _LIB_INTERNAL 1 /* expose internal FFIO definitions */ 00043 #endif 00044 #include <ffio.h> 00045 #include <liberrno.h> 00046 #include <stddef.h> 00047 #include <stdio.h> 00048 #include <cray/fortio.h> 00049 #include <cray/mtlock.h> 00050 #include <sys/param.h> 00051 00052 00053 /************************************************************************ 00054 * * 00055 * CONSTANTS * 00056 * * 00057 ************************************************************************/ 00058 00059 00060 /* 00061 * Assign option values. 00062 */ 00063 00064 #define AS_SKIPBAD 1 /* -d skipbad */ 00065 #define AS_ACPTBAD 2 /* -d acptbad */ 00066 00067 #define AS_FORTRAN77 1 /* -f 77 */ 00068 #define AS_FORTRAN90 2 /* -f 90 */ 00069 #define AS_IRIX_F77 3 /* -f irixf77 */ 00070 #define AS_IRIX_F90 4 /* -f irixf90 */ 00071 00072 #define AS_THREAD 1 /* -P thread */ 00073 #define AS_PROCESS 2 /* -P process */ 00074 #define AS_TEAM 3 /* -P team */ 00075 #define AS_PRIVATE 4 /* -P private */ 00076 #define AS_GLOBAL 5 /* -P global */ 00077 00078 /* 00079 * Other constants. 00080 */ 00081 00082 #define BYFILE 'f' 00083 #define BYGLOBAL 'g' 00084 #define BYPATTERN 'p' 00085 #define BYUNIT 'u' 00086 00087 #define MAX_FDC_SPEC 128 /* max words in an FDC specification */ 00088 00089 #define MAX_ASSIGN_LINE 5000 /* maximum number of characters in an */ 00090 /* assign record. This number must */ 00091 /* be comfortably greater than */ 00092 /* (PATH_MAX * 4 + MAX_FDC_SPEC) */ 00093 /* as long as the hybrid assign env */ 00094 /* file format is supported (through */ 00095 /* UNICOS 7.0?). After that time, */ 00096 /* this constant may be reduced to */ 00097 /* (PATH_MAX * 2 + MAX_FDC_SPEC + pad)*/ 00098 00099 #define DECIMAL 10 /* for strtol */ 00100 00101 #define AE_LIB 1 /* call from assign lib routines */ 00102 #define AE_ASSIGN 2 /* call from assign command */ 00103 #define AE_ASGCMD 3 /* call from asgcmd command */ 00104 00105 /* 00106 * Strings and characters 00107 */ 00108 00109 #define ASSIGN_ENV_VAR "FILENV" /* pointer to assign environment */ 00110 #define ASSIGN_OPT_VAR "_LIBASSIGNENV_"/* default asn environment repository */ 00111 #define ASGCMD_ENV_VAR "_ASG_ATTR" /* location of asgcmd attributes */ 00112 #define PROCENVFLAG '$' /* indicate an environment var name */ 00113 #define DELIMSTR " # # " /* delimiter in environment strings */ 00114 00115 /* 00116 * Mask bits which identify searches for g:all/sf/su/df/du/aq/ff/mpi 00117 * assign objects. 00118 */ 00119 00120 #define ASN_G_ALL 0001 00121 #define ASN_G_SF 0002 00122 #define ASN_G_SU 0004 00123 #define ASN_G_DF 0010 00124 #define ASN_G_DU 0020 00125 #define ASN_G_AQ 0040 00126 #define ASN_G_FF 0400 00127 #define ASN_G_MPI 01000 00128 00129 /************************************************************************ 00130 * * 00131 * MACROS used by internal assign parsing * 00132 * * 00133 ************************************************************************/ 00134 00135 #define RETERR(_EH,_NUM) { \ 00136 _lerror(_EH,_NUM); \ 00137 errno = _NUM; \ 00138 return(-1); \ 00139 } 00140 #define RETERR1(_EH,_NUM,_D1) { \ 00141 _lerror(_EH,_NUM,_D1); \ 00142 errno = _NUM; \ 00143 return(-1); \ 00144 } 00145 #define RETERR2(_EH,_NUM,_D1,_D2) { \ 00146 _lerror(_EH,_NUM,_D1,_D2); \ 00147 errno = _NUM; \ 00148 return(-1); \ 00149 } 00150 #define ERRET(ee) { errno = ee; return(-1); } 00151 00152 /* 00153 * ASSIGN_LOCK protects multitasked programs when executing in sensitive 00154 * areas in assign library routines. ASSIGN_LOCK must be 00155 * called whenever: 00156 * 00157 * (1) - the assign environment file is open. File updates 00158 * across unrelated processes are forced as 00159 * single-threaded by file locking. For tasks in 00160 * a multitasked group or multiple tasks/PEs on an MPP, 00161 * file locking will not cause one task to wait for a 00162 * lock held by another task. So a multitasking lock 00163 * is needed too. 00164 * 00165 * (non-MPP) (2) - the local assign environment is being accessed. 00166 * The local assign environment is global to all tasks 00167 * and must be accessed by a single task at a time. 00168 * The local assign environment is enabled when ASNCTL 00169 * is called with the 'LOCAL' or 'NEWLOCAL' options. 00170 * 00171 * (non-MPP) (3) - fopen() or fclose() are called for the assign 00172 * environment file. This ensures that updates to 00173 * the __iob table are single threaded. Note that 00174 * (1) implies (3). 00175 * 00176 * ASSIGN_UNLOCK Unlocks the assign library lock. 00177 */ 00178 00179 #ifndef _CRAYMPP 00180 00181 #define ASSIGN_LOCK() MEM_LOCK(&_Ae_assign_lock) 00182 #define ASSIGN_UNLOCK() MEM_UNLOCK(&_Ae_assign_lock) 00183 00184 #else /* _CRAYMPP */ 00185 00186 #define ASSIGN_LOCK() { if (_num_pes() > 1) \ 00187 MPP_LOCK(&_Ae_assign_lock); } 00188 #define ASSIGN_UNLOCK() { if (_num_pes() > 1) \ 00189 MPP_UNLOCK(&_Ae_assign_lock); } 00190 00191 #endif /* _CRAYMPP */ 00192 00193 /* 00194 * _AE_SKIPWHITE - skips spaces and tabs. 00195 */ 00196 #define _AE_SKIPWHITE(pp) { \ 00197 register char cc; \ 00198 cc = *pp; \ 00199 while (isspace(cc) && cc != '\0') \ 00200 cc = *++pp; \ 00201 } 00202 00203 00204 /* 00205 * _AE_NULLINFO - sets an assign_info structure to contain no attributes. 00206 */ 00207 #define _AE_NULLINFO(P) ((void)memset((char*)P,0,sizeof(assign_info))) 00208 00209 /* 00210 * Assign debugging macros. Define DEBUG_ASSIGN to activate these macros. 00211 */ 00212 #ifdef DEBUG_ASSIGN 00213 #define ASN_DEBUG( ARGLIST ) printf ARGLIST 00214 #else 00215 #define ASN_DEBUG( ARGLIST ) 00216 #endif 00217 00218 /* 00219 * AFLAGSIZE number of words in the flags part of the assign_info 00220 * structure. Includes flagpad to allow compatibility 00221 * of mismatched libu and libf (in some cases). 00222 */ 00223 #define AFLAGSIZE ((offsetof(assign_info, flagpad) + \ 00224 sizeof(((assign_info*) 0)->flagpad)) ) 00225 00226 /* 00227 * _ae_opt_control - returns 1 if a letter is a control option 00228 * 00229 * _ae_opt_noptval - returns 1 if a letter is an option which does 00230 * not take an option value 00231 * 00232 * _ae_opt_optval - returns 1 if a letter is an option which takes 00233 * an option value which is not an integer or 00234 * merely "off"/"on". 00235 */ 00236 #define _ae_opt_control(ch) \ 00237 ((ch)>='A' && (ch)<='z' && _Ae_letters[(ch)-'A'] == 'c') 00238 00239 #define _ae_opt_nooptval(ch) \ 00240 ((ch)>='A' && (ch)<='z' && _Ae_letters[(ch)-'A'] == 'n') 00241 00242 #define _ae_opt_optval(ch) \ 00243 ((ch)>='A' && (ch)<='z' && _Ae_letters[(ch)-'A'] == 'v') 00244 00245 00246 /************************************************************************ 00247 * * 00248 * STRUCTURE DEFINITIONS * 00249 * * 00250 ************************************************************************/ 00251 00252 typedef struct { 00253 char type; /* BYUNIT - unit */ 00254 /* BYFILE - file name */ 00255 /* BYGLOBAL - g:XXX */ 00256 /* BYPATTERN - file name pattern */ 00257 union { 00258 long unit; /* for assign by unit */ 00259 char *str; /* for other types of assign objects */ 00260 } u; 00261 } assign_obj_id; 00262 00263 /* 00264 * assign_info - this structure is used for returning assign 00265 * environment information (attributes) for a particular 00266 * assign object to the user. 00267 * 00268 * The *_flg fields have the fillowing flags which 00269 * might be set: 00270 * 00271 * ATTR_SET - attribute is specified 00272 * ATTR_USED - attribute has been used 00273 * 00274 * The ATTR_SET bit is set during assign parsing. The 00275 * ATTR_USED bit is for the convenience of library 00276 * open processing. 00277 */ 00278 enum asn_flags { 00279 ATTR_SET = 1, 00280 ATTR_USED = 2 00281 }; 00282 00283 typedef unsigned char aflg_t; 00284 00285 typedef struct assign_info_s { 00286 00287 aflg_t a_actfil_flg; 00288 aflg_t a_sdsfil_flg; 00289 aflg_t b_bufsiz_flg; 00290 aflg_t B_direct_flg; 00291 aflg_t c_contig_flg; 00292 aflg_t C_chrcnv_flg; 00293 aflg_t d_datrcv_flg; 00294 aflg_t D_fildes_flg; 00295 aflg_t f_fortst_flg; 00296 aflg_t F_filter_flg; 00297 aflg_t l_buflev_flg; 00298 aflg_t L_ldraw_flg; 00299 aflg_t m_multup_flg; 00300 aflg_t n_preall_flg; 00301 aflg_t n_stride_flg; 00302 aflg_t N_datcnv_flg; 00303 aflg_t o_UNUSED_flg; 00304 aflg_t P_ioscop_flg; 00305 aflg_t q_ocblks_flg; 00306 aflg_t pr_partit_flg; 00307 aflg_t r_raw_flg; 00308 aflg_t s_fstrct_flg; 00309 aflg_t S_comsep_flg; 00310 aflg_t t_tmpfil_flg; 00311 aflg_t T_utrunc_flg; 00312 aflg_t u_bufcnt_flg; 00313 aflg_t U_unicoslist_flg; 00314 aflg_t w_welfrm_flg; 00315 aflg_t W_compwidth_flg; 00316 aflg_t x_parallel_flg; 00317 aflg_t y_reptcnt_flg; 00318 aflg_t Y_nl_skip_flg; 00319 aflg_t Z_neg_zero_flg; 00320 00321 aflg_t flagpad[9]; /* marker & pad for end of flags */ 00322 00323 char a_actfil[PATH_MAX]; /* -a option. */ 00324 /* Actual file opened when this */ 00325 /* file or unit appears in an OPEN. */ 00326 /* -a SDS option. */ 00327 /* Indicates SDS file. */ 00328 00329 int b_bufsiz; /* -b option. */ 00330 /* Requested size of library buffer */ 00331 /* in 512-word blocks. */ 00332 00333 int B_direct; /* -B option */ 00334 /* When == 1, set O_DIRECT on */ 00335 /* open(2) system call. */ 00336 00337 int c_contig; /* -c option. (this field not used) */ 00338 00339 int C_chrcnv; /* -C options. */ 00340 /* Character conversion code. */ 00341 00342 int d_datrcv; /* -d option. */ 00343 /* AR_SKIPBAD or AR_ACPTBAD */ 00344 /* Bad data recovery options. */ 00345 00346 int D_fildes; /* -D option */ 00347 /* Connect to file descriptor */ 00348 00349 int f_fortst; /* Fortran 77 or 90 conformancy */ 00350 00351 union spec_u /* -F option */ 00352 F_filter[MAX_FDC_SPEC]; /* Binary filter specification. */ 00353 int F_filter_len; /* Size of the filter spec (in words) */ 00354 00355 int l_buflev; /* -l option. */ 00356 /* System buffering indicator. */ 00357 /* 1 indicates to open file to use */ 00358 /* the system I/O buffers. 0 means */ 00359 /* open the file in RAW mode. */ 00360 00361 int L_ldraw; /* -L option. */ 00362 /* When == 1, set O_LDRAW on */ 00363 /* open(2) system call. */ 00364 00365 int m_multup; /* -m option. */ 00366 /* When == 1, a direct access file */ 00367 /* may suppress a truncation at */ 00368 /* logical size at close time. */ 00369 00370 int n_preall; /* -n option. */ 00371 /* Pre-allocation size in 512-word */ 00372 /* blocks. */ 00373 00374 int n_stride; /* -n option. */ 00375 /* Pre-allocation stride accross */ 00376 /* stripe partitions. Only available */ 00377 /* on the YMP. */ 00378 00379 int N_datcnv; /* -N options. */ 00380 /* Numeric conversion code. */ 00381 00382 int o_UNUSED; /* no longer used */ 00383 00384 long pr_partit; /* -p option. */ 00385 /* Bit mask indicating which */ 00386 /* partitions of the file system to */ 00387 /* which the system should attempt */ 00388 /* to allocate the file. */ 00389 00390 int P_ioscop; /* -P option. */ 00391 /* When == 'p' Fortran units are */ 00392 /* private to a task. When == 'g' */ 00393 /* Fortran units are global. */ 00394 00395 int q_ocblks; /* -q option. */ 00396 /* cblks value for open(2) sys call */ 00397 00398 int r_raw; /* -r option. */ 00399 /* When == 1, set O_RAW on */ 00400 /* open(2) system call. */ 00401 00402 int s_fstrct; /* -s option. */ 00403 /* File structure code. */ 00404 00405 int S_comsep; /* -S option. */ 00406 /* Use comma as the list-directed */ 00407 /* output separator. Default on */ 00408 /* UNICOS. */ 00409 00410 int t_tmpfil; /* -t option. (this field not used) */ 00411 00412 int T_utrunc; /* -T option. */ 00413 /* When == 1, a sequential Fortran */ 00414 /* file is truncated after writes. */ 00415 00416 int u_bufcnt; /* -u option. */ 00417 /* Requested number of library */ 00418 /* buffers to use for a direct-access */ 00419 /* file. */ 00420 00421 int U_unicoslist; /* -U option. */ 00422 /* Produce UNICOS form of */ 00423 /* list-directed output on irix. */ 00424 /* Default on UNICOS. */ 00425 /* This includes -S, -W, and -y. */ 00426 00427 int w_welfrm; /* -w option. */ 00428 /* When == 1, set O_WELLFORMED on */ 00429 /* open(2) system call. */ 00430 00431 int W_compwidth; /* -W option. */ 00432 /* Produce compressed width output */ 00433 /* for list-directed output on irix. */ 00434 /* Default on UNICOS. */ 00435 00436 int x_parallel; /* -x option. */ 00437 /* When == 1, set O_PARALLEL on */ 00438 /* open(2) system call. */ 00439 00440 int y_reptcnt; /* -y option. */ 00441 /* Produce repeat counts for */ 00442 /* list-directed output on irix. */ 00443 /* Default on UNICOS. */ 00444 int Y_nl_skip; /* -Y option. */ 00445 /* Skip unmatched namelist */ 00446 /* group name on input */ 00447 /* Default is off. */ 00448 int Z_neg_zero; /* -Z option. */ 00449 /* When on, print -0.0 if neg zero */ 00450 /* When off, print 0.0 if neg zero */ 00451 00452 int pad[10]; /* Pad space for future expansion */ 00453 00454 } assign_info; 00455 00456 typedef struct { 00457 unsigned I: 1; /* -I option */ 00458 unsigned O: 1; /* -O option */ 00459 unsigned R: 1; /* -R option */ 00460 unsigned V: 1; /* -V option */ 00461 unsigned v: 1; /* -v option (command only) */ 00462 unsigned z: 1; /* -z option (command only) */ 00463 int attrs; 00464 } assign_cntl; 00465 00466 typedef struct { 00467 char attrid; /* letter identifying the attribute */ 00468 char *str; /* attribute value (text string) */ 00469 char *p; /* parsed data (optional) */ 00470 } attribute; 00471 00472 /* 00473 * assign_record - this union is used to store assign records internally. 00474 */ 00475 typedef struct { 00476 assign_obj_id id; /* assign object identifier */ 00477 char *attr; /* pointer to list of attributes */ 00478 } assign_record; 00479 00480 /* 00481 * assign_environment - a set of 0 or more assign_records. 00482 */ 00483 typedef struct { 00484 int rec_cnt; /* Number of assign records in the */ 00485 /* assign environment. */ 00486 int rec_lim; /* Space allocated for assign */ 00487 /* records. */ 00488 assign_record *ar; /* Pointer to list of assign_records */ 00489 } assign_environment; 00490 00491 /* 00492 * aenv_stack - a stack of 0 or more assign_environments. 00493 */ 00494 typedef struct { 00495 assign_environment *env; /* contiguous list of env's */ 00496 long size; /* number of env's in stack */ 00497 } aenv_stack; 00498 00499 00500 typedef struct { 00501 int iotype; /* AE_FORTIO, AE_FFIO */ 00502 union { 00503 struct { 00504 char access; /* 's' or 'd' */ 00505 char form; /* 'f' or 'u' */ 00506 } fortio; 00507 /* other types can be added here */ 00508 } u; 00509 } aio_desc; 00510 00511 /* 00512 * tok_list - identifies a list of valid option values and the 00513 * corresponding internal code value which corresponds 00514 * to it. 00515 */ 00516 typedef struct tok_list_s { 00517 char *str; 00518 int code; 00519 } tok_list; 00520 00521 /* 00522 * opt_table - identifies the location in the assign info 00523 * structure where data is stored for an assign option. 00524 * It also points to the tok_list for this option. 00525 */ 00526 typedef struct opt_table_s { 00527 int flg_off; 00528 int val_off; 00529 tok_list *tl; 00530 } opt_table; 00531 00532 00533 /* 00534 * parse_info - contains information for parsing all supported assign 00535 * attribute options. 00536 */ 00537 typedef struct parse_info_s { 00538 char *optname; /* option name ("-b", "-T") */ 00539 int flg_off; /* location of opt flag bit */ 00540 int val_off; /* location of opt value field */ 00541 int (* pfunc)(); /* option value parsing function */ 00542 tok_list *tl; /* list of valid tokens if applicable */ 00543 unsigned sup: 1; /* 1 if supported on this system */ 00544 char *desc; /* displayed usage string */ 00545 } parse_info; 00546 00547 00548 /************************************************************************ 00549 * * 00550 * EXTERNS AND PROTOTYPES * 00551 * * 00552 ************************************************************************/ 00553 00554 00555 extern aenv_stack _Ae_env_stack; 00556 extern int _Ae_asgcmd; 00557 extern int _Ae_assign_cmd; 00558 #ifndef _CRAYMPP 00559 EXTERN_LOCK(_Ae_assign_lock) 00560 #else 00561 EXTERN_MPP_LOCK(_Ae_assign_lock) 00562 #endif 00563 extern char _Ae_letters[]; 00564 extern parse_info _Ae_option_parse_info[]; 00565 00566 extern char *_ae_build_envstring(assign_environment *aep); 00567 00568 extern void _ae_dealloc_env(assign_environment *aep); 00569 00570 extern void _ae_dealloc_recflds(assign_record *arp); 00571 00572 extern int _ae_externalize(int fromwhere, FILE *gfile, 00573 assign_environment *ap); 00574 00575 extern int _ae_externalize_file(FILE *gfile, assign_environment *ap); 00576 00577 extern int _ae_externalize_env(int fromwhere, assign_environment *ap); 00578 00579 extern int _ae_glob_code(char *str); 00580 00581 extern char *_ae_glob_str(int ga); 00582 00583 extern int _ae_insert(assign_obj_id *aoidp, char *attr, int attrlen, 00584 assign_environment *aep); 00585 00586 extern int _ae_internalize(FILE *gfile, assign_environment *aep); 00587 00588 extern int _ae_internalize_file(FILE *gfile, assign_environment *aep); 00589 00590 extern int _ae_internalize_env(assign_environment *aep, int ifasgcmd); 00591 00592 extern int _ae_match_pattern(const char *fname, assign_record **arpp, 00593 assign_environment *aep); 00594 00595 extern int _ae_select(assign_obj_id *aoidp, assign_record **arpp, 00596 assign_environment *aep); 00597 00598 extern void _ae_setupenv(assign_environment *aep); 00599 00600 extern char *_ae_glob_name(int ga); 00601 00602 extern int _asndir_split(char *buf, char **options, char **object, 00603 int ifasgcmd); 00604 00605 extern int _assign(char *opt_string, assign_obj_id *aop, int errmode); 00606 00607 extern int _assign_asgcmd_info(const char *fname, unum_t unum, int gamask, 00608 assign_info *aip, char **atstr, int catcherr); 00609 00610 extern FILE *_gae_open(char acc_mode, char res_mode, int *status); 00611 00612 extern void _gae_close(FILE *f); 00613 00614 extern int _get_a_options(int ifasgcmd, const char *fname, unum_t unum, 00615 int gamask, assign_info *aip, char **atstr, 00616 int errmode); 00617 00618 extern char *_lae_get_assign_file_name(int *estat); 00619 00620 extern char *_lae_get_assign_var_name(void); 00621 00622 extern int _lae_get_object(char *objtext, assign_obj_id *aoidp); 00623 00624 extern int _patmatch(const char *str, const char *pat); 00625 00626 extern void _unique_close(FILE *f); 00627 00628 extern FILE *_unique_open(char *fname, char mode, int *ostat); 00629 00630 extern int _lae_do_assign(int fromwhere, int assign_mode, char open_mode, 00631 char res_mode, assign_obj_id *aoidp, 00632 char *attr_string, int optcheck, int errmode); 00633 00634 extern int _lae_assign_mode(int fromwhere, assign_cntl *cnp, int numobj, 00635 int *amode, char *omode, char *rmode); 00636 00637 extern int _attrs_used(assign_info *aip, char **attrstr); 00638 00639 extern void _attr_clear_used(assign_info *aip); 00640 00641 extern int _ae_eclipse(char *attr1, int len1, char *attr2, int len2, 00642 char **newarp); 00643 00644 extern int _ae_parse(assign_obj_id *aiodp, char *attr, int attrlen, 00645 assign_info *aip, int warnmode, int errmode); 00646 00647 extern int _lae_process_opts(char *opt_string, char **attr_string, 00648 assign_cntl *cntlp); 00649 00650 extern int _ae_delete(assign_record *arp, assign_environment *aep); 00651 00652 extern void _lae_print_record(assign_record *arp); 00653 00654 extern int _ae_next(assign_record *prev, assign_record **next, 00655 assign_environment *aep); 00656 00657 extern int _ae_check_attr(assign_info *ai, int warnmode, int errmode); 00658 00659 extern void _ae_setoflags(assign_info *aip, int *flagmask); 00660 00661 #endif /* !_CRAY_ASSIGN_H */