IPB

Добро пожаловать, гость ( Вход | Регистрация )

История благодарностей участнику -=CHE@TER=- ::: Спасибо сказали: 327 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
Mar 12 2011, 12:47 Сжатие LZX / LZSS
Всё ещё нужна помощь.
Код распаковщика на Asm'е (DOS) выдранный из игры (с моими комментариями):

[codebox]
; si - input buffer
;es:[di] - output buffer
;[bx] - window buffer?
;edx - uncompressed size?
; -----------------------
; DS - сегмент данных.
; SI, DI - индекс.
; DS и SI/DI связаны.
; [ds:si]=[si]
; [ds:di]=[di]
sub_10349 proc near
push ds
push si
; initialization - nothing interesting
xor eax, eax
mov cx, 400h
xor si, si
mov ds, word ptr ds:2A1Ch
@label1_01:
; $400 * 4 => 4096 fill buffer with zero (eax=0) -> memset()?
mov [si], eax
add si, 4
dec cx
jnz label1_01
xor bx, bx
xor cx, cx
mov edx, [si]
add si, 4
@start_decode:
;start decode routine
shr cx, 1
or ch, ch ; see above (*)
jnz label1_04
mov cl, [si] ; get next byte
inc si
jnz label1_03 ; check si overflow
call buffer_overflow ; error handling?..
@label1_03:
mov ch, 0FFh ; (*) it's a trick: check if we run first time, or get from loop above
@label1_04:
test cx, 1
jz label1_07 ; "read-byte" bit is not set
mov al, [si]
inc si
jnz label1_05 ; check si overflow
call buffer_overflow
@label1_05:
mov [bx], al
inc bx
and bx, 0FFFh
mov es:[di], al
inc di
jnz label1_06
mov ax, es
add ax, 1000h
mov es, ax
@label1_06:
; edx =0 - end of stream
dec edx
jz exit_from_proc
jmp start_decode
; ---------------------------------------------------------------------------
@label1_07:
push cx
mov cl, [si]
inc si
jnz label1_08 ; check si overflow
call buffer_overflow
@label1_08:
mov ch, [si]
inc si
jnz label1_09 ; check si overflow
call buffer_overflow
@label1_09:
push si
; label1_07 to label1_09 - read WORD from input stream
mov si, cx
and si, 0FFFh
; si = (cx & 0xfff)
; si - addr
and cx, 0F000h
rol cx, 4
add cx, 3
; cx = (cx >> 12) + 3
; cx - size
@slide_window_decode:
mov al, [si]
inc si
and si, 0FFFh

mov [bx], al
inc bx
and bx, 0FFFh

mov es:[di], al
inc di

jnz label1_11
mov ax, es
add ax, 1000h
mov es, ax
@label1_11:
; edx =0 - end of stream
dec edx
jz exit_from_proc_clear_stack
; while cx != 0 - copy next byte
dec cx
jnz slide_window_decode
pop si
pop cx
jmp start_decode
; ---------------------------------------------------------------------------
@exit_from_proc_clear_stack:
add sp, 4 ; remove si and cx from stack
@exit_from_proc:
pop si
pop ds
retn
sub_10349 endp
[/codebox]

Он же на Delphi (не работает как надо):
[codebox]Program unlzx;
{$APPTYPE CONSOLE}

Var
Fl: File;
B: Byte;
buff: Array[0..(1024*6)-1] Of Byte;
i, p, o, l, s, x: Integer;

Begin
FillChar(buff, 1024*6, 0);
AssignFile(Fl, '1.zlx');
FileMode:=0;
Reset(Fl, 1);
FileMode:=2;

p := 0;
s := 0;
While Not EOF(Fl) Do
Begin
b := 0;
BlockRead(Fl, B, 1);
If b = 0 Then Break;
For I := 1 To 8 Do
Begin
// if bit is set - read byte to output buffer
If (b And 1 <> 0) Then
Begin
BlockRead(Fl, buff[p], 1, x);
p := p+1;
End
Else
Begin
// else - read word, size&offs
// buffer shift value
o := 0;
BlockRead(Fl, o, 2, x);
l := (o ShR 12) + 3; // length
o := o And $fff; // addr
// not sure about this
if p > $1000 Then
s := p - $1000
else
s := 0;
While l > 0 Do
Begin
buff[p] := buff[s + o];
o := ((o + 1) And $fff);
p:=p+1;
l:=l-1;
End;
End;
// go to next bit
b := b ShR 1;
End;
End;
CloseFile(Fl);

p := 4969;
buff[p-1] := 0;

AssignFile(Fl, 'dump');
ReWrite(Fl, 1);
BlockWrite(Fl, buff, p);
CloseFile(Fl);
End.[/codebox]
Siberian GRemlin,
Dec 16 2010, 02:18 InstallShield CAB View
Есть такая утилита как InstallShield 5.x/6.x Cabinet Compression & Maintenance Util (i5comp.exe / i6comp.exe). У меня к ней даже где-то исходные коды на сях валяются, попробую поковырять...

Добавлено:

Ha-ha! I tricked you!
© Laura, Silent Hill 2

Распаковщик: i6compx.zip

Unicode, правда, не поддерживается (тупо переводится в ANSI с заменой на "_" левых символов), но главное, что оно всё правильно распаковывает. Флаг 0x04000000 я поставил от балды, т.к. не знаю какой там должен быть правильный, чтобы по нему определить наличие отсутствия Unicode.
Кстати, это новая версия (у меня её не было) и там нет необходимости в ZD*.DLL файлах для распаковки - соответствующая библиотека статически слинкована с программой, что очень удобно.
Axsis,
Aug 9 2010, 10:11 FireFox: addons, extensions, tweaks, etc.
Так, возвращаемся на несколько каталогов вверх и удаляем в файле "chrome.manifest" последнюю строчку:
CODE
overlay chrome://mozapps/content/downloads/unknownContentType.xul chrome://getfilesize/content/dialogOverlay.xul

