home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / OASSASM.ZIP / SAMPLE7.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-03-27  |  5.6 KB  |  184 lines

  1.  
  2. PROGRAM dc_monitor;  {a simple datacom line monitor}
  3.  
  4. uses scl;    {make SCL accessible}
  5.  
  6. VAR
  7.   Ok      : BOOLEAN;
  8.   Wrkstr  : String80;
  9.   Temp    : INTEGER;
  10.   Freeze  : BOOLEAN;
  11.  
  12. FUNCTION Xlate(Cn:INTEGER):String10;  {datacom control character}
  13. VAR Tmp:String10;                     {interpretation}
  14. BEGIN;
  15.   CASE Cn OF
  16.      $0 : Tmp:='<NUL>';
  17.      $1 : Tmp:='<SOH>';
  18.      $2 : Tmp:='<STX>';
  19.      $3 : Tmp:='<ETX>';
  20.      $4 : Tmp:='<EOT>';
  21.      $5 : Tmp:='<ENQ>';
  22.      $6 : Tmp:='<ACK>';
  23.      $7 : Tmp:='<BEL>';
  24.      $8 : Tmp:='<BS>';
  25.      $9 : Tmp:='<HT>';
  26.      $a : Tmp:='<LF>';
  27.      $b : Tmp:='<VT>';
  28.      $c : Tmp:='<FF>';
  29.      $d : Tmp:='<CR>';
  30.      $e : Tmp:='<S0>';
  31.      $f : Tmp:='<S1>';
  32.      $10: Tmp:='<DLE>';
  33.      $11: Tmp:='<DC1>';
  34.      $12: Tmp:='<DC2>';
  35.      $13: Tmp:='<DC3>';
  36.      $14: Tmp:='<DC4>';
  37.      $15: Tmp:='<NAK>';
  38.      $16: Tmp:='<SYN>';
  39.      $17: Tmp:='<ETB>';
  40.      $18: Tmp:='<CAN>';
  41.      $19: Tmp:='<EM>';
  42.      $1a: Tmp:='<SUB>';
  43.      $1b: Tmp:='<ESC>';
  44.      $1c: Tmp:='<FS>';
  45.      $1d: Tmp:='<GS>';
  46.      $1e: Tmp:='<RS>';
  47.      $1f: Tmp:='<US>';
  48.      $70: Tmp:='<POL>';
  49.      $71: Tmp:='<SEL>';
  50.      $72: Tmp:='<FSL>';
  51.      $73: Tmp:='<BSL>';
  52.      $7f: Tmp:='<DEL>';
  53.      $80..$ff:
  54.           Tmp:='<' + St(Cn) + '>';    {return character code}
  55.   ELSE
  56.           Tmp:=CHR(Cn);               {return character}
  57.   END;
  58.   Xlate:=Tmp;
  59. END;
  60.  
  61. {$F+} {far call option required for SCL background tasks}
  62. PROCEDURE Lp_Background_Task;      {updates the line traffic field}
  63. BEGIN;
  64.   IF NOT Freeze THEN               {F9 toggles Freeze}
  65.     BEGIN;
  66.       REPEAT
  67.         Receive_Char(Temp,Ok);     {receive char from datacom}
  68.         IF Ok THEN                 {there was one}
  69.           BEGIN;
  70.             Wrkstr:=Wrkstr+Xlate(Temp);  {interpret it}
  71.             WHILE LENGTH(Wrkstr) > 76 DO {cut off oldest}
  72.               DELETE(Wrkstr,1,1);
  73.           END;
  74.       UNTIL NOT Ok;                      {no more characters}
  75.       W_Cont(7,Wrkstr);            {update traffic field}
  76.     END;
  77. END;
  78. {$F-}   {reset far calls again}
  79.  
  80. PROCEDURE Update_Params;         {spacebar pressed}
  81. VAR Sp:INTEGER;
  82. BEGIN;
  83.   CASE Active_Field OF
  84.     1: BEGIN;                   {linespeed}
  85.          Sp:=Nr(G_Cont(1));     {get current speed}
  86.          IF Sp =  110 THEN Sp:= 150 ELSE
  87.          IF Sp =  150 THEN Sp:= 300 ELSE {switch}
  88.          IF Sp =  300 THEN Sp:= 600 ELSE  {to}
  89.          IF Sp =  600 THEN Sp:=1200 ELSE  {next}
  90.          IF Sp = 1200 THEN Sp:=2400 ELSE  {speed}
  91.          IF Sp = 2400 THEN Sp:=4800 ELSE
  92.          IF Sp = 4800 THEN Sp:=9600 ELSE
  93.             Sp:=110;
  94.          Dc_Speed:=Sp;                    {update speed}
  95.          W_Cont(1,St(Sp));                {update field}
  96.        END;
  97.     2: BEGIN;                             {char size}
  98.          Sp:=Nr(G_Cont(2));
  99.          Sp:=Sp+1;
  100.          IF Sp > 8 THEN
  101.            Sp:=5;
  102.          Dc_Charsize:=Sp;                 {update param}
  103.          W_Cont(2,St(Sp));                {update field}
  104.        END;
  105.     3: BEGIN;
  106.          Sp:=Nr(G_Cont(3));               {stop bits}
  107.          IF Sp = 1 THEN Sp:=2 ELSE Sp:=1;
  108.          Dc_Stopbits:=Sp;                 {update param}
  109.          W_Cont(3,St(Sp));                {update field}
  110.        END;
  111.     4: IF G_Cont(4) = 'Even'THEN          {parity}
  112.          BEGIN;
  113.            W_Cont(4,'None');
  114.            Dc_Parity:='N';
  115.          END
  116.        ELSE
  117.        IF G_Cont(4) = 'None'THEN
  118.          BEGIN;
  119.            W_Cont(4,'Odd');
  120.            Dc_Parity:='O';
  121.          END
  122.        ELSE
  123.          BEGIN;
  124.            W_Cont(4,'Even');
  125.            Dc_Parity:='E';
  126.          END;
  127.   END;
  128.   Disable_Port;            {temporary disable datacom}
  129.   Set_Dc_Params;           {set new dc params}
  130.   Enable_Port;             {enable datacom again}
  131. END;
  132.  
  133. PROCEDURE Handle_Uf;
  134. BEGIN;
  135.   IF Char_Code = 32 THEN    {Spacebar pressed}
  136.     BEGIN;
  137.       Update_Params;        {update dc params}
  138.       Char_Code:=Code_Noop; {no further action}
  139.     END
  140.   ELSE
  141.   IF Char_Code = Code_F9 THEN   {F9 Pressed}
  142.     BEGIN;
  143.       Freeze:= NOT Freeze;      {toggle freeze}
  144.       Char_Code:=Code_Noop;     {no further action}
  145.     END
  146.   ELSE
  147.   IF Char_Code = Code_Return   THEN Char_Code:=Code_Tab ELSE
  148.   IF Char_Code = Code_Escape   THEN Char_Code:=Code_Noop;
  149. END;
  150.  
  151.  
  152. PROCEDURE Handle_First;   {This Procedure handles format 'first'.}
  153. BEGIN;
  154.   Select_Format('main');
  155.   W_Cont(1,St(Dc_Speed));        {prefill}
  156.   W_Cont(2,St(Dc_Charsize));     {the}
  157.   W_Cont(3,St(Dc_Stopbits));     {fields}
  158.   IF Dc_Parity = 'E' THEN W_Cont(4,'Even') ELSE
  159.   IF Dc_Parity = 'O' THEN W_Cont(4,'Odd') ELSE
  160.      W_Cont(4,'None');
  161.   Freeze:=FALSE;          {display incoming traffic}
  162.   Display_Format(0,0);
  163.   REPEAT
  164.     Handle_Format;        {Complete Loop to handle format input}
  165.     IF User_Function THEN {user key pressed}
  166.       Handle_Uf;          {user interrupt procedure}
  167.   UNTIL Format_Done;      {Either completely filled in or abort pressed}
  168. END;
  169.  
  170. VAR Res:INTEGER;
  171.  
  172. BEGIN; {of main}
  173.   Wrkstr:='';
  174.   Select_Format_File('Sample7');   {initializes SCL and loads the format
  175.                                    {file 'Sample7'}
  176.   LP_Background_pointer:=@LP_Background_task;  {invoke our screen updating
  177.                                     routine as low priority background task}
  178.   Auto_Help_Set:=FALSE;             {reset autohelp feature}
  179.   Open_Dc(Res);                    {initialize Datacom system}
  180.   Handle_First;                    {load,display and handle the format}
  181.   Close_Formats;                   {terminate SCL}
  182.   Close_Dc;                        {close Datacom system}
  183. END.  {of main}
  184.