Allegro.cc - Online Community

Allegro.cc Forums » Programming Questions » A Scripting Language.

This thread is locked; no one can reply to it. rss feed Print
 1   2   3   4 
A Scripting Language.
damage
Member #3,438
April 2003

I'm surprised no-one has mentioned C#. The great thing about C# is that the .net framework gives you an interface to the C# compiler, so it's a simple matter to compile C# source files on the fly. C# is useful as a scripting language because it's faster than Java but much more easy to use than C or C++.

____
Don't have anything private. Don't do anything silly like having a hidden name and address field with get_name and set_address and get_name and set_name functions. - Bjarne Stroustrop, creator of C++

nonnus29
Member #2,606
August 2002
avatar

Quote:

I'm surprised no-one has mentioned C#. The great thing about C# is that the .net framework gives you an interface to the C# compiler, so it's a simple matter to compile C# source files on the fly. C# is useful as a scripting language because it's faster than Java but much more easy to use than C or C++.

Wow, C# sounds great aside from the unfortunate platform dependancy thing.... [/sarcasm]

edit
This doesn't count, its not even a 1.0 release yet...

curtis warren
Member #3,898
September 2003

Quote:

Wow, C# sounds great aside from the unfortunate platform dependancy thing.... [/sarcasm]

edit
This doesn't count, its not even a 1.0 release yet...

And why not? I've heard it's very good at what it does.
EDIT: Wow, this thread is getting long, and interesting. I'm probably going to make a 2D game engine when I'm done with all of my other projects and want to have a scripting language in it, but I don't know whether to go with javascript (which I already know) or lua (which I don't know, but looks easy to learn, and is smaller). I guess I'll have to try both.

Johnny13
Member #805
October 2000
avatar

Quote:

give me one reason not to use it?

Speed?

23 said:

there's a JavaScript raytracer ...

Interesting, render a flower took 27.74 sec…=_="

Alg3D Praise my Games!!<code>#define SPAMMER (post>=666&&postperday>=6)</code><Mr.spellcaster>What post? <Mr.spellcaster>A useful post by me.

Marcello
Member #1,860
January 2002
avatar

Ok, let's see... I got spidermonkey working and integrated into an extremely simple C++ wrapper so I could integrate it into one of my games to experiment with.

Speedwise, I loaded a script (var i=6000,n=0; while(--i>=0)n+=i; print(n);), compiled it, ran it every game 'step' (60"f"ps), and it had no impact on speed, going up to 7000 started to affect the framerate, but there will be very little looping in-script for my engine, so I'm not concerned about speed.

Obviously speed-critical components will be written in C++ no matter what language I'm using, so it's all rather academic. :) I'm not gonna write a ray tracer in it.

Guile, Io, both are syntaxes I'm not familiar with, so there's no real point in going with those over python for example.

c-smile looks pretty cool, considering it's java and javascript. ;) I'll have to check that one out. From the site and downloads (haven't grabbed it yet), it's not clear if it's intended to be embedded or standalone. Plus there's no mac port, but I'm guessing that's not uber difficult considering what it is. (Not to mention another 'new' syntax, although it looks identical to javascript with better in-script class support.)

As for C#, allow me to say, no. If I were to go that far, I'd use java. But both are overkill. Plus C# sucks by definition.

Korval
Member #1,538
September 2001
avatar

Quote:

Please tell me, what feature you need is missing?

I don't know. I don't use it. But there could very well be something, considering its origins.

Quote:

The obvious reason is "because you can".

That's not a reason; that's a justification for a decision that has already been made.

Quote:

but why Lua if you can use JavaScript?

That's hardly an open-minded statement, as it presupposes the notion that JavaScript is a better language.

Quote:

It's object oriented but is also great for procedural jobs. So the language itself is easy to use and offers lots of features.

What makes it "easy to use"? In what way does it "offer lots of features"?

Quote:

I downloaded SpiderMonkey when Marcello asked for help. And now I've a running scripting system. Neat.

What is the C/C++-to-JavaScript API like?

Quote:

I can execute scripts in different contexts but need just one runtime.

What do you mean by context?

Quote:

I can run scripts with different security levels easily.

Can't you do that by simply restricting the API that the script is allowed to use?

Quote:

I know there's a JavaScript raytracer ...

That gives me an idea. I've had this raytracer notion in the back of my head for a few years now, slowly refining it. And there are a number of non-performance parts of it that it would not be a bad idea to script (material/lighting computations, camera/ray generation, etc). This would make it easier to write shaders and so forth for the system.

spellcaster
Member #1,493
September 2001
avatar

Quote:

I don't know. I don't use it.

you have no idea, but you think it's best to bash it first? Have you considered to STFU if you don't know what you're talking about?

Quote:

But there could very well be something, considering its origins.

You have no idea what you're talking about, do you? Please enlighten us... what is that cruel origin?

Quote:

That's hardly an open-minded statement, as it presupposes the notion that JavaScript is a better language.

You realize that I just reversed your statement ("But why use Javascript if you can use Lua")? Of course you do.
And I totally agree. :)

