Glosario

Nombre clave para la HP48GX mientras se le desarrollaba.

Este foro, solamente es de lectura, para los nuevos foros dirígase a www.adictoshp.org

Spreadsheet en HPGCC

22 respuestas [Último envío]
Integró: 18/06/2010
Envíos: 20
MonedasHP: 42
Imagen de mrp
mrp Usuario Desconectado. Visto por última vez 1 año 2 semanas.
Calc: HP50 | ROM:2.15
Spreadsheet en HPGCC
 
Jue, 20/10/2011 - 19:19

Les informo que he podido compilar un programa que encontre en la web con su codigo fuente hecho en lenguaje C, que trata sobre una hoja de calculo.El programa se llama Spreadsheet Calculator,lo puede descargar aqui
La compilacion fue hecha en HPGCC2
Falta optimizar la entrada de datos desde el teclado de la calculadora y agregar algunas funciones que no esta disponible en HPGCC como el localtime()
He probado en calculadora y corre bien,en la direccion web esta el programa compilado para MSDOS en donde pueden aprender usar el programa tecleando el caracter ? en dode muestra un minimanual en idioma ingles.
Espero publicar pronto el programa para la calculadora.

Top
Integró: 29/09/2010
Envíos: 50
MonedasHP: 80
Imagen de math7
math7 Usuario Desconectado. Visto por última vez 1 año 16 horas.
Calc: HP50 | ROM:2.15
 
#1
Jue, 20/10/2011 - 22:10

Excelente, gracias por el aporte. Aunque apenas me estoy iniciando con el HPGCC creo que será un valioso aporte y con la ayuda de algunos otros experimentados de este foro se podrá mejorar. Muy bueno...

Top
Integró: 30/05/2009
Envíos: 359
MonedasHP: 711
Imagen de woddo
woddo Usuario Desconectado. Visto por última vez 19 semanas 4 días.
Calc: HP50 | ROM:2.15
 
#2
Vie, 21/10/2011 - 11:17

Hace tiempo atras encontre otro programa de hoja de calculo programado en C para MS-DOS, cuyo nombre es Croma.

Al instalarlo se tiene acceso a su código fuente, lo adjunto por si te sirve:

// ================================================================================
//  Chroma v1.0 Spreadsheet
//  Copyright (C) Julio Saucedo. (<a href="mailto:julio@quanter.com">julio@quanter.com</a>)
//
//  This program is free software; you can redistribute it and/or modify it
//  under the terms of the GNU Library General Public License as published
//  by the Free Software Foundation; either version 2 of the License, or
//  (at your option) any later version.

//  This library is distributed in the hope that it will be useful, but
//  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
//  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
//  License for more details.

//  You should have received a copy of the GNU Library General Public License
//  along with this program; if not, write to the Free Software Foundation, Inc.,
//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
// ================================================================================

// This program use the math expression evaluator made by Rainer Huebenthal      

// <a href="mailto:julio@quanter.com">julio@quanter.com</a>
// <a href="mailto:julio@quantico-software.com">julio@quantico-software.com</a>                                                 


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define COL_CELDA 1
#define FILAS 26
#define COLUM 8
#define TAMAN 80

const int TRUE  = 1;
const int FALSE = 0;

int modificado = FALSE;
int guardado   = FALSE;

enum enumbotones  {bcancelar, bsi, bno, bok, bnuevo, bguardar,
		   baceptar, babrir, bsalir, bcreditos };

const char msgbotones[10][20] = {"Cancelar", "S¡", "No", "Ok",
		      "Nuevo","Guardar", "Aceptar",
		      "Abrir", "Salir", "Cr‚ditos"};
int col=43, fil=74;
char nombrehoja[20] = "";

enum enummsgs {mfx, mterminar, mguardarcambios,
	       medivcero, mesint, mesobreflujo, mguardarh, mabrirh,
	       mconfirme, meguardar,meabrir,mnull,mnuevahoja, msep,
	       mext, mnombreprogr , mversion};

const char msgs[17][40] = {"Ÿx:",
		"¨Desea terminar el programa?",
		"¨Desea guardar los cambios?",
		"ERROR DIV 0",
		"SINT ERROR",
		"SOBREFLUJO",
		"Guardar hoja",
		"Abrir hoja",
		"Confirme",
		"Error al guardar la hoja",
		"Error al abrir la hoja",
		"",
		"Nueva hoja.hja",
		" - ",
		".HJA",
		"CHROMA",
		"1.04"
		};

enum direccion {arriba, abajo, derecha, izquierda};
enum pnlstyle {raised, lowered};

typedef struct  {int col, fil; } celda;

celda celda_act;

char buffer[TAMAN]="_";
char hoja_a[FILAS][COLUM][TAMAN];  // operaciones
double hoja_b[FILAS][COLUM];       // resultados

/* interrupciones para el rat¢n */
/*//////////////////////////////*/
void quitarraton(void);
void verraton(void);
void leexyraton(int *x,int *y,int *boton);
void llevarraton(int x, int y);
/*//////////////////////////////*/

/* dibuja un bot¢n con caption centrado */
void boton(int x1,int y1,
	   int x2, int y2,
	   int fill,
	   int color,
	   const char *caption,
	   int colorcaption);

/* dibuja un bot¢n presionado */
void presionado(int x1,int y1,
		int x2, int y2,
		int fill,
		int color,
		const char *caption,
		int colorcaption);

/* inicializa los gr ficos, return(1: sin errores, 0: error)  */
int iniciagraf();

void dibujapantalla(void);

/*dibuja una ventana con caption en el centro */
void ventana(int x1, int y1,
	     int x2, int y2,
	     const char *caption,
	     int colorborde,
	     int color,
	     int fontsize);

