File: bdtrans.c

package info (click to toggle)
birthday 1.6.2-9
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 696 kB
  • sloc: ansic: 1,443; makefile: 55; sh: 44; perl: 32
file content (80 lines) | stat: -rw-r--r-- 1,655 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/* BirthDay - warning of birthdays pending */
/* stripped down version of DOS original to allow porting of datafiles */

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>

/* 16-bit int */
#define INT int
/* um ... padding of some sort? Replaces sizeof(eventdat) */
#define SZOFEVT 35

struct date {INT da_year; char da_day; char da_mon;};

typedef struct { char name[30]; struct date date; unsigned warn : 1;
   unsigned type : 2; unsigned aniv : 1; } eventdat;

struct date curdat;
FILE *file;

void recin(int recno, eventdat *event);
void listevent(eventdat event);
int lastrec(void);

main(int argc, char *argv[])
{
   eventdat event;
   int i,lr;
   char *fname = "/dos/utils/birthday.dat";
   
   if (argc>1) fname=argv[1];

   if ((file = fopen(fname, "r+b")) == NULL) {
      printf("Cannot open file.\n");
      exit(1);
   }

   lr = lastrec();
   
   for(i=0; i < lr; i++) {
      recin(i, &event);
      listevent(event);
   }

   fclose(file);

   return 0;
}

void recin(int recno, eventdat *event)
{
   int cnt;
   char *p;

   p = (char *) event;
   fseek(file, recno * SZOFEVT + sizeof(INT), SEEK_SET);
   for (cnt = 0; cnt < SZOFEVT; cnt++)
      *(p + cnt) = (char) fgetc(file);
}

void listevent(eventdat event)
{
   if (event.date.da_year != -1)
      printf("%s=%d/%d/%d\n", event.name, event.date.da_day, event.date.da_mon,
         event.date.da_year);
   else
      printf("%s=%d/%d\n", event.name, event.date.da_day, event.date.da_mon);
}

int lastrec()
{
   INT lr;
   int i;

   fseek(file, 0, SEEK_SET);
   for (i=0; i < sizeof(INT); i++) ((char *) &lr)[i] = fgetc(file);
   if (lr < 0)
      lr = 0;
   return(lr);
}