source: git/Singular/slInit_Dynamic.cc @ 06c0b3

spielwiese
Last change on this file since 06c0b3 was 762407, checked in by Oleksandr Motsak <motsak@…>, 12 years ago
config.h is for sources files only FIX: config.h should only be used by source (not from inside kernel/mod2.h!) NOTE: each source file should better include mod2.h right after config.h, while headers should better not include mod2.h.
  • Property mode set to 100644
File size: 3.9 KB
Line 
1/****************************************
2*  Computer Algebra System SINGULAR     *
3****************************************/
4/***************************************************************
5 *  File:    slInit_Dynamic.cc
6 *  Purpose: link initialization for dynamic linking
7 *  Author:  obachman (Olaf Bachmann)
8 *  Created: 12/00
9 *  Version: $Id$
10 *******************************************************************/
11
12/***************************************************************
13 *
14 * MP link Extension inits
15 *
16 ***************************************************************/
17#include "config.h"
18#include <kernel/mod2.h>
19#include <Singular/silink.h>
20#include <Singular/slInit.h>
21#include <polys/mod_raw.h>
22
23#ifdef HAVE_DL
24#ifdef HAVE_MPSR
25#include <MP.h>
26#include "mpsr_sl.h"
27
28static void* mpsr_so_handle = NULL;
29typedef void (*voidProc)();
30
31static void* slInitMPSRHandle()
32{
33  if (mpsr_so_handle == NULL)
34  {
35    mpsr_so_handle = dynl_open_binary_warn("mpsr");
36    if (mpsr_so_handle != NULL)
37    {
38      voidProc init_proc = (voidProc)
39        dynl_sym_warn(mpsr_so_handle, "mpsr_Init");
40      if (init_proc != NULL)
41        (*init_proc)();
42      else
43        mpsr_so_handle = NULL;
44    }
45  }
46  return mpsr_so_handle;
47}
48
49si_link_extension slInitMPFileExtension(si_link_extension s)
50{
51  void* handle = slInitMPSRHandle();
52
53  if (handle == NULL) return NULL;
54
55  s->Open = (slOpenProc) dynl_sym_warn(handle, "slOpenMPFile");
56  s->Close = (slCloseProc) dynl_sym_warn(handle, "slCloseMP");
57  s->Kill = (slKillProc) s->Close;
58  s->Read = (slReadProc) dynl_sym_warn(handle, "slReadMP");
59  s->Dump = (slDumpProc) dynl_sym_warn(handle, "slDumpMP");
60  s->GetDump = (slGetDumpProc) dynl_sym_warn(handle, "slGetDumpMP");
61  s->Write = (slWriteProc) dynl_sym_warn(handle, "slWriteMP");
62  s->Status = (slStatusProc) dynl_sym_warn(handle, "slStatusMP");
63  if (s->Open == NULL || s->Close == NULL || s->Kill == NULL ||
64      s->Read == NULL || s->Dump == NULL || s->GetDump == NULL ||
65      s->Write == NULL || s->Status == NULL)
66    return NULL;
67
68  s->type="MPfile";
69  return s;
70}
71
72si_link_extension slInitMPTcpExtension(si_link_extension s)
73{
74  void* handle = slInitMPSRHandle();
75
76  if (handle == NULL) return NULL;
77
78  s->Open = (slOpenProc) dynl_sym_warn(handle, "slOpenMPTcp");
79  s->Close = (slCloseProc) dynl_sym_warn(handle, "slCloseMP");
80  s->Kill = (slKillProc) dynl_sym_warn(handle, "slKillMP");
81  s->Read = (slReadProc) dynl_sym_warn(handle, "slReadMP");
82  s->Dump = (slDumpProc) dynl_sym_warn(handle, "slDumpMP");
83  s->GetDump = (slGetDumpProc) dynl_sym_warn(handle, "slGetDumpMP");
84  s->Write = (slWriteProc) dynl_sym_warn(handle, "slWriteMP");
85  s->Status = (slStatusProc) dynl_sym_warn(handle, "slStatusMP");
86
87  if (s->Open == NULL || s->Close == NULL || s->Kill == NULL ||
88      s->Read == NULL || s->Dump == NULL || s->GetDump == NULL ||
89      s->Write == NULL || s->Status == NULL)
90    return NULL;
91
92  s->type="MPtcp";
93  return s;
94}
95
96BatchDoProc slInitMPBatchDo()
97{
98  void* handle = slInitMPSRHandle();
99
100  if (handle == NULL) return NULL;
101  return (BatchDoProc) dynl_sym_warn(handle, "Batch_do");
102}
103#endif
104
105#ifdef HAVE_DBM
106#include "dbm_sl.h"
107
108static void* dbm_so_handle = NULL;
109static void* slInitDBMHandle()
110{
111  if (dbm_so_handle == NULL)
112    dbm_so_handle = dynl_open_binary_warn("dbmsr");
113
114  return dbm_so_handle;
115}
116
117si_link_extension slInitDBMExtension(si_link_extension s)
118{
119  void* handle = slInitDBMHandle();
120
121  if (handle == NULL) return NULL;
122
123  s->Open=(slOpenProc)dynl_sym_warn(handle, "dbOpen");
124  s->Close=(slCloseProc)dynl_sym_warn(handle, "dbClose");
125  s->Kill=(slKillProc)dynl_sym_warn(handle, "dbClose");
126  s->Read=(slReadProc)dynl_sym_warn(handle, "dbRead1");
127  s->Read2=(slRead2Proc)dynl_sym_warn(handle, "dbRead2");
128  s->Write=(slWriteProc)dynl_sym_warn(handle, "dbWrite");
129
130  if (s->Open == NULL || s->Close == NULL || s->Kill == NULL ||
131      s->Read == NULL || s->Read2 == NULL)
132    return NULL;
133
134  s->Status=slStatusAscii;
135  s->type="DBM";
136  return s;
137}
138
139#endif
140#endif
141
Note: See TracBrowser for help on using the repository browser.