Форум Другие темы Последний код |
Страницы: «1» «2» | |||||||
|
Предлагаю поиграть. Суть игры в следующем. Всяк сюда входящий должен запостить крайние (из суеверия не будем называть их последними ) строчки кода, набранные накануне. Следующий игрок в своём посте добавляет краткий комментарий по этому куску (совет, замечание, восторженный отзыв, не важно что) и в довесок свои крайние строчки. Следующий по тому же принципу. Крайне нежелательно разводить в этой теме грызню из-за непонравившегося комментария - это всего лишь игра. В конце концов можно создать другую тему и там договориться кто прав. Ну, поехали! // Одинаковые шины и сверхцикл 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" | ||||||
|
Хрен знает, что делает твой код. Вот мой: // Чтение и проверка байта состояния на равенство 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. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! | ||||||
|
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; | ||||||
|
В твоём коде у класса (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. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! | ||||||
|
Цитата (min@y™): В твоём коде у класса (TFace?) очень не хватает свойства FaceType. Если бы оно было, то вместо кучи "if" можно было юзать case. К сожалению, он не мой, поэтому и такие извороты А твой код явно из той же А я сегодня ещё ничего не написал, кроме <?php header('Location: /'); ?>Уж простите | ||||||
|
бескоечный цикл страницы ложет сервер при неправильной конфигурации 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; Ⓐ свобода сопротивление солидарность | ||||||
|
Заставило задуматься о назначении директивы 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" | ||||||
|
Цитата (DNK): Сработал тестовый пример, чтобы посмотреть как она работает. Ну и таки что в результате? Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! | ||||||
|
директива "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; Ⓐ свобода сопротивление солидарность | ||||||
|
У меня выдало: Цитата: 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" | ||||||
Перейти в раздел:
© 2004 - 2024, Delphi.int.ru |
Версия форума: 1.10 (19.01.2010) |
Выполнено за 0.05 сек. |