talker/
talker/bin/
talker/files/whois/
talker/update/
talker/update/bin/
/* ssort.c -- version 2.1.3  */

/* Written by Michael "traP" Bourdaa on 10/11/95 for use in Playground 96 */
/* last update: 4/1/96 */
/* parts of this code are from EW-too by Simon Marsh */

#include <stdio.h>
#include <string.h>
#include <time.h>
#include "config.h"

#define MAX_SORT 100
#define TOP_LIST 50 
#define TALKER_NAME "Stupidland"

void load_raw_file();
void sort_users();
void output_file();

int cnt = 0;

typedef struct {
	char name[20];
	int login;
        int partic;
	} USER;

USER user[MAX_SORT];

main () {

	load_raw_file();
	sort_users();
	output_file();
}


/* copied directly from PlayCode */

char           *sys_time()
{
   time_t          t;
   static char     time_string[50];
   t = time(0);
   strftime(time_string, 50, "%I:%M:%S %p, %B %d, %Y", localtime(&t));
   return time_string;
}

void load_raw_file()
{
	char waste[100];
	/* get the two unneeded header lines */
	gets(waste);
	gets(waste);
	
	scanf("%d %d %s\n", &(user[cnt].login), &(user[cnt].partic), user[cnt].name); 	
	while (user[cnt].login != 0) {
		cnt++;
	        scanf("%d %d %s\n", &(user[cnt].login), &(user[cnt].partic), user[cnt].name); 	
		}
}

/* uses a bubble sort.. another sorting algorithm would be much faster */
/* because of this implementation, we have to be careful to not take in
   too big of a list of players on the users end. */

void swap(int a, int b)
{
	USER temp;

	strcpy(temp.name, user[a].name);
	strcpy(user[a].name, user[b].name);
	strcpy(user[b].name, temp.name);

	temp.login = user[a].login;
	user[a].login = user[b].login;
	user[b].login = temp.login;

	temp.partic = user[a].partic;
	user[a].partic = user[b].partic;
	user[b].partic = temp.partic;

	return;
}

void sort_users()
{
	int sort_again = 1;
	int i;

	while (sort_again) {

		sort_again = 0;
		for (i=0; i < (cnt + 1); i++) {

			if (user[i].login < user[i+1].login)  {
				swap(i, i+1);
				sort_again = 1;
				}

			} /* end for */
		}
}

/* copied straight from EW-too -- if it works, why rewrite? */

char           *word_time(int t)
{
   static char     time_string[100], *fill;
   int             days, hrs, mins, secs;
   if (!t)
      return "no time at all";
   days = t / 86400;
   hrs = (t / 3600) % 24;
   mins = (t / 60) % 60;
   secs = t % 60;
   fill = time_string;
   if (days)
   {
      sprintf(fill, "%d day", days);
      while (*fill)
    fill++;
      if (days != 1)
    *fill++ = 's';
      if (hrs || mins || secs)
      {
    *fill++ = ',';
    *fill++ = ' ';
      }
   }
   if (hrs)
   {
      sprintf(fill, "%d hour", hrs);
      while (*fill)
    fill++;
      if (hrs != 1)
    *fill++ = 's';
      if (mins && secs)
      {
    *fill++ = ',';
    *fill++ = ' ';
      }
      if ((mins && !secs) || (!mins && secs))
      {
    strcpy(fill, " and ");
    while (*fill)
       fill++;
      }
   }
   if (mins)
   {
      sprintf(fill, "%d min", mins);
      while (*fill)
    fill++;
      if (mins != 1)
    *fill++ = 's';
      if (secs)
      {
    strcpy(fill, " and ");
    while (*fill)
       fill++;
      }
   }
   if (secs)
   {
      sprintf(fill, "%d sec", secs);
      while (*fill)
    fill++;
      if (secs != 1)
    *fill++ = 's';
   }
   *fill++ = 0;
   return time_string;
}

char *bufit(int i) {

	if (user[i].partic >= 100)
		return "-- ";
	else
		return "--  ";
}

/* uses PG96 color codes to colorize the output file */
/* uses straight printf, so must use data redirection from the shell. */
void output_file() {

	int i; 

        printf("   -=> ^R%s^N ^Btop^N ^Y50^N ^Gspods^N ^P%s PST^N <=-\n", TALKER_NAME, sys_time()); 
	for (i=0; (i < cnt && i < TOP_LIST); i++) {

               if (i == 0)
		printf("^U^H %d. %-20s %s %d.%d -- %s^N\n", (i+1), user[i].name, bufit(i),user[i].partic/10, user[i].partic%10, word_time(user[i].login)); 
               else if (i == 1)
		printf("^U^R %d. %-20s %s %d.%d -- %s^N\n", (i+1), user[i].name, bufit(i),user[i].partic/10, user[i].partic%10, word_time(user[i].login)); 
               else if (i == 2)
		printf("^U^Y %d. %-20s %s %d.%d -- %s^N\n", (i+1), user[i].name, bufit(i),user[i].partic/10, user[i].partic%10, word_time(user[i].login)); 
               else if (i < 5)
		printf("^U^G %d. %-20s %s %d.%d -- %s^N\n", (i+1), user[i].name, bufit(i),user[i].partic/10, user[i].partic%10, word_time(user[i].login)); 
               else if (i < 9)
		printf("^U^B %d. %-20s %s %d.%d -- %s^N\n", (i+1), user[i].name, bufit(i),user[i].partic/10, user[i].partic%10, word_time(user[i].login)); 
               else if (i == 9)
		printf("^U^B%d. %-20s %s %d.%d -- %s^N\n", (i+1), user[i].name, bufit(i),user[i].partic/10, user[i].partic%10, word_time(user[i].login)); 
               else if (i < 25)
		printf("^U^p%d. %-20s %s %d.%d -- %s^N\n", (i+1), user[i].name, bufit(i),user[i].partic/10, user[i].partic%10, word_time(user[i].login)); 
               else 
		printf("^U^y%d. %-20s %s %d.%d -- %s^N\n", (i+1), user[i].name, bufit(i),user[i].partic/10, user[i].partic%10, word_time(user[i].login)); 

		}
}