/* dibuja las filas y columnas*/
void dibujaceldas(int titulos);

/* dibuja una l¡nea con estilo y color*/
void linea(int x1, int y1,
	   int x2, int y2,
	   int color, int linestyle);

/* dibuja una barra con relleno y color*/
void barra(int x1, int y1, int x2, int y2, int fill, int color);

/* outtextxy con color */
void mensajexy(int x, int y, const char *msg, int color, int fontsize);

/* dibuja una rectangulo con color */
void rectangulo(int x1, int y1, int x2, int y2, int color);

void panel(int x1, int y1, int x2, int y2, int color, const char *caption, pnlstyle estilo);

void editbox(int x1, int y1, int x2, int y2, int color);

/* mueve la celda seleccionada (posic={arriba, abajo, derecha, izquierda})  */
void moveracelda(int posic);

/* mueve la celda seleccionada a la que est  en la fila fil y columna col */
void moveraceldapos(int col_, int fil_, int mx, int my);

/* valida el caracter de entrada */
int validachar(char c);

/* copy de Pascal */
char *copy(const char *cad, int index, int count);

/* m ximo y m¡nimo */
int min(int v1, int v2);
int max(int v1, int v2);
/*/////////////////*/

void actualizarcelda(int col, int fil, int ncol, int nfil);

int msgsn(const char *msg);
int msgsnc(const char *msg);
void ventana_error(const char *msg);
void ventana_archivo(int *bpres, char *archivo, int modo);
void ventana_creditos();

void evaluacelda(int co, int fi);
void guardar_hoja(const char *_hoja);
void abrir_hoja();
void limpia_hoja();

void insertch(char c, char *cad, int p);
void deletech(char *cad, int i, int c);
char *trim(const char *cad);
char *upper(const char *cad);
char *justfilename(const char *path);

void nextch();
double fak(int l);
double signedfactor();
double term();
double simpleexpression();
double expression();
double factor();
void evaluate(const char *form, double *value_, int *errpos_);
float pi();

int esvar(const char v[]);
double var(const char v[]);

