home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume5 / smallc / part2 / gen.c < prev    next >
Encoding:
C/C++ Source or Header  |  1986-11-30  |  1.5 KB  |  145 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.  
  10.  
  11. /*
  12.  *    return next available internal label number
  13.  *
  14.  */
  15. getlabel ()
  16. {
  17.     return (nxtlab++);
  18. }
  19.  
  20. /*
  21.  *    print specified number as label
  22.  */
  23. printlabel (label)
  24. int    label;
  25. {
  26.     olprfix ();
  27.     outdec (label);
  28. }
  29.  
  30. /*
  31.  *    glabel - generate label
  32.  */
  33. glabel (lab)
  34. char    *lab;
  35. {
  36.     prefix ();
  37.     outstr (lab);
  38.     col ();
  39.     nl ();
  40. }
  41.  
  42. /*
  43.  *    gnlabel - generate numeric label
  44.  */
  45. gnlabel (nlab)
  46. int    nlab;
  47. {
  48.     printlabel (nlab);
  49.     col ();
  50.     nl ();
  51. }
  52.  
  53. outbyte (c)
  54. char    c;
  55. {
  56.     if (c == 0)
  57.         return (0);
  58.     fputc (c, output);
  59.     return (c);
  60. }
  61.  
  62. outstr (ptr)
  63. char    ptr[];
  64. {
  65.     int    k;
  66.  
  67.     k = 0;
  68.     while (outbyte (ptr[k++]));
  69. }
  70.  
  71.  
  72. tab ()
  73. {
  74.     outbyte (9);
  75. }
  76.  
  77. ol (ptr)
  78. char    ptr[];
  79. {
  80.     ot (ptr);
  81.     nl ();
  82. }
  83.  
  84. ot (ptr)
  85. char    ptr[];
  86. {
  87.     tab ();
  88.     outstr (ptr);
  89. }
  90.  
  91. outdec (number)
  92. int    number;
  93. {
  94.     int    k, zs;
  95.     char    c;
  96.  
  97.     if (number == -32768) {
  98.         outstr ("-32768");
  99.         return;
  100.     }
  101.     zs = 0;
  102.     k = 10000;
  103.     if (number < 0) {
  104.         number = (-number);
  105.         outbyte ('-');
  106.     }
  107.     while (k >= 1) {
  108.         c = number / k + '0';
  109.         if ((c != '0' | (k == 1) | zs)) {
  110.             zs = 1;
  111.             outbyte (c);
  112.         }
  113.         number = number % k;
  114.         k = k / 10;
  115.     }
  116. }
  117.         
  118. store (lval)
  119. int    *lval;
  120. {
  121.     if (lval[1] == 0)
  122.         putmem (lval[0]);
  123.     else
  124.         putstk (lval[1]);
  125. }
  126.  
  127. rvalue (lval)
  128. int    *lval;
  129. {
  130.     if ((lval[0] != 0) & (lval[1] == 0))
  131.         getmem (lval[0]);
  132.     else
  133.         indirect (lval[1]);
  134. }
  135.  
  136. test (label, ft)
  137. int    label,
  138.     ft;
  139. {
  140.     needbrack ("(");
  141.     expression (YES);
  142.     needbrack (")");
  143.     testjump (label, ft);
  144. }
  145.