'=========================================================================== ' Subject: COMMUNICATIONS LIBRARY FOR PB Date: 03-06-99 (13:59) ' Author: Eran Meuhas Code: PB ' Origin: meuhas@surfree.co.il Packet: MODEM.ABC '=========================================================================== ' dim BaseAddress as shared integer ' port%=0 ' port% is zero based (0=1, 1=2..) BaseAddress%=GetComAddress(port%) ' ' end ' sub SendStr(byval s$) for i%=1 to len(s$) do: Status%=inp(BaseAddress%+5): loop until bit(Status%,5)=1 out BaseAddress%, asc(mid$(s$,i%,1)) next i%=0 do: Status%=inp(BaseAddress%+5): incr i%: loop until bit(Status%,6)=1 or i%=32000 end sub function Carrier% for i%=1 to 3000: next 'A small delay, for the modem function=inp(BaseAddress%+6) and &h80 end function sub DropCarrier delay 0.1 d%=inp(BaseAddress%+4) bit reset d%, 0 out BaseAddess%+4, d% delay 0.3 bit set d%, 0 out BaseAddess%+4, d% end sub function GetBuff$ s$="" do for i%=1 to 50: Status%=inp(BaseAddress%+5): next if bit(Status%,0)=1 then s$=s$+chr$(inp(BaseAddress%)) else exit do loop function=s$ end function function DataWaiting% Status%=inp(BaseAddress%+5) function=bit(Status%,0)=1 end function function BaudRate& 'returns the current baud rate of current port BaudRate& = 0 OUT BaseAddress% + 3, INP(BaseAddress% + 3) OR &H80 LSB% = INP(BaseAddress%) MSB% = INP(BaseAddress% + 1) OUT BaseAddress% + 3, INP(BaseAddress% + 3) AND &H7F Divisor& = (MSB% * &H100) + LSB% IF Divisor& THEN BaudRate& = 115200 \ Divisor& end function function GetComAddress%(byval port%) p% = Port% * 2 + &H3FE DEF SEG = 0 GetComAddress% = PEEKI(p%) '! push DS ; save DS for PowerBASIC '! mov BX, port% ; put port number in BX '! shl BX, 1 ; multiply it times 2 '! add BX, &H3FE ; add 3FEh to it '! xor DX, DX ; access bios data area '! mov DS, DX ; put segment into DS '! mov AX, DS: [BX] ; get port address '! mov FUNCTION, AX ; return to calling program '! pop DS ; restore DS for PowerBASIC end function sub PurgeBuff if BaseAddress%>0 then do until DataWaiting%=0: s$=GetBuff$: loop end if do until inkey$="": loop end sub