home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Misc / JOE_SOUR.LHA / Sources.lha / s!x / id-stripper / stripper3.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-02-15  |  6.7 KB  |  268 lines

  1. /************************************************/
  2.                                              /***/
  3. #define REVISION "V1.02"                     /***/
  4. #define REVDATE  "18.01.95"                     /***/
  5. #define PROGNAME "Waltari - Strip ID"         /***/
  6. #define NAME     "STRIPID"                     /***/
  7. #define AUTHOR   "Joe Cool"                     /***/
  8.                                              /***/
  9. /************************************************/
  10.  
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <string.h>
  14. #include <libraries/aedoor.h>
  15. #include <libraries/dos.h>
  16. #include <proto/aedoor.h>
  17. #include <proto/dos.h>
  18. #include <proto/exec.h>
  19.  
  20. #define ws WriteStr
  21. extern struct Library *SysBase;
  22. static const char VersionTag[] = "\0$VER: "PROGNAME" "REVISION" ("REVDATE")";
  23. char version[]= PROGNAME " " REVISION ;
  24. char author[20]= AUTHOR ;
  25.  
  26. struct  Library *AEDBase;
  27. struct  DIFace  *d;
  28. char    *strf;
  29.  
  30. int strip(char *);
  31. int Node;
  32. /****************************************************************************/
  33. void OpenLibs(void) 
  34. {
  35.         if((AEDBase=(struct Library *)OpenLibrary(AEDoorName,0))==NULL)
  36.         {
  37.                 printf("Needs AEDoor.library V1.10+ to run\n");
  38.                 exit(10);
  39.         }
  40.         DOSBase=(struct DosLibrary *)OpenLibrary("dos.library",37L);
  41.         if (!DOSBase)
  42.         {
  43.                 printf("Needs dos.library V37+\n");
  44.                 exit(10);
  45.         }
  46.         SysBase=OpenLibrary("exec.library",0L);
  47.         if (!SysBase)
  48.         {
  49.                 printf("Needs any exec.library\n");
  50.                 exit(10);
  51.         }
  52.         
  53. }
  54. /****************************************************************************/
  55. void CloseLibs(void) 
  56. {
  57.         CloseLibrary(AEDBase);
  58. }
  59. /****************************************************************************/
  60. void start(int node)
  61.     char    prompt[100],
  62.             filename[13],
  63.             buffer[100],
  64.             workpath[100],
  65.             *ptr=NULL;
  66.     int        stripped=0;
  67.     
  68.     
  69.     ws(d,"Stripper V1.02 Active....",0);
  70.     GetDT(d,BB_MAINLINE,0);
  71.     strcpy(prompt,strf);
  72.     ptr=strrchr(prompt,'/');
  73.     strcpy(filename,ptr+1);
  74.     strcpy(workpath,strchr(prompt,' ')+1);
  75.     ptr=strrchr(workpath,'/');
  76.     strcpy(ptr,"\0");
  77.     ptr=strrchr(workpath,'/');
  78.     strcpy(ptr,"\0");
  79.     sprintf(buffer,"%s/work/%s",workpath,filename);
  80.     stripped=strip(buffer); /* diese zeile ruf den stripper auf */
  81.                             /* einfach strip(filename des file_ids */
  82.     if (stripped)
  83.     {
  84.         sprintf(buffer,"Stripped %d FileID lines!",stripped);
  85.         ws(d,buffer,1);
  86.     }
  87.     else
  88.         ws(d,"Nothing stripped!",1);
  89.         
  90.     ws(d,"",1);
  91.  
  92. }
  93.  
  94. int strip(char *ptr)
  95. {
  96.     BPTR    fileread=NULL,
  97.             filewrite=NULL,
  98.             stripread=NULL,
  99.             lock=NULL;
  100.     char    buffer[100],
  101.             **main_strip=NULL,
  102.             **main_strip2=NULL,
  103.             **main_fileid=NULL,
  104.             **main_newid=NULL;
  105.     BOOL    strip=FALSE;
  106.     int        pos=0,
  107.             pos1=0,
  108.             pos2=0,
  109.             len=0,
  110.             stripnr=0;
  111.             
  112.     lock = GetProgramDir();
  113.     NameFromLock(lock, buffer, 89);
  114.  
  115. /* oeffnen des stripfiles striplist.normal ins ram: */
  116. /* striplist normal vergleicht zeichen fuer zeichen dieser zeile */
  117. /* WEnn striplist z.b. 
  118.    Name:
  119.    drin hat dann wird folgendes alles deleted:
  120.    Name: blabla... wiauchimmer
  121.    Name:
  122.    Name: ich bin doof
  123.    aber nicht:
  124.    NAME: flkjfh
  125.    nAME: olkjhflfkjh
  126.      Name: fookf 
  127.    */
  128.     strcat(buffer,"/striplist.normal");
  129.     stripread=Open(buffer,MODE_OLDFILE);
  130.     for (pos=0;FGets(stripread,buffer,100);pos++)
  131.     {
  132.         main_strip=(char **) realloc(main_strip,(pos+1)*sizeof(char *));
  133.         main_strip[pos]=NULL;
  134.         len=strlen(buffer);
  135.         main_strip[pos]=(char *) malloc (len+1);
  136.         if (main_strip[pos]!=NULL)
  137.             strcpy(main_strip[pos],buffer);
  138.     }
  139.     Close(stripread);
  140.     main_strip=(char **) realloc(main_strip,(pos+1)*sizeof(char *));
  141.     main_strip[pos]=NULL;
  142.  
  143. /* oeffnen des stripfiles striplist.pattern ins ram: */
  144. /* wenn man folgende zeile drin hat 
  145.     [ds9bbs]
  146.     dann isses wie wenn man in der shell 
  147.     delete #?[ds9bbs]#?
  148.     eingibt.. er such halt ob er genau diese zeile bis zum letzten zeichen
  149.     irgendwo in der file_Id findet
  150.     */
  151.  
  152.  
  153.     lock = GetProgramDir();
  154.     NameFromLock(lock, buffer, 89);
  155.     strcat(buffer,"/striplist.pattern");
  156.     stripread=Open(buffer,MODE_OLDFILE);
  157.     for (pos=0;FGets(stripread,buffer,100);pos++)
  158.     {
  159.         main_strip2=(char **) realloc(main_strip2,(pos+1)*sizeof(char *));
  160.         main_strip2[pos]=NULL;
  161.         len=strlen(buffer);
  162.         main_strip2[pos]=(char *) malloc (len+1);
  163.         if (main_strip2[pos]!=NULL)
  164.             strcpy(main_strip2[pos],buffer);
  165.     }
  166.     Close(stripread);
  167.     main_strip2=(char **) realloc(main_strip2,(pos+1)*sizeof(char *));
  168.     main_strip2[pos]=NULL;
  169.  
  170.  
  171. /*   Jetzt liesst er die eigentliche File id ins ram: */
  172.  
  173.  
  174.     fileread=Open(ptr,MODE_OLDFILE);
  175.     for (pos=0;FGets(fileread,buffer,100);pos++)
  176.     {
  177.         main_fileid=(char **) realloc(main_fileid,(pos+1)*sizeof(char *));
  178.         main_fileid[pos]=NULL;
  179.         len=strlen(buffer);
  180.         main_fileid[pos]=(char *) malloc (len+1);
  181.         if (main_fileid[pos]!=NULL)
  182.             strcpy(main_fileid[pos],buffer);
  183.     }
  184.     Close (fileread);
  185.     main_fileid=(char **) realloc(main_fileid,(pos+1)*sizeof(char *));
  186.     main_fileid[pos]=NULL;
  187.  
  188. /* eigentliche strip routine... rann man bestimmt noch verschoenern */
  189.  
  190.     for (pos=0;main_fileid[pos]!=NULL;pos++ )
  191.      {    
  192.         strip=FALSE;
  193.         for (pos1=0;main_strip[pos1]!=NULL;pos1++)
  194.         {
  195.             if (!strncmp(main_fileid[pos],main_strip[pos1],(strlen(main_strip[pos1])-1)))
  196.                 strip=TRUE;
  197.         }
  198.         
  199.         
  200.         if (strip==FALSE)
  201.             for (pos1=0;main_strip2[pos1]!=NULL;pos1++)
  202.             {    
  203.                 main_strip2[pos1][strlen(main_strip2[pos1])-1]='\0';
  204.                 if (strstr(main_fileid[pos],main_strip2[pos1]))
  205.                     strip=TRUE;
  206.             }
  207.         
  208.             
  209.         if (strip==FALSE) 
  210.         {
  211.             main_newid=(char **) realloc(main_newid,(pos2+1)*sizeof(char *));
  212.             main_newid[pos2]=NULL;
  213.             len=strlen(main_fileid[pos]);
  214.             main_newid[pos2]=(char *) malloc (len+1);
  215.             if (main_newid[pos2]!=NULL)
  216.                 strcpy(main_newid[pos2],main_fileid[pos]);
  217.             pos2++;    
  218.         }
  219.         else stripnr++;
  220.     }
  221.     main_newid=(char **) realloc(main_newid,(pos2+1)*sizeof(char *));
  222.     main_newid[pos2]=NULL;
  223. /* main_newid[0-bla] sind die einzelnen zeilen der neuen file ID*/
  224. /* wenn nichts in der file_id gestripped wurde ist hier 
  225.    stripnr==0 ansonsten isses die anzahl von zeilen die gestripped wurden*/
  226. /* Als naechstes wird die neue file id geschrieben */
  227.     if (stripnr)
  228.     {
  229.         filewrite=Open(ptr,MODE_NEWFILE);
  230.         for (pos=0;main_newid[pos]!=NULL;pos++)
  231.             FPuts(filewrite,main_newid[pos]);
  232.         Close(filewrite);
  233.     }
  234.     for (pos=0;main_newid[pos]!=NULL;pos++)
  235.         free(main_newid[pos]);
  236.     free (main_newid);
  237.     for (pos=0;main_strip[pos]!=NULL;pos++)
  238.         free(main_strip[pos]);
  239.     free (main_strip);
  240.     for (pos=0;main_fileid[pos]!=NULL;pos++)
  241.         free(main_fileid[pos]);
  242.     free (main_fileid);
  243.     return (stripnr);
  244. }
  245.  
  246. /****************************************************************************/
  247. main(argc, argv)
  248. int argc;
  249. char *argv[];
  250. {
  251.         if(argc!=2)
  252.         {
  253.                 printf("\n%s: XIM-DOOR for S-Express!\n\n",version);
  254.                 exit(0);
  255.         }
  256.         Node=atoi(argv[1]);
  257.  
  258.         OpenLibs();
  259.         d=CreateComm(argv[1][0]);
  260.         strf= GetString(d);
  261.  
  262.         start(Node);
  263.  
  264.         CloseLibs();
  265.         DeleteComm(d);
  266. }
  267.