source: git/Singular/silink.h @ 5480da

spielwiese
Last change on this file since 5480da was 1fc83c0, checked in by Hans Schönemann <hannes@…>, 27 years ago
* hannes: added nExactDiv to numbers (numbers.*, longrat.*) corrected open bug in sing_dbm.cc (could only "r") simplified sing_dbm.cc (many tests already in silink.cc) (sing_dbm.cc, silink.h) added "mod" (as an alias to "%") (iparith.cc) updated singular.doc: div/mod, DBM: links ANSI-conversion in ndbm.cc (added return types, include files) git-svn-id: file:///usr/local/Singular/svn/trunk@614 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 2.6 KB
Line 
1#ifndef SILINK_H
2#define SILINK_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id: silink.h,v 1.8 1997-08-12 17:14:43 Singular Exp $ */
7/*
8* ABSTRACT: general interface to links
9*/
10
11#include "structs.h"
12
13// extension links:
14typedef BOOLEAN    (*slOpenProc)(si_link l, short flag);
15typedef BOOLEAN    (*slWriteProc)(si_link l, leftv lv);
16typedef BOOLEAN    (*slCloseProc)(si_link l);
17typedef leftv      (*slReadProc)(si_link l);
18typedef leftv      (*slRead2Proc)(si_link l, leftv a);
19typedef BOOLEAN    (*slDumpProc)(si_link l);
20typedef BOOLEAN    (*slGetDumpProc)(si_link l);
21typedef char*      (*slStatusProc)(si_link l, char *request);
22
23struct s_si_link_extension
24{
25  si_link_extension next;
26  slOpenProc       Open;
27  slCloseProc      Close;
28  slReadProc       Read;
29  slRead2Proc      Read2;
30  slWriteProc      Write;
31  slDumpProc       Dump;
32  slGetDumpProc    GetDump;
33  slStatusProc     Status;
34  char             *type;
35};
36
37struct sip_link
38{
39  si_link_extension m; // methods
40  char *mode;   
41  char *name;          // used for filename and/or further specs
42  void *data;          // the link itself
43  BITSET flags;        // 0=close open = 1: read = 2: write = 3
44  short ref;           // reference counter
45};
46
47BOOLEAN slExtend(si_link_extension s);
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)
63#define SI_LINK_SET_OPEN_P(l, flag)   ((l)->flags = (l)->flags |SI_LINK_OPEN |flag)
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
68BOOLEAN slOpen(si_link l, short flag);
69BOOLEAN slClose(si_link l);
70leftv   slRead(si_link l,leftv a=NULL);
71BOOLEAN slWrite(si_link l, leftv v);
72BOOLEAN slDump(si_link l);
73BOOLEAN slGetDump(si_link l);
74char* slStatus(si_link l, char *request);
75char* slStatusAscii(si_link l, char* request);
76BOOLEAN slInit(si_link l, char *str);
77void slKill(si_link l);
78void slCleanUp(si_link l);
79void slStandardInit();
80inline si_link slCopy(si_link l)
81{
82  l->ref++;
83  return l;
84}
85
86#endif // SILINK_H
Note: See TracBrowser for help on using the repository browser.