Skip to content
⌘ NSIS Forum Archive

Check a string for the letters 'quake2'

11 posts

Afrow UK#

Check a string for the letters 'quake2'

Is it possible to check whether 'quake2' is in $EXEDIR, or in any variable?

Right now I have this:

ReadINIStr $1 "$TEMP\map-compiler_settings.ini" "Field 7" "State"
StrCmp "$1" "C:\quake2" DirOk
StrCmp "$1" "C:\quake2\" DirOk
StrCmp "$1" "D:\quake2" DirOk
StrCmp "$1" "D:\quake2\" DirOk
StrCmp "$1" "E:\quake2" DirOk
StrCmp "$1" "E:\quake2\" DirOk

StrCmp "$1" "C:\games\quake2" DirOk
StrCmp "$1" "C:\games\quake2\" DirOk
StrCmp "$1" "D:\games\quake2" DirOk
StrCmp "$1" "D:\games\quake2\" DirOk
StrCmp "$1" "E:\games\quake2" DirOk
StrCmp "$1" "E:\games\quake2\" DirOk

StrCmp "$1" "$PROGRAMFILES\quake2" DirOk

MessageBox MB_OK|MB_ICONEXCLAMATION \
"Your current Quake2 directory doesn't contain the letters 'quake2'.$\n \
This will greatly affect Map-Compiling.$\n$\n \
Please change your Quake2 directory structure so that \
it is something like: C:\quake2 or D:\games\quake2.$\n\
If you don't use Quake2, but instead use the Q2Demo or some other \
Quake2 modification, then you will still need to make a new Quake2 \
directory.$\n$\nRead the readme ID: Directory Structures for more \
information."
DirOk:
But it isn't very sufficiant, since the user may have his quake2 directory in e.g. C:\mygames\quake2

Thanks for any help

-Stuart
Sunjammer#
More specifically there is a set of useful string related functions in the archive here. The particular function that I think Joost is referring to is StrStr which was actually taken from Appendix B of the NSIS documentation!
Afrow UK#
I have another part to my program that I can't do...

The user enters a path line...
C:\program files\dday

I need to rename 'dday' to 'quake2' thats easy.

After installation, I need it to rename it back to dday...
C:\program files\quake2 -> C:\program files\dday

Note that the user may enter anything as the path. I used C:\program files\dday as an example.

How can this be done?

-Stuart
kichik#
Write whatever you have changed to the registry, an INI file or just a regular file and read that file/registry key when you finish installation. If it's in the same installer you can also save that in a variable.
Afrow UK#
I shall explain in more detail.

The user enters the target directory for their quake2 game, which in one case may be...
C:\games\q2demo

To compile maps, the q2demo directory must be 'quake2' not 'q2demo'
I need it to rename the 'q2demo' directory to 'quake2'
When it has finished, I need to rename C:\games\quake2 back to C:\games\q2demo, so that the user knows his q2demo still exists.

The user may not enter C:\games\q2demo
He may enter C:\games\dday, C:\program files\q2demo, C:\program files\dday or even C:\007q2


The reason I don't know how to do this is because

1. First of all $1 is the quake2 directory that the user has entered
2. It gets renamed... e.g C:\games\q2demo -> C:\games\quake2
3. After that I get stuck. I can't rename it back because it's not C:\games\q2demo anymore, but its now C:\games\quake2
I can't do a Rename command, because I don't know what the renamed directory structure is. It could be apsolutly anything.

Is that enough detail to show you my problem?

-Stuart
Afrow UK#
Yes, thats what have done.

$1 = eg. C:\games\q2demo
Rename $1 quake2
C:\games\q2demo is now C:\games\quake2

After install...
Then what!!

I need to get the q2demo bit of it (last piece after the \) and then I can rename