All pastes #899440 Raw Edit

HDD SCRIPT

public text v1 · immutable
·published 2008-02-11 03:11 UTC
rendered paste body

alias HDDspace {
  ; Returns diskspacing information on all or specific disks
  ; Syntax: /HDDspace %disk
  ;   where %disk is optional (default = all)


  ; Errorchecking:
  if ($numtok(%HDDspaceColors,32) != 5)       return $dialog(HDDspaceSettings,HDDspaceSettings)
  if ($numtok(%HDDspaceColors,44) != 6)       return $dialog(HDDspaceSettings,HDDspaceSettings)
  if ($numtok(%HDDspaceDiskInterval,32) != 2) return $dialog(HDDspaceSettings,HDDspaceSettings)

  ; Change Settings?
  if (($1 == settings) || ($1 == setup)) return $dialog(HDDspaceSettings,HDDspaceSettings)

  ; Settings
  var %i   = $asc($gettok(%HDDspaceDiskInterval,1,32))
  var %j   = $asc($gettok(%HDDspaceDiskInterval,2,32))

  var %c1  =  $+ $gettok(%HDDspaceColors,1,32)
  var %c2  =  $+ $gettok(%HDDspaceColors,2,32)
  var %c3  =  $+ $gettok(%HDDspaceColors,3,32)

  var %cp1 = $gettok(%HDDspaceColors,4,32)
  var %cp2 = $gettok(%HDDspaceColors,5,32)

  ; Messagemode
  if (($active ischan) || ($query($active))) {
    var %msgmode = msg $active
  }
  else {
    var %msgmode = echo -s
  }

  ; Variables
  var %d
  var %free
  var %total
  var %percent

  ; Disktype
  if ($1 != $null) {
    if (($asc($upper($1)) < $asc(A)) || ($asc($upper($1)) > $asc(Z))) {
      echo * ERROR - HDDspace : % $+ disk needs to be drive letter (A-Z)
      halt
    }
    elseif ($disk($1).type != fixed) {
      echo * ERROR - HDDspace : $1 is not a fixed disk or does not exist
      halt
    }
    else {
      %i = $asc($1)
      %j = $asc($1)
    }
  }

  [ %msgmode ] %c1 HDD's $spacing(8) Free $spacing(6) Total $spacing(1) Usage $spacing(1) 1 $+ $chr(169) cP $+ $chr(124) $+ Leif 

  while (%i <= %j) {
    %d = $upper($chr(%i))
    if $disk(%d).type == fixed {
      [ %msgmode ] %c2 %d $+ : $spacing(3) $pad($suffix($disk(%d).free),12) $pad($suffix($disk(%d).size),12) $spacing(1) $progressbar($calc(1 - ($disk(%d).free / $disk(%d).size)), [ %cp1 ] ) $+ %c2 $pad($roundfix($calc(100 - ($disk(%d).free / $disk(%d).size * 100)),2) $+ %,6) 
      %free  = $calc(%free + $disk(%d).free)
      %total = $calc(%total + $disk(%d).size)
    }
    inc %i
  }

  if ($1 == $null) {
    %percent = $calc(1 - (%free / %total))
    [ %msgmode ] %c3 Total: $pad($suffix(%free),12) $pad($suffix(%total),12) $spacing(1) $progressbar(%percent, [ %cp2 ] ) $+ %c3 $pad($roundfix($calc(%percent * 100),2) $+ %,6) 
  }

}



alias spacing {
  ; Returns a string of white spaces (ASCII char 160)
  ; Syntax: $spacing(%n)
  ;
  return $str($chr(160),$$1)
}

alias progressbar {
  ; Returns a graphical progresbar with optional colors as a string
  ; Syntax : $progressbar(%value, %bgcolor, %color, %length)
  ;   where %length is optional (default = 10)
  ;
  var %length = $4
  if (%length == $null) %length = 10
  var %percent = $round($calc($$1 * %length),0)
  var %partOne = $str($chr(4),%percent)
  if (%percent < %length) var %partTwo =  $+ $$3 $+ $str($chr(4),$calc(%length - %percent))
  return  $+ $$2 $+ %partOne $+ %partTwo
}

alias suffix {
  ; Formats bytes with apropriate suffix
  ; Syntax: $suffix(%bytes)
  ;
  var %value
  var %type
  if ($1 >= $calc(2^40)) {
    %value = $calc($1 / 2^40)
    %type = TB
  }
  elseif ($1 >= $calc(2^30)) {
    %value = $calc($1 / 2^30)
    %type = GB
  }
  elseif ($1 >= $calc(2^20)) {
    %value = $calc($1 / 2^20)
    %type = MB
  }
  elseif ($1 >= $calc(2^10)) {
    %value = $calc($1 / 2^10)
    %type = kB
  }
  else {
    %value = $1
    %type = byte(s)
  }
  return $roundfix(%value,2) %type
}

alias roundfix {
  ; Returns number with fixed number deciamals
  ; Syntax: $roundfix(%number, %decimals)
  ;   where %decimals > 0
  ;
  var %value = $round($$1,$$2)
  if ($pos(%value,.,0) == 0) {
    %value = %value $+ . $+ $str(0,$$2)
  }
  else {
    %value = $left(%value $+ $str(0,$$2),$calc($pos(%value,.,1) + $$2))
    if (. isin $right(%value,2)) {
      %value = %value $+ 0
    }
  }
  return %value
}

