Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Scripting

64 views
Skip to first unread message

Matt

unread,
Feb 16, 1998, 3:00:00 AM2/16/98
to

Hey all,

I am in the process of planning this game and have decided to add a
scripting language to help out in level creation. I want to be able to
attatch snippets of script to tiles on the map, enemies , whatever I feel
like. For instance, I want to be able to attach a script to a tile that
will, if the player steps on it, spawn a fireball coming from the adjacent
wall to create a trap, and so on. Anyway, I know how to tokenize the
script file, and have some ideas on how to go about the actual compiling
and executing of the script, but I was hoping someone out there has done
this and could give me some tips on how to run the script at game quality
speed. I know that it can be done, alot of games use scripts (Duke 3d,
Quake). Perhaps there is already a library out there to handle this?

thanks alot for your help,

-matt

Paul F. Snively

unread,
Feb 16, 1998, 3:00:00 AM2/16/98
to

In article <01bd3a3e$dcc31e00$5723...@ghema.jaguarsystems.com>, "Matt"
<gue...@usa.netNOSPAM> wrote:

Several. This is one area in which there's really no excuse for reinventing
the wheel--especially given that most people don't have a background in
writing high-performance interpreters!

Scripting languages are supposed to be small and simple, so I'm inclined to
recommend a good, fast, embeddable Scheme interpreter, which to me suggests
MzScheme (see <http://www.cs.rice.edu> and follow the Programming Language
Theory links to MzScheme). MzScheme is a complete Scheme, has been ported
to Win32, Mac, and various flavors of UNIX, is fast, is embeddable, and is
relatively easily extended via C++--that is, it's easy to create C++
classes whose functionality is then available in the Scheme language. There
are also extremely good introductory programming texts in Scheme, e.g. "The
Little Schemer," which may not be important to you, but may be to your
prospective audience.

TCL might be a more attractive choice if you don't like Lisp dialects. I
could only recommend it in good conscience as of the current version (8.x)
because of historical performance problems, but the new language
architecture is much faster. It also has been ported to Win32, Mac, and
UNIX and is fairly easily embeddable and extensible.

> thanks alot for your help,

I hope this does help!

> -matt

Paul Snively

James Slaughter

unread,
Feb 16, 1998, 3:00:00 AM2/16/98
to

>In article <01bd3a3e$dcc31e00$5723...@ghema.jaguarsystems.com>,
"Matt"
><gue...@usa.netNOSPAM> wrote:
>
>> Hey all,
>>
>> I am in the process of planning this game and have decided to add a
>> scripting language to help out in level creation.
[...]
>> wall to create a trap, and so on. Anyway, I know how to tokenise

>> the script file, and have some ideas on how to go about the actual
>> compiling and executing of the script, but I was hoping someone out
>> there has done this and could give me some tips on how to run the
>> script at game quality speed.

There are libraries, but I prefer to write my own so that I know
what's going on. In my opinion, the best way to increase execution
time is to spend more during compilation. I try to convert all my
scripts into a series of instructions, similar to an assembly Op-Code.
Each Instruction is an integer, and each takes two operands, one or
both of which may be null if it is unused. The redundancy is there to
make it easy to move memory about for loading and script processing.
Then when it comes to executing the code, I index an array of pointers
to class member functions with the OpCode (which are pre-defined in
ascending numeric order, so it's OK), and dereference it passing to
the function each parameter, plus a virtual instruction pointer, and a
memory area.

Basically, my execution routine, once the script has been loaded looks
like this in pseudo code:

unsigned int CS_IP = StartPoint(); // Starting offset is never zero;

while(CS_IP)
{
InstructionTable[Script[CS_IP].OpCode](Script[CS_IP],&CS_IP,Memory);
}

...and an instruction sets CS_IP to zero to quit, else CS_IP is
automatically incremented to the next instruction, or set to something
else for a JMP instruction, etc. So far, I have not thought of anything
faster than this for execution, though I would welcome any suggestions.

When compiling, I take the following steps:

1) Parse into tokens
Divide the source file up into individual symbols, replace #define
style macro replacements, etc. Be careful to keep literals as such;
"SMEG" should remain as one token, not '"','SMEG','"'. Also, make sure
that two-symbol tokens are parsed as such, the equality operator
should not suddenly become to consecutive assignment operators. I
chose to add a 'fumble' in that it when it found something along the
lines of LValue op equals RValue (eg, A+=B), it substituted it for
LValue equals LValue op RValue (or A=A+B). Again, be sure to parse
'B--B' as 'B-(-B)' (pointless, I know), rather than 'B-- B' which is
illegal. Many commercial C++ compilers have a hard time with
statements such as '++A+++++A++;', which we might equate to ((++A)++)
+ ((++A)++), IE=2*(A+2), so I don't see why yours or mine should
bother if they're only a psuedo implementation of a custom script
language. Of course, strip out comments and whitespace. Caution! 'int
A/*COMMENT*/B' is illegal, because it is equivelent to 'int A B', but
if you just strip out comments, it becomes 'int AB' which is legal, if
AB is not already defined. Now's the time to decide if your language
is case sensitive. No? Convert the case now, then!

2) Mark Tokens as their type.
My entire language is based arround lists of a structure that defines
the name of the instruction as it appears in the script, the op-code
it should be replaced with, it's precedence (so * comes before +), the
types the operator deals with, and what format the operator is: unary,
binary, or keyword. It also stores the function pointer ready to
export to the instruction table for execution. I just index the Token,
if it is not in the list, then it must be an identifer, else I look up
its type. There can be a conflict with unary and binary
operators: -A-B, for example. I use the fact that a unary operator is
only ever next to one identifier.

3) Handle references
Now's the time to build a list of prototypes, and handle nasty include
directives. Do the includes first. Try to make sure that every
identifier is declared somewhere.

4) Type Checking
Does your language allow float=string*integer? Even if it does, you'll
want to make sure that the right operators being used. Do all type
checking now, and do it strictly to make running the script easy and
safe.

5) Recursive Descent.
Having assigned types, to split each expression up, I used a recursive
descent technique, not always terribly efficiant, but it works and is
quite elegant with a minimal of coding. In this, you start with an
expression 'A=B+C*D' for example. You take the first delimeter ('='),
and see if it is a lower priority than the one after ('+'), and if it
is, you call the procedure again, but with the bit after the first
operand. It is, so we start a new function with ('B+C*D'), and repeat
the process. We find that '*' is more important than '+', and so call
ourself again, with 'C*D' as the equation. There is nothing after
this, so we write it down in our 'to-do' list. We would also write it
down if whatever came after was equally or less important.

1st Operation: C*D;

The function returns, and we are now in the one started with
'B+[C*D]'. We would now look to see if whatever comes after the C*D is
still more important than the '+'. There isn't anything, so it's time
to do the Add. Our to-do list shows:

1st Operation: C*D;
2nd Operation: B+C;

Now we are back in the first call. There is nothing left at all, so we
write the instruction down:

1st Operation: C*D;
2nd Operation: B+C;
3rd Operation: A=B;

That's it! We would of course have to preserve C & B, since there
contents get overwritten during our approach. You could either
automatically 'push' any variable that is modified at the start, and
'pop' it back, which is a simple task, or add a result variable to
your instruction format, so that each opcode takes three parameters.
It's up to you. Be careful when popping values back, particularly when
doing stuff like if(A+B==C+D), where you can't say Push A, A+B, Pop A
is A equal to [...], you have to wait until the whole statements over,
which is OK here, but not for if(A+B==A+C), where it would check that
A+B is equal to A+A+C, which is impossible.

5) Variables
You cannot go on refering to variables by name. Well, actually, I
suppose you could, but it's hardly fast, even with the might of the
Standard C++ Library template classes ;), is it? No. Variables become
addresses, but they cannot be absolute addresses. Sometimes a function
will be called, and other times it won't. This would totally screw up
the creation of variables at run-time, so unless you want to define
all variables used in your script at start up and use giga bytes of
memory in the process, you need relative numbers. The easiest
soloution is to save an index at the start of each call, and use an
offset from that index.

6) Resolve names
Bugger about with name mangaling, etc. I'll go into this only if you
wan't me to. Very little to do unless you're into native Object
Orientation in your script language. (Yeah, I'm getting fed up typing
this message that few people are going to bother to read, and fewer
will find it interesting).

7) Write the Op Codes.
You also need to make function calls work some how. This is basically
a jump, and then a jump back, or, since this is a runtime thing, you
might like to spawn another execution routine that handles the sub
function, and let the recursion dump you back to where you were. Up to
you, really.

8) Execute, see above.

Comments? Criticism? Sorry about the last few steps... I expect you
can figure it out. I really would like to discuss ways to improve on
all this in a constructive manner... I'm not perfect, neither are you,
but together we come pretty close ;->.

One thing that I never decided on was the best techniques for I/O. I
currently follow a C/C++ style 'don't have any _keywords_' technique,
although it does support disk I/O since it's virtually the same on all
platforms. For anything else I have a system with which the script
communicates with the host interpreter to ask for services, which I
plan to include linking to external modules. What's the standard way,
I'm self taught...

Paul F. Snively wrote in message ...


>Scripting languages are supposed to be small and simple, so I'm
>inclined to recommend a good, fast, embeddable Scheme interpreter,
>which to me suggests

[...]
Not arguing, just asking, but how small is small, how simple is
simple? Sounds like I've made a complete arse of mine, but it is still
quite fast, and is very flexible.

I hope someone gets something out of this.
Regards,
James.

Paul Bleisch

unread,
Feb 16, 1998, 3:00:00 AM2/16/98
to

Hey all,

Just thought people who are interested in small tight scripting
languages should check out Lua. The link is:
http://csg.uwaterloo.ca/~lhf/lua/

Lua is a small embeddable language with metalanguage features
and a pascal-esque syntax. First class functions. Hmm.. it
is smaller and faster than scheme and Python.

Paul


Brendan Reville

unread,
Feb 17, 1998, 3:00:00 AM2/17/98
to

Matt wrote in message
<01bd3a3e$dcc31e00$5723...@ghema.jaguarsystems.com>...


>I am in the process of planning this game and have decided to add a

>scripting language to help out in level creation. I want to be able to
>attatch snippets of script to tiles on the map, enemies , whatever I feel
>like. For instance, I want to be able to attach a script to a tile that


There was an interesting article on Jedi Knight's scripting, somewhere
under programming, on http://www.gamasutra.com.

It also had a link to a site with *lots* of embeddable languages that you
could play with.

- Brendan


visit http://www.artoz.com/trance for a different kind of multimedia CD-ROM!

Amit Patel

unread,
Feb 18, 1998, 3:00:00 AM2/18/98
to

Paul F. Snively <ch...@mcione.com> wrote:
|
| Several. This is one area in which there's really no excuse for reinventing
| the wheel--especially given that most people don't have a background in
| writing high-performance interpreters!
|
| Scripting languages are supposed to be small and simple, so I'm inclined to
| recommend a good, fast, embeddable Scheme interpreter, which to me suggests
| MzScheme (see <http://www.cs.rice.edu> and follow the Programming Language
| Theory links to MzScheme). MzScheme is a complete Scheme, has been ported
| to Win32, Mac, and various flavors of UNIX, is fast, is embeddable, and is
| relatively easily extended via C++--that is, it's easy to create C++
| classes whose functionality is then available in the Scheme language. There
| are also extremely good introductory programming texts in Scheme, e.g. "The
| Little Schemer," which may not be important to you, but may be to your
| prospective audience.

I was trying to decide on a scripting for my game, and I considered
Scheme but decided against it for the same reason I decided against
Python and C++:

A general purpose language isn't going to be as well suited
for my game as a special purpose language.

Yes, I know I can write macros in Scheme, but it's still going to be a
functional/imperative style language, and it's still going to have a
lot of decisions made for me, like static scope, parenthesized syntax,
basic data types, lists using cons-cells, and so on.

