home *** CD-ROM | disk | FTP | other *** search
/ gdead.berkeley.edu / gdead.berkeley.edu.tar / gdead.berkeley.edu / pub / cad-tools / m36gen.tar / m36gen_dir / put.c < prev   
C/C++ Source or Header  |  1996-01-08  |  2KB  |  120 lines

  1. #include "conv.h"    /* contains the ebcdic/ascii tables */
  2. #include <sys/file.h>
  3. #define DEVICE "/dev/nrmt0"
  4. #define BUF_SIZE 512
  5.  
  6. static char put_buffer[BUF_SIZE], *put_ptr = put_buffer;
  7. static int put_count = BUF_SIZE;
  8. static int tape_drive = -1;
  9.  
  10. extern int debug;
  11.  
  12. #define CONV(c) ( debug ? (c) : atoe[(int) (c)] )
  13.  
  14. #define put_char(ch)\
  15.     (*put_ptr++ = CONV(ch), --put_count > 0 ? 0 : put_record())
  16.  
  17. put_record()
  18. {
  19.     if (put_count == BUF_SIZE) {
  20.     /* empty buffer */
  21.     return;
  22.     }
  23.  
  24.     while (--put_count >= 0) {
  25.     *put_ptr++ = CONV(' ');
  26.     }
  27.  
  28.     if (write(tape_drive, put_buffer, BUF_SIZE) != BUF_SIZE) {
  29.     perror("M36gen, Can't write on the tape drive");
  30.     exit(-1);
  31.     }
  32.  
  33.     put_count = BUF_SIZE ; put_ptr = put_buffer;
  34. }
  35.  
  36. put_int(num, num_places)
  37. int num, num_places;
  38. {
  39.     register int digit, place, val;
  40.     register char *ptr;
  41.     char buffer[100];
  42.     int negative = 0;
  43.  
  44.     val = num;
  45.  
  46.     if (val == 0) {
  47.     put_char('0');
  48.     return;
  49.     } else if (val < 0) {
  50.     val = -val;
  51.     negative = 1;
  52.     }
  53.  
  54.     ptr = buffer;
  55.     place = num_places;
  56.  
  57.     digit = val % 10;
  58.  
  59.     while (digit == 0 && place > 0) {
  60.     val /= 10;
  61.     digit = val%10;
  62.     place--;
  63.     }
  64.  
  65.     for(; place > 0; place--) {
  66.     *ptr++ = digit + '0';
  67.     val /= 10;
  68.     digit = val%10;
  69.     }
  70.  
  71.     *ptr++ = '.';
  72.  
  73.     while (val > 0) {
  74.     *ptr++ = digit + '0';
  75.     val /= 10;
  76.     digit = val%10;
  77.     }
  78.  
  79.     if (negative) {
  80.     *ptr++ = '-';
  81.     }
  82.  
  83.     while (--ptr >= buffer) {
  84.     put_char(*ptr);
  85.     }
  86. }
  87.  
  88. put_string(str)
  89. char *str;
  90. {
  91.     while (*str != '\0') {
  92.     put_char(*str++);
  93.     }
  94. }
  95.  
  96. start_write()
  97. {
  98.     if (debug) {
  99.     tape_drive = 1;
  100.     } else {
  101.     tape_drive = open(DEVICE, O_WRONLY, 0666);
  102.     }
  103.  
  104.     if (tape_drive < 0) {
  105.     perror(DEVICE);
  106.     exit(-1);
  107.     }
  108.  
  109.     return;
  110. }
  111.  
  112. stop_write()
  113. {
  114.     put_record();
  115.  
  116.     if (!debug && tape_drive != -1) {
  117.     close(tape_drive);
  118.     }
  119. }
  120.