home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
465.lha
/
Utils
/
cookie
/
pointers.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-01-05
|
2KB
|
87 lines
/********************************************************************
pointers - generate pointers file for cookie prog.
input : s:cookie.dat - cookie file
output : s:cookie.ptr - pointers file
© S.E.Mitchell 5/6/90
*********************************************************************/
#include <stdio.h>
#include <string.h>
#include <exec/types.h>
#include <exec/memory.h>
#include <libraries/dos.h>
#include <libraries/dosextens.h>
#include <proto/dos.h>
#include <proto/exec.h>
#define BUF_SIZE 256 /* size of read buffer */
#define SEPERATOR 0x0c /* char that seperates fortunes */
void _main()
{
int c=1,i,t,count,len,*p,*base;
BPTR in,out;
char buffer[BUF_SIZE];
if((in=Open("s:cookie.dat",MODE_OLDFILE))==NULL) {
Write(Output(),"Cannot open in file\n",20);
Exit(1);
}
if((out=Open("s:cookie.ptr",MODE_NEWFILE))==NULL) {
Write(Output(),"Cannot open out file\n",21);
Close(in);
Exit(1);
}
/* find number of fortunes */
while((count=Read(in,buffer,BUF_SIZE))>0) {
for(i=0;i<count;i++)
if(buffer[i]==SEPERATOR)
c++;
};
/* first longword contains number cookies ... */
Write(out,(UBYTE *)&c,4);
/* and back to the beginning */
Seek(in,0,OFFSET_BEGINNING);
/* allocate sufficient memory to hold pointers to all cookies */
len=c<<2;
base=(int *)AllocMem(len,MEMF_PUBLIC);
if(base==NULL) {
Write(Output(),"Out of memory\n",14);
Close(in);
Close(out);
Exit(1);
};
p=base;
*p++=0; /* first cookie at 0 ... no ^L here ... */
/* run through cookies again, this time noting down pointers */
i=1;
while((count=Read(in,buffer,BUF_SIZE))>0) {
for(t=0;t<count;t++,i++)
if(buffer[t]==SEPERATOR)
*p++=i;
};
/* blam it out to file */
Write(out,(UBYTE *)base,len);
/* close up and exit */
Close(in);
Close(out);
FreeMem(base,len);
Exit(0);
}