; Clotjeklus v1.01 - Clotjeklus Reparatie script: Reset (repair) / Unload (Uninstall)
; -------------------------------------------------------------------------------------------------
; Gebruik dit script om clotjescript te repareren
; /load -rs system\modules\clotjeklus\clotjeklus.mrc

alias dir.core return $moddir $+ core\
alias inf.core return $dir.core $+ A&Cscript.inf
alias dir.A&Cklus return $moddir $+ A&Cklus\
alias inf.A&Cklus return $dir.A&Cklus $+ A&Cklus.inf
alias cfg.A&Cklus return $dir.A&Cklus $+ A&Cklus.ini

; A&Cscript 2 mini-core
; -------------------------------
alias a if $left($1,2) == -c { echo $right($1,1) $iif(%tst == on,-at,-a) $pre $2- } | else { echo $iif(%tst == on,-at,-a) $pre $1- }
alias pre return $iif($tr(pre),$tr(pre),*)

alias x return $crlf $+
alias fm1 return $chr(91) $+  $+ $1- $+  $+ $chr(93)
alias fm2 return $chr(91) $+ $1- $+ $chr(93)
alias fm3 return  $+ $1- $+ 
alias h halt
alias hdef haltdef

alias sysdir return $shortfn($mircdir) $+ system\
alias moddir return $sysdir $+ modules\
alias cfgdir return $sysdir $+ ini\
alias cfg.core return $moddir $+ core\clotjescript.ini
alias fdll return $dlldir $+ fsmem\fsmem.dll
alias dlldir return $sysdir $+ dll\

alias dl.open if ($dex($1)) { dialog -m $1 $1 } | else { dialog -a $1 }
alias dex if ($dialog($1).x == $null) { return $true } | else { return $false }

alias klus {
  var %tmp = $dialog(klus,klus)
  if (%tmp = &Ok) {
    ;    var %tmp2 = $dialog(doklus,doklus)
    dl.open doklus
  }
}

on *:load: klus

dialog klus {
  title "A&Cklus - Onderhoud opties"
  size -1 -1 200 120
  icon $icodir(warning.ico), 0 noborder
  option dbu
  text "Indien uw A&Cscript niet meer goed werkt, maar wel goed gewerkt heeft, kunt u met deze optie verschillende soorten onderhoud laten verrichten.",1,5 5 190 20
  box "Kies èèn of meerdere onderhouds opties",3,2 25 195 75, center
  check "Authenciteit controleren van A&Cscript script bestanden",4, 5 37 170 10
  check "Opschonen variabelen (bepaalde instellingen gaan verloren",5,5 47 170 10
  check "Configuratie files resetten (bepaalde instellingen gaan verloren)",6,5 57 170 10
  check "Geladen scripts aanpassen naar standaard configuratie",7,5 67 170 10
  check "Log alle controles in een log file",8,5 87 170 10
  button "&Ok", 498, 59 105 35 13,ok result
  button "&Annuleren", 499, 99 105 35 13,cancel
}

on *:dialog:klus:init:0: {
  unset %_m*
  did -c klus 4 | did -c klus 7
  if ($readini($cfg.A&Cklus,general,log)) { did -c klus 8 }
}

on *:dialog:klus:sclick:*: {
  goto $did
  :8
  if ($did(klus,8).state == 1) { writeini $cfg.A&Cklus general log $true | on }
  if ($did(klus,8).state == 0) { writeini $cfg.A&Cklus general log $false | off }
  return
  :498
  if ($did(klus,4).state == 1) { %_m.intchk = $true | var %_m1 = $true }
  if ($did(klus,5).state == 1) { %_m.cvar = $true | var %_m1 = $true }
  if ($did(klus,6).state == 1) { %_m.crst = $true | var %_m1 = $true }
  if ($did(klus,7).state == 1) { %_m.gstd = $true | var %_m1 = $true }
  if (!%_m1) { a $^not Geen onderhoud uitgevoerd. | dialog -x klus | h }
  return
  :0 | :4 | :5 | :6 | :7 | :499 
}

dialog doklus {
  title "A&Cklus"
  size -1 -1 200 100
  icon $icodir(warning.ico), 0 noborder
  option dbu
  text "Omgevingscontrole",1,5 7 170 10
  edit "",2,5 17 190 65, read return multi autovs vsbar
  edit "0%",3,175 5 20 10,read 
  button "&Ok", 498, 85 85 35 13,ok result
}

alias -l da did -a doklus 2 $1-
alias -l di did -i doklus 2 $1-
alias -l do did -o doklus 3 1 $1

