home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / xbase / library / clipper / progr_ba / timentxc.c < prev    next >
C/C++ Source or Header  |  1992-03-01  |  7KB  |  244 lines

  1. /*----------------------------------------------------------------------------
  2.  
  3.    STATUS version 1.01
  4.    (c) 1992 John T. Opincar, Jr.
  5.    CID: 71631,541
  6.    02/27/92 
  7.  
  8.    PLEASE READ THIS!
  9.                                        
  10.    You are free to distribute STATUS in any manner you choose and use STATUS
  11.    in any setting, including commercial without any obligation to me.  The
  12.    only thing that I ask is that you do not distribute modified versions of
  13.    STATUS without including the original code and documentation in its
  14.    entirety.  If you feel inclined to distribute STATUS with your own 
  15.    modifications (which I would discourage), ***PLEASE*** keep your changes
  16.    in seperate files, and make the seperation and changes obvious to anyone
  17.    who might subsequently encounter the ZIP.
  18.  
  19.    I have been informally supporting STATUS on CIS, and do not want a zillion
  20.    messages about problems introduced by others.  In lieu of making your own
  21.    changes, I would prefer that you send me mail describing the additional
  22.    features you would like to see in STATUS.  The exceptional performance
  23.    gains yielded by STATUS are the result of several key assumptions about 
  24.    how it will be used.  Before making a suggestion, please read the section
  25.    in the documentation entitled, "What Makes STATUS Tick." The main 
  26.    motivation behind this version of STATUS was input I received from users.
  27.  
  28. ----------------------------------------------------------------------------*/
  29.  
  30. #include "extend.h"
  31. #include "clipdbf.h"
  32. #include "status.ch"
  33.  
  34. extern int _gtMaxRow();      /* Clipper internal function returning max row */
  35. extern int _gtMaxCol();      /* Clipper internal function returning max column */
  36. extern int _gtIsColor();     /* Clipper internal function returning iscolor */
  37.  
  38. extern void timerOn();       /* Declare functions defined in timentxa.asm */
  39. extern void timerOff();
  40.  
  41. extern int barOffset;        /* Offset into video mem for bar display */
  42. extern int barChar;          /* Character to be used in bar */
  43. extern int barColor;         /* Color to be used for bar */ 
  44. extern int barActive;        /* Flag, non-zero if bar is to be used */  
  45.  
  46. extern int numOffset;        /* Offset into video mem for number display */
  47. extern int numColor;         /* Color to be used for number display */ 
  48. extern int numActive;        /* Flag, non-zero if number is to be used */
  49.  
  50. extern int ticks;            /* Number of ticks (18/second) between updates */
  51. extern int isColor;          /* Flag, non-zero if color monitor present */
  52. extern int active;           /* Flag, non-zero if currently displaying */
  53. extern long lastRec;         /* Number of records in database */
  54. extern long *recnoPtr;       /* Pointer to recno() value */
  55.                   
  56. char coltable[16][4] = {"N", "B", "G", "BG", "R", "BR", "GR", "W", "N+", "B+", "G+", "BG+", "R+", "BR+", "GR+", "W+"};
  57.  
  58. /*--------------------------------_VCOLTONUM----------------------------------*/
  59.  
  60. int _vcoltonum(char *color) {
  61.   int i = -1, found = 0;
  62.   char *colptr, *cptr, temp;
  63.  
  64.   colptr = color;
  65.   while (*colptr) {
  66.     if ((*colptr >= 'a') && (*colptr <= 'z')) {
  67.       *colptr -= 32;
  68.     }
  69.     colptr++;
  70.   }
  71.   colptr = color + 1;
  72.   if ( (*colptr != '\0') && (*colptr != '+') && (*colptr < *color) ) {
  73.     temp = *color;
  74.     *color = *colptr;
  75.     *colptr = temp;
  76.   }
  77.   while ( (i < 15) && !found ) {
  78.     colptr = color;
  79.     cptr = coltable[++i];
  80.     while ( (found = (*colptr == *cptr)) && *colptr++ && *cptr++ ) {};
  81.   }
  82.   return(i);
  83. }
  84.  
  85. /*-------------------------------_VCOLTOATTR----------------------------------*/
  86.  
  87. int _vcoltoattr(char *color) {
  88.   char *colptr;
  89.  
  90.   colptr = color;
  91.   while ( *colptr ) {
  92.     if ( *colptr == '/' ) {
  93.       *colptr++ = '\0';
  94.       break;
  95.     } else {
  96.       colptr++;
  97.     }
  98.   }
  99.   return( (_vcoltonum(colptr) * 16) + _vcoltonum(color) );
  100. }
  101.  
  102. /*--------------------------------STATUSBAR---------------------------------*/
  103.  
  104. CLIPPER STATUSBAR() {
  105. /* function statusBar(nRow, nCol, uChar, uColor) */
  106.  
  107.   if ( (PCOUNT != 1) && (PCOUNT != 4) ) {
  108.     _retni(BAD_PARM_COUNT);
  109.     return;
  110.   }
  111.  
  112.   if ( !ISNUM(1) ) {
  113.     _retni(TYPE_MISMATCH);
  114.     return;
  115.   }
  116.  
  117.   /* If nRow passed is less than zero, then disable bar display */
  118.   if ( _parni(1) < 0 ) {
  119.     barActive = 0;
  120.     _retni(0);
  121.     return;
  122.   }
  123.  
  124.   if ( !(ISNUM(2) && (ISNUM(3) || ISCHAR(3)) && (ISNUM(4) || ISCHAR(4))) ) {
  125.     _retni(TYPE_MISMATCH);
  126.     return;
  127.   }
  128.  
  129.   if ( (_parni(1) < 0) || (_parni(1) > _gtMaxRow()) ||
  130.        (_parni(2) < 0) || (_parni(2) > _gtMaxCol()) ) {
  131.     _retni(BAD_COORDS);
  132.     return;
  133.   }
  134.   barOffset = (((_gtMaxCol() + 1) * _parni(1)) + _parni(2)) * 2;
  135.  
  136.  
  137.   if ( ISNUM(3) ) {
  138.     barChar = _parni(3);
  139.   } else {
  140.     barChar = *(_parc(3));
  141.   }
  142.  
  143.   if ( ISNUM(4) ) {
  144.     barColor = _parni(4);
  145.   } else {
  146.     barColor = _vcoltoattr(_parc(4));
  147.   }
  148.   
  149.   barActive = 1;
  150.   _retni(0);
  151. }
  152.  
  153. /*-------------------------------STATUSNUMBER-------------------------------*/
  154.  
  155. CLIPPER STATUSNUMB() {
  156. /* function statusNumber(nRow, nCol, uColor) */
  157.       
  158.   if ( (PCOUNT != 1) && (PCOUNT != 3) ) {
  159.     _retni(BAD_PARM_COUNT);
  160.     return;
  161.   }
  162.  
  163.   if ( !ISNUM(1) ) {
  164.     _retni(TYPE_MISMATCH);
  165.     return;
  166.   }
  167.  
  168.   /* If nRow passed is less than zero, then disable number display */
  169.   if ( _parni(1) < 0 ) {
  170.     numActive = 0;
  171.     _retni(0);
  172.     return;
  173.   }
  174.  
  175.   if ( !(ISNUM(2) && (ISNUM(3) || ISCHAR(3))) ) {
  176.     _retni(TYPE_MISMATCH);
  177.     return;
  178.   }
  179.  
  180.   if ( (_parni(1) < 0) || (_parni(1) > _gtMaxRow()) ||
  181.        (_parni(2) < 0) || (_parni(2) > _gtMaxCol()) ) {
  182.     _retni(BAD_COORDS);
  183.     return;
  184.   }
  185.   numOffset = (((_gtMaxCol() + 1) * _parni(1)) + _parni(2)) * 2;
  186.  
  187.  
  188.   if ( ISNUM(3) ) {
  189.     numColor = _parni(3);
  190.   } else {
  191.     numColor = _vcoltoattr(_parc(3));
  192.   }
  193.   
  194.   numActive = 1;
  195.   _retni(0);
  196. }
  197.  
  198. /*---------------------------------STATUSON---------------------------------*/
  199.  
  200. CLIPPER STATUSON() {
  201. /* statusOn([nTicks]) */
  202.  
  203.   if ( PCOUNT > 1 ) {
  204.     _retni(BAD_PARM_COUNT);
  205.     return;
  206.   }
  207.   if ( (PCOUNT == 1) && !ISNUM(1) ) {
  208.     _retni(TYPE_MISMATCH);
  209.     return;
  210.   }
  211.   if ( PCOUNT == 1 ) {
  212.     ticks = _parni(1);
  213.   } else {
  214.     ticks = 18;
  215.   }
  216.   if ( ticks <= 0 ) {
  217.     _retni(BAD_TICKS);
  218.     return;
  219.   }
  220.   if ( (*_Workareas)[0] == NULL ) {
  221.     _retni(NO_DBF_USED);
  222.     return;
  223.   }
  224.   if ( (*_Workareas)[0]->indexord != 0 ) {
  225.     _retni(BAD_ORDER);
  226.     return;
  227.   }
  228.   isColor = _gtIsColor();
  229.   recnoPtr = &((*_Workareas)[0]->recno);
  230.   lastRec = (*_Workareas)[0]->lastrec;
  231.   if ( lastRec > 0 ) {
  232.     timerOn();
  233.   }
  234.   _retni(0);
  235. }
  236.  
  237. /*--------------------------------STATUSOFF---------------------------------*/
  238.  
  239. CLIPPER STATUSOFF() {
  240.   timerOff();
  241.   _retni(0);
  242. }
  243.  
  244.