elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Aplicacion explota en varios stream (FILE *) en: 3 Diciembre 2012, 03:36 am
Estoy desarrollando una aplicacion tipo Cuentas por Cobrar, intento reabrir un descriptor de fichero como lectura y modificacion binaria, para poder modificar contenido con fseek(), puedo modificar el contenido x veces en tiempo de ejecucion, cuando estoy intentando la 3ra modificacion, entonces explota, pero he verificado las salidas de los descriptores y solo el descriptor que utiliza la funcion getPos() devuelve error, al parecer no pudo abrir el descriptor, pero a que se debe, he cerrado todos los ficheros correctamente, he colocado reposicionamiento al SET 0 de mi descriptor utilizando fseek(), pero nada todo igual.

Código
  1. //codigo boton  
  2.     posFich=getPos(cedulaPg);
  3.     getPosFich(posFich-1, modifFichero);
  4.     pagoActual=mntPagoClt(cedulaPg);
  5.     sumaPagada=sumar(mntPago, mntCount);
  6.     //suma de pago
  7.     pagoSumado=pagoActual-sumaPagada;
  8.  
  9.     sprintf(usuario.deuda, "%i", pagoSumado);
  10.     //guardamos estructura de datos en fichero
  11.     fwrite(&usuario, sizeof(struct user), 1, modifFichero);
  12.     //cerramos fichero
  13.     fclose(modifFichero);
  14.  

La funcion getPos(), con esta funcion devuelvo la posicion fisica actual del fichero.
Código
  1. int getPos(char *cedulaPago)
  2. {
  3.     FILE *dato = fopen("fixcom.fix", "rb");
  4.     int pos=0;
  5.     //fseek(dato, 0L, SEEK_SET);
  6.     verificarFichero(dato,"dato");
  7.  
  8.     while(fread(&usuario, sizeof(struct user), 1, dato)!=0)
  9.     {
  10.                           pos++;
  11.                           if(strcmp(cedulaPago, usuario.cedula)==0)
  12.                           {
  13.                                                 fclose(dato);
  14.                                                 return pos;
  15.                                                 }
  16.                           }
  17.     }
  18.  

La funcion mntPagoClt(), la utilizo para sacar el ultimo pago que realizo el cliente.

Código
  1. int mntPagoClt(char *cedula)
  2. {
  3.     int prestamoD=0;
  4.  
  5.     FILE *fichLeer=fopen("fixcom.fix", "rb");
  6.  
  7.     while(fread(&usuario, sizeof(struct user), 1, fichLeer)!=0)
  8.     {
  9.     if(strcmp(cedula, usuario.cedula)==0)
  10.     {
  11.  
  12.     fclose(fichLeer);
  13.  
  14.     return prestamoD=atoll(usuario.deuda);
  15.             }
  16.             }
  17.     }
  18.  

De esta manera estoy abriendo los descriptores de fichero:

Código
  1. modifFichero=fopen("fixcom.fix","rb+");//lectura binaria y para actualizar descriptor
  2. fdiskR=fopen("fixcom.fix","rb");//leer el fichero completo hasta encontrar lo buscado con strcmp()
  3. fdiskW=fopen("fixcom.fix","a"); //para guardar siempre en la ultima linea del fichero

La funcion getPosFich(). Con esta funcion me posiciono en donde quiero en el descriptor

Código
  1. void getPosFich(int pos, FILE *filePtr)
  2. {
  3.     fseek(filePtr, pos*sizeof(struct user), SEEK_SET);
  4.     }
Nota: Todos los datos se alojan en un fichero, llamado fixcon.fix.
2  Programación / Programación C/C++ / Interfaz Grafica implementando un (Menu) C/SDL en: 2 Septiembre 2012, 06:47 am
Hola a todos !!. estuve un poco calladito con lo de los GUIs con SDL, pero ya estoy aqui nuevamente, ahora vengo con algo muy sencillo solo quiero que opinen al respecto, y claro critiquen. Es un menu algo clasico y poco modelado solo para probar nomas.

Nota: Esta desarrollado en un entorno Dev-c++, Windows XP, solo tienen que ejecutar, no he dejado los sources, porque es algo de prueba sin terminaciones ni nada, solo quiero sus opiniones y criticas ....

Aqui les dejo el link:
-------------------------------------------------------------------------------------
http://uploading.com/files/get/852beemc/Menu_GUI_C_SDL.rar
-------------------------------------------------------------------------------------
Suerte !!!  ;-)
3  Programación / Programación C/C++ / Calculadora con Interfaz Grafica (C/SDL) !! en: 6 Agosto 2012, 05:23 am
Hola a todos!! Desarrolle una calculadora, el objetivo del software es animar a los programadores iniciados/avanzados en C , ya que veo muchas dudas sobre con cual API para GUI necesitan, si QT, o GTK soporta perifericos, si es facil, etc. Muchas dudas, que me hicieron codear este ejemplo, esta hecho en puro C del estandar ANSI, claro la GUI la implemente con SDL, es multiplataforma, solo tienen que compilar en GNU/Linux o cualquier otro S.O y no necesita modificacion de codigo.

Tiene algunos errores, luego se daran cuenta, y tambien le falta los efectos cuando accionamos encima de los botones, pero si tienen los de acciones pulsados, y luego para la version 1.1 de este mismo ejemplo, les traere todo completo. Al que se animen a criticar y ayudar con el desarrollo de la libreria no hay problemas, esta todo el codigo, ejecutable, fonts, jpg, libs y makefile, generado por SDL.

Critiquen, posteen, desahogo total !!!  ;-)

Aqui les dejo el link de descarga:

Codigo: 2m1bdemf

http://uploading.com/files/get/2m1bdemf/Proyecto_Calc_C_SDL.rar
4  Programación / Programación C/C++ / Duda con suma de vectores !Resuelto! en: 27 Julio 2012, 15:25 pm
Hola !! Anteriormente habia posteado una duda con la suma de vectores, no podia manejar la recepcion de valores absolutos en una variable tipo entero vector a una tipo entero, ps resolvi todo gracias a la ayuda de algunos users del foro y posteo en otro hilo para no revivir el tema por su tiempo de caducidad !!

