
                        4.8.  YES
                        ---------------

     YES  砥  㭪 Yes,  ।祭 
롮 ⢥ "", ""   . ᯮ 㫨
SCREEN, SEGMEM, WINDOW, MENU.


const
  YesPosition: Boolean = True;   { .  㪠⥫ }
  YesWinBckg: Byte = 7;  {  㭪樨 Yes }
  YesWinColr: Byte = 1;
  YesTitBckg: Byte = 7;
  YesTitColr: Byte = 12;


function Yes (Msg: ScreenLine): Boolean;
  {- ⢥ "a"  "" }


    ।। ६  YesPosition    砫쭮
 㪠⥫   ᫮ "" ( ""  YesPosition =
False).

    ६ YesWinBckg,  YesWinColr  ।  梥  ,
YesTitBckg, YesTitColr  -  梥   ᮬ.  祭
 ६  樠஢   砫  믮
ணࠬ  ᨬ  ⥪饣 梥⮢ ०.

    ਬ 맮 楤 Yes:

    if Yes(' ࠡ') then Halt;


      ਢ  ࠣ ணࠬ,  騩  -
짮 㭪樨 Yes   ⨯ "Pull-Down":


program MenuDemo;
{  "Pull-Down" -  }

{$I Screen }
{$I SegMem }
{$I Window }
{$I Menu }
{$I Yes  }

var
  Quit,Break: Boolean;
  MainMenu,Menu1,Menu2: MenuPtr;
  MainMode,Mode1,Mode2: Integer;
  b,c,p,a,x,y: Byte;
  x1,y1,x2,y2: Integer;
begin
  ProTest;
  LastWindow:=nil;
  With SList do
    begin
      N:=4; Seg[1]:=$1E; Seg[2]:=$1D; Seg[3]:=$1C; Seg[4]:=$1B;
    end;
  InitSegMem (SList,FList,WindowError);

  NewMenu (MainMenu);
  AddMode ( 5,1,'',MainMenu);
  AddMode (15,1,'樨',MainMenu);
  AddMode (25,1,'室',MainMenu);

  NewMenu (Menu1);
  AddMode (2,1,'㧨',Menu1);
  AddMode (2,2,'࠭',Menu1);
  AddMode (2,3,'  ',Menu1);

  NewMenu (Menu2);
  AddMode (2,1,'       ',Menu2);
  AddMode (2,2,'६       ',Menu2);
  AddMode (2,3,'஢   ',Menu2);
  AddMode (2,4,'࠭   ',Menu2);
  AddMode (2,5,'⠭',Menu2);

  if (MenuError<>0) then
     begin
       Writeln(^J^M^G' !');
       Halt;
     end;

  if (GetActMode)<>5 then
     begin
       Writeln(^J^M^G'㦥 ப 4-梥 ࠭!');
       Halt;
     end;

  x:=WhereX; y:=WhereY;
  x1:=WindMinX; y1:=WindMinY; x2:=WindMaxX; y2:=WindMaxY;
  p:=GetVisPalette; b:=GetBackGround; c:=GetColor; a:=GetActPage;
  SetVisPalette(1); SetActPage(2);

  SetBackGround(1); SetColor(0);
  YesWinBckg:=0; YesWinColr:=1; YesTitBckg:=0; YesTitColr:=3;
  ClrScr;
  Window(x1,y1,x2,y2);

  { 㥬   }
  SetBackGround(0); SetColor(3); ClrEol;
  OutMenu(MainMenu);

  SetVisPage(2);

  MainMode:=1; Mode1:=1; Mode2:=1;
  FrameChars:='Ŀ';
  {     }
  repeat

    SelectMode (MainMode,MainMenu,Quit);
    if not Quit then

       Case MainMode of

            1: begin
                 PullDown:=True;  {  "PullDown"   1 }
                 { 뢮  }
                 PushFrameWindow (1,2,13,6, 2,3, 0,0,'');
                 OutMenu(Menu1);
                 {    1 }
                 SelectMode(Mode1,Menu1,Break);
                 if Break then PopWindow
                 else
                    begin
                      { ࠡ⪠ ०  Mode1 }
                      { ... }
                      PopWindow;
                    end;
               end;

            2: begin
                 PullDown:=True;  {  "PullDown"   2 }
                 { 뢮  }
                 PushFrameWindow (11,2,26,8, 2,3, 0,0,'');
                 OutMenu(Menu2);
                 {    2 }
                 SelectMode(Mode2,Menu2,Break);
                 if Break then PopWindow
                 else
                    begin
                      { ࠡ⪠ ०  Mode2 }
                      { ... }
                      PopWindow;
                    end;
               end;

            3: Quit:=True;
       end;

    if Quit then Quit:=Yes(' ࠡ');

  until Quit;

  SetBackGround(b); SetColor(c);
  if a=2 then
     begin
       ClrScr;
       Window(x1,y1,x2,y2);
     end
  else
     begin
       SetActPage(a); SetVisPage(a);
       Window(x1,y1,x2,y2);
       GotoXY(x,y);
     end;
  SetVisPalette(p);

  DelMenu(MainMenu);
  DelMenu(Menu1);
  DelMenu(Menu2);
