Логин:     Забыли пароль?
 
Пароль:   Регистрация

Форум / Другие темы - Последний код  

Последний код


Страницы: «1» «2»
DNK
DNK
Студент
Сообщения: 242
[Сообщение #1] !!! 18 мая 2011, 16:28
Предлагаю поиграть. Суть игры в следующем.

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

Ну, поехали!

  // Одинаковые шины и сверхцикл
  flag := (OldBus = BusNum) and
      (FrameTS.TS16Selected = (Module.GetFunctionValue(USE_16TS_FUNC) = USE_TS16_ON_VALUE));
  if flag then
    for i := 1 to 31 do
      // КИ не поменялись
      flag := flag and
          not ((FrameTS.SelectedTS[i].State in [ssSelected, ssUsed])
              xor
          (GlobalCross.GetChannelInfo(BusNum * 32 + i, info) and
              (info.BSlot = Module.Board.Slot) and (info.MNum = Module.Num)));
  UserSaveFlag := not flag;
  SetSaveEnable;

"Digital Networked Knight"
min@y™
min@y™
Доктор наук
Сообщения: 400
[Сообщение #2] 18 мая 2011, 16:37
Хрен знает, что делает твой код. Вот мой:
// Чтение и проверка байта состояния на равенство MustBe
bool CheckRBS(int MustBe)
{
  int RBS;
  bool Result;
 
  // запрос РБС и сравнение
  j7chbs(IsaBaseAddress, ModuleOutputAddress, &RBS);
  Result = RBS == MustBe;
 
  // запись в протокол
  if (Debug && Result) Write2Protocol1f("+ РБС = %04o\n", RBS);
  if (!Result)         Write2Protocol1f("- РБС = %04o, ожидалось %04o\n", RBS, MustBe);
 
  return Result;
}
 
// Чтение и проверка ЗО на равенство MustBe
bool CheckZO(bool MustBe)
{
  int RBS;
  bool Result;
 
  // запрос ЗО из РБС и сравнение
  j7chbs(IsaBaseAddress, ModuleOutputAddress, &RBS); // todo: есть ещё функция j4kzo(). Проверить!
  Result = (RBS & 1) == (MustBe & 1);
 
  // запись в протокол
  if (Debug && Result) Write2Protocol1f("+ ЗО = %d\n", RBS & 1);
  if (!Result)         Write2Protocol1f("- ЗО = %d, ожидалось %04o\n", RBS & 1, MustBe & 1);
 
  return Result;
}
 
// Чтение и проверка ИДН
bool CheckIDN(int MustBe)
{
  int IDN;
  bool Result;
 
  // запрос ИДН и сравнение
  j7chreg(IsaBaseAddress,
          ModuleInputAddress,
          ModuleOutputAddress,
          OPCODE_IDN,
          &IDN);
  Result = IDN == MustBe;
 
  // запись в протокол
  if (Debug && Result) Write2Protocol1f("+ ИДН = %04o\n", IDN);
  if (!Result)         Write2Protocol1f("- ИДН = %04o, ожидалось %04o\n", IDN, MustBe);
 
  return Result;
}

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ерёмин А.А.
Ерёмин А.А.
*Администратор
Сообщения: 435
[Сообщение #3] 19 мая 2011, 16:59
min@y™: в твоём коде достаточно комментариев, так что в целом всё более-менее ясно. Разве что аббревиатуры незнакомые: ИДН —искусственная дорожная неровность, РБС — развитие бизнес-систем (по версии Гугла).

  for I := 0 to Faces.GetCount-1 do
  begin
    Face:=ksFaceDefinition(Faces.GetByIndex(I));
    Entity:=ksEntity(Face.GetEntity);
    FaceType:=0;
    if Face.IsPlanar then FaceType:=1;
    if Face.IsCylinder then FaceType:=2;
    if Face.IsCone then FaceType:=3;
    if Face.IsSphere then FaceType:=4;
    if Face.IsTorus then FaceType:=5;
    if Face.IsNurbsSurface then FaceType:=6;
    if Face.IsSwept then FaceType:=7;
    FaceCurvature:=FaceCurvatures[FaceType];
    FacesA:=ksFaceCollection(Face.ConnectedFaceCollection);
    AdjacentFaces:=FacesA.GetCount;
    Memo1.Lines.Add('Поверхность #'+IntToStr(I+1));
    Memo1.Lines.Add('   Название: '+Entity.name);
    Memo1.Lines.Add('   Тип поверхности: '+FaceTypes[FaceType]);
    Memo1.Lines.Add('   Кривизна: '+IntToStr(FaceCurvature));
    Memo1.Lines.Add('   Смежные поверхности: '+IntToStr(AdjacentFaces));
    Inc(FacesCount);
  end;

min@y™
min@y™
Доктор наук
Сообщения: 400
[Сообщение #4] 19 мая 2011, 17:06
В твоём коде у класса (TFace?) очень не хватает свойства FaceType. Если бы оно было, то вместо кучи "if" можно было юзать case.
ИДН - идентификационный номер, РБС - регистр байта состояния.
// Чтение регистров 0073...0176 без КР одной посылкой с инкрементом адреса
// и проверка их содержимого на равенство MustBe.
bool Check68Bytes(UCHAR MustBe, int CheckNumber)
{
  UCHAR Buffer[68];
  int Index, Result = true;
 
  // Принимаю буфер
  j7chdmks(IsaBaseAddress,
           ModuleInputAddress,
           ModuleOutputAddress,
           0073,
           Buffer,
           sizeof(Buffer));
 
  // Проверяю буфер
  for (Index = 0; Index != sizeof(Buffer); Index++)
    if (Buffer[Index] != MustBe)
    {
      Result = false;
      break;
    }
 
  // Вывожу результаты в протокол
  if (Debug && Result) Write2Protocol1f("+ ЭМ1[0073...0176] ---> %04o (проверка %d)\n", MustBe, CheckNumber);
  if (!Result)
  {
    Write2Protocol1f("\n! ЭМ1[0073...0176] ---> (проверка %d) приняты неверные данные:\n", CheckNumber);
    for (Index = 0; Index != sizeof(Buffer); Index++)
      if (Buffer[Index] != MustBe)
        Write2Protocol1f("- ЭМ1[%04o] ---> %04o, ожидалось %04o\n", Index + 0073, Buffer[Index], MustBe);
  }
 
  return Result;
}

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ерёмин А.А.
Ерёмин А.А.
*Администратор
Сообщения: 435
[Сообщение #5] 19 мая 2011, 17:17

Цитата (min@y™):

В твоём коде у класса (TFace?) очень не хватает свойства FaceType. Если бы оно было, то вместо кучи "if" можно было юзать case.

К сожалению, он не мой, поэтому и такие извороты :(

А твой код явно из той же оперы программы, даже и не знаю, что комментировать :-)

А я сегодня ещё ничего не написал, кроме
<?php
header('Location: /');
?>
Уж простите :-)

mirt.steelwater
mirt.steelwater
Посетитель
Сообщения: 17
[Сообщение #6] 2 июня 2011, 13:47
бескоечный цикл страницы
ложет сервер при неправильной конфигурации
procedure DecryptBlowFishCBC (var aKey;
                              const aKeySize: WORD;
                              const anInput: TStream;
                              out anOutput: TStream;
                              const aBlockSize: LongWord = 16);
var
    ctx          : TBlowFishCtx;
    IV           : TBlowFish64Block;
    ErrorCode    : Integer;
    Buffer       : PChar;
    InputBuffer  : PChar;
    OutputBuffer : PChar;
    L            : LongWord;
begin
    ErrorCode := 0;
    try
        { обнуляем вектор инициализации }
        IV := NULL_BLOWFISH_64_BLOCK;
        { инициализируем контекст }
        ErrorCode := BF_CBC_Init (aKey,aKeySize,IV,ctx);
        if ( ErrorCode <> 0 ) then
            raise Exception.CreateFmt ('%d',[ErrorCode]);
        with anInput do
        try
            anInput.Position := 0;
            anOutput.Position := 0;
            { читаем вектор инициализации и обновляем контекст }
            try
                Buffer := AllocMem (32+1);
                if ( Read (Buffer^,32) > 0 ) then
                begin
                    IV := HexToBlowFishIV ( StrPas (Buffer) );
                    ErrorCode := BF_CBC_Init (aKey,aKeySize,IV,ctx);
                    if ( ErrorCode <> 0 ) then
                        raise Exception.CreateFmt ('%d',[ErrorCode]);
                end;
            finally
                Dispose (Buffer);
                Buffer := NIL;
            end;
            { расшифровка }
            L := aBlockSize;
            InputBuffer := AllocMem (L+1);
            OutputBuffer := AllocMem (L+1);
            while ( Position < Size ) do
            begin
                if ( (Size - Position) < aBlockSize ) then
                begin
                    { очищаем буфер для чтения
                      в случае, если он не будет перезаписан полностью }
                    Dispose (InputBuffer);
                    InputBuffer := NIL;
                    InputBuffer := AllocMem (L+1);
                end;
                if ( Read (InputBuffer^,L) > 0 ) then
                begin
                    ErrorCode := BF_CBC_Decrypt (InputBuffer,OutputBuffer,aBlockSize,ctx);
                    if ( ErrorCode <> 0 ) then
                        raise Exception.CreateFmt ('%d',[ErrorCode]);
                    anOutput.WriteBuffer (OutputBuffer^,L);
                end;
            end;
        finally
            Dispose (InputBuffer);
            InputBuffer := NIL;
            Dispose (OutputBuffer);
            OutputBuffer := NIL;
 
            IV := NULL_BLOWFISH_64_BLOCK;
            BF_CBC_Reset (IV,ctx);
        end;
    except on E: Exception do
        raise Exception.CreateFmt ('%s: %s',
                                   [ Format (ERR_BLOWFISH_CBC_DECRYPT,[aKeySize,BLOWFISH_VERSION]), E.Message ]);
    end;
end;

Ⓐ свобода сопротивление солидарность
DNK
DNK
Студент
Сообщения: 242
[Сообщение #7] 2 июня 2011, 14:59
Заставило задуматься о назначении директивы out и ее отличии от var. Но никаких реальных данных, кроме древних преданий не нашел. Сработал тестовый пример, чтобы посмотреть как она работает.
program Project2;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
var x: integer;
 
procedure proc(out y: integer);
begin
  writeln('y=', y);
  y := 200;
  writeln('y=', y);
end;
 
begin
  x := 100;
  writeln('x=', x);
  proc(x);
  writeln('x=', x);
  readln;
end.

"Digital Networked Knight"
min@y™
min@y™
Доктор наук
Сообщения: 400
[Сообщение #8] 2 июня 2011, 15:10

Цитата (DNK):

Сработал тестовый пример, чтобы посмотреть как она работает.

Ну и таки что в результате?

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
mirt.steelwater
mirt.steelwater
Посетитель
Сообщения: 17
[Сообщение #9] 3 июня 2011, 16:26
директива "out" нужна для того, чтобы явно показать, что никакого значения в функцию передавать не нужно, напротив - функция вернет в данном параметре какой-то результат. в случае "var" это неоднозначно (особенно, если функция в dll).
приведенный пример напишет:
x=100
y=случайное число, сохранившееся в памяти
y=200
x=200

вот еще вам код:
class function TCrypto.Decrypt (const aValue: String;
                                const aPublicKey: String;
                                const aPrivateKey: String;
                                const aType: TPKCryptoType;
                                const aHashType: THashType) : String;
var
    MsgSgn : String;
    Msg    : String;
    Sgn    : String;
    Vrf    : String;
begin
    Result := '';
    try
        case aType of
            pkctRSA1024,
            pkctRSA2048,
            pkctRSA4096 : try
                              { (m+':'+s) := c^d mod n }
                              MsgSgn := DecryptRSA (aPrivateKey,aValue);
                              Msg := Copy ( MsgSgn, 1, Pos (':',MsgSgn)-1 );
                              Sgn := Copy ( MsgSgn, Pos (':',MsgSgn)+1, Length (MsgSgn) );
                              { v := s^e mod n }
                              Vrf := DecryptRSA (aPublicKey,Sgn);
                              { v == h (m) }
                              if ( Vrf = Hash (Msg,aHashType) ) then
                                  Result := HexToStr (Msg)
                              else
                                  raise Exception.Create (ERR_TCRYPTO_VERIFY_FAILED);
                          finally
                              _FillChar ( MsgSgn, Length (MsgSgn), $00 );
                              _FillChar ( Msg, Length (Msg), $00 );
                              _FillChar ( Sgn, Length (Sgn), $00 );
                              _FillChar ( Vrf, Length (Vrf), $00 );
                          end;
            else          raise Exception.Create (ERR_TCRYPTO_INCORRECT_PKCRYPTO_TYPE);
        end;
    except on E: Exception do
        raise EClass.Create ([self,'Decrypt',ERR_TCRYPTO_DECRYPT,E],
                             ['{C1D7DCE6-FFDA-40DF-B689-60E25E3298FF}']);
    end;
end;

Ⓐ свобода сопротивление солидарность
DNK
DNK
Студент
Сообщения: 242
[Сообщение #10] 3 июня 2011, 19:08
У меня выдало:

Цитата:

x=100
y=100
y=200
x=200

Дешивр с открытым ключом. Очень интересен класс EClass, а также как можно использовать Self в методе класса.

Дальше:
  // Для выделенных в режиме редактирования инвертируем цвет
  if FrameTS.Editing and (gdSelected in State) then begin
    if Cnv.Brush.Color = clWhite then
      bmap.Canvas.Pixels[0, 0] := clSilver
    else
      bmap.Canvas.Pixels[0, 0] := Cnv.Brush.Color;
    Cnv.Brush.Bitmap := bmap;
  end;

"Digital Networked Knight"

Страницы: «1» «2» (всего страниц: 2, текущая: 1)
Всего сообщений: 12 (сейчас показаны: с 1 по 10)

Перейти в раздел:


 © 2004 - 2024, Delphi.int.ru
Версия форума: 1.10 (19.01.2010)
RSS Delphi.int.ru Expert Код
Выполнено за 0.05 сек.
Обратная связь