TOOLKIT\JUMP.C ·
C ·
2.4 KB ·
1988-10-01 ·
from PersonalComputing_Oct-1988_Disk-1
#include <dos.h>
#define TRUE 1
#define FALSE 0
char badpath[]="Bad Path Name";
char usage[]="USAGE:- JUMP [drive:] directory";
char nodir[]="Directory Not Found";
char path[70],dirname[13]; /* TO BE REMOVED FOR FINAL VERSION */
/* char *path,*dirname; */
main(argc,argv)
char *argv[];
int argc;
{
char *ptr,*strupr();
/* char pathbuffer[70],dirbuffer[13]; */
/* path=pathbuffer; dirname=dirbuffer; */
/* _chkstack(); */
if (argc!=2) error(usage);
strcpy(path,argv[1]);
ptr=strupr(path); /* convert to upper case */
if (ptr[1]==':') ptr+=2;
if (ptr[0]=='\\') { ptr[1]=0; change(); }
if (strlen(ptr)<13) /* ensure not longer than buffer */
{
strcpy(dirname,ptr);
ptr[0]=0; /* terminate string for path */
find_dir();
}
error(nodir); /* if gets here, not found */
}
find_dir()
{
struct FIND dta;
char *pathend;
/* _chkstack(); */
strcat(path,"\\");
pathend=path+strlen(path);
bdos(0x1a,&dta); /* set disk transfer address */
strcat(path,"*.*"); /* set search path as all files */
if (findfrst(0x10))
do if ((dta.attribute & 0x10)&&(dta.name[0]!='.')) /* if valid directory */
{
strcpy(pathend,&dta.name[0]); /* add name to path */
if (strncmp(dta.name,dirname,strlen(dirname))==0) change();
find_dir(); /* recurse down directory branches */
bdos(0x1a,&dta); /* reset disk transfer address for next find */
}
while (findnxt());
}
error(str)
char *str;
{
printf("%s",str); /* TO BE REMOVED FOR FINAL VERSION */
/* display(str); */
exit(1);
}
findfrst(attr)
int attr;
{
REGS regs;
regs.ax=0x4e00;
regs.dx=(int) path;
regs.cx=attr;
if (intdos(®s,®s) & 1)
{
if (regs.ax==3) error(badpath);
return FALSE;
}
return TRUE;
}
findnxt()
{
REGS regs;
regs.ax=0x4f00;
if (intdos(®s,®s) & 1) return FALSE;
return TRUE;
}
change()
{
if (chdir(path)==-1) error(badpath); /* change current directory */
if (path[1]==':') bdos(0x0e,path[0]-'A'); /* change current drive if reqd */
printf("Changing to %s",path); /* TO BE REMOVED FOR FINAL VERSION */
/* dispnl("Changing to ");
display(path); */
exit(0);
}