home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / perqb / pq2scr.pas < prev    next >
Pascal/Delphi Source File  |  2020-01-01  |  8KB  |  291 lines

  1. module KermitScreen;
  2.  
  3. {=============================} exports {=====================================}
  4.  
  5. imports KermitGlobals from KermitGlobals;
  6.  
  7. const
  8.         MessageWindow   =   1;
  9.         MainWindow      =   2;
  10.         TermWindow      =   3;
  11.         ProgrWindow     =   4;
  12.         StatusWindow    =   5;
  13.  
  14.         KermitFont      =   'sys:Boot>Fix13N.Kst';
  15.  
  16. type    WinType         =   MessageWindow..StatusWindow;
  17.  
  18. procedure   PutMessage( ErrMsg : String );  
  19. procedure   PutChr( Ch : Char );
  20. procedure   BackSpace( Ch : Char );
  21. procedure   SwitchWindow( ToWindow : WinType );
  22. procedure   CurrentWindow( Var InWindow : WinType );
  23. procedure   InitScreen;
  24. procedure   CleanupScreen;
  25. procedure   InitTermScreen;
  26. procedure   CleanupTermScreen;                           
  27.  
  28. procedure   InitProgress;
  29. procedure   ShowSRFile( Send    : boolean; 
  30.                     var Fname1, 
  31.                         Fname2  : PString );
  32. procedure   ShowPackNum;
  33.  
  34. {==============================} private {===================================}
  35.                            
  36. imports PopUp from PopUp;
  37. imports Screen from Screen;
  38. imports System from System;
  39. imports IOUtils from IOUtils;
  40.  
  41. const   MaxHeight   =   1023;   { Number of Pixels }
  42.  
  43.         CWinHeight  =   90;
  44.         CWinBegY    =   MaxHeight - CWinHeight;
  45.  
  46.         SWinHeight  =   130;
  47.         SWinBegY    =   0;
  48.  
  49.         PWinHeight  =   SWinHeight;
  50.         PWinBegY    =   SWinBegY;
  51.  
  52.         TWinHeight  =   400;
  53.         TWinBegY    =   SWinHeight;
  54.  
  55.         MWinBegY    =   TWinBegY + TWinHeight;
  56.         MWinHeight  =   CWinBegY - MWinBegY;
  57.  
  58.         FullWidth   =   768;
  59.  
  60.         SWinWidth   =   300;
  61.         SWinBegX    =   FullWidth - SWinWidth;
  62.  
  63.         PWinWidth   =   FullWidth - SWinWidth;
  64.         PWinBegX    =   0;
  65.  
  66.         PTopM       =   20;
  67.         PLeftM      =   10;
  68.         
  69.         Frame       =    5;
  70.         
  71. var
  72.         CurrFont                                : FontPtr;
  73.         MessY, PackY, RetrY, File1Y, File2Y,
  74.         LeadX, ValX, Fwidth, Fheight, FChars    : integer;
  75.  
  76.  
  77. {=============================================================================}
  78.  
  79. procedure SwitchWindow( ToWindow:WinType );
  80. begin
  81.     ChangeWindow( ToWindow );
  82. end;
  83.                                      
  84. {=============================================================================}
  85.  
  86. procedure CurrentWindow( VAR InWindow:WinType );
  87. var D1,D2,D3,D4     : integer;   { Dummy variables for the window parameters }
  88.     D5              : boolean;   { in which we are not interested. }
  89.     Win             : WinRange;
  90. begin
  91.     GetWindowParms( Win, D1, D2, D3, D4, D5 );
  92.     InWindow := Win; { Note the type conversion: Screen is not re-exported. }
  93. end;
  94.  
  95. {=============================================================================}
  96.  
  97. procedure   PutMessage(ErrMsg:String);
  98. var     SaveWin :   WinType;
  99. begin
  100.     CurrentWindow( SaveWin );
  101.     ChangeWindow( MessageWindow );
  102.     writeln(ErrMsg);
  103.     ChangeWindow(SaveWin);
  104. end; { PutMessage }
  105.  
  106. {=============================================================================}
  107.  
  108. procedure PutChr( Ch : Char );
  109. begin
  110.     SPutChr( Ch );
  111. end;
  112.  
  113. {=============================================================================}
  114.  
  115. procedure BackSpace( Ch : Char );
  116. begin
  117.     SBackSpace( Ch );
  118. end;
  119.  
  120. {=============================================================================}
  121.  
  122. procedure InitProgress;
  123. var OldWin                      : WinType;
  124.     OrgX, OrgY, Width, Height   : integer;
  125.     WindX                       : WinRange;
  126.     HasTitle                    : boolean;
  127. begin
  128.     CurrentWindow( OldWin );
  129.     SwitchWindow( ProgrWindow );
  130.     GetWindowParms( WindX, OrgX, OrgY, Width, Height, HasTitle );
  131.     CurrFont := GetFont;
  132.     PutChr( FF );
  133.     FHeight := CurrFont^.Height;
  134.     FWidth := CurrFont^.index[ord(' ')].Width;   { Assume fixed width font }
  135.     LeadX := OrgX + PLeftM;
  136.     FChars := ((PWinWidth - LeadX - Frame) DIV FWidth) - 12;
  137.     ValX  := LeadX + 20*FWidth;
  138.     MessY := OrgY + PTopM;
  139.     PackY := MessY + 2*FHeight;
  140.     RetrY := PackY + FHeight;
  141.     File1Y := RetrY + round( 1.5*FHeight );
  142.     File2Y := File1Y + FHeight;
  143.  
  144.     SSetCursor( LeadX, MessY );
  145.     write( KermitMessage );
  146.     SSetCursor( LeadX, PackY );
  147.     write( 'Packet number : ' );
  148.     SSetCursor( LeadX, RetrY );
  149.     write( 'Retries       : ' );
  150.     SwitchWindow( OldWin );
  151. end;
  152.  
  153. {=============================================================================}
  154.  
  155. procedure ShowSRFile(   Send   : boolean; 
  156.                     VAR Fname1,
  157.                         Fname2 : FNameType );
  158. var OldWin      : WinType;
  159.     Test1,Test2 : PString;
  160.  
  161. procedure OutFName( F : FNameType );
  162. var SS : FNameType; 
  163.     L  : Integer;
  164. begin
  165.     if Length(F)>FChars then begin 
  166.         L := (FChars-5) DIV 2;
  167.         SS := SubStr( F, 1, L );
  168.         write( SS, '.....' );
  169.         SS := SubStr( F, Length(F)-L, L );
  170.         write(SS);
  171.     end else
  172.         write(F);
  173. end;
  174.  
  175. begin
  176.     CurrentWindow( OldWin );
  177.     SwitchWindow( ProgrWindow );
  178.     CurrFont := GetFont;
  179.     RasterOp( RXor, PWinWidth-LeadX-Frame, Trunc(FHeight*2.5),
  180.                     LeadX, File1Y-FHeight, SScreenW, SScreenP,
  181.                     LeadX, File1Y-FHeight, SScreenW, SScreenP );
  182.     SSetCursor( LeadX, File1Y );
  183.     if Send then 
  184.         write( 'Sending   : ')
  185.     else
  186.         write( 'Receiving : ');
  187.     OutFName( Fname1 );
  188.     Test1 := FName1;
  189.     Test2 := FName2;
  190.     if (Fname2<>'') and (Test1<>Test2) then begin
  191.         SSetCursor( LeadX, File2Y );
  192.         write( 'Perq file : ');
  193.         OutFName( Fname2 );
  194.     end;
  195.     SwitchWindow( OldWin );
  196. end;
  197.  
  198. {=============================================================================}
  199.  
  200. procedure ShowPackNum;
  201. var OldWin : WinType;
  202. begin
  203.     CurrentWindow( OldWin );
  204.     SwitchWindow( ProgrWindow );
  205.     SSetCursor( ValX, PackY );
  206.     write( NN:4 );
  207.     SSetCursor( ValX, RetrY );
  208.     write( TotTry:4 );
  209.     SwitchWindow( OldWin );
  210. end;
  211.  
  212. {=============================================================================}
  213.  
  214. procedure   InitScreen;
  215. var f : fontPtr;
  216. begin
  217.     ScreenReset;
  218.  
  219.     CreateWindow(   MessageWindow,
  220.                     0,      { x-origin }
  221.                     CWinBegY,
  222.                     FullWidth,
  223.                     CWinHeight,
  224.                     'Messages');
  225.     
  226.     CreateWindow(   MainWindow,
  227.                     0,      { x-origin }
  228.                     MWinBegY,
  229.                     FullWidth,
  230.                     MWinHeight,
  231.                     'Kermit-Perq');
  232.     
  233.     CreateWindow(   TermWindow,
  234.                     0,
  235.                     TWinBegY,
  236.                     FullWidth,
  237.                     TWinHeight,
  238.                     'Remote Kermit');
  239.     
  240.     CreateWindow(   StatusWindow,
  241.                     SWinBegX,
  242.                     SWinBegY,
  243.                     SWinWidth,
  244.                     SWinHeight,
  245.                     'Line parameters');
  246.     
  247.     CreateWindow(   ProgrWindow,
  248.                     PWinBegX,
  249.                     PWinBegY,
  250.                     PWinWidth,
  251.                     PWinHeight,
  252.                     'Transmit progress');
  253.     
  254.     ChangeWindow(TermWindow);
  255.     f := ReadFont(KermitFont);
  256.     if f=NIL then begin
  257.         ChangeWindow(MainWindow);
  258.         writeln('Can''t find font file ',KermitFont,' - aborted!');
  259.         raise ExitProgram;
  260.     end;
  261.     ChangeWindow(MainWindow);
  262.  
  263. end { InitScreen };
  264.  
  265. {=============================================================================}
  266.  
  267. procedure CleanupScreen;
  268. begin
  269.     ScreenReset;
  270. end; 
  271.   
  272. {=============================================================================}
  273.  
  274. procedure InitTermScreen;
  275. begin
  276.     ChangeWindow( TermWindow );
  277.     IOCursorMode( TrackCursor );
  278.     SCurChr( '_' );
  279.     SCurOn;
  280.     InitPopUp;
  281. end;
  282.  
  283. {=============================================================================}
  284.  
  285. procedure CleanupTermScreen;
  286. begin
  287.     ChangeWindow( MainWindow );
  288. end.
  289. {=============================================================================}
  290.  
  291.