Page 1 of 3

doskitXPx86

Posted: 01 Jun 2011 01:35
by Ed Dyreen
[revised 2015.12.02]

doskit for WindowsXP - 32bit versions - x86 architectures dutch, english ( experimental ), international ( experimental ).
A collection of tools and a functional library for people who like DOS script programming.
Debug builds should be run in VM :!:

The macro:
Wikipedia wrote:A macro (from the Greek μακρό for "big" or "far") in computer science is a rule or pattern that specifies how a certain input sequence (often a sequence of characters) should be mapped to an output sequence (also often a sequence of characters) according to a defined procedure. The mapping process that instantiates (transforms) a macro into a specific output sequence is known as macro expansion.

The term is used to make available to the programmer, a sequence of computing instructions as a single program statement, making the programming task less tedious and less error-prone. (Thus, they are called "macros" because a big block of code can be expanded from a small sequence of characters). Macros often allow positional or keyword parameters that dictate what the conditional assembler program generates and have been used to create entire programs or program suites according to such variables as operating system, platform or other factors.
dbenham wrote:Here is a shocking demonstration of the performance benefits of the macros. I ran the original batch file at the top of this thread on a shared network drive at my workplace. :shock: Below is the timing portion of the output:

Code: Select all

num2Hex macro time x 255 = 00:00:00.79
         call time x 255 = 00:00:25.81
        performance gain = 3267.09%

toLower macro time x 255 = 00:00:00.80
         call time x 255 = 00:00:30.09
        performance gain = 3761.25%

strLen  macro time x 255 = 00:00:00.79
         call time x 255 = 00:00:25.16
        performance gain = 3184.81%

Average performance gain = 3404.38%
tooComplex wrote:TrimLH_ algorithm by aGerman, compressed to 415 bytes by tooComplex, definition stage:

Code: Select all

2>%_Dcon% ( %macroStart_% enableDelayedExpansion )
:: (
%=   =%set ^"!$defines!=!vsDelim_!(^
!==^^^!^
%=      =%set ?=^&set ?=^^^!%%~a^^^!^&^&(^
%=         =%set f=^&set f=%%~b^|^|set f= %$n1c%
%=         =%set/ac=4096^&!forC_! (1,1,12) do set f=^^^!f^^^!^^^!f^^^!%$n1c%
%=         =%!forC_! (1,1,13) do if defined ? !forQ_! (^^^!c^^^!) do (^
%=            =%if "^!?:~0,%%?^!"=="^!f:~-%%?^!" set ?=^^^!?:~%%?^^^!%$n1c%
%=            =%if "^!?:~-%%?^!"=="^!f:~-%%?^!" set ?=^^^!?:~0,-%%?^^^!%$n1c%
%=            =%set/ac/=2^
%=         =%)%$n1c%
%=         =%set %%~a=^^^!?^^^!^
%=      =%)^
!==^^^!^
%=   =%)else set *="
:: )
2>%_Dcon% %macroEnd%
%endlocalR_% (
%$%
)
Memory expansion ( chcp 850, dutch ):

Code: Select all

trimLH_=for %? in (1,2) do if %?==2 (set ?=&for %? in (!*!) do set ?=!?!ª%?
if !?!.==. set ?="")&for /f "tokens=1-26delims=ª" %a in ("!?!") do (set ?=&set ?=!%~a!&&(set f=&set f=%~b||set f=
set/ac=4096&for /l %! in (1,1,12) do set f=!f!!f!
for /l %! in (1,1,13) do if defined ? for %? in (!c!) do (if "!?:~0,%?!"=="!f:~-%?!" set ?=!?:~%?!
if "!?:~-%?!"=="!f:~-%?!" set ?=!?:~0,-%?!
set/ac/=2)
set %~a=!?!))else set *=
Command expansion:

Code: Select all

