home *** CD-ROM | disk | FTP | other *** search
/ Boldly Go Collection / version40.iso / TS / 05B / TMHOST05.ZIP / TEL-HOST.SCR < prev    next >
Text File  |  1992-02-07  |  31KB  |  1,023 lines

  1. ;  TO DO LIST/WISH LIST
  2. ;
  3. ;  X  Configurable time delays.
  4. ;  *  Additional clearance levels.
  5. ;  X  Standardize keys between modes. 
  6. ;  X  Instruction document
  7. ;  X  File list.
  8. ;  *  User log.
  9. ;  X  Auto log off after up/download 
  10. ;  X  Movement on screens to show script activity.
  11. ;  X  Make disk cache optional or remove.
  12. ;  *  Multiple try password.
  13. ;  *  Remote control program running using PC Mag PCRemote utility.
  14. ;  *  Time limit for first time callers.
  15. ;  X  Configurable com port for shell to DOS using WABIRD - needs testing
  16. ;  *  Call back option
  17. ;  *  User survey 
  18. ;  X  Add local mode to standby menu
  19. ;  *  Use TIME variables for accuracy
  20. ;  !  Remember.  THCONFIG.SCR and the THCONFIG.SBH must be in the 
  21. ;     default script directory.  The remaining files can be anywhere.
  22.  
  23.  
  24. ; === Modified from... =======================
  25. ; HOST.SCR by Tsung Hu, 29 Nov, 1991
  26. ; ============================================
  27.  
  28.  
  29.  
  30. ;    █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
  31. ;    █                                    Ver 0.5  1992  █
  32. ;    █   ▀▀▀▀█▀▀▀▀▀             █   █                    █
  33. ;    █       █  █▀▀▀▀ █         █   █ █▀█ █▀▀ ▀▀█▀▀      █
  34. ;    █       █  █▀▀▀▀ █    ▀▀▀  █▀▀▀█ █ █ ▀▀█   █        █
  35. ;    █       █  ▀▀▀▀▀ ▀▀▀▀      █   █ ▀▀▀ ▀▀▀   ▀        █
  36. ;    █                                                   █
  37. ;    █ Modified Telemate Host Program with Standby mode. █
  38. ;    █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█       
  39. ;
  40. ;       Advanced features by: Paul D. Kruschwitz
  41.  
  42. ;
  43. ; constant
  44. ;
  45. TRUE = 1
  46. FALSE = 0
  47. FOREVER = TRUE
  48. FILEDIR = "\HOST.DIR"        ; temp. file for F)ile command
  49.  
  50. ;
  51. ; global variable
  52. ;
  53. integer local,userlevel,exist,xport,standbymode,timewait,timeidle,i
  54. string username,password,filename,ch,CPORT,FLUSHCOMMAND
  55. integer NEWUSERLEVEL,SYSOPLEVEL,DETECTBAUD,INITIALBAUD,YELLTIME,YELLSOUND
  56. string HOSTDIR,DOWNLOADDIR,UPLOADDIR,RUNPROGRAM
  57. integer OFFAFTER,CP,localmode
  58.  
  59. localmode=false
  60. local=true
  61. standbymode=false
  62. i=7
  63.  
  64.  
  65. integer oldAlarmTime,oldAlarmSound,oldZAuto,oldZRecovery,oldBaud,oldConnection
  66. string oldDirUpload,scriptdir
  67.  
  68.    procedure StoreOptions
  69.    query alarmtime,oldAlarmTime
  70.    query alarmsound,oldAlarmSound
  71.    query dirupload,oldDirUpload
  72.    query zautodownload,oldZAuto
  73.    query zrecovery,oldZRecovery
  74.    query baud,oldBaud
  75.    query connection,oldConnection  
  76.    query maxdosshell,oldmaxdosshell
  77.    endproc
  78.  
  79.    procedure RestoreOptions
  80.    set alarmtime,oldAlarmTime
  81.    set alarmsound,oldAlarmSound
  82.    set dirupload,oldDirUpload
  83.    set zautodownload,oldZAuto
  84.    set zrecovery,oldZRecovery
  85.    set baud,oldBaud
  86.    set connection,oldConnection  
  87.    set maxdosshell,oldmaxdosshell
  88.    endproc
  89.  
  90.    procedure HostConfig         ; read the configuration file
  91.    string s,ch,scriptdir        ; HCONFIG.SBH from the default script dir
  92.    query dirscript,scriptdir
  93.    concat SCRIPTDIR,"\"
  94.    strpos SCRIPTDIR,"\\",pos
  95.    If pos=0
  96.       concat SCRIPTDIR,"THCONFIG.SBH"
  97.    else
  98.       substr SCRIPTDIR,1,pos,SCRIPTDIR
  99.       concat SCRIPTDIR,"THCONFIG.SBH"
  100.    endif
  101.    open SCRIPTDIR
  102.    if success
  103.       read s
  104.       atoi s,NEWUSERLEVEL       ; new user level
  105.       read s
  106.       atoi s,SYSOPLEVEL         ; sysop level
  107.       read s
  108.       atoi s,DETECTBAUD         ; detect baud rate
  109.       read s
  110.       atoi s,INITIALBAUD        ; initial baud rate
  111.       read s
  112.       atoi s,YELLTIME           ; yell time
  113.       read s
  114.       atoi s,YELLSOUND          ; yell sound
  115.       read HOSTDIR              ; directory containing H*.SBH
  116.       read DOWNLOADDIR          ; download directory      
  117.       read UPLOADDIR            ; upload directory  
  118.       read s
  119.       atoi s,TIMEWAIT           ; Active Delay time
  120.       read s
  121.       atoi s,TIMEIDLE           ; Inactive timeout
  122.       read s
  123.       atoi s,CACHE              ; Do you wish to flush cache
  124.       read FLUSHCOMMAND         ; DOS command to flush cashe
  125.       read RUNPROGRAM           ; Reads the program or batch to run in shell
  126.       close
  127.       set alarmtime,YELLTIME    ; setup yell alarm
  128.       set alarmsound,YELLSOUND
  129.       set dirupload,UPLOADDIR   ; setup upload directory
  130.       set MaxDosShell,True      ; Maximum dos shell on shell
  131.    else
  132.       print "Cannot find HCONFIG.SBH configuration file..."
  133.       print
  134.       print "Do you want to setup host mode (y/n)? ",
  135.       repeat
  136.          inputch ch
  137.       until success
  138.       if ch="y"
  139.          print ch
  140.          RestoreOptions
  141.          query dirscript,scriptdir
  142.          concat scriptdir,"\"
  143.          strpos scriptdir,"\\",pos
  144.          If pos=0
  145.             concat scriptdir,"THCONFIG.SCR"
  146.          else
  147.             substr scriptdir,1,pos,scriptdir
  148.             concat scriptdir,"THCONFIG.SCR"
  149.          endif
  150.          print scriptdir
  151.          script scriptdir     ; chain to THCONFIG.SCR
  152.       else
  153.          print "n"              ; abort host mode
  154.          print "Host mode aborted"
  155.          stop
  156.       endif
  157.    endif
  158.    integer cp        ; *** Sets up shell to dos parameters ***
  159.    string temp
  160.    query port,cp     ; Stores com port for use with wabird utility
  161.    cport="com"
  162.    itoa cp,temp      ; Changes to string ="#"
  163.    concat cport,temp ; Create "com#"
  164.    endproc
  165.  
  166.    procedure menu
  167.      print
  168.      print "         Press   [S]witch mode. [active<->standby]"
  169.      print "                 [L]ocal mode access"
  170.      print "                 [C]onfigure Host"
  171.      print "                 [Esc] to end script"
  172.      print "                *[Alt-H] to terminate user."
  173.      print "                *[C]hat with user.       (* = when on-line only.)"
  174.    endproc
  175.  
  176.  
  177.  
  178.  
  179.    procedure flushcache     ; MOD used to flush PcTool's delayed write cache.
  180.       dos FLUSHCOMMAND      ; "pc-cache /flush /ok"
  181.    endproc
  182.    
  183.    procedure activeflash integer col,row
  184.    string fl
  185.    fl="ACTIVE  "             ; Puts 'moving' action on screen
  186.    strset fl,"!",i,1         ; to show that script is still 
  187.    i=i+1                     ; functioning.
  188.    if i=8
  189.    i=1
  190.    endif
  191.    at col,row
  192.    print fl
  193.    endproc 
  194.   
  195.    procedure HostEnd
  196.    clear key                            ; clear keyboard buffer
  197.    clear com                            ; clear com buffer
  198.    print
  199.    print "Ending host mode"
  200.    put "^(","~",                        ; send modem init string
  201.    print
  202.    chdir HOSTDIR
  203.    delete FILEDIR                       ; delete temp file
  204.    RestoreOptions
  205.    clear text
  206.    print
  207.    print "TEL-HOST was modified from the original Telemate host script."
  208.    print
  209.    print "Advanced features were added by: Paul Kruschwitz"
  210.    print
  211.    print "---   ---   ---   ---   ---   ---   ---   ---   ---   ---"
  212.    print " PLEASE do not re-post changes under the TEL-HOST name"
  213.    print " to avoid version confusion."
  214.    print "---   ---   ---   ---   ---   ---   ---   ---   ---   ---"
  215.    print
  216.    print "All suggestions for improvement are welcome via RIME."
  217.    print
  218.    print "REMEMBER:  Attitude is everything."
  219.    stop
  220.    endproc
  221.  
  222.    procedure Disconnect                 ; end session
  223.    delay 10
  224.    if not local
  225.       hangup
  226.    endif
  227.    set connection,modem
  228.    local = FALSE
  229.    endproc
  230.  
  231.    procedure Output string s
  232.    print s,
  233.    if not local
  234.       put s,
  235.    endif
  236.    endproc
  237.  
  238.    procedure InputChar string ch        ; input and display locally
  239.    repeat
  240.       if not local
  241.          getch ch
  242.       endif
  243.       if local or not success
  244.          inputch ch
  245.          if success
  246.             if ch = "^["
  247.                HostEnd                  ; abort by operator
  248.             endif
  249.             print ch,
  250.          endif
  251.       endif
  252.    until success or not connected
  253.    endproc
  254.  
  255.    procedure InputEcho string ch        ; input and echo to remote
  256.    InputChar ch
  257.    if not local
  258.       put ch,
  259.    endif
  260.    if ch = "^M"                         ; add line feed
  261.       Output "^J"
  262.    endif
  263.    endproc
  264.  
  265.    procedure DotEcho string ch          ; input and echo "." to remote
  266.    InputChar ch
  267.    if not local
  268.       if ch="^H" or ch="^M"
  269.          put ch,
  270.       else
  271.          put ".",                       ; echo with "."
  272.       endif
  273.    endif
  274.    if ch = "^M"                         ; add line feed
  275.       Output "^J"
  276.    endif
  277.    endproc
  278.  
  279.    procedure Pause              ; request a key
  280.    string ch
  281.    Output "Press [Enter] to continue "
  282.    InputEcho ch
  283.    Output "^M^J"
  284.    if ch<>"^M"
  285.       Output "^M^J"
  286.    endif
  287.    endproc
  288.  
  289.    procedure TypeFile string filename,integer more
  290.    string ch                            ; display a file
  291.    integer i
  292.    i = 0
  293.    open filename
  294.    if not success
  295.       Output "File not found.^M^J"
  296.    else
  297.       while success
  298.          inputch ch
  299.          if success and ch = "^C"        ; operator break
  300.             clear com
  301.             Output "^M^J"
  302.             exit
  303.          endif
  304.          if not local
  305.             getch ch
  306.             if success and ch = "^C"     ; caller break
  307.                clear com
  308.                Output "^M^J"
  309.                exit
  310.             endif
  311.          endif
  312.  
  313.          read s                         ; display a line
  314.          Output s
  315.          Output "^M^J"
  316.  
  317.          i = i+1
  318.          if i = 22 and more             ; pause if <more> is TRUE
  319.             i = 0
  320.             Output "-- More --"
  321.             InputChar ch
  322.             if ch = "^C"
  323.                clear com
  324.                Output "^M^J"
  325.                exit
  326.             endif
  327.             Output "^M                    ^M"
  328.          endif
  329.       endwhile
  330.       close
  331.       if more
  332.          Pause
  333.       endif
  334.    endif
  335.    endproc
  336.  
  337.    procedure inithost
  338.    set zautodownload,off
  339.    set zrecovery,off
  340.    set baud,INITIALBAUD
  341.    clear key                            ; clear keyboard buffer
  342.    clear com                            ; clear com buffer
  343.    clear text
  344.    print
  345.    print "Initializing modem"
  346.    put "^)",                            ; send modem answer string
  347.    if connected
  348.       print "Carrier signal is high, trying to make it reflect the online status"
  349.       put "~AT&C1^M~",                  ; make carrier signal reflect online status
  350.       if connected
  351.          print "Carrier signal is still high, host mode may not work correctly"
  352.          print "Please check your modem manual for correct DIP switch setting"
  353.       else
  354.          print "Carrier signal is now correct"
  355.       endif
  356.       print
  357.    endif
  358.    put "~ATQ0E0X4^M~",                  ; disable responds from modem
  359.    endproc
  360.  
  361.    procedure InputString string str     ; input a string
  362.    string ch
  363.    str = ""
  364.    repeat
  365.       InputEcho ch
  366.       if ch <> "^M"
  367.          if ch = "^H"
  368.             if str = ""
  369.                Output " "
  370.             else
  371.                Output " ^H"
  372.             endif
  373.          endif
  374.          concat str,ch
  375.       endif
  376.    until ch = "^M" or not connected
  377.    if str="" or not connected
  378.       success = FALSE
  379.    else
  380.       success = TRUE
  381.    endif
  382.    endproc
  383.  
  384.    procedure InputFilename string filename,dir
  385.    string name
  386.    integer pos
  387.    InputString name                     ; input a filename
  388.    repeat
  389.       strpos name,":",pos               ;  strip drive part
  390.       if pos>0
  391.          strdel name,1,pos
  392.       endif
  393.    until pos=0 or not connected
  394.    repeat
  395.       strpos name,"\",pos               ; strip directory part
  396.       if pos>0
  397.          strdel name,1,pos
  398.       endif
  399.    until pos=0 or not connected
  400.    if name="" or not connected
  401.       success = FALSE
  402.       filename = ""
  403.    else
  404.       success = TRUE
  405.       filename = dir
  406.       concat filename,"\"               ; concat <dir>
  407.       strpos filename,"\\",pos
  408.       if pos>0
  409.          strdel filename,pos,1          ; avoid root directory"
  410.       endif
  411.       concat filename,name
  412.    endif
  413.    endproc
  414.  
  415.    procedure InputPassword string password ; input password
  416.    password = ""
  417.    repeat
  418.       DotEcho ch
  419.       if ch <> "^M"
  420.          if ch = "^H"
  421.             if password = ""
  422.                Output " "
  423.             else
  424.                Output " ^H"
  425.             endif
  426.          endif
  427.          concat password,ch
  428.       endif
  429.    until ch = "^M" or not connected
  430.    if password="" or not connected
  431.       success = FALSE
  432.    else
  433.       success = TRUE
  434.    endif
  435.    endproc
  436.  
  437.    procedure CheckUser string username,password,integer level,valid
  438.    integer found,pos1,pos2
  439.    string record,name,pass,lev
  440.    strpos username,";",pos1     ; record format: "first last;password#level"
  441.    strpos username,"#",pos2
  442.    if pos1>0 or pos2>0
  443.       valid = FALSE
  444.       return
  445.    endif
  446.    strpos password,";",pos1     ; check password for invalid character
  447.    strpos password,"#",pos2     ;  prevent "#2" etc
  448.    if pos1>0 or pos2>0
  449.       valid = FALSE
  450.       return
  451.    endif
  452.    chdir HOSTDIR
  453.    open "HUSER.SBH"             ; passwords in HUSER.SBH
  454.    if not success
  455.       create "HUSER.SBH"
  456.    endif
  457.    if not success
  458.       Output "System error, please call again later^M^J"
  459.       print "SYSOP: Cannot create HUSER.SBH"
  460.       Disconnect
  461.       alarm "SYSOP: Cannot create HUSER.SBH, disk full ?"
  462.       return
  463.    endif
  464.    found = FALSE
  465.    read record
  466.    while success and not found
  467.       strpos record,";",pos1    ; get fields from the record
  468.       strpos record,"#",pos2
  469.       if pos1>0 and pos2>0
  470.          substr record,1,pos1-1,name
  471.          substr record,pos1+1,pos2-pos1-1,pass
  472.          if name=username
  473.             found = TRUE
  474.             if pass=password
  475.                valid = TRUE
  476.                substr record,pos2+1,1,lev
  477.                atoi lev,level
  478.             else
  479.                valid = FALSE
  480.             endif
  481.          endif
  482.       endif
  483.       if not found
  484.          read record
  485.       endif
  486.    endwhile
  487.    if not found                 ; new users
  488.       seek -1
  489.       write username,";",password,"#",NEWUSERLEVEL
  490.       level = 1
  491.       valid = TRUE
  492.    FileExist "HNEWUSER.SBH",exist
  493.    if exist
  494.        Output "^M^J"
  495.        TypeFile "HNEWUSER.SBH",TRUE
  496.    endif
  497.    endif
  498.    close
  499.    endproc
  500.  
  501.    procedure Directory                  ; display download directory
  502.    string cmd
  503.    cmd = "DIR >"
  504.    concat cmd,FILEDIR                   ; DIR >\HOST.DIR
  505.    dos cmd                              ; shell to DOS
  506.    TypeFile FILEDIR,TRUE                ; display \HOST.DIR
  507.    endproc
  508.  
  509.    procedure FileTransfer string mode,protocol,filename
  510.    print "^M^JPlease start your transfer procedure or press Ctrl-X to abort^M^J"
  511.    delay 20
  512.    if mode = "r"
  513.       if filename=""                    ; receive batch files
  514.          receive protocol
  515.       else
  516.          receive protocol,filename      ; receive single file
  517.       endif
  518.    else
  519.       send protocol,filename            ; send multiple files
  520.    endif
  521.    delay 30  ; Trying to get the message to show up after ...
  522.    if success
  523.       Output "File transfer completed^M^J"
  524.    else
  525.       Output "File transfer aborted^M^J"
  526.    endif
  527.    If OFFAFTER
  528.       Output "^M^JAutomatically logging off after download."
  529.       disconnect
  530.    endif
  531.    Pause
  532.    if mode="r" and CACHE
  533.      flushcache
  534.    endif
  535.    endproc
  536.  
  537.    procedure beginhost
  538.    if not local and DETECTBAUD
  539.       waitfor "CONNECT^M","CONNECT 1200","CONNECT 2400","CONNECT 9600","CONNECT 19200",10
  540.       if found
  541.          switch found
  542.             case 1: baudrate = 300
  543.             case 2: baudrate = 1200
  544.             case 3: baudrate = 2400
  545.             case 4: baudrate = 9600
  546.             case 5: baudrate = 19200
  547.          endswitch
  548.          set baud,baudrate
  549.          Output "Connected at "
  550.          if not local
  551.             put baudrate,"^M^J"
  552.          endif
  553.          print baudrate
  554.       endif
  555.    endif
  556.    Output "^M^J"
  557.    delay 5
  558.    clear com
  559.    clear text
  560.    delay 5
  561.    chdir HOSTDIR
  562.    TypeFile "HWELCOME.SBH",FALSE        ; display welcome message
  563.    i = 1
  564.    len = 0
  565.    username = ""                        ; enter name (at most 3 times)
  566.    while i<=3 and len<4 and connected
  567.       Output "Please enter your First and Last name: "
  568.       InputString username
  569.       i = i+1
  570.       length username,len               ; check the length of name
  571.       if len<4
  572.          Output "Name too short, please try again^M^J^M^J"
  573.       else
  574.          Output username
  575.          Output " [Y/n]? "
  576.          InputString ch
  577.          if ch="n"
  578.             len=0
  579.          endif
  580.       endif
  581.    endwhile
  582.    if len<4 and connected
  583.       Output "Goodbye^M^J"
  584.       Disconnect
  585.    else
  586.       i = 1
  587.       len = 0
  588.       password = ""                     ; enter password (at most 3 times)
  589.       while i<=3 and len<4 and connected
  590.          Output "Password: "
  591.          InputPassword password
  592.          i = i+1
  593.          length password,len            ; check the length of ot
  594.          if len<4
  595.             Output "Password too short, please try again^M^J^M^J"
  596.          endif
  597.       endwhile
  598.       if len>=4                         ; check password and get user level
  599.          CheckUser username,password,userlevel,valid
  600.       endif
  601.       if (len<4 or not valid) and connected
  602.          Output "Invalid password, access denied^M^J^M^J"
  603.          Disconnect
  604.       else
  605.          chdir HOSTDIR                  ; display notice
  606.          FileExist "HNOTICE.SBH",exist
  607.          if exist
  608.             Output "^M^J"
  609.             TypeFile "HNOTICE.SBH",TRUE
  610.          endif
  611.       endif
  612.    endif
  613.    endproc
  614.  
  615.  
  616.    procedure WaitForCall                ; wait for connected
  617.    integer i,len,valid,exist,baudrate
  618.    set connection,modem
  619.    local = FALSE
  620.    xport = FALSE
  621.    i=0
  622.    clear text      
  623.    chdir HOSTDIR
  624.    typefile "HACTIVE.SBH",False
  625.    print 
  626.    print
  627.    print
  628.    if standbymode                                 
  629.       print
  630.       print "            STANDBY MODE HAS BEEN TRIGGERED"
  631.       print
  632.       print "      Host mode active for about 60 seconds ONLY!"
  633.       print
  634.       print "               Press [Esc] to end script"
  635.       print
  636.       print "|-----------------------------------<Approx. Time Remaining>|"
  637.       print "|        |         |         |         |         |          |"
  638.    else
  639.       menu
  640.    endif
  641.    clear key                            ; clear keyboard buffer
  642.    clear com                            ; clear com buffer
  643.    while not connected and i<61         ; wait for carrier signal
  644.       inputch ch                        ; sysop commands
  645.       if success
  646.          switch ch
  647.            case "^[":                   ; abort
  648.               HostEnd
  649.            case "L":                    ; local mode
  650.               set connection,computer   ; this will set connected = 1
  651.               local = TRUE
  652.            case "C":                    ; configuration
  653.               put"^("
  654.               RestoreOptions
  655.               script "THCONFIG.SCR"         ; chain to THCONFIG.SCR
  656.            case "S":
  657.               if not standbymode
  658.                  standbymode=true
  659.                  put"^("
  660.                  return
  661.               endif
  662.          endswitch
  663.       endif
  664.       if standbymode
  665.          print "*",
  666.          delay 10
  667.          i=i+1
  668.       else
  669.          Activeflash 30,13
  670.          delay 10
  671.       endif
  672.    endwhile
  673.    if i=61 and not connected
  674.       Put"^("
  675.       delay 15
  676.       Return
  677.    endif
  678.    endproc
  679.  
  680.  
  681.    procedure ChatMode                   ; chat mode
  682.    integer x
  683.    string rch,lch
  684.    Output "^M^JChat mode begin:^M^J"
  685.    repeat
  686.       if not local
  687.          getch rch
  688.          if success
  689.             put rch,
  690.             if rch = "^M"
  691.                Output "^J"
  692.             endif
  693.             wherex x
  694.             if rch = " " and x > 65
  695.                Output "^M^J"
  696.             endif
  697.          endif
  698.       endif
  699.       inputch lch
  700.       if success and lch<>"^["          ; abort if sysop press [Esc]
  701.          Output lch
  702.          if lch = "^M"
  703.             Output "^J"
  704.          endif
  705.          wherex x
  706.          if lch = " " and x > 65
  707.             Output "^M^J"
  708.          endif
  709.       endif
  710.    until lch="^[" or not connected
  711.    Output "^M^JChat mode end.^M^J^M^J"
  712.    Pause
  713.    endproc
  714.  
  715.    procedure DoCommand                  ; do a command  
  716.    string SHELLUTIL
  717.    ch=""
  718.    SHELLUTIL="WABIRD /"
  719.    IF NOT LOCAL 
  720.       WHENIDLE timeidle,"^*"
  721.    ENDIF
  722.    if xport
  723.       If standbymode
  724.          output "                               [Standby ON]^M^J"
  725.       else
  726.          output "                               [Standby OFF]^M^J"
  727.       endif
  728.       Output "Command F,U,D,T,C,X,G,(S,R,Z,M): "  ; export mode
  729.    else
  730.       Output "^M^J^M^J"
  731.       chdir HOSTDIR
  732.       TypeFile "HMENU.SBH",FALSE        ; display menu
  733.       If standbymode
  734.          output "                               [Standby ON]^M^J"
  735.       else
  736.          output "                               [Standby OFF]^M^J"
  737.       endif
  738.       Output "Command: "
  739.    endif
  740.    InputEcho ch
  741.    if ch<>"^M"
  742.       Output "^M^J"
  743.    endif
  744.    switch ch
  745.       case "F":                         ; file directory
  746.          chdir DOWNLOADDIR
  747.          Directory
  748.       case "T":                         ; type a file
  749.          Output "Enter filename: "
  750.          InputFilename filename,DOWNLOADDIR
  751.          if success
  752.             chdir DOWNLOADDIR
  753.             TypeFile filename,TRUE
  754.          endif
  755.       case "U":                         ; upload a file
  756.          Output "^M^J"
  757.          chdir HOSTDIR
  758.          TypeFile "HPROT.SBH",FALSE
  759.          Output "Select protocol: "
  760.          InputEcho protocol
  761.          Output "^M^J"
  762.          if local
  763.             Output "Function not available in local mode^M^J"
  764.          else
  765.             switch protocol
  766.                case "X","R":
  767.                   Output "Enter filename: "
  768.                   InputFilename filename,""
  769.                   if success 
  770.                      if success
  771.                      Output "Log off after download [y/N]? "
  772.                      InputString ch
  773.                         if ch="Y"
  774.                           OFFAFTER=TRUE
  775.                         else
  776.                           OFFAFTER=FALSE
  777.                         endif
  778.                      endif                  
  779.                      FileTransfer "r",protocol,filename
  780.                   endif
  781.                case "Z","S","T","M","Y","B","G":
  782.                   FileTransfer "r",protocol,""
  783.             endswitch
  784.          endif
  785.       case "D":                         ; download a file
  786.          Output "^M^J"
  787.          chdir HOSTDIR
  788.          TypeFile "HPROT.SBH",FALSE
  789.          chdir DOWNLOADDIR
  790.          Output "Select protocol: "
  791.          InputEcho protocol
  792.          Output "^M^J"
  793.          if local
  794.             Output "Function not available in local mode^M^J"
  795.          else
  796.             switch protocol
  797.                case "X","Y","Z","S","T","M","R","B","G":
  798.                   Output "Enter filename: "
  799.                   InputFilename filename,DOWNLOADDIR                  
  800.                   if success 
  801.                      Output "Log off after download [y/N]? "
  802.                      InputString ch
  803.                      if success
  804.                         if ch="Y"
  805.                           OFFAFTER=TRUE
  806.                         else
  807.                           OFFAFTER=FALSE
  808.                         endif
  809.                      endif                                                      
  810.                      FileTransfer "s",protocol,filename
  811.                   endif
  812.              endswitch
  813.          endif
  814.      case "C":                          ; yell
  815.          Output "Yelling Sysop, please wait ... ^M^J"
  816.          alarm "User is yelling ...^JPress [Enter] to accept, [Esc] to deny"
  817.          if success
  818.             print "^M^JSYSOP: press [Esc] to terminate chat mode"
  819.             ChatMode
  820.          else
  821.             Output "^M^JSorry, Sysop is not here^M^J"
  822.          endif
  823.       case "X":                         ; toggle export mode
  824.          xport = not xport
  825.       case "G":                         ; goodbye
  826.          chdir HOSTDIR
  827.          TypeFile "HGOODBYE.SBH",FALSE         
  828.          Disconnect
  829.       case "S":                         ; shell to DOS
  830.          if userlevel<SYSOPLEVEL
  831.             Output "Sorry, this command is for Sysop only^M^J"
  832.          else
  833.             chdir HOSTDIR
  834.             if local                    ; local mode shell to DOS
  835.                Output "Shelling to DOS ... ^M^J"
  836.                dos
  837.                Output "Return from DOS shell^M^J"
  838.             else
  839.                   Output "Shelling to DOS ... ^M^J"
  840.                   concat SHELLUTIL,CPORT   ; Used to create command line
  841.                   concat SHELLUTIL,"/dev"  ; for WABIRD.
  842.                   concat SHELLUTIL,CPORT
  843.                   dos SHELLUTIL            ; This is used instead
  844.                   Output "Returning from DOS shell^M^J" ; of hshell.bat
  845.             endif
  846.          endif
  847.       case "R":                         ; run remote program
  848.          if userlevel<SYSOPLEVEL
  849.             Output "Sorry, this command is for Sysop only^M^J"
  850.          else
  851.             chdir HOSTDIR
  852.             if local                    ; run HLOCAL.BAT if local mode
  853.                fileexist "hlocal.bat",exist
  854.                if exist
  855.                   Output "Loading external program ... ^M^J"
  856.                   dos "hlocal.bat"
  857.                   flushcache
  858.                   Output "Return from external program^M^J"
  859.                else
  860.                   Output "SYSOP: Cannot find HLOCAL.BAT^M^J"
  861.                endif
  862.             else                           ; run program using wabird.
  863.                   concat SHELLUTIL,CPORT   ; Used to create command line
  864.                   concat SHELLUTIL,"/dev"  ; for WABIRD.
  865.                   concat SHELLUTIL,CPORT
  866.                   concat SHELLUTIL,"/prg/c"
  867.                   concat SHELLUTIL,RUNPROGRAM   
  868.                   dos SHELLUTIL            ; This is used instead
  869.                
  870.                dos "wabird /com2 /devcom2 /prg/chremote.bat"
  871.                          ; /c needed for flag on command.com
  872.                flushcache
  873.                Output "Returning from remote program^M^J"
  874.             endif
  875.          endif
  876.       case "Z":                         ; shut down host mode
  877.          if userlevel<SYSOPLEVEL
  878.             Output "Sorry, this command is for Sysop only^M^J"
  879.          else
  880.             Output "Are you sure [y/N]? "
  881.             InputString ch
  882.             if ch="y"
  883.                Output "Shutting down host mode^M^J"
  884.                Disconnect
  885.                HostEnd
  886.             endif
  887.          endif
  888.       case "M":                         ; toggle standby mode
  889.          if userlevel<SYSOPLEVEL
  890.             Output "Sorry, this command is for Sysop only^M^J"
  891.          else
  892.             if standbymode
  893.                output "Standby Mode Disabled.^M^J"
  894.                output "Caution:  Modem will now always answer the phone.^M^J"
  895.                output "          Use the [Z] option to shut down Host.^M^J"
  896.                pause
  897.                standbymode=false
  898.             else
  899.                print "Standby Mode Enabled.^M^J"
  900.                pause
  901.                standbymode=true
  902.             endif
  903.          endif
  904.    endswitch
  905.    endproc
  906.  
  907.    procedure Title
  908.    integer count
  909.    chdir hostdir
  910.    count=0
  911.    clear text
  912.    clear com            
  913.         chdir HOSTDIR
  914.         typefile "HTITLE.SBH",false  ; Title page file.  Glitz
  915.         print
  916.         print "      Standby mode will become active in 5 seconds..."
  917.         print
  918.         print "                 [C]onfigure host mode."
  919.         print
  920.         print "     Press any other key to directly enter Answer mode"
  921.         print
  922.         print
  923.         repeat       
  924.            delay 10
  925.            inputch ch
  926.            count=count+1
  927.         until success or count=6
  928.         if success
  929.            if ch="c"
  930.              script "THCONFIG.SCR"
  931.            else
  932.              Return
  933.            endif
  934.         endif
  935.      standbymode=true
  936.    endproc
  937.  
  938.    procedure Standby  
  939.    chdir hostdir
  940.      clear text
  941.      clear com
  942.      clear com
  943.      clear text
  944.      local=true        
  945.      chdir HOSTDIR
  946.      Typefile "HSTANDBY.SBH",false  ;  This is the screen to display while
  947.                                     ;  it is waiting for a call to enable.
  948.      menu
  949.      done=false
  950.      repeat       
  951.         waitfor "RING",1
  952.         if found
  953.            ch=""
  954.            done = true
  955.         else
  956.            inputch ch
  957.            if success              ;  ESC to cancel standby
  958.               switch ch
  959.                 case "s":
  960.                    clear text
  961.                    clear com
  962.                    at 5,5
  963.                    print "Switching to active HOST mode."
  964.                    print
  965.                    standbymode=false
  966.                    return
  967.                 case "L":                    ; local mode
  968.                    set connection,computer   ; this will set connected = 1
  969.                    local = TRUE 
  970.                    localmode=TRUE
  971.                    return
  972.                 case "^[":
  973.                    HostEnd
  974.                 case "c":
  975.                    RestoreOptions
  976.                    script "THCONFIG.SCR"       ; chain to THCONFIG.SCR                      
  977.              endswitch
  978.            endif
  979.         endif
  980.         Activeflash 30,15   ;  Shows script activity.
  981.      until done
  982.      clear text
  983.      clear com
  984.      at 5,5
  985.      print "Ring Detected...  Waiting ",timewait," seconds for phone to stop ringing."
  986.      at 5,8                                                                   
  987.      print "Then the next call within about 60 seconds will be answered by the modem."        
  988.      delay (timewait*10)
  989.      standbymode=true
  990.      return
  991.      clear com
  992.    endproc
  993.  
  994. ;
  995. ; begin main program
  996. ;
  997. StoreOptions
  998. HostConfig              ; read configuration file HCONFIG.SBH
  999. put "^(","~",           ; send modem init string
  1000. Title
  1001. while FOREVER
  1002.    localmode=false
  1003.    if standbymode
  1004.       Standby
  1005.    endif
  1006.    if not localmode
  1007.       inithost             ; initialize host
  1008.       WaitForCall          ; wait for a call
  1009.    endif
  1010.    if connected
  1011.       Beginhost
  1012.    endif
  1013.    while connected
  1014.       DoCommand         ; do commands
  1015.    endwhile
  1016.    whenidle 0,""
  1017.    if standbymode
  1018.       put"^("
  1019.    endif
  1020. endwhile
  1021.  
  1022.  
  1023.