Código
  1. #include <stdio.h>
  2.  
  3. int elevar(int valor, int num)
  4. {
  5.    int vector[num];
  6.    const int potencia=10;
  7.  
  8.    for(int i=0; i<num; i++)
  9.    {
  10.            //llenamos vector de 10
  11.            vector[i]=potencia;
  12.            //asignamo 1 a la posicion iniciar de vector
  13.            vector[0]=1;
  14.            }
  15.  
  16.            for(int i=0; i<num; i++)
  17.            {
  18.                    //elevamos valor a las cantidades de 10 pasadas a vector
  19.                    valor=valor*vector[i];
  20.                    }
  21.                    //retornamos valor elevado
  22.                    return valor;
  23.    }
  24.  
  25. int sumar(int vector[], int n)
  26. {
  27.    int i, r=0, vector_a[n];
  28.  
  29.             for(i=0; i<n; i++)
  30.             {
  31.                      //obtenemos valor en v de vector
  32.                      int v=vector[i];
  33.                      //llamamos a funcion elevar y sacamos retorno de ella
  34.                      int x=elevar(v,n-i);
  35.                      //asignamos valo retornado a vector
  36.                      vector_a[i]=x;
  37.                      //sumamos cada valor con la posicion siguente del vector
  38.                      r=r+vector_a[i];
  39.                      }
  40.                      //retornamos valor absoluto de suma
  41.                      return r;
  42.    }
  43.  
  44. int main()
  45. {  
  46.    int i, valor_a=0, valor_b=0, vector_a[4], vector_b[4];
  47.  
  48.    printf("Introduzca valores 1: ");
  49.  
  50.    for(i=0; i<4; i++)
  51.    {
  52.             scanf("%i", &vector_a[i]);
  53.             }
  54.  
  55.             printf("Introduzca valores 2: ");
  56.             fflush(stdin);
  57.  
  58.    for(i=0; i<4; i++)
  59.    {
  60.             scanf("%i", &vector_b[i]);
  61.             }
  62.  
  63.    valor_a=sumar(vector_a, 4);
  64.    valor_b=sumar(vector_b, 4);
  65.  
  66.    int r = valor_a+valor_b;
  67.  
  68.    printf("\n\nResultado: %i", r);
  69.  
  70.    fflush(stdin);
  71.    getchar();
  72.    }
  73.  
  74.  

Suerte en tu lectura !!  :xD
5  Programación / Programación C/C++ / Operacion Suma (Vectores) !Duda! en: 11 Julio 2012, 19:25 pm
 :-\ Hola a todos internautas ! Tengo ya varios dias intentando sumar vectores, mi problematica esta en los valores absoluo que me tiene que devolver la variable suma  al operar con los dos vectores.

les dejare el codigo para que vean que es lo que quiero lograr.

Código
  1. int vector_1[5]={5, 978, 6, 4, 9}, vector_2{65, 9, 12, 66, 45}, suma=0;
  2.  
  3. for(int i=0; i<5; i++)
  4. {
  5. suma=suma + (vector_1[i]+vector_2[i]);
  6. }
  7.  
  8. printf("%i", suma);
  9.  

A simple vista solo con observar podemos darnos cuenta de que no hay error, el cogio hace la operacion de suma sobre los vectores, pero fijense lo que hace.

vector_1[1]=5 + vector_2[1]=65 esto seria igual a 70, y a si sucecivamente, no quiero esto lo que quiero es:


   5   978 6   4   9
+ 65 9    12 66 45
______________
665105294


que este ultimo seria el valo absoluto he tratado todas las formas y no logro nigun resultado de solucion, favor y aporten sus ideas, he intentado almacenar la suma en un vector al igual en una variable no vector, uff de todo !!
6  Programación / Programación C/C++ / Base de Datos con MySQL desde C !Excelente! en: 10 Julio 2012, 20:56 pm
Hola a todos !!!  :xD Expongo el thread para algunos que se preguntan si existiria alguna API para el trabajo de BD en C del estandar ANSI.

Comento todo el codigo para una mejor comprension del lector. El compilador utilizado es Dev-c++.

Con la inclusion de la lib windows.h ya pierde portablidad, pero la incluyo porque MySQL.h hace llamadas a sockets o sea winSock.h para poder establecer conexiones externas (ambiente Inet Global) y locales, la ventaja es que MySQL.h tambien esta para sistemas codigo abierto como Linux y Unix, pero en vez de windows.h habria que incluir otras librerias.

Nota: Algunas funciones no las comento, porque casi hacen las mismas llamadas y creo que entenderian el por que, pero si tienen alguna duda no olviden postear y claro cirtiquen el codigo falta optimizacion, aa se me olvido hacer la estrcutura de mi codigo con retornos para mayor optimizacion pero bueno algo es algo xD.

Salvedad: Doy por savido que los que lean este post es porque tienen conocimientos basicos de C y conocen bien los punteros a punteros y han trabajado con MySQL.

Antes de leer el codigo vean esto: (MYSQL_RES  *) es un identificador o variable que puede contener filas de un determinado campo en nuestra BD para poder luego consultar este. (MYSQL_ROW) es tipo puntero a puntero aunque no se haga uso de * pero si vemos como consultamos sus datos nos daremos cuenta, este acepta valores o elementos que se encuentran en "MYSQL_RES *" o sea lo que recojimos con "MYSQL_RES *" esta variable los puede manejar sin problemas. (MYSQL *) este acepta elementos o valores de un retorno a una variable del mismo tipo para luego enviar y recibir datos, o sea es quien nos envia, devuelve, conecta y desconecta del servidor MySQL.


