/* ** ============================================================================ ** ** NCS_CONVERT.C ** ** NCS conversion of files (made from DEC NCS example) ** ** ============================================================================ */ #include #include #include #include #include #include #include #include #include #include #include #include #include #define stserr(sts) ((SS$_NORMAL&STS$M_SEVERITY)-((sts)&STS$M_SEVERITY)) #define SIZE 32767 int dclsymtbl; unsigned long int cfid; unsigned long int expected_status; unsigned long int rms_status; unsigned long int status; unsigned short int return_length; char infile[NAM$C_MAXRSS], outfile[NAM$C_MAXRSS], inprec[SIZE], outrec[SIZE], cfname[256], dclsym[256]; char clibuf[]="CONVERT -"; $DESCRIPTOR(clibuf_d,clibuf); $DESCRIPTOR(cfname_d,cfname); $DESCRIPTOR(dclsym_d,dclsym); $DESCRIPTOR(prompt_d,"NCS_CONVERT> "); $DESCRIPTOR(infile_p,"IN"); $DESCRIPTOR(outfile_p,"OUT"); $DESCRIPTOR(cfname_p,"CONVERSION"); $DESCRIPTOR(dclsym_p,"SYMBOL"); $DESCRIPTOR(dclstr_p,"STRING"); $DESCRIPTOR(infile_d,infile); $DESCRIPTOR(outfile_d,outfile); $DESCRIPTOR(inprec_d,inprec); $DESCRIPTOR(outrec_d,outrec); struct FAB inpfab,outfab; struct RAB inprab,outrab; struct NAM inpnam,outnam; void status_check(int); extern void *CF_CLD; extern unsigned long cli$dcl_parse(), cli$present(), cli$get_value(); main () { status=cli$dcl_parse(&clibuf_d,&CF_CLD,lib$get_input,lib$get_foreign,&prompt_d); status_check(status); status=cli$get_value(&infile_p,&infile_d,&infile_d.dsc$w_length); status=cli$get_value(&outfile_p,&outfile_d,&outfile_d.dsc$w_length); status=SS$_NORMAL; cfid=0; /* Initialize ID */ if (cli$present(&cfname_p)==CLI$_PRESENT) { status=cli$get_value(&cfname_p,&cfname_d,&cfname_d.dsc$w_length); if (cfname_d.dsc$w_length!=0) status=ncs$get_cf(&cfid,&cfname_d); } status_check(status); status=SS$_NORMAL; if (cli$present(&dclstr_p)==CLI$_PRESENT) { status=cli$get_value(&dclstr_p,&inprec_d,&inprec_d.dsc$w_length); status_check(status); if (cfid!=0) { status=ncs$convert(&cfid,&inprec_d,&outrec_d,&outrec_d.dsc$w_length); status_check(status); status=lib$put_output(&outrec_d); status_check(status); } status=ncs$end_cf(&cfid); status_check(status); sys$exit(SS$_NORMAL); } *dclsym='\0'; if (cli$present(&dclsym_p)==CLI$_PRESENT) { status=cli$get_value(&dclsym_p,&dclsym_d,&dclsym_d.dsc$w_length); status_check(status); status=lib$get_symbol(&dclsym_d,&inprec_d,&inprec_d.dsc$w_length,&dclsymtbl); status_check(status); if (cfid!=0) { status=ncs$convert(&cfid,&inprec_d,&outrec_d,&outrec_d.dsc$w_length); status_check(status); status=lib$set_symbol(&dclsym_d,&outrec_d,&dclsymtbl); status_check(status); } status=ncs$end_cf(&cfid); status_check(status); sys$exit(SS$_NORMAL); } outfab=inpfab=cc$rms_fab; outrab=inprab=cc$rms_rab; outnam=inpnam=cc$rms_nam; inpfab.fab$l_fna=infile; inpfab.fab$b_fns=NAM$C_MAXRSS; inpfab.fab$b_fac=FAB$M_GET; inpfab.fab$l_nam=&inpnam; inpnam.nam$l_rsa=inprec; inpnam.nam$b_rss=255; inprab.rab$l_fab=&inpfab; inprab.rab$b_rac=RAB$C_SEQ; inprab.rab$l_ubf=inprec; inprab.rab$w_usz=SIZE; rms_status=sys$open(&inpfab); status_check(rms_status); rms_status=sys$connect(&inprab); status_check(rms_status); outfab.fab$b_fac=FAB$M_PUT|FAB$M_TRN; outfab.fab$l_alq=inpfab.fab$l_alq; outfab.fab$b_bks=inpfab.fab$b_bks; outfab.fab$w_bls=inpfab.fab$w_bls; outfab.fab$w_deq=inpfab.fab$w_deq; outfab.fab$b_fsz=inpfab.fab$b_fsz; outfab.fab$l_mrn=inpfab.fab$l_mrn; outfab.fab$b_org=inpfab.fab$b_org; outfab.fab$b_rat=inpfab.fab$b_rat; outfab.fab$b_rfm=inpfab.fab$b_rfm; outfab.fab$l_fop=(inpfab.fab$l_fop&(FAB$M_CBT|FAB$M_CTG))|FAB$M_SQO|FAB$M_OFP|FAB$M_TEF; outfab.fab$l_fna=outfile; outfab.fab$b_fns=NAM$C_MAXRSS; outfab.fab$w_mrs=SIZE; outfab.fab$l_nam=&outnam; outnam.nam$l_rlf=&inpnam; outrab.rab$l_fab=&outfab; outrab.rab$b_rac=RAB$C_SEQ; outrab.rab$l_rbf=outrec; outrab.rab$w_usz=SIZE; rms_status=sys$create(&outfab); status_check(rms_status); rms_status=sys$connect(&outrab); status_check(rms_status); while(1) { outrec_d.dsc$w_length=SIZE; rms_status=sys$get(&inprab); if (rms_status==RMS$_EOF) break; else status_check(rms_status); outrab.rab$l_rbf=inprec; outrab.rab$w_rsz=inprab.rab$w_rsz; inprec_d.dsc$w_length=inprab.rab$w_rsz; if (cfid!=0) { status=ncs$convert(&cfid,&inprec_d,&outrec_d,&outrec_d.dsc$w_length); status_check(status); outrab.rab$l_rbf=outrec; outrab.rab$w_rsz=outrec_d.dsc$w_length; } rms_status=sys$put(&outrab); status_check(rms_status); } rms_status=sys$close(&inpfab); status_check(rms_status); rms_status=sys$close(&outfab); status_check(rms_status); status=ncs$end_cf(&cfid); status_check(status); sys$exit(SS$_NORMAL); } void status_check(status) {if (!stserr(status)) return; sys$exit(status);}