﻿;hex2ascii_wago_1_channel.dll
;Mit Unterstützung von Chris und Thomas aus dem Abacomforum
;programmiert: in PureBasic Version 5.11
;Diese DLL liest den Inhalt eines 16 bit Registers ( zB. einer Wago SPS ) und wandelt diesen Inhalt in ASCII Zeichen am Ausgang
;=====================================================================================================================================================


EnableExplicit

#Inputs  = 1
#Outputs = 1

Structure sDLLParams
  DLLParam.d[101]
EndStructure

Structure sStringParams
  StringParam.i[101]
EndStructure  

; return number of input channels...
ProcedureDLL.a NumInputs()

  ProcedureReturn #Inputs
EndProcedure

; return number of output channels...
ProcedureDLL.a NumOutputs()

  ProcedureReturn #Outputs
EndProcedure

; return name for each input...
ProcedureDLL GetInputName(Channel.a, *Name)

  Protected GetInputName.s

  If Channel = 0
    GetInputName = "E1"    
  Else    
    GetInputName = "U"
  EndIf

  PokeS(*Name, GetInputName, -1, #PB_Ascii)

EndProcedure

; return name for each output...
ProcedureDLL GetOutputName(Channel.a, *Name)

  Protected GetOutputName.s

  If Channel = 0
    GetOutputName = "$A1"   
  Else
    GetOutputName = "U"
  EndIf

  PokeS(*Name, GetOutputName, -1, #PB_Ascii)

EndProcedure

; check inputs and set outputs while running...
ProcedureDLL CCalculateEx(*PInput.sDLLParams, *POutput.sDLLParams, *PUser.sDLLParams, *PStrings.sStringParams)

  Protected in1.d, out1.s, in1_typ_u.u
  
  ;Übernahme des double Wertes vom Eingang 1 über InputPointer
  in1 = *PInput\DLLParam[0]
  
  ;Typwandlung von double in unicode
  in1_typ_u = in1
  
  ;Einlesen des Strings von Adresse @in1_typ_u
  out1 = PeekS(@in1_typ_u, 2)
  
 
; Schreibt einen String an die angegebene Speicheradresse, gefolgt von einem Null-Zeichen für den 
; Abschluss ("null-terminierter" String).  
;    
  PokeS(*PStrings\StringParam[0], out1, -1, #PB_Ascii)

EndProcedure

; called when project is started...
ProcedureDLL CSimStart(*PInput.sDLLParams, *POutput.sDLLParams, *PUser.sDLLParams)

  ; nothing to do...

EndProcedure

; called when project is stopped...
ProcedureDLL CSimStop(*PInput.sDLLParams, *POutput.sDLLParams, *PUser.sDLLParams)

  ; nothing to do...

EndProcedure

; ; called when button CONFIGURE is pressed in dialogue...
; ProcedureDLL CConfigure(*PUser.sDLLParams)
; 
;   MessageRequester("Configure", "Nothing to configure")
; 
; EndProcedure
; IDE Options = PureBasic 5.11 (Windows - x86)
; ExecutableFormat = Shared Dll
; CursorPosition = 3
; Folding = --
; EnableXP
; Executable = hex2ascii_1_channel_chris.dll
; CurrentDirectory = C:\Users\donjon\Documents\!__PUREBASIC_PROJKETE\