1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
#include <exec/types.h>
#include <exec/tasks.h>
#include <dos/dos.h>
#include <proto/dos.h>
#include <proto/exec.h>
char *mktemp(char * template)
{
char letter = 'A';
BPTR lock;
unsigned long mytask;
char * xptr;
if (template == (char *) NULL || *template == '\0')
return (char *) NULL;
for (xptr = template; *xptr != '\0'; xptr++)
/* void */ ;
if (*--xptr != 'X')
return (char *) NULL;
mytask = (unsigned long) FindTask((STRPTR) NULL);
do {
*xptr = (mytask % 10) + '0';
mytask /= 10;
} while (xptr != template && *--xptr == 'X');
if (*xptr == 'X') {
while (xptr != template && *xptr == 'X')
xptr--;
if (*xptr != 'X')
xptr++;
*xptr = letter;
}
else {
xptr++;
letter--;
}
for (;;) {
lock = Lock(template, SHARED_LOCK);
if (lock == (BPTR) NULL) {
if (IoErr() == ERROR_OBJECT_NOT_FOUND)
return template;
}
UnLock(lock);
if (letter < 'Z')
letter++;
else {
if (*++xptr == '\0')
return (char *) NULL;
letter = 'A';
}
*xptr = letter;
}
/*NOTREACHED*/
}
|