Logo Search packages:      
Sourcecode: macutils version File versions  Download package

util.c

#include <stdio.h>
#include "../fileio/fileglob.h"
#include "masks.h"
#include "util.h"

extern void exit();

#define MACTIMOFFS    1904

static int mlength[] = {0, 31, 61, 92, 122, 153, 184, 214, 245, 275, 306, 337};

unsigned long get4(bp)
char *bp;
{
    register int i;
    long value = 0;

    for(i = 0; i < 4; i++) {
      value <<= 8;
      value |= (*bp & BYTEMASK);
      bp++;
    }
    return value;
}

/* For if integers are stored wrong-endian. */
unsigned long get4i(bp)
char *bp;
{
    register int i;
    long value = 0;

    bp += 3;
    for(i = 0; i < 4; i++) {
        value <<= 8;
        value |= (*bp & BYTEMASK);
        bp--;
    }
    return value;
}

unsigned long get2(bp)
char *bp;
{
    register int i;
    int value = 0;

    for(i = 0; i < 2; i++) {
      value <<= 8;
      value |= (*bp & BYTEMASK);
      bp++;
    }
    return value;
}

/* For if integers are stored wrong-endian. */
unsigned long get2i(bp)
char *bp;
{
    register int i;
    long value = 0;

    bp += 1;
    for(i = 0; i < 2; i++) {
        value <<= 8;
        value |= (*bp & BYTEMASK);
        bp--;
    }
    return value;
}

unsigned char getb(fp)
FILE *fp;
{
    int c;

    bytes_read += 1;
    c = getc(fp);
    if(c == EOF) {
      (void)fprintf(stderr, "\nPremature EOF\n");
      exit(1);
    }
    return c & BYTEMASK;
}

void copy(d, s, n)
char *d, *s;
int n;
{
    while(--n >= 0) {
      *d++ = *s++;
    }
}

int do_query()
{
    char *tp, temp[10];

    (void)fprintf(stderr, "? ");
    (void) fflush(stdout);
    (void) read(2, temp, sizeof(temp));
    temp[sizeof(temp) - 1] = 0;
    tp = temp;
    while(*tp != 0) {
      if(*tp == 'y' || *tp == 'Y') {
          return 1;
      } else {
          tp++;
      }
    }
    return 0;
}

void put4(dest, value)
char *dest;
unsigned long value;
{
    *dest++ = (value >> 24) & BYTEMASK;
    *dest++ = (value >> 16) & BYTEMASK;
    *dest++ = (value >> 8) & BYTEMASK;
    *dest++ = value & BYTEMASK;
}

void put2(dest, value)
char *dest;
unsigned long value;
{
    *dest++ = (value >> 8) & BYTEMASK;
    *dest++ = value & BYTEMASK;
}

void do_indent(indent)
int indent;
{
    int i;

    for(i = 0; i < indent; i++) {
      (void)fputc(' ', stderr);
    }
}

real_time set_time(year, month, day, hours, minutes, seconds)
int year, month, day, hours, minutes, seconds;
{
    real_time toset;

    toset.year = year;
    toset.month = month;
    toset.day = day;
    toset.hours = hours;
    toset.minutes = minutes;
    toset.seconds = seconds;
    return toset;
}

unsigned long tomactime(time)
real_time time;
{
    long accum;
    int year;

    accum = time.month - 3;
    year = time.year;
    if(accum < 0) {
      accum += 12;
      year--;
    }
    accum = time.day + mlength[accum] + 59;
    accum += (year - MACTIMOFFS) * 365 + year / 4 - MACTIMOFFS / 4;
    accum = ((accum * 24 + time.hours) * 60 + time.minutes) * 60 + time.seconds;
    return (unsigned)accum;
}

real_time frommactime(accum)
unsigned long accum;
{
long tmp1, tmp2;
real_time time;

    time.seconds = tmp1 = accum % 60;
    accum /= 60;
    time.minutes = tmp1 = accum % 60;
    accum /= 60;
    time.hours = tmp1 = accum % 24;
    accum /= 24;
    tmp1 = (long)accum - 60;
    tmp2 = tmp1 % 1461;
    if(tmp2 < 0) {
      tmp2 += 1461;
    }
    tmp1 = (tmp1 - tmp2) / 1461;
    time.year = tmp1 * 4;
    tmp1 = tmp2 / 365;
    if(tmp1 > 3) {
      tmp1 = 3;
    }
    time.year += tmp1 + MACTIMOFFS;
    tmp2 -= tmp1 * 365;
    tmp1 = 12;
    while(mlength[--tmp1] > tmp2);
    time.day = tmp2 + 1 - mlength[tmp1];
    time.month = tmp1 + 3;
    if(tmp1 > 9) {
      time.month = tmp1 - 9;
      time.year++;
    }
    return time;
}


Generated by  Doxygen 1.6.0   Back to index