txtScriptSource

> WinExplorer by Dexter

If you use WinExplorer and want to donate, click the link that is on the "About" screen in WinExplorer.

Thank you for your support.

A lot of people are having problems after upgrading to Windows ME, Windows 2000, XP, and IE6.
If you get "OBJECT Expected on line 1" or "Line too long on line 1", or other strange messages when you start WinExplorer, here is the fix:
For WinExplorer 4.7 and below:
Run regedit.exe and delete the following key:
"HKEY_CURRENT_USER\Software\Dream Company"
For WinExplorer 4.8 and above:
Run regedit.exe and delete the following keys:
"HKEY_CURRENT_USER\Software\Altium (Dream VCL)"
This will fix the problem
You should only have to delete the key one time.
WinExplorer will rebuild the key the next time you run it.

Intro
Getting Started
System Requirements
Trouble Shooting
Batch Files
Simple XPL Files
Using VB and Java Script in WinExplorer
VB and Java Script Basics
Contacting the Author
WinExplorer History

WinExplorer is a Win32 GUI application designed to communicate with a wide variety of smartcards.

It's intended purpose is to give hobbyists and professionals a powerful tool for programming smartcards using low cost interfaces.
It is also a great way to learn about smartcards, VBScript and JavaScript programming.

WinExplorer will work on any speed machine, you DO NOT need to slow down the CPU to use this program.

To use WinExplorer, you will need a Phoenix type interface.
A Phoenix interface is a simple device that plugs into a serial port and uses the RTS line to reset the card.
Usually the interface is clocked with a standard color burst crystal (3.579545 MHz), or a EXO-3C+ oscillator chip programmed for 3.579545 MHz.
Every byte sent to the card is echoed back to the computer by the interface due to the way it's designed.
If your interface needs drivers, and/or contains a CPU, it's probably NOT Phoenix compatible.
WinExplorer can use several different script formats to direct it's interaction with a smartcard.
Supported formats are:

- Simple scripts .xpl

- VB Script .xvb

- Java Script .xjs

Batch execution of scripts is also supported.
Please look at the example files that are included to understand the formats of the different files.

WinExplorer is written in Borland C++ Builder 5.0

The Inspiration for WinExplorer comes from
"Card Explorer" by TheBlob a.k.a. Chris Coe.

Getting Started

Run the program WinExplorer.exe
Open a Script file (.xpl, .xvb, .xjs), or a WinExplorer Batch file (.xpb)
Then Execute Script or Execute batch.
You can edit batch & script files, then save them.

System Requirements:

Windows 95/98/NT/Windows 2000.
Note: If you are having problems with button graphics not being visible,
or other menu/button problems, the file you need to update is "comctl32.dll"
which is located in your windows\system dir.

The easiest fix is to install Microsoft Internet Explorer 5.x.
If you don't want to install IE5, then get the latest comctl32.dll file from here:
http://www.microsoft.com/msdownload/ieplatform/ie/comctrlx86.asp
For more info read:
http://support.microsoft.com/support/kb/articles/Q186/1/76.ASP

The Microsoft Script Control.
The script control can be downloaded from:
http://msdn.microsoft.com/scripting/scriptcontrol/x86/sct10en.exe

A serial port.
A Phoenix compatible interface.

Trouble Shooting

WinExplorer will not even start up without installing the Microsoft Script Control.
If you are getting the following message:
This Version of WinExplorer will not run without installing the Microsoft Script Control.
Please read the file "readme.txt" or "WinExplorer.htm" for information on how to
obtain and install the Script Control, and additional files that might be required for this application to run.

You did not install the script control file sct10en.exe. The script control can be downloaded from:
http://msdn.microsoft.com/scripting/scriptcontrol/x86/sct10en.exe
If WinExplorer starts up but you are having problems running a VB or Java Script,
please read this section: Using VB and Java Script in WinExplorer

###
Common Error Messages and what to do about them.

#### Can't initialize port com x:

> This problem occurs if you have the com port in use by another program or device. A big problem with programs written to run in DOS is that they leave the port open even after the program has exited. Do not run any DOS apps that use the com port prior to running WinExplorer. If you do get a hung port, you have to reboot your computer.

####

#### Reset Failed

> This message indicates that WinExplorer is trying to reset the smartcard, and no ATR response has been returned in the time specified for the Reset Delay parameter.

> The cause of this can be many things.
> Common problems are:

> - Incorrect settings in WinExplorer.

> - A damaged smartcard.

> - Cable problems.

> - Interface problems.

> - Interface power supply problems.

####

#### Timeout from 2A / Timeout from 58 command

> WinExplorer will send a 2A instruction followed by a 58 instruction to read general information from a DSS smartcard under the following conditions:

> - When you do a "Read Card Info" by selecting the menu item or clicking the camera button.

> - You have "Log Transactions" enabled.

> - You have "Display USW After Each Script" enabled.

> - You have "Display Fuse After Each Script" enabled.

> If you look at the example scripts included with WinExplorer you will find 2 scripts, "Irdread.xpl" and "fuse.xpl".
> These are the instructions sent to the card. A timeout occurs if the card does not respond with enough bytes to satisfy the
> request for information. The causes for this are many and most are caused by the smartcard, not WinExplorer.

