: days/month 15662003 swap 1- 2* rshift 3 and 28 or ;
Hans Bezemer <the.beez.speaks@gmail.com> writes:
: days/month 15662003 swap 1- 2* rshift 3 and 28 or ;
;-)
On Mon, 29 Jan 2024 15:04:16 -0800
Paul Rubin <no.email@nospam.invalid> wrote:
Hans Bezemer <the.beez.speaks@gmail.com> writes:
: days/month 15662003 swap 1- 2* rshift 3 and 28 or ;
;-)
BTDT in asm
leap years are a pain.
Kerr-Mudd, John wrote:
On Mon, 29 Jan 2024 15:04:16 -0800
Paul Rubin <no.email@nospam.invalid> wrote:
Hans Bezemer <the.beez.speaks@gmail.com> writes:
: days/month 15662003 swap 1- 2* rshift 3 and 28 or ;
;-)
BTDT in asm
leap years are a pain.
ASM might be better, but probably not worth the pain.
Even my dumb compiler (TOS cached) already translates this to:
┌────────────────────────┐
│ MinForth V3.6 - 64 bit │ └────────────────────────┘
Stacks: d:1024 r:512 f:128
Unused: 199M
# see days/month
C DAYS/MONTH <799>
0000000000406242 <mf_DAYSslashMONTH>:
406242: 4c 89 e0 mov %r12,%rax
406245: 41 bc b3 fb ee 00 mov $0xeefbb3,%r12d
40624b: 48 8d 44 00 fe lea -0x2(%rax,%rax,1),%rax
406250: 49 89 c4 mov %rax,%r12
406253: 41 bc b3 fb ee 00 mov $0xeefbb3,%r12d
406259: c4 42 fb f7 e4 shrx %rax,%r12,%r12
40625e: 4d 89 27 mov %r12,(%r15)
406261: 41 bc 03 00 00 00 mov $0x3,%r12d
406267: 49 8b 07 mov (%r15),%rax
40626a: 83 e0 03 and $0x3,%eax
40626d: 49 89 07 mov %rax,(%r15)
406270: 41 bc 1c 00 00 00 mov $0x1c,%r12d
406276: 49 89 c4 mov %rax,%r12
406279: 49 83 cc 1c or $0x1c,%r12
40627d: c3 retq
On Mon, 29 Jan 2024 15:04:16 -0800
Paul Rubin <no.email@nospam.invalid> wrote:
Hans Bezemer <the.beez.speaks@gmail.com> writes:
: days/month 15662003 swap 1- 2* rshift 3 and 28 or ;
;-)
BTDT in asm
leap years are a pain.
...Hans Bezemer <the.beez.speaks@gmail.com> writes:
: days/month 15662003 swap 1- 2* rshift 3 and 28 or ;
Even my dumb compiler (TOS cached) already translates this to:...
0000000000406242 <mf_DAYSslashMONTH>:
406242: 4c 89 e0 mov %r12,%rax
406245: 41 bc b3 fb ee 00 mov $0xeefbb3,%r12d
40624b: 48 8d 44 00 fe lea -0x2(%rax,%rax,1),%rax
406250: 49 89 c4 mov %rax,%r12
406253: 41 bc b3 fb ee 00 mov $0xeefbb3,%r12d
406259: c4 42 fb f7 e4 shrx %rax,%r12,%r12
40625e: 4d 89 27 mov %r12,(%r15)
406261: 41 bc 03 00 00 00 mov $0x3,%r12d
406267: 49 8b 07 mov (%r15),%rax
40626a: 83 e0 03 and $0x3,%eax
40626d: 49 89 07 mov %rax,(%r15)
406270: 41 bc 1c 00 00 00 mov $0x1c,%r12d
406276: 49 89 c4 mov %rax,%r12
406279: 49 83 cc 1c or $0x1c,%r12
40627d: c3 retq
On 31/01/2024 8:40 pm, Kerr-Mudd, John wrote:
On Tue, 30 Jan 2024 13:33:44 +0000
minforth@gmx.net (minforth) wrote:
Kerr-Mudd, John wrote:
On Mon, 29 Jan 2024 15:04:16 -0800
Paul Rubin <no.email@nospam.invalid> wrote:
Hans Bezemer <the.beez.speaks@gmail.com> writes:
: days/month 15662003 swap 1- 2* rshift 3 and 28 or ;
;-)
BTDT in asm
leap years are a pain.
ASM might be better, but probably not worth the pain.
I'm more comfortable in asm than forth!
...
Wasn't it the idea that Forth was easier than assembler?
I can see how ANS-Forth turned that around :)
Wasn't it the idea that Forth was easier than assembler?
I can see how ANS-Forth turned that around :)
Somehow getting new stuff into my brain is getting hardwer; Forth has so /many/ words. I learnt x86 (up to a usable standard, I'm not an expert)
ages back.
On 31/01/2024 8:40 pm, Kerr-Mudd, John wrote:
On Tue, 30 Jan 2024 13:33:44 +0000
minforth@gmx.net (minforth) wrote:
Kerr-Mudd, John wrote:
On Mon, 29 Jan 2024 15:04:16 -0800
Paul Rubin <no.email@nospam.invalid> wrote:
Hans Bezemer <the.beez.speaks@gmail.com> writes:
: days/month 15662003 swap 1- 2* rshift 3 and 28 or ;
;-)
BTDT in asm
leap years are a pain.
ASM might be better, but probably not worth the pain.
I'm more comfortable in asm than forth!
...
Wasn't it the idea that Forth was easier than assembler?
I can see how ANS-Forth turned that around :)
dxf <dxforth@gmail.com> writes:
On 31/01/2024 8:40 pm, Kerr-Mudd, John wrote:
On Tue, 30 Jan 2024 13:33:44 +0000
minforth@gmx.net (minforth) wrote:
Kerr-Mudd, John wrote:
On Mon, 29 Jan 2024 15:04:16 -0800
Paul Rubin <no.email@nospam.invalid> wrote:
Hans Bezemer <the.beez.speaks@gmail.com> writes:
: days/month 15662003 swap 1- 2* rshift 3 and 28 or ;
;-)
BTDT in asm
leap years are a pain.
ASM might be better, but probably not worth the pain.
I'm more comfortable in asm than forth!
...
Wasn't it the idea that Forth was easier than assembler?
And it is for Hans Bezemer, while Kerr-Mudd, John is more comfortable
in "x86" asm.
I can see how ANS-Forth turned that around :)
I doubt that the comfort level of Kerr-Mudd, John is related to the
Forth dialect.
Anyway, taking your comment at face value, please present a version of days/month above in your favourite Forth dialect so that we can
see the difference for ourselves.
: days/month 15662003 swap 1- 2* rshift 3 and 28 or ;
: days/month 15662003 swap 1- 2* rshift 3 and 28 or ;
minforth@gmx.net (minforth) writes:
...Hans Bezemer <the.beez.speaks@gmail.com> writes:
: days/month 15662003 swap 1- 2* rshift 3 and 28 or ;
Even my dumb compiler (TOS cached) already translates this to:...
0000000000406242 <mf_DAYSslashMONTH>:
406242: 4c 89 e0 mov %r12,%rax
406245: 41 bc b3 fb ee 00 mov $0xeefbb3,%r12d
40624b: 48 8d 44 00 fe lea -0x2(%rax,%rax,1),%rax
406250: 49 89 c4 mov %rax,%r12
406253: 41 bc b3 fb ee 00 mov $0xeefbb3,%r12d
406259: c4 42 fb f7 e4 shrx %rax,%r12,%r12
40625e: 4d 89 27 mov %r12,(%r15)
406261: 41 bc 03 00 00 00 mov $0x3,%r12d
406267: 49 8b 07 mov (%r15),%rax
40626a: 83 e0 03 and $0x3,%eax
40626d: 49 89 07 mov %rax,(%r15)
406270: 41 bc 1c 00 00 00 mov $0x1c,%r12d
406276: 49 89 c4 mov %rax,%r12
406279: 49 83 cc 1c or $0x1c,%r12
40627d: c3 retq
Yes, this is a case (straight-line code) where existing Forth systems
do well. Let's see:
gforth-fast (development):
$7FA5FDC99158 lit 1->2
$7FA5FDC99160 #15662003
7FA5FD93F812: mov r15,$08[rbx]
$7FA5FDC99168 swap 2->1
7FA5FD93F816: mov $00[r13],r15
7FA5FD93F81A: sub r13,$08
$7FA5FDC99170 1- 1->1
7FA5FD93F81E: sub r8,$01
$7FA5FDC99178 2* 1->1
7FA5FD93F822: add r8,r8
$7FA5FDC99180 rshift 1->1
7FA5FD93F825: mov rax,$08[r13]
7FA5FD93F829: mov ecx,r8d
7FA5FD93F82C: add r13,$08
7FA5FD93F830: shr rax,CL
7FA5FD93F833: mov r8,rax
$7FA5FDC99188 lit and 1->1
$7FA5FDC99190 #3
$7FA5FDC99198 and
7FA5FD93F836: add rbx,$48
7FA5FD93F83A: and r8,-$10[rbx]
$7FA5FDC991A0 lit 1->2
$7FA5FDC991A8 #28
7FA5FD93F83E: mov r15,$08[rbx]
$7FA5FDC991B0 or 2->1
7FA5FD93F842: or r8,r15
$7FA5FDC991B8 ;s 1->1
7FA5FD93F845: mov rbx,[r14]
7FA5FD93F848: add r14,$08
7FA5FD93F84C: mov rax,[rbx]
7FA5FD93F84F: jmp eax
iforth lxf SwiftForth x64 vfx64
pop rbx dec ebx -8 [RBP] RBP LEA DEC RBX
lea rbx, [rbx -1 +] shl ebx, 1h EEFBB3 # 0 [RBP] MOV SHL RBX, #1
lea rbx, [rbx*2 0 +] mov eax, #EEFBB3h RBX DEC MOV RCX, RBX
mov rcx, rbx mov ecx, ebx RBX SHL MOV EBX, #00EEFBB3
mov rbx, $00EEFBB3 d# shr eax, cl RBX RCX MOV SHR RBX, CL
shr rbx, cl and eax, #3h 0 [RBP] RBX MOV AND RBX, #03
and rbx, 3 b# or eax, #1Ch 8 [RBP] RBP LEA OR RBX, #1C
or rbx, #28 b# mov ebx, eax RBX CL SHR RET/NEXT
push rbx ret near 3 # RBX AND
; 1C # RBX OR
RET
- anton
On 31/01/2024 09:59, Anton Ertl wrote:...
minforth@gmx.net (minforth) writes:
Hans Bezemer <the.beez.speaks@gmail.com> writes:
: days/month 15662003 swap 1- 2* rshift 3 and 28 or ;
How does this simple lookup solution compare?
: d/m s\" 0\x1f\x1c\x1f\x1e\x1f\x1e\x1f\x1f\x1e\x1f\x1e\x1f" drop + c@ ;
: x 13 1 do i d/m . loop ;
x 31 28 31 30 31 30 31 31 30 31 30 31 ok
On 31/01/2024 09:59, Anton Ertl wrote:
minforth@gmx.net (minforth) writes:
...Hans Bezemer <the.beez.speaks@gmail.com> writes:
: days/month 15662003 swap 1- 2* rshift 3 and 28 or ;
Even my dumb compiler (TOS cached) already translates this to:...
0000000000406242 <mf_DAYSslashMONTH>:
406242: 4c 89 e0 mov %r12,%rax
406245: 41 bc b3 fb ee 00 mov $0xeefbb3,%r12d
40624b: 48 8d 44 00 fe lea -0x2(%rax,%rax,1),%rax
406250: 49 89 c4 mov %rax,%r12
406253: 41 bc b3 fb ee 00 mov $0xeefbb3,%r12d
406259: c4 42 fb f7 e4 shrx %rax,%r12,%r12
40625e: 4d 89 27 mov %r12,(%r15)
406261: 41 bc 03 00 00 00 mov $0x3,%r12d
406267: 49 8b 07 mov (%r15),%rax
40626a: 83 e0 03 and $0x3,%eax
40626d: 49 89 07 mov %rax,(%r15)
406270: 41 bc 1c 00 00 00 mov $0x1c,%r12d
406276: 49 89 c4 mov %rax,%r12
406279: 49 83 cc 1c or $0x1c,%r12
40627d: c3 retq
Yes, this is a case (straight-line code) where existing Forth systems
do well. Let's see:
gforth-fast (development):
$7FA5FDC99158 lit 1->2
$7FA5FDC99160 #15662003
7FA5FD93F812: mov r15,$08[rbx]
$7FA5FDC99168 swap 2->1
7FA5FD93F816: mov $00[r13],r15
7FA5FD93F81A: sub r13,$08
$7FA5FDC99170 1- 1->1
7FA5FD93F81E: sub r8,$01
$7FA5FDC99178 2* 1->1
7FA5FD93F822: add r8,r8
$7FA5FDC99180 rshift 1->1
7FA5FD93F825: mov rax,$08[r13]
7FA5FD93F829: mov ecx,r8d
7FA5FD93F82C: add r13,$08
7FA5FD93F830: shr rax,CL
7FA5FD93F833: mov r8,rax
$7FA5FDC99188 lit and 1->1
$7FA5FDC99190 #3
$7FA5FDC99198 and
7FA5FD93F836: add rbx,$48
7FA5FD93F83A: and r8,-$10[rbx]
$7FA5FDC991A0 lit 1->2
$7FA5FDC991A8 #28
7FA5FD93F83E: mov r15,$08[rbx]
$7FA5FDC991B0 or 2->1
7FA5FD93F842: or r8,r15
$7FA5FDC991B8 ;s 1->1
7FA5FD93F845: mov rbx,[r14]
7FA5FD93F848: add r14,$08
7FA5FD93F84C: mov rax,[rbx]
7FA5FD93F84F: jmp eax
iforth lxf SwiftForth x64 vfx64
pop rbx dec ebx -8 [RBP] RBP LEA DEC RBX
lea rbx, [rbx -1 +] shl ebx, 1h EEFBB3 # 0 [RBP] MOV SHL RBX, #1
lea rbx, [rbx*2 0 +] mov eax, #EEFBB3h RBX DEC MOV RCX, RBX
mov rcx, rbx mov ecx, ebx RBX SHL MOV EBX, #00EEFBB3
mov rbx, $00EEFBB3 d# shr eax, cl RBX RCX MOV SHR RBX, CL
shr rbx, cl and eax, #3h 0 [RBP] RBX MOV AND RBX, #03
and rbx, 3 b# or eax, #1Ch 8 [RBP] RBP LEA OR RBX, #1C
or rbx, #28 b# mov ebx, eax RBX CL SHR RET/NEXT
push rbx ret near 3 # RBX AND
; 1C # RBX OR
RET
- anton
How does this simple lookup solution compare?
: d/m s\" 0\x1f\x1c\x1f\x1e\x1f\x1e\x1f\x1f\x1e\x1f\x1e\x1f" drop + c@ ;
: x 13 1 do i d/m . loop ;
x 31 28 31 30 31 30 31 31 30 31 30 31 ok
--
Gerry
Kerr-Mudd, John wrote:
On Mon, 29 Jan 2024 15:04:16 -0800
Paul Rubin <no.email@nospam.invalid> wrote:
Hans Bezemer <the.beez.speaks@gmail.com> writes:
: days/month 15662003 swap 1- 2* rshift 3 and 28 or ;
;-)
BTDT in asm
leap years are a pain.
ASM might be better, but probably not worth the pain.
Even my dumb compiler (TOS cached) already translates this to:
┌────────────────────────┐ >│ MinForth V3.6 - 64 bit │ >└────────────────────────┘ >Stacks: d:1024 r:512 f:128
Unused: 199M
# see days/month
C DAYS/MONTH <799>
0000000000406242 <mf_DAYSslashMONTH>:
406242: 4c 89 e0 mov %r12,%rax
406245: 41 bc b3 fb ee 00 mov $0xeefbb3,%r12d
40624b: 48 8d 44 00 fe lea -0x2(%rax,%rax,1),%rax
406250: 49 89 c4 mov %rax,%r12
406253: 41 bc b3 fb ee 00 mov $0xeefbb3,%r12d
406259: c4 42 fb f7 e4 shrx %rax,%r12,%r12
40625e: 4d 89 27 mov %r12,(%r15)
406261: 41 bc 03 00 00 00 mov $0x3,%r12d
406267: 49 8b 07 mov (%r15),%rax
40626a: 83 e0 03 and $0x3,%eax
40626d: 49 89 07 mov %rax,(%r15)
406270: 41 bc 1c 00 00 00 mov $0x1c,%r12d
406276: 49 89 c4 mov %rax,%r12
406279: 49 83 cc 1c or $0x1c,%r12
40627d: c3 retq
Hi,
for leap year:
: l_d/m 15662007 swap 1- 2* rshift 3 and 28 or ;
for other years:
: __d/m 15662003 swap 1- 2* rshift 3 and 28 or ; ( this is already given by H. Bezemer)
in fact:
15662003 written in base 4 gives: 323233232303 where the digits are what to add to 28 to get the days per month (beginning from the right).
In article <upfjl6$1vmfh$1@dont-email.me>,
Gerry Jackson <do-not-use@swldwa.uk> wrote:
On 31/01/2024 09:59, Anton Ertl wrote:
minforth@gmx.net (minforth) writes:
...Hans Bezemer <the.beez.speaks@gmail.com> writes:
: days/month 15662003 swap 1- 2* rshift 3 and 28 or ;
Even my dumb compiler (TOS cached) already translates this to:...
0000000000406242 <mf_DAYSslashMONTH>:
406242: 4c 89 e0 mov %r12,%rax
406245: 41 bc b3 fb ee 00 mov $0xeefbb3,%r12d
40624b: 48 8d 44 00 fe lea -0x2(%rax,%rax,1),%rax >>>> 406250: 49 89 c4 mov %rax,%r12
406253: 41 bc b3 fb ee 00 mov $0xeefbb3,%r12d
406259: c4 42 fb f7 e4 shrx %rax,%r12,%r12
40625e: 4d 89 27 mov %r12,(%r15)
406261: 41 bc 03 00 00 00 mov $0x3,%r12d
406267: 49 8b 07 mov (%r15),%rax
40626a: 83 e0 03 and $0x3,%eax
40626d: 49 89 07 mov %rax,(%r15)
406270: 41 bc 1c 00 00 00 mov $0x1c,%r12d
406276: 49 89 c4 mov %rax,%r12
406279: 49 83 cc 1c or $0x1c,%r12
40627d: c3 retq
Yes, this is a case (straight-line code) where existing Forth systems
do well. Let's see:
gforth-fast (development):
$7FA5FDC99158 lit 1->2
$7FA5FDC99160 #15662003
7FA5FD93F812: mov r15,$08[rbx]
$7FA5FDC99168 swap 2->1
7FA5FD93F816: mov $00[r13],r15
7FA5FD93F81A: sub r13,$08
$7FA5FDC99170 1- 1->1
7FA5FD93F81E: sub r8,$01
$7FA5FDC99178 2* 1->1
7FA5FD93F822: add r8,r8
$7FA5FDC99180 rshift 1->1
7FA5FD93F825: mov rax,$08[r13]
7FA5FD93F829: mov ecx,r8d
7FA5FD93F82C: add r13,$08
7FA5FD93F830: shr rax,CL
7FA5FD93F833: mov r8,rax
$7FA5FDC99188 lit and 1->1
$7FA5FDC99190 #3
$7FA5FDC99198 and
7FA5FD93F836: add rbx,$48
7FA5FD93F83A: and r8,-$10[rbx]
$7FA5FDC991A0 lit 1->2
$7FA5FDC991A8 #28
7FA5FD93F83E: mov r15,$08[rbx]
$7FA5FDC991B0 or 2->1
7FA5FD93F842: or r8,r15
$7FA5FDC991B8 ;s 1->1
7FA5FD93F845: mov rbx,[r14]
7FA5FD93F848: add r14,$08
7FA5FD93F84C: mov rax,[rbx]
7FA5FD93F84F: jmp eax
iforth lxf SwiftForth x64 vfx64
pop rbx dec ebx -8 [RBP] RBP LEA DEC RBX
lea rbx, [rbx -1 +] shl ebx, 1h EEFBB3 # 0 [RBP] MOV SHL RBX, #1 >>> lea rbx, [rbx*2 0 +] mov eax, #EEFBB3h RBX DEC MOV RCX, RBX >>> mov rcx, rbx mov ecx, ebx RBX SHL MOV EBX, #00EEFBB3
mov rbx, $00EEFBB3 d# shr eax, cl RBX RCX MOV SHR RBX, CL >>> shr rbx, cl and eax, #3h 0 [RBP] RBX MOV AND RBX, #03 >>> and rbx, 3 b# or eax, #1Ch 8 [RBP] RBP LEA OR RBX, #1C >>> or rbx, #28 b# mov ebx, eax RBX CL SHR RET/NEXT
push rbx ret near 3 # RBX AND
; 1C # RBX OR
RET
- anton
How does this simple lookup solution compare?
: d/m s\" 0\x1f\x1c\x1f\x1e\x1f\x1e\x1f\x1f\x1e\x1f\x1e\x1f" drop + c@ ;
: x 13 1 do i d/m . loop ;
x 31 28 31 30 31 30 31 31 30 31 30 31 ok
Four year period is better:
2 : | OVER , + ; : 5m 31 | 30 | 31 | 30 | 31 | ;
3 DATA TABLE ( start of month within leap period) -1
4 31 | 28 | 5m 5m 31 | 28 | 5m 5m 31 | 29 | 5m 5m
5 31 | 28 | 5m 5m , : T[] CELLS TABLE + @ ;
Perhaps not, but for me it does. Let's talk about expectations since
we all have them.
A non-Forth programmer acquaintance said he thought it (Forth) wasn't
a HLL at all - more like assembler (and he was well-versed in asm). >Apparently even asm coders have expectations and straying too far
doesn't go down well. Hence prefix assemblers in forth, $ prefix
to denote a hex number, recognizers etc. When Mitch Bradley suggested >parsers h# f# for hex and float respectively one could hear the
proverbial pin drop. Personally I'd wear it in a forth environment but >finding another so-inclined would be difficult. Harder still would be >finding an app end-user that tolerated Albert's approach to command-line >parsing. Giving end-users what they expect is the best policy. They
don't care what language the app was written in or in making things easy
for the programmer.
On 5/02/2024 10:15 pm, albert@spenarnc.xs4all.nl wrote:<SNIP>
Seriously, what Mitch and I are doing is close to classical Forth.
I don't change any thing about parsing. I just introduce A PREFIX flag
that allows matching a dictionary entry if it is merely a prefix of
another word. The result is that `` H# 0A '' can be collated to
`` H#0A ''. The world has not noticed yet that it amounts to a netto
simplification of the Forth systems.
Not that simple if the interpreter and headers need changing. At the
time of ANS many forths already supported floats and hex in the form
we know. Changing that would require a strong argument. In practice
200x only added quoted characters. The latter being redundant it was
looks over substance.
Out of curiosity: How do we postpone `` H# 0A '' ?
Out of curiosity: How do we postpone `` H# 0A '' ?
-marcel--
In article <0c5c6838a692f81cab2239d84212245a@www.novabbs.com>,
mhx <mhx@iae.nl> wrote:
Out of curiosity: How do we postpone `` H# 0A '' ?
That is the reason you don't us that type of prefixes, and
that you avoid postponing arbitrary parsing expressions.
What is simple about H#0A ? H# 0A is simple because it requires no
system changes. But it also contradicts the notion forth understands numbers. If it's ok for forth to differentiate doubles from singles,
why not floats, hex etc.
On 8/02/2024 1:10 am, albert@spenarnc.xs4all.nl wrote:
What is simple about H#0A ? H# 0A is simple because it requires no
system changes. But it also contradicts the notion forth understands >numbers. If it's ok for forth to differentiate doubles from singles,
why not floats, hex etc.
albert@spenarnc.xs4all.nl wrote:
In article <0c5c6838a692f81cab2239d84212245a@www.novabbs.com>,
mhx <mhx@iae.nl> wrote:
Out of curiosity: How do we postpone `` H# 0A '' ?
That is the reason you don't us that type of prefixes, and
that you avoid postponing arbitrary parsing expressions.
Yes. Say I want to postpone a number and store it in a rewritten
colon definition. Not only do I have to parse the parsing
expression `` H# 0A '' in the original, I have to store it
in the rewritten definition as `` H# 0A '' again, because
it is too dangerous to say `` 0A '' or `` 10 '' and
of course I can't use `` $0A '' or `` #10 '', much less
`` H#0A '' :--)
-marcel--
IMHO there isn't anything wrong with a standard conforming system
that has an humpty-dumpty facility to redefine or define words that recognize `` H#0A '' for what I want it to mean.
How many compiler/languages support this?
AFAIK if an application required
an interpreter, the programmer wrote one. That has to be better than >shoe-horning forth's interpreter to do it.
"I don't like the idea of a Forth, old or new, that does everything." - Moore
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 475 |
Nodes: | 16 (2 / 14) |
Uptime: | 19:51:50 |
Calls: | 9,487 |
Calls today: | 6 |
Files: | 13,617 |
Messages: | 6,121,093 |