El Código de la Librería

El fichero Makefile proveído tiene objetivos para crear versiones estática y dinámica de la librería:
lhp@nereida:~/Lperl/src/XSUB/h2xsexample/coordlib/lib$ cat -n Makefile
 1  CFLAGS= -I../include -g
 2  INCLUDE=../include
 3
 4  shared:libpl.so
 5
 6  static:libpl.a
 7
 8  libpl.a:pl2rc.o rc2pl.o
 9          ar r libpl.a pl2rc.o rc2pl.o
10
11  libpl.so:pl2rc.o rc2pl.o
12          cc  -shared $(CFLAGS) pl2rc.o rc2pl.o -o libpl.so
13
14  pl2rc.o:pl2rc.c $(INCLUDE)/coord.h
15
16  rc2pl.o:rc2pl.c $(INCLUDE)/coord.h
17
18  clean:
19          rm -f *.o core
20
21  veryclean:
22          make clean;
23          rm -f libpl.a libpl.so

El fuente pl2rc.c guarda las funciones relacionadas con el manejo de las coordenadas polares:

    24
lhp@nereida:~/Lperl/src/XSUB/h2xsexample/coordlib/lib$ cat -n pl2rc.c
 1  #include <math.h>
 2  #include <coord.h>
 3  #include <stdio.h>
 4
 5  rectangular pl2rc(polar p) {
 6    rectangular aux;
 7
 8    aux.x = p.mod*cos(p.arg);
 9    aux.y = p.mod*sin(p.arg);
10    return (aux);
11  }
12
13  polar getpolar() {
14    polar aux;
15
16    printf("mod: "); scanf("%lf",&aux.mod);
17    printf("arg: "); scanf("%lf",&aux.arg);
18
19    return aux;
20  }
21
22  char * polar2str(const char *format, polar p) {
23    static char s[256];
24    sprintf(s, format, p.mod,p.arg);
25    return s;
26  }

El fuente rc2pl.c guarda las funciones relacionadas con el manejo de las coordenadas rectangulares:

lhp@nereida:~/Lperl/src/XSUB/h2xsexample/coordlib/lib$ cat -n rc2pl.c
 1  #include <math.h>
 2  #include <coord.h>
 3  #include <stdio.h>
 4
 5  polar rc2pl(rectangular r) {
 6    polar aux;
 7
 8    aux.mod = sqrt(r.x*r.x+r.y*r.y);
 9    if (r.x != 0.0)
10      aux.arg = atan(r.y/r.x);
11    else if (r.y != 0.0)
12      aux.arg = PI;
13    else {
14     fprintf(stderr,"Error passing from rectangular to polar coordinates\n");
15     aux.arg = -1.0;
16    }
17    return (aux);
18  }
19
20  char * rectangular2str(const char *format, rectangular r) {
21    static char s[256];
22    sprintf(s, format, r.x, r.y);
23    return s;
24  }
25
26  rectangular getrectangular() {
27    rectangular aux;
28
29    printf("x: "); scanf("%lf",&aux.x);
30    printf("y: "); scanf("%lf",&aux.y);
31
32    return aux;
33  }

Casiano Rodríguez León
Licencia de Creative Commons
Programación Distribuida y Mejora del Rendimiento
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=44.
2012-06-19