As an example, suppose I was writing an RPG [I'm really not], and I
wanted to attach scripts to various events that might occur in the
game. I might want to write:

OBJECT Fred IS-A Paladin:
ON attacked-by X:
if X.evil: attack(X)
ON time-is 12pm:
walk to: tavern
ON time-is 9pm:
walk to: home

I can write a `bytecode' representation of this much more efficiently
than if I had used Scheme (or some other general purpose language),
because I know exactly what kinds of constructs are common in my code
and what to optimize for. I would expect that my compiled
representation would be two to five times smaller than that of a
general purpose language being used for this specific task. I would
guess (but I am not certain) that the virtual machine could be
somewhat smaller for a special purpose language as well. (The last
time I wrote a scripting language, which admittedly was many years
ago, the VM was under 10k, and it's hard to find that in SCM or
MIT-Scheme or any other variants I know of...)

I also get to write things in a natural style, like "12pm", rather
than something like "(make-time 12 'pm)". Consider how much easier it
is to use strings, lists, vectors, and functions in Scheme or Python
than in C. Yes, you _can_ code it in C, but it's much easier in
Scheme because it's built-in. Similarly, if I want to write programs
about objects, times, events, and locations, then it's easier to do
this in a language that understands these abstractions than to do it
in a language that merely allows you to build these abstractions.
This is especially true when the overall structure of your program
does not fit the conventional procedural (or functional, or
object-oriented) style of programming.


Anyway, I agree that Scheme may serve as a good scripting language,
but I disagree that ``there's really no excuse for reinventing the
wheel''. As the language becomes more specialized, there is more to
gain by writing your own language. You may be looking for a bicycle
wheel, and a motorcycle wheel, although more suitable than an airplane
wheel, just won't do.


- Amit

Jason Hoffoss (Tclord)

unread,
Feb 18, 1998, 3:00:00 AM2/18/98
to

On Mon, 16 Feb 1998 19:48:46 -0000, "James Slaughter"
<James.S...@susano.demon.co.uk> wrote:

>>In article <01bd3a3e$dcc31e00$5723...@ghema.jaguarsystems.com>,
>"Matt"
>><gue...@usa.netNOSPAM> wrote:
>>
>>> Hey all,
>>>
>>> I am in the process of planning this game and have decided to add a
>>> scripting language to help out in level creation.
> [...]
>>> wall to create a trap, and so on. Anyway, I know how to tokenise
>>> the script file, and have some ideas on how to go about the actual
>>> compiling and executing of the script, but I was hoping someone out
>>> there has done this and could give me some tips on how to run the
>>> script at game quality speed.
>
>There are libraries, but I prefer to write my own so that I know
>what's going on.

This is exactly why I wanted to do the same thing. :) Plus, I think
it's actually probably easier to do it yourself that figure out how
these other libraries and such work. I've never been able to do it.
They try and make it very generic and flexible for all cases, and it
just complicates it too much, etc. Writing your own, you can tailor
it down to just what you need. I think it works out a lot better.
Plus, you understand how it all works, and learned something new along
the way, which is always handy, I don't care what anyone says.

>In my opinion, the best way to increase execution
>time is to spend more during compilation. I try to convert all my
>scripts into a series of instructions, similar to an assembly Op-Code.

That's what I did. I have to think there's a good reason CPU's have
the sort of instruction sets that they do, and work the way they do.
So the best way to do an imbedded language is to model it after a CPU
I think, for doing general purpose things. Specific things it makes
more sense to have some hook to it, like the way interrupts worked
under DOS. If you really needed to, you could write the interpreter
in assembly for speed, and it probably wouldn't be very hard to write
it because your instructions would be so similar to the CPU
instructions.

Btw, the compiler I wrote for my language is blazing fast, and I
didn't even try writing it for speed. I put limitations on sizes so I
can load the source file completely into memory. Most real compilers
don't make an assumption like this and stream it off disk, which slows
it down incredibly I guess.

>Each Instruction is an integer, and each takes two operands, one or
>both of which may be null if it is unused. The redundancy is there to
>make it easy to move memory about for loading and script processing.

Your instructions don't model a CPU as much then I guess. With CPUs,
generally you do operations with a register and an operand, which is
how my language works as well. I only have one register, however, the
accumulator, which cuts down the number of instructions quite a bit.
You also have operators for branching, pushing values on the stack,
etc. I did combine most binary operations (i.e. math operations) with
the top value on the stack (i.e. acc = stack val * acc), since you
generate situations like this a lot when compiling a language.

Btw, is your language more like a real language, or more of an
assembler? It sounds more like an assember.

>Then when it comes to executing the code, I index an array of pointers
>to class member functions with the OpCode (which are pre-defined in
>ascending numeric order, so it's OK), and dereference it passing to
>the function each parameter, plus a virtual instruction pointer, and a
>memory area.

I have an int for the PC (program counter), which I used as the index
into a block of memory that is the byte-code. I basically use a big
switch statement to handle each op-code. If an op-code uses data, the
data directly follows the op-code (just like machine language). For
any decent compiler, this switch statement should turn into a jump
table in the executable.

>Basically, my execution routine, once the script has been loaded looks
>like this in pseudo code:
>
>unsigned int CS_IP = StartPoint(); // Starting offset is never zero;
>
>while(CS_IP)
>{
> InstructionTable[Script[CS_IP].OpCode](Script[CS_IP],&CS_IP,Memory);
>}
>
>...and an instruction sets CS_IP to zero to quit, else CS_IP is
>automatically incremented to the next instruction, or set to something
>else for a JMP instruction, etc. So far, I have not thought of anything
>faster than this for execution, though I would welcome any suggestions.

Looks like it will accomplish the same thing. Don't know what all
that info is you are passing in. I'd probably just make the CS_IP a
global and not bother passing it into the function. Of course, even
calling a function has it's overhead, which I guess is why I went with
a switch statement inside an infinate loop (with an RTS instruction
returning from the loop and thus exiting the loop).

>When compiling, I take the following steps:
>
>1) Parse into tokens
>Divide the source file up into individual symbols, replace #define
>style macro replacements, etc. Be careful to keep literals as such;
>"SMEG" should remain as one token, not '"','SMEG','"'. Also, make sure
>that two-symbol tokens are parsed as such, the equality operator
>should not suddenly become to consecutive assignment operators.

I don't really bother with tokenizing. I just compare the current
text with what is allowed at whatever point I'm at. For example, if I
just found an '=', then I know there much be a variable name or a
number next. If not, throw out an error. My compiling method is
pretty object oriented in how it works, which isn't really the
tranditional way compiler are writen.

>I
>chose to add a 'fumble' in that it when it found something along the
>lines of LValue op equals RValue (eg, A+=B), it substituted it for
>LValue equals LValue op RValue (or A=A+B).

I don't remember what I did here. I think it turns out something like
this in the end, though:

Load acc, A
Add acc, B
Store A, acc

So I guess it gets treated like A=A+B really. :)

>Again, be sure to parse
>'B--B' as 'B-(-B)' (pointless, I know), rather than 'B-- B' which is
>illegal.

In my system, if there is a space between the minus signs, it works
fine. If there isn't, it will see it as either a pre or post
increment operator (has higher precedence). So the results turn out
the same as would happen in C, and I don't run into problems like this
in C really, so I don't expect I will writing scripts. :)

>Many commercial C++ compilers have a hard time with
>statements such as '++A+++++A++;', which we might equate to ((++A)++)
>+ ((++A)++), IE=2*(A+2), so I don't see why yours or mine should
>bother if they're only a psuedo implementation of a custom script
>language.

Right. The way I set things up, though, it kind of came for free. It
would first see ++A, and then see (++A)++, but at this point you have
a post-increment on a non-LVALUE, so it would throw an error (who the
hell writes something like this anyway? :)

>Of course, strip out comments and whitespace. Caution! 'int
>A/*COMMENT*/B' is illegal, because it is equivelent to 'int A B', but
>if you just strip out comments, it becomes 'int AB' which is legal, if
>AB is not already defined. Now's the time to decide if your language
>is case sensitive. No? Convert the case now, then!

Because I work with C so much, I wanted to make mine work as much like
C as possible, so it is case sensitive as well. I think a scripting
language is a lot better the more it is like a real language a lot of
people know. Programmers will be able to learn and use it much
easier, and anyone who doesn't know has a wide range of books to help
learn it from. You don't have to try teaching it to them.

The comment problem was easy to deal with for me, as I know where I
can expect white space, and I call a function at these points to skip
the whitespace. It also skips comments here as well. A nice property
of comments is that they are only valid where whitespace is valid.

>2) Mark Tokens as their type.
>My entire language is based arround lists of a structure that defines
>the name of the instruction as it appears in the script, the op-code
>it should be replaced with, it's precedence (so * comes before +), the
>types the operator deals with, and what format the operator is: unary,
>binary, or keyword. It also stores the function pointer ready to
>export to the instruction table for execution. I just index the Token,
>if it is not in the list, then it must be an identifer, else I look up
>its type. There can be a conflict with unary and binary
>operators: -A-B, for example. I use the fact that a unary operator is
>only ever next to one identifier.

I check for identifiers as the highest possible precedence, basically.
They always start with an alpha-numeric, and end with anything not an
alpha-numeric, numeric or underscore character. I also have a list of
all reserved keywords (just like with C), and make sure when I find a
variable name it isn't one of these. Unary operators don't cause
problems, as long as you follow your precedences correctly.

>3) Handle references
>Now's the time to build a list of prototypes, and handle nasty include
>directives. Do the includes first. Try to make sure that every
>identifier is declared somewhere.

Function calls is one place my language is very different from C (or
C++). I don't allow overloading, and all parameters to a function are
basically defaults. If you don't provide them, they will have
standard values (0 if you don't explicitly specify one). So, for a
function like:

func(int a, int b=2, int c, string d)

You could call it with wither func(), func(4), func(5, 5), etc. They
are all allowed. You just can't pass in more arguments than are
allowed for it, like trying to do func(1, 2, 3, "blah", 9). Also,
types have to match. I only have integers and strings as types.
Strings are act much like constant strings in C. You don't modify
them. Another nice feature I added to my language is not having to
use prototypes. You can make a call to a function ahead of actually
defining the function, and the compiler will handle it all properly
for you. Prototypes were always one handle I never really cared for
much. :)

Another interesting feature I have is with the whole pass by address
vs pass by value thing, which relates to your reference handling.
Instead of the function deciding what should be passed how, I decided
to make the caller decide this. So, for a function:

func(int a, int b)

I can call it as func(a, b) to pass by value, or func(&a, &b) to pass
by reference. Completely reverse how any other language I've ever
seen does things, but I think doing it this way could have some
interesting advantages. I haven't really put it into practice much to
see if it works well yet, though. It makes sense to me that it would
be more useful for the caller to have control over this, though. The
function just does things generically for everyone who calls it. It's
each caller that has specific things it wants to do with it's data.

>4) Type Checking
>Does your language allow float=string*integer? Even if it does, you'll
>want to make sure that the right operators being used. Do all type
>checking now, and do it strictly to make running the script easy and
>safe.

Can't do this in my language. What would this mean? You could just
call a function to convert the string to an integer, if the string
just has digits. I don't think converting like this is really all
that common, so a library function seemed like a logical thing to do.
Generally, strings in my language are just useful for passing to
library function, such as asking for input, getting the name of an
object, comparing 2 strings, etc. This is a good example of how I've
limited my language down to just what was needed to fit the job I had
in mind for it. I don't have to worry about trying too hard to make
it very general and work with everything anyone can think of.

>5) Recursive Descent.
>Having assigned types, to split each expression up, I used a recursive
>descent technique, not always terribly efficiant, but it works and is
>quite elegant with a minimal of coding. In this, you start with an
>expression 'A=B+C*D' for example. You take the first delimeter ('='),
>and see if it is a lower priority than the one after ('+'), and if it
>is, you call the procedure again, but with the bit after the first
>operand. It is, so we start a new function with ('B+C*D'), and repeat
>the process. We find that '*' is more important than '+', and so call
>ourself again, with 'C*D' as the equation. There is nothing after
>this, so we write it down in our 'to-do' list. We would also write it
>down if whatever came after was equally or less important.
>
>1st Operation: C*D;
>
>The function returns, and we are now in the one started with
>'B+[C*D]'. We would now look to see if whatever comes after the C*D is
>still more important than the '+'. There isn't anything, so it's time
>to do the Add. Our to-do list shows:
>
>1st Operation: C*D;
>2nd Operation: B+C;
>
>Now we are back in the first call. There is nothing left at all, so we
>write the instruction down:
>
>1st Operation: C*D;
>2nd Operation: B+C;
>3rd Operation: A=B;

I do a more object oriented method. Basically, since = has the lowest
priority, I check for this first:

int check_equ()
{
check_plus();
skip_white();
match("=");
check_plus();
out(OP_EQU); // stack-1 = acc
}

This looks for X=X type of things. It doesn't really worry about what
X might be, though. Next, in check_plus(), I break X down..

int check_plus()
{
check_mult();
skip_white();
match("+");
check_mult();
out(OP_ADD); // acc += stack - 1
}

So this looks for Y+Y within an X. So combined, we look for something
like (Y+Y)=(Y+Y). Since in check_equ() we first call check_plus(),
the whole Y+Y that is before the = gets processed before control
returns back to check_equ() and it can look for the =. So things are
all checked for in their correct precedence as a result. Works pretty
slick. Check_mult() would look like this..

int check_mult()
{
check_var();
skip_white();
match("*");
check_var();
out(OP_MUL); // acc *= stack - 1
}

Check_var() looks for a variable name or number/string, which has the
highest priority, so it doesn't make any calls down to anything else.
Whatever it finds it puts on the stack. So it's like recursion, but
it's always calling new functions. What's nice about using new
functions for each level is that you can just check for what you can
expect there, instead of having to check everything. Keeps each
function simpler.

>That's it! We would of course have to preserve C & B, since there
>contents get overwritten during our approach. You could either
>automatically 'push' any variable that is modified at the start, and
>'pop' it back, which is a simple task, or add a result variable to
>your instruction format, so that each opcode takes three parameters.
>It's up to you. Be careful when popping values back, particularly when
>doing stuff like if(A+B==C+D), where you can't say Push A, A+B, Pop A
>is A equal to [...], you have to wait until the whole statements over,
>which is OK here, but not for if(A+B==A+C), where it would check that
>A+B is equal to A+A+C, which is impossible.

Right, == has lowest priority, so (A+B) gets put on stack, (C+D) gets
put in acc when you actually execute the == operation.

>5) Variables
>You cannot go on refering to variables by name. Well, actually, I
>suppose you could, but it's hardly fast, even with the might of the
>Standard C++ Library template classes ;), is it? No. Variables become
>addresses, but they cannot be absolute addresses. Sometimes a function
>will be called, and other times it won't. This would totally screw up
>the creation of variables at run-time, so unless you want to define
>all variables used in your script at start up and use giga bytes of
>memory in the process, you need relative numbers. The easiest
>soloution is to save an index at the start of each call, and use an
>offset from that index.

Actually, I create 2 symbol tables, one for globals, one for local
vars. The max number for each is 256, so I can turn all variable
references into a byte that represents what variable I am dealing
with. I think a max of 256 is enough. I don't expect people to make
huge scripts, and limiting so I can use 1 byte for variable references
reduces the size a lot. Compiled scripts are pretty compact. In the
code to actually run the script, local and global variables each is an
integer array, and I use the variable number as the index to get the
value.

>6) Resolve names
>Bugger about with name mangaling, etc. I'll go into this only if you
>wan't me to. Very little to do unless you're into native Object
>Orientation in your script language. (Yeah, I'm getting fed up typing
>this message that few people are going to bother to read, and fewer
>will find it interesting).

I'm one of the exceptions then I guess. :) Since I don't allow
overloading, I don't have to worry about this one.

>7) Write the Op Codes.
>You also need to make function calls work some how. This is basically
>a jump, and then a jump back, or, since this is a runtime thing, you
>might like to spawn another execution routine that handles the sub
>function, and let the recursion dump you back to where you were. Up to
>you, really.

Again, I model it after CPU instructions, so I have a CALL instruction
and an RTS instruction. I also have branch instructions, which you
need for things like loops and gotos. You don't use them for function
calls. You can't just jump back, btw, because you can call functions
from many places. How do you know which to jump back to? So you need
a call stack, etc.

>8) Execute, see above.
>
>Comments? Criticism? Sorry about the last few steps... I expect you
>can figure it out. I really would like to discuss ways to improve on
>all this in a constructive manner... I'm not perfect, neither are you,
>but together we come pretty close ;->.

Well there's a glimpse from my experiences with messing with all this.
I've successfully written a compiler and interpreter for my language,
and they work. I haven't actually used the interpreter in a real game
yet, though. :) So you can call this a little more than theory, but
less than proven.

>One thing that I never decided on was the best techniques for I/O. I
>currently follow a C/C++ style 'don't have any _keywords_' technique,
>although it does support disk I/O since it's virtually the same on all
>platforms. For anything else I have a system with which the script
>communicates with the host interpreter to ask for services, which I
>plan to include linking to external modules. What's the standard way,
>I'm self taught...

The way I would handle it is with library functions, just like C. My
language doesn't really have library functions, though. They are
actually 'system functions', which are hooks to do special things like
this. For example, if you want to display a string to the user, you
can add in a 'print()' system function. All that is needed for me is
to add it to my 'system function' header file (which tells the
compiler what all the system functions are), and then add support for
it doing something useful in the interpreter. So it's pretty flexible
and easy to extend as I come up with new things I need to support.
The language itself never changes. You can extend the abilities of C
with new libraries without changing the fundimentals of C. You'll
notice I base a lot of my ideas on other things out there (C, CPU,
etc). I figure they did what they did for good reasons after
researching it extensively, so why re-invent the wheel? Take a
shortcut instead and do it how they do it. And of course, their
approaches are proven and stable.

I'm still fixing up my compiler and interpreter right now, but
eventually I plan to release this for others to use for their games.
Anyway, if you have any question about anything I mentioned, feel free
to ask.

>Paul F. Snively wrote in message ...
>>Scripting languages are supposed to be small and simple, so I'm
>>inclined to recommend a good, fast, embeddable Scheme interpreter,
>>which to me suggests
>[...]
>Not arguing, just asking, but how small is small, how simple is
>simple? Sounds like I've made a complete arse of mine, but it is still
>quite fast, and is very flexible.

What I sort of invision for my language is to have many small scripts
instead of just one big one (that's the idea I'm playing with anyway).
Going to the first post, he wanted a script to handle shooting out a
fireball as part of a trap. So you could have a script just for that
one trap. Another trap elsewhere would be a seperate script, etc. So
having a lot of little scripts in one reason I wanted to keep the
compiled byte-code compact. It can make it easier to maintain as
well. Of course, you might have a lot more source files to deal with.
Tradeoffs for everything, as always.

-Jason

Paul F. Snively

unread,
Feb 19, 1998, 3:00:00 AM2/19/98
to

In article <6cfl25$6lg$1...@nntp.Stanford.EDU>, am...@Xenon.Stanford.EDU (Amit
Patel) wrote:

> I was trying to decide on a scripting for my game, and I considered
> Scheme but decided against it for the same reason I decided against
> Python and C++:
>
> A general purpose language isn't going to be as well suited
> for my game as a special purpose language.
>
> Yes, I know I can write macros in Scheme, but it's still going to be a
> functional/imperative style language, and it's still going to have a
> lot of decisions made for me, like static scope, parenthesized syntax,
> basic data types, lists using cons-cells, and so on.

Well, there are a lot of "ifs" and "buts" to respond to this with, e.g.
Scheme is lexically scoped, but you can often find implementations with
"dynamic-bind," "dynamic-let," and/or "dynamic-wind." The parenthesized
syntax can be done away with by writing a parser of some kind using, e.g.
Zebu. Of course it has basic data types and lists using cons cells. So
what? It had better have basic data types!

> As an example, suppose I was writing an RPG [I'm really not], and I
> wanted to attach scripts to various events that might occur in the
> game. I might want to write:
>
> OBJECT Fred IS-A Paladin:
> ON attacked-by X:
> if X.evil: attack(X)
> ON time-is 12pm:
> walk to: tavern
> ON time-is 9pm:
> walk to: home
>
> I can write a `bytecode' representation of this much more efficiently
> than if I had used Scheme (or some other general purpose language),
> because I know exactly what kinds of constructs are common in my code
> and what to optimize for. I would expect that my compiled
> representation would be two to five times smaller than that of a
> general purpose language being used for this specific task. I would
> guess (but I am not certain) that the virtual machine could be
> somewhat smaller for a special purpose language as well. (The last
> time I wrote a scripting language, which admittedly was many years
> ago, the VM was under 10k, and it's hard to find that in SCM or
> MIT-Scheme or any other variants I know of...)

Sure. This is always the trade off: specificity vs. generality. Given that
I'm targeting PC's and Macs rather than, say, Nintendo 64's and Sony
Playstations, I'm not overly concerned about the size of the code. I'm
concerned with how easily I can integrate it with C++ and what I can
express in it.

> I also get to write things in a natural style, like "12pm", rather
> than something like "(make-time 12 'pm)".

Again, macros or a preprocessor easily handle issues like this.

> Consider how much easier it
> is to use strings, lists, vectors, and functions in Scheme or Python
> than in C. Yes, you _can_ code it in C, but it's much easier in
> Scheme because it's built-in. Similarly, if I want to write programs
> about objects, times, events, and locations, then it's easier to do
> this in a language that understands these abstractions than to do it
> in a language that merely allows you to build these abstractions.

One reason I like MzScheme is that it has an object system. A major reason
that I like Lisp dialects in general is that it's easy to use them as
metalanguages: a language for writing a language that's specific to your
application. MzScheme has the added benefit that I can build the
abstractions, find that they are indeed too cumbersome in terms of either
memory or performance, and rewrite them in C++, providing them to the rest
of my MzScheme code as if they were native functionality of MzScheme.

> This is especially true when the overall structure of your program
> does not fit the conventional procedural (or functional, or
> object-oriented) style of programming.

I think this is your strongest point so far. It's been my experience that,
in game programming, you almost always end up wanting some sort of
delegation semantics, and none of the popular application or scripting
language naturally support such a semantics.

> Anyway, I agree that Scheme may serve as a good scripting language,
> but I disagree that ``there's really no excuse for reinventing the
> wheel''. As the language becomes more specialized, there is more to
> gain by writing your own language. You may be looking for a bicycle
> wheel, and a motorcycle wheel, although more suitable than an airplane
> wheel, just won't do.

While I agree in principle, I think there are larger questions that have to
be answered before making a choice, such as: are you adding a scripting
language for yourself or for potential third parties? If for yourself, then
knock yourself out and invent a new language, but don't be surprised if you
someday down the road find yourself wishing that your tight, specialized
little scripting language did something it doesn't, and can't easily
without turning its syntax, if not its semantics, into a hodgepodge. On the
other hand, if you really want third parties to add cool new objects to
your game or even build whole new games using nothing but the core
functionality of your engine, I still have to recommend sticking with an
existing embeddable language. In fact, I would even if only I'd be
scripting, again because I have a personal preference for expressive power,
and hence generality, vs. application specificity, which might indeed have
led me to a smaller and possibly faster (but I doubt it) implementation.

> - Amit

Paul

Sam Inala

unread,
Feb 22, 1998, 3:00:00 AM2/22/98
to

Amit Patel <am...@Xenon.Stanford.EDU> wrote in article
<6cfl25$6lg$1...@nntp.Stanford.EDU>...


> I was trying to decide on a scripting for my game, and I considered
> Scheme but decided against it for the same reason I decided against
> Python and C++:
>
> A general purpose language isn't going to be as well suited

> for my game as a special purpose language. [..]


>
> As an example, suppose I was writing an RPG [I'm really not], and I
> wanted to attach scripts to various events that might occur in the
> game. I might want to write:
>
> OBJECT Fred IS-A Paladin:
> ON attacked-by X:
> if X.evil: attack(X)
> ON time-is 12pm:
> walk to: tavern
> ON time-is 9pm:
> walk to: home

Gee, this looks just like Visual Basic events!

It seems like two approaches have been suggested:
1. Reinventing the wheel (write parser, compiler, and virtual machine)
2. Reusing a wheel (embedding Scheme, Tcl, Lua)

How about a third approach?
3. Interchangeable wheels (expose the game's object model)

Exposing the object model means that your game implements
some standard COM interfaces. Then you can use any scripting
language you want: Visual Basic, Java, C++, Perl, etc. You
can easily add custom events to be fired to any object and
custom properties and methods. Scripting support is lightweight
and mostly trivial to implement using ATL. Plus, you can leverage
the already existing knowledge of one million VB coders.

More information:
_Inside COM_ by Rogerson
_Effective COM_ by Box
_Inside OLE, 2nd Edition_
MSDN

--
Sam Inala < s a m i @ m i c r o s o f t . c o m >


Vic

unread,
Feb 22, 1998, 3:00:00 AM2/22/98
to

Sam Inala wrote:
> More information:
> _Inside COM_ by Rogerson
> _Effective COM_ by Box
> _Inside OLE, 2nd Edition_
any resources online? How do you use those COMs anyways? Do you just
need a win32 compiler or do you need visual C++?
--
--> http://www.cam.org/~tudor <--

Joshua Heyer

unread,
Feb 22, 1998, 3:00:00 AM2/22/98
to

Jason Hoffoss (Tclord) wrote:

> One thing I see about this is that it might take longer to learn this
> stuff than to use one of the first 2 methods. Also, I'm not sure if
> COM object just give you access to functions or to data as well, but
> if you allow access to the data, then you will lose the advantage of
> validating the data. While C and a lot of power, it can also be
> pretty fragile. If you don't really know what you are doing, and you
> do something bad, like try to access an illegal index in an array, or
> have a bad pointer, or whatever, you can crash the program, and it's
> not always an easy matter to find the problem. With a scripting
> language, you can design it to be a lot more crash-proof. Another
> thing I don't like about doing this is that your end users now have to
> be programmers to write the scripts, and have to own a compiler. If
> you write your own scripting language, they just need a text editor,
> and only have to learn a simplified language, rather than a full-blown
> language. And lastly, for me anyway, it's fun to write a compiler,
> and I think it's always good to know as much as you can. Writing a
> compiler can teach you a number of things.
>
> -Jason

Well said. It's funny to see how far some people will go to avoid
writing something themselves!

************************************************************************
Joshua Heyer -- joshua...@yahoo.com
************************************************************************
Save the Whales -- Harpoon a Honda.
************************************************************************


Jason Hoffoss (Tclord)

unread,
Feb 23, 1998, 3:00:00 AM2/23/98
to

On 22 Feb 1998 21:11:10 GMT, "Sam Inala" <sa...@ersatz.microsoft.com>
wrote:

>It seems like two approaches have been suggested:
>1. Reinventing the wheel (write parser, compiler, and virtual machine)
>2. Reusing a wheel (embedding Scheme, Tcl, Lua)
>
>How about a third approach?
>3. Interchangeable wheels (expose the game's object model)
>
>Exposing the object model means that your game implements
>some standard COM interfaces. Then you can use any scripting
>language you want: Visual Basic, Java, C++, Perl, etc. You
>can easily add custom events to be fired to any object and
>custom properties and methods. Scripting support is lightweight
>and mostly trivial to implement using ATL. Plus, you can leverage
>the already existing knowledge of one million VB coders.

One thing I see about this is that it might take longer to learn this

Sam Inala

unread,
Feb 23, 1998, 3:00:00 AM2/23/98
to

Vic <tu...@cam.org> wrote in article <34F051...@cam.org>...


> Sam Inala wrote:
> > More information:
> > _Inside COM_ by Rogerson
> > _Effective COM_ by Box
> > _Inside OLE, 2nd Edition_
> any resources online? How do you use those COMs anyways? Do you just
> need a win32 compiler or do you need visual C++?

http://www.microsoft.com/cominfo COM info
http://www.microsoft.com/msdn General developer info
http://www.microsoft.com/kb Knowledge base articles

All you really need is any C++ compiler. (Actually, you can develop
COM components in C or VB too. But I digress.) You can develop
them on the Mac or Unix as well. RealNetworks, for example, does
this.

In C++, you use them just like you use normal C++ objects. Here's
how you can use the XML parser shipped with IE4:

#include <msxml.h>

//
// FIXME: Omitting error checking
//
IXMLDocument* pDocument = NULL;

HRESULT hr = CoCreateInstance(
CLSID_XMLDocument,
NULL,
CLSCTX_SERVER,
IID_IXMLDocument,
(void**) &pDocument );

IPersistStreamInit* pPersistStreamInit = NULL;
hr = pDocument->QueryInterface( IID_IPersistStreamInit, (void**)
&pPersistStreamInit );

// getting pStream omitted
hr = pPersistStreamInit->Load( pStream );

IXMLElement* pRoot = NULL;
hr = pDocument->get_root( &pRoot );

BSTR bstrAttribute = SysAllocString( OLESTR( "HOSTNAME" ) );

VARIANT var;
VariantInit( &var );

hr = pRoot->getAttribute( bstrAttribute, &var );
OutputDebugStringW( var.bstrVal );

VariantClear( &var );
SysFreeString( bstrAttribute );

Hmm, I hope that doesn't scare anyone off. Given a document like this one:

<?XML version="1.0"?>
<MIF
HOSTNAME="\\sami1"
Period="30">

<GROUP HREF="http://www.microsoft.com">
<PROTOCOL
IPADDRESS="238.238.238.238"
PORT="2000"
TTL="32">
</PROTOCOL>
</GROUP>
</MIF>

It will parse it, get the root element, fetch the attribute called
HOSTNAME,
and send the string '\\sami1' to the Debug window. Writing the same in VB
or Java is much easier, of course.

First we include the header file for the component. Then we call
CoCreateInstance with CLSID_XMLDocument and a pointer. CoCreateInstance
is a standard Windows call. The other arguments are not important.

The pointer, pDocument, is a pointer to an instance of the abstract base
class IXMLDocument, declared in the header file. Your C++ knowledge
applies from here on out; we just exercise some of those IXMLDocument
methods to do some work.

The MSDN's Dr. GUI appears to be writing an introduction to COM on
the web site. VC has several wizards for generating components, but
I suggest understanding them on a fundamental level first.

"You've skipped over tons of detail!" Yes, there's a lot more. COM itself
is simple; you can learn the basics in an hour or two. But many standard
interfaces have been defined now for OLE, ActiveX controls, scripting, etc.
Learning these may take a while. But to use DirectX, you'll need an
understanding of COM anyway. Some parts of the shell may only be
extended using COM. Your COM knowledge will be very leveragable.

Sam Inala

unread,
Feb 23, 1998, 3:00:00 AM2/23/98
to

Jason Hoffoss (Tclord) <hof...@volition-inc.com> wrote in article
<34f3d068....@192.48.96.24>...


> On 22 Feb 1998 21:11:10 GMT, "Sam Inala" <sa...@ersatz.microsoft.com>

> >It seems like two approaches have been suggested:
> >1. Reinventing the wheel (write parser, compiler, and virtual machine)
> >2. Reusing a wheel (embedding Scheme, Tcl, Lua)
> >
> >How about a third approach?

> >3. Interchangeable wheels (expose the game's object model) [using COM]


>
> One thing I see about this is that it might take longer to learn this
> stuff than to use one of the first 2 methods.

Yes, it will. Maybe if you ignored everything but what you need for
scripting, it wouldn't take much longer, but I doubt it. Afterwards,
exposing an object model would be faster, I'm sure.

A Sun engineer once said that he classified people by the
time frames they operated in: milliseconds, microseconds,
nanoseconds, etc. Similarly, you could ask: how long will
people be writing scripts for my program?

Days: Scripting is not appropriate. Use C/C++/DLLs.
Weeks: Macro processing, recursive descent compiler with VM
Months: Embeddable language / Object model.

> Also, I'm not sure if COM object just give you access to functions or
> to data as well, but if you allow access to the data, then you will
> lose the advantage of validating the data.

COM never allows direct access to data. Data may only be
accessed through methods. However, in languages like VB,
it will *look like* you are accessing a property directly. E.g.

' VB code
Debug.Print( dxmPlayer1.FileName )

actually calls a C++ method,
CDirectShowPlayer::get_FileName( BSTR* pbstrFilename ).

If you know the Eiffel language, this is like its concept
of referential transparency. Whether data is retrieved by directly
accessing a member variable or by executing some code is
abstracted away. Access is always validated, making only
scripting errors possible.

> [..] And lastly, for me anyway, it's fun to write a compiler,


> and I think it's always good to know as much as you can. Writing a
> compiler can teach you a number of things.

I agree. People who do this might like Jon Bentley's _More
Programming Pearls_, which discusses some little language
design. Also good is the neglected _Writing Interactive Compilers
and Interpreters_ and _Write your own programming
language in C++_.

If you wanted to be cool you could extend an embeddable
language to understand scriptable objects, like they did for Perl.
I'd like to see a COM savvy Forth or Lisp.

Wilbur Streett

unread,
Feb 23, 1998, 3:00:00 AM2/23/98
to

Sam,

Thanks for demonstrating why all of the languages that are coming out of
Microsoft suck, as in there's more to a scripting language than exposing
"objects".

And a perfect example is how great a scripting language ASP is, Microsoft
can't even get their own web pages working properly with it.

Take your advocacy somewhere where people care.. or actually back up your
bullshit with real statements of "fact".

Wilbur
-----------------------------------------
Putting a Human Face On Technology ;-)
-----------------------------------------

John Scholes

unread,
Feb 23, 1998, 3:00:00 AM2/23/98
to

Wilbur Streett writes

>Sam,
>
>Thanks for demonstrating
<a few points about MS>

A little harsh, I mean it is not as if CORBA type stuff was invented by
MS. The funny thing is you would thing it was. Scarcely a week goes by
without another breathless instalment of amazing technology from the
Lovable Nerd.

Isn't it wonderful how well it all works! And the wonderful free
entertainment, of quite unexpected types. Did you know, for example,
that W95 trashes other OSs when you instal it in a multiple boot
configuration. I have no hair left. I ripped it all out in frustration.
[I am still hopeful of sorting it out, though, with the help of the
indispensable System Commander manual. And the bottle of Regrow :)]

So give credit where it is due. They are *brilliant* at marketing (and
one or two other less savoury things ...)

--
John Scholes

Sean Timarco Baggaley

unread,
Feb 23, 1998, 3:00:00 AM2/23/98
to

In article <01bd3fd6$65506240$f255389d@sami1>, Sam Inala
<sa...@ersatz.microsoft.com> writes

[...]

>Gee, this looks just like Visual Basic events!

>It seems like two approaches have been suggested:


>1. Reinventing the wheel (write parser, compiler, and virtual machine)
>2. Reusing a wheel (embedding Scheme, Tcl, Lua)

Close: but you're missing the advantages of having a bespoke scripting
language...

>How about a third approach?
>3. Interchangeable wheels (expose the game's object model)

>Exposing the object model means that your game implements
>some standard COM interfaces.

1: Not everybody writes [games] for Win95 -- many games are written for
*consoles*.

2: MS do not support COM on a Sony Playstation.

> Then you can use any scripting
>language you want: Visual Basic, Java, C++, Perl, etc. You
>can easily add custom events to be fired to any object and
>custom properties and methods. Scripting support is lightweight
>and mostly trivial to implement using ATL. Plus, you can leverage
>the already existing knowledge of one million VB coders.

VB coders? Surely you jest!

The whole *point* of creating a simple scripting language (for an
gameplay-centric game at least) is to make it easier for the *creative*
types to get in on the act. The people who should be using the scripting
engine are those who will create the core gameplay, tweak the puzzles,
fine-tune the AI, create the logic puzzles, provide the speech trees and
such like.

There's a big difference between scripting support and extensibility.

If 'making life easier for the programmers' is your only reason for
creating a scripting engine, then you are utterly missing the point;
DLLs [as ID are using in Quake 2] would be just as effective.

But if you want to allow your game designer(s), artists and writers to
fiddle around with the gameplay until it fair reeks of 'Addict-O! The
Wonder Polish for Games!' then aiming for a bespoke, *simple to use*
scripting language is the best route. (Although 'script-generation'
front-ends should not be ruled out.)

--
Sean Timarco Baggaley

<mailto:stim...@cix.co.uk>

Of course, if I've just jumped into the middle of a 'How Do I Write Quake'
thread, feel free to ignore this entire post...

E&OE

Paul Bleisch

unread,
Feb 23, 1998, 3:00:00 AM2/23/98
to

Wilbur Streett <WStr...@shell.monmouth.com> wrote:
>Sam,
>
>Thanks for demonstrating why all of the languages that are coming out of
>Microsoft suck, as in there's more to a scripting language than exposing
>"objects".
>
>And a perfect example is how great a scripting language ASP is, Microsoft
>can't even get their own web pages working properly with it.
>
>Take your advocacy somewhere where people care.. or actually back up your
>bullshit with real statements of "fact".
>

Hmm... I thought what he said was very useful if people want to understand
how COM handles interlanguage issues. Yes, a scripting language is more
than exposing objects, but in general, most people want to just expose
objects to the scripting environment. While I don't think VBA is a great
language, it has the advantage of making use of COM objects and doing so
very easily.

Personally, I use LUA with COM objects in a similar manner and found that
VBA and the peoples at MS to be very helpful in making my project work.
Eventhough it doesn't make them any money and Lua is a free software project.

Paul

Paul Bleisch

unread,
Feb 23, 1998, 3:00:00 AM2/23/98
to

Sean Timarco Baggaley <stbag...@hotmail.com> wrote:
>
>1: Not everybody writes [games] for Win95 -- many games are written for
>*consoles*.
>
>2: MS do not support COM on a Sony Playstation.


Indeed they don't. Doesn't mean you can't. I use COM on Linux,
an unsupported platform. The COM spec is available and is actually
very easy to get up and moving.

If you don't like COM (I'm sure for noble reasons) then there are
still many advantages to what is being suggested.


>There's a big difference between scripting support and extensibility.
>If 'making life easier for the programmers' is your only reason for
>creating a scripting engine, then you are utterly missing the point;
>DLLs [as ID are using in Quake 2] would be just as effective.

I use Lua because I like the language more than C++. The COM/Lua
integration makes life easier and overall, I can design test and
use new algorithms quicker in Lua/COM/C than in straight C or C++.
There are many reasons to use a script based language.


Word,
Paul


Wilbur Streett

unread,
Feb 23, 1998, 3:00:00 AM2/23/98
to

pble...@iago.jeske.meer.net (Paul Bleisch) wrote:

>Hmm... I thought what he said was very useful if people want to understand
>how COM handles interlanguage issues. Yes, a scripting language is more
>than exposing objects, but in general, most people want to just expose
>objects to the scripting environment. While I don't think VBA is a great
>language, it has the advantage of making use of COM objects and doing so
>very easily.

And we all base our object models on COM, now don't we?

>Personally, I use LUA with COM objects in a similar manner and found that
>VBA and the peoples at MS to be very helpful in making my project work.
>Eventhough it doesn't make them any money and Lua is a free software project.

VBA has shown itself time and time again to be useless. It's been
available for free for a few years now, and how many games are using it?

I could replace "object" with "internals of a game" and the argument would
be the same, with with specifying COM, the scripting language looks like
shit.. there are plenty of examples out there, and none of them are
useful.

Wilbur Streett

unread,
Feb 23, 1998, 3:00:00 AM2/23/98
to

pble...@iago.jeske.meer.net (Paul Bleisch) wrote:

>
>Indeed they don't. Doesn't mean you can't. I use COM on Linux,
>an unsupported platform. The COM spec is available and is actually
>very easy to get up and moving.

Oh, the COM spec. Instantiate, and do a version check. So useful.

Such a wonderful specification.

Paul Bleisch

unread,
Feb 24, 1998, 3:00:00 AM2/24/98
to

Wilbur Streett <WStr...@shell.monmouth.com> wrote:
>
>And we all base our object models on COM, now don't we?

No, but knowing how something else *actually* works can be a great
benefit now can't it? Whether or not you like COM shouldn't matter.
You had damn well better be able to determine what is wrong with it
and why, or else you are eventually going to miss something. COM
is so lightweight, I don't understand why everyone isn't using it.
(Actually, I have a pretty good idea why people don't use it and it
has mainly to do with having too many ways to do something.)

>VBA has shown itself time and time again to be useless. It's been
>available for free for a few years now, and how many games are using it?

I couldn't give two squirts whether anything is using it, I wanted to know
how the integration worked and they helped me out.


>I could replace "object" with "internals of a game" and the argument would
>be the same, with with specifying COM, the scripting language looks like
>shit.. there are plenty of examples out there, and none of them are
>useful.

Can you rephrase this? I am not sure what you are saying here.

Paul


Paul Bleisch

unread,
Feb 24, 1998, 3:00:00 AM2/24/98
to

Wilbur Streett <WStr...@shell.monmouth.com> wrote:

>pble...@iago.jeske.meer.net (Paul Bleisch) wrote:
>
>Oh, the COM spec. Instantiate, and do a version check. So useful.
>Such a wonderful specification.

What the hell are you talking about? The spec I was talking
about is available at http://www.microsoft.com/cominfo/
You need to make an effort to actually complain about something here.
I know there are problems with COM, but overall, it is actually
the best solution for alot of problems. The slip-up with COM
has actually been the confusion produced by the renaming and
hand-waving that MS marketing did a couple years ago.

Paul


Wilbur Streett

unread,
Feb 24, 1998, 3:00:00 AM2/24/98
to

pble...@iago.jeske.meer.net (Paul Bleisch) wrote:

>Wilbur Streett <WStr...@shell.monmouth.com> wrote:
>>
>>And we all base our object models on COM, now don't we?
>
>No, but knowing how something else *actually* works can be a great
>benefit now can't it?

And a great waste of time as well.

COM has demonstrated that it doesn't work. COM is OLE, COM is ActiveX, COM
is everything and the kitchen sink, COM is the Microsoft. It doesn't work,
it's a mess.. and it binds you into the proprietary, bug ridden Microsoft
architectures.

>Whether or not you like COM shouldn't matter.
>You had damn well better be able to determine what is wrong with it
>and why, or else you are eventually going to miss something. COM
>is so lightweight, I don't understand why everyone isn't using it.
>(Actually, I have a pretty good idea why people don't use it and it
>has mainly to do with having too many ways to do something.)

So it's not a decent architecture.. you admit it. 3 different ways to do
the same thing doesn't lead to working technology, it leads to technology
that's never been fully exercised, and the implementations are bug ridden
and remain bug ridden. You spend all of your development time figuring out
why objects don't work as documented, (if you can even find the
documentation in the first place..)

>>VBA has shown itself time and time again to be useless. It's been
>>available for free for a few years now, and how many games are using it?
>
>I couldn't give two squirts whether anything is using it, I wanted to know
>how the integration worked and they helped me out.

Because you asked them.. Ask the same questions on comp.compilers and you
get better non-proprietary answers. In case you didn't notice, if the
product isn't being used, that's because it DOESN'T WORK.

>>I could replace "object" with "internals of a game" and the argument would
>>be the same, with with specifying COM, the scripting language looks like
>>shit.. there are plenty of examples out there, and none of them are
>>useful.
>
>Can you rephrase this? I am not sure what you are saying here.

OBJECT is a generic term that has been overutilized to the extent of being
useless.

Any scripting langage that simply exposes the underlying object model is in
effect providing a more obtuse and more complicated method to access the
object model than a direct implementation would. Check out the scripting
on web pages that are accessing the underlying "object" model, What you'll
see is

object.method("parm", "Parma", 2)..
object.method2("parm", "Parma", 2)..
object.method3("parm", "Parma", 2)..
object.method4("parm", "Parma", 2)..
object.method5("parm", "Parma", 2)..
object.method6("parm", "Parma", 2)..
object.method7("parm", "Parma", 2)..

Hardly a worthwhile language. Almost unreadable..

Sam Inala

unread,
Feb 24, 1998, 3:00:00 AM2/24/98
to

Wilbur Streett <WStr...@shell.monmouth.com> wrote in article
<34f0f3a7....@news.monmouth.com>...
> Take your advocacy somewhere where people care.. [..]

My apologies, Wilbur. I will write less in the future.

I try to avoid advocacy; my tastes are mostly catholic.
I admit that your further comments merely confused me.

If people will only consider developing scripting
languages from scratch, how about this alternative:

Use a token threaded Forth, similar to the one
in the OpenBoot PROMs in Sun computers.

Advantages:

* Much faster than an traditional interpreters.

* Very compact. Forth is most used in embedded
environments because of the small size of the
inner interpreter. 4k is typical. Indeed, Java
uses a similar architecture because of the
compactness of zero-operand machines.

See Phil Koopman's _Stack Computers_
for some comparisons.

* Extensible: The CREATE> .. DOES>
pair allow you to extend the language itself,
similar to Lisp macros. You can build a
forth on a base of 10-20 words, after which
everything may be written in the language
itself. This also makes it easy to port.

Resources:
_Starting Forth_ by Leo Brodie
_Thinking Forth_ by Leo Brodie
comp.lang.forth

Sam Inala

unread,
Feb 24, 1998, 3:00:00 AM2/24/98
to

Meta note: For at least the next month, I will not be
posting to this newsgroup. I hope you don't mind
direct mail, but I don't wish to be involved in random flames.

Sean Timarco Baggaley <stbag...@hotmail.com> wrote in article
<v1A5IDAW...@cix.co.uk>...


> In article <01bd3fd6$65506240$f255389d@sami1>, Sam Inala
> <sa...@ersatz.microsoft.com> writes

> >Gee, this looks just like Visual Basic events!
>
> >It seems like two approaches have been suggested:
> >1. Reinventing the wheel (write parser, compiler, and virtual machine)
> >2. Reusing a wheel (embedding Scheme, Tcl, Lua)
>
> Close: but you're missing the advantages of having a bespoke scripting
> language...

That's true. I thought about addressing this. After all the principal
advantage of a scripting language is what Amit alluded to in his post:
being able to encapsulate the common logic of a game into the
language itself. Awk scripts, for example, are compact because
the filter code is ingrained in the language.

> >How about a third approach?
> >3. Interchangeable wheels (expose the game's object model)
>
> >Exposing the object model means that your game implements
> >some standard COM interfaces.

> [..vb is too hard for creative types..]

Well, you would know; I have not worked with such people.
Most of the simple scripting languages I've seen are much
harder than VB (take the Jedi Knight scripting language, e.g.)

Keith Elder

unread,
Feb 24, 1998, 3:00:00 AM2/24/98
to

Sam Inala wrote:
>
> If people will only consider developing scripting
> languages from scratch, how about this alternative:
>
> Use a token threaded Forth, similar to the one
> in the OpenBoot PROMs in Sun computers.
>
> Advantages:
>
> * Much faster than an traditional interpreters.
>
> * Very compact. Forth is most used in embedded
> environments because of the small size of the
> inner interpreter. 4k is typical. Indeed, Java
> uses a similar architecture because of the
> compactness of zero-operand machines.
>
> See Phil Koopman's _Stack Computers_
> for some comparisons.
>
> * Extensible: The CREATE> .. DOES>
> pair allow you to extend the language itself,
> similar to Lisp macros. You can build a
> forth on a base of 10-20 words, after which
> everything may be written in the language
> itself. This also makes it easy to port.
>

In fact, there is a Forth implementation written
in C, which is explicitly designed to function as
a scripting language for large C programs. It
is public domain. I am toying with the idea of
using it for my game, and am pretty impressed
with it. It is called ATLAST, and can be
found at:

http://www.fourmilab.ch/

(a very interesting web site, even if you aren't
interested in the ATLAST code.)

Keith Elder
el...@cdsnet.net

Justin Heyes-Jones

unread,
Feb 24, 1998, 3:00:00 AM2/24/98
to

On Mon, 16 Feb 1998 07:09:05 -0000, "Matt" <gue...@usa.netNOSPAM>
wrote:

I have an idea for using Java to do game scripts like those you are
after. What I imagine is a cut down virtual machine where the java
objects represent attributes and methods in your core game code.

Mappers/Designers then write the java code which is pointer free, type
safe and I hope clear and easy-ish to learn. You don't use any
standard java classes in the machine, unless you implement them in
your game.

Take the .java code and produce fast C,C++ or ASM source which can
then be compiled with you game engine on whatever platform.

Any comments?

>Hey all,
>
>I am in the process of planning this game and have decided to add a

Paul 'Ozymandias' Harman

unread,
Feb 24, 1998, 3:00:00 AM2/24/98
to

Justin Heyes-Jones wrote in message <34f299ca.4869834@probe-nt-2>...

>On Mon, 16 Feb 1998 07:09:05 -0000, "Matt" <gue...@usa.netNOSPAM>
>wrote:
>I have an idea for using Java to do game scripts like those you are
>after. What I imagine is a cut down virtual machine where the java
>objects represent attributes and methods in your core game code.
>
>Mappers/Designers then write the java code which is pointer free, type
>safe and I hope clear and easy-ish to learn. You don't use any
>standard java classes in the machine, unless you implement them in
>your game.


The Java back-end is a good idea, I reckon: having a virtual machine
interpreter rather than directly interpreting the source at run-time.

But I have to wonder... are your level designers going to be programmers?
Maybe, maybe not. So perhaps Java would not be a brilliant language to use.
Perhaps you want something like AppleScript (on the Mac) - something closer
to English.

So you wouldn't have commands like

object.setposition(32,567);

You'd say:

Set position of object to (32,567);

Ozzy

--
+-+ Paul Ian Harman +-+-+-+-+-+-+- Ozzy +-+ Games Guru & Sci-Fi Admirer +-+
-+- oz...@kasterborus.demon.co.uk +-+ http://www.kasterborus.demon.co.uk -+-

Justin Heyes-Jones

unread,
Feb 24, 1998, 3:00:00 AM2/24/98
to

On Tue, 24 Feb 1998 10:54:39 -0000, "Paul 'Ozymandias' Harman"
<oz...@kasterborus.demon.co.uk> wrote:

>But I have to wonder... are your level designers going to be programmers?
>Maybe, maybe not. So perhaps Java would not be a brilliant language to use.
>Perhaps you want something like AppleScript (on the Mac) - something closer
>to English.
>
>So you wouldn't have commands like
>object.setposition(32,567);
>You'd say:
>Set position of object to (32,567);

That's my main issue with this, is whether you're going to be able to
get so called non-programmers writing Java. However, I've seen mappers
use some complex tools in the past. And without pointers java becomes
a lot easier than C too teach.

I'm certain that you're example is within the grasp of the mappers.
You could auto generate things like threads to control in game objects
and allow mappers to fill in blanks. Imagine this fictious source code
for a simple proximity mine's main loop.

public void run()
{
if( this.distanceToPlayer < 500 )
{
this.destroySelf( BIG_EXPLOSION );
}
}

There's certainly a lot they can do without having to do hard core
programming.


Paul Bleisch

unread,
Feb 24, 1998, 3:00:00 AM2/24/98
to

Wilbur Streett <WStr...@shell.monmouth.com> wrote:
>pble...@iago.jeske.meer.net (Paul Bleisch) wrote:
>
>COM has demonstrated that it doesn't work. COM is OLE, COM is ActiveX, COM
>is everything and the kitchen sink, COM is the Microsoft. It doesn't work,
>it's a mess.. and it binds you into the proprietary, bug ridden Microsoft
>architectures.

That's odd, I write COM component based applications all the time and
they work just fine. Maybe I'm just lucky, or maybe I actually put
out an effort to understand what is wrong with the components and
fix them.


>So it's not a decent architecture.. you admit it. 3 different ways to do
>the same thing doesn't lead to working technology, it leads to technology
>that's never been fully exercised, and the implementations are bug ridden
>and remain bug ridden. You spend all of your development time figuring out
>why objects don't work as documented, (if you can even find the
>documentation in the first place..)

My statement had to do with the fact that there are a bunch of ways to
develop COM components and that MS should have just stuck to using IDL.
But since they didn't, it has allowed me to use MIDL generated headers
under Linux.

>Because you asked them.. Ask the same questions on comp.compilers and you
>get better non-proprietary answers. In case you didn't notice, if the
>product isn't being used, that's because it DOESN'T WORK.

Actually, I asked on comp.compilers and comp.lang.perl and no one on
either group could explain it and the only 'answers' I got were "Don't
use COM, it's from Microsoft." or "I don't know, but I'm sure you can't
get it to work because Microsoft doesn't want you to use anything but
VBA."


>Hardly a worthwhile language. Almost unreadable..

Ah.. I dunno, the couple people that have been using the COMLua
stuff have said they dig it. This is mainly due to the fact
that Lua is a table based language. This makes my COM components
that are exposed to the LUA environment look very similar to the
fully Lua based objects. For example, my test app is a little
web tool that uses the MS IE component:

-- Test COMLua
--
MSIE = CoCreateObject("Shell.Explorer");
if( MSIE == nil ) then
print( "Word to ya homey, MSIE not installed" );
exit();
end

-- print out function documentation
--
PrintDoc(MSIE.GoHome);
PrintDoc(MSIE.Navigate);

MSIE.Height = 640;
MSIE.Width = 480;
MSIE:GoHome();
MSIE:Navigate("http://www.acm.org");
MSIE:GoBack();
MSIE:GoForward();


I think this is very readable and allows me to test com objects
very easily.

Paul

Wilbur Streett

unread,
Feb 24, 1998, 3:00:00 AM2/24/98
to

pble...@iago.jeske.meer.net (Paul Bleisch) wrote:

:>>COM has demonstrated that it doesn't work. COM is OLE, COM is ActiveX, COM
:>>is everything and the kitchen sink, COM is the Microsoft. It doesn't work,
:>>it's a mess.. and it binds you into the proprietary, bug ridden Microsoft
:>>architectures.
:>
:>That's odd, I write COM component based applications all the time and
:>they work just fine. Maybe I'm just lucky, or maybe I actually put
:>out an effort to understand what is wrong with the components and
:>fix them.

And you spend how much of your time fixing Microsoft's technology? I write
applications that use standard technologies, so I don't have to worry about
fixing Microsoft's screw ups.

<snip>

> -- Test COMLua
> --
> MSIE = CoCreateObject("Shell.Explorer");
> if( MSIE == nil ) then
> print( "Word to ya homey, MSIE not installed" );
> exit();
> end
>
> -- print out function documentation
> --
> PrintDoc(MSIE.GoHome);
> PrintDoc(MSIE.Navigate);
>
> MSIE.Height = 640;
> MSIE.Width = 480;
> MSIE:GoHome();
> MSIE:Navigate("http://www.acm.org");
> MSIE:GoBack();
> MSIE:GoForward();

Oh yeah, that's beautiful code.. ;-P

Robert Blum

unread,
Feb 24, 1998, 3:00:00 AM2/24/98
to

Wilbur Streett wrote:
>pble...@iago.jeske.meer.net (Paul Bleisch) wrote:
>

[snip talk about COM]


>
>And you spend how much of your time fixing Microsoft's technology?

Less time than coming up with an own technology for binary objects.

>I write
>applications that use standard technologies, so I don't have to worry about
>fixing Microsoft's screw ups.

And what exactly *is* a standard technology that can be used instead of COM?
(Please, don't say CORBA. )
I'm not exactly an MS fan, but introducing VBX/OCX was a *big* step forward
concerning visual programming.

><snip>
>
> > -- Test COMLua
> > --
> > MSIE = CoCreateObject("Shell.Explorer");
> > if( MSIE == nil ) then
> > print( "Word to ya homey, MSIE not installed" );
> > exit();
> > end
> >
> > -- print out function documentation
> > --
> > PrintDoc(MSIE.GoHome);
> > PrintDoc(MSIE.Navigate);
> >
> > MSIE.Height = 640;
> > MSIE.Width = 480;
> > MSIE:GoHome();
> > MSIE:Navigate("http://www.acm.org");
> > MSIE:GoBack();
> > MSIE:GoForward();
>
>Oh yeah, that's beautiful code.. ;-P

It's not a question of beauty. It's a question of things getting done
quickly. That's the whole point of scripting languages.
And the above is one of the quickest ways to display HTML in your program.

Apart from that: I don't see any _beautiful_ way to resize a window and go
to a certain web page. Is there one?


Bye,
Robert

Paul Bleisch

unread,
Feb 24, 1998, 3:00:00 AM2/24/98
to

Wilbur Streett <WStr...@shell.monmouth.com> wrote:
>And you spend how much of your time fixing Microsoft's technology? I write

>applications that use standard technologies, so I don't have to worry about
>fixing Microsoft's screw ups.

Man, I guess I need to speak clearly and slowly. The 'fix them' comment
was about fixing components that I develop. As in, if developers would
take some time to understand what was happening then the quality of
components would increase. This is not MS's fault. There is nothing
inherently wrong with COM. It works as advertised. The components that
third party developers write may suck, but alot of this has to do with
the fact that a) they don't understand component software or b) they
don't care.

So what standard technologies do you use that clears up all these worries?


Word,
Paul


James Slaughter

unread,
Feb 25, 1998, 3:00:00 AM2/25/98
to

Sam Inala wrote in message <01bd40fa$9f691e70$f255389d@sami1>...


>
>Wilbur Streett <WStr...@shell.monmouth.com> wrote in article
><34f0f3a7....@news.monmouth.com>...
>> Take your advocacy somewhere where people care.. [..]
>
>My apologies, Wilbur. I will write less in the future.


Actually, I for one appreciated your responses: informative, justified, and
each with good references to find further information; this is totally
unlike (and IMHO far better than) many in rec.games.programmer, keep it up!

>If people will only consider developing scripting
>languages from scratch, how about this alternative:
>
>Use a token threaded Forth, similar to the one
>in the OpenBoot PROMs in Sun computers.
>

Traditionally, I write my own from scratch, purely because programming at
my age is only a hobby, and I find the challenge of doing something myself
far more interesting than the joy of getting something together quickly
through plagiary of someone else's code.

I am curious, though, as to how an implementation of Forth is quicker than
other techniques? I do not program in the language, but if possible, could
you outline briefly why? Is it just that the language lends itself to
simple optimisation, or forces tight code?

My thoughts on COM are that for other programmers, it is an ideal
solution - or at least the approach is sound - I don't know whether it has
the problems mentioned elsewhere in this thread, or whether it is just
Wilber being... himself :).

However, one of the advantages of a script language is that it can be
comparatively simple, which allows the occasional 'enthusiastic' user to
write their own enhancements. This is more important for a game where many
people enjoy writing their own levels - as id (among others) has shown -
than it is for an application where a few 'Power Users' and programmers
will occasionally write a simple 'nigglet' of code to speed something up.

A Visual Basic type system is one solution, but few games developers have
the time to stop and write that kind of thing.

Regards,
James.

John Scholes

unread,
Feb 25, 1998, 3:00:00 AM2/25/98
to

Wilbur Streett writes

<<mucho snipped>>

>>No, but knowing how something else *actually* works can be a great
>>benefit now can't it?
>
>And a great waste of time as well.
>

>COM has demonstrated that it doesn't work.

>So it's not a decent architecture..

>>I couldn't give two squirts whether anything is using it, I wanted to know


>>how the integration worked and they helped me out.
>
>Because you asked them..

<and more>

I think you could be missing the point here, Wilbur. I apologize for
asking a Real Newbie Question. But indulge me a little, just to avoid
misunderstandings, is it your premiss that the whole DCOM thing is
intended to be useful?

I don't want to enter into a long rant if we are at cross-purposes here.

I mean you do believe that the Mr BG, the richest man in the world,
loves you dearly and cares about nothing except you welfare, don't you?
You do realize that he has been grievously misunderstood and
misrepresented, don't you?

You do believe that he is a former nerd, who loves coding and wants
nothing more than to make coders little lives easier? You do appreciate
that he is not a Rotten B****** Suit, that he is different ...


--
John Scholes

John Scholes

unread,
Feb 25, 1998, 3:00:00 AM2/25/98
to

Sam Inala writes

>
>> Take your advocacy somewhere where people care.. [..]
>
>My apologies, Wilbur. I will write less in the future.
>
>I try to avoid advocacy; my tastes are mostly catholic.

Hey Sam! Are you really from MS? You sound so much like a coder, I did
not realize.
Look I have this small problem. I am trying to install the following on
my hard drive:

primary 1: Win95
primary 2: DOS6/Win3.1
primary 3: NT4
primary 4: redhat5

I know this sort of thing is a bit silly really. It's just that I am
short of money and want to use the same machine as a test-bed for some
code I am trying to write.

Anyway, I know how good you guys are about supporting developers. You
give us all this absolutely amazing stuff at such giveaway prices, and
there is always another goodie just around the corner. It is really ...
well, I guess, I never was much good with words, I just cannot
adequately express what I feel about it all ...

But back to the point. The thing is it is proving unexpectedly awkward.
I know it is my fault, really. I cannot get rid of this unreasonable
feeling that it would be nice if setup thingies set things up. Silly
really. But the real problem is that one or two really strange things
seem to happen. I mean, I am almost tempted to give up hope sometimes.
It is only the thought of all you guys giving us this Amazing Stuff at
such amazing prices that keeps me struggling on ...

I cannot afford any more of these new Priority Support Calls things. So
I was wondering, as a special favor, whether you might be able to pull a
few strings and get one of the guys to help me out. You know, on an
unofficial basis.

There is another slight difficulty. I seem to have a problem with the
this marvellous winmodem they told me so much about. But I was always
hopeless at comms. So maybe it would be best it we did the whole thing
on usenet (I managed to retrieve an old machine with some of that old
Win3.1 stuff on it which still works, provided you do not stay on it too
long. Goodness, when I look back you did an amazing job in those days.
Mind you. I guess things were easier then. There wasn't all this
unstandardized hardware around).

Come to think of it, others might pick up a few hints too. But maybe
not. I guess no one could be as stupid as me. I am 40 hours into it and
still not quite there, somehow. Never mind. I am sure that with your
help I soon will be.

--
John Scholes

Russ Williams

unread,
Feb 25, 1998, 3:00:00 AM2/25/98
to

John Scholes wrote in message <72$62aBmr...@kalva.demon.co.uk>...

>Look I have this small problem. I am trying to install the following on
>my hard drive:
>
>primary 1: Win95
>primary 2: DOS6/Win3.1
>primary 3: NT4
>primary 4: redhat5

What exactly do you mean by 'primary' for these? You mention your
hard drive (singular) above, yet this seems to suggest 4 drives with
primary partitions.

Doesn't Linux have a boot-disk option? With a DOS boot disk
you can get DOS6/Win311, and Win95/NT4 co-exist quite happily
(if you install Win95 first...)
If you've got Win95, pre-OSR2, then you can even keep
DOS6/Win311 with the Previous OS option in the F8 boot menu.

---
Russ

Sean T Barrett

unread,
Feb 25, 1998, 3:00:00 AM2/25/98
to

Russ Williams <ru...@algorithm.demon.co.uk> wrote:
>If you've got Win95, pre-OSR2, then you can even keep
>DOS6/Win311 with the Previous OS option in the F8 boot menu.

Ack! They took that out of OSR2?! Oh well, so
much for trying to scam up a copy of OSR2 just
so I don't have to partition my 6.4G hard drive
into 5 partitions (5 because I want a couple
megs with <32K clusters--but it takes 4 even with
2.1M per partition).

And don't even get me started on that. Oh,
too late. I can't believe how here and on the
IBM PC newsgroups people say how it's cheap
and easy to upgrade, but nobody mentions you
can't get FAT32 without buying a new machine--
you're out of luck if you put it together yourself
or just upgrade. FAT32 is _not_ one of the
OSR2 features you can download from MS.

I'm sure they do it for support reasons, but
it pisses me off that the web page is covered
with patronizing "oh, you don't need this unless
you have a new machine" comments. No, you
idiots (they're not really, they're just being
schmoozing marketeers who don't want to say
they don't want to deal with support), you just
need new _hardware_, not a new freakin' machine.

Sean Barrett

John Scholes

unread,
Feb 25, 1998, 3:00:00 AM2/25/98
to

Russ Williams writes

>>Look I have this small problem. I am trying to install the following on
>>my hard drive:
>>
>>primary 1: Win95
>>primary 2: DOS6/Win3.1
>>primary 3: NT4
>>primary 4: redhat5
>
>What exactly do you mean by 'primary' for these? You mention your
>hard drive (singular) above, yet this seems to suggest 4 drives with
>primary partitions.

I mean precisely what I said. I have a single 8GB hard drive. I wish to
partition it to allow multiple boot.

>
>Doesn't Linux have a boot-disk option?

Yes you are correct. It does. So what?

>With a DOS boot disk
>you can get DOS6/Win311, and Win95/NT4 co-exist quite happily

This has to be a wind-up.

Just try to get these charming well-behaved MS OS onto the same physical
drive and see what happens. You have *tried it yourself* haven't you,
Russ?

Come on now Russ. I know you are a big expert and I am an idiot. Now
just tell us precisely what I am doing wrong.

Ok, so I not doing what I am supposed to do. Ok, I need to pay for some
advice. Fair enough. How's about I pay you $100 if you can get this
going in the next 24 hours. This is a serious offer with plenty of
witnesses. Reason. I *really* want to know. This MS stuff is driving me
bananas.

My machine or yours. But just be sure to tell us all *precisely* how you
did it.

It is a brand new just delivered Gateway 233MHz. IBM 8GB hard drive.
Mitsumi 13/32x CD. Supposedly top-end AccelGraphics 8MB card
(documentation and Win95 differ on exactly which one), EV700 17"
monitor. 64MB RAM. No funnies except one of these f***ing, unusable
winmodems. BTW I am about the smash the thing as a public service.
Whatever you do folks don't tangle with them (unless you like the
approved set-up and pre-installed OS and web software, of course).

So how do I do it? I really want to know. It has wasted >30 hours of my
time at this point. $100 will be the bargain of the century. If you can
do it, of course. -$10 for everything I have to tell you about NT, 3rd
party utilities, from this point on? Fair enough?


--
John Scholes

Wilbur Streett

unread,
Feb 25, 1998, 3:00:00 AM2/25/98
to

"Robert Blum" <r.b...@advertainment.remove_this.com> wrote:
>>I write
>>applications that use standard technologies, so I don't have to worry about
>>fixing Microsoft's screw ups.
>And what exactly *is* a standard technology that can be used instead of COM?

COM? COM is so vague a description as to be useless.

Pick a little more specific area.

>(Please, don't say CORBA. )

Oh, you mean in communcations? It's such a hard job to open a socket and
send data to another machine. I suppose that you were asking about DCOM?

>I'm not exactly an MS fan, but introducing VBX/OCX was a *big* step forward
>concerning visual programming.

More like a big step backwards.

>>Oh yeah, that's beautiful code.. ;-P
>It's not a question of beauty. It's a question of things getting done
>quickly. That's the whole point of scripting languages.

Oh, that's the excuse of all of the crap coming out of Microsoft. It's
done quickly..

>And the above is one of the quickest ways to display HTML in your program.

That's not displaying HTML in your program. That's displaying HTML in
Internet Explorer, and your program isn't in control.

>Apart from that: I don't see any _beautiful_ way to resize a window and go
>to a certain web page. Is there one?

Funny, that's not an application level task the last that I heard.. and if
you are interested, there is plenty of technology to start programs with
default pages. Intel has intelligent agent technology to do this, check
out their IAL pages. Or even launch Netscape with a few command line
parameters..

Wilbur Streett

unread,
Feb 25, 1998, 3:00:00 AM2/25/98
to

pble...@iago.jeske.meer.net (Paul Bleisch) wrote:

>Wilbur Streett <WStr...@shell.monmouth.com> wrote:
>>And you spend how much of your time fixing Microsoft's technology? I write


>>applications that use standard technologies, so I don't have to worry about
>>fixing Microsoft's screw ups.
>

>Man, I guess I need to speak clearly and slowly. The 'fix them' comment
>was about fixing components that I develop. As in, if developers would
>take some time to understand what was happening then the quality of
>components would increase. This is not MS's fault. There is nothing
>inherently wrong with COM. It works as advertised. The components that
>third party developers write may suck, but alot of this has to do with
>the fact that a) they don't understand component software or b) they
>don't care.
>
>So what standard technologies do you use that clears up all these worries?

What area are you interested in?

As to concerns with my own code, COM doesn't solve any of them, I solve
them myself with my coding practices. Part of those practices are
concerned with limiting risk, (ie, being able to trust code..) and you
claim that the problem is COM components created by third parties, when the
reality is that the COM components created by MicroSoft are bloated bug
ridden examples of useless code, wrapped around trivially simple OS level
and other interfaces.

Wilbur Streett

unread,
Feb 25, 1998, 3:00:00 AM2/25/98
to

John Scholes <jsch...@kalva.demon.co.uk> wrote:

>I think you could be missing the point here, Wilbur. I apologize for
>asking a Real Newbie Question. But indulge me a little, just to avoid
>misunderstandings, is it your premiss that the whole DCOM thing is
>intended to be useful?

I was approached by Microsoft to write Distributed OLE, (what is now called
DCOM). This was about 7 years ago, and I would have been paid $100/hr. I
also would have had to move to Nebraska. I turned them down. I knew then
what the design results would be. (The move them to another place scheme
is a Bill Gates scheme. It's also used by the US Military. I'm sure that
Bill got it out of his reading of Napolean. Nothing like tearing people
out of their roots to make them loyal to you.)

The bottom line is that DCOM is a proprietary architecture, intended to
extend Microsoft's propritary technology. It was never a good idea,
extending communcations code by burying it under OLE wasn't a good idea,
and having interfaces that can extend trivially isn't a good idea for
usable technology.

It is, however, a good way to extend a technology monopoly.

Wilbur Streett

unread,
Feb 25, 1998, 3:00:00 AM2/25/98
to

buz...@world.std.com (Sean T Barrett) wrote:

>I'm sure they do it for support reasons, but
>it pisses me off that the web page is covered
>with patronizing "oh, you don't need this unless
>you have a new machine" comments. No, you
>idiots (they're not really, they're just being
>schmoozing marketeers who don't want to say
>they don't want to deal with support), you just
>need new _hardware_, not a new freakin' machine.

Well, the lies are catching up to them.

Paul Bleisch

unread,
Feb 25, 1998, 3:00:00 AM2/25/98
to

Wilbur Streett <WStr...@shell.monmouth.com> wrote:
>
>COM? COM is so vague a description as to be useless.
>Pick a little more specific area.

Wilbur, Wilbur, Wilbur, COM describes something very specific actually.
COM is a) a binary standard, b) defines rules for the creation and management
of interfaces on objects, and c) defines rules for management of components.

