source: git/Singular/silink.h @ d754b7

spielwiese
Last change on this file since d754b7 was d754b7, checked in by Olaf Bachmann <obachman@…>, 27 years ago
Reimplemented link structures. Cleaned it up. Introduced assignment link = link. Fixed some bugs in asciidump. Made proc's work for MP links. git-svn-id: file:///usr/local/Singular/svn/trunk@137 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 3.3 KB
Line 
1#ifndef SILINK_H
2#define SILINK_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id: silink.h,v 1.6 1997-04-08 08:43:29 obachman Exp $ */
7/*
8* ABSTRACT
9*/
10/* $Log: not supported by cvs2svn $
11 * Revision 1.4  1997/03/28  21:44:37  obachman
12 * Fri Mar 28 14:12:05 1997  Olaf Bachmann
13 * <obachman@ratchwum.mathematik.uni-kl.de (Olaf Bachmann)>
14 *
15 *      * Added routines dump(link) and getdump(link) for ascii and MP
16 *        links
17 *
18 *      * ipconv.cc (dConvertTypes): added int->module conversion so that
19 *        'module m = 0' works
20 *
21 *      * iparith.cc (jjVAR1): added LINK_CMD to list of typeof(...)
22 *
23 * Revision 1.3  1997/03/26  14:58:03  obachman
24 * Wed Mar 26 14:02:15 1997  Olaf Bachmann
25 * <obachman@ratchwum.mathematik.uni-kl.de (Olaf Bachmann)>
26 *
27 *      * added reference counter to links, updated slKill, slCopy, slInit
28 *      * various small bug fixes for Batch mode
29 *
30 * Revision 1.1.1.1  1997/03/19  13:18:41  obachman
31 * Imported Singular sources
32 *
33*/
34
35#include "structs.h"
36
37// extension links:
38typedef BOOLEAN    (*slOpenProc)(si_link l, short flag);
39typedef BOOLEAN    (*slWriteProc)(si_link l, leftv lv);
40typedef BOOLEAN    (*slCloseProc)(si_link l);
41typedef leftv      (*slReadProc)(si_link l);
42typedef leftv      (*slRead2Proc)(si_link l, leftv a);
43typedef BOOLEAN    (*slDumpProc)(si_link l);
44typedef BOOLEAN    (*slGetDumpProc)(si_link l);
45typedef char*      (*slStatusProc)(si_link l, char *request);
46
47struct s_si_link_extension
48{
49  si_link_extension next;
50  slOpenProc       Open;
51  slCloseProc      Close;
52  slReadProc       Read;
53  slRead2Proc      Read2;
54  slWriteProc      Write;
55  slDumpProc       Dump;
56  slGetDumpProc    GetDump;
57  slStatusProc     Status;
58  char             *type;
59};
60
61struct sip_link
62{
63  si_link_extension m; // methods
64  char *mode;   
65  char *name;          // used for filename and/or further specs
66  void *data;          // the link itself
67  BITSET flags;        // 0=close open = 1: read = 2: write = 3
68  short ref;           // reference counter
69};
70
71BOOLEAN slExtend(si_link_extension s);
72
73// flags:
74#define SI_LINK_CLOSE   0
75#define SI_LINK_OPEN    1
76#define SI_LINK_READ    2
77#define SI_LINK_WRITE   4
78
79// tests:
80#define SI_LINK_CLOSE_P(l)  (!(l)->flags)
81#define SI_LINK_OPEN_P(l)   ((l)->flags & SI_LINK_OPEN)
82#define SI_LINK_W_OPEN_P(l) ((l)->flags &  SI_LINK_WRITE)
83#define SI_LINK_R_OPEN_P(l) ((l)->flags &  SI_LINK_READ)
84#define SI_LINK_RW_OPEN_P(l) (SI_LINK_W_OPEN_P(l) && SI_LINK_R_OPEN_P(l))
85
86#define SI_LINK_SET_CLOSE_P(l)  ((l)->flags = SI_LINK_CLOSE)
87#define SI_LINK_SET_OPEN_P(l, flag)   ((l)->flags = (l)->flags |SI_LINK_OPEN |flag)
88#define SI_LINK_SET_W_OPEN_P(l) ((l)->flags = (l)->flags | SI_LINK_OPEN | SI_LINK_WRITE)
89#define SI_LINK_SET_R_OPEN_P(l) ((l)->flags = (l)->flags | SI_LINK_OPEN | SI_LINK_READ)
90#define SI_LINK_SET_RW_OPEN_P(l) ((l)->flags = (l)->flags | SI_LINK_OPEN | SI_LINK_READ | SI_LINK_WRITE)
91
92BOOLEAN slOpen(si_link l, short flag);
93BOOLEAN slClose(si_link l);
94leftv   slRead(si_link l,leftv a=NULL);
95BOOLEAN slWrite(si_link l, leftv v);
96BOOLEAN slDump(si_link l);
97BOOLEAN slGetDump(si_link l);
98char* slStatus(si_link l, char *request);
99BOOLEAN slInit(si_link l, char *str);
100void slKill(si_link l);
101void slCleanUp(si_link l);
102void slStandardInit();
103inline si_link slCopy(si_link l)
104{
105  l->ref++;
106  return l;
107}
108
109#endif // SILINK_H
Note: See TracBrowser for help on using the repository browser.