setlocal enableDelayedExpansion
:: (
   set "$=      C:\This work^^ s^!\This work^^ s^!.TMP     "
   ::
   echo. &( %necho#$_% $ ) &( %trimLH_% $ ) &( %necho#$_% $ )

   set "$=   TABBED   "
   ::
   echo. &( %necho#$_% $ ) &( %trimLH_% $, "   " ) &( %necho#$_% $ )
:: )
endlocal
RunTime:

Code: Select all

$: '      C:\This work^ s!\This work^ s!.TMP     '
$: 'C:\This work^ s!\This work^ s!.TMP'

$: '  TABBED  '
$: 'TABBED'
Speeds vary with memory usage.
Post subject: Why does SET performance degrade as environment size grows?
http://www.dostips.com/forum/viewtopic.php?f=3&t=2597&p=11829&hilit=memory+linear#p11829

Objects and methods ( delayed ):

Code: Select all

setlocal enableDelayedExpansion &rem ( %debug.on_% "!$defines!" )
:: (
   :: relative
   ( %oFile_% $, "This work^^ s^!.TMP", 1 )                          ||( %assertFail_% )
   ::
   ( %$.touch% 1 )                                                   ||( %assertFail_% )
   ( %$.move% "This_work^^ s^!.TMP", 1 )                             ||( %assertFail_% )
   ( %$.link% 1 )                                                    ||( %assertFail_% )
   ( %$.delete% 1 )                                                  ||( %assertFail_% )
   ( %$.exist% )                                                     &&( %assertFail_% )

   :: UNC
   ( %oFile_% $, "\\192.168.1.10\ed-serv-0\This work^^ s^!.TMP", 1 ) ||( %assertFail_% )
   ::
   ( %$.touch% 1 )                                                   ||( %assertFail_% )
   ( %$.move% "\\192.168.1.10\ed-serv-0\This_work^^ s^!.TMP", 1 )    ||( %assertFail_% )
   ( %$.link% 1 )                                                    ||( %assertFail_% )
   ( %$.delete% 1 )                                                  ||( %assertFail_% )
   ( %$.exist% )                                                     &&( %assertFail_% )

   :: absolute
   ( %oFile_% $, "C:\This work^^ s^!.TMP", 1 )                       ||( %assertFail_% )
   ::
   ( %$.touch% 1 )                                                   ||( %assertFail_% )
   ( %$.move% "C:\This_work^^ s^!.TMP", 1 )                          ||( %assertFail_% )
   ( %$.link% 1 )                                                    ||( %assertFail_% )
   ( %$.delete% 1 )                                                  ||( %assertFail_% )
   ( %$.exist% )                                                     &&( %assertFail_% )
:: )
endlocal

Code: Select all

» oFile_
« oFile_ [ok:loaded]

oFile_($;This work^ s!.TMP;1)
declareLE_($;file)
 $fullPathFile: 'F:\ED\VIP\PROJ\dev\doskit\doskitXP32x86 v20121008\Hello world!\This work^ s!.TMP'
 $fullPath: 'F:\ED\VIP\PROJ\dev\doskit\doskitXP32x86 v20121008\Hello world !'
 $path: 'Hello world !'
 $drive: 'F:'
 $file: 'This work^ s!.TMP'
 $fileName: 'This work^ s!'
 $fileExtension: 'TMP'
 $timeStamp: ''
 $attributes: ''
 $fileSize: ''
 $method: 'exist,delete,touch,move,copy,link'
[ok:0]
[ok:0]

$.touch(F:\ED\VIP\PROJ\dev\doskit\doskitXP32x86 v20121008\Hello world !\This work^ s!.TMP;1;)
 drive: 'F:'
 path : 'ED\VIP\PROJ\dev\doskit\doskitXP32x86 v20121008\Hello world !'
 file : 'This work^ s!.TMP'
[ok:0]

$.move(1)
 ← 'F:\ED\VIP\PROJ\dev\doskit\doskitXP32x86 v20121008\Hello world !\This work^s!.TMP'
 → 'F:\ED\VIP\PROJ\dev\doskit\doskitXP32x86 v20121008\Hello world !\This_work^s!.TMP'
[ok:0]

$.link(F:\ED\VIP\PROJ\dev\doskit\doskitXP32x86 v20121008\Hello world !\This_work^ s!.TMP;1)
 $attributes: '--a------'
 $timeStamp : '10/10/2012 00:46'
 $fileSize  : '0'
[ok:0]

$.delete(F:\ED\VIP\PROJ\dev\doskit\doskitXP32x86 v20121008\Hello world !\This_work^ s!.TMP;1)
[ok:0]

$.exist(F:\ED\VIP\PROJ\dev\doskit\doskitXP32x86 v20121008\Hello world !\This_work^ s!.TMP;0)
[error:17] object not physicall !

oFile_($;\\192.168.1.10\ed-serv-0\This work^ s!.TMP;1)
declareLE_($;file)
 $fullPathFile: '\\192.168.1.10\ed-serv-0\This work^ s!.TMP'
 $fullPath: '\\192.168.1.10\ed-serv-0'
 $path: ''
 $drive: '\\192.168.1.10\ed-serv-0'
 $file: 'This work^ s!.TMP'
 $fileName: 'This work^ s!'
 $fileExtension: 'TMP'
 $timeStamp: ''
 $attributes: ''
 $fileSize: ''
 $method: 'exist,delete,touch,move,copy,link'
[ok:0]
[ok:0]

$.touch(\\192.168.1.10\ed-serv-0\This work^ s!.TMP;1;)
 drive: '\\192.168.1.10\ed-serv-0'
 path : ''
 file : 'This work^ s!.TMP'
[ok:0]

$.move(1)
 ← '\\192.168.1.10\ed-serv-0\This work^ s!.TMP'
 → '\\192.168.1.10\ed-serv-0\This_work^ s!.TMP'
[ok:0]

$.link(\\192.168.1.10\ed-serv-0\This_work^ s!.TMP;1)
 $attributes: '--a------'
 $timeStamp : '10/10/2012 00:46'
 $fileSize  : '0'
[ok:0]

$.delete(\\192.168.1.10\ed-serv-0\This_work^ s!.TMP;1)
[ok:0]

$.exist(\\192.168.1.10\ed-serv-0\This_work^ s!.TMP;0)
[error:17] object not physicall !

oFile_($;C:\This work^ s!.TMP;1)
declareLE_($;file)
 $fullPathFile: 'C:\This work^ s!.TMP'
 $fullPath: 'C:'
 $path: ''
 $drive: 'C:'
 $file: 'This work^ s!.TMP'
 $fileName: 'This work^ s!'
 $fileExtension: 'TMP'
 $timeStamp: ''
 $attributes: ''
 $fileSize: ''
 $method: 'exist,delete,touch,move,copy,link'
[ok:0]
[ok:0]

$.touch(C:\This work^ s!.TMP;1;)
 drive: 'C:'
 path : ''
 file : 'This work^ s!.TMP'
[ok:0]

$.move(1)
 ← 'C:\This work^ s!.TMP'
 → 'C:\This_work^ s!.TMP'
[ok:0]

$.link(C:\This_work^ s!.TMP;1)
 $attributes: '--a------'
 $timeStamp : '09/10/2012 18:25'
 $fileSize  : '0'
[ok:0]

$.delete(C:\This_work^ s!.TMP;1)
[ok:0]

$.exist(C:\This_work^ s!.TMP;0)
[error:17] object not physicall !
endoftest Druk op een toets om door te gaan. . .
Objects and methods:

The new_ command can declare an object even if delayedExpansion is disabled.

Code: Select all

( %new_% oFile_, $, "This work^^ s^!.TMP", 1 )
Object attributes are private, unless they start with a '$' sign. To acces on object's attribute nameOfObject.attribute.

Chaining &&redirection>

Code: Select all

>nul ( %$.move% "C:\" ) &&echo. succes ||echo. failed
Symbols:
directive = @
prefetch = macroName_ ( expects arguments )
postfetch = _macroName ( expects header )
bothfetch = _macroName_ ( expects both header & arguments )
regular escape = \
internal replace = ###
function scope = ?,º,¤,*, ~
global variable = §
variable global (preserved for user) = $

Variable names:
Prefetching your variable names with $ is not required, but advised. You may also use $ itself as variable name.

Forbidden variable names:
-forbidden chars: <SPACE>, <TAB>, <COMMA>, <%>, <?>, <^>, <!>, <">, <<> and <>>.

The delimiter:
Supports byRef and byVal.

Code: Select all

( %function_% $var, "!$var!", "%var%", "string with special characters "", %%, =, ?, ^^, ^!, \* and spaces." )
( %function_% byRef, byVal, byVal, byVal )
Input is parsed in delayed expansion. This allows for delayed variables. When passing variables byValue the normal escaping rules apply, except for * which has to be escaped with a regular escape \*.

Using functions:
To get the usage information from a function, look it up in doskit.NFO. You can also call it with illegal parameters, it will then display detail information about it's usage. It's help is also displayed when it encounters any fatal error.

Code: Select all

My purpose.

My details.

use: ( %function_% #arg1, $arg2,"", $arg3,$var,"value" )
ret: void
err: 0 for succes, 1 for error
At the start:
    #: expects a byVal.
    $: accepts both byRef or byVal.
At the end: value is optional or default
    "": value is set to nothing if argument was not provided.
    "defaultValue": value is set to "defaultValue" if an argument was not provided.

#arg1 Expects a byVal, since no default value is set ( not even an empty string ) it becomes a required value that will signal illegal parameters if it's argument is missing.
$arg2 Accepts both byRef and byVal, if no value is provided it is set to empty string, making it an optional argument.
$arg3 will be set to the value the user provided, if no value is provided $arg3 will be set to $var, if $var is empty $arg3 will be set to "value".

Silent installation and running the demo:
Run 'silentSetup.CMD' or 'Hello world !.CMD' to install silently to these locations:

Code: Select all

reg: 'HKLM\SOFTWARE\ED'
dir: '!systemDrive!\ED\doskitXP32x86 !$version!'
Installing new versions may introduce script breaking changes, you may want to backup any previous installations first.

Code: Select all

supported platforms: WindowsXP - 32bit versions - x86 architectures
language dependent : sometimes
languages          : primary dutch, secondary english
programmer         : tooComplex
special thanks to  : admin, jeb, dBenham, aGerman from www.DOSTips.COM, the DOSTips team and members
includes           :
-Hello World !.CMD   My first 'Hello World !' doskit script
-doskit.CMD          macro definition library
-function.CMD        function support library
-7za.EXE             extendControl archives            win32 v4.65
-choice.COM          controlInteractiveUser            win32 XP Resource Kit
-cmdow.EXE           controlGUI                        win32 NT4/2000/XP v1.4.3
-csound.COM          controlInternalSpeaker            win32 v2.2
-madplay.EXE         controlExternalSpeaker            win32 v0.15.2 (beta)
-mode.COM            controlSystemDevices              win32 XP Resource Kit
-stackey.COM         addsKeyStuffin                    win32 v4.0
-resChangeCon.EXE    Resolution Changer                win32 v3.12
-regFind.EXE         Registry Find Tool                win32 v5.00.1980.1
-eval.EXE            mathematical expression evaluator win32 v1.35.x86
-setACL.EXE          adds dir/file, registry, service, win32 v2.0.3.0.x86
                     printer and Network share
                     AccesControlManagement
-madplay.MP3         by tooComplex
Some anti-virus software vendors now classify cmdow.exe as a hacking tool because it can hide windows.
A hacking tool is NOT a virus.


For the Standard Shield provider (on-access scanning):
Left click the 'a' blue icon, click on the provider icon at left and then Customize.
Go to Advanced tab and click on Add button...

For the other providers (on-demand scanning):
Right click the 'a' blue icon, click Program Settings.
Go to Exclusions tab and click on Add button...

You can use wildcards like * and ?.
But be careful, you should 'exclude' that many files that let your system in danger.

The only thing the setup does, is proces the parameters from silentsetup or ask the user, where to install...
Then run Hello world !.CMD from there as demo.

You can download the project releases here :arrow:
http://ed-dyreen.ddns.net/public/
more help: Batch "macros" with arguments :arrow:
viewtopic.php?f=3&t=1827&start=0

Manual installation and uninstall :
Run 'setup.CMD' to install manually or uninstall.

Debug and feedback:

Code: Select all

( %Debug.on_% function )
Which label and error you get, and where in which file ??!
Feel free to post ideas, suggestions, updates

Recently added/changed:

Code: Select all

07 Apr 2012 :§autoLogon_ ( #user,[$user.logon.name] )
02 Feb 2012 assign methods to objects using masked-macros instead of function calls ( improves object declaration times )
05 Dec 2011 add parsing support for arguments containing special character; [*]
05 Dec 2011 add parsing support for arguments containing special character; [?]
06 Dec 2011 disable both path and pathext to prevent autofilescan ( improves overall execution times )
08 Dec 2011 user request: allow doskit to load, even with missing source-files ( effectively removes all file checks ! )
12 Oct 2012 'iTime' intenationalization, 24hourFormat or PAMhourFormat defines objects.
Testing:

Code: Select all

12 Oct 2012 intenationalization, OS Language defines constants.
2015 03 24: macros no longer need to be loaded ( now using a filePointer header ).
Ideas:

Code: Select all

05 Dec 2011 add parsing support for arguments containing special characters; [=,:]
:D Special thanks to:
@Admin as host
@jeb as contributor
-linefeed to macros, he made it possible to build macros in a convenient and organized way.
_http://www.dostips.com/forum/viewtopic.php?f=3&t=1827&start=0&hilit=linefeed+macro
-macros with parameters appended.
_http://www.dostips.com/forum/viewtopic.php?f=3&t=2518&start=15&hilit=parameters+appended
-88=16k memory combo (final, cannot be nested !)(debug).
_http://www.dostips.com/forum/viewtopic.php?f=3&t=2650&start=0&hilit=memory+combo
@dBenham as contributor
-pushing linefeeds and carriage returns over endlocal.
_http://www.dostips.com/forum/viewtopic.php?f=3&t=1839&hilit=return+any
@aGerman as contributor
-a working way to exit macros, setting the errorlevel and allowing both redirection and chaining simultaneously.
_http://www.dostips.com/forum/viewtopic.php?f=3&t=2465&start=0&hilit=chaining
@tooComplex as developer
-a working way of passing arguments and returning variables to macros.
_http://www.dostips.com/forum/viewtopic.php?f=3&t=1817&start=0
-a working way to allow redirection or chaining.
_http://www.dostips.com/forum/viewtopic.php?f=3&t=2465&start=0&hilit=chaining
-88=16k memory combo (final, cannot be nested !).
_http://www.dostips.com/forum/viewtopic.php?f=3&t=2650&start=0&hilit=memory+combo
-pushing linefeeds and carriage returns over endlocal (optimize).
_http://www.dostips.com/forum/viewtopic.php?f=3&t=1839&hilit=return+any
The experts team and members

For geeks:

Memory limitations:
Theoretical 8192, usable 8192-10, pushover endlocal practical 8192-+-1965 ( includes variable name ! )

Variable return limitations using endlocal_:

Code: Select all

( %endlocal_% var1, var2, etc.. )
-up to a combined practical 8192-+-1965 ( includes variable name ! )
-no ( $cr, $lf ).

Complex variable return limitations using advancedRF:

Code: Select all

set $rA=var1, var2, etc..
( %advancedRF% )
-up to 10 variables each limited to practical 8192-+-1965 ( includes variable name ! ).
-supports ( $cr, $lf ).

Image

Image

Image

The NFO file is included in the installer but can also be found inside the doskit folder after successful installation and loading of the demo 'Hello world !.CMD'

Thanks to Jeb and Aacini, the console will soon support colorText :D :D :D

Re: DOS-KIT

Posted: 01 Jun 2011 01:42
by orange_batch
Ok, but documentation please. I don't think anybody wants to figure out what this does on their own.

Re: DOS-KIT

Posted: 03 Jun 2011 01:35
by Cleptography
Good god man this took me a min to get through. Nice work though.

Re: DOS-KIT

Posted: 03 Jun 2011 01:56
by Cleptography
You did a good job.

Re: DOS-KIT

Posted: 04 Jun 2011 17:32
by Cleptography
Good now doc it so we can build a hell of a library.

Re: DOS-KIT

Posted: 23 Jun 2011 19:14
by dbenham
From the original post:
Ed Dyreen wrote:When I am finished i can do things like:

Code: Select all

Select all
    @Declare.Object ( $Hosts AsFile "C:\HostFile" )
    @Attach.Object ( $Host.File )
    @Move.Object ( $Host.File, "C:\backup\HostFile" )
    @Delete.Object ( $Host.File )
    @Undeclare.Object ( $Host.File )


Do you actually have the above syntax working :?: I'm at a complete loss as to how you might do that :?
I'm not so much interested in the object nature as I am the syntax of calling a macro without needing additional code after the (arguments).

Dave Benham

Re: DOS-KIT

Posted: 23 Jun 2011 20:21
by Cleptography
[edit by Ed Dyreen 03 Feb 2012] Removed link, post locked

dbenham wrote:From the original post:
Ed Dyreen wrote:When I am finished i can do things like:

Code: Select all

Select all
    @Declare.Object ( $Hosts AsFile "C:\HostFile" )
    @Attach.Object ( $Host.File )
    @Move.Object ( $Host.File, "C:\backup\HostFile" )
    @Delete.Object ( $Host.File )
    @Undeclare.Object ( $Host.File )


Do you actually have the above syntax working :?: I'm at a complete loss as to how you might do that :?
I'm not so much interested in the object nature as I am the syntax of calling a macro without needing additional code after the (arguments).

Dave Benham

Dave why don't you go take a look over at http://**removed**.com and take a look at the projects uder development. Ed is unstoppable.

Re: DOS-KIT

Posted: 01 Jul 2011 15:46
by Ed Dyreen
[edit 18 Jan 2012] This issue was fixed by jeb, you no longer need to take this into account !

@dave
Do you actually have the above syntax working :?: I'm at a complete loss as to how you might do that :?
I'm not so much interested in the object nature as I am the syntax of calling a macro without needing additional code after the (arguments).
the correct code is:

Code: Select all

( %@macro% args )
I no longer update this page, maybe I should remove it, but I am still not 100% sure cleo will keep his site up. That's why the page is also here at DosTips. If cleo manages to keep his site up for over 6months, I will remove this page.

Re: DOS-KIT

Posted: 01 Jul 2011 16:10
by Cleptography
Yes Ed I am keeping head count on the forum. I told you last time you bastard I would keep it up. Just for you. :lol:
I have updated your packages as soon as I see them which is usually within a couple hrs. from post.

Re: DOS-KIT

Posted: 05 Sep 2011 08:46
by OJBakker
[edit by Ed Dyreen on 18 Jan 2012] Removed outdated link !

Thanks for posting
Something new to play with...
Maybe someday I will understand your code, it surely looks impressive!

The link you posted does not work, just redirects to the Mediafire homepage.
The correct link for your mediafire folder is http://**removed**.com

OJB

Re: DOS-KIT

Posted: 16 Nov 2011 12:33
by Ed Dyreen
'
Finally on air :mrgreen:

We start with funny scripts, but eventually we move on, click when ur ready to learn something new :)

Re: DOS-KIT

Posted: 16 Nov 2011 19:09
by Rileyh
How in god's name do you manage to get cmd to recognize the macro syntax :!: :shock:
I am at a complete loss to understand that.
I have tried and tried and TRIED to get my batch files to understand different syntax and yet it does not work!
Please could you explain how.

Regards,
Rileyh

Re: DOS-KIT

Posted: 16 Nov 2011 19:52
by Ed Dyreen
[note 11 Feb 2012] this example is outdated !

Download location was moved, mediafire informed me my browser was too old,
I informed them their service was too new, and left !
http://www.ed-dyreen.com/DOS-KIT/

New object available , 'Share' ( for workstations )

Code: Select all

( %oShare.declare_% $ed-serv, "ed-serv-1", "ed-serv-0", "", "", "", 1 )
( %$ed-serv.connect% 1, "y:", ED, $passw )
result

Code: Select all

 >> _oShare.declare
 << _oShare.declare [OK]

 ºoShare.declare: '$ed-serv'
 _Obj.declaredL: '$ed-serv'
  $ed-serv: ''
  $0: 'share'
  $host: 'ed-serv-1'
  $share: 'ed-serv-0'
  $IP: ''
  $drive: ''
  $path: '\\ed-serv-1\ed-serv-0'
 [ok:0]
 [ok:0]

 $ed-serv.connect: '\\ed-serv-1\ed-serv-0'
  $path : '\\192.168.1.11\ed-serv-0'
  $login: 'ED'
  $passw: 'implicit'
  $drive: 'y:'
 [ok:0]
 endoftest Druk op een toets om door te gaan. . .
Hostname is resolved before connection attempt.

Re: DOS-KIT

Posted: 08 Dec 2011 03:18
by jeb
Hi Ed,
Ed Dyreen wrote:I don't trust this NEW code, it will be buggy

My virus scanner doesn't trust your code too :!:

You should recreate it, best without .EXE .CAB or other suspicious files

jeb

Re: DOS-KIT

Posted: 08 Dec 2011 14:55
by Ed Dyreen
'
@Jeb, the virus-scanner doesn't trust one of the files that is included.
If you would simply unpack the archive you would have noticed that your AV is warning you of the presence of a hack-tool, either you disable hack-tool alerts or you let your av remove the hack-tool. The latter results in the loss of all functionality depending on it. However, I will remove the file checks, so the library won't complain. :)
Jeb wrote:You should recreate it, best without .EXE .CAB or other suspicious files
I have to include it, I use it's functionality continiously... What else can I do to convince u, cmdow is SAFE :|
http://www.commandline.co.uk/cmdow/