source: git/Singular/silink.h @ 28e0ac8

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