alias pad {
  ; Pads the string with white spaces (see $spacing function) on optional sides
  ; Syntax: $pad(%string, %mode)
  ;   where %mode is optional (default = left)
  ;
  var %len = $len($strip($1))
  if (($3 == left) || ($3 == $null)) return $spacing($calc($$2 - %len)) $+ $1
  if  ($3 == right)                  return $1 $+ $spacing($calc($$2 - %len))
  if  ($3 == both)                   return $spacing($int($calc($$2 / 2 - %len / 2))) $+ $1 $+ $spacing($calc($2 - $int($calc($2 / 2 + %len / 2))))
}



menu status,channel,query {
  -
  HDD's
  .All:/HDDspace
  .-
  .DiskC:/HDDspace C
  .DiskE:/HDDspace E
  .DiskF:/HDDspace F
  .DiskG:/HDDspace G
  .DiskH:/HDDspace H
  .-
  .other...:/HDDspace $$?=disk? (A-Z)
  -
}
menu menubar {
  -
  HDDspace Settings...:/dialog -m HDDspaceSettings HDDspaceSettings
  -
}


dialog HDDspaceSettings {

  title    "HDDspace Settings"
  icon     $mircexe, 18
  size     -1 -1 150 150
  option   dbu

  box     "Colors",      101,   5  3 140 73

  text    "Foreground",   11,  46 10  45 10
  text    "Background",   12,  96 10  45 10

  text    "Header",       13,  10 22  45 10
  combo                    1,  45 20  45 10, drop
  combo                    2,  95 20  45 10, drop

  text    "Body",         14,  10 32  45 10
  combo                    3,  45 30  45 10, drop
  combo                    4,  95 30  45 10, drop

  text    "Totals",       15,  10 42  45 10
  combo                    5,  45 40  45 10, drop
  combo                    6,  95 40  45 10, drop

  text    "Progressbars", 16,  10 52  45 10
  combo                    7,  45 50  45 10, drop
  combo                    8,  95 50  45 10, drop

  text    "Tot.Progress", 17,  10 62  45 10
  combo                    9,  45 60  45 10, drop
  combo                   10,  95 60  45 10, drop


  box     "Advanced",                           123,   5  80 140 43

  text    "Diskinterval (default = C-Z):",       31,  10  90 150 10
  text    "The script searches for fixed disks", 32,  15 100 150 10
  text    "from",                                33,  15 110  20 10
  edit    "C",                                   21,  30 108  10 10, center, limit 1
  text    "to",                                  34,  45 110  20 10
  edit    "Z",                                   22,  55 108  10 10, center, limit 1


  button  "OK",     41,  35 130 36 12, default, ok
  button  "Cancel", 42,  80 130 36 12, cancel

}

on 1:dialog:HDDspaceSettings:init:*: {
  var %colors     =  0 White   1 Black   2 DarkBlue  3 Green       4 Red       5 Brown
  %colors = %colors  6 Purple  7 Orange  8 Yellow    9 LightGreen 10 DarkCyan 11 Cyan
  %colors = %colors 12 Blue   13 Pink   14 DarkGrey 15 Grey

  didtok $dname 1,2,3,4,5,6,7,8,9,10 32 %colors

  var %i = 1
  var %ii = 1
  while (%ii < 11) {
    did -c $dname %ii $calc($gettok($gettok(%HDDspaceColors,%i,32),1,44) + 1)
    did -c $dname $calc(%ii + 1) $calc($gettok($gettok(%HDDspaceColors,%i,32),2,44) + 1)
    inc %i
    inc %ii 2
  }

  did -o $dname 21 1 $gettok(%HDDspaceDiskInterval,1,32)
  did -o $dname 22 1 $gettok(%HDDspaceDiskInterval,2,32)

  if (($did($dname,21) < A) || ($did($dname,21) > Z)) did -o $dname 21 1 C
  if (($did($dname,22) < A) || ($did($dname,22) > Z)) did -o $dname 22 1 Z


}

on 1:dialog:HDDspaceSettings:edit:21,22: {
  ; Validate editboxes
  if ($len($did($dname,$did)) > 0) {
    did -o $dname $did 1 $upper($did($dname,$did))
    if (($did($dname,$did) < A) || ($did($dname,$did) > Z)) did -r $dname $did
  }
}

on 1:dialog:HDDspaceSettings:sclick:41: {
  ; on Dialog OK

  set %HDDspaceColors
  set %HDDspaceDiskInterval

  var %i = 1
  while (%i < 11) {
    %HDDspaceColors = %HDDspaceColors $round($did($dname,%i,0)) $+ ,
    %HDDspaceColors = %HDDspaceColors $+ $round($did($dname,$calc(%i + 1),0))
    inc %i 2
  }

  %HDDspaceDiskInterval = $did($dname,21) $did($dname,22)
}

on 1:load: {
  set %HDDspaceColors 0,15 0,14 0,10 9,15 9,15
  set %HDDspaceDiskInterval C Z
  echo 4 -a HDDspace addon loaded!
  echo 4 -a Entering setup...
  return $dialog(HDDspaceSettings,HDDspaceSettings)
}

on 1:unload: {
  unset %HDDspaceColors
  unset %HDDspaceDiskInterval
  echo 4 -a HDDspace addon unloaded!
}