В противном случае GetFileSize будет вызываться при попытке скачать любой файл!
А это чревато обломом, особенно на всяких файловых обменниках (где после начала закачки ссылка становится невалидной), потому что GetFileSize вызывался ДО начала скачивания файла FireFox'ом.
Siberian GRemlin,
Aug 7 2010, 18:38 FireFox: addons, extensions, tweaks, etc.
QUOTE(-=CHE@TER=- @ Jul 4 2010, 20:10) [snapback]2945[/snapback]
Кто-нибудь знает, как скрестить FireFox и вот это (взять программу можно здесь)?
В Opera это одной строчкой делалось, а как в меню FireFox вставить - хрен знает.
Про соответствующее расширение знаю, но оно не работает с FTP и сильно ограничено по сравнению с полноценной программой.
Заранее спасибо.

Итак, свершилось!
Что нужно сделать:
1) Установить расширение для FireFox Get File Size.
2) Установить программу Get File Size.
3) После этого закрываем FireFox и лезем вот сюда:

C: \ Documents and Settings \ USERNAME \ Application Data \ Mozilla \ Firefox \ Profiles \ HPROFILE.default \ extensions \ getfilesize@skakunov.alexander \ chrome \ content\

где:
USERNAME - имя пользователя
HPROFILE - абстрактный хэш выданный FireFox'ом

Далее открываем файл "load.js" и заменяем там функцию get_file_meta() на вот такое:
[codebox]function get_file_meta( url, callback, strings )
{
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath("C:\\Program Files\\GetFileSize\\GetFileSize.exe");
var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
process.init(file);
var args = ["/url:" + url];
process.run(false, args, args.length);
}[/codebox]

Чтобы пункт меню "Get file size" появлялся не только на файлах, но и на картинках - открываем файл "overlay.js", находим там:
CODE
document.getElementById("context-getfilesize").hidden = !gContextMenu.onLink || gContextMenu.onMailtoLink;

Меняем на:
CODE
document.getElementById("context-getfilesize").hidden = !(gContextMenu.onLink || gContextMenu.onImage) || gContextMenu.onMailtoLink;


Далее находим:
CODE
url = gContextMenu.linkURL;

Меняем на:
CODE
url = (gContextMenu.onLink ? gContextMenu.linkURL : gContextMenu.imageURL || gContextMenu.mediaURL);


Всё! Жизнь удалась!!!
Siberian GRemlin,
Jul 27 2010, 17:38 Delphi, Asm, C, WinAPI, PHP, ...
Блин, ставил по работе на удалённый сайт Joomla - застрелиться. Сама CMS в архиве .tar.gz, но хостер (сюрприз!) не даёт доступ по SSH, а также запускать через PHP exec() / system() чтобы выполнить команду распаковки. В Интернете погуглил - ничего кроме использования двух упомянутых выше команд посоветовать не могут.
Короче, распаковал я Жумлу и стал копировать по FTP на сайт... 2 часа с гаком - un-freaking-believable!
Скорость заливки-то большая, да вот при создании нового файла удалённый сайт почему-то тупил по несколько секунд, а в Жумле этих файлов, как снега зимой.
В общем, в конце копирования я уже озверел и решил написать свою программу, которая бы соединяла файлы в один (один файл быстро заливается) и чтобы этот файл можно было потом на сервере распаковать вызвав через HTTP скрипт на PHP для распаковки.

Формат файла filedump:
DWORD - размер файла (size)
DWORD - размер строки имени файла (nlen)
CHARS - имя и путь файла (nlen байт)
BYTES - содержимое файл (size байт)
Повторить до конца файла.

Маленькое замечание: т.к. надо было ещё и пустые каталоги на всякий случий паковать и создавать на сервере, то с именем файла такое дело - если оно заканчивается на '/' - то это каталог, нужно его создать. Файлы при паковке сортируются, так что ситуации, когда надо распаковать файл, каталога для которого ещё нет, по идее, не должны встречаться.

Опционально в эти скрипты можно добавить сжатие gz (если хостер поддерживает) и дату со временем.

pack.php - пакует в архив filedump всё в текущем каталоге и его подкаталогах.
unpk.php - распаковывает filedump в текущий каталог.

Т.к. скрипты дописал практически одновременно с окончанием копирования - проверить времени не было, но, по идее, должны работать. Кстати, там с правами под иксы может быть косяк - все файлы будут пользователю Apache принадлежать - это можно поковырять и chmod() при распаковке добавить для файлов.

[cut=Код программ]
pack.php
CODE

<?php
  set_time_limit(0);

Function GetFileList($dirpath){
  $dirs = array();
  if(is_dir($dirpath)){
    if($dh = opendir($dirpath)){
      while($file = @readdir($dh)){
        if(($file != '.') && ($file != '..')){
          if((filetype($dirpath.$file) == 'file')){
            $dirs[] = $dirpath.$file;
          }else{
            $dirs[] = $dirpath.$file.'/';
            $dirs = array_merge($dirs, GetFileList($dirpath.$file.'/'));
          }
        }
      }
      closedir($dh);
      natcasesort($dirs);
    }
  }
  return($dirs);
}

//  optional: add filedatetime and compression
//  $tm = filemtime($file); // getfiletime
//  touch($file, $tm);      // setfiletime
//  $file = gzcompress($file, 9);
//  $file = gzdecompress($file);

  @unlink('./filedump');
  $list = GetFileList('./');
  for($i = 0; $i < count($list); $i++){
//    echo $list[$i]."\r\n";
    $fl = fopen('./filedump', 'ab');
    if($fl){
      $name = substr($list[$i], 2);
      $nlen = strlen($name);
      $size = 0;
      $file = '';
      if($name[$nlen-1] != '/'){
        $size = filesize('./'.$name);
        $file = file_get_contents('./'.$name);
      }
      $size = pack('V', $size);
      $nlen = pack('V', $nlen);
      fwrite($fl, $size, 4);
      fwrite($fl, $nlen, 4);
      $size = unpack('V', $size);
      $nlen = unpack('V', $nlen);
      fwrite($fl, $name, $nlen[1]);
      fwrite($fl, $file, $size[1]);
    }
    fclose($fl);
  }

?>




unpk.php
CODE

<?php
  set_time_limit(0);
  $fend = filesize('./filedump');
  $fl = fopen('./filedump', 'rb');
  while(ftell($fl) < $fend){
    $size = 0;
    $nlen = 0;
    $name = '';
    $file = '';

    $size = fread($fl, 4);
    $nlen = fread($fl, 4);
    $size = unpack('V', $size);
    $nlen = unpack('V', $nlen);
    $size = $size[1];
    $nlen = $nlen[1];
    $name = fread($fl, $nlen);
    if($size != 0){
      $file = fread($fl, $size);
    }
    if($name[$nlen-1] == '/'){
      @mkdir('./'.$name, 0777);
    }else{
      @file_put_contents('./'.$name, $file);
    }
  }
  fclose($fl);
?>

[/cut]
Siberian GRemlin,
Jul 21 2010, 16:00 Delphi, Asm, C, WinAPI, PHP, ...
QUOTE(-=CHE@TER=- @ Jul 20 2007, 13:48) [snapback]1101[/snapback]
Xplorer!
RasGetConnectionStatistics - это как раз в точности то, что мне нужно было!
Большое, нет просто ГРОМАДНОЕ спасибо!

Опять всплыл вопрос, только на этот раз хочу получить количество принятых / переданных байт для сетевой карты. RasGetConnectionStatistics() тут уже не помогает.

Сделал программу через GetIfTable, но, почему-то, если не сильно активен, там обычно на полмегабайта меньше трафика, чем отображается по команде "netstat -e". Кто-нибудь знает, в чём прикол?

Добавлено:
А! Всё, понял - "netstat -e" показывает суммарный трафик на адаптере - т.е. сколько пришло и ушло со всех интерфейсов. А т.к. интерфейса два (+loopback), то нужно было тупо трафик суммировать.
Хотя это даже удобно - если не учитывать loopback, то можно получить "чистый трафик", который уходит во внешку.
Siberian GRemlin,
Jul 7 2010, 15:17 !Вирусы!
Ну, у знакомых стоит на лицензионной 7-ке лицензионный же кашпировский. Тоже пару раз BSoD получали. Просили разобраться, я грешным делом думал что это 7-ка сырая, все обновления поставил - хрен там. Теперь, кажется, я понял что к чему. (*улыбается*)


Я хочу тоже выплеснуть тут немного гнева, но по поводу Dr.Web.
Короче, попользовался пару месяцев этим т.н. "антивирусом" - количество негативных эмоций просто хлещет через край.

Итак, финальный список.

Минусы:
1) Ублюдский установщик, который требует планировщик, хотя антивирусу эта служба для работы вообще никуда не упёрлась.
2) Ублюдская система сканирования файлов, когда при открытии даже текстовых файлов система впадает на полминуты в ступор не отвечая ни на что.
3) Ублюдский эврестический анализ - я неделю ругался со службой поддержи, потому что их антивирус убивал .EXE файл программы на Delphi после того как я применял StripReloc (там НИЧЕГО не было, кроме CreateFile и FileMapping, причём я им даже исходные коды выслал!). Они это поправили - затем (та же программа!!!) стала удаляться если при компиляции после StripReloc ещё и UPX сжать! Опять пришлось ругаться - внесли в исключения, но недавно убили ещё одну мою старую программу на Delphi, которую я писал для скачивания сайтов. Ругаться и писать в службу поддержки я перестал - это, как я понял, бесполезно, т.к. сам по себе антивирус просто ущербный.
4) Ублюдская система карантина - в корне того диска, где найден вирус создаётся скрытый (а в случае NTFS ещё и без прав доступа - не удалишь!) каталог "Drweb Quarantine", куда складируются вирусы. Причём каталог создаётся даже если вирус был удалён как неизлечимый! Чтобы снести этот каталог приходится лезть в свойства и делать себя владельцем. А если ваш знакомый притащил Flash накопитель с вирусом? Не вопрос! Он теперь будет наслаждаться на своей Flash ещё и скрытым каталогом "Drweb Quarantine", несмотря на то, что у него дома вообще другой антивирус стоит - программистам из Dr.Web на это плевать, как и на пользователей. У всех нормальных антивирусов есть каталог "Quarantine Files", где-нибудь в %APPDATA%, но Dr.Web - это русский антивирус - бессмысленный, безжалостный и беспощадный!!!
5) ТОРМОЗНАЯ (да-да! у Dr.Web именно ТОРМОЗНАЯ) система проверки файлов - не поверите, когда писал распаковщик для Zanzarah: The Hidden Portal (в последних обновлениях на сайте есть) - я охренел дожидаться пока архив распакуется, но как только отключил SpiDer Guard - файлы распаковались просто с бешеной скоростью! Та же самая вещь с установкой и удалением программ - переустановка Apache, например, занимает с включённым антивирусом просто дикое количество времени. Нахрен такой антивирус, который постоянно приходится выключать?! Вот, несмотря на то что Symantec был прожорлив и тормозил сильно при загрузке, скорость распаковки файлов с ним не сильно снижалась, при этом вирусы он не пропускал. А ведь я перешёл на Dr.Web именно из-за усиленно распространяемых непонятно кем (отделом по пиару?..) "слухов" про его "быстродействие"!

