Una cosa son los programas instalados, otra muy distinta es la configuración personal que utiliza tu entorno. Tendrás que averiguar cómo agregarlo allí.
¿Qué escritorio estás usando?
At first, I thought that it is a simple sum of bytes modulus 2^16
Это сумма по модулю 2^16, только каждый раз, когда она переполняется, к ней добавляется 1. Кроме того, байты будут расширены по знаку перед добавлением к сумме. Вот «закомментированный» фрагмент сборки:
# r2 is the pointer into the data
# r0 is the length of the data
# r5 is the sum
2:
movb (r2)+,r4 # r4 = sign_extend(*r2++)
add r4,r5 # r5 += r4
adc r5 # if(r5 overflowed) r5++
sob r0,2b # if(--r0) goto 2 above
то же самое поместите в небольшую программу на C (используйте как./v5sum < file
):
#include <stdio.h>
int main(void){
int c, s = 0;
while((c = getchar()) != EOF){
s += c & 0x80 ? c | 0xff00 : c; // alternative: s += (unsigned short)(signed char)c
if(s & 0x10000){ s++; s &= 0xffff; };
}
printf("%d\n", s);
return 0;
}
To be more specific, the cksum -o 2 and Unix V5's sum produce different output for most binary files in the emulator (for example, in folder /bin), though they agree on most text files.
Это потому, что исходный unix v5 sum
будет расширять знаки символов, и только двоичные файлы содержат байты >= 0x80. В противном случае алгоритмы должны быть похожими и отличаться только для очень больших файлов (, где сумма символов будет переполнять 32-битное целое число без знака ).