summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars-Dominik Braun <lars@6xq.net>2017-01-20 14:14:12 +0100
committerLars-Dominik Braun <lars@6xq.net>2017-01-20 14:14:12 +0100
commitc7befe173ed2b0f5fd82228fa45c7a105ac44818 (patch)
tree85bd7c444d5e4ac8d4d53e12f1c64fa9170c72dd
parent0f553b9a915eaf4a88b81631c7e6bcb635185c64 (diff)
downloadeumel-c7befe173ed2b0f5fd82228fa45c7a105ac44818.tar.gz
eumel-c7befe173ed2b0f5fd82228fa45c7a105ac44818.tar.bz2
eumel-c7befe173ed2b0f5fd82228fa45c7a105ac44818.zip
Auto-generate software list
-rw-r--r--index.ttl443
-rw-r--r--popularity.rst2
-rw-r--r--software.rst44
-rwxr-xr-xtools/formatSoftware.py123
4 files changed, 572 insertions, 40 deletions
diff --git a/index.ttl b/index.ttl
index 536cd6f..569f68f 100644
--- a/index.ttl
+++ b/index.ttl
@@ -2162,9 +2162,19 @@ _:org_acm a s:Organization ;
_:org_vieweg_teubner a s:Organization ;
s:name "Vieweg+Teubner" .
-_:org_gmd a s:Organization ;
+_:org_gmd
+ a s:Organization ;
s:name "Gesellschaft für Mathematik und Datenverarbeitung mbH" ;
- s:alternateName "GMD" .
+ s:alternateName "GMD" ;
+ s:address [
+ a s:PostalAddress ;
+ s:postOfficeBoxNumber "1240" ;
+ #s:addressLocality "Schloß Birlinghoven" ;
+ s:addressCountry "DE" ;
+ s:postalCode "5205" ;
+ s:addressLocality "Sankt Augustin 1" ;
+ ]
+ .
_:org_unibi
a s:EducationalOrganization ;
@@ -2291,6 +2301,28 @@ _:com_webidata
s:telephone "06 21/4 70 06-0" ;
s:name "Webidata Softwareentwicklung GmbH" .
+_:com_advodat
+ a s:Corporation ;
+ s:address [
+ a s:PostalAddress ;
+ s:addressCountry "DE" ;
+ s:addressLocality "München" ;
+ s:postalCode "8000" ;
+ s:streetAddress "Arabellastraße 15" ] ;
+ s:name "Advodat GmbH" ;
+ .
+
+_:com_modsoft
+ a s:Corporation ;
+ s:address [
+ a s:PostalAddress ;
+ s:addressCountry "DE" ;
+ s:addressLocality "Bonn 1" ;
+ s:postalCode "5300" ;
+ s:streetAddress "Bonngasse 4–6" ] ;
+ s:name "Modsoft – Organisation für Software und Computer-Anwendung GmbH" ;
+ .
+
##############
### People ###
##############
@@ -2530,3 +2562,410 @@ _:person_kleine
s:givenName "Karl" ;
.
+################
+### Software ###
+################
+
+<#eumel17>
+ a s:SoftwareApplication ;
+ s:name "EUMEL" ;
+ s:softwareVersion "1.7" ;
+ s:datePublished "1984" ;
+ s:offers _:offer_eumelmulti , _:offer_eumelsingle, _:offer_eumelpd ;
+ s:author _:org_gmd ;
+ .
+
+<#eumel18>
+ a s:SoftwareApplication ;
+ s:name "EUMEL" ;
+ s:softwareVersion "1.8" ;
+ s:datePublished "1986-10" ;
+ s:offers _:offer_eumelmulti , _:offer_eumelsingle ;
+ s:author _:org_gmd ;
+ .
+
+_:offer_eumelmulti
+ a s:Offer ;
+ s:name "Multi-User-Version" ;
+ s:priceSpecification [
+ a s:UnitPriceSpecification ;
+ s:price "750" ;
+ s:priceCurrency "DEM" ;
+ s:valueAddedTaxIncluded "False" ;
+ ] ;
+ s:validFrom "1985-11-08" ; # vertriebsinfos
+ s:validThrough "1987" ; # seyfert87
+ s:offeredBy _:org_gmd ;
+ .
+
+_:offer_eumelsingle
+ a s:Offer ;
+ s:name "Single-User-Version" ;
+ s:priceSpecification [
+ a s:UnitPriceSpecification ;
+ s:price "250" ;
+ s:priceCurrency "DEM" ;
+ s:valueAddedTaxIncluded "False" ;
+ ] ;
+ s:validFrom "1985-11-08" ; # vertriebsinfos
+ s:validThrough "1987" ; # seyfert87
+ s:offeredBy _:org_gmd ;
+ .
+
+_:offer_eumelpd
+ a s:Offer ;
+ s:name "Public Domain" ;
+ s:priceSpecification [
+ a s:UnitPriceSpecification ;
+ s:price "50" ;
+ s:priceCurrency "DEM" ;
+ s:valueAddedTaxIncluded "False" ;
+ ] ;
+ s:validFrom "1989-11-09" ;
+ s:offeredBy _:com_schoenbeck ;
+ .
+
+<#msdosdat>
+ a s:SoftwareApplication ;
+ s:name "MS-DOS-DAT" ;
+ s:description "MS-DOS interoperability layer" ;
+ s:author _:org_gmd ;
+ s:offers [
+ a s:Offer ;
+ s:priceSpecification [
+ a s:UnitPriceSpecification ;
+ s:price "200" ;
+ s:priceCurrency "DEM" ;
+ s:valueAddedTaxIncluded "False" ;
+ ] ;
+ s:validFrom "1985-11-08" ; # vertriebsinfos
+ s:validThrough "1987" ; # seyfert87
+ s:offeredBy _:org_gmd ;
+ ] ;
+ s:datePublished "1986-01-01" ; # vertriebsinfos
+ .
+
+<#gmdtexteditor>
+ a s:SoftwareApplication ;
+ s:name "Texteditor" ;
+ s:author _:org_gmd ;
+ s:offers [
+ a s:Offer ;
+ s:priceSpecification [
+ a s:UnitPriceSpecification ;
+ s:price "850" ;
+ s:priceCurrency "DEM" ;
+ s:valueAddedTaxIncluded "False" ;
+ ] ;
+ s:validFrom "1985-11-08" ; # vertriebsinfos
+ s:validThrough "1987" ; # seyfert87
+ s:offeredBy _:org_gmd ;
+ ] ;
+ .
+
+<#basicp6066>
+ a s:SoftwareApplication ;
+ s:name "BASIC P 6066 compiler" ;
+ s:author _:org_gmd ;
+ s:offers [
+ a s:Offer ;
+ s:priceSpecification [
+ a s:UnitPriceSpecification ;
+ s:price "400" ;
+ s:priceCurrency "DEM" ;
+ s:valueAddedTaxIncluded "False" ;
+ ] ;
+ s:validFrom "1985-11-08" ; # vertriebsinfos
+ s:offeredBy _:org_gmd ;
+ ] ;
+ .
+
+<#mbasic>
+ a s:SoftwareApplication ;
+ s:name "M-BASIC" ;
+ s:author _:org_gmd ;
+ s:offers [
+ a s:Offer ;
+ s:priceSpecification [
+ a s:UnitPriceSpecification ;
+ s:price "400" ;
+ s:priceCurrency "DEM" ;
+ s:valueAddedTaxIncluded "False" ;
+ ] ;
+ s:validFrom "1985-11-08" ; # vertriebsinfos
+ s:offeredBy _:org_gmd ;
+ ] ;
+ s:datePublished "1986-03" ; # vertriebsinfos
+ .
+
+<#eumelnetz>
+ a s:SoftwareApplication ;
+ s:name "EUMEL-Netz" ;
+ s:author _:org_gmd ;
+ s:offers [
+ a s:Offer ;
+ s:priceSpecification [
+ a s:UnitPriceSpecification ;
+ s:price "200" ;
+ s:priceCurrency "DEM" ;
+ s:valueAddedTaxIncluded "False" ;
+ ] ;
+ s:validFrom "1985-11-08" ; # vertriebsinfos
+ s:validThrough "1987" ; # seyfert87
+ s:offeredBy _:org_gmd ;
+ ] ;
+ .
+
+<#dynamo>
+ a s:SoftwareApplication ;
+ s:name "DYNAMO" ;
+ s:author _:org_gmd ;
+ s:offers [
+ a s:Offer ;
+ s:priceSpecification [
+ a s:UnitPriceSpecification ;
+ s:price "200" ;
+ s:priceCurrency "DEM" ;
+ s:valueAddedTaxIncluded "False" ;
+ ] ;
+ s:validFrom "1985-11-08" ; # vertriebsinfos
+ s:validThrough "1987" ; # seyfert87
+ s:offeredBy _:org_gmd ;
+ ] ;
+ .
+
+<#lisp>
+ a s:SoftwareApplication ;
+ s:name "LISP" ;
+ s:author _:org_gmd ;
+ s:offers [
+ a s:Offer ;
+ s:priceSpecification [
+ a s:UnitPriceSpecification ;
+ s:price "0" ;
+ s:priceCurrency "DEM" ;
+ s:valueAddedTaxIncluded "False" ;
+ ] ;
+ s:validFrom "1985-11-08" ; # vertriebsinfos
+ s:validThrough "1987" ; # seyfert87
+ s:offeredBy _:org_gmd ;
+ ] ;
+ .
+
+<#dasys>
+ a s:SoftwareApplication ;
+ s:name "DASYS" ;
+ s:description "Statistics software" ;
+ s:author _:org_gmd ;
+ s:offers [
+ a s:Offer ;
+ s:priceSpecification [
+ a s:UnitPriceSpecification ;
+ s:price "200" ;
+ s:priceCurrency "DEM" ;
+ s:valueAddedTaxIncluded "False" ;
+ ] ;
+ s:validFrom "1985-11-08" ; # vertriebsinfos
+ s:validThrough "1987" ; # seyfert87
+ s:offeredBy _:org_gmd ;
+ ] ;
+ .
+
+<#remis>
+ a s:SoftwareApplication ;
+ s:name "REMIS" ;
+ s:description "Relational database with SQL support" ;
+ s:author _:org_gmd ;
+ s:offers [
+ a s:Offer ;
+ s:priceSpecification [
+ a s:UnitPriceSpecification ;
+ s:price "200" ;
+ s:priceCurrency "DEM" ;
+ s:valueAddedTaxIncluded "False" ;
+ ] ;
+ s:validFrom "1985-11-08" ; # vertriebsinfos
+ s:validThrough "1987" ; # seyfert87
+ s:offeredBy _:org_gmd ;
+ ] ;
+ .
+
+<#baisy>
+ a s:SoftwareApplication ;
+ s:name "BAISY" ;
+ s:description "Database" ;
+ s:author _:org_gmd ;
+ .
+
+<#eudas>
+ a s:SoftwareApplication ;
+ s:name "EUDAS" ;
+ s:author _:org_gmd ;
+ .
+
+<#moco>
+ a s:SoftwareApplication ;
+ s:name "MOCO" ;
+ s:description "Modellcomputer MOCO" ;
+ s:author _:org_gmd ;
+ s:offers [
+ a s:Offer ;
+ s:priceSpecification [
+ a s:UnitPriceSpecification ;
+ s:price "0" ;
+ s:priceCurrency "DEM" ;
+ s:valueAddedTaxIncluded "False" ;
+ ] ;
+ s:validFrom "1985-11-08" ; # vertriebsinfos
+ s:offeredBy _:org_gmd ;
+ ] ;
+ .
+
+<#hamster>
+ a s:SoftwareApplication ;
+ s:name "HAMSTER" ;
+ s:author _:org_gmd ;
+ s:offers [
+ a s:Offer ;
+ s:priceSpecification [
+ a s:UnitPriceSpecification ;
+ s:price "0" ;
+ s:priceCurrency "DEM" ;
+ s:valueAddedTaxIncluded "False" ;
+ ] ;
+ s:validFrom "1985-11-08" ; # vertriebsinfos
+ s:offeredBy _:org_gmd ;
+ ] ;
+ .
+
+<#multiline-superbase>
+ a s:SoftwareApplication ;
+ s:name "Multiline Superbase" ;
+ s:applicationCategory "database" ;
+ s:author _:com_webidata ;
+ .
+
+<#multiline-orgapac>
+ a s:SoftwareApplication ;
+ s:name "Multiline Orga Pac" ;
+ s:description "Organisationspaket" ;
+ s:author _:com_webidata ;
+ .
+
+<#multiline-btx>
+ a s:SoftwareApplication ;
+ s:name "Multiline BTX" ;
+ s:description "BTX-Inhouse-Lösung" ;
+ s:author _:com_webidata ;
+ .
+
+<#multiline-inkasso>
+ a s:SoftwareApplication ;
+ s:name "Multiline Inkasso" ;
+ s:description "software for debt collecting agencies" ;
+ s:author _:com_webidata ;
+ .
+
+<#multiline-hbg>
+ a s:SoftwareApplication ;
+ s:name "Multiline HGB Par.89ff." ;
+ s:description "Branchenpaket für Handelsvertreter" ;
+ s:author _:com_webidata ;
+ .
+
+<#dgs-grafik>
+ a s:SoftwareApplication ;
+ s:name "dgs Digitron-Grafik-System" ;
+ s:author _:com_digitron ;
+ s:offers [
+ a s:Offer ;
+ s:priceSpecification [
+ a s:UnitPriceSpecification ;
+ s:price "450" ;
+ s:priceCurrency "DEM" ;
+ s:valueAddedTaxIncluded "True" ; # ?
+ ] ;
+ s:validFrom "1990" ; # ambros90b
+ s:validThrough "1990" ;
+ s:offeredBy _:com_digitron ;
+ ] ;
+ .
+
+<#dgs-supervision>
+ a s:SoftwareApplication ;
+ s:name "dgs SUPER VISION" ;
+ s:author _:com_digitron ;
+ .
+
+<#dgs-superchart>
+ a s:SoftwareApplication ;
+ s:name "dgs Super Chart" ;
+ s:author _:com_digitron ;
+ s:offers [
+ a s:Offer ;
+ s:priceSpecification [
+ a s:UnitPriceSpecification ;
+ s:price "1200" ;
+ s:priceCurrency "DEM" ;
+ s:valueAddedTaxIncluded "True" ; # ?
+ ] ;
+ s:validFrom "1990" ; # ambros90b
+ s:validThrough "1990" ;
+ s:offeredBy _:com_digitron ;
+ ] ;
+ .
+
+<#eumelbase>
+ a s:SoftwareApplication ;
+ s:name "EUMELbase" ;
+ s:description "Relational database" ;
+ s:applicationCategory "database" ;
+ s:author _:com_isp ;
+ .
+
+<#eumelcalc>
+ a s:SoftwareApplication ;
+ s:name "EUMELcalc" ;
+ s:applicationCategory "spreadsheet" ;
+ s:author _:com_isp ;
+ .
+
+<#eumelwriter>
+ a s:SoftwareApplication ;
+ s:name "EUMELwriter" ;
+ s:applicationCategory "text processing" ;
+ s:author _:com_isp ;
+ .
+
+# see ende87
+<#laboris>
+ a s:SoftwareApplication ;
+ s:name "LABORIS" ;
+ s:description "Software suite for doctors" ;
+ s:author _:com_isp ;
+ .
+
+# see iur86
+<#ergojur>
+ a s:SoftwareApplication ;
+ s:name "Ergo JUR" ;
+ s:author _:com_modsoft ;
+ s:operatingSystem "EUMEL" ;
+ # see iur86
+ s:memoryRequirements "512 KB" ;
+ s:storageRequirements "0.5 MB" ;
+ s:dateCreated "1986" ;
+ .
+
+# ~120 installs in 1986 [schuetz86]_
+<#advodat>
+ a s:SoftwareApplication ;
+ s:name "advodat" ;
+ s:author _:com_advodat ;
+ s:operatingSystem "EUMEL" ;
+ # see iur86
+ s:memoryRequirements "512 KB" ;
+ s:storageRequirements "3 MB" ;
+ s:dateCreated "1984" ;
+ .
+
diff --git a/popularity.rst b/popularity.rst
index c2a103c..a7e61fc 100644
--- a/popularity.rst
+++ b/popularity.rst
@@ -24,3 +24,5 @@ By mid 1985 support for the Japanese *Kanji* writing system was added to EUMEL
[gmdspiegel85d]_. A newly founded corporation *NISSIN Products Corp. Tokyo*
sold the product on the Japanese market [gmdbericht85]_.
+.. _advodat: #advodat
+
diff --git a/software.rst b/software.rst
index eb45b82..66cc528 100644
--- a/software.rst
+++ b/software.rst
@@ -1,45 +1,11 @@
Software
^^^^^^^^
-The following (commercial) software, grouped by vendor, was available for EUMEL:
+The following (commercial) software, grouped by vendor, was available for
+EUMEL. Prices excluding VAT/GST.
-ERGOS
- - MS DOS compatibility layer
- - EUMEL-Netz
- - Compiler for BASIC and DYNAMO
- - Interpreter for LISP and PROLOG
- - schulis-Software
- - Simulationswerkzeug Simsel
- - Modelldatenbank Biologie 1/2, Chemie 1/2, Physik 1
- - Mathematikpaket
- - Kommstedt Gesellschaftskundliches Planspiel
- - gs-DIALOG, -Menu-Generator, -Hamster und Robbi, -MP-BAP, -Warenhaus, -Prozess [ambros90a]_
- - schulis-Schulverwaltung: Grundsystem, Ausbaustufe 1/2/3, Stundenplanprogramm INTEGA (für DOS)
- - DASYS, statistics software
- - REMIS, a relational database with SQL support [remis84]_ [remis86]_
- - BAISY, database
- - EUDAS, “Datenverwaltungssystem”
-Webidata Softwareentwicklung GmbH
- - Multiline Superbase, database
- - Multiline Orga Pac, “Organisationspaket”
- - Multiline BTX, “BTX-Inhouse-Lösung”
- - Multiline Inkasso, software for debt collecting agencies
- - Multiline HGB Par.89ff., “Branchenpaket für Handelsvertreter”
-digitron
- - dgs Digitron-Grafik-System
- - dgs-SUPER VISION
- - dgs Super Chart
-ISP
- - EUMELbase, relational database
- - EUMELcalc/rap, spreadsheet
- - EUMELwriter, word-processing
- - LABORIS [ende87]_
-modsoft
- - Ergo JUR, software for lawyers [iur86]_
-Advodat GmbH
- - .. _advodat:
-
- advodat, software for lawyers [schuetz86]_ [iur86]_
+.. raw:: html
+ :file: software.html
Sources:
[praxis3]_ pp. 223–224,
@@ -47,3 +13,5 @@ Sources:
[computerwoche87a]_,
[ambros90b]_,
[software93]_ p. 294 and p. 376,
+[vertriebsinfos]_, [seyfert87]_.
+
diff --git a/tools/formatSoftware.py b/tools/formatSoftware.py
new file mode 100755
index 0000000..a54a740
--- /dev/null
+++ b/tools/formatSoftware.py
@@ -0,0 +1,123 @@
+#!/usr/bin/env python3
+
+from rdflib import URIRef, BNode, Literal, Graph, Namespace
+from rdflib.namespace import RDF, NamespaceManager
+from urllib.parse import urlparse
+import sys
+from itertools import chain, groupby
+from jinja2 import Environment
+from formatRefs import first
+
+class RDFWalker:
+ """
+ Simple RDF graph walker
+ """
+
+ def __init__ (self, g, s, n, path=[]):
+ """
+ :param g: Graph
+ :param s: Namespace
+ :param n: Start node
+ """
+ self.g = g
+ self.n = n
+ self.s = s
+ self._path = path
+
+ def __getattr__ (self, k):
+ """
+ If k is underscore _, walk up tree one level, otherwise search for
+ direct descendents and get first one.
+ """
+ if k == '_':
+ return RDFWalker (self.g, self.s, self._path[0], self._path[1:])
+ yieldall = False
+ if k.endswith ('_'):
+ yieldall = True
+ k = k[:-1]
+
+ if k == 'a':
+ attr = RDF.type
+ else:
+ attr = getattr (self.s, k)
+
+ ret = [RDFWalker (self.g, self.s, n, [self.n] + self._path) for n in self.g.objects (self.n, attr)]
+
+ if yieldall:
+ return ret
+ elif not ret:
+ return None
+ else:
+ return ret[0]
+
+ def __eq__ (self, b):
+ return self.n == b.n
+
+ def __lt__ (self, b):
+ return str (self) < str (b)
+
+ def __str__ (self):
+ return str (self.n)
+
+if __name__ == '__main__':
+ env = Environment ()
+ env.filters['urlparse'] = urlparse
+ template = env.from_string ("""
+{% macro schemaval(n, name, tag='span') -%}
+<{{ tag }} property="{{ name }}">{{ n|attr(name) }}</{{ tag }}>
+{%- endmacro %}
+{%- for companyname, software in items %}
+ {% set company = companyname._ %}
+ <div typeof="{{ company.a }}" class="company">
+ {{ schemaval(company, 'name', 'h3') }}
+ {% set addr = company.address %}
+ <p property="address">
+ {% if addr.streetAddress %}{{ schemaval(addr, 'streetAddress') }}<br>
+ {% elif addr.postOfficeBoxNumber %}PO box {{ schemaval(addr, 'postOfficeBoxNumber') }}<br>
+ {% endif %}
+ {{ schemaval(addr, 'postalCode') }} {{ schemaval(addr, 'addressLocality') }}
+ </p>
+ {% set url = company.url %}
+ {% if url %}
+ <p><a property="url" href="{{ url }}">{{ url }}</a></p>
+ {% endif %}
+ <div class="products">
+ {%- for s in software|sort(attribute='name') %}
+ <div typeof="{{ s.a }}" id="{{ s|string|urlparse|attr('fragment') }}" class="softwareProduct">
+ <h4>{{ schemaval(s, 'name') }}{% if s.softwareVersion %} ({{ schemaval(s, 'softwareVersion') }}){% endif %}</h4>
+ <p>
+ {% if s.dateCreated %}{{ schemaval(s, 'dateCreated') }}
+ {% if s.datePublished %}/{{ schemaval(s, 'datePublished') }}{% endif %}
+ {% elif s.datePublished %}{{ schemaval(s, 'datePublished') }}
+ {% endif %}
+ </p>
+ {% if s.description %}{{ schemaval(s, 'description', 'p') }}{% endif %}
+ <ul property="offers">
+ {% for o in s.offers_|sort(attribute='name') %}
+ <li>
+ {% if o.name %}{{ schemaval(o, 'name') }}, {% endif %}
+ <span property="priceSpecification">{{ schemaval(o.priceSpecification, 'price') }}
+ {{ schemaval(o.priceSpecification, 'priceCurrency') }}</span>,
+ {{ schemaval(o, 'validFrom') }}{% if o.validThrough and o.validFrom != o.validThrough %}–{{ schemaval(o, 'validThrough') }}{% endif %}
+ </li>
+ {% endfor %}
+ </ul>
+ </div>
+ {% endfor -%}
+ </div>
+ </div>
+{% endfor %}""")
+ g = Graph()
+ result = g.parse ("index.ttl", format='turtle')
+ s = Namespace ("https://schema.org/")
+
+ items = []
+
+ for n in g.subjects (RDF.type, s.SoftwareApplication):
+ n = RDFWalker (g, s, n)
+ if n.author:
+ items.append (n)
+
+ items = groupby (sorted (items, key=lambda x: str (x.author.name).lower ()), lambda x: x.author.name)
+ print (template.render(items=items))
+