Peace & Protection 4.00 — File Browser

PeaceProtection4.00v4.0 / PeaceProtection4.00v4.0 / SCRIPT / WINDOW.MRC

WINDOW.MRC — 15 KB — Download this file

; #= P&P -rs
; ########################################
; Peace & Protection
; Generic and standard custom windows
; ########################################

;
; Unhide all windows
;
alias unhide {
  unset %!hidden | window -w "Status Window"
  var %num = $chan(0) | :loopC | if (%num) { window -w " $+ $chan(%num) $+ " | dec %num | goto loopC }
  %num = $chat(0) | :loopD | if (%num) { window -w = $+ $chat(%num) | dec %num | goto loopD }
  %num = $query(0) | :loopQ | if (%num) { window -w $query(%num) | dec %num | goto loopQ }
  %num = $numtok(%!@close,32) | :loopW | if (%num) { if ($window($gettok(%!@close,%num,32))) window -w $ifmatch | dec %num | goto loopW }
}

;
; Hide a window
;
; /hide [#chan|query|=chat|@win|status window]
alias hide {
  if ($1) var %window = $1- | else var %window = $active
  if ((%window == status window) || (%window ischan) || ($query(%window)) || ((=* iswm %window) && ($chat($right(%window,-1)))) || ($window(%window) == %window)) {
    if (($chr(32) isin %window) || (%window ischan)) window -h " $+ %window $+ "
    else window -h %window
    %!hidden = 1
    if ($active == %window) window -aw "Status Window"
  }
  else dispa Error- Can't hide $:s(%window)
  if ($_dlgi(unhide) != 1) {
    if ($dialog(howunhide,howunhide,-4)) _dlgw unhide 1
  }
}
dialog howunhide {
  title "Hiding Windows"
  size -1 -1 250 125
  text "To unhide a window, select it from the Window menu, or select 'Unhide all' from the P&&P menu. You can also type /unhide.", 3, 10 10 230 100
  check "Don't show this message again", 2, 40 60 170 20
  button "OK", 1, 85 90 80 25, ok default
  edit "", 4, 1 1 1 1, hide autohs result
}
on *:DIALOG:howunhide:sclick:1:did -o $dname 4 1 $did(2).state

;
; Pick new windows
;

alias _newwin {
  if ($window($1*,0) == 0) return $1
  var %num = $calc(1 + [ $remove($window($1*,$window($1*,0)),$1) ] )
  if (%num == 1) inc %num
  return $1 $+ %num
}
alias _newdlg {
  if ($dialog($1) == $null) return $1
  var %num = 1
  :loop
  var %try = $1 $+ %num
  if ($dialog(%try) == $null) return %try
  inc %num | goto loop
}

; _window n -abcefl[N]noprsx -tN,..,N|+bfmnstx|+ @Name x y w h [/command] [popup]
; second -+ param is p2s
; Opens window with remembered settings for position, size, font, and desktopping
; n is 1 or 2-
;   Appends a generic window submenu type- (not for picture windows/etc.)
;   Use 1 for conceptually loggable windows
;   Use 2 for nonloggable windows
;   Add .n for listbox Copy cmd (n is first line to select on a select-all)
; Don't use for quick or hidden windows or windows that change name or settings
alias _window {
  % [ $+ [ $4 ] ] = $remove($2,n,a,r,x,h,w) $3 $9-
  %@R [ $+ [ $4 ] ] = $readini -n $_cfg(window.ini) $4 rem
  if (%@R [ $+ [ $4 ] ] == $null) %@R [ $+ [ $4 ] ] = 1
  %@L [ $+ [ $4 ] ] = $readini -n $_cfg(window.ini) $4 log
  %@P [ $+ [ $4 ] ] = $readini -n $_cfg(window.ini) $4 pos
  if (%@P [ $+ [ $4 ] ] == $null) %@P [ $+ [ $4 ] ] = $5-8
  %@D [ $+ [ $4 ] ] = $5-8
  window $iif($readini -n $_cfg(window.ini) $4 desk,$2d,$2) $_p2s($3) $4 %@P [ $+ [ $4 ] ] $9- $readini -n $_cfg(window.ini) $4 font
  %!@close = $addtok(%!@close,$4,32)
  if ($1 < 4) %!@help = $addtok(%!@help,$4,32)
  if ($1 < 3) %!@nolog = $addtok(%!@nolog,$4,32)
  if ($1 < 2) %!@log = $addtok(%!@log,$4,32)
  if (. isin $1) { %!@copy = $addtok(%!@copy,$4,32) | %@S [ $+ [ $4 ] ] = $gettok($1,2,46) }
}

; Logs if window is logging (doesn't do stripping etc.)
; _win.log @window text
alias _win.log if (%@L [ $+ [ $1 ] ] != $null) write " [ $+ [ $logdir ] $+ [ $ifmatch ] $+ [ " ] ] $2-

