diff options
Diffstat (limited to 'lib/libI77/util.c')
| -rw-r--r-- | lib/libI77/util.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/lib/libI77/util.c b/lib/libI77/util.c new file mode 100644 index 000000000000..af068b0a23c5 --- /dev/null +++ b/lib/libI77/util.c @@ -0,0 +1,72 @@ +#ifndef NON_UNIX_STDIO +#include "sys/types.h" +#include "sys/stat.h" +#endif +#include "f2c.h" +#include "fio.h" + + VOID +#ifdef KR_headers +g_char(a,alen,b) char *a,*b; ftnlen alen; +#else +g_char(char *a, ftnlen alen, char *b) +#endif +{ + char *x = a + alen, *y = b + alen; + + for(;; y--) { + if (x <= a) { + *b = 0; + return; + } + if (*--x != ' ') + break; + } + *y-- = 0; + do *y-- = *x; + while(x-- > a); + } + + VOID +#ifdef KR_headers +b_char(a,b,blen) char *a,*b; ftnlen blen; +#else +b_char(char *a, char *b, ftnlen blen) +#endif +{ int i; + for(i=0;i<blen && *a!=0;i++) *b++= *a++; + for(;i<blen;i++) *b++=' '; +} +#ifndef NON_UNIX_STDIO +#ifdef KR_headers +long f__inode(a, dev) char *a; int *dev; +#else +long f__inode(char *a, int *dev) +#endif +{ struct stat x; + if(stat(a,&x)<0) return(-1); + *dev = x.st_dev; + return(x.st_ino); +} +#endif + +#define INTBOUND sizeof(int)-1 + VOID +#ifdef KR_headers +f__mvgbt(n,len,a,b) char *a,*b; +#else +f__mvgbt(int n, int len, char *a, char *b) +#endif +{ register int num=n*len; + if( ((int)a&INTBOUND)==0 && ((int)b&INTBOUND)==0 && (num&INTBOUND)==0 ) + { register int *x=(int *)a,*y=(int *)b; + num /= sizeof(int); + if(x>y) for(;num>0;num--) *y++= *x++; + else for(num--;num>=0;num--) *(y+num)= *(x+num); + } + else + { register char *x=a,*y=b; + if(x>y) for(;num>0;num--) *y++= *x++; + else for(num--;num>=0;num--) *(y+num)= *(x+num); + } +} |
