listmkt v0.3.5a (c) AtH, 8 апреля 2015, Файл: B011.mkt   0 \ Редактор EDIT, #11, 20150417   1 \ S.H.Daniel, июль 1981; И.В.Васильев, апрель 2015   2 \ См. FORTH DIMENSIONS, Volume III, number 3   3    4 base @  forth definitions  hex   5 : text  ( c −−)   here c/l 1+ blank  word  pad c/l 1+ cmove ;   6 : line   \ #строки −− адрес   ; даёт адрес строки в буфере   7   ↑ −40 and 17 ?error scr @ (line) drop ;   8 vocabulary editor immediate   9 : edit  ( n −−)   scr !  [compile] editor ;  10 editor definitions  11 : #locate   ( −− смещение−курсора #строки)   r# @ c/l /mod ;  12 : #lead  ( −− адрес−строки смещение−курсора)   #locate line ↔ ;  13 : #lag  ( −− адр−курсора байт−до−eol)   #lead ↑ >r + c/l r> − ;  14 : −move  ( из−адреса в−строку# −−)   line c/l cmove ;  15 : buf−move \ адр−буф −− ; записывает в адр−буф текст, если есть  16   pad 1+ c@ if pad ↔ c/l 1+ cmove else drop then ;  17 : >line#  ( −− текущий−номер−строки)   #locate ↔ drop ;  18 : find−buf    ( −−a)   pad  50 + ;   \ буфер для любого поиска  19 : insert−buf  ( −−a)   pad 0a0 + ;   \ буфер для всех вставок  20 : (hold)  \ #строки −− ; без разрушения копирует строку в INSERT  21   line insert−buf 1+ c/l ↑ insert−buf c! cmove ;  22 : (kill)  ( #строки −−)  line c/l blank ;  \ опробеливает строку  23 : (spread)  ( −−)   >line# ↑  line ↑ c/l + 46f8 over −  24   ↑ 0> if cmove> else drop 2drop then (kill) ;   \ раздвигает  25   26 : x  ( −−)   >line# ↑ (hold) line ↑ c/l + ↔ 46b8 over −  27   ↑ 0> if cmove else drop 2drop then 2f (kill) ;   \ eXtract  28 : display−cursor  ( −−)   ↵ \ выводит текущую строку  29   #locate i. drop #lead type 0 emit #lag −trailing type ;  30 : t  ( #строки −−)   c/l × r# ! display−cursor ; \ Type строку n  31 : l  ( −−)   scr @ list ;  \ List вывести редактируемый экран  32 : (r)  ( −−) >line# insert−buf 1+ ↔ −move ; \ замещает из INSERT  33 : p  ( −−)   5e text insert−buf buf−move (r) ; \ Put ввод строки  34 : wipe  ( −−)   scr @ buffer b/buf blank ; \ очищает ред−й экран  35 : n  ( −−)    1 scr +! ;   \ Next на следующий экран  36 : b  ( −−)   −1 scr +! ;   \ Back на предыдущий экран  37 : u  ( −−)   c/l r# +!  (spread)  p ;   \ Under вставить строку  38 : m  ( #блока #строки −−)   scr @ >r  r# @ >r  >line# (hold)  39   ↔ scr ! 1+ c/l × r# !  (spread) (r)  r> c/l + r# ! r> scr ! ;  40 : i  ( −−)   5e text  insert−buf buf−move   \ Insert вставка  41   insert−buf count #lag rot over min >r   i r# +!   i − >r  42   ↑ here i cmove   here #lead + r> cmove   r> cmove  43   display−cursor ;  44 : ls  ( нач кон −−)   over − 1+ for ↵ ↑ 2 i.r space  45   ?break ↑ scr @ (line) type1 1+ next drop ;   \ вывести строки  46 : sv  ( −−)   update flush ;  \ Записывает редак−й экран на диск  47 forth definitions  base !