· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ELECTRONICS —› Мобильный тел CDMA и IrDA (вопрос)

. 1 . 2 . 3 . 4 . >>

Посл.отвђт Сообщенiе


Дата: Апр 13, 2004 09:51:44

Люди! Помогите глупцу!
Вопрос скорее всего тупой, но все же... Есть мобильный телефон стандарта CDMA с ИК-портом и есть комп, с девайсом типа Текрам210В (тот, что на Com-порт вешается). Винда видит телефон.

Так вот как бы мне так извратиться и получить данные из этого телефона???? Я точно знаю какие файлы и какая информация (пользовательская) в сабже есть, но я не знаю как до нее добраться :о((

Может кто имеет опыт "сканирования" аналогичных девайсов на наличие данных, кто-то может дровишки писал, может еще что...
Или где можно почитать по теме....???

Спасибо заранее всем!


Дата: Апр 14, 2004 00:18:43

Stenton
кто-то может дровишки писал
Если идея с дровишками вообще реализуема, то эти дровишки должны существовать на сайте производителя или на CD с toolkit (или как его там?), поставляемым вместе с телефоном.

Я бы советовал написать программу для этого телефона (какие языки поддерживаются?) чтоб брала нужные файлы и посылала их через ИК.

ЗЫ: CDMA тут не причём.


Дата: Апр 14, 2004 08:46:19

Quantum
Огромной спасибо, что хоть кто-то откликнулся!!!

Теперь к сабжу... Телефон корейский - Sky IM-7200 (Вот их сайт: и там есть менеджер для этого телефона, но! Первое - он корейский, второе - кривой до зопы. Третье - он сам по себе не работает с телефоном а только через дровишки одного немецкого парня...Jan Kiszka) Вот сайт с дровишками: [url=]http://www.ircomm2k.de/ (по сути это виртуальный СОМ-порт, точнее создает мост СОМ-IrDa).

"Я бы советовал написать программу для этого телефона (какие языки поддерживаются?) чтоб брала нужные файлы и посылала их через ИК." - Вот в том то и дело, что пишу.... По крайней мере пытаюсь... и пока безуспешно :о(

Если бы я знал по как добраться до данных в ентом аппарате - все было бы хоть немного проще.
Да, еще одно - вчера я одной програмкой посмотрел что идет через IrComm в момент подключения тел. к менеджеру, и вот что увидел (лог прилагаю). При этом обмена данными не произошло... он просто не законнектился :о(

Может есть шансы как то соединить сабж с компом?

_576412965__sky.LOG


Дата: Апр 14, 2004 08:49:05

Извиняюсь за мусор... Вот нормальные ссылки:

это сайт производителя тел.: http://www.skteletech.co.kr/customersupport/datamanager/data01.asp

а это сайт кодера дровишек: http://www.ircomm2k.de/


Дата: Апр 14, 2004 09:11:21

Stenton
А что делает тот корейский драйвер? Это для использования телефона в качестве беспроводного модема?

Если бы я знал по как добраться до данных в ентом аппарате - все было бы хоть немного проще.
Данные через порт просто так не увидишь, эти данные должен кто-то послать "из телефона". Поэтому я и советовал узнать на какой платформе программируется девайс (Brew, J2ME) и написать прогу для последующей прошивки телефона.


Дата: Апр 14, 2004 17:35:27

Quantum
А корейский драйвер - это не драйвер, это прога такая, для синхронизации данных в компе и тел.

Да, к стати, у меня был аналогичный телефон, только моделька постарее (IM-6100), так вот к нему была прога, BREW. Я ее дето в сети нарыл. А еще есть прога, GAGIN называется. Так вот через нее я даже видел некоторые папки в старом телефоне, но ничего с ними сделать не мог. Может это и есть ответ на все мои вопросы? :о)

Могу сделать лог попытки соединения через этот BREW-Loader. Сделать?


Дата: Апр 14, 2004 21:44:34

Stenton
Brew - это не прога, а платформа на базе ARM, поддерживаемая многими телефонами на чипсетах от Qualcomm. Если предыдущая модель телефона была Brew-enabled (об этом написано на сайте производителя), то и новая модель теоретически должна поддерживать Brew, хотя...

Вышеупомянутая вами прога скорее всего является частью Brew SDK (название самой проги не помню и SDK у меня установлен на другой машине) и предназначена для установки/удаления программ/обоев/ringtones на телефоне. Данная утилита вполне может Вам помочь, но не обольщайтесь! :-) AFAIK, она не даёт скачать контент с телефонов, которые не являются "test-enabled", а к таковым относятся практически ВСЕ телефоны доступные в розничной продаже.

Так вот через нее я даже видел некоторые папки в старом телефоне, но ничего с ними сделать не мог.
Ага, у меня тоже такое было с одним T720i, который не был "test-enabled".

Сделать?
Если телефон вообще поддерживает Brew, то стоит попробовать и в случае успеха сходить на форум по Brew (url не помню) - там много экспертов по данной теме.


Дата: Апр 15, 2004 18:59:38

Quantum

я сегодня бегал по сети в поисках хоть какого нибудь подтверждения того, что у меня аппарат построен на базе чита от Qualcomm, но так и не нашел :о(

Потом пытался "урвать" Brew SDK с оффсайта, тоже не вышло... Пароль себе получил, но так и не проинсталлировал. Видать слишком много "стен" по дороге ко мне админы поставили или голова уже совсем не варила.

По большому счету я могу выслать на мыльце эту прогу (о которой я говорил - GAGIN), только вот не коннектится у меня через нее тел. к компу :о(( Даже и не знаю что делать...


Дата: Апр 15, 2004 19:15:52

Quantum
у меня еще один вопросик родился, вот листинг:
unit WIrCOMMSocket;

interface

uses
  Windows,
  WinSock,
  WSocket,
  Classes;

const

{ Imports from AF_IRDA.H }

  //: IrDA protocol number
  AF_IRDA = 26;
  PF_IRDA = AF_IRDA;

  SOL_IRLMP            = $00FF;

  IRLMP_ENUMDEVICES    = $00000010;
  IRLMP_IAS_SET        = $00000011;
  IRLMP_IAS_QUERY      = $00000012;
  IRLMP_SEND_PDU_LEN   = $00000013;
  IRLMP_EXCLUSIVE_MODE = $00000014;
  IRLMP_IRLPT_MODE     = $00000015;
  IRLMP_9WIRE_MODE     = $00000016;
  IRLMP_TINYTP_MODE    = $00000017;
  IRLMP_PARAMETERS     = $00000018;
  IRLMP_DISCOVERY_MODE = $00000019;

  IAS_ATTRIB_NO_CLASS  = $00000010;
  IAS_ATTRIB_NO_ATTRIB = $00000000;
  IAS_ATTRIB_INT       = $00000001;
  IAS_ATTRIB_OCTETSEQ  = $00000002;
  IAS_ATTRIB_STR       = $00000003;

  IAS_MAX_USER_STRING  = 256;
  IAS_MAX_OCTET_STRING = 1024;
  IAS_MAX_CLASSNAME    = 64;
  IAS_MAX_ATTRIBNAME   = 256;

type
  //:IrDA device ID. Should be treated as four characters, not as PChar.
  TIrdaDeviceID = array [1..4] of char;

  //:Socket-level IrDA device 'address' descriptor.
  TIrdaSockAddr = packed record
    irdaAddressFamily: u_short;
    irdaDeviceID     : TIrdaDeviceID;
    irdaServiceName  : array [0..24] of char;
  end; { TIrdaSockAddr }

  //:Information on one IrDA device.
  TIrdaDeviceInfo = packed record
    irdaDeviceID    : TIrdaDeviceID;
    irdaDeviceName  : array [0..21] of char;
    irdaDeviceHints1: byte;
    irdaDeviceHints2: byte;
    irdaCharSet     : byte;
  end; { TIrdaDeviceInfo }
  PIrdaDeviceInfo = ^TIrdaDeviceInfo;

  TIrdaAttribOctetSeq = packed record
    len     : longint;
    octetSeq: array [0..IAS_MAX_OCTET_STRING-1] of byte;
  end; { TIrdaAttribOctetSeq }

  TIrdaAttribUsrStr = packed record
    len    : longint;
    charSet: longint;
    usrStr : array [0..IAS_MAX_USER_STRING] of char;
  end; { TIrdaAttribUsrStr }

  //:IAS query
  TIrdaIASQuery = packed record
    irdaDeviceID  : TIrdaDeviceID;
    irdaClassName : array [0..IAS_MAX_CLASSNAME-1] of char;
    irdaAttribName: array [0..IAS_MAX_ATTRIBNAME-1] of char;
    irdaAttribType: longint;
    case integer of // irdaAttribute
      0: (irdaAttribInt: longint);
      1: (irdaAttribOctetSeq: TIrdaAttribOctetSeq);
      2: (irdaAttribUsrStr: TIrdaAttribUsrStr);
  end; { TIrdaIASQuery }
  PIrdaIASQuery = ^TIrdaIASQuery;

{ WIrCOMMSocket classes }

  {:Information on all connected IrDA devices, returned from
    TWIrCOMMSocket.GetConnectedDevices.
  }
  TIrdaDevicesInfo = class
  private
    idiDeviceList: TList; 
  protected
    procedure AddDeviceInfo(di: TIrdaDeviceInfo); virtual;
    function  GetDeviceInfo(index: integer): TIrdaDeviceInfo; virtual;
  public
    constructor Create;
    destructor  Destroy; override;
    function    Count: integer;
    property    Items[index: integer]: TIrdaDeviceInfo read GetDeviceInfo; default;
  end; { TIrdaDevicesInfo }

  {:IrCOMM over WinSock - currently only supports client side in 9 Wire mode
    (because Windows 2000 supports 9 Wire mode only).
  }
  TWIrCOMMSocket = class(TCustomSyncWSocket)
  protected
    procedure AssignDefaultValue; override;
    function  InitializeSocket: boolean; virtual;
    function  Set9WireMode: boolean; virtual;
  public
    irDeviceID: TIrdaDeviceID;
    procedure Connect; override;
    function  GetConnectedDevices: TIrdaDevicesInfo;
    property Handle;
    property HSocket;
    property BufSize;
    property Text;
    property AllSent;
    property OnDisplay;
    property DeviceID: TIrdaDeviceID read irDeviceID write irDeviceID;
  published
    property State;
    property ReadCount;
    property RcvdCount;
    property LastError;
    property MultiThreaded;
    property ComponentOptions;
    property OnDataAvailable;
    property OnDataSent;
    property OnSendData;
    property OnSessionClosed;
    property OnSessionAvailable;
    property OnSessionConnected;
    property OnChangeState;
    property OnLineTooLong;
    property OnError;
    property OnBgException;
    property FlushTimeout;
    property SendFlags;
    property LingerOnOff;
    property LingerTimeout;
  end; { TWIrCOMMSocket }

{IrDA helper functions}
  function IrdaIDToString(id: TIrdaDeviceID): string;
  function StringToIrDAID(id: string): TIrdaDeviceID;

{Component registration}
  procedure Register;
  
implementation

uses
  SysUtils;

  {:Component registration.
  }
  procedure Register;
  begin
    RegisterComponents('FPiette', [TWIrCOMMSocket]);
  end; { Register }
  
  {:Converts IrDA ID to textual representation.
  }
  function IrdaIDToString(id: TIrdaDeviceID): string;

    function GetLastNonzero: integer;
    var
      iCh: integer;
    begin
      Result := Low(id)-1;
      for iCh := High(id) downto Low(id) do begin
        if id[iCh] <> #0 then begin
          Result := iCh;
          break;
        end;
      end; //for
    end; { GetLastNonzero }

  var
    hiCh: integer;
    iCh : integer;

  begin { IrdaIDToString }
    Result := '';
    hiCh := GetLastNonzero;
    for iCh := Low(id) to hiCh do begin
      if id[iCh] in ([#33..#126]-['#']) then
        Result := Result + id[iCh]
      else
        Result := Result + '#' + Format('%.3d',[Ord(id[iCh])]);
    end; //for
  end; { IrdaIDToString }

  {:Converts textual representation of IrDA ID back to TIrdaDeviceID.
  }
  function StringToIrDAID(id: string): TIrdaDeviceID;

    function ExtractChar: char;
    begin
      if id = '' then
        Result := #0
      else if  id[1] <> '#' then begin
        Result := id[1];
        Delete(id,1,1);
      end
      else begin
        Result := Chr(StrToIntDef(Copy(id,2,3),0));
        Delete(id,1,4);
      end;
    end; { ExtractChar }

  var
    iCh: integer;

  begin { StringToIrDAID }
    for iCh := Low(TIrdaDeviceID) to High(TIrdaDeviceID) do
      Result[iCh] := ExtractChar;
  end; { StringToIrDAID }

{ TIrdaDevicesInfo }

type
  //:Wrapper for IrDA device info record.
  TIrdaDeviceWrapper = class
    idwInfo: TIrdaDeviceInfo;
  end; { TIrdaDeviceWrapper }

{:Adds device info to the list.
}
procedure TIrdaDevicesInfo.AddDeviceInfo(di: TIrdaDeviceInfo);
begin
  idiDeviceList.Add(TIrdaDeviceWrapper.Create);
  TIrdaDeviceWrapper(idiDeviceList[idiDeviceList.Count-1]).idwInfo := di;
end; { TIrdaDevicesInfo.AddDeviceInfo }

{:Returns number of devices in list.
}
function TIrdaDevicesInfo.Count: integer;
begin
  Result := idiDeviceList.Count;
end; { TIrdaDevicesInfo.Count }

{:TIrdaDeviceInfo constructor. Creates internal storage.
}
constructor TIrdaDevicesInfo.Create;
begin
  inherited Create;
  idiDeviceList := TList.Create;
end; { TIrdaDevicesInfo.Create }

{:TIrdaDeviceInfo destructor. Cleanup.
}
destructor TIrdaDevicesInfo.Destroy;
var
  iDev: integer;
begin
  for iDev := 0 to idiDeviceList.Count-1 do begin
    TIrdaDeviceWrapper(idiDeviceList[iDev]).Free;
    idiDeviceList[iDev] := nil;
  end;
  idiDeviceList.Free;
  inherited Destroy;
end; { TIrdaDevicesInfo.Destroy }

{:Returns index-th device info.
}
function TIrdaDevicesInfo.GetDeviceInfo(index: integer): TIrdaDeviceInfo;
begin
  Result := TIrdaDeviceWrapper(idiDeviceList[index]).idwInfo;
end; { TIrdaDevicesInfo.GetDeviceInfo }

{ TWIrCOMMSocket }

{:Assigns default socket values for IrDA communication.
}
procedure TWIrCOMMSocket.AssignDefaultValue;
begin
  inherited AssignDefaultValue;
  FAddrFormat := PF_IRDA;
end; { TWIrCOMMSocket.AssignDefaultValue }

{:Connects to IrCOMM device.
}
procedure TWIrCommSocket.Connect;
var
  iStatus: integer;
  sin    : TIrdaSockAddr;
begin
  if (FHSocket <> INVALID_SOCKET) and (FState <> wsClosed) then begin
    RaiseException('Connect: Socket already in use');
    Exit;
  end;
  if not InitializeSocket then
    Exit;
  sin.irdaAddressFamily := AF_IRDA;
  sin.irdaDeviceID      := DeviceID;
  sin.irdaServiceName   := 'IrDA:IrCOMM';
  iStatus := WSocket_connect(FHSocket, TSockAddr((@sin)^), sizeof(sin));
  if iStatus = 0 then
    ChangeState(wsConnected)
  else begin
    iStatus := WSocket_WSAGetLastError;
    if iStatus = WSAEWOULDBLOCK then
      ChangeState(wsConnecting)
    else begin
      SocketError('Connect');
      Exit;
    end;
  end;
end; { TWIrCommSocket.Connect }

{:Returns list of connected IrDA devices. List is created inside this routine
  and must be destroyed by the caller.
  Mostly copied from MSDN (IrDA: Background and Overview;
  http://msdn.microsoft.com/library/backgrnd/html/irdawp.htm).

}
function TWIrCOMMSocket.GetConnectedDevices: TIrdaDevicesInfo;
// TODO 2 -oPrimoz Gabrijelcic: Implement lazy discovery (http://www.cswl.com/cswl/whiteppr/white/infrared.html)
const
  IAS_QUERY_ATTRIB_MAX_LEN = 32;
var
  IASQueryBuf: PIrdaIASQuery;
  IASQueryLen: integer;

  {:Checks if device supports 9 Wire protocol.
    @param   dev IrDA device.
    @returns True if device supports 9 Wire protocol.
  }
  function Supports9Wire(dev: PIrdaDeviceInfo): boolean;
  var
    PI, PL, PV: integer;
  begin
    Result := false;
    IASQueryBuf^.irdaDeviceID   := dev^.irdaDeviceID;
    IASQueryBuf^.irdaClassName  := 'IrDA:IrCOMM';
    IASQueryBuf^.irdaAttribName := 'Parameters';
    if WSocket_getsockopt(FHSocket, SOL_IRLMP, IRLMP_IAS_QUERY,
         PChar(IASQueryBuf), IASQueryLen) = SOCKET_ERROR then
    begin
      SocketError('Supports9Wire');
      Exit;
    end;
    if IASQueryBuf^.irdaAttribType <> IAS_ATTRIB_OCTETSEQ then
      Exit; // Peer's IAS database entry for IrCOMM is bad.
    if IASQueryBuf^.irdaAttribOctetSeq.len < 3 then
      Exit; // Peer's IAS database entry for IrCOMM is bad.
    // Search for the PI value 0x00 and check 9 Wire, see IrCOMM spec.
    PI := 0;
    PL := PI + 1;
    PV := PL + 1;
    repeat
      if (IASQueryBuf^.irdaAttribOctetSeq.OctetSeq[PI] = 0) and
         ((IASQueryBuf^.irdaAttribOctetSeq.OctetSeq[PV] AND $04) <> 0) then begin
        Result := true;
        break; //repeat
      end;
      if (PL + IASQueryBuf^.irdaAttribOctetSeq.OctetSeq[PL]) >=
         IASQueryBuf.irdaAttribOctetSeq.Len then
        break; //repeat
      PI := PL + IASQueryBuf.irdaAttribOctetSeq.OctetSeq[PL];
      PL := PI + 1;
      PV := PL + 1;
    until false;
  end; { Supports9Wire }

var
  deviceListBuf  : pointer;
  deviceListLen  : integer;
  iDevice        : integer;
  maxDevices     : integer;
  mustCloseSocket: boolean;
  pDevice        : PIrdaDeviceInfo;

begin { TWIrCOMMSocket.GetConnectedDevices }
  Result := nil;
  if FHSocket = INVALID_SOCKET then begin
    if not InitializeSocket then
      Exit
    else
      mustCloseSocket := true;
  end
  else
    mustCloseSocket := false;
  try
    deviceListBuf := nil;
    maxDevices := 5; // more than 10 irda devices on the same irda receiver? unlikely! but we'll adapt in repeat..until if this happens anyway
    try
      repeat
        maxDevices := 2*maxDevices;
        if assigned(deviceListBuf) then
          FreeMem(deviceListBuf);
        //deviceListBuf^ = record
        //  numDevices: longint
        //  deviceData: array [] of TIrdaDeviceInfo
        deviceListLen := SizeOf(longint)+maxDevices*SizeOf(TIrdaDeviceInfo);
        GetMem(deviceListBuf,deviceListLen);
        longint(deviceListBuf^) := 0;
        if WSocket_getsockopt(FHSocket, SOL_IRLMP, IRLMP_ENUMDEVICES,
             deviceListBuf, deviceListLen) = SOCKET_ERROR then
        begin
          SocketError('Device enumeration failed');
          Exit;
        end;
      until longint(deviceListBuf^) < maxDevices;
      Result := TIrdaDevicesInfo.Create;
      pDevice := PIrdaDeviceInfo(integer(deviceListBuf)+SizeOf(longint));
      //IASQueryBuf is used in all calls to Supports9Wire
      IASQueryLen := SizeOf(TIrdaIASQuery) - 3 + IAS_QUERY_ATTRIB_MAX_LEN;
      IASQueryBuf := AllocMem(IASQueryLen);
      try
        for iDevice := 1 to longint(deviceListBuf^) do begin
          if Supports9Wire(pDevice) then // Report only devices supporting 9 wire mode
            Result.AddDeviceInfo(pDevice^);
          Inc(pDevice);
        end; //for
      finally FreeMem(IASQueryBuf); end;
    finally FreeMem(deviceListBuf); end;
  finally
    if mustCloseSocket then
      Close;
  end;
end; { TWIrCOMMSocket.GetConnectedDevices }

{:Initializes IrDA socket and puts it into 9 Wire mode.
}
function TWIrCOMMSocket.InitializeSocket: boolean;
var
  iStatus: integer;
begin
  Result := false;
  FProto := 0;
  FType  := SOCK_STREAM;
  FProtoResolved := true;
  { Remove any data from the internal output buffer }
  { (should already be empty !)                     }
  DeleteBufferedData;
  FHSocket := WSocket_socket(FAddrFormat, FType, FProto);
  if FHSocket = INVALID_SOCKET then begin
    SocketError('Connect (socket)');
    Exit;
  end;
  ChangeState(wsOpened);
  if not Set9WireMode then
    Exit;
  SetLingerOption;
  FSelectEvent := FD_READ or FD_WRITE or FD_CLOSE or FD_ACCEPT or FD_CONNECT;
  iStatus := WSocket_WSAASyncSelect(FHSocket, Handle, WM_ASYNCSELECT, FSelectEvent);
  if iStatus <> 0 then begin
    SocketError('WSAAsyncSelect');
    Exit;
  end;
  Result := true;
end; { TWIrCOMMSocket.InitializeSocket }

{:Sets 9 Wire mode for DeviceID device.
  @return False on error.
}
function TWIrCOMMSocket.Set9WireMode: boolean;
var
  Enable9WireMode: integer;
begin
  Result := false;
  Enable9WireMode := 1;
  if WSocket_setsockopt(FHSocket, SOL_IRLMP, IRLMP_9WIRE_MODE,
       @Enable9WireMode, SizeOf(integer)) = SOCKET_ERROR then
  begin
    SocketError('Set9WireMode');
    Exit;
  end;
  Result := true;
end; { TWIrCOMMSocket.Set9WireMode }

end.


а как он должен и может ли вообще выглядеть на МASMе??
И еще, там подключен ресурс - Imports from AF_IRDA.H
Если его нет, то и работать соответственно ничего не будет?


Дата: Апр 15, 2004 20:58:12

Stenton
я сегодня бегал по сети в поисках хоть какого нибудь подтверждения того, что у меня аппарат построен на базе чита от Qualcomm, но так и не нашел :о(
Подавляющее большинство аппаратов построено именно на чипах Qualcomm, но это ещё не значит что все они поддерживают Brew.

Потом пытался "урвать" Brew SDK с оффсайта, тоже не вышло...
Старые версии SDK можно скачать для офф-лайн инсталляции.

а как он должен и может ли вообще выглядеть на МASMе?? Прям сразу и на MASM переделать хотите, даже не проверив, что это вообще будет работать?! Сначала скомпилируйте в вижуале под отладку, а потом уже...

Если его нет, то и работать соответственно ничего не будет?
Он есть в Platform SDK.


Дата: Апр 15, 2004 21:21:28

я сегодня бегал по сети в поисках хоть какого нибудь подтверждения того, что у меня аппарат построен на базе чита от Qualcomm, но так и не нашел
Поищите в меню/настройках телефона упоминания Brew, Java и т.д.


Дата: Апр 16, 2004 11:59:06

Quantum
Да, точно! я уже после того как запостил ответ вчерась, сунулся еще раз на оффсайт и таки качнул архивчик Brew SDK.

На счет чипа от Qualcomm - тут дело такое, накопал я прошивку от старенького телефона Скай (5600 вроде). И хотел спросить - можно по прошивке понять какой чип в девайсе и держит ли этот девайс Brew ???

По листингу пока тему опустим... Потому как если будет работать Brew то этот листинг не нужен (мне думается).


Дата: Апр 16, 2004 19:41:22

Stenton
Проще не в прошивке смотреть, а в самом девайсе, т.к. все Brew-enabled телефоны имеют опцию в меню для скачивания Brew-программ через carrier, т.е. оператора сотовой связи. Или у Вас нет "на руках" самого телефона?


Дата: Апр 19, 2004 12:09:05

Quantum
Девайс лежит на столе рядом, только вот чем бы его глянуть, "вид из нутри" ??? Вот в чем вопрос.

А в меню у меня полно всякого хлама (половина на корейском) и определить по ироглифам функцию скачивания Brew -приложения возможности нету, а в английской части меню такой функции не видно. Опять же, учить корейский мне что то лень :о)


Дата: Апр 19, 2004 12:30:57

Stenton

Указанный выше листинг на Delphi перевести на masm32 задача практически не выполнимая, проще написать с нуля ;-)

. 1 . 2 . 3 . 4 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.147