//________________________________________________________________________
// NoCurl.cpp

#include <stdlib.h>
#include <string.h>
#include "NoCurl.h"
#define ASSEZ 0x40000                // 256 Kbytes

extern FILE *Door[NBFILES];
extern char *CurUrl[NBFILES], UrlName[NBFILES][1024];
static char Header[] = "https://www.cortalconsors.fr", *Large[NBFILES],
            Page[] = "            Page", *Milieu, *Champ, *Buffer,
            UrlOri[] = "https://www.cortalconsors.fr/euroWebFr/-?$part=financeinfosHome.Desks.futures.Desks.overview";
static int  IsParis = 0, Utile, NbRead;
//________________________________________________________________________
static void FillBuffer ( int Fdx )   // one shot read
{
  fflush ( Door[Fdx] );
  fseek  ( Door[Fdx], 0, SEEK_SET );
  NbRead = fread ( Buffer, 1, ASSEZ, Door[Fdx] );
  Champ  = Buffer;
  Utile  = -1;
}
//________________________________________________________________________
static long ReadString ()
{
  void *End;
  Champ  += Utile + 1;
  NbRead -= Utile + 1;
  if ( !NbRead || !(End = memchr ( Champ, '\n', NbRead )) )   return 0;
  Utile = (char*) End - Champ;
  Champ[Utile] = '\0';
  return 1;
}
//________________________________________________________________________
void VeriSign ( int& MaxLon )
{
  char Tampon[48], Surf[] = "&$event=page&offset=0000", *Car;

  CurUrl[0] = UrlName[0];
  FillBuffer ( 0 );
  while ( ReadString () ) {
    if ( !IsParis )
      IsParis = strstr ( Champ, ">Paris<" ) != 0;
    else if ( strstr ( Champ, "INSTRUMENT" ) ) {
      int Len, Hen = strlen ( Header );
      Milieu = strchr ( Champ, '"' ) + 1;
      Len    = strchr ( Milieu, '"' ) - Milieu;
      memcpy ( CurUrl[0], Header, Hen );
      memcpy ( CurUrl[0] + Hen, Milieu, Len );
      CurUrl[0][Hen + Len] = '\0';
      break;
    }
  }
  fseek ( Door[0], 0, SEEK_SET );
  Car = strstr ( CurUrl[0], "Desks.overview" ) + 6;
  strncpy ( Tampon, Car + 54, 47 );
  strncpy ( Car, "snapshot.content.snapshot.snapshot.timesandsales", 48 );
  strncpy ( Car + 48, Tampon, 47 );
  strcpy  ( Car + 48 + 47, Surf );
  MaxLon = Car - CurUrl[0] + 48 + 47 + strlen ( Surf ) - 4;
    //+++
    char *X = strstr ( CurUrl[0], "&id=" );
    strncpy ( X + 4, "17229744", 8 );
    X = strstr ( CurUrl[0], "&exchange=" );
    strncpy ( X + 10, "CMR", 3 );
    //+++
  strcpy ( CurUrl[1], CurUrl[0] );
}
//________________________________________________________________________
void Extrait ( int Fdx )
{
  FillBuffer ( Fdx );
  while ( ReadString ()   &&   !strstr ( Champ, Page ) );
  while ( ReadString () ) {
    if ( strstr ( Champ, "class=\"date\"" ) ) {
      ReadString ();
      printf ( "%.8s ++++++++++++++++++++++++++++++++++++++++++++++\n",
               Champ + 16 );         // BUG: both writes are identical...
      break;                         //      ... or only one write
    }
    else if ( strstr ( Champ, Page ) )   break;
  }
}
//________________________________________________________________________
void Ouvre ( int Idx )
{
  char TempName[] = "Temp000";
  sprintf ( TempName + 4, "%03d", Idx );
  Large[Idx]   = (char*) malloc ( ASSEZ + 0x40 + 0x10 );
  if ( !Idx )   Buffer = (char*) malloc ( ASSEZ );
  Door[Idx]    = fopen ( TempName, "w+b" );
  setvbuf ( Door[Idx], Large[Idx], _IOFBF, ASSEZ );
}
//________________________________________________________________________
void Ferme ( int Idx )
{
  fclose ( Door[Idx] );
  free ( (void*) Large[Idx] );
  if ( !Idx )   free ( (void*) Buffer );
}
//________________________________________________________________________
void OriginalUrl ( char* &Url )
{
  Url = UrlOri;
}
//________________________________________________________________________
