home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 11 Util
/
11-Util.zip
/
SWITCH2.ZIP
/
SW.C
< prev
next >
Wrap
C/C++ Source or Header
|
1990-01-22
|
3KB
|
154 lines
/* switch.c */
/* Copyright Darien Mann 1989
GENIE D.MANN4 */
#include "os2.h"
#include "stdio.h"
#include "stdlib.h" /* for DOS_MODE, OS2_MODE */
#include "string.h"
#include "dos.h"
#include "ctype.h"
#define HDIR_CREATE -1
#define HDIR_SYSTEM 1
FILEFINDBUF fbuf;
int drvno;
int count = 0;
char sname[256];
char originaldir[256];
FILE *fp;
main(argc,argv)
int argc;
char **argv;
{
unsigned long drvmap;
register int i;
if(argc < 2)
{
printf("sw: missing directory\n");
exit(1);
}
DosQCurDisk(&drvno, &drvmap);
if(((strlen(argv[1])) >=2) && ((argv[1])[1] == ':'))
{
drvno = ((argv[1])[0] | 0x20) - ('a'-1);
if(DosSelectDisk(drvno))
{
printf("\nsw:bad drive\n");
exit(1);
}
argv[1] += 2;
}
strcpy(sname,argv[1]);
for(i = 0; i<strlen(sname); i++)
sname[i] = toupper(sname[i]);
pdir();
schdir();
printf("sw: no match found\n");
}
schdir()
{
int i;
static char temp[256];
if ((fp = fopen("\\tree.txt","r")) == NULL)
{
perror("Can't open tree.txt");
exit(0);
}
while(fgets(temp,sizeof(char)*256,fp))
switchdir(temp);
fclose(fp);
}
switchdir(char dbuf[])
{
register int i,j;
char temp[256];
char machinemode;
i = strlen(dbuf);
dbuf[i-1] = 0; /* get rid of linefeed */
if(strcmp(originaldir,dbuf) == 0)
return(0);
for(i = 0; i<256; i++)
temp[i] = 0;
i = strlen(dbuf);
i--;/* step past terminating null */
j = 0;
while((dbuf[i] != '\\') && (i >= 0))
temp[j++] = dbuf[i--];
reverse(temp);
/* printf("temp = %s: sname = %s: dbuf = %s\n",temp,sname,dbuf);
getch(); */
if(compare(temp,sname) == 0)
{
fclose(fp);
if(DosChdir(dbuf, 0L))
{
printf("bad directory\n");
exit(0);
}
DosGetMachineMode(&machinemode);
if(machinemode == OS2_MODE) /* how is parent session changed? */
exec();
exit(0);
}
}
reverse(char s[])
{
int c,i,j;
for(i = 0,j=strlen(s)-1; i<j; i++,j--)
{
c=s[i];
s[i]=s[j];
s[j]=c;
}
}
exec()
{
char objname[64];
long retcode;
int objname_len = sizeof(objname);
DosExecPgm(objname,objname_len,EXEC_SYNC,NULL,NULL,&retcode,"cmd.exe");
}
compare(temp,sname)
char temp[];
char sname[];
{
int i;
i = 0;
while((temp[i] == sname[i]) && (temp[i] != 0))
i++;
if(i == strlen(sname))
return(0);
else
return(1);
}
pdir()
{
register int i,j;
char temp[256];
char temp2[256];
char dbuf[256];
int ltemp2 = sizeof(temp2);
DosQCurDir(0,temp2,<emp2);
dbuf[0] = drvno+'A'-1;
dbuf[1] = ':';
dbuf[2] = '\\';
strcat(dbuf,temp2);
i = strlen(dbuf);
i--;/* step past terminating null */
j = 0;
while((dbuf[i] != '\\') && (i >= 0))
temp[j++] = dbuf[i--];
reverse(temp);
strcpy(originaldir,dbuf);
}