home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
cenvi23.zip
/
FILENAME.LIB
< prev
next >
Wrap
Text File
|
1996-02-13
|
5KB
|
199 lines
/*
* Filename.lib
* Perform some common filename operations on any filename,
* taking into account the differences among systems.
*/
filename_separator = "\\"; path_separator = ';'; path_chars = ":\\";
if( defined(_WINDOWS_) || defined(_NTWIN_) || defined(_NTCON_) ||
defined(_95CON_) )
{
executable_extensions = { ".CMM", ".COM", ".EXE", ".BAT", ".PIF" };
} else if( defined(_OS2_) )
{
executable_extensions = { ".CMM", ".COM", ".EXE", ".CMD", ".BAT" };
} else if( defined(_NWNLM_) )
{
executable_extensions = { ".CMM", ".NLM", ".NCF" };
} else if ( defined(_UNIX_) )
{
executable_extensions = { ".cmm" };
} else {
executable_extensions = { ".CMM", ".COM", ".EXE", ".BAT" };
}
if( defined(_UNIX_) )
{
filename_separator = "/";
path_separator = ':';
path_chars = "/";
}
if( defined(_NWNLM_) )
{
filename_separator = "/";
path_chars = ":/";
}
if( defined(_MAC_) )
{
filename_separator = ":";
path_separator = '\n';
path_chars = ":";
}
#define HKEY_CLASSES_ROOT 0x80000000
#define HKEY_CURRENT_USER 0x80000001
#define HKEY_LOCAL_MACHINE 0x80000002
#define HKEY_USERS 0x80000003
#define HKEY_PERFORMANCE_DATA 0x80000004
#define REG_SZ 1
RegCloseKey(pHKey)
{
return DynamicLink("ADVAPI32","RegCloseKey",STDCALL,pHKey);
}
RegCreateKey(pHKey,pSubKeyStr,pGetHKey)
{
lRet = DynamicLink("ADVAPI32","RegCreateKeyA",STDCALL,pHKey,pSubKeyStr,lGetHKey);
pGetHKey = lGetHKey;
return lRet;
}
RegQueryValueEx(pHKey,pValueName,pGetType,pGetData,pGetDataSize)
{
lRet = DynamicLink("ADVAPI32","RegQueryValueExA",STDCALL,
pHKey,pValueName,0,lGType,NULL,lBufSize);
if ( !lRet ) {
BLObSize(pGetData,lBufSize);
lRet = DynamicLink("ADVAPI32","RegQueryValueExA",STDCALL,
pHKey,pValueName,0,lGetType,pGetData,pointer(lBufSize));
pGetType = lGetType;
pGetDataSize = lBufSize;
}
return lRet;
}
/* ---------------------------------------------------------------------- */
/*
* Given a path string, such as under DOS:
* PATH=c:\bin;c:\bin;..
* Return an array of all the paths
*/
path_string_to_array(path)
{
if( path==NULL ) return NULL;
num = 0;
array = NULL;
strcpy(dopath,path);
while( dopath!=NULL && dopath[0]!='\0' )
{
loc = strchr(dopath,path_separator);
if( loc!=NULL )
{
loc[0] = '\0';
add = dopath; dopath = loc+1;
} else {
add = dopath; dopath = NULL;
}
if( num==0 ) undefine(array);
strcpy(array[num++],add);
}
return array;
}
path_add_to_array(value,num,array)
{
value = FullPath(value);
if( value==NULL ) return;
if( value[strlen(value)-1]!=filename_separator[0] )
strcat(value,filename_separator);
for( i=0;i<=GetArraySpan(array);i++ )
{
if( !stricmp(value,array[i]) ) return;
}
strcpy(array[num++],value);
}
/*
* Build an array of paths, with no duplicates. The array represents the
* search path CEnvi uses on that system. It is ordered based on what is
* searched when.
*/
build_path_list()
{
num = 1;
array[0] = FullPath(".");
strcat(array[0],filename_separator);
if( defined(_OS2_) || defined(_DOS_) || defined(_DOS32_) )
{
toadd = path_string_to_array(getenv("CMMPATH"));
for( i=0;toadd!=NULL && i<=GetArraySpan(toadd); i++ )
{
path_add_to_array(toadd[i],num,array);
}
}
if( defined(_WINDOWS_) )
{
buffer = ""; SetArraySpan(buffer,100);
DynamicLink("KERNEL","GETPROFILESTRING",SWORD16,PASCAL,
"CEnvi","CMMPATH","",buffer,100);
toadd = path_string_to_array(buffer);
for( i=0;toadd!=NULL && i<=GetArraySpan(toadd); i++ )
{
path_add_to_array(toadd[i],num,array);
}
}
if( defined(_NTCON_) || defined(_95CON_) )
{
Path = ""; SetArraySpan(Path,200);
RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Nombas\\CEnviC32",lKey);
RegQueryValueEx(lkey,"CMMPATH",REG_SZ,Path,200);
RegCloseKey(lkey);
toadd = path_string_to_array(Path);
for( i=0;toadd!=NULL && i<=GetArraySpan(toadd); i++ )
{
path_add_to_array(toadd[i],num,array);
}
}
if( defined(_NTWIN_) || defined(_95WIN_) )
{
Path = ""; SetArraySpan(Path,200);
RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Nombas\\CEnviW32",lKey);
RegQueryValueEx(lkey,"CMMPATH",REG_SZ,Path,200);
RegCloseKey(lkey);
toadd = path_string_to_array(Path);
for( i=0;toadd!=NULL && i<=GetArraySpan(toadd); i++ )
{
path_add_to_array(toadd[i],num,array);
}
}
// get full path of each directory from the PATH variable
if( !defined(_NWNLM_) )
{
toadd = path_string_to_array(getenv("PATH"));
for( i=0;toadd!=NULL && i<=GetArraySpan(toadd); i++ )
{
path_add_to_array(toadd[i],num,array);
}
}
return array;
}