home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / FORUM25C.ZIP / MODEM.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-12-27  |  2.3 KB  |  124 lines

  1. {$R-,S-,I-,D-,V-,B-,N-,L- }
  2. {$O-}
  3. unit modem;
  4.  
  5.  
  6. {/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\}
  7.  
  8. interface
  9.  
  10. uses crt,dos;
  11.  
  12. {/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\}
  13.  
  14.  
  15. const RBR=$3F8; THR=$3F8; DLL=$3F8; DLM=$3F9; IER=$3F9;
  16.       IIR=$3FA; LCR=$3FB; MCR=$3FC; LSR=$3FD; MSR=$3FE;
  17.       intnum=255;
  18.  
  19. VAR icomoffset:integer;
  20.  
  21. Procedure mfunc (VAR r:registers; ahval,alval:byte);
  22. Procedure sendchar (k:char);
  23. Function numchars:integer;
  24. Function getchar:char;
  25. Procedure hangup;
  26. Procedure setoutbuffer (size:integer);
  27. Procedure setparam (comnum:byte; baud:integer; parity:boolean);
  28. Function carrier:boolean;
  29. Function driverpresent:boolean;
  30. Procedure setterminalready (b:boolean);
  31. Procedure dontanswer;
  32. Procedure doanswer;
  33.  
  34.  
  35. {/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\}
  36.  
  37. implementation
  38.  
  39. {/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\}
  40.  
  41.  
  42. Procedure mfunc (VAR r:registers; ahval,alval:byte);
  43. begin
  44.   r.ax:=alval+(ahval shl 8);
  45.   intr (intnum,r)
  46. end;
  47.  
  48. Procedure sendchar (k:char);
  49. VAR r:registers;
  50. begin
  51.   mfunc (r,3,ord(k))
  52. end;
  53.  
  54. Function numchars:integer;
  55. VAR r:registers;
  56. begin
  57.   mfunc (r,1,0);
  58.   numchars:=r.ax
  59. end;
  60.  
  61. Function getchar:char;
  62. VAR r:registers;
  63. begin
  64.   mfunc (r,2,0);
  65.   getchar:=chr(r.ax and 255)
  66. end;
  67.  
  68. Procedure hangup;
  69. VAR r:registers;
  70. begin
  71.   mfunc (r,6,0);
  72.   delay (200)
  73. end;
  74.  
  75. Procedure setoutbuffer (size:integer);
  76. VAR r:registers;
  77. begin
  78.   r.bx:=size;
  79.   mfunc (r,8,0)
  80. end;
  81.  
  82. Procedure setparam (comnum:byte; baud:integer; parity:boolean);
  83. VAR r:registers;
  84.     p:byte;
  85. begin
  86.   mfunc (r,0,comnum);
  87.   r.bx:=baud;
  88.   if parity then p:=1 else p:=0;
  89.   mfunc (r,7,p);
  90.   setoutbuffer (baud div 30);
  91.   case comnum of
  92.     1:icomoffset:=0;
  93.     2:icomoffset:=-256
  94.   end
  95. end;
  96.  
  97. Function carrier:boolean;
  98. begin
  99.   carrier:=(port[msr+icomoffset] and 128)=128
  100. end;
  101.  
  102. Function driverpresent:boolean;
  103. begin
  104.   driverpresent:=memw[memw[0:intnum*4+2]:memw[0:intnum*4]]=7686
  105. end;
  106.  
  107. Procedure setterminalready (b:boolean);
  108. begin
  109.   port [icomoffset+mcr]:=ord(b) or 8
  110. end;
  111.  
  112. Procedure dontanswer;
  113. begin
  114.   setterminalready (false)
  115. end;
  116.  
  117. Procedure doanswer;
  118. begin
  119.   setterminalready (true)
  120. end;
  121.  
  122. Begin
  123. end.
  124.