home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / CROSSASM / 68ASMSIM.ZIP / simsrc / strutils.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-04-09  |  4.5 KB  |  249 lines

  1.  
  2. /***************************** 68000 SIMULATOR ****************************
  3.  
  4. File Name: STRUTILS.C
  5. Version: 1.0
  6.  
  7. This file contains various routines for manipulating strings
  8.  
  9. The routines are :  
  10.  
  11.     gettext(), same(), eval(), eval2(), getval(), strcopy(), mkfname(),
  12.     pchange()
  13.  
  14. ***************************************************************************/
  15.  
  16.  
  17.  
  18.  
  19. #include <stdio.h>
  20. #include "extern.h"
  21.  
  22.  
  23. char *gettext(word,prompt)     /* returns pointer to scanned word, prompts */
  24. int    word;                                      /* for input if necessary */
  25. char    *prompt;
  26. {
  27.     int i, p, pwrd;
  28.  
  29.     if (wcount >= word) 
  30.         return(wordptr[word-1]);
  31.     else 
  32.         errflg = TRUE;
  33.     while (errflg)
  34.         {
  35.         printf("%s",prompt);
  36.         
  37.         if (gets(lbuf,20)==NULL) exit(0);
  38.         scrollWindow();
  39.         if ((p = scan(lbuf,wordptr,5)) < 1) 
  40.             errflg = TRUE;
  41.         else 
  42.             {
  43.             errflg = FALSE;
  44.             pwrd = word - 1;
  45.             for (i= (p-1);i>=0;i--)
  46.                 wordptr[pwrd + i] = wordptr[i];
  47.             wcount = pwrd + p;
  48.             }
  49.         }
  50.     return(wordptr[pwrd]);
  51.  
  52. }
  53.  
  54.  
  55.  
  56. int same(str1,str2)                         /* checks if two strings match */
  57. char *str1, *str2;
  58. {
  59.  
  60.     while (toupper(*str1++) == toupper(*str2++))
  61.         if (*str1 == '\0') return 1;                        /* strings match */
  62.     return 0;                                      /* strings are different */
  63.  
  64. }
  65.  
  66.  
  67.  
  68. int eval(string)                                        /* evaluate string */
  69. char *string;
  70. {
  71.     char *tmpptr, bit;
  72.     int value;
  73.  
  74.     errflg = FALSE;
  75.     switch (*string)    /* look at the first character */
  76.         {
  77.         case '$':        /* hex input */
  78.             if (sscanf(string+1,"%x",&value) != 1)
  79.                 errflg = TRUE;
  80.             break;
  81.         case '.':        /* decimal input */
  82.             if (sscanf(string+1,"%d",&value) != 1)
  83.                 errflg = TRUE;
  84.             break;
  85.         case '@':        /* octal input */
  86.             if (sscanf(string+1,"%o",&value) != 1)
  87.                 errflg = TRUE;
  88.             break;
  89.         case '\'':        /* ASCII input */
  90.         case '\"':
  91.             value = BYTE & *(string+1);
  92.             break;
  93.         case '%':        /* binary input */
  94.             tmpptr = string;
  95.             value = 0;
  96.             while ((bit = *++tmpptr) != '\0')
  97.                 {
  98.                 value <<= 1;
  99.                 if (bit == '1') ++value;
  100.                 else if (bit != '0')
  101.                     {
  102.                     errflg = TRUE;
  103.                     break;
  104.                     }
  105.                 }
  106.             break;
  107.         default:        /* default is hex input */
  108.             if (sscanf(string,"%x",&value) != 1)
  109.                 errflg = TRUE;
  110.         }
  111.     return value;
  112.  
  113. }
  114.  
  115.  
  116.  
  117. int eval2(string, result)      /* evaluate string and return result in the */
  118. char *string;                                            /* long parameter */
  119. long    *result;
  120. {
  121.     char *tmpptr, bit;
  122.     long int value;
  123.  
  124.     errflg = FALSE;
  125.     switch (*string)    /* look at the first character */
  126.         {
  127.         case '$':        /* hex input */
  128.             if (sscanf(string+1, "%08lx", &value) != 1)
  129.                 errflg = TRUE;
  130.             break;
  131.         case '.':        /* decimal input */
  132.             if (sscanf(string+1,"%d",&value) != 1)
  133.                 errflg = TRUE;
  134.             break;
  135.         case '@':        /* octal input */
  136.             if (sscanf(string+1,"%o",&value) != 1)
  137.                 errflg = TRUE;
  138.             break;
  139.         case '\'':        /* ASCII input */
  140.         case '\"':
  141.             value = BYTE & *(string+1);
  142.             break;
  143.         case '%':        /* binary input */
  144.             tmpptr = string;
  145.             value = 0;
  146.             while ((bit = *++tmpptr) != '\0')
  147.                 {
  148.                 value <<= 1;
  149.                 if (bit == '1') ++value;
  150.                 else if (bit != '0')
  151.                     {
  152.                     errflg = TRUE;
  153.                     break;
  154.                     }
  155.                 }
  156.             break;
  157.         default:        /* default is hex input */
  158.             if (sscanf(string, "%08lx", &value) != 1)
  159.                 errflg = TRUE;
  160.         }
  161.     *result = value;
  162.     return -1;
  163.  
  164. }
  165.  
  166.  
  167.  
  168. int getval(word,prompt)
  169. int word;
  170. char *prompt;
  171. {
  172. int value, p, i, pwrd;
  173.  
  174.     if (wcount >= word) 
  175.         value = eval(wordptr[word-1]);
  176.     else 
  177.         errflg = TRUE;
  178.     while (errflg)
  179.         {
  180.         printf("%s",prompt);
  181.         if (gets(lbuf,20)==NULL) exit(0);
  182.         scrollWindow();
  183.         if ((p = scan(lbuf,wordptr,5)) < 1) 
  184.             errflg = TRUE;
  185.         else 
  186.             {
  187.             pwrd = word - 1;
  188.             for (i= (p-1);i>=0;i--)
  189.                 wordptr[pwrd + i] = wordptr[i];
  190.             wcount = pwrd + p;
  191.             value = eval(wordptr[pwrd]);
  192.             }
  193.         }
  194.     return value;
  195.  
  196. }
  197.  
  198.  
  199.  
  200. int strcopy(str1,str2)
  201. char *str1, *str2;
  202. {
  203.  
  204.     while (*str2++ = *str1++);
  205.     return SUCCESS;
  206.  
  207. }
  208.  
  209.  
  210.  
  211. char *mkfname(cp1,cp2,outbuf)
  212. char *cp1, *cp2, *outbuf;
  213. {
  214.     char *tptr;
  215.  
  216.     tptr = outbuf;
  217.     while (*cp1 != '\0')
  218.         *tptr++ = *cp1++;
  219.     while (*cp2 != '\0')
  220.         *tptr++ = *cp2++;
  221.     *tptr = '\0';
  222.     return outbuf;
  223.  
  224. }
  225.  
  226.  
  227.  
  228. int pchange(oldval)
  229. char oldval;
  230. {
  231.     char nval;
  232.  
  233.     errflg = 0;
  234.     if (gets(lbuf,80) == NULL) 
  235.         exit(0);
  236.     scrollWindow();
  237.     wcount = scan(lbuf,wordptr,1);
  238.     nval = oldval;
  239.     if ((wcount > 0) && (!same(".",wordptr[0]))) {
  240.         nval = eval(wordptr[0]);
  241.         if (errflg)
  242.             nval = oldval;
  243.         }
  244.     return nval;
  245.  
  246. }
  247.  
  248.  
  249.