home *** CD-ROM | disk | FTP | other *** search
- ; ----------------------------------------------------------------
- ; FILENAME: DIAL.ASM
- ;
- ; FUNCTIONS:
- ;
- ; DIAL ---- Transmits passed phone number to modem for dialing
- ; DIALCLR -- Clears and resets communications port
- ; ----------------------------------------------------------------
- ; Copyright(c) 1991 - James Occhiogrosso
-
- INCLUDE DEVELOP.MAC ; Include Developer's Library Macro file
-
- PUBLIC DIAL ; Declare dialer function
- PUBLIC DIALCLR ; Declare dialer clear function
-
- EXTRN __PARINFO:FAR ; Get parameter information
- EXTRN __PARNI:FAR ; Get numeric integer parameter
- EXTRN __PARL:FAR ; Get logical parameter
- EXTRN __PARC:FAR ; Get string parameter
- EXTRN __RETL:FAR ; Return logic value to Clipper
- EXTRN __RET:FAR ; Return logic value to Clipper
-
-
- DGROUP GROUP DATASEG ; Clipper's data segment
- DATASEG SEGMENT PUBLIC '_DATA'
-
- DIAL_STRING DB 'AT S7=30 D' ; Dial string
- PULSE_TONE DB 'T', 0 ; Default to tone dial
- PORT_WORD DB 83h ; Default to 1200,N,8,1
- PORT_NUM DB 0 ; Default port is COM1
- CR_STRING DB 0Dh, 0 ; End modem command
-
- HANG_UP DB '~~~+++~~~ATH0', 0Dh, 0 ; Hang-up string
-
- DATASEG ENDS
-
- CODESEG SEGMENT PUBLIC 'CODE'
- ASSUME CS:CODESEG,DS:DGROUP,ES:DGROUP
-
-
- ; ---------------------------------------------------------------
- DIAL PROC FAR ; Dial passed telephone number
- ; ---------------------------------------------------------------
-
- START:
- PUSH_REGS ; Save Clipper's registers
-
- P_COUNT ; Get number of parameters
- CMP AX, 0 ; Any parameters passed?
- JE ERROR ; No! Return to Clipper
- CMP AX, 3 ; Yes! Jump to parameter
- JE SETUP3 ; handler based on PCOUNT
- CMP AX, 2 ;
- JE SETUP2 ;
- JMP SETUP1 ; Minimum is 1 parameter
-
- ERROR: SUB AX, AX ; Clear AX (return false)
- JMP DONE ; and return to Clipper
-
- SETUP3: ; Parameter 3 - Tone/Pulse
- P_TYPE 3 ; Get its type
- CMP AX, 4 ; Is it logical?
- JNE ERROR ; No! Return to Clipper
- GET_PARL 3 ; Yes! Get its value
- CMP AX, 1 ; Is it true?
- MOV PULSE_TONE, 54h ; Yes! Set for tone dial
- JE SETUP2 ; and continue
- MOV PULSE_TONE, 50h ; No! Set for pulse dial
-
- SETUP2: ; Parameter 2 - COM port
- P_TYPE 2 ; Get its type
- CMP AX, 2 ; Is it numeric?
- JNE ERROR ; No! Return to Clipper
- GET_PARNI 2 ; Yes! Get its value
- CMP AX, 5 ; Is it greater than 5
- JGE ERROR ; Yes! DOS only supports
- ; COM1-4. Return error
- SUB AX, 1 ; DOS port is biased to zero
- MOV PORT_NUM, AL ; Save port number
-
-
- SETUP1: ; Parameter 1 - Telephone no.
- P_TYPE 1 ; Get its type
- CMP AX, 1 ; Is it a string?
- JE NEXT1 ; Yes! Continue
- JMP ERROR ; No! Return to Clipper
-
- NEXT1:
- CALL INIT_COMM ; Initialize COM port
- CMP AL, 0 ; Did modem respond?
- JE ERROR ; No! Return to Clipper
- CMP AH, 0 ; Does port exist?
- JE ERROR ; No! Return to Clipper
-
- MOV DI, OFFSET DS:DIAL_STRING ; Get dial string address
- CALL COMM_OUT ; and send to modem
- CALL WRIT_CHAR ;
-
- GET_PARC 1 ; Get telephone number
- PUSH DS ; Save data segment
- PUSH DX ; Save passed data address
- PUSH AX ;
- CALL COMM_OUT ; Set up COM port
- POP DI ; Get telephone number
- POP DS ; address to DS:DI
- CALL WRIT_CHAR ; Send it to modem
- POP DS ; Restore data segment
- MOV DI, OFFSET DS:CR_STRING ; Get modem end string
-
- CALL COMM_OUT
- CALL WRIT_CHAR ; Send modem CR command string
- MOV AX, 1 ; Set AX to 1 (Return true)
-
- DONE:
- POP_REGS ; Restore Clipper registers
- RET_LOGIC ; Return logical to Clipper
-
-
- DIAL ENDP ; End of procedure
-
-
- ; ---------------------------------------------------------------
- DIALCLR PROC FAR ; Clears modem and disconnects
- ; ---------------------------------------------------------------
-
- PUSH_REGS ; Save Clipper's registers
- CALL INIT_COMM ; Test COM port
- TEST AL, AL ; Did modem respond?
- JE CLRERROR ; No! Return error to Clipper
- TEST AH, AH ; Does port exist?
- JE CLRERROR ; No! Return error to Clipper
-
- MOV DI, OFFSET DS:HANG_UP ; Get hang-up string address
- CALL COMM_OUT ; Set up COM port
- CALL WRIT_CHAR ; Disconnect modem
- MOV AX, 1 ; Set return vlaue to true
- JMP DONE2 ; and return to Clipper
-
- CLRERROR:
- MOV AX, 0 ; Error! Set return to false
- DONE2:
- POP_REGS ; Restore Clipper registers
- RET_LOGIC ; Return logical to Clipper
- DIALCLR ENDP
-
-
- ; ---------------------------------------------------------------
- ; ----------------- Begin subroutines below. --------------------
- ; ---------------------------------------------------------------
-
- COMM_OUT PROC NEAR ; Get COM port
- SUB DH, DH ; Clear DH
- MOV DL, PORT_NUM ; Move port number to DL
- SUB CL, CL ; Clear CL
- RET
- COMM_OUT ENDP
-
-
- WRIT_CHAR PROC NEAR
- WRIT_IT:
- MOV AH, 01 ; Output character request
- MOV AL, [DI] ; Get byte to transmit
- INT 14h
- INC DI ; Increment to next address
- CMP [DI], CL ; Is byte value = 0?
- JNE WRIT_IT ; No! Write next character
- RET ; Return to caller
- WRIT_CHAR ENDP
-
-
- INIT_COMM PROC NEAR ; Initialize COM port
- SUB AH, AH ; Clear AX
- MOV AL, PORT_WORD ; Get initalization word
- SUB DH, DH ; Clear DH
- MOV DL, PORT_NUM ; Get port number
- INT 14h ; Initialize port
- RET ; Return to caller
- INIT_COMM ENDP
-
- CODESEG ENDS ; End of code segment
- END ; End of assembly
-
-
-