source: git/Singular/links/silink.h @ 6b288b

spielwiese
Last change on this file since 6b288b was b60bfe, checked in by Hans Schoenemann <hannes@…>, 11 years ago
fix: ssi/signal stuff from master
  • Property mode set to 100644
File size: 3.4 KB
Line 
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 <misc/auxiliary.h>
11#include <kernel/structs.h>
12
13#include <Singular/links/sing_dbm.h>
14#include <Singular/lists.h>
15#include <Singular/attrib.h>
16
17typedef struct sip_link    ip_link;
18typedef ip_link *          si_link;
19
20
21// extension links:
22typedef BOOLEAN    (*slOpenProc)(si_link l, short flag, leftv h);
23typedef BOOLEAN    (*slWriteProc)(si_link l, leftv lv);
24typedef BOOLEAN    (*slCloseProc)(si_link l);
25typedef BOOLEAN    (*slPrepCloseProc)(si_link l);
26typedef BOOLEAN    (*slKillProc)(si_link l);
27typedef leftv      (*slReadProc)(si_link l);
28typedef leftv      (*slRead2Proc)(si_link l, leftv a);
29typedef BOOLEAN    (*slDumpProc)(si_link l);
30typedef BOOLEAN    (*slGetDumpProc)(si_link l);
31typedef const char* (*slStatusProc)(si_link l, const char *request);
32
33struct s_si_link_extension
34{
35  si_link_extension next;
36  slOpenProc       Open;
37  slCloseProc      Close;
38  slPrepCloseProc  PrepClose;
39  slKillProc       Kill;
40  slReadProc       Read;
41  slRead2Proc      Read2;
42  slWriteProc      Write;
43  slDumpProc       Dump;
44  slGetDumpProc    GetDump;
45  slStatusProc     Status;
46  const char       *type;
47};
48
49struct sip_link
50{
51  si_link_extension m; // methods
52  char *mode;
53  char *name;          // used for filename and/or further specs
54  void *data;          // the link itself
55  BITSET flags;        // 0=close open = 1: read = 2: write = 3
56  short ref;           // reference counter
57};
58
59// flags:
60#define SI_LINK_CLOSE   0
61#define SI_LINK_OPEN    1
62#define SI_LINK_READ    2
63#define SI_LINK_WRITE   4
64
65// tests:
66#define SI_LINK_CLOSE_P(l)  (!(l)->flags)
67#define SI_LINK_OPEN_P(l)   ((l)->flags & SI_LINK_OPEN)
68#define SI_LINK_W_OPEN_P(l) ((l)->flags &  SI_LINK_WRITE)
69#define SI_LINK_R_OPEN_P(l) ((l)->flags &  SI_LINK_READ)
70#define SI_LINK_RW_OPEN_P(l) (SI_LINK_W_OPEN_P(l) && SI_LINK_R_OPEN_P(l))
71
72#define SI_LINK_SET_CLOSE_P(l)  ((l)->flags = SI_LINK_CLOSE)
73#define SI_LINK_SET_OPEN_P(l, flag)   ((l)->flags |= SI_LINK_OPEN |flag)
74#define SI_LINK_SET_W_OPEN_P(l) ((l)->flags |= (SI_LINK_OPEN | SI_LINK_WRITE))
75#define SI_LINK_SET_R_OPEN_P(l) ((l)->flags |= (SI_LINK_OPEN | SI_LINK_READ))
76#define SI_LINK_SET_RW_OPEN_P(l) ((l)->flags |= (SI_LINK_OPEN | SI_LINK_READ | SI_LINK_WRITE))
77
78BOOLEAN slOpen(si_link l, short flag, leftv h);
79BOOLEAN slClose(si_link l);
80BOOLEAN slPrepClose(si_link l);
81leftv   slRead(si_link l,leftv a=NULL);
82BOOLEAN slWrite(si_link l, leftv v);
83BOOLEAN slDump(si_link l);
84BOOLEAN slGetDump(si_link l);
85const char* slStatus(si_link l, const char *request);
86BOOLEAN slInit(si_link l, char *str);
87void slKill(si_link l);
88void slCleanUp(si_link l);
89void slStandardInit();
90inline si_link slCopy(si_link l)
91{
92  l->ref++;
93  return l;
94}
95
96#include <omalloc/omalloc.h>
97inline char* slString(si_link l)
98{
99  if (l->name != NULL)
100  {
101    return omStrDup(l->name);
102  }
103  else
104  {
105    return omStrDup("");
106  }
107}
108
109extern omBin s_si_link_extension_bin;
110extern omBin sip_link_bin;
111extern omBin ip_link_bin;
112
113int slStatusSsiL(lists L, int timeout);
114int ssiBatch(const char *host, const char * port);
115
116
117typedef struct
118{
119  leftv u;
120  si_link l;
121  void * next;
122} link_struct;
123
124typedef link_struct* link_list;
125
126extern link_list ssiToBeClosed;
127extern volatile BOOLEAN ssiToBeClosed_inactive;
128#endif // SILINK_H
Note: See TracBrowser for help on using the repository browser.