/*
================================================================================
 PROGRAM: Indexer
 VERSION: v3.15
COMPILER: SAS C v6.51
    DATE: June 15 1994
  FORMAT: OS/2
================================================================================*/

#include <proto/all.h>
#include <string.h>
#include <stdlib.h>
#include <Tempest/headers.h>
#include <stdarg.h>
#include <stdio.h>
#include <proto/dos.h>

void main(int,char **);
UWORD GetCheckSum(char *);
void PRINTF(char *fmt,...);

struct User User;
struct Csum Csum;

void main(int argc,char *argv[])
{
 int infile,indexfile,csumfile;
 char string1[255];
 long pos,status;
 long slot=0;

 if(argc!=2)
  {
   PRINTF("\nUser Index Maker v3.24\nUSAGE: UserIndexMaker TEMPEST:\n\n");
   exit(0);
  }

 pos=sizeof(struct User);
 pos-=31;

 sprintf(string1,"%sAccounts.Data",argv[1]);
 infile=Open(string1,MODE_OLDFILE);
 if(infile==0)
  {
   PRINTF("Accounts.Data not found\n");
   exit(0);
  }

 sprintf(string1,"%sAccounts.Inx",argv[1]);
 indexfile=Open(string1,MODE_NEWFILE);
 if(indexfile==0)
  {
   PRINTF("Could not create Accounts.inx file.\n");
   Close(infile);
   exit(0);
  }

 sprintf(string1,"%sAccounts.csum",argv[1]);
 csumfile=Open(string1,MODE_NEWFILE);
 if(csumfile==0)
  {
   PRINTF("Could not create Accounts.csum file\n");
   Close(infile);
   Close(indexfile);
   exit(0);
  }

 PRINTF("Creating User Index file\n");
 PRINTF("Creating User Check Sum File\n");

 NEXT:

 slot++;
 status=Read(infile,(char *)&User,sizeof(struct User));
 if(status!=sizeof(struct User))
  {
   PRINTF("Files created, all done.\n");
   Close(infile);
   Close(indexfile);
   Close(csumfile);
   exit(0);
  }
 setmem(&string1,40,NULL);
 if(User.Name[30]!=NULL)
    PRINTF("\r\nCorupt Name detected, slot %d\r\n",slot);

 User.Name[30]=NULL;              // Safety check
 strcpy(string1,User.Name);
 Write(indexfile,string1,31);

 Csum.Csum=GetCheckSum(User.Name);
 Write(csumfile,(char *)&Csum,sizeof(struct Csum));
 goto NEXT;
}

//***************************
//*****  Get Check Sum  *****
//***************************

UWORD GetCheckSum(string)
char *string;
{
 UWORD ck=0;
 register char c, *s;
 strupr(string);
 for(s=string;c=*s++;) ck+=c;
 return((UWORD)ck);
}

//===========================* Beginning of Module *===========================
void PRINTF(char *fmt,...)
{
 va_list args;
 char string[150];
 va_start(args, fmt);
 vsprintf(string, fmt, args);
 va_end(args);
 Write(Output(),string,strlen(string));
}
