/* Start of A Nexus Password Hacker */
CRAY WAS HERE!!!!!!!!
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <clib/dos_protos.h>
#include <intuition/screens.h>
#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <clib/wb_protos.h>
#include <clib/intuition_protos.h>
#include <clib/gadtools_protos.h>
#include <clib/graphics_protos.h>
#include <clib/asl_protos.h>
#include "Hacker.c"
#include "Big_time.c"

/* Gadget Names ARE:
 DrawImage( HackersWnd->RPort, &BabyImage, offx + 32, offy + 64);
      Gadget - 1 - BUTTON Type = ADVANCE
      Gadget - 2 - BUTTON Type = BACK
      Gadget - 3 - TEXT Type = NAME
      Gadget - 4 - TEXT Type = PASSWORD
      Gadget - 5 - TEXT Type = TERMINATOR
      Gadget - 6 - NUMBER Type = POSITION
      Gadget - 7 - NUMBER Type = SIZE
      Gadget - 8 - NUMBER Type = MAGIC
      Gadget - 9 - NUMBER Type = NUMBER
      Gadget - 10 - Number Type = STATUS

      External  GadTools Calls From The Hacker.c File Are:

int OpenHackersWindow( void );
void HackersRender( void );
void CloseDownScreen( void );
void SetupScreen( void );
void CloseHackersWindow( void );

*/

struct UsersFile
{
    char    Header[2];
    char    Name[21];
    char    Terminator[1];
    char    Unknown[4];
    char    Password[21];
    char    MagicNumber;
    char    Haventclue[2];
    char    UserRootDirectory[50];
    char    Status;
    char    Options[7];
};
char PathofFile[200];
void IDCMPHandler( void );
void Forward( void );
void Crack( void );
VOID Back( void );
void Save( void );
void Print( void );
void UsersLoad( void );
void Status( char *);

FILE *MyFile;
BOOL FileOpen=FALSE;
BOOL NoFile=FALSE;
char PathofFile2[200];
struct UsersFile *UsersPTR, UsersFile;
//struct VectorFile *VectorPTR, Vector;
int UserNumber=0;
struct Image BIG_TIME = { 0, 0, 287, 62, 3, &BIG_TIMEData[0], 7, 0, NULL};
main()
{
    SetupScreen();
    OpenHackersWindow();
    DrawImage( HackersWnd->RPort, &BIG_TIME, 108, 61);
   
    Status("No User File Loaded.");
    IDCMPHandler();
    CloseHackersWindow();
    CloseDownScreen();
    fclose(MyFile);
}

void Status( char *Status_String)
{
    GT_SetGadgetAttrs(HackersGadgets[13],
    HackersWnd, NULL,
    GTTX_Text,Status_String,
    TAG_END);
}
void IDCMPHandler( void )
{
 struct IntuiMessage *imsg;
 struct Gadget       *gad;
 BOOL   terminated = FALSE;
 UsersPTR = &UsersFile;
 while(!terminated)
       {
        Wait(1 <<HackersWnd->UserPort->mp_SigBit);
        while((!terminated) && (imsg = GT_GetIMsg(HackersWnd->UserPort)))
             {
               switch(imsg->Class)
                     {
                        case IDCMP_GADGETUP:
                              gad = (struct Gadget *)imsg->IAddress;
                               switch(gad->GadgetID)
                                     {
                                       case GD_BACK:
                                            UserNumber++;
                                            Forward();
                                            break;

                                       case GD_ADVANCE:
                                            Back();
                                            break;
                                       
                                       case GD_SAVE:
                                            Save();
                                            break;
                                            
                                       case GD_OPEN:
					    UsersLoad();
					    break;
				       
				       case GD_LIST:
					    RectFill(HackersWnd->RPort,1,1,10,10);
		                            break;

				       case GD_PRINT:
                                            Print();
                                            break;
                                    }
                                          
                         
            
                         case IDCMP_REFRESHWINDOW:
                              GT_BeginRefresh(HackersWnd);
                              GT_EndRefresh(HackersWnd,TRUE);
                              break;
                         
                         case IDCMP_MENUPICK:
                                switch(imsg->Code)
                                   case 63616:
                                        terminated=TRUE;
                                         break;
                                   case 63491:
                                        Save();
                                        break;
                         case IDCMP_CLOSEWINDOW:
                               terminated=TRUE;
                               break;



                     }

             GT_ReplyIMsg(imsg);
             }
       }
}



