sQLux v1.0 (The Xmas Turkey)

Discussion and advice about emulating the QL on other machines.
User avatar
RalfR
QL Wafer Drive
Posts: 1145
Joined: Fri Jun 15, 2018 8:58 pm

Re: sQLux v1.0 (The Xmas Turkey)

Post by RalfR »

desin wrote: Tue Mar 04, 2025 8:32 pmSMSQE will not run SQLux !
I misunderstood the query a bit.


7000 4E75
User avatar
XorA
Site Admin
Posts: 1583
Joined: Thu Jun 02, 2011 11:31 am
Location: Shotts, North Lanarkshire, Scotland, UK

Re: sQLux v1.0 (The Xmas Turkey)

Post by XorA »

pjw wrote:
XorA wrote: Tue Mar 04, 2025 9:34 pm
desin wrote: Tue Mar 04, 2025 8:32 pm <>SMSQE will not run SQLux !
<>
I do not have the expertise in 68000 assembly to write smsq/e drivers for uqlx/sQLux.
I thought all the drivers already were in a version of SMSQ/E that thinks its running in a QL with a Gold Card. Perhaps its the GC bit that is the difference..

Anyway, my question really was: Should it work? and if so, what do I need to do differently? It seems its not supposed to work. Fair enough. No wuckin' forries. :)
So uqlx and in turn sQLux is very invasive in the way it emulates QDOS. It doesn't emulate any hardware. So there is nothing emulated for gold card. So I could probably make it run in a few minutes. But you would have no storage devices.
(Or any of the other uqlx magic devices)


User avatar
XorA
Site Admin
Posts: 1583
Joined: Thu Jun 02, 2011 11:31 am
Location: Shotts, North Lanarkshire, Scotland, UK

Re: sQLux v1.0 (The Xmas Turkey)

Post by XorA »

So there are issues with your EMU_ proposals.

EMU_NETADDR$ - that is the impossible to answer question, and will result in 127.0.0.1 always being returned given your spec.

EMU_HOSTOS$ - why? the numeric version is precise (although doesnt have any unixes defined I think), the free form one would be chaos in Superbasic.

EMU_NETNAME$ - again impossible to answer, machines have multiple names, thats why gethostXXXXX() functions return arrays.

MACHINE/PROCESSOR - NO JUST NO Superbasic already has enough non namespaced extensions that collide! (I know they already exist but come on lads).

I don't see a major problem with the rest, the SYNCSCRAP one would not be applicable to sQLux anyway I think!


User avatar
XorA
Site Admin
Posts: 1583
Joined: Thu Jun 02, 2011 11:31 am
Location: Shotts, North Lanarkshire, Scotland, UK

Re: sQLux v1.0 (The Xmas Turkey)

Post by XorA »

Code: Select all

512: br-aa92cc35a87f: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:fd:44:dc:f3 brd ff:ff:ff:ff:ff:ff
    inet 172.24.0.1/16 brd 172.24.255.255 scope global br-aa92cc35a87f
       valid_lft forever preferred_lft forever
    inet6 fe80::42:fdff:fe44:dcf3/64 scope link 
       valid_lft forever preferred_lft forever
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: enp1s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 00:01:2e:91:89:ea brd ff:ff:ff:ff:ff:ff
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:01:2e:91:89:eb brd ff:ff:ff:ff:ff:ff
    inet 192.168.222.13/24 brd 192.168.222.255 scope global dynamic noprefixroute enp2s0
       valid_lft 4467sec preferred_lft 4467sec
    inet6 2a02:8010:64d6:0:eeee:d3f1:de69:1acb/128 scope global dynamic noprefixroute 
       valid_lft 6049sec preferred_lft 3349sec
    inet6 fe80::91c8:d8da:35ed:7c30/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: wlp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 9a:58:d1:e9:39:c3 brd ff:ff:ff:ff:ff:ff permaddr 38:ba:f8:84:86:81
