home *** CD-ROM | disk | FTP | other *** search
/ Eagles Nest BBS 6 / Eagles_Nest_Mac_Collection_Disc_6.TOAST / DOS / PCAnyw50.exe / COMPUSRV.SCR < prev    next >
Text File  |  1994-03-05  |  8KB  |  183 lines

  1. ;==========================================================================
  2. description "Sample Script To Log Onto Compuserve"
  3. ;
  4. ; This is a sample script that shows how to log onto Compuserve.
  5. ; Your name and password are stored (encrypted) in a file named
  6. ; COMPUSRV.DAT. If the file does not exist, you are prompted for your
  7. ; UserID and password when the "User Id:" prompt is received.
  8. ; The script displays all initial screens and automatically responds with
  9. ; your name and password when appropriate.
  10. ; The script ends after the main menu is displayed.
  11. ; You regain keyboard control when the main is menu is displayed, if you
  12. ; press ESC, or if 10 seconds goes by without a recognizable prompt.
  13. ;==========================================================================
  14.  
  15. ;==========================================================================
  16. ;                          VARIABLE DECLARATION
  17. ;==========================================================================
  18.    string _s1[120]                   ;string for various uses
  19.    string _s2[120]                   ;string for various uses
  20.    string _name[30]                  ;name stored here
  21.    string _password[16]              ;password stored here
  22.    string _datFile[80]               ;name of DAT file stored here
  23.    string _key[1]                    ;for inputting a key
  24.    integer _i1                       ;integer for various uses
  25. ;==========================================================================
  26. ;                                                                               MAIN ROUTINE
  27. ;==========================================================================
  28.  
  29.    clear screen                      ;clear the screen
  30.  
  31.    _datFile = "COMPUSRV.DAT"         ;name of encrypted data file
  32.  
  33.    find first _datFile               ;check if DAT file exists
  34.    if ($result == 0) goto @l5        ;not yet - will create later
  35.  
  36.    open 1 _datFile                   ;open the file
  37.    read line 1 _name 30 0            ;read the login name
  38.  
  39. ;For maximum security, should ask user for the encryption key word
  40.    decrypt _name "MICKEY"            ;decrypt
  41.    trim _name                        ;remove trailing/leading spaces
  42.    read line 1 _password 16 0        ;read the password
  43.    decrypt _password "MICKEY"        ;decrypt
  44.    trim _password                    ;remove trailing/leading spaces
  45.    close 1                                                                        ;close the file
  46.  
  47. @l5:
  48.    set cancel on                     ;enable ESC to cancel the script
  49.    on cancel goto @cancel
  50.  
  51.    on timeout goto @timeout          ;setup overall timeout
  52.    set timeout 20                    ;to 20 seconds
  53.  
  54.    set disconnect on                 ;set disconnection trap
  55.    on disconnect goto @disconnect
  56.  
  57.    Send string "^C"                  ;anounce our presence
  58.  
  59. @L10:                                                                                    ;main loop starts here:
  60.    Gosub @getPrompt                  ;wait for a prompt line
  61.    if ($result < 0) goto @timeout    ;if we timed out, end the script
  62.  
  63. @L40:
  64.    index _s1 "User Id:"              ;if prompting for "userid", send ID
  65.    if ($RESULT == 0) goto @L50
  66.    strcmp _name ""                   ;if don't have a name,
  67.    if ($result == 0) then gosub @getData ;input from user
  68.    Send string _name                 ;send the name
  69.    Send string "^M"                  ;and a CR
  70.    Goto @L10
  71.  
  72. @L50:                                                                                    ;if prompting for "password", send it
  73.    Set ignorecase off                ;Do this for exact match of "Password"
  74.    Index _s1 "Password:"             ;check if "Password"
  75.    If ($result == 0) goto @L55       ;branch if not
  76.    Send string _password             ;else send it
  77.    Send string "^M"                  ;and a CR
  78.  
  79.    Goto @end
  80.  
  81. @L55:
  82.    Set ignorecase on
  83.    Goto @L10
  84.  
  85. @timeout:                                                                                ;a timeout occurred, end the script
  86.    Type string "^M^J(timeout)^M^J"
  87.    Goto @end
  88.  
  89. @cancel:                                                                                 ;user cancelled, so end the script
  90.    set cancel off
  91.  
  92. @cancel1:
  93.    type string "^M^JOperator Cancel^M^J"
  94.    type string "Hang up (Y/N) ?: "   ;ask if should hang up
  95.    _s1 = ""                          ;clear input variable
  96.    input _s1 1                       ;input name
  97.    upper _s1
  98.    strcmp _s1 "Y"
  99.    if ($result == 0) goto @cancel2   ;if Yes, branch to @cancel2 to hangup
  100.    strcmp _s1 "N"
  101.    if ($result != 0) goto @cancel1   ;branch if neither Y or N entered
  102.    goto @end                         ;if No, don't hang up but stay
  103.              ;in terminal mode.
  104. @cancel2:
  105.    type string "^M^JHANGING UP..."
  106.    Hang
  107.    End
  108. @disconnect:                                                                     ;disconnection, so end the script
  109.    Type string "^M^J(disconnected)^M^J"
  110.    Goto @end
  111.  
  112. @end:
  113.    beep                                                                           ;so you know the script has ended
  114.    type string "^M^J[YOU ARE NOW IN TERMINAL MODE]^M^J"
  115.    end terminal
  116.  
  117.  
  118. ;==========================================================================
  119. ; "@getPrompt" - wait for a prompt line and store it into _s1.
  120. ;                All lines received are displayed.
  121. ;                Returns: >=0, length of string
  122. ;                         < 0, timeout occurred
  123. ;==========================================================================
  124. @getPrompt:
  125.    on timeout goto @g2
  126.    wait receive 10                   ;wait for something to be received
  127.    _s1 = ""
  128.    on timeout goto @g1
  129.    set timeout 2                     ;wait 2 seconds for a line
  130.    receive line _s1                  ;(will timeout if a prompt received)
  131.    type line _s1                     ;full line - display on the screen
  132.    goto @getPrompt                   ;and wait for another line
  133.  
  134. @g1:                                                                                             ;did not get LF, so must be a prompt
  135.    Type string _s1                   ;display on the screen
  136.    strlen _s1 _i1
  137.    goto @g3                                                                       ;and return
  138.  
  139. @g2:                                                                                             ;timeout without getting anything
  140.    _i1 = -1                                                                       ;means something is wrong
  141. @g3:
  142.    on timeout goto @timeout          ;restore normal timeout
  143.    set timeout 20
  144.    return _i1                        ;return line length or -1 if timeout
  145.  
  146.  
  147. ; @getData: input login name and password from the user and write to disk.
  148. @getData:
  149.    set cancel off
  150. @gd2:
  151.    type string "^M^J^JEnter CompuServe Id: "
  152.    _s1 = ""                          ;clear input variable
  153.    input _s1 30                      ;input name
  154.    _name = _s1
  155.    encrypt _s1 "MICKEY"              ;encrypt it
  156.    type string "^M^J^JEnter Password: "
  157.    _s2 = ""
  158.    input _s2 16                      ;input password
  159.    _password = _s2
  160.    encrypt _s2 "MICKEY"              ;encrypt it
  161.  
  162.    type string "^M^J^JOK (Y/N) ?:"   ;ask if ok
  163. @gd0:
  164.    input key _key                    ;input Y or N
  165.    upper _key                        ;upper case the response
  166.    strcmp _key "Y"
  167.    if ($result == 0) goto @gd1       ;branch if yes to save in file
  168.    strcmp _key "N"
  169.    if ($result != 0) goto @gd0       ;branch if did not press Y or N
  170.    goto @gd2                         ;branch if no to get again
  171. @gd1:                                                                                    ;save data in file
  172.    create 1 _datfile                 ;create the file
  173.    write string 1 _s1                ;save name
  174.    write string 1 "^@"               ;follow with a null terminator
  175.    write string 1 _s2                ;save password
  176.    write string 1 "^@"               ;follow with a null terminator
  177.    close 1                                                                        ;close file
  178.    set cancel on
  179.  
  180.    return                                                                         ;exit
  181.  
  182. 
  183.