/* * SUBS.C * * (C)Copyright 1987 by Matthew Dillon, All Rights Reserved * * * Subroutines. Mainly workbench support stuff */ #include "defs.h" makemygadget(gad) register struct Gadget *gad; { static unsigned long ga[] = { 0x00000000, /* 32 pixels across */ 0x00FDCBFD, 0xFFFDDFFD, 0x00000000, 0x00DFDDDF, 0x00000000, 0xBC0EF00B, 0x00000000, 0xBFC00CDC, 0x00000000, 0xA00DF00F, 0x00000000, 0x00000000, 0x00000000, 0x00FDCBFD, 0xFFFDDFFD, 0x00000000, 0x00DFDDDF, 0x00000000, 0xBC0EF00B, 0x00000000, 0xBFC00CDC, 0x00000000, 0xA00DF00F, 0x00000000, 0x00000000 }; static struct Image image = { 0, 0, 20, sizeof(ga)/4/2, 2, (APTR)ga, 3, 0, NULL }; bzero(gad, sizeof(struct Gadget)); gad->Width = 20; gad->Height = sizeof(ga)/4/2 + 1; gad->Flags = GADGIMAGE|GADGHCOMP; gad->GadgetType = BOOLGADGET; gad->Activation = RELVERIFY|GADGIMMEDIATE; gad->GadgetRender = (APTR)ℑ } /* * return index of first non space. Returns 255 if no spaces found. */ firstns(str) register char *str; { register short i; for (i = 0; str[i] && str[i] == ' '; ++i); if (str[i] == 0) i = 0; return(i); } lastns(str) register char *str; { register short i; for (i = strlen(str) - 1; i > 0 && str[i] == ' '; --i); if (i < 0) i = 0; return(i); } wordlen(str) register char *str; { register short i; for (i = 0; *str && *str != ' '; ++i, ++str); return(i); } /* * Find the path from some root device to a specific filename (src), and * stick the result in (dest). If unable to backtrace along directories, * simply copy (src) into (dest) * * Returns (1) if able to backtrace, (0) if not. */ getpath(src, dest) char *src, *dest; { register long flock, pflock; register short len, total; register FIB *fib = (FIB *)malloc(sizeof(FIB)); char c; dest[0] = 0; total = 1; flock = Lock(src, ACCESS_READ); if (flock == NULL) { /* missing file? */ for (len = strlen(src); len >= 0; --len) { if (src[len] == '/') { --len; break; } if (src[len] == ':') break; } if (c = src[len + 1]) { strcpy(dest, src+len+2); total = strlen(dest)+1; } src[len + 1] = 0; flock = Lock(src, ACCESS_READ); src[len + 1] = c; } if (flock) { do { pflock = ParentDir(flock); if (Examine(flock, fib) == 0) { puts ("Examine failed"); fib->fib_FileName[0] = 0; } if (fib->fib_FileName[0] == 0) strcpy(fib->fib_FileName, "ram"); len = strlen(fib->fib_FileName); bmov(dest, dest + len + 1, total); dest[len] = (pflock) ? '/' : ':'; bmov(fib->fib_FileName, dest, len); total += len + 1; UnLock(flock); flock = pflock; } while(pflock); len = strlen(dest) - 1; if (dest[len] == '/') dest[len] = 0; return(1); } strcpy(dest, src); return(0); }