void main()
{
  int x_, y_, bt_,
      salir,
      r,
      _ig=iniciagraf();

  char k = '\0';

  limpia_hoja();

  settextstyle(2,HORIZ_DIR,4);
  settextjustify(LEFT_TEXT, RIGHT_TEXT);

  if (_ig==TRUE)
  {
    /* si se inicializan los gr ficos correctamente...*/
    dibujapantalla();
    verraton();
    llevarraton(getmaxx()/2, getmaxy()/2);
    salir = 1;
  }
  else{
    /* si hubo problemas al inicializar los gr ficos */
    salir = 0;
  }

  /* posici¢n inicial de la celda seleccionada (1,1) */
  celda_act.col=1;
  celda_act.fil=1;
  moveraceldapos(1, 1, getmaxx()/2, getmaxy()/2);

  /* ciclo principal */
  while (salir!=0)
  {
    /* lee la posici¢n del rat¢n y el bot¢n presionado */
    leexyraton(&x_, &y_, &bt_);

    k = '\0';

    if (kbhit()){ // si alguna tecla fue presionada...

      k = getch();  // se lee la tecla que fue presionada

      /* si k es alguna flecha de direcci¢n */
      switch (k){
	case 72 :
		  moveracelda(arriba);
		  break;
	case 80 :
		  moveracelda(abajo);
		  break;
	case 77 :
		  moveracelda(derecha);
		  break;
	case 75 :
		  moveracelda(izquierda);
		  break;
      }

      // F2   : 60
      // BkSp : 8
      if (k!=72&&k!=80&&k!=77&&k!=75){

	int sb = strlen(buffer);

	if (strlen(buffer)43)&&(x_<610)&(y_>74)&&(y_<437)&&(bt_==1) )
    {
      actualizarcelda((x_-43)/71+1,(y_-74)/14+1,
		      celda_act.col,celda_act.fil);
      moveraceldapos((x_-43)/71+1, (y_-74)/14+1, x_, y_);
      delay (200);
    }

    /* Si la posici¢n del rat¢n est  dentro de alg£n bot¢n*/
    /*  y adem s fue presionado el bot¢n izquierdo        */
    if (((x_>540)&&(x_<570)&&(y_>445)&&(y_<460)&&(bt_==1))||(k==13)) {
      /* Ok */
      barra(43+71*(celda_act.col-1)+2, 74+14*(celda_act.fil-1)+2,
	    43+71*(celda_act.col-1)+67, 74+14*(celda_act.fil-1)+10, SOLID_FILL, 15);

      actualizarcelda(celda_act.col,celda_act.fil,
		      celda_act.col,celda_act.fil);

      presionado(540,445,570,460, SOLID_FILL, 7,"Ok", 0);
      boton(540, 445 , 570, 460, SOLID_FILL, 7, "Ok", 0);
//      moveracelda(abajo);
    }
    if (((x_>572)&&(x_<602)&&(y_>445)&&(y_<460)&&(bt_==1))||(k==27)){
      /* No */
      presionado(572,445,602,460, SOLID_FILL, 7,"No", 0);
      boton(572, 445 , 602, 460, SOLID_FILL, 7, "No", 0);
      strcpy(buffer, hoja_a[celda_act.fil-1][celda_act.col-1]);
      strcat(buffer,"_");
      buffer[strlen(buffer)+1]='\0';
      barra(56,446,534,459,SOLID_FILL,15);
      mensajexy(57, 446, buffer, 0, 4);
    }
    if ((x_>10)&(x_<70)&(y_>30)&(y_<50)&(bt_==1))
    {
      /* Nuevo */
      presionado(10,30,70,50, SOLID_FILL, 7,msgbotones[bnuevo], 0);
      boton(10,30,70,50, SOLID_FILL, 7, msgbotones[bnuevo], 0);

      if ((guardado==TRUE)&&(modificado==FALSE)){
	limpia_hoja();
	strcpy(nombrehoja,msgs[mnull]);
	dibujapantalla();
      }
      else{
	r = msgsnc(msgs[mguardarcambios]);

	switch (r){
	  case bsi : {
		     quitarraton();
		     if (strcmp(nombrehoja,"")==0){
		       guardar_hoja(msgs[mnull]);
		     }
		     else{
		       guardar_hoja(nombrehoja);
		     }

		     guardado = TRUE;

		     limpia_hoja();
		     strcpy(nombrehoja,msgs[mnull]);

		     dibujapantalla();

		     break;
		     }
	  case bno : {
		     limpia_hoja();
		     strcpy(nombrehoja,msgs[mnull]);
		     dibujapantalla();
		     break;
		     }
/*	  case bcancelar : {
		     break;
		     }*/
	}
      }

      guardado   = FALSE;
      modificado = FALSE;
      moveraceldapos(celda_act.col, celda_act.fil, x_, y_);

    }
    if ((x_>72)&&(x_<132)&&(y_>30)&&(y_<50)&&(bt_==1))
    {
      /* Abrir */
      presionado(72,30,132,50, SOLID_FILL,7,msgbotones[babrir], 0);
      boton(72,30,132,50, SOLID_FILL, 7, msgbotones[babrir],0);

      abrir_hoja();

      moveraceldapos(celda_act.col, celda_act.fil, x_, y_);

    }
    if ((x_>134)&&(x_<194)&&(y_>30)&&(y_<50)&&(bt_==1))
    {
      /* Guardar */
      presionado(134,30,194,50, SOLID_FILL,7,msgbotones[bguardar], 0);
      boton(134,30,194,50, SOLID_FILL, 7, msgbotones[bguardar],0);

      if (strcmp(nombrehoja, msgs[mnull])==0)
	guardar_hoja("");
      else
	guardar_hoja(nombrehoja);

      moveraceldapos(celda_act.col, celda_act.fil, x_, y_);
    }
    if ( (x_>503)&&(x_<563)&&(y_>30)&&(y_<50)&&(bt_==1))
    {
      /* Cr‚ditos */
      presionado(503,30,563,50, SOLID_FILL,7,msgbotones[bcreditos], 0);
      boton(503,30,563,50, SOLID_FILL, 7, msgbotones[bcreditos],0);

      ventana_creditos();
      moveraceldapos(celda_act.col, celda_act.fil, x_, y_);
    }
    if ( (x_>565)&&(x_<625)&&(y_>30)&&(y_<50)&&(bt_==1))
    {
      /* Salir */
      presionado(565,30,625,50, SOLID_FILL,7,msgbotones[bsalir], 0);
      boton(565,30,625,50, SOLID_FILL, 7, msgbotones[bsalir],0);

      if ((modificado==TRUE)||(guardado==FALSE)){
	r = msgsnc(msgs[mguardarcambios]);

	if (r == bno) salir = 0;
	else{
	  if (r == bsi){
	    // (guardar los cambios a archivo)
	    guardar_hoja(nombrehoja);
	    salir = 0;
	  }
	  else moveraceldapos(celda_act.col, celda_act.fil, x_, y_);
	}
      }

      else{
	r = msgsn(msgs[mterminar]);

	if (r==bsi) salir = 0;
	else moveraceldapos(celda_act.col, celda_act.fil, x_, y_);

      }
    }
  }
  /* cierra los gr ficos */
  closegraph();
}

void limpia_hoja()
{
  for (int i=0; igetmaxx()/2-5)&&(mxgetmaxy()/2+25)&&(mygetmaxx()/2+60)&&(mxgetmaxy()/2+25)&&(mygetmaxx()/2-5)&&(mxgetmaxy()/2+25)&&(mygetmaxx()/2+60)&&(mxgetmaxy()/2+25)&&(mygetmaxx()/2-30)&&(mxgetmaxy()/2+25)&&(mygetmaxx()/2-35)&&(mxgetmaxy()/2+60)&&(mygetmaxx()/2-100)&&(mxgetmaxy()/2+25)&&(mygetmaxx()/2-35)&&(mxgetmaxy()/2+25)&&(mygetmaxx()/2+30)&&(mxgetmaxy()/2+25)&&(my=0) && ( (path[i]!='\\')&&(path[i]!=':')&&(path[i]!='\0') ) );

    return copy(path, i+1, c);

  }
}

void insertch(char c, char *cad, int p)
{
  char tmp[250];

  strcpy(tmp, copy(cad, p, strlen(cad)));
  cad[p] = c;

  cad[p+1] = '\0';

  strcat(cad, tmp);
}

void deletech(char *cad, int i, int c)
{
  char c1[250], c2[250];

  strcpy(c1, copy(cad, 0, i));
  strcpy(c2, copy(cad, i+c, strlen(cad)));
  strcat(c1,c2);
  cad[0]='\0';
  for (int l = 0; ll) {
    return "";
  }
  else{
    while (cad[l]<=' ') l--;
    strcpy(ret, copy(cad, i, l-i+1));
    return ret;
  }
}


/* El valor menor de dos valores */
int min(int v1, int v2)
{
  return ((v1v2)?v1:v2);
}

