Simple Hex/Bin/Dec number converter
Posted: Fri Dec 12, 2008 3:24 am
Nothing special about this little snippet, just a quick little converter I have made up to suit my purposes to convert between decimal, hex & binary in 8 & 16 bits. It could easily be improved, but for what I wanted it does the job I want as is.
Please feel free to finish/improve as you see fit.
Please feel free to finish/improve as you see fit.

Code: Select all
#Title="Quick Number Converter"
Enumeration
#Window_0
#Text_Label_Input
#Label_HexIn
#String_Hex_In
#Label_HexBin
#Out_HexBin
#Label_HexDec
#Out_HexDec
#Label_BinIn
#String_Bin_In
#Label_BinHex
#Out_BinHex
#Label_BinDec
#Out_BinDec
#Label_Dec_In
#String_Dec_In
#Label_DecBin
#Out_DecBin
#Label_DecHex
#Out_DecHex
#Label_Outputs
EndEnumeration
Procedure SelectAll(textfocus)
SendMessage_(GadgetID(textfocus),#EM_SETSEL,0,-1)
SetActiveGadget(textfocus)
EndProcedure
Procedure.s Hex2Bin(In$)
Dec=Val("$"+In$)
If In$<>""
Select Dec
Case 0 To 255
ProcedureReturn RSet(Bin(Dec),8,"0")
Case 256 To 65535
ProcedureReturn RSet(Bin(Dec),16,"0")
EndSelect
EndIf
EndProcedure
Procedure.s Hex2Dec(In$)
Dec=Val("$"+In$)
If In$<>""
Select Dec
Case 0 To 65535
ProcedureReturn Str(Dec)
EndSelect
EndIf
EndProcedure
Procedure.s Bin2Hex(In$)
Dec=Val("%"+In$)
If In$<>""
Select Dec
Case 0 To 65535
ProcedureReturn Hex(Dec)
EndSelect
EndIf
EndProcedure
Procedure.s Bin2Dec(In$)
Dec=Val("%"+In$)
If In$<>""
Select Dec
Case 0 To 65535
ProcedureReturn Str(Dec)
EndSelect
EndIf
EndProcedure
Procedure.s Dec2Hex(In$)
Dec=Val(In$)
If In$<>""
Select Dec
Case 0 To 65535
ProcedureReturn Hex(Dec)
EndSelect
EndIf
EndProcedure
Procedure.s Dec2Bin(In$)
Dec=Val(In$)
If In$<>""
Select Dec
Case 0 To 255
ProcedureReturn RSet(Bin(Dec),8,"0")
Case 256 To 65535
ProcedureReturn RSet(Bin(Dec),16,"0")
EndSelect
EndIf
EndProcedure
Procedure Open_Window_0()
If OpenWindow(#Window_0, 216, 0, 347, 185, #Title, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
TextGadget(#Text_Label_Input, 10, 10, 30, 20, "Inputs")
TextGadget(#Label_HexIn, 10, 30, 40, 20, "Hex In")
StringGadget(#String_Hex_In, 10, 50, 107, 20, "")
TextGadget(#Label_HexBin, 130, 30, 110, 20, "Binary Out (8 or 16 bit)")
TextGadget(#Out_HexBin, 130, 50, 107, 20, "", #PB_Text_Border)
TextGadget(#Label_HexDec, 250, 30, 60, 20, "Decimal Out")
TextGadget(#Out_HexDec, 250, 50, 80, 20, "", #PB_Text_Border)
TextGadget(#Label_BinIn, 10, 80, 50, 20, "Binary In")
StringGadget(#String_Bin_In, 10, 100, 107, 20, "")
TextGadget(#Label_BinHex, 130, 80, 50, 20, "Hex Out")
TextGadget(#Out_BinHex, 130, 100, 107, 20, "", #PB_Text_Border)
TextGadget(#Label_BinDec, 250, 80, 60, 20, "Decimal Out")
TextGadget(#Out_BinDec, 250, 100, 80, 20, "", #PB_Text_Border)
TextGadget(#Label_Dec_In, 10, 130, 60, 20, "Decimal In")
StringGadget(#String_Dec_In, 10, 150, 107, 20, "")
TextGadget(#Label_DecBin, 130, 130, 110, 20, "Binary Out (8 or 16 bit)")
TextGadget(#Out_DecBin, 130, 150, 107, 20, "", #PB_Text_Border)
TextGadget(#Label_DecHex, 250, 130, 50, 20, "Hex Out")
TextGadget(#Out_DecHex, 250, 150, 80, 20, "", #PB_Text_Border)
TextGadget(#Label_Outputs, 130, 10, 40, 20, "Outputs")
ProcedureReturn 1
EndIf
EndProcedure
If Not Open_Window_0()
MessageRequester(#Title,"Error, unable to initialise main window",#MB_ICONERROR)
End
EndIf
Repeat
Ev=WaitWindowEvent()
Et=EventType()
Select Et
Case #PB_EventType_Change
Select EventGadget()
Case #String_Hex_In
txtIn$=GetGadgetText(#String_Hex_In)
SetGadgetText(#Out_HexBin,Hex2Bin(txtIn$))
SetGadgetText(#Out_HexDec,Hex2Dec(txtIn$))
Case #String_Bin_In
txtIn$=GetGadgetText(#String_Bin_In)
SetGadgetText(#Out_BinHex,Bin2Hex(txtIn$))
SetGadgetText(#Out_BinDec,Bin2Dec(txtIn$))
Case #String_Dec_In
txtIn$=GetGadgetText(#String_Dec_In)
SetGadgetText(#Out_DecHex,Dec2Hex(txtIn$))
SetGadgetText(#Out_DecBin,Dec2Bin(txtIn$))
EndSelect
Case #PB_EventType_Focus
Select EventGadget()
Case #String_Hex_In
SelectAll(#String_Hex_In)
Case #String_Bin_In
SelectAll(#String_Bin_In)
Case #String_Dec_In
SelectAll(#String_Dec_In)
EndSelect
EndSelect
If Ev=#PB_Event_CloseWindow
Quit=1
EndIf
Until Quit