source: git/Singular/silink.h @ 7626c5f

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