Replaced by extension product msi

This commit is contained in:
Marty Kraimer
1998-01-20 21:40:40 +00:00
parent 9c8779c150
commit 30d8a2d528
3 changed files with 0 additions and 628 deletions

View File

@@ -1,88 +0,0 @@
/* impExpand.c */
/* Author: Marty Kraimer Date: 18SEP96 */
/*****************************************************************
COPYRIGHT NOTIFICATION
*****************************************************************
(C) COPYRIGHT 1993 UNIVERSITY OF CHICAGO
This software was developed under a United States Government license
described on the COPYRIGHT_UniversityOfChicago file included as part
of this distribution.
**********************************************************************/
/* Modification Log:
* -----------------
* .01 18SEP96 mrk Initial Implementation
*/
#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include "impLib.h"
#define MAX_SIZE 256
int main(int argc,char **argv)
{
IMP_HANDLE handle;
int narg,i;
char *parm;
char buffer[MAX_SIZE];
/*Look for options*/
if(argc<2) {
fprintf(stderr,
"usage: impExpand -Idir -Idir "
"-S substitutions -S substitutions"
" file1 file2 ...\n");
exit(0);
}
if(impInit(&handle,MAX_SIZE)!=impSuccess) {
fprintf(stderr,"impInit failed\n");
exit(0);
}
while((strncmp(argv[1],"-I",2)==0)||(strncmp(argv[1],"-S",2)==0)) {
if(strlen(argv[1])==2) {
parm = argv[2];
narg = 2;
} else {
parm = argv[1]+2;
narg = 1;
}
if(strncmp(argv[1],"-I",2)==0) {
if(impAddPath(handle,parm)!=impSuccess) {
fprintf(stderr,"impAddPath failed\n");
exit(0);
}
} else {
if(impMacAddSubstitutions(handle,parm)!=impSuccess) {
fprintf(stderr,"impMacAddSubstitutions failed\n");
exit(0);
}
}
argc -= narg;
for(i=1; i<argc; i++) argv[i] = argv[i + narg];
}
if(argc<2 || (strncmp(argv[1],"-",1)==0)) {
fprintf(stderr,
"usage: impExpand -Idir -Idir "
"-S substitutions -S substitutions"
" file1.dbd file2.dbd ...\n");
exit(0);
}
for(i=1; i<argc; i++) {
if(impOpenFile(handle,argv[i])!=impSuccess) {
fprintf(stderr,"impOpenFile failed for %s\n",argv[i]);
exit(0);
}
while(impGetLine(handle,buffer,MAX_SIZE)) printf("%s",buffer);
if(impCloseFile(handle)!=impSuccess) {
fprintf(stderr,"impCloseFile failed for %s\n",argv[i]);
}
}
impFree(handle);
return(0);
}

View File