/*///////////////////////////////*/
/* v lida el caracter de entrada */
/*///////////////////////////////*/
int validachar(char c)
{
  return (isdigit(c)||isalpha(c)/*islower(c)*/||c=='('||c==')'||c=='='||c=='^'
	  ||c=='+'||c=='-'||c=='*'||c=='/'||c==' '||c=='.');
}

/*/////////////////////////////*/
/* mover la celda seleccionada */
/* a una celda inmediata       */
/*/////////////////////////////*/
void moveracelda(int posic)
{

/*  actualizarcelda(celda_act.col, celda_act.fil,
		  celda_act.col, celda_act.fil);*/

  switch (posic){
    case arriba :
	     if (fil!=74){

	       barra(43+71*(celda_act.col-1)+2, 74+14*(celda_act.fil-1)+2,
		     43+71*(celda_act.col-1)+67, 74+14*(celda_act.fil-1)+10, SOLID_FILL, 15);

	       rectangulo(col, fil, col+69, fil+12,15);
	       rectangulo(col+1,fil+1, col+68, fil+11,15);

	       fil-=14;
	       celda_act.fil-=1;
	       actualizarcelda(celda_act.col, celda_act.fil,
			       celda_act.col, celda_act.fil+1);

	       rectangulo(col+1,fil+1, col+68, fil+11, COL_CELDA);
	       rectangulo(col, fil, col+69, fil+12, COL_CELDA);

	     }
	     break;
    case abajo :
	     if (fil!=424){

	       barra(43+71*(celda_act.col-1)+2, 74+14*(celda_act.fil-1)+2,
		     43+71*(celda_act.col-1)+67, 74+14*(celda_act.fil-1)+10, SOLID_FILL, 15);

	       rectangulo(col, fil, col+69, fil+12,15);
	       rectangulo(col+1,fil+1, col+68, fil+11,15);

	       fil+=14;
	       celda_act.fil+=1;
	       actualizarcelda(celda_act.col, celda_act.fil,
			       celda_act.col, celda_act.fil-1);

	       rectangulo(col+1,fil+1, col+68, fil+11, COL_CELDA);
	       rectangulo(col, fil, col+69, fil+12, COL_CELDA);

	     }
	     break;
    case derecha :
	     if (col!=540){
	       barra(43+71*(celda_act.col-1)+2, 74+14*(celda_act.fil-1)+2,
		     43+71*(celda_act.col-1)+67, 74+14*(celda_act.fil-1)+10, SOLID_FILL, 15);

	       rectangulo(col, fil, col+69, fil+12,15);
	       rectangulo(col+1,fil+1, col+68, fil+11,15);

	       col+=71;
	       celda_act.col+=1;
	       actualizarcelda(celda_act.col, celda_act.fil,
			       celda_act.col-1, celda_act.fil);

	       rectangulo(col+1,fil+1, col+68, fil+11, COL_CELDA);
	       rectangulo(col, fil, col+69, fil+12, COL_CELDA);

	     }
	     break;
    case izquierda :
	     if (col!=43){
	       barra(43+71*(celda_act.col-1)+2, 74+14*(celda_act.fil-1)+2,
		     43+71*(celda_act.col-1)+67, 74+14*(celda_act.fil-1)+10, SOLID_FILL, 15);

	       rectangulo(col, fil, col+69, fil+12,15);
	       rectangulo(col+1,fil+1, col+68, fil+11,15);

	       col-=71;
	       celda_act.col-=1;
	       actualizarcelda(celda_act.col, celda_act.fil,
			       celda_act.col+1, celda_act.fil);

	       rectangulo(col+1,fil+1, col+68, fil+11, COL_CELDA);
	       rectangulo(col, fil, col+69, fil+12, COL_CELDA);

	     }
	     break;
  }
}

/*///////////////////////////////////*/
/* mover la celda seleccionada a una */
/* fila y columna espec¡fica         */
/*///////////////////////////////////*/
void moveraceldapos(int col_, int fil_, int mx, int my)
{

  rectangulo(col, fil, col+69, fil+12, 15);
  rectangulo(col+1,fil+1, col+68, fil+11, 15);

  evaluacelda(celda_act.col,celda_act.fil);

  if (!((mx>=col)&&(mx<=col+71)))
    col += (col_-celda_act.col)*71;

  if (!((my>=fil)&&(my<=fil+14)))
    fil += (fil_-celda_act.fil)*14;

  celda_act.col = col_;
  celda_act.fil = fil_;

  rectangulo(col+1,fil+1, col+68, fil+11, COL_CELDA);
  rectangulo(col, fil, col+69, fil+12, COL_CELDA);
}

/*//////////////////////////////*/
/* interrupciones para el rat¢n */
/*//////////////////////////////*/
void quitarraton(void)
{
  struct REGPACK reg;
  reg.r_ax = 0x00;
  intr(0x33,&reg);
}
void verraton(void)
{
  struct REGPACK reg;
  reg.r_ax = 0x01;
  intr(0x33,&reg);
}
void leexyraton(int *x,int *y,int *boton)
{
  struct REGPACK reg;
  reg.r_ax = 0x03;
  reg.r_bx = *boton;
  intr(0x33,&reg);
  *x = reg.r_cx;
  *y = reg.r_dx;
  *boton = reg.r_bx;
}
void llevarraton(int x, int y)
{
  struct REGPACK reg;
  reg.r_ax = 0x04;
  reg.r_cx = x;
  reg.r_dx = y;
  intr(0x33,&reg);
}
/*//////////////////////////////*/