Quote:

What makes it "easy to use"? In what way does it "offer lots of features"?

Browse to the spidermonkey website and read.

Quote:

What is the C/C++-to-JavaScript API like?

See above.
But mainly you provide a callback dealing with get / set requests for the different attributes (that's something lua can't do) or just wrappers for the differnt functions.
Pretty much the same in every embedded language.

Quote:

What do you mean by context?

Again, check the spidermonkey website for a more detailed explanation.
Mainly it's the context the script operates in. Providing the environment for the scripts.

Quote:

Can't you do that by simply restricting the API that the script is allowed to use?

That's (mainly) what you do. Just using a well defined niterface. Again, just read the intro pages on the spidermonkey webpage.
Infact, had you read them before starting this discussion, we could have avoided all this.

--
There are no stupid questions, but there are a lot of inquisitive idiots.

Korval
Member #1,538
September 2001
avatar

Quote:

You realize that I just reversed your statement ("But why use Javascript if you can use Lua")? Of course you do.

With one significant exception. Lua was designed with 2 features game developers like: small size and speed. And LuaBind builds off of this (granted, the template metaprogramming kills off the code-size benifit) by adding ease-of-use.

Lua ought to be highly considered by anyone who might want to use a scripting language for games, for the above reasons alone. JavaScript has to justify its use, because it doesn't have the above reasons.

Quote:

Browse to the spidermonkey website and read.

I did. The result was hardly what you expected.

The API is no better or worse than what you get with Lua. LuaBind completely blows it out of the water in terms of ease of use.

As far as the language itself is concerned, I didn't see anything in particular that was significantly better or worse than Lua. Sure, it has a well-defined notion of classes and inhieritance, but LuaBind gives Lua a similar notion (I recently discovered that it actually extends the Lua language a bit).

Quote:

But mainly you provide a callback dealing with get / set requests for the different attributes (that's something lua can't do)

Why would you want to?

Quote:

Infact, had you read them before starting this discussion, we could have avoided all this.

Assuming what I read was actually anything valuable. However, what I found was a language/API that was no better than vanilla Lua. Considering that Lua is smaller (library size) and likely faster, there's nothing here to convince me to switch, or even recommend it as a good alternative to Lua.

The API isn't the hacked-on API that I imagined that it could have been, but it doesn't show any real improvement over plain Lua. And plain Lua has LuaBind to cover up the nastiness.

As an example of what LuaBind can do, observe:

Let's say that these are classes we want to expose to the scripting language. One of them is just an API class. The other is a base class that we want the script to override with a new one:

1class Holder
2{
3public:
4 Holder(int iData) : m_iData(iData)
5 {}
6 
7 int m_iData;
8};
9 
10class TestClass
11{
12public:
13 TestClass(int iVal) :
14 m_iVal(iVal)
15 {
16 }
17 
18 TestClass() :
19 m_iVal(0)
20 {
21 }
22 
23 void MyFunc()
24 {
25 printf("The value is %i\n", m_iVal);
26 }
27 
28 virtual void MyFunc2(Holder theHolder)
29 {
30 m_iVal = theHolder.m_iData;
31 }
32 
33 virtual ~TestClass()
34 {
35 printf("Got here!\n");
36 }
37 
38 int m_iVal;
39 
40protected:
41};

39 lines.

The following is 100% of the LuaBind code required to register these:

1class TestClassWrapper : public TestClass
2{
3public:
4 luabind::object m_l;
5 TestClassWrapper(luabind::object l): TestClass(), m_l(l) {}
6 TestClassWrapper(luabind::object l, int iVal): TestClass(iVal), m_l(l) {}
7
8 virtual void MyFunc2(Holder theHolder) {luabind::call_member<void>(m_l, "MyFunc2", theHolder);}
9 static void MyFunc2_static(TestClass* ptr, Holder theHolder)
10 {
11 ptr->TestClass::MyFunc2(theHolder);
12 }
13 
14};
15 
16 
17void RegisterClass(lua_State *pLuaState)
18{
19 using namespace luabind;
20 
21 module(pLuaState, "MyTest")
22 [
23 class_<Holder>("Holder")
24 .def(constructor<int>())
25 .def_readwrite("m_iData", &Holder::m_iData),
26 
27 class_<TestClass, TestClassWrapper>("TestClass")
28 .def(constructor<>())
29 .def(constructor<int>())
30 .def("MyFunc", TestClass::MyFunc)
31 .def("MyFunc2", &TestClassWrapper::MyFunc2_static)
32 .def_readwrite("m_iVal", &TestClass::m_iVal)
33 ];
34}