9: br-449cf08818fe: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:c8:d6:35:7b brd ff:ff:ff:ff:ff:ff
    inet 172.20.0.1/16 brd 172.20.255.255 scope global br-449cf08818fe
       valid_lft forever preferred_lft forever
    inet6 fe80::42:c8ff:fed6:357b/64 scope link 
       valid_lft forever preferred_lft forever
11: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:d0:d4:82:69 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:d0ff:fed4:8269/64 scope link 
       valid_lft forever preferred_lft forever
30: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 52:54:00:1c:38:2d brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
35: vnet4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master virbr0 state UNKNOWN group default qlen 1000
    link/ether fe:54:00:40:f3:e7 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe40:f3e7/64 scope link 
       valid_lft forever preferred_lft forever
548: vetha60d6a4@if547: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-c4ae5c7e6876 state UP group default 
    link/ether ba:2f:2b:1b:00:8b brd ff:ff:ff:ff:ff:ff link-netnsid 5
    inet6 fe80::b82f:2bff:fe1b:8b/64 scope link 
       valid_lft forever preferred_lft forever
550: veth1a2ac3b@if549: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-c4ae5c7e6876 state UP group default 
    link/ether 9e:9d:d5:c8:21:09 brd ff:ff:ff:ff:ff:ff link-netnsid 11
    inet6 fe80::9c9d:d5ff:fec8:2109/64 scope link 
       valid_lft forever preferred_lft forever
552: veth02412f3@if551: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-f78eeffd2b92 state UP group default 
    link/ether b2:86:c9:de:77:98 brd ff:ff:ff:ff:ff:ff link-netnsid 12
    inet6 fe80::b086:c9ff:fede:7798/64 scope link 
       valid_lft forever preferred_lft forever
554: vethdf65d4c@if553: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-c4ae5c7e6876 state UP group default 
    link/ether b6:40:e8:86:03:78 brd ff:ff:ff:ff:ff:ff link-netnsid 12
    inet6 fe80::b440:e8ff:fe86:378/64 scope link 
       valid_lft forever preferred_lft forever
595: br-0a6fa455c455: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:f3:ff:3d:15 brd ff:ff:ff:ff:ff:ff
    inet 172.25.0.1/16 brd 172.25.255.255 scope global br-0a6fa455c455
       valid_lft forever preferred_lft forever
    inet6 fe80::42:f3ff:feff:3d15/64 scope link 
       valid_lft forever preferred_lft forever
611: veth0a7c04a@if610: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-aa92cc35a87f state UP group default 
    link/ether 4a:ef:2d:33:3e:7a brd ff:ff:ff:ff:ff:ff link-netnsid 17
    inet6 fe80::48ef:2dff:fe33:3e7a/64 scope link 
       valid_lft forever preferred_lft forever
613: veth3eac1d2@if612: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-f78eeffd2b92 state UP group default 
    link/ether da:0e:66:d5:a9:fb brd ff:ff:ff:ff:ff:ff link-netnsid 10
    inet6 fe80::d80e:66ff:fed5:a9fb/64 scope link 
       valid_lft forever preferred_lft forever
615: vethc298a68@if614: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-13c4bf1b4ed0 state UP group default 
    link/ether 96:0b:e5:c3:30:df brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::940b:e5ff:fec3:30df/64 scope link 
       valid_lft forever preferred_lft forever
359: vethd7b2bb6@if358: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-f78eeffd2b92 state UP group default 
    link/ether ee:32:62:4b:44:58 brd ff:ff:ff:ff:ff:ff link-netnsid 2
    inet6 fe80::ec32:62ff:fe4b:4458/64 scope link 
       valid_lft forever preferred_lft forever
617: vethf86361d@if616: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-f78eeffd2b92 state UP group default 
    link/ether f6:eb:4d:bc:b0:b3 brd ff:ff:ff:ff:ff:ff link-netnsid 14
    inet6 fe80::f4eb:4dff:febc:b0b3/64 scope link 
       valid_lft forever preferred_lft forever
619: veth3db7f03@if618: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-13c4bf1b4ed0 state UP group default 
    link/ether 72:43:dd:24:06:b6 brd ff:ff:ff:ff:ff:ff link-netnsid 14
    inet6 fe80::7043:ddff:fe24:6b6/64 scope link 
       valid_lft forever preferred_lft forever