>That's not displaying HTML in your program. That's displaying HTML in
>Internet Explorer, and your program isn't in control.

Actually it does. The example I posted uses the MSIE html widget not the
MSIE application interface. In fact there is a TKLua version that embeds
the widget into a TKLua app. Now I will admit that most of MSIE (application)
is contained in the MSIE html widget.


>Funny, that's not an application level task the last that I heard.. and if
>you are interested, there is plenty of technology to start programs with
>default pages. Intel has intelligent agent technology to do this, check
>out their IAL pages. Or even launch Netscape with a few command line
>parameters..

Sometimes, Wilbur, you make me chuckle. See, I know you understand that
this was an example of how to use Lua (a scripting language) with COM.
But see, right above here, you act like you don't know that. If all I
really wanted to do is open a page to somewhere, I wouldn't need Intel's
intelligent agents.

Paul


Robert Blum

unread,
Feb 25, 1998, 3:00:00 AM2/25/98
to

Wilbur Streett wrote:


>"Robert Blum" <r.b...@advertainment.remove_this.com> wrote:
>>>I write
>>>applications that use standard technologies, so I don't have to worry
about
>>>fixing Microsoft's screw ups.

>>And what exactly *is* a standard technology that can be used instead of
COM?
>

>COM? COM is so vague a description as to be useless.

In no way. It's a way to describe binary objects and software components.


>
>Pick a little more specific area.
>

>>(Please, don't say CORBA. )
>
>Oh, you mean in communcations? It's such a hard job to open a socket and
>send data to another machine. I suppose that you were asking about DCOM?

CORBA is *not* about communicating between machines. That's a *side effect*.
CORBA is about software components. Exposing interfaces to unknown callers
in a specified way.


>>I'm not exactly an MS fan, but introducing VBX/OCX was a *big* step
forward
>>concerning visual programming.
>More like a big step backwards.

OIC. What do you think was a step forward for *visual* programming?

>>>Oh yeah, that's beautiful code.. ;-P
>>It's not a question of beauty. It's a question of things getting done
>>quickly. That's the whole point of scripting languages.
>
>Oh, that's the excuse of all of the crap coming out of Microsoft. It's
>done quickly..

Nobody wanted to hear your opinion on MS in this case. It was a sample of
how he could *test* a COM object from a scripting language. If I want to
test something quickly, I don't necessarily write a C program for it. I'll
use a simpler language, a calculator, some legos, whatever gets the job done
as good as possible in as little time as possible.

That's the point behind evaluating ideas.

>>And the above is one of the quickest ways to display HTML in your program.


>
>That's not displaying HTML in your program. That's displaying HTML in
>Internet Explorer, and your program isn't in control.

My program is not in control, yes. It wouldn't be either if I'd use a 3rd
party library. Might it be you're suffering from a severe case of NIH?
I neither have the time nor am I inclined to reinvent the wheel. If you like
doing that, fine.


>>Apart from that: I don't see any _beautiful_ way to resize a window and go
>>to a certain web page. Is there one?
>

>Funny, that's not an application level task the last that I heard..

We are not talking about application level tasks. You saw a code sample and
claimed it was not beautiful. I asked you how you'd achieve the same task in
a beautiful way.

>and if
>you are interested, there is plenty of technology to start programs with
>default pages. Intel has intelligent agent technology to do this, check
>out their IAL pages. Or even launch Netscape with a few command line
>parameters..

And in this case I'm completely in control? Are you arguing for the sake of
a good argument?

Now let me sum this up. I asked two questions:
a) What standard technology would you use to replace COM, since you claimed
you'd rather use standard technology instead of COM.
b) How would you achieve the same thing as the cited code script in a
beautiful way? Remember, you claimed it was *not* beautiful.

I did get *no* answer to the above. And I'd like to hear one, especially to
a)

Bye,
Robert

John Scholes

unread,
Feb 25, 1998, 3:00:00 AM2/25/98
to

Wilbur Streett writes

>>I think you could be missing the point here, Wilbur. I apologize for
>>asking a Real Newbie Question. But indulge me a little, just to avoid
>>misunderstandings, is it your premiss that the whole DCOM thing is
>>intended to be useful?
>

<snip Wilbur's involvement in DCOM.>
Somehow I had this feeling he might be well informed.

>The bottom line is that DCOM is a proprietary architecture, intended to
>extend Microsoft's propritary technology.

Oh dear. How dull. We seem to agree on everything except the spelling of
proprietary. Probably another of these odd post-colonial innovations.
:)

--
John Scholes

Glenn Corpes

unread,
Feb 25, 1998, 3:00:00 AM2/25/98
to

jsch...@kalva.demon.co.uk (John Scholes) wrote:

> Russ Williams writes
> >>Look I have this small problem. I am trying to install the following
> on
> >>my hard drive:
> >>
> >>primary 1: Win95
> >>primary 2: DOS6/Win3.1

Why do you want DOS6/Win3.1 when DOS7 runs all DOS6 apps and win95 runs
all win3.1 apps?

> >>primary 3: NT4
> >>primary 4: redhat5
> >
> >What exactly do you mean by 'primary' for these? You mention your
> >hard drive (singular) above, yet this seems to suggest 4 drives with
> >primary partitions.
>
> I mean precisely what I said. I have a single 8GB hard drive. I wish t
> o
> partition it to allow multiple boot.
> >
> >Doesn't Linux have a boot-disk option?
> Yes you are correct. It does. So what?
>
> >With a DOS boot disk
> >you can get DOS6/Win311, and Win95/NT4 co-exist quite happily
>
> This has to be a wind-up.
>
> Just try to get these charming well-behaved MS OS onto the same physic
> al
> drive and see what happens. You have *tried it yourself* haven't you,
> Russ?
>
> Come on now Russ. I know you are a big expert and I am an idiot. Now
> just tell us precisely what I am doing wrong.

Oh, I see why you want it, because you are trying to prove some fucking
inane point...



> Ok, so I not doing what I am supposed to do. Ok, I need to pay for som
> e
> advice. Fair enough. How's about I pay you $100 if you can get this
> going in the next 24 hours. This is a serious offer with plenty of
> witnesses.

What, are we all supposed to witness Russ wasting his time and say 'fuck
me, John has a point, where do I download Linux?'

> Reason. I *really* want to know. This MS stuff is driving me
> bananas.

How about we get back to games. I have nothing against hysterical
Microphobia, it's a free world, I just don't think you paranoid
obsessives should spam r.g.p with this crap, tell you what, you fuck off
back to alt.destroy.microsoft and I promise I won't start a thread there
about the relative merits of fixed and floating point geometry.

-=< gco...@ea.com, Project Leader Bullfrog >=-

Like the idea of a spam
free alternative to usenet?
take a look at CIX conferencing
http://www.compulink.co.uk/servicesf.html

Wilbur Streett

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

pble...@iago.jeske.meer.net (Paul Bleisch) wrote:
<snip>
>
>Sometimes, Wilbur, you make me chuckle. See, I know you understand that
>this was an example of how to use Lua (a scripting language) with COM.
>But see, right above here, you act like you don't know that. If all I
>really wanted to do is open a page to somewhere, I wouldn't need Intel's
>intelligent agents.

If you don't want to be bound to Microsoft it's a good place to start.

When you open a page as you described, you arne't scripting a game, you're
scripting Windows. If a user clicks on a URL on the page, it's under MSIE
control, not your application.

So in effect, you demonstrated a Windows script, not a game script.

As to your assertion that COM is a well defined standard,

Define "object" in a concise manner. When you're done, we'll talk about
how "well defined" COM is, since it's just a redefinition of "Object".

As you have admitted, there is more than one way, which means that it's a
POORLY DEFINED standard.

Wilbur Streett

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

"Robert Blum" <r.b...@advertainment.remove_this.com> wrote:

>>Oh, you mean in communcations? It's such a hard job to open a socket and
>>send data to another machine. I suppose that you were asking about DCOM?
>CORBA is *not* about communicating between machines. That's a *side effect*.
>CORBA is about software components. Exposing interfaces to unknown callers
>in a specified way.

I'm sorry that you don't understand that CORBA is a communcations tool.
It's an attempt to take communcations issues and bury them in Object
Oriented nonsense, and that is the main reason that CORBA is such a mess.
Dig around on the Internet and check out the personal statements from
people involved with CORBA. Bottom line, it's a poor technological attempt
to change the issues of communications design to a software object
architecture. The same goes for DCOM. But you can pretend otherwise.

>>>I'm not exactly an MS fan, but introducing VBX/OCX was a *big* step
>forward
>>>concerning visual programming.
>>More like a big step backwards.
>OIC. What do you think was a step forward for *visual* programming?

I don't even think that it has really happened yet. Market hype doens't
impress me, and windows is a rather trivial implementation of what is
possible in a visual space. Indeed, OCX doesn't do anything other than
define and extend Microsoft's market dominance, certainly doesn't create
any new and interesting technology. Not "Visual" or anything else.

>>>>Oh yeah, that's beautiful code.. ;-P
>>>It's not a question of beauty. It's a question of things getting done
>>>quickly. That's the whole point of scripting languages.
>>
>>Oh, that's the excuse of all of the crap coming out of Microsoft. It's
>>done quickly..
>Nobody wanted to hear your opinion on MS in this case. It was a sample of
>how he could *test* a COM object from a scripting language.

That's not a test, that's bullshit. Sorry fot the language, I usually
agree with you Robert, but "hello world" with MSIE isn't a "test" of an
OCX.

>If I want to
>test something quickly, I don't necessarily write a C program for it. I'll
>use a simpler language, a calculator, some legos, whatever gets the job done
>as good as possible in as little time as possible.

I guess you don't have as much system engineering background as I do then.
I don't do a measly "test" and pretend that a component works. I've been
burned enough times to only work with technology that actually works. I'm
sort of funny that way, I only work with technology that I trust will
actually work.

>That's the point behind evaluating ideas.

Writing a script is NOT the same as evaluating ideas.


>>>And the above is one of the quickest ways to display HTML in your program.
>>
>>That's not displaying HTML in your program. That's displaying HTML in
>>Internet Explorer, and your program isn't in control.
>My program is not in control, yes. It wouldn't be either if I'd use a 3rd
>party library. Might it be you're suffering from a severe case of NIH?

NIH is a good way to write code that actually works.

>I neither have the time nor am I inclined to reinvent the wheel. If you like
>doing that, fine.

And you don't control any of the technology that you write with MSIE
components. How difficult is it for you to get source and to use a generic
open standard. Opening an HTML page is as simple as opening a socket and
writing "get filename" and then reading the response.

>>>Apart from that: I don't see any _beautiful_ way to resize a window and go
>>>to a certain web page. Is there one?
>>
>>Funny, that's not an application level task the last that I heard..
>We are not talking about application level tasks. You saw a code sample and
>claimed it was not beautiful. I asked you how you'd achieve the same task in
>a beautiful way.

This thread is about game scripting.. last I heard games were their own
environments.. not MSIE or Windows scripts..


>>and if
>>you are interested, there is plenty of technology to start programs with
>>default pages. Intel has intelligent agent technology to do this, check
>>out their IAL pages. Or even launch Netscape with a few command line
>>parameters..
>And in this case I'm completely in control? Are you arguing for the sake of
>a good argument?
>
>Now let me sum this up. I asked two questions:
>a) What standard technology would you use to replace COM, since you claimed
>you'd rather use standard technology instead of COM.

What makes you think that I have to replace COM at all? What makes you
think that I even have to use COM? Believe it or not, people write
software all the time that isn't based on COM.

>b) How would you achieve the same thing as the cited code script in a
>beautiful way? Remember, you claimed it was *not* beautiful.

I wouldn't even attempt the basics of that script. There was nothing
"beautiful" about it. Lack of error handling is a good place to start.
Lack of User Interface control is another good place. Suppose the the path
to the URL is down? What error message to you give the user? I see from
the scripting example that everything is left to Microsoft's default error
messages, and we all know how useful they are.

>I did get *no* answer to the above. And I'd like to hear one, especially to
>a)

See above.

Russ Williams

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

Sean T Barrett wrote in message ...

>Russ Williams <ru...@algorithm.demon.co.uk> wrote:
>>If you've got Win95, pre-OSR2, then you can even keep
>>DOS6/Win311 with the Previous OS option in the F8 boot menu.
>
>Ack! They took that out of OSR2?!

Nope. It just doesn't work too well...

If you boot the the previous OS from OSR2, it disables the boot
sequence (you get "Starting Windows 95...", then nothing). The
theory here is that, since OSR2 should only be found on new
PCs, MS put this trap in... The fix is to use a Win95 boot disk
and SYS the C: drive from it.

IMO, if you want DOS 6.x, the easiest way is to use a boot disk.

'BootMulti=0' is your friend...

---
Russ

Paul Bleisch

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

Wilbur Streett <WStr...@shell.monmouth.com> wrote:
>
>That's not a test, that's bullshit. Sorry fot the language, I usually
>agree with you Robert, but "hello world" with MSIE isn't a "test" of an
>OCX.
>
>I guess you don't have as much system engineering background as I do then.
>I don't do a measly "test" and pretend that a component works. I've been
>burned enough times to only work with technology that actually works. I'm
>sort of funny that way, I only work with technology that I trust will
>actually work.
>
>Writing a script is NOT the same as evaluating ideas.

You have got to have the shortest memory. When I originally posted
about Lua and COM, I said that it makes testing COM components easier.
The code I posted was an example of instantiating COM components from
Lua and and example (if extended) of how one could easily test COM
components from Lua.

You nitpick so much. I hope the people you work with (assuming there
are any) do not have to hold your hand so damn much.


>And you don't control any of the technology that you write with MSIE
>components. How difficult is it for you to get source and to use a generic
>open standard. Opening an HTML page is as simple as opening a socket and
>writing "get filename" and then reading the response.

Actually there is a little more involved if you want to handle redirection
and caching correctly.


>I wouldn't even attempt the basics of that script. There was nothing
>"beautiful" about it. Lack of error handling is a good place to start.
>Lack of User Interface control is another good place. Suppose the the path
>to the URL is down? What error message to you give the user? I see from
>the scripting example that everything is left to Microsoft's default error
>messages, and we all know how useful they are.

I'm laughing now. I've finally had that moment of clarity. See, before
I thought, "This Wilbur guy is confused on a lot of things." Now, I just
think, "This Wilbur guy is simply argumentative and there is no way
to actually talk to him."

Word,
Paul


Russ Williams

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

John Scholes wrote in message ...

>Russ Williams writes
>>>Look I have this small problem. I am trying to install the
>>>following on my hard drive:
>>>
>>>primary 1: Win95
>>>primary 2: DOS6/Win3.1
>>>primary 3: NT4
>>>primary 4: redhat5
>>
>>What exactly do you mean by 'primary' for these? You mention your
>>hard drive (singular) above, yet this seems to suggest 4 drives with
>>primary partitions.
>
>I mean precisely what I said. I have a single 8GB hard drive. I
>wish to partition it to allow multiple boot.

You do know that you only get 1 boot sector per drive?

>>Doesn't Linux have a boot-disk option?
>Yes you are correct. It does. So what?
>
>>With a DOS boot disk you can get DOS6/Win311, and
>>Win95/NT4 co-exist quite happily
>
>This has to be a wind-up.

Why?

>Just try to get these charming well-behaved MS OS onto the

>same physical drive and see what happens. You have *tried


>it yourself* haven't you, Russ?

Of course not. This machine with Win95 OSR2 and NT4 on is
a figment of my imagination. In fact, any moment now it's going
to disappear in a puff of logic... I just hope I can get this post
typed before that happens.

>Come on now Russ. I know you are a big expert and I am an
>idiot. Now just tell us precisely what I am doing wrong.

Well, I don't know precisely what you're doing...

OK. Here's how I'd do it:
(I'm assuming that you can create Linux partitions in
unpartitioned space and install it to boot using a floppy.
I've not enough experience with Linux to be sure.)

You'll need a set of DOS disks, a set of Win31 disks, a Win95
CD, an NT4 CD, a ZIP utility and any drivers as needed.

Boot using the DOS disks. Using fdisk, partition the drive.
(Say: 1gb boot partition, 100mb for DOS / Win311). Format
the primary and secondary partitions as FAT. Install DOS.
Move the DOS directory to D:\DOS and alter the paths in the
system files. Install Win311 to drive D. Format a floppy and
copy the system files across, so the system will load all the
necessary DOS drivers when booted from that floppy.

* If you have a Win95 upgrade CD, just install and select the
'keep old OS' option.
* If you have an OEM Win95 CD, ZIP up the D: drive and
deltree D:\Windows. Install Win95, then unzip DOS 6 / Win311
back. (If you have OSR2, set BootMulti=0 in msdos.sys)

Boot to Win95 and insert the NT4 CD. Click on the 'install'
option and install it. Create a new partition (1gb?), format
it as NTFS and install there. Alter your boot.ini file as needed.
Copy edit.* from C:\Windows\Command to
C:\WinNT\System32 (The DOS 6 edit that comes with NT is
horrid!)

This leaves you with just under 6gb. Partition this between
Linux, FAT, FAT32 and NTFS, depending on how much data
you'll need from each OS.

To install Linux, you can create the partitions and install it
to use a boot floppy. LILO may work instead of this, but I've
no idea.

This should leave your system in a state where it boots to
an NT / Win95 menu and by inserting floppies, you can
boot to Linux or DOS 6/Win311.

---
Russ

Wilbur Streett

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

pble...@iago.jeske.meer.net (Paul Bleisch) wrote:

>>Writing a script is NOT the same as evaluating ideas.
>

>You have got to have the shortest memory. When I originally posted
>about Lua and COM, I said that it makes testing COM components easier.
>The code I posted was an example of instantiating COM components from
>Lua and and example (if extended) of how one could easily test COM
>components from Lua.

Scripting is a lousy way to test COM components... There's a lot more to
testing than writing a script. But you can continue to believe that your
example "tested" opening an HTML, and I'll continue to shake my head at the
really poor level of engineering that you and a lot of outer programmers
think is appropriate.

>You nitpick so much. I hope the people you work with (assuming there
>are any) do not have to hold your hand so damn much.

Software nitpicks a hell of a lot more than I can.


>>And you don't control any of the technology that you write with MSIE
>>components. How difficult is it for you to get source and to use a generic
>>open standard. Opening an HTML page is as simple as opening a socket and
>>writing "get filename" and then reading the response.
>

>Actually there is a little more involved if you want to handle redirection
>and caching correctly.

Caching is transparent.. and it's so hard to read a response and see a
redirect message in the header.. NOT.

>>I wouldn't even attempt the basics of that script. There was nothing
>>"beautiful" about it. Lack of error handling is a good place to start.
>>Lack of User Interface control is another good place. Suppose the the path
>>to the URL is down? What error message to you give the user? I see from
>>the scripting example that everything is left to Microsoft's default error
>>messages, and we all know how useful they are.
>

>I'm laughing now. I've finally had that moment of clarity. See, before
>I thought, "This Wilbur guy is confused on a lot of things." Now, I just
>think, "This Wilbur guy is simply argumentative and there is no way
>to actually talk to him."

What do you claim to have been talking about? You claim that COM is a good
technology to use in game scripting, as an example, you provide a Windows
(not application) script to open an HTML page in MSIE, and you think that
you have demonstrated your point?

Seems that you are the one that is hard to talk with, mostly because you
have nothing to say or can't follow a thread.

Paul Bleisch

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

Wilbur Streett <WStr...@shell.monmouth.com> wrote:
>pble...@iago.jeske.meer.net (Paul Bleisch) wrote:
>
>Scripting is a lousy way to test COM components... There's a lot more to
>testing than writing a script. But you can continue to believe that your
>example "tested" opening an HTML, and I'll continue to shake my head at the
>really poor level of engineering that you and a lot of outer programmers
>think is appropriate.

One more time. I know that the code snippet I posted was not a full test.
It was an example of using Lua with COM. Are you with me so far? Ok. Now.
Given that it is now possible to use Lua with COM (still with me), one can
write scripts in Lua that exercise said COM components. Now that one is
able to write scripts in Lua that exercise COM components, one can write
extensive scripts that test COM components. Said testing would have to
be greater than the posted code snippet. The word greater meaning more
thorough.

Ok, so now we have Lua with COM support and we know that we can write
scripts in Lua. So, we need to develop our components that are going to
be used in the game or whatever. So we design the COM components. (You
are taking notes right?) After we have designed the interfaces and
the components that provide the interfaces, we implement them. This involves
writing code, if you are me, then it is C code. Ok so far, need a break?
So we have now designed and implemented our COM component. Now we need
to test it.

Anybody remember how I test my components. (Wilbur, if you need help, look
up two paragraphs.) That's right, with Lua and COM. How do we do this?
Well, we write a script that instantiates the component and initializes
it so we can begin exercising it. More than likely this includes testing
corner and edge cases in the code, verifying correct behavior as it is
documented, checking memory usage, running a couple chunks of data through
it (very nice to do in Lua), and especially testing the orthogonality of the
interfaces. Does this help?

I am curious why you thing scripting is a bad way to test components?


>Caching is transparent.. and it's so hard to read a response and see a
>redirect message in the header.. NOT.

I was just nitpicking. I know how browsers work, I developed one.


>What do you claim to have been talking about? You claim that COM is a good
>technology to use in game scripting, as an example, you provide a Windows
>(not application) script to open an HTML page in MSIE, and you think that
>you have demonstrated your point?

My original entry into this thread was with a recommendation of using Lua
for an embedded language. I then noticed you mentioned that scripting
languages should be more than simply exposing internal objects. I agree
in some sense with this statement, I think that games (or whatever) should
expose interfaces via objects. From there, I defended Sam(i)? at Microsoft
because he actually posted useful information and someone told him to go
home. From there, I defended COM as a useful tool in game development and
extremely useful in exposing interfaces to scripting languages. Then I
mentioned using Lua with COM and posted the example of using Lua with
COM. As far as it being a "Windows script" I can only hope you can make
the short logical leap from using the Shell.Explorer component to using
any other component. If not, let me know and I can write down the steps
for you.

Paul


Wilbur Streett

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

pble...@iago.jeske.meer.net (Paul Bleisch) wrote:

>>Scripting is a lousy way to test COM components... There's a lot more to

<snip>

>I am curious why you thing scripting is a bad way to test components?

Why don't you write a script to test the MSIE component that you used in
your first example. When you're done, you should feel free to come back
and provide me with the list of working and non-working API's of the
component. Better yet, take the simple ISAPI component and document where
it breaks.. (as if you could even use a script to test that component at
all.)

Since you don't know why I'm saying this, I'll break it down for you.

You can't test MSIE, and you don't know the dependencies. You don't know
all of the internals of the component, and you don't know where the
documentation actually matches the functionality and where it doesn't.

The ISAPI component doesn't run in a full Windows runtime environment,
since it's an interface designed to run under MS's Internet Server
software. You wouldn't be able to run any scripting engine under Internet
Server, because you inside a threaded I/O model..

Simply put, your claim that COM scripting provides a better way to test a
component has several dependencies that you just can't back up.

1) The scripting engine has to work.
2) The component has to be designed in a COM model. (Name one game that's
build that way.)
3) The interaction between the component and any other objects has to be
constrained to a reasonable level of complexity, and it has to be fully
documented..
4) you have to have time for the scripting engine to get the job done.
5) you have to actually write the scripts..

And, more importantly, none of this has anything to do with Game
programming..

You have decided that you like the COM model, and all of your arguments are
based on the assumptiong that a COM model is better.

Circular reasoning doesn't impress me.

>>Caching is transparent.. and it's so hard to read a response and see a
>>redirect message in the header.. NOT.
>
>I was just nitpicking. I know how browsers work, I developed one.

And I wrote an HTML parser and a server engine that wraps web pages into a
session oriented user interface. But I was trivially able to answer you
challenge. And I wrote the entire thing without a single bit of COM
software.