end.



                       4.8.  FILES
                       -----------------

     FILES 砥  ணࠬ, ᯥ稢 -
 䠩  ⠫ ᪮  ࠧ  User. ᯮ-
 㫨 SCREEN, SEGMEM, WINDOW, ENTRY, MENU.  FILES
ᯮ  ४⨢  {$V-},   ⪫砥
஫  ப ࠬ஢. ᬮਬ 䥩 -
 FILES:


const  {    롮 䠩 }
  FileB1: Byte=7; FileC1: Byte= 1;
  FileB2: Byte=7; FileC2: Byte=12;
  FileB3: Byte=3; FileC3: Byte=15;
  FileB4: Byte=4; FileC4: Byte=14;

const
  DirSize = 128;

type
  FNameStr= string[16]; {   䠩,  , User }

  FNameRec= record      { ᠭ   }
              Name: array [1..8] of Char;
              Ext:  array [1..3] of Char;
            end;

  DirRec  = record      { ᠭ ᥣ ⠫ }
              Len: Byte;
              Fil: array[1..DirSize] of FNameRec;
            end;


function FSplit (var FName: FNameStr; var Disk: Char;
                 var User: Byte): Boolean;
  {-   ⠢ : , , User    }
  {  室:                                               }
  { FName -   䠩,     User, }
  {         ਬ: A0:FILES.PAS                          }
  { Disk  -  ᪠  ᯮ짮  㬮砭        }
  { User  -  User  ᯮ짮  㬮砭       }
  {  室:                                              }
  { FName -  䠩  ᪠  User, ਬ: FILES.PAS }
  { Disk  - 室 Disk,  , 㪠        }
  { User  - 室 User,  User, 㪠        }
  {  = False, ᫨  室 FName 訡         }


function FExpand (var FName: FNameStr; var Disk: Char;
                  var User: Byte): Boolean;
  {-ନ஢   FName  , ᪠, User  }
  {  室:                                               }
  { FName -   䠩,     User  }
  { Disk  -    祭    䠩     }
  { User  -  User  祭    䠩     }
  {  室:                                              }
  { FName -   䠩  㪠묨 Disk  User       }
  {  = False, ᫨  室 FName 訡         }


function BDOSX (Fun: Byte; Parm: Integer): Integer;
  {-맮 BDOS  墠⮬ ᪮ 訡   }
  { 室: -1, ᫨ 訡,   ॣ A. }


function GetDir (var Mask: FNameStr; var Disk: Char;
                 var User: Byte; var Dir: DirRec): Boolean;
  {-祭 ⠫ ᪠                               }
  {  室:                                              }
  { Mask - ᪠ 䠩,   ᪮  User,         }
  {        ਬ: B2:*.PAS                              }
  {  室:                                             }
  { Mask -  ᪠ 䠩  ᪮  User; 롨 }
  {        ⥪騥   User ᫨  室 Mask   }
  { Disk - ࠭                                   }
  { User - ࠭ User                                  }
  { Dir  - 祭 ⠫                              }
  {  = False, ᫨ 訡  Mask                  }


procedure InputFileName (Prompt: ScreenLine;
                         var FileName: FNameStr;
                         var Break: Boolean);
  {-  䠩   }


procedure SelectFile (Sort: Byte; var Mask,FName: FNameStr;
                      var Disk: Char; var User: Byte;
                      var Break,MemErr: Boolean);
  {-롮 䠩                                       }
  {    室:                                       }
  { Sort   - ਧ ஢ (0-,1-,2-.) }
  { Mask   - ᪠ 䠩,     ᪠  }
  {          User; ᫨  㪠,  ⥪騥        }
  { FName  -  䠩, 㤠 ⠭ 㪠⥫     }
  {    室:                                      }
  { Mask   -  ᪠ 䠩  ᪮  User      }
  { FName  -  ࠭ 䠩                     }
  { Disk   -  ᪠  ࠭ 䠩             }
  { User   -  User  ࠭ 䠩            }
  { Break  - ਧ ⪠ Esc                       }
  { MemErr - ਧ ९                  }



    । ᯮ짮  ணࠬ    FILES 室