И, кстати, у меня лиц.версия - мне знакомые люди ключ подарили, с намёком, что Dr.Web "быстрый", мол, тебе пригодится с твоим компьютером...

Плюсы:
1) Не удаляет keygen и crack... хотя на фоне того, что он удаляет мои программы, где никогда вирусов не было - это жиденький плюс.
2) Грузится и обновляется немного быстрее, чем Symantec...

Короче, я сейчас присматриваюсь к другим антивирусам. Вероятность того что я буду переходить с этого ужаса летящего на крыльях ночи под названием Dr.Web равна 500%.

И, кстати, почитал форум Dr.Web - там им пользователи много во что носом тыкали, чтобы исправили. Думаете хотя бы зачесались? Хрен там - только отшучиваются в ответ. Конструктивный диалог невозможен - желаю растерять им всю свою аудиторию и разориться.
Siberian GRemlin,
Jun 19 2010, 12:03 Обмен любезностями
QUOTE(Axsis @ Jun 19 2010, 11:16) [snapback]2940[/snapback]
Ну почему же? Выпуская по одной игре серии в год, раз в пятилетку получается весьма достойный экземпляр. Но не факт, что выпускай они по одной игре в раз пять лет, получалось бы каждый раз выпускать хит. Всё познаётся в сравнении wink.gif
Это точно. Ладно, поживём - увидим.

QUOTE(Axsis @ Jun 19 2010, 11:16) [snapback]2940[/snapback]
PS: со 2 по 14 июня принимал участие с бета-тестировании NFS:World - тоже довольно интересная штука, помимо гонок с онлайновыми соперниками можно и от копов поудирать. Карта довольно большая, состоит из 3 частей (все соединены между собой, конечно) - первая часть - полностью карта из most wanted, вторая - из carbon, а третья - новая. Вроде как и сэкономили, а вроде как и ничего плохого в этом нет - знакомые трассы и знаешь где можно срезать путь или избавиться от погони smile.gif
Это Online-версия NFS что-ли? Massively multiplayer online racing simulator? Хе-хе.


Кстати, узнал случайно про вот такую игру - эдакая смесь из Portal и Mirror's Edge. Tag_Setup.exe занимает 58,215,165 байт - это кто качать с офсайта будет. Почему-то закачка рвётся, а размер при скачивании сервер не указывает. Посмотрел видео на трубе (осторожно - это прохождение - спойлеры!) захотелось самому попробовать, но обломался - игра требует шейдеры версии 2.0a, а у меня вообще никаких нет...
useretail,
Jun 15 2010, 10:25 Обмен любезностями
EA анонсировала новую часть Need for Speed
Вот интересно, как потом будут различать старую Hot Pursuit и новую?
Особенно это бесит когда ищешь что-нибудь в Интернете - ищешь старую вещь, а тебе только новую лажу с тем же названием поисковик выплёвывает...
P.S. Оружие в NFS... да... Вообще, в выпусках всяких продолжений самое главное - это вовремя остановиться.
Axsis,
Jun 1 2010, 17:46 Delphi, Asm, C, WinAPI, PHP, ...
Иногда бывает надо при распаковке игровых архивов попутно создавать необходимые каталоги.
Например для файла: DATA\TEXTURES\ENVIRONMENT\SKY_01.TGA их нужно создать аж 3 штуки.

Вот небольшие куски кода на Delphi и C для таких вещей.
Обрабатываются обе косые черты.
В обоих случаях идентификатор S не должен являться константой.

