PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : crc check aus sfv files (Open Source)


Codeq
20.03.2002, 10:53
Hi
hab hier mal was kleines gescriptet... Mich hats super angekotzt das ich über 80 kleine gezipte files gezogen habe und ich am ende nen crc error hatte. wusste nicht welche datei nun falsch ist und hab mir aus den meistens dabeiliegenden sfv files ne crc kontrolle gebastelt....

is alias script und wird mit
/crc sfv_file
aufgerufen... die gepackten files müssen im selben ordner wie die sfv liegen...



crc {
if ($exists($1-)) {
var %crc.dir $nofile($1-)
var %crc.file $1-
var %crc.comment ;
var %crc.i 1

while ($read -l %crc.i %crc.file != $null) {
var %crc.actual_line $read -l %crc.i %crc.file
if ($left(%crc.actual_line,1) != %crc.comment) {
tokenize 32 %crc.actual_line
var %crc.temp %crc.dir $+ $1
if ($crc(%crc.temp) == $2) { echo -a $1- 9OK $crc(%crc.temp) }
else { echo -a $1- 4false $crc(%crc.temp) }
}
inc %crc.i
}

}
else { echo -a File not found. }
}


Mac Fly
20.03.2002, 12:09
Fein Fein! Du gibst den Code also frei? ;)

chuckafucka
20.03.2002, 19:29
Hey jo,
hab mir auch ma vor Monaten ein CRC-Check-Script gebastelt:

; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Name: SFV-Check (sfv-check.ini)
; Section: Standard-scripting
; Additional Files: none
; Language: English
; Last Update: 07/22/2001
; Description: You got a hot warez-release, but don´t know really, if it´s
; completly without CRC-Errors? Use this simple script to
; calculate the >real< CRC-value and compare it with the given
; value, written in the *.sfv-file. Report any Bugs and/or
; problems to martin-h@foni.net.
; Note: Don&acute;t copy or steal my script without my authorization!
; Copyright by: chuckafucka
; Have Phun!
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

menu channel,status,query {
SFV-Check:SFV-Check
}

alias SFV-Check {
set %sfv 1
set %dir $sdir(D:\--=[ warez ]=--\--=[ alben ]=--\,Select directory for SFV-Check)
if (%dir == $null) {
echo -a 10No directory selected!
unset %sfv %dir
halt
}
set %path $findfile(%dir,*.sfv,1)
if (%path == $null) {
echo -a 10No *.sfv-File found!
unset %sfv %dir %path
halt
}
set %lines $lines(%path)
window -do @SFV-Check
:while2
if (%lines >= %sfv) {
set %now $read(%path,%sfv)
set %test $left(%now,1)
}
else goto end
if (; isin %test) {
inc %sfv
goto while
}
inc %counter
set %crc.sfv $right(%now,8)
set %crc.mrc $crc(%dir $+ $left(%now,-8))
if (%crc.sfv != %crc.mrc) {
echo @SFV-Check 4File $left(%now,-8) failed!
inc %sfv
goto while
}
echo @SFV-Check 3File $left(%now,-8) passed!
inc %counter.passed
inc %sfv
goto while
:end
echo @SFV-Check 12SFV-Check complete, %counter.passed $+ / $+ %counter Files ( $+ $round($calc(100 / %counter * %counter.passed ),2) $chr(37) $+ ) passed!
unset %counter* %sfv %dir %path %lines %now %test %cr2c.*
}


Ich hatte damals keine Lust die Variablen usw. zu optimieren, war mir auch ziemlich egal, hauptsache es funzt :). Aufrufen könnt ihr das ganze, nachdem ihr den Code ins remote kopiert habt, mit einem Rechtsklick im Channel/Status/Query und dann auf &acute;SFV-Check&acute;. Gebt mal euern Senf dazu :)

chuckafucka

