home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / APPS / macutils.lzh / MACUTILS / UTIL / util.c < prev    next >
C/C++ Source or Header  |  1996-01-31  |  4KB  |  214 lines

  1. #include <stdio.h>
  2. #include "../fileio/fileglob.h"
  3. #include "masks.h"
  4. #include "util.h"
  5.  
  6. #ifdef OSK
  7. #define fputc(c,path)  fprintf(path,"%c",c)
  8. #endif
  9.  
  10. extern void exit();
  11.  
  12. #define MACTIMOFFS    1904
  13.  
  14. static int mlength[] = {0, 31, 61, 92, 122, 153, 184, 214, 245, 275, 306, 337};
  15.  
  16. unsigned long get4(bp)
  17. char *bp;
  18. {
  19.     register int i;
  20.     long value = 0;
  21.  
  22.     for(i = 0; i < 4; i++) {
  23.     value <<= 8;
  24.     value |= (*bp & BYTEMASK);
  25.     bp++;
  26.     }
  27.     return value;
  28. }
  29.  
  30. /* For if integers are stored wrong-endian. */
  31. unsigned long get4i(bp)
  32. char *bp;
  33. {
  34.     register int i;
  35.     long value = 0;
  36.  
  37.     bp += 3;
  38.     for(i = 0; i < 4; i++) {
  39.         value <<= 8;
  40.         value |= (*bp & BYTEMASK);
  41.         bp--;
  42.     }
  43.     return value;
  44. }
  45.  
  46. unsigned long get2(bp)
  47. char *bp;
  48. {
  49.     register int i;
  50.     int value = 0;
  51.  
  52.     for(i = 0; i < 2; i++) {
  53.     value <<= 8;
  54.     value |= (*bp & BYTEMASK);
  55.     bp++;
  56.     }
  57.     return value;
  58. }
  59.  
  60. /* For if integers are stored wrong-endian. */
  61. unsigned long get2i(bp)
  62. char *bp;
  63. {
  64.     register int i;
  65.     long value = 0;
  66.  
  67.     bp += 1;
  68.     for(i = 0; i < 2; i++) {
  69.         value <<= 8;
  70.         value |= (*bp & BYTEMASK);
  71.         bp--;
  72.     }
  73.     return value;
  74. }
  75.  
  76. unsigned char getb(fp)
  77. FILE *fp;
  78. {
  79.     int c;
  80.  
  81.     bytes_read += 1;
  82.     c = getc(fp);
  83.     if(c == EOF) {
  84.     (void)fprintf(stderr, "\nPremature EOF\n");
  85.     exit(1);
  86.     }
  87.     return c & BYTEMASK;
  88. }
  89.  
  90. void copy(d, s, n)
  91. char *d, *s;
  92. int n;
  93. {
  94.     while(--n >= 0) {
  95.     *d++ = *s++;
  96.     }
  97. }
  98.  
  99. int do_query()
  100. {
  101.     char *tp, temp[10];
  102.  
  103.     (void)fprintf(stderr, "? ");
  104.     (void) fflush(stdout);
  105.     (void) read(2, temp, sizeof(temp));
  106.     temp[sizeof(temp) - 1] = 0;
  107.     tp = temp;
  108.     while(*tp != 0) {
  109.     if(*tp == 'y' || *tp == 'Y') {
  110.         return 1;
  111.     } else {
  112.         tp++;
  113.     }
  114.     }
  115.     return 0;
  116. }
  117.  
  118. void put4(dest, value)
  119. char *dest;
  120. unsigned long value;
  121. {
  122.     *dest++ = (value >> 24) & BYTEMASK;
  123.     *dest++ = (value >> 16) & BYTEMASK;
  124.     *dest++ = (value >> 8) & BYTEMASK;
  125.     *dest++ = value & BYTEMASK;
  126. }
  127.  
  128. void put2(dest, value)
  129. char *dest;
  130. unsigned long value;
  131. {
  132.     *dest++ = (value >> 8) & BYTEMASK;
  133.     *dest++ = value & BYTEMASK;
  134. }
  135.  
  136. void do_indent(indent)
  137. int indent;
  138. {
  139.     int i;
  140.  
  141.     for(i = 0; i < indent; i++) {
  142.     (void)fputc(' ', stderr);
  143.     }
  144. }
  145.  
  146. real_time set_time(year, month, day, hours, minutes, seconds)
  147. int year, month, day, hours, minutes, seconds;
  148. {
  149.     real_time toset;
  150.  
  151.     toset.year = year;
  152.     toset.month = month;
  153.     toset.day = day;
  154.     toset.hours = hours;
  155.     toset.minutes = minutes;
  156.     toset.seconds = seconds;
  157.     return toset;
  158. }
  159.  
  160. unsigned long tomactime(time)
  161. real_time time;
  162. {
  163.     long accum;
  164.     int year;
  165.  
  166.     accum = time.month - 3;
  167.     year = time.year;
  168.     if(accum < 0) {
  169.     accum += 12;
  170.     year--;
  171.     }
  172.     accum = time.day + mlength[accum] + 59;
  173.     accum += (year - MACTIMOFFS) * 365 + year / 4 - MACTIMOFFS / 4;
  174.     accum = ((accum * 24 + time.hours) * 60 + time.minutes) * 60 + time.seconds;
  175.     return (unsigned)accum;
  176. }
  177.  
  178. real_time frommactime(accum)
  179. unsigned long accum;
  180. {
  181. long tmp1, tmp2;
  182. real_time time;
  183.  
  184.     time.seconds = tmp1 = accum % 60;
  185.     accum /= 60;
  186.     time.minutes = tmp1 = accum % 60;
  187.     accum /= 60;
  188.     time.hours = tmp1 = accum % 24;
  189.     accum /= 24;
  190.     tmp1 = (long)accum - 60;
  191.     tmp2 = tmp1 % 1461;
  192.     if(tmp2 < 0) {
  193.     tmp2 += 1461;
  194.     }
  195.     tmp1 = (tmp1 - tmp2) / 1461;
  196.     time.year = tmp1 * 4;
  197.     tmp1 = tmp2 / 365;
  198.     if(tmp1 > 3) {
  199.     tmp1 = 3;
  200.     }
  201.     time.year += tmp1 + MACTIMOFFS;
  202.     tmp2 -= tmp1 * 365;
  203.     tmp1 = 12;
  204.     while(mlength[--tmp1] > tmp2);
  205.     time.day = tmp2 + 1 - mlength[tmp1];
  206.     time.month = tmp1 + 3;
  207.     if(tmp1 > 9) {
  208.     time.month = tmp1 - 9;
  209.     time.year++;
  210.     }
  211.     return time;
  212. }
  213.  
  214.