Subversion Repositories SvarDOS

Rev

Rev 1024 | Rev 1055 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1024 Rev 1054
Line 771... Line 771...
771
  TRYAGAIN:
771
  TRYAGAIN:
772
 
772
 
773
  /* dta_inited: FindFirst() or FindNext()? */
773
  /* dta_inited: FindFirst() or FindNext()? */
774
  if (forloop->dta_inited == 0) {
774
  if (forloop->dta_inited == 0) {
775
 
775
 
776
    /* copy next awaiting pattern to BUFFER */
776
    /* copy next awaiting pattern to BUFFER (and skip all delimieters until
-
 
777
     * next pattern or end of list) */
-
 
778
    t = 0;
777
    for (i = 0;; i++) {
779
    for (i = 0;; i++) {
778
      BUFFER[i] = forloop->cmd[forloop->nextpat + i];
780
      BUFFER[i] = forloop->cmd[forloop->nextpat + i];
-
 
781
      /* look for a delimiter - the list of valid delimiters has been
-
 
782
       * researched and kindly shared by Robert Riebisch via the ticket
779
      /* end of patterns list */
783
       * at https://osdn.net/projects/svardos/ticket/44058 */
780
      if (BUFFER[i] == 0) break;
784
      switch (BUFFER[i]) {
781
      /* space found */
785
        case ' ':
-
 
786
        case '\t':
-
 
787
        case ';':
-
 
788
        case ',':
-
 
789
        case '/':
-
 
790
        case '=':
782
      if (BUFFER[i] == ' ') {
791
          BUFFER[i] = 0;
-
 
792
          t = 1;
-
 
793
          break;
-
 
794
        case 0: /* end of patterns list */
783
        BUFFER[i] = 0;
795
          t = 2;
-
 
796
          break;
-
 
797
        default: /* quit if I got a pattern already */
-
 
798
          if (t == 1) t = 2;
784
        break;
799
          break;
785
      }
800
      }
-
 
801
      if (t == 2) break;
786
    }
802
    }
787
 
803
 
788
    if (i == 0) return(-1);
804
    if (i == 0) return(-1);
789
 
805
 
790
    /* remember position of current pattern */
806
    /* remember position of current pattern */
791
    forloop->curpat = forloop->nextpat;
807
    forloop->curpat = forloop->nextpat;
792
 
808
 
793
    /* move nextpat forward to next pattern */
809
    /* move nextpat forward to next pattern */
794
    i += forloop->nextpat;
810
    i += forloop->nextpat;
795
    while (forloop->cmd[i] == ' ') i++;
-
 
796
    forloop->nextpat = i;
811
    forloop->nextpat = i;
797
 
812
 
798
    /* FOR in MSDOS 6 includes hidden and system files, but not directories nor volumes */
813
    /* FOR in MSDOS 6 includes hidden and system files, but not directories nor volumes */
799
    if (findfirst(dta, BUFFER, DOS_ATTR_RO | DOS_ATTR_HID | DOS_ATTR_SYS | DOS_ATTR_ARC) != 0) {
814
    if (findfirst(dta, BUFFER, DOS_ATTR_RO | DOS_ATTR_HID | DOS_ATTR_SYS | DOS_ATTR_ARC) != 0) {
800
      goto TRYAGAIN;
815
      goto TRYAGAIN;