home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / canada-remote-systems / cpower / globcp.arc / GLOB.C < prev    next >
Text File  |  2019-04-13  |  2KB  |  84 lines

  1. /*
  2.  * ├OPYRIGHT (├) ┴DRIAN ╨EPPER, 1989
  3.  *
  4.  *  ┬UT ╔ (┴DRIAN ╨EPPER) CONSIDER THIS
  5.  * MATERIAL TO BE IN THE ╨UBLIC ─OMAIN.
  6.  */
  7. /*
  8.  * GLOB.C - EXPAND WILDCARD FILENAMES
  9.  */
  10. #INCLUDE <STDIO.H>
  11. /*
  12.  * SELECT - DOUBLE CHECK NAMES MATCHED
  13.  *   BY 1541(ETC.) DOS
  14.  */
  15. CHAR *GLOBAFTER = ╬╒╠╠;
  16. CHAR *SAVEPAT = ╬╒╠╠;
  17. STATIC SELECT(NAME)
  18. CHAR *NAME;
  19.   IF (GLOBAFTER)
  20.     IF (WILDMATCH(GLOBAFTER, NAME))
  21.       GLOBAFTER = ╬╒╠╠;
  22.     ELSE
  23.       RETURN 0;
  24.   RETURN WILDMATCH(SAVEPAT, NAME);
  25.  
  26. /*
  27.  * GLOB - EXECUTE GIVEN FUNCTION FOR EACH
  28.  *   FILE ON THE WORK DEVICE MATCHING
  29.  *   THE GIVEN PATTERN
  30.  */
  31. GLOB(PAT,FUNC)  /* RETURN QUIT/CONTINUE STATUS */
  32. CHAR *PAT;       /* FILENAME PATTERN TO EXPAND */
  33. INT (*FUNC)();   /* FUNCTION TO CALL ON MATCHES */
  34.   INT SELECT();
  35.   EXTERN INT SPRINTF();
  36.   EXTERN CHAR *MALLOC();
  37.   CHAR *DISKPAT;
  38.   CHAR *P;
  39.   CHAR *CLASS;       /* FLAG IF CHAR CLASS ([XYZ]) */
  40.   UNSIGNED INBASIC;  /* FLAG IF WE ARE LINKED AS BASIC PROGRAM */
  41.   UNSIGNED DEV;
  42.  
  43.   DISKPAT = STRDUP(PAT);
  44.   IF (GLOBAFTER)  /* MUST CHECK ALL PATTERNS */
  45.     DISKPAT = STRDUP("*");
  46.   /* FIRST TURN ANY CLASS AND SUFFIX TO '*' */
  47.   CLASS = INDEX(DISKPAT, '[');
  48.   IF (CLASS)
  49.     STRCPY(CLASS,"*");
  50.   /* ALSO TURN EVERYTHING AFTER '*' TO STAR */
  51.   /* WILL ALWAYS SUCCEED IF WE HAD '[' ABOVE */
  52.   CLASS = INDEX(DISKPAT, '*');
  53.   IF (CLASS)
  54.     STRCPY(CLASS,"*");
  55. #DEFINE WRKDEV (*(CHAR *)0X17FC)
  56.                    /* DEVICE SET BY SHELL WORK COMMAND */
  57. #DEFINE KRNDEV (*(CHAR *)0XBA)
  58.                    /* DEVICE LAST USED FOR KERNAL ╧╨┼╬ */
  59.   DEV = WRKDEV;
  60.   /* ┴╙╙┼╥╘: SPRINTF NEEDED BY DEVGLOB */
  61.   INBASIC = &SPRINTF > 0X880;
  62.   IF (INBASIC) DEV = KRNDEV;
  63.   /* MAKE PAT ACCESSIBLE TO SELECT */
  64.   IF (PAT[0] == ':')  /* FILE NAMES WON'T CONTAIN DRIVE */
  65.     P = PAT+1;
  66.   ELSE IF (PAT[1] == ':')
  67.     P = PAT+2;
  68.   ELSE
  69.     P = PAT;
  70.   SAVEPAT = STRDUP(P);
  71.   /* REMOVE =TYP FROM END OF PATTERN */
  72.   /* SINCE IT WON'T APPEAR EITHER */
  73.   P = RINDEX(SAVEPAT, '=');
  74.   IF (P >= SAVEPAT+STRLEN(SAVEPAT)-4 ) █
  75.     IF (CLASS)  /* MUST ADD BACK TO DISK PATTERN */
  76.       STRCAT(DISKPAT,P);
  77.     *P = '\0';
  78.   ▌
  79.   RETURN DEVGLOB(DEV, DISKPAT, FUNC, &SELECT);
  80.