source: git/Singular/silink.h @ e6969d

spielwiese
Last change on this file since e6969d was e6969d, checked in by Olaf Bachmann <obachman@…>, 27 years ago
Wed Mar 26 14:02:15 1997 Olaf Bachmann <obachman@ratchwum.mathematik.uni-kl.de (Olaf Bachmann)> * added reference counter to links, updated slKill, slCopy, slInit * various small bug fixes for Batch mode git-svn-id: file:///usr/local/Singular/svn/trunk@78 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/*
7* ABSTRACT
8*/
9/* $Log: not supported by cvs2svn $
10 * Revision 1.1.1.1  1997/03/19  13:18:41  obachman
11 * Imported Singular sources
12 *
13*/
14
15#include "structs.h"
16
17// extension links:
18typedef BOOLEAN    (*slInitProc)(si_link l,si_link_extension s);
19typedef BOOLEAN    (*slOpenReadProc)(si_link l);
20typedef BOOLEAN    (*slOpenWriteProc)(si_link l);
21typedef BOOLEAN    (*slCloseProc)(si_link l);
22typedef leftv      (*slReadProc)(si_link l);
23typedef leftv      (*slRead2Proc)(si_link l,leftv a);
24typedef BOOLEAN    (*slWriteProc)(si_link l,leftv v);
25
26struct s_si_link_extension
27{
28  si_link_extension next;
29  slInitProc       Init;
30  slOpenReadProc   OpenRead;
31  slOpenWriteProc  OpenWrite;
32  slCloseProc      Close;
33  slReadProc       Read;
34  slRead2Proc      Read2;
35  slWriteProc      Write;
36  char             *name;
37  int              index;
38};
39
40struct sip_link
41{
42  si_link_extension m; // methods
43  char *name;
44  char **argv;
45  void *data;
46  int  linkType;
47  int  argc;
48  BITSET flags; /*0: open, 1: read, 2: write, ... */
49  short ref; /* reference counter */
50};
51
52BOOLEAN slExtend(si_link_extension s);
53
54// flags:
55#define SI_LINK_CLOSE   0
56#define SI_LINK_OPEN    1
57#define SI_LINK_READ    2
58#define SI_LINK_WRITE   4
59
60// tests:
61#define SI_LINK_CLOSE_P(l)  (!(l)->flags)
62#define SI_LINK_OPEN_P(l)   ((l)->flags & SI_LINK_OPEN)
63#define SI_LINK_W_OPEN_P(l) ((l)->flags &  SI_LINK_WRITE)
64#define SI_LINK_R_OPEN_P(l) ((l)->flags &  SI_LINK_READ)
65#define SI_LINK_RW_OPEN_P(l) (SI_LINK_W_OPEN_P(l) && SI_LINK_R_OPEN_P(l))
66
67#define SI_LINK_SET_CLOSE_P(l)  ((l)->flags = SI_LINK_CLOSE)
68#define SI_LINK_SET_OPEN_P(l)   ((l)->flags = (l)->flags | SI_LINK_OPEN)
69#define SI_LINK_SET_W_OPEN_P(l) ((l)->flags = (l)->flags | SI_LINK_OPEN | SI_LINK_WRITE)
70#define SI_LINK_SET_R_OPEN_P(l) ((l)->flags = (l)->flags | SI_LINK_OPEN | SI_LINK_READ)
71#define SI_LINK_SET_RW_OPEN_P(l) ((l)->flags = (l)->flags | SI_LINK_OPEN | SI_LINK_READ | SI_LINK_WRITE)
72
73BOOLEAN slOpenWrite(si_link l);
74BOOLEAN slOpenRead(si_link l);
75BOOLEAN slClose(si_link l);
76leftv   slRead(si_link l,leftv a=NULL);
77BOOLEAN slWrite(si_link l, leftv v);
78BOOLEAN slInit(si_link l, char *str);
79void slKill(si_link l);
80void slCleanUp(si_link l);
81void slExtensionInit(si_link_extension s);
82void slStandardInit();
83inline si_link slCopy(si_link l)
84{
85  l->ref++;
86  return l;
87}
88BOOLEAN slInitALink(si_link l,si_link_extension s);
89#ifdef HAVE_MPSR
90void slInitBatchLink(si_link l, int argc, char **argv);
91int  Batch_do(int arrgc, char **argv);
92#endif
93void GetCmdArgs(int *argc, char ***argv, char *str);
94#endif
Note: See TracBrowser for help on using the repository browser.