My Project
Loading...
Searching...
No Matches
Functions | Variables
silink.cc File Reference
#include "kernel/mod2.h"
#include "misc/options.h"
#include "misc/intvec.h"
#include "reporter/si_signals.h"
#include "coeffs/numbers.h"
#include "polys/matpol.h"
#include "polys/monomials/ring.h"
#include "kernel/ideals.h"
#include "Singular/lists.h"
#include "Singular/cntrlc.h"
#include "Singular/links/ssiLink.h"
#include "Singular/links/pipeLink.h"
#include "Singular/tok.h"
#include "Singular/subexpr.h"
#include "Singular/ipid.h"
#include "Singular/links/silink.h"
#include "Singular/links/slInit.h"
#include "Singular/ipshell.h"
#include "feOpt.h"

Go to the source code of this file.

Functions

static si_link_extension slTypeInit (si_link_extension s, const char *type)
 
BOOLEAN slInit (si_link l, char *istr)
 
void slCleanUp (si_link l)
 
void slKill (si_link l)
 
const char * slStatus (si_link l, const char *request)
 
BOOLEAN slSetRingDummy (si_link, ring r, BOOLEAN)
 
BOOLEAN slOpen (si_link l, short flag, leftv h)
 
BOOLEAN slPrepClose (si_link l)
 
BOOLEAN slClose (si_link l)
 
leftv slRead (si_link l, leftv a)
 
BOOLEAN slWrite (si_link l, leftv v)
 
BOOLEAN slDump (si_link l)
 
BOOLEAN slGetDump (si_link l)
 

Variables

VAR omBin s_si_link_extension_bin = omGetSpecBin(sizeof(s_si_link_extension))
 
VAR omBin sip_link_bin = omGetSpecBin(sizeof(sip_link))
 
VAR omBin ip_link_bin = omGetSpecBin(sizeof(ip_link))
 
GLOBAL_VAR BOOLEAN FE_OPT_NO_SHELL_FLAG
 
VAR si_link_extension si_link_root =NULL
 

Function Documentation

◆ slCleanUp()

void slCleanUp ( si_link  l)

Definition at line 127 of file silink.cc.

128{
130 (l->ref)--;
131 if (l->ref == 0)
132 {
133 if (SI_LINK_OPEN_P(l))
134 {
135 if (l->m->Close != NULL) l->m->Close(l);
136 }
137 if ((l->data != NULL) && (l->m->Kill != NULL)) l->m->Kill(l);
138 omFree((ADDRESS)l->name);
139 omFree((ADDRESS)l->mode);
140 memset((void *) l, 0, sizeof(ip_link));
141 }
144}
void * ADDRESS
Definition: auxiliary.h:119
int l
Definition: cfEzgcd.cc:100
VAR volatile BOOLEAN do_shutdown
Definition: cntrlc.cc:74
VAR volatile int defer_shutdown
Definition: cntrlc.cc:75
void m2_end(int i)
Definition: misc_ip.cc:1097
#define omFree(addr)
Definition: omAllocDecl.h:261
#define NULL
Definition: omList.c:12

◆ slClose()

BOOLEAN slClose ( si_link  l)

Definition at line 242 of file silink.cc.

243{
244
245 if(! SI_LINK_OPEN_P(l))
246 return FALSE;
247
249 BOOLEAN res = TRUE;
250 if (l->m->Close != NULL)
251 {
252 res = l->m->Close(l);
253 if (res)
254 Werror("close: Error for link of type: %s, mode: %s, name: %s",
255 l->m->type, l->mode, l->name);
256 }
260 return res;
261}
int BOOLEAN
Definition: auxiliary.h:87
#define TRUE
Definition: auxiliary.h:100
#define FALSE
Definition: auxiliary.h:96
CanonicalForm res
Definition: facAbsFact.cc:60
void Werror(const char *fmt,...)
Definition: reporter.cc:189

◆ slDump()

BOOLEAN slDump ( si_link  l)

Definition at line 346 of file silink.cc.