33 lines. Fewer lines than it took to declare and define the classes to begin with. I seriously doubt that the SpiderMonkey API can do that.

Also, note the lack of possibility for errors. If I change the signature of functions, unless the function is intended to be overriden (and those API's should be virtually frozen the moment they were first used in a script), I don't have to change anything in the registering code. It implicitly knows the function signature. The other exception to this is function overloading, where you have to specify an explicit signature. So the potential for registration errors is quite low, even with the exceptional cases.

Thomas Fjellstrom
Member #476
June 2000
avatar

Does it do the same with C? If the LuaBind api is just C++, thats a reason not to use it. For me at least.

--
Thomas Fjellstrom - [website] - [email] - [Allegro Wiki] - [Allegro SVN Snapshots] - [Allegro TODO] - [Web Hosting]
"God Bless Joe Pesci" -- George Carlin
"Goto is the buldozer of coding. Sometimes, the buldozer is just the right tool for the job. Not often, but sometimes." -- LordBob

CGamesPlay
Member #2,559
July 2002
avatar

Tomasu: "void MyFunc()" <-- No lua state :) (I think that's right, but I wouldn't know)

--
Tomasu: Every time you read this: hugging!

Ryan Patterson - <http://cgamesplay.com/>

spellcaster
Member #1,493
September 2001
avatar

Quote:

I didn't see anything in particular that was significantly better or worse than Lua.

Right. That's we wre telling you from the beginning. As I said, if you had read the site, the whole discussion had never started.
And since you realized this now (phew... took quite some time), maybe we can stop this discussion now? Thanks.

Quote:

Why would you want to?

Mainly because you can then do stuff like this in your script:

sprite.frames = "image.bmp";

Which is exactly the same as

sprite.setFrames("image.bmp");

Just without the function call. That means you can use attributes like attributes while you still ensure that you only have a single point of access. That's neat.

Quote:

Considering that Lua is smaller (library size) and likely faster, there's nothing here to convince me to switch,

We never inteded to do that. :)
If you take alook at the discussion here, it was you who tried to convince the others not to use spidermonkey :)

Quote:

but it doesn't show any real improvement over plain Lua.

Since it's older than LUA, I guess that's ok. And it's pretty easy to write some wrapper generting code, and the c -> js connection is IMHO simpler than the way LUA is doing it... so I don't miss LUA bind much.

Quote:

33 lines. Fewer lines than it took to declare and define the classes to begin with. I seriously doubt that the SpiderMonkey API can do that.

As I said, that's nothing I'm concerned with. The API functions are exposed once, it's not something that I need to change often.
But yes, it would be neat to have something like luaBind.

But that's just a hassle for the engine coder. The gained benfit from javascript is IMO worth the extra (one-time) work. (Before Korval asks what benefits, I'd like to add a "see above").

--
There are no stupid questions, but there are a lot of inquisitive idiots.

curtis warren
Member #3,898
September 2003

Can anyone point me to a place where I can download spidermonkey in a zip or tar package (preferably zip)? I tried their website but all I can find is an online listing of all the files, and I really don't want to have to download each one seperately.

Marcello
Member #1,860
January 2002
avatar

at the top of http://www.mozilla.org/js/spidermonkey/ it says:

Quote:

You can get the engine via CVS and build it yourself, or look for recent tarballs at (please check the mirrors first), http://ftp.mozilla.org/pub/js/. Release notes are available at http://www.mozilla.org/js/spidermonkey/release-notes/.

The mirrors link led me to http://mirrors.xmission.com/mozilla/js/ and I grabbed it there.

[edit]
And now to continue the discussion/argument:

My choice for javascript was because, a) I've been using javascript in web for about 7 years now (the days of "ripping off" scripts and tweaking them), b) I worked with the Rhino engine (a java implementation of javascript) for scripting my own java app (although I got so into messing with rhino, the app ended up being a pretty funky javascript interface, but not what I had intended), c) lua looks ugly as hell.

Some of the nice things about javascript come from its uber-loose interface, such as the feature to leave out semicolons if you have a newline.
In one of the games I'm working with a game designer who hasn't used any programming languages before, and I'm not gonna make him learn some syntax for a language even I'm not familiar with.

As mentioned before, I don't switch between languages very easily and have trouble enough going from java to c++ within the same day (mainly because of bool/boolean though ;)), so it only makes sense to stick with a scripting language I'm actually real good in.

Although I haven't looked at lua scripting much, so perhaps it has this functionality, but to be able to do stuff along the lines of:

character.name = "Alexis"
character.age = 23
for (attribute in character) {
    print("character attribute " + attribute + ": " + character[attribute])
}

is one of my favorite features of javascript.

Plus this is pretty cool:

character.onhit = function (event) { ... }

You can even dynamically generate functions at runtime using eval():

