source: git/Singular/slInit_Dynamic.cc @ 634dab0

spielwiese
Last change on this file since 634dab0 was a3bc95e, checked in by Hans Schönemann <hannes@…>, 22 years ago
*hannes: namespaces ->ns git-svn-id: file:///usr/local/Singular/svn/trunk@5651 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • 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: slInit_Dynamic.cc,v 1.2 2001-10-09 16:36:23 Singular Exp $
10 *******************************************************************/
11
12/***************************************************************
13 *
14 * MP link Extension inits
15 *
16 ***************************************************************/
17#include "mod2.h"
18#include "silink.h"
19#include "slInit.h"
20#include "mod_raw.h"
21
22#ifdef HAVE_MPSR
23#include "MP.h"
24#include "mpsr_sl.h"
25
26static void* mpsr_so_handle = NULL;
27typedef void (*voidProc)();
28
29static void* slInitMPSRHandle()
30{
31  if (mpsr_so_handle == NULL)
32  {
33    mpsr_so_handle = dynl_open_binary_warn("mpsr");
34    if (mpsr_so_handle != NULL)
35    {
36      voidProc init_proc = (voidProc)
37        dynl_sym_warn(mpsr_so_handle, "mpsr_Init");
38      if (init_proc != NULL)
39        (*init_proc)();
40      else
41        mpsr_so_handle = NULL;
42    }
43  }
44  return mpsr_so_handle;
45}
46
47si_link_extension slInitMPFileExtension(si_link_extension s)
48{
49  void* handle = slInitMPSRHandle();
50
51  if (handle == NULL) return NULL;
52
53  s->Open = (slOpenProc) dynl_sym_warn(handle, "slOpenMPFile");
54  s->Close = (slCloseProc) dynl_sym_warn(handle, "slCloseMP");
55  s->Kill = (slKillProc) s->Close;
56  s->Read = (slReadProc) dynl_sym_warn(handle, "slReadMP");
57  s->Dump = (slDumpProc) dynl_sym_warn(handle, "slDumpMP");
58  s->GetDump = (slGetDumpProc) dynl_sym_warn(handle, "slGetDumpMP");
59  s->Write = (slWriteProc) dynl_sym_warn(handle, "slWriteMP");
60  s->Status = (slStatusProc) dynl_sym_warn(handle, "slStatusMP");
61  if (s->Open == NULL || s->Close == NULL || s->Kill == NULL ||
62      s->Read == NULL || s->Dump == NULL || s->GetDump == NULL ||
63      s->Write == NULL || s->Status == NULL)
64    return NULL;
65
66  s->type="MPfile";
67  return s;
68}
69
70si_link_extension slInitMPTcpExtension(si_link_extension s)
71{
72  void* handle = slInitMPSRHandle();
73
74  if (handle == NULL) return NULL;
75
76  s->Open = (slOpenProc) dynl_sym_warn(handle, "slOpenMPTcp");
77  s->Close = (slCloseProc) dynl_sym_warn(handle, "slCloseMP");
78  s->Kill = (slKillProc) dynl_sym_warn(handle, "slKillMP");
79  s->Read = (slReadProc) dynl_sym_warn(handle, "slReadMP");
80  s->Dump = (slDumpProc) dynl_sym_warn(handle, "slDumpMP");
81  s->GetDump = (slGetDumpProc) dynl_sym_warn(handle, "slGetDumpMP");
82  s->Write = (slWriteProc) dynl_sym_warn(handle, "slWriteMP");
83  s->Status = (slStatusProc) dynl_sym_warn(handle, "slStatusMP");
84
85  if (s->Open == NULL || s->Close == NULL || s->Kill == NULL ||
86      s->Read == NULL || s->Dump == NULL || s->GetDump == NULL ||
87      s->Write == NULL || s->Status == NULL)
88    return NULL;
89
90  s->type="MPtcp";
91  return s;
92}
93
94BatchDoProc slInitMPBatchDo()
95{
96  void* handle = slInitMPSRHandle();
97
98  if (handle == NULL) return NULL;
99  return (BatchDoProc) dynl_sym_warn(handle, "Batch_do");
100}
101#endif
102
103#ifdef HAVE_DBM
104#include "dbm_sl.h"
105
106static void* dbm_so_handle = NULL;
107static void* slInitDBMHandle()
108{
109  if (dbm_so_handle == NULL)
110    dbm_so_handle = dynl_open_binary_warn("dbmsr");
111
112  return dbm_so_handle;
113}
114
115si_link_extension slInitDBMExtension(si_link_extension s)
116{
117  void* handle = slInitDBMHandle();
118
119  if (handle == NULL) return NULL;
120
121  s->Open=(slOpenProc)dynl_sym_warn(handle, "dbOpen");
122  s->Close=(slCloseProc)dynl_sym_warn(handle, "dbClose");
123  s->Kill=(slKillProc)dynl_sym_warn(handle, "dbClose");
124  s->Read=(slReadProc)dynl_sym_warn(handle, "dbRead1");
125  s->Read2=(slRead2Proc)dynl_sym_warn(handle, "dbRead2");
126  s->Write=(slWriteProc)dynl_sym_warn(handle, "dbWrite");
127
128  if (s->Open == NULL || s->Close == NULL || s->Kill == NULL ||
129      s->Read == NULL || s->Read2 == NULL)
130    return NULL;
131
132  s->Status=slStatusAscii;
133  s->type="DBM";
134  return s;
135}
136
137#endif
138
Note: See TracBrowser for help on using the repository browser.