/* //////////////////////////////////// */
/* dibuja un bot¢n con caption centrado */
/* //////////////////////////////////// */
void boton(int x1,int y1,
	   int x2, int y2,
	   int fill,
	   int color,
	   const char *caption,
	   int colorcaption)
{
  barra (x1,y1,x2,y2,fill,color);
  rectangulo(x1,y1,x2,y2,0);
  linea(x1+1,y1+1,x2-1,y1+1, 15, SOLID_LINE);
  linea(x1+1,y1+1,x1+1,y2-1, 15, SOLID_LINE);
  linea(x1+1,y2-1,x2-1,y2-1,8, SOLID_LINE);
  linea(x2-1,y1+1,x2-1,y2-1,8, SOLID_LINE);
  mensajexy((x2-x1-textwidth(caption))/2+x1,
	    (y2-y1-textheight(caption))/2+y1,
	    caption, colorcaption, 4);
}

/* ////////////////////////// */
/* dibuja un bot¢n presionado */
/* ////////////////////////// */
void presionado(int x1,int y1,
		int x2, int y2,
		int fill,
		int color,
		const char *caption,
		int colorcaption)
{
  barra(x1,y1,x2,y2, fill, color);
  rectangulo(x1,y1,x2,y2,0);
  linea(x1+1,y1+1,x2-1,y1+1,7,SOLID_LINE);
  linea(x1+1,y1+1,x1+1,y2-1,7,SOLID_LINE);
  linea(x1+1,y1+1,x2-1,y1+1,8,SOLID_LINE);
  linea(x1+1,y1+1,x1+1,y2-1,8,SOLID_LINE);
  linea(x1+1,y2-1,x2-1,y2-1,8,SOLID_LINE);
  linea(x2-1,y1+1,x2-1,y2-1,8,SOLID_LINE);
  mensajexy((x2-x1-textwidth(caption))/2+x1+1,
	    (y2-y1-textheight(caption))/2+y1+1,
	    caption, colorcaption, 4);
  sound(7);
  delay(150);
  nosound();
}

void ventana(int x1, int y1,
	     int x2, int y2,
	     const char *caption,
	     int colorborde,
	     int color,
	     int fontsize)
{

  struct textsettingstype textinfo;
  gettextsettings(&textinfo);
  settextstyle(2,HORIZ_DIR, fontsize);
  int th = textheight(caption), tw = textwidth(caption);
  settextstyle(textinfo.font, textinfo.direction, textinfo.charsize);

  panel(x1,y1,x2,y2, colorborde, "", raised);
  panel(x1+4,y1+4,x2-4,y2-4, color, "", lowered);
  panel(x1+5,y1+5,x2-5,y1+th*2, colorborde, "", raised);

  mensajexy((x2-x1-tw)/2+x1,
	    y1+1+th/2, caption, 15, fontsize);
}

/* outtextxy con color y tama¤o de la fuente */
void mensajexy(int x, int y, const char *msg, int color, int fontsize)
{
  int coloror = getcolor();
  struct textsettingstype textinfo;
  gettextsettings(&textinfo);
  settextstyle(2,HORIZ_DIR, fontsize);
  setcolor(color);
  outtextxy(x,y,msg);
  settextstyle(textinfo.font, textinfo.direction, textinfo.charsize);
  setcolor(coloror);
}


/* ////////////////////////////// */
/* dibuja una rectangulo con color*/
/* ////////////////////////////// */
void rectangulo(int x1, int y1, int x2, int y2, int color)
{
  int coloror = getcolor();
  setcolor(color);
  rectangle(x1,y1,x2,y2);
  setcolor(coloror);
}

/* panel con estilo, color y caption */
void panel(int x1, int y1, int x2, int y2, int color, const char *caption, pnlstyle estilo)
{
  int col1, col2;

  (estilo==raised) ? (col1=0)  : (col1=15);
  (estilo==raised) ? (col2=15) : (col2=0);

  barra(x1,y1,x2,y2,SOLID_FILL,color);
  linea(x2,y1,x2,y2,col1,SOLID_LINE);
  linea(x1,y2,x2,y2,col1,SOLID_LINE);
  linea(x1,y1,x2-1,y1,col2,SOLID_LINE);
  linea(x1,y1,x1,y2-1,col2,SOLID_LINE);

  mensajexy((x2-x1-textwidth(caption))/2+x1,
	    (y2-y1-textheight(caption))/2+y1, caption, 0, 4);

}

/* caja de captura con color */
void editbox(int x1, int y1, int x2, int y2, int color)
{
  barra(x1,y1,x2,y2,SOLID_FILL,color);
  linea(x1,y1,x2,y1,0,SOLID_LINE);
  linea(x1,y1,x1,y2,0,SOLID_LINE);
  linea(x1+1,y2,x2,y2,7,SOLID_LINE);
  linea(x2,y2,x2,y1+1,7,SOLID_LINE);
  linea(x1-1,y1-1,x2+1,y1-1,8,SOLID_LINE);
  linea(x1-1,y1-1,x1-1,y2+1,8,SOLID_LINE);
  linea(x1,y2+1,x2+1,y2+1,15,SOLID_LINE);
  linea(x2+1,y2+1,x2+1,y1,15,SOLID_LINE);
}

/* /////////////////////////////////// */
/* dibuja una linea con color y estilo */
/* /////////////////////////////////// */
void linea(int x1, int y1, int x2, int y2, int color, int linestyle)
{
  int coloror = getcolor();
  struct linesettingstype lineinfo;
  getlinesettings(&lineinfo);
  setcolor(color);
  setlinestyle(linestyle, 1, 1);
  line(x1,y1,x2,y2);
  setcolor(coloror);
  setlinestyle(lineinfo.linestyle, lineinfo.upattern, lineinfo.thickness);
}