void Print( void )
{
    char buffer[200];
    Save();
    sprintf(buffer,"type %s >PRT:",PathofFile2);
    Execute(buffer,0,0);
    remove(PathofFile2);
}
void Save( void )
{
    char PathofFile2[200];
    struct TagItem MyTags[4];
    struct FileRequester *Requester;    
    FILE *OutPut;
  
if(FileOpen==TRUE)
{
    MyTags[0].ti_Tag=ASL_Hail;
    MyTags[0].ti_Data=(unsigned long)"Please Select SAVE File Name..\0";
    MyTags[1].ti_Tag=ASLFR_PositiveText;
    MyTags[1].ti_Data=(unsigned long)"Save..\0";
    MyTags[2].ti_Tag=ASLFR_NegativeText;
    MyTags[2].ti_Data=(unsigned long)"Abort..\0";;
    MyTags[3].ti_Tag=TAG_DONE;
    Requester = AllocAslRequest(ASL_FileRequest,MyTags);
    if(!AslRequest(Requester,NULL))
       {
        DisplayBeep(0);
        NoFile=TRUE;
       }
    FreeAslRequest(Requester);
    strcpy(PathofFile2,Requester->fr_Drawer);
    strcat(PathofFile2,Requester->fr_File);
if(NoFile !=TRUE)
 {
    OutPut = fopen(PathofFile2,"w");
    rewind( MyFile);
    fprintf(OutPut,"Handy PassWord List From The Nexus Network\nBrought To You By Sophocles\nAmiga Port by Cray-1\n\n");
while(!feof(MyFile))
    {
     fread(UsersPTR,sizeof(UsersFile),1,MyFile);
     Crack();
     strcpy(UsersFile.Terminator,"\0");
     fprintf(OutPut,"User - %s PassWord Is - %s\n",strrev(UsersFile.Name),UsersFile.Password);
    }
    fclose( OutPut );
 }
    UserNumber=1;
    rewind( MyFile );
    Forward();
}
}

void UsersLoad( void )
{
    struct FileRequester *Requester;
    struct TagItem MyTags[4];
    MyTags[0].ti_Tag=ASL_Hail;
    MyTags[0].ti_Data=(unsigned long)"Please Select AcornSoft Users File.\0";
    MyTags[1].ti_Tag=ASLFR_PositiveText;
    MyTags[1].ti_Data=(unsigned long)"Open..\0";
    MyTags[2].ti_Tag=ASLFR_NegativeText;
    MyTags[2].ti_Data=(unsigned long)"Abort..\0";;
    MyTags[3].ti_Tag=TAG_DONE;
    Status("Opening A New User File...");
    Requester = AllocAslRequest(ASL_FileRequest,MyTags);
    if(!AslRequest(Requester,NULL))
           {
                        DisplayBeep(0);
                        NoFile=TRUE;
           }
     FreeAslRequest(Requester);
     strcpy(PathofFile,Requester->fr_Drawer);
     strcat(PathofFile,Requester->fr_File);
if(NoFile !=TRUE)
{
    MyFile=fopen(PathofFile,"rb");
    FileOpen=TRUE;
    Status("OK");
}

}    
void Forward( void )
{
    if(FileOpen==TRUE)
    {
    Status("Forward A User");
    fread(UsersPTR,sizeof(UsersFile),1,MyFile);
    GT_SetGadgetAttrs(HackersGadgets[12],
    HackersWnd, NULL,
    GTTX_Text, PathofFile,
    TAG_END);
    
    strcpy(UsersFile.Terminator,"\0");
    GT_SetGadgetAttrs(HackersGadgets[2],
    HackersWnd, NULL,
    GTTX_Text, strrev(UsersFile.Name),
    TAG_END);
  
    GT_SetGadgetAttrs(HackersGadgets[5],
    HackersWnd, NULL,
    GTNM_Number,UsersFile.MagicNumber,
    TAG_END);
    
    Crack(); 
    
    GT_SetGadgetAttrs(HackersGadgets[7],
    HackersWnd, NULL,
    GTTX_Text,"Normal",
    TAG_END);
    
if(UsersFile.Status==-1)
{
   GT_SetGadgetAttrs(HackersGadgets[7],
   HackersWnd, NULL,
   GTTX_Text, "SySop!",
   TAG_END);
}
     
    GT_SetGadgetAttrs(HackersGadgets[4],
    HackersWnd, NULL,
    GTNM_Number,ftell( MyFile ),
    TAG_END); 
         
    GT_SetGadgetAttrs(HackersGadgets[6],
    HackersWnd, NULL,
    GTNM_Number,UserNumber,
    TAG_END); 
    Status("OK.");
}
  
} 

void Back( void )
{
if(FileOpen==TRUE)
{
    Status("Back A User");
    if(UserNumber>1)
    {
    int x=sizeof(UsersFile);
    fseek(MyFile,-x,SEEK_CUR);
    fseek(MyFile,-x,SEEK_CUR);
    UserNumber--;
    Forward();
    } 
    if(UserNumber<1)
    {
        DisplayBeep(0);
    }
}
}   
 
void Crack( void )
{   

    int x;
if(FileOpen==TRUE)
{
    for(x=0; x<=20; x++)
     {
     UsersFile.Password[x] = UsersFile.Password[x] ^ UsersFile.MagicNumber;
     if(UsersFile.Password[x] < 32)
        { 
         UsersFile.Password[x] += 32; 
        }
     }
     UsersFile.Password[21]=NULL;
     GT_SetGadgetAttrs(HackersGadgets[3],
     HackersWnd, NULL,
     GTTX_Text, UsersFile.Password,
     TAG_END);
}
}
     