>>What do you claim to have been talking about? You claim that COM is a good
>>technology to use in game scripting, as an example, you provide a Windows
>>(not application) script to open an HTML page in MSIE, and you think that
>>you have demonstrated your point?
>
>My original entry into this thread was with a recommendation of using Lua
>for an embedded language. I then noticed you mentioned that scripting
>languages should be more than simply exposing internal objects. I agree
>in some sense with this statement, I think that games (or whatever) should
>expose interfaces via objects. From there, I defended Sam(i)? at Microsoft
>because he actually posted useful information and someone told him to go
>home. From there, I defended COM as a useful tool in game development and
>extremely useful in exposing interfaces to scripting languages. Then I
>mentioned using Lua with COM and posted the example of using Lua with
>COM. As far as it being a "Windows script" I can only hope you can make
>the short logical leap from using the Shell.Explorer component to using
>any other component. If not, let me know and I can write down the steps
>for you.

I'm sorry that you think that COM is the be all and end all of object
oriented programming, and that language design is LUA.

Some of us have a different opinion.

John Scholes

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

>>>>Look I have this small problem. I am trying to install the
>>>>following on my hard drive:
>>>>
>>>>primary 1: Win95
>>>>primary 2: DOS6/Win3.1
>>>>primary 3: NT4
>>>>primary 4: redhat5
>>>

>Of course not. This machine with Win95 OSR2 and NT4 on is


>a figment of my imagination. In fact, any moment now it's going
>to disappear in a puff of logic... I just hope I can get this post
>typed before that happens.
>

Ahhh! A promising start. You have installed two of the MS OS. Are they
on the same physical drive?

>OK. Here's how I'd do it:
>(I'm assuming that you can create Linux partitions in
>unpartitioned space and install it to boot using a floppy.
>I've not enough experience with Linux to be sure.)
>

I do not think Linux is the problem here.

>You'll need a set of DOS disks, a set of Win31 disks, a Win95
>CD, an NT4 CD, a ZIP utility and any drivers as needed.
>

Yes, yes, yes, yes. ZIP? You mean the DOS compress.exe?
Drivers, yes. A good point. Let us get into that later. For now, the
machine came with Win95 drivers which Win95 recognizes with ease.

>Boot using the DOS disks. Using fdisk, partition the drive.

I was right. This is a wind-up.

>(Say: 1gb boot partition, 100mb for DOS / Win311). Format
>the primary and secondary partitions as FAT. Install DOS.

Hold on a sec. I want 4 primary partitions. All different formats. Why
are we formatting the "secondary" as FAT?

>Move the DOS directory to D:\DOS and alter the paths in the
>system files. Install Win311 to drive D. Format a floppy and
>copy the system files across, so the system will load all the
>necessary DOS drivers when booted from that floppy.
>

Well yes. Let's just say Win3.1 is not an OS and hence not the issue.

>* If you have a Win95 upgrade CD, just install and select the
>'keep old OS' option.
>* If you have an OEM Win95 CD,

I guess I must have. It came pre-installed from Gateway.

> ZIP up the D: drive and
>deltree D:\Windows. Install Win95, then unzip DOS 6 / Win311
>back. (If you have OSR2, set BootMulti=0 in msdos.sys)
>

Why am I deleting Win3.1? What is D: anyway? Is it an extended partition
or what? I guess it is your "secondary" FAT.

So where am I unzipping it to. I am getting real confused here. Did you
read what I want to do:

4 primaries:
FAT DOS/Win3.1; FAT32 Win95; NTFS NT4; redhat5.

>Boot to Win95 and insert the NT4 CD. Click on the 'install'
>option and install it.

Now that is real clear. Do you think I have not already installed the
frigging thing 6 times already. That is on this machine. Forget the 12
times on the other machine (3.51 and 4) before giving up in frustration
(whole separate saga) and buying a new Gateway to keep it happy.

I can get it up no problem. In fact I can get up any 2 of the MS things.
Actually, fairly easily now, one improves with practise.

> Create a new partition (1gb?), format
>it as NTFS and install there.

Unfortunately, those things tend not to happen quite they way you say.
Detail please.

>Alter your boot.ini file as needed.
>Copy edit.* from C:\Windows\Command to
>C:\WinNT\System32 (The DOS 6 edit that comes with NT is
>horrid!)
>

No, altering boot.ini is fun. I got to really enjoy that on the other
machine. All kinds of amusing quirks.

>This leaves you with just under 6gb. Partition this between
>Linux, FAT, FAT32 and NTFS, depending on how much data
>you'll need from each OS.
>

How many primaries are you proposing I create here? You are getting me
real confused.

>To install Linux, you can create the partitions and install it
>to use a boot floppy. LILO may work instead of this, but I've
>no idea.
>

I repeat: Linux is a snap. It was designed with some care for the
customer as opposed to his pocket book. Forget it. Even an incompetent
suit like me can handle it.

>This should leave your system in a state

Where it leaves my system is unprintable and unpredictable.

Nice try, Russ. You have got to Level 1. I got there after 10 hours.
Only well all I can say is at least 3 levels to go. :)

Meanwhile, are there any MS types about. Can anyone actually solve my
problem?

--
John Scholes

Russ Williams

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

John Scholes wrote in message ...
>>>>>Look I have this small problem. I am trying to install the
>>>>>following on my hard drive:
>>>>>
>>>>>primary 1: Win95
>>>>>primary 2: DOS6/Win3.1
>>>>>primary 3: NT4
>>>>>primary 4: redhat5
>>>>
>>Of course not. This machine with Win95 OSR2 and NT4 on is
>>a figment of my imagination. In fact, any moment now it's going
>>to disappear in a puff of logic... I just hope I can get this post
>>typed before that happens.
>>
>Ahhh! A promising start. You have installed two of the MS OS.
>Are they on the same physical drive?

Yup. The first (1.6 gig) partition of a 3.2 gig drive.

>>OK. Here's how I'd do it:
>>(I'm assuming that you can create Linux partitions in
>>unpartitioned space and install it to boot using a floppy.
>>I've not enough experience with Linux to be sure.)
>>
>I do not think Linux is the problem here.

Yup. That's what I figured. The rest isn't either - I've seen all 4 MS
OSs on the same PC...

>>You'll need a set of DOS disks, a set of Win31 disks, a Win95
>>CD, an NT4 CD, a ZIP utility and any drivers as needed.
>>
>Yes, yes, yes, yes. ZIP? You mean the DOS compress.exe?

PKZIP, InfoZip, tar/gzip - anything to backup and restore a drive's
contents.

>Drivers, yes. A good point. Let us get into that later. For now, the
>machine came with Win95 drivers which Win95 recognizes with
>ease.
>
>>Boot using the DOS disks. Using fdisk, partition the drive.
>
>I was right. This is a wind-up.

Huh? Do you have some ethical problem with fdisk?

>>(Say: 1gb boot partition, 100mb for DOS / Win311). Format
>>the primary and secondary partitions as FAT. Install DOS.
>
>Hold on a sec. I want 4 primary partitions.

You're fucked, then. Funnily enough, the design of the PC doesn't
include the ability to boot from 4 different places on a disk...
There is exactly 1 bootable partition on a drive.

>All different formats. Why are we formatting the "secondary"
>as FAT?

Because DOS 6/Win311 doesn't like NTFS...

[...]


>>* If you have an OEM Win95 CD,
>I guess I must have. It came pre-installed from Gateway.

Probably.

>> ZIP up the D: drive and
>>deltree D:\Windows. Install Win95, then unzip DOS 6 / Win311
>>back. (If you have OSR2, set BootMulti=0 in msdos.sys)
>
>Why am I deleting Win3.1?

So the OEM CD won't detect it and say "You already have Windows.
Buy the upgrade CD."

>What is D: anyway? Is it an extended partition or what? I guess it
>is your "secondary" FAT.

Yup.

>So where am I unzipping it to.

The 100mb DOS/Win311 partition (D:\).

>I am getting real confused here.
>Did you read what I want to do:

You need to backup DOS & Win311 to stop Win95 lunching on them
and then restore after.

>4 primaries:
>FAT DOS/Win3.1; FAT32 Win95; NTFS NT4; redhat5.

It's only possible to have 1 partition marked active (bootable) on
a drive. If that's what you mean by primary, then you're SOL.

>>Boot to Win95 and insert the NT4 CD. Click on the 'install'
>>option and install it.
>Now that is real clear. Do you think I have not already installed
>the frigging thing 6 times already. That is on this machine.
>Forget the 12 times on the other machine (3.51 and 4) before
>giving up in frustration (whole separate saga) and buying a
>new Gateway to keep it happy.

Well, I've installed NT several times. Always over Win95 OSR2.
Never any hassles (well, except when I overclocked my
motherboard to 83MHz that time...).

What is the problem? Put the CD in, select install, wait, reboot,
answer a few questions, wait, reboot, answer some more
questions, wait, reboot and you're there...

[...]


>> Create a new partition (1gb?), format it as NTFS and install there.
>
>Unfortunately, those things tend not to happen quite they way you say.
>Detail please.

Well, after rebooting, when it comes up with the 'choose a partition
to install to' (just after the license agreement, IIRC), tell it to use the
unpartitioned space ('C' to create a partition in the free space, IIRC).
It should then ask you if you want it NTFS.

(If that fails, you could create a 1 gig FAT partition with DOS/fdisk
and just install NT to that - or even to the boot partition along with
Win95 (but if you do, don't make it NTFS...))

[...]


>>This leaves you with just under 6gb. Partition this between
>>Linux, FAT, FAT32 and NTFS, depending on how much data
>>you'll need from each OS.
>>
>How many primaries are you proposing I create here? You are
>getting me real confused.

Linux requires 2 partitions, AIUI, One for Linux and one for swap
space. Depending on whether you prefer to use NT, 95 or both,
you'll need to decide on FAT (both), FAT32 (Win95 OSR2) or
NTFS (NT). If you use FAT, you'll need to make at least 3
partitions, due to the 2.1gig limit (32k/cluster * 64k clusters).
I'd go for a single big NTFS partition, but that's just me.

[...]


>>This should leave your system in a state
>Where it leaves my system is unprintable and unpredictable.

Then your system is probably knackered. I've had no problems
installing NT and Win95. Win311 is easy enough to keep if you
really need it.

>Nice try, Russ. You have got to Level 1. I got there after 10 hours.
>Only well all I can say is at least 3 levels to go. :)

Any explanation of why it wouldn't/doesn't work? WTF is this 'level'
shit, anyway? If you followed my instructions you should have a PC
with all 4 of the MS OSs you mentioned working.

>Meanwhile, are there any MS types about. Can anyone actually
>solve my problem?

What exactly *is* your problem? You claim that, for some
unspecified reason, that Win95 and NT don't like each other. You
seem to want to partition a drive in ways that aren't possible on a
PC. You offer absolutely no explanation of why the installation
methods used by everyone else won't work for you. What is going
on?!?

---
Russ

John Scholes

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

Russ Williams writes

>>>>>>primary 1: Win95
>>>>>>primary 2: DOS6/Win3.1
>>>>>>primary 3: NT4
>>>>>>primary 4: redhat5
>>I do not think Linux is the problem here.
>
>Yup. That's what I figured. The rest isn't either - I've seen

Famous last words ...

>PKZIP, InfoZip, tar/gzip - anything to backup and restore a drive's
>contents.

Sorry, silly me, I though MS provided the tools to install their own OS.

>>I was right. This is a wind-up.
>
>Huh? Do you have some ethical problem with fdisk?

No, I just don't likely poor tools. Partition Magic 3 does hot
partitioning at high speed. Apparently, widely known in the community.
Many folk trust it so much they not even bother to do backups. [No, I
have no financial or other interest in PM, but I do like good tools] I
discovered about it in the course of completing Level 2 of the Great MS
Setup Game ...

>>Hold on a sec. I want 4 primary partitions.
>

Aaahh. You finally bothered to read the question and realized what a
primary partition is ...

>You're fucked, then.

No. Well, I would be if I trusted the Lovable Nerd. Fortunately, I am
not the only who wants to get all this high-priced stuff to actually
work [D**n! How does one avoid that split infinitive, Acuity? :)]

> Funnily enough, the design of the PC doesn't
>include the ability to boot from 4 different places on a disk...
>There is exactly 1 bootable partition on a drive.
>

Errrhh. Sorry. There is a difference between bootable and primary. Even
the MCSE stuff deals with that ...

>>All different formats. Why are we formatting the "secondary"
>>as FAT?
>
>Because DOS 6/Win311 doesn't like NTFS...
>

Indeed. But I don't wan't it to. I want this to behave like 4 separate
machines. As far as possible, I don't want one OS messing around with
another's disk space, and I am not very trusting ... Funny that ...

>>Why am I deleting Win3.1?
>
>So the OEM CD won't detect it and say "You already have Windows.

This is ludicrous. But if you say so, anyway irrelevant ...

>>What is D: anyway? Is it an extended partition or what? I guess it
>>is your "secondary" FAT.
>
>Yup.
>

I would love an extended partition, but unfortunately some marketing
genius put in this 4 partition limit. I cannot have one. Tough. So I am
trying to do the best I can ...

>>I am getting real confused here.
>>Did you read what I want to do:

>>4 primaries:
>>FAT DOS/Win3.1; FAT32 Win95; NTFS NT4; redhat5.
>
>It's only possible to have 1 partition marked active (bootable) on
>a drive. If that's what you mean by primary, then you're SOL.
>

Funny that. So you think, I should go the route of having a single
primary dedicated to booting to the other 3. The snag about that is that
I am then down to 3. Is it really that bad?

>>>Boot to Win95 and insert the NT4 CD. Click on the 'install'
>>>option and install it.
>>Now that is real clear. Do you think I have not already installed
>>the frigging thing 6 times already. That is on this machine.
>>Forget the 12 times on the other machine (3.51 and 4) before
>>giving up in frustration (whole separate saga) and buying a
>>new Gateway to keep it happy.
>
>Well, I've installed NT several times.

Clever you, but I note that you say what I want is impossible, so maybe
you tried an easier one ...

>What is the problem? Put the CD in, select install, wait, reboot,
>answer a few questions, wait, reboot, answer some more
>questions, wait, reboot and you're there...
>

Wind-ups only work the first time. I have spotted this type of thing now
and will not rise to it.

Suffice to say [no, good resolutions never last long :)], I particularly
enjoyed the fact that the rather slim package with the machine came with
3 floppies as well as the CD. Being an idiot I walked right into it and
used the floppies. But by the 12th time I had become real determined to
scour the MS material for a better way ...

>Well, after rebooting, when it comes up with the 'choose a partition
>to install to' (just after the license agreement, IIRC)

Sigh... I have completely lost track of how many times I have had to
PgDn through that wonderful document ...

>(If that fails, you could create a 1 gig FAT partition with DOS/fdisk
>and just install NT to that - or even to the boot partition along with

You unfortunately overlooked part of my post. I have in fact installed
NT, successfully (apart from a rather important driver, but that is a
whole other saga, let's stay off that for the moment). Many, many times
in fact. On this nice new Gateway... too.

>Win95 (but if you do, don't make it NTFS...))
>

Russ, this is all Level 1 stuff ...


>Linux requires 2 partitions

SH*T! You are not serious! I trusted it ...

<collects himself, laughing ... maybe its another wind-up. Points to
Russ if so. Calm down and check it out later ...>

>, AIUI, One for Linux and one for swap
>space.

<Cunning devil, if it's a wind-up it's a good one ...>

>>>This should leave your system in a state
>>Where it leaves my system is unprintable and unpredictable.
>
>Then your system is probably knackered.

No, it's me that's knackered. You forget, I am a SUIT, not a TECHIE. I
am part of the great unwashed [sorry, that should read washed, oh
forget it, it probably translates oddly into American anyway ...] who
are going to have NT as their sole OS ...

> I've had no problems
>installing NT and Win95.

I admire you.

> Win311 is easy enough to keep if you
>really need it.

Well, I have this silly problem. I finally figured out how to work a few
of the bits of software they charged me so much for. Some of them bring
up these funny messages when I try to use them under Win95. Also, I am
learning to write little Noddy programs and I thought it might be nice
to be able to check that they ran under Win3.1 ...


>
>>Nice try, Russ. You have got to Level 1. I got there after 10 hours.
>>Only well all I can say is at least 3 levels to go. :)
>
>Any explanation of why it wouldn't/doesn't work? WTF is this 'level'
>shit, anyway? If you followed my instructions you should have a PC
>with all 4 of the MS OSs you mentioned working.

Yes, I reckon I did get 3 of them up at one point, but in the wrong
partitions, and if my set-up experience is anything to go by, I am real
nervous about what might start to happen when I load up a few GB of
apps.

>
>>Meanwhile, are there any MS types about. Can anyone actually
>>solve my problem?
>
>What exactly *is* your problem?

Well, I spelt it out real clear at the start of the first post. Your
problem, IMO, is that you only started to read it towards the end.

> You claim that, for some
>unspecified reason, that Win95 and NT don't like each other. You
>seem to want to partition a drive in ways that aren't possible on a
>PC.

It could be that there are *unapproved* ways of partitioning the drive,
that have not *yet* received MS' imprimatur. [Of course, those who
remember history will instantly think: oh *yet* :) he is referring to
Stacker.]

> You offer absolutely no explanation of why the installation
>methods used by everyone else won't work for you. What is going
>on?!?

Well, I have tried real hard to read all the MS stuff, and if you like I
will come back later and explain it all to you in more detail. In the
meantime, I will release an unauthorized hint I picked up in Level 2:
buy System Commander and do the unthinkable RTFM. It is the only way.
Sorry, premature, hope.

Meanwhile, I still haven't got it fixed. I am debating whether to give
up on Level 3 or call the (free) hintline (aka System Commander
technical support) ...

Bye

Oh, I forgot to tell you how you did on this game. Well, you did quite
well really.

--
John Scholes

John Scholes

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

Glenn Corpes decides not to play for the $100 (anyway, that was a one-
off, sorry guys, this game is not that easy) but to follow the Gospel
according to the Lovable Nerd:

>
>Why do you want DOS6/Win3.1 when DOS7 runs all DOS6 apps and win95 runs
>all win3.1 apps?

Now there is a surprise. I shouldn't be *trying* to do it. Silly me. MS
knows best how I should use my machine.