> - Try increasing the "Byte Delay" parameter to a higher number.

> - Try increasing the "Rec Timeout" parameter to a higher number.

> To stop WinExplorer from requesting this information from your smartcard, disable the following options:

> - "Log Transactions"

> - "Display USW After Each Script"

> - "Display Fuse After Each Script"

####

#### Timeouts during a "Read Card Info" and/or during a script.

> If a script tries to read data back from the smartcard, and the smartcard does not supply enough bytes to satisfy the
> request, a timeout occurs.

> - Try increasing the "Byte Delay" parameter to a higher number.

> - Try increasing the "Rec Timeout" parameter to a higher number.

> Again, the causes for this are many and are most caused by the smartcard, not WinExplorer.

####

Batch Files

A WinExplorer Batch file is a simple list of script files you want to run.
Example Batch:

> ; This is a WinExplorer Batch File.
> ; Simply list the script files you want to run in the order you wish to run them in.
> ; You can run any .xvb, .xjs, or .xpl files from the batch.
> irdread.xpl ; General CAM info
> ppvlist.xpl ; Dump PPV Info
> fuse.xpl ; Get Fuse info

Simple XPL Files

This is the most basic way of sending and receiving data.
You simply specify the bytes you wish to send in hex one after the other, and they will be sent.
If you wish to receive some data, simply enter Rxx, where xx is the number of bytes to receive, again in hex.
You must handle everything except for the ATR (Answer To Reset), including the 5-byte headers, INS echo and switch bytes.
You can add comments to an XPL file by placing a semi-colon character ';' on a line. The rest of the line after the ';' will be ignored.
Example files are supplied to illustrate how XPL files work.

Using VB and Java Script in WinExplorer

WinExplorer is a ActiveX Scripting Host.
This means WinExplorer can run Microsoft's VBScript, JavaScript,
and any other ActiveX scripting engines like perl, python, and REXX.
This Version of WinExplorer will not run without installing the Microsoft Script Control.
You MUST run the file sct10en.exe to install it.

The script control can be downloaded from:
http://msdn.microsoft.com/scripting/scriptcontrol/x86/sct10en.exe
I also recommend you install the latest scripting engine runtimes from Microsoft.
http://www.microsoft.com/msdownload/vbscript/scripting.asp

Important:
The Scripting Engines are for Windows 95, Windows 98 & Windows NT 4.0.
If you are running Windows 98 or Windows NT 4.0 you are home free.
If you are running Windows 95 and are getting the following errors:
"A script engine for the specified language can not be created" or "Script Error on Line 0"
or other errors when you try to run a VB or Java Script, you still need to install some components.
Windows 95 users must have OSR2 installed or be running Microsoft Internet Explorer 4.x or later for these files to work properly.
Windows 95 users without Microsoft Internet Explorer 4.x or OSR2 will need to install DCOM before using these files.
If you are running Windows 95 & you feel that you MUST install this stuff piece by piece,
instead of installing Microsoft Internet Explorer 4.x, you will need the following files:

File | DL Location | Description

ste50en.exe | http://www.microsoft.com/msdownload/vbscript/scripting.asp | Version 5 VB & Java Runtimes
dcom95.exe | http://www.microsoft.com/com/dcom/dcom1_2/download.asp | Decom 95

For documentation on Programming in VB Script download:
http://msdn.microsoft.com/scripting/vbscript/download/vbsdoc.exe

For documentation on Programming in Java Script download:
http://msdn.microsoft.com/scripting/jscript/download/jsdoc.exe

VB and Java Script Basics

The first line in a script must be a comment to tell WinExplorer that this a VB or Java Script.
Examples of the built in functions & proprieties are contained in the demos.
Please look at the included example script files for reference.
The following is a list of the Built in's, the parameters in brackets [] are optional.

The "Sc" Object has the following members:

Function / Property | Description

