home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 March / VPR9703A.ISO / VPR_DATA / DOGA / SOURCES / REND.LZH / REND / COMMAND.C < prev    next >
C/C++ Source or Header  |  1995-11-07  |  4KB  |  170 lines

  1. #ifndef WINDOWS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <ctype.h>
  6. #include "reader.h"
  7. #include "glib.h"
  8. #include "rend.h"
  9.  
  10. static int getnumber(char **p, int now)
  11. {
  12.     int number;
  13.     number = atoi(*p);
  14.     for (; *(*p); (*p)++) {
  15.         if (*(*p) == ')') {
  16.             if (now == 0) {
  17.                 return 0;
  18.             } else {
  19.                 return now + number;
  20.             }
  21.         }
  22.     }
  23.     return 0;
  24. }
  25.  
  26. /*
  27.     $F        now frame number
  28.     $F(n)    now frame number + n
  29.     $P        now pic file
  30.     $PB        now pic body
  31.     $PN        now pic number
  32.     $PN(n)    now pic number + n
  33.     $B        now back file
  34.     $BB        now back body
  35.     $BN        now back number
  36.     $BN(n)    now back number + n
  37.  
  38. */
  39.  
  40. void commandexec(char *commandline, int framenumber, char *picfile, int picnumber, char *backfile, int backnumber)
  41. {
  42.     static char str[256];
  43.     char *p;
  44.     int number;
  45.     p = str;
  46.     for (; *commandline; commandline++) {
  47.         if (*commandline != '$' && *commandline != '!') {
  48.             *p++ = *commandline;
  49.         } else {
  50.             switch(toupper(commandline[1])) {
  51.             case 'F' :
  52.                 if (commandline[2] == '(') {
  53.                     commandline += 3;
  54.                     number = getnumber(&commandline, framenumber);
  55.                 } else {
  56.                     commandline++;
  57.                     number = framenumber;
  58.                 }
  59.                 if (number != 0) {
  60.                     *p++ = (number / 100) + '0';
  61.                     *p++ = ((number / 10) % 10) + '0';
  62.                     *p++ = (number %10) + '0';
  63.                 }
  64.                 break;
  65.             case 'P' :
  66.                 if (toupper(commandline[2]) == 'B') {
  67.                     commandline += 2;
  68.                     strcpy(p, picfile);
  69.                     p += strlen(p);
  70.                 } else if (toupper(commandline[2]) == 'N') {
  71.                     if (commandline[3] == '(') {
  72.                         commandline += 4;
  73.                         number = getnumber(&commandline, picnumber);
  74.                     } else {
  75.                         commandline += 2;
  76.                         number = picnumber;
  77.                     }
  78.                     if (number != 0) {
  79.                         *p++ = (number / 100) + '0';
  80.                         *p++ = ((number / 10) % 10) + '0';
  81.                         *p++ = (number %10) + '0';
  82.                     }
  83.                 } else {
  84.                     commandline++;
  85.                     if (picnumber == 0) {
  86.                         strcpy(p, picfile);
  87.                         strcat(p, ".pic");
  88.                         p += strlen(p);
  89.                     } else {
  90.                         strcpy(p, picfile);
  91.                         p += strlen(p);
  92.                         *p++ = (picnumber / 100) + '0';
  93.                         *p++ = ((picnumber / 10) % 10) + '0';
  94.                         *p++ = (picnumber %10) + '0';
  95.                         strcpy(p, ".pic");
  96.                         p += strlen(p);
  97.                     }
  98.                     p += strlen(p);
  99.                 }
  100.                 break;
  101.             case 'B' :
  102.                 if (toupper(commandline[2]) == 'B') {
  103.                     commandline += 2;
  104.                     if (*backfile != '\0') {
  105.                         strcpy(p, backfile);
  106.                         p += strlen(p);
  107.                     }
  108.                 } else if (toupper(commandline[2]) == 'N') {
  109.                     if (commandline[3] == '(') {
  110.                         commandline += 4;
  111.                         number = getnumber(&commandline, backnumber);
  112.                     } else {
  113.                         commandline += 2;
  114.                         number = backnumber;
  115.                     }
  116.                     if (number != 0) {
  117.                         *p++ = (number / 100) + '0';
  118.                         *p++ = ((number / 10) % 10) + '0';
  119.                         *p++ = (number %10) + '0';
  120.                     }
  121.                 } else {
  122.                     commandline++;
  123.                     if (*backfile != '\0') {
  124.                         if (backnumber == 0) {
  125.                             strcpy(p, backfile);
  126.                             strcat(p, ".pic");
  127.                             p += strlen(p);
  128.                         } else {
  129.                             strcpy(p, backfile);
  130.                             p += strlen(p);
  131.                             *p++ = (backnumber / 100) + '0';
  132.                             *p++ = ((backnumber / 10) % 10) + '0';
  133.                             *p++ = (backnumber %10) + '0';
  134.                             strcpy(p, ".pic");
  135.                             p += strlen(p);
  136.                         }
  137.                         p += strlen(p);
  138.                     }
  139.                 }
  140.                 break;
  141.             default :
  142.                 *p++ = *commandline;
  143.             }
  144.         }
  145.     }
  146.     *p = '\0';
  147.     if (tolower(str[0]) == 'd' &&
  148.         tolower(str[1]) == 'e' &&
  149.         tolower(str[2]) == 'l' &&
  150.         isspace(str[3])) {
  151.         for (p = str+4; *p; ++p) {
  152.             if (!isspace(*p)) {
  153.                 break;
  154.             }
  155.         }
  156.         if (!isspace(*p)) {
  157.             fputs("delete ", stderr);
  158.             fputs(p, stderr);
  159.             fputs("\n", stderr);
  160.             unlink(p);
  161.         }
  162.     } else {
  163.         fputs("execute command '", stderr);
  164.         fputs(str, stderr);
  165.         fputs("'\n", stderr);
  166.         system(str);
  167.     }
  168. }
  169. #endif
  170.