⠭  梥⮢ ( ᨬ  梥⮢ ० -
), ᠢ   ᫥騥 ।। ६:

    FileB1,FileC1 -  梥⮢ 䮭  ।   
                    롮 䠩;
    FileB2,FileC2 -  梥⮢  䮭  ।   -
                     ;
    FileB3,FileC3 -  梥⮢  䮭  ।   -
                     ப   䠩  楤-
                     InputFileName;
    FileB4,FileC4 -  梥⮢ 䮭  ।    -
                    饭  騡.

    ⠭ DirSize  ।  ᨬ쭮 ⢮ -
⮢ ᨢ  ⠫ 䠩.

     FILES ।⠢ 짮⥫   㪠-
     䠩    ⮫쪮  ᪠,     
User, ਬ:

    FILES.PAS
    A:FILEDEMO.COM
    5:FUTURE.FNT
    B0:LIB3.TXT
    D15:OLD.BAK

     ࠡ⪨  ⠪    ࠧࠡ⠭ ᯥ樠 㭪樨
FSplit  FExpand,   ᮮ⢥⢥ ࠧ   
䠩  ⠢ ,  ,    -
.

    樠쭠 㭪 BDOSX  筠  ⠭⭮  㭪樨
BDOS,  ᯥ稢 墠 ⠫ ᪮ 訡. -
ணࠬ BDOSX  ᯮ짮    맮  㭪権  BDOS,
易  뢮  ࠭.

    ⭠ 㭪  GetDir ᯮ  祭 ⠫
᪠   ᪥ (, 饩  ᪠  
User)  ६ ⨯ DirRec.

    楤 InputFileName    䠩  -
, ਬ,   ࠭   ᪥.

    楤 SelectFile  ᭮  ᯥ稢 롮
䠩  ⠫  ᪠    User.  -
楤 ᯮ  襯᫥ ணࠬ.

    室 ࠬ஢   楤 SelectFile - :   ਧ
஢ (0..2),  ᪠ 롨ࠥ 䠩,  , 
 ᪠  User,   ⠪  䠩,   ஥ 㦭 ⠭-
 㪠⥫. ᫨  ᪥  ᪠  /  User  㪠,
롨 ⥪騥   User.   ࠬ,  ஬ ਧ
஢,  室묨.  ਧ MemErr ⠭
 砥 ९ ᪮     ନ஢ 
 ,  ਧ Break -  ⨨  ESC.   ᫨ 
 ࠬ  祭 False,   砥,   䠩
࠭,   ᯮ짮  ,  ⠪   User  -
⢥ ᮮ⢥ ࠬ஢.

    : 騥   User ணࠬ    -
.

    ਬ 맮 SelectFile:


    Program FileDemo;

    {$I Screen }
    {$I SegMem }
    {$I Window }
    {$I Menu   }
    {$I Entry  }
    {$I Files  }
    ...

    var
      Mask,FName: FNameStr;
      User: Byte;
      Error,Break: Boolean;
      Disk: Char;
    ...

    begin
      ProTest;
      ...

      { . ᥣ⭮ ᪮   ⥪ }
      LastWindow:=nil;
      With SList do
      begin
        N:=4;
        Seg[1]:=$1B; Seg[2]:=$1C; Seg[3]:=$1D; Seg[4]:=$1E;
      end;
      InitSegMem(SList,FList,WindowError);

      { 樠  梥⮢  4- 梥⭮ ० }
      FileB1:=0; FileC1:=1; FileB2:=0; FileC2:=3;
      FileB3:=2; FileC3:=3; FileB4:=3; FileC4:=0;

      { 樠 ᪨ }
      Mask:=Chr(BDOS($19)+$41)+'0:*.*';
      FName:='';  { ⠭   䠩 }


      ...

      SelectFile (0,Mask,FName,Disk,User,Break,Error);
      if Error then   {   }
         ...   { ਩ 室  뤠祩 ᮮ饭 }
      else
        if not Break then
          writeln(Disk,':\User',User:1,'\'+FName);

      ...
    end.


    ࠭   User  ⠭ :

    BDOS($0E,Ord(Disk)-$41); BDOS($20,User);

     祭 ⥪ 祭 ᪠  User  ᯮ짮-
 :

    Disk:=Chr(BDOS($19)+$41); User:=BDOS($20,$FF);


                       *** ORIONSOFT ***
