aIRC — File Browser

aIRCv0.8.69 / aIRCv0.8.69 / addons / ftp2.mrc

ftp2.mrc — 36.07 KB — Download this file

;/**********************************************************************
; *
; * aIRC
; * FTP Client file 2
; *
; **********************************************************************/
;

dialog _ftpclient {
  size -1 -1 %~ftpw %~ftph
  title "aIRC FTP Client"
  option dbu

  list 1000,1 1 319 12,size
  ;  box "",1001,159 12 1 178

  combo 1010,1 15 158 200,drop edit
  ; visible list
  list 1011,1 25 158 100,size extsel
  ; statusbar1
  list 1012,1 125 156 8,size
  ; statusbar2
  list 1013,1 133 156 8,size hide
  ; 1=currentdir 2=filter 3=totalbytes 4=sortflags 5=totalfiles
  list 1014,1 133 156 8,size hide
  ; dirs
  list 1015,1 133 156 8,size hide sort
  ; files
  list 1016,1 133 156 8,size hide


  combo 1020,161 15 158 200,drop edit
  list 1021,161 25 158 100,size extsel
  list 1022,162 125 156 8,size
  list 1023,162 133 156 8,size hide
  list 1024,162 133 156 8,size hide
  list 1025,162 133 156 8,size hide sort
  list 1026,162 133 156 8,size hide

  list 1030,1 136 158 57,size
  edit "",1040,161 136 158 57,autohs multi read vsbar hsbar

  ;  menu "FTP",2700
  ;  item "blah",2701

  button "ok",2990,-20 -20 1 1,ok hide
  button "cancel",2991,-20 -20 1 1,cancel hide
  list 2992,1 194 319 12,size
  button "MDX Positioner",2993,10 10 10 10,hide

  ; 1= server
  ; 2= login
  ; 3= password
  ; 4= /dir/file (initial)
  ; 5= LFTP sockname
  ; 6= action after PORT|PASV [LIST...|RETR...|STOR...]
  ; 7= useless
  ; 8= PORT after SIZE
  ; 9= anonymous
  ; 10= new filename
  ; 11= server supports RETR (resuming)
  ; 12= server supports SIZE (get filesize)
  ; 13= logged=0
  ; 14= currlist
  ; 15= refresh dirs after actions...
  ; 16= last listed directory
  ; 17= Waiting PWD reply for LIST
  ; 18= transfering queue
  list 2994,999 999 999 999,hide

  ; oldqueue:
  list 2250,1 136 156 57,size hide
  ; remote directory:
  list 2251,999 999 999 999,hide
}
ON *:DIALOG:ftp*:sclick:2993:{
  if ($istok(size minimize maximize restore,$gettok($did($dname,$did),1,32),32)) {
    .timer $+ $dname $+ _resizedialog -mo 1 50 _ftp.resizedialog $dname
    ;;;    _ftp.resizedialog $dname
  }
}
alias _ftp.resizedialog {
  var %dname = $1
  if ($dialog(%dname) == $null) { return }
  var %dw = $dialog(%dname).cw,%dh = $dialog(%dname).ch,%width = $calc((%dw - 2 * $dbuw ^ 2) / 2),%wwidth = %dw - 1 * $dbuw ^ 2,%row5 = $calc(%dh - 6 * $dbuh ^ 2),%col2 = $calc(2 + %dw / 2),%height2 = %dh / 2,%row3 = $calc(%height2 + 25 * $dbuh),%row4 = $calc(%row3 + 9 * $dbuh),%height4 = %row5 - %row4
  _mdx.MoveControl %dname 1010 * * %width *
  _mdx.MoveControl %dname 1020 %col2 * %width *
  _mdx.MoveControl %dname 1011 * * %width %height2
  _mdx.MoveControl %dname 1021 %col2 * %width %height2
  _mdx.MoveControl %dname 1012 * %row3 %width *
  _mdx.MoveControl %dname 1022 %col2 %row3 %width *
  _mdx.MoveControl %dname 1030 * %row4 %width %height4
  _mdx.MoveControl %dname 2250 * %row4 %width %height4
  _mdx.MoveControl %dname 1040 %col2 %row4 %width %height4
  _mdx.MoveControl %dname 1000 * * %wwidth *
  _mdx.MoveControl %dname 2992 * %row5 %wwidth *
}
ON *:DIALOG:ftp*:init:0:{
  _mdx.init $_icofile(ftp.ico,$scriptdir) title border sysmenu minbox
  _mdx.SetControlMDX dialog.mdx $dname 2993 positioner maxbox minbox size
  _mdx.SetControlMDX bars.mdx $dname 2992 StatusBar
  _mdx.SetControlMDX bars.mdx $dname 1012 StatusBar
  _mdx.SetControlMDX bars.mdx $dname 1022 StatusBar
  _mdx.SetBorderStyle $dname 1012
  _mdx.SetBorderStyle $dname 1022
  _mdx.SetControlMDX bars.mdx $dname 1000 ToolBar arrows flat wrap noresize list
  _mdx.SetBorderStyle $dname 1000
  _mdx.SetBorderStyle $dname 1010
  _mdx.SetBorderStyle $dname 1020
  _mdx.SetBorderStyle $dname 1011 border
  _mdx.SetBorderStyle $dname 1021 border
  _mdx.SetBorderStyle $dname 1030 border
  _mdx.SetBorderStyle $dname 1040 border

  did -o $dname 1014,1024 1 $null
  did -o $dname 1014,1024 2 $null
  did -o $dname 1014,1024 3 0
  did -o $dname 1014,1024 4 te
  did -o $dname 1014,1024 5 0

  var %9+0 = $chr(9) $+ +l 0,%9r0 = $chr(9) $+ +r 0
  _mdx.SetControlMDX views.mdx $dname 1011 ListView report rowselect showsel nosortheader autoarrange
  did -i $dname 1011 1 header $_mdx.fixtablengths(80,40) + 0 Name $+ %9r0 Size
  _mdx.SetControlMDX views.mdx $dname 1021 ListView report rowselect showsel nosortheader autoarrange
  did -i $dname 1021 1 header $_mdx.fixtablengths(80,40,54,36,36,36,36) + 0 Name $+ %9r0 Size $+ %9+0 Date $+ %9+0 Attrib $+ %9+0 Owner $+ %9+0 Group $+ %9+0 Comment
  _mdx.SetControlMDX views.mdx $dname 1030 ListView report rowselect showsel nosortheader autoarrange
  did -i $dname 1030 1 header $_mdx.fixtablengths(80,80,36,150) + 0 From $+ %9+0 Target $+ %9r0 Size $+ %9+0 Server

  did -i $dname 1011,1021 1 seticon 0 $_icofile(cdup.ico)
  did -i $dname 1011,1021 1 seticon 0 $_icofile(folder.ico)
  did -i $dname 1011,1021 1 seticon 0 $_icofile(file.ico)
  did -i $dname 1011,1021 1 seticon 0 $_icofile(drivefloppy.ico)
  did -i $dname 1011,1021 1 seticon 0 $_icofile(drivehard.ico)
  did -i $dname 1011,1021 1 seticon 0 $_icofile(drivecd.ico)

  did -i $dname 1000 1 bmpsize 16 16
  did -i $dname 1000 1 setimage 0 icon small 3, $+ $mircexe
  did -i $dname 1000 1 setimage 0 icon small 4, $+ $mircexe
  did -i $dname 1000 1 setimage 0 icon small $_icofile(stop.ico)
  did -i $dname 1000 1 setimage 0 icon small 9, $+ $mircexe
  did -i $dname 1000 1 setimage 0 icon small 7, $+ $mircexe
  did -i $dname 1000 1 setimage 0 icon small 8, $+ $mircexe
  did -i $dname 1000 1 setimage 0 icon small $_icofile(dtwindow_Trffc10a.ico)
  did -i $dname 1000 1 setimage 0 icon small $_icofile(folder.ico)
  did -i $dname 1000 1 setimage 0 icon small $_icofile(rename.ico)
  did -i $dname 1000 1 setimage 0 icon small $_icofile(remove.ico)
  var %atb = did -a $dname 1000
  %atb +a 1 Connect $+ $chr(9) $+ Connect to a FTP Server
  %atb -
  %atb +a 3 Stop $+ $chr(9) $+ Stop Current Operation
  %atb -
  %atb +a 4 Refresh $+ $chr(9) $+ Refresh Folder
  %atb -
  %atb +a 5 Send $+ $chr(9) $+ Add File or Folder to the Send Queue
  %atb +a 6 Receive $+ $chr(9) $+ Add File or Folder to the Get Queue
  %atb +a 7 Start $+ $chr(9) $+ Transfer Files in Queue
  %atb -
  %atb +a 8 New Folder $+ $chr(9) $+ Create New Folder
  %atb +a 9 Rename $+ $chr(9) $+ Rename File or Folder
  %atb +a 10 Delete $+ $chr(9) $+ Delete File or Folder

  did -i $dname 1030 1 seticon 0 7, $+ $mircexe
  did -i $dname 1030 1 seticon 0 8, $+ $mircexe

  _mdx.SetFont $dname 1000,1010,1011,1012,1020,1021,1022,1030,1040 + 13 400 Tahoma
  did -i $dname 1012,1022 1 separts -1
  did -i $dname 1012,1022 2 +p 0 Waiting...
  _ftp.reflocal $dname $getdir
  _ftp.resizedialog $dname
  did -f $dname 1011
}
ON *:DIALOG:ftp*:sclick:2990:{
  var %text1 = $did($dname,1010).text,%text2 = $did($dname,1020).text
  if (%text1 != $null) && (%text1 != $did($dname,1014,1)) { _ftp.reflocal $dname %text1 }
  if (%text2 != $null) && (%text2 != $did($dname,1024,1)) { _ftp.com $dname CWD %text2 }
  halt
}
ON *:DIALOG:ftp*:sclick:1000:{
  var %button = $did($dname,1000).sel,%remote = 0,%lor = local,%com
  if ($istok(4 8 9 10,%button,32)) || ($did($dname,2994,14) == 1021) { var %remote = 1,%lor = remote }
  if (%button != 2) && (%remote) && ($_ftp.remote.disconnected) { return }
  if (%button == 2) {
    if ($gettok($gettok($did($dname,1000,2),1,9),3,32) == connect) {
      var %string
      if ($did($dname,2994,9)) { %string = ftp:// }
      else { %string = ftp:// $+ $did($dname,2994,2) $+ @ $+ $did($dname,2994,3) $+ : }
      %string = %string $+ $did($dname,2994,1) $+ $did($dname,1024,1)
      ftp %string
      _ftp.addlog.info $dname Connecting to $did($dname,2994,1)
    }
    else { _ftp.disconnect $dname }
  }
  elseif (%button == 4) {
    %com = _ftp.com $dname ABOR
    sockclose ? $+ $dname
    _dialog-x T $+ $dname
    did -o $dname 2994 18 0
  }
  elseif (%button == 6) { %com = _ftp. $+ %lor $+ .refresh }
  elseif (%button == 8) { _ftp.local.transfer }
  elseif (%button == 9) { _ftp.remote.transfer }
  elseif (%button == 10) { _ftp.queue.start }
  elseif (%button == 12) { %com = _ftp. $+ %lor $+ .mkdir }
  elseif (%button == 13) { %com = _ftp. $+ %lor $+ .ren }
  elseif (%button == 14) { %com = _ftp. $+ %lor $+ .del }
  if (%com != $null) { %com }
}
ON *:DIALOG:ftp*:sclick:1010:{
  if ($did($dname,1010,$did($dname,1010,1).sel) != $did($dname,1014,1)) { _ftp.reflocal $dname $ifmatch }
}
ON *:DIALOG:ftp*:sclick:1020:{
  if ($did($dname,1020,$did($dname,1020,1).sel) != $did($dname,1024,1)) { _ftp.com $dname CWD $ifmatch }
}
ON *:DIALOG:ftp*:sclick:1011:{
  var %d = $dname,%header = $did(%d,1011,1),%lastevent = $gettok(%header,1,32)
  if ($did(%d,2994,14) != 1011) {
    did -i %d 1012 1 setbkcolor 65535
    did -i %d 1022 1 setbkcolor $rgb(face)
    did -o %d 2994 14 1011
  }
  if (%lastevent == rclick) {
    var %menu1 = FTPLOCALDIR,%menu2 = %menu1 $+ arrangeicons,%menu3 = %menu1 $+ viewmodes,%result,%sflags = $did(%d,1014,4)
    _popupdll.New %menu2 16 16
    _popupdll.AddItem %menu2 end $iif(n isin %sflags,+xr,+) 0 0 by &name $cr _ftp.localsortfiltertoggle %d n
    _popupdll.AddItem %menu2 end $iif(s isin %sflags,+xr,+) 0 0 by &size $cr _ftp.localsortfiltertoggle %d s
    _popupdll.AddItem %menu2 end $iif(t isin %sflags,+xr,+) 0 0 by &type $cr _ftp.localsortfiltertoggle %d t
    _popupdll.AddItem %menu2 end
    _popupdll.AddItem %menu2 end $iif(d !isin %sflags,+xr,+) 0 0 &ascending $cr _ftp.localsortfiltertoggle %d -d
    _popupdll.AddItem %menu2 end $iif(d isin %sflags,+xr,+) 0 0 &descending $cr _ftp.localsortfiltertoggle %d +d

    _popupdll.New %menu3 16 16
    _popupdll.AddItem %menu3 end $iif(b isin %sflags,+xr,+) 0 0 &large icons $cr _ftp.localsortfiltertoggle %d b
    _popupdll.AddItem %menu3 end $iif(i isin %sflags,+xr,+) 0 0 &small icons $cr _ftp.localsortfiltertoggle %d i
    _popupdll.AddItem %menu3 end $iif(l isin %sflags,+xr,+) 0 0 &list $cr _ftp.localsortfiltertoggle %d l
    _popupdll.AddItem %menu3 end $iif(e isin %sflags,+xr,+) 0 0 &details $cr _ftp.localsortfiltertoggle %d e

    _popupdll.New %menu1 8 8
    _popupdll.AddItem %menu1 end +D 0 0 &transfer $cr _ftp.local.transfer
    _popupdll.AddItem %menu1 end + 0 0 &queue $cr _ftp.local.queue
    _popupdll.AddItem %menu1 end
    _popupdll.AddItem %menu1 end + 0 0 de&lete $cr _ftp.local.del
    _popupdll.AddItem %menu1 end + 0 0 re&name $cr _ftp.local.ren
    _popupdll.AddItem %menu1 end +> 0 0 arran&ge $cr %menu2
    _popupdll.AddItem %menu1 end +> 0 0 &view $cr %menu3
    _popupdll.AddItem %menu1 end
    _popupdll.AddItem %menu1 end + 0 0 make &dir $cr _ftp.local.mkdir
    _popupdll.AddItem %menu1 end + 0 0 &change dir $cr _ftp.local.chdir
    _popupdll.AddItem %menu1 end + 0 0 cd&up $cr _ftp.local.cdup
    _popupdll.AddItem %menu1 end
    _popupdll.AddItem %menu1 end + 0 0 &refresh $cr _ftp.local.refresh
    _popupdll.Popup %menu1 + $mouse.dx $mouse.dy
    %result = $result
    _popupdll.Destroy %menu1
    _popupdll.Destroy %menu2
    _popupdll.Destroy %menu3
    if ($gettok(%result,1,32) == OK) && ($gettok(%result,4-,32) != $null) { $ifmatch }
  }
  if ($istok(item sclick,%lastevent,32)) { .timer $+ $dname $+ _ $+ $devent $+ $sclick -mo 1 50 _ftp.dirstatus %d 1012 1011 1015 1016 1014 }
}
ON *:DIALOG:ftp*:sclick:1021:{
  var %d = $dname,%header = $did(%d,1021,1),%lastevent = $gettok(%header,1,32)
  if ($did(%d,2994,14) != 1021) {
    did -i %d 1012 1 setbkcolor $rgb(face)
    did -i %d 1022 1 setbkcolor 65535
    did -o %d 2994 14 1021

  }
  if (%lastevent == rclick) {
    var %menu1 = FTPLOCALDIR,%menu2 = %menu1 $+ arrangeicons,%menu3 = %menu1 $+ viewmodes,%result,%sflags = $did(%d,1024,4)
    _popupdll.New %menu2 16 16
    _popupdll.AddItem %menu2 end $iif(n isin %sflags,+xr,+) 0 0 by &name $cr _ftp.remotesortfiltertoggle %d n
    _popupdll.AddItem %menu2 end $iif(s isin %sflags,+xr,+) 0 0 by &size $cr _ftp.remotesortfiltertoggle %d s
    _popupdll.AddItem %menu2 end $iif(t isin %sflags,+xr,+) 0 0 by &type $cr _ftp.remotesortfiltertoggle %d t
    _popupdll.AddItem %menu2 end $iif(m isin %sflags,+xr,+) 0 0 by &date $cr _ftp.remotesortfiltertoggle %d m
    _popupdll.AddItem %menu2 end $iif(a isin %sflags,+xr,+) 0 0 by &attrib $cr _ftp.remotesortfiltertoggle %d a
    _popupdll.AddItem %menu2 end $iif(o isin %sflags,+xr,+) 0 0 by &owner $cr _ftp.remotesortfiltertoggle %d o
    _popupdll.AddItem %menu2 end $iif(g isin %sflags,+xr,+) 0 0 by &group $cr _ftp.remotesortfiltertoggle %d g
    _popupdll.AddItem %menu2 end $iif(c isin %sflags,+xr,+) 0 0 by &comment $cr _ftp.remotesortfiltertoggle %d c
    _popupdll.AddItem %menu2 end
    _popupdll.AddItem %menu2 end $iif(d !isin %sflags,+xr,+) 0 0 &ascending $cr _ftp.remotesortfiltertoggle %d -d
    _popupdll.AddItem %menu2 end $iif(d isin %sflags,+xr,+) 0 0 &descending $cr _ftp.remotesortfiltertoggle %d +d

    _popupdll.New %menu3 16 16
    _popupdll.AddItem %menu3 end $iif(b isin %sflags,+xr,+) 0  0 &large icons $cr _ftp.remotesortfiltertoggle %d b
    _popupdll.AddItem %menu3 end $iif(i isin %sflags,+xr,+) 0 0 &small icons $cr _ftp.remotesortfiltertoggle %d i
    _popupdll.AddItem %menu3 end $iif(l isin %sflags,+xr,+) 0 0 &list $cr _ftp.remotesortfiltertoggle %d l
    _popupdll.AddItem %menu3 end $iif(e isin %sflags,+xr,+) 0 0 &details $cr _ftp.remotesortfiltertoggle %d e

    _popupdll.New %menu1 8 8
    _popupdll.AddItem %menu1 end +D 0 0 &transfer $cr _ftp.remote.transfer
    _popupdll.AddItem %menu1 end + 0 0 &queue $cr _ftp.remote.queue
    _popupdll.AddItem %menu1 end
    _popupdll.AddItem %menu1 end + 0 0 de&lete $cr _ftp.remote.del
    _popupdll.AddItem %menu1 end + 0 0 re&n/move $cr _ftp.remote.ren
    _popupdll.AddItem %menu1 end + 0 0 copy &url $cr _ftp.remote.copyurl
    _popupdll.AddItem %menu1 end +d 0 0 chm&od $cr _ftp.remote.chmod
    _popupdll.AddItem %menu1 end + 0 0 &quote $cr _ftp.remote.quote
    _popupdll.AddItem %menu1 end +> 0 0 arran&ge $cr %menu2
    _popupdll.AddItem %menu1 end +> 0 0 &view $cr %menu3
    _popupdll.AddItem %menu1 end
    _popupdll.AddItem %menu1 end + 0 0 make &dir $cr _ftp.remote.mkdir
    _popupdll.AddItem %menu1 end + 0 0 &change dir $cr _ftp.remote.chdir
    _popupdll.AddItem %menu1 end + 0 0 cd&up $cr _ftp.remote.cdup
    _popupdll.AddItem %menu1 end
    _popupdll.AddItem %menu1 end + 0 0 &refresh $cr _ftp.remote.refresh
    _popupdll.Popup %menu1 + $mouse.dx $mouse.dy
    %result = $result
    _popupdll.Destroy %menu1
    _popupdll.Destroy %menu2
    _popupdll.Destroy %menu3
    if ($gettok(%result,1,32) == OK) && ($gettok(%result,4-,32) != $null) { $ifmatch }
  }
  if ($istok(item sclick,%lastevent,32)) { .timer $+ $dname $+ _ $+ $devent $+ $sclick -mo 1 50 _ftp.dirstatus %d 1022 1021 1025 1026 1024 }
}
ON *:DIALOG:ftp*:sclick:1030:{
  var %d = $dname,%lastevent = $gettok($did(%d,1030,1),1,32)
  if (%lastevent == rclick) {
    var %menu1 = FTPQUEUE,%menu2 = %menu1 $+ remove,%menu3 = %menu1 $+ move,%result,%sflags = $did(%d,1014,4)
    _popupdll.New %menu2 16 16
    _popupdll.AddItem %menu2 end + 0 0 &selected $cr _ftp.queuelist.del.sel %d
    _popupdll.AddItem %menu2 end
    _popupdll.AddItem %menu2 end + 0 0 &uploads $cr _ftp.queuelist.del.downupl %d 0
    _popupdll.AddItem %menu2 end + 0 0 &downloads $cr _ftp.queuelist.del.downupl %d 1
    _popupdll.AddItem %menu2 end
    _popupdll.AddItem %menu2 end + 0 0 &all $cr _ftp.queuelist.del.all %d

    _popupdll.New %menu3 16 16
    _popupdll.AddItem %menu3 end + 0 0 &up $cr _ftp.queuelist.move.up %d
    _popupdll.AddItem %menu3 end + 0 0 &down $cr _ftp.queuelist.move.down %d
    _popupdll.AddItem %menu3 end + 0 0 to &top $cr _ftp.queuelist.move.top %d
    _popupdll.AddItem %menu3 end + 0 0 to &bottom $cr _ftp.queuelist.move.bottom %d
    _popupdll.AddItem %menu3 end
    _popupdll.AddItem %menu3 end + 0 0 &uploads to top $cr _ftp.queuelist.move.downupl %d 0
    _popupdll.AddItem %menu3 end + 0 0 &downloads to top $cr _ftp.queuelist.move.downupl %d 1

    _popupdll.New %menu1 8 8
    _popupdll.AddItem %menu1 end +D 0 0 &transfer $cr _ftp.queue.start %d
    _popupdll.AddItem %menu1 end +> 0 0 &delete $cr %menu2
    _popupdll.AddItem %menu1 end +> 0 0 &move $cr %menu3
    _popupdll.AddItem %menu1 end
    _popupdll.AddItem %menu1 end + 0 0 queue &info $cr _ftp.queuelist.info %d
    _popupdll.AddItem %menu1 end + 0 0 &load queue $cr _ftp.queuelist.load %d
    _popupdll.AddItem %menu1 end + 0 0 &save queue $cr _ftp.queuelist.save %d

    _popupdll.Popup %menu1 + $mouse.dx $mouse.dy
    %result = $result
    _popupdll.Destroy %menu1
    _popupdll.Destroy %menu2
    _popupdll.Destroy %menu3
    if ($gettok(%result,1,32) == OK) && ($gettok(%result,4-,32) != $null) { $ifmatch }
  }
}
ON *:DIALOG:ftp*:sclick:2991:{
  if ($sock($dname)) { info.a Closing FTP session $remove($dname,FTP) }
  showmirc -s
  _ftp.disconnect $dname
}
alias -l _ftp.localsortfiltertoggle {
  var %d = $1,%old = $did(%d,1014,4)
  if ($istok(n s t,$2,32)) {
    if ($remove(%old,n,s,t) != $null) { did -o %d 1014 4 $ifmatch $+ $2 }
    else { did -o %d 1014 4 $2 }
  }
  elseif ($istok(b i l e,$2,32)) {
    if ($remove(%old,b,i,l,e) != $null) { did -o %d 1014 4 $ifmatch $+ $2 }
    else { did -o %d 1014 4 $2 }
  }
  else {
    %old = $remove(%old,d)
    if (+d isin $2) { %old = %old $+ d }
    did -o %d 1014 4 %old
  }
  _ftp._reflocal.ref %d
}
alias -l _ftp.remotesortfiltertoggle {
  var %d = $1,%old = $did(%d,1024,4)
  if ($istok(n s t m a o g c,$2,32)) {
    if ($remove(%old,n,s,t,m,a,o,g,c) != $null) { did -o %d 1024 4 $ifmatch $+ $2 }
    else { did -o %d 1024 4 $2 }
  }
  elseif ($istok(b i l e,$2,32)) {
    if ($remove(%old,b,i,l,e) != $null) { did -o %d 1024 4 $ifmatch $+ $2 }
    else { did -o %d 1024 4 $2 }
  }
  else {
    %old = $remove(%old,d)
    if (+d isin $2) { %old = %old $+ d }
    did -o %d 1024 4 %old
  }
  _ftp._refremote.ref %d
}
ON *:DIALOG:ftp*:dclick:1011:{
  var %d = $dname,%line = $did(%d,$did,$did(%d,$did,1).sel),%oldpath = $did(%d,1014,1),%path = %oldpath,%icon = $gettok(%line,2,32),%name = $gettok($gettok(%line,1,9),3-,32)
  if (%icon == 1) { %path = $deltok(%path,-1,92) }
  elseif (%icon == 2) { %path = %oldpath $+ %name $+ \ }
  elseif (%icon == 3) {
    _ftp.localdir.filedclick %d %oldpath $+ %name
    return
  }
  else { %path = $mid($gettok(%name,-1,32),2,2) $+ \ }
  _ftp.reflocal %d %path
}
ON *:DIALOG:ftp*:dclick:1021:{
  var %d = $dname,%line = $did(%d,$did,$did(%d,$did,1).sel),%oldpath = $did(%d,1024,1),%path = %oldpath,%icon = $gettok(%line,2,32),%name = $gettok($gettok(%line,1,9),3-,32)
  if (%icon == 1) { _ftp.com $dname cdup }
  elseif (%icon == 2) { _ftp.com $dname CWD %name }
  else { _ftp.remotedir.filedclick %d %oldpath $+ %name }
}
; /_ftp.dirstatus dname statusdid listdid dirdid filedid free
alias -l _ftp.dirstatus {
  var %d = $1
  if ($dialog(%d) == $null) { return }
  var %folders = $did(%d,$4).lines,%files = $did(%d,$5).lines,%sels = $did(%d,$3,0).sel,%totalbytes = $bytes($did(%d,$6,3),3).suf,%showfree = 0,%showtotal = 0,%com
  %com = did -i %d $2 2 +p 0 $_nsingoplur(%folders,Folder,Folders) $+ , $_nsingoplur(%files,File,Files) $+ , $calc(%folders + %files) Total
  if (%totalbytes == $null) { %totalbytes = 0b }
  if (%sels) { %com ( $+ %totalbytes $+ , $_nsingoplur(%sels,item,items) selected) }
  else {
    if ($6 == 1014) { %com ( $+ %totalbytes $+ , free: $bytes($disk($did(%d,$6,1)).free,3).suf $+ ) }
    else { %com ( $+ %totalbytes $+ ) }
  }
}
alias -l _ftp.localdir.filedclick {  }
alias -l _ftp.remotedir.filedclick {  }
alias _ftp.reflocal {
  var %m,%i,%d = $1,%path = $2-
  if ($disk($left(%path,1)).type == $null) || ($isdir(%path) == $false) {
    _ftp.addlog.error %d Local directory " $+ %path $+ " not found
    return
  }
  if (*\ !iswm %path) { %path = %path $+ \ }
  did -r %d 1015,1016
  did -o %d 1014 1 %path
  _dialog.add1 %d 1010 %path
  if (ftp* iswm $dname) && ($did(%d,1014,2) != $null) { %m = $ifmatch }
  else { %m = * }
  did -i %d 1012 2 +p 0 Gathering dir info...

  ;;; "/set -u %var" will behave oddly here
  ;;; Only Khaled knows why
  %~ftptotalbytes = 0
  %~ftptotalfiles = 0

  _dummy $finddir(%path,*,0,1,_ftp._reflocal.adddir %d $1-)
  _dummy $findfile(%path,%m,0,1,_ftp._reflocal.addfile %d $1-)
  did -o %d 1014 3 $round(%~ftptotalbytes,0)
  did -o %d 1014 5 $round(%~ftptotalfiles,0)
  unset %~ftptotalbytes %~ftptotalfiles
  _ftp._reflocal.ref %d
}
alias _ftp._reflocal.adddir { did -a $1 1015 - 2 $nopath($2-) }
alias _ftp._reflocal.addfile {
  var %size = $file($2-).size,%nopath = $nopath($2-),%ext = $gettok(%nopath,-1,46)
  if ($numtok(%nopath,46) == 1) { var %ext }
  did -a $1 1016 - 3 %nopath $+ $chr(9) $+ 0 $bytes(%size,b) $+ $chr(9) $+ %size $+ $chr(9) $+ %ext
  if (%size) { inc %~ftptotalbytes $ifmatch }
  inc %~ftptotalfiles
}
alias _ftp.liststyle {
  var %l = showsel autoarrange rowselect
  if (b isin $1) { %l = %l icon }
  elseif (i isin $1) { %l = %l icon smallicon }
  elseif (l isin $1) { %l = %l list }
  else { %l = %l nosortheader report nosortheader }
  return %l
}
alias _ftp._reflocal.ref {
  var %d = $1,%i
  did -r %d 1011
  _mdx.SetMDXStyle %d 1011 $_ftp.liststyle($did(%d,1014,4))
  %i = 67
  while (%i <= 90) {
    if ($disk($chr(%i)).type != $null) {
      var %drive = $chr(%i),%label = $disk(%drive).label,%pd = ( $+ %drive $+ :)
      if (%drive isin ab) { did -a %d 1011 + 4 Floppy Drive %pd }
      elseif ($disk(%drive).type == cdrom) { did -a %d 1011 + 6 %label %pd }
      else { did -a %d 1011 + 5 %label %pd }
    }
    inc %i
  }
  if ($numtok($did(%d,1014,1),92) > 1) { did -a %d 1011 + 1 Up }
  var %sflags = $did(%d,1014,4),%col,%fflags = -iot
  if (d isin %sflags) { %fflags = -iote }
  if (n isin %sflags) { %col = 1 }
  elseif (s isin %sflags) { var %col = 3,%fflags = %fflags $+ u }
  else { %col = 4 }
  filter %fflags %col 9 %d 1015 %d 1011
  filter %fflags %col 9 %d 1016 %d 1011
  _ftp.dirstatus %d 1012 1011 1015 1016 1014
}
alias _ftp.gftp.sr {
  var %d = $_ftp.nums,%name = $9-,%isdir = 0,%isv = 0
  did -a %d 2251 $1-
  if (%name != $null) {
    if (d* iswm $1) {
      if ($istok(. ..,$9-,32) == $false) { %isdir = 1 }
      else { return }
    }
    elseif ($istok($9-,->,32)) {
      var %a = $findtok($9-,->,1,32) $+ - $+ $numtok($9-,32),%b = 1- $+ $findtok($9-,->,1,32),%a = $deltok($9-,%a,32),%b = $deltok($9-,%b,32),%name = %a
      if (*.* !iswm %b) { %isdir = 1 }
      %isv = 1
    }
    var %c9 = $chr(9),%90 = %c9 $+ 0,%date = $6-7,%time,%year
    if (*:* iswm $8) { var %time = $8,%year = $asctime($ctime,yyyy) }
    else { var %time = 00:00,%year = $8 }
    var %ctime = %date %year %time,%ctime = $ctime(%ctime),%asctime = $asctime(%ctime,dd/mmm/yyyy HH:nn)
    if (%isdir) { did -a %d 1025 - 2 %name $+ %90 $bytes($5,b) $+ %90 %asctime $+ %90 $1 $+ %90 $3 $+ %90 $4 $+ %90 $+ %c9 $+ $5 $+ %c9 $+ %ctime $+ %c9 }
    else {
      var %ext = $gettok(%name,-1,46)
      if ($numtok(%name,46) == 1) { var %ext }
      did -a %d 1026 - 3 %name $+ %90 $bytes($5,b) $+ %90 %asctime $+ %90 $1 $+ %90 $3 $+ %90 $4 $+ %90 $+ %c9 $+ $5 $+ %c9 $+ %ctime $+ %c9 $+ %ext
      did -o %d 1024 3 $calc($did(%d,1024,3) + $5)
      did -o %d 1024 5 $calc($did(%d,1024,5) + 1)
    }
  }
}
alias _ftp._refremote.ref {
  var %d = $1
  did -r %d 1021
  did -a %d 1021 + 1 Up
  _mdx.SetMDXStyle %d 1021 $_ftp.liststyle($did(%d,1024,4))
  var %sflags = $did(%d,1024,4),%col,%fflags = -iot
  if (d isin %sflags) { %fflags = -iote }
  if (n isin %sflags) { %col = 1 }
  elseif (s isin %sflags) { var %col = 8,%fflags = %fflags $+ u }
  elseif (m isin %sflags) { var %col = 9,%fflags = %fflags $+ u }
  elseif (a isin %sflags) { %col = 4 }
  elseif (o isin %sflags) { %col = 5 }
  elseif (g isin %sflags) { %col = 6 }
  elseif (c isin %sflags) { %col = 7 }
  else { %col = 10 }
  filter %fflags %col 9 %d 1025 %d 1021
  filter %fflags %col 9 %d 1026 %d 1021
  _ftp.dirstatus %d 1022 1021 1025 1026 1024
}
alias -l _ftp.local.transfer {
  if ($_ftp.remote.disconnected) { return }
  _ftp.local.queue +t
  _ftp.queue.start
}
alias -l _ftp.local.queue {
  if ($_ftp.remote.disconnected) { return }
  var %d = $dname,%icon,%name,%l,%t,%parent = $did($dname,1014,1),%z,%c = 0,%text,%z = $did(%d,1011,0).sel,%xxx,%remotedir = $did(%d,1024,1),%remotefile,%server = ftp:// $+ $did(%d,2994,1) $+ : $+ $sock(%d).port
  if (%z) {
    did -i %d 1012 2 +p 0 Adding $_nsingoplur(%z,item,items) to the queue... please wait
    while (%z) {
      var %l = $did(%d,1011,%z).sel,%t = $did(%d,1011,%l),%icon = $gettok(%t,2,32),%name = $gettok($gettok(%t,1,9),3-,32)
      if (%icon == 3) {
        %remotefile = %remotedir $+ %name
        %name = %parent $+ %name
        %xxx = $_ftp.queue.add($dname,0,%name,%remotefile,$gettok($gettok(%t,2,9),2,32),%server)
        inc %c
      }
      dec %z
    }
    _ftp.dirstatus $dname 1012 1011 1015 1016 1014
  }
  if (%c == 0) { _ftp.status.error $dname No local files selected to $iif(t isin $1,transfer,queue) }
}
alias -l _ftp.local.del {
  var %d = $dname,%icon,%name,%l,%t,%parent = $did($dname,1014,1),%z,%c = 0,%text
  if ($did(%d,1011,0).sel) {
    var %z = $ifmatch,%text = Remove $_nsingoplur(%z,selected item?,selected items?)
    if ($_not($_yesno(1,FTP Client [/ftp],1,%text))) { return }
    did -i %d 1012 2 +p 0 Removing %z items... please wait
    while (%z) {
      var %l = $did(%d,1011,%z).sel,%t = $did(%d,1011,%l),%icon = $gettok(%t,2,32),%name = $gettok($gettok(%t,1,9),3-,32)
      if (%icon == 2) {
        _rmdir " $+ %parent $+ %name $+ "
        inc %c
      }
      elseif (%icon == 3) {
        .remove " $+ %parent $+ %name $+ "
        inc %c
      }
      dec %z
    }
  }
  if (%c) {
    _ftp.status.info $dname $_nsingoplur(%c,item,items) removed
    _ftp.local.refresh
  }
  else {
    _ftp.status.error $dname No directories/files selected to remove
    _ftp.dirstatus $dname 1012 1011 1015 1016 1014
  }
}
alias -l _ftp.local.ren {
  var %t,%oldir = $did($dname,1014,1),%line = $did($dname,1011,$did($dname,1011,1).sel),%new,%icon = $gettok(%line,2,32),%file = $gettok($gettok(%line,1,9),3-,32)
  if (%icon == 3) {
    %new = $_parameter($null,1,FTP Client [/ftp],isvalidfilename,%file,New name for local file:<CRLF> [ %file ] )
    if ($dialog($dname) == $null) { return }
    %t = %oldir $+ %new
    if (%new != $null) {
      if ($isfile(%t) == $false) {
        .rename " $+ %oldir $+ %file $+ " " $+ %oldir $+ %new $+ "
        _ftp.reflocal $dname %oldir
      }
      elseif (%new == %file) { _ftp.status.error $dname Cannot rename local file ' $+ %file $+ ' - Same filename! }
      else { _ftp.status.error $dname Cannot rename local file ' $+ %file $+ ' - Already exists file ' $+ %new $+ ' }
    }
  }
  else { _ftp.status.error $dname Only files can be renamed }
}
alias -l _ftp.local.mkdir {
  var %newdir,%localdir = $did($dname,1014,1),%createdir
  if (*\ !iswm %localdir) { %localdir = %localdir $+ \ }
  %newdir = $_parameter($null,1,FTP Client [/ftp],len < 250,$null,Local directory to create inside<CRLF> [ %localdir ] )
  if ($dialog($dname) == $null) { return }
  %createdir = %localdir $+ %newdir
  if (/ !isin %newdir) && (\ !isin %newdir) && ($_fixdir(%createdir)) {
    .mkdir " $+ %createdir $+ "
    _ftp.local.refresh
  }
  else { _ftp.status.error $dname Invalid directory: %createdir }
}
alias -l _ftp.local.chdir {
  var %dir = $$sdir="Change Local Directory in FTP Session [ $_ftp.num ] " $did($dname,1014,1)
  if ($dialog($dname) == $null) { return }
  if ($istok(a b,$left(%dir,1),32) == $false) { _ftp.reflocal $dname %dir }
  else { _ftp.status.error $dname Please don't use diskettes! }
}
alias -l _ftp.local.cdup {
  if ($deltok($did($dname,1014,1),-1,92) != $null) { _ftp.reflocal $dname $ifmatch }
}
alias -l _ftp.local.refresh { _ftp.reflocal $dname $did($dname,1014,1) }
alias -l _ftp.remote.transfer {
  if ($_ftp.remote.disconnected) { return }
  _ftp.remote.queue +t
  _ftp.queue.start
}
alias -l _ftp.remote.queue {
  if ($_ftp.remote.disconnected) { return }
  var %d = $dname,%icon,%name,%l,%t,%parent = $did($dname,1024,1),%z,%c = 0,%text,%z = $did(%d,1021,0).sel,%xxx,%localdir = $did(%d,1014,1),%localfile,%server = ftp:// $+ $did(%d,2994,1) $+ : $+ $sock(%d).port
  if (%z) {
    did -i %d 1022 2 +p 0 Adding $_nsingoplur(%z,item,items) to the queue... please wait
    while (%z) {
      var %l = $did(%d,1021,%z).sel,%t = $did(%d,1021,%l),%icon = $gettok(%t,2,32),%name = $gettok($gettok(%t,1,9),3-,32)
      if (%icon == 3) {
        %localfile = %localdir $+ %name
        %name = %parent $+ %name
        %xxx = $_ftp.queue.add($dname,1,%localfile,%name,$gettok($gettok(%t,2,9),2,32),%server)
        inc %c
      }
      dec %z
    }
    _ftp.dirstatus $dname 1022 1021 1025 1026 1024
  }
  if (%c == 0) { _ftp.status.error $dname No remote files selected to $iif(t isin $1,transfer,queue) }
}
alias -l _ftp.remote.del {
  if ($_ftp.remote.disconnected) { return }
  var %d = $dname,%icon,%name,%l,%t,%parent = $did($dname,1024,1),%z,%c = 0,%text
  if ($did(%d,1021,0).sel) {
    var %z = $ifmatch,%text = Remove $_nsingoplur(%z,selected item?,selected items?)
    if ($_not($_yesno(1,FTP Client [/ftp],1,%text))) { return }
    while (%z) {
      var %l = $did(%d,1021,%z).sel,%t = $did(%d,1021,%l),%icon = $gettok(%t,2,32),%name = $gettok($gettok(%t,1,9),3-,32)
      if (%icon == 2) {
        did -a $dname 2250 _ftp.com $dname rd %name
        inc %c
      }
      elseif (%icon == 3) {
        did -a $dname 2250 _ftp.com $dname del %name
        inc %c
      }
      dec %z
    }
  }
  if (%c) {
    _ftp.sigue $dname 0
    did -o $dname 2994 15 1
  }
  else { _ftp.status.error $dname No directories/files selected to remove }
}
alias -l _ftp.remote.ren {
  if ($_ftp.remote.disconnected) { return }
  var %t,%oldir = $did($dname,1024,1),%line = $did($dname,1021,$did($dname,1021,1).sel),%new,%icon = $gettok(%line,2,32),%file = $gettok($gettok(%line,1,9),3-,32)
  if (%icon isin 23) {
    if (%icdon == 2) { %c.ftpren.esdir = 1 }
    _ftp.com $dname ren %file
  }
  else { _ftp.status.error $dname Only files or directories can be renamed }
}
alias -l _ftp.remote.copyurl {
  if ($_ftp.remote.disconnected) { return }
  if ($did($dname,2994,1) != $null) {
    var %server = $ifmatch,%dir = $did($dname,1024,1),%line = $did($dname,1021,$did($dname,1021,1).sel),%icon = $gettok(%line,2,32),%file = $gettok($gettok(%line,1,9),3-,32),%cb = ftp:// $+ %server $+ %dir
    if (*/ !iswm %cb) { %cb = %cb $+ / }
    if (%icon == 3) { %cb = %cb $+ %file }
    clipboard %cb
  }
  else { _ftp.status.error $dname Unknown server }
}
alias -l _ftp.remote.chmod {
  if ($_ftp.remote.disconnected) { return }
  ;;;
}
alias -l _ftp.remote.quote {
  if ($_ftp.remote.disconnected) { return }
  var %q = $_parameter($null,1,FTP Client [/ftp],normal,$_randtok(help syst,32),Command to execute in server:)
  if ($dialog($dname)) { _ftp.com $dname %q }
}
alias -l _ftp.remote.mkdir {
  if ($_ftp.remote.disconnected) { return }
  var %dir = $_parameter($null,1,FTP Client [/ftp],len < 250,$null,Remote directory to create inside:<CRLF> [ $did($dname,1024,1) ] )
  if ($dialog($dname)) { _ftp.com $dname MKD %dir }
}
alias -l _ftp.remote.chdir {
  if ($_ftp.remote.disconnected) { return }
  var %win = @__ftpremotechdir,%dir
  _openwins %win
  filter -iw $dname 1020 %win
  %dir = $_rparameter($null,1,FTP Client [/ftp],normal,$line(%win,1),%win,$null,Change to remote directory:)
  if ($dialog($dname) != $null) && (%dir != $did($dname,1024,1)) { _ftp.com $dname CWD %dir }
  close -@ %win
}
alias -l _ftp.remote.cdup {
  if ($_ftp.remote.disconnected) { return }
  _ftp.com $dname CDUP
}
alias -l _ftp.remote.refresh {
  if ($_ftp.remote.disconnected == 0) { _ftp.com $dname dir }
}
alias -l _ftp.remote.disconnected {
  var %d = $iif($1,$1,$dname)
  if ($dialog(%d)) && ($sock(%d)) { return 0 }
  return 1
}
alias -l _ftp.queuelist.del.sel {
  if ($did($1,1030,1).sel) && ($_not($_yesno(1,FTP Client [/ftp],1,Remove selected entries from the queue?))) { return }
  while ($did($1,1030,1).sel) { did -d $1 1030 $ifmatch }
}
alias -l _ftp.queuelist.del.downupl {
  var %d = $1,%downupl = $calc($2 + 1),%i = $did(%d,1030,1).lines,%icon
  if (%i > 1) && ($_yesno(1,FTP Client [/ftp],1,Remove [ $iif(%downupl == 2,downloads,uploads) ] from the queue?)) {
    while (%i > 1) {
      %icon = $gettok($did(%d,1030,%i),2,32)
      if (%icon == %downupl) { did -d %d 1030 %i }
      dec %i
    }
  }
}
alias -l _ftp.queuelist.del.all {
  if ($did($1,1030,1).lines > 1) && ($_yesno(1,FTP Client [/ftp],1,Clear queue?)) { did -r $1 1030 }
}
alias -l _ftp.queuelist.move.up { _dialog.MDXVIEWLISTup $1 1030 1030 }
alias -l _ftp.queuelist.move.down { _dialog.MDXVIEWLISTdown $1 1030 1030 }
alias -l _ftp.queuelist.move.top {
  var %d = $1,%l,%t,%c = 0,%i = 2
  while ($did(%d,1030,1).sel) {
    var %l = $ifmatch,%t = $did(%d,1030,%l)
    did -d %d 1030 %l
    did -i %d 1030 %i %t
    inc %i
  }
  dec %i
  while (%i > 1) {
    did -ck %d 1030 %i
    dec %i
  }
}
alias -l _ftp.queuelist.move.bottom {
  var %d = $1,%l,%t,%c = 0,%i = 0
  while ($did(%d,1030,1).sel) {
    var %l = $ifmatch,%t = $did(%d,1030,%l)
    did -d %d 1030 %l
    did -a %d 1030 %t
    inc %i
  }
  dec %i
  %t = $did(%d,1030).lines
  %i = %t - %i
  while (%i <= %t) {
    did -ck %d 1030 %i
    inc %i
  }
}
alias -l _ftp.queuelist.move.downupl {
  var %d = $1,%downupl1 = $calc($2 + 1),%downupl2 = $iif(%downupl1 == 1,2,1),%win = @__ftpqueuelistmovedownupl
  _openwins %win
  filter -iwr 2-999999999 %d 1030 %win & %downupl1 *
  filter -iwr 2-999999999 %d 1030 %win & %downupl2 *
  filter -woc %win %d 1030
}
alias -l _ftp.queuelist.info {
  var %d = $1,%i = $did(%d,1030).lines,%dc = 0,%uc = 0,%db = 0,%ub = 0,%tc = 0,%tb = 0,%line,%icon,%size
  while (%i > 1) {
    var %line = $did(%d,1030,%i),%icon = $gettok(%line,2,32),%size = $remove($gettok($gettok(%line,3,9),2,32),$chr(44))
    if (%icon == 1) {
      inc %uc
      if (%size) { inc %ub %size }
    }
    else {
      inc %dc
      if (%size) { inc %db %size }
    }
    dec %i
  }
  %tc = %uc + %dc
  %tb = %ub + %db
  if (%tc) {
    _ftp.addlog.info %d Queue Info:
    _ftp.addlog.info %d Uploads: %uc ( $+ $bytes(%ub,3).suf $+ )
    _ftp.addlog.info %d Downloads: %dc ( $+ $bytes(%db,3).suf $+ )
    _ftp.addlog.info %d Total: %tc ( $+ $bytes(%tb,3).suf $+ )
  }
  else { _ftp.addlog.info %d The transfer queue is empty }
}
alias -l _ftp.queuelist.load {
  var %d = $1,%win = @__tmp,%file = $hfile="Load FTP queue from:" $_usrdir(*.afq),%line
  if ($isfile(%file)) {
    tokenize 32 $read -nl1 %file
    if ($0 == 3) && (//aIRCFTPqueuelist == $1) && ($2 == 2) && ($3 isnum) { filter -focr 2-9999999999999 " $+ %file $+ " %d 1030 }
    else { _ftp.status.error %d Invalid queue list file: ' $+ %file $+ ' }
  }
  else { _ftp.status.error %d File not found: ' $+ %file $+ ' }
}
alias -l _ftp.queuelist.save {
  var %d = $1,%win = @__tmp,%file = $hfile="Save FTP queue in:" $_usrdir(*.afq)
  if (%file != $null) {
    _openwins %win
    filter -iwr 2-99999999999 %d 1030 %win
    iline %win 1 //aIRCFTPqueuelist 2 $ctime
    savebuf %win " $+ %file $+ "
    close -@ %win
  }
}
alias _ftp.queue.start {
  var %d = $iif($1,$1,$dname)
  did -o %d 2994 18 1
  if ($did(%d,1030).lines > 1) { _ftp.sigue %d 0 }
  else { _ftp.status.error %d The transfer queue is empty }
}
; $_ftp.queue.add(session,0|1,local,remote,bytes,server)
; 0=upload 1=download
alias _ftp.queue.add {
  var %icon = $calc($2 + 1),%local = $3,%remote = $4,%size = $5,%server = $6,%from,%target,%90 = $chr(9) $+ 0
  if (%icon == 1) { var %from = %local,%target = %remote }
  else { var %from = %remote,%target = %local }
  did -a $1 1030 - %icon %from $+ %90 %target $+ %90 %size $+ %90 %server
}
alias _ftp.setitle {
  if ($2- != $null) { dialog -t $1 $2- - aIRC FTP Client }
  else { dialog -t $1 aIRC FTP Client }
}
alias _ftp.disconnect {
  if (ftp* iswm $1) {
    sockclose $1
    sockclose ? $+ $1
    .timer $+ $1 off
    .timer $+ $1 $+ _* off
    if ($dialog($1)) {
      did -o $1 1000 2 +a 1 Connect $+ $chr(9) $+ Connect to a FTP Server
      _ftp.setitle $1
      _ftp.addlog.info $1 Disconnected!
      did -r $1 1020,1021,1022,1025,1026
    }
  }
}