home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 2 / amigaformatcd02.iso / pd / text / alphaspell_suite / varexx / demo / address.rexx next >
OS/2 REXX Batch file  |  1996-05-20  |  9KB  |  335 lines

  1. /*************************************************************************/
  2. /* $VER: Address.rexx 1.0 (5.12.95)                                      */
  3. /* Demo of varexx                                                        */
  4. /* Usage: rx address ADRESSFILE                                          */
  5. /*************************************************************************/
  6.  
  7. guifile = 'address.gui'
  8.  
  9. addressbook = arg(1)
  10. path = pragma( 'd' )
  11.  
  12. mod = FALSE
  13. liston = FALSE
  14.  
  15. IF EXISTS("libs:rexxsupport.library") THEN DO
  16.     IF ~SHOW("L","rexxsupport.library") THEN
  17.         IF ~ADDLIB("rexxsupport.library",0,-30,0) THEN EXIT
  18. END
  19. ELSE EXIT
  20.  
  21. IF EXISTS("libs:rexxreqtools.library") THEN DO
  22.     IF ~SHOW("L","rexxreqtools.library") THEN
  23.         IF ~ADDLIB("rexxreqtools.library",0,-30) THEN EXIT
  24. END
  25. ELSE EXIT
  26.  
  27. OPTIONS RESULTS
  28. OPTIONS FAILAT 20
  29.  
  30. SIGNAL ON SYNTAX
  31. SIGNAL ON FAILURE 
  32.  
  33. /* Check Varexx is loaded if not load it */
  34.  
  35. IF SHOW( 'p', 'VAREXX' ) ~= 1 THEN DO
  36.     ADDRESS COMMAND "run >NIL: varexx"
  37.     ADDRESS COMMAND "WaitForPort VAREXX"
  38.     launchvarexx = TRUE
  39. END; ELSE
  40.     launchvarexx = FALSE
  41.  
  42. ADDRESS VAREXX
  43.  
  44. 'version'
  45.  
  46. IF rc ~= 0 THEN DO
  47.     SAY 'This script requires varexx 1.3 or later'
  48.     EXIT
  49. END
  50.  
  51. IF OPENPORT("HOLLY") = 0 THEN DO
  52.     CALL rtezrequest "Could not open a port.",, "Varexx Error"
  53.     EXIT
  54. END
  55.  
  56. 'load 'guifile' HOLLY'
  57. edithost = RESULT
  58.  
  59. ADDRESS VALUE edithost
  60. 'spawn HOLLY'
  61. listhost = RESULT
  62.  
  63. call LoadBook( arg(1) ) 
  64.  
  65. 'show edit'
  66.  
  67. current = 0
  68.  
  69. /**************************************************************************/
  70. /* MAIN LOOP -- Check for GUI events                                      */
  71. /**************************************************************************/
  72.  
  73.     DO FOREVER
  74.         CALL WAITPKT("HOLLY")
  75.         packet = GETPKT("HOLLY")
  76.         IF packet ~= '00000000'x THEN DO
  77.             class = GETARG(packet)
  78.             SELECT
  79.                 WHEN class = closewindow THEN LEAVE
  80.                 WHEN word(class,1) = closewindow THEN DO
  81.                     address value listhost
  82.                     'hide'
  83.                     liston = FALSE
  84.                     address
  85.                 END
  86.                 WHEN class = FORWARDS THEN DO
  87.                     current = current + 1
  88.                     call DisplayEntry( current )
  89.                 END
  90.                 WHEN class = BACK THEN DO
  91.                     current = current - 1
  92.                     call DisplayEntry( current )
  93.                 END
  94.                 WHEN class = CLEAR THEN call clearentry()
  95.                 WHEN class = UPDATE THEN call updateentry()
  96.                 WHEN class = DELETE THEN call deleteentry()
  97.                 WHEN class = SEARCH THEN call listentries()
  98.                 WHEN word(class,1) = list THEN DO
  99.                     address value listhost
  100.                     read list number
  101.                     current = result
  102.                     address value edithost
  103.                     call DisplayEntry( current )
  104.                 END
  105.                 OTHERWISE NOP
  106.             END
  107.         END
  108.     END
  109.  
  110.     'hide unload'    
  111.  
  112.     address value listhost
  113.     'hide unload' 
  114.  
  115.     IF mod = TRUE THEN DO
  116.         IF rtezrequest('Save modified address book ?','Yes|No','Address Book',,
  117.                'rt_reqpos = reqpos_centerscr') = 1 THEN DO
  118.             call savebook()
  119.         END
  120.     END
  121.     
  122.     CALL CLOSEPORT( "HOLLY" )
  123.     IF launchvarexx = TRUE THEN ADDRESS command vxc
  124. EXIT
  125.  
  126. SaveBook :
  127.     ask=FALSE
  128.     IF addressbook = "" THEN ask = TRUE
  129.     IF ~Exists( addressbook ) THEN ask = TRUE
  130.     IF ask = TRUE THEN DO
  131.         addressbook = rtfilerequest( path, ,'Save as' , , 'rt_reqpos = reqpos_centerscr' )
  132.     END
  133.  
  134.     IF open( infile, addressbook, 'w' ) THEN DO
  135.         DO n = 1 to add.count
  136.             IF add.n.del = FALSE THEN DO
  137.                 line = add.n.sname'#'add.n.fname'#'add.n.add'#'add.n.pc'#'add.n.ph'#'add.n.type'#'add.n.email
  138.                 call writeln( infile, line )
  139.             END
  140.         END
  141.         call close( infile )
  142.  
  143.         address command 
  144.         'sort 'addressbook' to t:temp'
  145.         'copy t:temp to 'addressbook 
  146.         'delete t:temp quiet' 
  147.         address
  148.  
  149.     END
  150. return
  151.  
  152. LoadBook : 
  153.     ask = FALSE
  154.     IF addressbook = "" THEN ask = TRUE
  155.     IF ~Exists( addressbook ) THEN ask = TRUE
  156.     IF ask = TRUE THEN DO
  157.         addressbook = rtfilerequest( path, ,'Select a addressbook' , , 'rt_reqpos = reqpos_centerscr' )
  158.     END
  159.  
  160.     IF open( infile, addressbook, 'r' ) THEN DO
  161.         n = 1
  162.         DO forever
  163.             line = readln( infile )
  164.             IF line = '' THEN leave
  165.             parse var line add.n.sname '#' add.n.fname '#' add.n.add '#' add.n.pc '#' add.n.ph '#' add.n.type '#' add.n.email
  166.             add.n.del = FALSE
  167.             n = n + 1
  168.         END
  169.         add.count = n - 1
  170.         call close( infile )
  171.     END; else DO
  172.         add.count = 0
  173.     END
  174. return
  175.  
  176. ClearEntry :
  177.     settext name
  178.     settext surname
  179.     settext address
  180.     settext postcode
  181.     settext phone
  182.     setnum type 0
  183.     settext email
  184.     current = 0
  185.     set name surname address postcode phone type email update enable
  186.     set delete disable
  187.     settext new New Entry
  188. return
  189.  
  190. DisplayEntry:
  191.     n = arg(1)
  192.     IF add.count = 0 THEN return
  193.         set forwards back enable
  194.     IF n >= add.count THEN DO
  195.         n = add.count
  196.         set Forwards disable
  197.     end
  198.     IF n <= 1 THEN do
  199.         n = 1
  200.         set back disable
  201.     end
  202.  
  203.     current = n
  204.  
  205.     settext name add.n.fname 
  206.     settext surname add.n.sname 
  207.     settext address add.n.add 
  208.     settext postcode add.n.pc 
  209.     settext phone add.n.ph 
  210.     setnum type add.n.type 
  211.     settext email add.n.email
  212.  
  213.     IF add.n.del = TRUE THEN DO
  214.         set name surname address postcode phone type email update disable
  215.     END; else DO
  216.         set name surname address postcode phone type email update enable
  217.     END
  218.     set delete enable
  219.  
  220.     if current ~=0 then settext new
  221. return
  222.  
  223. updateentry:
  224.     busy set
  225.     read surname
  226.     nsurname = result
  227.     read name 
  228.     nfname = result 
  229.     read address 
  230.     nadd = result
  231.     read postcode 
  232.     npc = result
  233.     read phone 
  234.     nph = result
  235.     read type 
  236.     ntype = result
  237.     read email 
  238.     nemail= result
  239.  
  240.     IF current ~= 0 THEN DO
  241.         n = current
  242.         call DisplayEntry( n )
  243.         IF rtezrequest('Update this entry ?','Yes|No','Address Book',,
  244.                 'rt_reqpos = reqpos_centerscr') = 1 THEN DO
  245.             add.n.sname = nsurname
  246.             add.n.fname = nfname
  247.             add.n.add = nadd
  248.             add.n.pc = npc
  249.             add.n.ph = nph
  250.             add.n.type = ntype
  251.             add.n.email = nemail
  252.             call DisplayEntry( n )
  253.             mod = TRUE
  254.             if liston = TRUE then call filllist()
  255.             busy
  256.             return
  257.         END
  258.     END
  259.     n = add.count + 1
  260.     IF rtezrequest('Add a new entry ?','Yes|No','Address Book',,
  261.             'rt_reqpos = reqpos_centerscr') = 1 THEN DO
  262.         add.n.sname = nsurname
  263.         add.n.fname = nfname
  264.         add.n.add = nadd
  265.         add.n.pc = npc
  266.         add.n.ph = nph
  267.         add.n.type = ntype
  268.         add.n.email = nemail
  269.         add.count = n
  270.         add.n.del = FALSE
  271.         call DisplayEntry( n )
  272.         mod = TRUE
  273.     END
  274.     if liston = TRUE then call filllist()
  275.     busy    
  276. return
  277. DeleteEntry:
  278.     busy set
  279.     IF current = 0 THEN return
  280.     call DisplayEntry( current )
  281.     IF add.current.del = TRUE THEN DO
  282.         IF rtezrequest('Undelete this entry ?','Yes|No','Address Book',,
  283.                 'rt_reqpos = reqpos_centerscr') = 1 THEN DO
  284.             add.current.del = FALSE
  285.             call DisplayEntry( current )
  286.             mod = TRUE
  287.         END    
  288.     END; else DO
  289.         IF rtezrequest('Delete this entry ?','Yes|No','Address Book',,
  290.                 'rt_reqpos = reqpos_centerscr') = 1 THEN DO
  291.             add.current.del = TRUE
  292.             call DisplayEntry( current )
  293.             mod = TRUE
  294.         END    
  295.     END
  296.     busy
  297. return
  298. filllist:
  299.     drop t
  300.     DO n = 1 to add.count
  301.         t.n = add.n.fname add.n.sname
  302.     END
  303.     t.count = add.count
  304.     address value listhost
  305.     setlist list stem t clear
  306.     address value edithost
  307. return
  308.  
  309. return
  310. listentries:
  311.     address value listhost
  312.     show list
  313.     call filllist()
  314.     liston = TRUE
  315.     address value edithost
  316. return
  317.  
  318. /* Error messages */
  319. failure:
  320.     SAY "Error code" rc "-- Line" SIGL
  321.     SAY EXTERNERROR
  322.     'hide unload'
  323.     CALL CLOSEPORT ("HOLLY")
  324. EXIT
  325.  
  326. syntax:
  327.     SAY "Error" rc  "-- Line" SIGL
  328.     SAY ERRORTEXT( rc )
  329.     'hide unload'
  330.     CALL CLOSEPORT ("HOLLY")
  331. EXIT
  332.  
  333.  
  334.  
  335.