`Sc.Verbose = true | false` | `When set to true, reads & writes are displayed in the output window. When false, reads & writes are not displayed.`
`Sc.Debug = true | false` | `When set to true, writes are not performed but the data is still displayed in the output window.`
`Sc.DebugBufferStuff(Data String)` | `When Sc.Debug is set to true, this command will stuff up to 255 bytes into the receive buffer. Sc.Read will return the stuffed bytes. Sc.BytesInBuffer will return the number of stuffed bytes.`
`Sc.Read(Number of Bytes)` | `Read data from card. If Number of Bytes > what is in the receive buffer, you will get a timeout.` `Sc.Read will return the number of bytes read.`
`Sc.Write(Data String)` | `Write data to card. "Data String" is a string of ASCII Hex Chars.`
`Sc.PutByte(Integer Value)` | `Write a byte to card`
`Sc.GetByte(Byte Number)` | `Retrieve a byte from the read buffer (0 thru Bytes Read from last Sc.Read command)`
`Sc.Print(String)` | `Print a string to the output window.`
`Sc.Reset` | `Perform a Card Reset.`
`Ret = Sc.InputBox(prompt[, title][, default])` | `Get user input.`
`Ret = Sc.ButtonBox(prompt[, buttons][,title] [,button1str][,button2str][,button3str] [,button4str][,button5str])` | `Display a dialog box formatted similarly to MsgBox but with up to 5 user-defined buttons. The icon (vbCritical, vbQuestion, vbExclamation, vbInformation) can be specified in the second parameter, as can the default button (vbDefaultButton1, vbDefaultButton2, vbDefaultButton3, vbDefaultButton4, 1024). The function returns a number from 1 through 5 (indicating which button was selected) or 0 if the user clicked the "X" in the corner to close the dialog box.`
`Ret = Sc.MsgBox(prompt[, buttons] [,title])` | `Display a Message Box, Returns which button was pressed.`
`Sc.PictureBox(filename [, timeout] [, ShowBorder])` | `Opens a button-less, title-less splash screen that contains the .bmp or .jpg file specified, centered on the screen. Clicking anywhere in the box dismisses the dialog, unless a non-zero timeout value is specified, in which case the dialog box automatically disappears after the specified number of seconds.`
`Sc.ProgressBox(Prompt, CurrentStep, LastStep, [Title])` | `Displays a progress box with a "thermometer" that fills up based on the percentage of CurrentStep/LastStep. A CurrentStep value of "0" will close the dialog box. If "Prompt" is "", the last string is displayed. If "Title" is "", the last string is displayed.`
`Sc.Err("Error Message")` | `This function will abort a script and display the line number and the error message.`
`Sc.Delay(ms)` | `Delay for xx milliseconds.`
`Ret = Sc.Log(Text)` | `Write Text to Log File. Returns 0 if successful. Returns 1 if "Log Transactions" option is not enabled.`
`Sc.ByteDelay = DelayTime` | `Set the Delay Time Between Bytes Sent, in microseconds.`
`Ret = Sc.Version` | `Return WinExplorer's Version Number.`
`Ret = Sc.IsHex(Data String)` | `Returns true if Data String is Valid Hex Data, False if Data String contains invalid chars.`
`Ret = Sc.Flush()` | `Flush Serial input buffer. Returns number of bytes flushed.`
`Ret = Sc.BytesInBuffer` | `Get the number of bytes pending in the receive buffer. Returns -1 if the function fails.`
`Sc.MousePointer = Value` | `Changes the mouse pointer. The following values are valid: 0 (Default) Shape determined by the object. 1 Arrow. 2 Cross (crosshair pointer). 3 I beam. 4 Not Used. 5 Not Used. 6 Size NE SW (double arrow pointing northeast and southwest). 7 Size N S (double arrow pointing north and south). 8 Size NW SE (double arrow pointing northwest and southeast). 9 Size W E (double arrow pointing west and east). 10 Up Arrow. 11 Hourglass (wait). 12 No Drop. 13 Arrow and hourglass. 14 Arrow and question mark.`

The "Fs" Object has the following members:

Function / Property | Description

`int FileOpen(String FileName, int Mode)` | Opens a specified file using a specified access mode. Use FileOpen to open a file and obtain its Windows file handle. The access mode can be one of the following values: Const fsoOpenRead = 0 Const fsoOpenWrite = 1 Const fsoOpenReadWrite = 2 If the return value is positive, the function was successful and the value is the file handle of the opened file. A return value of -1 indicates that an error occurred.
`int FileCreate(String FileName)` | Creates a new file. FileCreate creates a new file with the specified name. If the return value is positive, the function was successful and the value is the file handle of the new file. If the file already exists, FileCreate will overwrite the existing file. A return value of -1 indicates that an error occurred.
`void FileClose(int Handle)` | Closes a specified file. FileClose closes a file given its handle. The handle is obtained when the file is opened using FileOpen or FileCreate.
`int FileExists(String FileName)` | Tests if a specified file exists. FileExists returns 1 if the file specified by FileName exists. If the file does not exist, FileExists returns 0.
`int FileSeek(int Handle, int Offset, int Origin)` | Positions the current file pointer in a previously opened file. Use FileSeek to position the file pointer in a file that was opened with FileOpen or FileCreate. Handle contains the file handle that was returned by FileOpen or FileCreate. Offset specifies the number of bytes from Origin where the file pointer should be positioned. Origin is a code with three possible values, denoting the beginning of the file, the end of the file, and the current position of the file pointer. Origin Action 0 The file pointer is positioned Offset bytes from the beginning of the file. 1 The file pointer is positioned Offset bytes from its current position. 2 The file pointer is positioned Offset bytes from the end of the file. If FileSeek is successful, it returns the new position of the file pointer; otherwise, it returns -1.
`int FileGetc(int FileHandle)` | Gets character from the specified file. FileGetc returns the next character from the specified file. The file pointer is incremented after the read to point to the next byte. The return value is the byte read.
`int FilePutc(int FileHandle, int Char)` | Puts a character to the specified file. FilePutc writes a byte to the specified file at the position pointed to by the file pointer. The file pointer is incremented after the write to point to the next byte. The return value is a 1 if the write is successful, or -1 if an error occurred.
`String FileOpenDialog(String FileFilter, [String Caption], [String DefaultFileName])` | Display a modal Windows dialog box for selecting and opening files. Filter Parameter: To create file masks, assign a value to the Filter property that consists of a description and a mask separated by a vertical bar (pipe) character. Do not include spaces around the vertical bar. For example, Filter = "Text files (*.txt)|*.TXT"; Multiple filters should be separated by vertical bars. For example, Filter = "Text files (*.txt)|*.TXT|C++ files (*.cpp)|*.cpp"; To include multiple masks in a single filter, separate the masks with semicolons. For example, Filter = "Script files|*.xpl;*.xvb;*.xjs"; If no value is assigned to Filter, the dialog displays all file types. Caption Parameter: Use Caption to specify the text that appears in the file-selection dialog’s title bar. If no value is assigned to Caption, the dialog has the title "Open". DefaultFileName Parameter: Use DefaultFileName to specify a default file name in the dialog box.
`String FileSaveDialog(String FileFilter, [String Caption], [String DefaultFileName])` | Display a modal Windows dialog box for selecting file names and saving files. Filter Parameter: Same as the `FileOpenDialog function` Caption Parameter: Use Caption to specify the text that appears in the file-selection dialog’s title bar. If no value is assigned to Caption, the dialog has the title "Save". DefaultFileName Parameter: Use DefaultFileName to specify a default file name in the dialog box.

