home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 March / VPR9703A.ISO / VPR_DATA / DOGA / SOURCES / REND.LZH / PIC1600 / SEQUENCE.C < prev    next >
C/C++ Source or Header  |  1995-12-27  |  3KB  |  132 lines

  1. #include    <stdio.h>
  2. #include    <stdlib.h>
  3. #include    <string.h>
  4. #include    <ctype.h>
  5. #include    "piclib.h"
  6.  
  7. int    PicSequence_isAnim(PicSequence *seq)
  8. {
  9.     if (seq->start != 0 && seq->number != 0) {
  10.         return TRUE;
  11.     }
  12.     return FALSE;
  13. }
  14.  
  15. int PicSequence_forceAnim(PicSequence *seq)
  16. {
  17.     if (seq->start == 0 || seq->number == 0) {
  18.         if (seq->number > 0) {
  19.             seq->start = seq->number;
  20.             seq->end = 999;
  21.         } else {
  22.             seq->start = seq->number = 1;
  23.             seq->end = 999;
  24.         }
  25.     }
  26.     return TRUE;
  27. }
  28.  
  29. /*
  30. Moving
  31.     test001
  32.     test[5-10].rgb
  33. Stop
  34.     tmp
  35.     aaa.pic
  36.     test001.pic
  37. */
  38.  
  39. int PicSequence_set(PicSequence *seq, char *filename)
  40. {
  41.     char    *p, *name, *ext, *brace;
  42.     int i;
  43.     strcpy(seq->body, filename);
  44.     if ((name = strrchr(seq->body, '\\')) != NULL) {
  45.         name++;
  46.     } else if ((name = strrchr(seq->body, '/')) != NULL) {
  47.         name++;
  48.     } else {
  49.         name = seq->body;
  50.     }
  51.     ext = strchr(name, '.');
  52.     brace = strchr(name, '[');
  53.     i = strlen(name);
  54.     if (ext == NULL) {
  55.         strcpy(seq->ext, "PIC");
  56.     } else {
  57.         strcpy(seq->ext, ext+1);
  58.         *ext = '\0';
  59.     }
  60.     if (brace != NULL) {
  61.         seq->start = atoi(brace+1);
  62.         if (seq->start == 0) {
  63.             seq->start = 1;
  64.         }
  65.         seq->number = seq->start;
  66.         if ((p = strchr(brace, '-')) != NULL) {
  67.             seq->end = atoi(p+1);
  68.             if (seq->end == 0) {
  69.                 seq->end = 999;
  70.             }
  71.         } else {
  72.             seq->end = 999;
  73.         }
  74.         *brace = '\0';
  75.     } else if (i > 3 && isdigit(name[i-3]) && isdigit(name[i-2]) && isdigit(name[i-1])) {
  76.         seq->number = (name[i-3]-'0') * 100 + (name[i-2]-'0') * 10 + (name[i-1]-'0');
  77.         name[i-3] = '\0';
  78.         if (ext == NULL) {
  79.             seq->start = seq->number;
  80.             seq->end = 999;
  81.         } else {
  82.             seq->start = seq->end = 0;
  83.         }
  84.     } else {
  85.         seq->number = 0;
  86.         if (ext == NULL) {
  87.             seq->start = 1;
  88.             seq->end = 999;
  89.         } else {
  90.             seq->start = seq->end = 0;
  91.         }
  92.     }
  93.     return TRUE;
  94. }
  95.  
  96. int PicSequence_next(PicSequence *seq)
  97. {
  98.     if (seq->start > 0 && seq->number > 0) {
  99.         if (seq->start <= seq->end) {
  100.             seq->number++;
  101.         } else {
  102.             seq->number--;
  103.         }
  104.         return TRUE;
  105.     }
  106.     return FALSE;
  107. }
  108.  
  109. int PicSequence_prev(PicSequence *seq)
  110. {
  111.     if (seq->start > 0 && seq->number > 0) {
  112.         if (seq->start <= seq->end) {
  113.             seq->number--;
  114.         } else {
  115.             seq->number++;
  116.         }
  117.         return TRUE;
  118.     }
  119.     return FALSE;
  120. }
  121.  
  122. int  PicSequence_get(PicSequence *seq, char *filename)
  123. {
  124.     if (seq->number > 0) {
  125.         sprintf(filename, "%s%03d.%s", seq->body, seq->number, seq->ext);
  126.     } else {
  127.         sprintf(filename, "%s.%s", seq->body, seq->ext);
  128.     }
  129.     return TRUE;
  130. }
  131.  
  132.