{$I EQUATES.PAS} {$I CURSOR.PAS} {$I STATUS.PAS} {$I VIDEO.PAS} {$I MENU.PAS} label STOP; const { Insert the appropriate codes in place of the asterices } ACCESS : String[8] = '***-****'; { Local access number } TERMID : String[2] = '**'; { Terminal ID } NAMEID : String[20] = '*******'; { TELENET User name } PASSWORD : String[20] = '********'; { Your secret password } { Hayes compatible modem initialization string } SMINIT : String[50] = 'ATQ0V1M1X0 S0=0 S2=3 S11=50'; { Port locations (these are for a Kaypro) } BAUDRP = $00; { Baud rate port } EXTDAT = $04; { External modem data port } EXTCTL = $06; { External modem control port } { Status port masks } DAV = $01; { Data available } TBE = $04; { Transmit buffer empty } DCD = $08; { Data Carrier Detect } { Menu constants } MaxLines = 14; { Number of choices in menu below } Lines : Array[0..MaxLines] of String[40] = ('* Perform TELENET Log-On For Which City *', { Menu title } ' Atlanta, Georgia', { Choices } ' Boston, Massachusets', { | } ' Chicago, Illinois', { v } ' Dallas, Texas', ' Denver, Colorado', ' Detroit, Michigan', ' Houston, Texas', ' Los Angeles, California', ' Newark, New Jersy', ' New York, New York', ' Philadelphia, Pennsylvania ', ' San Francisco, California', ' Seattle, Washington', ' Washington, D.C.'); type Str40 = String[40]; { To contain the send-out string } var BYTEIN : Byte; { To contain any Byte values } CHARIN : Char; { To contain any Character values } ACODE : String[3]; { To contain the area code } CHOICE : Integer; { To return the menu choice } function In_Modem : byte; { Read a byte from the modem port, no wait ... assumed ready } begin In_Modem := port[EXTDAT] end; procedure Out_Modem (Number : Str40); { Send a string out the modem port a byte at a time. Tests for ready state. } var J : Byte; begin For J := 1 to length(Number) Do begin repeat { Loop until } until (TBE and port[EXTCTL]) <> 0; { modem ready then } Port[EXTDAT] := ord(Number[J]); { output character. } write(Number[J]); { Display on screen.} end; Delay(1000); { Pause 1 sec. } BYTEIN := In_Modem; { Eat character. } writeln; { Terminate line. } end; procedure Initialize_Modem; { Set up SIO chip and send Smart Modem Initialization string. } { ************************************************************** } { *** If program fails to dial, problem is either here or in *** } { *** the carrier detect loop. Check IMP or MEX overlay for *** } { *** the necessary changes for your setup. *** } { ************************************************************** } begin port[EXTCTL] := $18; { Reset SIO channel } port[EXTCTL] := 4; { SIO register 4 } port[EXTCTL] := $44; { 16x, 1 stop bit, no parity } port[EXTCTL] := 1; { SIO register 1 } port[EXTCTL] := $00; { Waits, rx, tx disable } port[EXTCTL] := 3; { SIO register 3 } port[EXTCTL] := $0C1; { 8 bits/character, rx enable } port[EXTCTL] := 5; { SIO register 5 } port[EXTCTL] := $EA; { DTR on, 8 bits/char, tx, RTS on } port[BAUDRP] := 7; { 1200 baud } delay(500); { Pause 500 ms } Out_Modem ('AT' + CR); { Send modem attention } Out_Modem (SmInit + CR); { Send SmartModem init string } end; procedure Read_Until (TRIGGER : Char); { Test for Data Available, read bytes until trigger character is read } begin repeat repeat { Loop } until (DAV and port[EXTCTL]) <> 0; { until character in port } CHARIN := chr(port[EXTDAT]); { then read characters } until CHARIN = TRIGGER; { until it matches trigger.} writeln(CHARIN); { Show last character read.} delay(1000) { Pause 1 sec. } end; { ************************************************************************ } { * MAIN PROGRAM * } { ************************************************************************ } begin ClrScr; writeln('TELENET Log-On Program By: Joseph Fall 7/25/86'); delay(1000); CHOICE := Menu(MaxLines, Lines); { Get menu choice } Case CHOICE of 1 : ACODE := '404'; { Assign area code } 2 : ACODE := '617'; 3 : ACODE := '312'; 4 : ACODE := '214'; 5 : ACODE := '303'; 6 : ACODE := '313'; 7 : ACODE := '713'; 8 : ACODE := '213'; 9 : ACODE := '201'; 10 : ACODE := '212'; 11 : ACODE := '215'; 12 : ACODE := '415'; 13 : ACODE := '206'; 14 : ACODE := '202'; end; ClrScr; Draw_Status_Border; Write_Status('Initializing SIO and Modem ...'); GotoXY(1,2); Initialize_Modem; Write_Status('Dialing Local (TELENET) Access Number ...'); GotoXY(1,6); Out_Modem('ATDT' + ACCESS + CR); { ****************************************************************** } { * Carrier Detect Loop ... assumes your modem uses pin 8 (DCD) to * } { * detect a carrier. If your setup does not support DCD, then * } { * insert a different loop or a long enough delay to insure that * } { * you have a carrier and comment out this loop. * } { ****************************************************************** } repeat port[EXTCTL] := $10; { Reset status } until (DCD and port[EXTCTL]) <> 0; { ****************************************************************** } Write_Status('(CONNECTED) ... Attempting to Log On.'); GotoXY(1,8); delay(1000); Out_Modem(CR + CR); Read_Until('='); Out_Modem(TERMID + CR); Read_Until('@'); Out_Modem('C DIAL' + ACODE + '/12,' + NAMEID + CR); Read_Until(' '); Out_Modem(PASSWORD + CR); Write_Status('Wait for (TELENET) reply ... then press (ANY KEY)'); GotoXY(1,15); repeat repeat if KeyPressed then goto STOP until ((DAV and port[EXTCTL]) <> 0); CHARIN := chr($7F and port[EXTDAT]); write(CHARIN) until KeyPressed; STOP: Write_Status('(H)ang up (C)ontinue'); repeat read(KBD, CHARIN) until UpCase(CHARIN) in ['H','C']; ClrScr; if UpCase(CHARIN) = 'H' then begin port[EXTCTL] := 5; port[EXTCTL] := $68; delay(2000); port[EXTCTL] := 5; port[EXTCTL] := $EA; Out_Modem('AT H' + CR); Cursor_On; Halt end; writeln; writeln ('Completed ... return to terminal program now.'); Cursor_On end.