/* //////////////////////////////////// */
/* dibuja una barra con color y relleno */
/* //////////////////////////////////// */
void barra(int x1, int y1, int x2, int y2, int fill, int color)
{
  int coloror = getcolor();
  struct fillsettingstype fillinfo;
  getfillsettings(&fillinfo);
  setcolor(color);
  setfillstyle(fill,color);
  bar(x1, y1, x2, y2);
  setcolor(coloror);
  setfillstyle(fillinfo.pattern, fillinfo.color);
}

/* //////////////////////////////// */
/* dibuja el cuadriculado y los     */
/* t¡tulos de las filas y columnas  */
/* //////////////////////////////// */
void dibujaceldas(int titulos)
{
  int _x1,_y1,_x2,_y2, l, p, n, i, j;

  char tf[3];

  /* fondo blanco */
  barra(43, 74, 610, 437, SOLID_FILL, 15);
  panel(24, 60, 42, 73, 7, msgs[mnull], raised);

  /* dibuja filas */
  _x1=24;_x2=42;_y1=60;_y2=73;
  for (l=1;l<=26;l++)
  {
    _y1+=14;
    _y2+=14;
    itoa(l,tf,10);
    if (titulos==1) panel(_x1,_y1,_x2,_y2, 7, (char *)tf, raised);
    linea(43, _y2, 610, _y2, 0, SOLID_LINE);
  }
  /* dibuja columnas */
  _x1=43, _x2=113, _y1=60, _y2=73;
  for (l=65;l<=72;l++){
    if (titulos==1) panel(_x1,_y1,_x2,_y2, 7, (char *)&l, raised);
    linea(_x2, _y1+14, _x2, _y2+364, 0, SOLID_LINE);
    _x1+=71;
    _x2+=71;
  }
  // escribe los valores de las celdas
  for (i=0; i=65&&v[0]<=72){
    for (j=0; j<=FILAS; j++){
      (j<=10) ? (co=1) : (co=2);
      if ((atoi(copy(v,1,co))>=1)&&(atoi(copy(v,1,co))<=26)) {
	rtn = 1;
	break;
      }
    }
  }
  return rtn;
}

double var(const char v[])
{
  int f,c;

  c = v[0] - 65 ;
  f = atoi(copy(v,1,strlen(v))) - 1 ;

  return hoja_b[f][c];
}


float pi()
{
  return 3.14159265358979323846;
}

