BBS: Inland Empire Archive Date: 02-06-93 (09:42) Number: 343 From: DAVID COLSTON Refer#: NONE To: ALL Recvd: NO Subj: Simple door 3/4 Conf: (2) Quik_Bas
>>> Continued from previous message
SUB GetChar (Port, Good, InBound$, Present, Reg AS RegType)
CheckPortStatus Port, Info, Reg ' Test for space in OUTPUT buffer
IF NOT Present THEN
InBound$ = INKEY$
IF InBound$ > "" THEN
Good = -1
ELSE
Good = 0
END IF
EXIT SUB
END IF
IF (Info AND &H4) = 0 THEN
IF (Info AND &H2) = &H2 THEN
Reg.ax = &H200
Reg.dx = Port
Interrupt &H14, Reg, Reg
InBound$ = CHR$(Reg.ax)
Good = -1
ELSE
Good = 0' No Characters in input buffer
InBound$ = INKEY$
IF InBound$ > "" THEN Good = -1
END IF
ELSE ' Input buffer over-run
Good = 0
Reg.ax = &HA00
Reg.dx = Port
Interrupt &H14, Reg, Reg
BEEP
END IF
END SUB
SUB PrintCon (A$, Reg AS RegType) STATIC
IF A$ = "" THEN EXIT SUB
Reg.ax = &H600
Reg.dx = ASC(A$)
Interrupt &H21, Reg, Reg
IF A$ = CHR$(13) THEN
Reg.ax = &H600
Reg.dx = 10
Interrupt &H21, Reg, Reg
END IF
END SUB
SUB SendChar (Port, Sent, Present, Outbound$, Reg AS RegType)
A! = TIMER
IF NOT Present THEN
Sent = 0
EXIT SUB
END IF
DO
CheckPortStatus Port, Info, Reg ' room in buffer ?
IF (Reg.ax AND &H80) = 0 THEN
Sent = -1
EXIT DO
END IF
IF (Info AND &H10) = 0 THEN
Reg.dx = Port
Reg.ax = &H100 + ASC(Outbound$)
Interrupt &H14, Reg, Reg
Sent = -1
END IF
LOOP WHILE NOT Sent AND TIMER - A! < 2
IF Sent = 0 AND Reg.ax AND &H80 <> 0 THEN
Sent = 0 ' Output buffer full
Reg.ax = &H900
Reg.dx = Port
Interrupt &H14, Reg, Reg
END IF
END SUB
SUB SetDtr (Port, DtrStatus$, Reg AS RegType)
Reg.dx = Port 'Set carrier detect low or high
SELECT CASE UCASE$(DtrStatus$)
CASE "L"
Reg.ax = &H600
CASE "H"
Reg.ax = &H601
CASE ELSE
Reg.ax = &H600
BEEP
END SELECT
Interrupt &H14, Reg, Reg
END SUB
SUB SetHandShake (Port, HandShake, Reg AS RegType)
Reg.dx = Port
IF HandShake > &HF THEN
HandShake = &H2
'Set handshake to RTS/CTS.
BEEP
END IF
Reg.ax = &HF00 + HandShake
Interrupt &H14, Reg, Reg
Reg.ax = &H1000
Reg.dx = Port
Interrupt &H14, Reg, Reg
END SUB
SUB SetPortParams (Port, Baud$, Bits, Stops, Parity$, Reg AS RegType)
Reg.dx = Port
Reg.ax = 0
SELECT CASE Baud$
CASE "300"
Reg.ax = (Reg.ax OR &H40)
CASE "600"
Reg.ax = (Reg.ax OR &H60)
CASE "1200"
Reg.ax = (Reg.ax OR &H80)
CASE "2400"
Reg.ax = (Reg.ax OR &HA0)
CASE "4800"
Reg.ax = (Reg.ax OR &HC0)
CASE "9600"
Reg.ax = (Reg.ax OR &HE0)
CASE "19200"
Reg.ax = (Reg.ax OR &H0)
CASE "38400"
Reg.ax = (Reg.ax OR &H20)
CASE ELSE
Reg.ax = (Reg.ax OR &HA0)
'Default to 2400 baud
END SELECT
SELECT CASE Bits
CASE 5
Reg.ax = (Reg.ax OR &H0)
CASE 6
Reg.ax = (Reg.ax OR &H1)
CASE 7
Reg.ax = (Reg.ax OR &H2)
CASE 8
Reg.ax = (Reg.ax OR &H3)
CASE ELSE
Reg.ax = (Reg.ax OR &H3)
'Default to 8 bits
END SELECT
SELECT CASE Stops
CASE 1
Reg.ax = (Reg.ax OR &H0)
CASE 2
Reg.ax = (Reg.ax OR &H4)
CASE ELSE
Reg.ax = (Reg.ax OR &H0)
'Default to 1 stop bit
END SELECT
>>> Continued to next message

Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET