========================================================= AJPapps - Блокнот 1.00 Alpha Линда Кайе 2006-2015. Посвящается Ариэль. ========================================================= Это блокнот. Ещё один блокнот. На самом деле это младший брат Блокнота для Windows. Он чем-то похож на старшего брата, но обладает намного меньшими возможностями. Вообще, он ограничен в возможностях, но я писала его главным образом для устранения недостатков MS-DOS Edit. История создания ---------------- Что отличает программиста от админа? Если программисту что-то нужно, он пишет это сам в то время как админ бороздит просторы Инета... Однажды произошла трагедия и у меня умер жёсткий диск. Я была в дороге, у меня ни чего не было для работы без винта, а добрых людей почти не нашлось. Оказалось, что в наше время продвинутых систем, корманных компьютеров и переносимости нет ни чего надёжнее, чем загрузочная дискета Windows 98. Поэтому такая у меня поселилась очень скоро. Однако очень скоро выяснилось, что для работы MS-DOS Edit не слишком пригоден. Он не умеет переносить текст по словам, не умеет сохранять по F2 и зачем-то добавляет пустую строку в конец файла. Эти смешные проблемы со временем начинают доставать очень сильно. И что делать? Ведь альтернативу найти очень сложно, а все старые утилиты похоже все массово повыкидывали... И тогда мне переслали из дома старый диск "Библиотека программиста", где достаточно досовских компиляторов... Я потыкалась и пришла к тому, к чему не хотела приходить - VB DOS. У меня до сих пор после шестой версии предубеждение... Но ничего не поделаешь, изобретать пользоватеьский интерфейс не охота... И вот работа закипела. Поначалу редактор (тогда ещё NotePad.EXE) всегда только переносил по словам и умел только сохранять. Один эпизод к LCIWL я вообще писала с нуля в нём не имея возможности позже открыть! Но по ходу дела всё добавилось. Получилась маленькая копия Блокнота для Windows, который я очень активно использовала. Поэтому недолго думая я переименовала его в NoteBook.EXE. Малыш получился намного беднее своего старшего брата, но его вполне можно использовать, что я и делаю. Кстати, первая компиляция показала, что IDE не может справиться с этим проектом. Поэтому Блокнот заставил меня разбираться в параметрах линковщика и компилятора. Благодяря ему я снова освоила то, что забыла во времена Quick Basic. Внимание! --------- Программа всё ещё в статусе альфы, но я её очень активно использую, в том числе и для правки конфигурационных файлов. Так что все замеченные ошибки постепенно будут исправляться, а программа будет развиваться. Остановится это, возможно, только с возвращением в Win32, когда необходимость в загрузке с дискеты в MS-DOS отпадёт. История изменений ----------------- * 1.00 Alpha Первый релиз. * 1.00.0001 Alpha [-] Исправлена ошибка с минимальной высотой и шириной окна. Теперь программа не вылетает с ошибкой при присвоении неверной высоты текстбоксу. * 1.00.0002 Alpha [+] Перекомпиляция с новой версией Common Dialogs. [+] Теперь переход в боксе выбора католога осуществляется пробелом или стрелкой вправо. [+] Благодоря генерации кода 386 библиотеки немного полегчал сам EXE. * 1.00.0003 Alpha [+] Появился поиск в тексте. [+] Поправлены заголовки окон с вопросами о сохранении текста. Теперь они есть ^_^ * 1.00.0004 Alpha [+] Появился калькулятор. [+] Изменился порядок загрузки настроек. Теперь можно указать Desktop pattern 0 и Wallpaper 0 для того, чтобы фон не очищался. [+] Оптимизация. Путём некоторых дополнительных библиотек удалось вырезать всё лишнее и уменьшить немного размер EXE файла с 238'830 до 227'558. Возможны ошибки вроде 80: Feature removed. Также программа не пойдёт без сопроцессора... * 1.00.0005 Alpha [+] Появился список recent. Существует временно, пока работает программа. В него не добавляется файл, открытый через командную строку. При выборе открытого файла в списке recent файл открывается заново. [-] Подправлен вызов диалогов открытия и сохранения файла. Теперь по умолчанию выводится каталог текущего открытого документа. При сохранении с новым именем по умолчанию ставится имя текущего файла. [+] Появилась замена текста. [-] Немного подправлены окна сохранения/открытия и палитры (которая всё равно не используется). Теперь всё смотрится немного лучше. [+] В окне сохранения/открытия нажатие кнопки "вниз" в текстбоксе ввода имени файла теперь перемещает фокус на список файлов. Такое же поведение было и в MS-DOS Edit. [+] В окнах поиска и замены в текстбоксах работают комбинации, вставляющие (или заменяющие выделенный текст) специальные символы. Ctrl+1 - CRLF, Ctrl+2 - CR, Ctrl+3 - LF, Ctrl+4 - TAB. Нечто подобное было и в Блокноте для Windows. Только там было специальное меню. Здесь меню нет. [+] Появилась возможность менять разрешение экрана через файл настроек. * 1.00.0006 Alpha [+] Изменился формат файла настроек. Теперь он больше похож на INI файлы Windows. Правда, чтение и запись таких файлов происходят медленнее. [+] Настройки разрешения экрана перенесены в Controlp.INI. [+] Настройки отображения времени теперь сохраняются. * 1.00.0007 Alpha [-] Исправлена ошибка с несохранением настроек, если файл настроек не существовал. Не исправлена выдача сообщения, если файл настроек не существовал. Пока не знаю, в чём дело... * 1.00.0008 Alpha [+] Исправлена выдача сообщения. Теперь при создании INI файла ни какого странного сообщения не выводится. * 1.00.0009 Alpha [+] Появился скринсейвер, основная задача которого прятать текст. * 1.00.0010 Alpha [+] В честь появления парсера для моих дневников, появился новый формат даты/времени. * 1.00.0011 Alpha [-] Поправлен диалог вставки даты и времени. Из-за потери точности раньше дата не соответствовала реальности, терялись секунды, минуты. Теперь всё нормально. * 1.00.0012 Alpha [+] Добавлен диалог вставки футера записи для дневника. * 1.00.0013 Alpha [+] Добавлена вставка Diary.ru тэгов. [+] Добавлено обращение к флоповоду перед загрузкой пользовательского интерфейса, для того чтобы при запуске с электронного диска не возникали проблемы с быстродействием и мышью. * 1.00.0014 Alpha [+] Добавлен расширенный формат даты и времени для дневников. [+] Переименованы форматы даты и времени для дневников. * 1.00.0015 Alpha [+] Доработан алгоритм сохранения файла. Теперь перед сохранением файла, старый файл переименовывается по шаблону NNNNNNNN.BAK. После этого происходит сохранение файла, и только после этого резервная копия удаляется. Это делается для того чтобы если при сохранении файла произойдёт ошибка вроде перезагрузки машины, файл не был потерян безнадёжно. Но даже если трагедии не произойдёт, предыдущая версия файла будет в другом месте диска, так что её можно будет восстановить. * 1.00.0016 Alpha [+] Добавлена конвертация символов между ANSI (windows-1251) и OEM (cp866) кодировками. Таблица перекодировки построена на основе анализа работы Win32 функций OemToChar() и CharToOem(). * 1.00.0017 Alpha [-] Убит глюк с опечаткой в тэге [XHTML]. [+] Добавлен в строку состояния вывод текущей позиции курсора относительно начала текста. * 1.00.0018 Alpha [-] Подправлен формат даты для дневника. * 1.00.0019 Alpha [+] Добавлены горячие клавиши в окно отладки. [+] В окно о программе выводится версия DOS, под которой запущена программа. * 1.00.0020 Alpha [+] Во вставке даты и времени удалены старые дневниковские заголовки и добавлен новый, как в AJPapps - NoteBook mode for Dana. [+] В окне о программе поправлен адрес электронной почты. [+] Немного реорганизовано окно о программе. [+] README.TXT приведён в соответствие современным (моим) стандартам. [+] Файл VERSION.TXT больше не поставляется с программой - ченджлог находится в README.TXT файле. Информация о разработке ----------------------- Язык: Microsoft Visual Basic 1.00 for MS-DOS Платформа: MS-DOS 7.10 Установка --------- Для работы программы почти ничего не требуется. Может пригодится файл ControlP.INI, содержащий настройки цветов, но его наличие не обязательно. Все настройки программа хранит в файле NOTEBOOK.INI. Причём его она хранит в текущем каталоге. Тоесть в каком придётся. Такое же поведение пока наблюдается и с ControlP.INI. Для решения этой проблемы можно определить переменную серды NOTEBOOK_CONFIG_PATH, значением которой должен быть каталог, в котором нужно хранить настройки. Оперделить её можно в AutoExec.BAT (AutoExec.NT в NT). Например, это можно сделать так: SET NOTEBOOK_CONFIG_PATH=C:\DOS_UTILS\NOTEBOOK\ Наличие последнего обратного слэша не обязательно. Возможные проблемы ------------------ * Программа достаточно большая, хоть и сжата. Может потребоваться память для кода и для файла. До 300Кб. * Возможны ошибки с открытием файла из командной строки, если был передан очень закрученный параметр. * Также возможны ошибки если файл был открыт из командной строки с указанием относительного пути (или без пути вообще), а какая-нибудь резедентная программа изменит текущий каталог. Файл может быть сохранён не в том каталоге. * Возможны ошибки, если в качестве имени файла в комнданой строке указаны системные устройства. Всё здесь на совести пользователя. * Программа не будет работать, если терминал, на котором она выполняется, будет украден. * Программа не тестировалась на монохромных мониторах и прочем ОЧЕНЬ старом железе. * При нехватке памяти возможна ошибка "Out of string space" при переключении переноса по словам и при перекодировке. * Без переменной среды NOTEBOOK_CONFIG_PATH файл настроек будет читаться и сохраняться в текущий каталог. * Программа оптимизирована для машин с математическим сопроцессором. Хоть она и не производит вычислений с плавающей точкой, но всёже возможны ошибки и вообще незапуск на мащине без сопроцессора. Главные фичи (для сравнения с MS-DOS Edit) ------------------------------------------ * Поддержка мыши для тех, кто без неё не может. * Часы с датой. В двух экземплярах. * Отладочное окно, чтобы быть в курсе происходящего с программой. * Перенос по словам. * Сохранение по F2 (мелочь, а такая необходимая!). * Индикатор изменения файла. * Сохранение документа даже если он не был изменён. Ограничения ----------- * Самым печальным ограничением является ограничение на размер документа. Блокнот не будет пытаться открыть документ более тридцати килобайт. Можно создать такой, но тридцать килобайт - это примерное ограничение Visual Basic for MS-DOS. * Пока отсутствует отмена изменений. * Отсутствует вывод текущей строки и текущего столбца. * Табуляция выводится в виде странного символа. Это ограничение VB DOS. Я тут не при чём. * Пока отключена возможность запуска командного интерпритатора (Command.COM). Это связано с проблемами открытия файла из командной строки. Настройка --------- Файлы настройки являются простыми текстовыми файлами, однако редактировать их стоит с осторожностью. Они похожи на INI файлы Windows и пока поддерживают строковые и четырёхбайтные целые. Шестнадцатеричная запись не поддерживается. Секции не поддерживаются. Коментарии могут быть на отдельной строке, но не в одной строке со значением. Пожалуй, редактировать самостоятельно стоит только файл ControlP.INI. Пока программа не содержит средств для его настройки. Вот список значений с возможными диапозонами. Цвета задаются кодами цветов Quick Basic. * AccessKeyForeground - Access key foreground color (0-15). * ActiveBorderBackground - Active border background color (0-15). * ActiveBorderForeground - Active border foreground color (0-15). * ActiveWindowShadow - Active window shadow effect (Boolean). * CommandButtonForeground - Command button foreground color (0-15). * DesktopBackground - Desktop background color (0-15). * DesktopForeground - Desktop foreground color (0-15). * DesktopFillPattern - Desktop fill pattern (ASCII 0-255). Это значение может быть перекрыто установкой "обоев" * DisabledMenuDialogItemForeground - Disabled menu/dialog item foreground color (0-15). * MenuBackground - Menu background color (0-15). * MenuForeground - Menu foreground color (0-15). * MenuSelectedItemBackground - Menu selected item background color (0-15). * MenuSelectedItemForeground - Menu selected item foreground color (0-15). * ScrollbarBackground - Scrollbar background color (0-15). * ScrollbarForeground - Scrollbar foreground color (0-15). * 3DEffect - 3-D effect for controls with borders (Boolean). * TitlebarBackgroundColor - Titlebar background color (0-15). * TitlebarForegroundColor - Titlebar foreground color (0-15). * Wallpaper - "Wallpaper" (0-3). * ScreenWidth - Screen width (40/80). * ScreenHeight - Screen height (25/30/43/50/60). Значение Wallpaper указывает, что будет на рабочем столе. Все значения кроме 1, 2 и 3 приводят к заполнению рабочего стола символом "Desktop fill pattern". 1 выводит логотип VB DOS, 2 - кирпичи, 3 - некое подобие окон ^_^ Для того чтобы при запуске программы сохранялся фон консоли, нужно в Desktop fill pattern указать 0, и в Wallpaper тоже 0. Тогда фон не будет отчищаться, текст ни куда не будет пропадать. В версии 1.00.0005 появилась возможность устанавливать разрешение экрана. В версии 1.00.0006 настройки были перенесены в ControlP.INI. Они определяются значением ScreenWidth и ScreenHeight. Любое неверное значение вызовет ошибку и завершит работу программы. При этом значения могут зависеть от аппаратуры. Смена разрешения производится в два этапа. Сначала программа пытается установить новое разрешение, а потом пытается с новым разрешением показать рабочий стол. На этих этапах и возможны ошибки. При чём, похоже, Visual Basic не поддерживает вывод форм при ширине экрана в 40. При завершении программа восстанавливает предыдущее разрешение. Вот описание значений файла NoteBook.INI. Их не стоит редактировать вручную. * WindowState - Window state (0-2). * Left - Left (0-255). * Top - Top (0-255). * Width - Width (0-255). * Height - Height (0-255). * WordWrap - Word wrap (bool). * DebugVisible - Debug visible (bool). * ClockVisible - Clock visible (bool). * Clock 24Hour - 24 hour in clock (bool). * Clock Seconds - Display seconds in clock (bool). * Clock Date - Display date in clock (bool). Первое значение определяет состояние главного окна. Оно принимает стандартные значения Visual Basic. 0 - нормальное, 1 - развёрнутое на весь экран, 2 - свёрнутое в иконку. Следующие четыре параметра определяют положение окна, его координаты и размеры. Следует заметить, что при ошибке в этих и предыдущем значении будут приянты настройки по умолчанию, а дальнейший парсинг прекратится. Главное окно будет отцентровано. Word wrap - булево значение, которое определяет режим переноса текста. По идее любое ненулевое значение должно включить перенос по словам, но рекоменуется использовать значение -1. Для отключения переноса используется значение 0. Следующие два булевых параметра определяют видимость окна отладки и часов. Эти и предыдущие параметры настраиваются. При чём видимость окон сохраняется при выходе. Следующие три булевых параметра содержат настройки отображения времени в часах. Они соответствуют пунктам меню часов. Буфер обмена ------------ Я посчитала абсолютно лишним вводить в меню "Правка" команды вроде "Вставить" или "Отчистить" (самая идиотская команда). Однако они работают, я просто не стала их дублировать. Вы всегда можете пользоваться следующими комбинациями: Shift+Del - Вырезать Ctrl+Ins - Копировать Shift+Ins - Вставить Del - удалить символ или отчистить выделенное. Всё просто. Консоль ------- В консоли выводятся отладочные сообщения программы. Ни какой прокрутки не предусмотрено. Для отчистки окна нужно дважды щёлкнуть на нём. Для вывода информации о памяти, нужно щёлкнуть правой клавишей мыши. Кстати, двойной щелчёк правой клавишей мыши тоже отчищает окно - это отличается от поведения Windows, где вообще нет двойных щелчков правой клавишей мыши. Есть также горячие клавиши: ESC - очистить консоль, F5 - вывести информацию о памяти. Строка состояния ---------------- В строке состояния выводится некоторая полезная информация. В первом столбце выводится размер текста. Во втором столбце выводится код символа под курсором. Если курсор стоит в конце строки, то выводится 13, если в конце текста - не выводится вообще ничего. Пока больше ничего не выводится. В третьем столбце выводится положение курсора относительно начала текста. Код симвода обновляется примерно раз в двести пятьдесят милисекунд, поэтому возможна задержка при прокрутке текста. Калькулятор ----------- Я не стала изобретать велосипед и взяла калькулятор, который программеры из Microsoft написали в качестве примера для Visual Basic. Выводится он пока модально. Закрыть его можно через Ctrl+Esc. Recent ------ В меню Файл есть список с последними файлами. Пока их только девять (могло быть и больше, но экран не резиновый, да и горячих клавиш не хватает ^_^'). Туда добавляются все открытые или сохраннёные файлы за один сеанс работы. Тоесть этот список не сохраняется при выходе из программы. Самый последний открытый файл находится внизу списка. Кроме того, в этот список не попадает файл, открытый через командную строку - имеются проблемы с определением точного имени файла... Если в списке выбрать уже открытый файл, он будет открыт заново. Также если открываемый или сохряняемый файл уже есть в списке, его положение не меняется. Сохранение ---------- Если открыт какой-то файл и выбрана команда "Сохранить как", по умолчанию будет указано его имя. Даже если документ не изменился, команда "Сохранить" выполняется в обычном режиме. Тоесть она не блокируется никогда. Если файл не был ещё сохранён, то будет выдано окно сохранения файла. Поиск и замена -------------- Поиск текста выполняется со следующего символа после текущего. Тоесть если курсор стоит в начале искомого текста, этот текст будет пропущен. Замена же начинается с текущего символа. Общие диалоги ------------- В окнах сохранения и открытия нажатие кнопки "вниз" в текстбоксе ввода имени файла перемещает фокус на список файлов. Это очень похоже на MS-DOS Edit. В тех же окнах в боксе выбора каталога при выборе каталога возможны следующие действия. При нажатии Enter выберется нужный каталог, и фокус перейдёт на текстбокс ввода имени файла. При нажатии же пробела и кнопки "вправо", фокус останется на месте. Следует заметить, что при выделенном каталоге, отличном от текущего нажатие Enter не закроет окно, а выберет этот каталог. Маленькая заморочка стандартных диалогов... В окнах поиска и замены в текстбоксах работают комбинации, вставляющие (или заменяющие выделенный текст) специальные символы. Вот комбинации: * Ctrl+1 - CRLF * Ctrl+2 - CR * Ctrl+3 - LF * Ctrl+4 - TAB Нечто подобное было и в Блокноте для Windows. Только там было специальное меню. Здесь меню нет. ERRORLEVEL ---------- Программа устанавливает ERRORLEVEL для работы с пакетными файлами и другими программами. Вот значения кодов: 0 - Нормальное завершение работы. -1 - Аварийное завершение работы программы. Произошла необработанная ошибка. 1 - Не удалось загрузить общие диалоги - не хватает памяти. Дальнейшая работа программы в общем-то возможна, но с отключенными "сохранить", "открыть"... Программа просто завершается. 2 - Ошибка в командной строке. Использовался до того как начала обрабатоваться командная строка. Теперь зарезервирован на будущее. 3 - Не удалось установить новое разрешение экрана. 4 - Не удалось показать рабочий стол с новым разрешением. Скринсейвер ----------- Чтобы можно было без опесений писать хентайные фанфики, в программе предусмотрен простой скринсейвер. Он активируется нажатием ESC и закрывает весь экран. Отключается он также нажатием ESC. Diary.ru footer --------------- Этот диалог предназначен для вставки футера записи дневника. Я ввела его в тот момент когда мне надоело воевать с тем, что в клиенте нет пункта "настроение", который порой хочется указать. Ещё меня сильно разочаровало то, что когда указывается музыка или настроение стандартными средствами, то картинка (если есть) прижимается к этим тэгам. Некрасиво. Так что теперь буду использовать свои тэги. В диалоге работают клавиши вверх/вниз для перехода по элементам. Diary.ru tags ------------- Раз уж я пишу в Блокноте посты для дневника, я ввела вставку тэгов Diary.ru наподобие вставки тэгов HTML в Блокноте для Windows. Для каждого тэга назначена горячая клавиша. Все тэги есть в меню "Вставка\Diary.ru tag". Перекодировка ------------- Данная функция реализует только перекодировку между кодовыми страницами cp866 и windows-1251. За основу брались Win32 функции CharToOem() и OemToChar(). Работает это так. Если выделен блок текста, то перекодируется именно он. Если ни чего не выделено, то перекодируется весб текст. При нехватке памяти, возможна ошибка "Out Of String Space", а в остальном функция работает. Удаление -------- Удалите NoteBook.EXE, файлы конфигурации (где они сохранились). Если определили переменную среды NOTEBOOK_CONFIG_PATH, то нужно также удалить её определение. Типичная для DOS процедура. Маленький копирайт ------------------ 1. Программа распространяется бесплатно. 2. Вы имеете право распространять её на тех же условиях. 3. При распространении вы не имеете права менять авторство программы, присваивать его себе или каким-либо иным способом искажать его. 4. Разрешено коммерческое использование программы (в офисе, на производстве) за исключением её платного распространения или сдачи в аренду. 5. Программа распространяется как есть. Автор не несёт ответственности за любые трагедии или несчастные случаи, вызванные использованием программы. 6. Вы имеете право использовать ActiveX компоненты, поставляемые с программой, в собственных программах. При этом автор не гарантирует совместимость будущих версий компонентов. 7. Для любого пункта данного соглашения может быть сделано исключение с разрешения автора программы. 8. По любым вопросам, связанным с данной программой, обращайтесь по адресу lindaoneesama@gmail.com Загружено с http://purl.oclc.org/Linda_Kaioh/Homepage/