home *** CD-ROM | disk | FTP | other *** search
/ Jason Aller Floppy Collection / 106.img / MIRROR2.ZIP / PT&DIAL.XTS < prev    next >
Text File  |  1988-12-15  |  13KB  |  396 lines

  1. ;*******************************************************************
  2. ;*  Point and Dial is a "pop-up" utility used as a quick-dialer    *
  3. ;*  to dial phone numbers. Simply position the cursor at the start *
  4. ;*  of a phone number and hit Alt-d. Mirror interrupts whatever    *
  5. ;*  application you may be running in the foreground to read in    *
  6. ;*  the number and dial it. Alternately, hitting Alt-m brings up a *
  7. ;*  menu where you may enter a number and have it dialed, display  *
  8. ;*  a help page or Un-install Point and Dial.                   *
  9. ;*  =============================================================  *
  10. ;*  NEW OPTIONS:  Alt-c invokes CALCULATOR               *
  11. ;*          Alt-a invokes ASCII chart               *
  12. ;*                (both are available from menu as well)       *
  13. ;*******************************************************************
  14. ;*      Prism code is intended to serve as sample for anyone who   *
  15. ;*  wishes to develop applications using Mirror III and Prism.     *
  16. ;*******************************************************************
  17. ;;;; Modification log ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  18. ;;;;    9-88    added Calc.xts & Ascii.xts as  "sub-scripts"        ;
  19. ;;;;                                    ;
  20. ;;;;   11-88    Will ignore commands to invoke Calc or ASCII if the ; 
  21. ;;;;            Script file is not present.                ;
  22. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  23. abort disable
  24. sc t
  25. cl
  26. ;;;; Check to see if PRISM is loaded
  27. addin check prism.maf
  28. if #=1 jump prism_is_loaded
  29.  
  30. LABEL ERR_ABORT
  31. al 3n
  32. me
  33. [3,6]  Note: In order to use Point-&-Dial, you must load PRISM.MAF. You
  34.     may load directly with the following Mirror command:
  35.  
  36. [h]         Addin load prism.maf 1000 2000 1000   [n]
  37.  
  38.     Alternatively, you may make the following entry in your [h]MIRROR.CFG
  39. [n]    file in order to have PRISM auto-loaded when you execute MIRROR:
  40.  
  41. [h]         Addin = Prism.maf 1000 2000 1000      [n]
  42.  
  43.     Remember that the sizes given above are suggested sizes only. The sizes
  44.     you should use will vary depending on the PRISM applications you wish to
  45.     use. Consult your PRISM manual for more information.
  46. .
  47. Box at 1,1 size 19,80 style 3 hollow
  48. ask Press a key...
  49. cl
  50. sc s
  51. end
  52.  
  53. LABEL PRISM_IS_LOADED
  54. ;;;; Be certain that enough savespace is declared
  55.  
  56.   if (savespace > 2000) jump declarations
  57.   me
  58. [17,5]Insufficient [h]savescreen[n] space is declared.
  59. .
  60. jump err_abort
  61.  
  62. LABEL DECLARATIONS
  63. ;;;;;;;;;;;;;;;;;;;;;;; VARIABLE DECLARATIONS ;;;;;;;;;;;;;;;;;;;;;
  64. ; The Array NUMBER is the circular buffer of the phone numbers    ;
  65. ; dialed. NUM_INDEX is the pointer to the current buffer element. ;
  66. ; If the user does not change the pointer (see menu item D), the  ;
  67. ; pointer will cycle through the buffer in circular fashion.      ;
  68. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  69.   var int i, j, num_index, hot_key[5], key_press
  70.   var string number[10,40], ch[1], pth[50]
  71.   num_index = 1
  72.  
  73.   hot_key[1]=keyval("alt-d")
  74.   hot_key[2]=keyval("alt-m")
  75.   hot_key[3]=keyval("alt-c")
  76.   hot_key[4]=keyval("alt-a")
  77.   pth = strip(value("do"),letter + ".& ",1) 
  78.  
  79. ;********************* ALL SYSTEMS GO! ***************************
  80.  
  81. LABEL FILEZ_EXIST
  82. ;;;;  Go into background 
  83.   mo c : bye      : ;;;; PUT MIRROR IN READY STATE
  84.   ba go
  85.   at alt-0
  86.   foreground off
  87.  
  88. ;;;;  Display the opening "banner" (on DOS screen)
  89.   jump /r in_msg
  90.  
  91. ;;;;  Set up the help screen in advance to avoid run-time delays
  92.   jump /r help_setup
  93.  
  94. LABEL START
  95. ;;;; Wait inactive until a hot-key is pressed
  96.   i = hotkeys(-1,hot_key[1],hot_key[2],hot_key[3],hot_key[4])
  97.   on i jump get_number, menu, do_calc1, do_asc1
  98.   if (i = -1) jump bg_exit :     ;;;; Background keys were hit
  99. jump start                 :     ;;;; Invalid key pressed
  100.  
  101. LABEL DO_ASC1
  102.   if -[@(pth)ASCII.??S] jump start
  103.   do @(pth)ascii
  104.   ba g
  105. jump start
  106.  
  107. LABEL DO_CALC1
  108.   if -[@(pth)CALC.??S] jump start
  109.   do @(pth)calc
  110.   ba g
  111. jump start
  112.  
  113. LABEL GET_NUMBER
  114. ;;;; Here we know an ALT-d was pressed  
  115. ;;;; stop the foreground process and input the number
  116.   at alt-0
  117.   foreground off
  118.   num_index = num_index + 1
  119.   if (num_index > 10) num_index = 1
  120.   number[num_index] = winstring(row("d"),col("d"),40,"d")
  121.   number[num_index] = slice(number[num_index],1," ")
  122.   number[num_index] = strip(number[num_index]," ",3)
  123.  
  124. ;;;;  if the number isn`t null, dial it
  125.   if (len(number[num_index]) = 0) al 1n : Jump re-wait
  126.   jump /r dial_number  
  127.  
  128. LABEL RE-WAIT
  129. ;;;; restart the foreground process & go back to waiting for hot-key
  130.   bye
  131.   foreground on
  132.   at esc  
  133. jump start
  134.  
  135. LABEL MENU
  136.   at alt-0
  137.   foreground off
  138. ;;;; Display the "exploding box"
  139.   savescreen 3,28,12,36,"d"
  140.   for i = 1 to 12
  141.    box at (9-int(i/2)),(28+(12-i)) size i,(3*i) style 4 color "wb" screen "d"
  142.   next i
  143.   saycolor = "wb"
  144.   say at 4,38;  screen "d"; "POINT & DIAL MENU"
  145.   draw from 5,28 to 5,63 color "wb" style 2 ends chr(204)+chr(185) screen "d"
  146.   say at 7,30; screen "d"; " D -  prompt for number to dial"
  147.   say at 8,30; screen "d"; " H -  display help screen" 
  148.   if -[@(pth)CALC.??S] skip 1
  149.   say at 9,30; screen "d"; " C -  Use Calculator"
  150.   if -[@(pth)ASCII.??S] skip 1
  151.   say at 10,30; screen "d"; " A -  Display ASCII chart"
  152.   say at 11,30;screen "d"; " U -  un-install POINT & DIAL"
  153.  LABEL MENU_TEXT
  154.   say at 13,34 screen "d" color "wb"; " <RETURN>  to exit menu ";
  155.  
  156. ;;;; wait for key to be pressed
  157.   i = inkey(-1)
  158.  
  159. ;;;; If i is one of the menu choices, jump to the right routine
  160.   ch = upcase(chr(i))
  161.   j=instr("ACDHU",ch)
  162.   on j jump do_asc2, do_calc2, dial_prompt, help_scr, out_msg
  163.   if (i <> keyval("return")) jump menu_text
  164.  
  165. ;;;; i was <RETURN> so exit menu & restart foreground
  166.   restore
  167.   foreground on
  168.   at esc
  169. jump start
  170.  
  171. LABEL DO_ASC2
  172.   if -[@(pth)ASCII.??S] jump menu_text
  173.   foreground on
  174.   at esc
  175.   do @(pth)ascii
  176.   ba g
  177.   at alt-0
  178.   foreground off
  179. jump menu_text
  180.  
  181. LABEL DO_CALC2
  182.   if -[@(pth)CALC.??S] jump menu_txt
  183.   foreground on
  184.   at esc
  185.   do @(pth)calc
  186.   ba g
  187.   at alt-0
  188.   foreground off
  189. jump menu_text
  190.  
  191. LABEL DIAL_PROMPT
  192. ;;;;  Prompt for number to dial
  193.  
  194.   box at 7,25 size 4,45 color "Wg" screen "d" save
  195.   say at 8,27; screen "d"; color "kg"; "Enter the number to dial:"
  196.   i = 1
  197.  
  198. ;*************  circular buffer  ***********************************
  199.   repeat
  200. ;;;; erase previous field (if any)
  201.     form clear
  202.  
  203. ;;;; display current field
  204.     field number[num_index] at 9,27 color "kw" only "01234567890,#*- "
  205.     form display screen "d"
  206.  
  207. ;;;; accept input until a "control" type key is pressed
  208.     form accept i, key_press
  209.  
  210. ;;;; if "control" key was an arrow, update the buffer pointer
  211.     if (key_press = keyval("up-arrow")) num_index = num_index - 1
  212.     if (key_press = keyval("down-arrow")) num_index = num_index + 1
  213.     if (num_index > 10) num_index = 1
  214.     if (num_index < 1) num_index = 10
  215.  
  216. ;;;; Continue looping until the "control" key is <RETURN>
  217.   until (key_press = keyval("return"))
  218. ;*****************************************************************
  219.  
  220. ;;;;  Strip leading and trailing blanks
  221.   number[num_index] = strip(number[num_index]," ",3)
  222.  
  223. ;;;;  If number is not null, dial it. Then go back to menu.
  224.   if (len(number[num_index]) > 0) jump /r dial_number  
  225.   restore
  226. jump  menu_text
  227.  
  228.  
  229. LABEL DIAL_NUMBER
  230.   go l
  231. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  232. ; NOTE: This command is for HAYES compatible modems. If you use  ;
  233. ;       some other type of modem, you will need to change this.  ;
  234. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  235.   reply ATDT@(number[num_index]);|
  236.   saycolor = "Wy"
  237.   savescreen 9,16,10,37,"d"
  238.   box at 9,20 size 5,32 color "wy" screen "d" 
  239.   say at 10,22;screen "d";"Now Dialing ";left(number[num_index],17);
  240.   say at 12,22; screen "d"; "Press RETURN when connected. ";
  241.  
  242. ;;;; wait for any key
  243.   j = inkey(-1)
  244.  
  245. ;;;; keep track of duration of call
  246.   i = seconds(time24)
  247.  
  248.   box at 11,18 size 5,32 color "wm" screen "d" 
  249.   say at 12,20; screen "d"; color "Wm"; "Call in progress...";
  250.   say at 14,20; screen "d"; color "Wm"; "Press RETURN when complete. ";
  251.  
  252. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  253. ; NOTE: These commands are for HAYES-type modems. If you use     ;
  254. ;       some non-compatible modem, you will need to change this. ;
  255. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  256.  
  257. ;;;; Tell modem to hang up
  258.   reply  +++  
  259.   wa d 10 
  260.   re ATH|
  261.   
  262. ;;;; When a key is hit, calculate duration of call
  263.   j = inkey(-1)
  264.   j = seconds(time24) 
  265.   i = j - i
  266.  
  267. ;;;; display duration of call & exit the subroutine
  268.   box at 13,16 size 5,32 color "wr" screen "d" 
  269.   say at 14,18; screen "d"; color "Wr"; "Duration of Call - ";time24(i);
  270.   say at 16,18; screen "d"; color "Wr"; "Press RETURN to continue ";
  271.   i = inkey(-1)
  272.   restore
  273. rt  
  274.  
  275. LABEL help_scr
  276. ;;;; Display help screen (on MIRROR'S Alternate screen)
  277.   cl /t
  278.   sc l kk
  279.   ba r
  280.   foreground on
  281.   sc a O
  282.   j = inkey(-1)
  283.   box at 2,2 size 23,78 style 0 color "kk"
  284. me
  285. [4,5][wk]Alt-M[gk] displays the Point-&-Dial menu:
  286. [6,8]If you choose item [wk]D[gk], you will be asked to input a number which
  287. [7,8]will be dialed, similar to using [wk]Alt-D[gk] (above). Point-&-Dial
  288. [8,8]retains up to 10 previously  dialed numbers in a circular buffer.
  289. [9,8]When entering a number you may hit [wk]UP-ARROW[gk] or [wk]DOWN-ARROW[gk] to
  290. [10,8]cycle through the buffer and select a previously dialed number.
  291. [12,8]Choosing item [wk]H[gk] displays this help-screen. 
  292. [14,8]Choosing item [wk]C[gk] invokes a simple calculator.
  293. [16,8]Choosing item [wk]A[gk] displays a chart of ASCII characters.
  294. [18,8]Choosing item [wk]U[gk] causes Point-&-Dial to terminate, leaving     
  295. [19,8]you in your current application.
  296. [23,28][WK][i] Press a key to exit... 
  297. .
  298.   j = inkey(-1)
  299. ;;;;  Go back to menu
  300.   sc t 4
  301.   ba g
  302.   wait d 10
  303.   foreground off
  304.   sc l kw
  305.   jump /r help_setup
  306. ju menu_text
  307.  
  308. LABEL help_setup
  309.   box at 1,1 size 25,80 style 0 screen "a" color "kk"
  310.   box at 1,1 size 25,80 style 3 color "kg" screen "a" hollow color "kg"
  311. me /a
  312. [1,15][kg]P O I N T  -  A N D  -  D I A L   O P T I O N S[gk]
  313. [4,5]Point-&-Dial has 4 "hotkeys": [wk]Alt-D[gk], [wk]Alt-C[gk], [wk]Alt-A[gk],
  314. [4,56]and [wk]Alt-M[gk]:
  315. [7,11]After installing Point-&-Dial, you may dial by positioning the
  316. [8,8]cursor to the beginning of a number, and hit [wk]Alt-D[gk]. The number 
  317. [9,8]will then be dialed.  When there is an answer you may pick up your 
  318. [10,8]phone and hit [wk]<RETURN>[gk] to hang up the modem. When your call
  319. [11,8]is complete, hitting [wk]<RETURN>[gk] displays the duration of the call.
  320. [12,8]As an example, you could create a directory of phone numbers in
  321. [13,8]a text editor, and use Point-&-Dial as a quick method of selecting
  322. [14,8]and dialing a number in your phone directory.
  323. [16,11]The [wk]Alt-C[gk] hotkey invokes a simple calculator, and the 
  324. [17,8][wk]Alt-A[gk] hotkey displays a chart of IBM extended ASCII character
  325. [18,8]codes, with their decimal and hexidecimal representations.
  326. [23,28][WK][i] Press a key for page 2... 
  327. .
  328. rt
  329.  
  330. LABEL in_msg
  331. ;;;;  display the opening "banner"
  332. timer off
  333. savescreen 9,20,10,40,"d"
  334.  
  335. ;;;; "Exploding box" (opens horizontally only)
  336.   for i = 1 to 8
  337.     box at 9,(20 + (9-i)) size i,(4*i) style 2 color "kw" screen "d"
  338.   next i
  339.  
  340.   box at 9,20 size 10,40 style 2 color "kw" screen "d"
  341.   saycolor = "bw"
  342.   say at 10,22; screen "d"; "Point & Dial installed...Hot keys:"
  343.   saycolor = "Kw"
  344.   say at 12,22; screen "d"; "Alt-M"; "     POINT-&-DIAL menu"
  345.   say at 13,22; screen "d"; "Alt-D"; "     dial number at cursor"
  346.   if [@(pth)CALC.??S]  say at 14,22; screen "d"; "Alt-C     Calculator"
  347.   if [@(pth)ASCII.??S] say at 15,22; screen "d"; "Alt-A     ASCII chart";
  348.   saycolor = "bw"
  349.   say at 17,22; screen "d"; "(Hit the space bar to continue)";
  350.   i = inkey(100)
  351.   restore
  352.   foreground on
  353.   at esc
  354. rt
  355.  
  356. LABEL out_msg
  357. ;;;; display final "banner"
  358.   restore
  359.   at alt-0
  360.   foreground off
  361.   box at 7,18 size 8,36 style 0 color "wk" screen "d" save
  362.   box at 9,20 size 4,32 style 2 color "wk" screen "d" 
  363.   say at 10,22; screen "d"; color "wk"; "Point-&-Dial terminated."
  364.   say at 11,22; screen "d"; color "wk"; "Uninstall MIRROR (y/n)? >";
  365.   LABEL KWAIT
  366.   i = inkey(-1)
  367.   number[1] = upcase(chr(i)) 
  368.   if (number[1] = "N") jump U1
  369.   if (number[1] <> "Y") jump KWAIT
  370.   restore
  371.   foreground on
  372.   at esc
  373.   ba r
  374.   qu
  375. end
  376.  
  377. LABEL BG_EXIT
  378.   me [24,10]Background exited... Point-&-Dial terminated.
  379.   al 3n
  380.   at esc
  381.   rt
  382. end
  383.  
  384. LABEL U1
  385.   say at 11,22; screen "d"; color "wk"; "MIRROR still in Background!";
  386. ;;;; wait 3 seconds or until a key is hit
  387.   i = inkey(30)
  388.  
  389. ;;;; restart foreground process and exit script
  390.   restore
  391.   foreground on
  392.   at esc
  393.   bye
  394.   rt
  395. end
  396.