/* **** HBBS Door Code****************************************************** */

/*
  AskSentBy
  =========

    Asks for a sentby string.

  Version
  =======

    1.0, release 1 22-06-1996

  Options
  =======

    N_ND->ActiveDoor->SystemOptions
    -------------------------------

    None

    Command Line Arguments
    ----------------------

    2  ..

    3  ..

    4  ..

  ToDo
  ====

    Nothing


*/

/* **** Includes *********************************************************** */

#include <exec/types.h>
#include <exec/memory.h>
#include <dos/dos.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>
#include <clib/alib_protos.h>

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <time.h>

#include <HBBS/ANSI_Codes.h>
#include <HBBS/Defines.h>
#include <HBBS/Access.h>
#include <HBBS/types.h>
#include <HBBS/structures.h>
#include <HBBS/hbbscommon_protos.h>
#include <HBBS/hbbscommon_pragmas.h>
#include <HBBS/Hbbsnode_protos.h>
#include <HBBS/Hbbsnode_pragmas.h>
#include <HBBS/release.h>
char *versionstr="$VER: AskSentBy "RELEASE_STR;

/* **** Variables ********************************************************** */


struct Library *HBBSCommonBase  = NULL;
struct Library *HBBSNodeBase    = NULL;

struct BBSGlobalData *BBSGlobal = NULL;
struct NodeData *N_ND           = NULL;
int    N_NodeNum                = -1;
char   outstr[1024];

long __stack=16*1024; // increse this in 4k incrments if you suffer from
                      // random/suprious crashings after or during the running
                      // of your door.

int    gargc;         // these are just copies of main()'s argc and argv..
char   **gargv;

/* **** Functions ********************************************************** */


#ifdef __SASC
int CXBRK(void) { return(0); }
int _CXBRK(void) { return(0); }
void chkabort(void) {}
#endif

static VOID cleanup(ULONG num)
{
  if (HBBSNodeBase)
  {
    HBBS_CleanUpDoor();
    CloseLibrary (HBBSNodeBase);
  }

  if (HBBSCommonBase)
  {
    HBBS_CleanUpCommon();
    CloseLibrary (HBBSCommonBase);
  }

  if (num) printf("Door Error = %d\n",num);

  exit(0);
}

static VOID init(char *name)
{
  if(!(HBBSCommonBase = OpenLibrary("HBBSCommon.library",0)))
  {
    cleanup(1);
  }

  if (!(HBBS_InitCommon()))
  {
    cleanup(2);
  }

  if(!(HBBSNodeBase = OpenLibrary("HBBSNode.library",0)))
  {
    cleanup(3);
  }

  if (!(HBBS_InitDoor(N_NodeNum,name)))
  {
    cleanup(4);
  }
  SetProgramName(name);
}

/* **** DoorMain *********************************************************** */

void DoorMain( void )
{
  if (!N_ND->User->CallData->SentBy[0])
  {

    sprintf(N_ND->User->CallData->SentBy,"Uploaded By: %s",N_ND->User->CallData->Handle);
    if (strlen(N_ND->User->CallData->SentBy)<(LEN_SENTBY - 4 - strlen(N_ND->User->CallData->Group)))
    {
      strcat(N_ND->User->CallData->SentBy," / ");
      strcat(N_ND->User->CallData->SentBy,N_ND->User->CallData->Group);
    }
  }

  N_ND->User->CallData->SentBy[LEN_DIZWIDTH]=0;

  DOOR_WriteText("\033[2J\033[H\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[35m-=\033[36m[\033[37m HydraSENT \033[36m]\033[35m=-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\r\n"
                 "\033[32m Please Enter A Sentby Line Below, (it gets attached to all your descriptions)  \r\n"
                 "\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\r\n"
                 "\033[32m\033[15C-\033[35m>\033[37m\033[45C\033[35m<\033[32m-\r\n"
                 "\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[37m-\033[31m-\033[34m-\033[31m\r\n\033[2A\033[17C" ANSI_FG_WHITE);
  DOOR_GetLine(GL_EDIT|GL_DISPLAY|GL_NODISTURB|GL_NORETURN,'\0',LEN_DIZWIDTH,0,N_ND->User->CallData->SentBy);
  if (N_ND->OnlineStatus==OS_ONLINE)
  {
    DOOR_WriteText("\033[2B\r\n" ANSI_RESET);
    if (N_ND->CurrentLine[0])
    {
      strncpy(N_ND->User->CallData->SentBy,N_ND->CurrentLine,LEN_SENTBY);
      strncpy(N_ND->User->NormalData->SentBy,N_ND->CurrentLine,LEN_SENTBY);
      DOOR_Return("OK");
    }
    else
    {
      DOOR_WriteText("Sorry, You can't have a blank sentby line. Your sentby has not been changed!\r\n");
      DOOR_Return("NOTCHANGED");
    }
  }
}
int main(int argc,char **argv)
{
  gargc=argc;
  gargv=argv;

  if (sscanf(argv[1],"%d",&N_NodeNum)==0)
  {
    printf("Invalid/No Paramaters for door!\n");
    exit (20);
  }
  init("<doorname>");

  if (BBSGlobal=HBBS_GimmeBBS())
  {
    if (N_ND=HBBS_NodeDataPtr(N_NodeNum)) // this should not fail in normal circumstances..
    {
      DoorMain();
    }
  }
  cleanup(0);
}

/* **** End Of File ******************************************************** */