@@ -1,477 +0,0 @@
/*impLib.c*/
/*****************************************************************
COPYRIGHT NOTIFICATION
*****************************************************************
(C) COPYRIGHT 1993 UNIVERSITY OF CHICAGO
This software was developed under a United States Government license
described on the COPYRIGHT_UniversityOfChicago file included as part
of this distribution.
**********************************************************************/
/* Modification Log:
* -----------------
* 01 17sep96 mrk Original
*/
#include <stdio.h>
#ifdef vxWorks
#include <vxWorks.h>
#include <taskLib.h>
#endif
#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#define epicsExportSharedSymbols
#include "ellLib.h"
#include "epicsPrint.h"
#include "impLib.h"
/*private declarations*/
typedef struct pathNode {
ELLNODE node;
char *directory;
}pathNode;
typedef struct inputFile{
ELLNODE node;
char *path;
char *filename;
FILE *fp;
int line_num;
}inputFile;
typedef struct impPvt{
char *includeToken;
char *pathToken;
char *addPathToken;
char *envName;
MAC_HANDLE *macHandle;
char *buffer; /*For use if macros are being expanded*/
int bufferSize;
ELLLIST pathList;
ELLLIST inputFileList;
}impPvt;
/*private routines */
static void *impCalloc(size_t nobj,size_t size);
static void freePath(impPvt *handle);
static void freeInputFileList(impPvt *handle);
static char *openFile(impPvt *handle,const char *filename,FILE **fp);
static void includeNew(impPvt *handle,char *filename);
static char *getParameter(char *pfirst,char *token);
/*Beginning of Private routines*/
static void *impCalloc(size_t nobj,size_t size)
{
void *p;
p=calloc(nobj,size);
if(p) return(p);
printf("impCalloc: Can't allocate memory\n");
#ifdef vxWorks
taskSuspend(0);
#else
abort();
#endif
return(NULL);
}
static void freePath(impPvt *handle)
{
pathNode *ppathNode;
if(!handle) return;
while(ppathNode = (pathNode *)ellFirst(&handle->pathList)) {
ellDelete(&handle->pathList,&ppathNode->node);
free((void *)ppathNode->directory);
free((void *)ppathNode);
}
return;
}
static void freeInputFileList(impPvt *handle)
{
inputFile *pinputFileNow;
while(pinputFileNow=(inputFile *)ellFirst(&handle->inputFileList)) {
if(pinputFileNow->fp && fclose(pinputFileNow->fp))
epicsPrintf("Error Closing file %s",pinputFileNow->filename);
free((void *)pinputFileNow->filename);
ellDelete(&handle->inputFileList,(ELLNODE *)pinputFileNow);
free((void *)pinputFileNow);
}
}
static char *openFile(impPvt *handle,const char *filename,FILE **fp)
{
ELLLIST *ppathList = &handle->pathList;
pathNode *ppathNode;
char *fullfilename;
if(!filename) return(0);
if(!ppathList || (ellCount(ppathList)==0) || strchr(filename,'/')){
*fp = fopen(filename,"r");
return(0);
}
ppathNode = (pathNode *)ellFirst(ppathList);
while(ppathNode) {
fullfilename = impCalloc(strlen(filename)+strlen(ppathNode->directory)
+2,sizeof(char));
strcpy(fullfilename,ppathNode->directory);
strcat(fullfilename,"/");
strcat(fullfilename,filename);
*fp = fopen(fullfilename,"r");
free((void *)fullfilename);
if(*fp) return(ppathNode->directory);
ppathNode = (pathNode *)ellNext(&ppathNode->node);
}
epicsPrintf("Error opening file %s\n",filename);
return(0);
}
static void includeNew(impPvt *handle,char *filename)
{
inputFile *pinputFile;
FILE *fp = NULL;
pinputFile = impCalloc(1,sizeof(inputFile));
pinputFile->path = openFile(handle,filename,&fp);
if(!fp) {
errPrintf(0,__FILE__, __LINE__,
"includeNew opening file %s",filename);
free((void *)pinputFile);
return;
}
pinputFile->filename = impCalloc(strlen(filename)+1,sizeof(char));
strcpy(pinputFile->filename,filename);
pinputFile->fp = fp;
ellAdd(&handle->inputFileList,&pinputFile->node);
}
static char *getParameter(char *pfirst,char *token)
{
char *plast;
size_t nskip;
char *prtn;
size_t size;
/*Skip blanks and tabs*/
pfirst += strlen(token);
nskip = strspn(pfirst," \t");
pfirst += nskip;
if(!*pfirst) return(NULL);
if(*pfirst=='"') {
++pfirst;
plast = strchr(pfirst,'"');
if(!plast) return(NULL);
size = plast-pfirst+1;
} else {
size = strcspn(pfirst," \t") + 1;
}
if(size<=1) return(NULL);
prtn = impCalloc(size,sizeof(char));
strncpy(prtn,pfirst,size-1);
return(prtn);
}
int epicsShareAPI impInit(IMP_HANDLE *phandle,int bufferSize)
{
impPvt *handle;
handle = impCalloc(1,sizeof(impPvt));
handle->buffer = impCalloc(bufferSize,sizeof(char));
handle->bufferSize = bufferSize;
ellInit(&handle->pathList);
ellInit(&handle->inputFileList);
impSetIncludeToken((IMP_HANDLE *)handle,"include");
*phandle = (IMP_HANDLE)handle;
return(impSuccess);
}
void epicsShareAPI impFree(IMP_HANDLE imp)
{
impPvt *handle = (impPvt *)imp;
if(!handle) return;
freePath(handle);
freeInputFileList(handle);
free((void *)handle->includeToken);
free((void *)handle->pathToken);
free((void *)handle->addPathToken);
free((void *)handle->envName);
free((void *)handle->buffer);
if(handle->macHandle) macDeleteHandle(handle->macHandle);
free((void *)handle);
}
int epicsShareAPI impSetIncludeToken(IMP_HANDLE imp,char *includeToken)
{
impPvt *handle = (impPvt *)imp;
if(!handle) return(impFailure);
free((void *)handle->includeToken);
handle->includeToken = NULL;
if(!includeToken) return(impSuccess);
handle->includeToken = impCalloc(strlen(includeToken)+1,sizeof(char));
strcpy(handle->includeToken,includeToken);
return(impSuccess);
}
int epicsShareAPI impSetEnvName(IMP_HANDLE imp,char *envName)
{
impPvt *handle = (impPvt *)imp;
if(!handle) return(impFailure);
free((void *)handle->envName);
handle->envName = NULL;
if(!envName) return(impSuccess);
handle->envName = impCalloc(strlen(envName)+1,sizeof(char));
strcpy(handle->envName,envName);
return(impSuccess);
}
MAC_HANDLE * epicsShareAPI impGetMacHandle(IMP_HANDLE imp)
{
impPvt *handle = (impPvt *)imp;
if(!handle) return(NULL);
return(handle->macHandle);
}
int epicsShareAPI impSetMacHandle(IMP_HANDLE imp,MAC_HANDLE *mac)
{
impPvt *handle = (impPvt *)imp;
if(!handle) return(impFailure);
if(handle->macHandle) return(impFailure);
handle->macHandle = mac;
return(impSuccess);
}
void epicsShareAPI impMacFree(IMP_HANDLE imp)
{
impPvt *handle = (impPvt *)imp;
if(!handle) return;
if(handle->macHandle) {
macDeleteHandle(handle->macHandle);
handle->macHandle = NULL;
}
return;
}
int epicsShareAPI impMacAddSubstitutions(IMP_HANDLE imp,const char *substitutions)
{
impPvt *handle = (impPvt *)imp;
char **pairs;
if(!handle) return(impFailure);
if(!substitutions || strlen(substitutions)==0) return(impSuccess);
if(!handle->macHandle && macCreateHandle(&handle->macHandle,NULL)) {
epicsPrintf("macCreateHandle error\n");
return(impFailure);
}
macParseDefns(handle->macHandle,(char *)substitutions,&pairs);
if(pairs) {
macInstallMacros(handle->macHandle,pairs);
free((void *)pairs);
}
return(impSuccess);
}
int epicsShareAPI impMacAddNameValuePairs(IMP_HANDLE imp,const char *pairs[])
{
impPvt *handle = (impPvt *)imp;
if(!handle) return(impFailure);
if(!handle->macHandle && macCreateHandle(&handle->macHandle,NULL)) {
epicsPrintf("macCreateHandle error\n");
return(impFailure);
}
macInstallMacros(handle->macHandle,(char **)pairs);
return(impSuccess);
}
int epicsShareAPI impSetPath(IMP_HANDLE imp,const char *path)
{
impPvt *handle = (impPvt *)imp;
if(!handle) return(impFailure);
freePath(handle);
return(impAddPath(handle,path));
}
int epicsShareAPI impAddPath(IMP_HANDLE imp,const char *path)
{
impPvt *handle = (impPvt *)imp;
ELLLIST *ppathList;
pathNode *ppathNode;
const char *pcolon;
const char *pdir;
int len;
if(!handle) return(impFailure);
ppathList = &handle->pathList;
pdir = path;
while(pdir) {
if(*pdir == ':') {
pdir++;
continue;
}
ppathNode = (pathNode *)impCalloc(1,sizeof(pathNode));
ellAdd(ppathList,&ppathNode->node);
pcolon = strchr(pdir,':');
len = (pcolon ? (pcolon - pdir) : strlen(pdir));
ppathNode->directory = (char *)impCalloc(1,len + 1);
strncpy(ppathNode->directory,pdir,len);
pdir = (pcolon ? (pcolon+1) : 0);
}
return(impSuccess);
}
int epicsShareAPI impPrintInclude(IMP_HANDLE imp,FILE *fp)
{
impPvt *handle = (impPvt *)imp;
inputFile *pinputFile;
if(!handle) return(impFailure);
pinputFile = (inputFile *)ellLast(&handle->inputFileList);
if(!pinputFile || !handle->buffer) return(impFailure);
fprintf(fp,"input line: %s",handle->buffer);
while(pinputFile) {
if(pinputFile->filename) {
fprintf(fp," in:");
if(pinputFile->path)
fprintf(fp," path \"%s\" ",pinputFile->path);
fprintf(fp," file %s",pinputFile->filename);
} else {
fprintf(fp,"stdin:");
if(pinputFile->path)
fprintf(fp," path \"%s\" ",pinputFile->path);
}
fprintf(fp," line %d\n",pinputFile->line_num);
pinputFile = (inputFile *)ellPrevious(&pinputFile->node);
}
fprintf(fp,"\n");
return(impSuccess);
}
int epicsShareAPI impDumpPath(IMP_HANDLE imp)
{
impPvt *handle = (impPvt *)imp;
ELLLIST *ppathList;
pathNode *ppathNode;
if(!handle) return(impFailure);
ppathList = &handle->pathList;
if(!ppathList || !(ppathNode = (pathNode *)ellFirst(ppathList))) {
printf("no path defined\n");
return(impSuccess);
}
while(ppathNode) {
printf("%s",ppathNode->directory);
ppathNode = (pathNode *)ellNext(&ppathNode->node);
if(ppathNode) printf(":");
}
printf("\n");
return(impSuccess);
}
int epicsShareAPI impOpenFile(IMP_HANDLE imp,char *filename)
{
impPvt *handle = (impPvt *)imp;
inputFile *pinputFile;
FILE *fp;
char *penv;
if(!handle) return(impFailure);
freeInputFileList(handle);
if((ellCount(&handle->pathList)==0) && handle->envName) {
penv = getenv(handle->envName);
if(penv)impSetPath(imp,penv);
}
pinputFile = impCalloc(1,sizeof(inputFile));
if(filename) {
pinputFile->filename = impCalloc(strlen(filename)+1,sizeof(char));
strcpy(pinputFile->filename,filename);
pinputFile->path = openFile(handle,filename,&fp);
if(!fp) {
epicsPrintf("Error opening file %s\n",filename);
return(impFailure);
}
} else {
fp = stdin;
}
pinputFile->fp = fp;
pinputFile->line_num = 0;
handle->buffer[0] = '\0';
ellAdd(&handle->inputFileList,&pinputFile->node);
return(impSuccess);
}
int epicsShareAPI impCloseFile(IMP_HANDLE imp)
{
impPvt *handle = (impPvt *)imp;
if(!handle) return(impFailure);
if(ellCount(&handle->inputFileList) !=0) freeInputFileList(handle);
return(impSuccess);
}
int epicsShareAPI impGetLine(IMP_HANDLE imp,char *buffer,int bufferSize)
{
impPvt *handle = (impPvt *)imp;
char *fgetsRtn;
int n;
char *pfirst;
size_t nskip;
char *parameter;
inputFile *pinputFileNow;
if(!handle) return(impFailure);
while(TRUE) { /*until we get some input*/
MAC_HANDLE *macHandle = handle->macHandle;
pinputFileNow = (inputFile *)ellLast(&handle->inputFileList);
if(!pinputFileNow) return(0);
if(macHandle)
fgetsRtn=fgets(handle->buffer,handle->bufferSize,pinputFileNow->fp);
else
fgetsRtn=fgets(buffer,bufferSize,pinputFileNow->fp);
if(!fgetsRtn) {
if(fclose(pinputFileNow->fp))
errPrintf(0,__FILE__, __LINE__,
"Closing file %s",pinputFileNow->filename);
free((void *)pinputFileNow->filename);
ellDelete(&handle->inputFileList,(ELLNODE *)pinputFileNow);
free((void *)pinputFileNow);
continue;
}
pinputFileNow->line_num++;
if(macHandle) {
n = macExpandString(macHandle,handle->buffer,buffer,bufferSize-1);
if(n<0) {
epicsPrintf("macExpandString failed for %s",handle->buffer);
impPrintInclude(imp,stderr);
continue;
}
}
nskip = strspn(fgetsRtn," \t");
pfirst = fgetsRtn + nskip;
if(handle->includeToken
&& pfirst[0]==handle->includeToken[0]
&& strstr(pfirst,handle->includeToken)){
parameter = getParameter(pfirst,handle->includeToken);
if(!parameter) continue;
includeNew(imp,parameter);
free((void *)parameter);
continue;
}
return(strlen(buffer));
}
}