CODE
For I:=1 To Length(S) Do
  If ((S[I] = '\') Or (S[I] = '/')) Then
  Begin
    CreateDirectory(PChar(Copy(S, 1, I - 1)), Nil);
    { Delphi понимает только слэш }
    S[I]:='\';
  End;


CODE
char *s;
...
s = filenamepath;
while(*s){
  if((*s == '\\') || (*s == '/')){
    *s = 0;
    mkdir(filenamepath);
    /* а C понимает только такой */
    *s = '/';
  }
  s++;
}
Siberian GRemlin,
May 3 2010, 10:08 Замена системных модулей для Delphi
Вопрос - чем можно воспользоваться в Delphi для увеличения длины строки до нужного размера?
Если писать так:
CODE
SetLength(S, Len);

То при использовании DCC32HACK в готовый код пихается куча всякого барохла, в частности строчка имени программы указанная в:
CODE
Program PrgName;

Т.е. в исполняемый файл зачем-то пихается строчка "PRGNAME", если не писать "Program...", то на месте "PRGNAME" будет слово "PROGRAM". Зачем это делается - знают только в фирме Borland.
Если использовать:
CODE
S:=#32;
While Length(S) < Len Do S:=S + S[1];

То это долго. Можно конечно и так:
CODE
S:=#32;
While Length(S) < Len Do S:=S + S;
S:=Copy(S, 1, Len);

Но при большом Len это будет занимать в два раза больше чем надо памяти на финальном шаге - как следствие жуткие тормоза при реаллоцировании.
Есть какие-нибудь ещё способы удобные? Для тех случаев, когда нужна именно строка - когда нужен просто буфер, то там и GetMem()'ом обойтись можно...

Или тогда вопрос к Grom PE ты можешь в DCC32HACK как-нибудь перехватить работу с SetLength()?..
Grom PE,
Apr 22 2010, 10:05 Delphi, Asm, C, WinAPI, PHP, ...
Чтобы долго не писать чего да как - приведу [cut=лог чата]
QUOTE

******: можно тогда тебя отвлеч глупым вопросом?
-=CHE@TER=-: Давай.
******: есть девайс. типа ноут.
******: есть оборудование - типа жпс приёмник.
******: оно типа встроено и его не видно
******: покуда не будет запущена утилита и не поставлена галочка
******: вопрос
-=CHE@TER=-: Даже Everest не видит? А в BIOS девайс этот включён?
-=CHE@TER=-: А, понял.
******: можно ли как то отследить что делает эта утилита
******: тоесть покуда она не занесёт какой то битик в памяти - девайс не виден даже в эвересте
-=CHE@TER=-: Теоретически возможно всё.
******: а помню на двк была прога... типа оболочки
-=CHE@TER=-: А после закрытия утилиты и выгрузки её из памяти - девайс продолжает работать?
******: и можно было пошагово отслеживать выполнение программы
******: да. продолжает
******: если утилиту запустить повторно - то девайс исчезает :)
-=CHE@TER=-: Возможно она свой драйвер ставит, который после перезагрузки отваливается (так и задумано).
******: неее
******: драйверами не пахнет 100%
-=CHE@TER=-: Дай мне эту тулзу.
-=CHE@TER=-: И скажи чего ты там и где ставишь.
******: ща
******: я кинул
******: жпс активатор написал не знаю кто
******: изначально и этого даж не было
******: DEVICE_SWITCH.EXE поидеи запускается жпс активатором, автоматом передвигает курсор и жмёт применить
******: Enable gsc3f GPS
-=CHE@TER=-: Прикол.
-=CHE@TER=-: Оно у меня не запускается.
******: угу, вначале проверяет есть ли оборудование?
-=CHE@TER=-: Видимо, да.
-=CHE@TER=-: Т.е. оно запускается и тут же выходит.
-=CHE@TER=-: Даже ничего не сообщает.
******: поидеи папка тулс должна находиться в корне диска ц
-=CHE@TER=-: А какая разница?
******: покрайней мере когда она там... мне сообщает на обычном компе что девайс не может быть выключен
-=CHE@TER=-: У-у-у... Оно тут через DeviceIoControl работает...
******: переведи на земной язык :)
-=CHE@TER=-: Это проще будет документацию по устройству найти и написать свою программу, чем разбираться в исходном коде.
-=CHE@TER=-: Тут сильно замороченный алгоритм её включения / выключения.
-=CHE@TER=-: Нужна спецификация: в какой порт чего пихать, что должно прийти, что означает и т.д.
-=CHE@TER=-: http://mikhail.krivyy.com/2004/07/28/asus-l3c-led/
-=CHE@TER=-: Вот например - человек включает и выключает лампочку светодиода.
-=CHE@TER=-: Нужно тоже самое, но для твоего GPS.
-=CHE@TER=-: Ща тогда тебе ломанный файл дам - просто сграблю значения.
-=CHE@TER=-: Лови.
-=CHE@TER=-: Скопируй к себе на ноут и запусти, затем дай содержимое файла KERNEL.LOG, который появится.
-=CHE@TER=-: После запуска нажми, чтобы оно разрешило твоё устройство.
******: угу
******: готово
DeviceIoControl(232,2237444,INBUFF:1 1381453892 0 0 0 ,20,OUTBUFF768,)
DeviceIoControl(232,2237444,INBUFF:2 1447380049 1 8 1237008 ,20,OUTBUFF768,)
CBFARR(0 4 2)
DeviceIoControl(232,2237444,INBUFF:2 1313817683 1 8 1240192 ,20,OUTBUFF768,)
CBFARR(0 4 2)
DeviceIoControl(232,2237444,INBUFF:1 1381453892 0 0 0 ,20,OUTBUFF768,)
DeviceIoControl(232,2237444,INBUFF:2 1447380049 1 8 1237008 ,20,OUTBUFF768,)
CBFARR(0 4 2)
DeviceIoControl(232,2237444,INBUFF:2 1179599955 1 8 1240192 ,20,OUTBUFF768,)
CBFARR(0 4 2)
-=CHE@TER=-: Я сделал прогу.
******: что где тестить*?
-=CHE@TER=-: Лови gsc3fgps.exe
-=CHE@TER=-: Если просто запустишь - то включит, если с каким-либо параметром (любым) - то выключит.
******: ура! работает :)
-=CHE@TER=-: Сунь тогда прогу в автозагрузку - будет сразу при включении компьютера подключать твой GPS.
[/cut]

Код программы:
CODE
program gsc3fgps;
{$IFNDEF DCC32HACK}uses Windows;{$ENDIF}
// http://mikhail.krivyy.com/2004/07/28/asus-l3c-led/
// http://mikhail.krivyy.com/wp/wp-content/uploads/2006/10/asusled.cpp
// http://www.scintilla.utwente.nl/~timl/devicepower/v1.1/devicepower.c

const
  ATKACPI_IOCTL_CODE = $222404;
  // ioctl command codes
  DPWR = $52575044; // Device Power list
  QDEV = $56454451; // Query Device
  SDON = $4E4F4453; // Set Device On
  SDOF = $464F4453; // Set Device Off

type
  ioctl_arg = packed record
        dummy: word;
    arg_bytes: word;
        value: longword;
  end;
  pioctl_arg = ^ioctl_arg;

  ioctl_cmd = packed record
        ctype: longword;
     cmd_code: longword;
      has_arg: longword;
    arg_bytes: longword;
          arg: pioctl_arg;
  end;

function CtrlACPI(ATKACPIhandle: THandle; code, hasArg, arg: longword): longbool;
var
  iarg: ioctl_arg;
  icmd: ioctl_cmd;
  bout: longword;
  buff: array[0..191] of longword;
begin
  bout := 0;

  iarg.dummy := 0;
  iarg.arg_bytes := 4;
  iarg.value := 2;

  icmd.ctype := hasArg;
  icmd.cmd_code := code;
  icmd.has_arg := arg;
  icmd.arg_bytes := 8 * arg;
  icmd.arg := pioctl_arg(longword(@iarg) * arg);

  result := DeviceIoControl(ATKACPIhandle, ATKACPI_IOCTL_CODE, @icmd, sizeof(icmd), @buff[0], sizeof(buff), bout, nil);