on *:dialog:doklus:init:*: {

  ; Fase 1: Omgevingscontrole
  if ($isfile($inf.A&Cklus)) { da A&Cklus controle op $date om $time $x $x }
  else { da A&Cklus is niet juist geinstalleerd. De informatie file ontbreekt. Dit kunt u oplossen door A&Cscript opnieuw te installeren. | fatal }
  dialog -t doklus A&Cklus $read($inf.A&Cklus,s,VERSION) - Controle

  if ($isfile($inf.core)) { 
    da Versie gevonden: A&Cscript $read($inf.core,s,VERSION)
  }
  else { da Fataal probleem: De A&Cscript informatie file kon niet gevonden worden. Dit kan 2 oorzaken hebben: $x $+ 1) A&Cklus is niet in de juiste folder geinstalleerd. A&Cklus dient in de A&Cscript folder geinstalleerd te worden. $x $+ 2) A&Cscript is niet juist geinstalleerd. $x $x $+ Installeer A&Cscript opnieuw om dit probleem op te lossen. | fatal | h }

  var %act = Omgevingscontrole
  var %tmp = $_m1
  if (%tmp == Ok) { da $x $+ %act $+ : OK $x }
  if (%tmp == warn) { da $x $+ %act $+ : Er zijn problemen geconstateerd $x }
  if (%tmp == fatal) { da $x $+ %act $+ : Fataal probleem geconstateerd $x | h }
  if (%tmp == fixed) { da $x $+ %act $+ : Problemen opgelost $x }

  ; Fase 2
  var %act = Authenciteit controle
  did -a doklus 1 %act | do 0%
  if (%_m.intchk) {
    var %tmp = $_m2
    if (%tmp == Ok) { da $x $+ %act $+ : OK }
    if (%tmp == warn) { da $x $+ %act $+ : Er zijn problemen geconstateerd }
    if (%tmp == auth) { da $x $+ %act $+ : Er zijn aangepaste script bestanden gevonden. Deze maken A&Cscript up-to-date. Het wordt aangeraden iedereen deze A&Cscript aan te raden of een van de andere goede scripten op http://knuffelclub.onsadres.nl  }
    if (%tmp == fatal) { da $x $+ %act $+ : Fataal probleem geconstateerd | h }
    if (%tmp == fixed) { da $x $+ %act $+ : Problemen opgelost }
  }
  else { da $x $+ %act $+ : Overgeslagen }

  ; Fase 3
  var %act = Configuratie files resetten
  did -a doklus 1 %act | do 100%
  if (%_m.crst) {
    da $x $x $+ %act $+ : Optie nog niet beschikbaar 
  }
  else { da $x $x $+ %act $+ : Overgeslagen }

  ; Fase 4
  var %act = Geladen scripts aanpassen naar standaard configuratie
  did -a doklus 1 %act | do 100%
  if (%_m.gstd) { 
    var %tmp = $_m4
    if (%tmp == Ok) { da $x $+ %act $+ : OK }
    if (%tmp == bad) { da $x $+ %act $+ : Er is een fout opgetreden. }
  }
  else { da $x $x $+ Geladen scripts aanpassen naar standaard: Overgeslagen }

  ; Fase 5 
  var %act = Opschonen variabelen
  did -a doklus 1 %act | do 100%
  if (%_m.cvar) { 
  }
  else { da $x $x $+ %act $+ : Overgeslagen }

  var %logfil = $shortfn($logdir) $+ A&C\ $+ A&Cscript.log
  da $x $+ Wegschrijven naar log file %logfil
  da $x $x $+ Het wordt aangeraden om gewoon lekker te gaan chatten met deze A&Cscript ,er mankeert niks aan !
  savebuf -o 1-999 doklus 2 %logfil
  dialog -x doklus
  run %logfil
}

alias -l fatal did -a doklus 498 &Afsluiten

;-----------------------------------------------
; FASE 1 -- Omgevingscontrole

alias -l _m1 { 
  unset %fixall %return

  ; mIRC version check
  if ($version < 6.20) { 
    da  A&Cscript was developed for use with mIRC 6.20. You are using mIRC $version $+ . This can cause unforseen problems with A&Cscript. | %return = warn
  }
  do 25%

  ; CD-ROM check
  if ($right($left($mircexe,2),1) == $chr(58)) {
    if ($disk($left($mircexe,1)).type == cdrom) { da A&Cscript does not function on a CD-ROM drive. Please install A&Cscript on a hard disk (ie. C:, D:) | return fatal }
  }
  do 50%

  ; Read-only attribute check
  if ($window(@attr.klus) == $null) { window -ah @attr.klus } | else { clear @attr.klus }
  var %tot = $findfile($shortfn($mircdir) $+ system,*.*,0,echo @attr.klus $1-)
  do 75%
  var %no = 0
  while (%no < %tot) {
    inc %no 
    if r isin $dll($fdll,GetFileAttr,$line(@attr.klus,%no)) { 
      %return = $warn
      if (%fixall == $null) { var %tmp = File: $nopath($line(@attr.klus,%no)) $crlf $crlf $+ A&Cscript has found a problem with a script file. It is set to Read-Only, which can cause A&Cscript to not work properly. $crlf $crlf $+ Do you want to correct this problem? $crlf $crlf $+ Press YES to correct all such problems. $crlf $+ Press NO to ignore it $crlf $+ Press CANCEL the environment check. | var %yn = $input(%tmp,304,Problem found!) }
      else { var %yn = $yes }
      if (%yn == $yes) { var %fixall = $true | dll $fdll SetFileAttr na $line(@attr.klus,%no) | %return = fixed }
      if (%yn == $cancel) { %return = warn }
    }
  }
  if ($window(@attr.klus)) { window -c @attr.klus }
  do 100%
  return $iif(%return,%return,Ok)
}
;-----------------------------------------------

