00:00:00 --- log: started forth/04.07.04 00:39:03 hey, I wrote some documentation! 00:39:40 the cool thing about writing documentation is you don't have to debug it so much 00:46:17 --- join: qFox (C00K13S@cp12172-a.roose1.nb.home.nl) joined #forth 00:54:23 --- join: crc (crc@0-1pool176-6.nas6.philadelphia1.pa.us.da.qwest.net) joined #forth 01:31:17 --- join: MorgothDc (~morgoth@gw-bdi-3.ticom.pl) joined #forth 01:34:32 * crc greets MorgothDc 01:35:26 Hell[o] 01:38:14 --- join: Serg (~z@193.201.231.126) joined #forth 01:41:06 * crc greets SDO 01:41:13 s/SDO/Serg/ 01:41:15 :-) 01:41:50 hi 01:42:34 yesterday i had a great battle w/ poorly designed website ^) 01:44:02 * crc hates poorly designed sites 01:44:18 me too, but i won finally 01:44:45 What was your battle? 01:44:48 i cleared the URL's and uploaded PhpMyAdmin to hack SQL database 01:45:27 * crc hates SQL databases 01:45:38 the damn thebmaster was demanding $100 for writing "add publication" script 01:45:50 now they can do it for free ;) 01:45:55 Good 01:46:03 Free things are good 01:46:26 * crc is doing some web programming with RetroForth :-) 01:46:28 this is the major lawer company engaged in some "loud" lawsuits ;)))) 01:46:45 I see 01:47:04 I'm not fond of lawsuits, except in extreme cases 01:47:17 ame too 01:48:29 I'm trying to figure out how to use RetroForth from within Apache :-) 01:48:48 i came to them for free consult (graduates offer this, as learning practice), helped a little w/ Win98 ... 01:49:28 good lawers are valuable people to make friends with ;)))) 01:50:01 --- quit: MorgothDc (Read error: 104 (Connection reset by peer)) 01:50:30 why not wider useg gforth ? 01:50:33 mod_forth, he-he ;) 01:51:00 1) I don't like gForth 01:51:27 2) I can't recompile gForth on the remote server 01:52:02 3) I can't add mod_forth as I don't manage the server 01:52:15 so how do u script in Forth ? 01:52:25 #!/usr/bin/myforth 01:52:26 ? 01:52:46 Right now I have a PHP script that calls RetroForth, redirecting the page source into the interpreter 01:52:46 no, no 01:52:58 RetroForth doesn't support command line arguments 01:53:27 i say write mod_forth on your home machine for general use ;) 01:53:44 or does it exist already ? 01:54:17 I'm not doing this for my home computer! I want to use RetroForth to generate the HTML for http://www.retroforth.org 01:54:35 hmm... 01:55:06 does it have powerful string manipulation library, what is the must for webscripts ? 01:55:26 No powerful string manipulations in RetroForth 01:55:46 hmm.. so how do u script w/o so ? 01:56:54 http://www.forthfreak.net/wiki/index.cgi?WikiWrittenInForth 01:57:22 won't follow - Xpensive traffic ... 01:57:46 --- nick: Serg -> Serg[GPRS] 01:57:56 I have a PHP wrapper that calls RF and redirects the source page into it 01:58:18 ok, ok 01:58:20 system("./rf <".$page); IIRC 01:59:16 --- quit: Herkamire ("lots of progress on herkforth tonight. now time for bed") 01:59:19 * Serg[GPRS] can't imagine script w/o regex, split and Perl hashes 02:00:56 --- join: crc_ (crc@0-1pool176-4.nas6.philadelphia1.pa.us.da.qwest.net) joined #forth 02:01:10 my scripts are pretty simple 02:01:17 --- quit: crc (Read error: 104 (Connection reset by peer)) 02:01:22 --- nick: crc_ -> crc 02:02:15 I'm basically using a simplified, wiki-like, markup language written in RetroForth and want to convert it to HTML on the fly 02:02:29 aha 02:02:38 * crc wants Apache to call RetroForth, redirecting the page name as input for .FML pages 02:02:57 i'd rather use XML 02:03:30 XML is a bloated piece of crap 02:03:31 * Serg[GPRS] likes to invent funny tags 02:03:56 Since the markup are written in Forth, I can add new ones at will anyway 02:05:00 * Serg[GPRS] eating, pause 02:11:11 It's mostly working now :-) http://www.retroforth.org/RF.fml 02:35:01 --- quit: Serg[GPRS] (Read error: 110 (Connection timed out)) 03:11:40 The FML code has now been updated to work with the Apache loaded scripts :-) 03:17:35 ." Hello from " * ." RetroForth 7.0 " * ." and " / ." FML!" / cr 03:17:50 * crc just pasted into the wrong window :-( 03:59:19 --- quit: aum_ () 03:59:25 --- quit: arke ("VACATION BYE 3 WEEKS!!") 04:57:18 --- quit: crc ("Sleeping...") 05:43:31 --- nick: lalalim_ -> lalalim 05:49:50 --- join: tathi (~josh@pcp02123722pcs.milfrd01.pa.comcast.net) joined #forth 06:30:38 --- quit: SDO (Read error: 110 (Connection timed out)) 07:47:48 someone on linux wanna help me out plz? 07:47:57 need something built 07:47:58 With? 07:48:14 * Robert hides. 07:48:25 oh no, i saw that! 07:48:51 according to this guy, it should be piss easy 07:51:41 :) 07:51:50 why don't you do it yourself then? 07:51:55 i dont have linux 07:52:08 appearantly this stuff needs to be assembled on linux 07:52:12 i dont know :\ 07:52:25 so...then what are you going to do with it? 07:52:26 i just want a bootable ciforth >:( 07:52:37 the thing ought to create a bootable image 07:52:42 ah, ok. 07:52:51 linuxfree! :p 07:58:48 well, if I had an x86 box I'd help :) 08:00:03 Hrm. 08:00:09 Well, I'll make it if it's easy 08:00:19 you dont have a x86 box? 08:00:20 :\ 08:00:25 how's that possible? :) 08:00:30 Robert> k, i'll send the package 08:02:57 qFox: I have a dual-G4 PowerMac running Gentoo GNU/Linux. That's my only machine. 08:03:03 I'm quite happy to have it that way :) 08:03:44 * Robert looks around 08:03:56 10 machines. But nothing that sexy. 08:04:10 otoh, nothing that expensive either ;) 08:05:09 i have um, an intel, a celeron, and a bunch of 486 and p33/p66's 08:05:15 i believe all x86 :p 08:05:35 unless my laptop isnt, its compaq, you never know what they might have done with it :p 08:09:36 --- join: fridge_ (~fridge@dsl-203-33-165-169.NSW.netspace.net.au) joined #forth 08:15:17 I got a few non-x86 computers. 08:15:33 And one x86-but-non-IBM-compatible one, using the i80186. 08:25:09 --- quit: fridge (Read error: 110 (Connection timed out)) 09:57:28 --- join: kc5tja (~kc5tja@66-74-218-202.san.rr.com) joined #forth 09:57:33 --- mode: ChanServ set +o kc5tja 09:58:02 Hi 09:58:06 Howdy. 09:58:20 Just doing some work on the Kestrel. 09:58:35 I'm thinking it's time to switch to blocks for source code now that the emulator is halfway stable. 10:00:10 What did you use before? 10:00:24 The emulator and its assembler are written using files. 10:00:39 And for now, will remain as files. 10:01:13 But since the code governing the text cursor will inevitably make it into the Kestrel Forth ROM image, I think it's best to store it in a format that Kestrel Forth itself can read. :) 10:05:01 OTOH, there is a certain convenience that files do afford: the ability to keep the OS sources in a source code management system. 10:07:14 Actually, you know what? 10:07:20 I think I *will* eschew blocks in favor of "files." 10:07:53 In the same spirit as blocks, I'll treat the disk space as a virtual address space (same basic goal as orthogonal persistence). 10:08:18 But instead of rigid 1K blocks in that address space, I'll treat it as a flat address space. 10:08:43 To store data in the space, you need to allocate a chunk from that space (chunks are always contiguous, therefore, as with the result of "malloc" in C). 10:10:04 Individual objects in the disk image would be referenced by a unique integer -- "formatting" the disk involves just clearing the disk's object table. 10:10:25 So an entire application's code can be loaded with something like 5 LOAD. 10:10:55 where 5 refers to object #5, not block #5. 10:12:14 To load an object into memory for manipulation, you'd say something like "5 LOCK", which locks object 5 into RAM. 10:12:49 ciforth uses a similar system, except everything is loaded from one "file" (in the end the result is the same i guess) 10:13:03 You manipulate the object, then call "DIRTY" to mark the object as having been modified. 10:13:42 Then "5 UNLOCK" would unlock the region from memory. If a swap-out needs to be done, the status of the dirty bit would be used to determine whether a write-back is necessary. 10:13:57 --- join: Herkamire (~jason@h000094d30ba2.ne.client2.attbi.com) joined #forth 10:14:05 qFox: let that one file be the whole harddrive. 10:14:11 yeh 10:14:18 And ciForth isn't unique -- PC/GEOS was doing this back in 1983. 10:14:26 And it is a **FAST** OS. 10:14:39 I'd say GEOS on a 286 compares easily with a Pentium II box running X11. 10:16:49 --- join: fridge (~fridge@dsl-203-33-162-127.NSW.netspace.net.au) joined #forth 10:17:29 And yes, GEOS stored its "virtual memory" images in files. In fact, "saving" a file in GEOS simply flushed the VM state to the VM file. 10:17:34 oh no i didnt mean it was the first, i'm just saying.. 10:17:43 "Opening" a file simply changed VM files. 10:17:45 Yeah, I know. 10:17:57 I'm just saying -- GEOS had a damn advanced persistence model. 10:19:07 :) 10:21:33 persistence is cool 10:22:00 Herkamire: I'm thinking of changing to an object database-style of storage for my Forth instead of using plain blocks. 10:22:12 kc5tja: :) 10:22:34 cool 10:22:36 This solves several nagging problems. 10:22:53 First, it's more flexible, but at the added cost of code complexity in the Forth kernel. 10:22:53 which problems? 10:23:06 --- quit: fridge_ (Read error: 113 (No route to host)) 10:23:16 If I were to write a web browser in Kestrel Forth, for example, I need some way of storing web pages. 10:23:30 I'm having some issues with blocks, and I'm curious if others have he same 10:23:33 Problem is, I'll also need some way of storing images, etc. 10:24:20 All in all, even if web page sizes are all given in advance, it's still a very difficult problem to determined _a priori_ how much space to allocate for storing the page data during viewing. 10:25:29 Therefore, what's needed is a storage system that can accomodate variable length, uncertain, potentially even *growing* amounts of storage on-the-fly. 10:25:38 yeah 10:25:57 it seems to me something like that would make some programming project monumentally easier 10:26:24 I'm also looking to store source code in this format as well. 10:27:04 right 10:27:05 And think of the benefits too: the ability to directly reference a *raw* binary image (e.g., font data or icon data) right in the source code itself (something I've *ONLY* seen implemented for GEOS in the Commodore 64!!). 10:27:32 :) 10:27:33 : QuitIcon _actual picture here_ ; 10:27:49 yeah :) :) 10:27:54 herkforth will be like that more or less 10:28:49 I don't know if I will show a definition for data anywhere, but when you put your cursor on the name of the date (ie anywhere it says QuitIcon) it will display the data 10:29:50 I hope to have a zooming interface before I do pictures, so that's a ways off, but it's not that far off to have text and tables working this way 10:30:26 I actually am thinking that I don't want a full-bore ZUI. 10:30:43 I want a gigantic, variable-sized desktop -- e.g., a desktop that effectively spans an infinite plane. 10:30:58 All content on the desktop appears at the same depth. 10:31:20 But to navigate, I can scroll the mouse past the edges of the screen, OR, I can zoom out to get a bird's eye view. 10:31:47 why don't you want to do ZUI? 10:31:53 It's too hard. 10:32:24 ahh 10:33:00 It also requires floating point arithmetic (or, at the very least, costly double-precision integer arithmetic) to get any kind of precision, and even THAT is finite. 10:33:16 right 10:33:23 I haven't thought about that yet 10:33:37 So my desired desktop is more a compromise solution. 10:33:46 Panes, panels, tiles, and lots of physical space. :) 10:34:05 cool 10:34:41 ion is pretty cool. I really don't have much to complain about 10:36:09 The only think I complain about is it shanghai's too many keyboard controls. I always have to switch out of Ion and into Amiwm whenever I want to run any applications that depends on lots of control key combinations that Ion subsumes for itself. 10:36:39 Remapping the keys in Ion only partially solves the problem. It's not a total solution. 10:36:51 control keys? 10:37:10 all my ion keys use alt.... I probably remaped all/most of them though 10:37:24 Control keys in the controlling sense of the term, not CTRL. 10:37:56 the only time I have trouble with ion and software vying for keys, is when software wants to use F-keys 10:37:57 If I could somehow get Ion to use the Windows keys instead of ALT, that would be of extremely great help. 10:38:16 yeah, I want ion to use the apple key :) 10:38:43 I think I did that with sawfish 10:42:02 Hmm...I can't possibly think of any additional words for this object system to use. 10:42:23 * Tomasu is back (gone 12:06:41) 10:42:25 NEWREC ( u -- n ) -- Allocates a new record of size 'u', and assigns to object ID 'n'. 10:42:33 DISCARD ( n -- ) -- Discards record 'n'. 10:42:49 LOCK ( n -- a u ) -- Locks record 'n' in RAM; returns its current address and size. 10:42:59 UNLOCK ( n -- ) -- Unloads record 'n'. 10:43:16 DIRTY ( n -- ) -- Marks record 'n' as being modified. 'n' must be locked; otherwise, this is ignored. 10:43:48 Maybe a GROW and SHRINK word to change the size of a record. But that's *it*. 10:45:14 cool 10:46:42 Of course, should an error occur (e.g., attempt to grow a record too large, or not enough RAM to lock a record), how to handle that? 10:47:23 right 10:47:33 I'll probably just use call-backs to implement handlers for those cases. 11:02:05 Does libc preserve any (which?) registers on x86? 11:02:55 I think it does, but I don't know which ones. Your best bet is to assume all registers, except for EAX and EDX, are modified by libc. 11:03:13 EDX:EAX is of course modified, but it's also the C return registers. :D 11:03:43 OK, thanks. :) 11:09:55 Damn, time to get some food. 11:26:15 --- join: SolarFire-| (SolarFire@pD9545D0F.dip.t-dialin.net) joined #forth 11:43:42 back 11:44:01 Hi again 11:44:03 --- quit: SolarFire (Read error: 110 (Connection timed out)) 12:05:33 Actually, I kind of thought of a different idea. 12:06:34 Let's assume we have normal "blocks". For the sake of argument, let's further say a block is 1024 bytes long, as it currently is. 12:06:53 Prepare for flashbacks to the Commodore 64 running GEOS, because this is essentially the VLIR file concept. 12:07:58 We can identify a file as being a block which refers to other blocks. A single 1K block, using 4-byte pointers, can reference 256 other blocks containing data -- thus, a one-deep hierarchy would allow files up to 262,144 bytes. 12:08:39 Another way of looking at this, though, is that a file consists of 256 1K records. 12:08:58 If we allow these records to be variable length, then we end up with a case where a single file is allowed to have 256 records of effectively infinite length. 12:09:24 To make things very, very simple, we load the entire record into memory, and if necessary, write it back out in its entirety. 12:12:04 Thus, we can create fairly sophisticated structures of arbitrary size by creating a sequential chain of blocks for each record. 12:12:28 There still would need to be a way to monitor which blocks are actually in use or not though 12:13:03 (don't mind me -- I'm just thinking "out loud.") 12:13:12 kc5tja: sounds good 12:13:30 hey folks 12:13:39 you've gotta implement a filesystem on top of blocks one way or another 12:13:49 (as that's how disks work) 12:13:55 Yes. 12:14:35 But, my goal trivially simple to implement as possible, while still retaining as much usability as possible. 12:17:18 Damn, I can't type anymore. :( 12:18:11 http://www.zimmers.net/geos/docs/vlirfile.txt -- at any rate, this is a page describing the C64 GEOS VLIR file structure. 12:29:50 --- join: crc (crc@0-1pool88-109.nas48.philadelphia1.pa.us.da.qwest.net) joined #forth 12:31:23 --- join: blockhead (default@dialin-738-tnt.nyc.bestweb.net) joined #forth 12:32:41 re crc, blockhead 12:33:04 * blockhead performs a crc :D 12:33:10 hey kc5tja 12:34:14 hello kc5tja 12:34:20 crc: you hack retroforth right 12:34:39 how so? 12:35:39 * crc hopes he's getting finally it right 12:35:57 it was a question :) 12:36:20 Yes, I hack RetroForth 12:36:35 (Put a ? after the questions) 12:39:20 * crc only uses/hacks RetroForth, except when answering questions about other Forths 12:39:27 --- join: Sonarman (~matt@adsl-64-169-95-20.dsl.snfc21.pacbell.net) joined #forth 12:39:54 Hello Sonarman 12:40:02 hi crc 12:40:13 and everyone else :) 12:40:58 --- join: crc_ (crc@0-1pool176-33.nas6.philadelphia1.pa.us.da.qwest.net) joined #forth 12:41:07 * crc_ hates dialup 12:41:24 understandable 12:42:41 --- quit: crc (Nick collision from services.) 12:43:02 --- nick: crc_ -> crc 12:46:52 Is there a faster (free) x86 emulator than Bochs? 12:48:43 i don't know how complete it is, but there's plex86, which is a virtualization engine like VMWare: http://plex86.sf.net/ 12:51:49 --- join: proteusguy (~proteusgu@69.79.24.31) joined #forth 12:52:07 I'll try it 12:59:20 Only supports Linux :-( 12:59:45 What system are you on? 13:00:03 Windows right now 13:00:10 You might want to try DosBox too -- I'm not too sure how good it is though. 13:00:17 Ok 13:00:28 Well, let me clarify. 13:00:42 It appears good enough to run PygmyForth and, believe it or not, GEM. :D 13:00:45 And it runs Windows 3.1. 13:00:49 Wow 13:00:57 But as to how fast it is, that I can't judge. 13:01:01 GEM doesn't get emulated well in my experience 13:01:10 its too slow for games though 13:01:14 Though it was a nice system back in the day... 13:01:20 crc: GEM emulates just fine. 13:01:25 The problem is intrinsic in GEM itself. 13:01:38 GEM actually *BUSY WAITS* to see if you single- or double-click an icon. 13:01:41 Which is retarded. 13:01:45 That's the *one* thing I hate about GEM. 13:02:15 * crc spent several days getting GEM/3 running under FreeDOS a couple years ago 13:02:30 GEM ran under DosBox out of the box, no problems. 13:02:40 I have it on my box. :) 13:02:52 Although, I don't have any really good reason to use it -- no apps for GEM. 13:04:47 Oooh, I am *such* a cheater. :D 13:04:51 * crc is planning to set up copies of Syllable, ReactOS, and other OSes to test RetroForth under 13:04:53 Why? 13:05:28 ': cells if, b@, !a+, 1 #, -, cells ;' then, ;' 13:05:39 Because I use the CPU's B register as a local variable of sorts. 13:10:56 :-) 13:11:29 * crc has been writing a replacement for SEDForth inspired by your target compiler 13:13:18 damnit. this denotation stuff is embedded into the core of all of ciforth. no way in hell i'll get it out unless i want to do a complete rewrite. gah 13:13:58 * slava got GLcolorforth running. 13:14:04 qFox: What actually *is* that whole denotation thing? 13:14:13 ah well i've finally figured that out 13:14:38 the author uses denotations to do stuff like accepting negative numbers 13:14:39 Well, note to self: explicit "loops" are twice as fast as counted loops in FTS1001 machine language. 13:14:39 -500 13:14:43 +3543 13:14:56 also an alias for S" is "string" 13:15:03 OK 13:15:05 attached words, so to speak 13:15:17 my problem is that it completely borks up search results 13:15:41 if the word you're looking for is not found, it'll go search in the denotation vocabulary for "a shorter match" 13:15:54 so if you make a typo, it might still reply something 13:16:01 very annoying 13:16:12 So, " is a word that maps to S"? 13:16:23 no i dont believe it does, hold on 13:16:37 heh, in fact S" maps to " 13:16:57 : S" POSTPONE " ; 13:17:22 ' is in this voc as well, so are ^ and & 13:17:38 OK, that's all very confusing. 13:17:39 its like a big weed 13:17:43 yeah well 13:17:57 at least i understand now, and will just try to live with it 13:18:13 its not terribly bad, although its not very forthish i think 13:18:33 "whatever" doesnt feel natural to forth 13:18:35 imo 13:18:40 * kc5tja nods 13:18:57 but its not really an obstruction i guess 13:19:12 just dont like 0-9 and A-F being in the dictionary 13:19:52 but tearing it out will ruin NUMBER or (NUMBER) or whatever 13:20:08 So, if you have a number like "156", and of course 156 isn't found, then it will execute word "1", which parses the "56" out and understands to push the value 156 on the stack? 13:20:11 kind of funny 13:20:31 i dont know exactly, but yeah it will execute 1 13:20:46 and possibly parse the rest and execute 5 and 6 as well 13:20:58 It won't make any sense to execute 5 and 6. 13:21:01 : 1 13:21:01 -1 IN +! (NUMBER) POSTPONE SDLITERAL 13:21:01 ; IMMEDIATE ( DENOTATION) 13:21:11 Oh, I see. 13:21:29 So it backs the input pointer to the '1' again, and just executes (NUMBER). 13:21:43 yeah 13:22:06 which makes me believe that it cannot handle BASE>17 13:22:21 Probably not in any meaningful way. 13:22:21 (ok its not required, but...) 13:22:48 s/meaningful/convenient/ 13:22:50 so the main loop, probably doesnt even contain number, just parsing and executing. 13:23:21 Almost certainly true. 13:23:37 It sounds like he tried to over-optimize his interpreter loop. 13:23:48 possibly 13:24:01 * fridge bangs his head on the desk 13:25:06 S[ ] OK 256 BASE ! 13:25:06 S[ ] OK YU 13:25:06 YU? ciforth ERROR # 12 : NOT RECOGNIZED 13:25:56 i dont get it though. why would you really want to optimize your outer compiler 13:26:03 I have no idea. 13:26:06 the only time you use it is for defining words 13:26:14 its not like it matters for running programs 13:26:15 It seems to me that he was just toying with an idea. 13:26:25 he seems to be quite successfull tbh 13:26:44 "string" does LOOK nicer then S" string" 13:27:17 i remember somebody in here was talking about a similar idea a while back. dont remember who though 13:27:29 Sure as hell isn't me. :) 13:27:33 hehe 13:27:40 ohwell. 13:27:59 * qFox crosses "remove denotation from ciforth" from todo list :p 13:28:55 how much space did 32bit cover? addressing wise 13:29:39 In terms of 8-bit bytes, 32-bit addresses can cover over 4.2 billion of them. 13:29:44 i'm wondering whether this LOAD word will load 1k block x from the drive it was booted from, or that it can do only a limited number of blocks 13:30:33 S[ ] OK SEE 468B 13:30:33 : 4 13:30:33 -1 IN +! (NUMBER) POSTPONE SDLITERAL 13:30:33 ; IMMEDIATE ( DENOTATION) 13:30:42 this is waht i mean. 13:30:48 crc: Sorry, I knew you reported about the inspiration of my cross compiler, but I was engrossed in the other conversation. If you need any questions answered about the cross compiler, I'll be happy to help. 13:31:38 qFox: This reminds me of the "catch-all" e-mail accounts that we're *constantly* trying to get our customers at work to NOT use. Then they wonder why their mail accounts get loaded with 100MB+ of spam on an almost daily basis. 13:31:49 hehe 13:31:57 (for some of them, this is no joke; they routinely bring their segment of the network down. :() 13:32:09 what could the B suffix mean, its probably used for NUMBER 13:32:27 I just see it as a hexadecimal number. 13:32:38 but the b? 13:32:44 $468B 13:32:49 ohhh 13:32:52 d'oh 13:33:12 i forget that ciforth always shows SEE in hex 13:33:12 But if the base is 10, I doubt that (NUMBER) would have anything to do with that "B". :D 13:33:30 nah SEE always shows in hex, no matter what BASE is 13:37:34 I should setup a whitelist filter for my email 13:38:12 pity I can't for work 13:38:45 I'd like to use a Bayesian mail filter that works on word pairs instead of individual words. 13:40:26 Well, I have a cursor which is fixed at location (0,0) on the screen in the Kestrel. Hardly very impressive. 13:40:55 does it accept input? 13:40:55 :) 13:41:32 No. 13:41:59 the emulator has a facility for a really dumb, super fake UART which I use for testing and debugging purposes, but eventually it'll take its input from the SDL window itself. 13:42:46 It doesn't even do interrupts yet. 13:44:44 --- quit: tathi ("leaving") 13:45:40 hm, what will i like better. an OK that shows the entire stack, or a . for every stack item 13:47:23 hm you also have to get used reading his sources: 13:47:24 : DO-DEBU 'NEW-OK >DFA @ 'OK >DFA ! 'NEW-THRU >DFA @ 'THRU >DFA ! ; 13:47:52 appearantly, this works :p 13:48:02 DEBU? 13:48:13 debug 13:48:21 my bad 13:48:47 changes the OK to show all stack items (just does S. before printing OK) 13:49:42 --- nick: Tomasu -> Typosu 13:50:28 --- nick: Typosu -> Tomasu 13:53:13 shall i use this denotation style of programming, or keep away from it... 13:53:51 Personally, I would prefer to stay away from it. But that's just me. 13:54:58 hm its tempting. 13:55:04 its there, i cant get rid of it... 13:55:51 at least i know understand what 'INTERPRET meant (i saw it in a SEE once, but i couldnt figure out why i couldnt find it :) 13:58:51 'nother reason why this is so confusing btw 14:01:39 that code is very silly 14:01:47 why not just add ".s" to the word that prits "OK" 14:02:38 Herkamire: I see a pattern with his coding style: *heavy* use of vectored execution. 14:02:53 It looks like he's striving to eliminate any and all occurances of the word "IF" from his source code. 14:03:07 who's coding is this BTW? 14:03:16 The author of ciforth. 14:03:19 i can concur with that. 14:03:22 its... 14:03:23 Whoever that is. 14:03:32 albert van der horst 14:03:36 sounds aweful 14:03:39 dutch d00d 14:03:52 sounds like it makes it very very hard to know what code exactly is being executed 14:04:09 hm, now i figured htis denotation stuff out, its ok 14:04:25 just not truely forth 14:04:46 vectors can be useful, as they provide a layer of abstraction, but I don't like it when they hide that layer 14:05:19 i'm not sure why he's changing THRU for this though 14:05:43 oh wait. i do. its for LOAD 14:05:45 nvm 14:05:51 Maybe he's printing out the current block being loaded. 14:06:03 in debug mode, the header of the block is printed 14:06:08 header being the first line 14:06:23 Yep. I have a word INDEX that prints the first lines of a range of blocks. 14:06:35 but i'm circumventing that block file and merely using INCLUDED in the windows port of ciforth 14:06:44 I use it as one would use DIR in DOS; it works amazingly well. 14:07:11 kc5tja: cool :) 14:16:40 OK, here's the deal. 14:17:11 I'm going to provide a binary-only image of Kestrel Forth, basically called "OS System 0". It's sole purpose is to bootstrap the first real version of the Kestrel's first OS. 14:18:32 kc5tja: how's the text cursor coming along :-)? 14:18:45 It's not. 14:19:32 It WOULD be coming along if I didn't have to god damned mother fucking debug variable access code every fucking time I want to use one. >>:( 14:19:55 --- join: Topaz (~top@spc1-horn1-6-0-cust217.cosh.broadband.ntl.com) joined #forth 14:21:22 here is the new factor parser, written in factor: 14:21:22 : parse ( str -- ) 14:21:22 [ end? not ] [ scan word, ] while ; 14:22:36 slava: you and your fancy lists... 14:23:15 : parse scan word, end? if; parse ; 14:23:58 it simplifies the interpreter 14:24:07 ("if;" is equivelent to "if exit then") 14:25:04 ??? your definition is almost twice as long as mine. how is that simpler? 14:25:52 your definition has 9 words/symbols in it. mine 5 14:27:25 --- quit: crc ("http://www.retroforth.org") 14:27:36 but your definition of the control structure words has to do assembler etc 14:31:22 huh? 14:31:59 WOOOHOOO!!!! 14:32:05 Herkamire: by the way [ end? not ] counts as 1 'symbol' 14:32:07 I got a keyboard controllable text cursor. 14:32:12 kc5tja: excellent! 14:32:17 slava: no it doesn't. that's 4 14:32:25 kc5tja: yay! 14:32:36 --- quit: blockhead (Read error: 113 (No route to host)) 14:32:43 ok, so mine requires assembler capabilities. 14:32:54 I don't understand how you can have a forth without this 14:33:03 Herkamire: well in memory that definition of 'parse' is a list with 3 elements, first 2 elements are lists, last one is 'while' 14:33:24 Herkamire: i have a small kernel written in C (well 'small' being 1,400 lines of C) 14:34:13 --- join: crc (crc@0-1pool176-1.nas6.philadelphia1.pa.us.da.qwest.net) joined #forth 14:34:15 It's amazingly quick too. It takes about four seconds or so to clear the screen on my box (to be expected when you have a 640x480, 256-color display for a CPU that is only running about 0.5MHz), but actual cursor updates on the screen are amazingly rapid. It is about as fast as a Commodore 128 in 80-column mode. 14:34:18 right, and the first two list elements in turn are a list of two elements. so you have 3 nodes, and 5 leaves. 14:34:38 Herkamire: the kernel provides linked lists, arrays, words, numbers. factor code cannot directly access memory it can only use the objects provided by the kernel. 14:35:07 slava: can't access memory? 14:35:24 no. the kernel has equivalents of ALLOT, @ and ! but they are not exported 14:35:35 why not? 14:35:40 how do you do threading? 14:35:48 the inner interpreter? its in C. 14:36:00 no, how do you define words that call other words 14:36:07 give an example 14:36:26 : bla 1 + . ; : blabber 8 bla ; 14:36:39 the parser transforms text into nested lists of numbers and words 14:36:47 how do you represent these definitions in a form you can execute them? 14:36:57 as a list 14:38:00 Man, an 80x60 screen can hold a lot of information. :) 14:38:06 can't you do something like this: : if; if rdrop then ; 14:39:31 i don't like that style 14:39:38 i prefer the only return from a word to be the implit one at the end. 14:39:39 slava: or don't you give access to the return stack? 14:39:46 no, i have >r r> 14:40:02 the return stack doesn't store addresses though, but lists to execute. 14:40:10 slava: that severely limits the types of control constructs people build 14:40:15 why? 14:40:25 i already have all kinds of branching, loops, iteration 14:40:30 you cannot exit out of a loop in the middle 14:40:42 you write in recursive style 14:40:48 yep 14:40:48 loop exits make code less clear anyway 14:40:53 you can use continuations too 14:41:01 I can't... 14:41:22 In Forth, the return stack represents partial continuations. 14:41:41 Implementing back-tracking and other advanced concepts in Forth is actually pretty darn easy. 14:42:26 slava: do you have "if"? 14:42:32 yes. 14:42:44 when ( cond list -- ) \ execute list of cond is true 14:42:50 unless ( cond list -- ) \ execute list of cond is false 14:43:00 ifte ( cond t f -- ) \ execute t or f depending on cond 14:43:04 s/of/if/ 14:43:11 cond is on the stack right? 14:43:14 not a list 14:43:16 yes, as is the list. 14:43:31 t [ "hello" print ] when 14:43:37 't' is the canonical true object but anything that's not 'f' is considered 't'. 14:43:45 then... there is some word that turns TOS into a list? 14:43:54 why would you do that? 14:44:01 the list is already on the stack 14:44:04 if i write [ 1 2 3 ] 14:44:09 the stack contains 1 entyr, the list [ 1 2 3 ] 14:44:25 say you are... programming 14:44:25 But if you want to dynamically build a list, then there has to be some means of constructing one. 14:44:36 1 [ 2 3 ] cons 14:44:39 ==> [ 1 2 3 ] 14:44:42 [ 1 2 3 ] [ 4 5 6 ] append 14:44:45 ==> [ 1 2 3 4 5 6 ] 14:44:52 slava: is there a word to turn TOS into a list? 14:45:01 Herkamire: i don't understand 14:45:07 You don't need one. 14:45:11 [ ] cons will work. 14:45:17 I compute a number which is on the stack 14:45:28 make a list wiht 1 element? 14:45:32 I want to execute some code if this number happens to be 42 14:45:37 how do you do that? 14:45:52 : foo-if-42 42 = [ "woohoo!" print ] when ; 14:45:57 42 foo-if-42 14:46:33 cool 14:46:57 why would you print straight away? 14:46:59 Herkamire: Your question was kind of ambiguous -- I thought you were looking to make a single element list. 14:47:01 at compile time 14:47:11 qFox: [ and ] are not like forth [ ] 14:47:14 oh 14:47:15 kc5tja: you answered my question. 14:47:16 oki :) 14:47:38 qFox: [ and ] just construct lists of literals at parse time 14:47:42 kc5tja: I meant replace TOS with a list containing just TOS 14:47:45 okay 14:47:47 * kc5tja notes it's Slava's turn to be in the limelight today. :D 14:47:51 Herkamire: 5 unit ==> [ 5 ] 14:47:55 Herkamire: : unit f cons ; 14:47:59 :) 14:48:09 slava: I assume : f [ ] ; 14:48:12 Herkamire: f is the empty list, so cons'ing 5 onto the empty list gives [ 5 ] 14:48:14 slava: As it would be in Lisp? 14:48:17 kc5tja: yes. 14:48:35 there's car and cdr like in lisp too. 14:48:56 * kc5tja nods 14:49:04 unit :) ok 14:49:31 Neat. My cursor code is 165 words (660 bytes) in size. 14:50:00 kc5tja: nice :) 14:50:04 If I do say so myself, that's not too shabby. 14:50:14 Considering the assembler puts out non-optimal code. 14:50:16 that's nice. 14:50:22 'no room for bugs' 14:50:27 HAH! 14:50:31 :) 14:50:37 I just spent most of today squashing a few bugs. 14:50:41 Hopefully there aren't any more. 14:50:47 i bet its a fun assembler to program in. 14:51:05 It could be better. But it looks so much like Forth it may as well be Forth. 14:51:11 exactly 14:51:24 wtf 14:51:29 But because it is a separate compiler and the like, it does make programming bugs very easy to crop in. 14:51:53 S[ ] OK DO-OK. 14:51:53 DO-OK.? ciforth ERROR # 11 : WORD IS NOT FOUND 14:51:53 ' DO-OK. 14:51:53 S[ 33566 ] OK BYE 14:51:54 once boxforth is underway, will there be any need to use the assembler at all? 14:51:57 (ignore the BYE) 14:52:15 he cant find the word but he can find it? :\ 14:52:25 slava: The assembler is an intrinsic component of the Forth compiler -- you'll be using it without even knowing it. 14:52:35 kc5tja: i mean directly coding in assembler. 14:52:38 All primitives, DUP, DROP, SWAP, +, -, AND, XOR, etc. are all opcodes. 14:53:02 directly linked i presume :) 14:54:10 slava: well, like I said, the assembler is so integrated into the language that you'll be using it every time you code a primitive word. 14:54:16 s/code a/use a/ 14:54:32 that is much cooler than the standard endless layers of assembler/linker/high level language/etc 14:54:36 kc5tja: anytime you compile anything right? 14:54:43 Herkamire: Correct. 14:55:08 Just be aware that you only have a stack depth of 16 for the data stack and the return stack, and you'll be all set. :D 14:55:15 oooh i think i know. i'm doing tick in compilation, while i should do it in interpretation mode 14:55:16 Herkamire: one advantage of using lists instead of immediate words to do control flow is that you can use loops and conditionals outside of colon definitions. 14:55:29 kc5tja: what happends if you overflow? 14:55:34 slava: You lose data. 14:55:41 exception? 14:55:44 slava: Nope. 14:55:50 ok. 14:56:03 slava: that's cool 14:56:13 Unless people complain too much, in which case I'll have to move the "Forth" data and return stacks into memory. 14:56:18 I was wondering what the advantage was :) 14:56:35 : DO-OKS ( -- ) [ ' OKS ] LITERAL CHANGE-OK ; 14:56:37 Herkamire: It's also easier for high-level optimizers to work with too. 14:56:44 what could be the cause of this word not being able to be executed? 14:56:57 qFox: see if it has ['] 14:57:17 Herkamire: i have a stack effect inference library for factor that works with conditionals, recursive words, and other weird stuff 14:57:18 it does, ['] postpones it, but why would i want to do that 14:57:36 Herkamire: the same is possible with forth but i think it would be harder 14:57:41 qFox: [ ' OKS ] LITERAL is equivalent to ['] OKS 14:57:57 really..? 14:58:02 qFox: : foo ['] bar ; should be equivelent to: : foo [ ' bar ] literal ; 14:58:11 Herkamire: also 'see' becomes trivially simple, just list iteration really. 14:58:14 --- join: blockhead (default@dialin-250-tnt.nyc.bestweb.net) joined #forth 14:58:21 blockhead! 14:58:33 hey slava 14:58:46 did you implement your : and ; yet? :) 14:58:48 Herkamire> no, shouldnt ['] do it at the moment the word is called, where-as [ ' bar ] literal does it at compile time? 14:58:57 stack effect inference... that sounds scary 14:58:58 slava: yes but they don't work :D 14:59:10 qFox: no, they do the same thing 14:59:16 Herkamire: well it starts from a fixed set of known effects for things like dup, drop, +, etc. 14:59:27 then i'm miss-understanding the word POSTPONE :\ 14:59:29 Herkamire: eg it will infer that 'dup *' has effect ( x x -- x ) 14:59:30 -s 14:59:34 Herkamire: and more complex cases too :) 14:59:40 qFox: postpone can be confising. 14:59:45 Herkamire: i started adding type inference but its not done yet. 15:00:24 --- quit: Topaz ("Leaving") 15:00:31 i thought postpone compiled the xt of the word even if it was an immediate 15:00:48 slava: 1) why? 2) what about words that don't always return the same number of stack items? 15:01:01 Herkamire: 1) to ease debugging 2) it detects these cases and gives up 15:01:15 slava: :) 15:02:45 qFox: not quite. These are effectively equivelent: : foo postpone bar ; : bla foo ; and this: : bla bar ; 15:02:55 qFox: and it doesn't matter if bar is immediate. 15:03:28 I440r doesn't like postpone 15:03:31 hm ok 15:03:52 but : bla bar ; and : bla [ bar ] literal ; are not the same... 15:04:02 --- quit: SolarFire-| (Read error: 104 (Connection reset by peer)) 15:04:28 Correct. 15:04:52 : ['] ' postpone literal ; immediate 15:05:01 yes thats how it is defined 15:05:24 qFox: postpone does not give you an XT... it compiles code to call something 15:05:26 So when ['] is executed, the first thing it does is ' -- it grabs the address of the next word in the input stream. 15:05:31 It then compiles it as a literal. 15:06:20 : x [ ' y ] literal ; is the same as : x ['] y ; ? 15:06:25 oh input stream 15:06:42 qFox: yes 15:07:03 --- join: doublec (~doublec@coretech.co.nz) joined #forth 15:07:34 postpone has different behavior for immediates. 15:07:47 for immediates it compiles a call to the word (that would otherwise be called at compile time) 15:07:54 --- quit: skylan (Connection timed out) 15:07:55 but isnt postpone supposed to actually make an immediate behave like its not an immediate? 15:08:02 for non-immediates, it compiles code that will compile a call to the word. 15:08:12 qFox: no 15:08:29 Postpone causes the action of a word to be "postponed" one level of execution. 15:08:48 but, what level is that then? :\ 15:08:52 there's compile 15:08:53 For a compiled word, this means its behavior is forced to occur when the word *containing it* is executed (e.g., at run-time). 15:08:59 postpone effectively equivelent: : foo postpone bar ; : bla foo ; and this: : bla bar ; 15:09:01 and execution. i dont see any other :\ 15:09:09 For an immediate word, this means it's compiled to execute at load-time. 15:09:10 etc. 15:09:29 ok but 15:09:36 It's very simple, BUT, it's awfully confusing until you get the distinction of edit-time, compile-time, and run-time down. 15:09:59 no wait, i think i did have it right, and maybe not being clear about the difference 15:10:36 if you do : foo [ ' bar ] literal ; it will run at compile time. it will get the xt of bar at compile time 15:10:36 oh crap, my example is wrong. 15:10:43 foo must be an immediate right kc5tja ? 15:10:52 You can postpone a non-immediate word. 15:11:10 so if somebody redefines bar after compiling foo, nothing hcanges. 15:11:16 : foo postpone bar postpone baz ; immediate 15:11:18 Doing so will compile code into the **COMPILING** definition to compile code into the **COMPILED** definition. 15:11:24 but if you use ['], wont the newest foo be used instead? 15:11:41 now ": bla foo ;" is equivelent to ": bla bar baz ;" 15:11:48 qFox: No, it's the same, because ['] runs at *COMPILE-TIME*, not at run-time. 15:12:03 Remember that ['] is immediate. 15:12:06 but then when would ' run? 15:12:11 yes 15:12:16 but ['] doesnt look it up 15:12:17 qFox: ' runs when ['] is run. 15:12:22 ok ok ok 15:12:30 if ran 15:12:31 When ['] is executed, the *first* word in [']'s definition is '. :) 15:12:37 when will the word be looked up with ['] ? 15:12:44 When ' is run 15:12:44 when you compile it? or when you use it? 15:12:52 Once again: compile-time. 15:12:58 That's the point of immediate words. 15:13:04 Execute **NOW**, not when the word is run. 15:13:13 Hence the distinction between compile-time and run-time. 15:13:29 hehe :) I remember being confused by this stuff 15:13:32 yes 15:13:40 i understand immediates 15:13:47 It is an incredibly simple concept, but it's simplicity is what makes it so hard for people to grok. 15:13:47 but whats the point of ['] ? 15:13:51 * kc5tja sighs 15:13:52 :) 15:13:55 no serious 15:14:02 ['] postpones ' 15:14:06 The point of ['] is to save you typing. 15:14:08 but they are still executed at the same time 15:14:09 No, it does NOT postpone './ 15:14:31 : ['] ' postpone literal ; immediate 15:14:45 It *executes* ', which gets the next word's XT. 15:14:55 OH 15:15:01 ' is NOT an immediate? 15:15:01 It then compiles it as a literal in the currently defined word (via postpone literal). 15:15:05 No. 15:15:08 christ 15:15:09 qFox: correct. ' is not immediate 15:15:22 neverfsckingmind 15:15:25 :) 15:15:34 ['] is kind of the compile-time equivilent of ' 15:15:41 yar 15:15:47 * blockhead swears never to put "postpone" in his forth 15:15:49 you will see this convention (surrounding by []) for other words 15:15:52 In general, though not always if FOO is a non-immediate word, it's immediatized equivalent is [FOO]. 15:15:54 :D 15:15:54 i was under the impression that ' was an immediate 15:16:12 hence i was sure there had to be a difference between ['] and ' 15:16:19 :P 15:16:24 :) 15:16:25 slava, sounds like you are making great progress with the native vm of factor 15:16:41 OK, now that I re-organized my code to be a bit more modular, now said code won't run anymore. :( 15:16:46 doublec: well there isn't much code to write 15:16:47 I remember being Very suprised to found out that some words (like create) were not immediates. 15:17:00 Herkamire: well create reads from the input stream no? 15:17:02 kc5tja: if it ain't broke: dont' fix it :D 15:17:04 so why would it be immediate/ 15:17:09 blockhead: Wrong answer. 15:17:16 slava: yes, but it's not immediate 15:17:21 I'm organizing it for a reason. 15:17:23 --- join: skylan (~sjh@vickesh01-4554.tbaytel.net) joined #forth 15:17:33 kc5tja: with what results :D 15:18:01 With the results that if I want to edit cursor location-handling code, I can type "vim os/cursor/location.ef" on the command line, and it'll work. 15:18:05 in this code: ": foo create ;" create is not executed (until/unless you call foo) 15:18:26 OK, now that I re-organized my code to be a bit more modular, now said code won't run anymore. :( 15:18:34 so is it workign or not? 15:18:48 most of its already written for the java version i guess 15:19:07 You're taking my text out of context. 15:19:08 feh. lemme go finsih my forth or somethign 15:19:11 --- quit: blockhead ("laugha while you can, monkey boy") 15:19:51 OK, is it just me, or is everyone I talk to seemingly rather rude and snotty these days? 15:20:29 grrrr... text sources are such a pain 15:20:50 kc5tja: both :) 15:21:01 kc5tja: a little of both 15:21:23 Damn, Herkamire, you don't have to be a prick about it. ;D 15:21:30 (notes smiley) 15:21:39 (before I somehow do MORE sociological damage) 15:21:40 noted =) 15:22:08 "I'm not bringing you down am I? I'd hate to think I was bringing you down." 15:22:15 Herkamire: why are text sources a pain? 15:22:17 Haha :) 15:22:41 because they're harder to get right and verify correctness. 15:22:42 slava: because then I have to write a parser, and a generator 15:23:00 I'm adding data/string support to herkforth 15:23:11 I'm trying to get around some of the annoyences of text sources 15:23:24 but I still need to export to and import from text sources 15:23:48 so it's frustrating that even though I can make a better system, I still have to deal with this crap like encoding 15:24:07 maybe one of these days I'll give up on being able to bootstrap from text files... 15:24:39 --- join: SDO (~SDO@68.64.143.12) joined #forth 15:25:18 anyway, in my data support, the system keeps track of data (length, type, data) 15:25:44 --- join: jdrake (irc_user@CPE00045afdd0e8-CM014410113717.cpe.net.cable.rogers.com) joined #forth 15:25:48 OK, *THAT* was weird!!! 15:25:54 But I now know why it crashed. 15:26:14 It all keeps coming back to the MachineForth assembler -- I keep *forgetting* to put #, after all my numeric literals. :D 15:26:27 how is your head 15:27:14 jdrake: Better. I still feel some pressure, but there is (currently) no pain. 15:27:15 --- quit: crc (Client Quit) 15:28:16 --- quit: slava ("using sirc version 2.211+KSIRC/1.3.10") 15:28:28 re SDO 15:30:14 i dont get it 15:30:15 : DO-OK. ( -- ) ['] OK. CHANGE-OK ; 15:30:27 what could be the cause of tihs word not being found when ran 15:30:31 but found with tick? 15:30:42 I can think of no reason. 15:30:55 Last I checked, most Forth systems use ' to locate the word to execute to begin with. 15:30:56 and the words above and below it work fine 15:31:05 OOH, does ciforth support something like headerless words? 15:31:20 headerless words? 15:31:31 It's possible that after DO-OK. is defined that some word headers are being removed to save memory. 15:31:31 i am actually suspecting denotations as the cause 15:31:47 Perhaps, I don't know. 15:31:48 i know nothing about that 15:31:58 but then the other words would also bork up 15:31:59 thing is 15:32:06 : OK. ( -- ) PRINT-OK DEPTH 0 DO [ DECIMAL 46 ] LITERAL EMIT LOOP CR SPACE ; 15:32:06 : DO-OK. ( -- ) ['] OK. CHANGE-OK ; 15:32:06 : OKS ( -- ) .S PRINT-OK CR SPACE ; 15:32:06 : DO-OKS ( -- ) ['] OKS CHANGE-OK ; 15:32:06 : OKOK ( -- ) PRINT-OK CR SPACE ; 15:32:07 : UNDO-OK ( -- ) ['] OKOK CHANGE-OK ; 15:32:08 --- join: slava (~slava@CPE00096ba44261-CM000e5cdfda14.cpe.net.cable.rogers.com) joined #forth 15:32:12 all the words with - dont work.. 15:32:16 my /var filled up and X crashed 15:32:27 and all the other words do work 15:32:29 i symlinked /var/tmp to /usr/tmp and now its better. 15:33:10 slava doing emerge with a small /var ? 15:33:32 this is freebsd 15:33:37 oh 15:35:57 --- quit: doublec ("Leaving") 15:38:39 qFox: perhaps CHANGE-OK doesn't work? 15:39:02 qFox: or maybe you're not calling it right 15:40:00 its giving me the error word not found 15:40:05 my theory with data in herkforth, is that you should not have to parse constant data. 15:40:05 OK, well, now that I got semi-reasonable cursor movement going, now I can start to work on actual text rendering routines. 15:40:10 and i created change-ok myself 15:40:12 I just wish I didn't have to hardcode colors. 15:40:20 : PRINT-OK ( -- ) [ S" Ok" ] DLITERAL TYPE ; 15:40:20 : CHANGE-OK ( dfa -- ) >DFA @ ' OK >DFA ! ; \ dea of "new" OK printing word 15:40:23 it should be stored in the format you want to use it in (unless you want it compressed or something) 15:40:30 and you should be able to use it where it is 15:41:09 kc5tja> you could limit colors in the console to 16 15:41:36 qFox: That doesn't help. And it's fruitless anyway; there is no 'text mode' -- it's all graphics. 15:41:45 oh 15:42:05 Right now the colors are hardcoded; blue for background, and light blue for text (think Commodore 64 color scheme). 15:42:23 However, the cursor is yellow, because I use the XOR operator to draw the cursor. 15:42:43 Herkamire> maybe its not that word that's not found, but OK. instead 15:42:57 even though its being defined right before 15:43:35 : DO-OK. ( -- ) ['] OK. CHANGE-OK ; is correct right? no need for " or anything? 15:43:36 * kc5tja is really starting to not like this denotational stuff, and I'm not even USING it. Just reading about it is just chaffing my skin. 15:43:47 qFox: Correct. 15:43:51 what is denotations? 15:43:52 mmm 15:43:54 heh 15:44:00 pass. 15:44:13 qFox: See IRC logs; it was answered earlier. Not easy to explain. 15:44:27 (he means you slava ;) 15:44:44 Whoops, I must have instinctively hit TAB after typing Slava. :D 15:44:51 Sorry 15:46:47 it appears not to be a denotation problem though 15:46:49 ['] OK. 15:47:08 is the cause of the error message (the error message system is a bit primitive, but thats ok) 15:47:31 primitive as in, not being very clear of the exact point of error 15:48:01 * Tomasu is away: stuff 15:49:33 hey, why is ['] returning an error at runtime and not compilation time? 15:49:43 Because ['] is immediate. 15:49:54 didnt you just try to explain me that ['] ran at compile time? 15:50:03 What's actually happening is "postpone" is generating the error. 15:50:21 Because you're not compiling, there is no place for postpone to compile the literal word to. 15:50:29 oh 15:50:40 gah. it should just notify me at compile time >:( 15:51:48 : OK. ( -- ) PRINT-OK DEPTH 0 DO [ DECIMAL 46 ] LITERAL EMIT LOOP CR SPACE ; 15:51:48 ' OK. . 15:51:48 : DO-OK. ( -- ) ['] OK. CHANGE-OK ; 15:51:57 this is in the file that's being included 15:52:16 there are no errors, and an adr is printed, yet do-ok. still returns not found error 15:53:03 Just for the total hell of it, try replacing ['] OK. with 'OK. in DO-OK. See if that works. 15:54:12 good idea, but same result 15:54:30 I don't know then. I can only assume that ciForth is somehow broken then. 15:54:35 this ciforth sounds bizarre ;) 15:54:35 Because that *should* work. 15:55:10 or CHANGE-OK is broken 15:55:19 : CHANGE-OK ( dfa -- ) >DFA @ ' OK >DFA ! ; \ dea of "new" OK printing word 15:55:40 uhoh 15:55:41 I don't know what that DFA stuff is 15:55:43 wtf? It uses ' raw?? 15:55:47 Data Field Address 15:55:50 aka >BODY in ANSI. 15:56:19 no that was me actually :\ i copied a word and altered it slightly. but the original source had 'OK 15:56:31 so i just added a space not thinking ahead 15:56:38 OK, I am now very confused. You will have to ask Van Der Horst. His Forth is patently foreign to me. 15:56:45 no 15:56:48 : CHANGE-OK ( dfa -- ) >DFA @ ' 15:56:49 you are right 15:56:52 right there 15:56:55 aye 15:57:00 thats why i said uhoh 15:57:01 :p 15:57:30 this is the original: 15:57:30 : DO-DEBUG 15:57:30 'NEW-OK >DFA @ 'OK >DFA ! 15:57:30 'NEW-THRU >DFA @ 'THRU >DFA ! ; 15:57:57 i merely added a space between ' and OK to make it look more forthish, not thinking about compiler rules and such 15:58:12 heh 15:58:17 'OK is ['] OK 15:58:27 aye 15:58:34 thats denotation for ya 15:58:37 Herkamire: Yes, but, it apparently doesn't work in all cases. 15:58:46 kc5tja: that sucks 15:58:47 So that's why I'm unable to help with this problem. 15:59:06 kc5tja> no it does. i tried your suggestion with a different word 15:59:29 If it works with one word, it should work with ALL words. 15:59:29 because i thought that that word caused the problem 15:59:29 when in fact it was this word 15:59:36 I see no logical reason why OK. is not being able to be used in this context. 15:59:59 it works now. 16:00:22 OK. I'll go back to coding up some text output code for my Kestrel then. :) 16:00:26 hehe 16:00:29 i'm going to bed 16:00:33 'night. :) 16:00:35 one more day of painting 16:01:01 painted about half the house twice in about 5 days on my own. not bad 16:01:07 --- quit: I440r ("Leaving") 16:01:18 but my body feels like crap right now 16:01:19 --- join: I440r (~mark4@216-110-82-1.gen.twtelecom.net) joined #forth 16:01:42 --- quit: jdrake (Read error: 110 (Connection timed out)) 16:01:48 --- quit: skylan (Read error: 60 (Operation timed out)) 16:03:54 Whoever says Forth isn't modular needs to examine my organizational structure for my OS. 16:04:15 kc5tja, link? 16:04:19 Uhm, I've never heard anyone saying that. 16:04:39 None yet, but when I'm done, I'm going to make it available via the Kestrel-0.1.x.tar.gz, where x is whatever version number is appropriate. 16:05:10 btw, appearanlyt all denotations are immediates (Which is why i thought ' was an immediate earlier). at least all the words in the current denotation vocabulary are. there are however two definitions of ' (and others). so calling ' only calls the denotation ' if no others are found (or if the denotation vocabulary is the first in the voc-search order...) 16:05:20 Robert: It's a common piece of mis-information spouted by proponents of statically typed languages. 16:06:02 qFox: If you do SEE 'OK. what is displayed? 16:09:54 the denotation definition of ' 16:10:10 (because 'OK. is not a word) 16:10:33 Right. Does the denotation definition of ' have the word "immediate" listed anywhere? (I'm just curious) 16:10:40 yep 16:10:47 all denotations in this voc are immediates 16:10:54 dont know whether that's a requirement 16:11:00 i believe not 16:11:03 cp /home/kc5tja/Projects/65816/forth/fed.fs . 16:11:04 err 16:11:05 oops 16:11:56 in all fairness, he could have elaborated on this denotation thing in his docs 16:12:05 its hardly mentioned at all, while its impact is rather huge 16:12:19 as well as the level of being embedded in ciforth 16:12:25 * kc5tja nods 16:14:48 ohwell. nite 16:14:49 --- quit: qFox ("this.is.not a.real.netsplit") 16:22:06 --- join: jdrake (irc_user@CPE00045afdd0e8-CM014410113717.cpe.net.cable.rogers.com) joined #forth 16:22:15 wb jdrake 16:23:00 * Tomasu is back (gone 00:34:59) 16:23:05 hi jdrake 16:23:45 wb Tomasu 16:24:04 :) 16:27:22 merci my friends 16:31:12 --- join: crc (crc@0-1pool176-4.nas6.philadelphia1.pa.us.da.qwest.net) joined #forth 16:42:32 --- join: tathi (~josh@pcp02123722pcs.milfrd01.pa.comcast.net) joined #forth 16:42:39 re tathi 16:42:42 re crc 16:42:50 re kc5tja 16:42:53 hi kc5tja 16:46:43 I have a text cursor for the Kestrel now. :) Working on some basic text output routines now. 16:46:49 cool 16:46:50 Everything is still very primitive. 16:46:59 * crc will have to try that emulator sometime... 16:47:45 crc: You mention you run FreeBSD. On x86? Do you have SDL? And can you compile gforth 0.6.2 for it? (You do need the ffcall library to be installed *before* gforth 0.6.2 is installed for it to work) 16:48:41 It'll also work on PowerPC too. 16:48:50 But some code changes need to be made (simple to do, just not obvious) 16:51:05 you can say that again :) 16:51:14 --- join: crc_ (crc@0-1pool176-4.nas6.philadelphia1.pa.us.da.qwest.net) joined #forth 16:51:26 tathi: That's why I wanted you to write those instructions that I still haven't received. :D 16:51:50 Since I don't have a PPC box to test things with, I don't know exactly what you required to get it to run. 16:51:52 kc5tja: I'm using Linux at the moment 16:51:55 oh shoot 16:52:06 thought I'd sent that to you. 16:52:37 --- quit: crc (Read error: 104 (Connection reset by peer)) 16:52:43 --- nick: crc_ -> crc 17:04:29 tathi: Thanks. 17:04:38 I'll try to reformat that and put that on my site later this evening. 17:05:07 sure. 17:08:50 --- join: lalalim_ (~lalalim@p508AB11D.dip.t-dialin.net) joined #forth 17:17:05 --- join: TheBlueWizard (TheBlueWiz@pc1edn1d.ppp.FCC.NET) joined #forth 17:17:05 --- mode: ChanServ set +o TheBlueWizard 17:17:25 hiya all 17:19:20 --- join: crc_ (crc@0-1pool88-63.nas48.philadelphia1.pa.us.da.qwest.net) joined #forth 17:19:43 re TheBlueWizard 17:20:09 Well, current status update: "emit" *wants* to put something on the screen. Unfortunately, it's putting garbage on the screen, and I can't figure out why. 17:20:17 But at least it's doing so at the current character position. 17:20:51 hiya kc5tja 17:20:53 :) 17:21:13 --- quit: lalalim (Read error: 110 (Connection timed out)) 17:21:43 I've got herkforth maintaining pointers to the data section properly accross bootstraps 17:25:08 : round-up ( a b -- a2 ) dup >r 1- + r@ / r@ * ; 17:26:43 --- nick: Tomasu -> Kirby 17:26:47 : round-up ( a b -- a2 ) dup >r 1- + r@ / r> * ; 17:27:01 --- nick: Kirby -> Tomasu 17:30:49 Oh so close, and yet, oh so far away too. 17:31:04 It now prints the top half of each character cell correctly, but the bottom half is still total garbage. :( 17:31:36 ugly... this is a bit better: : round-up ( a b -- a2 ) tuck 1- + over / * ; 17:32:09 kc5tja: weird :) 17:32:37 kc5tja, sounds like progress nonetheless 17:33:10 slava: Yeah, but there is no logical explanation for it. :( 17:33:40 I stand corrected, there is. 17:33:45 * kc5tja sighs 17:33:50 Now how to fix it... :/ 17:34:08 chars are 8x8? 17:35:54 --- quit: crc (Nick collision from services.) 17:36:04 Fixed. 17:36:08 --- nick: crc_ -> crc 17:36:09 Yes, they are 8 pixels by 8 pixels. 17:37:48 what was the problem? 17:39:04 kc5tja: can I see your font? 17:39:56 http://www.falvotech.com/img/text-test.png 17:41:08 slava: Side effects from words trashing the A and B registers; I keep forgetting that @, and !, both use the B register to address memory. 17:41:11 :) 17:41:19 aha 17:41:41 outsmarted by your emulator :) 17:41:45 screencap looks cool. 17:41:51 Well, I'm still used to x86 Forth. 17:41:52 :) 17:41:53 what font is that? 17:42:17 slava: It's my own custom font, based on a rough mix of Atari ST, Commodore 64, and both new-school and old-school "topaz.font" from AmigaOS. 17:43:04 But, that being said, I'm rather amazed at how fast I managed to get text output working. 17:43:19 :) lets hope this is a sign of things to come 17:43:37 Right now, it's hardwired to put out white-on-black, but it is not hard to change (which is precisely what I'm going to do now). 17:43:45 expect the screen shot to change shortly, if I get this working. :D 17:44:38 kc5tja: nice font! 17:44:44 BTW, the font editor for this system (which is the same font editor I used to attempt to make a Forth for the Commodore 64) is written for GForth. 17:45:21 And, as are all my "makeshift, made-it-when-I-needed-it" tools, it's thoroughly undocumented. But reading the source is sufficient to let you know how it works and what keys to use. :D 17:45:29 Herkamire: Thanks. :D 17:45:37 kc5tja, is all the graphics done with SDL? 17:45:53 I was sceptical about how nice a font you could fit in 8x8. I'm impressed 17:46:07 is there such thing as tail call optimization with forth? 17:46:14 many do it 17:46:20 jdrake: my forth has it 17:46:35 ; does it automatically in herkforth 17:46:35 i think the simplest way is to have ; do a fixup if the previous compiled was a recursive call 17:46:53 slava: why only if it's recursive? 17:47:09 I change it if the previous instruction is a call 17:47:15 slava: Yes, all graphics are output via SDL. 17:47:43 Herkamire, sure, that works too. 17:48:06 Herkamire: It could actually be better, but you can largely thank the Amiga for providing me the visual inspiration. Also, to some extent, the Commodore 64, and the Atari ST to an even lesser extent. 17:48:24 kc5tja, do you have a library of words on top of SDL? 17:48:48 slava: A small library of sorts, but not in the "drawing API" sense. they're optimized for use with my emulator. 17:49:28 I do need to re-organize the software to make it easier to access though -- the code that is dependent on big- versus little-endian CPU is right in the middle of that small library. :) 17:49:29 ok. 17:49:36 I am very happy with the font that xterm/rxvt uses when you say: XTerm*font: 10x20 17:49:44 kc5tja, your cpu is big endian? 17:50:10 slava: My CPU is no-endian. Since the smallest addressible word size is 32-bits, the notion of "endianness" is irrelavent. 17:50:28 kc5tja, oh, i forgot. 17:50:35 kc5tja, how will you implement C@ C!? 17:50:45 slava: I don't. I place characters in their own cells. 17:50:46 or are those not needed? 17:50:54 ok 17:51:00 When I archive some string, I'll pack it into memory then. 17:51:12 kc5tja, you have to store it physically? That is worthy of knowing endianness. Because you are going to have to transfer data eventually somewhere. 17:51:17 so you still need words to pack/unpack strings? 17:51:53 jdrake: Endianness is important only when communicating with other computers or devices. The question slava asked was what endianness the *CPU* was. 17:52:01 slava: Correct. 17:53:12 being the cpu has to package the stuff up, then it is necessary to know what endianness it is 17:53:28 jdrake: What endianness is an 8-bit CPU/ 17:54:41 If the CPU sees only 32-bit quantities, period, then endianness is irrelavent. 17:55:30 When talking to I/O devices, however, since the software is responsible for selecting which bytes get put to an I/O port first, endianness is software-defined. 17:55:32 if I send data from a kestral box over a serial line to my mac, what order will it be in 17:55:42 What order do you want it to be in? 17:56:15 Bit-wise, it'll be big-endian (e.g., bit 31 is the most significant bit). 17:56:28 But as far as "byte endianness," well, that's an undefined concept to the hardware. 18:01:49 I think a good example of this is how font data is stored to optimize the software. 18:02:02 Each character is stored as two words (8 bytes). 18:02:13 But the scan lines of the font are not stored in an obvious manner. 18:02:24 how are they stored? 18:02:37 To facilitate rapid blitting to the screen, the font data is stored as | lineN+3 | lineN+2 | lineN+1 | lineN+0 | 18:02:45 --- quit: crc ("http://www.retroforth.org") 18:02:47 where each | ... | represents one 8-bit subfield of a word. 18:02:48 makes sense 18:03:18 Note that this is just the opposite as one would expect (N+0, N+1, N+2, N+3). 18:03:23 yup. 18:03:34 But it turns out to make display code noticably faster on my "0.5MHz" machine. 18:03:35 :) 18:03:54 well if it runs fast on your emulator, it will be blazing in silicon. 18:04:00 Yessir. 18:04:08 That's one of the advantages of having such a dog-slow emulator. :D 18:04:11 haha 18:04:23 tomorrow we hear that kc5tja downgrades to a 486, to do further optimizations :) 18:04:38 No need. I just update the SDL screen buffer more often. :) 18:04:57 I execute about 6,000 or so instructions before updating the SDL screen buffer. 18:05:03 That's about 1/60th silicon speed. 18:05:16 But the SDL screen updates in 1/60th of a second too. 18:05:37 Uugh, this means scrolling the screen is going to be abysmally slow. :/ 18:05:41 4 seconds minimum. 18:07:57 --- quit: tathi ("fireworks...yeah...whatever") 18:08:05 Although, by my math here, it may actually be slower than that. 18:08:17 Not accounting for subroutine invokation overheads, a full screen has 76800 words to update. 18:08:26 --- quit: proteusguy (Read error: 104 (Connection reset by peer)) 18:08:29 It takes about four seconds to update, thus, 19200 writes to memory are occuring, minimum. 18:08:49 And, actually, b@, !a+, is used, so we're looking at a minimum of 38400 instructions per second. 18:08:56 maybe add 'hardware' assisted scrolling to the emulator :) 18:09:02 That's roughly 0.0384MHz speed at that point. :D 18:09:09 --- join: proteusguy (~proteusgu@69.79.24.31) joined #forth 18:09:15 anyway in vga can't you scroll by changing the 'base' of the screen? 18:09:27 slava: I don't have infinite video memory. 18:09:35 doesn't it wrap around? 18:09:44 maybe i have this all wrong. 18:09:57 And if it did wrap around? 18:12:37 At any rate, most of this sluggishness comes because updating the video display takes up *WAY* more time than just writing to non-video memory. 18:12:52 (in the emulator, that is; in silicon, it'll be every bit as fast as normal RAM) 18:13:52 Note also that every time I write to "video RAM" in the Kestrel, I have to swap the byte order because the framebuffer is big-endian, while the x86 is little-endian. 18:14:16 Therefore, the PowerPC or MIPS version of this code (assuming both are in big-endian format) will definitely run much faster than the x86 version. 18:17:46 --- join: crc (crc@0-1pool88-55.nas48.philadelphia1.pa.us.da.qwest.net) joined #forth 18:18:12 out of curiosity, does your scrolling code have a little cell copying loop that occupies more than one cell-ful of instructions? 18:18:33 Yes. 18:18:48 However, I don't have scrolling implemented yet. 18:18:55 * TheBlueWizard wonders if it would be faster to "automate" such looping in hardware, like certain CPUs do 18:19:02 ok 18:19:07 But a single cell only has five instructions, so it's not much to play with. 18:19:10 * TheBlueWizard is perpetually curious 18:20:04 TheBlueWizard: Well, I can add such a feature to go beyond just one cell in the hardware (the 68010 dealt with four instructions, IIRC). 18:20:16 yeah...I personally like to pack as much instructions (e.g. 6 instructions, 5-bit each, etc...oh wekll) 18:20:35 Well, the assembler does this for you to a very, very large extent. 18:20:53 (due to lack of assembler intelligence, it has issues packing branch instructions, but otherwise, it vigorously packs prmitives) 18:21:15 I remember the DBnn instruction in 68010 is specially tailored if the destination is a previous instruction 18:21:26 Yes. 18:21:36 Maybe it was the 68020 that extended that to four instructions then. 18:21:47 I seem to recall one of the 680x0 series CPUs had a four-instruction "loop mode." 18:22:17 The FTS1001 is a very "dumb" CPU. 18:22:31 I expect its performance to fall midway between a 25MHz 68000 and a 25MHz MIPS-I. 18:22:46 But there are ways to optimize its execution later on, if needed. 18:23:13 hmm...don't remember anything specific about 68020 (samn, been a damn long time since I last messed with 680x0 stuff...and I always want to write a bang-ass interactive disassembler for 6502, 680x0, etc.) 18:24:23 if the HW optimizations proves trivial to implement and has serious impact on certain important parts (e.g. scrolling), then that would be worthy thing to do 18:25:03 kc5tja, 25mhz 68000 is not shabby at all. 18:25:10 kc5tja, my first machine was a 16mhz 68020. 18:25:19 and it booted in like 10 seconds (mac os 7) 18:26:09 slava: This machine will be at an OK prompt before the monitor warms up. :) 18:26:26 lcd monitor? :) 18:26:41 If the LCD monitors at work are any indication of the general state of the art, YES. 18:28:49 my EXECUTE is broken. 18:40:00 --- quit: proteusguy ("Leaving") 18:44:43 --- quit: crc (Client Quit) 18:48:15 Ahh, I didn't realize this until now, but it is possible to auto-detect screen size with the Kestrel. 18:48:40 255 255 at-xy at-xy? will return the size of the screen, less one in each direction (e.g., 79 59). 18:50:29 hic iacet forth, honoris causa 18:51:41 ? 18:52:30 copying phrases :-) 18:52:54 'here lies forth, for the sake of honour 18:53:20 hunc tu caveto C++ (beware this man ...) :p 18:53:47 Heheh 18:59:16 haud ignota loquor hic et nunc in gremio divino legis - forth: primus inter pares 18:59:25 that is probably an abomination 18:59:29 I say things that are known here and now in the protection of the divine law - forth: first among equals 19:02:02 w00t! I just guessed, and I managed to perfectly get the C64 color scheme by default. :D 19:02:22 screenshot? :) 19:02:31 just a second. 19:04:42 Same URL as last time. 19:04:52 http://www.falvotech.com/img/text-test.png 19:05:39 * kc5tja notes: $73737373 for foreground color mask, and $03030303 for background color mask. :D 19:06:05 looks familiar :) 19:06:14 :) 19:06:44 i guess now that text works you can start work on the compiler and outer interpreter? 19:06:49 or is there an intermediate step? 19:06:55 Again, the only real difference is the cursor, which is rendered via XOR, so it naturally looks a bit different. 19:07:57 There are a few intermediate steps -- I need to add support for 'defer and 'is, so I can properly compile code at the CPU entry points ($00 for reset, $10 for NMI, and $20 for IRQ). 19:08:05 So, for example, 19:08:15 0 org 'defer reset-ep 19:08:20 16 org 'defer nmi-ep 19:08:26 32 org 'defer irq-ep 19:08:27 ... 19:08:40 ' MyReset >body @ 'is reset-ep 19:08:48 ' MyNMI >body @ 'is nmi-ep 19:08:55 ' MyIRQ >body @ 'is irq-ep 19:09:03 makerom Foo.rom 19:11:30 It's important to remember that I'm doing all this with a target compiler -- the result of this target compiler is essentially that which a C or PL/M compiler would produce. So there are no word headers or anything of that nature. 19:13:03 when do the word headers get added? 19:13:43 For words to appear in the finished Forth image, I need to basically define them twice: 19:13:47 'public foo 19:13:56 ': foo ...etc... ;' 19:14:11 aha 19:14:35 'public just emits a word header structure. ': creates an assembler binding. The rest of the code as assembled as a matter of consequence. 19:15:23 I haven't quite figured out how I want to pack word names though. 19:20:26 Hey, maybe I should make a mock-up "environment", showing basic concepts of what it's like to use the Kestrel. 19:20:44 Although, instead of the function keys, I'd have to use the number keys. 19:20:54 (due to limitations and laziness) 19:21:07 oh fuck why did mozilla just stop working?! 19:21:32 --- quit: slava ("Leaving") 19:21:44 I'm thinking a bundle of three applications, all statically assembled together to make it look and sort of feel like a real Kestrel environment. 19:21:57 1. Character/Font editor. 19:22:12 2. Color Picker (borrowing heavily from the existing test-color-2.ef file) 19:22:24 3. And a simple character painter program. :-) 19:23:33 All keyboard controlled of course. 19:23:33 :) 19:23:42 oops -- didn't see slava leave. :/ 19:24:47 --- join: slava (~slava@CPE00096ba44261-CM000e5cdfda14.cpe.net.cable.rogers.com) joined #forth 19:24:53 I'm thinking a bundle of three applications, all statically assembled together to make it look and sort of feel like a real Kestrel environment. 19:24:59 1. Character/Font editor. 19:25:01 2. Color Picker (borrowing heavily from the existing test-color-2.ef file) 19:25:04 3. And a simple character painter program. :-) 19:25:06 All keyboard controlled of course. 19:25:10 :) 19:25:35 and block editor? 19:25:36 Something to let people play with -- a sales demo, so to speak. :D 19:25:56 It'd have to be with fake blocks. 19:26:00 No I/O emulation yet. 19:26:03 oh 19:29:41 I also need to determine what the upper 128 characters of the font are going to be like. Right now, they are totally blank. 19:31:33 I'm actually very excited by this. I'm very pleased to see how distinctly "home computer"-ish it is, despite it's 32-bitness. :D 19:31:46 And at the same time, it's totally unique too. 19:31:50 kc5tja: latin1 maybe? 19:31:57 Although inspired by the ZX-80 and the Jupiter Ace, it's *nothing* like it at the same time. 19:33:10 slava: I'd need to get a good representation of the character codes to draw something up. 19:33:19 And I can't guarantee I'll be able to get everything right. 19:33:21 But I can try. 19:33:26 i'd suggest leaving it blank for now 19:33:28 The Amiga's character set was distinctly Latin-1. 19:33:28 :) 19:33:36 maybe some line-drawing characters? 19:33:41 or is there no need for this? 19:33:55 I'm definitely going to put in some line drawing characters. 19:34:06 These are *definitely* going to be inspired by the Commodore 64's characters. 19:35:03 I'm also going to let the program support multiple character fonts too, although only one will be actively used by "emit" at any given time. 19:35:34 kc5tja, if your cpu will only know what is 32 bits, will that be the size of a character? 19:35:39 and that's easy because 'emit' just blits the font images right? 19:36:11 a combo of C-64 and IBM PC-ASCII box characters would do nicely...of course with 32 bit thingey, one needn't limit the character range to 0-255...can have 0-1024 19:36:12 jdrake: For speed, yes. But my character table only has enough room for 256 characters. 19:36:15 er, 1023 19:36:42 sounds like turing 19:36:46 TheBlueWizard: I don't have infinite amounts of RAM. A character table for 256 characters takes up 2KB. :) 19:36:53 in that language even a boolean was 32 bits 19:37:15 in my language characters are cell-width but get packed/unpacked by string accessor words 19:37:31 slava: I'm thinking of doing the same for when I implement TYPE. 19:37:31 which makes sense 19:37:38 The problem is figuring out the ideal character packing order. 19:38:27 I think I'm going to use the 3,2,1,0 ordering like I do for fonts. 19:39:22 kc5tja, do you have font data I could use freely in my own thing? (i don't want to implement freetype stuff quite yet) 19:39:43 jdrake: I just have the raw binary data for my 8x8 font. 19:39:58 that would be better then nothing 19:40:11 Do you want the fed.fs program used to create it as well? 19:40:20 sure 19:40:25 This way, you can tweak it if you want. 19:40:28 Okay, hold on... 19:40:35 /msg me an e-mail address I can send it to... 19:40:40 i might want to implement a forth interpreter sometime 19:41:24 Actually, never mind. I can just make it available via my website. 19:41:28 and a font would be useful, especially a nostalgic one. Kestrel layer might be nice too if practical 19:42:04 wget http://www.falvotech.com/downloads/fed.tar.gz 19:42:32 Kestrel "layer"? 19:42:41 I don't have any purely nostalgic font, unfortunately. 19:43:16 But I included the Kestrel's font. 19:44:44 layer - i.e. set of words that can perform many functions the same 19:44:53 i.e. easier to port 19:45:03 Oh, fed.fs is written to use gforth directly. 19:45:08 I don't have a Kestrel-resident font editor yet. :) 19:49:38 Interestingly enough, fed.fs was written about two years ago. 19:52:32 slava: Sorry, your question got buried. Yes, emit is just a highly specialized blitter. 19:52:56 \ fgpen (-a) Variable: current text foreground color 19:52:56 ': fgpen data $73737373 ,' 19:52:56 \ bgpen (-a) Variable: current text background color 19:52:56 ': bgpen data $03030303 ,' 19:53:09 ': f fgpen @, and, ;' 19:53:09 ': b com, bgpen @, and, ;' 19:53:09 ': colored ctab +, @, dup, f swap, b or, ;' 19:53:09 ': hi dup, $F0 #, and, 4 #, sr, colored !a+, ;' 19:53:09 ': lo dup, $0F #, and, colored !a+, ;' 19:53:11 ': l hi lo 8 #, sr, a@, 158 #, +, a!, ;' 19:53:14 ': 4l dup, @, l l l l drop, 1+, ;' 19:53:16 ': advance at-xy? swap, 1+, swap, at-xy ;' \ -- KLUDGE -- should belong in os/cursor/position.ef somewhere. 19:53:19 \ emit (c-) Emits character code 'c' at current character position. 19:53:22 ': emit offset 2*, stdFont +, 4l 4l drop, advance ;' 19:54:04 looks cool 19:54:13 4l draws four character rows (since four fits in a single stack cell). 19:54:30 hi and lo draw the two 4-bit halves (since 4 pixels fit in a cell as well!). 19:54:39 colored is responsible for getting the colors right. 19:54:47 f determines foreground color, and b the background color. 19:54:58 If I wanted to support transparent text, I'd change b. 19:55:08 Everything else stays pretty much the same as far as I can tell. 19:55:27 Oh, offset loads the A register with the framebuffer location of the current cursor location. 19:56:29 The phrase ctab +, @, converts a 4-bit binary word into a 32-bit byte-expanded form via a look-up table. 19:56:40 kc5tja: i'm almost done rewriting the factor parser in factor. written in java, it is a whopping 2000 lines (this includes the tokenizer and parsing word implementations). 19:56:47 guess how many lines in factor 19:56:54 16 19:57:04 not quite :) 90 19:57:07 :) 19:57:35 As you might expect, words that end in , are assembler opcodes. :) 19:57:57 i guessed :) 19:58:22 will this same ': ;' machinery work in boxforth to compile a new ROM image? 19:58:30 Yes. 19:58:37 neat. 19:58:38 This form of assembler is only about 150 or so lines long. 19:58:42 So it's really short. 19:59:05 see the file "asm.fs" in the Kestrel distribution. 19:59:26 Oops, I miscounted; wc -l says 203 lines. 19:59:48 But, many "lines" in the assembler are actually two lines. 19:59:50 : FOO 19:59:52 ...etc... ; 19:59:59 (e.g., Smalltalk-ish definitions). 20:00:24 bash-2.05b$ cat asm.fs | grep ^: | wc -l 20:00:24 41 20:00:25 :) 20:01:04 i tend to write that way as well. 20:01:30 I like the one-line-one-definition approach, personally, but because I was using files, I thought that the Smalltalk approach would have been better. 20:01:40 In retrospect, it didn't make that much of a difference for me. 20:04:47 If I count only colon definitions, variables, and data tables, the sum total comes to 49 "lines". 20:04:52 Not all that bad, if I do say so myself. :D 20:05:22 And there is serious room for cleaning up too. 20:05:31 Though I doubt it'll ever get smaller than 49 lines. 20:09:10 wahoo! just printed "Hello, World!" with herkforth's developing string code 20:09:21 Herkamire: I'm hot on your tail, buddy... :D 20:09:29 But, congrats. :D 20:09:33 kc5tja: hehe :) 20:10:30 (I wrote the obligatory hello-world program many months ago, but this is the first time it didn't involve ascii chars input in hex. 20:11:17 Anyone know how difficult it is to decode a PNG file? 20:11:40 Oh, what the hell am I saying -- I have SDL, and I have the ability to invoke C calls -- I'll just use libpng! 20:11:47 I'm only 1/4 done. I still have to easy way to generate data elements from herkforth 20:11:59 sdl_image 20:12:11 * kc5tja nods 20:12:29 My goal is to take that Kestrel logo I have sitting on my website and display that when the Kestrel boots into its Forth image. 20:13:47 * Herkamire goes to the kestrel website with a graphical browser 20:13:59 Underneath that, it'll say, "Kestrel Forth System X.Y.Z", "Copyright (c) 2004 Samuel A. Falvo II, et. al.", "Type LICENSE or AUTHORS for more information." 20:14:07 kc5tja, what is the format of the bin file? 20:14:15 jdrake: Raw memory dump. 20:14:32 is it possible to count on locations for characters? 20:14:37 jdrake: Each character is encoded as a sequential array of eight bytes ([0] is the top line, [7] is the bottom line.) 20:14:49 Yes. Location 0 is character 0, location 8 is character 1, etc. 20:14:58 well, gotta go...bye all 20:15:01 ok, that is all I need to know :-) 20:15:06 jdrake: n/p. :) 20:15:26 --- part: TheBlueWizard left #forth 20:15:28 I'm sure the Kestrel's font system will get more sophisticated with time, but not for a lloonngg time. 20:15:39 Herkamire: I don't have the third screen shot linked in yet. 20:16:09 But you can access it via the URLs I posted earlier. 20:18:02 the logo is in a screenshot you posted a link to? 20:18:29 No. 20:18:33 " "We all have a million file folders and you can't find anything," Jobs said during his keynote speech " ... hmm, nope, only 50k 20:18:38 The logo is here: http://www.falvotech.com/klogo.png 20:18:41 (the bottom one) 20:20:01 jdrake: Heheh :) 20:20:43 kc5tja, now that looks so commodorish 20:20:52 >:P 20:21:25 kc5tja: do you still use your wiki? I couldn't find any links to it from falvotech.com 20:21:38 kc5tja, isn't that font you use the same apple does? 20:22:04 Herkamire: Not at the present time. When Kestrel gets to be a usable product (via emulator), I'll redo the Kestrel wiki. 20:22:10 kc5tja: oh right. I remember seeing those logos. I strongly prefer the lower 20:22:25 jdrake: Nope. 20:22:30 that's a nice logo 20:22:44 jdrake: There are some similarities of course (you can only be so creative with 8x8 pixel matrices). 20:23:09 But over all, the characters come from the `topaz' font of the Amiga (both old and new), with a sprinkling of some C64 characters. 20:23:38 I like the logo too 20:23:50 For example, the "A" character comes from the old Topaz font, but the "C" comes from the new Topaz. @ comes from the C64 logo. 20:23:57 err, not logo, but font. 20:24:02 Too many discussions. :D 20:24:10 thanks. :) 20:24:16 I just hope I don't get sued. :D 20:24:21 I doubt I will, but... 20:24:50 get sued for what? 20:24:58 copyright infringement 20:24:58 Trademark infringement. 20:25:22 But, I seriously doubt that would ever happen. 20:25:25 http://www.infinitecat.com/infinite/cat-html/126.html 20:25:29 i wouldn't worry about it 20:25:38 If it does, I'll just make good on a cease-n-desist and just use new images with a new color scheme. Problem solved. 20:25:40 trademark infringement? what trademark exactly is that 20:25:51 The Commodore rainbow. 20:28:12 i couldn't find a trademark 20:29:21 In that case...bwaahahaha! 20:29:45 I do know the Amiga double-checkmark is still trademarked though, even though Amiga, Inc. doesn't use the image anymore. 20:29:52 jdrake: infinitecat... :) 208 of them! 20:30:16 jdrake: That's got to be the weirdest site I've ever seen on the web. I'll have to let my roommates know about it. :) 20:30:24 :-) 20:30:38 kc5tja: when did you get intersted in forth? 20:31:09 slava: I don't even remember. 20:31:18 slava: perhaps only 8 years ago? 20:31:18 what was your first forth? 20:31:20 pygmy? 20:31:22 Pygmy. 20:31:49 Then I tried Tom Zimmer's F-PC, but I had a rather violent reaction to that environment. :) 20:31:53 i'd love to see a pygmy-like forth for linux, i don't think gforth is it 20:31:57 Pygmy was just so much easier, cushier for me to use. 20:32:14 look at the definitions of words like : in gforth, its so complex 20:32:58 yeah. 20:33:28 Well, heck, just look at my definition for ': in my assembler. The thing doesn't even switch the Forth environment into compile-mode! 20:34:37 i saw a bumper sticker today: "If we aren't supposed to eat animals, then why are they made of meat." 20:34:46 that's old :) 20:35:01 if we aren't supposed to eat humans, then why are they made of meat? 20:35:03 doesn't degrade its humour :) 20:35:12 slava, who says that... 20:35:18 i do 20:35:18 can you come over for dinner tomorrow? 20:35:31 lol 20:36:38 Heheh :D 20:36:43 FORTH IF HONK THEN 20:37:08 you mean FORTH LOVE IF HONK THEN? 20:37:21 factor love? [ honk ] when :-) 20:37:42 (if (lovep 'lisp) (honk)) 20:39:49 Heh 20:59:13 if it's tourist season, then why aren't you allowed to shoot them? 21:01:24 brb -- grabbing some grub. 21:13:36 * Tomasu is away: tv 21:25:37 back 21:33:30 Well, I think I've made some major progress on the Kestrel's software base. I'll go ahead and commit this, and will update the website. 21:39:44 kc5tja: my text interpreter is working for some definition of 'working'. 21:40:00 Heheh 21:40:06 I'm not quite there yet. 21:40:18 I need to get the keyboard working before I approach the outer interpreter. 21:40:19 and i like that compared to the java factor, the native port is waiting for input as soon as I release the enter key at the shell! 21:40:27 Haha :) 21:40:29 java factor takes about 6 seconds to start. 21:40:38 hey, for Java, 6s isn't that bad either. : D 21:40:40 :D evne 21:40:42 even even 21:40:42 :) 21:41:10 my text editor takes that long to start. its ok for an editor but not for an interpreter that aims for maximum simplicty 21:42:03 * kc5tja nods 21:42:16 * kc5tja still can't believe how little it took to get the Kestrel to show test. 21:42:19 text even 21:42:23 I mean, it's still far from finished. 21:42:30 But it's workable -- it can show useful information now. 21:42:39 that's great. 21:42:42 I can actually stop interpreting individual pixels on the screen. :D 21:42:45 its all downhill from here no? :) 21:42:49 No. 21:43:00 I still need to build the keyboard interface emulator. 21:43:47 I have to, basically, reconstruct raw PC/AT keyboard scan codes from their SDL encoded equivalents, and THEN convert them back into a useful form inside the emulator. 21:43:57 The idea is to approximate the hardware as much as possible. 21:44:03 yup. 21:44:12 you're using the ps/2 keyboard interface? 21:44:15 Yep. 21:44:25 eventually I'll be implementing the mouse too. 21:44:27 is usb much harder? 21:44:35 Just for completeness. 21:44:43 USB is several orders of magnitude harder. 21:44:47 ok. 21:44:50 mouse would be nice yes :) 21:45:03 I not only need the USB chip drivers, I then also need a USB network stack, and THEN, I need a USB configurator, THEN the actual keyboard driver. 21:45:06 No thanks. 21:45:12 fair enough 21:45:27 I'm having fun with herkforth :) 21:45:41 Well, there won't be any built-in mouse support in the Kestrel OS; but I still need to verify the "hardware" works. :) 21:45:49 yesterday I broke the herkforth editor, and worked in vim for a while until I got it fixed. 21:46:01 But the Forth actually has higher priority than the mouse support. 21:46:18 I'm also considering re-writing the emulator in C, so that it's more portable across different platforms. But this is a low-priority item. 21:46:26 today I broke the source export, and had to work exclusively in herkforth for a little while until I got that fixed :) 21:47:07 I must say I much prefer being stuck in herkforth :) 21:47:15 heheh :D 21:48:07 i like my new parser. its 42 words, and no word takes or returns more than 2 parameters. 21:48:27 All I can say is, it's going to take some getting used to, having an 80x60 "text" screen. 21:48:36 how so? 21:49:12 Most computers with a 640x480 display choose to display an 8x16 or 8x12 font, so that the "text aspect ratio" is an 80x25 line display. 21:49:15 (or nearly so). 21:49:57 certainly an unusual aspect 21:51:06 i use 80x60 or so xterms so it makes sense to me. 21:51:11 mine is 128x51 so approximately 5:2 21:51:12 The last time I used anything close to 80x60 was with the Amiga, on a 640x400 display, where Topaz.font/8 results in an 80x50 dislpay. 21:51:38 i have an idea 21:51:59 in a block editor, the rightmost 16 columns are wasted, right? use that to implement a status display (a dock) :) 21:52:37 I normally use that space to display the current block. VIBE 2.2 and earlier shows this information at the bottom. 21:52:55 But in VIBE 3.0, I'm thinking instead of showing two blocks at once -- the top block is the source, and the bottom block is its shadow documentation. 21:53:06 Typing \ just toggles between the two blocks -- no need to refresh the display. 21:54:25 slava i give up for now - dont delete that account yet tho 21:54:39 I440r: no worries. 21:54:45 I440r: i want to disable the account though 21:54:47 i'm paranoid 21:54:48 its a bitch, i dont understand why its foobaring 21:54:54 you can do that 21:54:55 maybe just freebsd linux emulation fuckage 21:55:05 i dunno 21:55:06 i'll keep the files in /home/i440r don't worry 21:55:10 thanx 21:55:18 i can reproduce it but its easier to not have to hehe 22:01:12 --- quit: I440r (Remote closed the connection) 22:04:13 Hmm, I don't think I can include a set of drawing characters AND the Latin-1 character set. At least not a complete set. 22:07:06 kc5tja: you could use 10 bit chars ;) 22:07:35 I could only fit two characters per word that way. 22:07:41 Well, three. 22:08:33 i'd recommend sticking with 8 bit chars, or 16 bit chars 22:12:18 Yeah, me too. I'm using 8-bit characters in v1.0 of the software, but come v2.0, it'd be nice to move to Unicode. :D 22:12:53 (of course I'm being facetious) 22:16:38 kc5tja: I don't think you need too many drawing characters. you can just make line routines right? 22:16:57 yea 22:17:25 That, combined with support for swappable font tables, yes. 22:17:49 Although, I'm not sure if I'll support graphics primitives in V1.0 22:17:53 yay, herkforth exports strings to the ascii sources properly :) 22:41:36 http://paste.lisp.org/display/1589 22:42:33 the word number, is missing and so are parsing definitions for : ;, and error handling. but otherwise its more or less complete 22:45:22 What's the difference between #! and ! for comments? 22:45:55 I think you answered your own question though: 22:45:57 #! Hard-coded for now. Make this customizable later. 22:45:57 #! A 'dispatch' is a character that is treated as its 22:45:57 #! own word, eg: 22:45:57 #! 22:45:59 #! "hello world" 22:46:01 #! 22:46:04 #! Will call the parsing word ". 22:46:07 That is denotation. :) 22:46:10 the java parser retains #! comments for use with 'see'. 22:46:14 kc5tja: oh really? lol 22:46:29 Yep. :) 22:46:30 kc5tja: i use it for string literals only 22:46:43 also its only at the start of a word 22:46:49 * kc5tja nods 22:46:50 so eg, foo" is parsed as foo" not as foo then 22:46:50 " 22:46:56 Right. 22:47:15 i'll change the name to denotation. dispatch is the lisp term 22:48:41 basically how it works is instead of compiling to a dictionary, each token is appended to the list at the top of the parser stack 22:48:53 is it denotation when I have hex numbers like so: $cab7 22:48:59 when the end of a list is reached (eg, ] or finish parsing), we have to reverse the list since elements are prepended in reverse order 22:49:09 Herkamire: i use HEX: cab7 22:49:14 slava: no 22:49:44 oh i haven't added HEX: DEC: OCT: to the new parser either 22:49:55 but they're all one-liners 22:49:55 $ does not tell the parser it's a number, just if the parser checks if it's a number, then it interprets $ as meaning that a hex number follows 22:50:02 oh ok. 22:50:02 that wouldn't work in herkforth 22:50:07 Herkamire: It is if (a) the parser can't find the word $cab7, AND (b) the parser finds a word "$" which is responsible for parsing a hex number from the input stream, which the outer interpreter calls. 22:50:44 kc5tja: definitely doesn't do that 22:50:58 there is no word $ 22:51:20 I should say that $cab7 is "denotational", but generally as far as Forth is concerned, "denotation" refers to scanning the dictionary for parsing words in an attempt to resolve a word's meaning. 22:51:43 there is no special parsing word. 22:51:56 it's handled in the same code tree that checks for a - at the begining of a number to make it negative 22:52:07 Right. My Forth will support $ for hex constants, and % for binary constants, but otherwise, if you want other bases, you'll have to use explicitly called parsing words to do the job. 22:52:09 so its part of your string->number routine? 22:52:24 slava: yes 22:52:45 ok 22:53:34 I certainly don't search the dictionary for parsers based on the prefix of unfound words. 22:53:46 how will you do strings? 22:53:49 I don't really like that idea 22:54:40 I'm in the middle of implementing strings right now 22:54:57 I haven't figured out how to put strings in the ascii sources. 22:55:15 for now I just put a " at the begining of the line, then the name, then the rest of the line is the string. 22:55:23 all strings are named? 22:55:54 for now yes 22:56:10 it may stay that way 22:56:21 that's odd but it makes sense 22:56:28 in herkforth the strings are stored in the data section. 22:56:31 dictionary entries point to them 22:58:47 once I change the way I import/export to ascii files, there doesn't need to be anywhere where definitions of variables and strings are displayed in the editor 22:59:02 because their value is displayed when you put your cursor on them 22:59:12 how will you name a string in the herkforth editor then? 22:59:17 oh wait neverm ind 22:59:28 you will see the string name in the editor, and when you cursor over it you see the value right? 22:59:36 type the name, then hit the "string color" key 22:59:48 slava: right. same as variables 23:00:05 I'm not sure if I should show string definitions or not 23:00:20 how will string definitions be edited? 23:00:31 maybe I'll make both... so you can have a large string which is not displayed unless you put the corsor on it, and little strings that display right in the editor. 23:02:20 I kinda like seeing the variable values in the editor 23:02:35 the compiler completely ignores the variable and string definitions 23:03:10 Or maybe something like " FOO Hello Wor.... 23:03:26 where the "...." ellipsis is used as an indicator that more data follows. 23:03:34 The whole string only shows if you hover the cursor over it. 23:04:08 kc5tja: I could do that 23:04:22 * Tomasu is back (gone 01:39:58) 23:06:11 once I clean up the ascii import/export code it will no longer be nessesary to have definitions for variables, constants and strings 23:06:22 if they're in the dictionary/data-section then they are there 23:06:25 do you plan comments? 23:07:01 commants would just be nameless strings 23:07:26 I'm not sure how I'll implement it, but I would like comments 23:08:21 they would need dictionary entries for you to be able to place them in the sources 23:08:54 I might not do that. 23:09:03 I may instead link comments to definitions 23:09:47 eg dictionary entries could have a field pointing to their comment. 23:09:49 shadow blocks? 23:10:45 I'm not into shadow blocks 23:11:01 I want the info about a word to be linked to that word. 23:11:44 the only thing I use shadow blocks for is a title for each block 23:12:11 my problem with shadow blocks is that you don't see them unless you go looking. 23:12:25 I want little notes about words to be visible so you see them when you read the word. 23:13:27 heh this is great to talk about... now I'm thinking I will probably wait on comments until after I have stopped storing source in blocks. 23:14:10 and have the record containing the source contain a pointer to it's comment. 23:14:18 or put the pointer in the dictionary entry 23:17:42 So you're moving away from blocks then? 23:20:06 yeah 23:20:41 I want the system to just know where definitions are. and where they end 23:21:04 the code to find where they start is complex and (I think) unneessesary 23:21:17 and the code to find the end must guess 23:21:35 --- quit: jdrake (Read error: 110 (Connection timed out)) 23:21:38 to find the begining of where a constant is defined is also a guess 23:23:15 I have a field in the dictionary entries that says where a word is defined, but I do not (and don't want to) keep them updated whenever I change the sources. 23:23:26 hmm 23:23:46 That can be an issue. 23:24:08 the best features in the herkforth interface are jumping to definions 23:25:30 knowing the bounds of definitions may also be useful for writing an optomizer 23:25:38 * kc5tja nods 23:25:44 You store your definitions in tokenized form, right? 23:26:18 it's also possible that this would be useful for some sort of dependancy checking. 23:26:23 yes 23:26:35 tokens are simply a color and an index into the dictionary 23:26:58 I'm not sure where dependancy checking would be useful. 23:27:04 --- quit: Sonarman ("leaving") 23:27:48 but there are many possibilities 23:27:49 Hard to say. 23:28:05 So it seems you're going with an AHA-like program storage format. 23:28:30 yes, I got started on my tokenized source stuff from hearing about aha's source format 23:29:14 * kc5tja was thinking of something along those lines, but I still have some issues with it. 23:29:35 I like the brute simplicity yet free-form capabilities of plain text. 23:29:49 hehe :) 23:30:06 "brute simplicity" :) 23:30:24 Well, I'm refering to storage format and whatnot. 23:30:50 yeah 23:31:17 I'm not sure I actually read about aha. 23:31:37 tathi told me a bunch about it and we talked for a long time about source formats 23:31:46 It's an interesting architecture for Forth -- it reminds me much of the older 8-bit BASIC systems. 23:31:56 I've done a lot of thinking since, and made some changes to the way I store source since. 23:32:05 I don't know how close to aha it ended up :0 23:33:01 Not sure. 23:33:06 It's been awhile since I read anything about AHA. 23:33:55 hmmm... I don't think I actually mention aha in my wiki 23:34:10 I give many thanks to Jeff Fox, but don't mention it's mostly because of aha. 23:34:48 Well, it was through Jeff Fox's efforts that I was able to peek into Chuck's first MachineForth compiler for x86, and that provided me with the tools I needed to work on the Kestrel. 23:35:00 I don't think the software for building and running the Kestrel would have been possible without his work. 23:36:31 oh that's right. most of what I learned about colorforth and Chuck Moore was because of Jeff Fox's writings (and some of his movie downloads) 23:38:07 I have trouble with blocks, because I always end up going in later and adding stuff. 23:38:13 --- quit: Tomasu (Read error: 110 (Connection timed out)) 23:38:37 at some point the blocks start getting big 23:38:47 and I really hate going through and splitting them. 23:39:27 I did that once. went through all the blocks and split them into smaller blocks, and moved a bunch of definitions to more appropriate places 23:40:16 yeah 23:40:27 That's why I wanted to research the whole database storage system that I talked about earlier today. 23:40:35 me too :) 23:40:47 I want to be able to insert a block 23:40:53 or split a block in two 23:40:55 Learning from prior art: GEOS VLIR files did solve a critical problem, and I feel is solely responsible for extending the utility of the C64 well into the age of 32-bit computers! 23:41:58 I am considering building in automatic dependency compiling after I get each definition in it's own database record. 23:42:13 * kc5tja nods 23:42:22 in general I hate stuff like that 23:42:31 It'll also make optimization easier too, since you have access to a full word dependency tree. 23:42:55 right, except there may be some issues with initialization 23:43:00 * kc5tja nods 23:43:26 some definitions you can't compile twice, because they do something when you compile them 23:44:21 some definitions will probably be there solely to initialize stuff. 23:45:11 the biggest thing I'm not sure about (in deciding if I should have automatic dependancy compiling) is whether or not I will have issues getting stuff to compile in the right order. 23:45:25 initialization stuff 23:46:10 like the segfault handler 23:46:37 it should happen as soon as it can, but I'm not sure how to make it a dependancy of the editor 23:47:26 I think it will work out 23:47:36 Not too sure. 23:47:40 I'm getting punchy here. 23:47:47 I think the only way to know is to try it 23:47:49 Getting text working so quickly actually wiped me out. :D 23:47:59 I can see some of the benifits 23:48:39 but the cons are unknown and potentially very painful. I will not be happy at all if I have to spend hours chasing down bugs that turn out to be because the initialization stuff happened in the wrong order 23:49:09 kc5tja: :) You're in that low that comes after being happy in an accomplishment ? 23:49:16 Well, if you do a depth-first traversal of the tree, things should be initialized in the right order. 23:49:35 Herkamire: Not so much in a low -- but it's almost midnight, and I'm starting to get tired. :D 23:49:36 yeah, they should. 23:50:07 I'm getting a little tired too 23:50:32 Damn, I am rather excited about using VLIR-like constructs though. 23:50:49 I would love to be able to just define a word wherever and it would be available wherever (except no circular dependancy loops) 23:51:09 * kc5tja nods 23:51:09 what's VLIR? 23:51:26 Variable Length, Indexed, Record 23:51:30 is that what you mentioned earlier about a "file" being a block which points to other blocks to contain data? 23:51:50 Yeah. 23:51:51 indexed, as in each record has a numerical id? 23:51:59 The VLIR block is just a table of pointers to other chains. 23:52:08 Each chain, then, is a sequential collection of blocks holding data. 23:52:42 that sounds very cool 23:53:47 I was thinking for a long time that I should have some reasonably small (maybe 1KB or 16KB) maximum on the size of memory that can be allocated. 23:54:09 any software that wanted to work on data bigger than that would have to do it in pieces. 23:54:35 But, in my system, I'm thinking of using triply indirect blocks, which ought to let me have up to 16 million records. 23:55:16 so block[x][y][z] ? 23:55:25 (I figure with 4-byte pointers, a single 1024-byte block would hold 256 pointers). 23:55:32 always triply? or 3 levels maximum? 23:56:12 Hard to say this early -- I might go with a fixed hierarchy of three levels for simplicity, but then optimize later on to allow for varying depths. 23:56:32 with always three, that would make the smallest file be 4 blocks? 23:56:56 well, the look-up tables would be global to the disk. 23:57:02 So the smallest "file" would be 1 block. 23:57:28 The only time it'd need to allocate more than one block is if new look-up tables need to be allocated. 23:58:14 I'm confused 23:58:46 are we talking about a table which lists the blocks used to hold the contents of a (potentially large) file? 23:58:53 To look up a record, you need a table which maps the record # to the object's first block. 23:59:17 you're talking about the main table which keeps track of all blocks. 23:59:46 It just keeps track of the first block of each chain. 23:59:51 ok. 23:59:58 Some other mechanism is required to ensure chains are consistent. 23:59:59 --- log: ended forth/04.07.04