Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



Mostrando entradas con la etiqueta c. Mostrar todas las entradas
Mostrando entradas con la etiqueta c. Mostrar todas las entradas

sábado, 17 de noviembre de 2018

Editor Codelite: Como instalar los plugins

Editor Codelite: Como instalar los plugins


Buscando como usar git dentro del editor Codelite, encontré en la este enlace, como instalarlo como plugins: 

sudo apt-get install codelite-plugins 

No solo se instala el pluging de git, sino un montón más. En la siguiente imagen podéis ver los plugins instalados: 




Fuente:
http://codelite.org/LiteEditor/GitPlugin

Notas:
Para usar el plugins de git me ha hecho falta instalar:
gitk -> un visor de ramas de git
SmartGit -> un gestor gui de git (https://www.syntevo.com/smartgit/download/) y al instalarlo le digo que es para fines "no comerciales" (en el primer arranque te pregunta el tipo de uso)

sábado, 10 de diciembre de 2016

[Desarrollo Gambas] Creación de una libreria .so en C, y uso de la misma por el mismo programa que la crea


[Desarrollo Gambas] 

Creación de una libreria .so en C, y uso de la misma por el mismo programa que la crea.



El lenguaje C crea ejecutables mucho más eficientes y rápidos que los que crea el lenguaje Gambas... pero Gambas puede usar librería externas para aprovechar la eficiencia de C.


Este en un ejemplo subido por Vuott, donde, el propio programa de Gambas, crea una libreria .so y la usa.

Esto es lo que hace el programa

  1. Crea una libreria "libmuestra", en la carpeta /tmp, creando el archivo en C (libmuestra.c), y compilandolo como libreria shared , para que la cree como libmuestra.so. 
  2. Esta libreria tiene la función potencia, que calcula la potencia dada de un numero X elevado a Y.
  3. En programa  Gambas, la usa usando el comando Library y Private Extern Potencia()
  4. La función "potencia" es llamada por el programa para calcular la potencia de 3 elevado a 4.



Library "/tmp/libnuestra"   ' Declara la libreria que contiene la función que nos interesa

' double Potencia(double x, int y)
' Devuelve la potencia de un valor de tipo "double"
' (es decir el tipo "Float" en gambas).
Private Extern Potencia(As Float, y As Integer) As Float    ' Declara la función que nos interesa
 

Public Sub Main()
 
 Dim f As Float

' Llama a la procedura que crea la nuestra libreria .so:
  Creaso()
  
' Utiliza la función externa de la nuestra libreria .so:
  f = Potencia(3.0, 4.0)
  
  Print f
  
End


Private Procedure Creaso()
  
' Crea el fichero fuente en C de la nuestra libreria .so:
   File.Save("/tmp/libnuestra.c""double Potencia(double x, int y) {   /* Nam potentia activa est principium agendi in aliud. (S. Tomas) */" &   
             "\n\n" &
             "   if (y == 0)\n" &
             "      return 1;" &
             "\n\n" &
             "   double pot = x;" &
             "   while (y > 1) {\n" &
             "     --y;" &
             "     pot *= x;\n}" &
             "\n\n" &
             "   return pot;\n}")
             
' Crea la nuestra libreria .so:
   Shell "gcc -o /tmp/libnuestra.so /tmp/libnuestra.c -shared" Wait
  
End





Descarga del ejemplo:
alojado en google drive







Fuente:
https://www.gambas-es.org/viewtopic.php?f=5&t=6011&p=35992&highlight=#p35992






domingo, 29 de mayo de 2016

Gambas3: Uso de funciones Externas hechas en C

Gambas3: Uso de funciones Externas 

hechas en C 

Si necesitamos potencia de cálculo, o usar algunas funciones de C, gambas3 permite usarlas mediante la orden librery y la declaración de la función externa

El el siguiente video vamos a ver como usar la funcion externa "inkey()" y como crear la libreria ".so"

1) Tenemos el siguiente programa en c: "kpress.c"
/***
* kpress.c
*
* (c) 2004 ackbar
*/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <termio.h>
#include <sys/ioctl.h>