Código
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <mysql/mysql.h>
  4.  
  5. //prototipos de funciones
  6.  
  7. void mostrar(MYSQL *con, MYSQL_ROW row, MYSQL_RES *resultado, char *consulta);
  8. void insertar(MYSQL *con, char *nombre, int id);
  9. void borrar(MYSQL *con, MYSQL_RES *res, MYSQL_ROW row, int id);
  10. void update(MYSQL *con);
  11. void buscar(MYSQL *con, MYSQL_RES *res, MYSQL_ROW row, int id);
  12.  
  13. //cuerpo de funciones
  14.  
  15. void mostrar(MYSQL *con, MYSQL_ROW row, MYSQL_RES *resultado, char *consulta)
  16. {
  17.    //concatena las constantes a la variable consulta
  18.    sprintf(consulta, "select * from amigo;");
  19.    //hacemos consulta y verificamos que se cumple
  20.    if((mysql_query(con, consulta)==0))
  21.    {
  22.                         //guardamos resultado en la variable resultado que es de tipo MYSQL_RES *
  23.                         resultado=mysql_use_result(con);
  24.  
  25.                         printf("Usuario    ID\n\n");
  26.                         //leemos los datos almacenados en resultadoy lo devolvemos a la variable row que es de tipo MYSQL_ROW
  27.                         while(row=mysql_fetch_row(resultado))
  28.                         {
  29.                                                              printf("%s---%s\n", row[0], row[1]);
  30.                                                              }
  31.                         }
  32.                         //preguntamos si se ha llegado al final de nuestra variable resultado
  33.                         if(!mysql_eof(resultado))
  34.                         {
  35.                                            printf("Error de lectura %s\n", mysql_error(con));
  36.                                            }
  37.                                            //cerramos conexion ya establecida
  38.                                            //mysql_close(con);
  39.  
  40.                                            fflush(stdin);
  41.                                            getchar();
  42.  
  43.                                            system("cls");
  44.  
  45.     }
  46.  
  47. void insertar(MYSQL *con, char *nombre, int id)
  48. {
  49.     char consulta[50];
  50.  
  51.     sprintf(consulta, "INSERT INTO amigo VALUES('%s', '%i');", nombre, id);
  52.  
  53.     if((mysql_query(con, consulta)==0))
  54.     {
  55.                          printf("Se agrego la nueva persona a la BD\n");
  56.                          fflush(stdin);
  57.                          getchar();
  58.                          }
  59.                          else
  60.                          {
  61.                              printf("Error no se pudo crear la nueva persona %s \n", mysql_error(con));
  62.                              }
  63.     system("cls");
  64.     }
  65.  
  66. void borrar(MYSQL *con, MYSQL_RES *resultado, MYSQL_ROW row, int id)
  67. {
  68.     char consulta[50];
  69.  
  70.     sprintf(consulta, "DELETE FROM amigo WHERE id='%i';", id);
  71.  
  72.     if(mysql_query(con, consulta)==0)
  73.     {
  74.  
  75.                      printf("Se elimino persona correctamente de la BD\n");
  76.                      fflush(stdin);
  77.                      getchar();
  78.                      }
  79.  
  80.     system("cls");
  81.     }
  82.  
  83. void update(MYSQL *con)
  84. {
  85.     char nombre[10], consulta[50];
  86.     int op, id;
  87.  
  88.     printf("Que deseas modificar\n\n1:Nombre\n2:id\nOpcion: ");
  89.     scanf("%i", &op);
  90.  
  91.     if(op==1)
  92.     {
  93.              printf("Inserta el ID de la persona a eliminar: ");
  94.              scanf("%i", &id);
  95.              printf("Inserte Nuevo Nombre: ");
  96.              fflush(stdin);
  97.              gets(nombre);
  98.              printf("\n");
  99.              sprintf(consulta, "UPDATE amigo SET nombre='%s' WHERE id='%d';", nombre, id);
  100.              }
  101.     else
  102.     {
  103.         printf("Inserte Nombre de la persona a elimininar: ");
  104.         fflush(stdin);
  105.         gets(nombre);
  106.         printf("Inserte nuevo ID ");
  107.         scanf("%i", &id);
  108.         sprintf(consulta, "UPDATE amigo SET id='%i' WHERE nombre='%s';", id, nombre);
  109.         }
  110.  
  111.     if(mysql_query(con, consulta)==0)
  112.     {
  113.                          printf("Se guardaron los datos correctamente");
  114.                          getchar();
  115.                          system("cls");
  116.                          }
  117.     }
  118.  
  119. void buscar(MYSQL *con, MYSQL_RES *res, MYSQL_ROW row, int id)
  120. {
  121.  
  122.     char consulta[50];
  123.  
  124.     sprintf(consulta, "SELECT nombre, id FROM amigo WHERE id='%i';", id);
  125.  
  126.     if(mysql_query(con, consulta)==0)
  127.     {
  128.                         printf("Los datos se buscaron correctamente\n\n");
  129.                         fflush(stdin);
  130.  
  131.                         res=mysql_use_result(con);
  132.  
  133.                         printf("Nombre      ID User\n\n");
  134.  
  135.                         while(row=mysql_fetch_row(res))
  136.                         {
  137.                                                        printf("%s      %s", row[0], row[1]);
  138.                                                        }
  139.                         }
  140.  
  141.                         getchar();
  142.                         system("cls");
  143.     }
  144.  
  145. int main()
  146. {
  147.    MYSQL *con;
  148.    MYSQL_RES *resultado;
  149.    MYSQL_ROW row;
  150.    char consulta[1024], nombre[25];
  151.    int id;
  152.    int op;
  153.    //inicializamos conexion SQL a algun atributo en este caso NULL.
  154.    con = mysql_init(NULL);
  155.    //establecemos conexion SQL y comprobamos que funciona
  156.    if(!mysql_real_connect(con, "localhost", "root", NULL, "prueba", 3306, NULL, 0))
  157.    {
  158.                                printf("Error conectando con BD Prueba %s\n", mysql_error(con));
  159.                                }
  160.  
  161.    printf("Que quieres hacer\n\n1:Leer BD\n2:Insertar Datos\n3:Eliminar Datos\n4:Actualizar Datos\n5:Buscar Datos\n\nEliga Opcion: ");
  162.  
  163.    scanf("%d", &op);
  164.  
  165.    switch(op)
  166.    {
  167.    case 1:
  168.    system("cls");
  169.    mostrar(con, row, resultado, consulta);
  170.    return main();
  171.    //break;
  172.  
  173.    case 2:
  174.         system("cls");
  175.         printf("Introduzca Nombre de persona: ");
  176.         fflush(stdin);
  177.         gets(nombre);
  178.         printf("\n");
  179.         printf("ID de persona: ");
  180.         scanf("%i", &id);
  181.         insertar(con, nombre, id);
  182.         return main();
  183.         //break;
  184.  
  185.   case 3:
  186.        system("cls");
  187.        printf("Inserte el ID de persona: ");
  188.        fflush(stdin);
  189.        scanf("%i", &id);
  190.        borrar(con, resultado, row, id);  
  191.        return main();    
  192.        //break;
  193.  
  194.    case 4:
  195.         system("cls");
  196.         update(con);
  197.         return main();
  198.         //break;
  199.  
  200.    case 5:
  201.         system("cls");
  202.         printf("Inserte ID de persona a Buscar: ");
  203.         scanf("%i", &id);
  204.         system("cls");
  205.         buscar(con, resultado, row, id);  
  206.         return main();
  207.  
  208.    default:
  209.            printf("Error no existe opcion\n\n");
  210.            getchar();
  211.            break;    
  212.    }
  213.    //cerramos conexion SQL
  214.    mysql_close(con);
  215.    getchar();
  216.    }
  217.  
7  Programación / Programación C/C++ / Interfaz Grafica de Usuario en C ligado a SDL !Excelente! en: 1 Julio 2012, 05:52 am
Hola internautas, programadores, lectores y todo usuario  ;-)

Solucion a dolores de caveza:

la justificacion de este post, es por la urgencia con la cual algunos programadores iniciados/avanzados buscan alguna API o Lib que les ayude a crear sus GUI para evitar usar la API Win32. Pues existen varias Libs que nos permiten la comunicacion con los sistemas de video, sonidos, perifericos, etc; que son los componentes basicos a manejar a la hora de crear nuestras propias GUI.

Para esos propositos de desarrollo de GUI, mencionare algunas existentes que se utilizan, esta la famosa (Allegro.h, Glut, Direct3d/2d, WxWidgets, SDL, etc) pero a lo mejor dirian "No utilizo ningunas de estas por su complejidad" no es claro todo tiene su nivel de complejidad pero a la hora de pensar tomar alguna API entonces piencen "Sera mas compleja que la anterior", "Sera multiplataforma", "Que puedo hacer con esta Lib o API". Entonces tendrian buena eleccion, eso nos hace pensar que dependiendo de nuestros objetivos podremos elegir la Lib correcta.

Bueno una de las Libs mas pontetes y usuales para graficos seria SDL, que a lo mejor has leido detalles o info.. de esta pero nunca te atreviste a tocarla, y si lo hiciste te tropezaste con que "Esta Lib no tiene funciones para crear Botones, Texbox, ListBox, Label, etc", pero entonces aqui entra la imaginacion y los eventos que ya trae SDL que es para lo que esta echa esta Lib.

