home *** CD-ROM | disk | FTP | other *** search
/ messroms.de / 2007-01-13_www.messroms.de.zip / VZ200 / TOOLS / ZCCSRC.ZIP / scc / gen.c < prev    next >
C/C++ Source or Header  |  2000-03-01  |  2KB  |  138 lines

  1. /*    File gen.c: 2.1 (83/03/20,16:02:06) */
  2. /*% cc -O -c %
  3.  *
  4.  */
  5.  
  6. #include <stdio.h>
  7. #include "defs.h"
  8. #include "data.h"
  9. #include "proto.h"
  10.  
  11. /*
  12.  *    return next available internal label number
  13.  *
  14.  */
  15. int getlabel(void)
  16. {
  17.     return (nxtlab++);
  18. }
  19.  
  20. /*
  21.  *    print specified number as label
  22.  */
  23. void printlabel(int label)
  24. {
  25.     olprfix();
  26.     outdec(label);
  27. }
  28.  
  29. /*
  30.  *    glabel - generate label
  31.  */
  32. void glabel(char *lab)
  33. {
  34.     prefix();
  35.     outstr(lab);
  36.     col();
  37.     nl();
  38. }
  39.  
  40. /*
  41.  *    gnlabel - generate numeric label
  42.  */
  43. void gnlabel(int nlab)
  44. {
  45.     printlabel(nlab);
  46.     col();
  47.     nl();
  48. }
  49.  
  50. char outbyte(char c)
  51. {
  52.     if (c == 0)
  53.         return (0);
  54.     fputc(c, output);
  55.     return (c);
  56. }
  57.  
  58. void outstr(char ptr[])
  59. {
  60.     int k;
  61.  
  62.     k = 0;
  63.     while (outbyte(ptr[k++]))
  64.         ;
  65. }
  66.  
  67.  
  68. void tab(void)
  69. {
  70.     outbyte(9);
  71. }
  72.  
  73. void ol(char ptr[])
  74. {
  75.     ot(ptr);
  76.     nl();
  77. }
  78.  
  79. void ot(char ptr[])
  80. {
  81.     tab();
  82.     outstr(ptr);
  83. }
  84.  
  85. void outdec(int number)
  86. {
  87.     int k, zs;
  88.     char c;
  89.  
  90.     if (number == -32768)
  91.     {
  92.         outstr("-32768");
  93.         return;
  94.     }
  95.     zs = 0;
  96.     k = 10000;
  97.     if (number < 0)
  98.     {
  99.         number = (-number);
  100.         outbyte('-');
  101.     }
  102.     while (k >= 1)
  103.     {
  104.         c = number / k + '0';
  105.         if (c != '0' || k == 1 || zs)
  106.         {
  107.             zs = 1;
  108.             outbyte(c);
  109.         }
  110.         number = number % k;
  111.         k = k / 10;
  112.     }
  113. }
  114.  
  115. void store(int *lval)
  116. {
  117.     if (lval[1] == 0)
  118.         putmem((char*)lval[0]);
  119.     else
  120.         putstk(lval[1]);
  121. }
  122.  
  123. void rvalue(int *lval)
  124. {
  125.     if ((lval[0] != 0) & (lval[1] == 0))
  126.         getmem((char*)lval[0]);
  127.     else
  128.         indirect(lval[1]);
  129. }
  130.  
  131. void test(int label, int ft)
  132. {
  133.     needbrack("(");
  134.     expression(YES);
  135.     needbrack(")");
  136.     testjump(label, ft);
  137. }
  138.