#define STDINFD  0
#undef getc

int inkey(void);

int main() {
  int c;
  printf("Presione una tecla: ");
  c=inkey();
  printf("Codigo ASCII de la tecla presionada: [%d] Caracter: [%c]\n",c,c);
  return 0;
}

int inkey(void) {
  char c;
  struct termio param_ant, params;

  ioctl(STDINFD,TCGETA,&param_ant);
  params = param_ant;
  params.c_lflag &= ~(ICANON|ECHO);
  params.c_cc[4] = 1;

  ioctl(STDINFD,TCSETA,&params);

  fflush(stdin); fflush(stderr); fflush(stdout);
  read(STDINFD,&c,1);

  ioctl(STDINFD,TCSETA,&param_ant);
int v=c;
  return v;
}
/* EOF: kpress.c */


2) Vamos a crear la libreria ".so"
$gcc -o libkpress.so kpress.c -shared -fPIC

3) En gambas3, vamos a usar la funcion "inkey()"
' Gambas module file

Library "/tmp/libkpress"

Private Extern inkey() As Integer

Public Sub Main()
 
  Dim a As String
 
  Print "Hello world"
 
  Try Kill "/tmp/libkpress.so"
  Try Copy "libkpress.so" To "/tmp/libkpress.so"
 
  a = Chr$(inkey())
 
  Print a
 
End

Nota:
  Como podeis observar, el archivo "libkpress.so", esta en el directorio "Datos" del proyecto gambas, y se copia internamente al directorio /tmp para usarlo.


En este video se explican todos los pasos:



Código fuente: alojado en google drive

domingo, 29 de diciembre de 2013

La potencia del C en Gambas


La potencia del C en Gambas

Gambas3, como Python y Java, es un lenguaje interpretado. Podemos crear  codebyte (.gambas), que son más rápidos que cuando se ejecutan en el IDE de Gambas, pero ¿que ocurre cuando necesitamos potencia de cálculo?
¿que hacer entonces?.


Gambas permite usar librerías externas realizadas en C, para aprovechar la velocidad/rendimiento  de este lenguaje en nuestros programas.

Os dejo aquí un simple ejemplo de realizar librerías en C, compilarlas y usarlas en un programa de Gambas.
Vamos a crear 3 funciones.
a) sumar: esta función recibe dos números y devuelve su suma (usando return)
b) duplica: recibe un vector y lo multiplica por 2, devolviendo el vector (sin usar return)
c) ValorarTablero: recibe una matrix cuadrada de N dimension, y devuelve la suma de sus componentes (usando return)

1º. definimos las cabeceras de las funciones que vamos a usar: archivo test.h
->

 2º definimos las funciones: test.c
->


3º Compilamos y creamos la libreria:
$ gcc -Wl,-soname=test.so -o test.so -std=c99 -fpic -shared -shared-libgcc test.c

4º Enviamos la libreria al directorio /usr/lib y creamos los enlaces (tenemos que ser root):
# cp test.so /usr/lib/test.so
# ldconfig /usr/lib


5º Ahora en Gambas, creamos un módulo, donde definimos las funciones externas:
->

6º Usamos las funciones en el programa:
->

He hecho un pequeño ejemplo, para comparar como mejora el uso de las funciones en C con las mismas funciones hechas en Gambas.

Este es el resultado del perfilado del programa (cuanto tarda cada función):
Donde se aprecia mayor mejora es en la funcion valorarTableroGambas y valorarTablero, ya que para hacer lo mismo, la función valorartablero solo tarda 283.209 (usa la libreria en C) y la de valorarTableroGambas tarda 56.053.209 (codigo nativo en Gambas3).

Descarga del completo ejemplo: https://app.box.com/s/fjvzuqm3921j25ifgb0h