He intentado desarrollar Aplicaciones Graficas con esta Lib y me ha ido bien, desarrolle algunas funciones para la creacion de botones, texbox, label, showbox, etc. Para poder ir desarrollando mas rapido mis aplicaciones (Presupuesto Economico) y haciendo uso de lo que se conoce como "Interfaz de Usuario" para poder comunicar la GUI con el Sistema/ejecutable y a si simular o imitar lo que son las seńales con las API actuales como GTK, QT, Glut, etc.

Voy a dejar el codigo del .h y un ejemplo de como utilizarlo junto con un Source y Ejecutable.

Nota: Si no estas familiarizado con SDL y C no intentes forzar tu comprension.

Código
  1.  
  2. //cabecera.h para incluir en main.c le llamo "components.h"
  3.  
  4. #define ROJO 1
  5. #define VERDE 2
  6. #define AZUL 3
  7. #define BLANCO 4
  8. #define NEGRO 5
  9.  
  10. #define BOTON "boton.jpg"
  11. #define FONT "lsansd.ttf"
  12.  
  13. SDL_Surface *pantalla;
  14. //button
  15. void create_button(int x, int y, const char *file, int tam_label, int color)
  16. {
  17.     SDL_Surface *boton, *img_label;
  18.     SDL_Rect pos_boton, pos_label;
  19.     TTF_Font *label;
  20.     SDL_Color paleta_color;
  21.  
  22.     boton = IMG_Load(BOTON);
  23.     //posicion boton
  24.     pos_boton = (SDL_Rect) {x, y, 0, 0};
  25.     //posicion etiqueta
  26.     pos_label = (SDL_Rect) {x+5, y+15, 0, 0};
  27.     //cargar fuente y tamano
  28.     label = TTF_OpenFont(FONT, tam_label);
  29.     //rojo
  30.     if(color==1)
  31.     {
  32.                    paleta_color.r=255;
  33.                    paleta_color.b=0;
  34.                    paleta_color.g=0;
  35.  
  36.     img_label = TTF_RenderText_Blended(label, file, paleta_color);
  37.     }
  38.     //verde
  39.     if(color==2)
  40.     {
  41.                    paleta_color.r=0;
  42.                    paleta_color.b=0;
  43.                    paleta_color.g=255;
  44.  
  45.     img_label = TTF_RenderText_Blended(label, file, paleta_color);
  46.     }
  47.     //azul
  48.     if(color==3)
  49.     {
  50.                    paleta_color.r=0;
  51.                    paleta_color.b=255;
  52.                    paleta_color.g=0;
  53.  
  54.     img_label = TTF_RenderText_Blended(label, file, paleta_color);
  55.     }
  56.     //blanco
  57.     if(color==4)
  58.     {
  59.                    paleta_color.r=255;
  60.                    paleta_color.b=255;
  61.                    paleta_color.g=255;
  62.  
  63.     img_label = TTF_RenderText_Blended(label, file, paleta_color);
  64.     }
  65.     //negro
  66.     if(color==4)
  67.     {
  68.                    paleta_color.r=0;
  69.                    paleta_color.b=0;
  70.                    paleta_color.g=0;
  71.  
  72.     img_label = TTF_RenderText_Blended(label, file, paleta_color);
  73.     }
  74.     //volcamos superficies en buffer
  75.     SDL_BlitSurface(boton, NULL, pantalla, &pos_boton);
  76.     SDL_BlitSurface(img_label, NULL, pantalla, &pos_label);
  77.     //pintamos imagen
  78.     SDL_Flip(pantalla);
  79.     //liberamos superficies
  80.     SDL_FreeSurface(boton);
  81.     SDL_FreeSurface(img_label);
  82.     }
  83. //label
  84. void create_label(int x, int y, const char *file, int tam_label, int color)
  85. {
  86.     SDL_Surface *img_label;
  87.     SDL_Rect pos_label;
  88.     TTF_Font *label;
  89.     SDL_Color paleta_color;
  90.  
  91.     //posicion etiqueta
  92.     pos_label = (SDL_Rect) {x, y, 0, 0};
  93.     //cargar fuente y tamano
  94.     label = TTF_OpenFont(FONT, tam_label);
  95.     //rojo
  96.     if(color==1)
  97.     {
  98.                    paleta_color.r=255;
  99.                    paleta_color.b=0;
  100.                    paleta_color.g=0;
  101.  
  102.     img_label = TTF_RenderText_Blended(label, file, paleta_color);
  103.     }
  104.     //verde
  105.     if(color==2)
  106.     {
  107.                    paleta_color.r=0;
  108.                    paleta_color.b=0;
  109.                    paleta_color.g=255;
  110.  
  111.     img_label = TTF_RenderText_Blended(label, file, paleta_color);
  112.     }
  113.     //azul
  114.     if(color==3)
  115.     {
  116.                    paleta_color.r=0;
  117.                    paleta_color.b=255;
  118.                    paleta_color.g=0;
  119.  
  120.     img_label = TTF_RenderText_Blended(label, file, paleta_color);
  121.     }
  122.     //blanco
  123.     if(color==4)
  124.     {
  125.                    paleta_color.r=255;
  126.                    paleta_color.b=255;
  127.                    paleta_color.g=255;
  128.  
  129.     img_label = TTF_RenderText_Blended(label, file, paleta_color);
  130.     }
  131.     //negro
  132.     if(color==5)
  133.     {
  134.                    paleta_color.r=0;
  135.                    paleta_color.b=0;
  136.                    paleta_color.g=0;
  137.  
  138.     img_label = TTF_RenderText_Blended(label, file, paleta_color);
  139.     }
  140.     //volcamos superficies en buffer
  141.     SDL_BlitSurface(img_label, NULL, pantalla, &pos_label);
  142.     //pintamos imagen
  143.     SDL_Flip(pantalla);
  144.     //liberamos superficies
  145.     SDL_FreeSurface(img_label);
  146.     }
  147.     //texbox
  148. void create_texbox(int x, int y)
  149. {
  150.     SDL_Surface *texbox;
  151.     SDL_Rect pos_texbox;
  152.  
  153.     pos_texbox = (SDL_Rect) {x, y, 0, 0};
  154.  
  155.     texbox = IMG_Load("texbox.jpg");
  156.  
  157.     SDL_BlitSurface(texbox, NULL, pantalla, &pos_texbox);
  158.  
  159.     SDL_Flip(pantalla);
  160.  
  161.     SDL_FreeSurface(texbox);
  162.     }
  163.  
  164. //escribir
  165. void SDL_printf(int x, int y, const char *file, int tam_letra, int color)
  166. {
  167.     SDL_Surface *letra;
  168.     SDL_Rect pos_letra;
  169.     TTF_Font *letra_;
  170.     SDL_Color paleta_color;
  171.  
  172.     //posicion letra
  173.     pos_letra = (SDL_Rect) {x, y, 0, 0};
  174.     //cargar fuente y tamano
  175.     letra_= TTF_OpenFont(FONT, tam_letra);
  176.     //rojo
  177.     if(color==1)
  178.     {
  179.                    paleta_color.r=255;
  180.                    paleta_color.b=0;
  181.                    paleta_color.g=0;
  182.  
  183.     letra = TTF_RenderText_Blended(letra_, file, paleta_color);
  184.     }
  185.     //verde
  186.     if(color==2)
  187.     {
  188.                    paleta_color.r=0;
  189.                    paleta_color.b=0;
  190.                    paleta_color.g=255;
  191.  
  192.     letra = TTF_RenderText_Blended(letra_, file, paleta_color);
  193.     }
  194.     //azul
  195.     if(color==3)
  196.     {
  197.                    paleta_color.r=0;
  198.                    paleta_color.b=255;
  199.                    paleta_color.g=0;
  200.  
  201.     letra = TTF_RenderText_Blended(letra_, file, paleta_color);
  202.     }
  203.     //blanco
  204.     if(color==4)
  205.     {
  206.                    paleta_color.r=255;
  207.                    paleta_color.b=255;
  208.                    paleta_color.g=255;
  209.  
  210.     letra = TTF_RenderText_Blended(letra_, file, paleta_color);
  211.     }
  212.     //negro
  213.     if(color==5)
  214.     {
  215.                    paleta_color.r=0;
  216.                    paleta_color.b=0;
  217.                    paleta_color.g=0;
  218.  
  219.     letra = TTF_RenderText_Blended(letra_, file, paleta_color);
  220.     }
  221.     //volcamos superficie en buffer
  222.     SDL_BlitSurface(letra, NULL, pantalla, &pos_letra);
  223.     //pintamos imagen
  224.     SDL_Flip(pantalla);
  225.     //liberamos superficie
  226.     SDL_FreeSurface(letra);
  227.     }
  228.  
  229. void scroll_back(int x, int y)
  230. {
  231.     SDL_Surface *cursor=IMG_Load("cursor.jpg");
  232.  
  233.     SDL_Rect pos_coord=(SDL_Rect){x, y-4, 0, 0};
  234.  
  235.     SDL_BlitSurface(cursor, NULL, pantalla, &pos_coord);
  236.     SDL_Flip(pantalla);
  237.     }
  238.  
  239. void scroll_clear(int x, int y)
  240. {
  241.     SDL_Surface *cur_blanco=IMG_Load("cur_bb.jpg");
  242.  
  243.     SDL_Rect pos_coord_cb=(SDL_Rect){x, y-4, 0, 0};
  244.  
  245.     SDL_BlitSurface(cur_blanco, NULL, pantalla, &pos_coord_cb);
  246.     SDL_Flip(pantalla);
  247.     }
  248.  
  249. void cursor_white(int x, int y)
  250. {
  251.     SDL_Surface *cursor=IMG_Load("cur_bb.jpg");
  252.  
  253.     SDL_Rect pos_coord=(SDL_Rect){x, y-4, 0, 0};
  254.  
  255.     SDL_BlitSurface(cursor, NULL, pantalla, &pos_coord);
  256.     SDL_Flip(pantalla);
  257.     }
  258.  
  259.  

