home *** CD-ROM | disk | FTP | other *** search
- #include "osbind.h"
- #include "obdefs.h"
- #include "gemdefs.h"
- #include "stat.h"
- #include "hdl.h"
-
-
- #define OK 1
- #define FALSE -1
- #define ERROR -1
- #define FTOF 1
- #define FTOD 2
- #define DTOD 3
- #define DIRLEN 8
- #define FILELEN 12
-
- OBJECT *cpbox; /* cp or rm or mv dialog box */
- OBJECT *samename; /* name conflict dialog box */
- char *cntopen; /* can't open file alert box */
- char *cntcrtdr; /* can't create directory alert box */
- char *cntcrtfl; /* can't create file alert box */
- char *cntdelf; /* can't delete file alert box */
- char *cntdeld; /* can't delete directory alert box */
- char *wrerror; /* write file error alert box */
- char *rderror; /* read file error alert box */
- char *nomemory; /* not sufficient memory alert box */
-
- int srclen, dstlen; /* the size of source and target buffer */
- long numfiles = 0L; /* the number of files show in the dialog box */
- long numdirs = 0L; /* the number of directories */
- long tolsize = 0L; /* the total size of all files in the path */
- int srcbuf, dstbuf; /* the size of source and target buffer be define */
- int editdir; /* the flag for the user edit the name conflict */
- char *fixsrc, *fixdst; /* the source and target string pointer */
- long _stksize = 25000; /* resize the stack size */
- char *getall = "*.*";
- char *bckslsh = "\\\0";
-
- /* AES (windows and messages) related variables */
- int formw, formh, sx, sy, lx, ly; /* dialogue box dimensions */
- int hdesk, wdesk; /* window X, Y, width, height */
-
- char *filestr = "abcdefgh.abcb"; /* the buffer for the file */
- char *cptitle = " COPY FILE(S) "; /* the title for the cp dialog box */
- char *mvtitle = " MOVE FILE(S) "; /* the title for the mv dialog box */
- char *rmtitle = "DELETE FILE(S)"; /* the title for the rm dialog box */
-
-
- main(argc, argv)
-
- int argc;
- char **argv;
-
- {
- char *convert();
- char *src, *dst;
- long ndirs,nfiles,tsize;
-
- if(argc < 4) {
- Cconws("Usage: hdlfile source destination code\r\n");
- Pterm0();
- }
- convert(&src, argv[1]);
- convert(&dst, argv[2]);
- dofiles(src, dst, atoi(argv[3]), &ndirs, &nfiles, &tsize);
-
- }
-
- char *
- convert(ret, src)
- char **ret;
- char *src;
- {
- char *tmp, *tmp1;
-
- tmp1 = (char *)Malloc((long)(sizeof(src)+10));
- strcpy(src, tmp1);
- tmp = tmp1;
- while(*tmp) ++tmp;
- if (*(tmp-1) == 'a') {
- *(tmp-1) = '\0';
- strcat("*.*", tmp1);
- }
- *ret = tmp1;
- }
-
- d_next(s)
- char **s;
- {
- *s = fixdst;
- return (0);
- }
-
- dofiles(s, d, code, ndirs, nfiles, tsize)
-
- char *s, *d;
- int code;
- long *ndirs, *nfiles, *tsize;
-
- {
-
- /*
- extern int d_next();
- */
-
- if (code == 3) { /* do for information use */
- count(s);
- *ndirs = numdirs;
- *nfiles = numfiles;
- *tsize = tolsize;
- return OK;
- }
- appl_init();
- if (!rsrc_load("HDL.RSC")) {
- goto cleanup;
- }
-
- if (getalladdr() != OK) {
- goto cleanup;
- }
-
- do {
- count(s);
- if (!code) { /* do rm files and dirs */
- rmfile(getinfo(s, d, code));
- } else if (code == 1) { /* do cp files and dirs */
- cpfile(getinfo(s, d, code));
- } else { /* do rm files and dirs */
- mvfile(getinfo(s, d, code));
- }
- } while (d_next(&s));
-
- cleanup:
- appl_exit();
- return OK;
- }
-
-
- /* do the rm file job */
-
- rmfile(flag)
- int flag;
-
- {
-
- int ret;
-
- if (showbox(rmtitle) == CANCEL) {
- goto endrm;
- }
- if (flag == FTOD) { /* one file from dir rm */
- updatedir();
- updatefile();
- redel:
- if ((ret = Fdelete(fixsrc))) {
- if ((ret == 0xFFFA) || (ret == 0xFFFE)) { /* seek error or */
- Pterm(1); /* drive not ready */
- }
- if (err(cntdelf) == 2) { /* retry */
- goto redel;
- } else { /* quit */
- goto endrm;
- }
- }
- } else { /* rm dir or files */
- fixdst = fixsrc;
- dormfd();
- }
-
- endrm:
- erasemsg();
- Mfree(fixsrc);
- Mfree(fixdst);
- return OK;
- }
-
-
- /* do the cp file job */
-
- cpfile(flag)
-
- int flag;
-
- {
-
- if (showbox(cptitle) == CANCEL) {
- goto endcp;
- }
- if (flag == DTOD) { /* files and directories cp */
- docpfd();
- } else { /* a file cp */
- updatedir();
- updatefile();
- wrfile(fixsrc, fixdst);
- }
-
- endcp:
- erasemsg();
- Mfree(fixsrc);
- Mfree(fixdst);
- return OK;
- }
-
-
-
- /* do the mv file job */
-
- mvfile(flag)
- int flag;
-
- {
-
- if (showbox(mvtitle) == CANCEL) {
- goto endmv;
- }
- if (flag == DTOD) { /* files and directories mv */
- domvfd();
- } else { /* a file mv */
- updatedir();
- updatefile();
- wrfile(fixsrc, fixdst);
- remvdel:
- if (Fdelete(fixsrc)) {
- if (err(cntdelf) == 2) { /* retry */
- goto remvdel;
- } else { /* quit */
- goto endmv;
- }
- }
- }
-
- endmv:
- erasemsg();
- Mfree(fixsrc);
- Mfree(fixdst);
- return OK;
- }
-
-
-
-
-
- /* recursively rm dir or files form a given path */
-
- dormfd()
-
- {
- char *saved;
- extern char *strcat();
- extern char *strcpy();
- DMABUFFER dumb;
- int ret;
-
- saved = (DMABUFFER *)Fgetdta();
- Fsetdta(&dumb);
- strcat(getall, fixsrc);
- if (!Fsfirst(fixsrc, 0xFF)) {
- do {
- if (dumb.d_fname[0] != '.') {
- if (S_IFDIR & dumb.d_fattr) {
- chksrcbuf(DIRLEN); /* check buf size */
- addfile(fixsrc, dumb.d_fname);/* add a dir to the path */
- strcat(bckslsh, fixsrc);
- dormfd(); /* to the recursion */
- rmstarb(fixsrc); /* rm the star and back slash */
- getlastpath(filestr, fixsrc);
- unpack(filestr);
- strcpy(filestr,
- ((TEDINFO *)(cpbox[CPDIR].ob_spec))->te_ptext);
- strcpy("_", ((TEDINFO *)(cpbox[CPFILE].ob_spec))->te_ptext);
- objc_draw(cpbox, CPFILE, MAX_DEPTH, 0, 0, wdesk, hdesk);
- objc_draw(cpbox, CPDIR, MAX_DEPTH, 0, 0, wdesk, hdesk);
- /* delete a dir from source */
- redeld:
- if (Ddelete(fixsrc)) {
- if ((ret = err(cntdeld)) == 2) { /* retry */
- goto redeld;
- } else if (ret == 3) { /* abort */
- Pterm(1);
- }
- }
- backdir(fixsrc); /* back one dir */
- updatndir();
- srclen -= DIRLEN; /* subtract the add lenth */
-
- } else {
- chksrcbuf(FILELEN); /* check buf size */
- addfile(fixsrc, dumb.d_fname);
- updatedir();
- /* update the file box */
- unpack(dumb.d_fname);
- strcpy(dumb.d_fname,
- ((TEDINFO *)(cpbox[CPFILE].ob_spec))->te_ptext);
- objc_draw(cpbox, CPFILE, MAX_DEPTH, 0, 0, wdesk, hdesk);
- redelf:
- if ((ret = Fdelete(fixsrc))) {
- if ((ret == 0xFFFA) || (ret == 0xFFFE)) {
- /* seek error or drive not ready */
- Pterm(1);
- }
- if ((ret = err(cntdelf)) == 2) { /* retry */
- goto redelf;
- } else if (ret == 3) { /* abort */
- Pterm(1);
- }
- }
- updatnfile();
- backdir(fixsrc);
- srclen -= FILELEN; /* subtract the add lenth */
- }
- }
- } while (!Fsnext());
- } else {
- Pterm(1);
- }
- Fsetdta(saved);
- return OK;
- }
-
-
-
- /* recursively cp files and directories from the given path */
-
-
- docpfd()
-
- {
- char *saved;
- extern char *strcat();
- extern char *strcpy();
- DMABUFFER dumb;
- int ret, code;
-
- saved = (DMABUFFER *)Fgetdta();
- Fsetdta(&dumb);
- strcat(getall, fixsrc);
- if (!Fsfirst(fixsrc, 0xFF)) {
- do {
- if (dumb.d_fname[0] != '.') {
- if (S_IFDIR & dumb.d_fattr) {
- chksrcbuf(DIRLEN); /* check buf size */
- addfile(fixsrc, dumb.d_fname);/* add a dir to the path */
- strcat(bckslsh, fixsrc);
- chkdstbuf(DIRLEN); /* check buf size */
- strcat(dumb.d_fname, fixdst);
- unpack(dumb.d_fname);
- strcpy(dumb.d_fname,
- ((TEDINFO *)(cpbox[CPDIR].ob_spec))->te_ptext);
- strcpy("_", ((TEDINFO *)(cpbox[CPFILE].ob_spec))->te_ptext);
- objc_draw(cpbox, CPFILE, MAX_DEPTH, 0, 0, wdesk, hdesk);
- objc_draw(cpbox, CPDIR, MAX_DEPTH, 0, 0, wdesk, hdesk);
- /* update check the dir existing or not */
- if ((code = chkdir(dumb.d_fname, cpbox)) == QUIT) {
- Pterm(1);
- } else if (code == SKIP) {
- /* update the number of dir */
- updatndir();
- backdir(fixsrc);
- backdir(fixdst);
- srclen -= DIRLEN; /* subtract the add lenth */
- dstlen -= DIRLEN; /* subtract the add lenth */
- continue;
- }
-
- if ((editdir) || (code == OK)) {
- recreate:
- if (Dcreate(fixdst)) {
- if ((ret = err(cntcrtdr)) == 1) { /* skip */
- backdir(fixsrc);
- backdir(fixdst);
- srclen -= DIRLEN; /* subtract the add lenth */
- dstlen -= DIRLEN; /* subtract the add lenth */
- /* update the number of dir */
- updatndir();
- continue;
- } else if (ret == 2) { /* retry */
- goto recreate;
- } else { /* quit */
- Pterm(1);
- }
- }
- }
- /* update the number of dir */
- updatndir();
- strcat(bckslsh, fixdst);/* fixdst -> c:\d1\d2\ */
- docpfd(); /* do the recursion */
- backdir(fixsrc); /* back one dir */
- backdir(fixdst); /* back one dir */
- srclen -= DIRLEN; /* subtract the add lenth */
- dstlen -= DIRLEN; /* subtract the add lenth */
-
- } else {
- chksrcbuf(FILELEN); /* check buf size */
- addfile(fixsrc, dumb.d_fname);
- chkdstbuf(FILELEN); /* check buf size */
- addfile(fixdst, dumb.d_fname);
- updatedir(); /* update the folder */
- /* update the file box */
- unpack(dumb.d_fname);
- strcpy(dumb.d_fname,
- ((TEDINFO *)(cpbox[CPFILE].ob_spec))->te_ptext);
- objc_draw(cpbox, CPFILE, MAX_DEPTH, 0, 0, wdesk, hdesk);
- wrfile(fixsrc, fixdst); /* cp a file to the destination */
- backdir(fixsrc); /* back one dir */
- backdir(fixdst); /* back one dir */
- srclen -= FILELEN; /* subtract the add lenth */
- dstlen -= FILELEN; /* subtract the add lenth */
- }
- }
- } while (!Fsnext());
- } else {
- Pterm(1);
- }
- Fsetdta(saved);
- return OK;
- }
-
-
- /* recursively mv files or directoies from a given path */
-
-
- domvfd()
-
-
- {
- char *saved;
- extern char *strcat();
- extern char *strcpy();
- DMABUFFER dumb;
- int ret, code;
-
- saved = (DMABUFFER *)Fgetdta();
- Fsetdta(&dumb);
- strcat(getall, fixsrc);
- if (!Fsfirst(fixsrc, 0xFF)) {
- do {
- if (dumb.d_fname[0] != '.') {
- if (S_IFDIR & dumb.d_fattr) {
- chksrcbuf(DIRLEN); /* check buf size */
- addfile(fixsrc, dumb.d_fname); /* add a dir into the path */
- strcat(bckslsh, fixsrc);
- chkdstbuf(DIRLEN); /* check buf size */
- strcat(dumb.d_fname, fixdst);
- unpack(dumb.d_fname);
- strcpy(dumb.d_fname,
- ((TEDINFO *)(cpbox[CPDIR].ob_spec))->te_ptext);
- strcpy("_", ((TEDINFO *)(cpbox[CPFILE].ob_spec))->te_ptext);
- objc_draw(cpbox, CPFILE, MAX_DEPTH, 0, 0, wdesk, hdesk);
- objc_draw(cpbox, CPDIR, MAX_DEPTH, 0, 0, wdesk, hdesk);
- /* update check the dir existing or not */
- if ((code = chkdir(dumb.d_fname, cpbox)) == QUIT) {
- Pterm(1);
- } else if (code == SKIP) {
- backdir(fixsrc);
- backdir(fixdst);
- updatndir();
- srclen -= DIRLEN; /* subtract the add lenth */
- dstlen -= DIRLEN; /* subtract the add lenth */
- continue;
- }
-
- if ((editdir) || (code == OK)) {
- recrtd:
- if (Dcreate(fixdst)) {
- if ((ret = err(cntcrtdr)) == 1) { /* skip */
- backdir(fixsrc);
- backdir(fixdst);
- updatndir();
- srclen -= DIRLEN; /* subtract the add lenth */
- dstlen -= DIRLEN; /* subtract the add lenth */
- continue;
- } else if (ret == 2) { /* retry */
- goto recrtd;
- } else { /* quit */
- Pterm(1);
- }
- }
- }
- updatndir();
- strcat(bckslsh, fixdst);
- domvfd(); /* do the recursion */
- rmstarb(fixsrc); /* after call, -> c:\d1\ */
- remvd:
- if (Ddelete(fixsrc)) { /* delete a dir */
- if ((ret = err(cntdeld)) == 2) { /* retry */
- goto remvd;
- } else if (ret == 3) { /* abort */
- Pterm(1);
- }
- }
- backdir(fixsrc); /* back one dir */
- backdir(fixdst); /* back one dir */
- srclen -= DIRLEN; /* subtract the add lenth */
- dstlen -= DIRLEN; /* subtract the add lenth */
-
- } else {
- chksrcbuf(FILELEN); /* check buf size */
- addfile(fixsrc, dumb.d_fname);
- chkdstbuf(FILELEN); /* check buf size */
- addfile(fixdst, dumb.d_fname);
- updatedir();
- /* update the file */
- unpack(dumb.d_fname);
- strcpy(dumb.d_fname,
- ((TEDINFO *)(cpbox[CPFILE].ob_spec))->te_ptext);
- objc_draw(cpbox, CPFILE, MAX_DEPTH, 0, 0, wdesk, hdesk);
- wrfile(fixsrc, fixdst); /* cp one file to destination */
- /* rm the file from source */
- remvf:
- if (Fdelete(fixsrc)) {
- if ((ret = err(cntdelf)) == 2) { /* retry */
- goto remvf;
- } else if (ret == 3) { /* abort */
- Pterm(1);
- }
- }
- backdir(fixsrc); /* back one dir */
- backdir(fixdst); /* back one dir */
- srclen -= FILELEN; /* subtract the add lenth */
- dstlen -= FILELEN; /* subtract the add lenth */
- }
- }
- } while (!Fsnext());
- } else {
- Pterm(1);
- }
- Fsetdta(saved);
- return OK;
- }
-
-
- /* set the right drive and call the recursive routine to do the counting */
-
-
- count(s)
-
- char *s;
-
- {
- char *buf, *tmp;
- int drv;
-
- buf = (char *)Malloc((long)sizeof(s));
- strcpy(s, buf);
- tmp = buf;
- drv = *buf;
- if (drv >= 'a') {
- drv -= 'a';
- } else {
- drv -= 'A';
- }
- Dsetdrv(drv);
- while (*tmp) {
- tmp++;
- }
- if (*(tmp-1) == '*') {
- *(tmp-4) = '\0';
- while(*buf != '\\') {
- buf++;
- }
- if (Dsetpath(buf)) {
- Pterm(1);
- }
- countrec();
- } else {
- numfiles = 1;
- }
- Mfree(buf);
- return OK;
- }
-
-
- /* counte the file and directory recursivly */
-
- countrec()
-
-
- {
- char *saved;
- DMABUFFER dumb;
-
- saved = (DMABUFFER *)Fgetdta();
- Fsetdta(&dumb);
- if (!Fsfirst(".\\*.*", 0xFF)) {
- do {
- if (dumb.d_fname[0] != '.') {
- if (S_IFDIR & dumb.d_fattr) {
- /* setpath to one more down */
- if (Dsetpath(dumb.d_fname)) {
- Pterm(1);
- }
- numdirs++;
- countrec(); /* to the recursion */
- /* setpath to one back */
- if (Dsetpath(".\\..")) {
- Pterm(1);
- }
- } else {
- numfiles++;
- tolsize += dumb.d_fsize;
- }
- }
- } while (!Fsnext());
- }
- Fsetdta(saved);
- return OK;
- }
-
-
- /* Copy the file from the s to d */
-
- wrfile(s, d)
-
- char *s, *d;
-
- {
- int code, ret, status;
- int inhand;
- int outhand;
- DMABUFFER *mydta;
- char *buffer, *saved;
- long copysize;
-
- open:
-
- if ((inhand = Fopen(s, 0)) < 0) {
- if ((inhand == 0xFFFA) || (inhand == 0xFFFE)) {/* seek error or */
- Pterm(1); /* drive not ready */
- }
- if ((ret = err(cntopen)) == 1) { /* skip */
- return OK;
- } else if (ret == 2) { /* retry */
- goto open;
- } else { /* abort */
- Pterm(1);
- }
- }
-
- saved = (DMABUFFER *)Fgetdta();
- Fsetdta(mydta=(DMABUFFER *)Malloc((long)sizeof(DMABUFFER)));
-
- if (Fsfirst(s, 0xF7)) {
- if (err(rderror) == 1) { /* skip */
- goto doup;
- } else { /* abort */
- Fclose(inhand);
- Mfree(mydta);
- Pterm(1);
- }
- }
-
- /* check the created file existing or not */
- if ((code = chkfile(d, cpbox)) == QUIT) {
- Fclose(inhand);
- Mfree(mydta);
- Pterm(1);
- } else if (code == SKIP) {
- goto doup;
- }
-
- status = mydta->d_fattr & 7;
- create:
-
- if ((outhand = Fcreate(d, status)) < 0) {
- if ((ret = err(cntcrtfl)) == 1) { /* skip */
- goto doup;
- } else if (ret == 2) { /* retry */
- goto create;
- } else { /* abort */
- Fclose(inhand);
- Mfree(mydta);
- Pterm(1);
- }
- }
-
- buffer = (char *)Malloc(8192L);
- copysize = mydta->d_fsize;
- while (copysize > 8192) {
- if (Fread(inhand, 8192L, buffer) < 0) {
- if (err(rderror) == 1) { /* skip */
- Fdelete(d);
- goto okup;
- } else { /* abort */
- goto quitup;
- }
- }
-
- if ((status = Fwrite(outhand, 8192L, buffer)) < 0) {
- if (err(wrerror) == 1) { /* skip */
- Fdelete(d);
- goto okup;
- } else { /* abort */
- goto quitup;
- }
- }
- /* check if there are sufficent memory */
- if (status != 8192) { /* not sufficent memory ??*/
- err(nomemory);
- goto quitup;
- }
- copysize -= 8192;
- }
-
- if (copysize > 0) {
- if (Fread(inhand, copysize, buffer) < 0) {
- if (err(rderror) == 1) { /* skip */
- Fdelete(d);
- goto okup;
- } else { /* abort */
- goto quitup;
- }
- }
-
- if ((status = Fwrite(outhand, copysize, buffer)) < 0) {
- if (err(wrerror) == 1) { /* skip */
- Fdelete(d);
- goto okup;
- } else { /* abort */
- goto quitup;
- }
- }
- /* check if there are sufficent memory */
- if (status != copysize) {
- /* update not sufficent memory ??*/
- err(nomemory);
- goto quitup;
- }
- }
-
- okup:
- Fclose(outhand);
- Mfree(buffer);
-
- doup:
-
- Fclose(inhand);
- Mfree(mydta);
- Fsetdta(saved);
- updatnfile();
- return(OK);
-
- quitup:
-
- Fclose(inhand);
- Fclose(outhand);
- Fdelete(d);
- Mfree(buffer);
- Mfree(mydta);
- Fsetdta(saved);
- Pterm(1);
- }
-
-
- /* Copy s and d into fixsrc and fixdst. Also check it is one file
- copy or files and directories copy */
-
- getinfo(s, d, code)
-
- char *s, *d;
- int code;
-
- {
-
- int sdir=0, ddir=0;
- char *ptrs, *ptrd;
- extern char *strcat();
-
- ptrs = s;
- ptrd = d;
- srclen = strlen(s) + 5; /* 1 for null and 4 for \*.* */
- dstlen = strlen(d) + 5;
- srcbuf = 500;
- dstbuf = 500;
- while (srclen > srcbuf) {
- srcbuf *= 2;
- }
- while (dstlen > dstbuf) {
- dstbuf *= 2;
- }
- fixsrc = (char *)Malloc((long)srcbuf);
- fixdst = (char *)Malloc((long)dstbuf);
- mystrcp(fixsrc, &ptrs); /* ptrs -> c:\d1\*.* or c:\d1\f; */
- /*after ptrs->*.* or f */
- if (*ptrs == '*') { /* source are dir */
- sdir = 1;
- }
-
- if (code) { /* do directories or files cp or mv */
- mystrcp(fixdst, &ptrd); /* ptrd -> c:\d1\*.* or c:\d1\f; */
- /*after ptrd->*.* or f */
- if (*ptrd == '*') { /* target are dir */
- ddir = 1;
- }
- if ((sdir) && (ddir)) { /* dir to dir */
- return (DTOD);
- } else if ((!sdir) && (!ddir)) { /* file to file */
- return (FTOF);
- } else { /* one file to dir */
- chkdstbuf(FILELEN); /* check buf size */
- strcat(ptrs, fixdst);
- return (FTOD);
- }
- } else { /* else do directories or files rm */
- if (sdir) {
- return(DTOD);
- } else {
- return(FTOD);
- }
- }
- }
-
-
-
-
- /* this call will copy the string inside the s to
- * the fixs. For example,
- * if s -> c:\d1\d2\*.* or c:\d1\d2\f, after the call,
- * fixs -> \d1\d2\ or \d1\d2\f ; s -> *.* or f */
-
- mystrcp(fixs, s)
-
- char *fixs;
- char **s;
-
- {
- char *ptr;
-
- ptr = *s;
- while ((*ptr) && (*ptr != '*')) {
- *fixs++ = *ptr++;
- }
- *fixs = '\0';
- if (*ptr == '*') {
- *s = ptr;
- } else {
- while (*ptr != '\\') {
- ptr--;
- }
- *s = ++ptr;
- }
-
- }
-
-
- /* check the size of source buffer */
-
- chksrcbuf(addlen)
-
- int addlen;
-
- {
-
- char *ptr;
-
- if ((srclen + addlen) > srcbuf) {
- srcbuf *= 2;
- ptr = fixsrc;
- fixsrc = (char *)Malloc((long)srcbuf);
- strcpy(ptr, fixsrc);
- Mfree(ptr);
- }
- srclen += addlen;
- }
-
-
- /* check the size of target buffer */
-
- chkdstbuf(addlen)
-
- int addlen;
-
- {
-
- char *ptr;
-
- if ((dstlen + addlen) > dstbuf) {
- dstbuf *= 2;
- ptr = fixdst;
- fixdst = (char *)Malloc((long)dstbuf);
- strcpy(ptr, fixdst);
- Mfree(ptr);
- }
- dstlen += addlen;
- }
-
-
- /* s -> c:\d1\d2\*.* or c:\d1\d2\, obj -> f; after the call
- * s -> c:\d1\d2\f */
-
- addfile(s, obj)
-
- char *s, *obj;
-
- {
- char *ptr;
- extern char *strcat();
-
- ptr = s;
- while (*ptr) {
- ptr++;
- }
- if (*(ptr-1) == '*') {
- *(ptr-3) = '\0';
- }
- strcat(obj, s);
- }
-
-
-
- /* src -> c:\d1\d2\*.* or -> c:\d3\d5\, after the call,
- * src -> c:\d1\d2 or -> c:\d3\d5 */
-
- rmstarb(src)
-
- char *src;
-
- {
-
- char *ptr;
-
- ptr = src;
- while (*ptr) {
- ptr++;
- }
- if (*(ptr-1) == '\\') { /* src -> c:\d3\d5\ */
- *(ptr-1) = '\0';
- } else { /* src -> c:\d3\d5\*.* */
- *(ptr-4) = '\0';
- }
- }
-
-
-
-
- /* str -> c:\d1\d2\*.* or c:\d1\d2\ or c:\d2\d4; after the call,
- * str -> c:\d1\*.* or c:\d1\ or c:\d2\ */
-
- backdir(str)
-
- char *str;
-
- {
- char *ptr;
-
- ptr = str;
- while (*ptr) {
- ptr++;
- }
- if (*(ptr-1) == '*') { /* str -> c:\d1\d2\*.* */
- ptr -= 5; /* ptr -> 2 of c:\d1\d2 */
- while (*ptr != '\\') {
- ptr--;
- }
- *ptr++;
- *ptr++ = '*';
- *ptr++ = '.';
- *ptr++ = '*';
- *ptr = '\0';
- } else if (*(ptr-1) == '\\') { /* str -> c:\d1\d2\ */
- ptr -= 2;
- while (*ptr != '\\') {
- ptr--;
- }
- *(ptr + 1) = '\0';
- } else { /* str -> c:\d1\d2 */
- while (*ptr != '\\') {
- ptr--;
- }
- *(ptr + 1) = '\0';
- }
- }
-
-
-
-
- /* check the directory is exist or not */
-
-
- chkdir(dir, prvobjtree)
-
- char *dir;
- OBJECT *prvobjtree;
-
- {
-
- int ret, but, drv;
- char *buf;
-
- buf = fixdst;
- editdir = 0;
-
- drv = *buf;
- if (drv >= 'a') {
- drv -= 'a';
- } else {
- drv -= 'A';
- }
- Dsetdrv(drv);
- buf += 2; /* set buf -> \d1\x */
- if (!(ret = Dsetpath(buf))) { /* direcory exist */
- /* update name conflict box */
- strcpy(dir, ((TEDINFO *)(samename[FNAME].ob_spec))->te_ptext);
- strcpy(dir, ((TEDINFO *)(samename[EDFNAME].ob_spec))->te_ptext);
- samename[COPY].ob_state = NORMAL;
- samename[SKIP].ob_state = NORMAL;
- samename[QUIT].ob_state = NORMAL;
- graf_mouse(ARROW, 0x0L);
- dsplymsg(samename);
- switch((but = form_do(samename, 0))) {
- case COPY:
- if (!strcmp(((TEDINFO *)
- (samename[EDFNAME].ob_spec))->te_ptext, dir)) {
- strcpy(
- ((TEDINFO *)(samename[EDFNAME].ob_spec))->te_ptext,dir);
- strcpy(dir,
- ((TEDINFO *)(cpbox[CPDIR].ob_spec))->te_ptext);
- dopack(dir);
- /* user edit the new name */
- changelast(fixdst, dir);
- editdir = 1;
- }
- break;
- case SKIP: break;
- case QUIT: break;
- }
- graf_mouse(HOURGLASS, 0x0L);
- dsplymsg(prvobjtree);
- return but;
- } else if (ret == 0xFFDE) { /* path not found */
- return OK;
- } else {
- Pterm(1);
- }
-
- }
-
-
-
-
- /* check the file is exist or not */
-
- chkfile(d, prvobjtree)
-
- char *d;
- OBJECT *prvobjtree;
-
- {
-
- int ret, but;
-
- if ((ret = Fopen(d, 0)) >= 0) { /* file exist */
- /* update name conflict box */
- getlastpath(filestr, d);
- unpack(filestr);
- strcpy(filestr, ((TEDINFO *)(samename[FNAME].ob_spec))->te_ptext);
- strcpy(filestr, ((TEDINFO *)(samename[EDFNAME].ob_spec))->te_ptext);
- samename[COPY].ob_state = NORMAL;
- samename[SKIP].ob_state = NORMAL;
- samename[QUIT].ob_state = NORMAL;
- graf_mouse(ARROW, 0x0L);
- dsplymsg(samename);
- switch((but = form_do(samename, 0))) {
- case COPY:
- if (!strcmp(filestr,
- ((TEDINFO *)(samename[EDFNAME].ob_spec))->te_ptext)) {
- /* user edit the new name */
- strcpy(
- ((TEDINFO *)(samename[EDFNAME].ob_spec))->te_ptext,
- filestr);
- strcpy(filestr,
- ((TEDINFO *)(cpbox[CPFILE].ob_spec))->te_ptext);
- dopack(filestr);
- changelast(d, filestr);
- }
- break;
- case SKIP: break;
- case QUIT: break;
- }
- graf_mouse(HOURGLASS, 0x0L);
- dsplymsg(prvobjtree);
- return but;
- } else if (ret == 0xFFDF) { /* file not found */
- return OK;
- } else {
- Pterm(1);
- }
-
- }
-
-
- /* if buf -> unpack.rsc, after the call, buf -> unpack rsc. */
-
- unpack(buf)
-
- char *buf;
-
- {
- int i=0;
- char *ptr;
-
- ptr = buf;
- while ((*ptr != '.') && (*ptr)) {
- ptr++;
- i++;
- }
- if ((*ptr == '.') && (i != 8)) { /* src -> abcx.x */
- *(buf+11) = '\0';
- *(buf+10) = *(buf+i+3);
- *(buf+9) = *(buf+i+2);
- *(buf+8) = *(buf+i+1);
- for (; i < 8; i++) {
- *(buf+i) = ' ';
- }
- } else if ((i == 8) && (*ptr == '.')) { /* src -> abcdefgh.x */
- *(buf+8) = *(buf+9);
- *(buf+9) = *(buf+10);
- *(buf+10) = *(buf+11);
- *(buf+11) = '\0';
- }
-
- }
-
-
-
-
- /* src -> file rsc, after the call;
- src -> file.rsc */
-
- dopack(src)
-
- char *src;
-
- {
- char *ptr;
- int i=0;
-
- ptr = src;
- while ((*ptr != ' ') && (*ptr)) {
- ptr++;
- i++;
- }
- if (*ptr == ' ') {
- *ptr++ = '.';
- *ptr++ = *(src+8);
- *ptr++ = *(src+9);
- *ptr++ = *(src+10);
- *ptr = '\0';
- } else if (i > 8) {
- *(src+12) = '\0';
- *(src+11) = *(src+10);
- *(src+10) = *(src+9);
- *(src+9) = *(src+8);
- *(src+8) = '.';
- }
- }
-
-
- /* d -> c:\d1\d2\f1, name -> f2, after the call, d-> c:\d1\d2\f2 */
-
- changelast(d, name)
-
- char *d, *name;
-
- {
- backdir(d);
- strcat(name, d);
- }
-
-
- /* src -> c:\d1\d2\ or c:\d1\ or c:\; or
- src -> c:\d1\d2\f or c:\d1\f or c:\f; after the call,
- buf -> d2 or d1 or c:\ */
-
-
- getndlast(buf, src)
-
- char *buf, *src;
-
- {
- char *tmp;
-
- tmp = src;
- while (*tmp) {
- tmp++;
- }
- tmp--;
- if (*tmp == '\\') { /* src -> c:\d1\d2\ or c:\d1\ or c:\ */
- if (*(tmp-1) == ':') { /* src -> c:\ */
- while ((*buf++ = *src++) != '\\') {
- ;
- }
- *buf = '\0';
- } else {
- tmp--;
- while (*tmp != '\\') {
- tmp--;
- }
- tmp++;
- while ((*buf = *tmp++) != '\\') {
- buf++;
- }
- *buf = '\0';
- }
- } else { /* src -> c:\d1\d2\f or c:\d1\f or c:\f */
- while (*tmp-- != '\\') {
- ;
- }
- if (*tmp == ':') { /* src -> c:\f */
- while ((*buf++ = *src++) != '\\') {
- ;
- }
- *buf = '\0';
- } else { /* src -> c:\d1\d2\f or c:\d1\f */
- while (*tmp != '\\') {
- tmp--;
- }
- tmp++;
- while ((*buf = *tmp++) != '\\') {
- buf++;
- }
- *buf = '\0';
- }
- }
- }
-
-
-
- /* src -> c:\f or c:\d1\f or c:\f\, after the call,
- buf -> f */
-
- getlastpath(buf, src)
-
- char *buf, *src;
-
- {
- char *tmp;
-
- tmp = src;
- while (*tmp) {
- tmp++;
- }
- if (*(tmp-1) == '\\') {
- *(tmp-1) = '\0';
- }
- while (*tmp != '\\') {
- tmp--;
- }
- tmp++;
- strcpy(tmp, buf);
- }
-
-
-
- /* draw the cp or mv or rm dialog box */
-
- showbox(title)
-
- char *title;
-
- {
-
- itoa(numdirs, ((TEDINFO *)(cpbox[NUMDIR].ob_spec))->te_ptext);
- itoa(numfiles, ((TEDINFO *)(cpbox[NUMFILE].ob_spec))->te_ptext);
- ((TEDINFO *)(cpbox[TITLE].ob_spec))->te_ptext = title;
- graf_mouse(ARROW, 0x0L);
- cpbox[HIDEBOX].ob_flags = HIDETREE;
- dsplymsg(cpbox);
- if (form_do(cpbox, 0) == CANCEL) {
- return CANCEL;
- }
- cpbox[HIDEBOX].ob_flags = NORMAL;
- graf_mouse(HOURGLASS, 0x0L);
- return OK;
-
- }
-
- /* up date the number of file in the dialog box */
-
- updatnfile()
-
- {
-
- itoa(--numfiles, ((TEDINFO *)(cpbox[NUMFILE].ob_spec))->te_ptext);
- objc_draw(cpbox, NUMFILE, MAX_DEPTH, 0, 0, wdesk, hdesk);
- }
-
- /* up date the number of directory in the dialog box */
-
- updatndir()
-
- {
-
- itoa(--numdirs, ((TEDINFO *)(cpbox[NUMDIR].ob_spec))->te_ptext);
- objc_draw(cpbox, NUMDIR, MAX_DEPTH, 0, 0, wdesk, hdesk);
- }
-
-
- /* up date the directory in the dialog box */
-
-
- updatedir()
-
- {
- getndlast(filestr, fixdst) ;
- unpack(filestr);
- strcpy(filestr, ((TEDINFO *)(cpbox[CPDIR].ob_spec))->te_ptext);
- objc_draw(cpbox, CPDIR, MAX_DEPTH, 0, 0, wdesk, hdesk);
- }
-
-
-
- /* up date the file in the dialog box */
-
- updatefile()
-
- {
- getlastpath(filestr, fixdst) ;
- unpack(filestr);
- strcpy(filestr, ((TEDINFO *)(cpbox[CPFILE].ob_spec))->te_ptext);
- objc_draw(cpbox, CPFILE, MAX_DEPTH, 0, 0, wdesk, hdesk);
-
- }
-
-
-
- /* convert the integer to the ascci */
-
- itoa(n, s)
-
- char *s;
- long n;
-
- {
- int i=0, j=0;
- char tmp[10];
-
- do {
- tmp[i++] = n % 10 + '0';
- } while ((n /= 10) > 0);
- for (; i > 0; ) {
- *s++ = tmp[--i];
- j++;
- }
- for(; j < 4; j++) {
- *s++ = ' ';
- }
- }
-
-
-
- /* get the dialog box string */
-
- getalladdr()
- {
-
- /* Error messages */
- if (!rsrc_gaddr(5, CNTOPEN, &cntopen)
- || !rsrc_gaddr(5, CNTCRTDR, &cntcrtdr)
- || !rsrc_gaddr(5, CNTCRTFL, &cntcrtfl)
- || !rsrc_gaddr(5, WRERROR, &wrerror)
- || !rsrc_gaddr(5, NOMEMORY, &nomemory)
- || !rsrc_gaddr(5, CNTDELF, &cntdelf)
- || !rsrc_gaddr(5, CNTDELD, &cntdeld)
- || !rsrc_gaddr(5, RDERROR, &rderror))
- return ERROR;
-
-
- if (!rsrc_gaddr(0, CPBOX, &cpbox)
- || !rsrc_gaddr(0, SAMENAME, &samename)) {
- return ERROR;
- }
- return OK;
- }
-
-
-
- /*
- * Display a dialogue box on the screen.
- * Input:
- * tree - object tree for dialogue box to be displayed.
- * Output:
- * formw, formh, sx, sy, lx, ly - dimensions of box.
- */
- dsplymsg(tree)
- OBJECT *tree;
- {
- form_center(tree,&lx, &ly, &formw, &formh);
- form_dial(1, 0, 0, 0, 0, lx, ly, formw, formh);
- objc_draw(tree, 0, MAX_DEPTH, 0, 0, wdesk, hdesk);
- }
-
-
- /*
- * Erase a dialogue box from the screen.
- * Input:
- * formw, formh, sx, sy, lx, ly - dimensions of box.
- */
- erasemsg()
- {
- form_dial(3, 0, 0, 0, 0, lx, ly, formw, formh);
- }
-
-
-
-
- err(s)
-
- char *s;
-
- {
- int ret;
-
- graf_mouse(ARROW, 0x0L);
- ret = form_alert(1, s);
- graf_mouse(HOURGLASS, 0x0L);
- return (ret);
- }
-
-
-