View File

@@ -1,63 +0,0 @@
/*impLib.h*/
/*Processes include, macro substitution, and path*/
/*****************************************************************
COPYRIGHT NOTIFICATION
*****************************************************************
(C) COPYRIGHT 1993 UNIVERSITY OF CHICAGO
This software was developed under a United States Government license
described on the COPYRIGHT_UniversityOfChicago file included as part
of this distribution.
**********************************************************************/
/* Modification Log:
* -----------------
* 01 17sep96 mrk Original
*/
#ifndef INCimpLibh
#define INCimpLibh
#include "macLib.h"
#include "shareLib.h"
typedef void *IMP_HANDLE;
epicsShareFunc int epicsShareAPI
impInit(IMP_HANDLE *handle,int bufferSize);
epicsShareFunc void epicsShareAPI
impFree(IMP_HANDLE handle);
epicsShareFunc int epicsShareAPI
impSetIncludeToken(IMP_HANDLE handle,char *includeToken);
epicsShareFunc int epicsShareAPI
impSetEnvName(IMP_HANDLE handle,char *envName);
epicsShareFunc MAC_HANDLE *
epicsShareAPI impGetMacHandle(IMP_HANDLE handle);
epicsShareFunc int epicsShareAPI
impSetMacHandle(IMP_HANDLE imp,MAC_HANDLE *mac);
epicsShareFunc void epicsShareAPI
impMacFree(IMP_HANDLE imp);
epicsShareFunc int epicsShareAPI
impMacAddSubstitutions(IMP_HANDLE handle,const char *substitutions);
epicsShareFunc int epicsShareAPI
impMacAddNameValuePairs(IMP_HANDLE handle,const char *pairs[]);
epicsShareFunc int epicsShareAPI
impSetPath(IMP_HANDLE handle,const char *path);
epicsShareFunc int epicsShareAPI
impAddPath(IMP_HANDLE handle,const char *path);
epicsShareFunc int epicsShareAPI
impPrintInclude(IMP_HANDLE handle,FILE *fp);
epicsShareFunc int epicsShareAPI
impDumpPath(IMP_HANDLE handle);
epicsShareFunc int epicsShareAPI
impOpenFile(IMP_HANDLE handle,char *filename);
epicsShareFunc int epicsShareAPI
impCloseFile(IMP_HANDLE handle);
epicsShareFunc int epicsShareAPI
impGetLine(IMP_HANDLE handle,char *buffer,int bufferSize);
/*status values*/
typedef enum{impSuccess,impFailure} impStatus;
extern char **impStatusMessage;
#endif /*INCimpLibh*/