363: veth95730a7@if362: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-f78eeffd2b92 state UP group default 
    link/ether 76:7d:7a:ea:bc:84 brd ff:ff:ff:ff:ff:ff link-netnsid 3
    inet6 fe80::747d:7aff:feea:bc84/64 scope link 
       valid_lft forever preferred_lft forever
365: br-c4ae5c7e6876: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:82:81:1c:09 brd ff:ff:ff:ff:ff:ff
    inet 172.21.0.1/16 brd 172.21.255.255 scope global br-c4ae5c7e6876
       valid_lft forever preferred_lft forever
    inet6 fe80::42:82ff:fe81:1c09/64 scope link 
       valid_lft forever preferred_lft forever
630: veth3d6b009@if629: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-f78eeffd2b92 state UP group default 
    link/ether e2:b6:ec:45:1f:1b brd ff:ff:ff:ff:ff:ff link-netnsid 16
    inet6 fe80::e0b6:ecff:fe45:1f1b/64 scope link 
       valid_lft forever preferred_lft forever
374: br-ec9edeee4071: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:54:c4:f0:59 brd ff:ff:ff:ff:ff:ff
    inet 172.22.0.1/16 brd 172.22.255.255 scope global br-ec9edeee4071
       valid_lft forever preferred_lft forever
    inet6 fe80::42:54ff:fec4:f059/64 scope link 
       valid_lft forever preferred_lft forever
634: veth66c1c70@if633: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-f78eeffd2b92 state UP group default 
    link/ether 76:91:39:e0:88:81 brd ff:ff:ff:ff:ff:ff link-netnsid 15
    inet6 fe80::7491:39ff:fee0:8881/64 scope link 
       valid_lft forever preferred_lft forever
636: veth07fa0c3@if635: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-f78eeffd2b92 state UP group default 
    link/ether 5a:bc:c8:82:17:03 brd ff:ff:ff:ff:ff:ff link-netnsid 4
    inet6 fe80::58bc:c8ff:fe82:1703/64 scope link 
       valid_lft forever preferred_lft forever
638: veth0d7ea61@if637: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-f78eeffd2b92 state UP group default 
    link/ether f2:16:cc:22:49:7c brd ff:ff:ff:ff:ff:ff link-netnsid 8
    inet6 fe80::f016:ccff:fe22:497c/64 scope link 
       valid_lft forever preferred_lft forever
640: veth333ba75@if639: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-6977c0f0fd5b state UP group default 
    link/ether be:cd:6f:42:9a:9a brd ff:ff:ff:ff:ff:ff link-netnsid 6
    inet6 fe80::bccd:6fff:fe42:9a9a/64 scope link 
       valid_lft forever preferred_lft forever
642: veth6207cc3@if641: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-6977c0f0fd5b state UP group default 
    link/ether 12:5b:8d:fe:28:18 brd ff:ff:ff:ff:ff:ff link-netnsid 9
    inet6 fe80::105b:8dff:fefe:2818/64 scope link 
       valid_lft forever preferred_lft forever
644: veth143df1f@if643: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-f78eeffd2b92 state UP group default 
    link/ether da:3f:bd:80:a3:15 brd ff:ff:ff:ff:ff:ff link-netnsid 9
    inet6 fe80::d83f:bdff:fe80:a315/64 scope link 
       valid_lft forever preferred_lft forever
418: veth2b3813f@if417: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-ec9edeee4071 state UP group default 
    link/ether 42:6e:67:97:f7:84 brd ff:ff:ff:ff:ff:ff link-netnsid 7
    inet6 fe80::406e:67ff:fe97:f784/64 scope link 
       valid_lft forever preferred_lft forever
420: vethdd72504@if419: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-ec9edeee4071 state UP group default 
    link/ether 42:b2:17:b8:eb:5a brd ff:ff:ff:ff:ff:ff link-netnsid 13
    inet6 fe80::40b2:17ff:feb8:eb5a/64 scope link 
       valid_lft forever preferred_lft forever
