Obj файлы на топчане или...


Колдование макроса


В нашем случае, создать включаемый файл для 40x API-функцией будет быстрее, чем писать и отлаживать полностью автоматизированную утилиту. С макросами на FAR'е вся работа не займет и пятнадцати минут. Главное — правильную стратегию иметь!!!

Перенаправив вывод линкера в файл "demo_3.err" (см. листинг 3), открываем его в редакторе по <F4>, подгоняем курсор к строке с первой ошибкой, затем по <CTRL-TAB> возвращаемся назад в панели, открывая по <F4> файл KERNEL32.LIB из SDK и тут же нажимаем <CTRL?L> для запрета редактирования (чтобы случайно его не испортить). Вновь возвращаемся в панели по <CTRL-TAB> и, нажав <SHIFT-F4>, создаем новый файл "demo_API.inc".

На этом подготовительные работы можно считать законченными и самое время приступать к созданию макроса. При всей свой внешней простоте в макросах заключена огромная сила, но пользоваться ею могут только маги (черные), мыщъх'и (серые, пещерные) и хомяки (всех пород). Я бы еще добавил к этому списку траву и грибы, да ведь только редакция, стремающая наркоконтроля, ни за что это не пропустит, хотя… трава — она и под забором растет. Я же не конкретизировал! Короче, ситуация напоминает бородатый (как мыщъх) анекдот: идет еврей по послевоенной Москве и причитает: сколько бед и все от одного человека. Его вяжут парни из ГБ и начинают пытать: скажите, а какого человека вы имели ввиду? Еврей — Гитлера, конечно! Гэбисты — Хм, ну тогда идите. Еврей — простите, а вы кого имели ввиду?

Рисунок 3 мыщъх серый, небритый, лохматый, пещерный. совершенно запущенный тип

Короче, как ни крути, а без травы не обойтись, потому что, совершить следующий ритуал можно только с похмелья или находясь в состоянии расширенного сознания. Но он работает! И это главное! Значит так, находясь в "demo_API.inc", нажимаем <CTRL-.>, переводя FAR в режим записи макроса (при этом в левом верхнем углу злобно загорается красная буквица R, что означает Record). Погружаемся в состояние медитации и…


  • вызываем меню "Screen" по <F12>, в котором окна перечислены в порядке их открытия;


  • нажимаем <1> для перехода в "demo_3.err", которое мы открыли первым;


  • нажимаем <END> для перехода в конец строки;


  • нажимаем <CTRL-LEFT> для перемещения курсора в начало имени функции;


  • нажимаем <LEFT> для перехода, через символ прочерка;


  • нажимаем <SHIFT-END> для выделения имени API-функции;




  • нажимаем <CTRL-INS> для копирования его в буфер обмена;


  • нажимаем <HOME>, <DOWN> для перехода к следующей строке;


  • нажимаем <F12> для вызова меню "Screen" и давим <2> для открытия KERNEL32.LIB;


  • нажимаем <F7> (search) и вставляем имя функции по <SHIF-INS>, затем <ENTER>;


  • нажимаем <SHIFT-CTRL-RIGHT> для выделения имени функции со знаком "@XX";


  • копируем его в буфер обмена по <CTRL-INS>;


  • нажимаем <HOME>, чтобы следующий поиск начинался сначала файла;


  • нажимаем <F12> и по нажатию <3> переходим в demo_API.inc;


  • пишем "externdef imp__" и нажимаем <SHIFT-INS> для вставки имени из буфера;


  • дописываем к нему ":PTR pr0" и нажимаем <ENTER> для перехода к след. строке;


  • нажимаем <SHIFT-INS> еще раз, вставляя имя типа "WriteFile@20";


  • нажимаем "пробел" и вставляем имя еще раз;


  • нажимаем <HOME> для перехода в начало строки;


  • нажимаем <F7> и затем "@", <ENTER> для поиска символа "@";


  • нажимаем <SHIFT-CTRL-LEFT> для выделения "@NN";


  • нажимаем <SHIFT-DEL> для удаления "@NN" в буфер обмена;


  • пишем " equ <_imp__" (с ведущим пробелом в начале);


  • нажимаем <DEL> для удаления символа проблема под курсором;


  • нажимаем <END> для перехода в конец строки;


  • пишем ">";


  • нажимаем <ENTER> для перехода на следующую строку;


  • Все! Создание макроса завершено! Нажимаем <CTRL-.> и вешаем макрос на любую незанятую комбинацию горячих клавиш (например, на <CTRL-~>), после чего нам остается только уронить кирпич на <CTRL-~>, созерцая как трудолюбивый макрос выполняет всю рутинную работу за нас. Ну… или почти всю. Количество аргументов в параметре "pr0" необходимо вычислить самостоятельно, но это уже мелочи, почти не отнимающие времени.





    Рисунок 4 плагины калькуляторов к FAR'у

    Тем не менее, при желании можно сотворить полностью автоматизированный макрос. Для этого нам потребуется скачать с http://plugring.farmanager.com/index_e.html один из многих валяющихся там калькуляторов (см. рис. 4), после чего, дойдя до шага 23, слегка изменить свою тактическую стратегию, представленную ниже (чтобы не перебивать макрос заново, имеем смысл обзавестись редактором макросов, так же представляющим собой плагин):

  • вызываем калькулятор, используя свойственный ему метод вызова;


  • нажимаем <SHIFT-INS> вставляя "@NN" из буфера обмена;


  • нажимаем <HOME> для перехода в начало строки;


  • нажимаем <DEL> для удаления символа "@";


  • нажимаем <END> для перехода в конец строки;


  • пишем "/4" и нажимаем <ENTER> для расчета значения;


  • копируем вычисленное значение в буфер обмена;


  • *** продолжаем выполнение прежней макропоследовательности до шага 27 ***


  • нажимаем <UP> для перехода на строку вверх;


  • нажимаем <END> для перехода в конец строки (на "pr0");


  • нажимаем <BASKSPACE> для удаления "0" и вставляет результат вычислений;


  • нажимаем <DOWN>, <END> для перехода в конец следующей строки;


  • *** продолжаем выполнение прежней макропоследовательности с шага 27 ***


  • В результате у нас должен образоваться включаемый файл следующего вида (смотрите, сколько времени у нас заняло составление макроса и сколько бы отняла разработка программы на любом другом языке программирования!):

    externdef imp__WriteFile@20:PTR pr5

    WriteFile equ

    <_imp__WriteFile@20>

    externdef imp__GetVersion@0:PTR pr0

    GetVersion equ <_imp__GetVersion@0>

    externdef imp__ExitProcess@4:PTR pr1

    ExitProcess equ <_imp__ExitProcess@4>

    Листинг 7 фрагмент включаемого файла demo_API.inc


    Содержание раздела