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 >
Wrap
C/C++ Source or Header
|
1995-11-07
|
4KB
|
170 lines
#ifndef WINDOWS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "reader.h"
#include "glib.h"
#include "rend.h"
static int getnumber(char **p, int now)
{
int number;
number = atoi(*p);
for (; *(*p); (*p)++) {
if (*(*p) == ')') {
if (now == 0) {
return 0;
} else {
return now + number;
}
}
}
return 0;
}
/*
$F now frame number
$F(n) now frame number + n
$P now pic file
$PB now pic body
$PN now pic number
$PN(n) now pic number + n
$B now back file
$BB now back body
$BN now back number
$BN(n) now back number + n
*/
void commandexec(char *commandline, int framenumber, char *picfile, int picnumber, char *backfile, int backnumber)
{
static char str[256];
char *p;
int number;
p = str;
for (; *commandline; commandline++) {
if (*commandline != '$' && *commandline != '!') {
*p++ = *commandline;
} else {
switch(toupper(commandline[1])) {
case 'F' :
if (commandline[2] == '(') {
commandline += 3;
number = getnumber(&commandline, framenumber);
} else {
commandline++;
number = framenumber;
}
if (number != 0) {
*p++ = (number / 100) + '0';
*p++ = ((number / 10) % 10) + '0';
*p++ = (number %10) + '0';
}
break;
case 'P' :
if (toupper(commandline[2]) == 'B') {
commandline += 2;
strcpy(p, picfile);
p += strlen(p);
} else if (toupper(commandline[2]) == 'N') {
if (commandline[3] == '(') {
commandline += 4;
number = getnumber(&commandline, picnumber);
} else {
commandline += 2;
number = picnumber;
}
if (number != 0) {
*p++ = (number / 100) + '0';
*p++ = ((number / 10) % 10) + '0';
*p++ = (number %10) + '0';
}
} else {
commandline++;
if (picnumber == 0) {
strcpy(p, picfile);
strcat(p, ".pic");
p += strlen(p);
} else {
strcpy(p, picfile);
p += strlen(p);
*p++ = (picnumber / 100) + '0';
*p++ = ((picnumber / 10) % 10) + '0';
*p++ = (picnumber %10) + '0';
strcpy(p, ".pic");
p += strlen(p);
}
p += strlen(p);
}
break;
case 'B' :
if (toupper(commandline[2]) == 'B') {
commandline += 2;
if (*backfile != '\0') {
strcpy(p, backfile);
p += strlen(p);
}
} else if (toupper(commandline[2]) == 'N') {
if (commandline[3] == '(') {
commandline += 4;
number = getnumber(&commandline, backnumber);
} else {
commandline += 2;
number = backnumber;
}
if (number != 0) {
*p++ = (number / 100) + '0';
*p++ = ((number / 10) % 10) + '0';
*p++ = (number %10) + '0';
}
} else {
commandline++;
if (*backfile != '\0') {
if (backnumber == 0) {
strcpy(p, backfile);
strcat(p, ".pic");
p += strlen(p);
} else {
strcpy(p, backfile);
p += strlen(p);
*p++ = (backnumber / 100) + '0';
*p++ = ((backnumber / 10) % 10) + '0';
*p++ = (backnumber %10) + '0';
strcpy(p, ".pic");
p += strlen(p);
}
p += strlen(p);
}
}
break;
default :
*p++ = *commandline;
}
}
}
*p = '\0';
if (tolower(str[0]) == 'd' &&
tolower(str[1]) == 'e' &&
tolower(str[2]) == 'l' &&
isspace(str[3])) {
for (p = str+4; *p; ++p) {
if (!isspace(*p)) {
break;
}
}
if (!isspace(*p)) {
fputs("delete ", stderr);
fputs(p, stderr);
fputs("\n", stderr);
unlink(p);
}
} else {
fputs("execute command '", stderr);
fputs(str, stderr);
fputs("'\n", stderr);
system(str);
}
}
#endif