Ejemplo de uso real: Programa de Cálculo de Estructuras
El proyecto Estrud3D (enlace: http://forge.gambas-es.org/projects/estru3d y http://www.gambas-es.org/viewtopic.php?f=5&t=3470&highlight=estru3d) es un programa realizado por Martín P. Cristiá inicialmente programado en Visual Basic y C,  que se está portando a Gambas. Para este programa es fundamental realizar los cálculos la estructura lo más rápido posible, y para ello, se usan librerías escritas y compiladas en  C que realizan "el trabajo duro" del cálculo, siendo usado Gambas, para definir la estructura (dimensiones, nodos, barras, tipos de materiales que se usa) y obtener los resultados (gráficos de esfuerzos e informes de todo tipo).




Fuentes:
http://www.gambas-es.org/viewtopic.php?f=4&p=19790#p19790
http://gambaswiki.org/wiki/lang/extdecl?l=es
http://gambaswiki.org/wiki/howto/extern?l=es

viernes, 10 de agosto de 2012

Apuntes Curso de Programador De Sistemas.



Apuntes del Fpo Curso de Programador de Sistemas

Os dejo esta dirección donde tengo los apuntes de este curso.
Es bantante completo (duró 3 meses), y se tratan temas:
  1. Pseudocodigo
  2. Gnu/Linux 
  3. Lenguaje C estructurado
 Incluyo tambien examenes y ejercicios que hicimos.







Podeis ver más cursos en esta pagina:

http://www.jsbsan.blogspot.com.es/p/enlaces-jsbsan.html

Saludos


lunes, 6 de agosto de 2012

Videos Explicativos: Listas Enlazadas en C


Gracias a Shell, del foro de Gambas-es.org, he conocido estos videos de la universidad politécnica de valencia.

Os dejo aquí varios enlaces dedicados a explicar las listas enlazadas en C:





Podeis encontrar más cursos (de todo tipo, no solo de informática) en https://polimedia.upv.es/catalogo/


Saludos



viernes, 15 de junio de 2012

Acceder a un servidor ftp desde un programa en C++


Acceder a  un servidor ftp
 desde un programa en C++

Me ha surgido la necesidad, de crear un programa que acceda a un ftp para subir unos archivos.

El tema es que lo podia hacer desde la linea de comandos desde un script, por ejemplo, pero asi tendria de enseñar la contraseña, y es lo que no deseo...


Buscando por internet, me he encontrado una forma de ejecutar comandos desde el lenguaje C++, y no es usando la orden "system(..)" de C++, ya que con este no lo he conseguido hacerlo, ya que no podia mandar varias ordenes.


He usado la orden "popen(...)", con ella he podido tanto conectarme, ademas de hacer un listado de varios subdirectorios (cambiandome de directorio)...

Aqui podeis ver como es el codigo:




/*
* EJEMPLO DE ACCESO A FTP, por un programa en C.
* JsbSan, licencia GPL.
* Basado en el ejemplo de: Javier Abellán. 26 de Marzo de 2003
*
* Programa de demo de la función popen()
* http://www.chuidiang.com/clinux/funciones/funciones.php#popen
*/
#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
/* Fichero con el que abriremos
FILE *fichero=NULL;
/* Variable auxiliar para leer el fichero */
char aux[1000];
/* Se abre el fichero lftp, pasándole el parámetro y se comprueba
* que se ha podido abrir correctamente */
// lftp -u nombre,clave direccionftp
fichero = popen ("lftp -u nombre_usuario,clave direccion_ftp","w");

if (fichero == NULL)
{
perror ("No se puede abrir /bin/lftp");
return -1;
}
/* Se lee la primera linea y se hace un bucle, hasta fin de fichero,
* para ir sacando por pantalla los resultados.
*/
fprintf(fichero,"ls\n"); // escribo el listado del contenido del directorio del servidor
fprintf(fichero,"quit\n"); // cierro el lftp
/* Se cierra el fichero */
pclose (fichero);
return 0; //termino el programa
}

De esta manera, una vez compilado el codigo fuente, consigo listar el contenido del servidor ftp sin que "nadie" vea la contraseña necesaria para entrar en el servidor (al estar esta contraseña "compilada" junto al código fuente).





Me he basado en el ejemplo de popen() de la pagina web: