Multi-Edit Lite v.1.00i

Софт только для использования в DOS

Re: Новые скриншоты

Сообщение SergeCpp » 21 июл 2014, 01:04

Делать всё нужно медленно и уверенно, - тогда и работать будет, как трактор.
===
Почитаешь тут, как собеседования всякие проводят, ужас: "напишите за час/два/три"...
Да и вообще, мода такая, хвалиться, я-мол, за пять минут напишу...

Вот, некогда читал: http://rsdn.ru/forum/cpp.applied/5400423
И http://rsdn.ru/forum/cpp.applied/5401009.1
Аватара пользователя
SergeCpp
Мастер Даунгрейда
 
Сообщения: 441
Зарегистрирован: 11 апр 2011, 13:49
Откуда: At Home

Re: Новые скриншоты

Сообщение Nika » 21 июл 2014, 01:34

SergeCpp писал(а):Делать всё нужно медленно и уверенно, - тогда и работать будет, как трактор.
===
Почитаешь тут, как собеседования всякие проводят, ужас: "напишите за час/два/три"...
Да и вообще, мода такая, хвалиться, я-мол, за пять минут напишу...

Вот, некогда читал: http://rsdn.ru/forum/cpp.applied/5400423
И http://rsdn.ru/forum/cpp.applied/5401009.1

)) Да.
Тут как с едой - можно накинуться и запихнуть в себя, ломая зубы, сразу всё, что лежит на столе,
а можно аккуратно, не спеша, запивая пивком, под приятную музыку, - живую, струнный квартет, эххх..

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

-- Добавлено --
Когда-то, в начале 2000-х, пытался я найти работу программистом.
На дискетке у меня были примеры готовых реализаций всяких программок/утилит.
К моему удивлению, ни в одном месте у меня не спросили "А покажите Ваши готовые программы".
Зато в одной конторе мне борзо стали выдавать техзадание по составлению куска интерфейса для проги,
которую они там пытались лепить. Я посмеялся, сказал, что в таких играх не участвую - если они пишут свою прогу на Си, то пускай дают тестовое задание на Паскале или хоть на REXX'е - и неча лохов искать. Тут же со мной стали говорить очень уважительно (REXX'ом я их добил))),
извинились, что всё равно не смогут предложить мне достойную оплату, попросили телефончик, (ну мало ли, может понадобится проконсультироваться) - телефона у меня не было, на том и распрощался.
В общем, суетливость нужна только при ловле блох. Принцип, который никто не отменял.

Зато потом пару-тройку раз меня зазывали на работу попрограммировать, но то уже для меня было неактуально,
а сейчас я и сам не сунусь в такую работу, зная, какими инструментальными средствами и какой ценой ведётся разработка в софтверных конторах.
Да и всё больше пшик в тех лавках.
Последний раз редактировалось Nika 21 июл 2014, 02:24, всего редактировалось 6 раз(а).
Nika
Мастер Даунгрейда
 
Сообщения: 649
Зарегистрирован: 17 окт 2013, 00:21

Вообще

Сообщение SergeCpp » 21 июл 2014, 03:02

Тут как с едой - можно накинуться и запихнуть в себя, ломая зубы, сразу всё, что лежит на столе,
а можно аккуратно, не спеша, запивая пивком, под приятную музыку, - живую, струнный квартет, эххх..
===
Есть замечательная иллюстрация этих подходов, только применённая к [скоро/много/обильно]чтению (там цитата и ссылка на полное): http://rsdn.ru/forum/life/4546924.1

...
===
Остальное -- примерно аналогично, только у меня был маленький сиди-диск на 200 мб.

А посмотришь порой (на картинках), как они, бедные, все вместе сидят (пусть и разделённые "перегородками" /одно название/)... Это нужно быть специальным человеком, чтобы такое просто выдержать, не то что программы писать, а уж под аккомпанемент более десяти человек я только глазами хлопать и смогу -- максимум. Только отдельный кабинет для одного (двое -- уже много!) и закрытая дверь и окно (если на улице шум) и никаких телефонов. Такие условия программистам вряд ли где дают, хотя и во всех умных книжках (e.g. Peopleware) об этом специально говорят.
Аватара пользователя
SergeCpp
Мастер Даунгрейда
 
Сообщения: 441
Зарегистрирован: 11 апр 2011, 13:49
Откуда: At Home

Re: Multi-Edit Lite v.1.00i

Сообщение Nika » 21 июл 2014, 08:03

SergeCpp писал(а):[..] А посмотришь порой (на картинках), как они, бедные, все вместе сидят (пусть и разделённые "перегородками" /одно название/)... [...]
Ну, что делать, приходится абстрагироваться. Случалось работать и без перегородок вообще... Конечно, тогда нужно быть немножечко наглецом и начхать на окружающих. Иначе да - сосредоточиться невозможно.

-- Добавлено --
)) Ну, как всегда. Понадобилось малость улучшить макрос BLKSHIFT.
Варианта два - либо вставить проверку на тип блока и не работать, если он 3 (потоковый),
или ( что я и выбрал ) применить для потокового блока (тип 3) некоторые дополнительные ухищрения.
Например, после сдвига вправо нужно восстанавливать переменную block_col1, потому что она увеличивается на 1.
Ну и если помечено потоковым блоком больше одной строки, то количество выбранных строк следует уменьшить на 1.
Тогда всё работает вообще великолепно - с блоками любого типа, что и требовалось.
Последний раз редактировалось Nika 21 июл 2014, 08:10, всего редактировалось 2 раз(а).
Nika
Мастер Даунгрейда
 
Сообщения: 649
Зарегистрирован: 17 окт 2013, 00:21

Играем в Lines

Сообщение SergeCpp » 21 июл 2014, 08:57

Например, после сдвига вправо нужно восстанавливать переменную block_col1, потому что она увеличивается на 1.
===
А тут всё ведь верно -- вставили текст левее, и stream block сдвигается.

А вообще для "untouching" изменения строки или строк есть в 7 версии две функции: put_line() и put_line_to_win(). То есть, забираете строку в буфер соответствующими функциями get_line() или get_line_from_win(), обрабатываете в буфере и "put". Даже курсор не нужно двигать, если get_line_from_win() и put_line_to_win() использовать.

У меня так много что работает, например, в textutil.s: ChngCase, SwapWords, SwapLines, MoveLineUp/Dn, Center.

