PROGRAM: DIALOG WRITTEN BY: E. VERNON BUCK SAN LORENZO, CA. (415) 276-4607 VERSION: 1.0 DATE: NOV. 13, 1985. DIALOG IS A PROGRAM WHICH CAN AUTOMATICALLY CONDUCT A DIALOG WITH A REMOTE COMPUTER, DATABASE SYSTEM, OR BULLETIN BOARD. DIALOG READS "INSTRUCTIONS" FROM AN "INSTRUCTION FILE". THIS FILE IS PRODUCED BY ANY EDITOR OR WORD PROCESSOR. THE INSTRUCTION FILE TELLS THE PROGRAM HOW TO CONDUCT THE "DIALOG" WITH THE REMOTE (OR "HOST") COMPUTER. THE INSTRUCTIONS TELL THE PROGRAM WHAT MESSAGES TO SEND, AND WHAT MESSAGES TO RECEIVE FROM THE HOST. THE PROGRAM HAS ERROR DETECTION, AND CAN ALSO MAKE SOME SIMPLE DECISIONS (BRANCHING) BASED ON THE CONTENT OF MESSAGES RECEIVED FROM THE HOST. THE DIALOG IS DISPLAYED ON THE TERMINAL AS IT HAPPENS, AND (OPTIONALLY) RECORDED IN A "LOG" FILE. THE INSTRUCTIONS AVAILABLE ARE AS FOLLOWS: S,ccc...c SEND THE STRING ccc...c TO THE HOST. THE SEND COMMAND EXPECTS THE CHARACTERS TO BE ECHOED BY THE HOST. T,ccc...c TRANSMIT THE STRING ccc...c TO THE HOST. IDENTICAL TO THE S COMMAND, EXCEPT DOES NOT EXPECT AN ECHO. R,ttt...t RECEIVE A STRING OF CHARACTERS FROM THE HOST UNTIL THE "TERMINATION" STRING ttt...t IS RECEIVED. ANY NUMBER OF CHARACTERS CAN BE RECEIVED BEFORE THE TERMINATION STRING IS ENCOUNTERED, BUT ONLY THE LAST 2000 (ABOUT 1 SCREENFULL) WILL BE RETAINED. I,ddd...d,n IF THE LAST RECEIVED CHARACTERS (INCLUDING THE TERMINATION CHARACTERS FROM THE R INSTRUCTION) WERE ddd...d, THEN JUMP TO THE INSTRUCTION LINE LABELED n. n IS A NUMBER FROM 1 TO 9999. G,n GO TO (JUMP UNCONDITIONALLY) TO THE INSTRUCTION LINE LABELED n. E,i,n IF AN ERROR CONDITION OF TYPE i IS DETECTED, THEN GO TO THE INSTRUCTION LINE LABELED n. i CAN BE: "SE" - SEND INSTRUCTION ECHO ERROR "RE" - RECEIVE INSTRUCTION PARITY, FRAME OR OVERRUN ERROR "TO" - TIME OUT "CL" - CARRIER LOST. n = 0 MEANS IGNORE THE ERROR, AND CONTINUE. THIS IS THE DEFAULT. n = -1 ("SE" ONLY) MEANS SEND A BACKSPACE AND REPEAT THE ERRONEOUS CHARACTER L,lll CONTROL THE AMOUNT OF INFORMATION TO BE SAVED IN THE LOG FILE: lll=ON -- SAVE RECEIVED DATA ONLY lll=OFF-- SAVE NOTHING lll=ALL-- SAVE BOTH TRANSMITTED AND RECEIVED DATA (DEFAULT) D,ddd CONTROLS WHETHER THE DIALOG WILL BE DISPLAYED ON THE TERMINAL AS IT HAPPENS: ddd=OFF -- NOT DISPLAYED ON TERMINAL ddd=ON -- DISPLAYED ON TERMINAL (DEFAULT) C,p MAKE p THE CONTROL CHARACTER PREFACE FOR THE INSTRUCTION LINES THAT FOLLOW. I.E., ^M WOULD BE TRANSMITTED AS A CTRL-M WHEN p="^". DEFAULT IS "^". THE C INSTRUCTION IS NON-EXECUTABLE. THAT IS, IT OPERATES ON THE INSTRUC- TIONS AS THEY ARE COMPILED, BUT NOT AS EXECUTED (SINCE INSTRUCTIONS MIGHT BE EXECUTED IN A DIFFERENT ORDER). X EXIT. CLOSE FILES AND RETURN TO CP/M. INSTRUCTIONS CAN BE PRECEEDED BY A "LABEL NUMBER". THIS IS LIKE A LINE NUMBER IN BASIC OR FORTRAN. IT IS OPTIONAL. BUT OF COURSE, IF THERE IS AN I, G OR E INSTRUCTION ANYWHERE IN THE INSTRUCTIONS, THEN THERE MUST BE A LABELED INSTRUCTION WHICH MATCHES THE LABELS GIVEN IN THE I, G OR E INSTRUCTION. EXAMPLE: 100,S,hello^M ... G,100 NOTES: (1) ALL INSTRUCTION PARAMETERS MUST BE SEPARATED BY COMMAS. (2) IF A COMMA IS NEEDED IN A CHARACTER STRING, THEN SURROUND THE STRING WITH QUOTES ("..."). (3) LEADING BLANKS ARE IGNORED, UNLESS THE STRING IS QUOTED. (4) DO NOT USE TAB CHARACTERS (CTRL-I) TO INDENT. USE SPACES. FOLLOWING IS A SAMPLE INSTRUCTION FILE. THIS SET OF INSTRUCTIONS WAS DESIGNED TO LOG ON TO A COMMERCIAL DATA BASE SYSTEM (I.E. COMPUSERVE), JUMP TO THE FINANCIAL SECTION OF THE SERVICE, GET QUOTATIONS ON SEVERAL SECURITIES, AND THEN LOG OFF. THERE IS ALSO PROVISION FOR ERROR RECOVERY. E,SE,-1 E,TO,100 E,CL,200 T,^M E,RE,500 5,R,": " I,"Name: ",10 I,"ID: ",20 I,"Password: ",30 10,S,CIS^M G,5 20,S,"00000,9999^M" G,5 30,T,MY+PASSWORD^M E,RE,510 35,T,^C 40,R,! 60,S,GO MQINT^M E,RE,560 70,R,"Interface: " 80,S,"DATE^M" R,"Interface: " S,100^M R,: S,"FNI,VWESGX,LMVTX^M" 90,R,: S,^M R,"Interface: " 100,S,OFF^M T,^C 200,X 500,T,^M G,5 510,T,T^M G,40 560,T,^M G,70 TO INVOKE THE PROGRAM, TYPE DIALOG insfile.dlg logfile.log WHERE insfile.dlg IS THE FILE CONTAINING THE INSTRUCTIONS, AND logfile.log IS THE LOG FILE (TO BE WRITTEN BY DIALOG). THE LOG FILE IS OPTIONAL AND CAN SIMPLY BE OMITTED. THERE ARE NO DEFAULT FILE NAMES OR EXTENSIONS. REPLACING logfile.log WITH A QUESTION MARK WILL CAUSE THE INSTRUCTION FILE TO BE COMPILED, BUT NOT EXECUTED, FOR TESTING PURPOSES. DIALOG IS WRITTEN FOR COMPILATION WITH BASCOM BY MICROSOFT. THE DISTRIBUTED VERSION IS SET UP FOR I/O USING A TYPE 8251 USART, AT PORTS 00 AND 01. THE PROGRAM WILL MOST LIKELY HAVE TO BE MODIFIED FOR PARTICULAR SYSTEMS. IF YOU HAVE BASCOM AVAILABLE, THIS SHOULD BE EASY. IF NOT, IT MAY BE POSSIBLE TO PATCH THE DIALOG.COM FILE AS DESCRIBED BELOW. PATCH AREA CONSTANTS: DATA.PORT% = I/O DATA PORT FOR MODEM CTRL.PORT% = I/O STATUS & CONTROL PORT FOR MODEM TRDY.MASK% = THE BIT TO TEST FOR TRANSMIT READY IS SET TO 1 TRDY.POL% = SET THE SAME BIT AS TRDY.MASK% TO 1 TO REVERSE THE POLARITY OF THE TEST (I.E. READY WHEN BIT = 0) RRDY.MASK%, RRDY.POL% = SAME FOR RECEIVE READY RERR.MASK%, RERR.POL% = BITS TO TEST FOR READ ERRORS (I.E. PARITY, FRAME AND/OR OVERRUN), AND POLARITY OF SAME RERR.RES% = BYTE TO SEND TO CONTROL PORT TO RESET IT AFTER RECEIPT OF PARITY, FRAME OR OVERRUN ERROR CARRIER.MASK% = THE BIT(S) TO TEST FOR CARRIER PRESENT (E.G. DSR) CARRIER.POL% = POLARITY OF CARRIER BIT(S) CC.PREF$ = THE CHARACTER THAT PRECEEDS A CHARACTER TO INDICATE THAT THE 2ND CHARACTER IS A CONTROL CHARACTER. (I.E. ^M = CTRL-M, WHEN CC.PREF$ = "^") MAX.TIME = APPROX. TIME OUT TIME. FOR 4MHZ CPU, 1100 ~= 1 SECOND HOW TO PATCH THE .COM FILE: USING DDT.COM, OR SOME OTHER PATCHING PROGRAM, FIND THE FOLLOWING DATA STATEMENTS. THEY ARE PREFACED BY THE WORD "PATCH:". CHANGE THE NUMBERS FOLLOWING "PATCH:" TO SUIT YOUR SYSTEM. THEY ARE IN DECIMAL AND ASCII, AS FOLLOWS: (1) THE MODEM DATA I/O PORT NUMBER (2) THE MODEM CONTROL I/O PORT NUMBER (3) THE BIT TO TEST FOR TRANSMIT READY (4) THE BIT TO BE EXCLUSIVE OR'ED BEFORE TESTING FOR TRANSMIT (5) THE BIT TO TEST FOR RECEIVE READY (6) THE BIT TO BE EXCLUSIVE OR'ED BEFORE TESTING FOR RECIEVE (7) THE BIT(S) TO TEST FOR RECEIVE ERRORS (PARITY, FRAME AND/OR OVERRUN, ETC.) (8) THE BIT(S) TO BE EXCLUSIVE OR'ED WITH THE ERROR BITS BEFORE TESTING (9) BYTE TO SEND TO THE CONTROL PORT TO RESET IT FOLLOWING RECEPTION OF A TRANSMISSION ERROR (10) THE BIT(S) TO TEST FOR CARRIER ON (I.E., THE DSR LINE) (11) THE BIT(S) TO BE EXCLUSIVE OR'ED WITH THE CARRIER ON BIT BEFORE TESTING (12) THE DEFAULT CHARACTER TO BE A PREFACE FOR CONTROL CHARACTERS (13) THE TIME OUT COUNTER MAXIMUM