home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
disk
/
misc
/
dcmp
/
source
/
source.lha
/
strfn.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-02-02
|
5KB
|
251 lines
/*
** $RCSfile: strfn.c,v $
** $Release$
** $Revision: 1.4 $
** $Date: 92/08/31 15:43:20 $
** $Author: tf $
** $State: Exp $
**
** File name support functions
**
** (c) Copyright 1991,92 Tobias Ferber. All Rights Reserved.
*/
#include "strfn.h"
/* check if a file exists */
BOOL fexist(char *name)
{ FILE *fp;
if(!(fp=fopen(name,"r")))
return(FALSE);
fclose(fp);
return(TRUE);
}
extern struct DosLibrary *DOSBase;
/* get device list type */
long dltype(char *dname)
{ struct DeviceList *dlist;
int n;
char *t;
for(n=0;dname[n]!=_COLON && dname[n]!='\0'; n++)
;
dlist=(struct DeviceList *)
BADDR(((struct DosInfo *)
BADDR(((struct RootNode *)(DOSBase->dl_Root))->rn_Info))->di_DevInfo);
while(dlist)
{ t=(char *)(BADDR(dlist->dl_Name))+1;
if((strlen(t)==n) && (!strnicmp(t,dname,n)))
return(dlist->dl_Type);
else
dlist=(struct DeviceList *) BADDR(dlist->dl_Next);
}
return(DLT_UNKNOWN);
}
/* make file name */
char *strmfn(name, drive, path, node, ext)
char *name,*drive,*path,*node,*ext;
{ if(name)
{ *name='\0';
if(drive && *drive!='\0')
{ while((*name=*drive++)!='\0' && *name!=_COLON)
name++;
*name++=_COLON;
}
if(path && *path!='\0')
{ while((*name=*path++)!='\0')
name++;
--name;
if(*name!=_SLASH)
*++name=_SLASH;
*++name='\0';
}
if(node && *node!='\0')
{ while((*name=*node++)!='\0')
name++;
}
if(ext && *ext!='\0')
{ if(*name!=_PERIOD && *ext!=_PERIOD)
*name++=_PERIOD;
while((*name=*ext++)!='\0')
name++;
}
}
return(name);
}
/* split file name */
void strsfn(name, drive, path, node, ext)
char *name,*drive,*path,*node,*ext;
{ if(name)
{ char *f;
int p,n,e,x;
for(f=name,x=p=n=e=0; *f!='\0'; f++,x++)
{ switch(*f)
{ case _COLON:
if(drive)
strncpy(drive,name,x+1);
p=n=x+1;
break;
case _SLASH:
n=x+1;
break;
case _PERIOD:
e=x+1;
break;
}
}
if(path)
{ if(p!=n)
strncpy(path,&name[p],n-p);
path[n-p]='\0';
}
if(node)
{ if(e>0 && n!=e)
{ strncpy(node,&name[n],e-1-n);
node[e-1-n]='\0';
}
else
{ if(n!=x)
strncpy(node,&name[n],x-n);
node[x-n]='\0';
}
}
if(ext)
{ if(e>0)
strcpy(ext,&name[e]);
else
*ext='\0';
}
}
}
/* get file drive */
int stcgfd(drive,name)
char *drive,*name;
{ if(name && *name!='\0')
{ int x,n;
for(x=n=0; name[x]!='\0'; x++)
{ if(name[x]==_COLON)
n=x+1;
}
if(drive && n>0)
{ strncpy(drive,name,n);
drive[n]='\0';
}
return(n);
}
else return(0);
}
/* get file path (incl. drive) */
int stcgfp(path,name)
char *path, *name;
{ if(name && *name!='\0')
{ int x,n;
for(x=n=0; name[x]!='\0'; x++)
{ if(name[x]==_COLON || name[x]==_SLASH)
n=x+1;
}
if(n>0 && path)
{ strncpy(path,name,n);
path[n]='\0';
}
return(n);
}
else return(0);
}
/* get file name (incl. extension(s) ) */
int stcgfn(file,name)
char *file,*name;
{ char *t;
if(name && *name!='\0')
{ for(t=name; *name!='\0'; name++)
{ if(*name==_COLON || *name==_SLASH)
t=&name[1];
}
if(file)
strcpy(file,t);
return strlen(t);
}
else if(file)
*file='\0';
return(0L);
}
/* get file extension */
int stcgfe(ext,name)
char *ext, *name;
{ if(name)
{ char *t=NULL;
while(*name!='\0')
{ if(*name++==_PERIOD)
t=name;
}
if(ext)
{ if(t!=NULL)
{ strcpy(ext,t);
return strlen(ext);
}
else *ext='\0';
}
}
return(0L);
}
/* make file with (new) extension */
void strmfe(new,old,ext)
char *new,*old,*ext;
{ if(new)
{ char *t=NULL;
if(old)
{ while((*new=*old++)!='\0')
{ if(*new==_PERIOD)
t=new;
else if(*new==_SLASH || *new==_COLON)
t=NULL;
new++;
}
}
if(t!=NULL)
new=t;
if(ext)
{ *new++ = _PERIOD;
strcpy(new,ext);
}
else *new='\0';
}
}
/* make filename: path (+ _SLASH) + node */
void strmfp(name,path,node)
char *name,*path,*node;
{ if(name)
{ if(path)
{ while((*name=*path++)!='\0')
name++;
--name;
if(*name!=_SLASH && *name!=_COLON)
*++name=_SLASH;
*++name='\0';
}
if(node)
{ while((*name++ = *node++)!='\0')
;
}
}
}