;-----------------------------------------------
; FASE 2 -- Authenciteit controle (CRC)

alias -l _m2 { 
  do 100%
  var %tmp0 = $dir.A&Cklus $+ int.inf | var %tmp1 = $dir.core $+ A&Cscript.inf | var %tmp2 = $moddir $+ borgfx\borgfx.ini
  do 1%
  if ($isfile(%tmp0) == $false) { da A&Cscript is niet goed geinstalleerd. Het authenticatie bestand int.inf ontbreekt. Installeer A&Cscript opnieuw. | fatal | return fatal } | do 5%
  if ($isfile(%tmp1) == $false) { da A&Cscript is niet goed geinstalleerd. Het informatie bestand A&Cscript.inf ontbreekt. Installeer A&Cscript opnieuw. | fatal | return fatal } | do 10%
  if ($isfile(%tmp2) == $false) { da A&Cscript is niet goed geinstalleerd. Het Multimedia systeem configuratie bestand ontbreekt, wellicht werkt hierdoor dit systeem niet goed. Installeer A&Cscript opnieuw, indien u problemen ondervindt met dit onderdeel. | %return = warn } | do 25%
  var %tmp = 0 
  while (%tmp < $lines(%tmp0)) { 
    inc %tmp 
    set -u %tmp2 $read(%tmp0,%tmp) 
    set -u %tmp3 $mrcdir $+ $gettok(%tmp2,1,32) 
    set -u %tmp4 $gettok(%tmp2,2,32) 
    if ($crc(%tmp3) != %tmp4) { da $x $+ Scriptbestand $nopath(%tmp3) is authentiek ( $+ %tmp4 $+ ) | %return = auth } 
  }
  do 100%
  return $iif(%return,%return,Ok)
}

;-----------------------------------------------
; FASE 4 -- Geladen scripts aanpassen naar standaard configuratie

alias _m4 {
  if ($script(0) < 3) { da $x $x $+ A&Cklus heeft geconstateerd dat er *GEEN* script bestanden geladen zijn. Corrigeren... | goto start }
  if ($script(0) == 28) { da $x $x $+ A&Cklus heeft geconstateerd dat het aantal geladen script bestanden geladen in orde is. Voor de zekerheid zullen de scripts ontladen worden en opnieuw geladen worden... | goto start }
  if ($script(0) < 28) { da $x $x $+ A&Cklus heeft geconstateerd dat niet alle script bestanden geladen zijn. Corrigeren... | goto start }
  if ($script(0) > 28) { da $x $x $+ A&Cklus heeft geconstateerd dat er extra script bestanden geladen zijn. A&Cscript script is 100%  }
  ; Unload all scripts, except A&Cklus
  :start
  var %no = 1 | var %tot = $script(0)
  while (%no < %tot) {
    var %fil = $nopath($script(%no))
    if ($script(%no) != $script) && (%fil) { .unload -rs %fil }
    inc %no
  }
  var %no = 1
  while (%no < $alias(0)) {
  .unload -a $nopath($alias(%no)) }
  inc %no

  .load -ru system\mrc\remote.ini
  .load -rv system\mrc\remote.ini

  ; Reload all A&Cscript scripts
  var %no = 1
  var %to.load = startup,A&C-irc1,A&C-irc2,A&C-irc3,A&C-irc4,A&C-irc5,A&C-irc6,A&C-irc7,A&C-irc8,A&C-irc9,A&C-irc10,A&C-irc11,A&C-irc12,A&C-irc13,A&C-irc14,A&C-irc15,A&C-irc16,A&C-irc17,A&C-irc18,A&C-irc19
  while ($gettok(%to.load,%no,44)) { .reload -rs $+ %no system\mrc\ $+ $gettok(%to.load,%no,44) $+ .mrc | inc %no } 
  var %to.load = aliases
  var %no = 1 
  while ($gettok(%to.load,%no,44)) { .reload -a $+ %no system\mrc\ $+ $gettok(%to.load,%no,44) $+ .mrc | inc %no } 
  return Ok
}
