home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 25 / nopv25.iso / 040A / WSC4D20.ZIP / EASY_PGM.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1997-02-18  |  8.9 KB  |  380 lines

  1. unit Easy_pgm;
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  7.   Forms, Dialogs, Menus,
  8.   wsc, ExtCtrls, StdCtrls;
  9. const
  10.   MaxRow = 15;
  11.   MaxCol = 65;
  12. type
  13.   TEasy = class(TForm)
  14.     MainMenu: TMainMenu;
  15.     menuLine: TMenuItem;
  16.     menuOnLine: TMenuItem;
  17.     menuOffline: TMenuItem;
  18.     menuExit: TMenuItem;
  19.     menuChange: TMenuItem;
  20.     menuPort: TMenuItem;
  21.     menuBaud: TMenuItem;
  22.     menuCOM1: TMenuItem;
  23.     menuCOM2: TMenuItem;
  24.     menuCOM3: TMenuItem;
  25.     menuCOM4: TMenuItem;
  26.     menu300: TMenuItem;
  27.     menu1200: TMenuItem;
  28.     menu2400: TMenuItem;
  29.     menu4800: TMenuItem;
  30.     menu9600: TMenuItem;
  31.     menu19200: TMenuItem;
  32.     menu38400: TMenuItem;
  33.     menu57600: TMenuItem;
  34.     Timer: TTimer;
  35.     procedure IncrCol;
  36.     procedure IncrRow;
  37.     procedure DisplayChar(TheChar : Char);
  38.     procedure DisplayString(Text : String);
  39.     procedure DisplayLine(Text : String);
  40.     procedure FormCreate(Sender: TObject);
  41.     procedure menuOnLineClick(Sender: TObject);
  42.     procedure menuOfflineClick(Sender: TObject);
  43.     procedure menuCOM1Click(Sender: TObject);
  44.     procedure menuCOM2Click(Sender: TObject);
  45.     procedure menuCOM3Click(Sender: TObject);
  46.     procedure menuCOM4Click(Sender: TObject);
  47.     procedure menuExitClick(Sender: TObject);
  48.     procedure menu300Click(Sender: TObject);
  49.     procedure menu1200Click(Sender: TObject);
  50.     procedure menu2400Click(Sender: TObject);
  51.     procedure menu4800Click(Sender: TObject);
  52.     procedure menu9600Click(Sender: TObject);
  53.     procedure menu19200Click(Sender: TObject);
  54.     procedure menu38400Click(Sender: TObject);
  55.     procedure menu57600Click(Sender: TObject);
  56.     procedure TimerTimer(Sender: TObject);
  57.     procedure KeyPress(Sender: TObject; var Key: Char);
  58.   private
  59.     { Private declarations }
  60.     LastChar : Char;
  61.     Row : Integer;
  62.     Col : Integer;
  63.     RowBase : Integer;
  64.     CharWidth : Integer;
  65.     CharHeight : Integer;
  66.     Port : Integer;
  67.     Baud : Integer;
  68.     Parity : Integer;
  69.     DataBits : Integer;
  70.     StopBits : Integer;
  71.     ScreenBuffer : array [0..MaxRow] of string;
  72.     BlankLine : string;
  73.   public
  74.     { Public declarations }
  75.   end ;
  76.  
  77. var
  78.   Easy: TEasy;
  79.  
  80. implementation
  81.  
  82. {$R *.DFM}
  83.  
  84. procedure TEASY.IncrRow;
  85. var
  86.   I : Integer;
  87. begin
  88.   Col := 0;
  89.   Inc(Row);
  90.   if Row > MaxRow then
  91.     begin
  92.       (* scroll ScreenBuffer *)
  93.        for I := 0 to MaxRow-1 do
  94.           ScreenBuffer[I] := ScreenBuffer[I+1];
  95.        ScreenBuffer[MaxRow] := '';
  96.        (* re-display *)
  97.        for I := 0 to MaxRow-1 do
  98.          begin
  99.            Canvas.TextOut(0,(I*CharHeight),ScreenBuffer[I]+BlankLine);
  100.          end;
  101.        (* position on last line *)
  102.        Row := MaxRow;
  103.        Canvas.TextOut(0,MaxRow*CharHeight,BlankLine);
  104.        Canvas.MoveTo(0,MaxRow*CharHeight)
  105.     end
  106. end;
  107.  
  108. procedure TEASY.IncrCol;
  109. begin
  110.   Inc(Col);
  111.   if Col > MaxCol then
  112.     begin
  113.       IncrRow;
  114.     end;
  115. end;
  116.  
  117. procedure TEASY.DisplayChar(TheChar : Char);
  118. var
  119.    TheString : String;
  120. begin
  121.    if TheChar <> Chr(10) then
  122.      begin
  123.        if TheChar = Chr(13) then
  124.          begin
  125.           IncrRow;
  126.          end
  127.        else
  128.          begin
  129.            ScreenBuffer[Row] := ScreenBuffer[Row] + TheChar;
  130.            Canvas.TextOut((Col*CharWidth),(Row*CharHeight),''+TheChar);
  131.            IncrCol;
  132.          end;
  133.      end;
  134. end;
  135.  
  136. procedure TEASY.DisplayString(Text : String);
  137. var
  138.   I   : Integer;
  139.   Len : Integer;
  140.   S:String;
  141. begin
  142.   Len := Length(Text);
  143.   if Len > 0 then
  144.     for I := 1 to Len do
  145.        begin
  146.          DisplayChar(Text[I])
  147.        end;
  148. end;
  149.  
  150. procedure TEASY.DisplayLine(Text : String);
  151. begin
  152.   DisplayString(Text);
  153.   DisplayChar(chr(13))
  154. end;
  155.  
  156. procedure TEasy.FormCreate(Sender: TObject);
  157. var
  158.   I    : Integer;
  159.   Code : Integer;
  160. begin
  161.   (* initialize canvas *)
  162.   RowBase := 0;
  163.   CharWidth := Canvas.TextWidth('A');
  164.   CharHeight := Canvas.TextHeight('A');
  165.   for I := 0 to MaxRow do ScreenBuffer[I] := '';
  166.   BlankLine := '';
  167.   for I := 0 to MaxCol do BlankLine := BlankLine + ' ';
  168.   (* initialize parameters *)
  169.   Port := COM1;
  170.   Baud := Baud19200;
  171.   Parity := NoParity;
  172.   DataBits := WordLength8;
  173.   StopBits := OneStopBit;
  174.   (* initialize menu settings *)
  175.   menuOffLine.Checked := true;
  176.   menuCOM1.Checked := true;
  177.   menu19200.Checked := true
  178. end;
  179.  
  180. procedure TEasy.menuOnLineClick(Sender: TObject);
  181. var
  182.   Code : Integer;
  183. begin
  184.   (* initialize WSC *)
  185.   Code := SioReset(Port,1024,256);
  186.   if Code < 0 then
  187.     begin
  188.       DisplayString(Format('Error %d: Cannot reset port',[Code]));
  189.       exit
  190.     end;
  191.   (* update menu settings *)
  192.   Easy.Caption := 'EASY: COM' + Chr($31+Port) + ' Online';
  193.   menuOnLine.Checked := true;
  194.   menuOffLine.Checked := false;
  195.   menuChange.Enabled := false;
  196.   Code := SioBaud(Port,Baud);
  197.   Code := SioParms(Port, Parity, StopBits);
  198.   Code := SioDTR(Port,'S');
  199.   Code := SioRTS(Port,'S')
  200. end;
  201.  
  202. procedure TEasy.menuOfflineClick(Sender: TObject);
  203. var
  204.   Code : Integer;
  205. begin
  206.   Easy.Caption := 'EASY: Offline';
  207.   DisplayString('Shutting down COM port');
  208.   menuOnLine.Checked := false;
  209.   menuOffLine.Checked := true;
  210.   menuChange.Enabled := true;
  211.   Code := SioDone(Port)
  212. end;
  213.  
  214. procedure TEasy.menuCOM1Click(Sender: TObject);
  215. begin
  216.   menuCOM1.Checked := true;
  217.   menuCOM2.Checked := false;
  218.   menuCOM3.Checked := false;
  219.   menuCOM4.Checked := false;
  220.   Port := COM1
  221. end;
  222.  
  223. procedure TEasy.menuCOM2Click(Sender: TObject);
  224. begin
  225.   menuCOM1.Checked := false;
  226.   menuCOM2.Checked := true;
  227.   menuCOM3.Checked := false;
  228.   menuCOM4.Checked := false;
  229.   Port := COM2
  230. end;
  231.  
  232. procedure TEasy.menuCOM3Click(Sender: TObject);
  233. begin
  234.   menuCOM1.Checked := false;
  235.   menuCOM2.Checked := false;
  236.   menuCOM3.Checked := true;
  237.   menuCOM4.Checked := false;
  238.   Port := COM3
  239. end;
  240.  
  241. procedure TEasy.menuCOM4Click(Sender: TObject);
  242. begin
  243.   menuCOM1.Checked := false;
  244.   menuCOM2.Checked := false;
  245.   menuCOM3.Checked := false;
  246.   menuCOM4.Checked := true;
  247.   Port := COM4
  248. end;
  249.  
  250. procedure TEasy.menuExitClick(Sender: TObject);
  251. var
  252.   Code : Integer;
  253. begin
  254.   Code := SioDone(Port);
  255.   Application.Terminate;
  256. end;
  257.  
  258. procedure TEasy.menu300Click(Sender: TObject);
  259. begin
  260.   menu300.Checked := true;
  261.   menu1200.Checked := false;
  262.   menu2400.Checked := false;
  263.   menu4800.Checked := false;
  264.   menu9600.Checked := false;
  265.   menu19200.Checked := false;
  266.   menu38400.Checked := false;
  267.   menu57600.Checked := false;
  268.   Baud := Baud300
  269. end;
  270.  
  271. procedure TEasy.menu1200Click(Sender: TObject);
  272. begin
  273.   menu300.Checked := false;
  274.   menu1200.Checked := true;
  275.   menu2400.Checked := false;
  276.   menu4800.Checked := false;
  277.   menu9600.Checked := false;
  278.   menu19200.Checked := false;
  279.   menu38400.Checked := false;
  280.   menu57600.Checked := false;
  281.   Baud := Baud1200
  282. end;
  283.  
  284. procedure TEasy.menu2400Click(Sender: TObject);
  285. begin
  286.   menu300.Checked := false;
  287.   menu1200.Checked := false;
  288.   menu2400.Checked := true;
  289.   menu4800.Checked := false;
  290.   menu9600.Checked := false;
  291.   menu19200.Checked := false;
  292.   menu38400.Checked := false;
  293.   menu57600.Checked := false;
  294.   Baud := Baud2400
  295. end;
  296.  
  297. procedure TEasy.menu4800Click(Sender: TObject);
  298. begin
  299.   menu300.Checked := false;
  300.   menu1200.Checked := false;
  301.   menu2400.Checked := false;
  302.   menu4800.Checked := true;
  303.   menu9600.Checked := false;
  304.   menu19200.Checked := false;
  305.   menu38400.Checked := false;
  306.   menu57600.Checked := false;
  307.   Baud := Baud4800
  308. end;
  309.  
  310. procedure TEasy.menu9600Click(Sender: TObject);
  311. begin
  312.   menu300.Checked := false;
  313.   menu1200.Checked := false;
  314.   menu2400.Checked := false;
  315.   menu4800.Checked := false;
  316.   menu9600.Checked := true;
  317.   menu19200.Checked := false;
  318.   menu38400.Checked := false;
  319.   menu57600.Checked := false;
  320.   Baud := Baud9600
  321. end;
  322.  
  323. procedure TEasy.menu19200Click(Sender: TObject);
  324. begin
  325.   menu300.Checked := false;
  326.   menu1200.Checked := false;
  327.   menu2400.Checked := false;
  328.   menu4800.Checked := false;
  329.   menu9600.Checked := false;
  330.   menu19200.Checked := true;
  331.   menu38400.Checked := false;
  332.   menu57600.Checked := false;
  333.   Baud := Baud19200
  334. end;
  335.  
  336. procedure TEasy.menu38400Click(Sender: TObject);
  337. begin
  338.   menu300.Checked := false;
  339.   menu1200.Checked := false;
  340.   menu2400.Checked := false;
  341.   menu4800.Checked := false;
  342.   menu9600.Checked := false;
  343.   menu19200.Checked := false;
  344.   menu38400.Checked := true;
  345.   menu57600.Checked := false;
  346.   Baud := Baud38400
  347. end;
  348.  
  349. procedure TEasy.menu57600Click(Sender: TObject);
  350. begin
  351.   menu300.Checked := false;
  352.   menu1200.Checked := false;
  353.   menu2400.Checked := false;
  354.   menu4800.Checked := false;
  355.   menu9600.Checked := false;
  356.   menu19200.Checked := false;
  357.   menu38400.Checked := false;
  358.   menu57600.Checked := true;
  359.   Baud := Baud57600
  360. end;
  361.  
  362. procedure TEasy.TimerTimer(Sender: TObject);
  363. var
  364.   Code : Integer;
  365. begin
  366.   repeat
  367.     Code := SioGetc(Port);
  368.     if Code >= 0 then DisplayChar(Chr(Code))
  369.   until Code < 0;
  370. end;
  371.  
  372. procedure TEasy.KeyPress(Sender: TObject; var Key: Char);
  373. var
  374.   Code : Integer;
  375. begin
  376.   Code := SioPutc(Port,Key)
  377. end;
  378.  
  379. end.
  380.