end;

// enable gsc3f GPS
var ATKACPIhandle: THandle;
begin
  ATKACPIhandle := CreateFile('\\.\ATKACPI', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
  if ATKACPIhandle <> INVALID_HANDLE_VALUE then
  begin
    CtrlACPI(ATKACPIhandle, DPWR, 1, 0);
    CtrlACPI(ATKACPIhandle, QDEV, 2, 1);
    if ParamCount <> 0 then
      CtrlACPI(ATKACPIhandle, SDOF, 2, 1)  // OFF
    else
      CtrlACPI(ATKACPIhandle, SDON, 2, 1); // ON
    CloseHandle(ATKACPIhandle);
  end;
end.
Siberian GRemlin,
Dec 5 2009, 16:36 Delphi, Asm, C, WinAPI, PHP, ...
QUOTE(-=CHE@TER=- @ Jun 25 2009, 04:10) [snapback]2704[/snapback]
Однако! Первая строчка с получением 0 байт у меня работает нормально (XP SP3), а на соседней машине (2003 SP2) появляется BSoD с DRIVER_IRQL_NOT_LESS_OR_EQUAL. При этом сама машина с 2003 работает нормально и BSoD там никогда не было.
Как оказалось BSoD был совсем не там...
Короче, перед CloseSocket(), особенно для UDP-соединений нужно делать shutdown(), желательно с SD_BOTH, иначе на некоторых сетевых картах, драйвера к которым писали криворукие имбецилы, очень быстро забивается буфер и случается BSoD (т.к. приложение уже не забирает пакеты из буфера и вообще закрыло сокет, а тупой драйвер всё ещё продолжает их туда пихать).
На сетевых картах, драйвера к которым писали вменяемые люди, при таком раскладе буфер самоочищается и сокет самозакрывается - т.е. сделана жёсткая проверка "на дурака".
Siberian GRemlin,
Nov 4 2009, 14:42 Hitman 2 и 3
У меня ни той, ни другой игры нет, так что помочь не смогу.
А сколько каждая из них в архиве занимает?
Я просто не знаю где могут заголовки храниться, но, если в отдельном файле лежат, то он может быть, к примеру, зашифрован.
Ещё, маловероятно, но всё же, они могут быть прямо в .EXE файле игры. Тупо, конечно, но вот, скажем, Silent Hill 2, шрифты свои в sh2pc.exe хранит как массив байт.
useretail,
Oct 8 2009, 15:35 Обмен любезностями
Обновил свой сайт сегодня - мне товарищ из далёкой Бразилии (!) помог дожать патч ко второму турку, чтобы музыка под Vista / Seven тоже нормально работала. Плюс туда же добавил патч для мультипроцессорных систем. Ко всему этому доступны исходные коды. Все подробности на сайте.
Siberian GRemlin,
Sep 18 2009, 18:39 Dreamcast Half-Life [.WAV]
CODE
@echo off
md new
for %%a in ("*.wav") do ffmpeg.exe -i "%%a" "new\%%a.wav"

Озвучка страшная, кстати. Чем тебя от 7-го волка не устроила?
Siberian GRemlin,
Sep 18 2009, 15:18 CheckSum
Спасибо большое! Всё, выложил на сайт.
Капитан Фокин,
Sep 2 2009, 15:29 Новости сайта
У нас начиная с утилит для "Zone Raiders" тащился мрачный баг с .TGA картинками:
CODE
TGAHeader.ImageDescriptor:=$30;

Хотя должно было быть $20. Из-за чего все картинки были зеркально отражены при открытии в Photoshop (или в любой другой программе, которая правильно читала .TGA). Сейчас исправил (и уменьшил размер заодно) у программ к которым были исходные коды.
QUOTE
Bit 4 - Left-to-Right orientation 0=L/R 1=R/L
Bit 5 - Top/Bottom orientation 0=B/T 1=T/B
TGA Header
jTommy, Siberian GRemlin,
Sep 2 2009, 12:30 Runaway 2: The Dream of the Turtle
Так, разобрался при помощи полной версии игры с этим флагом. Если 0, то распаковываемый файл .WAV, иначе - .MP3. Причём во всей игре есть только один не пустой (больше 44 байт) .WAV файл и находится он вторым по счёту в RESOURCE.M05, остальные все - пустышки.
Кстати, у некоторых распакованных .MP3 даже ID3v1 прописан. Например, как я понял (игру не ставил) распакованный файл RAM01_11.MP3 с тегом "MASTER - Musica Gina Cae" - это заглавная тема игры.
Кстати, там не только исполнитель прописан, но и остальные теги:

Title: Musica Gina Cae
Artist: MASTER
Album: R2
Year: 2006
Genre: Blues

Утилиты добавил на сайт.

QUOTE
MASTER - Musica Gina Cae (Extracted name: RAM01_11.MP3)

You ready for this?
Runaway 2!

There comes a time in which
You have to follow your dreams
Because such is life. Here we go!

I don't dare
To face what I fear inside and
Break up the chain...
to do this just tonight,
Now my inner me is needing a change
Far from being insane
I will do what pleases me.

"For once in your life be real"
These are the words that it said.
"I long to be free again"
Now I'm waiting for you.
What do you say?

One time

I don't know from where this feeling grows
Am I bound to leave what's between each other?
I don't care 'bout what the world may say.
That's the way it goes and I want to runaway.

And I want...
And I want...
And I want...
And I want to runaway...


QUOTE
MASTER - Musica Avion se estrella (Extracted name: RAM01_12.MP3)

Here comes the break down,
I will do what pleases me,
'Cuz this is a brand new life,
This is a (yeah...) brand new life, (comes, which...)
Ready for you what do you say?
(you have to follow what your heart says)

Lost and frustrated,
Divided and hated
This sadness squeezes my soul.
I'll never be that lazy
You may not understand
I may be dumb and crazy but
I won't be normal again.

I don't know from where this feeling grows
Am I bound to leave what's between each other?
I don't care 'bout what the world may say.
That's the way it goes and I want to runaway.

It'll only be me, no time to cry,
I will turn back the hands of time,
But will never give up on my quest,

But will never give up on my quest
Run away, I will go
I don't know
Lost and frustrated,
No more said-goodbyes,
One time 'cuz,
May my soul be strong
This sadness squeezes my soul.
Nevertheless we'll be, (ah ah ah)
Masters at work

I don't know from where this feeling grows
Am I bound to leave what's between each other?
I don't care 'bout what the world may say.
That's the way it goes and I want to runaway.

I wanna go, I will go, no way....
I'll have to run away...
RYK-C...


В ресурсах игры только эти два коротких ремикса оригинальной композиции Runaway.
Полную версию можно послушать на сайте Ryk-C (там же, кстати, и текст песни полный есть).
Siberian GRemlin,
Aug 31 2009, 14:19 Runaway 2: The Dream of the Turtle
В свете написания утилит для первой части решил глянуть и вторую.

QUOTE(Axsis @ Apr 28 2009, 19:36) [snapback]2645[/snapback]
1) Видео (предположительно)
Файлы в папке DATAV, похоже что это BIK'и с зашифрованным заголовком - первые 0x400h байт зашифрованы, а потом "продолжается" какая-то таблица смещений, похожую структуру можно найти в любом BIK файле, только вот как именно шифруется заголовок пока не понятно. На то что там именно BIK косвенно указывают binkw32.dll и строка "uses RAD video" в титрах игры wink.gif
Угу. Ключи для расшифровки лежат в DATAVC00.000, там правда другой формат в отличие от первой части. Да и алгоритм шифрования тоже. Расшифровщик сделал, кстати, даже ничего брутфорсить не пришлось как раньше.