; _windowreg @window call-on-close
; Registers an alias to call when the window closes (with window name as parameter)
alias _windowreg %@C [ $+ [ $1 ] ] = $2-

; select all items or all matching items
alias _selectall {
  sline -r $1
  var %num = $line($1,0)
  :loop
  if (%num >= $2) { sline -a $1 %num | dec %num | goto loop }
}
alias _selectallw {
  sline -r $1
  var %num = $line($1,0)
  :loop
  if (%num >= $2) { if ($3- iswm $line($1,%num)) sline -a $1 %num | dec %num | goto loop }
}

;
; Sort a window
; _dosort @window firstline tokennum tokentype numeric? descend?
;
alias _dosort {
  var %range = $2 $+ - $+ $line($1,0)
  filter -tr $+ $iif($5,u) $+ $iif($6,e) %range $3 $4 $1 $1 *
  dline $1 %range
}

;
; Move selected items up or down in a window
; firstline is first line you allow to be modified; does checks in this routine
; _doslideup @window firstline
; _doslidedn @window
;
alias _doslideup {
  if ($sline($1,1).ln <= $2) return
  var %num = 1
  :loop
  if ($sline($1,%num).ln) {
    iline -a $1 $calc($ifmatch - 1) $sline($1,%num)
    inc %num
    dline $1 $sline($1,%num).ln
    goto loop
  }
}
alias _doslidedn {
  if ($sline($1,$sline($1,0)).ln == $line($1,0)) return
  var %num = $sline($1,0)
  :loop
  if (%num) {
    iline -a $1 $calc($sline($1,%num).ln + 2) $sline($1,%num)
    dline $1 $sline($1,%num).ln
    dec %num
    goto loop
  }
}

;
; Randomizes selected items in a window
; firstline is first line you allow to be modified; does checks in this routine
; _doshuffle @window firstline
;
alias _doshuffle {
  if (($sline($1,1).ln < $2) || ($sline($1,1).ln == $null)) return
  var %new,%line,%num = 1
  :loop
  if ($sline($1,%num).ln) {
    %new = $sline($1,$_pprand($sline($1,0))).ln
    if ($ifmatch != %new) {
      %line = $line($1,%new)
      rline $1 %new $line($1,$ifmatch)
      rline $1 $ifmatch %line
    }
    inc %num
    goto loop
  }
}

;
; Randomizes all items in a window
; firstline is first line you allow to be modified
; _doshufflea @window firstline
;
alias _doshufflea {
  if ($line($1,0) < $2) return
  var %line,%num = $line($1,0)
  :loop
  %new = $calc($_pprand($calc($line($1,0) - $2 + 1)) + $2 - 1)
  if (%num != %new) {
    %line = $line($1,%new)
    rline $1 %new $line($1,%num)
    rline $1 %num %line
  }
  if (%num > $2) { dec %num | goto loop }
}

;
; Replace a line but using iline/dline combo to preserve sorting
; _ridline [-a|s] [col] @win ln new line
;
alias _ridline if (-* iswm $1) { dline $2-4 | iline $1- } | else { dline $1-3 | iline $1- }