347{
348 BOOLEAN res;
349
350 if(! SI_LINK_W_OPEN_P(l)) // open w ?
351 {
352 if (slOpen(l, SI_LINK_WRITE,NULL)) return TRUE;
353 }
354
356 { // now open w
357 if (l->m->Dump != NULL)
358 res = l->m->Dump(l);
359 else
360 res = TRUE;
361
362 if (res)
363 Werror("dump: Error for link of type %s, mode: %s, name: %s",
364 l->m->type, l->mode, l->name);
365 if (!SI_LINK_R_OPEN_P(l)) slClose(l); // do not close r/w links
366 return res;
367 }
368 else
369 {
370 Werror("dump: Error to open link of type %s, mode: %s, name: %s for writing",
371 l->m->type, l->mode, l->name);
372 return TRUE;
373 }
374}

◆ slGetDump()

BOOLEAN slGetDump ( si_link  l)

Definition at line 376 of file silink.cc.

377{
378 BOOLEAN res;
379
380 if(! SI_LINK_R_OPEN_P(l)) // open r ?
381 {
382 if (slOpen(l, SI_LINK_READ,NULL)) return TRUE;
383 }
384
386 { // now open r
387 if (l->m->GetDump != NULL)
388 res = l->m->GetDump(l);
389 else
390 res = TRUE;
391
392 if (res)
393 Werror("getdump: Error for link of type %s, mode: %s, name: %s",
394 l->m->type, l->mode, l->name);
395 //res|=slClose(l);
396 return res;
397 }
398 else
399 {
400 Werror("dump: Error open link of type %s, mode: %s, name: %s for reading",
401 l->m->type, l->mode, l->name);
402 return TRUE;
403 }
404}

◆ slInit()

BOOLEAN slInit ( si_link  l,
char *  istr 
)

Definition at line 48 of file silink.cc.

49{
50 char *type = NULL, *mode = NULL, *name = NULL;
51 int i = 0, j;
52
53 // set mode and type
54 if (istr != NULL)
55 {
56 // find the first colon char in istr
57 i = 0;
58 while (istr[i] != ':' && istr[i] != '\0') i++;
59 if (istr[i] == ':')
60 {
61 // if found, set type
62 if (i > 0)
63 {
64 istr[i] = '\0';
65 type = omStrDup(istr);
66 istr[i] = ':';
67 }
68 // and check for mode
69 j = ++i;
70 while (istr[j] != ' ' && istr[j] != '\0') j++;
71 if (j > i)
72 {
73 mode = omStrDup(&(istr[i]));
74 mode[j - i] = '\0';
75 }
76 // and for the name
77 while (istr[j] == ' '&& istr[j] != '\0') j++;
78 if (istr[j] != '\0') name = omStrDup(&(istr[j]));
79 }
80 else // no colon find -- string is entire name
81 {
82 j=0;
83 while (istr[j] == ' '&& istr[j] != '\0') j++;
84 if (istr[j] != '\0') name = omStrDup(&(istr[j]));
85 }
86 }
87
88 // set the link extension
89 if (type != NULL)
90 {
91 si_link_extension s = si_link_root;
92 si_link_extension prev = s;
93
94 while (strcmp(s->type, type) != 0)
95 {
96 if (s->next == NULL)
97 {
98 prev = s;
99 s = NULL;
100 break;
101 }
102 else
103 {
104 s = s->next;
105 }
106 }
107
108 if (s != NULL)
109 l->m = s;
110 else
111 {
112 l->m = slTypeInit(prev, type);
113 }
114 omFree(type);
115 }
116 else
117 l->m = si_link_root;
118
119 if (l->m == NULL) return TRUE;
120
121 l->name = (name != NULL ? name : omStrDup(""));
122 l->mode = (mode != NULL ? mode : omStrDup(""));
123 l->ref = 1;
124 return FALSE;
125}
int i
Definition: cfEzgcd.cc:132
const CanonicalForm int s
Definition: facAbsFact.cc:51
int j
Definition: facHensel.cc:110
#define omStrDup(s)
Definition: omAllocDecl.h:263
int name
New type name for int.
Definition: templateForC.h:21

◆ slKill()

void slKill ( si_link  l)

Definition at line 146 of file silink.cc.

147{
149 slCleanUp(l);
150 if ((l!=NULL) &&(l->ref == 0))
154}
#define omFreeBin(addr, bin)
Definition: omAllocDecl.h:259

