WinBatch Tech Support Home

Database Search

If you can't find the information using the categories below, post a question over in our WinBatch Tech Support Forum.

TechHome

Samples from Users
plus
plus
plus
plus
plus
plus
plus
plus
plus
plus
plus
plus
plus
plus
plus
plus

Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.

asciichart


;***************************************************************************
;** ASCIIChart.wbt
;** Adrian Hayes, 2004:06:02
;** -   Displays a dialog with ASCII and Extended ASCII characters, copies
;**    characters or ASCII code values to clipboard
;***************************************************************************

AddExtender("wilx34i.dll")


;; Initialize some variables
cDialogINIT = 0
cDialogTIMER = 1
cDialogBUTTON = 2
cDialogRADIO = 3
DCGET_TITLE = 4
DCGET_RADIO = 2
DCSET_REPLACE_TITLE = 4
DCSTATE_NULL = 0
DCSTATE_SET_FOCUS = 1
DCSTATE_ADD_STYLE = 3
DCSTATE_REMOVE_STYLE = 4
DCSTATE_GET_FOCUS   = 5
DCSTYLE_DISABLED = 2


;; Returns 0 if no arrow keys pressed
;; 1 - 4 (1 = left, 2 = up, 3 = right, 4 = down
#DefineFunction GetArrowKeys()
   buf = BinaryAlloc(256)
   sDLLName = StrCat(DirWindows(1), "user32.dll")
   DllCall(sDLLName, long:"GetKeyboardState", lpbinary:buf)
   BinaryEodSet(buf, 256)
   For CurOffset = 1 To 4
      If BinaryPeek(buf, 36 + CurOffset) & 128 
         BinaryFree(buf)
         Return CurOffset
      EndIf
   Next CurOffset
   BinaryFree(buf)
   Return 0
#EndFunction


;; Dynamically creates or re-titles buttons - saves me from having to manually create them, as WinBatch allows me to be lazy.  :-)
#DefineSubRoutine GenerateButtons()
   For Column = 1 To 4
      For Row = 0 To 31
         CurCharDec = Row + (Column - 1) * 32 + (HighBit * 128)   ;; ASCII 0-127, or 128 to 255 if HighBit
         CurConCap = Num2Char(CurCharDec)
         SpecialValue = ItemLocate(CurCharDec, SpecialValues, @TAB)      ;; Exceptions
         If SpecialValue Then CurConCap = ItemExtract(SpecialValue, SpecialCaptions, @TAB)

         CurConNum = CurCharDec + 18 - (HighBit * 128)

         If PreInit
            CurConTab = CurCharDec + 12 - (HighBit * 128)
            CurConRetVal = CurConNum - 11   ;; Current Control number - 17 fixed controls, plus 6 pre-existing button return values
            CurConX = 5 + ((Column - 1) * 34)   ;; Control X coordinate
            CurConY = Row * 9               ;; Control Y coordinate
      
            If CurConNum < 10 Then CurConDef = StrCat("ASCII00", CurConNum)
            If CurConNum > 9 && CurConNum < 100 Then CurConDef = StrCat("ASCII0", CurConNum)
            If CurConNum > 99 Then CurConDef = StrCat("ASCII", CurConNum)
            %CurConDef%=`%CurConX%,%CurConY%,016,009,PUSHBUTTON,DEFAULT,"%CurConCap%",%CurConRetVal%,%CurConTab%,DEFAULT,"Terminal|6144|40|65329","0|0|0",DEFAULT`
            ASCIINumControls = ASCIINumControls + 1
         Else
            If CurCharDec == 34 ||  CurCharDec == 96
               CurConCap = StrSub(CurConCap, 1, 1)
            EndIf
            DialogControlSet(ASCIIHandle, CurConNum, DCSET_REPLACE_TITLE, CurConCap)   
         EndIf
   
      Next Row
   Next Column
   Return (1)
;; End of GenerateButtons
#EndSubRoutine