422: vethefd7bb5@if421: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-f78eeffd2b92 state UP group default 
    link/ether d6:96:42:d3:19:c3 brd ff:ff:ff:ff:ff:ff link-netnsid 13
    inet6 fe80::d496:42ff:fed3:19c3/64 scope link 
       valid_lft forever preferred_lft forever
423: br-13c4bf1b4ed0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:42:29:76:6f brd ff:ff:ff:ff:ff:ff
    inet 172.23.0.1/16 brd 172.23.255.255 scope global br-13c4bf1b4ed0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:42ff:fe29:766f/64 scope link 
       valid_lft forever preferred_lft forever
196: br-f78eeffd2b92: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:54:cc:cc:0e brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-f78eeffd2b92
       valid_lft forever preferred_lft forever
    inet6 fe80::42:54ff:fecc:cc0e/64 scope link 
       valid_lft forever preferred_lft forever
197: br-6977c0f0fd5b: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:dd:ee:e4:91 brd ff:ff:ff:ff:ff:ff
    inet 172.19.0.1/16 brd 172.19.255.255 scope global br-6977c0f0fd5b
       valid_lft forever preferred_lft forever
    inet6 fe80::42:ddff:feee:e491/64 scope link 
       valid_lft forever preferred_lft forever
499: veth106e00e@if498: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-f78eeffd2b92 state UP group default 
    link/ether 26:1f:2b:0e:57:f1 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::241f:2bff:fe0e:57f1/64 scope link 
       valid_lft forever preferred_lft forever
Just a small example from just one of my machines why EMU_NETADDR$ is impossible to answer question!


User avatar
pjw
QL Wafer Drive
Posts: 1588
Joined: Fri Jul 11, 2014 8:44 am
Location: Norway
Contact:

Re: sQLux v1.0 (The Xmas Turkey)

Post by pjw »

XorA wrote: Wed Mar 05, 2025 10:09 am So there are issues with your EMU_ proposals.

EMU_NETADDR$ - that is the impossible to answer question, and will result in 127.0.0.1 always being returned given your spec.

EMU_HOSTOS$ - why? the numeric version is precise (although doesnt have any unixes defined I think), the free form one would be chaos in Superbasic.

EMU_NETNAME$ - again impossible to answer, machines have multiple names, thats why gethostXXXXX() functions return arrays.

MACHINE/PROCESSOR - NO JUST NO Superbasic already has enough non namespaced extensions that collide! (I know they already exist but come on lads).

I don't see a major problem with the rest, the SYNCSCRAP one would not be applicable to sQLux anyway I think!
And yet all the EMU_ stuff above comes directly from SMSQmulator, so saying its not possible is clearly not correct.

The MACHINE/PROCESSOR stuff comes from SMSQ/E. When there was only one platform (the QL) there was no need for any of this. Now that there are a whole variety of platforms with different capabilities this information becomes necessary. Sure, one might just be able to PEEK stuff.. Ah but wait, if we dont know what platform we're on we cant even know if the system variables contain reliable information.

I wish that anyone writing or maintaining an emulator or QL platform of any sort, would research what others have done before them to avoid everyone just doing their own thing. The whole point of interfaces is that they are uniform so that people using them or programming for them can get on with the job and not have to relate to each and every little piece of underlying mess.

None of this matters to me as Im not a uQLx user. I was just a little inquisitive about the state of play.


Per
I love long walks, especially when they are taken by people who annoy me.
- Fred Allen
User avatar
XorA
Site Admin
Posts: 1583
Joined: Thu Jun 02, 2011 11:31 am
Location: Shotts, North Lanarkshire, Scotland, UK

Re: sQLux v1.0 (The Xmas Turkey)

Post by XorA »

Code: Select all

JVA_NETADDR$
This function returns the Ipv4 internet address of the machine it is running from. This may
be an empty string if no internet address can be found. Moreover, if you have two network
interfaces connected with two different addresses (e.g. a wifi and a lan cable) then there is
no way of telling which address is returned.
Syntax: result$ = JVA_NETADDR$
I despair, the documentation literally says it picks a random one! So back to my original statement it is a broken concept.

