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 externas. Mostrar todas las entradas
Mostrando entradas con la etiqueta externas. Mostrar todas las entradas

domingo, 29 de octubre de 2023

Obsidian: enlaces a carpetas o ficheros fuera de la bóveda

Obsidian: enlaces a carpetas o ficheros fuera de la bóveda

Para enlazar fichero que estén fuera de la bóveda debemos de usar la siguiente estructura:

[ruta](file:ruta)


Importante:
-Los espacios de las rutas y/o nombre de los archivos deben de sustituirse por %20
-En window la barra "\" se debe duplicar "\\"

Ejemplo: en windows acceso a la ruta  "C:\EJEMPLO PYTHON"

[ruta a c:\\Ejemplo Python ](file:C:\\EJEMPLO%20PYTHON)



Ejemplo: en linux: acceder la ruta /home/minino/ayuda gambas

 [ruta a /home/minino/ayuda gambas](file:/home/minino/ayuda%20gambas)


Saludos


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