📄 sds_fort.c
字号:
int length,leno;#else/*************** SUN-XTENDED_FORT ******************************************/int#if defined(F77)sdthrd_(sds,obj_ptr,name,n1,n2,n3,elemcod,obj_index,length,leno)#elsesds_threed_fdeclare_(sds,obj_ptr,name,n1,n2,n3,elemcod,obj_index,length,leno)#endifint *sds,*elemcod,*n1,*n2,*n3,length,leno,*obj_index;char *obj_ptr,*name;{#endif char *pass_ptr = obj_ptr; long ec = *elemcod; if (ec == SDS_FSTRING) {#ifdef vms struct vms_fstring *obj = (struct vms_fstring*)pass_ptr; leno = (int)obj->len; pass_ptr = obj->string;#endif getc_from_f(&cstring[0],name,&length); } else getc_from_f(&cstring[0],name,&leno); *obj_index = sds_threed_declare(*sds,pass_ptr,cstring,*n3,*n2,*n1,ec); if (*obj_index == 0) return(-2*(sds_error)); else return(1);}/*********************************************************************//* SDS_FDUPLICATE * Duplicate an existing SDS * * ISTATUS = SDS_FDUPLICATE(sds,"myfile",NEW_SDS) * * The new sds index is returned in NEW_SDS * * *********************************************************************//**************** VMS_FORTRAN ****************************************/#ifdef vmsintsds_fduplicate(sds,filename,new_sds)int *sds,*new_sds;char *filename;{ int length;#else/*************** SUN-XTENDED_FORT ******************************************/int#if defined(F77)sddup_(sds,filename,new_sds,length)#elsesds_fduplicate_(sds,filename,new_sds,length)#endifint *sds,length,*new_sds;char *filename;{#endif getc_from_f(cstring,filename,&length); *new_sds = sds_dup(*sds,cstring); if (*new_sds == 0) return(-2*(sds_error)); else return(1);}/*********************************************************************//* SDS_FMAKE* Assemble an SDS** ISTATUS = SDS_FMAKE(sds,"myfile",TYPE_PARAMETER,NEW_SDS)** NEW_SDS may be different from SDS if a new sds is made (eg when* assembled to shared memory)** where TYPE_PARAMETER is one of* SDS_NEW_FILE* SDS_APP_FILE* SDS_PROC_MEM* SDS_SHARED_MEM* SDS_SYBASE***********************************************************************//**************** VMS_FORTRAN ****************************************/#ifdef vmsintsds_fmake(sds,filename,type,new_sds)int *sds,*type,*new_sds;char *filename;{ int length;#else/*************** SUN-XTENDED_FORT ******************************************/int#if defined(F77)sdmake_(sds,filename,type,new_sds,length)#elsesds_fmake_(sds,filename,type,new_sds,length)#endifint *sds,length,*type,*new_sds;char *filename;{#endif getc_from_f(cstring,filename,&length); *new_sds = sds_ass((int)*sds,cstring,*type); if (*new_sds == 0) return(-2*(sds_error)); else return(1);}/*********************************************************************//* SDNORD * Named object read. * Reads a named sds object into a piece of Fortran memory * Bound checking is not done: caveat programmer! * Better still, don't use Fortram *//**************** VMS_FORTRAN ****************************************/#ifdef vmsintsds_snord(sds,obj_ptr,object,fd)int *sds,*fd;char *obj_ptr,*object;{ int oblen;#else/*************** SUN-XTENDED_FORT ******************************************/int#if defined(F77)sdnord_(sds,obj_ptr,object,oblen,fd)#elsesds_sdnord_(sds,obj_ptr,object,oblen,fd)#endifint *sds,oblen,*fd;char *obj_ptr,*object;{#endif char obname[128]; int max, obindex, number; struct direc *dptr = sds_direc_ptr(*sds); getc_from_f(obname,object,&oblen); obindex = sds_name2ind(*sds, obname); max = sds_array_size(*sds, obindex); number = sds_read_object(*sds,obindex,obj_ptr,0,max,fd); if (number == 0) return(-2*sds_error); else { dptr[obindex].offst = (long)obj_ptr; return(1); }}/*********************************************************************//* SDS_FREADS * * Loads a data object into previously defined character string * spcae. This is only necessary for Vax fortran character * data: it is here for Sun as well for source code * compatablity. I'll try to find a better way.... * *//*********************************************************************//**************** VMS_FORTRAN ****************************************/#ifdef vmsintsds_freads(sds,object,obj_ptr,start,max,number)#else/*************** SUN-XTENDED_FORT ******************************************/int#if defined(F77)sdsrd_(sds,object,obj_ptr,start,max,number)#elsesds_freads_(sds,object,obj_ptr,start,max,number)#endif#endifint *sds,*object,*max,*number,*start;char *obj_ptr;{ char *pass_ptr = obj_ptr; long cstart = *start - 1; struct direc *dptr = sds_direc_ptr(*sds);#ifdef vms struct vms_fstring *obj = (struct vms_fstring*)obj_ptr; pass_ptr = obj->string;#endif *number = sds_read_object(*sds,*object,pass_ptr,cstart,*max); if (*number == 0) return(-2*sds_error); else { dptr[*object].offst = (long)pass_ptr; return(1); }}/*********************************************************************//* SDS_FREAD0 * * Loads a data object into previously defined space *//*********************************************************************//**************** VMS_FORTRAN ****************************************/#ifdef vmsintsds_freado(sds,object,obj_ptr,start,max,number)#else/*************** SUN-XTENDED_FORT ******************************************/int#if defined(F77)sdread_(sds,object,obj_ptr,start,max,number)#elsesds_freado_(sds,object,obj_ptr,start,max,number)#endif#endifint *sds,*object,*max,*number,*start;char *obj_ptr;{ char *pass_ptr = obj_ptr; long cstart = *start - 1; struct direc *dptr = sds_direc_ptr(*sds); *number = sds_read_object(*sds,*object,pass_ptr,cstart,*max); if (*number == 0) return(-2*(sds_error)); else { dptr[*object].offst = (long)obj_ptr; return(1); }}/*********************************************************************//* SDS_FLOAD * * Loads an existing SDS to process memory * * ISTATUS = SDS_FLOAD("myfile_name",SOURCE_TYPE,ACCESS_MODE,sds) * * Where SOURCE_TYPE is one of * SDS_FILE * SDS_DIREC_ONLY * SDS_SHARED_MEM * And ACCESS_MODE is one of * SDS_READ * SDS_WRITE * * The resulting SDS index is return in sds * * *********************************************************************/#ifdef vms/**************** VMS_FORTRAN ****************************************/intsds_fload(name,type,mode,sds)char *name;int *type,*mode,*sds;{ int length;#else/*************** SUN-XTENDED_FORT ******************************************/int#if defined(F77)sdload_(name,type,mode,sds,length)#elsesds_fload_(name,type,mode,sds,length)#endifchar *name;int length,*type,*mode,*sds;{#endif getc_from_f(cstring,name,&length); *sds = sds_access(cstring,*type,*mode); if (*sds == 0) return(-2*(sds_error)); else return(1);}/*********************************************************************//* SDS_STREAM_CLOSE * close an input stream (use after SDS_FLOAD with * DIRECTORY_ONLY switch on *********************************************************************/#ifdef vms/**************** VMS_FORTRAN ****************************************/intsds_stream_close(sds)#else/*************** SUN-XTENDED_FORT ******************************************/int#if defined(F77)sdsclo_(sds)#elsesds_stream_close_(sds)#endif#endifsds_handle *sds;{ int fd = sds_stream(*sds); *sds = sds_ass(*sds,sds_obind2name(*sds,0),SDS_PROC_MEM); close(fd); return(1);}/*********************************************************************//* SDS_FWHAT * * Returns description of object 'obj' in sds 'sds' * number of elements,name and type of element (elemcod) are filled. * * INTEGER*4 IA,IB,IC * CHARACTER*20 NAME * . * . * ISTATUS = SDS_FWHAT(1,1,IA,IB,IC,NAME) * * * *********************************************************************/#ifdef vms/**************** VMS_FORTRAN ****************************************/intsds_fwhat(sds,obj,nelems,elemcod,name)int *sds,*obj,*nelems,*elemcod;char *name;{ int length;#else/*************** SUN-XTENDED_FORT ******************************************/int#if defined(F77)sdwhat_(sds,obj,nelems,elemcod,name,length)#elsesds_fwhat_(sds,obj,nelems,elemcod,name,length)#endifint *sds,*obj,*nelems,*elemcod,length;char *name;{#endif struct direc *dptr; if ((dptr = sds_direc_ptr(*sds)) == DNULL) return(-2*SDS_NO_SUCH_SDS); if (*obj > dptr[0].nelems) return(-2*SDS_NO_SUCH_OBJ); *nelems = dptr[*obj].nelems; *elemcod = dptr[*obj].elemcod; getf_from_c(sds_obind2name(*sds,*obj),name,&length); return(1);}/*********************************************************************//* SDS_FPRINT * * lists to standard out object 'obj' of SDS 'sds' * * * ISTATUS = SDS_FPRINT(1,0) * * Lists directory of SDS 1 * * * *********************************************************************/#ifdef vms/**************** VMS_FORTRAN ****************************************/intsds_fprint(sds,obj)#else/*************** SUN-XTENDED_FORT ******************************************/int#if defined(F77)sdprin_(sds,obj)#elsesds_fprint_(sds,obj)#endif#endifint *sds,*obj;{ sds_list(*sds,*obj,SDS_LIST_FORMATTED); return(1);}/*********************************************************************//* SDS_FINDO * find object name 'name' in SDS 'sds' * * ISTATUS = SDS_FINDO(1,"blech",obj_ind) * * Searches for object "blech" in SDS 1 * * Returns object index in obj_ind * *********************************************************************/#ifdef vms/**************** VMS_FORTRAN ****************************************/intsds_findo(sds,name,object)int *sds,*object;char *name;{ int length;#else/*************** SUN-XTENDED_FORT ******************************************/int#if defined(F77)sdfind_(sds,name,object,length)#elsesds_findo_(sds,name,object,length)#endifint *sds,length,*object;char *name;{#endif getc_from_f(cstring,name,&length); *object = sds_name2ind(*sds,cstring); if (*object == 0) return(-2*(sds_error)); else return(1);}/*********************************************************************/voidunzterm(buffer,length)char *buffer;int length;/*********************************************************************/{ int i; for (i=0;i<length;i++,buffer++) if (*buffer == 0) *buffer = ' ';}/*********************************************************************/voidzterm(cbuffer)char *cbuffer;/*********************************************************************/{ while(*(--cbuffer) == ' '); cbuffer++; if ((int)*cbuffer) *cbuffer = (char)0;}#ifdef vms/*********************************************************************/intgetc_from_f(cbuffer,fpointer,len)char *cbuffer;struct vms_fstring *fpointer;int *len;/*********************************************************************/{ int i; char *fptr = fpointer->string; for(i=0;i<(int)fpointer->len;i++,*cbuffer++ = *fptr++); zterm(cbuffer);}#else/*********************************************************************/intgetc_from_f(cbuffer,fpointer,len)char *cbuffer,*fpointer;int *len;/*********************************************************************/{ int i; for(i=0;i<*len;i++,*cbuffer++ = *fpointer++); zterm(cbuffer); return 0;}#endif#ifdef vms/*********************************************************************/intgetf_from_c(cbuffer,fpointer,len)char *cbuffer;struct vms_fstring *fpointer;int *len;/*********************************************************************/{ int i; char *fptr,*tptr; tptr = fpointer->string; fptr = cbuffer; for(i=0;i<(int)fpointer->len && *fptr != (char)0;i++,*tptr++ = *fptr++); for(;i<(int)fpointer->len;i++,*tptr++ = ' '); return 1;}#else/*********************************************************************/intgetf_from_c(cbuffer,fpointer,len)char *cbuffer,*fpointer;int *len;/*********************************************************************/{ int i; char *fptr,*tptr; tptr = fpointer; fptr = cbuffer; for(i=0;i<*len && *fptr != (char)0;i++,*tptr++ = *fptr++); for(;i<*len;i++,*tptr++ = ' '); return 1;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -