#include #include #include #include #include #include #include #include /* Define macros for use with either NAM or NAML. */ #ifdef NAML$C_MAXRSS /* NAML is available (ODS5 support...) */ # ifndef NAM_MAXRSS /* May have been defined before. */ # define NAM_MAXRSS NAML$C_MAXRSS # endif # define NAM_STRUCT NAML # define FAB_OR_NAM(fab, nam) nam # define FAB_OR_NAM_DNA naml$l_long_defname # define FAB_OR_NAM_DNS naml$l_long_defname_size # define FAB_OR_NAM_FNA naml$l_long_filename # define FAB_OR_NAM_FNS naml$l_long_filename_size # define CC_RMS_NAM cc$rms_naml # define FAB_NAM fab$l_naml # define NAME_DNA naml$l_long_defname # define NAME_DNS naml$l_long_defname_size # define NAME_FNA naml$l_long_filename # define NAME_FNS naml$l_long_filename_size # define NAM_DID naml$w_did # define NAM_DVI naml$t_dvi # define NAM_ESA naml$l_long_expand # define NAM_ESL naml$l_long_expand_size # define NAM_ESS naml$l_long_expand_alloc # define NAM_FID naml$w_fid # define NAM_FNB naml$l_fnb # define NAM_RSA naml$l_long_result # define NAM_RSL naml$l_long_result_size # define NAM_RSS naml$l_long_result_alloc # define NAM_NOP naml$b_nop # define NAM_M_SYNCHK NAML$M_SYNCHK # define NAM_B_DEV naml$l_long_dev_size # define NAM_L_DEV naml$l_long_dev # define NAM_B_DIR naml$l_long_dir_size # define NAM_L_DIR naml$l_long_dir # define NAM_B_NAME naml$l_long_name_size # define NAM_L_NAME naml$l_long_name # define NAM_B_TYPE naml$l_long_type_size # define NAM_L_TYPE naml$l_long_type # define NAM_B_VER naml$l_long_ver_size # define NAM_L_VER naml$l_long_ver #else /* !NAML$C_MAXRSS */ /* NAML is not available. Use NAM. */ # ifndef NAM_MAXRSS /* May have been defined before. */ # define NAM_MAXRSS NAM$C_MAXRSS # endif # define NAM_STRUCT NAM # define FAB_OR_NAM(fab, nam) fab # define FAB_OR_NAM_DNA fab$l_dna # define FAB_OR_NAM_DNS fab$b_dns # define FAB_OR_NAM_FNA fab$l_fna # define FAB_OR_NAM_FNS fab$b_fns # define CC_RMS_NAM cc$rms_nam # define FAB_NAM fab$l_nam # define NAME_DNA fab$l_dna # define NAME_DNS fab$b_dns # define NAME_FNA fab$l_fna # define NAME_FNS fab$b_fns # define NAM_DID nam$w_did # define NAM_DVI nam$t_dvi # define NAM_ESA nam$l_esa # define NAM_ESL nam$b_esl # define NAM_ESS nam$b_ess # define NAM_FID nam$w_fid # define NAM_FNB nam$l_fnb # define NAM_RSA nam$l_rsa # define NAM_RSL nam$b_rsl # define NAM_RSS nam$b_rss # define NAM_NOP nam$b_nop # define NAM_M_SYNCHK NAM$M_SYNCHK # define NAM_B_DEV nam$b_dev # define NAM_L_DEV nam$l_dev # define NAM_B_DIR nam$b_dir # define NAM_L_DIR nam$l_dir # define NAM_B_NAME nam$b_name # define NAM_L_NAME nam$l_name # define NAM_B_TYPE nam$b_type # define NAM_L_TYPE nam$l_type # define NAM_B_VER nam$b_ver # define NAM_L_VER nam$l_ver #endif /* ?NAML$C_MAXRSS */ static struct FAB fab; /* File Access Block. */ static struct NAM_STRUCT nam; /* Name block. */ static struct RAB rab; /* Record Access Block. */ /* Expanded and resultant name storage. */ static char exp_nam[NAM_MAXRSS]; static char res_nam[NAM_MAXRSS]; main( int argc, char **argv) { int sts; fab = cc$rms_fab; /* Initialize FAB. */ nam = CC_RMS_NAM; /* Initialize NAM[L]. */ fab.FAB_NAM = &nam; /* Point FAB to NAM[L]. */ printf( " (0) nam.naml$v_search_symlink = %d.\n", nam.naml$v_search_symlink); printf( " (0) nam.naml$v_open_special = %d.\n", nam.naml$v_open_special); printf( " (0) nam.naml$v_object_symlink = %d.\n", nam.naml$v_object_symlink); #ifdef NAML$C_MAXRSS fab.fab$l_dna = (char *) -1; /* Using NAML for default name. */ fab.fab$l_fna = (char *) -1; /* Using NAML for file name. */ #endif /* NAML$C_MAXRSS */ FAB_OR_NAM(fab, nam).FAB_OR_NAM_FNA = argv[ 1]; FAB_OR_NAM(fab, nam).FAB_OR_NAM_FNS = strlen( argv[ 1]); /* Expanded and resultant name storage. */ nam.NAM_ESA = exp_nam; nam.NAM_ESS = sizeof(exp_nam); nam.NAM_RSA = res_nam; nam.NAM_RSS = sizeof(res_nam); sts = sys$parse( &fab); if ((sts& STS$M_SUCCESS) == 0) { printf( " sys$parse() = %%x%08x .\n", sts); printf( " %s\n", strerror( EVMSERR)); return sts; } sts = sys$search( &fab); if ((sts& STS$M_SUCCESS) == 0) { printf( " sys$search() = %%x%08x .\n", sts); printf( " %s\n", strerror( EVMSERR)); return sts; } printf( " e: >%.*s<.\n", nam.NAM_ESL, exp_nam); printf( " r: >%.*s<.\n", nam.NAM_RSL, res_nam); printf( " (1) nam.naml$v_search_symlink = %d.\n", nam.naml$v_search_symlink); printf( " (1) nam.naml$v_open_special = %d.\n", nam.naml$v_open_special); printf( " (1) nam.naml$v_object_symlink = %d.\n", nam.naml$v_object_symlink); printf( " (1) nam.naml$l_output_flags = %%x%08x .\n", nam.naml$l_output_flags); printf( " (1) fab.fab$b_org = %%x%02x .\n", fab.fab$b_org); printf( " (1) fab.fab$b_rfm = %%x%02x .\n", fab.fab$b_rfm); printf( " (1) fab.fab$b_rat = %%x%02x .\n", fab.fab$b_rat); printf( " (1) did: %05d:%05d:%05d fid: %05d:%05d:%05d\n", nam.NAM_DID[0], nam.NAM_DID[1], nam.NAM_DID[2], nam.NAM_FID[0], nam.NAM_FID[1], nam.NAM_FID[2]); fab = cc$rms_fab; /* Initialize FAB. */ nam = CC_RMS_NAM; /* Initialize NAM[L]. */ fab.FAB_NAM = &nam; /* Point FAB to NAM[L]. */ #ifdef NAML$C_MAXRSS fab.fab$l_dna = (char *) -1; /* Using NAML for default name. */ fab.fab$l_fna = (char *) -1; /* Using NAML for file name. */ #endif /* NAML$C_MAXRSS */ FAB_OR_NAM(fab, nam).FAB_OR_NAM_FNA = argv[ 1]; FAB_OR_NAM(fab, nam).FAB_OR_NAM_FNS = strlen( argv[ 1]); /* Expanded and resultant name storage. */ nam.NAM_ESA = exp_nam; nam.NAM_ESS = sizeof(exp_nam); nam.NAM_RSA = res_nam; nam.NAM_RSS = sizeof(res_nam); sts = sys$parse( &fab); if ((sts& STS$M_SUCCESS) == 0) { printf( " sys$parse() = %%x%08x .\n", sts); printf( " %s\n", strerror( EVMSERR)); return sts; } #if 0 /* No effect on DID+FID from $SEARCH. */ nam.naml$v_search_symlink = 1; /* Don't follow a symlink. */ #endif /* 0 */ /* Gets DID+FID of the link (not the target) from $SEARCH. */ nam.naml$v_open_special = 1; /* $OPEN a special file itself. */ sts = sys$search( &fab); if ((sts& STS$M_SUCCESS) == 0) { printf( " sys$search() = %%x%08x .\n", sts); printf( " %s\n", strerror( EVMSERR)); return sts; } printf( " e: >%.*s<.\n", nam.NAM_ESL, exp_nam); printf( " r: >%.*s<.\n", nam.NAM_RSL, res_nam); printf( " (2) nam.naml$v_search_symlink = %d.\n", nam.naml$v_search_symlink); printf( " (2) nam.naml$v_open_special = %d.\n", nam.naml$v_open_special); printf( " (2) nam.naml$v_object_symlink = %d.\n", nam.naml$v_object_symlink); printf( " (2) nam.naml$l_output_flags = %%x%08x .\n", nam.naml$l_output_flags); printf( " (2) fab.fab$b_org = %%x%02x .\n", fab.fab$b_org); printf( " (2) fab.fab$b_rfm = %%x%02x .\n", fab.fab$b_rfm); printf( " (2) fab.fab$b_rat = %%x%02x .\n", fab.fab$b_rat); printf( " (2) did: %05d:%05d:%05d fid: %05d:%05d:%05d\n", nam.NAM_DID[0], nam.NAM_DID[1], nam.NAM_DID[2], nam.NAM_FID[0], nam.NAM_FID[1], nam.NAM_FID[2]); }