00:00:02 --- log: started forth/00.12.08 00:00:02 ok, then I won't either 00:00:25 sorry hehe 00:00:34 not to worry, I solved part of it 00:00:41 :) 00:00:42 and relearned some bash 00:01:06 bash is cool, sometimes i think i shud realy learn it 00:01:15 i was going to do a forth interpreter in bash 00:01:19 you know, I would very much like to see a forth as versatile as TCL 00:01:26 and then write a bash interpreter in forth 00:01:30 and have them interpret each other heh 00:01:48 but I think forth has a very long way to go until it gets there 00:02:00 and I'm not sure it ever will 00:02:19 it may remain forever the domain of embedded controllers 00:02:30 where it belongs 00:03:05 you think so? 00:03:05 well i know it does 00:03:05 but i dont think its restricted to there 00:03:05 i just think that that is where it excells 00:03:05 you're spending a lot of effert to make a clean, fast one for a full-blown op-sys 00:03:05 it is 00:03:21 but I think it *could* excell in general programming, too 00:03:33 if someone would develop it properly 00:03:46 and I think the job is too big for just me 00:04:12 it needs a true following 00:04:17 but it will never have that 00:04:28 not a very big one, anyway 00:05:27 no 00:05:33 just a few dedicated individuals 00:05:37 I think I'm going to document it similar to [IF] 00:05:44 want to see a clip? 00:05:48 sure 00:06:14 Compilation: Perform the execution semantics given below. 00:06:17 Execution: ( flag | flag "name" ... -- ) 00:06:27 If flag is true, do nothing. Otherwise, skipping leading spaces, parse and discard space-delimited words from 00:06:27 the parse area, including nested occurrences of [IF] ... [THEN] and [IF] ... [ELSE] ... [THEN], until either the 00:06:41 word [ELSE] or the word [THEN] has been parsed and discarded. If the parse area becomes exhausted, it is 00:06:42 refilled as with REFILL. [IF] is an immediate word. 00:06:55 [done] 00:07:25 I think that is quite clear clear, and fits my need pretty closely, thank you for reminding of [IF] 00:08:21 i didnt... you rememberd it urself hehe 00:08:25 i just nudged u that way hehe 00:08:38 yes, something you said reminded me of it 00:08:47 yup 00:09:18 rendered HTML just doesn't paste into IRC worth a shit 00:09:58 hehehe 00:12:33 hey, how should methods be specified? 00:12:50 can I give you an two examples for you to compare? 00:14:06 sure 00:14:13 ok 00:14:16 give examples, dont ask if u can :P 00:14:18 ---- start 1 00:14:28 s" 279AFA83-4981-11CE-A5210020AF0BE560" Interface: IDSound 00:14:28 IDSound Methods: 00:14:28 IDS.CreateSoundBuffer 00:14:28 IDS.GetCaps 00:14:28 ;methods 00:14:35 --- end 1 00:14:37 ACK! 00:14:39 erm 00:14:40 wtf is that? 00:15:14 lemme try again ... 00:15:18 it's forth 00:15:26 ---- start 1 00:15:28 s" 279AFA83-4981-11CE-A5210020AF0BE560" Interface: IDSound 00:15:28 IDSound Methods: 00:15:28 IDS.CreateSoundBuffer 00:15:28 IDS.GetCaps 00:15:28 ;methods 00:15:33 ---- end 1 00:16:10 ---- start 2 00:16:11 wow 00:16:13 s" 279AFA83-4981-11CE-A5210020AF0BE560" Interface: IDSound 00:16:13 IDS.CreateSoundBuffer 00:16:13 IDS.GetCaps 00:16:13 ;methods 00:16:16 weird forth 00:16:20 ---- end 2 00:16:25 wow what? 00:16:54 actually, it's pretty mundane forth, your overlooking the s" at the beginning of the ID string 00:17:27 how is that s" associated with what interface: creates ? 00:17:40 I'm going to chang ";methods" to ";interface" 00:17:56 i would suggest that actualy hehe 00:18:14 I4: it is the OSF format representation of the GUID that identifies that particular interface 00:18:16 but how is what s" compiles associated with what interface: compiles 00:18:23 yes i know 00:18:26 i fogured that part 00:18:36 but you have s" and interface: 00:18:44 they both compile stuff 00:18:49 this is meant to be used in interpretive mode ... to build structures 00:18:53 but the stuff they compile are not associated that i can see 00:19:17 s" normally wouldn't place anything in the dictionary 00:19:27 well, it is actually 00:19:32 hehe 00:19:42 the string specifies an interfaces 00:19:45 the string specifies an interface 00:19:45 who compiles the string data then ? 00:19:58 hrm 00:20:19 Interface: parses the string and places the binary array in the dataspace for the DSound word 00:20:32 the string specifies an interface 00:20:49 the interface consists of a group of function calls 00:21:00 the are not named, but are numbered 00:21:19 :) 00:21:22 the number is incremented and stored with each name that is parsed 00:22:20 this is all AFTER the object is created 00:22:45 an object can have more than one interface 00:23:23 when an interface for an object is created, you get a pointer to a table of function vectors 00:23:24 :) 00:23:28 this is all beyond me hehe 00:23:48 the names are mnemonics for offsets into the function table 00:24:18 ok, do you want me to start over, or just drop it? 00:24:41 my forte is LOW level code hehe 00:25:25 believe me .... when you execute IDS.CreateSoundBuffer , it does @ @ EXECUTE 00:25:35 that's about as low-level as you get 00:25:58 and it does the same thing on Linux, BSD, Windoze, and MacOS 00:26:34 hehe 00:26:54 I'm wondering if the second example doesn't make Interface: too complex 00:27:12 because it parses the string AND all the method names 00:27:30 the first example had two different words to do it 00:27:35 ok, do you want me to start over, or just drop it? 00:27:43 hehe 00:27:46 erm 00:27:54 all compiled code is low level 00:28:00 the source is what is high level 00:28:05 right 00:28:07 i cant think high level 00:28:12 COM is a binary standard 00:28:20 even when i code c i code low level 00:28:21 like VFAT or ext2 00:28:37 vfat and ext2 are complicated beasties 00:28:52 BUT low-level stuff can get incredibly complex ... 00:28:57 yes 00:29:05 the purpose of high-level code is to make things vastly simpler 00:29:06 bot alot simpler also 00:29:09 erm 00:29:10 no 00:29:19 it tries to put alot of shit into a small space 00:29:31 tht isnt a simplification :P 00:29:48 ok, look at the interface for the "open" syscall in linux ... 00:30:03 it is a VERY simple interface 00:30:20 a string filename, a few mode bits, maybe 10 at most 00:30:55 but that is the tried and tested interface to one of the most complex software systems the world has EVER seen 00:32:38 well 00:32:53 it still packs alot of complicated shit into one small word but 00:33:15 what you have is ALOT of simpler problems that it covers 00:33:18 opena file 00:33:21 open a socket 00:33:24 open a device 00:33:25 etc 00:33:29 yes, a terminal ... 00:33:32 you GOT it 00:33:44 but each of these is a simpler problem than the whole 00:33:46 it's absolutely beautifull in conception 00:34:07 if there were a seperate call for each case, it would be a NIGHTMARE 00:34:14 treat everything as a file 00:34:20 forth treats everything as a word 00:34:22 or a number 00:34:26 right 00:35:02 I have a similar situation, and I expecting to write a high-level interface to COM that is simple and straight-forward 00:35:38 theoretically, it should be doable any any platform ... although some forths are to broken to do it 00:36:40 I take it your bored of the discussion? 00:36:58 no hehe 00:37:25 ok, would you like a 10 minute overview of what a COM object is? 00:37:30 sure 00:37:37 what does com stand for again ? 00:37:39 so you can see what bits of info are needed? 00:37:47 Component Object Model 00:38:02 dcom = Distributed Component Object Model 00:38:05 oh hang on before u go on.... 00:38:15 is the standard for com freely available ? 00:38:29 and is it a microsoft invention ? 00:38:37 yes and yes 00:38:39 hrm 00:38:49 then how come you ahve to PAY ms for the omf file format 00:38:50 grrr 00:38:53 that sux 00:39:06 it actually works pretty good, it is what IE5+ is written with 00:39:26 including all the mutimedia stuff 00:39:35 i dont like any ie versions at all 00:39:45 it sure beats the HELL out of DLLs 00:39:46 not because they are ms 00:39:52 but because i dont like the interface 00:39:56 oh, ok 00:40:02 netscape looks better and feels better to me 00:40:19 how come they give away com and charge for omf ? 00:40:21 I use netscape myself, simply because IE never let me preview pages before I printed them 00:40:28 what is OMF? 00:40:43 if i want my simulator to support object modual format then i have to PAY microsoft 00:40:45 grrrr 00:40:48 object model format? 00:41:11 you mean .OBJ files? 00:41:12 .obj files are usually omf 00:41:21 .obj is the extention 00:41:24 omf is the file format 00:41:34 ok, go buy the MSDN disks, they're cheap 00:41:41 no 00:41:44 not a fscking chance 00:41:52 not 1 in 100 billion chance of that ever happening 00:42:06 the .OBJ formate is part of of the Portable Execution specification 00:42:10 why not? 00:42:11 not if i got 100 billuion cd's for 1 cent 00:42:26 because i will NOT support microsfot AT ALL 00:42:36 not one red cent 00:42:38 I only suggested it because it's much faster than goig to the MSDN website 00:42:51 it's all online, but it's faster off your HD 00:42:58 if i could get a guarnateed 100 percent profit per day for the rest of my life for buying 1 share of ms 00:43:05 anyway, the .OBJ format is online 00:43:05 i wouldnt fscking buy a sinbgle share 00:43:17 omf needs to be licenced 00:43:25 also, it is a bastardization of .COFF format 00:43:41 no more than .EXEs need to be licensed 00:43:56 erm 00:44:03 bally gaming 00:44:12 whome i worked for 00:44:17 BUT you may need a license to place the "Microsoft Approved" software tag in the .OBJ file 00:44:24 paid a HUGE ammount of money for the omf file format documentation 00:44:34 heh, it's online 00:44:40 what year was this? 00:44:52 came in leather-bound binders? 00:44:55 i worked for them a cpl of years ago 00:45:03 erm no just a ring binder 00:45:07 actually 00:45:09 they paid 00:45:12 with each page in a sheet protector? 00:45:16 then got access to download the pdf 00:45:26 and printed ONE copy thereof 00:45:34 thats all they were entitled to print 00:45:56 ok, want me to answer why ms published COM? 00:46:20 yea 00:46:55 ok, here's the marketing scene ... 00:47:07 in the PC market, there's ms and MacOS 00:47:56 after gates friend, Steve Jobs, sued him for espienage (and all the maneuerings in the 80s) they settled down to a pretty comfortable truce 00:48:22 ms was for business aps, and targeted corporate 00:48:33 Apple was for home users, and targets schools 00:48:57 everything else was mini and main frames, not enough to write software for 00:49:13 now along comes Linux 00:49:24 and shortly thereafter, FreeBSD 00:49:53 at first, Gates and Jobs ignored them altogether 00:50:08 but they got bit in the ass for their ignorance 00:50:12 :) 00:50:41 one day, they woke up and discovered that 8% of all PCs were running neither Windows or MacOS 00:50:56 (I think it's like 12-15% now) 00:51:10 they saw they were in serious trouble 00:51:31 now, it WAY too late for ms to try simplifying WinNT 00:51:52 so ms starts writing apps for Linux 00:51:53 :) 00:51:58 they did ? 00:51:59 (or saying it's going to) 00:52:02 ms writes linux apps ? 00:52:04 yes, they do 00:52:15 where ? 00:52:18 does anyone use them ? 00:52:19 not sure they sell them yet 00:52:38 not that I know of, hard to compete against open freeware 00:52:44 :) 00:53:01 sure is :) 00:53:04 but all that code sitting around at MS is useless on linux or freebsd 00:53:28 whether it's good code or bad code is irrelevent 00:53:49 AND ms was having serious problems with versioning in DLLs 00:53:52 nono EVIL code hehe 00:53:57 yes 00:54:00 they were 00:54:26 applications would randomly replace a DLL with the "newest" version they knew about, 5 years old 00:54:39 all the new apps would suddenly quit with system erros 00:54:56 yup 00:54:59 it simply wasn't working 00:55:11 which is REALY stupid 00:55:22 replaceing a newer dll with the newest YOU know about 00:55:25 ok, so ms went pure object-orientation, at the binary level 00:55:33 right, I4 00:56:10 and they want an object to work EXACTLY the same way on Linux, FreeBSD, MacOS, etc 00:56:26 even the amiga didnt do that, if the installed app cant use the one in the libs dir it stored the one IT wanted in its OWN dir 00:56:40 because eventually, they're likely to start porting their code 00:57:00 they will have to 00:57:10 but nobody will BUY their code any more 00:57:15 not linux ppl anyway 00:57:38 to port ie5 to XWin, for example, will involve mostly writing wrapper-macros and recompiling the COM objects 00:58:03 (and getting sued again by Netscape, most likely) 00:58:03 ug! 00:58:09 hehehe 00:58:22 netscape has a patent on linux web browsers ? 00:58:27 why woyuld that cause a law suit ? 00:58:39 so they wrote AND published the COM and DCOM standard 00:58:52 I think its a good one 00:59:21 it's been tested effective in Win95, Win98 and WinNT 00:59:23 i hear a "but" on its way 00:59:39 well, if you want one ... 00:59:53 but it's ms, so Linux hackers are reluctant to play with it 01:00:02 :) 01:00:09 anyway, you logging? 01:00:13 no 01:00:17 i never log but clog is 01:00:21 clog is a channel logger 01:00:30 COM = Component Object Model 01:00:32 i believe all this goes on the #tunes web page 01:00:42 DCOM = Distributed Component Object Model 01:01:30 an object is a ethereal thing floating in memory somewhere and can only be reached by "Interfaces" 01:01:55 an object need not be in the current memory space, nor even on the same computer 01:02:14 this is where me and OOP have a parting im affrade 01:02:33 most objects are in the current process, of course, but the params need to be moved, it's up to the interface to do the work, not the object user 01:03:00 a class is just a structure. you create instances of this class and each instance is a structure. its wasteful of memory 01:03:05 all I, the programmer/object user need to know about is the interface 01:03:29 yes, they did much to reduce that waste, though 01:03:41 k 01:03:46 ok, so I want to create an object of type BLAH 01:03:50 ok 01:04:02 i like that type, its almost as good as type FOO hehe 01:04:12 blah could be a stack, a list, a hardware interface driver, anything 01:05:06 now, objects of type blah have an identifier that makes them seperate from all other object types 01:05:53 lets store that "type" in the variable "BlahID", however it's specified 01:06:13 ok 01:06:21 now, to access a blah object REQUIRES an interface 01:06:52 an interface being a set of functions with wich to manipulate and interact with BLAH type objects 01:07:06 yes 01:07:15 constructors, destructors etc 01:07:21 all objects understand at least on interface, IUnknown 01:07:40 or they aren't COM objects, by definition 01:08:27 the IUnknown interface has exactly three functions, called AddRef QueryInterface and Release 01:08:53 and so every com object ever created understands at least those functions 01:09:17 ok 01:09:34 in addition, the first three functions of EVERY interface must implement AddRef QueryInterface and Release, in that order 01:10:39 so let's say that the author of the BLAH type objects wrote two other interfaces, which he chose to call BlahSet1 and BlahSet2 01:11:19 now we want to create a blah object, and access it with the BlahSet1 interface 01:11:25 follow so far? 01:11:39 yes 01:11:51 each of those interface has a completely different set of functions, sometimes not even related to each other 01:12:42 like IUnknown certainly has little to do with whatever Blah objects do, only in creating and destroying blah objects and blah interfaces 01:13:14 ok 01:13:29 so we call a function that specifies 1. the type of object we want to create and 2. the particular interface we want to use 01:13:53 now, this is a regular function call for whatever OS the implementation is on 01:14:25 one Windows, it CoCreateInstance (I think in comobj.dll) 01:14:44 in linux, it's prob Create in /lib/comlib.xxx 01:15:23 in my Forth interface, it will be COM-Create 01:15:53 now, to prevent versioning probs... 01:16:16 each object type is globally usique 01:16:19 unique 01:16:32 and each interface type is globally unique 01:16:59 and an object can also be globally unique, but the user doesn't need to worry about that, just the object does 01:17:21 guess what happens when you need a globally unique identifier? 01:17:28 erm 01:17:32 u gotta register it 01:18:11 whe u say globally i assum3e u dont mean globally on that machine 01:18:13 actually, quite close 01:18:15 u mean GLOBALLY 01:18:28 there is a published standard on how to create global identiers 01:18:35 there has to be an issuing authority 01:18:37 (they needn't be registered) 01:18:51 registering is used for distribution, though 01:19:07 do you have a windows machine handy? 01:19:12 my laptop 01:20:10 ok, lemme find the progname 01:21:09 ok ill get coffee while u do that 01:21:34 ok, it's called UUIDGEN.exe 01:21:53 but it doesn't come with windows, but with one of the developer products 01:22:17 if you just run it, it spits out a number that is guaranteed to be unique throught the universe 01:22:38 -n lets you spit out X many of them, 5 ... 100 whatever 01:23:03 guaranteed ? 01:24:11 yes 01:24:37 the OSF spent a LOT of time coming up with an algorithym that would never collide 01:24:39 ok 01:24:59 if you have a network card in your machine, it's guaranteed never to collide 01:25:04 can tehy PROVE it will NEVER collide ? 01:25:09 yes, they can 01:25:13 erm 01:25:15 with a network card 01:25:29 erm each network card is ASSIGNED an id 01:25:40 each card has a 6byte serial number guaranteed to be unique for each card 01:25:43 and there are a finite number of id's 01:25:48 yes 01:26:01 its called a mac number 01:26:07 andthose numbers are allocated in blacks to manufacturers who ask (or pay) for them 01:26:09 and THAT is your TRUE internet address 01:26:18 yes 01:26:19 in blocks, rather 01:26:26 i can read perfect mistype :) 01:26:43 BUT 01:26:43 so part of you UUID is your network card serial number 01:26:59 you arentaliking about running a program that spits out unique values 01:27:04 another part is a timestamp 01:27:15 what if you DONT have a nic 01:27:17 another part is a serialization 01:27:34 right, they don't guarantee uniqueness without a network card 01:28:18 but they use the ROM serial number and other neat things to hash out a 6 byte number is incredibly likely to be unique 01:28:34 or the pentium id 01:28:39 the serial id on the chip 01:29:17 and, on top of that, the timestamp nearly guarantees that two machines that happen to has to the same serial id certainly won't produce GUIDs in the same second 01:29:22 erm but not guaranteed. 01:29:27 I'm not sure which serials they hash 01:29:53 but, for all intents and purposes, GUIDs *ARE* unique 01:30:03 ok 01:30:17 1 in 100 billion is good enough for government work :) 01:30:22 and I'd bet my life that if you remove my ethernet card, the resulting number will never collide 01:30:50 GUIDs are 128 bits 01:31:15 that's why you see the BIZARRE and incredibly long string given to Interface: 01:31:20 a humongous number 01:31:52 because it needs to know EXACTLY which interface it's creating on the object 01:32:24 so the CoCreateInstance function gets pointers to TWO of these monstrosities to create your object for you. 01:32:42 one for the object type, one for the interface type 01:32:49 guess what you get back? 01:32:56 er let me guess 01:32:58 a handle 01:33:04 and address 01:33:17 :) 01:33:27 there is, theoretically, only one function needed to interface all com objects and interfaces 01:33:39 there is, theoretically, only one function needed to use all com objects and interfaces 01:33:41 ONE that you pass parameters to 01:33:53 like OPEN hehe 01:34:29 now that we've got an pointer to the BlahSet1 interface, we'll never call CoCreateInstance again 01:35:17 so how do we get from the pointer to calling one of the functions in object Blah? 01:35:27 all instances of this obhect use the one creat4ed ? 01:35:47 hrm 01:35:49 if we need to create another object ... 01:36:00 by calling a lib function that knows where to go ? 01:36:39 we can call CoCreateInstance again, or the object might provide interface for closing itself, or we might create an ClassFactory object 01:37:07 we have only the pointer, and we know exactly one thing about that pointer ... 01:37:30 the first 4 bytes point to a table of function addresses 01:38:55 ok 01:39:03 that would have been my next guess 01:39:18 the functions of the BlahSet1 interface 01:40:03 and there MUST be at LEAST three addresses in that table for Addref QueryInterface and Release 01:40:09 yes 01:40:32 if it doesn't have more than three, though, it's a pretty damn useless interface 01:40:52 ok, so if you look at memory consumption ... 01:41:03 hehe u can create and destroy it :) 01:41:08 whats eh thrid again ? 01:41:15 it takes Blah bytes when you first create the object 01:41:25 add query and release ok 01:41:29 AddRef QueryInterface and Release 01:41:51 it takes Blah bytes when you first create the object 01:42:05 this memory would be needed in any case, no mater what language 01:42:21 or system, to do blah stuff you need x bytes of storage 01:43:07 and for every interface you open, you need at LEAST 4 bytes for the pointer ... it actually works out to 8 bytes exactly, as I'll sho in a minute 01:44:20 :) 01:44:22 now, let's say that blah type widgets are pushbuttons for programs, either on a web page, a configuration panel or anywhere an on/off pushbutton might be needed 01:45:17 and BlahSet1 has three functions: SetValue GetValue Notify 01:45:31 ok 01:45:42 ok, each OS has a calling convention for COM objects 01:46:04 on Windows, it's the Pascal Far, of course 01:46:14 just like everything else ms writes 01:46:39 :) 01:46:47 now, SetValue needs exactly one value, a bool 01:47:25 so it goes on the stack, the pointer we got is dereferenced once, to point at the interface 01:47:38 then dereference again to point at the function table 01:47:58 the offset to the SetValue function is added 01:48:11 and then it is dreferenced again 01:48:35 now we have a pointer to raw machine code that can execute the SetValue 01:48:53 alot of dereferencing 01:48:56 now, there's one more thing 01:49:19 all these machine code routines need the address of the interface 01:49:38 because the machine code is common to all the objects 01:50:13 so all of them REQUIRE it on TOS when the machine code starts executing 01:50:48 ok 01:50:49 so we push the address returned by CoCreateInstance on the top of the stack and call the machine code 01:51:25 now the machine code _might_ want to return something 01:52:09 if that is the case, the program *MUST* allocate some memory for the return value and pass a pointer to it on the stack for the object to fill 01:53:07 so, in interface specifications, every parameter is attributed with either an [IN] , [IN/OUT] , or an [OUT] tag 01:53:29 telling the object user how the parameters are going to be used 01:53:50 k 01:54:19 there's also another way to pass return values, the object allocates a structure and returns a pointer using the system above 01:54:51 erm the function creates the structure or you do... 01:54:55 so, if you look at the data pointed to by the first pointer, you might the the object data resides there 01:55:14 either 01:55:26 depending on what the object is expecting on the stack 01:55:32 if the code creates the stucture 01:55:34 who frees it 01:56:06 a function might expect a pointer to an already established struct that is can modify in place 01:56:10 yes 01:56:14 or create the struct and pass back an address 01:56:31 THAT is one of the bugaboos about COM 01:56:47 the interface specification dictates who frees the memory and how 01:57:00 :) 01:57:04 generally, if the prog creates it, it cleans it up 01:57:36 if the object creates it, the interface should provide a function to clean it, else the object cleans it when the object is destroyed 01:57:52 so, if you look at the data pointed to by the first pointer, you might the the object data resides there 01:58:15 and that the first cell of the data happens to be a pointer to the func table 01:58:30 after some thought, I realized that certainly isn't true 01:59:12 instead, right after the pointer to the func table, is a pointer to the object data itself, and a refcount 01:59:19 k 01:59:25 so an interface requires 12 bytes 01:59:52 so we've got a pointer to BlahSet1, and need an interface to BlahSet2 01:59:59 ok? 02:00:22 ok 02:00:45 blacause Blahset2 has the functions to set the size of the button and redraw it and changes it's colors and highlighting and a bzillion other things 02:01:14 so we call the QueryInterface function of BlahSet2 02:01:56 QueryInterfaces needs a GUID of the new interface and a pointer to the original interface 02:02:29 it returns an address on success, or 0 if Blah doesn't know how to do BlahSet2 02:02:45 now we have two interfaces to one object 02:03:15 one for manipulating the value of the button, one for manipulating how the button is displayed 02:03:17 ok 02:04:05 now, let's say we want to clone an interface we already have, hand it to another thread, and forget about having to clean it up 02:04:19 ok 02:04:30 our prog calls Addref on (say) BlahSet1 02:04:55 and hands it to another thread by shared variable, pipe, whatever 02:05:07 shared vars ? 02:05:30 passing the pointer to the interface is the progs job, not the object 02:05:45 whatever method the prog wants to use 02:06:17 our routine created this object, then another part is using it, relatively independantly 02:06:44 we don't want to have to worry about waiting for that thread to finish before we destroy the object 02:07:05 so the object itself keeps track of how many references to it there are 02:07:25 and when there are 0 references, it deallocates itself 02:07:38 aha 02:07:41 like unlink hehe 02:08:08 so we handed off the pointer, called Addref and now we're done with the object 02:08:38 since we're done with it, we call Release and then quit worrying about it 02:09:10 *IF* the other thread has already called release, then the object might immediately destroy itself 02:09:25 (or it might want to hang around for a while for some reason) 02:09:42 when the object is actually destroyed is up to the object 02:10:09 ok, so we have a prog that uses a pushbutton ... 02:11:03 so we call CoCreateInstance with TBlah and IBlahset2 and get a pointer to the rendering interface 02:12:10 we don't want to worry about that, so we call AddRef, start a new thread to initialize the appearance and then we call QueryInterface for BlahSet1 02:13:16 then we call Release on BlahSet2, call Notify on BlahSet1 (which will callback at an address we specify) and move on with our program 02:13:34 we dont have to worry about that button anymore 02:14:08 you asleep? 02:14:18 this turned out to be far more than 10 mins, sorry 02:14:30 hehe 02:14:32 thats ok :) 02:14:38 no im not assleep 02:14:44 tho im close ;) 02:14:46 joke 02:14:46 hehe 02:15:47 its not usually what im interested in but ur explanation is interesting :) 02:15:51 and im not just sayuing that... 02:15:56 in my forth programs, I don't want to hand around 32 bytes strings all the time 02:16:13 so I need something to name them 02:16:53 name an object type with s" blah" Class: 02:17:10 name an interface type with s" blah" Interface: 02:17:48 in addition, an interface has ofsets into the function table, sometimes many of them, and I want mnemonics for those 02:18:48 Methods: ... ;Methods 02:19:14 each one a created word holding the offset in the function table 02:19:39 AddRef QueryInterface and Release are added automagically 02:19:56 ok 02:20:42 so it might look like this: ClassId InterfaceID call CoCreateInstance value myobj 02:20:53 myobj Method1 . 02:21:12 234 myobj StoreValue 02:21:50 InterfaceID2 myobj QueryInterface value myobj2 02:21:58 myobj Release 02:22:13 myobj2 dosomething 02:22:16 myobj2 dosomethingelse 02:22:25 myobj2 Release 02:22:36 [done, both interfaces gone] 02:23:36 so no more button on the web page/gizmo ? 02:23:39 yep 02:23:55 I did this last to show how the forth syntax might look 02:24:19 k 02:24:29 oh, something crucial I sould point out 02:24:47 once an interface is "published", it may NEVER change 02:25:01 it is set in stone for all eternity 02:25:14 and that object type must always support that interface 02:25:32 erm 02:25:41 so its not scaleable 02:25:54 if u change it u need to publish it again with a different id ? 02:26:02 can u recycle id's ? hehe 02:26:07 another interface might be defined for that object, and the new interface might call functions in the old interface in its implementation 02:26:13 that is correct, i4 02:27:08 the ONLY time an an interface can change is if it's current implementation does NOT match it published spec 02:27:26 and u can only change it to match the spec rite ? 02:27:30 not add to the spec hehe 02:27:32 yes 02:27:43 the pec is set in stone, too 02:27:46 the spec is set in stone, too 02:27:47 thunked so 02:27:58 so the spec isnt scaleable either 02:28:08 thats sort of a stupid restriction if you ask me 02:28:13 so object may evolve over time, but they will never cut off their own limbs 02:28:17 we cant fix this but we can make a new spec 02:28:25 correct 02:28:30 or we cant fix this but we can make a new web browser 02:28:54 but not stupid, because once published, progs and other objects might immediately start using this one 02:28:56 let me ask you this 02:29:06 say you have a web browswer 02:29:09 to change the spec breaks those progs 02:29:13 that has MANY objects 02:29:22 cam you store those in a dll ? 02:29:25 yes, 100s in ie5, maybe 100s 02:29:26 yes, 100s in ie5, maybe 1000s 02:29:37 can you store those in a dll 02:29:56 that is the way microsoft stores them now 02:29:58 the browser loads the dll and now has access to the objects 02:30:01 argh 02:30:06 either in DLLs or in EXEs 02:30:12 nono! 02:30:24 the system object manager loads the DLL 02:30:25 you cant change the objects 02:30:35 but you can change the container that carries them 02:30:41 that is completely OS dependent 02:30:48 the point is 02:31:01 ieobjects.dll has many objects in it 02:31:03 BUT 02:31:06 M$ chose to register each GUID in the registery, with a pointer about what DLL provides it 02:31:16 you upgrade ie and the old dll is no logner useable 02:31:33 because the objects within the dll have been changed. i.e they are NEW objects 02:32:09 ok 02:32:11 so the whole reason for having an unchangeable object jsut got wiped out 02:32:23 because the DLL iS changeable 02:32:30 same dll 02:32:31 nono 02:32:34 different contents 02:32:49 theoretically, that is possible, but not in WinNT I think 02:33:30 the point was that MS wanted to move away from incompatible changes in versions 02:33:51 BUT ms was stuck with dlls for loading machine code 02:34:22 heheh 02:34:26 erm 02:34:52 so now, a dll implements an object or set of objects, and registers itself as "prividing interfaces x y and z" 02:35:43 if another DLL comes along and tries to "Provide interfaces x and y", the system refuses to intall it 02:36:48 so you- are now stuck with a blue x and a red y 02:36:54 and u can never change either 02:37:07 if another dll comes along that exceeds the capabilities of the first dll, say with " Provides w x y and z" it is installed 02:37:21 lets solve all versioning problems. force everyone to use the same version and never make new onews 02:37:46 but the oine that provides x and y is removed ? 02:38:20 if another dll comes along that proveds EXACTLY the same functionality, "Provides x y and z" then it is install ONLY if it's compilation is more recent than the intalled dll (and is considered a bug-fix) 02:38:49 i gtg zzz man 02:38:53 ok 02:38:56 can we continue this later ? 02:39:02 do you want to? 02:39:04 yes 02:39:20 certainly, talking about this is making the Forth part clearer to me 02:39:35 i have a wing chun lesson tonite at 7 pm 02:39:40 it ends tomorrow noon 02:39:59 incidently, an object might be written in C, Forth Assembly, Python, whatever 02:40:01 yes i find that talking about something helps me get a clearer grip on it 02:40:07 hense my commenting style :) 02:40:13 * MrReach grins. 02:40:14 bash hehehe 02:40:21 neway nite nite dood 02:40:26 :) 02:40:27 sleep well 02:40:31 u 2 02:40:36 have a good weekend :) 02:40:50 erm is it friday now ? 02:40:51 oh yes, goddaughter is visiting 02:40:53 or thursday ? 02:40:57 friday 02:41:00 good 02:41:04 hehe thats what i thunked hehe 02:41:08 nite :) 02:41:13 --- part: MrReach left #forth 05:23:44 --- join: mark4_ (mark4@purplecoder.com) joined #forth 05:26:14 --- quit: I440r (barnes.openprojects.net adams.openprojects.net) 10:48:12 --- join: Fare (fare@ppp72-net1-idf2-bas1.isdnet.net) joined #forth 10:48:13 --- mode: ChanServ set mode: +o Fare 12:05:15 --- nick: mark4_ -> I440r 13:19:09 --- quit: I440r (Ping timeout for I440r[purplecoder.com]) 13:35:41 --- join: I440r (mark4@purplecoder.com) joined #forth 14:37:04 --- quit: I440r (Read error to I440r[purplecoder.com]: EOF from client) 14:37:25 --- join: I440r (mark4@purplecoder.com) joined #forth 14:46:58 --- quit: Fare (pohl.openprojects.net sagan.openprojects.net) 14:50:06 --- join: Fare (fare@ppp72-net1-idf2-bas1.isdnet.net) joined #forth 14:50:06 --- mode: sagan.openprojects.net set mode: +o Fare 15:00:00 --- quit: Fare (Ping timeout for Fare[ppp72-net1-idf2-bas1.isdnet.net]) 15:01:11 --- join: Fare (fare@ppp72-net1-idf2-bas1.isdnet.net) joined #forth 15:11:50 --- quit: aaronl (Read error to aaronl[vitelus.com]: Connection reset by peer) 15:11:54 --- join: aaronl (aaronl@vitelus.com) joined #forth 17:18:56 * aaronl is away: installing 82GB hd 17:21:58 --- quit: aaronl (Ping timeout for aaronl[vitelus.com]) 18:15:34 --- join: edrx (edrx@200.240.18.82) joined #forth 18:19:04 --- quit: Fare (Connection reset by pear) 19:07:38 --- join: MrReach (mrreach@209.181.43.190) joined #forth 19:31:41 --- join: aaronl (aaronl@vitelus.com) joined #forth 19:32:04 --- join: TheBlueWizard (TheBlueWiz@ppp-216.u1-h2.dca.fcc.net) joined #forth 19:32:04 --- mode: ChanServ set mode: +o TheBlueWizard 19:32:07 hiya all 19:32:34 darn...#debian is full 19:32:45 shit 19:32:52 * TheBlueWizard nods 19:33:28 212 users 19:33:57 wow 19:34:10 211 now 19:34:11 come in 19:34:12 quick 19:34:14 do you need an op? 19:34:24 no 19:34:25 still full 19:35:26 I think it is locked to ward off join flood....it has happened several times in the past 19:36:05 no 19:36:08 i'm in 19:36:12 the limit is just too low 19:36:16 nothing special is happening 19:36:22 exept its a really popular channel 19:36:28 QUICK 19:36:50 got in! 19:37:35 thanx :) 19:38:39 yeah #debian is way popular hehe....heck if we have #debian001 thru #debian100 they will all be filled up :) 20:18:15 anyone's got a link to the "flux" Forth discussed in Jeff Fox's page? 20:19:42 never heard of "flux".... 20:24:39 hmm, I just found the link to the author's page from this page on jfox's place: http://www.ultratechnology.com/enthflux.htm 20:34:27 --- join: ult (ultima@149.149.201.30) joined #forth 20:34:43 hiya ult 20:35:25 long email on flux hehe 22:01:09 --- part: edrx left #forth 22:03:40 got to sleep...bye all 22:03:42 --- part: TheBlueWizard left #forth 22:12:39 --- join: WB7ODYfre (user9377@global250.el.nec.com) joined #forth 22:23:56 members.aol.com/fredf/flint_forth_files A mips forth of sorts 22:29:21 hehe 23:06:09 Curious did you read the January 1987 issue of DDJ article about Forth Like INTerpreter? 23:06:28 That is the source code I converted to work on MIPS processors. 23:07:12 Wonder in addition to x86 what kinds of processors, this chat room uses 23:07:23 several 23:07:28 I440r is the channel founder 23:07:38 he is writing an 8051 simulator 23:07:47 we both like m68k 23:18:53 hihi 23:19:12 unfortuantely, the simulator really has nothing to do with Forth 23:32:18 Yes, m68k is good CPU. 23:33:11 I have found this FLINT code in assembly language very helpful for testing new reference boards 23:33:29 when there is no software made to check out Hardware. 23:34:15 WB you have a forth available? 23:34:34 Like when only the EPROM , DRAM , and CPU & serial port are working, 23:34:44 oh, ok, I see the url 23:34:47 http://members.aol.com/fredf/flint_forth_files 23:35:28 It is for MIPS cpus. I made it work on several NEC reference boards, so probably has a disorganization to it 23:35:39 WB7ODYfre: I really want to learn assembly but I can't find a decent chip/simulator 23:35:53 huh? 23:36:11 It depends on other initialization code to bring the MIPS hardware up. What chips assembly languag? 23:36:37 WB7ODYfre: Any non-intel one. Maybe M68k 23:37:04 I found a 6805 simulator that worked. I have seen before a MIPS simulator. 23:39:26 That is interesting that you want a simulator to learn asembly language 23:39:26 hmm 23:39:26 What else would I learn on? 23:39:26 I want to practice working on operating system design. 23:39:27 A google search producde this. http://www.esacademy.com/automation/faq/m68k/ 23:40:05 --- quit: MrReach (Read error to MrReach[209.181.43.190]: Connection reset by peer) 23:40:12 What about microCOS uCO/S book 23:40:13 cool 23:40:18 huh? 23:40:32 --- join: MrReach (mrreach@209.181.43.190) joined #forth 23:40:39 www.google.com +Simulator +assembly +m68k 23:41:01 I recall there being quite a few emulators in the Simtel collection 23:41:03 the Commador-64 simulators do a pretty good job of emulating the 6502 23:41:05 (6510, actually) 23:41:32 the Z80 is what I cut my teeth on 23:41:45 heh 23:41:51 my dad is a former Z80 programmer 23:42:17 there are some really fantastic embedded ships out there now 23:42:37 that remotely programmable FLASH Ram is hard to beat 23:43:39 intel has a CMOS computer on a chip, MPU MMU IntCont Keyboard driver, the whole scmere to build an IBM-AT machine on a chip 23:43:54 draws something like 20-200 mA 23:44:21 25-30MHz 23:45:05 oh, 80386 ins set 23:45:11 UGH 23:45:36 it's a nice chip if you need time-to-market with known software 23:46:29 What about the AMD Elan SC400 which is close to an IBM-AT 23:46:54 heh, you know, if I had told my dad in 1987 what the computing world looks like to day, he would have thought I'd gone insane 23:47:21 computer in my electric razor, for god's sake 23:48:24 cassette players use an MPU phased-locked loop for motor speed control ... cheaper than discrete and sounds better 23:50:22 You wnat a M68K forth aaroni? http://www.esacademy.com/automation/faq/m68k/ ftp://nyquist.ee.ualberta.ca/pub/motorola/m68k/x68k.zip has a m68K simulator for you 23:51:46 WB7ODYfre: for unix? 23:52:20 No, for IBM PC, just what you asked for. The files seem to be dated 1994, but if it works for you, great 23:53:12 I use a PC 23:53:14 with linux :) 23:53:27 DOSEMU to the rescue! 23:53:32 heh 23:53:37 I know, another "UGH!" 23:53:39 from up above, you want to study operating systems and assembly language software? See www.ucos.com or org I forget 23:53:55 WB7ODYfre: sounds interesting. yes, that is what i want to study. 23:57:19 http://www.carmel.com/ucos/related.html www.ucos-ii.com 23:59:59 --- log: ended forth/00.12.08