text: /* ************************************************************************
  *  file:  delobjs.c                                   Part of CircleMud   *
  *  Usage: deleting object files for players who are not in the playerfile *
  *  Written by Jeremy Elson 4/2/93                                         *
  *  All Rights Reserved                                                    *
  *  Copyright (C) 1993 The Trustees of The Johns Hopkins University        *
  ************************************************************************* */
  
  /*
     I recommend you use the script in the lib/plrobjs directory instead of
     invoking this program directly; however, you can use this program thusly:
  
     usage: switch into an obj directory; type: delobjs <plrfile> <obj wildcard>
   */
  
  #include "conf.h"
  #include "sysdep.h"
  #include "structs.h"
  #include "utils.h"
  
  struct name_element {
      char name[20];
      struct name_element *next;
  };
  
  struct name_element *name_list = 0;
  
  void do_purge(int argc, char **argv) {
      int x;
      struct name_element *tmp;
      char name[1024];
      int found;
  
      for (x = 2; x < argc; x++) {
          found = 0;
          strcpy(name, argv[x]);
          *(strchr(name, '.')) = '\0';
  
          for (tmp = name_list; !found && tmp; tmp = tmp->next) {
              if (!strcmp(tmp->name, name)) {
                  found = 1;
              }
          }
  
          if (!found) {
              remove(argv[x]);
              printf("Deleting %s\n", argv[x]);
          }
      }
  }
  
  int main(int argc, char **argv) {
      char *ptr;
      struct char_file_u player;
      int okay;
      struct name_element *tmp;
      FILE *fl;
  
      if (argc < 3) {
          printf("Usage: %s <playerfile-name> <file1> <file2> ... <filen>\n", argv[0]);
  
          exit(1);
      }
  
      if (!(fl = fopen(argv[1], "rb"))) {
          perror("Unable to open playerfile for reading");
  
          exit(1);
      }
  
      while (1) {
          fread(&player, sizeof(player), 1, fl);
  
          if (feof(fl)) {
              fclose(fl);
              do_purge(argc, argv);
              exit(0);
          }
  
          okay = 1;
  
          for (ptr = player.name; *ptr; ptr++) {
              *ptr = LOWER(*ptr);
          }
  
          if (player.char_specials_saved.act & PLR_DELETED) {
              okay = 0;
          }
  
          if (okay) {
              tmp = (struct name_element *) malloc(sizeof(struct name_element));
              tmp->next = name_list;
              strcpy(tmp->name, player.name);
              name_list = tmp;
          }
      }
  }
  