'=========================================================================== ' Subject: ACCESSING FOSSIL IN BASIC Date: 02-14-93 (21:39) ' Author: Coridon Henshaw Code: QB, PDS ' Origin: QuickBASIC ScrapBook Packet: MODEM.ABC '=========================================================================== DECLARE FUNCTION FossInit% (Port%) DECLARE FUNCTION BlockRead$ (Port%) DECLARE FUNCTION BlockWrite% (Port%, Buffer$) DEFINT A-Z '$INCLUDE: 'QB.BI' or use QBX.BI for PDS DIM SHARED Regs AS RegTypeX FUNCTION BlockRead$ (Port) Buffer$ = STRING$(32766, 0) 'Max 32766 bytes to read Regs.cx = LEN(Buffer$) Regs.dx = Port Regs.es = VARSEG(Buffer$) ' Change to SSEG for PDS Regs.di = SADD(Buffer$) CALL INTERRUPTX(&H14, Regs, Regs) BlockRead$ = LEFT$(Buffer$, Regs.ax) END FUNCTION FUNCTION BlockWrite (Port, Buffer$) Regs.cx = LEN(Buffer$) Regs.dx = Port Regs.es = VARSEG(Buffer$) ' Change to SSEG for PDS Regs.di = SADD(Buffer$) CALL INTERRUPTX(&H14, Regs, Regs) BlockWrite = Regs.ax 'Number of chars transfered END FUNCTION SUB FossDeInit (Port) ' Release the FOSSIL device driver Regs.ax = &H500 Regs.dx = Port INTERRUPTX &H14, Regs, Regs END SUB FUNCTION FossInit (Port) ' Initialize the FOSSIL device driver ' ' dx = Communications port number (0-3) ' ah = &H04 Fossil Function Number - Initialize FOSSIL driver ' (Raises DTR in the porcess) Regs.dx = Port Regs.ax = &H400 CALL INTERRUPTX(&H14, Regs, Regs) IF Regs.ax <> &H1954 THEN FossInit = False 'Fossil Not Found END IF FossInit = True END FUNCTION SUB SetDtr (Port, DtrStatus) Regs.dx = Port 'Set carrier detect low or high SELECT CASE DtrStatus CASE 0 Regs.ax = &H600 CASE 1 Regs.ax = &H601 CASE ELSE Regs.ax = &H600 BEEP END SELECT INTERRUPTX &H14, Regs, Regs END SUB SUB SetFlowControl (Port, Control) Regs.dx = Port SELECT CASE Control CASE 1 'Xon/Xoff on transmit Regs.ax = &H601 CASE 2 'CTS/RTS Regs.ax = &H602 CASE 3 'Xon/Xoff on recieve Regs.ax = &H608 END SELECT CALL INTERRUPTX(&H14, Regs, Regs) END SUB SUB SetPortParams (Port, Bps AS LONG, Bits, Stops, Parity$) Regs.dx = Port Regs.ax = 0 SELECT CASE Bps CASE 300 Regs.ax = (Regs.ax OR &H40) CASE 600 Regs.ax = (Regs.ax OR &H60) CASE 1200 Regs.ax = (Regs.ax OR &H80) CASE 2400 Regs.ax = (Regs.ax OR &HA0) CASE 4800 Regs.ax = (Regs.ax OR &HC0) CASE 9600 Regs.ax = (Regs.ax OR &HE0) CASE 19200 Regs.ax = (Regs.ax OR &H0) CASE 38400 Regs.ax = (Regs.ax OR &H20) CASE ELSE Regs.ax = (Regs.ax OR &HA0) 'Default to 2400 baud END SELECT SELECT CASE Bits CASE 5 Regs.ax = (Regs.ax OR &H0) CASE 6 Regs.ax = (Regs.ax OR &H1) CASE 7 Regs.ax = (Regs.ax OR &H2) CASE 8 Regs.ax = (Regs.ax OR &H3) CASE ELSE Regs.ax = (Regs.ax OR &H3) 'Default to 8 bits END SELECT SELECT CASE Stops CASE 1 Regs.ax = (Regs.ax OR &H0) CASE 2 Regs.ax = (Regs.ax OR &H4) CASE ELSE Regs.ax = (Regs.ax OR &H0) 'Default to 1 stop bit END SELECT SELECT CASE UCASE$(Parity$) CASE "N" Regs.ax = (Regs.ax OR &H0) CASE "O" Regs.ax = (Regs.ax OR &H8) CASE "E" Regs.ax = (Regs.ax OR &H18) CASE ELSE Regs.ax = (Regs.ax OR &H0) ' Default to no parity END SELECT Regs.dx = Port INTERRUPTX &H14, Regs, Regs END SUB