Spreadsheet en HPGCC

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.
Otros temas de interes

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...

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,®);
}
void verraton(void)
{
struct REGPACK reg;
reg.r_ax = 0x01;
intr(0x33,®);
}
void leexyraton(int *x,int *y,int *boton)
{
struct REGPACK reg;
reg.r_ax = 0x03;
reg.r_bx = *boton;
intr(0x33,®);
*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,®);
}
/*//////////////////////////////*/
/* //////////////////////////////////// */
/* 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

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


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 ...


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...


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.







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?
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

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, 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.

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.

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

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

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


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.

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




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.
PD: Si pase los archivos de los cuatro ejemplos a la tarjeta SD.






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
mannirp@hotmail.com