ChngCase
Код: Выделить вс
  switch( blocktype )
  {
  case 0 : // line
    if( casetype )
    {
      tstr = caps ( get_line );
    }
    else
    {
      tstr = lower( get_line );
    }

    if( get_line != tstr )
    {
        put_line (  tstr );
    }

    break;


SwapLines
Код: Выделить вс
  str line      [ MAX_LINE ] = get_line_from_win( c_line, cur_window );
  str other_line[ MAX_LINE ] = get_line_from_win( other,  cur_window );

  if( svl( line ) | svl( other_line ) ) // also hahdles past eof
  {
    push_undo;

    put_line_to_win( other_line, c_line, cur_window, TRUE );
    put_line_to_win( line,       other,  cur_window, TRUE );

    pop_undo;

    update_window;
  }
Аватара пользователя
SergeCpp
Мастер Даунгрейда
 
Сообщения: 441
Зарегистрирован: 11 апр 2011, 13:49
Откуда: At Home

redraw и update_window

Сообщение SergeCpp » 21 июл 2014, 09:09

redraw -- более объёмная функция, так как обновляет ещё и рамку окна и вызывает update_status_line.

update_window же обновляет только текстовую область окна -- лёгкая функция.

Это я в textutil.s увидел и вспомнил Изображение
Аватара пользователя
SergeCpp
Мастер Даунгрейда
 
Сообщения: 441
Зарегистрирован: 11 апр 2011, 13:49
Откуда: At Home

Сдвиг

Сообщение SergeCpp » 21 июл 2014, 09:17

Ну и если помечено потоковым блоком больше одной строки, то количество выбранных строк следует уменьшить на 1.
===
Почему?
Аватара пользователя
SergeCpp
Мастер Даунгрейда
 
Сообщения: 441
Зарегистрирован: 11 апр 2011, 13:49
Откуда: At Home

Re: Сдвиг

Сообщение Nika » 21 июл 2014, 15:02

SergeCpp писал(а):Например, после сдвига вправо нужно восстанавливать переменную block_col1, потому что она увеличивается на 1.
===
А тут всё ведь верно -- вставили текст левее, и stream block сдвигается.
Да. Верно с точки зрения логики работы потокового блока.
Но в данном случае этот потоковый блок используется только как вспомогательное средство для указания границ текста.

SergeCpp писал(а):Ну и если помечено потоковым блоком больше одной строки, то количество выбранных строк следует уменьшить на 1.
===
Почему?
См.скриншот.

Это правило не применяется, если потоковым блоком выбрана только одна строка (часть её) по "Shift+->".
Тогда такой блок можно считать вертикальным и вопросов вообще нет.

SergeCpp писал(а):redraw -- более объёмная функция, так как обновляет ещё и рамку окна и вызывает update_status_line.
update_window же обновляет только текстовую область окна -- лёгкая функция.
Мне такое не подходит.
Не будет совместимости с младшими версиями вплоть до ME2.x (Фотон). А вот redraw там работает.
То же самое касается и с put_line_to_win(). Если refresh отключён, то разница в общем-то невелика.
.
Вложения
stream.png
Если помечено потоковым блоком больше одной строки, то количество выбранных строк следует уменьшить на 1.
stream.png (2.44 Кб) Просмотров: 7253
Последний раз редактировалось Nika 21 июл 2014, 15:23, всего редактировалось 9 раз(а).
Nika
Мастер Даунгрейда
 
Сообщения: 649
Зарегистрирован: 17 окт 2013, 00:21

Сдвиг

Сообщение SergeCpp » 21 июл 2014, 15:22

Этот скрин как раз и показывает очевидное, что если уж и двигать нестроковые блоки, то верх и низ следует определять очевидным образом -- по самой верхней/нижней строке, где есть маркировка блока.

То есть мне неочевидны и неясны причины "-1 строки" в случае строкового блока. Напишите словами, почему? Ведь путаться же будут все. И почему тогда "минус нижнюю", а не "минус верхнюю" (или наоборот)?
Аватара пользователя
SergeCpp
Мастер Даунгрейда
 
Сообщения: 441
Зарегистрирован: 11 апр 2011, 13:49
Откуда: At Home

Re: Сдвиг

Сообщение Nika » 21 июл 2014, 15:34

SergeCpp писал(а): Напишите словами, почему?
По логике работы этой примочки:
сдвигается помеченная часть текста правее колонки начала пометки блока.
(Но тут возможен нюанс - см. (*)-- далее).
Впрочем, изначально эта примочка (Как и BOXFILL) предназначена только для вертикальных блоков.
Это я уже для удобства расширяю функционал. Думал такой подход и для BOXFILL засобачить, но решил, что не нужно.

Мне в Multi-Edit не вполне нравится, что в процессе пометки "на лету" не может измениться тип блока в зависимости от способа пометки.
То-есть, решили, что он будет потоковым, пометили, - и он уже потоковым и останется. Не так в KEDIT/THE. Там удобнее.
И, кстати, в "Слове и Деле" тоже блок, помеченный как потоковый, нажатием F6 преобразуется в вертикальный.
В общем-то, в МЕ это можно и переделать(доделать), введя надстройку-обёртку для функций пометки... Но вряд-ли целесообразно усложнять.

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

По скриншоту:
ещё менее очевидно будет, - если текст в красной рамке сдвигаться будет - то почему он сдвигается?
Так что в нынешнем виде это вполне приемлемо.

В случае, если делается коммерческий продукт для привередливых покупателей - да, такие "фичи" производят на них неприятное впечатление, а потому обычно в коммерческом софте такое рубится на корню. Здесь же тоже можно ограничить применение этой примочки только вертикальными блоками - легче лёгкого. )) Но это не круто.
.
Вложения
stream2.png
stream2.png (2.25 Кб) Просмотров: 7217
Последний раз редактировалось Nika 21 июл 2014, 16:49, всего редактировалось 20 раз(а).
Nika
Мастер Даунгрейда
 
Сообщения: 649
Зарегистрирован: 17 окт 2013, 00:21

Re: Сдвиг

Сообщение SergeCpp » 21 июл 2014, 18:38

По логике работы этой примочки:
сдвигается помеченная часть текста правее колонки начала пометки блока.
(Но тут возможен нюанс - см. (*)-- далее).
===
Это всё крайне неочевидно и непонятна логика -- причём тут колонка начала пометки блока -- stream-блока.
Очевидно (если блок используется лишь для определения верха-низа) -- все строки, где есть пометка/подсветка блока.

Впрочем, изначально эта примочка (Как и BOXFILL) предназначена только для вертикальных блоков.
Это я уже для удобства расширяю функционал.
===
Вот при расширении на новый тип блока и стоит обдумать "логику очевидности".

(*) Я считаю, что:
1) Сдвиг stream-блока -- это сдвиг именно stream (как одной длинной строки). И слова, выдвинутые вправо от текущей правой границы строки (не 2048 и не форматная граница /или всё же она?/, а там, где последний непробельный символ /?/), переносятся на следующую строку. Это близко по логике к форматированию абзаца, где абзац тоже представляется одной длинной строкой.
2) Сдвиг column-блока -- это сдвиг только в нём.
3) Непробельные символы не должны удаляться (если некуда двигать).
Вот так бы я делал при расширении.
Сейчас запишу в TODO-файл (а может там и есть такое), чтоб идея хоть осталась.

Мне в Multi-Edit не вполне нравится, что в процессе пометки "на лету" не может измениться тип блока в зависимости от способа пометки.
===
Если выделяете мышкой (двигаете с нажатой левой кнопкой), то, щёлкнув правой кнопкой (не отпуская левую), вы поменяете тип блока.

...в "Слове и Деле" тоже блок, помеченный как потоковый, нажатием F6 преобразуется в вертикальный.
===
А это у меня определённо где-то записано, чтобы так сделать (или уже есть такое макро?.. вряд ли). Но такое крайне редко нужно. Вот BlockExtend часто было нужно, я и сделал.

По скриншоту:
ещё менее очевидно будет, - если текст в красной рамке сдвигаться будет - то почему он сдвигается?
===
"почему он сдвигается" -- по ясному и понятному правилу: блок служит только для определения верха-низа. Другое дело, что само это правило введено вами (для column-блоков изначально)

Так что в нынешнем виде это вполне приемлемо.
===
Неочевидно и неясно.

В случае, если делается коммерческий продукт для привередливых покупателей - да, такие "фичи" производят на них неприятное впечатление, а потому обычно в коммерческом софте такое рубится на корню. Здесь же тоже можно ограничить применение этой примочки только вертикальными блоками - легче лёгкого. )) Но это не круто.
===
Сам разработчик должен быть привередливее самого привереды из пользователей.

Я считаю, что вы изначально пошли по странному пути, используя column-блок лишь для определения верха-низа. А потом под это стали приспосабливать stream-блок. Это неясно (по крайней мере мне).

Свои мысли по сдвигу блоков я описал выше (*).
Аватара пользователя
SergeCpp
Мастер Даунгрейда
 
Сообщения: 441
Зарегистрирован: 11 апр 2011, 13:49
Откуда: At Home

Изменение типа блока, etc

Сообщение SergeCpp » 21 июл 2014, 18:51

Изменение типа блока -- я где-то видел такое в ME, в каком-то сборнике макросов (иностранном). У меня много таких сборников раньше было, но я их все удалил (конечно, просмотрев), так как там "ничего особенного", да и ужасно написаны (хотя и амбициозно представлены, тот же nws-сборник), легче самому написать. nwsmacro (раз, два, Brett Sutton, кажется он...), кажется, хотя их много было...

P.S. Вот, один остался (и то -- лишь исходники /там больше было/ и, кажется, сильно частичные исходники /те, что я оставил на всякий случай/) -- прикрепляю. BLKFILL там есть. И ещё один-два прикрепляю.
Вложения
FILETYPE.ZIP
(955 байт) Скачиваний: 258
MULTI_CLIPBOARD.ZIP
(7.9 Кб) Скачиваний: 267
SRC_NWS.RAR
(45.61 Кб) Скачиваний: 278
Последний раз редактировалось SergeCpp 21 июл 2014, 19:00, всего редактировалось 1 раз.
Аватара пользователя
SergeCpp
Мастер Даунгрейда
 
Сообщения: 441
Зарегистрирован: 11 апр 2011, 13:49
Откуда: At Home

Re: Сдвиг

Сообщение Nika » 21 июл 2014, 18:56

SergeCpp писал(а): [..]
Я считаю, что вы изначально пошли по странному пути, используя column-блок лишь для определения верха-низа. А потом под это стали приспосабливать stream-блок. Это неясно (по крайней мере мне).
Свои мысли по сдвигу блоков я описал выше (*).
Со всеми мыслями согласен.
Только уточню, что этот приём "сдвига блока с подрезкой" я не придумал, а утянул готовую идею из KEDIT/THE (см. скриншот с KEDIT).
Просто я нашёл эту функцию очень удобной. Достаточно вставить запрет на исползование любого типа блока, кроме вертикального(тип 2), - и получится в чистом виде классическая опция KEDIT. А они, судя по всему, утянули её из XEDIT.

SergeCpp писал(а):[..] легче самому написать.[..]
- Это да. Согласен.
Только бывает полезно поглядеть на готовые воплощения чужих замыслов -
иногда возникают собственные конструктивные сображения.

-- Добавлено --1
Архивы увидел, спасибо. Возьму на "посмотреть".
Я не застал (или прошёл мимо?) пика интереса к макросам ME, поэтому у меня таких "загашников" нет ни одного.
Да и "места знать надо", где такие вещи обсуждаются.

-- Добавлено --2
А вообще, в чужих текстах полезные приёмчики часто можно подглядеть.
Ну, например этот "++i" для икремента индексов пунктов меню. Опять же, текст на разделительных линиях.
Для меня это вначале было неочевидно. Спасибо за подсказки.
.
Вложения
kedit.png
kedit.png (1.61 Кб) Просмотров: 7189
Последний раз редактировалось Nika 21 июл 2014, 19:26, всего редактировалось 13 раз(а).
Nika
Мастер Даунгрейда
 
Сообщения: 649
Зарегистрирован: 17 окт 2013, 00:21

Использование column-блоков

Сообщение SergeCpp » 21 июл 2014, 19:15

SergeCpp писал(а):Я считаю, что вы изначально пошли по странному пути, используя column-блок лишь для определения верха-низа. А потом под это стали приспосабливать stream-блок.


У меня, кстати, примерно такое применено в диалоге сортировки (Alt+E, S), но там column-блок используется очевидным "двойным" образом — для указания ключа и области сортировки (см. подсказку внизу, если курсор стоит на "Ключом является блок"). Причём всё это явно написано в диалоге и можно отключить: [_].
Аватара пользователя
SergeCpp
Мастер Даунгрейда
 
Сообщения: 441
Зарегистрирован: 11 апр 2011, 13:49
Откуда: At Home

Менеджер Гипертекстов 2.04

Сообщение SergeCpp » 21 июл 2014, 19:26

Код: Выделить вс
                                              Менеджер Гипертекстов 2.04
                                                Руководство пользователя

НАЗНАЧЕНИЕ МЕНЕДЖЕРА ГИПЕРТЕКСТОВ
---------------------------------

    Менеджер Гипертекстов ориентирован  прежде  всего  на профессиональ-
ных  программистов,  использующих в своей работе несколько языков и выб-
равших  в  качестве  среды   разработки   редактор   MULTI-EDIT American
Cybernetics Inc.

    Менеджер  Гипертекстов  позволяет  конвертировать  и просматривать в
MULTI-EDIT файлы помощи для различных систем программирования. ВАМ БОЛЬ-
ШЕ НЕ НУЖНО загружать в память программы просмотра файлов помощи.

ТРЕБОВАНИЯ
----------

    Менеджер Гипертекстов рассчитан на  совместную  работу  с MULTI-EDIT
версий  6.0  и 7.0. Для нормального функционирования Менеджера необходи-
ма полная установка редактора, включающая в себя:

    - исходные тексты (подкаталог SRC);
    - утилиты HELPCX.EXE и HELPDX.EXE, CMAC.EXE.

...
Вложения
HFM204.ZIP
(131.56 Кб) Скачиваний: 295
Аватара пользователя
SergeCpp
Мастер Даунгрейда
 
Сообщения: 441
Зарегистрирован: 11 апр 2011, 13:49
Откуда: At Home

Пред.След.

Вернуться в Программы для DOS

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1