home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oakland CPM Archive
/
oakcpm.iso
/
cpm
/
aztec-c
/
find.c
< prev
next >
Wrap
C/C++ Source or Header
|
1985-01-05
|
3KB
|
133 lines
/*
* FIND is a progam was writen to help maintain files on my hard disc.
* This program should run on any CP/M 2.2 or higher revision machine.
* It was developed using CP/M 3.0 and the AZTEC C compiler vers. 1.06B.
*
* To compile:
* cc -dTINY find.c
* as find.asm
* ln find.o t.lib c.lib
*
* As this program was a quick ditch effort, I welcome any and all
* modifications that anyone makes to it. For example, anbiguous(* , ?)
* filenames are not extracted from the DMA address after the bdos
* call to "search filename". The program also does not allow the
* user to search specific user areas, it assumes a scan of user 0
* thru user 15.
*
* Have fun with it, but this program is not for resale in any form.
*
* Please send any ideas/changes/reactions to me in mail. Do not post.
*
* Jeff Gibson UUCP: {cepu,ihnp4,noao,uiucdcs}!bradley!jmg
* Bradley University ARPA: cepu!bradley!jmg@UCLA-LOCUS
* Peoria, IL 61625 PH: (309) 692-9069
*
*/
#include "stdio.h"
int drive_range[17],
DRIVES;
main(argc, argv)
int argc;
char *argv[];
{
char fn[36],
drive_name;
int i,
old_user,
new_user,
found,
drive;
if (--argc < 1)
{
printf("\nusage: find -drives abcdefghijklmnop filename\n");
bios(0);
}
DRIVES = found = FALSE;
*++argv;
if (*argv[0] == '-')
{
check(*argv);
com_line(*++argv);
}
else
{
*--argv;
drive_range[0] = 0;
drive_range[1] = -1;
}
fcbinit(*++argv, &fn);
old_user = getusr();
i = 0;
putchar('\n');
while (drive_range[i] != -1)
{
fn[0] = drive_range[i];
for (new_user=0; new_user < 16; new_user++)
{
if (bdos(11) == 1) /* check for key strike */
if (getchar() == 0x03) /* abort on ^C */
bios(0);
setusr(new_user);
if (bdos(17, fn) != 0xff)
{
found = TRUE;
if (drive_range[i] == 0)
drive_name = (char)(drive_range[i] + 65);
else
drive_name = (char)(drive_range[i] + 64);
printf("%s: USER %d DRIVE %c\n", *argv, new_user, drive_name);
}
}
i++;
}
if (!found)
printf("%s: was not found\n", *argv);
setusr(old_user);
bios(0);
}
check(argv)
char argv[];
{
if (tolower(argv[1]) == 'd')
DRIVES = TRUE;
else
{
printf ("\nERROR in argument\n");
bios(0);
}
}
com_line(line)
char line[];
{
int i, j;
if (DRIVES)
{
i = 0;
j = 0;
while (tolower(line[i]) >= 'a' && tolower(line[i]) <= 'p')
{
drive_range[j] = (int)(tolower(line[i++]) - 0x60);
j++;
}
drive_range[j] = -1;
}
else
{
printf("ERROR --- illegal drive specification.\n");
bios(0);
}
}