#INCLUDE "win32api.inc" %Defaultport = 3001 DECLARE CALLBACK FUNCTION procmain DECLARE SUB ShowHelp DECLARE FUNCTION DottedIP$(ip AS LONG) GLOBAL done AS LONG GLOBAL portnum AS LONG GLOBAL destip AS LONG GLOBAL ip AS LONG GLOBAL hostname$ FUNCTION PBMAIN LOCAL f AS LONG LOCAL buf$ LOCAL count AS LONG LOCAL hw AS LONG portnum = %Defaultport HOST ADDR TO ip HOST NAME TO hostname$ ' ip = ip OR &HFF000000 destip = ip OR &HFF000000 DIALOG NEW 0, "Udp client",1, 1, 217, 68 TO hw CONTROL ADD TEXTBOX, hw, 100, "", 5, 5, 181, 12, 0 CONTROL ADD BUTTON, hw, 200, "&>", 189,5, 10, 12, %BS_DEFAULT CONTROL ADD BUTTON, hw, 201, "&?", 204, 5, 10, 12 CONTROL ADD CHECKBOX, hw, 500, "Add <&enter> to end of message", 5, 22, 175, 12 CONTROL ADD LABEL, hw, 300, "Port:" + STR$(portnum) + " - IP: " + Dottedip$(ip) + " - Host: " + hostname$, 5, 39, 175, 12 CONTROL ADD LABEL, hw, 301, "Destination: " + Dottedip$(destip), 5, 51, 175, 12 DIALOG SHOW MODELESS hw CALL procmain DO DIALOG DOEVENTS LOOP UNTIL done END FUNCTION CALLBACK FUNCTION procmain LOCAL buf$ LOCAL lmsg$ STATIC lastmsg$ STATIC addcrlf AS LONG LOCAL x AS LONG LOCAL f AS LONG SELECT CASE CBMSG CASE %WM_CLOSE done = %true CASE %WM_COMMAND SELECT CASE CBCTLMSG CASE %BN_CLICKED SELECT CASE CBCTL CASE 200 CONTROL GET TEXT CBHNDL, 100 TO buf$ buf$ = TRIM$(buf$) IF LEFT$(buf$, 1) = "/" THEN 'internal message lmsg = UCASE$(TRIM$(PARSE$(buf$, ":", 1))) SELECT CASE lmsg CASE "/PORT", "/P" portnum = VAL(PARSE$(buf$, ":", 2)) CONTROL SET TEXT CBHNDL, 300, "Port:" + STR$(portnum) + " - IP: " + Dottedip$(ip) + " - Host: " + hostname$ CASE "/REPEAT", "/" CONTROL SET TEXT CBHNDL, 100, lastmsg$ Sendmessage BYVAL CBHNDL, BYVAL CBMSG, BYVAL CBWPARAM, BYVAL CBLPARAM EXIT FUNCTION CASE "/EXIT", "/X" done = %true CASE "/HELP", "/?" ShowHelp CASE "/DEST", "/D" MSGBOX "here we should add a possibility to give the destination name or ip" 'we need a function to convert dotted ip to long CASE "/LOCAL", "/L" destip = ip OR &HFF000000 CONTROL SET TEXT CBHNDL, 301, "Destination: " + Dottedip$(destip) CASE ELSE ShowHelp END SELECT ELSE HOST ADDR TO x 'check ip - don't know if that's necessary.. IF x <> ip THEN IF destip = ip OR &HFF000000 THEN destip = x OR &HFF000000 ip = x CONTROL SET TEXT CBHNDL, 300, "Port:" + STR$(portnum) + " - IP: " + Dottedip$(ip) + " - Host: " + hostname$ CONTROL SET TEXT CBHNDL, 301, "Destination: " + Dottedip$(destip) END IF IF addcrlf THEN buf$ = buf$ + CHR$(10) '$CRLF f = FREEFILE UDP OPEN PORT 5000 AS f 'was udp open as f UDP SEND f, AT destip, portnum, buf$ UDP CLOSE f END IF lastmsg$ = REMOVE$(buf$, $CRLF) CONTROL SET TEXT CBHNDL, 100, "" FUNCTION = %true CASE 201 ShowHelp FUNCTION = %true CASE 500 CONTROL GET CHECK CBHNDL, CBCTL TO addcrlf CONTROL SET FOCUS CBHNDL, 100 END SELECT END SELECT END SELECT EXIT FUNCTION END FUNCTION SUB ShowHelp LOCAL buf$ buf$ = "Input message or command and press enter." + $CRLF + $CRLF buf$ = buf$ + "Commands:" + $CRLF buf$ = buf$ + " /DEST: ip-address (/d ip-address)" + $CRLF buf$ = buf$ + " /LOCAL (/l) - sets destination to localhost" + $CRLF buf$ = buf$ + " /PORT: portnr (/p: portnr)" + $CRLF buf$ = buf$ + " /EXIT (/x)" + $CRLF buf$ = buf$ + " /HELP (/?)" + $CRLF buf$ = buf$ + " /REPEAT (/)" + $CRLF buf$ = buf$ + $CRLF buf$ = buf$ + "Messages: type exactly what you want to send to the server" + $CRLF buf$ = buf$ + "Check the checkbox to add a crlf pair to each message (required for sending messages to PD)" MSGBOX buf$,,"Help" END SUB FUNCTION DottedIP$(ip AS LONG) LOCAL x AS BYTE PTR x = VARPTR(ip) FUNCTION = FORMAT$(@x) & "." & FORMAT$(@x[1]) & "." & FORMAT$(@x[2]) & "." & FORMAT$(@x[3]) END FUNCTION