home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1996 September / PCWK996.iso / demo / wgelectr / emul51 / examples / d2.c < prev    next >
C/C++ Source or Header  |  1989-09-24  |  3KB  |  104 lines

  1. /*         (c) Copyright Franklin Software, Inc. 1989
  2.  *         888 Saratoga Avenue, Suite #2
  3.  *        San Jose, Ca.  95129
  4.  *        ph/fax:  (408) 296-8051/8061
  5.  *
  6.  * FileName:    d2.c
  7.  * Purpose:    to demonstrate C functions and code generation
  8.  * Input:    none - self contained
  9.  * Function:    does a symbolic conversion of a data stream from CODE space
  10.  * Output:    returns :
  11.  *            DONE  =  0
  12.  *            Error = ~0
  13.  *
  14.  * History:    890923 - swb - initial code
  15.  *
  16.  * Scope:    Read an ASCII input stream from CODE space.  Start by writing
  17.  *        '*'s out to XDATA space.  Blank that space, and write out
  18.  *        a short Franklin message--scrambled with numbers.  Sort 
  19.  *        non-numeric characters (except dashes) and write directly
  20.  *        to XDATA space, and write the numeric values and dashes to 
  21.  *        internal 8051 DATA space.  Repeat till the cows come home.
  22.  */
  23. #pragma code symbols debug objectextend
  24. #include <absacc.h>
  25.  
  26. /*
  27.  * Define our various data spaces.  Note that access to these spaces can be
  28.  * made with direct writes--no procedure calls are required!
  29.  */
  30. code char arrayC[] = {
  31. "No4ha0u Co8rp-ora8ti6on6. Em-ula1tor8s f2or Mi0croControllers!"};
  32. data char  arrayD[12];
  33. xdata char arrayX[ sizeof(arrayC) ];
  34.  
  35. /* 
  36.  * This FUNCtion will copy whats pointed to by <src> into whats pointed to 
  37.  * by <dest>.  Copying will continue until a NULL value is encountered.  
  38.  * Return a count of items processed.
  39.  *
  40.  * NOTE:  Be certain that the <src> array is bounded by a terminating NULL!
  41.  */
  42. char copy_char( char *dest, char *src ) {
  43.     unsigned char cnt;
  44.     while( *dest++ = *src++ ) 
  45.         cnt++;
  46.     return cnt;
  47. }    /* end of FUNCtion copy_char() */
  48.  
  49.  
  50. /*
  51.  * This PROCedure will set what's pointed to by post-incremented <dest> to 
  52.  * ZERO, <count> times.  Nothing is returned.
  53.  */
  54. void clr_char( char *dest, unsigned char count ) {
  55.     while( count-- ) 
  56.         *dest++ = ' ';
  57. }
  58.  
  59.  
  60. /*
  61.  * This is the actual working routine called by main to do the demo at hand.
  62.  * No parameters are required, and nothing is returned.
  63.  */
  64. void moving_demo() {
  65.     unsigned char c, n = 0;
  66.     char *p1, *p2;
  67.  
  68. /* fill the external data array with asterisks, just for drill */
  69.     for( p1 = arrayX, c = sizeof( arrayC ); c-- ; ) 
  70.         *p1++ = '*';
  71.  
  72. /* fill the internal data space with some '#' signs, just to be different! */
  73.     for( p2 = arrayD, c = sizeof( arrayD ); c-- ; ) 
  74.         *p2++ = '#';
  75.  
  76.     c = copy_char( arrayX, arrayC );    /* copy code to Xdata */
  77.  
  78.     clr_char( arrayX, c );            /* flush the array */
  79.  
  80.     p1 = arrayC;                /* set the pointer */
  81.     p2 = arrayD;
  82.  
  83.     while( c = *p1++ ) {
  84.         if ( ( c > '9' || c < '0' ) && c != '-' )
  85.             XBYTE[ n++ ] = c;
  86.         else 
  87.             *p2++ = c;
  88.     };    /* end of while *p1 ... */
  89. }    /* end of PROCedure moving_demo() */
  90.  
  91.  
  92. /*
  93.  * The MAIN routine.  This is just a placeholder, and gives us a way to
  94.  * cleanly make this a forever test.
  95.  */
  96. void main( char argc, char *argv[] ) {
  97.     
  98.     while( 1 ) moving_demo();
  99.  
  100. }    /* end of PROCedure main() */
  101.  
  102. /*         (c) Copyright Franklin Software, Inc. 1989        */
  103.  
  104.