home *** CD-ROM | disk | FTP | other *** search
/ POINT Software Programming / PPROG1.ISO / pascal / visionix / demos / vterm.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-12-29  |  5.0 KB  |  289 lines

  1. Program vterm;
  2.  
  3. Uses
  4.  
  5.   VTypesu,
  6.   VInu,
  7.   VOutu,
  8.   VCrtu,
  9.   VAnsiiou,
  10.   VAvtiou,
  11. {$IFDEF DEBUG}
  12.   VDebugu,
  13. {$ENDIF}
  14.   VKeybu,
  15.   VFosu,
  16.   VMultiu,
  17.   VGenu,
  18.   VResfu,
  19.   VStringu,
  20.   VUartu,
  21.   VSerlu,
  22.   VSeru,
  23.   VSerhu;
  24.  
  25. {────────────────────────────────────────────────────────────────────────────}
  26.  
  27. Procedure DoStatusLine( Status : BYTE; IData : POINTER ); Far;
  28.  
  29. Var
  30.  
  31.   S    : STRING;
  32.   SerH : TSerHandle;
  33.   N    : LONGINT;
  34.  
  35. BEGIN
  36.  
  37.   SerH := PSerHandle( IData )^;
  38.  
  39.   { setup header }
  40.  
  41.   S :=' VisionTerm - Alt<Q>=Quit │';
  42.  
  43.   { setup carrier string }
  44.  
  45.   S := S + BoolToStr( VSerCarrier( Serh ), ' Carrier  │', '          │' );
  46.  
  47.   { setup incoming characters string }
  48.  
  49.   S := S + BoolToStr( VSerInAvail( Serh ), ' Incoming │', '          │' );
  50.  
  51.   { setup trailer }
  52.  
  53.   S := S+' '+PadRight( IntToStr( VSerGetInAvail( Serh ) ), 9, ' ' ) + '│';
  54.  
  55.   S := S+'          │ ';
  56.  
  57.   S := PadRight( S, 80, ' ' );
  58.  
  59.   { write it out }
  60.  
  61.   WriteStringAt( 1, ScreenRows, Black, LIGHTGRAY, S );
  62.  
  63. END;
  64.  
  65.  
  66. {────────────────────────────────────────────────────────────────────────────}
  67.  
  68. Function VisionTerm : WORD;
  69.  
  70. Var
  71.  
  72.   SerH : TSerHandle;
  73.   Err  : WORD;
  74.   SaveX: BYTE;
  75.   SaveY: BYTE;
  76.   SaveS: POINTER;
  77.   Done : BOOLEAN;
  78.   Fos  : BOOLEAN;
  79.   LL   : BYTE;
  80.  
  81.   {──────────────────────────────────────────────────────}
  82.  
  83.   Function SetupPort( ThePort : INTEGER;
  84.                       Baud    : INTEGER    ) : WORD;
  85.  
  86.  
  87.   Var
  88.  
  89.     CP : TCommParam;
  90.  
  91.   BEGIN
  92.  
  93.     { Create new serial channel }
  94.  
  95.     Fos := VRF_GetBoolean('USEFOSSIL');
  96.  
  97.     If Fos Then
  98.       Err := VSerChanNew( 0,
  99.                           FosSerDriverProc,
  100.                           ThePort,
  101.                           0,
  102.                           0,
  103.                           SerH )
  104.     Else
  105.       Err := VSerChanNew( 0,
  106.                           UartSerDriverProc,
  107.                           ThePort,
  108.                           0,
  109.                           0,
  110.                           SerH );
  111.  
  112.     If Err<>0 Then
  113.     BEGIN
  114.       SetupPort := Err;
  115.       Exit;
  116.     END;
  117.  
  118.     { activate/initialize the channel }
  119.  
  120.     CP.BaudRate   := VRF_GetInt( 'BAUDRATE' );
  121.     CP.Parity     := 'N';
  122.     CP.DataBits   := 8;
  123.     CP.StopBits   := 1;
  124.  
  125.     Err := VSerChanActivate( SerH, @CP );
  126.  
  127.     If Err<>0 Then
  128.     BEGIN
  129.       SetupPort := Err;
  130.       Exit;
  131.     END;
  132.  
  133.     SetupPort := 0;
  134.  
  135.   END;
  136.  
  137.  
  138.   {──────────────────────────────────────────────────────}
  139.  
  140.  
  141.   Function Initialize : WORD;
  142.  
  143.   Var
  144.  
  145.     CP : TCommParam;
  146.     Err: WORD;
  147.  
  148.   BEGIN
  149.  
  150.     VRF_New( 'VTERM.VRF', 200 );
  151.  
  152.     Err := SetupPort( VRF_GetInt( 'COMPORT'  ),
  153.                       VRF_GetInt( 'BAUDRATE' )  );
  154.  
  155.     { add the ANSI and Avatar filters to the CRT output channel }
  156.  
  157.     AttachAnsiFilter(   CrtOCH, 'Bx00VMEM' );
  158.  
  159.     AttachAvatarFilter( CrtOCH, 'Bx00VMEM' );
  160.  
  161.  
  162.     { launch the multi-proc that does the status line }
  163.  
  164.  
  165.     If VRF_GetBoolean( 'STATUSLINE' ) Then
  166.     BEGIN
  167.  
  168.       VMultiProcNew( DoStatusLine,        { procedure address }
  169.                      10,                  { every 10/100 of a sec }
  170.                      7,                   { medium priority }
  171.                      'VT-StatusLine',     { name }
  172.                      @SerH,               { instance data }
  173.                      Err               );
  174.  
  175.       { Setup the screen }
  176.  
  177.       LL := ScreenRows-1;
  178.  
  179.     END
  180.     ELSE
  181.       LL := ScreenRows;
  182.  
  183.     Window( 1,1,ScreenCols,LL );
  184.  
  185.     TextColors( lightgray, black );
  186.  
  187.     ClrScr;
  188.  
  189.     { finish up }
  190.  
  191.     Initialize := Err;
  192.  
  193.   END;
  194.  
  195.   {──────────────────────────────────────────────────────}
  196.  
  197.   Procedure DeInit;
  198.  
  199.   BEGIN
  200.     VSerChanDispose( Serh );
  201.  
  202.   END;
  203.  
  204.   {──────────────────────────────────────────────────────}
  205.  
  206.   Procedure DoExtendedKey( CH : CHAR );
  207.  
  208.   BEGIN
  209.  
  210.     Case CH Of
  211.       kAltQ : Done := TRUE;
  212.     END;
  213.  
  214.   END;
  215.  
  216.   {──────────────────────────────────────────────────────}
  217.  
  218.   Function TermLoop : WORD;
  219.  
  220.   Var
  221.  
  222.     CH   : CHAR;
  223.  
  224.   BEGIN
  225.  
  226.     Done := FALSE;
  227.  
  228.     Repeat
  229.  
  230.       { Read keyboard }
  231.  
  232.       If KeyPressed Then
  233.       BEGIN
  234.         CH := ReadKey;
  235.         If CH<>#0 Then
  236.           VSerWriteCh( Serh, CH )
  237.         ELSE
  238.           DoExtendedKey( ReadKey );
  239.       END;
  240.  
  241.       { Read serial port }
  242.  
  243.       IF VSerInAvail( SerH ) Then
  244.         Write( VSerGetStEx( Serh, VSerGetInAvail( Serh ) ) );
  245.  
  246.     Until Done;
  247.  
  248.   END;
  249.  
  250.   {──────────────────────────────────────────────────────────────────────────}
  251.  
  252.  
  253.  
  254. BEGIN
  255.  
  256.   Err := Initialize;
  257.  
  258.   If Err=0 Then
  259.   BEGIN
  260.     Err := TermLoop;
  261.   END;
  262.  
  263.   DeInit;
  264.  
  265.   VisionTerm := Err;
  266.  
  267. END;
  268.  
  269. {────────────────────────────────────────────────────────────────────────────}
  270. {────────────────────────────────────────────────────────────────────────────}
  271. {────────────────────────────────────────────────────────────────────────────}
  272.  
  273.  
  274. BEGIN
  275.  
  276. {$IFDEF DEBUG}
  277.  
  278.   DebugOpen('VTERM.LOG');
  279.  
  280.   DebugWriteLn('---------------------------');
  281.  
  282. {$ENDIF}
  283.  
  284.  
  285.   VisionTerm;
  286.  
  287. END.
  288.  
  289.