; Remembers window settings on closing
on *:CLOSE:@:_dowclose $target
alias _dowclose {
  if ($istok(%!@close,$1,32)) {
    ; Position
    if (%@R [ $+ [ $1 ] ] ) {
      if (f isin % [ $+ [ $1 ] ] ) var %@P = $window($1).x $window($1).y $window($1).dw $window($1).dh
      else var %@P = $window($1).x $window($1).y $window($1).w $window($1).h
      if (%@P == %@D [ $+ [ $1 ] ] ) remini $_cfg(window.ini) $1 pos
      else writeini $_cfg(window.ini) $1 pos %@P
    }
    ; Font (hidden window is to grab default font for comparison)
    window -h @.fontgrab
    if (($window($1).font != $window(@.fontgrab).font) || ($window($1).fontsize != $window(@.fontgrab).fontsize) || ($window($1).fontbold != $window(@.fontgrab).fontbold)) writeini $_cfg(window.ini) $1 font $window($1).font $iif($window($1).fontbold,bold) $window($1).fontsize
    else remini $_cfg(window.ini) $1 font
    window -c @.fontgrab
    ; On close routine?
    if (%@C [ $+ [ $1 ] ] ) $ifmatch $1
    ; Cleanup
    _dowcleanup $1
  }
}
alias _dowcleanup {
  if ($remtok(%!@close,$1,32)) %!@close = $ifmatch | else unset %!@close
  if ($remtok(%!@copy,$1,32)) %!@copy = $ifmatch | else unset %!@copy
  if ($remtok(%!@help,$1,32)) %!@help = $ifmatch | else unset %!@help
  if ($remtok(%!@nolog,$1,32)) %!@nolog = $ifmatch | else unset %!@nolog
  if ($remtok(%!@log,$1,32)) %!@log = $ifmatch | else unset %!@log
  unset %@? $+ $1 % $+ $1
}

;
; Quick-error box
;

on *:KEYDOWN:@Error:13,27:%_lastkey = $keyval
on *:KEYUP:@Error:13,27:if ($keyval == %_lastkey) { window -c @Error | .timer.errorchk off | _unlock.tb | unset %_lastkey }
alias _error _doerror Error- $1-
alias _doerror {
  if ($show == $false) $$$
  ; Timer for closing
  _lock.tb
  .timer.errorchk -om 0 100 if ($active != @Error) $chr(123) window -c @Error $chr(124) .timer.errorchk off $chr(124) _unlock.tb $chr(125)
  ; Window
  window -c @Error
  window -pfdhka +bLt @Error $_center(400,68,1,-7,-25) @Close2
  drawrect -frn @Error $rgb(face) 1 0 0 400 68
  drawpic -nt @Error $rgb(255,255,255) 334 1 130 65 64 64 script\icons.bmp
  ; Text
  drawtext -nr @Error $rgb(text) "ms sans serif" 22 5 2 $1
  drawtext -nr @Error $rgb(text) "ms sans serif" 22 5 23 $gettok($2-,1,127)
  if ( isin $2-) drawtext -nr @Error $rgb(text) "ms sans serif" 13 5 47 $gettok($2-,2,127)
  drawdot @Error
  _ssplay othererror
  halt
}

;
; Quick-help box
;