Luego que entiendo todo este royo de los create_button, create_label y esas cosas, entonces me voy a codear la aplicacion.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <SDL.h>
  4. #include <SDL_image.h>
  5. #include <SDL_ttf.h>
  6. #include "components.cpp"
  7.  
  8. #define SIGNAL_CEDULA 4
  9. #define SIGNAL_APELLIDO 5
  10. #define SIGNAL_DIRECCION 6
  11. #define SIGNAL_NOMBRE 1
  12. #define bytes 64
  13.  
  14. void int_value(int signal, const char ctr);
  15. void scroll_back(int x, int y);
  16. void scroll_clear(int x, int y);
  17. void clear_bytes(int sig);
  18.  
  19. struct text{
  20.       char nombre[bytes];
  21.       char apellido[bytes];
  22.       char cedula[bytes];
  23.       char direc[bytes];
  24.       }texbox;
  25.  
  26. int sig=103, sig_y=91, i=0, signal, active_event=0;
  27.  
  28. int main(int argc, char *argv[])
  29. {
  30. SDL_Surface *image;
  31. SDL_Rect pos=(SDL_Rect){0,0,0,0};
  32. SDL_Event event;
  33.  
  34. int done = 0;
  35.  
  36. atexit(SDL_Quit);
  37. //inicializamos el subsistema de letras
  38. TTF_Init();
  39. //inicializamos el subsistema de video
  40. SDL_Init(SDL_INIT_VIDEO);
  41. //cargamos imagen
  42. image=IMG_Load("nave.jpg");
  43. //llamamos buffer de video con propiedades espesificas
  44. pantalla = SDL_SetVideoMode(640,300,24,SDL_HWSURFACE);
  45. //titulo de ventana
  46. SDL_WM_SetCaption("Formulario de Usuario",NULL);
  47. //bliteamos superficie en ventana
  48. SDL_BlitSurface(image, NULL, pantalla, &pos);
  49. //volcamos superficie en pantalla
  50. SDL_Flip(pantalla);
  51. //elementos de ventana
  52. create_label(100, 50, "Nombre", 20, AZUL);
  53. create_texbox(100, 80);
  54. create_label(100, 150, "Apellido", 20, AZUL);
  55. create_texbox(100, 180);
  56. create_label(350, 50, "Direccion", 20, AZUL);
  57. create_texbox(350, 80);
  58. create_label(350, 150, "Cedula", 20, AZUL);
  59. create_texbox(350, 180);
  60. create_button(100,250,"Guardar",15,VERDE);
  61. create_button(350,250,"Salir",15,VERDE);
  62. //bucle o loop de aplicacion
  63. while(done == 0)
  64. {
  65. //esperamos eventos en cola
  66. SDL_WaitEvent(&event);
  67. //consultamos eventos en cola
  68. if (event.type == SDL_QUIT)
  69. {
  70. done = 1;
  71. }
  72. /*else if(event.type==SDL_MOUSEBUTTONDOWN)
  73. {
  74.      fprintf(stdout, "x=%i|y=%i\n", event.button.x, event.button.y);
  75.      }*/
  76. else if((event.button.x>=100&event.button.x<=320)&&(event.button.y>=79&event.button.y<=100))
  77. {
  78.     if(event.button.button==1)
  79.     {
  80.     active_event=1;
  81.     scroll_clear(sig, sig_y);
  82.     i=0;
  83.     sig=103, sig_y=91;
  84.      scroll_back(sig, sig_y);
  85.     signal=SIGNAL_NOMBRE;
  86.     }
  87.     }
  88. else if((event.button.x>=100&event.button.x<=321)&&(event.button.y>=180&event.button.y<=201))
  89. {
  90.     if(event.button.button==1)
  91.     {
  92.     active_event=1;
  93.     scroll_clear(sig, sig_y);
  94.     i=0;
  95.     sig=103, sig_y=191;
  96.     scroll_back(sig, sig_y);
  97.     signal=SIGNAL_APELLIDO;
  98.     }
  99.     }
  100. else if((event.button.x>=350&event.button.x<=571)&&(event.button.y>=79&event.button.y<=101))
  101. {
  102.     if(event.button.button==1)
  103.     {
  104.     active_event=1;
  105.     scroll_clear(sig, sig_y);
  106.     i=0;
  107.     sig=353, sig_y=91;
  108.     scroll_back(sig, sig_y);
  109.     signal=SIGNAL_DIRECCION;
  110.     }
  111.     }
  112. else if((event.button.x>=350&event.button.x<=571)&&(event.button.y>=178&event.button.y<=202))
  113. {
  114.     if(event.button.button==1)
  115.     {
  116.     active_event=1;
  117.     scroll_clear(sig, sig_y);
  118.     i=0;
  119.     sig=353, sig_y=191;
  120.     scroll_back(sig, sig_y);
  121.     signal=SIGNAL_CEDULA;
  122.     }
  123.     }
  124. else if((event.button.x>=100&event.button.x<=200)&&(event.button.y>=250&event.button.y<=285))
  125. {
  126.     create_button(100,250,"Guardar",15,AZUL);
  127.     SDL_Delay(50);
  128.     create_button(100,250,"Guardar",15,VERDE);
  129.     if(event.button.button==1&&event.type==SDL_MOUSEBUTTONDOWN)
  130.     {
  131.     active_event=0;
  132.     fprintf(stdout, "%s\n%s\n%s\n%s\n", texbox.nombre, texbox.apellido, texbox.direc, texbox.cedula);
  133.     }
  134.     }
  135. else if((event.button.x>=354&event.button.x<=449)&&(event.button.y>=250&event.button.y<=285))
  136. {
  137.     create_button(350,250,"Salir",15,AZUL);
  138.     SDL_Delay(50);
  139.     create_button(350,250,"Salir",15,VERDE);
  140.     if(event.button.button==1&&event.type==SDL_MOUSEBUTTONDOWN)
  141.     {
  142.     //codigo accion salir
  143.     done=1;
  144.     }
  145.     }
  146. //eventos de teclado
  147. else if(active_event==1)
  148. {
  149. if(event.key.keysym.sym==SDLK_a&&event.type==SDL_KEYDOWN)
  150. {    
  151.     cursor_white(sig, sig_y);                                              
  152.     SDL_printf(sig, sig_y, "a", 10, ROJO);
  153.     sig=sig+8;
  154.     scroll_back(sig, sig_y);
  155.     int_value(signal, 'a');
  156.     }
  157. else if(event.key.keysym.sym==SDLK_b&&event.type==SDL_KEYDOWN)
  158. {
  159.     cursor_white(sig, sig_y);
  160.     SDL_printf(sig, sig_y, "b", 10, ROJO);
  161.     sig=sig+8;
  162.     scroll_back(sig, sig_y);
  163.     int_value(signal, 'b');
  164.     }
  165. else if(event.key.keysym.sym==SDLK_c&&event.type==SDL_KEYDOWN)
  166. {
  167.     cursor_white(sig, sig_y);
  168.     SDL_printf(sig, sig_y, "c", 10, ROJO);
  169.     sig=sig+8;
  170.     scroll_back(sig, sig_y);
  171.     int_value(signal, 'c');
  172.     }
  173. else if(event.key.keysym.sym==SDLK_d&&event.type==SDL_KEYDOWN)
  174. {
  175.     cursor_white(sig, sig_y);
  176.     SDL_printf(sig, sig_y, "d", 10, ROJO);
  177.     sig=sig+8;
  178.     scroll_back(sig, sig_y);
  179.     int_value(signal, 'd');
  180.     }
  181. else if(event.key.keysym.sym==SDLK_e&&event.type==SDL_KEYDOWN)
  182. {
  183.     cursor_white(sig, sig_y);
  184.     SDL_printf(sig, sig_y, "e", 10, ROJO);
  185.     sig=sig+8;
  186.     scroll_back(sig, sig_y);
  187.     int_value(signal, 'e');
  188.     }
  189. else if(event.key.keysym.sym==SDLK_f&&event.type==SDL_KEYDOWN)
  190. {
  191.     cursor_white(sig, sig_y);
  192.     SDL_printf(sig, sig_y, "f", 10, ROJO);
  193.     sig=sig+8;
  194.     scroll_back(sig, sig_y);
  195.     int_value(signal, 'f');
  196.     }
  197. else if(event.key.keysym.sym==SDLK_g&&event.type==SDL_KEYDOWN)
  198. {
  199.     cursor_white(sig, sig_y);
  200.     SDL_printf(sig, sig_y, "g", 10, ROJO);
  201.     sig=sig+8;
  202.     scroll_back(sig, sig_y);
  203.     int_value(signal, 'g');
  204.     }
  205. else if(event.key.keysym.sym==SDLK_h&&event.type==SDL_KEYDOWN)
  206. {
  207.     cursor_white(sig, sig_y);
  208.     SDL_printf(sig, sig_y, "h", 10, ROJO);
  209.     sig=sig+8;
  210.     scroll_back(sig, sig_y);
  211.     int_value(signal, 'h');
  212.     }
  213. else if(event.key.keysym.sym==SDLK_i&&event.type==SDL_KEYDOWN)
  214. {
  215.     cursor_white(sig, sig_y);
  216.     SDL_printf(sig, sig_y, " i", 10, ROJO);
  217.     sig=sig+8;
  218.     scroll_back(sig, sig_y);
  219.     int_value(signal, 'i');
  220.     }
  221. else if(event.key.keysym.sym==SDLK_j&&event.type==SDL_KEYDOWN)
  222. {
  223.     cursor_white(sig, sig_y);
  224.     SDL_printf(sig, sig_y, "j", 10, ROJO);
  225.     sig=sig+8;
  226.     scroll_back(sig, sig_y);
  227.     int_value(signal, 'j');
  228.     }
  229. else if(event.key.keysym.sym==SDLK_e&&event.type==SDL_KEYDOWN)
  230. {
  231.     cursor_white(sig, sig_y);
  232.     SDL_printf(sig, sig_y, "k", 10, ROJO);
  233.     sig=sig+8;
  234.     scroll_back(sig, sig_y);
  235.     int_value(signal, 'k');
  236.     }
  237. else if(event.key.keysym.sym==SDLK_l&&event.type==SDL_KEYDOWN)
  238. {
  239.     cursor_white(sig, sig_y);
  240.     SDL_printf(sig, sig_y, "l", 10, ROJO);
  241.     sig=sig+8;
  242.     scroll_back(sig, sig_y);
  243.     int_value(signal, 'l');
  244.     }
  245. else if(event.key.keysym.sym==SDLK_m&&event.type==SDL_KEYDOWN)
  246. {
  247.     cursor_white(sig, sig_y);
  248.     SDL_printf(sig, sig_y, "m", 10, ROJO);
  249.     sig=sig+8;
  250.     scroll_back(sig, sig_y);
  251.     int_value(signal, 'm');
  252.     }
  253. else if(event.key.keysym.sym==SDLK_n&&event.type==SDL_KEYDOWN)
  254. {
  255.     cursor_white(sig, sig_y);
  256.     SDL_printf(sig, sig_y, "n", 10, ROJO);
  257.     sig=sig+8;
  258.     scroll_back(sig, sig_y);
  259.     int_value(signal, 'n');
  260.     }
  261. else if(event.key.keysym.sym==SDLK_o&&event.type==SDL_KEYDOWN)
  262. {
  263.     cursor_white(sig, sig_y);
  264.     SDL_printf(sig, sig_y, "o", 10, ROJO);
  265.     sig=sig+8;
  266.     scroll_back(sig, sig_y);
  267.     int_value(signal, 'o');
  268.     }
  269. else if(event.key.keysym.sym==SDLK_p&&event.type==SDL_KEYDOWN)
  270. {
  271.     cursor_white(sig, sig_y);
  272.     SDL_printf(sig, sig_y, "p", 10, ROJO);
  273.     sig=sig+8;
  274.     scroll_back(sig, sig_y);
  275.     int_value(signal, 'p');
  276.     }
  277. else if(event.key.keysym.sym==SDLK_q&&event.type==SDL_KEYDOWN)
  278. {
  279.     cursor_white(sig, sig_y);
  280.     SDL_printf(sig, sig_y, "q", 10, ROJO);
  281.     sig=sig+8;
  282.     scroll_back(sig, sig_y);
  283.     int_value(signal, 'q');
  284.     }
  285. else if(event.key.keysym.sym==SDLK_r&&event.type==SDL_KEYDOWN)
  286. {
  287.     cursor_white(sig, sig_y);
  288.     SDL_printf(sig, sig_y, "r", 10, ROJO);
  289.     sig=sig+8;
  290.     scroll_back(sig, sig_y);
  291.     int_value(signal, 'r');
  292.     }
  293. else if(event.key.keysym.sym==SDLK_s&&event.type==SDL_KEYDOWN)
  294. {
  295.     cursor_white(sig, sig_y);
  296.     SDL_printf(sig, sig_y, "s", 10, ROJO);
  297.     sig=sig+8;
  298.     scroll_back(sig, sig_y);
  299.     int_value(signal, 's');
  300.     }
  301. else if(event.key.keysym.sym==SDLK_KP0&&event.type==SDL_KEYDOWN)
  302. {
  303.     cursor_white(sig, sig_y);
  304.     SDL_printf(sig, sig_y, "0", 10, ROJO);
  305.     sig=sig+8;
  306.     scroll_back(sig, sig_y);
  307.     int_value(signal, '0');
  308.     }
  309. else if(event.key.keysym.sym==SDLK_KP1&&event.type==SDL_KEYDOWN)
  310. {
  311.     cursor_white(sig, sig_y);
  312.     SDL_printf(sig, sig_y, "1", 10, ROJO);
  313.     sig=sig+8;
  314.     scroll_back(sig, sig_y);
  315.     int_value(signal, '1');
  316.     }
  317. else if(event.key.keysym.sym==SDLK_KP2&&event.type==SDL_KEYDOWN)
  318. {
  319.     cursor_white(sig, sig_y);
  320.     SDL_printf(sig, sig_y, "2", 10, ROJO);
  321.     sig=sig+8;
  322.     scroll_back(sig, sig_y);
  323.     int_value(signal, '2');
  324.     }
  325. else if(event.key.keysym.sym==SDLK_KP3&&event.type==SDL_KEYDOWN)
  326. {
  327.     cursor_white(sig, sig_y);
  328.     SDL_printf(sig, sig_y, "3", 10, ROJO);
  329.     sig=sig+8;
  330.     scroll_back(sig, sig_y);
  331.     int_value(signal, '3');
  332.     }
  333. else if(event.key.keysym.sym==SDLK_KP4&&event.type==SDL_KEYDOWN)
  334. {
  335.     cursor_white(sig, sig_y);
  336.     SDL_printf(sig, sig_y, "4", 10, ROJO);
  337.     sig=sig+8;
  338.     scroll_back(sig, sig_y);
  339.     int_value(signal, '4');
  340.     }
  341. else if(event.key.keysym.sym==SDLK_KP5&&event.type==SDL_KEYDOWN)
  342. {
  343.     cursor_white(sig, sig_y);
  344.     SDL_printf(sig, sig_y, "5", 10, ROJO);
  345.     sig=sig+8;
  346.     scroll_back(sig, sig_y);
  347.     int_value(signal, '5');
  348.     }
  349. else if(event.key.keysym.sym==SDLK_KP6&&event.type==SDL_KEYDOWN)
  350. {
  351.     cursor_white(sig, sig_y);
  352.     SDL_printf(sig, sig_y, "6", 10, ROJO);
  353.     sig=sig+8;
  354.     scroll_back(sig, sig_y);
  355.     int_value(signal, '6');
  356.     }
  357. else if(event.key.keysym.sym==SDLK_KP7&&event.type==SDL_KEYDOWN)
  358. {
  359.     cursor_white(sig, sig_y);
  360.     SDL_printf(sig, sig_y, "7", 10, ROJO);
  361.     sig=sig+8;
  362.     scroll_back(sig, sig_y);
  363.     int_value(signal, '7');
  364.     }
  365. else if(event.key.keysym.sym==SDLK_KP8&&event.type==SDL_KEYDOWN)
  366. {
  367.     cursor_white(sig, sig_y);
  368.     SDL_printf(sig, sig_y, "8", 10, ROJO);
  369.     sig=sig+8;
  370.     scroll_back(sig, sig_y);
  371.     int_value(signal, '8');
  372.     }
  373. else if(event.key.keysym.sym==SDLK_KP9&&event.type==SDL_KEYDOWN)
  374. {
  375.     cursor_white(sig, sig_y);
  376.     SDL_printf(sig, sig_y, "9", 10, ROJO);
  377.     sig=sig+8;
  378.     scroll_back(sig, sig_y);
  379.     int_value(signal, '9');
  380.     }
  381. else if(event.key.keysym.sym==SDLK_t&&event.type==SDL_KEYDOWN)
  382. {
  383.     cursor_white(sig, sig_y);
  384.     SDL_printf(sig, sig_y, "t", 10, ROJO);
  385.     sig=sig+8;
  386.     scroll_back(sig, sig_y);
  387.     int_value(signal, 't');
  388.     }
  389. else if(event.key.keysym.sym==SDLK_u&&event.type==SDL_KEYDOWN)
  390. {
  391.     cursor_white(sig, sig_y);
  392.     SDL_printf(sig, sig_y, "u", 10, ROJO);
  393.     sig=sig+8;
  394.     scroll_back(sig, sig_y);
  395.     int_value(signal, 'u');
  396.     }
  397. else if(event.key.keysym.sym==SDLK_v&&event.type==SDL_KEYDOWN)
  398. {
  399.     cursor_white(sig, sig_y);
  400.     SDL_printf(sig, sig_y, "v", 10, ROJO);
  401.     sig=sig+8;
  402.     scroll_back(sig, sig_y);
  403.     int_value(signal, 'v');
  404.     }
  405. else if(event.key.keysym.sym==SDLK_w&&event.type==SDL_KEYDOWN)
  406. {
  407.     cursor_white(sig, sig_y);
  408.     SDL_printf(sig, sig_y, "w", 10, ROJO);
  409.     sig=sig+8;
  410.     scroll_back(sig, sig_y);
  411.     int_value(signal, 'w');
  412.     }
  413. else if(event.key.keysym.sym==SDLK_x&&event.type==SDL_KEYDOWN)
  414. {
  415.     cursor_white(sig, sig_y);
  416.     SDL_printf(sig, sig_y, "x", 10, ROJO);
  417.     sig=sig+8;
  418.     scroll_back(sig, sig_y);
  419.     int_value(signal, 'x');
  420.     }
  421. else if(event.key.keysym.sym==SDLK_y&&event.type==SDL_KEYDOWN)
  422. {
  423.     cursor_white(sig, sig_y);
  424.     SDL_printf(sig, sig_y, "y", 10, ROJO);
  425.     sig=sig+8;
  426.     scroll_back(sig, sig_y);
  427.     int_value(signal, 'y');
  428.     }
  429. else if(event.key.keysym.sym==SDLK_k&&event.type==SDL_KEYDOWN)
  430. {
  431.     cursor_white(sig, sig_y);
  432.     SDL_printf(sig, sig_y, "k", 10, ROJO);
  433.     sig=sig+8;
  434.     scroll_back(sig, sig_y);
  435.     int_value(signal, 'k');
  436.     }
  437. else if(event.key.keysym.sym==SDLK_z&&event.type==SDL_KEYDOWN)
  438. {
  439.     cursor_white(sig, sig_y);
  440.     SDL_printf(sig, sig_y, "z", 10, ROJO);
  441.     sig=sig+8;
  442.     scroll_back(sig, sig_y);
  443.     int_value(signal, 'z');
  444.     }
  445. else if(event.key.keysym.sym==SDLK_SPACE&&event.type==SDL_KEYDOWN)
  446. {
  447.     cursor_white(sig, sig_y);
  448.     SDL_printf(sig, sig_y, "  ", 10, ROJO);
  449.     sig=sig+8;
  450.     scroll_back(sig, sig_y);
  451.     int_value(signal, ' ');
  452.     }
  453. else if(event.key.keysym.sym==SDLK_KP_DIVIDE&&event.type==SDL_KEYDOWN)
  454. {
  455.     cursor_white(sig, sig_y);
  456.     SDL_printf(sig, sig_y, "/", 10, ROJO);
  457.     sig=sig+8;
  458.     scroll_back(sig, sig_y);
  459.     int_value(signal, '/');
  460.     }
  461. else if(event.key.keysym.sym==SDLK_BACKSPACE&&event.type==SDL_KEYDOWN)
  462. {
  463.     clear_bytes(signal);
  464.     scroll_clear(sig, sig_y);
  465.     sig=sig-8;
  466.     scroll_back(sig, sig_y);
  467.     i--;
  468.     }
  469. else if(event.key.keysym.sym==SDLK_KP_MINUS&&event.type==SDL_KEYDOWN)
  470. {
  471.     cursor_white(sig, sig_y);
  472.     SDL_printf(sig, sig_y, "-", 10, ROJO);
  473.     sig=sig+8;
  474.     scroll_back(sig, sig_y);
  475.     int_value(signal, '-');
  476.     }
  477. else if(sig<=104)
  478. {
  479.     sig = 103;
  480.     }
  481.     }
  482. }
  483. //liberamos superficie principal
  484. SDL_FreeSurface(pantalla);
  485. }
  486. /*funcion rrecoje chars y los mete en array de acuerdo
  487. a CONSTANTES*/
  488. void int_value(int sig, const char ctr)
  489. {
  490.  
  491.     if(sig==SIGNAL_NOMBRE)
  492.     {
  493.                              texbox.nombre[i]=ctr;
  494.                              i++;
  495.                              }
  496.     if(sig==SIGNAL_APELLIDO)
  497.     {
  498.                              texbox.apellido[i]=ctr;
  499.                              i++;
  500.                              }
  501.     if(sig==SIGNAL_CEDULA)
  502.     {
  503.                              texbox.cedula[i]=ctr;
  504.                              i++;
  505.                              }
  506.     if(sig==SIGNAL_DIRECCION)
  507.     {
  508.                              texbox.direc[i]=ctr;
  509.                              i++;
  510.                              }
  511.     }
  512.  
  513. void clear_bytes(int sig)
  514. {
  515.  
  516.     if(sig==SIGNAL_NOMBRE)
  517.     {
  518.                              texbox.nombre[strlen(texbox.nombre)-1]=' ';
  519.                              }
  520.     if(sig==SIGNAL_APELLIDO)
  521.     {
  522.                              texbox.apellido[strlen(texbox.apellido)-1]=' ';
  523.                              }
  524.     if(sig==SIGNAL_CEDULA)
  525.     {
  526.                              texbox.cedula[strlen(texbox.cedula)-1]=' ';
  527.                              }
  528.     if(sig==SIGNAL_DIRECCION)
  529.     {
  530.                              texbox.direc[strlen(texbox.direc)-1]=' ';
  531.                              }
  532.     }
  533.  