Notes: None of the functions in the Fs object will throw errors. (i.e. the script will not abort if a file does not exist, etc.)
It is up to the script to do any error handling when using these functions.
When the script ends, any open files will remain open until you close WinExplorer.
Don't forget to close any files you open in your script!

The "Wx" Object.

Rather than spell out how all the methods and properties work, here is a example program that does it all:

'
' Wx Object Example - Created 5/23/2001
'
Option Explicit
'
' Code outside of any Sub is executed BEFORE the port is opened.
' You can override any of the configured settings here.
'
Sc.Print vbcrlf & "Configured Settings" & vbcr
Call PrintSettings()
' Set up new comm parameters.
' Basically you can paste this info from the "Quick Settings" in the Winexplorer.ini
' If you don't set these parameters here, WinExplorer will use the configured settings.
Call UnlooperSettings()
'-------------------------------------------------------------------------------------------
Sub Main()
Sc.Print vbcrlf & "After Main is executed" & vbcr
Call PrintSettings()
'
' We don't really need to close the comm port unless we are going to change ports.
' I'm doing it just to show how it's done.
' We could have used Wx.ForceCommParams
'
Wx.ClosePort ' Close the port
Call SmartcardSettings() ' Set up the port for a phoenix interface & a smartcard
' Open the port, we should get a ATR because of the settings.
' A failed reset will abort the script if Wx.ResetMode = 1, this is by design.
Wx.OpenPort ' Open the port
' To open the port and not fail on a reset, use the following:
Wx.ClosePort ' Close the port
Wx.ResetMode = 0 ' No Resets
Wx.OpenPort ' Open the port
Sc.Reset ' Sc.Reset does not error if the card does not respond
Sc.Delay(1000)
Sc.Print vbcrlf & "Smartcard settings" & vbcr
Call PrintSettings()
'
' If you change any of the following serial port settings on a open port
' you must call Wx.ForceCommParams after you change the parameters.
'
Wx.BaudRate = 115200
Wx.Parity = 0
Wx.StopBits = 0
Wx.DTRControl = 0
Wx.RTSControl = 1
Wx.ForceCommParams
Wx.ClearOutputWindow ' Clear the output window
End Sub
'-------------------------------------------------------------------------------------------
Sub SmartcardSettings()
Wx.CommPort = "com1:"
Wx.BaudRate = 19200
Wx.ResetBaudRate = 9600
Wx.Parity = 1 ' 0 = None, 1 = Odd, 2 = Even, 3 = Mark, 4 = Space
Wx.StopBits = 2 ' 0 = 1 stop bit, 1 = 1.5 stop bits, 2 = 2 stop bits
Wx.DTRControl = 1 ' Initial state of DTR 0 = off, 1 = on
Wx.RTSControl = 0 ' Initial state of RTS 0 = off, 1 = on
Wx.ResetDelay = 40000 ' In microseconds
Wx.ByteDelay = 70000 ' In microseconds
Wx.RxByteTimeout = 200 ' In milliseconds
Wx.ResetMode = 1 ' 0 = No Resets, 1 = ISO Reset (Expect a ATR), 2 = Device Reset (No ATR)
Wx.ResetLine = 0 ' 0 = Toggle RTS for Reset, 1 = Toggle DTR for Reset
Wx.ByteConvention = 0 ' 0 = Inverse, 1 = Direct
Wx.FlushEchoByte = 1 ' 0 = no flush, 1 = flush - A Phoenix interface will echo each byte transmitted.
Wx.FlushBeforeWrite = 0 ' 0 = no flush, 1 = flush - Flush the receive buffer before each write to strip off Null bytes.
Wx.IgnoreTimeouts = 0 ' 0 = Abort script on a receive timeout, 1 = Ignore all receive timeouts
Wx.ResetAfterTimeout = 0 ' 0 = Don't reset after a timeout, 1 = do a reset after a timeout - Not used if "IgnoreTimeouts=0"
Wx.LogTransactions = 0 ' 0 = Don't log transactions, 1 = log transactions
Wx.DisplayUSW = 0 ' Display USW after script complete 0 = no, 1 = yes
Wx.DisplayFuse = 0 ' Display Fuse after script complete 0 = no, 1 = yes
End Sub
'-------------------------------------------------------------------------------------------
Sub UnlooperSettings()
Wx.CommPort = "com1:"
Wx.BaudRate = 115200
Wx.ResetBaudRate = 115200
Wx.Parity = 0 ' 0 = None, 1 = Odd, 2 = Even, 3 = Mark, 4 = Space
Wx.StopBits = 0 ' 0 = 1 stop bit, 1 = 1.5 stop bits, 2 = 2 stop bits
Wx.DTRControl = 0 ' Initial state of DTR 0 = off, 1 = on
Wx.RTSControl = 1 ' Initial state of RTS 0 = off, 1 = on
Wx.ResetDelay = 0 ' In microseconds
Wx.ByteDelay = 0 ' In microseconds
Wx.RxByteTimeout = 100 ' In milliseconds
Wx.ResetMode = 2 ' 0 = No Resets, 1 = ISO Reset (Expect a ATR), 2 = Device Reset (No ATR)
Wx.ResetLine = 1 ' 0 = Toggle RTS for Reset, 1 = Toggle DTR for Reset
Wx.ByteConvention = 1 ' 0 = Inverse, 1 = Direct
Wx.FlushEchoByte = 0 ' 0 = no flush, 1 = flush - A Phoenix interface will echo each byte transmitted.
Wx.FlushBeforeWrite = 0 ' 0 = no flush, 1 = flush - Flush the receive buffer before each write to strip off Null bytes.
Wx.IgnoreTimeouts = 0 ' 0 = Abort script on a receive timeout, 1 = Ignore all receive timeouts
Wx.ResetAfterTimeout = 0 ' 0 = Don't reset after a timeout, 1 = do a reset after a timeout - Not used if "IgnoreTimeouts=0"
Wx.LogTransactions = 0 ' 0 = Don't log transactions, 1 = log transactions
Wx.DisplayUSW = 0 ' Display USW after script complete 0 = no, 1 = yes
Wx.DisplayFuse = 0 ' Display Fuse after script complete 0 = no, 1 = yes
End Sub
'-------------------------------------------------------------------------------------------
Sub PrintSettings()
Sc.Print vbCr & "CommPort = " & Wx.CommPort
Sc.Print vbCr & "BaudRate = " & Wx.BaudRate
Sc.Print vbCr & "ResetBaudRate = " & Wx.ResetBaudRate
Sc.Print vbCr & "Parity = " & Wx.Parity
Sc.Print vbCr & "StopBits = " & Wx.StopBits
Sc.Print vbCr & "DTRControl = " & Wx.DTRControl
Sc.Print vbCr & "RTSControl = " & Wx.RTSControl
Sc.Print vbCr & "ResetDelay = " & Wx.ResetDelay
Sc.Print vbCr & "ByteDelay = " & Wx.ByteDelay
Sc.Print vbCr & "RxByteTimeout = " & Wx.RxByteTimeout
Sc.Print vbCr & "ResetMode = " & Wx.ResetMode
Sc.Print vbCr & "ResetLine = " & Wx.ResetLine
Sc.Print vbCr & "ByteConvention = " & Wx.ByteConvention
Sc.Print vbCr & "FlushEchoByte = " & Wx.FlushEchoByte
Sc.Print vbCr & "FlushBeforeWrite = " & Wx.FlushBeforeWrite
Sc.Print vbCr & "IgnoreTimeouts = " & Wx.IgnoreTimeouts
Sc.Print vbCr & "ResetAfterTimeout = " & Wx.ResetAfterTimeout
Sc.Print vbCr & "LogTransactions = " & Wx.LogTransactions
Sc.Print vbCr & "DisplayUSW = " & Wx.DisplayUSW
Sc.Print vbCr & "DisplayFuse = " & Wx.DisplayFuse
End Sub