QUOTE(Axsis @ Apr 28 2009, 19:36) [snapback]2645[/snapback]
Структура довольно простая - первые 4 байта количество файлов в архиве, потом идут 9-тибайтовые записи в количестве, равном количеству файлов. Каждая запись - 4 байта смещение, 4 байта размер, 1 байт какой-то флаг, возможно всегда равен 1.
Сами файлы - MP3 и WAV (внутри которых мне попадались всё те же MP3). Здесь звуки, музыка, озвучка. Имён файлов нигде не видно. sad.gif
Я делал только распаковщик музыки (*.M0?) для DEMO-версии (полную пока что не достал), так вот там если флаг равен 0, то вместо .MP3 распаковывается 44-байтный .WAV (пустышка, в размере секции data 4 нуля даже). Я сейчас файлы с этим флагом просто пропускаю. Надо будет потом полную версию глянуть.

Дешифровщик видео и распаковщик музыки сделал. Кто-нибудь хочет на полной версии проверить? Потому что со своей скоростью я ещё только дня через два её докачаю. Как раздобуду полную версию - проверю всё окончательно и добавлю на сайт (частично успел уже распаковать с недокачанного образа файлы и проверить дешифрование видео).
Siberian GRemlin,
Jun 11 2009, 17:54 Authorized
В связи с тем, что я удалил последнюю тему Raf-9600 "Юмор" и общим недопониманием со стороны, то хочу пояснить что да как.
Пусть это будет вроде добавления к правилам.

Итак - проект CTPAX-X ориентирован, в основном, на создание распаковщиков / запаковщиков игровых ресурсов, nocd для игр, переводов, просто помощи товарищам по интересам и другим, около компьютерным темам.

Если нормальный человек хочет почитать новости - он куда идёт? Правильно - на новостной сайт.
Если нормальный человек хочет почитать анекдоты - он куда идёт? Правильно - на анекдотную ленту.
...
Если нормальный человек хочет <что угодно> - он куда идёт? Правильно - на <тематический> сайт.

Меня, например, всегда убивала попытка каких-нибудь крупных сайтов, тематики "Как разводить цветочки дома" создать подфорумы про ПО, компьютерное железо, ядерные реакторы, подводные лодки, "маленьких зелёных человечков" и занятия йогой. Да, бесспорно, удобно, когда ты приходишь каждый день на форум почитать про "ромашку обыкновенную", заодно ещё и узнать новости про последние достижения в области компьютерного железа. Однако, на сайте, у которого компьютерное железо это основная тематика можно узнать гораздо больше, подробней и актуальней.
Не заменит любимый проект про "цветочки" весь остальной Интернет. Так же, как его не заменит и проект CTPAX-X. У него есть своя тематика и её нужно придерживаться, чтобы не превратиться в болото.

Я вовсе не запрещаю создавать новые темы. Однако, я хочу, чтобы здесь не появлялись темы, особенно туалетно-сортирного юмора про то "кто с кем, как, каким образом и местом" - если есть любители копаться в чужих тараканах и грязном нижнем белье - сделайте одолжение и избавьте от своего пристрастия этот проект.

!No pasaran! Здесь таких тем не будет.
Так что, пожалуйста, не надо заливать ещё и этот проект всяким шлаком.


Раз уж взялся писать, то замечу ещё пару вещей:
- за постоянные злостные оскорбления пользователей (неважно кем, неважно кого) - гарантия бана 100%
- мата тут тоже не надо - если сильно хочется выразить эмоции заменяйте часть символов на * - вы не одни в Интернете
- темы о религии, политике, сексе и прочей мирской суете тут тоже не нужны совсем - у каждого своя точка зрения, так что спорить, ругаться и портить отношения я ни с кем не собираюсь и другим делать это здесь не дам - Интернет большой, найдите место, где всё это любят и уважают и добро туда пожаловать


