ckepage.ksc
上传用户:dufan58
上传日期:2007-01-05
资源大小:3407k
文件大小:7k
源码类别:

通讯/手机编程

开发平台:

Windows_Unix

  1. #!/usr/local/bin/kermit +
  2. ;
  3. ; File APAGE.KSC
  4. ; Version 4.0
  5. ;
  6. if < v(version) 700000 end 1 C-Kermit 7.0 or later required.
  7. ; TAP/IXO alphanumeric paging script for Kermit 95 and C-Kermit.
  8. ; Authors: F. da Cruz and C. Gianone, Columbia University, September 1996.
  9. ;
  10. ; For use with C-Kermit 7.0 / K95 1.1.17 or later.
  11. ; For a detailed explanation, consult "Using C-Kermit", 2nd Ed., pp.454-456.
  12. ;
  13. ; Version 2.0: July 1997:
  14. ;  1. To make TAPMSG fit into 1K for small C-Kermit versions.
  15. ;  2. Change END to STOP within SWITCH to work around bug.
  16. ; Version 3.0: September 1997:
  17. ;  1. Change STOP back to END because bug is fixed.
  18. ;  2. Added robustness.
  19. ; Version 4.0: August 1998:
  20. ;  1. Additional robustness - requires 2K command buffer.
  21. ;  2. Diagnostics.
  22. ;
  23. ; WARNING: Automatic redialing is restricted or illegal in some
  24. ; countries.  Modify the lines marked "IF LEGAL!" if below this applies
  25. ; in your location.
  26. ;
  27. ; TAPMSG, defined below, is an alphanumeric pager dialing script that
  28. ; implements the Telocator Alphanumeric Protocol (TAP), also known as IXO,
  29. ; for sending one-line alphanumeric pages.  TAPMSG assumes the connection
  30. ; to the paging service is already made.
  31. ;
  32. ; The APAGE macro makes a connection to the paging service and then uses
  33. ; TAPMSG to send the page.  Here is a SAMPLE; you will need to adjust it
  34. ; to work with your paging service.  Hint: Some paging services are very
  35. ; picky about modem configurations.  For example, experience has shown
  36. ; that to dial a certain service successfully with a USR 28.8 modem, just
  37. ; about all of the modem's features must be turned off prior to dialing.
  38. ; If you have trouble connecting to your service and staying connected,
  39. ; try removing the ";" from the left margin of the commands marked
  40. ; UNCOMMENT below.
  41. ;
  42. ; Replace values in lines marked (*) with the ones appropriate for your
  43. ; computer, modem, and paging service:
  44. ;
  45. ; UNIX-SPECIFIC INSTRUCTIONS:
  46. ; 1. Make sure C-Kermit 7.0 is installed and has permission to use
  47. ;    dialout devices.
  48. ; 2. Call this file "alphapage" or other name of your choice;
  49. ; 3. Change the first line show the full pathname of the C-Kermit 7.0
  50. :    executable;
  51. ; 4. Give this file execute permission ("chmod +x alphapage");
  52. ; 5. Put this file in a directory that is in the PATH of users who need
  53. ;    to send pages;
  54. ; 6. Invoke with command-line arguments, e.g.:
  55. ;
  56. ;      alphapage "+1 (212) 555-1234" "This is a message"
  57. ;
  58. ;    Use shell quoting rules to group words into arguments.
  59. ;
  60. ; GENERAL INSTRUCTIONS (work on all platforms).
  61. ;
  62. ; To invoke the APAGE macro, put it in a file, edit it as necessary for
  63. ; your setup, tell C-Kermit to "take" the file (which installs the APAGE
  64. ; and TAPMSG definitions) and then to send a page, just type:
  65. ;
  66. ;   apage number { this is a message }
  67. ;
  68. ; at the C-Kermit> prompt, for example:
  69. ;
  70. ;   apage 99997654321 { Please call the office }
  71. ;
  72. ; Note: the pager ID number should not contain any spaces or else you must
  73. ; enclose it in braces:
  74. ;
  75. ;   apage { 999 76 543 21 } { This is a message }
  76. ;
  77. ; Ditto for the message.
  78. ;
  79. ; DEBUGGING: If you want to see diagnostic and progress messages, type
  80. ; "define testing 1" at the Kermit prompt before trying to send a page.
  81. ;
  82. local usage %m
  83. assign %m fbasename(%0)
  84. define usage { exit 1 {usage: %m <phonenumber> <message>} }
  85. if not def TESTING def TESTING 0 ; Set to 1 for testing / debugging
  86. if m(TESTING) {  ; So we can watch what happens
  87.     set dial display on
  88.     set input echo on
  89.     set terminal echo local    ; So output goes in session log
  90.     log session                ; Creates session.log in current directory
  91.     log transact               ; Creates transact.log in current directory
  92. }
  93. define APAGE {
  94.     local rc number            ; rc = Return code for this macro
  95.     if < v(argc) 2 end 1 PIN required
  96.     asg number 5554321         ; (*) Paging service phone number
  97.     set modem type usr         ; (*) I have a USR modem
  98.     set port /dev/tty01        ; (*) on this device
  99.     if fail end 1 SET PORT failed
  100.     set speed 1200             ; (*) Must use 1200 bps for paging
  101.     set parity even            ; (*) and even parity
  102.     set flow none              ; (*) and no flow control
  103.     set modem flow none        ; (*) ...
  104.     set modem error-correction off
  105.     set modem data-compression off
  106.     set modem speed-matching off
  107.     set output pacing 200      ; Talk s-l-o-w-l-y to the paging service
  108.     set dial retries 20        ; (*) Allow 20 redials (IF LEGAL!)
  109.     set dial interval 1        ; (*) 1 sec between redial attempts (IF LEGAL!)
  110.     dial m(number)            ; Call the pager service
  111.     asg rc v(status)        ; Save DIAL status
  112.     if = m(rc) 0 {            ; If the call is answered
  113.         tapmsg %1 {%2}       ; Send the page
  114.         asg rc v(status)      ; Save the result
  115.     } else {                   ; Otherwise
  116.         echo Page failed.      ; Fail.
  117.     }
  118.     hangup                     ; Hang up the phone
  119.     ;
  120.     ; For shared in-out ports you might need to reset the port's original
  121.     ; speed here and maybe also send it some kind of reset command like ATZ0.
  122.     ;
  123.     set modem type v(modem)   ; Restore default modem settings
  124.     end m(rc)                 ; Return
  125. }
  126. ; TAPMSG Telocator Alphanumeric Protocol execution.  Call with:
  127. ;   %1 = Pager ID (PIN)
  128. ;   %2 = Message (single line)
  129. ;  Assumes connection is made.  Uses TAP to send PIN and 1-line message.
  130. ;
  131. def TAPMSG {
  132.     local %i %m %s blk ; Local variables
  133.     asg %m 2%113%2133 ; <STX>ID<CR>msg<CR><ETX>
  134.     asg %s fchecksum(%m) ; Get checksum and make block
  135.     asg blk %mfchar(fmod(%s/256,16)+48)-
  136. fchar(fmod(%s/16,16)+48)-
  137. fchar(fmod(%s,16)+48)13 ; Checksummed TAP block
  138.     if m(TESTING) xecho WAITING FOR ID= PROMPT...
  139.     for %i 1 6 1 { ; Try six times to get prompt
  140. out 13 ; Send <CR>
  141. in 3 ID= ; Wait for "ID="
  142. if succ break
  143.         if m(TESTING) xecho NO ID= PROMPT - TRYING AGAIN
  144.     }
  145.     if > %i 6 end 1 FAILED: No "ID=" prompt after 6 tries
  146.     for %i 1 8 1 { ; Send <ESC>PG1, get <ACK>
  147. msleep 500
  148. output {27}PG113
  149.         if m(TESTING) echo SENT <ESC>PG1(%i)...
  150. minput 3 {613} {2113} {ID=} {27413}
  151.         if m(TESTING) echo RESULT=v(minput)
  152. switch v(minput) {
  153.   :0, continue ; Timeout
  154.   :1, break ; <ACK>
  155.   :2, continue ; <NAK>
  156.   :3, out {27}PG113, continue
  157.   :4, end 1 Forced disconnect ; Forced disconnect - fatal
  158. }
  159. break
  160.     }
  161.     if > %i 8 end 1 Timeout during TAP
  162.     in 10 27[p13 ; Wait for go-ahead
  163.     if fail end 1 No go-ahead ; Didn't get it
  164.     for %i 1 8 1 { ; Try eight times
  165. msleep 500
  166. output m(blk) ; Send block
  167.         if m(TESTING) echo SENT BLOCK (%i)...
  168. minput 8 {613} {2113} {1327413} {3013}
  169.         if m(TESTING) echo RESULT=v(minput)
  170. switch v(minput) {             ; Get response
  171.   :0, continue                  ; Timeout
  172.   :1, break                     ; <ACK> - success
  173.   :2, continue                  ; <NAK>
  174.   :3, end 1 Forced Disconnect
  175.   :4, echo ERROR - RETRYING, continue
  176. }
  177. out 413                       ; Sign off with <EOT>
  178. in 8 27413                   ; Get <ESC><EOT> back
  179. break                           ; But ignore timeout
  180.     }
  181.     if > %i 8 end 1 Too many retries
  182. }
  183. ; If invoked as a "kerbang" script execute it now.
  184. if equal "%0" "v(cmdfil)" {
  185.     if not def %1 usage
  186.     if not def %2 usage
  187.     apage {%1} {%2}
  188.     exit v(status)
  189. }
  190. ; (End)