home *** CD-ROM | disk | FTP | other *** search
- /************************************************/
- /***/
- #define REVISION "V1.02" /***/
- #define REVDATE "18.01.95" /***/
- #define PROGNAME "Waltari - Strip ID" /***/
- #define NAME "STRIPID" /***/
- #define AUTHOR "Joe Cool" /***/
- /***/
- /************************************************/
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <libraries/aedoor.h>
- #include <libraries/dos.h>
- #include <proto/aedoor.h>
- #include <proto/dos.h>
- #include <proto/exec.h>
-
- #define ws WriteStr
- extern struct Library *SysBase;
- static const char VersionTag[] = "\0$VER: "PROGNAME" "REVISION" ("REVDATE")";
- char version[]= PROGNAME " " REVISION ;
- char author[20]= AUTHOR ;
-
- struct Library *AEDBase;
- struct DIFace *d;
- char *strf;
-
- int strip(char *);
- int Node;
- /****************************************************************************/
- void OpenLibs(void)
- {
- if((AEDBase=(struct Library *)OpenLibrary(AEDoorName,0))==NULL)
- {
- printf("Needs AEDoor.library V1.10+ to run\n");
- exit(10);
- }
- DOSBase=(struct DosLibrary *)OpenLibrary("dos.library",37L);
- if (!DOSBase)
- {
- printf("Needs dos.library V37+\n");
- exit(10);
- }
- SysBase=OpenLibrary("exec.library",0L);
- if (!SysBase)
- {
- printf("Needs any exec.library\n");
- exit(10);
- }
-
- }
- /****************************************************************************/
- void CloseLibs(void)
- {
- CloseLibrary(AEDBase);
- }
- /****************************************************************************/
- void start(int node)
- {
- char prompt[100],
- filename[13],
- buffer[100],
- workpath[100],
- *ptr=NULL;
- int stripped=0;
-
-
- ws(d,"Stripper V1.02 Active....",0);
- GetDT(d,BB_MAINLINE,0);
- strcpy(prompt,strf);
- ptr=strrchr(prompt,'/');
- strcpy(filename,ptr+1);
- strcpy(workpath,strchr(prompt,' ')+1);
- ptr=strrchr(workpath,'/');
- strcpy(ptr,"\0");
- ptr=strrchr(workpath,'/');
- strcpy(ptr,"\0");
- sprintf(buffer,"%s/work/%s",workpath,filename);
- stripped=strip(buffer); /* diese zeile ruf den stripper auf */
- /* einfach strip(filename des file_ids */
- if (stripped)
- {
- sprintf(buffer,"Stripped %d FileID lines!",stripped);
- ws(d,buffer,1);
- }
- else
- ws(d,"Nothing stripped!",1);
-
- ws(d,"",1);
-
- }
-
- int strip(char *ptr)
- {
- BPTR fileread=NULL,
- filewrite=NULL,
- stripread=NULL,
- lock=NULL;
- char buffer[100],
- **main_strip=NULL,
- **main_strip2=NULL,
- **main_fileid=NULL,
- **main_newid=NULL;
- BOOL strip=FALSE;
- int pos=0,
- pos1=0,
- pos2=0,
- len=0,
- stripnr=0;
-
- lock = GetProgramDir();
- NameFromLock(lock, buffer, 89);
-
- /* oeffnen des stripfiles striplist.normal ins ram: */
- /* striplist normal vergleicht zeichen fuer zeichen dieser zeile */
- /* WEnn striplist z.b.
- Name:
- drin hat dann wird folgendes alles deleted:
- Name: blabla... wiauchimmer
- Name:
- Name: ich bin doof
- aber nicht:
- NAME: flkjfh
- nAME: olkjhflfkjh
- Name: fookf
- */
- strcat(buffer,"/striplist.normal");
- stripread=Open(buffer,MODE_OLDFILE);
- for (pos=0;FGets(stripread,buffer,100);pos++)
- {
- main_strip=(char **) realloc(main_strip,(pos+1)*sizeof(char *));
- main_strip[pos]=NULL;
- len=strlen(buffer);
- main_strip[pos]=(char *) malloc (len+1);
- if (main_strip[pos]!=NULL)
- strcpy(main_strip[pos],buffer);
- }
- Close(stripread);
- main_strip=(char **) realloc(main_strip,(pos+1)*sizeof(char *));
- main_strip[pos]=NULL;
-
- /* oeffnen des stripfiles striplist.pattern ins ram: */
- /* wenn man folgende zeile drin hat
- [ds9bbs]
- dann isses wie wenn man in der shell
- delete #?[ds9bbs]#?
- eingibt.. er such halt ob er genau diese zeile bis zum letzten zeichen
- irgendwo in der file_Id findet
- */
-
-
- lock = GetProgramDir();
- NameFromLock(lock, buffer, 89);
- strcat(buffer,"/striplist.pattern");
- stripread=Open(buffer,MODE_OLDFILE);
- for (pos=0;FGets(stripread,buffer,100);pos++)
- {
- main_strip2=(char **) realloc(main_strip2,(pos+1)*sizeof(char *));
- main_strip2[pos]=NULL;
- len=strlen(buffer);
- main_strip2[pos]=(char *) malloc (len+1);
- if (main_strip2[pos]!=NULL)
- strcpy(main_strip2[pos],buffer);
- }
- Close(stripread);
- main_strip2=(char **) realloc(main_strip2,(pos+1)*sizeof(char *));
- main_strip2[pos]=NULL;
-
-
- /* Jetzt liesst er die eigentliche File id ins ram: */
-
-
- fileread=Open(ptr,MODE_OLDFILE);
- for (pos=0;FGets(fileread,buffer,100);pos++)
- {
- main_fileid=(char **) realloc(main_fileid,(pos+1)*sizeof(char *));
- main_fileid[pos]=NULL;
- len=strlen(buffer);
- main_fileid[pos]=(char *) malloc (len+1);
- if (main_fileid[pos]!=NULL)
- strcpy(main_fileid[pos],buffer);
- }
- Close (fileread);
- main_fileid=(char **) realloc(main_fileid,(pos+1)*sizeof(char *));
- main_fileid[pos]=NULL;
-
- /* eigentliche strip routine... rann man bestimmt noch verschoenern */
-
- for (pos=0;main_fileid[pos]!=NULL;pos++ )
- {
- strip=FALSE;
- for (pos1=0;main_strip[pos1]!=NULL;pos1++)
- {
- if (!strncmp(main_fileid[pos],main_strip[pos1],(strlen(main_strip[pos1])-1)))
- strip=TRUE;
- }
-
-
- if (strip==FALSE)
- for (pos1=0;main_strip2[pos1]!=NULL;pos1++)
- {
- main_strip2[pos1][strlen(main_strip2[pos1])-1]='\0';
- if (strstr(main_fileid[pos],main_strip2[pos1]))
- strip=TRUE;
- }
-
-
- if (strip==FALSE)
- {
- main_newid=(char **) realloc(main_newid,(pos2+1)*sizeof(char *));
- main_newid[pos2]=NULL;
- len=strlen(main_fileid[pos]);
- main_newid[pos2]=(char *) malloc (len+1);
- if (main_newid[pos2]!=NULL)
- strcpy(main_newid[pos2],main_fileid[pos]);
- pos2++;
- }
- else stripnr++;
- }
- main_newid=(char **) realloc(main_newid,(pos2+1)*sizeof(char *));
- main_newid[pos2]=NULL;
- /* main_newid[0-bla] sind die einzelnen zeilen der neuen file ID*/
- /* wenn nichts in der file_id gestripped wurde ist hier
- stripnr==0 ansonsten isses die anzahl von zeilen die gestripped wurden*/
- /* Als naechstes wird die neue file id geschrieben */
- if (stripnr)
- {
- filewrite=Open(ptr,MODE_NEWFILE);
- for (pos=0;main_newid[pos]!=NULL;pos++)
- FPuts(filewrite,main_newid[pos]);
- Close(filewrite);
- }
- for (pos=0;main_newid[pos]!=NULL;pos++)
- free(main_newid[pos]);
- free (main_newid);
- for (pos=0;main_strip[pos]!=NULL;pos++)
- free(main_strip[pos]);
- free (main_strip);
- for (pos=0;main_fileid[pos]!=NULL;pos++)
- free(main_fileid[pos]);
- free (main_fileid);
- return (stripnr);
- }
-
- /****************************************************************************/
- main(argc, argv)
- int argc;
- char *argv[];
- {
- if(argc!=2)
- {
- printf("\n%s: XIM-DOOR for S-Express!\n\n",version);
- exit(0);
- }
- Node=atoi(argv[1]);
-
- OpenLibs();
- d=CreateComm(argv[1][0]);
- strf= GetString(d);
-
- start(Node);
-
- CloseLibs();
- DeleteComm(d);
- }
-