Contacting the Author

WinExplorer Home Page http://www.geocities.com/winexplorer/.
(for as long as geocities lets it live).
WinExplorer is freeware available to all smartcard users on many websites and irc channels.
I do not endorse any dealers or any particular websites.
If you have any comments, questions or suggestions about WinExplorer,
You can e-mail me at WinExplorer@yahoo.com

Please NO questions about the following, I will not even reply to them:

- Card programming issues.

- Problems running a particular script.

- Will programmer xxx work WinExplorer? (How could I possibly know unless I have one?)

- Why am I getting timeout 2A/58 messages? (the answer is in this file!)

WinExplorer History

1.0 (9/98) | First working version.
1.1 (9/98) | Fixed DTR & RTS line default states. This was causing problems on some machines.
1.2 (9/98) | Added window save stuff & line highlighting of bad script data. Added script check button. Added Card information button.
1.3 (9/98) | Added locking to edit panes during card I/O to prevent Script/Batch changes while talking to card. Cleaned up SIO code & removed unnecessary delays during card reset.
1.4 (9/98) | Fixed "unsigned char" bug in "Read Card Info" resulting in a bad Card / IRD numbers if the least significant byte had the high bit set.
1.5 (9/98) | Added the Expiry day and hex values to the "Read Card Info" function.
1.6 (10/98) | Added "Batch/Script has been modified" warnings. Added Time Zone to the "Read Card Info" function. Fixed script check so it ignores tabs.
1.7 (10/98) | Added Transaction Logging based off of Cam ID. To turn on logging, Click "Configuration", & make sure "Log Transactions" is checked. The log file is the Cam ID EG 1234567.log The file is stored in the same dir as WinExplorer.exe
1.8 (10/98) | Moved Log Transactions check box to new config page. Added Line Highlight to batch window to show current step. Added Search & Replace for script editing. You can use the "Search" item on the main menu, the Script Popup, or Ctl-F for find, Ctl-R for replace. Added view for log files by clicking "File" then "View Log Files". WinExplorer will run the application associated with ".log" files or Notepad.exe if no association exists. Added Default settings button for serial config. Added a step mode for the batch processing. When active, you must press the next step button to continue the batch after each script is processed. When the batch is paused, you can do a "Read Card Info". Enable or Disable on config screen. Added USW (Update Status Word) Display to output window. The USW is displayed after each script is processed. Enable or Disable on config screen. Added "Right Click" Popup Menus to all 3 windows. Open, Save, Execute functions are on the Popup. In the Batch Window, you can open a script file by doing a selection of the script name, right click, select "Open Script at Cursor". Added a "Hidden" Function for Advanced users: By placing the following lines in your WinExplorer.ini file you can prevent WinExplorer from doing ALL card resets: [Advanced] ResetMode=0 WARNING - DO NOT USE THIS FOR NORMAL CARD PROGRAMMING! Set ResetMode=1 to turn card resets back on.
1.81 (10/98) | Phantom Release, A Beta v1.8 file got into circulation, so I needed to differentiate the files.
1.9 (10/98) | Added "Execute From Cursor" to the batch popup menu and batch button on tool bar. Just place the cursor anywhere on the line in the batch window you wish to start from, Either right click or click the down arrow on the batch button on the toolbar, then select "Execute From Cursor". Added "Execute To Cursor" to the batch popup menu and batch button on tool bar. Just place the cursor anywhere on the line in the batch window you wish to stop at, Either right click or click the down arrow on the batch button on the toolbar, then select "Execute To Cursor". Fixed a problem in "Read Card Info" function that would cause an occasional Exception Error if the card returned a incorrect number of bytes for a "58" or "2B" command. This only happened when the card was REALLY messed up.
1.91 (11/98) | Fixed a problem with USW display. If a card reset was not done after some types of xpl files, the USW would be incorrect.
2.0 (11/98) | WinExplorer now Accepts Command Line Parameters. You can now associate .xpl and .xpb files then load them by double clicking them like any other windows file. Added a "Advanced" tab to the config form. WARNING - DO NOT USE ANY ADVANCED FEATURES UNLESS YOU KNOW WHAT YOU ARE DOING! Added "No Card Resets" check box to the "Advanced" tab. When checked, you prevent WinExplorer from doing ALL card resets. Added "Ignore Receive Timeouts" check box to the "Advanced" tab. When checked, WinExplorer will keep sending data to the card even if a receive timeout has occurred. Added "Reset After Timeout" check box to the "Advanced" tab. When checked, WinExplorer will do a card reset after a receive timeout has occurred.
2.1 (11/98) | Added File DragDrop. WinExplorer will now accept .xpl, .xpb, .xjs, and .xvb files dropped on the WinExplorer from the file manager. Fixed command line filename not loading if it contained a space. Reworked code to handle "file modified" checks better. A cancel in a save dialog box now will cancel the entire operation, not just the file save.
2.2 (11/98) | Added Rating, Spending Limit, and PPV Purchase info to "Read Card Info". Added new Communication Parameters for other card types.
3.0 (12/98) | Added VB Script and Java Script to WinExplorer. See the files VBExample.xpl & JavaExample.xpl for examples.
3.1 (12/98) | Added Sc.Log Function to Java & VB Scripting. Modified Sc.InputBox function to display more than one line. Modified Sc.Read so it would not flush out the serial port.
3.2 (12/98) | Changed the Default Byte Delay back to 60000 micro seconds. Some scripts were timing out at higher speeds. Better Safe than sorry. Fixed a bug in the window restore routines. If a window is hidden when you save window settings, it will now be hidden properly when WinExplorer is restarted. Added 2 new file types to WinExplorer: .Xvb for VB Script files. .Xjs for Java Script Files. Added Flushing of serial input buffer before each Sc.Write command. This is to keep the read requests synchronized with the actual command responses from the card in the event there is extra data in the input buffer. The "Sc.PutByte" function does NOT check the serial input buffer. Added Abort checking for VB & Java Scripts. Abort is only checked when executing a "Sc" function. Added "Sc.PutByte" function. Sc.InputBox function now returns a empty string if cancel button is pressed. Added Sc.ByteDelay property to override WinExplorer Comm Settings for the current script. The Original value will reset at the start of a new script. Added Sc.Version to return the version of WinExplorer. Used to make sure any script features needed exist. Added Sc.IsHex Function to check if a string contains valid hex data. Added Sc.Flush Function to flush serial input buffer.
3.3 (1/99) | Added "Favorite Files" to menu. Cleaned up code to scroll the output window when focus is lost. Made tab chars work properly in Script Window. Tabs are set at 4 chars. Fixed Sc.Flush, It was ignoring the verbose flag.
3.4 (1/99) | Modified "Manage Favorites" so you can remove more than 1 file at a time. Modified "Open Script at Cursor" to prefix drive & path to script name. Fixed a bug in the "Read Card Info" Function. The Pacific Time Zone was being displayed as "???". Thanks ^Parrot^ :). Added Fuse byte display to output window. The fuse byte is displayed after each script is processed. Enable or Disable on config screen.
3.5 (2/99) | Now reading Fuse byte from 2B command for display. This is faster because only one read is done at the end of a script. No more "Class Not Registered" message for people who did not read the doc. Now it says read the file "readme.txt" The horizontal splitter is now maintained as a ratio of the main form size during a resize. Added a "Recent Files" List to the "File", Right Click Popup, and toolbar menus. The last 8 script & batch files accessed are on the list. Swapped the layout of the toolbar buttons for batch & script functions. It made more sense to have the button layout follow the window layout.
3.6 (4/99) | Set serial receive buffer size to 4096 Fixed window save & restore yet again. Changed "Read Card Info" to a 2A command. Advanced features "No Card Resets", "Ignore Receive Timeouts", and "Reset After Timeout" now work in VB & Java script.
4.0 (8/99) | Well, I finally got around to messing with a "HU" (P3) card. WinExplorer now talks to a HU just dandy. The problem seemed to be that the HU would output a null for every byte sent to the card, except for the last byte in a packet. The solution is to flush the serial port before each new write. The downside is that in a VB or Java Script, I flush before each write, so I can't report a problem with too many bytes in the receive buffer ala "Extra data in receive buffer ... Flushing buffer". A standard XPL file still works the same as before because of the way I parse the script. Fixed a bug in the parser where a trailing single digit would get truncated. Thanks to TSoR for pointing this out. Fixed a bug where a rating limit > 0D could have caused a access violation fault. Fixed a bug where in a standard xpl script, a "R" command had to be 2 digits. I.E. "R01" worked, "R1" did not. Modified the batch routine to append the current path name to the script to run if the script name does not have a qualified path name. WinExplorer now sets the current directory to where the script is located. Added a button to the "Program Settings" page to register .xpl, .xpb, .xvb, and .xjs files with the shell. After you click this button, you can double click on a script file and it will launch WinExplorer and load the file. Redesigned the Sc.InputBox dialog to be auto sizing, and auto constrained to 90% of the screen size. If the width constraint is hit, the text lines are automatically word wrapped. Added a ATR analyzer to the program. All ISO 7816 info is reported. Added the Sc.BytesInBuffer property. Added the Sc.Debug property. Added the Sc.DebugBufferStuff function. Added the Sc.PictureBox function. Added the Sc.ButtonBox function. The dialog is auto sizing, and auto constrained to 90% of the screen size. If the width constraint is hit, the text lines are automatically word wrapped. Added the Sc.ProgressBox Function. Added the Sc.Err function. Added a full blown editor with Syntax Highlighting. Way too many features to list off. Check out the "right click popup menu" and the new functions in the search menu. Added a Script Print Function to the File Menu. Added a font select dialog for the output window.
4.1 (8/99) | I removed the Key Requirement. Enough said. Added a check box on the communication config page to turn the flush before write on or off. This makes WinExplorer compatible with version 3.X of itself. It seems a new script out there modifies the smartcard to respond with a 4 byte "Key" when a command is issued. The card is answering BEFORE the packet send is complete. The flush was eating the response bytes.
4.2 (11/99) | Added the following script editor options: - Tab support added. - Cursor Thru Tabs option. - Line numbers in gutter option. - Cursor Beyond Start Of Line option. Added a "Receive Timeout" parameter to the Comm Settings. This parameter (in milliseconds) tells WinExplorer how long to wait for a byte to arrive in the receive buffer before giving up. This parameter used to be fixed at 100ms. The default is 200ms. Added a Title to the Sc.ProgressBox function. Modified the Sc.ProgressBox function, If Prompt is "", the last string is displayed Added the Sc.MousePointer property Rewrote this file to make it a little easier to read (I hope). Added the ShowBorder param to Sc.PictureBox Added File/New to the menu to create new xpl, xvb, and xjs files. Added a Save As menu item for Script and Batch files. Added Script and Batch Save buttons. Added a Max ATR of 33 bytes so WinExplorer won't appear to hang getting the ATR from a 99'd or FF'd card. Fixed a bug in the ATR analyzer. It was giving inaccurate information for internally clocked cards.
4.3 (2/00) | Added the following script editor options: - You can now use multiple fonts and font sizes for the syntax highlighting in the editor. - Added a uppercase property for the syntax highlighting. - Tab and shift Tab indents/outdents a block - Added "Draw Special Symbols" to editor config - eol and eof are drawn. - Added "Select Found Text" to editor config - found text is selected. Added a "File Exists, overwrite file?" prompt when doing as "Save As" and the file already exists. WinExplorer will now delete entries in the recent files lists if they don't exist. I increased the capacity of the output window from 64K to 256MB. This should fix the "RichEdit line insertion error" and the Sc.Print function appearing to stop working that some users were reporting. Re-wrote the Sc.Write function to behave like the write in the xpl engine. Re-wrote the Sc.Read function to behave like the read in the xpl engine, it will dump all bytes read in the event of a timeout along with the number of bytes requested and number of bytes actually read in the error message. The xpl engine will now return number of bytes requested and number of bytes actually read in the error message in the event of a timeout. Fixed the card info function, it was returning "100" for years > 99. I now use a 4 digit date, WinExplorer is now Y2K compliant :) Changed the Sc.Version property to return a double instead of a float. This fixes the weird rounding errors seen in a JavaScript.
4.4 (4/00) | Changed the "Associate WinExplorer Files" button to a check box. The default setting is for WinExplorer to register it's file types with the shell each time you run the application. Added a "Allow Multiple Instances" to the "Program Settings" on the config dialog. The default setting is to only allow a single instance of WinExplorer to run. Any files launched from the shell will be invoked in the existing instance in single instance mode. Added a "Prompt For File Name" to the "Program Settings" on the config dialog. This will allow you to specify a file name for the log file instead of using the CAM Id. This is mainly to allow non DSS users to enable transaction logging. WinExplorer now handles spaces in file names & directories correctly when launching a file from the shell. Added a new object to the scripting model to support binary file reading & writing. The functions contained in the "Fs" object are: FileOpen, FileCreate, FileClose, FileExists, FileSeek, FileGetc, FilePutc, FileOpenDialog, and FileSaveDialog. Check out the sample file "FileSystem.xvb". For more info, see the section on the "Fs" object in "VB and Java Script Basics".
4.5 (3/01) | Added Encrypted script support for VB & Java Scripts. The Microsoft Script Control is no longer required for WinExplorer to run, however you need to have it installed on your system to run VB and Java scripts. Xpl scripts will still run without the script control installed on your system. Added the ability to type in any baud rate for "Data Rate" and "Reset Rate" on the config screen. This does not mean that every value you can type in is valid. A valid value has to be a divisor of 115200 that has no remainder. i.e. if 115200 MOD x = 0, where x is the baud rate you want to use, then the baud rate is valid. Added a "Flush Echo Bytes" parameter. A Phoenix interface will echo each byte transmitted. Check this setting to discard those bytes. Added DTR & RTS control line settings. Added a new reset mode and a selection for which control line to toggle The extra card reset after the baud rate is set to the post-ATR rate has been removed. I made some changes in the serial routines and I don't seem to need it any more. Added a quick settings combo box. You can now save your own settings and restore them easily. Added Syntax Highlighting for XPL files. WinExplorer now computes the check digit of the CamID. Log file names now use leading zeros and check digit. Re-Wrote the "Progress Box" code to behave better. You can now minimize WinExplorer with no weird side effects, and the "Progress Box" window will not insist on being the topmost window. When deleting entries in the recent files lists if they don't exist, you will now get a message in the status window instead of a dialog box. Fixed the script display so that non mono spaced fonts are rendered correctly. This also corrects the spacing when using different font sizes for different elements. The "Jump to Function" box is now non-modal and stays up after a selection is made. Press F5 to refresh the contents. Now compiled using BCB 5.0
4.51 (4/01) | Fixed the missing "Quick Settings" entries under Win9x. It turns out that Win9x buffers .ini files, Win NT and 2K do not.
4.6 (6/01) | Added support for perl. Active perl still has issues though, the big problem is that it does not pass a error string or a line number back when I throw a error from one of my objects. To put that in english, in vb or java I would get something like "Script Error on Line 14 Sc.Read: Timeout Reading Data From Card - 131 Bytes Requested, 0 Bytes Read" In perl, you get "'this->Run(ProcedureName, Parameters, (TVariant*)&pvarResult)' :Unspecifiederror\r\n @ C:\\Program\\Files\\Borland\\CBuilder5\\Imports\\MSScriptControl_TLB.h/604" Use at your own risk...... The plain text portion of a encrypted script is now loaded in. This allows a mixed plain text/encrypted script. Added the "Wx" Object to control WinExplorer itself. You can now configure most of WinExplorer's parameters from a script before the port is opened and before "Main" is executed. See ParamTest.xvb for a example on how to do this.
4.7 (12/01) | Added the Sc.ClearOutputWindow method to clear the output window from a script.
4.8 (2/02) | Protected the WinExplorer exe file with Armadillo
4.9 (2/02) | Added Sc.ChallengeKey and Sc.UnLockKey to the script engine. You can now determine which copy of WinExplorer you are running on within the script. (Retail Only) In the private version of WinExplorer you can put any text in the title bar of Wx by modifying the WinExplorer.ini file. (Retail Only) [Misc Settings] CustomTitle = Anything you want.
5.0 (4/02) | Added database access to the keygen and the encrypter programs. (Retail Only) Added the ability to encrypt a script so it will only run on a specific machine. (Retail Only) Fixed a problem with laptops reporting a different CPU type after going into and out of stand by mode. (Retail Only) This was causing the challenge key to change. Added Sc.PlaySound to play .wav files from a script. I changed the freeware encryption key and have protected the exe with armadillo. This should slow down the script dumpers.