home *** CD-ROM | disk | FTP | other *** search
/ Chip 1997 January / Chip_1997-01_cd.bin / ms95 / disk22 / dir02 / f008880.re_ / f008880.re
Text File  |  1996-04-02  |  7KB  |  204 lines

  1. ; MSCM.UCM -- Build Microstation Command Menu.
  2. ;       -- Places IGDS format command menu range blocks
  3. ;          and command string entries needed for the cell
  4. ;          to be built.
  5.  
  6.      key 'NoEcho'
  7.          set r2=outflg                          ; save outflg
  8.          set outflg=outflg!@2000                ; disable command parser
  9.                                                 ; mod by e. sutton 06/01/89 
  10.      cmd nulcmd
  11.      msg 'st* Define MicroStation Command Menu *'
  12.  
  13. ;        * Save Active parameters and set some of our own *
  14.  
  15.      set A0 = ACTANG            ; Save active angle
  16.      set R1 = ACTLEV            ; Save active level
  17.      set R4 = CAFONT            ; Save active font
  18.      set R5 = TXJUST            ; Save text justification
  19.      set R6 = TNJUST            ; Save node justification
  20.      set R8 = IDSYMB            ; Save weight and color
  21.  
  22.      key 'Active TXJ LC'                    ; Set text justification
  23.      key 'Active TNJ LB'                    ; using uStn syntax.
  24.  
  25.      key 'wt=0'                             ; Set weight, color
  26.      key 'co=4'                             ; and level using
  27.      key 'lv=63'                            ; IGDS syntax.
  28.                         ; Set angle and font
  29.      set ACTANG = 0             ; using ucm syntax for
  30.      set CAFONT = 1             ; tcb entries.
  31.  
  32.      set I0 = NODSPA            ; Save line spacing
  33.      set I5 = CHHGT             ; Save text height
  34.      set I6 = CHWID             ; Save text width
  35.  
  36.      set NODSPA = 500            ; Set LS, TH & TW
  37.      set CHHGT = 1000            ; using ucm syntax for
  38.      set CHWID = 1000            ; tcb entries.
  39.  
  40.  
  41.      key 'Place Text'                       ; Optionally place FB/CM Node
  42.      key 'FB@012CM'
  43.      msg 'cfEnter Text Node Origin'
  44.      msg 'prReset to Skip Node Placement'
  45. PLCNDE:  get P,NDEPNT, R,CMLOOP
  46.      go PLCNDE
  47. NDEPNT:  pnt
  48.      tst RELERR ne 0,PLCNDE
  49.  
  50. CMLOOP:  key 'NoEcho'
  51.      cmd nulcmd
  52. ERRTN:
  53.      msg 'cfEnter Action Type (P,U,C,S,D,K,T,M,E,R)'
  54.      msg 'prReset to Exit'
  55. GETTYP:  get K,TSTUC, R,EXITUC            ; Get a valid command type
  56.      go GETTYP
  57.  
  58. TSTUC:     msg 'st'
  59.      set ucasc = key            ; Put input into tcb usasc
  60.      tst ucbyt(1) lt 97, noup        ; (97 <= a <= 122) ? upcase(a)
  61.      tst ucbyt(1) gt 122, noup
  62.      set ucbyt(1) = ucbyt(1) & 223
  63. NOUP:     set C0 = ucasc(1) + ','                ; Save Command prefix in C0
  64.      set C2 = C0                ; Copy to C2 for loop compares
  65.  
  66. ;              * Parse command type *
  67.  
  68. ;Z:     tst C0 ne 'Z,',MESG                    ; User defined keyin
  69. ;         set C3 = 'cfEnter Action String'
  70. ;     set C2 = ''
  71. ;     go LLEFT
  72. MESG:     tst C0 ne 'M,',APPL                    ; Display message
  73.      set C3 = 'cfEnter Message'
  74.      go LLEFT
  75. APPL:     tst C0 ne 'A,',PRIM                    ; Application
  76.      set C3 = 'cfEnter Application Number'
  77.      go LLEFT
  78. PRIM:     tst C0 ne 'P,',TSTUCM                  ; Primitive
  79.      set C3 = 'cfEnter Command Name'
  80.      go LLEFT
  81. TSTUCM:  tst C0 ne 'U,',RACELL                  ; User Command
  82.      set C3 = 'cfEnter User Command Index Number'
  83.      go LLEFT
  84. RACELL:  tst C0 ne 'R,',CKCELL                  ; Place Cell
  85.      set C3 = 'cfEnter Cell Name'
  86.      go LLEFT
  87. CKCELL:  tst C0 ne 'C,',CKSYMB                  ; Place Cell
  88.      set C3 = 'cfEnter Cell Name'
  89.      go LLEFT
  90. CKSYMB:  tst C0 ne 'S,',TSTTUT                  ; Place Symbol
  91.      set C3 = 'cfEnter Symbol Character'
  92.      go LLEFT
  93. TSTTUT:  tst C0 ne 'D,',TSTSTR                  ; Activate a Tutorial
  94.      set C3 = 'cfEnter Tutorial Name'
  95.      set C2 = 'T,AT='
  96.      go LLEFT
  97. TSTSTR:  tst C0 eq 'K,',STRMSG                  ; Text Entry
  98.          tst C0 eq 'E,',STRMSG                  ; Text Entry
  99.      tst C0 ne 'T,',GOIVCM
  100. STRMSG:  set C3 = 'cfEnter Action String'
  101.      go LLEFT
  102.                         ; Invalid command type
  103. GOIVCM:  set n0 = n0 - 1            ; Strip "," from end of C0
  104.      set msg = 'st* Invalid Action Type <' + C0
  105.      set msg = msg + '> *'
  106.      msg msg
  107.      go ERRTN
  108.  
  109.  
  110. LLEFT:     msg 'cfDefine Lower Left Corner of the Range'
  111.      msg 'prReset to re-define Action Type'
  112. LLGET:     get P,SETLL, R,CMLOOP, K,TSTUC
  113.      go LLGET
  114. SETLL:     msg 'st'
  115.      set I1 = XUR                ; Save Lower Left Corner
  116.      set I2 = YUR                ; (I1,I2)
  117.  
  118.      msg 'cfDefine Upper Right Corner of the Range'
  119.      msg 'prReset to re-define the Range Block'
  120. URGET:     get P,SETUR, R,LLEFT
  121.      go URGET
  122. SETUR:     set I3 = XUR                ; Save Upper Right Corner
  123.      set I4 = YUR                ; (I3,I4)
  124.  
  125.      tst I1 gt I3,IVRNGE            ; Brute force coord check
  126.      tst I2 lt I4,PUTMSG
  127. IVRNGE:  msg 'st* Invalid Range Points *'
  128.      go LLEFT
  129.  
  130. PUTMSG:  msg c3                 ; Send approporiate msg for
  131. GETSTR:  get K,B4LOOP, R,LLEFT            ; command string input
  132.      go GETSTR
  133.  
  134. B4LOOP:
  135.          tst C0 eq 'Z,',GOTU                    ; If User Defined String
  136.          set ucasc = key                        ; Upcase input string
  137.      set N1 = 0
  138.      set R7 = 1
  139. LOOP:     tst R7 gt k0,CKNDXD
  140.      tst ucbyt(R7) lt 97,PASS
  141.      tst ucbyt(R7) gt 122,PASS
  142.      set ucbyt(R7) = ucbyt(R7) & 223
  143. PASS:     set C1 = C1 + ucasc(R7)
  144.      set R7 = R7 + 1
  145.      go LOOP
  146.  
  147. GOTU:    set    C1=key
  148.  
  149. CKNDXD:  tst C0 ne 'U,',PLCTXT                  ; If User Command
  150.      tst N1 lt 4,TSTNDX            ;
  151. NOTNDX:  set C2 = 'T,UC='                       ;
  152.      go PLCTXT                ;
  153. TSTNDX:  set ucasc = C1             ; Ck c1 for proper form
  154.      set R12 = 1                ; to be used as an
  155. NDLOOP:  tst R12 gt N1,NDXDNE            ; entry in the uc index.
  156.      tst ucbyt(R12) lt 48,NOTNDX        ; If indexed uc then set
  157.      tst ucbyt(R12) gt 57,NOTNDX        ; the cmd string to "U,"
  158.      set R12 = R12 + 1            ; else leave as terminated
  159.      go NDLOOP                ; "UC=" cmd string.
  160. NDXDNE:  set C2 = 'U,'                          ;
  161.  
  162. PLCTXT:  set msg = C2 + C1            ; Concat string to prefix copy
  163.      set CUREBL = DFSECT            ; Save pointers to msg
  164.      set CUREBY = DFBYTE
  165.      set A8 = I4 + I2            ; Save the mid-y coordinate
  166.      set I12 = A8 / 2            ; of the block in I12
  167.      key 'Place Text Fitted'                ; and place the text
  168.      key msg
  169.      pnt I1,I12
  170.      pnt I3,I12
  171.      tst RELERR ne 0,EXITUC
  172.      key 'NoEcho'
  173.      cmd nulcmd
  174.      set RANGEE(1) = I1            ; Adjust the range to
  175.      set RANGEE(2) = I2            ; match that of the box
  176.      set RANGEE(4) = I3
  177.      set RANGEE(5) = I4
  178.      wrt CUREBL,CUREBY            ; Rewrite the element
  179.      go LLEFT                ; Get additional blocks
  180.                         ; of this type
  181.  
  182. ;                * Cleanup and exit *
  183.  
  184. EXITUC:                     ; Restore saved parameters
  185.          set outflg = r2                        ; restore outflg
  186.      set ACTANG = A0            ; Restore active angle
  187.      set NODSPA = I0            ; Restore line spacing
  188.      set CHHGT = I5             ; Restore text height
  189.      set CHWID = I6             ; Restore text width
  190.      set ACTLEV = R1            ; Restore active level
  191.      set CAFONT = R4            ; Restore active font
  192.      set TXJUST = R5            ; Restore text justification
  193.      set TNJUST = R6            ; Restore node justification
  194.      set IDSYMB = R8            ; Restore weight and color
  195.  
  196.      cmd nulcmd                ; Clear any active command
  197.      key 'echo'                             ; as well as all prompt
  198.      msg 'cf'                               ; fields in order to
  199.      msg 'ms'                               ; leave the user command
  200.      msg 'pr'                               ; in a known state and
  201.      msg 'er'                               ; an orderly fashion.
  202.      msg 'st* MicroStation Command Menu UC Exited *'
  203.      End
  204.