#DefineSubRoutine ASCII(ASCIIHandle, EventCode, ControlNum, res4, res5)
Switch EventCode
   Case cDialogINIT
      DialogProcOptions(ASCIIHandle, cDialogTIMER, 75)   ;; Set Timer for arrow keyboard tracking
      DialogProcOptions(ASCIIHandle, cDialogBUTTON, @ON)
      DialogProcOptions(ASCIIHandle, cDialogRADIO, @ON)

      DialogControlState(ASCIIHandle, 13, DCSTATE_ADD_STYLE, DCSTYLE_DISABLED)   ;; Initially disable buttons   
      DialogControlState(ASCIIHandle, 14, DCSTATE_ADD_STYLE, DCSTYLE_DISABLED)      
      DialogControlState(ASCIIHandle, 15, DCSTATE_ADD_STYLE, DCSTYLE_DISABLED)      
      DialogControlState(ASCIIHandle, 16, DCSTATE_ADD_STYLE, DCSTYLE_DISABLED)      
      DialogControlState(ASCIIHandle, 17, DCSTATE_ADD_STYLE, DCSTYLE_DISABLED)      
      CurActiveCon = 13

      Break

	Case cDialogTIMER
      ArrowKey = GetArrowKeys()   ;; Check if arrow keys pressed.
      OldActiveCon = CurActiveCon   ;; Check if button selection has changed.
      CurActiveCon = DialogControlState(ASCIIHandle, DCSTATE_NULL, DCSTATE_GET_FOCUS, DCSTATE_NULL)
      If CurActiveCon != OldActiveCon && CurActiveCon > 17   
         DialogControlState(ASCIIHandle, 13, DCSTATE_REMOVE_STYLE, DCSTYLE_DISABLED)   ;; Enable buttons   
         DialogControlState(ASCIIHandle, 14, DCSTATE_REMOVE_STYLE, DCSTYLE_DISABLED)      
         DialogControlState(ASCIIHandle, 15, DCSTATE_REMOVE_STYLE, DCSTYLE_DISABLED)      
         DialogControlState(ASCIIHandle, 16, DCSTATE_REMOVE_STYLE, DCSTYLE_DISABLED)      
         DialogControlState(ASCIIHandle, 17, DCSTATE_REMOVE_STYLE, DCSTYLE_DISABLED)      
         CurCharSelected = DialogControlGet(ASCIIHandle, CurActiveCon, DCGET_TITLE)
         DialogControlSet(ASCIIHandle, 13, DCSET_REPLACE_TITLE, CurCharSelected)
         SpecialCharacter = ItemLocate(CurCharSelected, SpecialCaptions, @TAB)
         If SpecialCharacter
            CurCharDec = ItemExtract(SpecialCharacter, SpecialValues, @TAB)
            CurCharDesc = ItemExtract(SpecialCharacter, SpecialDescriptions, @TAB)
            DialogControlSet(ASCIIHandle, 5, DCSET_REPLACE_TITLE, CurCharDesc)
         Else
            CurCharDec = Char2Num(CurCharSelected)
            DialogControlSet(ASCIIHandle, 5, DCSET_REPLACE_TITLE, "")
         EndIf
         DialogControlSet(ASCIIHandle, 14, DCSET_REPLACE_TITLE, CurCharDec)
         DialogControlSet(ASCIIHandle, 15, DCSET_REPLACE_TITLE, xBaseConvert(CurCharDec, 10, 16))
         DialogControlSet(ASCIIHandle, 16, DCSET_REPLACE_TITLE, xBaseConvert(CurCharDec, 10, 8))
         If CurCharDec > 31 && CurCharDec < 128
            DialogControlState(ASCIIHandle, 17, DCSTATE_REMOVE_STYLE, DCSTYLE_DISABLED)
            DialogControlSet(ASCIIHandle, 17, DCSET_REPLACE_TITLE, StrCat("&&#", CurCharDec))
         Else
            DialogControlState(ASCIIHandle, 17, DCSTATE_ADD_STYLE, DCSTYLE_DISABLED)
            DialogControlSet(ASCIIHandle, 17, DCSET_REPLACE_TITLE, "")
         EndIf

      EndIf
      If CurActiveCon > 17   ;; If an ASCII character button selected, check for arrow key & move set focus
         Switch ArrowKey
            Case 0   ;; No arrow keys pressed
               Return -2
   
            Case 1   ;; Left Arrow
               If CurActiveCon > 49
                  SetActiveCon = CurActiveCon - 32
               Else
                  If CurActiveCon == 18
                     SetActiveCon = 145
                  Else
                     SetActiveCon = CurActiveCon + 95
                  EndIf   
               EndIf
  
               Break
   
            Case 2   ;; Up
               If CurActiveCon == 18
                  SetActiveCon = 145
               Else
                  SetActiveCon = CurActiveCon - 1
               EndIf
               Break
         
            Case 3   ;; Right
               If CurActiveCon < 114
                  SetActiveCon = CurActiveCon + 32
               Else
                  If CurActiveCon == 145
                     SetActiveCon = 18
                  Else
                     SetActiveCon = CurActiveCon - 95
                  EndIf
               EndIf
   
               Break
   
            Case 4   ;; Down
               If CurActiveCon == 145
                  SetActiveCon = 18
               Else
                  SetActiveCon = CurActiveCon + 1
               EndIf
   
               Break
   
         EndSwitch
         DialogControlState(ASCIIHandle, SetActiveCon, DCSTATE_SET_FOCUS, DCSTATE_NULL)
      EndIf
      Break

   Case cDialogBUTTON

      Switch ControlNum
         Case 1      ;; Cancel
            Return 0

         Case 13      ;; Copy Character to Clipboard
            ToClip = DialogControlGet(ASCIIHandle, 13, DCGET_TITLE)
            SpecialCharacter = ItemLocate(ToClip, SpecialCaptions, @TAB)
            If SpecialCharacter Then ToClip = Num2Char(ItemExtract(SpecialCharacter, SpecialValues, @TAB))         
            ClipPut(ToClip)
            Return (1)

         Case 14      ;; Copy Decimal to Clipboard
         Case 15      ;; Copy Hexadecimal to Clipboard
         Case 16      ;; Copy Octal to Clipboard
         Case 17      ;; Copy HTML to Clipboard
            ToClip = DialogControlGet(ASCIIHandle, ControlNum, DCGET_TITLE)
            If ControlNum == 17 Then ToClip = StrSub(ToClip, 2, -1)    ;; Strip leading ampersand
            ClipPut(ToClip)
            Return 1

         Case ControlNum   ;; One of the ASCII Characters
            DialogControlState(ASCIIHandle, 13, DCSTATE_REMOVE_STYLE, DCSTYLE_DISABLED)      
            DialogControlState(ASCIIHandle, 14, DCSTATE_REMOVE_STYLE, DCSTYLE_DISABLED)      
            DialogControlState(ASCIIHandle, 15, DCSTATE_REMOVE_STYLE, DCSTYLE_DISABLED)      
            DialogControlState(ASCIIHandle, 16, DCSTATE_REMOVE_STYLE, DCSTYLE_DISABLED)      
            DialogControlState(ASCIIHandle, 17, DCSTATE_REMOVE_STYLE, DCSTYLE_DISABLED)      
            CurCharSelected = DialogControlGet(ASCIIHandle, ControlNum, DCGET_TITLE)
            DialogControlSet(ASCIIHandle, 13, DCSET_REPLACE_TITLE, CurCharSelected)
            SpecialCharacter = ItemLocate(CurCharSelected, SpecialCaptions, @TAB)
            If SpecialCharacter
               CurCharDec = ItemExtract(SpecialCharacter, SpecialValues, @TAB)
               CurCharDesc = ItemExtract(SpecialCharacter, SpecialDescriptions, @TAB)
               DialogControlSet(ASCIIHandle, 5, DCSET_REPLACE_TITLE, CurCharDesc)
            Else
               CurCharDec = Char2Num(CurCharSelected)
               DialogControlSet(ASCIIHandle, 5, DCSET_REPLACE_TITLE, "")
            EndIf
            DialogControlSet(ASCIIHandle, 14, DCSET_REPLACE_TITLE, CurCharDec)
            DialogControlSet(ASCIIHandle, 15, DCSET_REPLACE_TITLE, xBaseConvert(CurCharDec, 10, 16))
            DialogControlSet(ASCIIHandle, 16, DCSET_REPLACE_TITLE, xBaseConvert(CurCharDec, 10, 8))
            If CurCharDec > 31 && CurCharDec < 128
               DialogControlState(ASCIIHandle, 17, DCSTATE_REMOVE_STYLE, DCSTYLE_DISABLED)
               DialogControlSet(ASCIIHandle, 17, DCSET_REPLACE_TITLE, StrCat("&&#", CurCharDec))
            Else
               DialogControlState(ASCIIHandle, 17, DCSTATE_ADD_STYLE, DCSTYLE_DISABLED)
               DialogControlSet(ASCIIHandle, 17, DCSET_REPLACE_TITLE, "")
            EndIf
            If MouseInfo(0) != CurCharSelected      ;; If keyboard used then switch focus to clipboard buttons
               DialogControlState(ASCIIHandle, 13, DCSTATE_SET_FOCUS, DCSTATE_NULL)
            EndIf
            Break

      EndSwitch
      Break

   Case cDialogRADIO
      HighBit = DialogControlGet(ASCIIHandle, 3, DCGET_RADIO)   ;; Extended ASCII
      GenerateButtons()

      Break   