◆ slOpen()

BOOLEAN slOpen ( si_link  l,
short  flag,
leftv  h 
)

Definition at line 194 of file silink.cc.

195{
196 BOOLEAN res = TRUE;
197 if (l!=NULL)
198 {
199
200 if (l->m == NULL) slInit(l, ((char*)""));
201
202 if (FE_OPT_NO_SHELL_FLAG) {WerrorS("no links allowed");return TRUE;}
203
204 const char *c="_";;
205 if (h!=NULL) c=h->Name();
206
207 if (SI_LINK_OPEN_P(l))
208 {
209 Warn("open: link of type: %s, mode: %s, name: %s is already open",
210 l->m->type, l->mode, l->name);
211 return FALSE;
212 }
213 else if (l->m->Open != NULL)
214 {
215 res = l->m->Open(l, flag, h);
216 if (res)
217 Werror("open: Error for link %s of type: %s, mode: %s, name: %s",
218 c, l->m->type, l->mode, l->name);
219 }
220 if (l->m->SetRing==NULL) l->m->SetRing=slSetRingDummy;
221 }
222 return res;
223}
#define Warn
Definition: emacs.cc:77
void WerrorS(const char *s)
Definition: feFopen.cc:24
STATIC_VAR Poly * h
Definition: janet.cc:971

◆ slPrepClose()

BOOLEAN slPrepClose ( si_link  l)

Definition at line 225 of file silink.cc.

226{
227
228 if(! SI_LINK_OPEN_P(l))
229 return FALSE;
230
231 BOOLEAN res = TRUE;
232 if (l->m->PrepClose != NULL)
233 {
234 res = l->m->PrepClose(l);
235 if (res)
236 Werror("close: Error for link of type: %s, mode: %s, name: %s",
237 l->m->type, l->mode, l->name);
238 }
239 return res;
240}

◆ slRead()

leftv slRead ( si_link  l,
leftv  a 
)

Definition at line 263 of file silink.cc.

264{
265 leftv v = NULL;
266 if( ! SI_LINK_R_OPEN_P(l)) // open r ?
267 {
268#ifdef HAVE_DBM
269#ifdef USE_GDBM
270 if (! SI_LINK_CLOSE_P(l))
271 {
272 if (slClose(l)) return NULL;
273 }
274#endif
275#endif
276 if (slOpen(l, SI_LINK_READ,NULL)) return NULL;
277 }
278
279 if (SI_LINK_R_OPEN_P(l))
280 { // open r
281 if (a==NULL)
282 {
283 if (l->m->Read != NULL) v = l->m->Read(l);
284 }
285 else
286 {
287 if (l->m->Read2 != NULL) v = l->m->Read2(l,a);
288 }
289 }
290 else
291 {
292 Werror("read: Error to open link of type %s, mode: %s, name: %s for reading",
293 l->m->type, l->mode, l->name);
294 return NULL;
295 }
296
297 // here comes the eval:
298 if (v != NULL)
299 {
300 if (v->Eval() && !errorreported)
301 WerrorS("eval: failed");
302 }
303 else
304 Werror("read: Error for link of type %s, mode: %s, name: %s",
305 l->m->type, l->mode, l->name);
306 return v;
307}
Class used for (list of) interpreter objects.
Definition: subexpr.h:83
const Variable & v
< [in] a sqrfree bivariate poly
Definition: facBivar.h:39
VAR short errorreported
Definition: feFopen.cc:23

◆ slSetRingDummy()

BOOLEAN slSetRingDummy ( si_link  ,
ring  r,
BOOLEAN   
)

Definition at line 189 of file silink.cc.

190{
191 if (currRing!=r) rChangeCurrRing(r);
192 return FALSE;
193}
void rChangeCurrRing(ring r)
Definition: polys.cc:15
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:13

◆ slStatus()

const char * slStatus ( si_link  l,
const char *  request 
)

Definition at line 156 of file silink.cc.

