///////////////////////////////////////////////////////////////////////////
/////  Nombre:        Cstrings.CPP                                      ///
/////  Modulo:        Perteneciente a Catalogo.C                        ///
////   Descripci¢n:   Utilidades para el manejo de Strings...           ///
////                                                                    ///
////   Autor:    Jos‚ David Guill‚n Dominguez                           ///
////   Fecha:    20 - 07  - 1994                                        ///
////                                                                    ///
////   Compilador Borland C++ 3.0                                       ///
///////////////////////////////////////////////////////////////////////////

#include <graphics.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
#include <stdio.h>

extern void Sound_SN(char headfile[]);

extern int sb;        /* Indica si esta instalada la SB (def. NO)          */

int InputCadenaG(char *s, int numalp, int lmax, int px, int py, int cc, int cf);


int InputCadenaG(char *s, int numalp, int lmax, int px, int py, int cc, int cf)
{

  char buf[81];                                 // Buffer de linea
  int  ls;                                      // longitud cadena
  char *s1;                                     // puntero a cadena inicial
  int i, c, ok;

  s1 = s;                                       // inicio cadena

  setcolor(cf);                                 // pone color a 0 para borrar
  for (i=0; i<lmax; i++)                        // limpia linea para imprimir
		outtextxy( ( px + i ) * 8 - 7, py * 16 - 16, "Û");
  setcolor(cc);                                 // devuelve el color a su estado

  outtextxy( ( px ) * 8 - 7, py * 16 - 16, s );

  ls = strlen ( s );                            // Longitud de actual

  if ( ls < lmax ) {
		setcolor(4);
		outtextxy( ( px + ls ) * 8 - 7, py * 16 - 16, "þ");
  }

  s += ls;                                      // se coloca en el final

  do{
	c = getch();                            // obtiene tecla

	ok = ( c == 13 || c == 0);              // 13 = INTRO || Especiales

	if ( c == 8  && ls > 0 && !ok ) {       //  8 = Back Space
		ls--;
		s--;

		setcolor(cf);
		outtextxy( (px + ls) * 8 - 7, py * 16 - 16, "Û");
		if ( ls + 1 < lmax ) outtextxy( ( px + ls + 1 ) * 8 - 7, py * 16 - 16, "Û");

		setcolor(4);
		outtextxy( (px + ls) * 8 - 7, py * 16 - 16, "þ");
		setcolor(cc);

	} else {
		if ( !numalp && c >= 32 && c <= 254 /* isprint(c) */ && ls < lmax) {

			*s++ = c;
			ls++;

			*s = '\0';                              // Cero final
			setcolor(cf);                           // pone color a 0 para borrar
			for (i=0; i<lmax; i++)                  // limpia linea para imprimir
			  outtextxy( ( px + i ) * 8 - 7, py * 16 - 16, "Û");
			setcolor(cc);                           // devuelve el color a su estado

			outtextxy( (px) * 8 - 7, py * 16 - 16, s1 );

			if ( ls < lmax ) {
				setcolor(4);
				outtextxy( ( px + ls ) * 8 - 7, py * 16 - 16, "þ");
			}


		} else {
			if ( numalp && isdigit(c)  && ls < lmax) {
				*s++ = c;
				ls++;

				*s = '\0';                              // Cero final
				setcolor(cf);                           // pone color a 0 para borrar
				for (i=0; i<lmax; i++)                  // limpia linea para imprimir
					outtextxy( ( px + i ) * 8 - 7, py * 16 - 16, "Û");
				setcolor(cc);                           // devuelve el color a su estado

				outtextxy( (px) * 8 - 7, py * 16 - 16, s1 );

			if ( ls < lmax ) {
				setcolor(4);
				outtextxy( ( px + ls ) * 8 - 7, py * 16 - 16, "þ");
			}

		} else if (!ok && sb) Sound_SN("catalog3");
	}
     }

  }while(!ok);

  *s = '\0';

  while(kbhit()) getch();              // Vacia Buffer impidiendo falsas
					//  pulsaciones...

  return ls;
}