-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsysdata.cpp
More file actions
64 lines (52 loc) · 1.81 KB
/
sysdata.cpp
File metadata and controls
64 lines (52 loc) · 1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
IL : Intlog Language
Object Oriented Prolog Project
Copyright (C) 1992-2021 - Ing. Capelli Carlo
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "defsys.h"
#include "parsemsg.h"
#include "eng.h"
#include "term.h"
/////// SYSDATA ////////
IAFX_API ostream& operator<<(ostream& s, SysData& d) {
s << d.m_key.id << '/'; d.save(s) << ':';
return s;
}
IAFX_API istream& operator>>(istream& s, SysData*& d) {
char k[20], c;
if (s.get(k, sizeof(k), '/') >> c && c == '/') {
SysData::rtinfo *p = SysData::reglist;
for ( ; p; p = p->link)
if (!strcmp(k, p->id)) {
d = p->build();
d->load(s) >> c;
if (c != ':')
GetEngines()->ErrMsg(INVALID_SERIAL_DATA);
break;
}
if (!p)
GetEngines()->ErrMsg(SERIAL_FMT_NOT_FOUND, k);
}
return s;
}
SysData::rtinfo *SysData::reglist;
SysData::SysData(rtinfo &key)
: m_key(key) {
for (rtinfo *p = reglist; p; p = p->link)
if (p->id == key.id)
return;
// chain type descriptor
key.link = reglist;
reglist = &key;
}