[code]
void nextch()
{
do{
pos++;
if (pos

Top
Integró: 30/05/2009
Envíos: 359
MonedasHP: 711
Imagen de woddo
woddo Usuario Desconectado. Visto por última vez 19 semanas 4 días.
Calc: HP50 | ROM:2.15
 
#3
Vie, 21/10/2011 - 11:19

Lamentablemente el editor del foro no deja pegar la totalidad del código, si lo requieres déjame tu correo para enviartelo.

[code]
void nextch()
{
do{
pos++;
if (pos

Top
Integró: 31/07/2010
Envíos: 489
MonedasHP: 776
Imagen de CompSystems
CompSystems Usuario Desconectado. Visto por última vez 32 semanas 6 días.
Calc: HP50 | ROM:2.15
 
#4
Vie, 21/10/2011 - 09:03

Star Me gustaría que en equipo desarrolláramos una cajas de dialogo avanzadas para la HP50g en C.

Quien se anota y se compromete en el proyecto

0: Yo (Jaime)
1:
2:
3:
4:
5:
6: ...

El equipo es el la clave del éxito

Pensemos que hubiera sido Steve Jobs sin Steve Wozniak, la sociedad de los amigos Hewlett & Packard y muchos casos similares ...

EXTRA
Attend HHC 2012, the annual HP calculator conference, in Nashville, TN, USA, September 22-23

http://hhuc.us/2012/

Top
Integró: 27/07/2006
Envíos: 326
MonedasHP: 470
Imagen de angel_legendario
angel_legendario Usuario Desconectado. Visto por última vez 33 semanas 18 horas.
 
#5
Vie, 21/10/2011 - 15:06

Me gustaría que en equipo desarrolláramos una cajas de dialogo avanzadas para la HP50g en C.

Quien se anota y se compromete en el proyecto

0: Yo (Jaime)
1: Yo (diego)
2:
3:
4:
5:
6: ...

El equipo es el la clave del éxito

Pensemos que hubiera sido Steve Jobs sin Steve Wozniak, la sociedad de los amigos Hewlett & Packard y muchos casos similares ... Einstein sin su esposa...

RPN=Realidad , ALGEBRAICO=Subjetivo
https://sites.google.com/site/calcu50g/
Les invito a que visiten mis blogs:
http://santo-grial-hp.blogspot.com/
http://sub-vivencias.blogspot.com/

Un site dedicado a la hidrología http://sites.google.com/site/c

Top
Integró: 27/07/2006
Envíos: 326
MonedasHP: 470
Imagen de angel_legendario
angel_legendario Usuario Desconectado. Visto por última vez 33 semanas 18 horas.
 
#6
Vie, 21/10/2011 - 15:14

Primero que nada tenemos que chekear y entender bien la gui de hpgcc3. Lo bueno y lo malo es que esa biblioteca se programa en c++, malo para mi porque tengo que aprender c++ y bueno porque POO aprendí programando python, así que muy difícil no parece por lo visto (lo bueno de gui es que se puede utilizar fonts similares a los de la CAS y también personalizados, al menos eso dice la documentación de los include.)

El localtime(), hace tiempo creo que vi en hpgcc2 que era similar a isotime()... pero eso tengo que verificar.

RPN=Realidad , ALGEBRAICO=Subjetivo
https://sites.google.com/site/calcu50g/
Les invito a que visiten mis blogs:
http://santo-grial-hp.blogspot.com/
http://sub-vivencias.blogspot.com/

Un site dedicado a la hidrología http://sites.google.com/site/c

Top
Integró: 27/07/2006
Envíos: 326
MonedasHP: 470
Imagen de angel_legendario
angel_legendario Usuario Desconectado. Visto por última vez 33 semanas 18 horas.
 
#7
Vie, 21/10/2011 - 15:51

Woddo, me lo puedes enviar al mio?

RPN=Realidad , ALGEBRAICO=Subjetivo
https://sites.google.com/site/calcu50g/
Les invito a que visiten mis blogs:
http://santo-grial-hp.blogspot.com/
http://sub-vivencias.blogspot.com/

Un site dedicado a la hidrología http://sites.google.com/site/c

Top
Integró: 30/05/2009
Envíos: 359
MonedasHP: 711
Imagen de woddo
woddo Usuario Desconectado. Visto por última vez 19 semanas 4 días.
Calc: HP50 | ROM:2.15
 
#8
Vie, 21/10/2011 - 20:10

Cual es tu correo?

Top
Integró: 27/07/2006
Envíos: 326
MonedasHP: 470
Imagen de angel_legendario
angel_legendario Usuario Desconectado. Visto por última vez 33 semanas 18 horas.
 
#9
Vie, 21/10/2011 - 20:35

diego.h007(AT)gmail(DOT)com

RPN=Realidad , ALGEBRAICO=Subjetivo
https://sites.google.com/site/calcu50g/
Les invito a que visiten mis blogs:
http://santo-grial-hp.blogspot.com/
http://sub-vivencias.blogspot.com/

Un site dedicado a la hidrología http://sites.google.com/site/c

Top
Integró: 18/06/2010
Envíos: 20
MonedasHP: 42
Imagen de mrp
mrp Usuario Desconectado. Visto por última vez 1 año 2 semanas.
Calc: HP50 | ROM:2.15
 
#10
Dom, 23/10/2011 - 18:24

Hola
El proyecto Hpgcc3 tiene funciones para crear cajas de dialogo semejante a la que tiene la caculadora en su rom. Sólo hay que aprender a usarlo.

Todavia no logro solucionar el problema con las variables tipo double ,para hacer la compilacion en el proyecto hpgcc3 del programa Spreadsheet Calculator

La compilacion ya fue hecha en Hpgcc2, pero el archivo ocupa alrededor de 100kb de memoria.Ya corre casi todas las funciones elementales como tambien suma,desviacion estandar,promedio,condicion if,copy, etc.

MRP

Top
Integró: 31/07/2010
Envíos: 489
MonedasHP: 776
Imagen de CompSystems
CompSystems Usuario Desconectado. Visto por última vez 32 semanas 6 días.
Calc: HP50 | ROM:2.15
 
#11
Lun, 24/10/2011 - 11:31

Cita:

El proyecto HPgcc3 tiene funciones para crear cajas de dialogo semejante a la que tiene la calculadora en su rom. Sólo hay que aprender a usarlo.

Cajas de dialogo por ejemplo similares a las de: [MODES], MODES/CAS, MODES/DISP, o [APPS], APPS/2:I-O/5:Transfer? Quest si es así genial!

Por que con el comando INFORM de UserRPL se puede hacer muy poco, ahora con Input Form Builder se hacen cajas de dialogo mas sofisticadas
http://www.hpcalc.org/details.php?id=4211

pero no tanto como las que se pueden hacer con mi biblioteca GUI+, el único defecto de mi biblioteca es que esta escrita en UserRPL que la hace muy lenta, por esta razon quiero que en equipo desarrollemos una GUI+ pero en HPGCC o SystemRPL, y mas aun en escala de grises como se ven en la TInspireCAS

EXTRA
Attend HHC 2012, the annual HP calculator conference, in Nashville, TN, USA, September 22-23

http://hhuc.us/2012/

Top
Integró: 18/06/2010
Envíos: 20
MonedasHP: 42
Imagen de mrp
mrp Usuario Desconectado. Visto por última vez 1 año 2 semanas.
Calc: HP50 | ROM:2.15
 
#12
Mar, 25/10/2011 - 19:12

Hola a todos.
Aqui les dejo el archivo del cual les comente, para que se ejecute en las calculadoras hp49g+ y hp50g [Descargar]

Recomiendo que lean la documentacion y practiquen con el ejecutable para la PC que esta en el paquete original [ ver arriba en el inicio ]
Esto es una version sujeto a pruebas,usalo bajo su propio riesgo.

Espero que les agraden el programa, estube practicando con algunos ejemplos
y corre mas rapido que los programas compilados en system RPL (XCELL,Spreadsheet de la ROM 2.10-7)

El defecto que tiene ,es con la memoria que ocupa en el directorio Home

Hasta pronto...

Top
Integró: 05/12/2003
Envíos: 77
MonedasHP: 74
Imagen de warbandit
warbandit Usuario Desconectado. Visto por última vez 46 semanas 5 días.
 
#13
Sáb, 29/10/2011 - 12:48

Hola, Mrp, muy interesante el programa, se ve que tiene muchas funciones, lo que me inquieta es el hecho que no ubico el manual entre tanto archivo, quisiera que me digas como le haces tu para salir de la hoja de calculo, ya que tuve que reiniciar la calculadora, la ultima vez.

Top
Integró: 23/03/2009
Envíos: 159
MonedasHP: 322
Imagen de yder
yder Usuario Desconectado. Visto por última vez 45 semanas 1 día.
AdictoHP+
Calc: HP50
 
#14
Dom, 30/10/2011 - 20:42

Hola a todos!!!!!
Mpr muy buen aporte!!!!!!!
Warbandint, se sale con la tecla Q , esto ejecutando el programa desde home,
cosa que no funciona desde la SD.

Top
Integró: 13/09/2010
Envíos: 110
MonedasHP: 193
Imagen de lucecita
lucecita Usuario Desconectado. Visto por última vez 45 semanas 4 días.
Calc: HP50 | ROM:HP 50-G
 
#15
Lun, 31/10/2011 - 23:32

mrp cita:
Hola a todos.
Aqui les dejo el archivo del cual les comente, para que se ejecute en las calculadoras hp49g+ y hp50g [Descargar]

Recomiendo que lean la documentacion y practiquen con el ejecutable para la PC que esta en el paquete original [ ver arriba en el inicio ]
Esto es una version sujeto a pruebas,usalo bajo su propio riesgo.

Espero que les agraden el programa, estube practicando con algunos ejemplos
y corre mas rapido que los programas compilados en system RPL (XCELL,Spreadsheet de la ROM 2.10-7)

El defecto que tiene ,es con la memoria que ocupa en el directorio Home

Hasta pronto...

hola chicos: como lo ejecuto lo q presenta mrp en la hp cuando lo llevo a la pantalla de la calculadora sale entre comillas, disculpen mi torpeza.
atte: luz eunofre gaitan

Top
Integró: 25/07/2008
Envíos: 36
MonedasHP: 66
Imagen de ever84
ever84 Usuario Desconectado. Visto por última vez 32 semanas 2 días.
Calc: HP50 | ROM:2.15
 
#16
Mar, 01/11/2011 - 01:27

el programa se ve bien pero no hay un manual como hacer operaciones como sumatoria media y otra operaciones de un excel a ver si nos brindas un manual con ejemplos gracias por el aporte

Top
Integró: 13/09/2010
Envíos: 110
MonedasHP: 193
Imagen de lucecita
lucecita Usuario Desconectado. Visto por última vez 45 semanas 4 días.
Calc: HP50 | ROM:HP 50-G
 
#17
Mié, 02/11/2011 - 22:07

chicos una pregunta como instalo la hoja excell en mi calculadora cuando la llevo a la pantalla el scex.hp y presiono EVAL se cuelga

Top
Integró: 04/10/2007
Envíos: 128
MonedasHP: 144
Imagen de donseba
donseba Usuario Desconectado. Visto por última vez 40 semanas 5 días.
Calc: HP50 | ROM:2.10-7
 
#18
Mar, 22/11/2011 - 19:32

y como te fue con eso .......

Top
Integró: 18/06/2010
Envíos: 20
MonedasHP: 42
Imagen de mrp
mrp Usuario Desconectado. Visto por última vez 1 año 2 semanas.
Calc: HP50 | ROM:2.15
 
#19
Sáb, 28/04/2012 - 20:56

Saludos a todos los adictoshp

El archivo scex.hp se corrompe en algunas circunstancias cuando se traslada de la pc a la calculadora.

Mejor seria usar el archivo sc.hp , pero se necesita instalar la libreria ArmToolBox 3.12, el archivo lo guardan en el SD, luego lo llaman desde home
mediante un programa usando RCL

El archivo que he publicado arriba presenta defectos,pronto estare actualizando el archivo con algunas mejoras

Por falta de tiempo no pude elaborar un manual, pero se puede aprender del archivo original del que les hable que se ejecuta en la PC bajo Windows XP
Click dentro del zip hay el ejecutable sc.exe, una vez que hayan ejecutado teclean el caracter '?' y les aparecera un listado de comandos con descripcion en idioma ingles.En la calculadora son los mismos comandos, simulando la tecla [Alpha] con [Ctrl] de la PC.

Top
Integró: 18/06/2010
Envíos: 20
MonedasHP: 42
Imagen de mrp
mrp Usuario Desconectado. Visto por última vez 1 año 2 semanas.
Calc: HP50 | ROM:2.15
 
#20
Lun, 30/04/2012 - 20:29

Aqui les dejo para que descarguen una segunda version de prueba del programa sc.hp que funciona solo para las calculadoras hp49g+ y hp50g

El programa ahora presenta algunas mejoras
Descarga

Ahora para descargar, hay que registrarse en el sitio que esta alojado el archivo

Espero que les agraden

Top
Integró: 05/12/2003
Envíos: 77
MonedasHP: 74
Imagen de warbandit
warbandit Usuario Desconectado. Visto por última vez 46 semanas 5 días.
 
#21
Mar, 01/05/2012 - 06:15

Excellente!!!!!!!
vao a probarlo Big smile

Top
Integró: 05/12/2003
Envíos: 77
MonedasHP: 74
Imagen de warbandit
warbandit Usuario Desconectado. Visto por última vez 46 semanas 5 días.
 
#22
Mar, 01/05/2012 - 07:23

Una consulta como puedo hacer para cargar los ejemplos, cuando oprimo [G] sale:
i> goto [v] _(si escribo digamos rtb mas ENTER)
me sale:
A0 (7 2 0) []
NOTHING TO REPEAT
>=
Me gustaria saber cual es el procedimiento para cargar los ejemplos, alguien que haya podido dar con el. Smile
PD: Si pase los archivos de los cuatro ejemplos a la tarjeta SD.

Top

Twitter

Cargando...

CAPTCHA
Esta pregunta es para probar si usted es un visitante humano y así evitar el spam automatizado.
5 + 1 =
Solucione este simple problema matemático e ingrese el resultado. Por ejemplo: para 1+3, ingrese 4.