- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
kinds.AddError("error", "error: <0>");
kinds.AddAttention("attention", "warning: <0>");
kinds.AddNormalMessage("message", "<0>");
kinds.AddError("out_of_bounds", "<0> out of <1>..<2>");
kinds.AddError("dont_be_here", "Should dont be here!");
kinds.AddError("not_found", "<0> not found!");
kinds.AddError("not_equal", "<0> not equals <1>");
kinds.AddError("equal", "<0> equals <1>, but they must be differrence!");
kinds.AddError("equals_null", "<0> is null!!");
kinds.AddError("excess_item", "Item '<0>' is excess");
kinds.AddError("expected_item", "Expected '<0>'");
kinds.AddError("unexpected_item", "Encountered unexpected item '<0>'");
kinds.AddError("wrong_item", "Wrong item '<0>'");
kinds.AddError("expected_other_item", "Expected '<0>' but encountered '<1>'");
kinds.AddError("unknown_item", "item '<0>' is unknown");
kinds.AddError("file_not_found", "File '<0>' not found");
kinds.AddError("wrong_file_extension", "File '<0>' has wrong extension");
kinds.AddError("expected_eol", "Expected end of line but encountered '<0>'");
kinds.AddError("expected_not_eol", "End of line unexpected!");
// ...
private void MakeTplParams(object[] originalTplParams)
{
Object[] obj = originalTplParams;
String[] str = new String[obj.Length];
int length = str.Length;
for (int i = 0; i < length; i++)
{
str[i] = !Object.ReferenceEquals(obj[i], null) ? obj[i].ToString() : "";
}
tplParams = str;
}
private String MakeText(String tpl)
{
if (tpl != "") return this.MakeTextByTemplate(tpl);
return this.MakeDefaultText();
}
private String MakeTextByTemplate(String tpl)
{
String builder = tpl;
int length = tplParams.Length;
for (int i = 0; i < length; i++)
{
builder = builder.Replace("<" + i + ">", (tplParams[i]));
}
return builder;
}
private String MakeDefaultText()
{
String builder = "";
builder += "[" + kindName + "] :";
int length = tplParams.Length;
for (int i = 0; i < length; i++)
{
builder += (tplParams[i]) + "; ";
}
return builder;
}
Засунь в эти 446 байт простенький загрузчик загрузчика.
P.S. мне было настолько лень все переписывать, что я скопипастил 32-битный код и заюзал как 16-битный. И даже заработало
- У нас проблема, на нашем Cray-1 слетел загрузчик.
- Ситуация нештатная - мы в первый раз сталкиваемся с такой проблемой. Подожите пожалуйста на линии, я посмотрю, что можно сделать.
...
- Это очень старая модель, и мы не можем сейчас найти загрузчика, чтобы прислать его Вам. Пожалуйста, не волнуйтесь, я вас сейчас соединю с мистером Креем.
- А как он поможет, ведь...
- Он поможет.
...
- Сеймур Крэй слушает.
- Здравствуйте мистер Крэй, у нас потерялся загрузчик, и в техподдержке сказали, что у вас не осталось его кода...
- Пишите.
- Что?
- Берите ручку и пишите. A0 BF 10 05 ...
Крэй диктовал 4 килобайта загрузчика по памяти.
Неужели так укол действует?
> почему меня не тянет читать Александреску
Пора опять "поиграть шрифтамикванторами"
Из ∀u ∈ U: u читал Александреску не следует, что ¬∃x ∉ U: x читал Александреску, где U = {все уебки с непомерный чсв}
Я вот читал Александреску, и мне понравилось. Гораздо интереснее, чем унылая книга страуструпа.
LRESULT MyFooBarExW(LPCTSTR lpszReserved);
Уже ясно, что эта штука для com-извращений...
@LPCTSTR lpszReserved
А вот эта неведомая хуйна меня ввергла в ступор: функция хочет указатель на нуль-терминированную строку, при этом параметр - зарезервирован...
trollface.JPG.vbs
Выделение памяти вынесли наружу, чтобы функция лишний раз не дёргала аллокатор, если у нас уже есть ненужный кусок памяти.
Ну да, почти весь API так работает. Но посмотрите:
LPCTSTR lpszReserved
Зарезервированные параметры не положено ведь трогать...
Именно так. А то некуда будет добавить параметр, если он вдруг понадобится. А пока пусть ебутся и передают NULL.
Он одушевленный? Небось азиат какой?