Unfortunately this is what happens when amateur software people think a problem is simple!


User avatar
pjw
QL Wafer Drive
Posts: 1588
Joined: Fri Jul 11, 2014 8:44 am
Location: Norway
Contact:

Re: sQLux v1.0 (The Xmas Turkey)

Post by pjw »

I freely admit to being an amateur when it comes to programming, and Im pretty sure that Wolfgang is one too. However, Wolfgang wrote a complete SMSQ/E emulator from scratch. What did you do, apart from patching up the work of your betters?

I dont know which of us you are calling "amateur" but given the context, you clearly intended this as an insult. Or perhaps its just unwarranted arrogance talking and one should simply overlook it?

You asked
I have always said if someone documents a bunch of emu_ stuff I will implement it in sQLux, they are really easy to add in most cases.
I spent a hour or so doing just that and all I get back is abuse? Talk of floccinaucinihilipilification!
Even better if that person persuaded the others to follow.
Im unlikely to ever try that again with you!

EMU_NETADDR$ may not be ideal, that is why there is no QPC_NETADDR$. (See, I may be an amateur, but Im not a complete idiot. Marcel gave me the same information - in temperate language - many years ago when I asked him.) However, in my case it works well on my laptop that only uses WiFi, as most laptops do. Better than nothing!


Per
I love long walks, especially when they are taken by people who annoy me.
- Fred Allen
User avatar
XorA
Site Admin
Posts: 1583
Joined: Thu Jun 02, 2011 11:31 am
Location: Shotts, North Lanarkshire, Scotland, UK

Re: sQLux v1.0 (The Xmas Turkey)

Post by XorA »

Fuck off Per!

I'm fed up of feeding your trolling now!


swensont
Forum Moderator
Posts: 311
Joined: Tue Dec 06, 2011 3:30 am
Location: SF Bay Area
Contact:

Re: sQLux v1.0 (The Xmas Turkey)

Post by swensont »

> I wish that anyone writing or maintaining an emulator or QL platform of any sort, would research what others have done before them to avoid everyone just doing their own thing.

QPC and Qemulator were developed independently in 1996, QPC in Germany and Qemulator in Italy. Since there were no earlier emulators, neither developer has any prior art to reference. Each emulator had a different take on how the emulator handles QDOS file on the underlying file system. uQLx also came out in 1996, based in part on Qemulator (mostly the 68000 emulator core IIRC). Each emulator was written on a different operating system (DOS for QPC, Mac for Qemulator and Unix for uQLx) and that probably effected how each author approached how the emulator worked. Once each emulator was released, the die was cast, so to speak.

Understanding how we got here can help in understanding where we are going.

Tim


User avatar
ql_freak
Gold Card
Posts: 427
Joined: Sun Jan 18, 2015 1:29 am

Re: sQLux v1.0 (The Xmas Turkey)

Post by ql_freak »

Hello XorA,
 
XorA wrote: Tue Mar 04, 2025 7:38 am Man I go to all the hassle to make a windows native version and people spread misinformation like this.

YES THERE IS A WINDOWS NATIVE VERSION.

It's fine if you don't want to use it, but please stop with the massive negativity about it.
 
sorry, my message(s) was (were) never thought negative. The opposite is true. When I have looked at the GitHub site (found via Google) I couldn't find a binary version. So I prepared to compile it myself and so I asked. Unfortunately, I had confused MinGW with Cygwin, or thought MinGW was similar to Cygwin (with Unix compatibility DLL). I will install sQLux in any case (especially if a binary version is available), I would even have compiled it myself if necessary.

Sincerely Peter


http://peter-sulzer.bplaced.net
GERMAN! QL-Download page also available in English: GETLINE$() function, UNIX-like "ls" command, improved DIY-Toolkit function EDLINE$ - All with source. AND a good Python 3 Tutorial (German) for Win/UNIX :-)
Post Reply