EndSwitch

Return -2
;; End of ASCII Dialog Callback Subroutine
#EndSubRoutine                                          

ASCIIFormat=`WWWDLGED,6.1`

ASCIICaption=`ASCII Chart`
ASCIIX=99999
ASCIIY=99999
ASCIIWidth=252
ASCIIHeight=291
ASCIINumControls=017
ASCIIProcedure=`ASCII`
ASCIIFont=`DEFAULT`
ASCIITextColor=`DEFAULT`
ASCIIBackground=`DEFAULT,DEFAULT`
ASCIIConfig=0

ASCII001=`213,271,028,012,PUSHBUTTON,DEFAULT,"Cancel",0,145,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ASCII002=`153,007,084,012,RADIOBUTTON,CharSet,"&ASCII Codes (0 - 127)",1,1,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ASCII003=`153,019,094,012,RADIOBUTTON,CharSet,"&Extended ASCII Codes (128 - 255)",2,2,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ASCII004=`185,062,060,026,STATICTEXT,DEFAULT,"Press to copy this character to the clipboard",DEFAULT,3,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ASCII005=`143,100,102,020,STATICTEXT,DEFAULT,DEFAULT,DEFAULT,4,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ASCII006=`143,157,026,012,STATICTEXT,DEFAULT,"Decimal:",DEFAULT,5,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ASCII007=`143,171,026,012,STATICTEXT,DEFAULT,"Hex:",DEFAULT,6,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ASCII008=`143,185,026,012,STATICTEXT,DEFAULT,"Octal:",DEFAULT,7,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ASCII009=`143,199,026,012,STATICTEXT,DEFAULT,"HTML:",DEFAULT,8,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ASCII010=`143,135,074,020,STATICTEXT,DEFAULT,"Press a button below to copy its value to clipboard",DEFAULT,9,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ASCII011=`143,047,044,008,STATICTEXT,DEFAULT,"Selected:",DEFAULT,10,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ASCII012=`183,119,010,010,STATICTEXT,DEFAULT,"or",DEFAULT,11,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ASCII013=`143,059,039,039,PUSHBUTTON,DEFAULT,DEFAULT,2,140,32,"Terminal|16384|40|65329","0|0|0",DEFAULT`
ASCII014=`173,155,022,012,PUSHBUTTON,DEFAULT,DEFAULT,3,141,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ASCII015=`173,169,022,012,PUSHBUTTON,DEFAULT,DEFAULT,4,142,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ASCII016=`173,183,022,012,PUSHBUTTON,DEFAULT,DEFAULT,5,143,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ASCII017=`173,197,022,012,PUSHBUTTON,DEFAULT,DEFAULT,6,144,DEFAULT,DEFAULT,DEFAULT,DEFAULT`

;;ButtonPushed=Dialog("ASCII")



SpecialCaptions = "NUL	SOH	STX	ETX	EOT	ENQ	ACK	BEL	BS	TAB	LF	VT	FF	CR	SO	SI	DLE	"
SpecialCaptions = StrCat(SpecialCaptions, "DC1	DC2	DC3	DC4	NAK	SYN	ETB	CAN	EM	SUB	ESC	")
SpecialCaptions = StrCat(SpecialCaptions, "FS	GS	RS	US	SPC	""""	%%	``	DEL")
SpecialDescriptions = "Null	Start of Heading	Start of Text	End of Text	End of Transmission	Enquiry	"
SpecialDescriptions = StrCat(SpecialDescriptions, "Acknowledge	Bell	Backspace	Horizontal Tab	Line Feed	")
SpecialDescriptions = StrCat(SpecialDescriptions, "Vertical Tab	Form Feed	Carriage Return	Shift Out	")
SpecialDescriptions = StrCat(SpecialDescriptions, "Shift In	Data Link Escape	Device Control 1	Device Control 2	")
SpecialDescriptions = StrCat(SpecialDescriptions, "Device Control 3	Device Control 4	Negative Acknowledge	")
SpecialDescriptions = StrCat(SpecialDescriptions, "Synchronous Idle	End of Transmission Block	Cancel	")
SpecialDescriptions = StrCat(SpecialDescriptions, "End of Medium	Substitute	Escape	File Separator	Group Separator	")
SpecialDescriptions = StrCat(SpecialDescriptions, "Record Separator	Unit Separator	Space					Delete")
SpecialValues = "0	1	2	3	4	5	6	7	8	9	10	11	12	13	14	15	16	17	18	19	20	21	22	23	24	25	26	27	28	29	30	31	32	34	37	96	127"

HighBit = @FALSE
PreInit = @TRUE

GenerateButtons()
PreInit = @FALSE
ButtonPushed=Dialog("ASCII")

Exit

Article ID:   W16684
File Created: 2005:02:18:12:21:52
Last Updated: 2005:02:18:12:21:52