00:00:00 --- log: started forth/13.01.18 00:10:34 --- quit: ASau (Ping timeout: 272 seconds) 00:42:49 --- quit: proteusguy (Remote host closed the connection) 00:54:17 --- join: epicmonkey (~epicmonke@188.134.41.175) joined #forth 00:54:17 --- mode: ChanServ set +v epicmonkey 01:02:16 --- quit: bjorkintosh (Ping timeout: 264 seconds) 01:08:16 --- quit: epicmonkey (Ping timeout: 240 seconds) 01:14:25 --- join: bjorkintosh (~bjork@ip68-13-229-200.ok.ok.cox.net) joined #forth 01:14:25 --- mode: ChanServ set +v bjorkintosh 02:10:46 --- join: epicmonkey (~epicmonke@host-224-58.dataart.net) joined #forth 02:10:46 --- mode: ChanServ set +v epicmonkey 03:46:49 --- join: proteusguy (~proteusgu@ppp-58-8-100-194.revip2.asianet.co.th) joined #forth 03:46:49 --- mode: ChanServ set +v proteusguy 04:09:57 --- join: JDat (9f9411b5@gateway/web/freenode/ip.159.148.17.181) joined #forth 04:09:57 --- mode: ChanServ set +v JDat 04:43:57 it would seem that it might be more useful for words to have separate immediate and run-time definitions 04:52:05 why? 04:54:28 --- quit: proteusguy (Ping timeout: 264 seconds) 04:54:44 protist: I think Forth has been slowly moving away from state smart words. 04:55:58 You could have two separate vocabularies. One for compiling, one for interpreting? 04:59:30 impomatic: yeah...i am thinking about that 04:59:41 impomatic: it really would simplify things 05:00:21 impomatic: as it stands, making control flow words seems sloppy 05:00:40 --- join: I440r (~zhiming@167.sub-70-194-68.myvzw.com) joined #forth 05:00:40 --- mode: ChanServ set +o I440r 05:00:41 impomatic: maybe there are better ways...but i have defined special behavior in my assembly code 05:00:54 warning: gcc/cc1-checksum.o differs 05:01:11 anyone know why my emerge of gcc is failing on a checksum compare between stages 2 and 3? 05:01:17 argh wrong channel 05:01:33 impomatic: begin would be fairly simple with a normal immediate....but until has both immediate and run-time behavior 05:02:20 until is an immediate word that compiles the conditional branch back to the mark left by begin 05:02:42 --- join: tathi (~josh@dsl-216-227-94-171.fairpoint.net) joined #forth 05:02:42 --- mode: ChanServ set +v tathi 05:02:48 hi tathi! ltns! 05:02:55 Hi I440r 05:02:57 How goes it? 05:03:01 I440r: i suppose then i have a conditional branch word in asm...i suppose that makes more sense 05:03:29 well that depends lol - if i get the contract i just interviewed for all is fine :) 05:03:34 * tathi goes to look at the logs to see what we're talking about... 05:04:03 been working ALOT on isforth, fixed a bunch of bugs and am implementing the pulldown menus... just gotta fix a few bugs in that :) 05:04:07 Cool 05:04:16 BEGIN saves an address. UNTIL retrieves the address and compilers an OBRANCH back to it. BEGIN and UNTIL only make sense within a colon definition. 05:04:40 impomatic: i have begin and until both implemented at the assembly level 05:04:46 protist, : begin compile dobegin impomatic: but my interpretter has no concept of immediate, yet 05:05:09 the only reason for "dobegin" is so the decompiler knows that there is a begin loop here 05:05:32 : until compile ?until ?until is an alias for ?branch 05:05:58 protist, why not? that complicates the issues big time 05:06:13 how does ; work if thers no immediate? 05:06:24 : ; compile exit [ ; 05:06:28 i didn't want to read how it is normally done until i implemented it myself 05:06:43 i have if,else,then,begin,until all working....using assembly 05:06:57 protist: so how do you stop compiling and go back to interpreting? 05:07:07 well immediate words are flagged as being immediate by having bit 7 of their NFA's count bit set 05:07:13 --- join: proteusguy (~proteusgu@ppp-58-8-230-61.revip2.asianet.co.th) joined #forth 05:07:13 --- mode: ChanServ set +v proteusguy 05:07:29 tathi: colon is a word that has an assembly definition haha 05:07:31 : ; compile exit [ ; immediate (forgot to make it immediate lol) 05:07:36 tathi: in mine, anyways 05:07:47 protist: but how does it know when the definition ends? 05:08:31 tathi: ill show you, sec 05:08:36 k 05:08:39 protist, there are forths that have no concept of immediate but i think thats about as useful as the GNU itterative quicksort :) 05:09:03 having immediate words simplifies things greatly 05:09:18 tathi hows the farm work going? 05:09:20 still doing that? 05:09:26 I440r: yup. 05:09:31 Strange weather. :) 05:09:41 global warming! 05:09:42 lol 05:09:51 tathi: http://ideone.com/GLe6GD 05:10:00 A couple days ago it was in the 40s (Fahrenheit), which is more like March weather, and now we're back to -6 this morning... 05:11:01 I440r: we got way behind in the fall; didn't pull the tomatoes until after Thanksgiving, so we're short on salad production right now. But otherwise things are good. 05:11:21 protist: oh, colon parses the input. 05:11:33 protist, i think i need to explain quit and interpret 05:11:40 tathi: for the duration of the definition, yes :) 05:11:49 I440r: hmmm 05:11:49 some forths use ] to do the parsing too 05:12:20 quit is forths inner interpreter. quit is basiclaly begin interpret again - i.e. an infinite loop 05:12:28 protist: Yeah, you can do that. The trouble is then it's difficult to write words which use colon to compile other definitions. 05:12:39 if there is an error during interpretation the word abort jumps back to quit after cleaning up the stacks 05:12:48 unless you provide the factor which just starts a definition and doesn't parse input. 05:13:28 consider : noop ( "name" -- ) : postpone ; ; 05:14:29 interpret is a loop that parses the next space delimited token out of the input stream, searches the dictionary for it and then either compiles or executes it depending on "state" 05:14:56 tathi why not just : noop ; 05:15:21 I440r: because it's an example to demonstrate what's wrong with a parsing : or ] . 05:15:28 it defines a noop word 05:15:32 in fact i think your definition for noop would be wrong but oh :) 05:15:47 your definition for noop would also do ] making it wrong :) 05:15:50 but i get ur point 05:16:27 if your compilation state is a parsing word, then trying to do `noop foo` won't define foo as `: foo ;`, it will eat input until the next semicolon in the input stream. 05:17:06 oh your noop definition should be called noop: or something. make the next token a NOOP word 05:17:16 I440r: oh, I've been sporadically working on something you'll probably hate: a Forth dependency/package manager. ;) 05:17:18 tathi: i can do : noop ; 05:17:35 : noop: create compile ; ; 05:17:40 noop: foo 05:17:48 protist: right, but what if you want to do a word that compiles other definitions? 05:17:57 --- join: foxes (~fox@124.193.192.54) joined #forth 05:17:58 --- mode: ChanServ set +v foxes 05:18:02 tathi a forth dependency package manager for FORTH stuff? 05:18:08 or for some distro ur making :) 05:18:10 protist: like a structure field word, which takes an offset on the stack and compiles a word which adds that offset to an address. 05:18:17 I440r: no, for Forth stuff. 05:18:32 tathi: i am not sure what you are wanting haha 05:18:41 so if you include foo.h and foo.h needs bar.h and futs.h they will automatically be included? 05:18:48 agreed. i dont like that :( 05:18:50 :) 05:18:51 even 05:18:52 tathi: i have defined create...if that would illustrate how mine works? 05:18:57 it encourages you to not know WTF is going on 05:18:57 I440r: yeah. :) 05:19:17 tathi: : create get_lexeme here dup ep, write dp ! here ep, con_type , here cell + , ; 05:19:42 tathi i totally reworked my memory manager, its way more organized now, not all in 1 file. much easier to read the sources 05:19:57 also did major surgery on the curses code including fixing a bunch of stupid bugs lol 05:20:15 protist: sure. Does this make sense? : +field ( offset u "name "-- offset+u ) create over , + DOES> ( addr -- addr' ) @ + ; 05:20:17 need to rewrite see and the debugger. they are currently broken 05:20:50 protist: used as 0 1 cells +field foo 1 cells +field bar constant sizeof-struct 05:20:57 I440r: cool, I'll have to take a look 05:21:26 --- quit: Fox78 (Ping timeout: 244 seconds) 05:22:15 its not released yet 05:22:35 need to finish up the pulldown menus which are looking real good except when it glitches :) 05:22:41 ok 05:23:12 tathi: i am not sure what you are wanting that to do 05:23:28 tathi: i don't see how it relates to `:' 05:23:59 protist: in a more standard forth, you can write something similar in which the definition of +field uses : and ; instead of CREATE 05:24:18 protist: in yours, you can't. 05:24:47 tathi: ah mine could probably do that pretty easilly 05:25:10 protist: yeah, it's not a huge deal, you just need a separate word which only starts a new definition and doesn't have the loop part. 05:25:17 tathi like my m: definition. m: has : inside it 05:25:46 protist, can you do [ x y z ] inside your compile loop? 05:26:03 I440r: yes 05:26:21 I440r: i can do : five [ 5 ] literal ; 05:26:52 I440r: or : four [ 2 2 + ] literal ; 05:27:58 protist: in a normal Forth, there is one main interpret loop, and : and ; (or actually [ and ]) just set a flag which changes the behavior of that loop from compile to interpret. 05:28:20 protist: then you can use : and ; do do things like this rather than having separate words. 05:29:09 hmmm 05:29:11 protist, the main loop is called quit. which calls interpret which repeatedly calles defined (see if next space delimted token is defined) until it runs out of input (end of line et) 05:29:36 if defined finds the word it then either compiles it or executes it depending on the current state 05:29:57 so forth just keeps parsing each token out of the input stream over and over till theres none left 05:30:05 protist: your choice: it's a fairly minor difference. The only real problem is that it may confuse people coming from other Forth systems. 05:30:07 and as its doing this it is being switched into and out of compile state 05:30:11 : blah ... ; 05:30:24 protist: but if you're not planning to have other users, it's totally up to you. :) 05:30:37 forth parses colon. colon parses the next token and creates a word with that name. colon then switches to compile mode. 05:30:39 if i wrote an outer interpretter...it would work like : outer begin get_lexeme dup lookup if lookup execute else number then 0 until ; 05:30:49 i tried something like that, and it works 05:31:01 interpret then continues to parse each token and because were now in compile mode it compiles each token instead of executing it 05:31:23 ; however is an immedite word so interpret EXECUTES it. ; compiles an exit then switches back to interpret mode 05:31:42 thers one loop and it does all the input parsing and then either executes or compiles 05:32:06 this looks more complicated but its much much simpler really... it also allows alot of "clever stuff" tahts not possible otherwise 05:32:29 I440r: interesting...i will likely make more Forths once i get a firmer grasp on this one 05:32:42 oh.. if interpret parses something thats NOT in the dictionary 05:33:02 it checks to see if its a number. if its a number it either puts it on the stack or compiles it as a literal 05:33:19 OK, I'd better get to work. 05:33:25 later tathi :) 05:33:29 tathi: cya 05:33:31 later 05:33:36 --- quit: tathi (Quit: leaving) 05:34:09 protist, tathi is the guy that ported isforth to PPC but he is farmer joe now not geek master so the ppc version isnt being maintained :) 05:34:15 I440r: i may add in ?branch and such so i can make outer definition for control flow words 05:34:40 you need branch and ?branch and ?branch seems backwards... it branches on false not on true 05:34:50 so IF is a ?branch round the true part 05:35:10 : if compile ?branch >mark ; (where TO MARK marks a forward branch) 05:35:16 yeah...i have all those control words defined at the assembly level 05:35:55 i am thinking I'll add in the concept of immediate, then generalize with 0branch and ?branch to make outer definition prettyness and compactness 05:36:09 i would highly recommend you become familiar with how isforth does it... 05:36:51 i am trying my hand at it my way before i look to the normal ways, so i can see where they differ...I will take more from this that way 05:37:01 this won't be the only Forth i write lol 05:37:03 isforth has 0branch but it doesnt use it at all lol 05:37:10 i shud remove that primitive, 05:38:01 : until literal compile ?branch ; 05:38:06 something like that 05:38:08 i know but there are some concepts that your not familiar with yet. i USED forth for about 6 or 7 years before i even started to look at how part of it worked. i dint write isforth till i had been using forth for over 10 years :) 05:38:19 as an immediate 05:38:23 not literal 05:38:32 : until compile ?branch and yes its an immediate 05:39:03 i use the normal stack to pass control destinations 05:39:10 so i could use literal 05:39:19 : begin here ; 05:39:37 or hmm 05:39:39 thas a very simple definition for begin. all it does is put the address to be looped back to onto the parameter stack 05:39:48 : again compile branch , ; 05:39:53 yeah 05:40:04 so again compiles branch and the address to branch back to 05:40:07 --- join: fantazo (~fantazo@213.129.230.10) joined #forth 05:40:07 --- mode: ChanServ set +v fantazo 05:40:39 i have all of these on the assembly level, even `else' lol...so i understand the mechanisms...these words are cleaner, though 05:40:48 : if compile ?branch here 0 , ; 05:40:56 the 0 , is a dummy branch target 05:41:08 : then here swap ! ; 05:41:31 all of those are immediate of course 05:41:36 why the 0? 05:41:47 bcause branch has a target... but we dont know what it is yet 05:41:53 so we compile a dummy branch target 05:42:02 ah yeah 05:42:06 ?branch is TWO tokens. 1 token for ?branch and one for its target 05:42:21 gotcha 05:42:45 so THEN does "here swap !" 05:43:12 i.e. back patch the ?branch 05:43:39 you run linux right protist ? 05:44:04 yep 05:44:25 my idea of how i was going to do ?branch was a little different 05:47:05 I440r: i have done all the same things, just not generalized, and in asm haha http://ideone.com/lBxgkd 05:47:56 my `else' comments may not be that great 05:49:17 :) 05:49:28 :D 05:49:47 i wanted to try my hand at it to really understand it before looking to standard implementations 05:50:32 gaining the speed of pure asm at compile time is hardly worth the cost in space...compile time need not be fast, anyways 05:51:02 so i will switch these things over, but this experience has been valuabe :) 05:51:18 valuable* 05:54:28 protist, i disagree, compile time is wasted time 05:54:32 my fears of possibly being token-threaded were unfounded, while i do have a separate table, it is there so that i don't have to dereference links in a linked list to traverse the dictionary 05:54:39 emerge open-office or mozilla-firefox for an example 05:55:16 what is emerge? 05:55:27 its gentoo "install".. 05:55:35 gentoo downloads, extracts, compiles and then installs 05:55:49 isforth just compiled 248498 in .02 seconds 05:56:20 i have an entry list where the entries are of known size so i can use address arithmetic to move through it rather than a linked list 05:56:29 thats 242k plus 700 ish bytes 05:57:02 you cant do vocabularies or hashing of names that way 05:57:15 you need to do linked lists. 05:57:31 hashing is too fancy for my first real foray into assembly haha 05:57:37 :) 05:57:42 next time i will experiment :D 05:57:52 i have learned so much asm doing this 05:58:03 hashing of forth names is simple. take the length *2 + the first char of the name *2 plus the 3rd char of the name if it exists 05:58:07 i read most of a book on asm, but hadn't applied it before this 05:58:14 thats basicaly isforths entire hashing algorithm 05:58:32 i have done hashing in C, before :D 05:58:36 i know the mechanism 05:58:55 most asm books these days are utter trash though. 3/4 of the book is spent teaching you the binary, octal and hex and the differences between masm, tasm and spazzum 05:59:12 then yu get "." <--- about that much of the book dedicated to actual assembler coding 05:59:29 i used Professional Assembly Language, it was /fairly/ good :) 06:00:00 it was more aimed at C programmers though, so it didn't do data structures 06:00:14 get "The 8086 book, includes the 8088). its OLD 16 bit dos asm but its a billion times better than any book published on asm since the 1980's 06:00:47 cool 06:00:51 i may look into that :) 06:01:09 its out of print lol... you can probably get it on amazon tho 06:01:42 what about Michael Abrash's Graphics Programming Black Book? 06:02:31 to learn gfx stuff or to learn asm 06:03:09 asm 06:03:22 i heard in spite of the title, the first third is golden for asm 06:03:40 well the guy is a freeeeeeeking genius lol 06:03:53 if you truely want to learn asm again... read my sources :P 06:04:00 hearing that from you means something 06:04:09 which guy is a genius?...Abrash? 06:04:15 yes abrash 06:05:32 it is lame how meeting with a girl is always a 50/50 chance scenario lol 06:05:56 they are like "yeah, sure!", but it is never a sure thing 06:18:38 is the word immediate always used right after a definition? 06:18:53 I440r: ^ if so it would be easy for me to define 06:22:46 --- quit: rabenauge (Quit: Ex-Chat) 06:24:24 --- join: rabenauge (~sag@88.130.166.126) joined #forth 06:24:25 --- mode: ChanServ set +v rabenauge 06:27:06 yes 06:27:11 : foo ... ; immediate 06:27:39 the word create stores the name field address of the most recent word name in a variable called last 06:28:40 last c@ $80 or last c! (set bit 7 of the count byte of the most recently created word) 06:28:50 usually catually done as 80 last cset 06:28:58 where cset is a read/modify/write 06:29:46 and FIND - the word that searches the dictionary will return 0 = not found. -1 = found but the word is not immediate or... 1. word found and is immediate 06:30:07 -1 and 1 are both non zero so are "True, word found" as opposed to "false word not found" 06:30:32 after that you can do "state @ xor if , else execute then 06:30:46 erm or do i have the if/else parts backwards lol 06:31:05 state = 0 = interpret. state = -1 = compile 06:32:09 so if find returns -1 (word found) and state is 0 (i have the if/else parts backwards for sure) we need to execute not compile 06:32:16 --- quit: proteusguy (Ping timeout: 264 seconds) 06:33:13 err i might be getting this all wrong. you xor the result of find with "State" to determin if you compile or execute based on immediate/state 06:33:21 look at how isforth does it :P 06:33:33 hehe 06:33:40 man i have a gay error 06:34:02 one of those errors that pretends it is on 600 lines when you compile 06:34:40 just find the first error and fix it. that will tell you where your next real error is 06:35:18 I440r: yeah 06:35:47 I440r: it claimes the first error is line 265...i guess i haven't changed much before there 06:36:00 OH 06:36:04 i didn't use -m32 06:36:05 haha 06:36:07 that is it 06:37:46 --- join: Nisstyre-laptop (~yours@oftn/member/Nisstyre) joined #forth 06:37:46 --- mode: ChanServ set +v Nisstyre-laptop 06:41:20 I440r: i now can make immediates :D 06:42:03 I440r: i made my own version of 0branch and such, that are slightly different 06:42:04 which is going to make your all in one compile loop more complicated 06:42:20 but if it works its a good start 06:42:26 well 06:42:43 its not that the way its usually done is LESS complicated... its just more organized 06:43:13 : immediate imm_type ep @ cell - @ ! ; 06:43:17 :D 06:48:44 : if con_type , here cell allot compile ?branch ; 06:49:37 immediate 06:50:29 works :D 06:51:03 much, much, more elegant and compact 06:51:25 s/much, mo/much mo/ 06:51:44 oh shit...it might be using the old if 06:51:53 i'll change the asm and test :D 06:52:51 seg fault hmm 06:53:04 ah 06:58:22 lol love those 06:59:10 --- quit: cratuki (*.net *.split) 06:59:15 --- join: cratuki (~Craig@leaf.vm.bytemark.co.uk) joined #forth 06:59:15 --- mode: ChanServ set +v cratuki 07:17:02 I440r: does this look right to you? : compile ' , ; immediate 07:17:08 brb drink 07:17:52 not quite 07:18:36 thats [compile] 07:18:49 [compile] takes the next token out of the input stream and compiles it 07:19:00 compile takes the next token out of the EXECUTION stream and compiles it 07:19:34 so if you have compile foo 1 2 3 do-something at run time COMPILE runs,,, fetches "foo", commas it the we continue executing from 1 2 3 07:20:04 so : compile r> dup cell+ >r @ , ; 07:20:19 that sort of thing 07:20:42 and compile is not immediate but [compile] is 07:21:05 hmmm 07:21:17 if you have : blah .... compile foo .... ; 07:21:29 thers an XT for "compile" followed by an xt for "foo" 07:21:36 when forth executes the word compile 07:22:19 it pulls its return address off the return stack (getting the address of the xt for foo).. 07:22:55 the dup is needed because ewere going to use this address twice sort of. we first add 1 cell and put it back on the return stack so when we return we return to the xt after the xt for foo 07:23:06 in your definition of if, i thought you used compile ?branch 07:23:21 we do 07:23:30 : if compile ?brahch here 0 , ; 07:23:33 this compiles down to 07:23:35 if: 07:23:40 dd compile 07:23:44 dd ?branch 07:23:46 dd here 07:23:48 --- join: MayDaniel (~MayDaniel@unaffiliated/maydaniel) joined #forth 07:23:48 --- mode: ChanServ set +v MayDaniel 07:23:57 : compile ' , ; immediate seems right for that? 07:23:58 dd (lit), 0 07:24:03 no 07:24:33 oh...that would be compiling at the wrong time 07:24:33 ok.. a colon definition is just an array of "execution tokens" or xt's 07:24:39 an xt is just the address of a word 07:24:41 right 07:24:45 i see now 07:24:49 lost in all the immediates hehe 07:24:56 it can get confusing at first 07:25:06 it seems squirly but... its not once you get your head straight :) 07:25:16 gotcha 07:25:33 i am getting things close enough to normal that i can talk to you, which is good haha 07:25:37 : compile r> dup cell+ >r @ , ; 07:25:46 : [compile] ' , ; immediate 07:25:50 TICK is a parsing word 07:25:59 so bracket compile is a parsing word. 07:26:06 --- quit: fantazo (Quit: leaving) 07:26:27 i.e. it compiles the next token out of the input stream... which is itself usually immediate 07:26:40 very nice :D 07:26:46 in fact the only reason for [compile] is to COMPILE an immediate word. if you didnt [compile] it it would execute 07:26:57 : fud ." fud" cr ; immediate 07:27:00 : blah fud ; 07:27:12 fud would not be compiled into the definiton for blah because it would execute at compile time 07:27:19 : blah [compile] fud ; 07:27:31 --- quit: Nisstyre-laptop (Remote host closed the connection) 07:27:35 [compile] un-immediatifies a word 07:27:45 makes sense 07:28:05 : blah compile [compile] fud ; 07:28:10 what does that do 07:28:14 at compile time AND at run time 07:28:29 i need to better understand compile first 07:28:35 i get [compile] 07:28:43 that compile definition is odd 07:28:52 first tell me what it does exactly 07:28:55 ok compile is not immediate so the XT for compile is just stuffed into the definition for blah 07:28:57 ok 07:29:25 if you have a forht word that has XXX YYY and ZZZ inside it. forth points to each one and fetches that xt and executes it 07:29:32 you understand how (lit) works? 07:29:43 i don't have (lit) 07:29:53 ok. LITERAL is an immediate word 07:29:59 i have literal, though 07:30:06 : literal ( n1 --- ) compile (lit) , ; 07:30:06 but defined in asm 07:30:20 literal is a compiling/immediate word 07:30:30 (lit) is the primitive for literal, the RUN time action 07:30:55 so a number in forth is compiled as 07:30:57 dd (lit) 07:31:00 dd 123 07:31:20 now immagine forths IP is pointing at the xt for (lit) 07:31:41 forth fetches the xt its pointing to. it then advances IP to the nxt xt and then jumps to the one it fetches 07:31:46 its like an instruction fetch in asm 07:31:46 : literal uv @ , con_type uv, uv, ; immediate ....would be something like that for me 07:31:51 fetch, advance, execute 07:32:06 whe (lit) executes IP now points to the 123 07:32:23 it fetches the 123 pointed to by IP and advances ip to the next xt 07:32:38 what is uv 07:32:54 user_variable memory pointer 07:33:07 oh i dont have user variables 07:33:10 what is con_type 07:33:10 i put constants in there too 07:33:42 for me, constants are like 3----value 07:33:58 not sure what u mean by that 07:34:03 i have to have a reference to that, then execute will push the value on that stack 07:34:25 ok 07:34:27 stop 07:34:27 3 is the constant type 07:34:31 stop stop :) 07:34:34 :) 07:34:49 ok there are TWO kinds of words in forth. high level code or asm code 07:35:17 each word has an NFA = name field address and a CFA, code field address 07:35:25 high level definitions also have a body address 07:35:31 i have 4 kinds right now: primitive, user_defined, constant, and immediate 07:35:41 for ALL words, the first thing in the word definition is CODE 07:35:46 lets look at the code for + 07:35:49 code + 07:35:51 pop ax 07:35:53 pop bx 07:35:56 add ax, bx 07:35:58 push ax 07:36:03 next <-- more on this later 07:36:10 all coded definitions end in NEXT 07:36:20 a COLON definiton looks like this 07:36:24 foo: 07:36:27 call nest 07:36:28 mine is indirect threaded, not direct :) 07:36:29 dd xx 07:36:32 dd yy 07:36:33 dd xx 07:36:36 dd exit 07:36:48 you can do the translation later 07:37:04 indirect is over complicated. i see ZERO use for indirect threading 07:37:16 compact code 07:37:32 does not give more compact code 07:37:50 it also means next has to do TWO fetches to see what its executing 07:38:07 in the above code lets say we have 07:38:13 : bar foo ... ; 07:38:14 so 07:38:16 bar: 07:38:19 call nest 07:38:22 dd foo 07:38:23 ... 07:38:25 exit 07:38:34 lets say were executing bar and IP poits at the DD foo 07:38:53 forth does a read of where ip points to. advances ip. then jumps to foo 07:39:06 foo is ASM code. or at least the first part is 07:39:10 it does a call nest 07:39:34 nest pushes IP onto the return stack and then POPS the return address of the "call nest" into ip 07:39:45 so IP now points at the first token of foo 07:39:53 ok so how next works 07:40:16 in isforth IP is the SI register. you can fetch the data pointed to by SI with a "lodsd" opcode 07:40:23 taht fetches and advances SI 07:40:27 so SI is IP 07:40:35 next is 07:40:36 next: 07:40:39 lodsd 07:40:39 I want to write a subroutine threaded forth, but that messes up using SP for the Forth stack :-( 07:40:42 jmp eax 07:41:06 dont even TRY get your head round sub threading till you have direct figured out 07:41:19 I have direct figured :-) 07:41:27 not really 07:41:55 the way you have your proto-forth designed is not relaly going to work very well in the long run 07:42:05 i am not sure of the difference between subroutine and indirect threading...mine could be either one 07:42:20 its far far better if you learn how other people have implemented it before you do so yourself 07:42:37 if yu dont know the difference your not either 07:42:47 not necessarilly true 07:42:56 i am definitely something 07:42:59 just not direct 07:43:00 indirect threading has each XT point to a pointer to the code to execute 07:43:10 direct threading has each xt point to "the code to execute" 07:43:26 protist: this explains the different types of threading pretty well http://www.bradrodriguez.com/papers/moving1.htm 07:43:42 impomatic: that is what i have been looking at 07:43:52 ugh 07:44:05 maybe it does. i cant read that page. it looks like a clusterfuck wall of text 07:44:29 it might have all the info there but i think i could explain how direct/indirect threading works in about 1/100 of the text he has there 07:45:09 maybe i could explain mine and you could tell me? 07:45:27 academics "wall of text" web page formatting looks like complete and utter SHIT 07:45:53 do this 07:46:12 throw 100% of your code out and start over. make it direct threaded and it will be FAR FAR easier 07:46:37 each coderef points to the type part of TYPE----coderef----coderef----NULL 07:46:46 i actually think you are damaging your potential understanding of forth by trying to implement something you dont fully understand yet 07:47:04 i think you need to just USE forth for about a year before you even TRY to implement it 07:47:17 and... i would VERY VERY VERY VERY VERY strongly discourage you from ever using gforth 07:47:18 int the case of a primitive, TYPE is one and there is only an adress of a function to call after it so PRIMITIVE/1-----address of function 07:47:30 because you will learn FUCK ALL about how forth is constructed by using that abomination 07:47:47 forth is NOT typed 07:48:14 i just have primitive, user_defined, constant, and immediate 07:48:25 that bit about damaging your potential understanding... this "type" idea is going to do that for sure 07:48:36 execute doesn't distinguish between user_defined and immediate 07:48:52 immediate is not type 07:49:03 it is in mine :p 07:49:36 i think having a constant type is cleaner than having code that pushes the number every time 07:49:59 ok. lets say you want to be a classical guitarist. you go out and teach yourself guitar. you will miss 99% of what a classical guitar teacher will teach you and you will never be GOOD at it 07:50:09 i think this is what you are doing to yourself with forth 07:50:36 you have " <--- this much understanding of the mechanics of the language and your already trying to play "Villa Lobos, Prelude #1" 07:50:48 i like to do the limit of what i am capable of before i look at how things are done 07:51:20 i think that method is damaging. you will construct preconceptions of how thins work that are flawed 07:51:34 which will make it MUCH more difficult for you to understand the way its really done 07:51:35 i have no issue with learning other ways 07:51:52 i don't think knowing multiple programming languages is damaging either 07:53:06 later i could shorten the type to 2 bits or something 07:53:12 learn to USE forth. become confident that you can solve any problem using the language. then look at how it works internally. 07:53:17 but i will probably start a new one before then 07:53:44 i honestly think you need to stop making this one, its going to skew your understanding 07:54:09 also... dont use gforth for ANYTHING. not even to "practice" 07:54:21 ithink gforth is a horrendously BAD forth for someone to start with 07:55:00 you CANNOT learn the mechanics of forth by reading obfuscated, uncommented. badly clusterfuck formatted C sources 07:55:03 l440r: what's a good Forth to start with? 07:55:07 not in a MILLION fucking years 07:55:09 eforth 07:55:11 isforth 07:55:18 eforth is very very simple 07:55:39 however. its sources are horrendously clusterfuck formatted 07:56:36 to learn the mechanics of forth, assembler for x86/linux etc.. eforth is a good place to start 07:56:45 I like eforth. Has anyone read / got a copy of the "eForth and Zen" book by Ting? 07:56:50 or study the isforth kernel 07:57:12 --- join: jdavidboyd (~user@72.185.97.240) joined #forth 07:57:13 --- mode: ChanServ set +v jdavidboyd 07:57:17 ting did the documentation for FPC which was the forth compiler for dos that i learned forth from 07:57:31 thats the only docs ive seen of his 07:58:24 isforths sources are construted better (kernel i mean) than eforth. eforth blobs everything into 1 file, scatterbrains words i would consider related 07:58:36 The "F-PC Technical Reference Manual"? I'm planning to buy a copy. 07:58:39 isforth organizes everything better at the source level 07:59:12 F-PC is kind of dated, dos 16 bit real mode 07:59:33 it uses a very very clever trick to speed things up by making sure ALL words start on a paragraph boundry 07:59:52 thus you can refer to each word by its segment address only 08:00:00 because its offset from the segment is always 0 08:00:12 I440r: you asked me if i use linux earlier, which i do...do you? 08:00:12 but thats very confusing if you dont understand 16 bit real mode :) 08:00:31 Online copy of "eForth and Zen" -> http://www.offete.com/files/zeneForth.htm 08:00:33 its been my primary OS since about 1998 08:00:48 me for 5-6 months :) 08:00:54 yea. another wall of white academic web page 08:01:20 black text on a blinding wall of white background. i hate that, always have 08:01:28 contrast is inverted. 08:01:38 white text on a black background is MUCH MUCH easier to read 08:01:57 LOL... you can get a bookmarklet in your browser that automatically flips the colour 08:01:59 but that page looks WAY better than the one yu posted earlier 08:02:02 my browser sometimes seems to use my theme for backgrounds, but sometimes that will make test invisible 08:02:14 text* 08:02:25 protist, go read that eforth zen page 08:02:33 THAT would be a tremendous start for you 08:02:55 stop trying to discover for yourself how everything works. it will damage your understanding later 08:02:55 i will look at it 08:03:01 dont look. study it 08:03:04 learn it 08:03:11 i disagree with damaging my understanding lol 08:03:16 you can even probably use that page with the isforth kernel 08:03:35 i am learning, maybe not about forth as it is usually done, but i am learning about assembly and threading 08:03:38 i think (and maybe im biased) isforth is easier to read 08:04:40 academics should format their "Wall of text crits you for 3945834836, your dead" sites into pages that look like newspapers 08:04:48 multiple tall thin columns 08:05:02 you can read those MUCH MUCH easier. which is why newspapers do that 08:06:13 protist, you are learning. but your learning WRONG and thats my point 08:07:09 self taught calssical guitarist.. . . 08:07:30 knows a few chords so starts to play Serenata Espanola.. .. . 08:07:34 all music would sound the same if no one tried to make anything 08:08:05 protist, thers a difference between someone who plays guitar and a classically trained guitarist 08:08:19 there are things you just CANNOT teach yourself very easilly 08:08:37 practice does not make perfect. perfect practice makes perfect 08:08:47 I taught myself everything i know about programming 08:08:58 with books and all 08:09:04 you practice bad mechanics in classical music or forth and... your going to gimp your style 08:09:08 but i am not sure that is what we are discussing 08:09:11 so did i 08:09:15 i have no degree in anything 08:09:34 i can also play classical guitar and never had any training. 08:09:39 I am flexible...i can learn new ways...i want to explore this, though 08:10:04 your understanding is going to be very seriously flawed 08:10:05 then i will make something that is likely more normal 08:10:13 you need to study not try invent :) 08:10:27 i am implementing, this is part of the fun 08:10:30 :) 08:16:38 --- join: fantazo (~fantazo@213.129.230.10) joined #forth 08:16:38 --- mode: ChanServ set +v fantazo 08:17:30 --- quit: fantazo (Client Quit) 08:34:18 is there a name for a data size of 2 cells? 08:34:55 not really 08:35:14 :( 08:50:29 --- join: ncv (~quassel@unaffiliated/neceve) joined #forth 08:50:29 --- mode: ChanServ set +v ncv 09:34:14 --- quit: Inode (Ping timeout: 272 seconds) 09:38:33 --- quit: JDat () 09:45:43 --- join: Inode (~inode@time.uk.chromedpork.net) joined #forth 09:45:44 --- mode: ChanServ set +v Inode 09:51:01 --- join: ASau (~user@46.115.50.24) joined #forth 09:51:01 --- mode: ChanServ set +v ASau 09:53:56 --- quit: protist (Quit: leaving) 10:14:00 --- quit: john_metcalf (Ping timeout: 255 seconds) 10:15:07 --- join: john_metcalf (~john_metc@211.67.125.91.dyn.plus.net) joined #forth 10:15:07 --- mode: ChanServ set +v john_metcalf 10:25:15 --- quit: epicmonkey (Read error: Operation timed out) 10:31:00 --- join: JDat (~JDat@89.248.91.5) joined #forth 10:31:01 --- mode: ChanServ set +v JDat 10:31:31 --- join: tgunr (~davec@cust-66-249-166-11.static.o1.com) joined #forth 10:31:31 --- mode: ChanServ set +v tgunr 10:40:19 --- quit: tgunr (Ping timeout: 248 seconds) 10:41:36 --- join: tgunr (~davec@cust-66-249-166-11.static.o1.com) joined #forth 10:41:36 --- mode: ChanServ set +v tgunr 10:45:40 well got my last so far bug fixed with my pulldown menus but the fix is kind of kludgy 10:46:06 when i cursor down inside a pulled down menu the highlight moves and is redrawn fine. not so when i cursor up. 10:46:25 --- quit: tgunr (Ping timeout: 260 seconds) 10:46:31 to fix this i literally destroy the pulldown window and recreate it from scratch. the newly selected item is then drawn correctly... 10:46:59 so while what i have WORKS... thers still a bug there ive just skirted around it 10:47:03 --- join: tgunr (~davec@cust-66-249-166-11.static.o1.com) joined #forth 10:47:03 --- mode: ChanServ set +v tgunr 10:47:38 two more items to add to this. skipping disabled menu items as i move around the menus and executing the selected item 10:51:30 --- quit: tgunr (Ping timeout: 252 seconds) 10:52:24 --- join: proteusguy (~proteusgu@ppp-58-8-94-189.revip2.asianet.co.th) joined #forth 10:52:24 --- mode: ChanServ set +v proteusguy 10:53:37 --- join: tgunr (~davec@cust-66-249-166-11.static.o1.com) joined #forth 10:53:37 --- mode: ChanServ set +v tgunr 10:57:45 --- quit: tgunr (Ping timeout: 240 seconds) 10:58:38 --- join: Onionnion (~ryan@adsl-68-254-163-124.dsl.milwwi.ameritech.net) joined #forth 10:58:39 --- mode: ChanServ set +v Onionnion 10:59:37 --- join: tgunr (~davec@cust-66-249-166-11.static.o1.com) joined #forth 10:59:37 --- mode: ChanServ set +v tgunr 11:17:43 --- quit: tgunr (Quit: I'm outta here) 11:21:06 --- join: kumul (~Kumool@173.215.194.228) joined #forth 11:21:06 --- mode: ChanServ set +v kumul 11:27:18 --- join: epicmonkey (~epicmonke@188.134.41.175) joined #forth 11:27:18 --- mode: ChanServ set +v epicmonkey 11:38:04 --- quit: ASau (Ping timeout: 252 seconds) 11:39:41 --- join: ASau (~user@46.115.50.24) joined #forth 11:39:41 --- mode: ChanServ set +v ASau 11:46:36 --- join: tangentstorm (~michal@108-218-151-22.lightspeed.rcsntx.sbcglobal.net) joined #forth 11:46:36 --- mode: ChanServ set +v tangentstorm 12:04:48 --- join: tgunr (~davec@cust-66-249-166-11.static.o1.com) joined #forth 12:04:48 --- mode: ChanServ set +v tgunr 13:14:58 does EMIT return the character based on ASCII? 13:21:23 --- quit: MayDaniel (Read error: Connection reset by peer) 13:22:59 it emits an ascii character to the terminal... not sure if "return" is the right word. 13:37:46 --- quit: Nisstyre (Quit: Leaving) 13:48:17 --- quit: JDat () 13:53:07 --- join: JDat (~JDat@89.248.91.5) joined #forth 13:53:07 --- mode: ChanServ set +v JDat 13:58:42 --- nick: derkus -> dessos 14:22:24 --- quit: kumul (Ping timeout: 255 seconds) 14:25:10 --- join: kumul (~Kumool@173.215.194.228) joined #forth 14:25:10 --- mode: ChanServ set +v kumul 14:38:30 --- join: kumool (~Kumool@173.215.194.228) joined #forth 14:38:30 --- mode: ChanServ set +v kumool 14:39:34 --- quit: kumul (Ping timeout: 252 seconds) 14:43:19 --- quit: JDat (Quit: es jau guļ) 14:43:34 --- quit: kumool (Ping timeout: 244 seconds) 15:00:45 --- join: RodgerTheGreat (~rodger@71-13-215-242.dhcp.mrqt.mi.charter.com) joined #forth 15:00:45 --- mode: ChanServ set +v RodgerTheGreat 15:04:48 --- join: kumul (~Kumool@173.215.194.228) joined #forth 15:04:48 --- mode: ChanServ set +v kumul 15:10:45 --- quit: kumul (Ping timeout: 240 seconds) 15:14:44 --- quit: tgunr (Ping timeout: 248 seconds) 15:17:49 --- join: tgunr (~davec@cust-66-249-166-11.static.o1.com) joined #forth 15:17:49 --- mode: ChanServ set +v tgunr 15:38:59 --- quit: epicmonkey (Ping timeout: 248 seconds) 15:40:42 --- join: kumul (~Kumool@173.215.194.228) joined #forth 15:40:42 --- mode: ChanServ set +v kumul 15:45:13 --- quit: kumul (Ping timeout: 256 seconds) 15:49:12 --- nick: dessos -> derkus 15:54:50 --- join: Nisstyre-laptop (~yours@oftn/member/Nisstyre) joined #forth 15:54:50 --- mode: ChanServ set +v Nisstyre-laptop 16:35:52 --- quit: proteusguy (Ping timeout: 264 seconds) 16:48:32 yay think i got my menu system working. 16:48:47 next i have to fix/rewrite see and the debugger 16:48:54 i now the debugger needs a total rewrite 16:49:52 --- quit: ncv (Read error: Operation timed out) 16:55:57 --- part: impomatic left #forth 16:57:21 --- join: proteusguy (~proteusgu@ppp-58-8-109-72.revip2.asianet.co.th) joined #forth 16:57:21 --- mode: ChanServ set +v proteusguy 17:03:26 --- join: fftw (~fastest@la-pinta.la.net.ua) joined #forth 17:03:26 --- mode: ChanServ set +v fftw 17:03:32 --- part: fftw left #forth 17:08:58 --- join: anannie (~chatzilla@unaffiliated/anannie) joined #forth 17:08:58 --- mode: ChanServ set +v anannie 17:17:52 --- join: anannie_ (~chatzilla@95.211.99.11) joined #forth 17:17:52 --- mode: ChanServ set +v anannie_ 17:18:04 --- quit: anannie (Remote host closed the connection) 17:18:16 --- nick: anannie_ -> anannie 17:18:35 --- quit: anannie (Changing host) 17:18:35 --- join: anannie (~chatzilla@unaffiliated/anannie) joined #forth 17:18:35 --- mode: adams.freenode.net set +v anannie 17:23:24 --- nick: tangentstorm -> tangentaway 17:23:49 hey anannie 17:23:56 it's been a while 17:25:10 ana! lol 17:25:15 didnt see u sneek in there :) 17:25:20 /waves 17:25:25 hi rodger 17:25:44 what's up, I440r? 17:25:54 got my pulldown menus working perfectly ish 17:25:59 sweet 17:26:01 what is ish 17:26:07 as in "close to 17:26:08 " 17:26:33 lol 17:26:44 "60% of the time, it works every time" 17:26:55 the other 60% of the time it doesnt 17:27:16 at least your program is giving it 120% 17:27:33 which can be both good OR bad lol 17:27:42 you ever done any ncurses coding 17:27:44 ? 17:27:47 just a little 17:28:00 enough to know that ncurses is a pain in the butt to use 17:28:17 heh MINE isnt 17:28:27 if you had a linux box i would show u my demo 17:28:42 it will be fully released once ive checked all the changes in 17:28:57 RodgerTheGreat: Yes it has. Yes it has 17:29:05 the only linux box I have at home doesn't have the gcc toolchain on it. :| 17:29:16 anannie: what's goin' on? 17:29:54 RodgerTheGreat: Just some drama 17:30:01 I440r: if you'd implemented your forth in java I'd be set :D 17:30:10 anannie: sorry to hear that 17:30:32 RodgerTheGreat, you wont NEED gcc 17:30:53 what assembler/whatever do you require to build it? 17:31:04 nasm 17:31:27 well lemme see if I have nasm 17:31:31 but im not releasing the sources till ive checked it all in... then i do an official release on freshmeat.net too 17:31:58 actually you dont NEED to use nasm. it ships with a prebuilt kernel so you can just run ./extend OR just run the prebuilt extended forth 17:32:15 what distribution is that box 17:32:20 xandros 17:32:27 erm never heared of it lol 17:32:34 it hasn't been called freshmeat in years ! 17:32:38 * kulp forgets what it's called now 17:32:45 fweecode 17:32:54 orite 17:32:55 with a limp wristed camp voice and a lisp 17:33:02 lithp 17:33:03 myep I don't have nasm installed 17:33:13 lik this network used to be called LINPEOPLE but now its ghey "fewwnowde" 17:33:26 anannie: I've just been reading about graph theory and writing compilers 17:33:30 well i was just gona give u a binary for now :) 17:33:45 what the hell, I'll give it a spin 17:34:07 running an executable from the internet? What could possibly go wrong? 17:34:13 www.isforth.com/demo 17:34:21 is xandros debian based? 17:34:33 your cat could explode 17:34:48 it is debian based 17:35:02 ok well when you run it tell me if it says "unknown terminal" blah blah 17:35:05 ohh shit 17:35:08 RodgerTheGreat: That sounds fascinating. What bit in graph theory? 17:35:11 do you have X on that box? 17:35:33 because thers a bug in the linux terminal that makes smacs (set mode alt charset) NOT work any more 17:35:46 and i refuse to duct tape MY code to fix anyone elses breakages 17:36:45 so to see it in all its real glory you would have to run it from an X based terminal emulator 17:36:56 anannie: I was reading about chordal graphs. Graph-coloring is an NP problem which can be applied to register allocation. Chordal graphs, however, have a linear-time optimal coloring algorithm. 17:37:26 I440r: you aren't making me really keen to try this 17:37:32 heh 17:37:38 you need a real linux box :P 17:38:00 it will run in a linux termainl but it wont show boxy characters. it will show letters 17:38:12 the letters translate to the box chars when the alt charset is enabled 17:38:18 I440r: this is just a cute little thing I use for writing java on bus rides. It wants only love and appreciation. 17:38:21 but alt chars are not working in the linux termainal any more 17:39:14 anannie: I was also reading some Dijkstra. He has a very entertaining, if crotchety, writing style. 17:39:29 sort of reminds me of the dry humor Knuth has except more hyperbolic 17:40:09 mor crotchety than ME ? 17:40:19 yes, and in different ways 17:40:38 what makes chordal graphs different RodgerTheGreat? 17:40:55 I440r: blown mind ! , amirite? 17:41:57 --- join: protist (~protist@125-237-130-19.jetstream.xtra.co.nz) joined #forth 17:41:57 --- mode: ChanServ set +v protist 17:42:07 anannie: hello! 17:42:08 anannie: it has to do with the structure of the graph. A chordal graph doesn't have induced cycles (cycles that stand alone when you isolate a subgraph) of length > 3 17:42:32 RodgerTheGreat: it appears my fears of being token thrreaded were unfounded....i think i am indirect threaded :) 17:42:34 hi protist 17:42:41 anannie: hello :) 17:42:52 RodgerTheGreat: Fascinating. I've decided to go to college and hopefully I'll learn all of this 17:43:10 anannie: oh, really? Cool! Where were you thinking about applying? 17:43:12 anannie: i start my CS degree February 19th :D 17:43:16 anannie, thats gona be expensive if you cant get a scholarship 17:43:24 anannie: i am excited to finally move out again hahaha 17:43:54 token threading uses tokens that are indexes into tables 17:44:05 u shud do direct threading, its faster and less obscure 17:44:32 I440r: i think i am indiret threaded 17:44:42 RodgerTheGreat: MIT, Stanford, Harvard, Yale, UCB and the like 17:44:43 I440r: I think he already agreed token threading is kinda clunky but he wanted to try this out before changing 17:44:55 that means every execution token is a pointer to a pointer to the primitive to execute 17:44:58 anannie: ah, going for the big brand names 17:44:59 I440r: Well worth the cost if I learn how to build things properly, get connections and have a show in the door 17:45:14 RodgerTheGreat: Nah, just the smartest professors. 17:45:29 RodgerTheGreat: and the greatest likelihood that I can flip it into something valuable 17:45:29 that doesn't necessarily equate to the best teachers 17:45:29 anannie, yes education will be good to have 17:45:40 RodgerTheGreat: i think i am actually indirect (not token) theaded :)...but it is hard for me to tell what I am, declaring data in asm is kind of weird 17:45:51 if you want really good teachers smaller universities like Harvey Mudd and RPI might be a better choice 17:45:56 RodgerTheGreat: I don't intend to be taught things in that manner. I intend to learn how they conduct research 17:45:59 anannie, you can build my autonomous dog fighting RC aircraft :))) 17:46:05 and ill do the code :) 17:46:12 (disclaimer: I am not affiliated with either of the universities I recommended) 17:46:48 RodgerTheGreat: Where did you go to school? 17:46:54 for engineering i think perdu is good 17:47:22 or stanford if you can afford or get a scholarship :) 17:47:36 Michigan Tech. It's in the boonies but we have one of the best research dollars / patents and publication ratios in the US and we have a favorable teacher/student ratio 17:47:37 I intend to work part time 17:47:57 Aren't they ramping up their solar research RodgerTheGreat? 17:48:09 Speaking of compilers, do you guys know about the work Mat2's been doing with his 4-bit instruction set for retroforth? 17:48:28 anannie: we're building a new solar research complex, I know that 17:48:32 tangentaway: isn't retroforth implemented n python? 17:48:49 RodgerTheGreat: That actually sounds like a very interesting place 17:48:53 protist: Retro is self-hosting. Ngaro, the VM, is implemented in many languages 17:48:56 Lawyer has affair with client, bills her for time having sex <-- lol this restores my faith in the justice system.... NOT 17:49:05 anannie: you have to like snow. A lot. 17:49:15 i like michigan but its just a LITTLE too cold lol 17:49:15 or want a good excuse to stay indoors. 17:49:38 it's beautiful in a rural sort of way 17:49:38 protist: retro is written in retro :) as RodgerTheGreat said, the vm is written in all kinds of thigs 17:49:52 syracuse NY also has good engineering courses 17:49:58 tangentaway: RodgerTheGreat gotcha :) 17:50:00 I love the cold RodgerTheGreat 17:50:19 retro also has a bootstrap compiler but I think that is written in Java 17:50:30 not that it matters 17:51:03 https://www.assembla.com/wiki/show/navm = mat2's virtual machine. he uses only 16 instructions, and so can store 16 operations in a 64-bit word 17:51:04 RodgerTheGreat: i have immediates in my Forth now :)...i am working on implementing conditionals using immediates now, i had them completely defined in asm haha 17:51:22 anannie: well, feel free to see if any of our faculty is doing research you'd be interested in and if so file an application. Doesn't hurt. 17:51:51 RodgerTheGreat: As an academician what do you think my chances are for one of these schools? 17:51:53 protist, thas step in the right direction. next you need to implement a quit/interpret loop 17:52:16 I440r: yeah, and i may go direct threaded next time :) 17:52:19 he's also written a virtual display device (for text display) that uses SDL 17:52:20 anannie, you cant go there... you need to go to cambridge :) 17:52:28 anannie: MTU is very easy to get accepted to, but we have challenging classes. I cannot speak from personal experience for other universities. 17:52:32 /bonk 17:52:56 --- nick: tangentaway -> tangentstorm 17:53:07 I440r: But I don't wish to be proper! 17:53:22 'course to be perfectly honest as a non-white non-male your chances of getting accepted into a CS program at essentially ANY university is elevated 17:53:33 i did a basic engineering course at a cambridge college 17:53:47 within the limit of proportionality, stress is proportional to strain.... 17:53:47 anannie: you aren't white? 17:53:52 which is all i remember :P 17:53:58 RodgerTheGreat: how do you know she isn't white? 17:54:13 if you are competent (and you are) they will be tripping over themselves to recruit you 17:54:22 protist: seeecrets 17:54:28 RodgerTheGreat: ;) 17:54:45 i think she is cute but thats a different story :) 17:54:50 man i have this weird yawning thing the last few days...i can't stop 17:55:08 I440r: I *hope* that isn't a major factor in admissions 17:55:23 just an observation 17:55:26 I440r: Well I don't want to be cute. I want to be lady like :p 17:55:36 lady like == proper 17:55:39 RodgerTheGreat: that is how America works 17:55:42 we already disqualified that :P~ 17:55:49 not in the british sense 17:55:55 anannie: that distinction is all in the technique 17:56:01 the birttish are "no sex please were brittish" 17:56:04 proper in the british sense is being a stiff. 17:56:12 lady like is being graceful 17:58:44 anannie: overall I'd say my best advice would be keep looking at universities, make sure there are faculty at said universities doing research that interests you, apply to a bunch of places and then make your decision 17:59:25 and investigate smaller universities- many of them are quite good despite not being household names 17:59:34 often they are much cheaper, too 17:59:40 I'm only focussed on one thing. Making robots and machines 18:00:06 if you plan to pursue a graduate degree then doing your undergrad at a small university and then trading up to someplace big can be a very cost-effective way to go 18:00:23 better teaching during undergrad, more connections and research opportunities during grad school 18:00:58 anannie, PRINTERS are probably the single most impressive robot ive ever seen that you can buy off the shelf for home use 18:01:16 robotics is a very wide field its not just building cars etc 18:01:43 the university of texas at austin is another really good school 18:01:58 lol ill be moving to close to austin 18:02:10 i used to live in Dallas and Houston 18:02:10 austin however is a HORRIBLE place to live. i35 is a BITCH 18:02:21 ill be moving to houston probably 18:02:26 Dijkstra taught at Austin 18:02:39 i lived in san antonio for about 3 years 18:03:46 Dijkstra chose Austin over several other major universities when he immigrated to the US because he was most pleased with their CS program 18:03:51 I think that says something 18:04:18 But I won't be doing CS 18:04:19 obviously I cannot speak from personal experience but friends have told me it's a good school 18:04:33 anannie: no? 18:04:34 I'll teach myself CS, but I'll be doing primarily a Mechanical degree combined with CS 18:04:42 anannie: ok 18:05:00 I440r: I agree and that's why I would like to learn how to design them 18:05:08 I should mention that mechanical engineering is one of MTU's largest programs 18:05:40 18:06:11 RodgerTheGreat: I prefer MIT (even though it's unlikely that I'll get in) because it has a combination of everything and is the temple of AI 18:06:22 hrm 18:06:35 RodgerTheGreat: CMU, Stanford and UPenn are others 18:07:12 I prefer this program though; http://www.seas.upenn.edu/undergraduate/degrees/dual-degrees.php 18:07:39 I'd go with CMU or Stanford over MIT. MIT has a pretty big marketing budget but a rather lackluster undergraduate program 18:08:35 and they are commies 18:09:06 also boston totally sucks to live in 18:09:23 i got stuck at a red light in boston once 18:09:25 for 4 hours 18:09:28 THAT I can say from experience 18:09:42 was red. then it was green but the traffic going the othr way was already in the intersectiin. no way through 18:09:45 4 fucking hours 18:10:33 everything is loud, pretentious, "historical" and expensive in boston 18:10:54 and it is essentially one gigantic college town 18:11:06 throw a rock in the air and it will land in a university 18:11:23 That's why I think it's a nice place RodgerTheGreat 18:11:38 I have also heard credible horror stories about CS majors from Harvard 18:11:46 Horror stories? 18:12:22 friend of mine worked with a Harvard CS PhD student who didn't know what decidability or turing-completeness meant 18:12:39 this is roughly analogous to a mechanical engineer who's never heard of torque 18:13:31 Maybe he was just one of the happy bottom quarter ones? 18:13:43 hrm. I think my compiler is as concise as it's gonna get. 18:13:56 anannie: he was doing research work at MIT 18:14:12 RodgerTheGreat: That isn't possible. That can't be true 18:14:32 anannie: like I said, MIT has a fantastic marketing department and fan club 18:14:47 it is not at all what it is cracked up to be 18:14:53 especially for undergrads 18:14:58 --- join: kumul (~Kumool@173.215.194.228) joined #forth 18:14:58 --- mode: ChanServ set +v kumul 18:16:04 RodgerTheGreat: but they do cutting edge research in AI 18:16:16 anannie: *did* 18:16:22 in the 80s 18:16:34 What changed? 18:16:51 you could in theory hobnob with various big names if you went to MIT but in practice that is what every other undergrad will be drooling over when they aren't patting themselves on the back for being MIT students -> geniuses 18:17:12 you know that I won't fall for that 18:17:15 all your courses will be taught by TAs 18:17:28 * RodgerTheGreat shrugs 18:18:04 just sayin', look at other universities 18:18:12 perhaps the university of washington 18:18:17 TA? 18:18:35 kumul: teaching assistant. Generally grad students. 18:40:26 kumul: what are you up to this evening? 18:49:33 sleep comfortably 18:50:09 :) 18:50:51 sleeping is the opposite of being up 18:55:54 --- quit: tangentstorm (Ping timeout: 256 seconds) 18:56:25 then im not "up to" anything, what are you accusing me of? im not that mischievous :) 18:56:48 --- join: tangentstorm (~michal@108-218-151-22.lightspeed.rcsntx.sbcglobal.net) joined #forth 18:56:48 --- mode: ChanServ set +v tangentstorm 19:07:32 kumul: I dunno I was just making conversation 19:07:52 I understand that's something people do in social contexts 19:08:34 although admittedly my understanding is abstract and theoretical 19:25:38 your more prepared than me, I had to learn the hard way! it would be nice to have an understanding of social behavior 19:29:43 i always go with an uninteresting tidbit that just grinds conversation to a halt 19:30:21 19:30:30 :) 19:31:55 tangentstorm: how about you? What's shakin'? 19:32:55 * kumul is genuinely interested 19:33:13 did you finish your text editor? 19:35:19 Not yet. 19:36:19 I'm writing a hypertext editor in pascal (code editor + database + version control), to be scripted with retroforth 19:37:37 But today I'm working on opening the source code for an oberon compiler, which will hopefully also have a retro backend soon :) 19:37:49 https://github.com/nickelsworth/noct 19:37:52 tangentstorm, i think RodgerTheGreat meant like in life, generally, socially 19:38:21 actually I am considerably more interested in hearing about projects 19:38:44 tangentstorm: that sounds like a lot of fun 19:38:45 haha. I don't really have a social life at the moment, at least outside of IRC. all i do is write code lately. 19:38:56 tell me about it 19:40:14 the editor is here, but there's not much to it yet: https://github.com/minneron/minneron 19:41:29 and it's all untangled up in org-mode files... i'm going to just push the tangled pascal source next time i update it 19:42:40 you changed to git, i thought i followed you on bitbucket 19:42:48 s/'/?/ 19:43:54 nope. i might have an account there but i don't use it for anything... the only other one i use is launchpad, because the main retroforth repo is there 19:44:21 Ugh. People keep choosing project hosting that's slow as snails. 19:45:02 what, github? :) 19:45:23 Yeah. Github sucks across the Atlantic and is almost unusable across the Pacific. 19:45:30 oh 19:46:07 well, the nice thing about git is you can mirror it anywhere 19:46:20 Git and a half-dozen others, yeah. 19:46:35 i just wouldn't know where else to put it :) 19:46:38 * ttmrichter uses Fossil, being a fan of the whole "small, fast, tidy" code thing. 19:47:02 tangentstorm: Bitbucket does Git. And there's a few other sites that do Git hosting if you need it. 19:47:47 I think Google Code does Git and SourceForge does Git as well these days. 19:49:18 well... i don't need it. :) i'm perfectly happy with github. but if there were someone who was actively contributing to one of my projects, i'd be more than happy to set up a mirror that was convienent for them 19:50:08 That becomes a chicken/egg thing, doesn't it? 19:51:01 I don't know. You're the first person who's ever mentioned this problem to me. :) 19:51:28 Probably the first person who's conversed with you about Github signing in from Asia. ;) 19:51:52 probably! 19:51:53 --- quit: rabenauge (Ping timeout: 255 seconds) 19:51:58 So... Minneron is an IDE for Pascal? 19:52:02 no 19:52:07 it's an IDE for wejal 19:52:19 Wejal is what? 19:52:22 but also a general text editor and database 19:52:31 wejal is a programming language that doesn't yet exist :) 19:52:39 Ah, I see. 19:52:46 What are the main influences on it? 19:53:17 And what is the target of the programming intended for this language? 19:53:20 but it will be bootstrapped from ngaro-style machine code, by way of forth and lisp-style s-expressions 19:53:45 the language itself will be very much like oberon 19:54:14 and then it will have a parsing engine component that allows you to extend the syntax to whatever else you want 19:54:19 --- join: Onionnion_ (~ryan@adsl-68-254-165-254.dsl.milwwi.ameritech.net) joined #forth 19:54:19 --- mode: ChanServ set +v Onionnion_ 19:54:24 --- join: derkus_ (~derk@c-174-60-176-249.hsd1.pa.comcast.net) joined #forth 19:54:24 --- mode: ChanServ set +v derkus_ 19:54:32 Hopefully better-specified and without gratuitous omissions just to cram its definition in 16 pages? :) 19:55:05 :) yes, i was already planning to support your modula-2 dialect 19:55:29 My Modula-2 dialect? I don't have one... 19:56:13 --- quit: Onionnion (Ping timeout: 245 seconds) 19:56:45 --- quit: derkus (Ping timeout: 240 seconds) 19:57:02 oh! somehow i got it in my head that you were trijezdci's main collaborator. my mistake! :) 19:57:12 I'm just his loudest kibitzer. 19:57:21 haha 19:57:25 fair enough 19:57:31 I'd say dsar was his biggest public collaborator. 19:57:44 He's got another one that's not on IRC. 19:58:06 I'm just watching the project with interest because I really want to throw C away for good. 19:58:10 ahh ok 19:58:45 The latest rev of Ada almost has me interested, but it ... did nasty things to my box when I installed it. 19:58:52 is there a way to make gdb tell me the line it seg faulted on?...without ssingle stepping to the seg fault? 19:59:06 I got a functioning Ada-'12 compiler, but it killed all the other gcc languages in the process. 19:59:19 protist: Divide and conquer. 19:59:29 ttmrichter: i have to have a breakpoint? 19:59:31 welp, guess you're using ada to write a replacement compiler 20:00:59 protist: Yes. 20:01:09 RodgerTheGreat: I'm not using Ada at all because of the breakage issue. :) 20:01:18 aw 20:01:39 "when life gives you only an ada compiler, make ada-aide" 20:01:45 Ada's also a bit too heavyweight as a C replacement. 20:01:54 Reaching for it as a possibility is just desperation. :) 20:02:01 * ttmrichter hates the curly brace blight. 20:04:32 there's always free pascal and haskell and... forth :) 20:06:57 * Onionnion_ is learning forth 20:07:00 --- nick: Onionnion_ -> Onionnion 20:07:08 Haskell's not suited to low-level stuff (like embedded) and Forth has the problem of being basically a single-programmer project language. :) 20:07:27 For small embedded systems I'll reach for (or hand-roll) a Forth any time. 20:07:56 For bigger things Forth runs into serious scaling problems; the better you are as a programmer the bigger the problems are before you're overwhelmed by them. :) 20:11:37 forth is great when a problem can be simplified. If something is inherently hairy, forth cannot save you. 20:15:14 * Onionnion needs a break from forth 20:15:53 i'm a fan of all three, but i tend to do most of my work in pascal 20:15:57 RodgerTheGreat: Yep. 20:16:00 and python 20:16:10 tangentstorm: I like Haskell the language, but hate Haskell the ecosystem. 20:16:16 haha 20:19:38 I like its type system. to answer your earlier question: wejal is an oberon/pascal-style language with a type system like haskell's, with details borrowed from various other languages 20:21:37 I think implicit typing suffers from a readability standpoint compared to explicit types 20:21:51 RodgerTheGreat: I tend to disagree actually. 20:22:07 simply because a compiler can infer something does not mean it is clear to a reader 20:22:12 As long as the parameters to functions are explicitly typed, the body of the function, if you've done it right, should not be. 20:22:41 If it's not clear to the reader, you annotate it. No problems. 20:22:49 And your compiler will tell you if you annotate it with the wrong type. 20:23:36 So using Mercury as an example, I technically don't have to put :- func/pred declarations in the implementation part of a module. 20:23:42 But I do anyway. As a form of documentation. 20:24:21 But my functions are short enough that I don't need to pedantically type each and every local. It should be clear from context. In the rare cases where it's not, I do the explicit typing. 20:25:02 explicit types are also simpler from an implementation perspective which is valuable if, like me, you feel that languages should be implementable from scratch by a skilled user 20:25:22 very few programmers could be expected to implement a Haskell from scratch 20:25:35 and indeed this is not even slightly a design consideration 20:26:33 Not all languages should be implementable from scratch. *SOME* should be, yes, but if you're making a language targeting a specific domain, requiring the implementer to be a domain expert is fine by my books. 20:26:49 *SYSTEMS* languages should be as simple as possible (and no more!). 20:27:15 If I'm targeting a massive data management system, however, that requirement is nonsense. 20:27:39 simplicity is not diametrically opposed to expressive power 20:27:54 and shorter source text is not necessarily simpler code 20:28:05 Agreed. 20:28:14 But nor is longer code necessarily simpler code. 20:28:18 A balance has to be struck. 20:28:21 yes 20:28:28 (COBOL is the evidence the other way.:D) 20:28:46 I find Haskell to be unnecessarily baroque and riddled with special-case syntax 20:28:52 When I read crud like C++ or Java I find it obfuscatory. 20:29:19 MyTypeName myTypeNameInstance = new MyTypeName(new SomeOtherType()); 20:29:23 That's just stupid. 20:29:43 there is a massive amount of bad java out there but wielded properly it can be very simple and expressive 20:29:47 I lose what's being done in a barrage of almost, but not quite, repetition. 20:30:28 in your above example the first MyTypeName should probably refer to an abstract interface whereas instantiation of the type will refer to a concrete implementation 20:30:36 Haskell has only one piece of special case syntax that I can think of off the top of my head: do-notation. 20:30:44 presuming we are applying the principle of least concerns 20:31:07 ttmrichter: infix, prefix 20:31:35 there are half a dozen ways to express a lambda and function application 20:31:42 That and practically every other non-Lisp, non-Forth language in the world, RodgerTheGreat. 20:31:55 Ah, that's not SYNTAX. 20:31:57 That's library. 20:32:00 $ is a function. 20:32:03 I think . is as well. 20:32:10 it's still a mess 20:32:18 The Haskell ecosystem, recall, is the part I said I hated? ;) 20:37:48 it is also irritating that haskellions fetishize category theory and use what seems to be intentionally obtuse terminology to refer to relatively commonplace ideas 20:43:02 ahahaha! i think i found my error 20:43:41 protist: off-by-one? 20:44:06 RodgerTheGreat: i didn't define uv in my asm 20:44:22 uv? 20:44:35 RodgerTheGreat: user_variable_pointer 20:44:39 oh 20:44:41 --- quit: kumul (Quit: Leaving) 20:44:47 like dp, but for user_vars 20:44:50 :) 20:45:14 it was pushing 0, so i ended up doing 0 @ 20:46:20 ooh 20:46:38 dereference zero and you're gonna have a bad time 20:46:58 things equivalent to 0 ! have lead to some interesting errors for me in the past 20:47:05 given that address zero on my VM Is the PC 20:48:10 lol 20:48:22 pc is? 20:48:33 the program counter 20:48:49 so storing something to address zero is a branch to I know not where 20:49:35 haha 20:49:40 that sounds like a mess hahaha 20:50:51 --- join: Bahman (~Bahman@bba141175.alshamil.net.ae) joined #forth 20:50:52 --- mode: ChanServ set +v Bahman 20:50:53 by default my compiler places the data stack below the rstack so stack overflows are very colorful 20:51:17 RodgerTheGreat: i have if/then working as immediate definitions, now :D 20:51:29 RodgerTheGreat: hahaha, gross 20:51:35 see how helpful it is to have immediate words? 20:51:53 now i will redo THEN and friends 20:51:54 :D 20:52:04 starting to feel more like a Forth 20:52:07 protist: I have actual debugging tools and things but sometimes it's more fun to just leave them off and piss into the wind 20:52:18 RodgerTheGreat: :P 20:52:44 RodgerTheGreat: I agree absolutely about the gratuitous mathwank in Haskell. It's one of two reasons I don't use Haskell any longer. 20:53:20 : if uv @ , con_type uv, uv @ 0 uv, [ ' ?branch ] literal , ; immediate 20:53:20 : then dp @ swap ! ; immediate 20:53:28 the bad part of keeping stacks in main memory is hilarious and entertaining overflows. The good part of keeping stacks and stack pointers in main memory is being able to cheaply and easily relocate them as in a cooperative multitasking system 20:55:18 ttmrichter: overall I consider haskell to be a collection of ideas invented in other languages which I do not consider particularly interesting, residing in a community I do not wish to dip a toe into. I have briefly tinkered with it but I always come away somewhere between displeased and horrified. 20:55:59 I feel somewhat similar about python but at least in that case the python programmers are not generally insufferable 20:56:15 I consider most of the ideas in Haskell interesting. I just find the execution, the ecosystem and the community a bit off. 20:56:31 Where "bit" is defined as |← →| 20:56:43 --- join: spoofer (~cruella@72.10.28.164) joined #forth 20:56:43 --- mode: ChanServ set +v spoofer 20:57:37 it is interesting to me that the python and ruby communities seem to want to be polar opposites 20:57:51 both languages are essentially a coat of paint on perl 20:58:02 but god forbid you intimate that 20:58:33 Do not get me started on Ruby. Trust me here. ;) 20:58:43 I like Perl 20:58:51 there's nothing wrong with perl per se 20:58:58 people seem to love to hate Perl 20:59:08 it's just dandy if you're writing programs intended to be maintained by one person 20:59:24 I'm not a fan of Perl. 20:59:24 honestly i wouldn't want to build a large project in it, because the power of the language is temping, and can lead to bad factoring 20:59:27 in larger groups it has a more severe case of the problems which plague C++ 20:59:48 in order to use perl nicely you must carve out a subset of the language to use 20:59:50 For most things that people use Perl for I'd reach for Awk or Rexx (depending on the needs). 21:00:01 rexx is kind of an interesting language 21:00:15 "everything is a tree" is not frequently done in languages 21:00:19 RodgerTheGreat: http://yfl.bahmanm.com/Members/ttmrichter/language-information/rexx 21:00:24 I know it's interesting. ;) 21:00:45 closest thing I know of to rexx might be MUMPS, but that's a little mean to rexx 21:01:00 Very mean to Rexx. 21:01:04 Rexx has a syntax. Mostly. 21:01:05 :) 21:01:23 ttmrichter: mainly in the sense that associative trees are the native datatype 21:02:04 there are a lot of interesting classes of languages defined by the sentence "what if everything was a(n) ____" 21:02:04 --- nick: derkus_ -> derkus 21:02:15 tcl: string 21:02:22 rexx: tree 21:02:32 lisp: pair (unless it's an atom) 21:02:50 Refal: Markov Chain :) 21:03:19 Prolog: chunk of information 21:03:45 is it 0branch, or Obranch? 21:04:01 oh hrm. I called mine branch0 21:04:07 haha 21:04:15 but it's definitely a zero 21:04:32 ttmrichter: lately I've been finding myself taking a liking to logo 21:05:08 it has many of the nice properties of lisp but a syntax that, while simple, seems to be more human-friendly 21:05:25 and non-eager list evaluation can be useful 21:05:32 Logo is one of the few languages I've never had the chance to try out seriously. (Smalltalk is another.) 21:05:34 --- quit: jdavidboyd (Remote host closed the connection) 21:05:35 the dynamic scope thing is a mixed bag 21:05:53 ttmrichter: I have a very small dialect implemented in forth if you're curious 21:07:57 RodgerTheGreat: i am curious :p 21:08:23 https://github.com/JohnEarnest/Mako/tree/master/demos/Loko 21:08:44 this logo dialect has even been proven out by testing it with actual human children 21:10:01 www.isforth.com/isforth-1.24b.tar.bz2 released 21:10:31 Loko is loosely based on UCBLogo but I have made some minor alterations to the syntax (for one, making the grammar unambiguous) and it uses an intentionally small list of primitives so that the "missing" ones can be implemented as an exercise 21:10:51 perhaps I should say it is loosely based on Apple ][ Logo 21:11:03 the manual for which was more frequently used as a reference 21:11:12 I440r: cool beans dude 21:11:48 i think it is interesting how Perl subroutines have a forth feel with `shift' 21:12:24 the main thing I have decided in working with Loko is that the standard logo primitives for doing a lot of graphics operations are clunky and weird 21:12:48 but the core of the language is quite nice 21:13:45 yea but now i has to fix the damned decompiler grrr 21:13:48 and the debugger :P 21:14:05 but once that is done i can officially release the avr stuff 21:14:20 --- quit: spoofer (Quit: Leaving) 21:15:28 rexx, eh? 21:15:37 wejal is also an "everything is a tree" language. 21:16:24 rexx was in the amiga os before ibm even put it in dos lol 21:16:37 the only version of dos that had rexx was ibm pc dos 7 21:16:43 NOT ms dos 21:17:06 I440r: Um... You know that in an IBM context DOS predates the PC by a decade or more, right? 21:17:34 ms bought dos when ibm came to them for an OS 21:17:46 You're digging yourself in deeper. 21:17:52 but version 7 was the ONLY version of ibm;s dos that had REXX 21:17:58 and rexx is an ibm language 21:18:04 amiga os had rexx built in 21:18:58 DOS, in an IBM context, means DOS/360. 21:19:04 Not PC-DOS. 21:19:22 (There's a reason why there's a "PC-" or "MS-" there. It disambiguates.) 21:20:01 is that their operating system for the xbox 360? ;) 21:20:31 and your splitting hairs 21:21:05 his splitting hairs what !? 21:21:42 i'm not seeing the tree aspect on the wikipedia page about rexx... 21:22:01 tangentstorm: Look at how variables are treated. Specifically look at how "arrays" are done. 21:23:30 aha. http://en.wikipedia.org/wiki/Rexx#Compound_variables 21:23:38 Bingo! 21:24:45 not quite what i was thinking of when i said everything was a tree in wejal... i meant something more like xml 21:24:54 this is neat though :) 21:26:23 Rexx is a cool, under-appreciated little language. 21:26:33 As I said, where most people reach for Perl, I reach for Awk or Rexx, depending on the task. 21:27:27 isnt rexx for doing remote control of a machine? 21:27:33 or does it have other uses too? 21:27:59 i never used it at all during the amiga days 21:28:06 It's ... a scripting language. 21:28:11 Like Perl, Awk, Python, Ruby. 21:28:20 And it's intended to be embedded, like Tcl or Lua. 21:54:29 afk cooking 22:13:54 --- nick: tangentstorm -> tangentsleep 22:37:06 'night all 22:37:33 --- quit: RodgerTheGreat (Quit: RodgerTheGreat) 22:46:05 --- quit: I440r (Remote host closed the connection) 23:02:11 --- quit: Onionnion (Quit: Leaving) 23:05:52 --- quit: foxes (Ping timeout: 248 seconds) 23:06:18 --- join: foxes (~fox@124.193.192.54) joined #forth 23:06:18 --- mode: ChanServ set +v foxes 23:29:51 --- quit: anannie (Quit: ChatZilla 0.9.89 [Firefox 16.0.1/20121010223843]) 23:44:57 --- quit: protist (Quit: leaving) 23:59:59 --- log: ended forth/13.01.18