function characterHit(event,character) {
  print(character.name+" got hit! HP -"+event.hitloss)
}
function makeCharacterHit(char) {
  return eval("function(event){characterHit(event,characters." + char + ")}")
}
characters.bob.onhit = makeCharacterHit("bob")
characters.fred.onhit = makeCharacterHit("fred")

Of course, that's pretty evil and it could probably be done a little cleaner than that.

[edit numero 2]
I should probably mention that I'm not trying to change what scripting language someone else is using, I was just trying to get an idea what was out there and what people felt about them. Though, I'm thinking of sticking with js, I'm obviously not going to try to convert anyone who's already using lua and liking it, since obviously they've taken the time to learn the language and are familiar with it.

I should also mention that the 500kb overhead added to the exe isn't really a big deal since the games will most likely be over 10 megs each, and possibly on CD.

Marcello

curtis warren
Member #3,898
September 2003

Ok, thanks. I got to that page already, but I downloaded the wrong thing (the jsd one :/)

Julien Cugniere
Member #947
February 2001

Just for your information (and for fun!):

character.name = "Alexis"
character.age = 23
for (attribute in character) {
    print("character attribute " + attribute + ": " + character[attribute])
}

is done in lua that way:

character.name = "Alexis"
character.age = 23
for attribute in character do
    print("character attribute " .. attribute .. ": " .. character[attribute])
end

-- faster alternative:
for attribute,value in character do
    print("character attribute " .. attribute .. ": " .. value)
end

Function can also be dynamically generated:

function characterHit(event,character) {
  print(character.name+" got hit! HP -"+event.hitloss)
}
function makeCharacterHit(char) {
  return eval("function(event){characterHit(event,characters." + char + ")}")
}
characters.bob.onhit = makeCharacterHit("bob")
characters.fred.onhit = makeCharacterHit("fred")

becomes:

function characterHit(event,character)
  print(character.name .. " got hit! HP - " .. event.hitloss)
end
function makeCharacterHit(char)
  return function(event) characterHit(event,characters[char]) end
end

characters.bob.onhit = makeCharacterHit("bob")
characters.fred.onhit = makeCharacterHit("fred")

As can be seen, the syntax for generating function is actually simpler in lua, (IMHO, at least :))

I don't see why you find lua so ugly! But then seeing how the languages are similar in these examples, I suppose JavaScript can be an alternative, if its speed is correct. What I like about lua is the fact that everything is a (pretty fast and convenient hash table). But I don't know much about JavaScript...

spellcaster
Member #1,493
September 2001
avatar

Quote:

is done in lua that way:
character.name = "Alexis"
character.age = 23
for attribute in character do
print("character attribute " .. attribute .. ": " .. character[attribute])
end

No, sorry.
What you had to do in Lua would be more like this

for attribute in character do
    if character.listAttrs[attribute] do
         print("")
    end
end

Since you can specify what attributes should be listed in that for loop.
But yes, Lua and JS are very similar ;)

--
There are no stupid questions, but there are a lot of inquisitive idiots.

Marcello
Member #1,860
January 2002
avatar

except lua uses end/do which is lame by default.

Marcello

Julien Cugniere
Member #947
February 2001

Well there's nothing one can do about other people's tastes ;D

Kuba Wroniecki
Member #4,082
November 2003
avatar

HAH!
All these loosely-typed, object-oriented,interactive,clear-syntaxed,
cross-platform scripting languages are for LOSERS!

REAL men (and women) use DOS BATCH SCRIPTS ;D

--
Document my code?? Why do you think it's called code?

Thomas Fjellstrom
Member #476
June 2000
avatar

Kuba, you are mistaken :) Real men use a hex editor.

--
Thomas Fjellstrom - [website] - [email] - [Allegro Wiki] - [Allegro SVN Snapshots] - [Allegro TODO] - [Web Hosting]
"God Bless Joe Pesci" -- George Carlin
"Goto is the buldozer of coding. Sometimes, the buldozer is just the right tool for the job. Not often, but sometimes." -- LordBob

curtis warren
Member #3,898
September 2003

Quote:

REAL men (and women) use DOS BATCH SCRIPTS

No, real men hard code everything in asm! :P
Anyways, I can't seem to compile spidermonkey. I use:

C:\spidermonkey>gcc -c jsapi.c jsarena.c jsarray.c jsatm.c jsbool.c jscntxt.c js
date.c jsdbgapi.c jsdhash.c jsdtoa.c jsemit.c jsexn.c jsfile.c jsfun.c jsgc.c js
hash.c jsinterp.c jslock.c jslog2.c jslong.c jsmath.c jsnum.c jsobj.c jsopcode.c
 jsparse.c jsprf.c jsregexp.c jsscan.c jsscope.c jsscript.c jsstr.c jsutil.c jsx
drapi.c prmjtime.c -DXP_PC -DWIN32 -DEXPORT_JS_API -D_declspec=__declspec