Aqui es donde entra la complejidad y aplicacion de las funciones anteriormente mencionadas, es la aplicacion en si.

Salvedad: Posteo esto, para que critiquen de como mejorar/implementar el codigo de mi Lib.h no del Main.c el objetivo es que se animen y logremos intercambiar conocimientos y aprender mas todos. Pueden criticar y Postear el codigo en otros foros respetando la fuente y el autor. Me reservare los detalles y explicacion de cada syntaxis, para que ustedes mismos opinen y pregunten. !!

Salvedad 2: No olviden que aqui trabajamos con las Libs SDL_image.h, SDL_ttf.h. O sea tienen que tener su Dev-c++ en la opcion Linker con la siguiente Confg: (-lmingw32  -lSDLmain -lSDL -lSDL_image -lSDL_ttf ) e instalar todas las Libs en el directorio Include de nuestra instalacion Dev-c++ si andas en alguna Distro Linux enlaza con -lMyLib.o.

Post Finalizado Suerte  :xD !!!!

He cumplido lo prometido aqui les dejo el .rar con el ejecutable y las .jpg y Fonts para que puedan entender mejor el codigo ya una vez ejecutado !!

http://uploading.com/files/eb8c9562/Proyecto.rar/
Tambien la imagen para mas motivacion !!
http://imageshack.us/photo/my-images/708/dibujo2xz.png/

 ;)
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines