home *** CD-ROM | disk | FTP | other *** search
- 'Baud and Commport should be global variables already set in the main
- 'module. Baud should probably be a long integer.
-
- 'LocalPrint (Text$) should be a Sub that prints Text$ on the local
- 'screen
-
- 'These should be declared in your FOSSIL-module-level code
- DIM SHARED InRegs2 AS RegType2
- DIM SHARED InReg AS RegType
- DIM SHARED OutRegs2 AS RegType2
- DIM SHARED OutReg AS RegType
-
- '
- SUB Deinit 'Deinitialize the FOSSIL..._always_ deinit on program exit
-
- InReg.AX = 1280
- InReg.DX = Commport
- Interrupt &H14, InReg, OutReg
-
- END SUB
-
- SUB FossilCD (Status) 'Check modem status, check for carrier
-
- STATIC InRegs AS RegType
- STATIC OutRegs AS RegType
-
- InRegs.AX = 768 'Remember, AX is (AH * 256) + AL
- InRegs.DX = Commport
- Interrupt &H14, InRegs, OutRegs
- Status = OutRegs.AX / 256 'This gets us register AH's value
- 'Inputt = abs((Status AND 1 + Carrier[1]) > 0) 'Additional info if
- 'Outputt = abs((Status AND 32) > 0) 'anyone wants it
- 'NoOut= abs((Status AND 64) > 0)<>0
- IF Baud THEN
- IF ABS(((OutRegs.AX - (Status * 256)) AND 128) > 0) = 0 THEN
- '^ ^--Carrier mask
- DeInit '|
- END 'Lost carrier '\__Subtracting AH * 256 from AX gives us AL
- END IF
- END IF
-
- END SUB
-
- '
- SUB FossilDTR (UpDown) 'UpDown=1 means DTR up...0 means DTR down
-
- HowMany = 0
- Hangup:
- AH = &H6: AL = UpDown
- GOSUB DoItToIt
- IF UpDown = 1 THEN EXIT SUB
- SLEEP 1 'From here down we're checking to see if we cleared the
- AH = &H6: AL = 1 'line. We'll try a few more times if not.
- GOSUB DoItToIt
- AH = &H3: AL = 0
- InReg.DX = Commport
- GOSUB DoItToIt
- IF ABS(((OutReg.AX - Status * 256) AND 128) > 0) = 0 THEN
- AH = &H6
- AL = 0
- GOSUB DoItToIt
- EXIT SUB
- END IF
- HowMany = HowMany + 1
- IF HowMany < 7 THEN
- GOTO Hangup
- ELSE
- AH = &H6
- AL = 0
- GOSUB DoItToIt
- EXIT SUB
- END IF
-
- DoItToIt:
- InReg.AX = AH * 256 + AL
- InReg.DX = Commport
- Interrupt &H14, InReg, OutReg
- RETURN
-
- END SUB
-
- '
- FUNCTION FossilGet$ 'Equivalent of INKEY$ for FOSSIL
-
- FossilGet$ = ""
- IF Baud THEN
- FossilCD Status
- IF ABS((Status AND 1 + 1) > 0) = 0 THEN EXIT SUB 'No input waiting
- InReg.AX = 512
- InReg.DX = Commport
- Interrupt &H14, InReg, OutReg
- FossilGet$ = CHR$((OutReg.AX - INT(OutReg.AX / 256) * 256))
- END IF
-
- END SUB
-
- '
- SUB FossilInit 'Initialize FOSSIL
-
- InReg.AX = 1024
- InReg.DX = Commport
- Interrupt &H14, InReg, OutReg
-
- IF OutReg.AX <> &H1954 THEN
- Print "FOSSIL is braindead!"
- DeInit
- END
- END IF
-
- InReg.AX = 4088 'Check FOSSIL.DOC for these...you may
- Interrupt &H14, InReg, OutReg 'want to modify these calls for your
- InReg.AX = 4096 'own setup
- Interrupt &H14, InReg, OutReg
-
-
- END SUB
-
- '
- SUB FossilPos (PutGet, Row, Col) 'PutGet=0 means put, =1 means get
- 'Use this instead of LOCATE if you
- 'print on local screen through CONS:
- InReg.DX = Row * 256 + Col
- InReg.AX = 4352 + ABS(PutGet)
- Interrupt &H14, InReg, OutReg
- IF PutGet THEN Row = OutReg.DX / 256: Col = OutReg.DX -_
- INT(OutReg.DX / 256) * 256
-
- END SUB
-
- '
- SUB FossilPurge (OutIn) 'Purge input (OutIn=0=Out, 1=In, 2=Both)
- 'Purges inbound and/or outbound FOSSIL
- 'buffer(s)
-
- IF OutIn = 0 THEN InReg.AX = 2304 ELSE InReg.AX = 2560
- GOSUB Purger
- IF OutIn = 2 THEN InReg.AX = 2304: GOSUB Purger
- EXIT SUB
-
- Purger:
- InReg.DX = Commport
- Interrupt &H14, InReg, OutReg
- RETURN
-
- END SUB
-
- '
- SUB Hold 'Wait until output clears outbound FOSSIL buffer
-
- IF Baud THEN
- DO
- FossilCD Status
- LOOP UNTIL (ABS((Status AND 64) > 0))
- END IF
-
- END SUB
-
- '
- SUB ModemOut (Text$) 'Send a string to the modem
-
- IF Text$ = "" THEN EXIT SUB 'Goof-up protection
-
- IF Baud THEN
- Temp = LEN(Text$)
- FOR X = 1 TO Temp 'Put each char into outbound buffer
- InReg.AX = (&HB * 256) + ASC(MID$(Text$, X, 1))
- InReg.DX = Commport
- DO
- Interrupt &H14, InReg, OutReg
- IF OutReg.AX = 0 THEN FossilCD Status 'Buffer was full
- LOOP WHILE OutReg.AX = 0 'Try again
- NEXT
- END IF
- LocalPrint Text$ 'Sub to print text locally (suggest CONS:)
- IF Baud > 0 AND Baud < 4800 THEN Hold '<------------------------,
- 'Optional, prevents excessive overrun__/
- 'You might want to make dependent on length
- 'of string sent
- END SUB
-