[an error occurred while processing this directive]


( Программа для демонстрации возможностей BForth 

( Данная программа реализует просмотр текстовых файлов 
( на любом устройстве АГАТ( которое зарегистрировалось ) 

( Кнопки: ESC- выход из любого меню 
( В основном режиме: "."- смена логического устройства 
(                  ENTER- просмотр выбранного файла 

( Написана 10.94 

Hex 

0 Variable Aborted 
: Aborted? Aborted ` False Aborted ! ; 
: Aborted! True Aborted ! ; 

( Блок работы для смены устройства------------------------ 
: SetBrdPlace Dup 2* 2 ` + WinX ` + 3 - 1 WinY @ + Over 2+ 
              Over 2+ ; 
: LMenu Dup 1 = IfNot 1- Then False ; 
: RMenu Dup 0 ` = IfNot 1+ Then False ; 
: EscMenu Drop 0 True ; 

RightKey LeftKey EscapeKey EnterKey 4 
NCase MenuSw 
True EscMenu LMenu RMenu False 

: ShowMenu      ( Покажем меню для устройств
  PushState Coff Dup 
  2* 2+ ¤" Устройства" Dup c` 3 + Rot Max 0 ! ( Длина рамки 
  WinWidth ` 0 ` - 2/ ( Координата по X рамки 
  WinDepth ` 4 - 2/   ( По Y 
  Over 0 ` + 
  Over 4 + Window     ( Объявим окно 

  GetWindow 1 Border WinWidth ` Over c` - 2/ 0 GotoXY 
  Outs      ( Выведем название рамки 
  0 !       ( Число устройств в 0 
  WinWidth ` 0 ` 2* - 2/ 1+ Dup 2 ! 2 GotoXY 
  0 ` 1 Do  ( Цикл по всем устройствам 
   i &c0 + Out Space 
  Loop 
  1         ( Текущее устройство 
( В 2 координата по X для 1 устройства 
  Begin 
   SetBrdPlace 0 Border 
   Get 
   >r SetBrdPlace 3 Border r> 
   MenuSW 
  Until 
  PopState 
; 

: SetReqDev     ( Установим логическое УСТРОЙСТВО по номеру 
   2 0 c! &40 + 1 c! &3a 2 c! 
   0 2 Latest Pfind ( Найдем слово или нет 
   If
    Drop  ( Удалим длину слова
    Cfa   ( Выдадим адрес на исполнение 
    Exec True
   Else
    False
   Then
;

: ChangeDrive   ( Сменим активное логическое УСТРОЙСТВО 
   QLogDev `    ( Число УСТРОЙСТВ на стек 
   ShowMenu     ( Покажем меню
   SetReqDev    ( Установим требуемое устройство
;  

( Блок работы с файловой структурой--------------------- 
&11 ¤Variable MyFileName 

: BcUp Dup Bank5 = 
   IfNot 2- &20 0 Do 1- Dup c` &20 < 
                   If leave Then 
                  Loop 
    UpKey Out 
   Then False 
; 

: BcDown Dup Count + 2+ Dup c` 
   If DownKey Out Else Drop Then False ; 

: BcEnter Dup >r Dup Count 1+ + c` 
   If Beep 
    Else 
     1 Text64 Screen Drop 
     MyFileName ¤! 
     2 setmem MyFileName Bank5 ReadFile 
     ." Просмотр файла:" MyFileName OutS cr 
     ." ---------------------------------------------------" 
     GetWindow 2Swap 2+ 2Swap Window Bank5 
     Begin 
      Dup Dup WinDepth ` 1- SkipStr Dup >r Over - Type 
      ." Nажмите любую клавишу" Get EscapeKey = 
      If Lev True 
       Else i r> c` 0= ToBegStr WinWidth ` 1- spaces 
            ToBegStr 
      Then 
     Until 
     Drop SwapsPar ShowScreen 1 setmem 
   Then sp! r> False ; 

: FillEndStr PushState Dup Outs &10 Over c` - Spaces 
             PopState ; 

: SetInverseLine Inverse FillEndStr ; 
: SetNormalLine Normal FillEndStr ; 

0 Variable AllFiles 

&81 Constant BcId 

: ShowCatalog  0 AllFiles ! Home 
  bank5 1 5 OutD Coff 
  Bank5 WinDepth ` 1- 0 
  Do 
   Dup c` 
   If 
    Count 2Dup Type 2+ + AllFiles 1+! 
   Else 
    Leave 
   Then 
   i i' = IfNot Cr Then 
  Loop Drop 0 0 GotoXY 
; 

: BcChDrive 1 Text32 Screen Drop ChangeDrive SwapsPar 
  ShowScreen If Drop ShowCatalog Bank5 Then False ; 

&82 UpKey DownKey EnterKey EscapeKey 5 NCase BcKeys 
True BcEnter BcDown BcUp BcChDrive False 

: TypeFiles 
   BcId SetId 2 alloc 
   IfNot ." Нет памяти для программы" get 
   Else 
    1 setmem 0 Text32 Screen Drop ." BForth TextViewer" 
    cr ." --------------------" 
    GetWindow 2Swap 2+ 2Swap Window ¤" *.*" ShowCatalog 
    Bank5 Begin SetInverseLine Get >r SetNormalLine r> 
    BcKeys Until 
   Then Free 
; 

TypeFiles 

[an error occurred while processing this directive]