Felix Kaiser
20.03.2002, 21:39
Was für ne Methode benutzen die für svc? Hab hier irgendwo nen alten Pascalcode rumkullern, 32 Bit CRC Berechnung á la PkZip. Wär kein Prob das in mIRC zu übersetzen ;)

Codeq
21.03.2002, 11:07
alias SFV-Check {
set %sfv 1
set %dir $sdir(D:\--=[ warez ]=--\--=[ alben ]=--\,Select directory for SFV-Check)

Hmm ich würd anstelle von set var benutzen da dann der platz für variablen wieder frei gegeben wird.. vor allem bei schleifen zählern..


else goto end
if (; isin %test) {
inc %sfv
goto while
}

GOTO anweisungen sind selten gut und sinnvoll. :(
irgendwann verliert man die übersicht und mirc ist kein BASIC :D
lieber alles mit for oder while behandeln.... (mag geschmackssache sein, aber ich hab die besseren erfahrungen damit gemacht)

UND if (; isin %test) <--
was machst du wenn eine datei ein ; im namen hat?? 8o


unset %counter* %sfv %dir %path %lines %now %test %cr2c.*

spart man sich mit var 8)


Sonst siehts ok aus.. zumindest bedienerfreundlicher als meins :))

chuckafucka
21.03.2002, 15:12
Jo, wie gesagt, man kann noch ne Menge optimieren... *g* Damals hab ich nach dem Prinzip gescriptet, wie es läuft ist egal, hauptsache es funzt. Außerdem sind meine scripts normalerweie auch nicht public, sondern auf meine Gegenbenheiten angepasst, z.B.:

set %dir $sdir(D:\--=[ warez ]=--\--=[ alben ]=--\,Select directory for SFV-Check)

Mittlerweile bin ich auch viel überzeugter von einem sauberen und User-Unabhängigen code. Was bis heute ohne Probleme läuft, hab ich immer so gelassen, aber was ich neu scripte, mach ich natürlich möglichst clean ;).

Codeq
21.03.2002, 16:43
mal ne frage... ich hab in meinem source nen $read command drin...

meine syntax sieht so aus
$read -l %crc.i %crc.file
laut hilfe solls auber so aussehen
$read(%crc.file,%crc.i)

wurde das in mirc6 geändert ? hab immernoch v5.91 *g*
wär kewl wenn mans dann zumindest hier einsetzen kann $crc() denn jetzt musste ich nen umweg über eine variable machen....

shawn
23.03.2002, 16:31
ich hab da uch mal ne kleine frage ^^
was is crc?? *g*

Felix Kaiser
23.03.2002, 17:00
CRC = Cyclic Redundancy Checksum

z.dt.: Eine Prüfsumme eines Datenblocks. Magnetspeicherplatten arbeiten permanent mit welchen, um Datenverluste abzufangen und zu korrigieren bei Lese-/Schreibzyklen. In Archiven werden auch CRCs verwendet, um sicherzugehen, dass die Daten sachgemäß gekomprimiert werden konnten und somit identisch den Orginaldaten sind. Gibt auch noch einige andere Anwendungsgebiete für CRCs... 8)

Diogenes
23.03.2002, 17:24
Crackschutz z. B. :))

Codeq
23.03.2002, 17:58
oder ganz wichtig im inet ;)
das TCP hat einen CRC mit drin damit jedes datenpaket zu 99,99 prozentiger sicherheit auch richtig ankommt.
zB 5 bits .. die werden über ein polynom codiert und man erhält ein 8 bit langes ergebnis. dieses ergebnis wird übertragen und nach erhalt vom client wieder zurück gerechnet. (decodiert)
wenn bei der polynom division durch das ergebnis ein rest herrauskommt, dann war der transfer fehlerhaft, wenn nicht war es zu 99,99% das richtige ergebnis.

also das original bit muster kommt immer dann heraus wenn codiertes bit muster dividiert durch ein speziell gewähltes polynom keinen rest ergibt ...