Я вовсе не обвиняю кого-либо из участников команды или пользователей форума. Я высказываю свою точку зрения и то как я вижу этот проект. Если вы не согласны - вы вольны отписаться здесь и высказать своё мнение. Впрочем, я подозреваю, что это всё мелочи и многие меня поддержат.
Siberian GRemlin, xkL0#J,
Apr 26 2009, 11:14 Баги сайта и форума
Сегодня форум очень мрачно накрылся тазом. При попытке зайти вылазило сообщение, что не найден файл:

QUOTE
IPB WARNING [2] require_once(/forum/cache/skin_cache/cacheid_/skin_global.php) [function.require-once]: failed to open stream: No such file or directory (Line: 1389 of /sources/ipsclass.php)

Х.з. из-за чего, но утилита FSY21_Skin_Cache_Rebuilder_v1.1.zip помогла.
Siberian GRemlin,
Apr 24 2009, 17:59 Обмен любезностями
!!!Ахтунг!!!
Компания Yahoo! до конца текущего года закроет сервис GeoCities, который предоставляет пользователям бесплатный хостинг.

Порылся в своих ссылках - вот что нашёл:
- Официальный сайт GFE (Game File Explorer) (с 2002 года заброшен)

- Resco Software - TLJ Viewer (программа для работы с ресурсными файлами квеста The Longest Journey)

- ATX - Traspasser hack та самая программа, про которую уже писал, для улучшения графики - надо будет написать автору и спросить куда он собирается переезжать.

- The Homepage of Andres James - сайт единственно существующего редактора уровней к Trespasser (с 2000 года не обновляется).

Пока что, сходу, больше ничего вспомнить не могу - кидайте, у кого есть, ссылки с описаниями, чтобы можно было унести пока оно ещё доступно.


Добавлено:
Засада полная - пытаюсь некоторые файлы скачать, а они через раз доступны, то страничка открывается, то вот такое:
403 Sorry, Service Temporarily Unavailable.
Siberian GRemlin,
Apr 9 2009, 05:39 No-CD for NFS 2 SE (patch)
QUOTE(Raf-9600 @ Apr 8 2009, 19:17) [snapback]2612[/snapback]
Ты меня провоцируешь на лицемерие. Чтобы я тебя обманул. Потомучто сечас у меня нет причин относиться к Гремлину лучше. Да, я согласен, возможно он полезен, он русифицировал всю серию C&C, любителем которой я являюсь, он помогает тебе. Но мое отношение к нему сложилось от его человеческих качеств, иза его жадности, агрессивности, неотзывчивости. Если ему нужно чтобы отношение к нему было лучше, тогда пусть избавляеться от своих недостатков, если нет - мириться с любым мнением людей о себе.
Ладно, есть у тебя своя правда...
Но:
Во-первых, это мне не нравится (а не кто-то там меня попросил - если что), что ты оскарбляешь других участников команды.
Во-вторых, "жадность, агрессивность, неотзывчивость" - всё совершенно мимо кассы. Судить о человеке только по какому-то одному, вырванному из контекста, случаю - нельзя. Я довольно хорошо знаю всех участников команды, а его аж с начала 2005 года как минимум, так что могу судить о ком бы то ни было более объективно чем ты.
В-третьих, последний раз убедительно прошу не оскарблять его или кого-нибудь другого.
Между прочим в теме про OGG он спросил нужна ли тебе помощь (это не смотря на то, что ты про него здесь статью поместил), а ты ему в ответ хамить начал.
Если что-то не устраивает - просто промолчи или вежливо откажись. Переходить на личности не стоит.
Ладно, я не требую от тебя каких-то извинений или лицемерия - твоё право относиться к кому-нибудь так как ты считаешь нужным.
Но я последний, китайский, раз предупреждаю - что если хамство в адрес других участников будет продолжаться здесь - на мою помощь точно больше можешь не рассчитывать. Хотя бы даже потому что это нарушение п.4 правил форума ("в чужой монастырь со своим уставом не лезут").

Вот nocd - проверяй. Если работает перемещу на сайт. Для работы надо запустить программу с именем файла для исправления или перетащить оригинальный файл на неё - должен будет появиться исправленный: NCD_*.exe
nfs2secd.zip
О результатах отпишись.
Raf-9600,
Apr 6 2009, 18:02 No-CD для Tomb Raider 4. The Last Revelation
Игра как-то странно проверяет диск... вернее потом с ним работает - достаточно просто закрыть процедуру проверки и она магическим образом начинает работать с файлами в текущем каталоге (даже всякие A:\ и C:\script.dat внутрях править не нужно).
QUOTE
xor eax,eax
inc eax
retn

Кстати, наверное будет проще универсальный патч сделать (как для TR1, RE1 и второй Кирандии), чем проверять какое смещение брать по языковым ресурсам.

Для версии 1.0:
QUOTE
Смещение: Было Стало
000739B0: 83 33
000739B1: EC C0
000739B2: 18 40
000739B3: A1 C3


Для версии 1.1 (патч на AG.ru есть):
QUOTE
Смещение: Было Стало
00073C10: 83 33
00073C11: EC C0
00073C12: 18 40
00073C13: A1 C3


Кстати, не ставил игру - просто скопировал следующие файлы на жёсткий диск и вытащил CD:
QUOTE
[audio]
[Data]
[FMV]
tomb4.exe
SCRIPT.DAT
us.dat
binkw32.dll
Readme.txt

Ко всему прочему удалил из каталогов (первые три в списке) дублирующийся binkw32.dll - зачем его в каждый каталог понапихали - непонятно.
И последнее - у меня игра с родным диском работала, но он был второй в системе, а не первый.
Siberian GRemlin,

8 Страниц V « < 4 5 6 7 8 >
Упрощённая версия Сейчас: 7th March 2026 - 18:19