home *** CD-ROM | disk | FTP | other *** search
/ ftp.wwiv.com / ftp.wwiv.com.zip / ftp.wwiv.com / pub / DOOR / DDPLUS67.ZIP / COMIO.PAS < prev    next >
Pascal/Delphi Source File  |  1994-11-21  |  5KB  |  230 lines

  1. unit comio;
  2. {$V-,S-,R-}
  3.  
  4. interface
  5.  
  6. uses ddfossil, async2;
  7.  
  8. procedure AsyncSelectPort(n: byte);
  9. procedure AsyncSendChar(ch: char);
  10. procedure AsyncReceiveChar(var ch: char);
  11. function  AsyncCarrierPresent: boolean;
  12. function  AsyncCharPresent: boolean;
  13. procedure AsyncSelectFossil;
  14. procedure AsyncSelectInternal;
  15. procedure AsyncCloseUp;
  16. procedure AsyncCloseCom(cp : byte);
  17. procedure AsyncSetBaud(n: longint);
  18. procedure AsyncSetDTR(state: boolean);
  19. procedure AsyncFlushOutput;
  20. procedure AsyncPurgeOutput;
  21. procedure AsyncSetFlow(SoftTran,Hard,SoftRecv: boolean);
  22. Procedure AsyncBufferStatus(var Insize,infree,outsize,outfree: word);
  23. Procedure SetUpPorts;
  24. Procedure LoadPorts  (var port1,port2,port3,port4: word;
  25.                       var irq1,irq2,irq3,irq4 : byte);
  26. Procedure ResetPorts (var port1,port2,port3,port4: word;
  27.                       var irq1,irq2,irq3,irq4 : byte);
  28.  
  29. type
  30.  AsyncIoTypes=(Fossil,Internal,Bios);
  31. var
  32.  AsyncIoType: AsyncIotypes;
  33.  initok, Extd_Foss_OK  : boolean;
  34.  internalinsize,internaloutsize: word;
  35.  
  36. implementation
  37.  
  38. procedure AsyncSelectPort(n: byte);
  39. var
  40.  b: boolean;
  41. begin;
  42.  comport:=n;
  43.  case AsyncIoType of
  44.    Fossil: begin
  45.              port_num:=n-1;
  46.              If Extd_Foss_OK then
  47.                begin
  48.                  async_purge_output;      { 10/29/94 SRL This may clear up}
  49.                  async_purge_input;       {a problem xfoss had Ripdetect. }
  50.                  initok:=true;
  51.                end
  52.              else
  53.                begin
  54.                  async_deinit_fossil;
  55.                  initok:=async_init_fossil;
  56.                end;
  57.             end;
  58.   Internal: begin;
  59.              closeallcoms;
  60.              initok:=opencom(n,InternalInSize,InternalOutSize);
  61.             end;
  62.  end;
  63. end;
  64.  
  65. procedure AsyncSendChar(ch: char);
  66. begin;
  67.  case AsyncIoType of
  68.   Fossil: async_send(ch);
  69.   Internal: begin
  70.               While CTSStat(comport) or RTSstat(comport) do
  71.                 If Not AsyncCarrierPresent then halt;
  72.                ComWriteChw(comport,ch);
  73.             end;
  74.  end;
  75. end;
  76.  
  77. procedure AsyncReceiveChar(var ch: char);
  78. var
  79.  b: boolean;
  80. begin;
  81.  case asyncIotype of
  82.   Fossil: b:=async_receive(ch);
  83.   Internal: ch:=ComReadCh(comport);
  84.  end;
  85. end;
  86.  
  87. function AsyncCarrierPresent: boolean;
  88. begin;
  89.  case asyncIoType of
  90.   Fossil: AsyncCarrierPresent:=async_carrier_present;
  91.   Internal: AsyncCarrierPresent:=DCDStat(comport);
  92.  end;
  93. end;
  94.  
  95. function AsyncCharPresent: boolean;
  96. begin;
  97.  case asyncIoTYpe of
  98.   Fossil: asyncCharPresent:=Async_buffer_check;
  99.   Internal: asynccharpresent:=combufferleft(comport,'I')<>c_insize[comport];
  100.  end;
  101. end;
  102.  
  103. procedure AsyncSelectFossil;
  104. begin;
  105.  AsyncIoType:=Fossil;
  106. end;
  107.  
  108. procedure AsyncCloseUp;
  109. begin;
  110.  case AsyncIoType of
  111.   fossil: Async_deinit_fossil;
  112.   internal: closeallcoms;
  113.  end;
  114. end;
  115.  
  116. procedure AsyncCloseCom;
  117. begin;
  118.  case AsyncIoType of
  119.   fossil:   Async_deinit_fossil;
  120.   internal: closecom(cp);
  121.  end;
  122. end;
  123.  
  124. procedure AsyncSetBaud(n: longint);
  125. begin;
  126.  case asynciotype of
  127.   fossil: If not Extd_Foss_OK then async_set_baud(n);
  128.   internal: comparams(comport,n,8,'N',1);
  129.  end;
  130. end;
  131.  
  132. procedure AsyncSelectInternal;
  133. begin;
  134.  AsyncIOType:=Internal;
  135. end;
  136.  
  137. procedure AsyncSetDTR(state: boolean);
  138. begin;
  139.  case AsyncIOType of
  140.   Fossil:   async_set_dtr(state);
  141.   Internal: SetDTR(comport,state);
  142.  end;
  143. end;
  144.  
  145. procedure AsyncFlushOutput;
  146. begin;
  147.  case AsyncIOType of
  148.   Fossil:   async_flush_output;
  149.   Internal: ComWaitForClear(comport);
  150.  end;
  151. end;
  152.  
  153. procedure AsyncPurgeOutput;
  154. begin;
  155.  case AsyncIOType of
  156.   Fossil:   async_purge_output;
  157.   Internal: ClearCom(comport,'O');
  158.  end;
  159. end;
  160.  
  161. procedure AsyncSetFlow(SoftTran,Hard,SoftRecv: boolean);
  162. begin;
  163.  {*srl}
  164.  case AsyncIOType of
  165.   Fossil:   async_set_flow(softtran,hard,softrecv);
  166.   Internal: begin;
  167.               SetCTSMode(comport,hard);
  168.               SetRTSMode(comport,hard,C_RTSOn[comport],C_RTSOff[comport]);
  169.               SoftHandShake(comport,softtran,'A','A');
  170.              end;
  171.  end;
  172. end;
  173.  
  174. Procedure AsyncBufferStatus(var Insize,infree,outsize,outfree: word);
  175. begin;
  176.   case asynciotype of
  177.   fossil: async_buffer_Status(insize,infree,outsize,outfree);
  178.   internal: begin;
  179.              insize:=internalinsize;
  180.              outsize:=internaloutsize;
  181.              infree:=combufferleft(comport,'I');
  182.              outfree:=combufferleft(comport,'O');
  183.             end;
  184.  end;
  185. end;
  186.  
  187. Procedure SetUpPorts;
  188. var
  189.   i : byte;
  190. begin
  191.  for i := 1 to 4 do
  192.     begin
  193.       C_PortAddr[i] := D_PortAddr[i];
  194.       C_PortInt[i]  := D_PortInt[i];
  195.     end;
  196. end;
  197.  
  198. Procedure LoadPorts (var port1,port2,port3,port4: word;
  199.                      var irq1,irq2,irq3,irq4 : byte);
  200. begin
  201.  port1 :=  D_PortAddr[1];
  202.  irq1  :=  D_PortInt[1];
  203.  port2 :=  D_PortAddr[2];
  204.  irq2  :=  D_PortInt[2];
  205.  port3 :=  D_PortAddr[3];
  206.  irq3  :=  D_PortInt[3];
  207.  port4 :=  D_PortAddr[4];
  208.  irq4  :=  D_PortInt[4];
  209. end;
  210.  
  211. Procedure ResetPorts (var port1,port2,port3,port4: word;
  212.                       var irq1,irq2,irq3,irq4 : byte);
  213. begin
  214.   C_PortAddr[1] := port1;
  215.   C_PortInt[1]  := irq1;
  216.   C_PortAddr[2] := port2;
  217.   C_PortInt[2]  := irq2;
  218.   C_PortAddr[3] := port3;
  219.   C_PortInt[3]  := irq3;
  220.   C_PortAddr[4] := port4;
  221.   C_PortInt[4]  := irq4;
  222. end;
  223.  
  224. begin;
  225.  AsyncIoType:=Internal;
  226.  comport:=1;
  227.  internalinsize :=2048;
  228.  internaloutsize:=2048;
  229. end.
  230.