on *:INPUT:@Quick:window -c @Quick | .timer.quickchk off | .timer.quickflash off | _unlock.tb | unset %_qhelp.* %_qhelpn.* | _juryrig2 $1- | halt
; if info is in quikhelp.dat- _qhelp /cmd (what was entered)
; otherwise- _qhelp $_s2f(quikhelp.dat info) (what was entered)
alias _qhelp {
  unset %_qhelp.*
  ; timers
  _lock.tb
  .timer.quickchk -om 0 100 if ($active != @Quick) $chr(123) window -c @Quick $chr(124) .timer.quickchk off $chr(124) .timer.quickflash off $chr(124) _unlock.tb $chr(124) unset % $+ _qhelp.* % $+ _qhelpn.* $chr(125)
  ; window
  window -c @Quick
  window -pfdehka +bLt @Quick $_center(400,68,1,-7,-50) @Close ms sans serif 16
  drawrect -frn @Quick $rgb(face) 1 0 0 400 68
  titlebar @Quick Help- $gettok($1,1,160)
  editbox -p @Quick $gettok($1,1,160) $2-
  ; display parameters in their boxes
  unset %_qhelp.flip
  var %type,%parm,%num = 1,%x = 1,%read = $read -ts [ $+ [ $1 ] ] script\quikhelp.dat
  if (%read == $null) %read = $gettok($_f2s($1),2-,32)
  if ($findtok(%read,*,1,32)) {
    %_qhelp.final = $ifmatch
    %read = $remtok(%read,*,32)
  }
  else %_qhelp.final = 999
  var %text = $gettok($1,1,160) $2- $gettok($gettok(%read, [ [ $numtok($1-,32) ] $+ ] -,32),1,33)
  :loop
  %parm = $gettok(%text,%num,32)
  if (%parm) {
    if ($ [ $+ [ %num ] ] == $null) {
      %type = $left(%parm,1)
      %parm = $_p2s($right(%parm,-1))
      if (([ isin %parm) || (%type == +)) %_qhelpn. [ $+ [ %num ] ] = req
      else %_qhelpn. [ $+ [ %num ] ] = %parm
      if ([ isin %parm) {
        drawrect -nrf @Quick $rgb(hilight) 1 $calc(%x + $width($gettok(%parm,1,91),ms sans serif,20,0,0) - 1) 45 $calc($width($gettok($gettok(%parm,2,91),1,93),ms sans serif,20,0,0) + 2) 18
        %parm = $remove(%parm,[,])
      }
      drawrect $iif(%type == +,-nrf,-nr) @Quick $rgb(hilight) 1 $calc(%x - 1) 45 $calc($width($remove(%parm,[,]),ms sans serif,20,0,0) + 3) 18
      %_qhelp. [ $+ [ %num ] ] = 1 $calc(%x - 2) 44 $calc($width(%parm,ms sans serif,20,0,0) + 3) 18
      drawrect -nr @Quick $rgb(shadow) %_qhelp. [ $+ [ %num ] ]
    }
    drawtext -nr @Quick $rgb(text) "ms sans serif" 20 %x 44 %parm
    inc %x $calc($width(%parm,ms sans serif,20,0,0) + $iif( $ [ $+ [ %num ] ] ,4,7))
    inc %num
    goto loop
  }
  ; info on what to enter
  drawrect -nrf @Quick $rgb(hilight) 1 66 6 54 14
  drawtext -nr @Quick $rgb(text) "ms sans serif" 13 5 6 Please enter highlighted (required) parameters for $gettok($1,1,160) $+ -
  drawtext -nr @Quick $rgb(text) "ms sans serif" 13 5 22 $gettok(%read,2-,33)
  drawpic -nt @Quick $rgb(255,255,255) 334 1 65 65 64 64 script\icons.bmp
  drawdot @Quick
  _ssplay question
  _qflash | .timer.quickflash -om 0 500 _qflash
  halt
}
alias -l _qflash {
  if ($window(@Quick) == $null) halt
  var %box = 0,%num = 1
  :loop
  if ($gettok($editbox(@Quick),%num,32)) {
    :loopN
    inc %box
    if (%_qhelp. [ $+ [ %box ] ] ) if ($left(%_qhelpn. [ $+ [ %box ] ] ,1) isin -#) if ($left($gettok($editbox(@Quick),%num,32),1) != $left(%_qhelpn. [ $+ [ %box ] ] ,1)) goto loopN
    inc %num
    goto loop
  }
  if ($right($editbox(@Quick),1) == $chr(32)) inc %box
  if (%box > %_qhelp.final) %box = %_qhelp.final
  if (%_qhelp.flip) {
    unset %_qhelp.flip
    drawrect -ri @Quick $rgb(shadow) %_qhelp. [ $+ [ %_qhelp.last ] ]
    if (%box != %_qhelp.last) goto flip
  }
  else {
    :flip
    if (%_qhelp. [ $+ [ %box ] ] ) {
      %_qhelp.flip = 1
      %_qhelp.last = %box
      drawrect -ri @Quick $rgb(shadow) %_qhelp. [ $+ [ %box ] ]
    }
  }
}

;
; Progress meter display
;

on *:KEYDOWN:@Progress:13,27:%_lastkey = $keyval
on *:KEYUP:@Progress:13,27:if ($keyval == %_lastkey) { close -@ @Progress @.pbmp | _unlock.tb | unset %_lastkey }
alias _progress.1 {
  close -@ @Progress @.pbmp | _lock.tb
  window -pfdohka +bLt @Progress $calc($window(-1).w - 330) $calc($window(-1).h - 160) 319 104
  drawrect -frn @Progress $rgb(face) 1 0 0 319 104
  _gradient @Progress 9 69 300 25
  _bevel @Progress 7 67 304 29
  drawrect -rn @Progress $rgb(face) 7 0 60 319 44
  drawtext -nr @Progress $rgb(text) "ms sans serif" 22 8 25 $1-
  drawpic -nt @Progress $rgb(255,255,255) 247 1 195 65 64 64 script\icons.bmp
  drawdot @Progress
  window -hpf @.pbmp 0 0 301 30
  drawcopy @Progress 9 69 300 28 @.pbmp 0 0
}
alias _progress.2 {
  if ($window(@Progress) == $null) return
  if ($1 > 100) { _recurse _progress.2 100 $2- | return }
  drawcopy -n @.pbmp 0 0 300 28 @Progress 9 69
  drawtext -nro @Progress $rgb(text) "arial" 29 $calc(159 - $width($1%,arial,29,1,0) / 2) 67 $1%
  drawrect -nrif @Progress 1 0 9 69 $calc($1 * 3 + 1) 26
  drawrect -frn @Progress $rgb(face) 1 8 45 236 21
  drawtext -cnr @Progress $rgb(text) "ms sans serif" 13 8 48 235 99 $2-
  titlebar @Progress - $1%
  drawdot @Progress
  if ($1 == 100) {
    .timer.kill.progress -om 1 500 close -@ @Progress @.pbmp $chr(124) _unlock.tb
    _ssplay complete
  }
  else .timer.kill.progress -om 0 500 if ($window(@Progress).state != normal) $chr(123) close -@ @Progress @.pbmp $chr(124) _unlock.tb $chr(125)
}
alias -l _bevel {
  drawrect -nr $1 $rgb(frame) 1 $calc($2 + 1) $calc($3 + 1) $calc($4 - 1) $calc($5 - 1)
  drawrect -frn $1 $rgb(face) 1 $calc($2 + 1) $calc($3 + $5 - 1) $calc($4 - 1) 2
  drawrect -frn $1 $rgb(face) 1 $calc($2 + $4 - 1) $calc($3 + 1) 2 $calc($5 - 1)
  drawrect -nr $1 $rgb(hilight) 1 $2 $3 $calc($4 + 1) $calc($5 + 1)
  drawline -nr $1 $rgb(shadow) 1 $2 $calc($3 + $5 - 1) $2 $3 $calc($2 + $4) $3
}
alias -l _gradient {
  ; Left side
  var %place = $calc($4 / 2 + $5 / 2 + $2),%r = $calc($rgb(face) % 256),%g = $calc($rgb(face) / 256 % 256),%b = $calc($rgb(face) / 65536)
  :loopL
  drawline -nr $1 $rgb(%r,%g,%b) 7 $calc(%place - 3) $calc($3 - 3) $calc(%place - $5) $calc($3 + $5)
  if (%place > $2) {
    if (%r > 2) dec %r 3
    if (%g > 2) dec %g 3
    if (%b > 2) dec %b 3
    dec %place 8
    goto loopL
  }
  ; Right side
  %place = $calc($4 / 2 + $5 / 2 + $2)
  %r = $calc($rgb(face) % 256)
  %g = $calc($rgb(face) / 256 % 256)
  %b = $calc($rgb(face) / 65536)
  var %goal = $calc($2 + $4 + $5)
  :loopR
  drawline -nr $1 $rgb(%r,%g,%b) 7 $calc(%place - 3) $calc($3 - 3) $calc(%place - $5) $calc($3 + $5)
  if (%place < %goal) {
    if (%r < 250) inc %r 3
    if (%g < 250) inc %g 3
    if (%b < 250) inc %b 3
    inc %place 8
    goto loopR
  }
}

;
; @Info
;

alias _info if ($show == $false) return | if ($window(@Info)) dispr-div @Info | else _window 2 -e + @Info $_center(500,300) $1 @(nopopups) | .timer -om 1 0 editbox -p @Info $1-