157{
158 if (l == NULL) return "empty link";
159 else if (l->m == NULL) return "unknown link type";
160 else if (strcmp(request, "type") == 0) return l->m->type;
161 else if (strcmp(request, "mode") == 0) return l->mode;
162 else if (strcmp(request, "name") == 0) return l->name;
163 else if (strcmp(request, "exists") ==0)
164 {
165 struct stat buf;
166 if (si_lstat(l->name,&buf)==0) return "yes";
167 else return "no";
168 }
169 else if (strcmp(request, "open") == 0)
170 {
171 if (SI_LINK_OPEN_P(l)) return "yes";
172 else return "no";
173 }
174 else if (strcmp(request, "openread") == 0)
175 {
176 if (SI_LINK_R_OPEN_P(l)) return "yes";
177 else return "no";
178 }
179 else if (strcmp(request, "openwrite") == 0)
180 {
181 if (SI_LINK_W_OPEN_P(l)) return "yes";
182 else return "no";
183 }
184 else if (l->m->Status == NULL) return "unknown status request";
185 else return l->m->Status(l, request);
186}
int status int void * buf
Definition: si_signals.h:59

◆ slTypeInit()

static si_link_extension slTypeInit ( si_link_extension  s,
const char *  type 
)
static

Definition at line 409 of file silink.cc.

410{
411 assume(s != NULL);
412 s->next = NULL;
413 si_link_extension ns = (si_link_extension)omAlloc0Bin(s_si_link_extension_bin);
414
415 if (0)
416 ; // dummy
417#ifdef HAVE_DBM
418 else if (strcmp(type, "DBM") == 0)
419 s->next = slInitDBMExtension(ns);
420#endif
421#if 1
422 else if (strcmp(type, "ssi") == 0)
423 s->next = slInitSsiExtension(ns);
424#endif
425#if 1
426 else if (strcmp(type, "|") == 0)
427 s->next = slInitPipeExtension(ns);
428#endif
429 else
430 {
431 Warn("Found unknown link type: %s", type);
432 Warn("Use default link type: %s", si_link_root->type);
434 return si_link_root;
435 }
436
437 if (s->next == NULL)
438 {
439 Werror("Can not initialize link type %s", type);
441 return NULL;
442 }
443 return s->next;
444}
#define assume(x)
Definition: mod2.h:389
#define omAlloc0Bin(bin)
Definition: omAllocDecl.h:206
si_link_extension slInitDBMExtension(si_link_extension s)

◆ slWrite()

BOOLEAN slWrite ( si_link  l,
leftv  v 
)

Definition at line 309 of file silink.cc.

310{
311 BOOLEAN res;
312
313 if(! SI_LINK_W_OPEN_P(l)) // open w ?
314 {
315#ifdef HAVE_DBM
316#ifdef USE_GDBM
317 if (! SI_LINK_CLOSE_P(l))
318 {
319 if (slClose(l)) return TRUE;
320 }
321#endif
322#endif
323 if (slOpen(l, SI_LINK_WRITE,NULL)) return TRUE;
324 }
325
326 if (SI_LINK_W_OPEN_P(l))
327 { // now open w
328 if (l->m->Write != NULL)
329 res = l->m->Write(l,v);
330 else
331 res = TRUE;
332
333 if (res)
334 Werror("write: Error for link of type %s, mode: %s, name: %s",
335 l->m->type, l->mode, l->name);
336 return res;
337 }
338 else
339 {
340 Werror("write: Error to open link of type %s, mode: %s, name: %s for writing",
341 l->m->type, l->mode, l->name);
342 return TRUE;
343 }
344}

Variable Documentation

◆ FE_OPT_NO_SHELL_FLAG

GLOBAL_VAR BOOLEAN FE_OPT_NO_SHELL_FLAG

Definition at line 42 of file silink.cc.

◆ ip_link_bin

VAR omBin ip_link_bin = omGetSpecBin(sizeof(ip_link))

Definition at line 41 of file silink.cc.

◆ s_si_link_extension_bin

VAR omBin s_si_link_extension_bin = omGetSpecBin(sizeof(s_si_link_extension))

Definition at line 39 of file silink.cc.

◆ si_link_root

VAR si_link_extension si_link_root =NULL

Definition at line 46 of file silink.cc.

◆ sip_link_bin

VAR omBin sip_link_bin = omGetSpecBin(sizeof(sip_link))

Definition at line 40 of file silink.cc.