And I get a whole bunch of errors. Here's the end of it:

#SelectExpand
1jsxdrapi.c:581: cast specifies function type 2jsxdrapi.c: In function `JS_XDRValue': 3jsxdrapi.c:596: `JS_XDRRegisterClass' declared as function returning a function 4jsxdrapi.c: In function `JS_XDRRegisterClass': 5jsxdrapi.c:596: static symbol `JS_XDRRegisterClass' is marked dllexport 6jsxdrapi.c:597: parse error before "numclasses" 7jsxdrapi.c:600: `numclasses' undeclared (first use in this function) 8jsxdrapi.c:600: dereferencing pointer to incomplete type 9jsxdrapi.c:601: dereferencing pointer to incomplete type 10jsxdrapi.c:605: dereferencing pointer to incomplete type 11jsxdrapi.c:605: dereferencing pointer to incomplete type 12jsxdrapi.c:607: cast specifies function type 13jsxdrapi.c:608: dereferencing pointer to incomplete type 14jsxdrapi.c:609: dereferencing pointer to incomplete type 15jsxdrapi.c:612: dereferencing pointer to incomplete type 16jsxdrapi.c:616: dereferencing pointer to incomplete type 17jsxdrapi.c:618: dereferencing pointer to incomplete type 18jsxdrapi.c:620: dereferencing pointer to incomplete type 19jsxdrapi.c:621: cast specifies function type 20jsxdrapi.c:627: dereferencing pointer to incomplete type 21jsxdrapi.c:628: cast specifies function type 22jsxdrapi.c: In function `JS_XDRFindClassIdByName': 23jsxdrapi.c:633: static symbol `JS_XDRFindClassIdByName' is marked dllexport 24jsxdrapi.c:634: parse error before "i" 25jsxdrapi.c:636: `numclasses' undeclared (first use in this function) 26jsxdrapi.c:636: dereferencing pointer to incomplete type 27jsxdrapi.c:641: dereferencing pointer to incomplete type 28jsxdrapi.c:642: dereferencing pointer to incomplete type 29jsxdrapi.c:645: dereferencing pointer to incomplete type 30jsxdrapi.c:646: `i' undeclared (first use in this function) 31jsxdrapi.c:647: dereferencing pointer to incomplete type 32jsxdrapi.c:649: dereferencing pointer to incomplete type 33jsxdrapi.c:658: dereferencing pointer to incomplete type 34jsxdrapi.c:660: dereferencing pointer to incomplete type 35jsxdrapi.c:668: dereferencing pointer to incomplete type 36jsxdrapi.c: In function `JS_XDRFindClassById': 37jsxdrapi.c:676: static symbol `JS_XDRFindClassById' is marked dllexport 38jsxdrapi.c:677: parse error before "i" 39jsxdrapi.c:679: `i' undeclared (first use in this function) 40jsxdrapi.c:679: dereferencing pointer to incomplete type 41jsxdrapi.c:681: dereferencing pointer to incomplete type 42jsxdrapi.c: In function `JS_XDRValue': 43jsxdrapi.c:683: parse error at end of input 44jsstr.h:163: warning: array `js_empty_ucstr' assumed to have one element 45jsstr.h:167: warning: array `js_X' assumed to have one element 46jsstr.h:168: warning: array `js_Y' assumed to have one element 47jsregexp.h:49: storage size of `parens' isn't known 48jsregexp.h:51: storage size of `lastMatch' isn't known 49jsregexp.h:52: storage size of `lastParen' isn't known 50jsregexp.h:53: storage size of `leftContext' isn't known 51jsregexp.h:54: storage size of `rightContext' isn't known 52jscntxt.h:203: storage size of `propertyTreeHash' isn't known 53jscntxt.h:324: storage size of `regExpStatics' isn't known 54In file included from prmjtime.c:44: 55jstypes.h:238:6: #error "Must define one of XP_BEOS, XP_MAC, XP_OS2, XP_WIN or X 56P_UNIX" 57jstypes.h:254:2: #error No suitable type for JSInt8/JSUint8 58jstypes.h:267:2: #error No suitable type for JSInt16/JSUint16 59jstypes.h:287:2: #error No suitable type for JSInt32/JSUint32 60In file included from prmjtime.c:44: 61jstypes.h:319: parse error before "JSUint32" 62jstypes.h:319: warning: no semicolon at end of struct or union 63jstypes.h:321: warning: data definition has no type or storage class 64jstypes.h:322: parse error before "JSUint64" 65jstypes.h:322: warning: data definition has no type or storage class 66jstypes.h:338:2: #error 'sizeof(int)' not sufficient for platform use 67jstypes.h:379: parse error before "JSBool" 68jstypes.h:379: warning: data definition has no type or storage class 69jstypes.h:389: parse error before "JSPackedBool" 70jstypes.h:389: warning: data definition has no type or storage class 71In file included from jstypes.h:397, 72 from prmjtime.c:44: 73jsotypes.h:69: parse error before "uint" 74jsotypes.h:69: warning: data definition has no type or storage class 75jsotypes.h:72: parse error before "uintn" 76jsotypes.h:72: warning: data definition has no type or storage class 77jsotypes.h:73: parse error before "uint64" 78jsotypes.h:73: warning: data definition has no type or storage class 79jsotypes.h:79: parse error before "uint16" 80jsotypes.h:79: warning: data definition has no type or storage class 81jsotypes.h:80: parse error before "uint8" 82jsotypes.h:80: warning: data definition has no type or storage class 83jsotypes.h:83: parse error before "intn" 84jsotypes.h:83: warning: data definition has no type or storage class 85jsotypes.h:95: parse error before "int64" 86jsotypes.h:95: warning: data definition has no type or storage class 87jsotypes.h:106: parse error before "int16" 88jsotypes.h:106: warning: data definition has no type or storage class 89jsotypes.h:107: parse error before "int8" 90jsotypes.h:107: warning: data definition has no type or storage class 91In file included from prmjtime.c:47: 92jsprf.h:65: parse error before "JS_snprintf" 93jsprf.h:65: parse error before "JSUint32" 94jsprf.h:65: warning: data definition has no type or storage class 95jsprf.h:95: parse error before '*' token 96jsprf.h:95: parse error before "JSUint32" 97jsprf.h:95: `JSIntn' declared as function returning a function 98jsprf.h:97: parse error before "JS_sxprintf" 99jsprf.h:97: parse error before "f" 100jsprf.h:97: warning: data definition has no type or storage class 101jsprf.h:102: parse error before "JS_vsnprintf" 102jsprf.h:102: parse error before "JSUint32" 103jsprf.h:102: warning: data definition has no type or storage class 104jsprf.h:105: parse error before "JS_vsxprintf" 105jsprf.h:105: parse error before "f" 106jsprf.h:105: warning: data definition has no type or storage class 107jsprf.h:140: parse error before "JS_sscanf" 108jsprf.h:140: warning: data definition has no type or storage class 109In file included from prmjtime.h:42, 110 from prmjtime.c:48: 111jslong.h:66: parse error before "JSLL_MaxInt" 112jslong.h:66: warning: data definition has no type or storage class 113jslong.h:67: parse error before "JSLL_MinInt" 114jslong.h:67: warning: data definition has no type or storage class 115jslong.h:68: parse error before "JSLL_Zero" 116jslong.h:68: warning: data definition has no type or storage class 117jslong.h:275: parse error before '*' token 118In file included from prmjtime.c:48: 119prmjtime.h:55: parse error before "JSInt32" 120prmjtime.h:55: warning: no semicolon at end of struct or union 121prmjtime.h:56: warning: data definition has no type or storage class 122prmjtime.h:57: parse error before "tm_min" 123prmjtime.h:57: warning: data definition has no type or storage class 124prmjtime.h:58: parse error before "tm_hour" 125prmjtime.h:58: warning: data definition has no type or storage class 126prmjtime.h:59: parse error before "tm_mday" 127prmjtime.h:59: warning: data definition has no type or storage class 128prmjtime.h:60: parse error before "tm_mon" 129prmjtime.h:60: warning: data definition has no type or storage class 130prmjtime.h:61: parse error before "tm_wday" 131prmjtime.h:61: warning: data definition has no type or storage class 132prmjtime.h:62: parse error before "tm_year" 133prmjtime.h:62: warning: data definition has no type or storage class 134prmjtime.h:63: parse error before "tm_yday" 135prmjtime.h:63: warning: data definition has no type or storage class 136prmjtime.h:64: parse error before "tm_isdst" 137prmjtime.h:64: warning: data definition has no type or storage class 138prmjtime.h:73: parse error before "PRMJ_Now" 139prmjtime.h:73: warning: data definition has no type or storage class 140prmjtime.h:77: parse error before "PRMJ_LocalGMTDifference" 141prmjtime.h:77: warning: data definition has no type or storage class 142prmjtime.h:85: parse error before "PRMJ_DSTOffset" 143prmjtime.h:85: parse error before "local_time" 144prmjtime.h:85: warning: data definition has no type or storage class 145prmjtime.c:215: parse error before "tsecs" 146prmjtime.c:220: parse error before "PRMJ_LocalGMTDifference" 147prmjtime.c:274: parse error before "PRMJ_ToExtendedTime" 148prmjtime.c:274: parse error before "base_time" 149prmjtime.c: In function `PRMJ_ToExtendedTime': 150prmjtime.c:276: parse error before "exttime" 151prmjtime.c:279: `JSInt32' undeclared (first use in this function) 152prmjtime.c:279: (Each undeclared identifier is reported only once 153prmjtime.c:279: for each function it appears in.) 154prmjtime.c:283: `diff' undeclared (first use in this function) 155prmjtime.c:284: `tmp' undeclared (first use in this function) 156prmjtime.c:285: parse error before "_i" 157prmjtime.c:285: `tmp1' undeclared (first use in this function) 158prmjtime.c:285: `_i' undeclared (first use in this function) 159prmjtime.c:286: parse error before "_a" 160prmjtime.c:286: `_a' undeclared (first use in this function) 161prmjtime.c:286: `_b' undeclared (first use in this function) 162prmjtime.c:286: `JSUint32' undeclared (first use in this function) 163prmjtime.c:286: parse error before "_a1" 164prmjtime.c:286: `_a1' undeclared (first use in this function) 165prmjtime.c:286: `_a0' undeclared (first use in this function) 166prmjtime.c:286: parse error before numeric constant 167prmjtime.c:286: parse error before ')' token 168prmjtime.c:286: `_b1' undeclared (first use in this function) 169prmjtime.c:286: `_b0' undeclared (first use in this function) 170prmjtime.c:286: parse error before numeric constant 171prmjtime.c:286: parse error before ')' token 172prmjtime.c:286: `_y0' undeclared (first use in this function) 173prmjtime.c:286: `_y1' undeclared (first use in this function) 174prmjtime.c:286: `_y2' undeclared (first use in this function) 175prmjtime.c:286: `_y3' undeclared (first use in this function) 176prmjtime.c:286: parse error before numeric constant 177prmjtime.c:288: `g1970GMTMicroSeconds' undeclared (first use in this function) 178prmjtime.c:289: `low' undeclared (first use in this function) 179prmjtime.c:291: parse error before "_a" 180prmjtime.c:292: parse error before "_a" 181prmjtime.c:296: parse error before "_a" 182prmjtime.c:298: parse error before "_i" 183prmjtime.c:298: `exttime' undeclared (first use in this function) 184prmjtime.c:298: `base_time' undeclared (first use in this function) 185prmjtime.c:299: parse error before "_a" 186prmjtime.c:300: parse error before "_a" 187prmjtime.c: At top level: 188prmjtime.c:305: parse error before "PRMJ_Now" 189prmjtime.c:398: parse error before "PRMJ_DSTOffset" 190prmjtime.c:398: parse error before "local_time" 191prmjtime.c: In function `PRMJ_DSTOffset': 192prmjtime.c:400: parse error before "us2s" 193prmjtime.c:420: `JSInt32' undeclared (first use in this function) 194prmjtime.c:420: parse error before "diff" 195prmjtime.c:423: storage size of `prtm' isn't known 196prmjtime.c:429: `us2s' undeclared (first use in this function) 197prmjtime.c:430: parse error before "_a" 198prmjtime.c:430: `JSUint32' undeclared (first use in this function) 199prmjtime.c:430: `_negative' undeclared (first use in this function) 200prmjtime.c:430: `_a' undeclared (first use in this function) 201prmjtime.c:430: `local_time' undeclared (first use in this function) 202prmjtime.c:430: `_b' undeclared (first use in this function) 203prmjtime.c:433: `maxtimet' undeclared (first use in this function) 204prmjtime.c:453: `diff' undeclared (first use in this function) 205prmjtime.c:462: parse error before "_a" 206prmjtime.c:462: parse error before "_a1" 207prmjtime.c:462: `_a1' undeclared (first use in this function) 208prmjtime.c:462: `_a0' undeclared (first use in this function) 209prmjtime.c:462: parse error before numeric constant 210prmjtime.c:462: parse error before ')' token 211prmjtime.c:462: `_b1' undeclared (first use in this function) 212prmjtime.c:462: `_b0' undeclared (first use in this function) 213prmjtime.c:462: parse error before numeric constant 214prmjtime.c:462: parse error before ')' token 215prmjtime.c:462: `_y0' undeclared (first use in this function) 216prmjtime.c:462: `_y1' undeclared (first use in this function) 217prmjtime.c:462: `_y2' undeclared (first use in this function) 218prmjtime.c:462: `_y3' undeclared (first use in this function) 219prmjtime.c:462: parse error before numeric constant 220prmjtime.c: At top level: 221prmjtime.c:537: parse error before "tsecs" 222prmjtime.c: In function `PRMJ_basetime': 223prmjtime.c:540: `JSInt32' undeclared (first use in this function) 224prmjtime.c:540: parse error before "year" 225prmjtime.c:555: `result' undeclared (first use in this function) 226prmjtime.c:556: `result1' undeclared (first use in this function) 227prmjtime.c:557: `result2' undeclared (first use in this function) 228prmjtime.c:560: `base' undeclared (first use in this function) 229prmjtime.c:562: parse error before "_a" 230prmjtime.c:562: `JSUint32' undeclared (first use in this function) 231prmjtime.c:562: `_negative' undeclared (first use in this function) 232prmjtime.c:562: `_a' undeclared (first use in this function) 233prmjtime.c:562: `_b' undeclared (first use in this function) 234prmjtime.c:563: parse error before "_a" 235prmjtime.c:563: `tsecs' undeclared (first use in this function) 236prmjtime.c:567: parse error before "_a" 237prmjtime.c:570: `isleap' undeclared (first use in this function) 238prmjtime.c:572: parse error before "_a" 239prmjtime.c:573: `days' undeclared (first use in this function) 240prmjtime.c:575: `year' undeclared (first use in this function) 241prmjtime.c:576: parse error before "_a" 242prmjtime.c:585: parse error before "_a" 243prmjtime.c:586: `mday' undeclared (first use in this function) 244prmjtime.c:589: `month' undeclared (first use in this function) 245prmjtime.c:592: `yday' undeclared (first use in this function) 246prmjtime.c:607: parse error before "_a" 247prmjtime.c:607: parse error before "_a1" 248prmjtime.c:607: `_a1' undeclared (first use in this function) 249prmjtime.c:607: `_a0' undeclared (first use in this function) 250prmjtime.c:607: parse error before numeric constant 251prmjtime.c:607: parse error before ')' token 252prmjtime.c:607: `_b1' undeclared (first use in this function) 253prmjtime.c:607: `_b0' undeclared (first use in this function) 254prmjtime.c:607: parse error before numeric constant 255prmjtime.c:607: parse error before ')' token 256prmjtime.c:607: `_y0' undeclared (first use in this function) 257prmjtime.c:607: `_y1' undeclared (first use in this function) 258prmjtime.c:607: `_y2' undeclared (first use in this function) 259prmjtime.c:607: `_y3' undeclared (first use in this function) 260prmjtime.c:607: parse error before numeric constant 261prmjtime.c:608: parse error before "_a" 262prmjtime.c:612: `wday' undeclared (first use in this function) 263prmjtime.c:618: parse error before "_a" 264prmjtime.c:619: `hours' undeclared (first use in this function) 265prmjtime.c:620: parse error before "_a" 266prmjtime.c:620: parse error before "_a1" 267prmjtime.c:620: parse error before numeric constant 268prmjtime.c:620: parse error before ')' token 269prmjtime.c:620: parse error before numeric constant 270prmjtime.c:620: parse error before ')' token 271prmjtime.c:620: parse error before numeric constant 272prmjtime.c:621: parse error before "_a" 273prmjtime.c:625: parse error before "_a" 274prmjtime.c:626: `minutes' undeclared (first use in this function) 275prmjtime.c:627: parse error before "_a" 276prmjtime.c:627: parse error before "_a1" 277prmjtime.c:627: parse error before numeric constant 278prmjtime.c:627: parse error before ')' token 279prmjtime.c:627: parse error before numeric constant 280prmjtime.c:627: parse error before ')' token 281prmjtime.c:627: parse error before numeric constant 282prmjtime.c:628: parse error before "_a" 283prmjtime.c:630: `seconds' undeclared (first use in this function) 284prmjtime.c:632: `prtm' undeclared (first use in this function) 285prmjtime.c:633: `JSInt8' undeclared (first use in this function) 286prmjtime.c:633: parse error before "seconds" 287prmjtime.c:634: parse error before "minutes" 288prmjtime.c:635: parse error before "hours" 289prmjtime.c:636: parse error before "mday" 290prmjtime.c:637: parse error before "month" 291prmjtime.c:638: parse error before "wday" 292prmjtime.c:639: `JSInt16' undeclared (first use in this function) 293prmjtime.c:639: parse error before "year" 294prmjtime.c:640: parse error before "yday"

I can't show them all because there are too many (it goes past the maximum amount of text on a ms-dos window :() and gcc just doesn't feel like redirecting it's output to a file (I do gcc ... >output.txt and it still go to the screen, I'm starting to think it uses a different stream, such as stderr). I've never had good luck with compiling packages like this.
EDIT: Also, I did follow spellcaster's instructions on how to compile it.

Chris Katko
Member #1,881
January 2002
avatar

REAL (wo)men write out circuits for ROM chips. Assembly. That's for lamers!

;D

Ah, the good ol' days of circuit-based games. It's amazing how far we've come.

"Materialistic things can't bring you happiness. Except Marshmellows--which are pretty much the same thing."
--
How am I posting? Comments, questions, or suggestions? Drop me a line!

curtis warren
Member #3,898
September 2003

Real men/women build their own cpu with the game in the registers :P

Marcello
Member #1,860
January 2002
avatar

I had to use -XP_WIN instead of -XP_PC.

Marcello

curtis warren
Member #3,898
September 2003

It still doesn't work :(

 1   2   3   4 


Go to: