Пятнадцать байтов на стек от конца (RSS Feed) on Nostr: edlin Намедни в новостях промелькнуло, что ...
edlin
Намедни в новостях промелькнуло, что Микрософт откопал и выложил в открытый доступ доисторические тексты 86-DOS, который позже превратился в MS-DOS. Там не так много (
https://github.com/DOS-History/Paterson-Listings), но среди прочего фрагмент EDLIN, текстового редактора той эпохи. То есть EDLIN старше чем сам MS-DOS.
У меня с детства слабость к текстовым редакторам. Никогда не приходилось пользоваться EDLIN, и я подумал, пора бы научиться. Но не ползать же по ассемблерным исходникам, выясняя фичи. Можно запрячь ИИ для благородной цели.
Я взял аутентичные исходники EDLIN, благо Микрософт открыл их два года назад в составе MS-DOS 4.0. Подсунул ассемблерные тексты Курсору и говорю: перепиши на современный Си11. Он пошуршал и переписал. Хорошо, говорю, а теперь изучи как оно работает и документирую. Тоже сделал. И тестами покрыл. Вот вам готовый проект того самого EDLIN в современном переносимом виде.
- Репозиторий на Гитхабе: sergev/edlin (
https://github.com/sergev/edlin)
- Руководство пользователя: Manual.md (
https://github.com/sergev/edlin/blob/main/Manual.md)
- Введение в EDLIN для чайников: Tutorial.md (
https://github.com/sergev/edlin/blob/main/Tutorial.md)
Пример:
$ edlin main.c
*93p
93: int main(int argc, char **argv)
94: {
95: char *path = NULL;
96: int binary = 0;
97: if (parse_invocation(argc, argv, &path, &binary) != 0) {
98: msg_ndname();
99: return 1;
100: }
101:
102: Editor ed;
103: editor_init(&ed);
104: ed.disp_rows = env_u("EDLIN_LINES", tty_rows());
105:
106: if (fileio_startup(&ed, path, binary) != 0) {
107: editor_free(&ed);
*_
https://www.dreamwidth.org/tools/commentcount?user=vak&ditemid=1538257 comments
https://vak.dreamwidth.org/1538257.htmlPublished at
2026-05-02 04:28:33 UTCEvent JSON
{
"id": "b85a1406523b7fd4055ff1eff491853305c7a34fbd5b4e59efb3fd58cf992bfb",
"pubkey": "62adc59d5085062991690e42673a68e3530bfb35d97cbde4508ccdd38c512371",
"created_at": 1777696113,
"kind": 1,
"tags": [
[
"t",
"компьютерная археология"
],
[
"d",
"atomstr:https://vak.dreamwidth.org/1538257.html"
],
[
"proxy",
"https://vak.dreamwidth.org/data/rss#https%3A%2F%2Fvak.dreamwidth.org%2F1538257.html",
"rss"
]
],
"content": "edlin\n\nНамедни в новостях промелькнуло, что Микрософт откопал и выложил в открытый доступ доисторические тексты 86-DOS, который позже превратился в MS-DOS. Там не так много (https://github.com/DOS-History/Paterson-Listings), но среди прочего фрагмент EDLIN, текстового редактора той эпохи. То есть EDLIN старше чем сам MS-DOS.\n\nУ меня с детства слабость к текстовым редакторам. Никогда не приходилось пользоваться EDLIN, и я подумал, пора бы научиться. Но не ползать же по ассемблерным исходникам, выясняя фичи. Можно запрячь ИИ для благородной цели.\n\nЯ взял аутентичные исходники EDLIN, благо Микрософт открыл их два года назад в составе MS-DOS 4.0. Подсунул ассемблерные тексты Курсору и говорю: перепиши на современный Си11. Он пошуршал и переписал. Хорошо, говорю, а теперь изучи как оно работает и документирую. Тоже сделал. И тестами покрыл. Вот вам готовый проект того самого EDLIN в современном переносимом виде.\n\n- Репозиторий на Гитхабе: sergev/edlin (https://github.com/sergev/edlin)\n- Руководство пользователя: Manual.md (https://github.com/sergev/edlin/blob/main/Manual.md)\n- Введение в EDLIN для чайников: Tutorial.md (https://github.com/sergev/edlin/blob/main/Tutorial.md)\n\nПример:\n\n$ edlin main.c \n*93p\n 93: int main(int argc, char **argv)\n 94: {\n 95: char *path = NULL;\n 96: int binary = 0;\n 97: if (parse_invocation(argc, argv, \u0026path, \u0026binary) != 0) {\n 98: msg_ndname();\n 99: return 1;\n 100: }\n 101: \n 102: Editor ed;\n 103: editor_init(\u0026ed);\n 104: ed.disp_rows = env_u(\"EDLIN_LINES\", tty_rows());\n 105: \n 106: if (fileio_startup(\u0026ed, path, binary) != 0) {\n 107: editor_free(\u0026ed);\n*_\n\nhttps://www.dreamwidth.org/tools/commentcount?user=vak\u0026ditemid=1538257\n comments\n\nhttps://vak.dreamwidth.org/1538257.html",
"sig": "979594fb037dcb22f8770a2026f39cab453abd8cac80364ad6887783b68c0477c4117e422632c20ba2325073a6aad36ead32d29488d07aeebe295972cfaa0bfb"
}