Come of it, Glenn, can you really not think of a reason why I might want
to do it? And you a developer :)

Oh wait a minute, I am beginning to understand things. You don't want me
to play your games if I have cr*p*y old equipment and stuff. I need to
rush out and buy the latest and greatest. Is that it?
--
John Scholes

Russ Williams

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

John Scholes wrote in message ...
>Russ Williams writes
[...]

>>PKZIP, InfoZip, tar/gzip - anything to backup and restore a drive's
>>contents.
>
>Sorry, silly me, I though MS provided the tools to install their own OS.

You only need them if you're trying to install Win95 over Win311
without an upgrade CD.

>>>I was right. This is a wind-up.
>>
>>Huh? Do you have some ethical problem with fdisk?
>
>No, I just don't likely poor tools. Partition Magic 3 does hot
>partitioning at high speed.

I've heard of it, but never used it. FDISK works fine for me - I never
repartition without formatting and reinstalling...

[...]


>Indeed. But I don't wan't it to. I want this to behave like 4
>separate machines. As far as possible, I don't want one OS
>messing around with another's disk space, and I am not
>very trusting ... Funny that ...

I doubt that's possible on a single drive. Will you settle for
all the OSs running?

[...]


>I would love an extended partition, but unfortunately some marketing
>genius put in this 4 partition limit. I cannot have one. Tough. So I am
>trying to do the best I can ...

Doh! OK. Try this:
Create a 2 gig FAT partition. Install DOS/Win311. Zip them up out
of the way and delete the directories. Make a boot floppy.
Install Win95. Install NT4. Unzip Win311/DOS. (Make sure that you
pick different directories for 95 and 3.11 when installing). That
gives you 3 partitions free (2 for Linux, make the rest either FAT32
or NTFS for data).

[...]


>>It's only possible to have 1 partition marked active (bootable) on
>>a drive. If that's what you mean by primary, then you're SOL.
>>
>Funny that. So you think, I should go the route of having a single
>primary dedicated to booting to the other 3. The snag about that
>is that I am then down to 3. Is it really that bad?

You'd have Win95 on the 'dedicated boot partition'.

[...]


>>What is the problem? Put the CD in, select install, wait, reboot,
>>answer a few questions, wait, reboot, answer some more
>>questions, wait, reboot and you're there...
>
>Wind-ups only work the first time. I have spotted this type of thing
>now and will not rise to it.
>
>Suffice to say [no, good resolutions never last long :)], I particularly
>enjoyed the fact that the rather slim package with the machine
>came with 3 floppies as well as the CD. Being an idiot I walked
>right into it and used the floppies. But by the 12th time I had
>become real determined to scour the MS material for a better way ...

Floppies? This is NT4? Is it Workstation or Server?

[...]


>>Linux requires 2 partitions
>
>SH*T! You are not serious! I trusted it ...

Well, when I tried installing it, it wanted 2 partitions. One of type
81h/83h (Linux/Linux Native)(can't remember which) and one
of 82h (Linux Swap Space).

><collects himself, laughing ... maybe its another wind-up.
>Points to Russ if so. Calm down and check it out later ...>
>
>>, AIUI, One for Linux and one for swap
>>space.
>
><Cunning devil, if it's a wind-up it's a good one ...>

It was a while ago, and Linux does handle many different formats,
but Ralf Brown's interrupt list mentions a seperate swap partition
type...

[...]


>>>Nice try, Russ. You have got to Level 1. I got there after 10 hours.
>>>Only well all I can say is at least 3 levels to go. :)
>>
>>Any explanation of why it wouldn't/doesn't work? WTF is this 'level'
>>shit, anyway? If you followed my instructions you should have a PC
>>with all 4 of the MS OSs you mentioned working.
>
>Yes, I reckon I did get 3 of them up at one point, but in the wrong
>partitions, and if my set-up experience is anything to go by, I am real
>nervous about what might start to happen when I load up a few GB of
>apps.

Once the OSs are in, you should have very few problems...

---
Russ

Justin Heyes-Jones

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

On Thu, 26 Feb 1998 16:01:53 -0000, John Scholes
<jsch...@kalva.demon.co.uk> wrote:

>>Why do you want DOS6/Win3.1 when DOS7 runs all DOS6 apps and win95 runs
>>all win3.1 apps?
>
>Now there is a surprise. I shouldn't be *trying* to do it. Silly me. MS
>knows best how I should use my machine.

It's a very good point Glenn made. There is no reason to run those
dated OS's as every dos, win3.1 program I've ever tried to run works
under win95 or in win95 dos mode.

>Come of it, Glenn, can you really not think of a reason why I might want
>to do it? And you a developer :)
>
>Oh wait a minute, I am beginning to understand things. You don't want me
>to play your games if I have cr*p*y old equipment and stuff. I need to
>rush out and buy the latest and greatest. Is that it?

I'd hardly call Win95 the latest and greatest. We've had it for 3
years. There's nothing wrong with wanting a widespread platform to
develop for either. Writing Dos and Win95 versions as companies are
still having to do, simply increases development costs.

Saying that we don't want consumers to have to buy a new machine every
year, that's a different matter entirely.

FlyingDog

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

In article <6d2dvc$b7n$1...@usenet40.supernews.com>,
ru...@algorithm.demon.co.uk says...

> Sean T Barrett wrote in message ...
> >Russ Williams <ru...@algorithm.demon.co.uk> wrote:
> >>If you've got Win95, pre-OSR2, then you can even keep
> >>DOS6/Win311 with the Previous OS option in the F8 boot menu.
> >
> >Ack! They took that out of OSR2?!
>
> Nope. It just doesn't work too well...
>
Actually, 95b (OSR2) won't install if it detects _any_ previous version
of Windows. <- period. 3.1, 3.11, 95a, none. If there's a win.com on your
drive(s) forget it. It will go over DOS6...

> If you boot the the previous OS from OSR2, it disables the boot
> sequence (you get "Starting Windows 95...", then nothing). The
> theory here is that, since OSR2 should only be found on new
> PCs, MS put this trap in... The fix is to use a Win95 boot disk
> and SYS the C: drive from it.
>

All true...unfortunately.

> IMO, if you want DOS 6.x, the easiest way is to use a boot disk.
>

Absolutely! :-)

> 'BootMulti=0' is your friend...

In windows, I always thought CTRL+ALT+DEL x2 was your friend... ;-)
--
__________________

Just another useless observation by yours truly...

James Slaughter

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

John Scholes wrote in message ...
>>>>>Look I have this small problem. I am trying to install the
>>>>>following on my hard drive:
>>>>>
>>>>>primary 1: Win95
>>>>>primary 2: DOS6/Win3.1
>>>>>primary 3: NT4
>>>>>primary 4: redhat5
>>>>
>


Create two partitions; one will be for M$ (various), the other for redhat.

FDisk (using only the version that comes with '95) to create one primary
for the M$, and one Extended; create two Logical drives in the extended
partition, E: will be a swap file (in effect). When using FDisk, do not let
it enable FAT32... It may ask you at the start, but this format is not
recognised by NT, Win31, or Linux. If it doesn't ask you, then good. Make
sure you set the Primary partition as 'Active'. Format both using plain old
'format <drive>:'

Install DOS6/Win3.1 first. Do this as normal. Remember that in order to be
able to use Win3.1 as well as '95 (which must both be installed on the
primary boot partition), you will need the 'upgrade' version of '95: others
will not allow themselves to be installed over the top of an existing OS.
You may be able to modify the install script to change this, but I wouldn't
recommend it and cannot advise you (well I could, but it's a lot of
hassle)...

Make sure 3.1 is configured _perfectly_ so Win95 doesn't get any bollocks
settings.

Install 95. To do this, copy the Win95 dir. from the CD to the HDD. You can
put it on D: for now, you will delete it later. Go to D:\Win95\ and type
setup. You can handle it from here. The advantage in having copied the
directory to the hard disk is that when '95 reboots and starts for the
first time, it looks for a CD ROM driver to install. Guess where that is!!
The DIR is only 40-66MB (I think, 66 for OSR2).

Set up '95 if you want, but nobody else (NT/Linux) gives a damn.

If your BIOS supports booting from a CDROM, and can do it properly (there's
an 'emulation' mode used by certain Award BIOSes, go to their site if you
have an old version) stick the NT CD in and boot. You might need to set the
boot sequence to CDROM,C,A for this in the BIOS. CDROM,A,C would be better,
but is uncommon. Otherwise, from 95, stick in the CD and choose 'Setup'
when the nice AutoPlay thing struts its stuff.

Do _not_ modify partition tables, do not convert anything to NTFS, do not
install anywhere else other than C: If you installed from '95, there'll be
a reboot in the process, for straight CD boots you _might_ not have to. The
install process is quite simple, as for '95. Take care with the network
stuff, though.

Set the BIOS to boot from A first, if it isn't already, and get a boot disk
ready. Use the (Doh! forgotten the name, it copies a binary image to a
disk) program. Basically, create a boot disk, there may be more than one
that you have to create, each with a different image. Read the distribution
information for more details.

Anyway, boot up from the floppy, load the Linux version of 'fdisk' if an
installation program doesn't start. Change the type of the first _logical_
drive to the Linux format. Change the second to the Linux swap format.
Reboot as suggested. You can probably now run the setup program for Linux,
but check the documentation first. Different distributions prefer different
procedures, this one is the most general I can come up with. In any event,
a setup program will normally guide you through all of this.

When Linux installation is complete, you'll have to choose how you want
Linux to start. Always from a floppy is easiest, through typing 'loadlin'
from DOS is another option, and by modifying the MBR is another option. If
you choose the last, your boot sequence will be 'Load Linux, yes/no','NT or
Win95','Win 95 or 3.11', followed by any custom startup menus in Config.SYS
you may like to create.

Hope this is useful,
James.

FlyingDog

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

In article <I$EmEMBLd...@kalva.demon.co.uk>,
jsch...@kalva.demon.co.uk says...
> Russ Williams writes
[snip]

> >>Hold on a sec. I want 4 primary partitions.
> >
You can't, unless you have some other definition of "primary." There are
4 types of basic partitions availible to you:

1)Primary DOS
2)Extended DOS
3)Logical
4)Non-DOS (ie, "other")

You are allowed _one_ and _ONLY_ONE_ primary DOS partition. Since you
want DOS6/Win3, you're going to have work around this structure at some
point. Everything Russ has said is true and does work. Trust me. You may
be a suit, but I _am_ a tech. I've actually managed to get DOS6/Win3,
Win95 and OS/2 warp running on the same disk...

[snip]


> >>All different formats. Why are we formatting the "secondary"
> >>as FAT?
> >
> >Because DOS 6/Win311 doesn't like NTFS...
> >
> Indeed. But I don't wan't it to. I want this to behave like 4 separate
> machines. As far as possible, I don't want one OS messing around with
> another's disk space, and I am not very trusting ... Funny that ...
>

Hate to say it, but tough. MS has a habit of making predatory OSes and you only have _one_ boot sector on your disk, which they all have to share. DOS/Win3 is fairly portable in that you can install, (pk)zip it up and put it back after the smoke clears. WinNT is fairly leniant, so you can install it over an existing OS and still have access to your old OS. Win95 is ruthless. It doesn't care what you want. It's a selfish, greedy bitch and will obliterate any OS is goes on
top of (95b, that is). That's why the order has to be DOS, 95, NT, restore DOS.
[snip]


> >>Why am I deleting Win3.1?
> >
> >So the OEM CD won't detect it and say "You already have Windows.
>
> This is ludicrous. But if you say so, anyway irrelevant ...

He's right. 95b (OSR2) won't install on a system with _any_ version on
Windows - including 95a.
[snip]


>
> >>I am getting real confused here.
> >>Did you read what I want to do:
> >>4 primaries:
> >>FAT DOS/Win3.1; FAT32 Win95; NTFS NT4; redhat5.
> >
> >It's only possible to have 1 partition marked active (bootable) on
> >a drive. If that's what you mean by primary, then you're SOL.
> >
> Funny that. So you think, I should go the route of having a single
> primary dedicated to booting to the other 3. The snag about that is that
> I am then down to 3. Is it really that bad?

Yes, it is that bad. Sorry.
[snip]


>
> Suffice to say [no, good resolutions never last long :)], I particularly
> enjoyed the fact that the rather slim package with the machine came with
> 3 floppies as well as the CD. Being an idiot I walked right into it and
> used the floppies. But by the 12th time I had become real determined to
> scour the MS material for a better way ...

Did you find one? I'd be interested to hear your results. The three
floppies load the NT kernel, HAL, Mass Storage Support and CDROM drivers.


>
> >Well, after rebooting, when it comes up with the 'choose a partition
> >to install to' (just after the license agreement, IIRC)
>
> Sigh... I have completely lost track of how many times I have had to
> PgDn through that wonderful document ...

heheh...pgdn pgdn pgdn, F8...:-)


>
> >(If that fails, you could create a 1 gig FAT partition with DOS/fdisk
> >and just install NT to that - or even to the boot partition along with
>
> You unfortunately overlooked part of my post. I have in fact installed
> NT, successfully (apart from a rather important driver, but that is a
> whole other saga, let's stay off that for the moment). Many, many times
> in fact. On this nice new Gateway... too.
>

Don't forget - it's in the order you install things that makes a
difference. I've done this kind of thing dozens of times.
[snip]


> >>>This should leave your system in a state
> >>Where it leaves my system is unprintable and unpredictable.
> >
> >Then your system is probably knackered.
>
> No, it's me that's knackered. You forget, I am a SUIT, not a TECHIE. I
> am part of the great unwashed [sorry, that should read washed, oh
> forget it, it probably translates oddly into American anyway ...] who
> are going to have NT as their sole OS ...

I do....but I have 3 machines networked on my desk :-) (NT4, 95b, DOS6)

Glenn Corpes

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

jsch...@kalva.demon.co.uk (John Scholes) wrote:

> Glenn Corpes decides not to play for the $100 (anyway, that was a one-
> off, sorry guys, this game is not that easy) but to follow the Gospel
> according to the Lovable Nerd:
> >

> >Why do you want DOS6/Win3.1 when DOS7 runs all DOS6 apps and win95 ru
> ns
> >all win3.1 apps?
>
> Now there is a surprise. I shouldn't be *trying* to do it. Silly me. M
> S
> knows best how I should use my machine.
>

> Come of it, Glenn, can you really not think of a reason why I might wa
> nt
> to do it? And you a developer :)

So you are going to all of your testing on one machine are you?, If you
want to support 3.1 you should be testing on an 8 meg 486. _If_ you are
really writing a game that needs to support older machines, you would be
better off with a DOS version as not only do more games players stick
with DOS than win3.1, 100% of those 3.1 users have DOS.

Ziv Caspi

unread,
Feb 26, 1998, 3:00:00 AM2/26/98
to

WStr...@shell.monmouth.com (Wilbur Streett) wrote:

[...]

> When you open a page as you described, you arne't scripting a game, you're
> scripting Windows. If a user clicks on a URL on the page, it's under MSIE
> control, not your application.

> So in effect, you demonstrated a Windows script, not a game script.

Only because currently shipped games do not offer COM-based scripting.

Would you agree that scripting is, in general, a useful idea for applications?
Many (commercially and not commercially) successful software applications come
with scripting capabilities built-in: EMACS, AutoCAD, your-favorite-MS-Office-
application, etc. In my current project we provide a scripting language which
is extensively used by the testers to test the application.

Following your articles in this group, I gather you do not like anything which
has been hyped as "object-oriented". Very well, then. But do not let it
cloud your thinking - COM is only the mediator (and only one possibility out
of others, many of which you may actually like).

> As to your assertion that COM is a well defined standard,

> Define "object" in a concise manner. When you're done, we'll talk about
> how "well defined" COM is, since it's just a redefinition of "Object".

No. COM does not define "Object". COM is a binary interface definition. In
that, it has the same role as the PE (portable executable, the file format
of 95/NT's EXE, DLL, etc. files), RPC, kernel-mode IRPs, stdcall, etc.

It is up to you, the implementor, not COM, to decide what functionality, and
what interface, you give the clients. Of course, COM is built to make it easier
to use an OO paradigm. (Please note that other specifications, such as CORBA and
the ill-fated SOM, usually criticize COM for not being OO enough.)

> As you have admitted, there is more than one way, which means that it's a
> POORLY DEFINED standard.

This is like saying that TCP/IP is a poorly defined standard, because you can
use both TCP and UDP to pass information on the wire. Having to option of choice
is not, a-priory, a disadvantage.

Also, if at all, you're saying that COM is poorly designed, not poorly defined.
(Unless I'm mistaken) poorly defined mean that two people reading the spec
can interpret it in two incompatible way. I have not seen this happen. Have you?


--------------------------------
Ziv Caspi
zi...@netvision.net.il


Bill Currie

unread,
Feb 27, 1998, 3:00:00 AM2/27/98
to

Russ Williams wrote:
> Create a 2 gig FAT partition. Install DOS/Win311. Zip them up out
> of the way and delete the directories. Make a boot floppy.
> Install Win95. Install NT4. Unzip Win311/DOS. (Make sure that you
> pick different directories for 95 and 3.11 when installing). That
> gives you 3 partitions free (2 for Linux, make the rest either FAT32
> or NTFS for data).

Now, I could be wrong, but I got the impression (from reading manuals
while installing Linux) Linux has no problems working ENTIRELY out of
extended partitions, at least when booted with lilo. AIUI, lilo uses
raw sector addresses (usually chs, but I think later versions can use
lba) and ignores the partition table. Heck, I have Linux booting off my
third hard drive drive (lilo is, of course, on the first).

Anyway, in summary, I believe that your two partitions for Linux can be
cut down to one extended partition (makes for three, I supose, but only
one of the four master partitions). Also, you don't HAVE to have a
second partition if you don't want to, Linux can use swap files (there
are pros and cons).

Bill
--
Leave others their otherness

0 new messages