home *** CD-ROM | disk | FTP | other *** search
-
- #include <proto/dos.h>
- #include <proto/exec.h>
- #include <exec/memory.h>
- #include <string.h>
- #include <stdlib.h>
- #include <stdio.h>
-
- #define MAXLEN 130
-
- struct MyStruct {
- struct AnchorPath anc;
- char pad[MAXLEN];
- } s;
-
-
-
- void FreeList(struct List *list)
- {
- struct Node *n;
- if (list)
- while(!IsListEmpty(list))
- {
- n=RemHead(list);
- FreeVec(n->ln_Name);
- FreeVec(n);
- }
- }
-
-
-
- void CreateList(struct List *list,char *pattern)
- {
- int err;
- struct Node *node;
- char *string;
-
-
-
- NewList(list);
-
- err=MatchFirst(pattern,(struct AnchorPath*)&s);
- while(!err)
- {
- if (s.anc.ap_Info.fib_DirEntryType<0)
- {
- if (!(node=AllocVec(sizeof(struct Node),MEMF_CLEAR)))
- {
- MatchEnd((struct AnchorPath*)&s);
- return;
- }
-
- if (!(string=AllocVec(strlen(&s.anc.ap_Buf[0])+1,MEMF_CLEAR)))
- {
- FreeVec(node);
- MatchEnd((struct AnchorPath*)&s);
- return;
- }
-
- strcpy(string,&s.anc.ap_Buf[0]);
- node->ln_Name=string;
- AddTail(list,node);
- }
- err=MatchNext((struct AnchorPath*)&s);
- }
- MatchEnd((struct AnchorPath*)&s);
- }
-
-
-
- void AddExt(char *nome,char *ext)
- {
- char *p=nome;
-
- p+=strlen(p)-1;
-
- while(p>=nome)
- {
- if (*p=='.')
- {
- strcpy(p+1,ext);
- return;
- }
- p--;
- }
-
- strcat(nome,".");
- strcat(nome,ext);
- }
-
-
-
- void main(int argc,char *argv[])
- {
- struct List C_List,
- A_List,
- H_List;
- struct Node *node,
- *node2;
- int gst;
- FILE *file;
- BPTR dir;
- char buffer[MAXLEN+1],
- curdir[MAXLEN+1];
-
-
-
-
- if ((argc!=4)&&(argc!=2))
- {
- printf("SYNTAX: %s <Executable> [<GST> <PreInclude>]\n",argv[0]);
- exit(5);
- }
-
- if (argc==4) gst=TRUE;
- else gst=FALSE;
-
- s.anc.ap_Strlen=MAXLEN;
-
- CreateList(&C_List,"#?.c");
- CreateList(&A_List,"#?.a");
- CreateList(&H_List,"#?.h");
-
- if (gst)
- {
- for(node=C_List.lh_Head;node->ln_Succ;node=node->ln_Succ)
- if (!stricmp(node->ln_Name,argv[3]))
- break;
-
- if (node->ln_Succ)
- {
- Remove(node);
- FreeVec(node->ln_Name);
- FreeVec(node);
- }
- }
-
- if (!(dir=Lock("",ACCESS_READ)))
- {
- printf("Can't lock current dir!\n");
- exit(5);
- }
- NameFromLock(dir,curdir,sizeof(curdir)-1);
- UnLock(dir);
-
- if (strlen(curdir)>0)
- if ((curdir[strlen(curdir)-1]!=':')&&(curdir[strlen(curdir)-1]!='/'))
- strcat(curdir,"/");
-
- if (!(file=fopen("SMakefile","w")))
- {
- FreeList(&C_List);
- FreeList(&A_List);
- FreeList(&H_List);
- exit(5);
- }
-
- fprintf(file,"\n");
-
- fprintf(file,"AFLAGS\t= -Iinclude:\n");
-
- fprintf(file,"\n");
-
- fprintf(file,"CFLAGS\t=\n");
-
- fprintf(file,"\n");
-
- fprintf(file,"LFLAGS\t=\n");
-
- fprintf(file,"\n");
-
- fprintf(file,"OBJS\t= ");
- for(node=C_List.lh_Head;node->ln_Succ;node=node->ln_Succ)
- {
- strcpy(buffer,node->ln_Name);
- AddExt(buffer,"o");
- fprintf(file,"%s ",buffer);
- }
- for(node=A_List.lh_Head;node->ln_Succ;node=node->ln_Succ)
- {
- strcpy(buffer,node->ln_Name);
- AddExt(buffer,"o");
- fprintf(file,"%s ",buffer);
- }
- fprintf(file,"\n");
-
- fprintf(file,"\n");
-
- fprintf(file,"LIBS\t= LIB:sc.lib LIB:amiga.lib\n");
-
- fprintf(file,"\n");
-
- if (gst) fprintf(file,"all: %s %s\n",argv[2],argv[1]);
- else fprintf(file,"all: %s\n",argv[1]);
-
- fprintf(file,"\n");
-
- if (gst)
- {
- fprintf(file,"%s: PRJ:%s ",argv[2],argv[3]);
- for(node=H_List.lh_Head;node->ln_Succ;node=node->ln_Succ)
- fprintf(file,"PRJ:%s ",node->ln_Name);
- fprintf(file,"\n");
- fprintf(file,"\tSC:C/SC NOLINK ERRREXX OBJNAME T:Dummy.o MAKEGST=$@ PRJ:%s\n",argv[3]);
- fprintf(file,"\tC:DELETE >NIL: T:Dummy.o\n");
-
- fprintf(file,"\n");
- }
-
- fprintf(file,"%s: $(OBJS)\n",argv[1]);
- fprintf(file,"\tSC:C/SLINK FROM LIB:c.o $(OBJS) TO $@ LIB $(LIBS) $(LFLAGS)\n");
-
- fprintf(file,"\n");
-
- for(node=C_List.lh_Head;node->ln_Succ;node=node->ln_Succ)
- {
- strcpy(buffer,node->ln_Name);
- AddExt(buffer,"o");
- fprintf(file,"%s: PRJ:%s ",buffer,node->ln_Name);
- strcpy(buffer,curdir);
- AddPart(buffer,node->ln_Name,sizeof(buffer)-1);
- AddExt(buffer,"o");
- for(node2=H_List.lh_Head;node2->ln_Succ;node2=node2->ln_Succ)
- fprintf(file,"PRJ:%s ",node2->ln_Name);
- fprintf(file,"\n");
-
- fprintf(file,"\tSC:C/SC NOLINK ERRREXX $(CFLAGS) PRJ:%s OBJNAME %s",node->ln_Name,buffer);
- if (gst) fprintf(file," GST=%s GSTIMM\n",argv[2]);
- else fprintf(file,"\n");
-
- fprintf(file,"\n");
- }
- for(node=A_List.lh_Head;node->ln_Succ;node=node->ln_Succ)
- {
- strcpy(buffer,node->ln_Name);
- AddExt(buffer,"o");
- fprintf(file,"%s: PRJ:%s ",buffer,node->ln_Name);
- strcpy(buffer,curdir);
- AddPart(buffer,node->ln_Name,sizeof(buffer)-1);
- AddExt(buffer,"o");
- for(node2=H_List.lh_Head;node2->ln_Succ;node2=node2->ln_Succ)
- fprintf(file,"PRJ:%s ",node2->ln_Name);
- fprintf(file,"\n");
-
- fprintf(file,"\tSC:C/ASM $(AFLAGS) -o%s PRJ:%s\n",buffer,node->ln_Name);
- fprintf(file,"\n");
- }
- fprintf(file,"\n");
-
- fclose(file);
-
- FreeList(&C_List);
- FreeList(&A_List);
- FreeList(&H_List);
-
- exit(0);
- }
-