My Project  UNKNOWN_GIT_VERSION
silink.h
Go to the documentation of this file.
1 #ifndef SILINK_H
2 #define SILINK_H
3 /****************************************
4 * Computer Algebra System SINGULAR *
5 ****************************************/
6 /*
7 * ABSTRACT: general interface to links
8 */
9 
10 #include "singularconfig.h"
11 #include "kernel/structs.h"
12 
14 #include "Singular/lists.h"
15 #include "Singular/attrib.h"
16 
17 struct sip_link;
18 typedef struct sip_link ip_link;
19 typedef ip_link * si_link;
20 
21 
22 // extension links:
23 typedef BOOLEAN (*slOpenProc)(si_link l, short flag, leftv h);
24 typedef BOOLEAN (*slWriteProc)(si_link l, leftv lv);
28 typedef leftv (*slReadProc)(si_link l);
29 typedef leftv (*slRead2Proc)(si_link l, leftv a);
32 typedef const char* (*slStatusProc)(si_link l, const char *request);
33 typedef BOOLEAN (*slSetRingProc)(si_link l, ring r, BOOLEAN send);
34 
36 {
37  si_link_extension next;
49  const char *type;
50 };
51 
52 struct sip_link
53 {
54  si_link_extension m; // methods
55  char *mode;
56  char *name; // used for filename and/or further specs
57  void *data; // the link itself
58  BITSET flags; // 0=close open = 1: read = 2: write = 3
59  short ref; // reference counter
60 };
61 
62 // flags:
63 #define SI_LINK_CLOSE 0
64 #define SI_LINK_OPEN 1
65 #define SI_LINK_READ 2
66 #define SI_LINK_WRITE 4
67 
68 // tests:
69 #define SI_LINK_CLOSE_P(l) (!(l)->flags)
70 #define SI_LINK_OPEN_P(l) ((l)->flags & SI_LINK_OPEN)
71 #define SI_LINK_W_OPEN_P(l) ((l)->flags & SI_LINK_WRITE)
72 #define SI_LINK_R_OPEN_P(l) ((l)->flags & SI_LINK_READ)
73 #define SI_LINK_RW_OPEN_P(l) (SI_LINK_W_OPEN_P(l) && SI_LINK_R_OPEN_P(l))
74 
75 #define SI_LINK_SET_CLOSE_P(l) ((l)->flags = SI_LINK_CLOSE)
76 #define SI_LINK_SET_OPEN_P(l, flag) ((l)->flags |= SI_LINK_OPEN |flag)
77 #define SI_LINK_SET_W_OPEN_P(l) ((l)->flags |= (SI_LINK_OPEN | SI_LINK_WRITE))
78 #define SI_LINK_SET_R_OPEN_P(l) ((l)->flags |= (SI_LINK_OPEN | SI_LINK_READ))
79 #define SI_LINK_SET_RW_OPEN_P(l) ((l)->flags |= (SI_LINK_OPEN | SI_LINK_READ | SI_LINK_WRITE))
80 
81 BOOLEAN slOpen(si_link l, short flag, leftv h);
88 const char* slStatus(si_link l, const char *request);
89 BOOLEAN slInit(si_link l, char *str);
90 void slKill(si_link l);
91 void slCleanUp(si_link l);
92 void slStandardInit();
93 static inline si_link slCopy(si_link l)
94 {
95  l->ref++;
96  return l;
97 }
98 
99 #include "omalloc/omalloc.h"
100 static inline char* slString(si_link l)
101 {
102  if (l->name != NULL)
103  {
104  return omStrDup(l->name);
105  }
106  else
107  {
108  return omStrDup("");
109  }
110 }
111 
113 extern omBin sip_link_bin;
114 extern omBin ip_link_bin;
115 
116 int slStatusSsiL(lists L, int timeout);
117 int ssiBatch(const char *host, const char * port);
118 
119 
120 typedef struct
121 {
124  void * next;
125 } link_struct;
126 
128 
129 extern link_list ssiToBeClosed;
130 extern volatile BOOLEAN ssiToBeClosed_inactive;
131 #endif // SILINK_H
Class used for (list of) interpreter objects.
Definition: subexpr.h:82
omBin_t * omBin
Definition: omStructs.h:12
Definition: lists.h:22
sleftv * leftv
Definition: structs.h:60
#define BITSET
Definition: structs.h:18
const Variable & v
< [in] a sqrfree bivariate poly
Definition: facBivar.h:37
#define NULL
Definition: omList.c:10
static Poly * h
Definition: janet.cc:972
int BOOLEAN
Definition: auxiliary.h:85
int l
Definition: cfEzgcd.cc:93
#define omStrDup(s)
Definition: omAllocDecl.h:263