home *** CD-ROM | disk | FTP | other *** search
- ;TITLE - DIAL - Dialing Directory to phone nos. via POPCOM modem
- ; C.A.D. (Computer Aided Dialing ) Prog by R. Hirsh, 5-19-85 VER 1.1
- ;
- ; Program from REMARK Vol 6, Issue 10, Oct 85, page 73
- ;
- ;Prog is invoked with SHIFT-F12 key after installation.
- ;
- BIOS SEGMENT AT 40H
- ORG 9 ;DISPLAY CHAR IN AL
- BIOS_CONOUT LABEL FAR ; ON CONSOLE - SEE BCONIO.ASM
- ORG 18 ;OUTPUT CHAR IN AL
- BIOS_AUXOUT LABEL FAR ; TO AUX DEVICE - SEE BAUXIO.ASM
- BIOS ENDS
- ;
- ;DEFINITIONS
- ESC EQU 27
- CR EQU 13
- LF EQU 10
- TAB EQU 9
- DEN EQU 21 ;NO. OF ENTRIES IN DIRECTORY
- KBDD EQU 0F4H ;KEYBOARD DATA PORT
- KBDS EQU 0F5H ;KEYBOARD STATUS PORT: BIT 0, 1=> CHAR TO READ
- ; BIT 1, 0=>KBD PROCESSOR READY
- ;
- CODE SEGMENT PARA PUBLIC 'CODE'
- ASSUME CS:CODE, DS:CODE, SS:CODE
- ORG 100H
- ;
- START: JMP INIT ;INIT INSTALLS INT SERV ROUT ADDR INTO VECTOR TABLE
- ;
- ;VARIABLES
- BUFF DB 3 DUP (?) ;KEYBOARD INPUT BUFFER
- CHRS DB 37 ;CHARS IN DIALING STRING
- INVMSG DB CR,ESC,'K','INVALID ENTRY! ENTER A NUMBER: ',0
- ;
- OPTIONS DB ESC,'m70',ESC,'E',CR,LF
- DB ESC,'m50',TAB,TAB,TAB,TAB,'MODEM DIALER',ESC,'m70',CR,LF,CR,LF
- DB ESC,'m40','COMPUTERS:',ESC,'m70'
- DB ' 0...VAX, Node A 6...Another BBS',CR,LF
- DB TAB,' 1...VAX, Node B 7...Byte BBS',CR,LF
- DB TAB,' 2...VAX, Node C 8...CompuServe',CR,LF
- DB TAB,' 3...VAX, Node D 9... ',CR,LF
- DB TAB,' 4...DEC10 10... ',CR,LF
- DB TAB,' 5...Zenith BBS 11... ',CR,LF
- DB ESC,'m20','HUMAN: ',ESC,'m70'
- DB ' 12...Blaze Pascal, Joliet, IL',CR,LF
- DB TAB,' 13...Connie Cobol, Chgo, IL',CR,LF
- DB TAB,' 14...Frank Fortran, Tampa, FL',CR,LF
- DB TAB,' 15... ',CR,LF
- DB TAB,' 16...Weather ',CR,LF
- DB TAB,' 17...Smart Graphics, StL, MO',CR,LF
- DB TAB,' 18...Heath Soft. Consult., OS and LangSoft.',CR,LF
- DB TAB,' 19...Heath Soft Consult., Appl. Pgms.',CR,LF
- DB TAB,' 20... ',CR,LF
- DB TAB,' 21...EXIT DIAL',CR,LF,CR,LF
- DB ESC,'m60','Enter the number of the device or person you want to call and hit return: ',ESC,'m71',0
- HGMG DB CR,ESC,'K','Hit "H" to hang up or RETURN to exit DIAL program',0
- ;
- ;Enter numbers and special characters here (comma = 2 second pause)
- MSG0 DB 'ATD 123-4567,,,,,890123-111 ',CR ;NODE A
- DB 'ATD 123-4567,,,,,890123-222 ',CR ;Node B
- DB 'ATD 123-4567,,,,,890123-333 ',CR ;Node C
- DB 'ATD 123-4567,,,,,890123-444 ',CR ;Node D
- DB 'ATD 123-4567,,,,,890123-555 ',CR ;Node D
- DB 'ATD 616-982-3503 ',CR ;ZEN 5
- DB 'ATD ',CR ;6
- DB 'ATD 603-924-9820 ',CR ;BYTE 7
- DB 'ATD 241-3101 ',CR ;COMS 8
- DB 'ATD ',CR ;9
- DB 'ATD ',CR ;10
- DB 'ATD ',CR ;11
- DB 'ATD ',CR ;12
- DB 'ATD ',CR ;13
- DB 'ATD ',CR ;14
- DB 'ATD ',CR ;15
- DB 'ATD 321-2222 ',CR ;WEA 16
- DB 'ATD 314-962-7833 ',CR ;SG 17
- DB 'ATD 616-982-3860 ',CR ;ZEN OS 18
- DB 'ATD 616-982-3884 ',CR ;ZEN PG 19
- DB 'ATD ',CR ;20
- DB 'ATD ',CR ;EXIT 21
- ;
- HGUP DB 'ATH0',CR ;HANG UP
- ;
- ;INT 5 SERVICE ROUTINE
- INT5: PUSH DS
- PUSH ES
- PUSH SI
- PUSH DI
- PUSH BP
- PUSH DX
- PUSH CX
- PUSH BX
- PUSH AX
- PUSH CS
- POP DS
-
- CALL MAIN
-
- POP AX
- POP BX
- POP CX
- POP DX
- POP BP
- POP DI
- POP SI
- POP ES
- POP DS
- IRET
- ;
- ;MAIN PROGRAM
- MAIN PROC NEAR
- MOV SI,OFFSET OPTIONS ;LIST THE DIRECTORY NUMBERS
- CALL DISPLAY
- ;
- GET_NUM: CALL READKEYS ;READ IN THE CHARS
- CALL ASCII_BIN ;CONVERTS TO BINARY (NO. IN AX)
- JNC VALID ;IS THE ENTRY VALID?
- MOV SI,OFFSET INVMSG ; NO, DISPLAY ERROR MSG
- CALL DISPLAY
- JMP GET_NUM ; AND TRY AGAIN
- VALID: CMP AL,DEN
- JNB THRU ;EXI IF "DEN" OR GREATER IS CHOSEN
- ;
- MOV BX, OFFSET MSG0 ;POINT TO MSG0
- MUL CHRS ;AX=AX*37
- ADD BX,AX ;POINT TO DESIRED MSG
- ;
- MOV CX,37 ;GET SET TO SEND 37 CHARS
- CALL AUX_IT ;SEND STRING OUT TO AUX PORT
- ;
- MOV SI,OFFSET HGMG ;GIVE OPTION OF HANGING UP
- CALL DISPLAY
- ;
- CALL GET_KEY
- CMP AL,'H' ;IS IT AN H?
- JNE THRU ;NO, EXIT
- ;
- MOV BX, OFFSET HGUP ; YES, HANG UP
- MOV CX,5 ;GET SET TO SEND 5 CHARS
- CALL AUX_IT ;SEND STRING OUT AUX PORT
- ;
- THRU: RET ;EXIT DIAL PROG
- MAIN ENDP
- ;
- ;PROC READS KEYS INTO BUFF UNTIL RETURN IS HIT. ALLOWS THREE KEYS MAX.
- READKEYS PROC NEAR ;ON RETURN, BUFF'S STARTING ADDRESS IS IN BX AND
- ;CHAR COUNT IS IN CX - FROM LJ SCANLON, P 236
- MOV DI,0 ;DI IS KEY COUNT
- MOV CX,3 ;GET READY FOR 3 KEYSTROKES MAX
- GETKEY: CALL GET_KEY ;READ A KEY, PUT CHAR IN AL
- CALL BIOS_CONOUT ;DISPLAY IT
- CMP AL,0DH ;IS IT A RETURN?
- JE SAV_CNT ;IF SO, EXIT VIA SAV_CNT
- MOV BUFF[DI],AL ;IF NOT, STORE THE CHAR (AL) IN MEMORY
- ;LOCATION BUFF+DI (DI IS KEY COUNT)
- INC DI ; AND UPDATE THE KEY COUNT
- LOOP GETKEY ;GET NEXT KEY
- SAV_CNT: MOV CX,DI ;FINAL KEY COUNT IS PUT INTO CX
- MOV BX,OFFSET BUFF ; AND LEAVE ADDRESS OF BUFF IN BX
- RET
- READKEYS ENDP
- ;
- ;UPON ENTRY, STARTING ADRESS OF STRING SHOULD BE IN BX AND
- ; NO. OF CHARS IN CX. UPON RET. BIN NO. IS IN AX.
- ; IF NO. TYPED IS NON VALID CHAR, CARRY FLAG IS SET TO SIGNAL ERROR.
- ASCII_BIN PROC NEAR
- XOR AX,AX
- ; CONVERT THE STRING
- RANGE: CMP BYTE PTR [BX],'0' ;IS CHAR A NUMBER?
- JB NON_DIG ;NO, JMP TO NON_DIG (ASCII CODE<30)
- CMP BYTE PTR [BX],'9' ;IS CHAR A NUMBER?
- JBE DIGIT ;YES, JMP TO DIGIT (ASCII CODE<=39)
- NON_DIG: STC ;IF NOT A DIGIT, SET CF FOR ERROR MARKING
- JC END_CONV ; AND EXIT
- DIGIT: MOV SI,10 ;THE CHAR IS A NUMBER
- PUSH DX
- MUL SI ; SO MULTIPLY AX BY 10
- POP DX
- MOV DL,[BX] ;FETCH CHAR AND PUT IT IN DL (6 IN ASCII IS 36)
- AND DX,0FH ;SAVE ONLY LOW BITS (36H--> 06H)
- ADD AX,DX ;UPDATE PARTIAL RESULTS
- JC END_CONV ;EXIT IF RESULT IS TOO BIG (IF CF SET)
- INC BX ;OTHERWISE, INC BX AND CONTINUE
- LOOP RANGE
- CLC ;WHEN DONE, CLEAR CF
- END_CONV: RET
- ASCII_BIN ENDP
- ;
- ;DISPLAY STRING AT SI ON CONSOLE
- DISPLAY PROC NEAR
- MOV AL,BYTE PTR [SI]
- OR AL,AL ;DISPLAY IT UNTIL A '0' IS FOUND
- JNZ DISCALL
- RET
- DISCALL: CALL BIOS_CONOUT ;DISPLAY CHAR IN AL
- INC SI
- JMP SHORT DISPLAY
- DISPLAY ENDP
- ;
- ;PROC WAITS FOR A KEY TO BE HIT AND RETURN WITH CHAR IN AL
- GET_KEY PROC NEAR
- WAIT: IN AL,KBDS ;CHECK STATUS PORT
- AND AL,1 ; IF AL=1, CHAR TO READ
- JZ WAIT
- IN AL,KBDD ;READ CHAR
- RET
- GET_KEY ENDP
- ;
- ;PROC SEND A STRING OUT THE AUX PORT. ENTER WITH NO. OF CHARS TO SEND IN CX
- ; AND BX-->STARTING ADDRESS OF SRRING.
- AUX_IT PROC NEAR
- LOOP1: MOV AL,[BX] ;PUT CHAR IN AL
- CALL BIOS_AUXOUT ;OUTPUT CHAR TO MODEM PORT
- INC BX
- LOOP LOOP1 ;OUTP[UT ALL THE CHARS
- RET
- AUX_IT ENDP
- ;
- PGM_END LABEL NEAR ;*CODE BEYOND THIS POINT IS LOST AFTER INSTALLATION
- ;
- ;INSTALL INTERUPT SERVICE ROUTINE ADDRESS IN JUMP TABLE
- INIT: PUSH DS
- XOR AX,AX
- MOV DS,AX ;DS=SEGMENT OF INT SERV RT JMP TABLE (=0)
- MOV SI,5*4 ;OFFSET OF INT 5
- CLI ;INTS OFF
- MOV WORD PTR [SI],OFFSET INT5 ;INSTALL OFFSET OF ROUTINE
- MOV WORD PTR [SI+2],CS ;INSTALL SEGMENT OF ROUTINE
- STI ;START INTS
- POP DS
- MOV SI,OFFSET MG ;PRINT INSTALLATION MESSAGE ON CRT
- CALL DISPLAY
- MOV DX,OFFSET PGM_END ;TERMINATE AND STAY RESIDENT
- INT 27H
- ;
- MG DB ESC,'m20','DIAL Software Installed!',ESC,'m40',CR,LF
- DB 'Hit SHIFT-F12 when ready to dial.',ESC,'m70',CR,LF,0
- ;
- CODE ENDS
- END START
-