All pastes #410688 Raw Edit

Something

public text v1 · immutable
#410688 ·published 2007-03-26 16:19 UTC
rendered paste body
; Simple Socket Script Creator v0.2
; Created by ZwekScripts
; Feel free to change this script and the scripts it produces 
; however you want, but please leave this copyright as it is.
; Right click anywhere and click "Simple socket script creator" to start.
; Remember to read the Readme file.
; Enjoy.

; --- Chessnut ---->

menu status,query,nicklist,channel { 
  Simple Socket Creator:/dialog -md sock_disp sock_disp
}

; LOOOOOOONG DIALOG!
dialog -l sock_disp {
  title "Simple Socket Creator"
  size -1 -1 300 210
  option dbu
  icon sckicon.ICO, 0
  tab "HTML Viewer", 5, 5 3 275 176
  button "View page", 2, 45 160 31 15, tab 5
  edit , 3, 37 27 69 11, result tab 5 autohs
  edit "80", 4, 37 39 19 12, result tab 5 limit 4
  box "Connection", 8, 10 18 102 68, tab 5
  text "Port:", 9, 12 40 16 8, tab 5
  text "Address:", 10, 12 29 25 8, tab 5
  box "Display", 11, 10 86 102 28, tab 5
  check "Strip HTML", 12, 13 93 37 10, tab 5
  box "Line details", 26, 10 115 102 42, tab 5
  edit "", 27, 13 123 88 11, tab 5 read autohs
  list 1, 115 20 161 129, tab 5 size vsbar
  text "Length:", 29, 13 145 31 8, tab 5
  check "Show head/headers", 41, 13 102 65 10, hide tab 5
  text "User Agent:", 39, 12 51 24 14, hide tab 5
  edit "", 40, 37 52 68 12, hide tab 5 autohs
  button "Use line", 78, 48 144 28 10, tab 5
  edit "", 101, 134 152 76 11, tab 5 autohs
  button "Next >", 102, 246 152 23 11, tab 5
  text "Search Lines:", 103, 115 151 18 14, tab 5
  text "Line Number:", 104, 13 135 78 8, tab 5
  text "Lines found:", 106, 114 167 31 8, tab 5
  edit "", 107, 148 166 25 10, tab 5 read autohs
  edit "", 108, 210 167 36 10, tab 5 autohs
  text "Go to line:", 109, 182 167 26 8, tab 5
  button "Go to", 110, 249 167 21 9, tab 5
  button "Search", 105, 214 152 28 11, tab 5
  radio "GET", 28, 60 40 20 10, hide tab 5
  radio "POST", 89, 82 40 25 10, hide tab 5
  edit "", 88, 37 65 68 18, hide tab 5 multi return autohs autovs
  text "Extra sockwrite:", 87, 12 67 24 14, hide tab 5
  button "View in Browser", 84, 81 159 26 17, tab 5 multi
  check "Ignore blank lines", 95, 51 93 54 10, tab 5
  button "Copy line", 126, 79 144 28 10, tab 5
  tab "Socket Writer", 6
  edit "No line selected", 13, 127 27 144 10, tab 6 read autohs
  box "Before editing", 14, 118 19 159 23, tab 6
  box "After editing", 15, 118 43 159 23, tab 6
  edit "No line selected", 16, 127 51 144 10, tab 6 read autohs
  box "Action", 22, 118 67 159 100, tab 6
  text "Items to remove (Separated by a comma)", 23, 123 97 103 8, tab 6
  check "Strip html after", 25, 125 149 48 10, tab 6
  edit "", 30, 122 125 128 10, tab 6 autohs
  edit "", 31, 122 105 128 10, tab 6 autohs
  button "Update", 32, 181 148 37 12, tab 6
  text "and", 36, 190 86 11 8, tab 6
  text "Data wanted is between", 34, 123 77 103 8, tab 6
  edit "", 33, 122 85 60 10, tab 6 autohs
  edit "", 35, 207 85 60 10, tab 6 autohs
  text "Items to replace (Separated by a comma)", 17, 122 117 103 8, tab 6
  box "Finding correct line", 62, 11 19 104 89, tab 6
  text "What phrase/string will ALWAYS be on this line? (MUST fill in)", 63, 16 27 90 13, tab 6
  edit "", 64, 16 40 84 10, tab 6 autohs
  text "Above phrase/string is", 65, 16 62 55 9, hide disable tab 6
  button "Next >", 70, 87 160 28 15, tab 6
  check "Strip html before", 85, 125 138 51 10, tab 6
  box "Custom Action", 86, 11 108 104 50, hide tab 6
  edit "", 92, 15 124 96 10, hide tab 6 autohs
  text "Note: Use @LINE@ to refer to the rest of the line, EG. $bytes(@LINE@,b).", 112, 15 137 98 17, hide tab 6
  text "Alias/es:", 24, 16 116 25 8, hide tab 6
  button "ASCII List", 93, 222 148 38 12, tab 6
  edit "", 44, 73 61 10 10, hide disable tab 6 limit 1
  text "lines            the line I want.", 66, 85 62 12 8, hide disable tab 6
  combo 90, 16 72 37 22, hide disable tab 6 drop
  text "the line I want.", 118, 55 73 44 8, hide disable tab 6
  check "There is no unique data on the line", 123, 17 50 95 11, hide tab 6
  button "Check", 124, 46 84 37 12, tab 6
  text "", 125, 15 98 96 7, tab 6
  tab "Script Creation", 37
  edit "", 42, 37 39 50 10, tab 37 autohs
  text "Remote trigger:", 43, 14 37 22 14, tab 37
  box "Output - Message", 45, 10 84 85 71, tab 37
  radio "Message channel", 46, 15 55 50 7, group tab 37
  edit "", 48, 14 101 76 28, tab 37 multi return autohs autovs
  text "Output message:", 49, 15 93 46 8, tab 37
  text "NOTE: Use @RESULT@ to refer to the data found. New line means new message.", 50, 14 131 75 21, tab 37
  radio "Notice nick", 47, 15 63 50 7, tab 37
  box "Socket", 58, 98 19 70 45, tab 37
  text "Socket name:", 59, 102 28 34 8, tab 37
  edit "", 60, 101 38 50 10, tab 37 autohs
  box "Data", 72, 98 69 70 86, tab 37
  edit "", 73, 101 89 50 10, tab 37 autohs
  text "Variable to store data as:", 74, 102 79 62 8, tab 37
  button "Test/View Script", 82, 91 160 43 15, tab 37
  box "Issues in creation", 96, 171 20 102 144, tab 37
  list 97, 175 28 94 83, tab 37 size
  edit "", 98, 174 113 96 10, tab 37 read autohs
  button "Find error", 99, 205 125 37 12, tab 37
  text "Note: Errors that MUST be fixed to create the script are marked with an asterix (*).", 100, 177 140 89 21, tab 37
  radio "Echo status window", 91, 15 71 59 7, tab 37
  button "Create Script", 61, 45 160 41 15, tab 37
  check "Multi-socket", 94, 102 51 57 7, tab 37
  button "Advanced trigger options", 113, 27 58 50 18, hide tab 37 multi
  text "NOTE: Leave blank to create a local variable which will be unset after use. Recommended when creating a 'Multi-socket' script.", 114, 102 102 57 48, tab 37
  radio "Simple", 119, 17 26 27 10, group tab 37
  box "Input - Trigger", 116, 10 19 85 63, tab 37
  radio "Advanced", 120, 48 26 36 10, tab 37
  edit "", 115, 37 39 50 10, hide tab 37 read autohs
  tab "Testing", 38
  button "Trigger socket", 51, 37 28 45 12, tab 38
  edit "", 52, 46 44 100 10, tab 38 read autohs
  text "Line before editing:", 53, 13 42 31 14, tab 38
  text "Line after editing:", 54, 13 58 31 14, tab 38
  edit "", 55, 46 61 99 10, tab 38 read autohs
  text "Result:", 57, 14 76 25 7, tab 38
  box "Process", 67, 161 20 111 84, tab 38
  list 68, 168 29 97 69, tab 38 size vsbar
  button "View Script", 71, 43 160 31 15, tab 38
  list 56, 13 83 140 40, tab 38 size vsbar
  box "Process line info", 75, 112 151 161 24, tab 38
  edit "", 76, 118 160 148 10, tab 38 read autohs
  edit "", 77, 13 123 140 10, tab 38 read autohs
  box "Script working?", 79, 189 111 48 34, tab 38
  icon 80, 204 121 15 15, scktick.png, 0, hide tab 38
  icon 81, 204 121 15 15, sckcross.png, 0, hide tab 38
  box "Trigger/Result", 19, 9 20 148 119, tab 38
  button "Force close socket", 83, 86 28 51 12, hide tab 38
  button "Load Script", 111, 77 160 32 15, tab 38 default
  text "Current script name:", 127, 10 142 51 8, tab 38
  text "", 128, 62 142 124 8, tab 38
  button "Cancel", 7, 12 160 28 15, ok cancel
  link "Help", 18, 255 5 13 8
  check "Toggle Advanced Mode", 21, 7 187 70 10
  icon 20, 243 5 7 7, sckhelp.gif, 0
  text "Created by ZwekScripts, Version: 0.2", 69, 102 184 55 15
  button "Feedback/ Suggestions", 117, 222 182 37 18, multi
  text "v0.2", 121, 266 190 14 8
  button "Check for updates", 122, 182 182 36 18, multi
}

alias -l regexfriendly { return $regsubex($1-,/([\Q?*+.|{}\/[]()\E])/g,\\1) }
alias -l retchanges { return $replace(%sckdispchanges,@zero£,0) }

; NO HTML ALIAS
alias nohtml { var %x,%y = $regsub($1-,/(<[^>]+>)/g,$null,%x) | return %x } 

; INITILISATION COMMANDS
on *:DIALOG:sock_disp:INIT:0: {
  did -a sock_disp 3 %sockdispsite
  $iif(%sockdispport,did -ra sock_disp 4 %sockdispport)
  did -c sock_disp 46,28,41,119
  did -arc sock_disp 90 Before 
  did -a sock_disp 90 After
  did -ar sock_disp 128 $nopath(%sockdispdir)
}

; MAIN DIAG CLOSE
on *:DIALOG:sock_disp:CLOSE:0: {
  unset %sckdisp*
}

; OPEN SOCKET (VIEW PAGE)
on *:dialog:sock_disp:sclick:2:{ 
  if ($did(3)) {
    if ($did(sock_disp,4) == $null) || ($did(sock_disp,4) !isnum) did -ar sock_disp 4 80
    did -r sock_disp 27
    set %sockdispsite $did(3)
    set %sockdisphost $remove($left($remove($did(3),http://),$pos($remove($did(3),http://),/,1)),/)
    set %sockdisppage $remove($did(sock_disp,3),http://,%sockdisphost)
    set %sockdispport $did(sock_disp,4)
    if (!%sockdisphost) {
      set %sockdisphost %sockdisppage
      set %sockdisppage /
    }
    did -r sock_disp 1
    if ($did(12).state == 1) { did -bc sock_disp 85 }
    else { did -eu sock_disp 85 }
    sockclose dsock.1
    sockopen dsock.1 %sockdisphost %sockdispport
  }
}

on *:SOCKOPEN:dsock.*: {
  sockwrite -nt $sockname $iif($did(sock_disp,28).state == 1,GET,POST) %sockdisppage HTTP/1.1
  sockwrite -nt $sockname Host: %sockdisphost
  $iif($did(sock_disp,40),sockwrite -nt $sockname User-Agent: $did(sock_disp,40))
  var %j = 1
  var %k = $did(sock_disp,88).lines
  while (%j < %k) {     
    if ($did(sock_disp,88) != $null) sockwrite -nt $sockname $did(sock_disp,88, [ $+ [ %j ] ] )
    inc %j
  }
  sockwrite -nt $sockname $crlf
  set %sckdispheads $did(sock_disp,41).state 
}

on *:SOCKREAD:dsock.*: {
  if ($sockerr) {
    if ($right($sockname,1) == 1) {
      did -ar sock_disp 1 !!@@ ERROR (Code: $sckerr $+ ) OPENING SOCKET @@!!
    }
    elseif ($right($sockname,1) == 2) {
      did -ar sock_disp_check 6 ERROR CONNECTING TO SOCKET.
    }
    elseif ($right($sockname,1) == 3) {
      did -ar sock_disp_lineref 6 ERROR CONNECTING TO SOCKET.
    }
    halt
  }
  else {
    var %sockreader
    sockread %sockreader
    if ($right($sockname,1) == 1) {
      if (%sckdispheads == 0) {
        if (*</head>* iswm %sockreader) set %sckdispheads 1
      }
      if (%sckdispheads == 1) {
        if ($did(sock_disp,12).state == 1) {
          if ($len(%sockreader) > 850) did -a sock_disp 1 !!@@ LINE TOO LONG @@!!
          else {
            if ($did(sock_disp,95).state == 1) {
              if ($nohtml($remove(%sockreader,$chr(9),$chr(32)) != $null) did -a sock_disp 1 $nohtml(%sockreader)
            }
            else did -a sock_disp 1 $nohtml(%sockreader)
          }
        }
        else {
          if ($len(%sockreader) > 850) did -a sock_disp 1 !!@@ LINE TOO LONG @@!!
          else {
            if ($did(sock_disp,95).state == 1) {
              if ($remove(%sockreader,$chr(9),$chr(32)) != $null) {
                did -a sock_disp 1 %sockreader
              }
            }
            else did -a sock_disp 1 %sockreader
          }
        }
      }
    }
    elseif ($right($sockname,1) == 2) {
      if ($len($remove(%sockreader,$chr(9),$chr(32))) == 0) halt
      if ($+(*,$did(sock_disp,64),*) iswm $iif($did(sock_disp,90).seltext == After,%sockreader,%sockreader- [ $+ [ $did(sock_disp,44) ] ])) {
        did -ar sock_disp_check 1 %sockreader [ $+ [ $iif($did(sock_disp,90).seltext == After,$+(-,$did(sock_disp,44))) ] ]
        did -ar sock_disp_check 6 %sockreader [ $+ [ $iif($did(sock_disp,90).seltext == Before,$+(-,$did(sock_disp,44))) ] ]
        if ($+(*,$did(sock_disp_check,7),*) iswm $did(sock_disp_check,6)) {
          did -ar sock_disp_check 8 IS on the line that you have specified to contain the unique data/string
          did -v sock_disp_check 11
        }
        else {
          did -ar sock_disp_check 8 IS NOT on the line that you have specified to contain the unique data/string
          did -v sock_disp_check 17
        }
        unset %sockreader*
        sockclose $sockname
      }
      if ($len($remove(%sockreader,$chr(9))) > 0) {
        var %x = $calc($did(sock_disp,44) - 1)
        while (%x > -1) {
          if ($len(%sockreader [ $+ [ $iif(%x != 0,$+(-,%x)) ] ]) <= 850) set %sockreader [ $+ [ $+(-,$calc(%x + 1)) ] ] %sockreader [ $+ [ $iif(%x != 0,$+(-,%x)) ] ]
          dec %x
        }
      }
    }
    elseif ($right($sockname,1) == 3) {
      if ($+(*,$did(sock_disp,64),*) iswm %sockreader) {
        did -ar sock_disp_lineref 6 %sockreader 
        if (%sockreader == $did(sock_disp,13)) {
          did -v sock_disp_lineref 11
          did -ar sock_disp_lineref 9 The line that was found using the data you specified IS the same as the line you want.
        }
        else {
          did -v sock_disp_lineref 10
          did -ar sock_disp_lineref 9 The line that was found using the data you specified IS NOT the same as the line you want.
        }
        sockclose $sockname
      }
    }
  }
}

on *:SOCKCLOSE:dsock.2: {
  did -ar sock_disp_check 8 IS NOT on the line that you have specified to contain the unique data/string
}

on *:SOCKCLOSE:dsock.3: {
  did -ar sock_disp_lineref 6 NOT FOUND
  did -v sock_disp_lineref 10
  did -ar sock_disp_lineref 9 The string you specified is not contained anywhere on any line.
}

; DOUBLE CLICK ON PAGE LIST
on *:dialog:sock_disp:dclick:1:{
  if ($did(1).seltext && $did(1).seltext != !!@@ LINE TOO LONG @@!!) {
    did -ar sock_disp 13,16 $did(1).seltext
    did -fu sock_disp 6
  }
}

; "USE LINE" BUTTON CLICK
on *:dialog:sock_disp:sclick:78:{
  if ($did(1).seltext && $did(1).seltext != !!@@ LINE TOO LONG @@!!) {
    did -ar sock_disp 13,16 $did(1).seltext
    did -fu sock_disp 6
  }
}

; "COPY LINE" BUTTON CLICK
on *:dialog:sock_disp:sclick:126:{
  clipboard $did(1).seltext
}

; CHAR CODE LIST
on *:dialog:sock_disp:sclick:93:{
  window -laCdo -t15,30 @Chr -1 -1 240 400
  aline @Chr $+(Character,$chr(9),Chr Code)
  var %i = 32 
  while (%i <= 255) { 
    aline @Chr $+($chr(%i),$chr(9),$chr(36),chr,$chr(40),%i,$chr(41))
    inc %i 
  } 
}

; SINGLE CLICK ON PAGE LIST
on *:dialog:sock_disp:sclick:1:{
  did -ar sock_disp 27 $did(1).seltext
  did -ar sock_disp 29 Length: $len($did(1).seltext)
  did -ar sock_disp 104 Line Number: $did(1).sel
}

; SEARCH PAGE LIST
on *:dialog:sock_disp:sclick:105:{
  unset %sockdispres
  unset %sckdispfnd.*
  var %i $did(1).lines
  var %c 0
  set %sockdispres 1
  while (%c <= %i) {
    if ($+(*,$did(101),*) iswm $did(1,%c)) { 
      set %sckdispfnd. [ $+ [ %sockdispres ] ] %c
      inc %sockdispres
    }
    inc %c
  }
  if (%sckdispfnd.1) did -c sock_disp 1 %sckdispfnd.1
  did -ar sock_disp 107 $calc(%sockdispres - 1)
  set %sckdispnextimes 1
  did -ar sock_disp 27 $did(1).seltext
  did -ar sock_disp 29 Length: $len($did(1).seltext)
  did -ar sock_disp 104 Line Number: $did(1).sel
}

; SEARCH PAGE LIST --> NEXT
on *:dialog:sock_disp:sclick:102:{
  if (%sckdispnextimes == $calc(%sockdispres - 1)) set %sckdispnextimes 0
  inc %sckdispnextimes
  did -c sock_disp 1 %sckdispfnd. [ $+ [ $calc(%sckdispnextimes) ] ] 
  did -ar sock_disp 27 $did(1).seltext
  did -ar sock_disp 29 Length: $len($did(1).seltext)
  did -ar sock_disp 104 Line Number: $did(1).sel
}

; SEARCH PAGE LIST --> GOTO
on *:dialog:sock_disp:sclick:110:{
  did -c sock_disp 1 $did(108)
  did -ar sock_disp 27 $did(1).seltext
  did -ar sock_disp 29 Length: $len($did(1).seltext)
  did -ar sock_disp 104 Line Number: $did(1).sel
}

alias -l updatechanges {
  did -ar sock_disp 16 $did(13) 
  set %sckdispchanges $iif($did(sock_disp,33) != $null || $did(sock_disp,35) != $null,$chr(36) $+ regml(1),$chr(37) $+ sockreade [ $+ [ $iif($did(sock_disp,123).state == 1 && $did(sock_disp,90).seltext == After && $did(sock_disp,21).state == 1,$+(r,-,$did(sock_disp,44)),r)) ] ])
  if ($did(85).state == 1) { did -ar sock_disp 16 $nohtml($did(16)) | set %sckdispchanges $chr(36) $+ nohtml( $+ %sckdispchanges $+ ) }
  noop $regex($did(16),/ $+ $iif($did(33),$regexfriendly($did(33)),^) $+ (.*?) $+ $iif($did(35),$regexfriendly($did(35)),$) $+ /Si)
  if ($regml(1)) { did -ar sock_disp 16 $regml(1) }
  tokenize 44 $did(31)
  if ($did(31) != $null) { set %sckdispchanges $chr(36) $+ remove( $+ %sckdispchanges $+ $iif($1,$chr(44) $+ $1) $+ $iif($2,$chr(44) $+ $2) $+ $iif($3,$chr(44) $+ $3) $+ $iif($4,$chr(44) $+ $4) $+ $iif($5,$chr(44) $+ $5) $+ $iif($6,$chr(44) $+ $6) $+ $iif($7,$chr(44) $+ $7) $+ $iif($8,$chr(44) $+ $8) $+ $iif($9,$chr(44) $+ $9) $+ $iif($10,$chr(44) $+ $10) $+ $iif($11,$chr(44) $+ $11) $+ $iif($12,$chr(44) $+ $12) $+ ) }
  var %sckstredit = $chr(175) $+ $replace($did(31),$chr(40),OBKT,$chr(41),CBKT,$chr(44),$chr(175)) $+ $chr(175)
  var %sckstredit = $regsubex(%sckstredit,/\$chrOBKT([0-9]+)CBKT/gSi,$chr(\t))
  tokenize 175 %sckstredit
  if ($did(31) != $null) { did -ar sock_disp 16 $remove($did(16),$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12) }
  tokenize 44 $did(30)
  if ($did(30) != $null) { set %sckdispchanges $chr(36) $+ replace( $+ %sckdispchanges $+ $iif($1,$chr(44) $+ $1) $+ $iif($2,$chr(44) $+ $2) $+ $iif($3,$chr(44) $+ $3) $+ $iif($4,$chr(44) $+ $4) $+ $iif($5,$chr(44) $+ $5) $+ $iif($6,$chr(44) $+ $6) $+ $iif($7,$chr(44) $+ $7) $+ $iif($8,$chr(44) $+ $8) $+ $iif($9,$chr(44) $+ $9) $+ $iif($10,$chr(44) $+ $10) $+ $iif($11,$chr(44) $+ $11) $+ $iif($12,$chr(44) $+ $12) $+ ) }
  var %sckstredit = $chr(175) $+ $replace($did(30),$chr(40),OBKT,$chr(41),CBKT,$chr(44),$chr(175)) $+ $chr(175)
  var %sckstredit = $regsubex(%sckstredit,/\$chrOBKT([0-9]+)CBKT/gSi,$chr(\t))
  tokenize 175 %sckstredit
  if ($did(30) != $null) { did -ar sock_disp 16 $replace($did(16),$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12) }
  if ($did(25).state == 1) { did -ar sock_disp 16 $nohtml($did(16)) | set %sckdispchanges $chr(36) $+ nohtml( $+ %sckdispchanges $+ ) }
  if ($did(92) != $null) { did -ar sock_disp 16 $eval($replace($did(92),@LINE@,$did(16)),2) | set %sckdispchanges $replace($did(92),@LINE@,%sckdispchanges) }
}

; UPDATE CHANGES
on *:dialog:sock_disp:sclick:32:{
  $updatechanges
}

; TOGGLE ADVANCED MODE
on *:dialog:sock_disp:sclick:21:{
  did $iif($did(21).state == 0,-h,-v) sock_disp 39-41,24,92,112,28,83,86-89,123,65-66,44,118,90
}

; SCRIPT CREATE
on *:dialog:sock_disp:sclick:61:{
  $updatechanges
  dialog -mad sock_disp_create sock_disp_create
}

; ------------------- Create script ---------------

dialog sock_disp_create {
  title "Create Script"
  size -1 -1 130 63
  option dbu
  icon scksave.ico,0
  edit "", 1, 6 17 96 10, limit 30 right
  text "What would you like to call this file?", 2, 14 8 87 8
  button "OK", 3, 21 48 37 12, default
  radio ".mrc", 5, 104 15 23 7
  radio ".txt", 6, 104 22 22 7
  text "Note: If the filename already exists, it will be overwritten.", 4, 7 30 111 15
  button "Cancel", 7, 64 48 37 12, cancel
}


; INITILISATION COMMANDS
on *:DIALOG:sock_disp_create:INIT:0: {
  did -c sock_disp_create 5
  did -ar sock_disp_create 1 $did(sock_disp,60)
}

on *:dialog:sock_disp_create:sclick:3:{
  if ($did(1) && $did(1) != notes && $did(1) != readme && $did(1) != versions) {
    did -f sock_disp 61
    set %sockdispdir $replace($did(sock_disp_create,1),$chr(32),$chr(95))
    set %sockdispdir $regsubex(%sockdispdir,/([\!\"\£\$\%\^\&\*\(\)\=\}\{\]\[\#\~\@\'\:\;\?\,\\\|\\\\<\>\¬\`\/])/g,$null)
    set %sockdispdir $+(",$scriptdir,%sockdispdir,$chr(46),$iif($did(5).state == 1,mrc,txt),")
    did -ar sock_disp 128 $nopath(%sockdispdir)
    unset %sckerror
    did -r sock_disp 97,98
    if ($did(sock_disp,13) == $null) { did -a sock_disp 97 * You have not opened a socket to choose a line from | set %sckerror yes }
    if ($did(sock_disp,13) == $null || $did(sock_disp,13) == No line selected) { did -a sock_disp 97 * You have not selected a line within the socket! | set %sckerror yes }
    if ($did(sock_disp,64) == $null) { did -a sock_disp 97 * Must specify value ALWAYS on a line | set %sckerror yes }
    if ($did(sock_disp,42) == $null && $did(sock_disp,119).state == 1) || ($did(sock_disp,115) == $null && $did(sock_disp,119).state == 0) { did -a sock_disp 97 No trigger defined. Used !trigger | $simplerad | did -arv sock_disp 42 !trigger | did -c sock_disp 119 | did -u sock_disp 120 }
    if ($did(sock_disp,48) == $null) { did -a sock_disp 97 No output message: Used Result: @RESULT@ | did -a sock_disp 48 Result: @RESULT@ }
    if ($did(sock_disp,60) == $null) { did -a sock_disp 60 socket $+ $rand(100,100000) | did -a sock_disp 97 No socket defined: Used socket: $did(sock_disp,60) }
    if ($did(sock_disp,73) == $null) { did -a sock_disp 97 No variable defined. Value will be unset after. }
    if ($left($did(sock_disp,73),1) != $chr(37) && $did(sock_disp,73) != $null) { did -ar sock_disp 73 $chr(37) $+ $did(sock_disp,73) | did -a sock_disp 97 Corrected invalid variable - added $chr(37) $+ . }
    if (%sckerror != yes) {
      write -c %sockdispdir $chr(59) $iif($did(sock_disp,42).visible == $true,$did(sock_disp,42),$did(sock_disp,60)) script created using Chessnut's Simple Socket Script Creator
      write %sockdispdir $crlf
      write %sockdispdir $iif($did(sock_disp,42).visible == $false,$did(sock_disp,115),on *:text: $+ $did(sock_disp,42) $+ *:#: $chr(123))
      if ($did(sock_disp,94).state == 1) write %sockdispdir var $chr(37) $+ sckid = $+($chr(36),right,$chr(40),$chr(36),ticks,$chr(44),5,$chr(41))
      if ($did(sock_disp,94).state == 0) write %sockdispdir if ( $+ $chr(36) $+ sock( $+ $did(sock_disp,60) $+ )) .sockclose $did(sock_disp,60)
      if ($did(sock_disp,120).state == 1) {
        var %i = 1
        while (%sckdisptrigway. [ $+ [ %i ] ]) {
          write %sockdispdir $iif($did(sock_disp,94).state == 0,%sckdisptrigway. [ $+ [ %i ] ],$replace(%sckdisptrigway. [ $+ [ %i ] ],$+($chr(37),way),$+($chr(37),way) $+ . $chr(91) $chr(36) $+ + $chr(91) $chr(37) $+ sckid $chr(93) $chr(93))))
          inc %i
        }
      }
      if ($did(sock_disp,119).state = 1 && $did(sock_disp,46).state = 1) write %sockdispdir set $chr(37) $+ chan $+ $iif($did(sock_disp,94).state == 1,. $chr(91) $chr(36) $+ + $chr(91) $chr(37) $+ sckid $chr(93) $chr(93)) $chr(36) $+ chan 
      if ($did(sock_disp,119).state = 1 && $did(sock_disp,47).state = 1) write %sockdispdir set $chr(37) $+ nick $+ $iif($did(sock_disp,94).state == 1,. $chr(91) $chr(36) $+ + $chr(91) $chr(37) $+ sckid $chr(93) $chr(93)) $chr(36) $+ nick
      write %sockdispdir sockopen $did(sock_disp,60) $+ $iif($did(sock_disp,94).state == 1,. $chr(91) $chr(36) $+ + $chr(91) $chr(37) $+ sckid $chr(93) $chr(93)) %sockdisphost %sockdispport
      write %sockdispdir $chr(125)
      write %sockdispdir on *:SOCKOPEN: $+ $did(sock_disp,60) $+ $iif($did(sock_disp,94).state == 1,.*) $+ : $chr(123)
      write %sockdispdir sockwrite -nt $chr(36) $+ sockname $iif($did(sock_disp,28).state == 1,GET,POST) %sockdisppage HTTP/1.1
      write %sockdispdir sockwrite -nt $chr(36) $+ sockname Host: %sockdisphost
      $iif($did(sock_disp,40),write %sockdispdir sockwrite -nt $chr(36) $+ sockname User-Agent: $did(sock_disp,40))
      var %j = 1
      var %k = $did(sock_disp,88).lines
      while (%j <= %k) {     
        if ($did(sock_disp,88) != $null) write %sockdispdir sockwrite -nt $chr(36) $+ sockname $did(sock_disp,88, [ $+ [ %j ] ] )
        inc %j
      }  
      write %sockdispdir sockwrite -nt $chr(36) $+ sockname $chr(36) $+ crlf
      write %sockdispdir $chr(125)
      write %sockdispdir on *:SOCKREAD: $+ $did(sock_disp,60) $+ $iif($did(sock_disp,94).state == 1,.*) $+ : $chr(123)
      write %sockdispdir if ( $+ $chr(36) $+ sockerr) $chr(123)
      if ($did(sock_disp,119).state == 1) {
        if ($did(sock_disp,46).state == 1) {
          write %sockdispdir msg $chr(37) $+ chan $+ $iif($did(sock_disp,94).state == 1,. $chr(91) $chr(36) $+ + $chr(91) $chr(36) $+ right( $+ $chr(36) $+ sockname,5) $chr(93) $chr(93)) Socket Error: $chr(36) $+ sockname $chr(36) $+ + . Error code: $chr(36) $+ sockerr Please inform $chr(36) $+ me of this error message.
        }
        if ($did(sock_disp,47).state == 1) {
          write %sockdispdir notice $chr(37) $+ nick $+ $iif($did(sock_disp,94).state == 1,. $chr(91) $chr(36) $+ + $chr(91) $chr(36) $+ right( $+ $chr(36) $+ sockname,5) $chr(93) $chr(93)) Socket Error: $chr(36) $+ sockname $chr(36) $+ + . Error code: $chr(36) $+ sockerr Please inform $chr(36) $+ me of this error message.
        }
        if ($did(sock_disp,91).state == 1) {
          write %sockdispdir echo -s Socket Error: $chr(36) $+ sockname $chr(36) $+ + . Error code: $chr(36) $+ sockerr $+ .
        }  
      }
      else {
        write %sockdispdir $chr(37) $+ way $+ $iif($did(sock_disp,94).state == 1,. $chr(91) $chr(36) $+ + $chr(91) $chr(36) $+ right( $+ $chr(36) $+ sockname,5) $chr(93) $chr(93)) Socket Error: $chr(36) $+ sockname $chr(36) $+ + . Error code: $chr(36) $+ sockerr Please inform $chr(36) $+ me of this error message.
      }
      write %sockdispdir halt
      write %sockdispdir $chr(125)
      write %sockdispdir else $chr(123)
      write %sockdispdir var $chr(37) $+ sockreader
      write %sockdispdir sockread $chr(37) $+ sockreader
      write %sockdispdir if (* $+ $did(sock_disp,64) $+ * iswm $iif($did(sock_disp,90).seltext == Before && $did(sock_disp,123).state == 1 && $did(sock_disp,21).state == 1,$chr(37) $+ sockreader- [ $+ [ $did(sock_disp,44) ] ],$chr(37) $+ sockreader)) $+ $chr(41) $chr(123)
      $iif($did(sock_disp,33) != $null || $did(sock_disp,35) != $null,write %sockdispdir noop $chr(36) $+ regex( $+ $iif($did(sock_disp,90).seltext == After && $did(sock_disp,123).state == 1 && $did(sock_disp,21).state == 1,$chr(37) $+ sockreader- [ $+ [ $did(sock_disp,44) ] ],$chr(37) $+ sockreader) $+ $chr(44) $+ / $+ $iif($did(sock_disp,33),$regexfriendly($did(sock_disp,33)),^) $+ (.*?) $+ $iif($did(sock_disp,35),$regexfriendly($did(sock_disp,35)),$) $+ /Si))
      $iif($did(sock_disp,33) != $null || $did(sock_disp,35) != $null,set %sckdispchanges $replace(%sckdispchanges,$iif($did(sock_disp,90).seltext == After && $did(sock_disp,123).state == 1 && $did(sock_disp,21).state == 1,% $+ sockreader- [ $+ [ $did(sock_disp,44) ] ],% $+ sockreader),$ $+ regml(1)))
      $iif($did(sock_disp,33) != $null || $did(sock_disp,35) != $null,write %sockdispdir $iif($did(sock_disp,73) == $null,var $+($chr(37),tempvar),set $did(sock_disp,73)) $replace(%sckdispchanges,@zero£,0),write %sockdispdir $iif($did(sock_disp,73) == $null,var $+($chr(37),tempvar), set $did(sock_disp,73)) $replace(%sckdispchanges,@zero£,0))
      did -ar sock_disp 48 $regsubex($did(sock_disp,48),/(.*?[^ ])@RESULT@/Sig,\1 $chr(36) $+ + @RESULT@)
      did -ar sock_disp 48 $regsubex($did(sock_disp,48),/@RESULT@([^ ].*?)/Sig,@RESULT@ $chr(36) $+ + \1)
      if ($did(sock_disp,119).state == 1) {
        var %i = 1
        var %c = $did(sock_disp,48).lines
        while (%i <= %c) {   
          if ($did(sock_disp,46).state == 1) {
            write %sockdispdir msg $chr(37) $+ chan $+ $iif($did(sock_disp,94).state == 1,. $chr(91) $chr(36) $+ + $chr(91) $chr(36) $+ right( $+ $chr(36) $+ sockname,5) $chr(93) $chr(93)) $replace($did(sock_disp,48, [ $+ [ %i ] ] ),@RESULT@,$iif($did(sock_disp,73) == $null,$+($chr(37),tempvar), $did(sock_disp,73)))
          }
          if ($did(sock_disp,47).state == 1) {
            write %sockdispdir notice $chr(37) $+ nick $+ $iif($did(sock_disp,94).state == 1,. $chr(91) $chr(36) $+ + $chr(91) $chr(36) $+ right( $+ $chr(36) $+ sockname,5) $chr(93) $chr(93)) $replace($did(sock_disp,48, [ $+ [ %i ] ] ),@RESULT@,$iif($did(sock_disp,73) == $null,$+($chr(37),tempvar), $did(sock_disp,73)))
          }
          if ($did(sock_disp,91).state == 1) {
            write %sockdispdir echo -s $replace($did(sock_disp,48, [ $+ [ %i ] ] ),@RESULT@,$iif($did(sock_disp,73) == $null,$+($chr(37),tempvar), $did(sock_disp,73)))
          }  
          inc %i
        }  
      }
      else {
        var %i = 1
        var %c = $did(sock_disp,48).lines
        while (%i <= %c) {  
          write %sockdispdir $chr(37) $+ way $+ $iif($did(sock_disp,94).state == 1,. $chr(91) $chr(36) $+ + $chr(91) $chr(36) $+ right( $+ $chr(36) $+ sockname,5) $chr(93) $chr(93)) $replace($did(sock_disp,48, [ $+ [ %i ] ] ),@RESULT@,$iif($did(sock_disp,73) == $null,$+($chr(37),tempvar), $did(sock_disp,73)))
          inc %i
        }
      }
      if ($did(sock_disp,94).state == 1) write %sockdispdir unset $chr(37) $+ * $+ $iif($did(sock_disp,94).state == 1,. $chr(91) $chr(36) $+ + $chr(91) $chr(36) $+ right( $+ $chr(36) $+ sockname,5) $chr(93) $chr(93))
      if ($did(sock_disp,123).state == 1 && $did(sock_disp,21).state == 1) write %sockdispdir unset $chr(37) $+ sockreader*
      if ($did(sock_disp,119).state = 1 && $did(sock_disp,46).state = 1) write %sockdispdir unset $chr(37) $+ chan
      if ($did(sock_disp,119).state = 1 && $did(sock_disp,47).state = 1) write %sockdispdir unset $chr(37) $+ nick
      write %sockdispdir sockclose $chr(36) $+ sockname
      write %sockdispdir $chr(125)
      if ($did(sock_disp,123).state == 1 && $did(sock_disp,21).state == 1) {
        write %sockdispdir if ($len($remove(%sockreader,$chr(9),$chr(32))) > 0) $chr(123)
        write %sockdispdir var $chr(37) $+ x = $calc($did(sock_disp,44) - 1)
        write %sockdispdir while (%x > -1) $chr(123)
        write %sockdispdir if ($len(%sockreader $chr(91) $chr(36) $+ + $chr(91) $chr(36) $+ iif(%x != 0,$+(-,%x)) $chr(93) $chr(93) $+ ) <= 850) set $chr(37) $+ sockreader $chr(91) $chr(36) $+ + $chr(91) $chr(36) $+ +(-,$calc(%x + 1)) $chr(93) $chr(93) $chr(37) $+ sockreader $chr(91) $chr(36) $+ + $chr(91) $chr(36) $+ iif(%x != 0,$+(-,%x)) $chr(93) $chr(93)
        write %sockdispdir dec $chr(37) $+ x
        write %sockdispdir $chr(125)
        write %sockdispdir $chr(125)
      }
      write %sockdispdir $chr(125)
      write %sockdispdir $chr(125)
      did -a sock_disp 97 Full script successfully saved to $+($scriptdir,%sockdispdir)
      did -a sock_disp 97 SCRIPT CREATED SUCCESSFULLY.
      dialog -x sock_disp_create sock_disp_create
    }
    else {
      did -a sock_disp 97 SCRIPT NOT CREATED.
      dialog -x sock_disp_create sock_disp_create
    }
  }
}


; ----------------- Back to main dialog -----------------------

; SELECT CREATION LINE
on *:dialog:sock_disp:sclick:97:{
  did -ar sock_disp 98 $did(97).seltext
}

; FIND ERROR
on *:dialog:sock_disp:sclick:99:{
  if ($did(98) == $null) halt
  if (*opened a socket to choose* iswm $did(98)) || (*not selected a line* iswm $did(98)) { did -f sock_disp 5 | did -f sock_disp 2 }
  if (*value ALWAYS on a line* iswm $did(98)) { did -f sock_disp 6 | did -f sock_disp G }
  if (*No trigger* iswm $did(98)) { did -f sock_disp 42 }
  if (*No output* iswm $did(98)) { did -f sock_disp 48 }
  if (*No socket* iswm $did(98)) { did -f sock_disp 60 }
  if (*No variable* iswm $did(98)) { did -f sock_disp 73 }
  if (*invalid variable* iswm $did(98)) { did -f sock_disp 73 }
}

; SCRIPT TEST
on *:dialog:sock_disp:sclick:51:{
  if (%sockdisphost && %sockdispport && $did(13) != No line selected) {
    did -h sock_disp 80
    did -h sock_disp 81
    did -r sock_disp 76,55,52
    did -r sock_disp 68 Script initialised
    if ($sock(testsock)) .sockclose testsock
    set %reponce 1
    unset %testvalue
    sockopen testsock %sockdisphost %sockdispport
  }
}

on *:SOCKOPEN:testsock: {
  did -a sock_disp 68 Socket opened successfully
  sockwrite -nt $sockname $iif($did(sock_disp,28).state == 1,GET,POST) %sockdisppage HTTP/1.1
  sockwrite -nt $sockname Host: %sockdisphost
  $iif($did(sock_disp,40),sockwrite -nt $sockname User-Agent: $did(sock_disp,40))
  var %j = 1
  var %k = $did(sock_disp,88).lines
  while (%j <= %k) {     
    sockwrite -nt $sockname $did(sock_disp,88, [ $+ [ %j ] ] )
    inc %j
  }
  sockwrite -nt $sockname $crlf
  did -a sock_disp 68 Written data to socket: Host: %sockdisphost $+ , Page: %sockdisppage
}

on *:SOCKREAD:testsock: {
  if ($sockerr) {
    did -a sock_disp 68 SOCKET ERROR: $sockerr
    $iif(%testvalue != $null,did -v sock_disp 80,did -v sock_disp 81)
    halt
  }
  else {
    if (%reponce == 1) {
      did -a sock_disp 68 Socket read without errors.
      set %reponce 0
    }
    var %sockreader
    sockread %sockreader
    if ($len($remove(%sockreader,$chr(9),$chr(32))) = 0) halt
    if ($+(*,$did(sock_disp,64),*) iswm $iif($did(sock_disp,90).seltext == Before && $did(sock_disp,123).state == 1 && $did(sock_disp,21).state == 1,%sockreader- [ $+ [ $did(sock_disp,44) ] ],%sockreader)) {
      did -a sock_disp 68 Line found: $iif($did(sock_disp,90).seltext == After && $did(sock_disp,123).state == 1 && $did(sock_disp,21).state == 1,%sockreader- [ $+ [ $did(sock_disp,44) ] ],%sockreader)
      did -ra sock_disp 52,55 $iif($did(sock_disp,90).seltext == After && $did(sock_disp,123).state == 1 && $did(sock_disp,21).state == 1,%sockreader- [ $+ [ $did(sock_disp,44) ] ],%sockreader)
      set %sckdispchanges $iif($did(sock_disp,90).seltext == After && $did(sock_disp,123).state == 1 && $did(sock_disp,21).state == 1,$chr(37) $+ sockreader- [ $+ [ $did(sock_disp,44) ] ],$chr(37) $+ sockreader)
      if ($did(sock_disp,85).state == 1) { did -ar sock_disp 55 $nohtml($did(sock_disp,55)) | set %sckdispchanges $chr(36) $+ nohtml( $+ %sckdispchanges $+ ) }
      noop $regex($did(sock_disp,55),/ $+ $iif($did(sock_disp,33),$regexfriendly($did(sock_disp,33)),^) $+ (.*?) $+ $iif($did(sock_disp,35),$regexfriendly($did(sock_disp,35)),$) $+ /Si)
      if ($regml(1)) set $iif($did(sock_disp,90).seltext == After && $did(sock_disp,123).state == 1 && $did(sock_disp,21).state == 1,% $+ sockreader- [ $+ [ $did(sock_disp,44) ] ],% $+ sockreader) $regml(1)
      tokenize 44 $replace($did(sock_disp,31),0,@zero£)
      if ($did(sock_disp,31) != $null) { did -ar sock_disp 55 $remove($did(sock_disp,16),$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12) | set %sckdispchanges $chr(36) $+ remove( $+ %sckdispchanges $+ $iif($1 != $null,$chr(44) $+ $1) $+ $iif($2,$chr(44) $+ $2) $+ $iif($3,$chr(44) $+ $3) $+ $iif($4,$chr(44) $+ $4) $+ $iif($5,$chr(44) $+ $5) $+ $iif($6,$chr(44) $+ $6) $+ $iif($7,$chr(44) $+ $7) $+ $iif($8,$chr(44) $+ $8) $+ $iif($9,$chr(44) $+ $9) $+ $iif($10,$chr(44) $+ $10) $+ $iif($11,$chr(44) $+ $11) $+ $iif($12,$chr(44) $+ $12) $+ ) }
      tokenize 44 $replace($did(sock_disp,30),0,@zero£)
      if ($did(sock_disp,30) != $null) { did -ar sock_disp 55 $replace($did(sock_disp,16),$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12) | set %sckdispchanges $chr(36) $+ replace( $+ %sckdispchanges $+ $iif($1,$chr(44) $+ $1) $+ $iif($2,$chr(44) $+ $2) $+ $iif($3,$chr(44) $+ $3) $+ $iif($4,$chr(44) $+ $4) $+ $iif($5,$chr(44) $+ $5) $+ $iif($6,$chr(44) $+ $6) $+ $iif($7,$chr(44) $+ $7) $+ $iif($8,$chr(44) $+ $8) $+ $iif($9,$chr(44) $+ $9) $+ $iif($10,$chr(44) $+ $10) $+ $iif($11,$chr(44) $+ $11) $+ $iif($12,$chr(44) $+ $12) $+ ) }
      if ($did(sock_disp,25).state == 1) { did -ar sock_disp 55 $nohtml($did(sock_disp,16)) | set %sckdispchanges $chr(36) $+ nohtml( $+ %sckdispchanges $+ ) }
      if ($did(sock_disp,92) != $null) { did -ar sock_disp 55 $eval($replace($did(sock_disp,92),@LINE@,$did(sock_disp,55)),2) | set %sckdispchanges $replace($did(sock_disp,92),@LINE@,%sckdispchanges) }
      set %testvalue $eval($retchanges,2)
      did -ra sock_disp 55 %testvalue
      did -a sock_disp 68 $iif(%testvalue != $null,Data found: %testvalue,DATA NOT FOUND)
      $iif(%testvalue != $null && $did(sock_disp,52) != HTTP/1.1 200 OK,did -v sock_disp 80,did -v sock_disp 81)
      var %i = 1
      var %c = $did(sock_disp,48).lines
      while (%i <= %c) {     
        did -a sock_disp 56 $iif($did(sock_disp,91).state == 1,$chr(124) ECHO $chr(124) $+ >,< $+ $me $+ >) $replace($did(sock_disp,48, [ $+ [ %i ] ] ),@RESULT@,%testvalue)
        inc %i
      }  
      unset %reponce     
      unset %testvalue 
      unset %sockreader*
      sockclose testsock
    }
    if ($did(sock_disp,123).state == 1 && $did(sock_disp,21).state == 1) {
      if ($len($remove(%sockreader,$chr(9),$chr(32))) > 0) {
        var %x = $calc($did(sock_disp,44) - 1)
        while (%x > -1) {
          if ($len(%sockreader [ $+ [ $iif(%x != 0,$+(-,%x)) ] ]) <= 850) set %sockreader [ $+ [ $+(-,$calc(%x + 1)) ] ] %sockreader [ $+ [ $iif(%x != 0,$+(-,%x)) ] ]
          dec %x
        }
      }
    }
  }
}

on *:SOCKCLOSE:testsock: {
  did -a sock_disp 68 Socket closed successfully
  $iif(%testvalue != $null && $did(sock_disp,52) != HTTP/1.1 200 OK,did -v sock_disp 80,did -v sock_disp 81)
}

; TEST LINE SELECT
on *:dialog:sock_disp:sclick:68:{
  did -ar sock_disp 76 $did(68).seltext
}

; FAKE CHAT WINDOW SELECT
on *:dialog:sock_disp:sclick:56:{
  did -ar sock_disp 77 $did(56).seltext
}

; NEXT CLICK
on *:dialog:sock_disp:sclick:70:{
  did -fu sock_disp 37
}

; CHECK FROM OTHER LINE
on *:dialog:sock_disp:sclick:123:{
  did $iif($did(123).state == 0,-b,-e) sock_disp 65,44,66,118,90
}


; CHECK LINES CLICK
on *:dialog:sock_disp:sclick:124:{
  if ($did(sock_disp,123).state == 1 && $did(sock_disp,21).state == 1) {
    did -r sock_disp 125
    if ($did(44)) dialog -mad sock_disp_check sock_disp_check
    else did -ar sock_disp 125 The number of lines cannot be zero.
  }
  else {
    dialog -mad sock_disp_lineref sock_disp_lineref
  }
}

;;;;;;;;;;;;;;;;;;;; CHECK LINES DIALOG ;;;;;;;;;;;;;;;

dialog sock_disp_check {
  title "Multiple line reference checker"
  size -1 -1 155 167
  option dbu
  icon sckicon.ICO, 0
  edit "", 1, 7 36 141 10, read autohs
  text "The line you wish to get is:", 2, 8 28 86 8
  text "If the following information is correct, you have the right line selected!", 3, 18 4 126 14, center
  box "Specified lines", 4, 5 20 145 53
  text "The line that should contain the unique data/string is:", 5, 8 49 133 8
  edit "", 6, 7 58 141 10, read autohs
  edit "", 7, 7 93 141 10, read autohs
  text "IS on the line that you have specified to contain the unique data/string", 8, 9 105 132 14
  text "The unique string you specified:", 9, 9 85 116 8
  box "Valid?", 10, 5 77 145 68
  icon 17, 68 121 15 15, sckcross.png, 0, hide
  icon 11, 68 121 15 15, scktick.png, 0, hide
  button "OK", 12, 57 149 37 12, default ok cancel
}


on *:DIALOG:sock_disp_check:INIT:0: {
  did -ar sock_disp_check 7 $did(sock_disp,64)
  sockopen dsock.2 %sockdisphost %sockdispport
}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;; CHECK LINES DIALOG - SIMPLE ;;;;;;;;;;;;;;;

dialog sock_disp_lineref {
  title "Line Reference Checker"
  size -1 -1 153 168
  option dbu
  icon sckicon.ICO, 0
  text "If the following information is correct, you have used the right data to identify the line.", 1, 23 5 110 16, center
  edit "", 2, 8 39 137 10, read autohs
  text "The data you have selected to identify the line is:", 3, 9 31 124 7
  box "Line identification", 4, 4 22 145 66
  text "The first line that contains this, and the line that you wish to get data from, is:", 5, 9 53 125 15
  edit "", 6, 8 69 137 10, read autohs
  button "OK", 7, 59 146 37 12, result default ok cancel
  icon 11, 69 119 15 15, scktick.png, 0, hide
  box "Result", 8, 4 91 145 50
  text "", 9, 10 100 129 16
  icon 10, 69 119 15 15, sckcross.png, 0, hide
}


on *:DIALOG:sock_disp_lineref:INIT:0: {
  did -ar sock_disp_lineref 2 $did(sock_disp,64)
  sockopen dsock.3 %sockdisphost %sockdispport
}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; VIEW SCRIPT CLICK
on *:dialog:sock_disp:sclick:71:{
  run notepad.exe %sockdispdir
}

; TO TEST CLICK
on *:dialog:sock_disp:sclick:82:{
  did -fu sock_disp 38
}

; VIEW IN BROWSER
on *:dialog:sock_disp:sclick:84:{
  if ($left($did(3),7) != http:// && $did(3) != $null) did -ar sock_disp 3 http:// $+ $did(3)
  $iif($did(3),run $did(3))
}

; SOCKCLOSE CLICK
on *:dialog:sock_disp:sclick:83:{
  if ($sock(testsock)) { .sockclose testsock | did -a sock_disp 68 Socket forced closed by user. }
}

; LOAD SCRIPT
on *:dialog:sock_disp:sclick:111:{
  if ($exists(%sockdispdir) == $true) { 
    if ($?!"This will load your script into remotes. Any script with the same name will be overwritten. Continue?" == $true) {
      load -rs %sockdispdir
      did -a sock_disp 68 Script $qt($nopath(%sockdispdir)) loaded.
    }
    else did -a sock_disp 68 Script loading cancelled.
    did -f sock_disp 111
  }
  else {
    did -a sock_disp 68 No such file: $qt(%sockdispdir)
  }
}

; HELP CLICK
on *:dialog:sock_disp:sclick:18:{
  if ($+($scriptdir,SockCreator_readme.txt)) {
    run $scriptdir $+ SockCreator_readme.txt
  }
  else echo -a Help file not found.
}

; FEEDBACK CLICK
on *:dialog:sock_disp:sclick:117:{
  run mailto:chessnutrs@gmail.com
}

; TRIGGER RADIO CHANGE -> ADV
on *:dialog:sock_disp:sclick:120:{
  did -h sock_disp 91,47,46,42
  did -v sock_disp 113,115
}

alias -l simplerad {
  did -v sock_disp 91,47,46,42
  did -h sock_disp 113,115
}

; TRIGGER RADIO CHANGE -> SIMPLE
on *:dialog:sock_disp:sclick:119:{
  $simplerad
}

; ADV TRIGGER OPTIONS
on *:dialog:sock_disp:sclick:113:{
  dialog -mad sock_disp_trig sock_disp_trig
}

; -------------- Update Checker ----------------------

dialog sock_disp_upd {
  title "Autoupdater"
  size -1 -1 162 229
  option dbu
  icon sckupd.ICO, 0
  edit "Connecting to update page... (http://h1.ripway.com/Chessnut/sckupdates.txt)", 1, 8 4 145 17, read multi center
  text "Newest Version:", 2, 88 31 40 8
  edit "", 3, 54 30 20 10, disable
  text "Current Version:", 4, 13 31 41 8
  edit "", 5, 128 30 20 10, disable
  text "Up-to-date?", 6, 12 47 30 8
  icon 7, 44 43 15 15, scktick.png, 0, hide
  box "Version check", 8, 9 23 146 56
  box "Latest version", 9, 9 82 146 79
  button "Cancel", 10, 63 211 38 15, cancel
  text "New features:", 12, 14 91 41 8
  edit "", 14, 14 102 136 55, read multi hsbar vsbar
  text "Connecting to update page...", 16, 64 44 88 15
  icon 17, 45 43 14 14, sckcross.png, 0, hide
  box "Topics", 18, 8 163 146 45, disable
  button "Latest version SwiftIRC topic", 19, 28 171 43 17, disable multi
  button "Latest version Hawkee topic", 20, 94 171 43 17, disable multi
  text "", 21, 61 91 36 8, hide
  text "", 22, 103 91 36 8, hide
  text "Click one of the above topics for the latest update download link.", 11, 16 191 133 13, disable
  edit "", 13, 68 64 83 10, read autohs
  text "Expected release date for next version:", 15, 11 62 56 13
}

; CHECK FOR UPDATES
on *:dialog:sock_disp:sclick:122:{
  if ($sock(sckdispupd)) sockclose sckdispupd
  dialog -mad sock_disp_upd sock_disp_upd
  did -ar sock_disp_upd 3 $remove($did(sock_disp,121),v)
  sockopen sckdispupd h1.ripway.com 80
}

; http://h1.ripway.com/Chessnut/sckupdates.txt
on *:SOCKOPEN:sckdispupd: {
  sockwrite -nt $sockname GET /Chessnut/sckupdates.txt HTTP/1.1
  sockwrite -nt $sockname Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
  sockwrite -nt $sockname Accept-Language: en-gb,en;q=0.5
  sockwrite -nt $sockname Host: h1.ripway.com
  sockwrite -nt $sockname Keep-Alive: 300
  sockwrite -nt $sockname Proxy-Connection: keep-alive
  sockwrite -nt $sockname If-None-Match: "fa7ba6628f3cc71:3ff"
  sockwrite -nt $sockname Pragma: no-cache
  sockwrite -nt $sockname Cache-Control: no-cache
  sockwrite -nt $sockname $crlf
}

on *:SOCKREAD:sckdispupd: {
  if ($sockerr) {
    did -ar sock_disp_upd 1 Error connecting to update page: $sockerr $crlf Page: http://h1.ripway.com/Chessnut/sckupdates.txt
    did -ar sock_disp_upd 16 Error connecting to update page.
    halt
  }
  else {
    var %sockreader
    sockread %sockreader
    if ($regex(%sockreader,/Latest Version: (.*?) !END!/)) {
      did -ar sock_disp_upd 1 Connection Established.
      did -ar sock_disp_upd 5 $regml(1)
    }
    if ($regex(%sockreader,/Latest Version Topic URLs: (.*?) !END!/)) {
      tokenize 124 $regml(1)
      did -ar sock_disp_upd 21 $1
      did -ar sock_disp_upd 22 $2
    }
    if ($regex(%sockreader,/Updates in the new version: (.*?) !END!/)) {
      did -ar sock_disp_upd 14 $replace($regml(1),$+($chr(124),$chr(32)),$crlf)
    }
    if ($regex(%sockreader,/Next Version: (.*?) !END!/)) {
      if ($did(sock_disp_upd,5) <= $did(sock_disp_upd,3)) {
        did -ar sock_disp_upd 13 $regml(1)
      }
    }
    if ($regex(%sockreader,/:END OF FILE:/)) {
      sockclose sckdispupd
      if ($did(sock_disp_upd,5) <= $did(sock_disp_upd,3)) {
        did -v sock_disp_upd 7
        did -ar sock_disp_upd 16 Your Simple Socket Script Creator is up to date!
        did -ev sock_disp_upd 11,18-20
      }
      else {
        did -ev sock_disp_upd 11,17-20
        did -ar sock_disp_upd 13 It's out now!
        did -ar sock_disp_upd 16 Version $did(sock_disp_upd,5) has been released. You are strongly advised to update.
      }
    }
    if (</html> iswm %sockreader) {
      sockclose sckdispupd
      did -ar sock_disp_upd 1 Error connecting to update page. $crlf Page: http://h1.ripway.com/Chessnut/sckupdates.txt
      did -ar sock_disp_upd 16 Error connecting to update page: Url not found?
    }
  }
}

; SwiftIRC CLICK
on *:dialog:sock_disp_upd:sclick:19:{
  run $did(21)
}

; Hawkee CLICK
on *:dialog:sock_disp_upd:sclick:20:{
  run $did(22)
}


; ---------------------- Trigger Dialog ------------------------

dialog sock_disp_trig {
  title "Trigger Creation"
  size -1 -1 162 213
  option dbu
  icon sckicon.ico,0
  tab "Advanced Trigger Creation", 1, 7 2 146 195
  box "Finished Trigger", 2, 15 152 133 27, tab 1
  button "Cancel", 3, 107 181 37 12, tab 1 cancel
  button "Use Trigger", 4, 14 181 37 12, tab 1 ok cancel default
  edit "", 5, 19 161 124 12, tab 1 read autohs
  box "Starting characters", 7, 15 18 132 36, tab 1
  text "Enter possible starting characters. E.G. '!@-' will trigger on !TEXT, @TEXT and -TEXT", 9, 21 38 122 13, tab 1
  radio "Message channel", 12, 80 110 50 7, tab 1
  radio "Notice nick", 18, 80 119 50 7, group tab 1
  radio "Echo status", 11, 80 128 50 7, tab 1
  box "Define starting character action", 13, 15 92 133 59, tab 1
  list 17, 22 101 50 43, tab 1 size
  button "See example", 6, 108 200 36 10, tab 1
  edit "", 8, 23 26 117 12, autohs
  text "Enter possible text triggers separated with a comma. E.G. 'google,search,find'", 14, 21 75 122 13
  box "Text trigger", 15, 15 55 132 36
  edit "", 16, 22 63 117 12, autohs
}


; INITILISATION COMMANDS
on *:DIALOG:sock_disp_trig:INIT:0: {
  did -c sock_disp_trig 12
  if ($did(sock_disp,115) != $null) {
    noop $regex($did(sock_disp,115),/\[(.*?)\]\((.*?)\)/g)
    did -ar sock_disp_trig 8 $remove($regml(1),\)
    did -ar sock_disp_trig 16 $replace($remove($regml(2),\),$chr(124),$chr(44))
    var %i = 0
    while (%i != $len($did(8))) {
      inc %i
      did -a sock_disp_trig 17 $mid($did(8),%i,1)
      if (!%sckdisptrigt. [ $+ [ $mid($did(8),%i,1) ] ]) set %sckdisptrigt. [ $+ [ $mid($did(8),%i,1) ] ] ,12,18,11
    }
    if ($did(16) != $null && $did(8) != $null) did -ar sock_disp_trig 5 on $+($chr(36),*:text:/^,$chr(91),$regexfriendly($did(8)),$chr(93),$chr(40),$replace($regexfriendly($did(16)),$chr(44),$chr(124)),$chr(41),/Si:#:, ,$chr(123))
  }
}

; PRIM TRIGGER EDIT
on *:dialog:sock_disp_trig:edit:8:{
  did -r sock_disp_trig 17,5
  if ($did(16) != $null && $did(8) != $null) did -ar sock_disp_trig 5 on $+($chr(36),*:text:/^,$chr(91),$regexfriendly($did(8)),$chr(93),$chr(40),$replace($regexfriendly($did(16)),$chr(44),$chr(124)),$chr(41),/Si:#:, ,$chr(123))
  var %i = 0
  while (%i != $len($did(8))) {
    inc %i
    did -a sock_disp_trig 17 $mid($did(8),%i,1)
    if (!%sckdisptrigt. [ $+ [ $mid($did(8),%i,1) ] ]) set %sckdisptrigt. [ $+ [ $mid($did(8),%i,1) ] ] ,12,18,11
  }
}

; SEC TRIGGER EDIT
on *:dialog:sock_disp_trig:edit:16:{
  did -r sock_disp_trig 5
  if ($did(16) != $null && $did(8) != $null) did -ar sock_disp_trig 5 on $+($chr(36),*:text:/^,$chr(91),$regexfriendly($did(8)),$chr(93),$chr(40),$replace($regexfriendly($did(16)),$chr(44),$chr(124)),$chr(41),/Si:#:, ,$chr(123))
}

; RADIO CHANGES
on *:dialog:sock_disp_trig:sclick:12:{
  set %sckdisptrigt. [ $+ [ $did(17).seltext ] ] ,12,18,11
}
on *:dialog:sock_disp_trig:sclick:18:{
  set %sckdisptrigt. [ $+ [ $did(17).seltext ] ] ,18,12,11
}
on *:dialog:sock_disp_trig:sclick:11:{
  set %sckdisptrigt. [ $+ [ $did(17).seltext ] ] ,11,18,12
}

; LISTBOX CHANGE
on *:dialog:sock_disp_trig:sclick:17:{
  tokenize 44 %sckdisptrigt. [ $+ [ $did(17).seltext ] ]
  did -c sock_disp_trig $1
  did -u sock_disp_trig $2 $+ $chr(44) $+ $3
}

; USE TRIGGER
on *:dialog:sock_disp_trig:sclick:4:{
  if ($did(16) != $null && $did(8) != $null) did -ar sock_disp_trig 5 on $+($chr(36),*:text:/^,$chr(91),$regexfriendly($did(8)),$chr(93),$chr(40),$replace($regexfriendly($did(16)),$chr(44),$chr(124)),$chr(41),/Si:#:, ,$chr(123))
  unset %sckdisptrigway.*
  var %i = 1
  while (%i <= $len($did(8))) {
    if ($gettok(%sckdisptrigt. [ $+ [ $mid($did(8),%i,1) ] ],1,44) == 12) set %sckdisptrigway. [ $+ [ %i ] ] msg $+($chr(36),chan) 
    if ($gettok(%sckdisptrigt. [ $+ [ $mid($did(8),%i,1) ] ],1,44) == 18) set %sckdisptrigway. [ $+ [ %i ] ] notice $+($chr(36),nick) 
    if ($gettok(%sckdisptrigt. [ $+ [ $mid($did(8),%i,1) ] ],1,44) == 11) set %sckdisptrigway. [ $+ [ %i ] ] echo -s 
    set %sckdisptrigway. [ $+ [ %i ] ] if $+($chr(40),$chr(36),left,$chr(40),$chr(36),1,$chr(44),1,$chr(41),$chr(32),==,$chr(32),$mid($did(8),%i,1),$chr(41)) set $+($chr(37),way) %sckdisptrigway. [ $+ [ %i ] ]
    inc %i
  }
  did -ar sock_disp 115 $did(5)
}

; SEE EXAMPLE
on *:dialog:sock_disp_trig:sclick:6:{
  did -ar sock_disp_trig 8 !@-
  did -ar sock_disp_trig 16 google,search,find
  did -ar sock_disp_trig 5 on $+($chr(36),*:text:/^,$chr(91),$regexfriendly($did(8)),$chr(93),$chr(40),$replace($regexfriendly($did(16)),$chr(44),$chr(124)),$chr(41)/Si:#:, ,$chr(123))
  set %sckdisptrigt.! ,18,11,12
  set %sckdisptrigt.@ ,12,18,11
  set %sckdisptrigt.- ,11,18,11
  did -r sock_disp_trig 17
  var %i = 0
  while (%i != $len($did(8))) {
    inc %i
    did -a sock_disp_trig 17 $mid($did(8),%i,1)
    if (!%sckdisptrigt. [ $+ [ $mid($did(8),%i,1) ] ]) set %sckdisptrigt. [ $+ [ $mid($did(8),%i,1) ] ] ,12,18,11
  }
}

; CLOSE TRIGGER CREATION
on *:dialog:sock_disp_trig:close:0:{  
  var %i = 0
  while (%i != $len($did(8))) {
    inc %i
    did -a sock_disp_trig 17 $mid($did(8),%i,1)
    set %sckdisptrigsafe. [ $+ [ $mid($did(8),%i,1) ] ] %sckdisptrigt. [ $+ [ $mid($did(8),%i,1) ] ]
  }
  unset %sckdisptrigt.*
  var %i = 0
  while (%i != $len($did(8))) {
    inc %i
    did -a sock_disp_trig 17 $mid($did(8),%i,1)
    set %sckdisptrigt. [ $+ [ $mid($did(8),%i,1) ] ] %sckdisptrigsafe. [ $+ [ $mid($did(8),%i,1) ] ]
  }
  unset %sckdisptrigsafe.*
}