|
Forum List • Thread List • Reply • Refresh • New Topic • Search • Previous • Next 1 |
1. Needed help using windows WMI and CMI classes in Dev-c++ #2777 Posted by: 2003-10-26 19:00:46 |
Hi, I am using Dev-c++ to write a program that need to retrieve system hardware information form users PC.. The standard Win APIfunctions turned out quite useless, as I want to return for example processor manufacturer, clock, cache size etc.. However in MSDN i found that in WMI there is a WIN32_Processor class that contains all information I might need(about cpu).. (there is also a CIM_Processor class).. My problem is that I can`t find I way to accsess elements of these classes.. I tried to take a MSDN tutorial but the description were not too clear and code that was there as example didn`t compiled on my Dev-c++ compiler.. Can somebody share his experiece in this field and show me how to do this correctly.. P.S. as I am very unexperiecned in windows programming it would be really nice if someone could post fully working code example that compiles on Dev-c++ compiler (if posible). Of course any other suggestions may also help me.. |
2. Re: Needed help using windows WMI and CMI classes in Dev-c++ #2778 Posted by: upCASE 2003-10-26 21:28:25 |
Hi there! Well, even if it has been quite a while since I did "real win32 API" coding I'll try to be of help :) I just browsed the MSDN and to me it seems like WIN32_Processor is a class that comes with the platform SDK, which, how I see it, has to be downloaded first (maybe it comes with new versions of MS VC, but I'm pretty sure that it doesn't come with Dev-C++).
I'm not really sure if you can get this stuff to work properly with Dev-C++. Maybe it would be better to google a bit to find other classes/functions you could use....
Ok... Now you got me started :)) I guess one good way to do it is using asm. Here's a little source I wrote a while ago that will/should list CPU vendor name, CPU name, feature flags and (if it's there) the cpu serial.
#include <iostream>
#include <cstdlib>
using namespace std;
char vendor[16];
char name[48];
int feature;
int serial;
int main()
{
cout << "Gimme da specs, by upCASE" << endl;
cout << "---------------------------------------" << endl<<endl;
asm("movl $0, %eaxnt"
"cpuidnt"
"mov %ebx, (_vendor)nt"
"mov %edx, (_vendor+4)nt"
"mov %ecx, (_vendor+8)"
);
cout << "CPU Vendor string:t " << vendor << endl;
asm("movl $0x80000002, %eaxnt"
"cpuidnt"
"mov %eax, (_name)nt"
"mov %ebx, (_name+4)nt"
"mov %ecx, (_name+8)nt"
"mov %edx, (_name+12)nt"
"movl $0x80000003, %eaxnt"
"cpuidnt"
"mov %eax, (_name+16)nt"
"mov %ebx, (_name+20)nt"
"mov %ecx, (_name+24)nt"
"mov %edx, (_name+28)nt"
"movl $0x80000004, %eaxnt"
"cpuidnt"
"mov %eax, (_name+32)nt"
"mov %ebx, (_name+36)nt"
"mov %ecx, (_name+40)nt"
"mov %edx, (_name+44)nt"
);
cout << "CPU Name:tt " << name << endl;
asm("movl $1, %eaxnt"
"cpuidnt"
"mov %edx, _featurent"
);
cout << "CPU Feature Flags:t " << hex <<feature << endl ;
asm("movl $3, %eaxnt"
"cpuidnt"
"movl %edx, _serialnt"
);
cout << "CPU serial no.:tt " << hex <<serial<< endl;
system("pause");
return 0;
}
I just found some very interesting code, too bad it's written in Pascal. It's written in inline asm instructions, too... I'll have a look at it. Stay tuned, maybe I'll have the time and rewrite it in C++.
upcaseupCASE ----------------------------------- If it was hard to write, it should be hard to read!- Do. Or do not. There is no try! |
3. Re: Needed help using windows WMI and CMI classes in Dev-c++ #2791 Posted by: 2003-10-28 22:54:46 |
Thanks for your help.. I will try this code as soon as I will have time.. Also I must say that my first thought was to do this job by ASM code calling CPU_ID function.. But since I am absolute 0 at ASM, I could only rely to others help with ASM code.. Only code that gave me one person failed to run on Dev-c++.. i don`t know why but one explained me that this is conected to diferent ASM standarts talked somethig about BCC or GCC etc:).. However I will shourly try to your code and shoure I will wait for anny other advices.. Besides this I suspect WMI works only on winXP and 2000 not on win 9x platforms.. someone knows if this is true?(of course now my proority will be your ASM code, but still if someone knows he could tell, just because I may need to know other syste information too - for example total size of PC ram, FSB, memory speed..(of course for begining it would be very nice to get CPU information) I just wonder if there isn`t any system file or registry keys in win 9x and/or xp and 2000 os form which you can get this information quickly and easy..) |
4. Re: Needed help using windows WMI and CMI classes in Dev-c++ #2793 Posted by: 2003-10-28 23:39:19 |
thanks i tried your code it works.. Although somehow strange that when I put it in my program(that uses winapi) function i get "undefined reference to vendor", but when i copy code to new file it works.. Thank you for code.. It would be nice if you invented how to get CPU speed and probably other details also.. If you feel really nice you could also put some coments to your ASM code so I could at least guess what it is doing..
Dawis |
5. Re: Needed help using windows WMI and CMI classes in Dev-c++ #2800 Posted by: upCASE 2003-10-29 01:40:46 |
Hi! I'm currently a bit busy with finishing off some other project, but I had a look into the matter and developed a little class that could be used for getting such info (currently CPU name, vendor string and an estimation of the speed in MHz). Problem is this "extended asm" in AT&T syntax... I'm currently stuck on how to get the correct string values copied, but it works partly. So, maybe tonight or tomorrow I'll post something useful :) Oh, yes, sure, I can add some comments :)
About this "undefined reference": You'll have to declare all variables global, otherwise it won't work. This is something that gives problems right now when I want to store everything in class members. But it can and will work!! I'm not giving up! :))
upcaseupCASE ----------------------------------- If it was hard to write, it should be hard to read!- Do. Or do not. There is no try! |
6. Re: Needed help using windows WMI and CMI classes in Dev-c++ #2803 Posted by: 2003-10-29 01:58:54 |
Thanks for your enthusiasm.. I got your code working in my program.. However I have some strange problems and I wonder if anyone else has faced such.. The situation look foloving: your code is included in seperate header file and basicly acts as function that is called by another function.. Your code there is a function that returns char array.. the problem is foloving - when I run your code as seperate program and use cout to output return data of your function all works corectly(or almost).. but when I use your code as a function in my windows interface c++ program and write something like this char cpuinf[100]; cpuinf[100]=yourcode();//yourcode is function that executes your code //and returns char array and write some window item to display the contents of cpuinf it shows only some miserable garbage.. May be the problem could be that win interface use special coding to characters that is no compatiable with that your code gives out..? may be you know where could be problem? |
7. Re: Needed help using windows WMI and CMI classes in Dev-c++ #2804 Posted by: 2003-10-29 02:21:29 |
I found interesting solution to my problem(of course I shopuld keep in mind that it is interesting only because my knowleddge level is not too hihg:).. Since all variables in our code ar global.. I referdirectly to the global variable and get the right results.. strange only that data is spoiled when I put return value tu function and asign that value to new string.. Also strange that function can change global variables: I heard functions only can take values but not change them..? or this is true only about those values you define in functions declaration i mean: <return type><function name>(those variables); .. anyhow I will be glad to hear some explanations from more experianced people |
8. Re: Needed help using windows WMI and CMI classes in Dev-c++ #2808 Posted by: upCASE 2003-10-29 04:39:53 |
Hi! Well, don't get me wrong now, I really don't want to offend you, but maybe you should consider buying a good book about C/C++ and read the chapters about pointers and arrays.
char cpuinf[100];
cpuinf[100]=yourcode();
This is more or less nonsense, or at least it doesn't do what you thought it would. Something like that would work in Pascal as far as I remember, but not in C. Here is what I presume you wanted the above code to do: 1. declare an array of 100 chars 2. call yourcode() to get some string through ASM 3. assign the string to cpuinf, so that cout << cpuinf would show it.
I don't know what yourcode() returns, would be good to know the prototype, but whatever I try this doesn't even compile. The reason is pretty simple. With cpuinf[100]=yourcode(); you are assigning the 100th element of cpuinf something that is returned by yourcode(). You don't write to cpuinf, just to the 100th element. Handling strings in return values is something that normaly is done in a different way, because when using arrays you're really using constant pointers to the first element of an array that can be modified by giving it an offset. char d[100]; and char* const c = new char[100]; are more or less the same. You can't have a function that returns char[] or char[100]. It could return a single char or a char*. So however you did it, while printing cpuinf it will hold random chars, that's where the garbage comes from... For a more specific answer I'd need some source code I could comment on. Writing down everything about strings, arrays and pointers would be too much for me right now :)
For your second question: You're right! If you define a variable global you have access to it from everywhere in your program. This is something newbies often to because it simplifies a lot of things, but should be avoided for data security. You'll loose overview about what function modifies the variable and data will become inconsistent. Using a prototype like <return type><function name>(those variables); "those variables" will be on the stack and hold the values you assigned them. They can be seen as copies of you real variables which you passed the function. So, if you modify the variables and the function returns, the stack will be cleared and these temp variables won't be there anymore. This is why you would have to return something you need outside of that function. There are ways to modify variables inside a function. One would be to pass pointers to these variables instead of values (so it's a "call-by-pointer" instead of a "call-by-value"). Another way would be references in C++ (call-by-reference).
So, as a temporary conclusion: Learn about pointers! It will save your ass! :) As I said: If you want a better explanation send your source, or at least the relevant part, so that I can comment on something. I'm to lazy right now to make up a good example :)
upcase
upCASE ----------------------------------- If it was hard to write, it should be hard to read!- Do. Or do not. There is no try! |
9. Re: Needed help using windows WMI and CMI classes in Dev-c++ #2809 Posted by: 2003-10-29 05:19:40 |
Yeah.. a lot of that is clearer now.. thanks for your time.. I know basics abot variables, arrays and such things and I even use them pretty often.. But when things come to pointers, references and vectors things are not so clear anymore.. may be I just need to look at good examples using those things.. about your version - yes I really thought that code stores the return of function into char array.. of course i was mistaken.. yourcode() is shorhand of asm function you gave me.. about pointers.. so far I don`t understand if function returns value that in fact is adress of some variable or starting point of array how can it really write data to it.. this actualy means varuable or array exists in the memory it is modified and only adres to it is returned.. however what is the point of returning adress if the adres should be known well before funtion ever touches the variable.. (unless the function creates it)..
Dawis
P.S. post your code(i mean CPU info) when it is ready.. |
10. Re: Needed help using windows WMI and CMI classes in Dev-c++ #2825 Posted by: upCASE 2003-11-02 00:34:38 |
Hi! Sorry that it took a bit longer :) I hope the following code helps...
cpuspecs.h
#ifndef __CPUSPECS_H
#define __CPUSPECS_H
#include <ctime>
class CpuSpecs
{
char vendor[13];
char name[48];
unsigned long feature;
unsigned int serial;
unsigned int mhz;
public:
CpuSpecs();
~CpuSpecs(){};
unsigned int getCPUMhz(){ return mhz; }
char* getCPUVendor(){ return vendor; }
char* getCPUName(){ return name; }
unsigned int getCPUSerial(){ return serial; }
bool hasFPU(){ return feature & 1; }
bool hasMMX(){ return (feature >> 23) & 1; }
bool hasSSE(){ return (feature >> 25) & 1; }
bool hasSSE2(){ return (feature >> 26) & 1;}
bool hasIA64(){ return (feature >> 30) & 1;}
private:
void calcMhz();
void CPUtick(unsigned int* hi,unsigned int* lo);
void vendorName();
void cpuName();
void serialNumber();
void featureFlags();
};
#endif
cpuspecs.cpp
#include "cpuspecs.h"
#include <cstring>
CpuSpecs::CpuSpecs()
{
serial = mhz = 0;
calcMhz();
vendorName();
cpuName();
featureFlags();
serialNumber();
}
void CpuSpecs::vendorName()
{
union{
char c[13];
int i[3];
} buf;
asm("cpuid" : "=b"(buf.i[0]), "=d"(buf.i[1]), "=c"(buf.i[2]) : "a"(0));
buf.c[12] = '\0';
strncpy( vendor, buf.c, 13);
}
void CpuSpecs::cpuName()
{
union{
char c[49];
int i[12];
} buf;
asm("cpuid" : "=a"(buf.i[0]), "=b"(buf.i[1]), "=c"(buf.i[2]), "=d"(buf.i[3]) : "a"(0x80000002));
asm("cpuid" : "=a"(buf.i[4]), "=b"(buf.i[5]), "=c"(buf.i[6]), "=d"(buf.i[7]) : "a"(0x80000003));
asm("cpuid" : "=a"(buf.i[8]), "=b"(buf.i[9]), "=c"(buf.i[10]), "=d"(buf.i[11]) : "a"(0x80000004));
buf.c[48] = '\0';
strncpy( name, buf.c, 49);
}
void CpuSpecs::featureFlags()
{
unsigned long t;
asm("cpuid" : "=d"(t) : "a"(1));
feature = t;
}
void CpuSpecs::serialNumber()
{
int temp;
asm("cpuid" : "=a"(temp) : "a"(3));
serial = temp;
}
void CpuSpecs::calcMhz()
{
unsigned int h,l,lasttick=0;
unsigned int time1,time2;
time1 = clock();
time2=time1;
CPUtick(&h,&l);
while(time2-time1<1000)
{
time2 = clock();
}
CPUtick(&h,&lasttick);
mhz = (lasttick-l)/1000000;
}
void CpuSpecs::CPUtick(unsigned int* hi,unsigned int* lo)
{ unsigned int high, low;
asm(
"RDTSCnt"
: "=d" (high), "=a" (low)
);
*hi=high;
*lo=low;
}
main.cpp
#include <iostream>
#include "cpuspecs.h"
using namespace std;
int main()
{
CpuSpecs specs;
cout << "MHz approx.:t" << specs.getCPUMhz() << endl;
cout << "Vendor:tt" << specs.getCPUVendor() << endl;
cout << "Serial:tt" << specs.getCPUSerial() << endl;
cout << "CPU Name:t" << specs.getCPUName() << endl;
cout << "Has FPU:t" << specs.hasFPU() << endl;
cout << "Has MMX:t" << specs.hasMMX() << endl;
cout << "Has SSE:t" << specs.hasSSE() << endl;
cout << "Has SSE2:t" << specs.hasSSE2() << endl;
cout << "Has IA64:t" << specs.hasIA64() << endl;
system("pause");
return 0;
}
Note: This uses AT&T syntax, so it won't work with MSVC. Newer versions of "as" can deal with intel syntax, but I didn't feel like rewriting it :)
upcase
upCASE ----------------------------------- If it was hard to write, it should be hard to read!- Do. Or do not. There is no try! |
11. Re: Needed help using windows WMI and CMI classes in Dev-c++ #2832 |
Great work! Thanks! I've put it separatedly here: http://g.yi.org/f.php?f=10174 , hope useful to others. |
12. Re: Needed help using windows WMI and CMI classes in Dev-c++ #2833 Posted by: 2003-11-02 17:08:59 |
Thank you very much.. and this code is really compiling on my DEv-c++ which means I really can get the frequency now.. thanks for your time..
Also now I am looking through your code and thinking how to seperate the function specs.getCPUMhz() from others.. the reason is that your previous code was ok too it just didn`t returned cpu clock.. So I want to add to your previos code just this function also the others may be very useful some other time and not only to me.. Ok I will try.. but really thanks for the job.. your code is fine.. Also if you feel enthusiasthic you coulddevolop this code further for example I wonder how the brandname of the core of procesor can be returned..(you know Thouroughbred, thunderbird etc.) .. Apart form this there is such things as FSB(I think that we could get if we divide cpu speed by multiplier, but how to know multiplier?:).. speed of the RAM memory is aslo such thing that I would like to get..(I don`t know form where they are readed but i think it is ASM intructions too) Aslo I don`t need al these features now I such a code would be very valuable not only to me but to many more people.. But of course this is only if you really feel so enthusiasthic:) |
13. Re: Needed help using windows WMI and CMI classes in Dev-c++ #2835 Posted by: upCASE 2003-11-02 21:01:20 |
Hi! Glad it worked and was useful to you.
Actually I just revised my code and came to the conclusion that I'll rewrite and update it. I'll add things like cpu family and maybe cpu brand. Cache info will be included, too. About the FSB I'm not so sure but I'll see what I can do. Guess I'll have to rewrite a good part of it, because I think it's somehow ugly in style. :)
Since I've got work to do next week it'll take a while, but maybe next weekend I'll have it ready.
upcaseupCASE ----------------------------------- If it was hard to write, it should be hard to read!- Do. Or do not. There is no try! |
14. Re: Needed help using windows WMI and CMI classes in Dev-c++ #2842 Posted by: 2003-11-02 23:39:23 |
OK,
your function is really very usefull.. I included it in my project and it displays processor frequency as it is needed and when it is needed.. However some people(alpha testers:) report to me that it doesn`t detect CPU Name: for intel processors.. for example if processor brandname is PIII it just shows nothing .. it works fine with AMD athlon procesors.. not sure how about newer Intel processors such as P4... Do you know where could be problem and how can we fix it? The frequency is detected OK for all procesors so far.. I just need to return procesor brandname for intel procesors... do you know how to do it? It would be really nice..:) thank you for your time once again.. youre the best guy I have ever met in forums:) Although I don`t understand how work some of the asm funtions they are really useful to me already now.. I hope others will find them useful too.
Dawis |
15. Re: Needed help using windows WMI and CMI classes in Dev-c++ #2843 Posted by: upCASE 2003-11-03 04:45:35 |
Hi! Enough, enough, or I'll have to start blushing :) Thanks for your kind words and praises, but please stop now, I'm to shy :))
Yes, I know that this code may cause trouble and sometimes doesn't work. That's why I'll have to rewrite it :) Problem is that "cpuid" assembler instruction. First I should check if it is available, because especially older processors don't know it. Then there's a problem that early P5 processors don't return a vendor string (what you might be experiencing now with the P3). Maybe it's just that extended cpuid levels aren't supported... I'll have to check for that too, marking the not available things with blank arrays or a line like "unknown". And of course it would need a more detailed info on the cpu brand (to answer your question: Yes, it is possible.)
If there's anything else that occurs while alpha testing it, it would be nice if you could tell me some details about it (processor type and what gives the error, what is returned correctly). It's pretty hard to find some really complete docs on this. I gathered info from different sources and docs, so it's quite logical that there will be errors, faults, etc... But from what I've read so far it should be possible to make it work on all processors starting from a 80486.
So, let's pray that I find some time (or somebody else) to implement the new stuff and tidy up the old sources. :)
upcaseupCASE ----------------------------------- If it was hard to write, it should be hard to read!- Do. Or do not. There is no try! |
16. Re: Needed help using windows WMI and CMI classes in Dev-c++ #2848 Posted by: 2003-11-03 05:42:32 |
hmm.. so far the only problem I spoted was with P3 - the result file showed no cpu name which means funtion didn`t returned one.. However the situation is not so hopeles as I thought - hence the function DID returned the cpu name for newer celeron - 1400mhz(oc at 1600 but it is not important)which means the P3 was just too old or something for this function.. |
17. Re: Needed help using windows WMI and CMI classes in Dev-c++ #3068 Posted by: 2003-12-13 05:41:00 |
Hi Upcase!
Can you share if your code if you had made someinnovations to your function that determinates CPU clock and type.. Or as it seems to me you are just too busy these days..? |
18. Re: Needed help using windows WMI and CMI classes in Dev-c++ #3071 Posted by: upCASE 2003-12-13 18:25:14 |
Hi! Yes, I'm a bit busy :( But I'll see if I can post it tomorrow. Currently it's broken, because I tried to determine the FSB speed, which isn't that easy, by using assembler. Problem is that it doesn't work. I know why and even found some sites (most of them about virus programming) with workarounds, but I don't seem to be evil enough to make it work :) There should be a possibility by using the MS DDK, but I have no clue about that...
I'll review my code tomorrow and mail it to you. Is your adress correct? If you say that it is better than the first one I'll release it either here or on my homepage.
upcaseupCASE ----------------------------------- If it was hard to write, it should be hard to read!- Do. Or do not. There is no try! |
19. Re: Needed help using windows WMI and CMI classes in Dev-c++ #3072 Posted by: 2003-12-13 19:31:00 |
Hi again!
Yes my email address should be correct.. Only that server is blocked from abroad trafic(we have to pay for that here in Latvia).. However I think email will workd because you aren`t downloading anything from us when sending email just uploading.. So I think my email will work...
Can you tell a bit about your code what have you changed what is better, and what is more..{of course I can look at it for my self but as I am 0 in ASM the fnction names and return values should be very obvious{last time I managed to understand}}.. I am allready using your code in one project - it is freeware computer test program currently on early devolopment stage.. If you want I can give you to try it.. Hope you don`t mind for using your code..
I am glad you are trying to catch FSB information.. Do you think you will make it or are you allready giving up? If you think to do it in nearest time I can wait a little bit longer for your code.. Because in next few days I won`t have time to look at it anyhow - I have one exam to pass(i hope) on Monday..
About other things I asked to you - do you feel brave to code your program to catch other information like CPU core brandname, Memory manufacturer, speed, type etc. ?
To date I haven`t even managed to read anywhere how to catch such information form a PC.. I fear it may be not so easy, and you have to use hevy ASM coding or spesific windows functions.. {when I tried to accsess windows WMI classes I failed - I had to copy a lot`s of code ony to try acsess them, but that code from MSDN didn`t even compiled on my Dev-C++ }
Well as I understood you too are using Dev-c++, and are a lot of more experieced than me.. So I will ask - have you heard of any patches or updates you can aply to Dev-C++ compiler after what you can tell your compiler to optimise code specially for AMD cpu`s or speciallu for Intel cpu`s.. May be these manufacturers have something like libraries or additions to compiler that are designed for optimisation of code.. But I fear I do not know how to use them.. have you got any experiece in this field?
About your homepage - can you share link to it?
Dawis |
20. Re: Needed help using windows WMI and CMI classes in Dev-c++ #3096 Posted by: upCASE 2003-12-16 21:03:05 |
Hi! Just send the code to you as an early christmas present :)
About my homepage: http://upcase.malteser-gl.de It's a temporary location till I can afford my own domain.
upcaseupCASE ----------------------------------- If it was hard to write, it should be hard to read!- Do. Or do not. There is no try! |
21. Re: Needed help using windows WMI and CMI classes in Dev-c++ #3254 Posted by: 2004-01-17 23:11:24 |
Hi.. sorry fol being so lazy in last time.. I looked at your code just today and will try to implement it in my aplication.. I see you have done a hard work in recognising more older CPU`s.. However I will need to modify a little bit your code to implement in my aplication.. You see I need information about cpu`s to be stored in some global char arrays so I can use later them when I need in my aplication.. my aplication uses WIN API(GUI) so console aplication output functions are not needed in my case.. I hope you don`t mind if I make some modifications to implement your code..
Dawis P.S. May be you wish to see on what I am working on? I could send you executable files of my benchmark aplication.. May this will give you necessary courage to continiue your work towards FSB:) |
22. Re: Needed help using windows WMI and CMI classes in Dev-c++ #3256 Posted by: upCASE 2004-01-18 21:26:33 |
Hi! I'll just quote myself (written in the sources): "You may use this code as long as you give credit to the author and inform him about what you did with this code. Example code or apps are appreciated! You may use this code freely in freeware and open source apps. If you want to use it in commercial or shareware apps you'll have to contact the author first!" :-)
Yes, please send me a copy :)
upCASE ----------------------------------- If it was hard to write, it should be hard to read!- Do. Or do not. There is no try! |
23. Re: Needed help using windows WMI and CMI classes in Dev-c++ #3385 Posted by: 2004-02-16 20:24:13 |
Please help me as i am a newbie to wxwindow i am having some problems in configuring wxwindows and compiling the same in Devc++.I am given a task of making a utility to monitor three server and its interfaces .I would like to do it in c++ with wxwindows.If any one of you have any idea regarding this or help me with the code i would be very thankful to you .God Bless you |
24. Re: Needed help using windows WMI and CMI classes in Dev-c++ #3463 Posted by: 2004-03-06 00:14:23 |
Hi! upCASE!
Where have you gone? I tried to contact you through e-mail but failed to receive any answer.. I allready wrote to you about my prpblems with implementing your code in my aplication.. Have you got anything in mind to help me solev that problem..{ May be I can compile your code seperately and include it in my aplication as ready executable code (is there a way to do this in dev-c++?)}
Anyhow I will be happy to receive at least any word from you:) |
25. Re: Needed help using windows WMI and CMI classes in Dev-c++ #3466 Posted by: upCASE 2004-03-06 00:23:51 |
Hi! I recived your mail but didn't have the time to answer it. Check back in about 2 hours, I'll send you a mail :) As Treebeard said: "Don't be hasty" :)
upCASE ----------------------------------- If it was hard to write, it should be hard to read!- Do. Or do not. There is no try! |
Forum List • Thread List • Reply • Refresh • New Topic • Search • Previous • Next 1 |