home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #16 / NN_1992_16.iso / spool / comp / cad / cadence / 181 < prev    next >
Encoding:
Text File  |  1992-07-21  |  5.0 KB  |  190 lines

  1. Newsgroups: comp.cad.cadence
  2. Path: sparky!uunet!zaphod.mps.ohio-state.edu!mips!mips!kpc!amdcad!angelo!lyndon
  3. From: lyndon@angelo.amd.com (Lyndon C. Lim)
  4. Subject: edge skill (continued)
  5. Message-ID: <lyndon.711752918@angelo>
  6. Sender: usenet@amd.com (NetNews)
  7. Nntp-Posting-Host: angelo
  8. Organization: Advanced Micro Devices, Inc.
  9. Date: Tue, 21 Jul 1992 21:08:38 GMT
  10. Lines: 178
  11.  
  12. thanks to karl and chuck for their suggestions.
  13.  
  14. below i attached my original solution to the problem.
  15. ---------------------------------------------------------------------
  16. /* %W%     %G%
  17. **
  18. ** function:  PsvCheckType
  19. **  purpose:  Check type of argument
  20. **
  21. **  history:
  22. **     20 Jul 92   lyndon   - Created.
  23. */
  24.  
  25. /* ({[ */
  26.  
  27. procedure( PsvCheckType(var type 
  28.                         @optional
  29.                         (message1 "Type mismatch")
  30.                         (message2 "")
  31.                         "gt")
  32.  
  33.     prog( (function definition)
  34.  
  35.         /* un-define an previous definions */
  36.         putd('PsvDoCheck nil)
  37.  
  38.         /* define the check function, and execute it */
  39.         definition = "procedure( PsvDoCheck(n \"%s\") t)"
  40.         sprintf(function, definition, type)
  41.         loadstring(function)
  42.  
  43.         if( errset(PsvDoCheck(var)) then
  44.             return(t)
  45.         else
  46.             error(message1 message2)
  47.         )
  48.     )
  49. )
  50.  
  51. /* ]}) */
  52.  
  53. ---------------------------------------------------------------------
  54.  
  55.  
  56.  
  57. i liked karl's suggestion, which then looks like the following:
  58. ---------------------------------------------------------------------
  59. /* %W%     %G%
  60. **
  61. ** function:  PsvCheckType
  62. **  purpose:  Check type of argument
  63. **
  64. **  history:
  65. **     20 Jul 92   lyndon   - Created.
  66. */
  67.  
  68. /* ({[ */
  69.  
  70. procedure( PsvCheckType(var type 
  71.                         @optional
  72.                         (message1 "Type mismatch")
  73.                         (message2 "")
  74.                         "gt")
  75.  
  76.     /* un-define any previous definions, prevents pop-up window */
  77.     putd('PsvDoCheck nil)
  78.  
  79.     /* define the check function, and execute it */
  80.     apply('procedure list(list('PsvDoCheck 'var type) t))
  81.  
  82.     if( ! errset(PsvDoCheck(var)) then
  83.         error(message1 message2)
  84.     )
  85. )
  86.  
  87. /* ]}) */
  88. ---------------------------------------------------------------------
  89.  
  90. looking over the type() function, i realized i could've
  91. implemented 90% of the functionality using it, and it would be
  92. more readable.  the only thing i would miss is the conglomerate
  93. types, such as S (symbol or string) and n (fixnum, flonum, bignum).
  94.  
  95. below, i attached the code which calls these type checking
  96. functions, which will make it more clear the context in which
  97. they are used.
  98.  
  99.  
  100. ---------------------------------------------------------------------
  101. /* %W%     %G%
  102. **
  103. ** function:  PsvHiCopy
  104. **  purpose:  Copy and repeat selected objects.
  105. **
  106. **  history:
  107. **     17 Jul 92   lyndon   - Created.
  108. */
  109.  
  110. /* ({[ */
  111.  
  112. procedure( PsvHiCopy()
  113.     prog( (p1 p2 xcnt ycnt delx dely reply finished selSet)
  114.  
  115.         selSet = selectedSet()
  116.         if(selSet == nil then
  117.             error("" "No objects have been selected.")
  118.         )
  119.  
  120.  
  121.  
  122.         /* interactive prompting */
  123.         reply = linereadstring( textEntry("x & y count?") )
  124.         xcnt  = nth(0 reply)
  125.         ycnt  = nth(1 reply)
  126.         PsvCheckType(xcnt "x" "x count" "Should be an integer.")
  127.         PsvCheckType(ycnt "x" "y count" "Should be an integer.")
  128.  
  129.         reply = linereadstring( textEntry("x & y offset?") )
  130.         delx  = nth(0 reply)
  131.         dely  = nth(1 reply)
  132.         PsvCheckType(delx "n" "x offset" "Should be a number.")
  133.         PsvCheckType(dely "n" "y offset" "Should be a number.")
  134.  
  135.  
  136.  
  137.         p1 = getCurrentLocation()
  138.  
  139.         /* prompt for first point only if not infix
  140.         ** or current location is not valid
  141.         */
  142.         if( ! (getEnvVar("infix?") &&  p1)  then
  143.             p1 = getPoint("Point to source point.")
  144.         )
  145.  
  146.         finished = (p1 == nil)
  147.  
  148.         while(! finished
  149.  
  150.             /* keep resetting anchor because getResponse changes it */
  151.             setRubberBand(p1)
  152.  
  153.             reply = getResponse("Point to destination point."
  154.                                 "line"
  155.                                 list("point" "point" "cancel")
  156.                                )
  157.  
  158.             if( (p2 = reply->userCoord) then
  159.                 case( (reply->buttons)
  160.                     ( (4 2) /* copy */
  161.                         PsvCopy(selSet p1 p2 xcnt ycnt delx dely)
  162.                         finished = t
  163.                     )
  164.  
  165.                     ( (1 )
  166.                         finished = t
  167.                     )
  168.  
  169.                     (0  /* no button */
  170.                         /* allow nesting of other bindkey commands */
  171.                         finished = ( ! stDoKeyboard(reply->key))
  172.                     )
  173.                 ) /* end decode */
  174.             )
  175.  
  176.         ) /* end while */
  177.  
  178.     )
  179. )
  180.  
  181. /* ]}) */
  182. ---------------------------------------------------------------------
  183.  
  184. by the way, any comments on how the rubberbanding and infix are
  185. handled would be welcomed.  i'm pretty new to skill still; only
  186. been at it a few weeks.
  187.  
  188. thanks,
  189. lyndon c.
  190.