home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR36 / DRGDRP.ZIP / DRAGEVNT.PRG < prev   
Text File  |  1993-11-04  |  16KB  |  612 lines

  1. ***************************************************************************
  2. *
  3. * Procedure file: DRAGEVNT.PRG
  4. *         System: DragDrop
  5. *        Version: 1.0
  6. *         Author: Ken R. Levy
  7. *        Company: Jet Propulsion Laboratory
  8. *      Copyright: None (Public Domain)
  9. *
  10. ***************************************************************************
  11. *
  12. * DRAGEVNT- Drag event handler.
  13. *
  14. * Description:
  15. * This program is used to handle drag events for DragDrop objects.
  16. *
  17. * Notes:
  18. * In this program, for clarity/readability reasons, variable names
  19. * are used that are longer than 10 characters.  Note, however, that only
  20. * the first 10 characters are significant.
  21. *
  22. FUNCTION dragevnt
  23. PARAMETERS winname0,objrow0,objcol0,mclktimer,dragicon0,objclass0,objmsg0,;
  24.            objarray,dragfnct,dragheight,dragwidth,centerrow,centercol,;
  25.            objheight0,objwidth0,scnno,colorscheme,dblclkfnct
  26. PRIVATE dragicon,dragicon1,dragicon2,objover,objover2,objclass
  27. PRIVATE iconno,icondelay,icontimer,iconmode,iconstretch,iconcheck
  28. PRIVATE dragtxt,dragtxt1,dragtxt2,objstate,objheight,objwidth
  29. PRIVATE objheight1,objwidth1,fileext,objmsg,objmsg2,dblclick
  30. PRIVATE objrow,objcol,objrow2,objcol2,objrow3,objcol3
  31. PRIVATE objrow0,objcol0,foxtools,maxmove,lastmsgbar,crsrtimer
  32. PRIVATE null,elementno,arraycnt,arrayrows,arraycols
  33. EXTERNAL ARRAY regfn,callfn
  34.  
  35. m.dblclick=.T.
  36. m.maxmove=SCOLS()/256
  37. DO WHILE MDOWN()
  38.   IF ABS(MROW()-m.objrow0)>=m.maxmove.OR.ABS(MCOL()-m.objcol0)>m.maxmove
  39.     m.dblclick=.F.
  40.     EXIT
  41.   ENDIF
  42.   IF ABS(SECONDS()-m.mclktimer)>_dblclick
  43.     m.dblclick=.F.
  44.   ENDIF
  45. ENDDO
  46. IF MDOWN().OR.EMPTY(m.dblclkfnct)
  47.   m.dblclick=.F.
  48. ENDIF
  49. IF m.dblclick
  50.   m.dblclick=.F.
  51.   DO WHILE .T.
  52.     IF ABS(MROW()-m.objrow0)>=m.maxmove.OR.ABS(MCOL()-m.objcol0)>m.maxmove
  53.       EXIT
  54.     ENDIF
  55.     IF MDOWN()
  56.       m.dblclick=.T.
  57.       EXIT
  58.     ENDIF
  59.     IF ABS(SECONDS()-m.mclktimer)>_dblclick
  60.       EXIT
  61.     ENDIF
  62.   ENDDO
  63. ENDIF
  64. IF m.dblclick
  65.   m.objclass=UPPER(ALLTRIM(evlmsg(m.objclass0)))
  66.   m.objmsg=evlmsg(m.objmsg0)
  67.   IF '('$m.dblclkfnct
  68.     =&dblclkfnct
  69.   ELSE
  70.     DO (m.dblclkfnct)
  71.   ENDIF
  72.   RETURN .F.
  73. ENDIF
  74. IF .NOT.MDOWN()
  75.   RETURN .F.
  76. ENDIF
  77. _FOX25=('2.5'$VERSION())
  78. _FOX25REV=IIF(_FOX25,SUBSTR(VERSION(),AT('2.5',VERSION())+3,1),'')
  79. IF .NOT._FOX25
  80.   _DOS=.T.
  81.   _WINDOWS=.F.
  82.   _MAC=.F.
  83.   _UNIX=.F.
  84. ENDIF
  85. m.null=CHR(0)
  86. IF _WINDOWS.OR._MAC
  87.   m.lastmsgbar=SET('MESSAGE',1)
  88.   SET MESSAGE TO
  89. ELSE
  90.   WAIT CLEAR
  91. ENDIF
  92. IF m.colorscheme<1
  93.   m.colorscheme=1
  94. ENDIF
  95. IF EMPTY(m.dragicon0)
  96.   m.dragicon0=m.null
  97. ENDIF
  98. m.dragicon=m.dragicon0
  99. m.dragicon1=''
  100. m.dragicon2=''
  101. m.objclass=UPPER(ALLTRIM(m.objclass0))
  102. m.objmsg=m.objmsg0
  103. m.objmsg2=''
  104. m.objover=m.null
  105. m.objover2=m.objover
  106. m.objstate=-2
  107. m.dragtxt=''
  108. m.dragtxt1=''
  109. m.dragtxt2=''
  110. m.objheight=m.objheight0
  111. m.objheight1=0
  112. m.objwidth=m.objwidth0
  113. m.objwidth1=0
  114. m.iconmode=.F.
  115. m.iconstretch=.F.
  116. m.iconcheck=.F.
  117. m.objrow2=-999
  118. m.objcol2=-999
  119. m.iconno=-1
  120. m.icondelay=0
  121. m.icontimer=-999
  122. m.crsrtimer=-999
  123. m.foxtools=.F.
  124. IF _WINDOWS
  125.   IF .NOT.'\FOXTOOLS.FLL'$SET('LIBRARY').AND.FILE(SYS(2004)+'FOXTOOLS.FLL')
  126.     SET LIBRARY TO SYS(2004)+'FOXTOOLS' ADDITIVE
  127.   ENDIF
  128.   m.foxtools=('\FOXTOOLS.FLL'$SET('LIBRARY'))
  129. ENDIF
  130. DO WHILE MDOWN()
  131.   m.objrow=MROW(m.winname0)
  132.   m.objcol=MCOL(m.winname0)
  133.   IF m.objrow<0.OR.m.objcol<0
  134.     m.objrow=999
  135.     m.objcol=999
  136.     IF WEXIST('w_dragobj')
  137.       =updwinpos()
  138.     ENDIF
  139.   ENDIF
  140.   IF m.foxtools.AND.(m.objrow2<0.OR.m.objcol2<0.OR.m.objrow=999.OR.;
  141.      m.dragicon1==m.null.OR.ABS(SECONDS()-m.crsrtimer)>=.1)
  142.     m.loadcsr=regfn("LoadCursor","IL","I")
  143.     m.setcsr=regfn("SetCursor","I","I")
  144.     =callfn(m.setcsr,callfn(m.loadcsr,0,IIF(m.objrow=999.OR.;
  145.             m.dragicon1==m.null,32512,0)))
  146.     m.crsrtimer=SECONDS()
  147.   ENDIF
  148.   IF m.objrow=999.AND.m.objrow=m.objrow2.AND.m.objcol=m.objcol2
  149.     LOOP
  150.   ENDIF
  151.   IF m.dragheight>=0.AND.ABS(m.objrow-m.centerrow)>(m.dragheight/2)
  152.     m.objrow=IIF(m.objrow>m.centerrow,m.centerrow+m.dragheight/2,;
  153.                  m.centerrow-m.dragheight/2)
  154.   ENDIF
  155.   IF m.dragwidth>=0.AND.ABS(m.objcol-m.centercol)>(m.dragwidth/2)
  156.     m.objcol=IIF(m.objcol>m.centercol,m.centercol+m.dragwidth/2,;
  157.                  m.centercol-m.dragwidth/2)
  158.   ENDIF
  159.   IF .NOT.WEXIST('w_dragobj')
  160.     =updwinsize(m.dragicon)
  161.     IF _WINDOWS.OR._MAC
  162.       DEFINE WINDOW w_dragobj;
  163.                     FROM 999,999 TO m.objheight1+999,m.objwidth1+999;
  164.                     IN WINDOW (m.winname0) NONE;
  165.                     FONT 'MS Sans Serif',8;
  166.                     COLOR RGB(,,,192,192,192)
  167.     ELSE
  168.       DEFINE WINDOW w_dragobj;
  169.                     FROM 999,999 TO m.objheight1+999,m.objwidth1+999;
  170.                     IN WINDOW (m.winname0) NONE COLOR SCHEME (m.colorscheme)
  171.     ENDIF
  172.     ACTIVATE WINDOW w_dragobj NOSHOW
  173.   ENDIF
  174.   IF EMPTY(m.dragicon)
  175.     m.dragicon=m.dragicon0
  176.     m.objheight=m.objheight0
  177.     m.objwidth=m.objwidth0
  178.     m.iconno=-1
  179.     m.icondelay=0
  180.     m.icontimer=-999
  181.   ENDIF
  182.   IF LEFT(m.dragicon,1)=='@'
  183.     IF ABS(SECONDS()-m.icontimer)>=m.icondelay
  184.       m.dragicon1=evlmsg(m.dragicon)
  185.       IF m.icontimer<0
  186.         m.icontimer=SECONDS()
  187.       ELSE
  188.         m.icontimer=m.icontimer+m.icondelay
  189.       ENDIF
  190.     ELSE
  191.       m.dragicon1=ALLTRIM(m.dragicon2)
  192.     ENDIF
  193.     IF EMPTY(m.dragicon1)
  194.       m.dragicon1=ALLTRIM(m.dragicon2)
  195.       IF LEFT(m.dragicon1,1)=='@'
  196.         m.dragicon1=m.null
  197.       ENDIF
  198.     ENDIF
  199.     IF m.dragicon1==m.null
  200.       m.dragicon1=''
  201.     ENDIF
  202.   ELSE
  203.     m.dragicon1=m.dragicon
  204.     m.iconno=-1
  205.     m.icondelay=0
  206.     m.icontimer=-999
  207.   ENDIF
  208.   IF EMPTY(m.dragicon1)
  209.     m.dragicon1=m.dragicon0
  210.     m.objheight=m.objheight0
  211.     m.objwidth=m.objwidth0
  212.     m.iconno=-1
  213.     m.icondelay=0
  214.     m.icontimer=-999
  215.   ELSE
  216.     m.dragicon1=MLINE(m.dragicon1,1)
  217.   ENDIF
  218.   IF .NOT.m.dragicon1==m.dragicon2
  219.     m.dragicon2=m.dragicon1
  220.     IF m.iconno=-1.AND..NOT.m.dragicon1==m.dragicon0
  221.       IF m.objheight<=0
  222.         m.objheight=-1
  223.       ENDIF
  224.       IF m.objwidth<=0
  225.         m.objwidth=-1
  226.       ENDIF
  227.     ENDIF
  228.     m.fileext=UPPER(RIGHT(m.dragicon1,4))
  229.     IF m.fileext=='.BMP'.OR.m.fileext=='.ICO'
  230.       DO CASE
  231.         CASE .NOT._WINDOWS.AND..NOT._MAC
  232.           m.dragicon1=trimpath(m.dragicon1,.T.)
  233.         CASE m.iconno=-1.AND..NOT.m.iconcheck.AND..NOT.FILE(m.dragicon1)
  234.           m.dragicon1=trimpath(m.dragicon1)+'*'
  235.           m.dragicon0=m.dragicon1
  236.           m.fileext=''
  237.       ENDCASE
  238.     ENDIF
  239.     m.iconcheck=.T.
  240.     DO CASE
  241.       CASE m.dragicon1==m.null
  242.         MOVE WINDOW w_dragobj TO 999,999
  243.         m.objrow2=-999
  244.         m.objcol2=-999
  245.         IF m.foxtools
  246.           m.loadcsr=regfn("LoadCursor","IL","I")
  247.           m.setcsr=regfn("SetCursor","I","I")
  248.           =callfn(m.setcsr,callfn(m.loadcsr,0,32512))
  249.         ENDIF
  250.       CASE (_WINDOWS.OR._MAC).AND.(m.fileext=='.BMP'.OR.m.fileext=='.ICO')
  251.         IF .NOT.m.iconmode.OR.m.objheight>-2.OR.m.objwidth>-2
  252.           m.iconstretch=.F.
  253.           IF m.objheight=0
  254.             m.objheight=m.objheight0
  255.           ENDIF
  256.           DO CASE
  257.             CASE m.objheight=-1.OR.m.objheight=0
  258.               m.objheight1=2.462
  259.             CASE m.objheight>0
  260.               m.objheight1=m.objheight
  261.               m.iconstretch=.T.
  262.           ENDCASE
  263.           IF m.objwidth=0
  264.             m.objwidth=m.objwidth0
  265.           ENDIF
  266.           DO CASE
  267.             CASE m.objwidth=-1.OR.m.objwidth=0
  268.               m.objwidth1=6.4
  269.             CASE m.objwidth>0
  270.               m.objwidth1=m.objwidth
  271.               m.iconstretch=.T.
  272.           ENDCASE
  273.           MODIFY WINDOW w_dragobj;
  274.                         FROM m.objrow-(m.objheight1/2),m.objcol-(m.objwidth1/2);
  275.                         SIZE m.objheight1,m.objwidth1
  276.           m.iconmode=.T.
  277.           m.objheight=-2
  278.           m.objwidth=-2
  279.         ENDIF
  280.         IF .NOT.WOUTPUT('w_dragobj')
  281.           ACTIVATE WINDOW w_dragobj SAME
  282.         ENDIF
  283.         CLEAR
  284.         IF m.iconstretch
  285.           @ 0,0 SAY (m.dragicon1) BITMAP;
  286.                     SIZE WROWS(),WCOLS();
  287.                     STRETCH STYLE 'T'
  288.         ELSE
  289.           @ 0,0 SAY (m.dragicon1) BITMAP;
  290.                     SIZE WROWS(),WCOLS();
  291.                     ISOMETRIC STYLE 'T'
  292.         ENDIF
  293.         IF m.foxtools
  294.           m.loadcsr=regfn("LoadCursor","IL","I")
  295.           m.setcsr=regfn("SetCursor","I","I")
  296.           =callfn(m.setcsr,callfn(m.loadcsr,0,0))
  297.         ENDIF
  298.       OTHERWISE
  299.         =updwinsize(m.dragicon1)
  300.         IF _WINDOWS.OR._MAC
  301.           MODIFY WINDOW w_dragobj;
  302.                         FROM m.objrow-(m.objheight1/2),m.objcol-(m.objwidth1/2);
  303.                         SIZE m.objheight1,m.objwidth1
  304.         ELSE
  305.           ZOOM WINDOW w_dragobj NORM;
  306.                       FROM m.objrow,m.objcol-(m.objwidth1/2);
  307.                       SIZE m.objheight1,m.objwidth1
  308.         ENDIF
  309.         m.iconmode=.F.
  310.         m.objheight=-1
  311.         m.objwidth=-1
  312.         m.iconstretch=.F.
  313.         IF .NOT.WOUTPUT('w_dragobj')
  314.           ACTIVATE WINDOW w_dragobj SAME
  315.         ENDIF
  316.         CLEAR
  317.         IF .NOT.m.dragicon1==m.null
  318.           @ 0,0 SAY m.dragicon1
  319.           IF m.foxtools
  320.             m.loadcsr=regfn("LoadCursor","IL","I")
  321.             m.setcsr=regfn("SetCursor","I","I")
  322.             =callfn(m.setcsr,callfn(m.loadcsr,0,0))
  323.           ENDIF
  324.         ENDIF
  325.     ENDCASE
  326.   ENDIF
  327.   m.dragtxt1=LEFT(evlmsg(m.dragtxt),79)
  328.   IF .NOT.m.dragtxt1==m.dragtxt2
  329.     m.dragtxt2=m.dragtxt1
  330.     IF EMPTY(m.dragtxt1)
  331.       IF _WINDOWS.OR._MAC
  332.         SET MESSAGE TO
  333.       ELSE
  334.         WAIT CLEAR
  335.       ENDIF
  336.     ELSE
  337.       IF _WINDOWS.OR._MAC
  338.         SET MESSAGE TO m.dragtxt1
  339.       ELSE
  340.         WAIT CLEAR
  341.         WAIT m.dragtxt1 WINDOW NOWAIT
  342.       ENDIF
  343.     ENDIF
  344.   ENDIF
  345.   IF m.objstate=1
  346.     m.objstate=0
  347.   ENDIF
  348.   m.objclass=UPPER(ALLTRIM(evlmsg(m.objclass0)))
  349.   m.objmsg=evlmsg(m.objmsg0)
  350.   IF m.objrow#m.objrow2.OR.m.objcol#m.objcol2
  351.     m.objover=dragover()
  352.     IF m.objover==m.null.OR.(.NOT.EMPTY(m.objover2).AND.;
  353.        .NOT.m.objover==m.objover2))
  354.       m.objstate=1
  355.       IF .NOT.m.objover2==m.null
  356.         m.objrow3=m.objrow
  357.         m.objcol3=m.objcol
  358.         m.objrow=m.objrow2
  359.         m.objcol=m.objcol2
  360.         =dragover()
  361.         m.objrow=m.objrow3
  362.         m.objcol=m.objcol3
  363.         m.objstate=1
  364.       ENDIF
  365.     ENDIF
  366.     IF .NOT.EMPTY(m.dragfnct)
  367.       IF '('$m.dragfnct
  368.         =&dragfnct
  369.       ELSE
  370.         DO (m.dragfnct)
  371.       ENDIF
  372.     ENDIF
  373.   ENDIF
  374.   =updwinpos()
  375.   IF .NOT.m.dragicon1==m.null.AND.(.NOT.WVISIBLE('w_dragobj').OR.;
  376.      .NOT.WONTOP('w_dragobj'))
  377.     =updwinpos()
  378.     ACTIVATE WINDOW w_dragobj
  379.   ENDIF
  380.   IF m.objstate#1.OR..NOT.m.objover==m.null
  381.     m.objstate=2
  382.   ENDIF
  383.   m.objmsg2=m.objmsg
  384.   m.objover2=m.objover
  385.   IF m.objrow>=0
  386.     m.objrow2=m.objrow
  387.   ENDIF
  388.   IF m.objcol>=0
  389.     m.objcol2=m.objcol
  390.   ENDIF
  391. ENDDO
  392. RELEASE WINDOW w_dragobj
  393. IF _WINDOWS.OR._MAC
  394.   IF m.lastmsgbar==''
  395.     SET MESSAGE TO
  396.   ELSE
  397.     SET MESSAGE TO m.lastmsgbar
  398.   ENDIF
  399. ELSE
  400.   WAIT CLEAR
  401. ENDIF
  402. IF m.foxtools
  403.   m.loadcsr=regfn("LoadCursor","IL","I")
  404.   m.setcsr=regfn("SetCursor","I","I")
  405.   =callfn(m.setcsr,callfn(m.loadcsr,0,32512))
  406. ENDIF
  407. m.objstate=-1
  408. IF EMPTY(m.objarray)
  409.   m.objclass=UPPER(ALLTRIM(evlmsg(m.objclass0)))
  410.   m.objmsg=evlmsg(m.objmsg0)
  411.   =dragover()
  412.   RETURN .T.
  413. ENDIF
  414. m.arrayrows=IIF(TYPE(m.objarray)=='C',ALEN((m.objarray),1),0)
  415. IF m.arrayrows=0
  416.   RETURN .T.
  417. ENDIF
  418. m.arraycols=ALEN((m.objarray),2)
  419. IF m.arraycols=0
  420.   m.objclass=UPPER(ALLTRIM(evlmsg(m.objclass0)))
  421. ENDIF
  422. FOR m.arraycnt = 1 TO m.arrayrows
  423.   IF m.arraycols=0
  424.     m.objmsg=evlmsg(EVALUATE(m.objarray+'(m.arraycnt)'))
  425.   ELSE
  426.     m.objclass=UPPER(ALLTRIM(evlmsg(EVALUATE(m.objarray+'(m.arraycnt,1)'))))
  427.     m.objmsg=evlmsg(EVALUATE(m.objarray+'(m.arraycnt,2)'))
  428.   ENDIF
  429.   IF .NOT.EMPTY(m.objmsg)
  430.     =dragover()
  431.   ENDIF
  432. ENDFOR
  433. RETURN .T.
  434.  
  435. * END dragevnt
  436.  
  437.  
  438.  
  439. FUNCTION updwinpos
  440. PRIVATE moverow,movecol
  441.  
  442. IF (m.objrow=m.objrow2.AND.m.objcol=m.objcol2).OR.m.dragicon1==m.null
  443.   RETURN .F.
  444. ENDIF
  445. IF _WINDOWS.OR._MAC
  446.   m.moverow=m.objrow-(m.objheight1/2)
  447.   m.movecol=m.objcol-(m.objwidth1/2)
  448. ELSE
  449.   m.moverow=m.objrow
  450.   m.movecol=m.objcol-(m.objwidth1/2)
  451. ENDIF
  452. IF MROW('w_dragobj')#m.moverow.OR.MCOL('w_dragobj')#m.movecol
  453.   MOVE WINDOW w_dragobj TO m.moverow,m.movecol
  454. ENDIF
  455. m.crsrtimer=SECONDS()
  456. RETURN .T.
  457.  
  458. * END updwinpos
  459.  
  460.  
  461.  
  462. FUNCTION updwinsize
  463. PARAMETER m.str_data
  464. PRIVATE m.str_data
  465.  
  466. IF _WINDOWS.OR._MAC
  467.   m.objheight1=SROWS()/SYSMETRIC(1)*FONTMETRIC(1,WFONT(1,''),WFONT(2,''),;
  468.               WFONT(3,''))+8*SROWS()/SYSMETRIC(1)
  469.   m.objwidth1=TXTWIDTH(m.str_data)+2*SCOLS()/SYSMETRIC(2)
  470. ELSE
  471.   m.objheight1=1
  472.   m.objwidth1=LEN(m.str_data)
  473. ENDIF
  474. RETURN .T.
  475.  
  476. * END updwinsize
  477.  
  478.  
  479.  
  480. FUNCTION trimext
  481. PARAMETERS m.filename
  482. PRIVATE m.filename,m.at_pos
  483.  
  484. m.at_pos=AT('.',m.filename)
  485. IF m.at_pos>0
  486.   m.filename=LEFT(m.filename,m.at_pos-1)
  487. ENDIF
  488. RETURN ALLTRIM(m.filename)
  489.  
  490. * END trimext
  491.  
  492.  
  493.  
  494. FUNCTION trimpath
  495. PARAMETERS m.filename,m.trim_ext
  496. PRIVATE m.filename,m.trim_ext,m.at_pos
  497.  
  498. IF EMPTY(m.filename)
  499.   RETURN ''
  500. ENDIF
  501. m.at_pos=AT(':',m.filename)
  502. IF m.at_pos>0
  503.   m.filename=SUBSTR(m.filename,m.at_pos+1)
  504. ENDIF
  505. IF m.trim_ext
  506.   m.filename=trimext(m.filename)
  507. ENDIF
  508. RETURN ALLTRIM(SUBSTR(m.filename,AT('\',m.filename,;
  509.        MAX(OCCURS('\',m.filename),1))+1))
  510.  
  511. * END trimpath
  512.  
  513.  
  514.  
  515. FUNCTION evlmsg
  516. PARAMETERS m.old_str
  517. PRIVATE m.old_text,m.new_text,m.eval_str,m.var_type
  518.  
  519. IF TYPE('m.old_str')#'C'
  520.   RETURN ''
  521. ENDIF
  522. IF .NOT.LEFT(m.old_str,1)=='@'
  523.   RETURN m.old_str
  524. ENDIF
  525. m.eval_str=EVALUATE(SUBSTR(m.old_str,2))
  526. m.var_type=TYPE('m.eval_str')
  527. DO CASE
  528.   CASE m.var_type=='C'
  529.     m.new_str=m.eval_str
  530.   CASE m.var_type=='N'
  531.     m.new_str=ALLTRIM(STR(m.eval_str,24,12))
  532.     DO WHILE RIGHT(m.new_str,1)=='0'
  533.       m.new_str=LEFT(m.new_str,LEN(m.new_str)-1)
  534.       IF RIGHT(m.new_str,1)=='.'
  535.         m.new_str=LEFT(m.new_str,LEN(m.new_str)-1)
  536.         EXIT
  537.       ENDIF
  538.     ENDDO
  539.   CASE m.var_type=='D'
  540.     m.new_str=DTOC(m.eval_str)
  541.   CASE m.var_type=='L'
  542.     m.new_str=IIF(m.eval_str,'.T.','.F.')
  543.   OTHERWISE
  544.     m.new_str=m.old_str
  545. ENDCASE
  546. RETURN m.new_str
  547.  
  548. * END evlmsg
  549.  
  550.  
  551.  
  552. FUNCTION animate
  553. PARAMETERS m.iconmask,m.iconspeed,m.value1,m.value2,m.valuecount
  554. PRIVATE m.iconmask,m.iconspeed,m.value1,m.value2,m.valuecount
  555. PRIVATE m.ascflag,m.wildcard,m.iconfile
  556.  
  557. DO CASE
  558.   CASE TYPE('m.value1')=='C'
  559.     m.ascflag=.T.
  560.     m.value1=ASC(m.value1)
  561.     m.value2=ASC(m.value2)
  562.   CASE TYPE('m.value1')#'N'
  563.     RETURN m.iconmask
  564.   OTHERWISE
  565.     m.ascflag=.F.
  566. ENDCASE
  567. DO CASE
  568.   CASE '??'$m.iconmask
  569.     m.wildcard='??'
  570.   CASE '?'$m.iconmask
  571.     m.wildcard='?'
  572.   OTHERWISE
  573.     RETURN m.iconmask
  574. ENDCASE
  575. IF TYPE('m.iconspeed')#'N'
  576.   m.iconspeed=0
  577. ENDIF
  578. m.icondelay=IIF(m.iconspeed<=0,0,1/m.iconspeed)
  579. IF m.value2>=m.value1
  580.   IF TYPE('m.valuecount')#'N'
  581.     m.valuecount=1
  582.   ENDIF
  583.   IF .NOT.BETWEEN(m.iconno,m.value1,m.value2)
  584.     m.iconno=m.value1
  585.   ENDIF
  586. ELSE
  587.   IF TYPE('m.valuecount')#'N'
  588.     m.valuecount=-1
  589.   ENDIF
  590.   IF .NOT.BETWEEN(m.iconno,m.value2,m.value1)
  591.     m.iconno=m.value1
  592.   ENDIF
  593. ENDIF
  594. IF m.ascflag
  595.   m.iconfile=CHR(m.iconno)
  596. ELSE
  597.   m.iconfile=ALLTRIM(STR(m.iconno,2))
  598.   IF LEN(m.wildcard)>LEN(m.iconfile)
  599.     m.iconfile=REPLICATE('0',LEN(m.wildcard)-LEN(m.iconfile))+m.iconfile
  600.   ENDIF
  601. ENDIF
  602. m.iconfile=STRTRAN(m.iconmask,m.wildcard,m.iconfile,1,1)
  603. m.iconno=m.iconno+m.valuecount
  604. IF m.foxtools
  605.   m.loadcsr=regfn("LoadCursor","IL","I")
  606.   m.setcsr=regfn("SetCursor","I","I")
  607.   =callfn(m.setcsr,callfn(m.loadcsr,0,0))
  608. ENDIF
  609. RETURN m.iconfile
  610.  
  611. * END animate
  612.