digitalmars.D - Newbie questions: I love them...! Do you?
- jicman (13/13) Mar 10 2005 Here's one then...:-)
- clayasaurus (22/42) Mar 10 2005 ------------ file1.d -----------------------
- clayasaurus (5/73) Mar 10 2005 should be
- jicman (2/75) Mar 10 2005
- jicman (37/60) Mar 11 2005 So I have this in my directory:
- Unknown W. Brackets (8/83) Mar 11 2005 It's linking them. Unless I'm mistaken, you'll either need:
- jicman (3/86) Mar 12 2005 Thank you. That was it.
- Derek Parnell (13/84) Mar 11 2005 Either run
- Derek Parnell (13/100) Mar 11 2005 Ok, now that DMD has a lib pragma, you can also do this ...
- jicman (15/93) Mar 12 2005 with your 1.12 build for windows does not. I get,
- Derek Parnell (45/149) Mar 12 2005 Thanks for the feedback. This is what I tested (before writing my earlie...
- jicman (85/223) Mar 12 2005 No, it's the same source code. Do I have to install it? What I did was...
Here's one then...:-) how do I import my own code into a program? Say I have a bunch of subroutine that I use for myself to ease my programming life (I'm sure we all have them)... How do I incorporate them into my programs? Sorry, but I just figured I should start to do this. I used to have one file per program, which was ok, but I am finding myself into having to change many files after fixing a bug. :-) I know: "ROOKIE!" Ok, so how do I do it? Also, how do I fix them? For example, what if some of those functions use std.string.WhatEver, do I have to import std.string in that function part? Please help a poor d programmer wanna be... thanks, josé
Mar 10 2005
jicman wrote:Here's one then...:-) how do I import my own code into a program? Say I have a bunch of subroutine that I use for myself to ease my programming life (I'm sure we all have them)... How do I incorporate them into my programs? Sorry, but I just figured I should start to do this. I used to have one file per program, which was ok, but I am finding myself into having to change many files after fixing a bug. :-) I know: "ROOKIE!"------------ file1.d ----------------------- module subroutine; // module declaration here import std.string; // import here dance() { rock(); } rock() { std.string.WhatEver(); // or just call WhatEver(); } ------------- main.d ----------------------- import subroutine; // module name int main() { dance(); // or you could use file1.dance() return 0; }Ok, so how do I do it? Also, how do I fix them? For example, what if some of those functions use std.string.WhatEver, do I have to import std.string in that function part?no.Please help a poor d programmer wanna be...k.thanks,np.josé
Mar 10 2005
clayasaurus wrote:jicman wrote:should be ------------- subroutine.d -------------------Here's one then...:-) how do I import my own code into a program? Say I have a bunch of subroutine that I use for myself to ease my programming life (I'm sure we all have them)... How do I incorporate them into my programs? Sorry, but I just figured I should start to do this. I used to have one file per program, which was ok, but I am finding myself into having to change many files after fixing a bug. :-) I know: "ROOKIE!"------------ file1.d -----------------------module subroutine; // module declaration here import std.string; // import here dance() { rock(); } rock() { std.string.WhatEver(); // or just call WhatEver(); } ------------- main.d ----------------------- import subroutine; // module name int main() { dance(); // or you could use file1.dance()// or you could use subroutine.dance(); just messed up the fnames.return 0; }Ok, so how do I do it? Also, how do I fix them? For example, what if some of those functions use std.string.WhatEver, do I have to import std.string in that function part?no.Please help a poor d programmer wanna be...k.thanks,np.josé
Mar 10 2005
thanks, clayasaurus says...clayasaurus wrote:jicman wrote:should be ------------- subroutine.d -------------------Here's one then...:-) how do I import my own code into a program? Say I have a bunch of subroutine that I use for myself to ease my programming life (I'm sure we all have them)... How do I incorporate them into my programs? Sorry, but I just figured I should start to do this. I used to have one file per program, which was ok, but I am finding myself into having to change many files after fixing a bug. :-) I know: "ROOKIE!"------------ file1.d -----------------------module subroutine; // module declaration here import std.string; // import here dance() { rock(); } rock() { std.string.WhatEver(); // or just call WhatEver(); } ------------- main.d ----------------------- import subroutine; // module name int main() { dance(); // or you could use file1.dance()// or you could use subroutine.dance(); just messed up the fnames.return 0; }Ok, so how do I do it? Also, how do I fix them? For example, what if some of those functions use std.string.WhatEver, do I have to import std.string in that function part?no.Please help a poor d programmer wanna be...k.thanks,np.josé
Mar 10 2005
clayasaurus says...So I have this in my directory: 03/11/2005 08:35 PM 236 jic.d 03/11/2005 08:35 PM 145 month.d File jic.d contains: module jic; private import std.string; char[] CallMe(char[] mon) { char[] mm = "CallMe " ~ mon; return(mm); } char[] CallMeToo(char[] mon) { char[] mm = "CallMeToo " ~ mon; return(mm); } while file month.d contains: import std.stdio; import jic; void main (char[][] args) { char[] d; writefln(jic.CallMe("Jan")); writefln(jic.CallMeToo("Feb")); } when I compile month.d, I get: 20:49:38.41>dmd month.d c:\dmd\bin\..\..\dm\bin\link.exe month,,,user32+kernel32/noi; OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved month.obj(month) Error 42: Symbol Undefined _D3jic6CallMeFAaZAa month.obj(month) Error 42: Symbol Undefined _D3jic9CallMeTooFAaZAa --- errorlevel 2 Huh?------------- subroutine.d ------------------- module subroutine; // module declaration here import std.string; // import here dance() { rock(); } rock() { std.string.WhatEver(); // or just call WhatEver(); } ------------- main.d ----------------------- import subroutine; // module name int main() { dance(); // or you could use subroutine.dance(); return 0; }
Mar 11 2005
It's linking them. Unless I'm mistaken, you'll either need: dmd month.d jic.d Or: dmd -c jic.d dmd month.d jic.obj Or similar. The point is that dmd is automatically calling the linker, which needs to be made aware of all the dependencies. -[Unknown]clayasaurus says...So I have this in my directory: 03/11/2005 08:35 PM 236 jic.d 03/11/2005 08:35 PM 145 month.d File jic.d contains: module jic; private import std.string; char[] CallMe(char[] mon) { char[] mm = "CallMe " ~ mon; return(mm); } char[] CallMeToo(char[] mon) { char[] mm = "CallMeToo " ~ mon; return(mm); } while file month.d contains: import std.stdio; import jic; void main (char[][] args) { char[] d; writefln(jic.CallMe("Jan")); writefln(jic.CallMeToo("Feb")); } when I compile month.d, I get: 20:49:38.41>dmd month.d c:\dmd\bin\..\..\dm\bin\link.exe month,,,user32+kernel32/noi; OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved month.obj(month) Error 42: Symbol Undefined _D3jic6CallMeFAaZAa month.obj(month) Error 42: Symbol Undefined _D3jic9CallMeTooFAaZAa --- errorlevel 2 Huh?------------- subroutine.d ------------------- module subroutine; // module declaration here import std.string; // import here dance() { rock(); } rock() { std.string.WhatEver(); // or just call WhatEver(); } ------------- main.d ----------------------- import subroutine; // module name int main() { dance(); // or you could use subroutine.dance(); return 0; }
Mar 11 2005
Thank you. That was it. josé Unknown W. Brackets says...It's linking them. Unless I'm mistaken, you'll either need: dmd month.d jic.d Or: dmd -c jic.d dmd month.d jic.obj Or similar. The point is that dmd is automatically calling the linker, which needs to be made aware of all the dependencies. -[Unknown]clayasaurus says...So I have this in my directory: 03/11/2005 08:35 PM 236 jic.d 03/11/2005 08:35 PM 145 month.d File jic.d contains: module jic; private import std.string; char[] CallMe(char[] mon) { char[] mm = "CallMe " ~ mon; return(mm); } char[] CallMeToo(char[] mon) { char[] mm = "CallMeToo " ~ mon; return(mm); } while file month.d contains: import std.stdio; import jic; void main (char[][] args) { char[] d; writefln(jic.CallMe("Jan")); writefln(jic.CallMeToo("Feb")); } when I compile month.d, I get: 20:49:38.41>dmd month.d c:\dmd\bin\..\..\dm\bin\link.exe month,,,user32+kernel32/noi; OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved month.obj(month) Error 42: Symbol Undefined _D3jic6CallMeFAaZAa month.obj(month) Error 42: Symbol Undefined _D3jic9CallMeTooFAaZAa --- errorlevel 2 Huh?------------- subroutine.d ------------------- module subroutine; // module declaration here import std.string; // import here dance() { rock(); } rock() { std.string.WhatEver(); // or just call WhatEver(); } ------------- main.d ----------------------- import subroutine; // module name int main() { dance(); // or you could use subroutine.dance(); return 0; }
Mar 12 2005
On Sat, 12 Mar 2005 01:46:51 +0000 (UTC), jicman wrote:clayasaurus says...Either run dmd month.d jic.d or build month The reason is that "dmd month.d" will compile 'month.d' and then link 'month.obj'. You also need to compile 'jic'd' and link that in too. My 'build' utility will organize these dependencies for you. -- Derek Parnell Melbourne, Australia http://www.dsource.org/projects/build 12/03/2005 4:31:30 PMSo I have this in my directory: 03/11/2005 08:35 PM 236 jic.d 03/11/2005 08:35 PM 145 month.d File jic.d contains: module jic; private import std.string; char[] CallMe(char[] mon) { char[] mm = "CallMe " ~ mon; return(mm); } char[] CallMeToo(char[] mon) { char[] mm = "CallMeToo " ~ mon; return(mm); } while file month.d contains: import std.stdio; import jic; void main (char[][] args) { char[] d; writefln(jic.CallMe("Jan")); writefln(jic.CallMeToo("Feb")); } when I compile month.d, I get: 20:49:38.41>dmd month.d c:\dmd\bin\..\..\dm\bin\link.exe month,,,user32+kernel32/noi; OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved month.obj(month) Error 42: Symbol Undefined _D3jic6CallMeFAaZAa month.obj(month) Error 42: Symbol Undefined _D3jic9CallMeTooFAaZAa --- errorlevel 2 Huh?------------- subroutine.d ------------------- module subroutine; // module declaration here import std.string; // import here dance() { rock(); } rock() { std.string.WhatEver(); // or just call WhatEver(); } ------------- main.d ----------------------- import subroutine; // module name int main() { dance(); // or you could use subroutine.dance(); return 0; }
Mar 11 2005
On Sat, 12 Mar 2005 16:33:09 +1100, Derek Parnell wrote:On Sat, 12 Mar 2005 01:46:51 +0000 (UTC), jicman wrote:Ok, now that DMD has a lib pragma, you can also do this ... First create a library that contains jic.obj dmd -c jic lib -c jic jic,obj then add "pragma(lib "jic.lib") to month.d and run dmd month.d To create the month.exe -- Derek Parnell Melbourne, Australia 12/03/2005 4:56:30 PMclayasaurus says...Either run dmd month.d jic.d or build month The reason is that "dmd month.d" will compile 'month.d' and then link 'month.obj'. You also need to compile 'jic'd' and link that in too. My 'build' utility will organize these dependencies for you.So I have this in my directory: 03/11/2005 08:35 PM 236 jic.d 03/11/2005 08:35 PM 145 month.d File jic.d contains: module jic; private import std.string; char[] CallMe(char[] mon) { char[] mm = "CallMe " ~ mon; return(mm); } char[] CallMeToo(char[] mon) { char[] mm = "CallMeToo " ~ mon; return(mm); } while file month.d contains: import std.stdio; import jic; void main (char[][] args) { char[] d; writefln(jic.CallMe("Jan")); writefln(jic.CallMeToo("Feb")); } when I compile month.d, I get: 20:49:38.41>dmd month.d c:\dmd\bin\..\..\dm\bin\link.exe month,,,user32+kernel32/noi; OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved month.obj(month) Error 42: Symbol Undefined _D3jic6CallMeFAaZAa month.obj(month) Error 42: Symbol Undefined _D3jic9CallMeTooFAaZAa --- errorlevel 2 Huh?------------- subroutine.d ------------------- module subroutine; // module declaration here import std.string; // import here dance() { rock(); } rock() { std.string.WhatEver(); // or just call WhatEver(); } ------------- main.d ----------------------- import subroutine; // module name int main() { dance(); // or you could use subroutine.dance(); return 0; }
Mar 11 2005
Derek Parnell says...On Sat, 12 Mar 2005 01:46:51 +0000 (UTC), jicman wrote:Derek, this works... but thisclayasaurus says...Either run dmd month.d jic.dSo I have this in my directory: 03/11/2005 08:35 PM 236 jic.d 03/11/2005 08:35 PM 145 month.d File jic.d contains: module jic; private import std.string; char[] CallMe(char[] mon) { char[] mm = "CallMe " ~ mon; return(mm); } char[] CallMeToo(char[] mon) { char[] mm = "CallMeToo " ~ mon; return(mm); } while file month.d contains: import std.stdio; import jic; void main (char[][] args) { char[] d; writefln(jic.CallMe("Jan")); writefln(jic.CallMeToo("Feb")); } when I compile month.d, I get: 20:49:38.41>dmd month.d c:\dmd\bin\..\..\dm\bin\link.exe month,,,user32+kernel32/noi; OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved month.obj(month) Error 42: Symbol Undefined _D3jic6CallMeFAaZAa month.obj(month) Error 42: Symbol Undefined _D3jic9CallMeTooFAaZAa --- errorlevel 2 Huh?------------- subroutine.d ------------------- module subroutine; // module declaration here import std.string; // import here dance() { rock(); } rock() { std.string.WhatEver(); // or just call WhatEver(); } ------------- main.d ----------------------- import subroutine; // module name int main() { dance(); // or you could use subroutine.dance(); return 0; }build monthwith your 1.12 build for windows does not. I get, 8:00:20.96>build month c:\dmd\bin\..\..\dm\bin\link.exe month,month.exe,,user32+kernel32/noi; OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved month.obj(month) Error 42: Symbol Undefined _D3jic6CallMeFAaZAa month.obj(month) Error 42: Symbol Undefined _D3jic9CallMeTooFAaZAa --- errorlevel 2The reason is that "dmd month.d" will compile 'month.d' and then link 'month.obj'. You also need to compile 'jic'd' and link that in too. My 'build' utility will organize these dependencies for you.Well, it's not doing it. Also, I think I found a bug on it. But, explain to me why it's not working and I'll tell you the bug. ;-) josé
Mar 12 2005
On Sat, 12 Mar 2005 12:56:22 +0000 (UTC), jicman wrote:Derek Parnell says...Thanks for the feedback. This is what I tested (before writing my earlier note ) In the folder C:\TEMP I have two files - jic.d and month.d Here is a shot of my screen output ... ----------------------------- C:\TEMP>type jic.d module jic; private import std.string; char[] CallMe(char[] mon) { char[] mm = "CallMe " ~ mon; return(mm); } char[] CallMeToo(char[] mon) { char[] mm = "CallMeToo " ~ mon; return(mm); } C:\TEMP>type month.d import std.stdio; import jic; void main (char[][] args) { char[] d; writefln(jic.CallMe("Jan")); writefln(jic.CallMeToo("Feb")); } C:\TEMP>build month f:\dmd\bin\..\..\dm\bin\link.exe month+jic,month.exe,,user32+kernel32/noi; C:\TEMP>month CallMe Jan CallMeToo Feb C:\TEMP> ---------------------------- So all I can assume at this point is that we are testing with different source code files.On Sat, 12 Mar 2005 01:46:51 +0000 (UTC), jicman wrote:Derek, this works... but thisclayasaurus says...Either run dmd month.d jic.dSo I have this in my directory: 03/11/2005 08:35 PM 236 jic.d 03/11/2005 08:35 PM 145 month.d File jic.d contains: module jic; private import std.string; char[] CallMe(char[] mon) { char[] mm = "CallMe " ~ mon; return(mm); } char[] CallMeToo(char[] mon) { char[] mm = "CallMeToo " ~ mon; return(mm); } while file month.d contains: import std.stdio; import jic; void main (char[][] args) { char[] d; writefln(jic.CallMe("Jan")); writefln(jic.CallMeToo("Feb")); } when I compile month.d, I get: 20:49:38.41>dmd month.d c:\dmd\bin\..\..\dm\bin\link.exe month,,,user32+kernel32/noi; OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved month.obj(month) Error 42: Symbol Undefined _D3jic6CallMeFAaZAa month.obj(month) Error 42: Symbol Undefined _D3jic9CallMeTooFAaZAa --- errorlevel 2 Huh?------------- subroutine.d ------------------- module subroutine; // module declaration here import std.string; // import here dance() { rock(); } rock() { std.string.WhatEver(); // or just call WhatEver(); } ------------- main.d ----------------------- import subroutine; // module name int main() { dance(); // or you could use subroutine.dance(); return 0; }build monthwith your 1.12 build for windows does not. I get, 8:00:20.96>build month c:\dmd\bin\..\..\dm\bin\link.exe month,month.exe,,user32+kernel32/noi; OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved month.obj(month) Error 42: Symbol Undefined _D3jic6CallMeFAaZAa month.obj(month) Error 42: Symbol Undefined _D3jic9CallMeTooFAaZAa --- errorlevel 2I can't explain why it is not working at your site but is working at mine. Oh, it has a few mistakes remaining. I could tell you a few too actually. I'm planning to post an update tomorrow that corrects three that I know of, so I'd like to know if you have found another of my mistakes. -- Derek Parnell Melbourne, Australia 13/03/2005 12:26:55 AMThe reason is that "dmd month.d" will compile 'month.d' and then link 'month.obj'. You also need to compile 'jic'd' and link that in too. My 'build' utility will organize these dependencies for you.Well, it's not doing it. Also, I think I found a bug on it. But, explain to me why it's not working and I'll tell you the bug. ;-)
Mar 12 2005
Derek Parnell says...On Sat, 12 Mar 2005 12:56:22 +0000 (UTC), jicman wrote:No, it's the same source code. Do I have to install it? What I did was that I renamed build_win_1.12.exe to build.exe. Then I moved it to c:dmd\bin and typed build 8:50:02.71>build Path and Version : c:\dmd\bin\build.exe v1.12(387) Usage: build sourcefile [options objectfiles libraries] sourcefile D source file -v Verbose (passed through to D) -V Verbose (NOT passed through) -DCPATH<path> <path> is where the compiler has been installed. Only needed if the compiler is not in the system's PATH list. Used if you are testing an alternate version of the compiler. -CFPATH<path> <path> is where the D config file has been installed. -full Causes all source files, except ignored modules, to be compiled. -link Forces the linker to be called instead of the librarian. (Only needed if the source files do not contain main/WinMain) -nolink Ensures that the linker is not called. (Only needed if main/WinMain is found in the source files and you do NOT want an executable created.) -lib Forces the object files to be placed in a library. (Only needed if main/WinMain is found in the source files AND you want it in a library instead of an executable.) -nolib Ensures that the object files are not used to form a library. (Only needed if main/WinMain is not found in the source files and you do NOT want a library. -allobj Ensures that all object files are added to a library. (Normally only those in the same directory are added.) -nounittest Ensures that the compiler does not include any unit tests in the executable.) -cleanup Ensures that all object files created during the run are removed at the end of the run, plus other work files. -gui[:x.y] Forces a GUI application to be created. The optional :x.y can be used to build an application for a specific version of Windows. eg. -gui:4.0 (Only needed if WinMain is not found in the source files or if you wish to override the default Windows version) -test Does everything as normal except it displays the commands instead of running them. -R<y|n> Indicates whether to use a response file or command line arguments with the compiler tools. -Ry will cause a response to be used. -Rn will cause command line arguments to be used. -R will reverse the current usage. ** The default is to use a response file -X<module> Modules to ignore (eg. -Xmylib) -M<module> Modules to notice (eg. -Mphobos) -T~<targetname~> The name of the target file to create. Normally the target name istaken from the first or only name of the command line. -info Displays the version and path of the Build application [...] All other options, objectfiles and libraries are passed to the compiler *Note, you can specify all or any command line value in a response file. Each value appears in its own line in the response file and you reference this file by prefixing its name with an ' ' symbol on the command line. Example: build final where a file called 'final.brf' contains the command line values (including other response file references) If the response file reference is just a single ' ' then build looks for a file called 'build.brf' By the way, great utility, though it's not working for me. :-(. Ok, here is the problem. Say you tried to compile the same month.d with dmd month.d which is not going to work, but it's going to create an executable (which does not work) anyway, and then you type build month.d build replies with, 8:56:36.25>build month.d Files are up to date, no compilation required. Which is not really true, since month.exe gives you an Windows error. What version of link are you running? Here is mine: 9:01:28.78>link OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved OPTLINK : Warning 23: No Stack OPTLINK : Warning 134: No Start AddressDerek Parnell says...Thanks for the feedback. This is what I tested (before writing my earlier note ) In the folder C:\TEMP I have two files - jic.d and month.d Here is a shot of my screen output ... ----------------------------- C:\TEMP>type jic.d module jic; private import std.string; char[] CallMe(char[] mon) { char[] mm = "CallMe " ~ mon; return(mm); } char[] CallMeToo(char[] mon) { char[] mm = "CallMeToo " ~ mon; return(mm); } C:\TEMP>type month.d import std.stdio; import jic; void main (char[][] args) { char[] d; writefln(jic.CallMe("Jan")); writefln(jic.CallMeToo("Feb")); } C:\TEMP>build month f:\dmd\bin\..\..\dm\bin\link.exe month+jic,month.exe,,user32+kernel32/noi; C:\TEMP>month CallMe Jan CallMeToo Feb C:\TEMP> ---------------------------- So all I can assume at this point is that we are testing with different source code files.On Sat, 12 Mar 2005 01:46:51 +0000 (UTC), jicman wrote:Derek, this works... but thisclayasaurus says...Either run dmd month.d jic.dSo I have this in my directory: 03/11/2005 08:35 PM 236 jic.d 03/11/2005 08:35 PM 145 month.d File jic.d contains: module jic; private import std.string; char[] CallMe(char[] mon) { char[] mm = "CallMe " ~ mon; return(mm); } char[] CallMeToo(char[] mon) { char[] mm = "CallMeToo " ~ mon; return(mm); } while file month.d contains: import std.stdio; import jic; void main (char[][] args) { char[] d; writefln(jic.CallMe("Jan")); writefln(jic.CallMeToo("Feb")); } when I compile month.d, I get: 20:49:38.41>dmd month.d c:\dmd\bin\..\..\dm\bin\link.exe month,,,user32+kernel32/noi; OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved month.obj(month) Error 42: Symbol Undefined _D3jic6CallMeFAaZAa month.obj(month) Error 42: Symbol Undefined _D3jic9CallMeTooFAaZAa --- errorlevel 2 Huh?------------- subroutine.d ------------------- module subroutine; // module declaration here import std.string; // import here dance() { rock(); } rock() { std.string.WhatEver(); // or just call WhatEver(); } ------------- main.d ----------------------- import subroutine; // module name int main() { dance(); // or you could use subroutine.dance(); return 0; }build monthwith your 1.12 build for windows does not. I get, 8:00:20.96>build month c:\dmd\bin\..\..\dm\bin\link.exe month,month.exe,,user32+kernel32/noi; OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved month.obj(month) Error 42: Symbol Undefined _D3jic6CallMeFAaZAa month.obj(month) Error 42: Symbol Undefined _D3jic9CallMeTooFAaZAa --- errorlevel 2I can't explain why it is not working at your site but is working at mine. Oh, it has a few mistakes remaining. I could tell you a few too actually. I'm planning to post an update tomorrow that corrects three that I know of, so I'd like to know if you have found another of my mistakes.thanks.
Mar 12 2005