🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: mod.mac.sources
1 messages
1 total messages Started by Jim Budler Thu, 28 Aug 1986 04:44
macbin.c
#10
Author: Jim Budler
Date: Thu, 28 Aug 1986 04:44
94 lines
2712 bytes
This is the source to macbin.c, a unix utility for converting xbin
output to MacBinary.  I wrote it some time ago, and posted it to
net.sources.mac.  There have been many requests for it in
net.micro.mac.

/*
Usage:

% macbin file	# where file is basename of the file.info, file.rsrc, file.data
		# trio from xbin
		# result is file.bin
*/

#include <stdio.h>
main(argc,argv)
int argc;
char **argv;
{
/*	structure of the info file - from MacBin.C
	char zero1;
	char nlen;
	char name[63];
	char type[4];		65	0101
	char creator[4];	69
	char flags;		73
	char zero2;		74	0112
	char location[6];	80
	char protected;		81	0121
	char zero3;		82	0122
	char dflen[4];
	char rflen[4];
	char cdate[4];
	char mdate[4];
*/
	FILE *fd, *ofd;
	char iname[128];
	char dname[128];
	char rname[128];
	char oname[128];
	char buf[128];
	if (argc != 2) {
		fprintf(stderr,"\nUsage: %s filename\n",argv[0]);
		exit(1);
	}
	bzero(buf,128);
	strcpy(oname,argv[1]);
	strcat(oname,".bin");
	if ((ofd = fopen( oname, "w")) == NULL){
		fprintf(stderr, "\n Cannot open %s\n",oname);
		exit(1);
	}
	strcpy(iname,argv[1]);
	strcat(iname,".info");
	if ((fd = fopen(iname,"r")) == NULL){
		fprintf(stderr,"No %s file!\n", iname);
		fclose(ofd);
		unlink(oname);
		exit(1);
	}
	if (fread(buf, sizeof(*buf), 128, fd) > 0){
		if (buf[74] & 0x40) buf[81] = '\1'; /* protected */
		buf[74] = '\0'; /* clear zero2 */
		fwrite(buf, sizeof(*buf),128, ofd);
		bzero(buf,128);
	}
	fclose(fd);
	strcpy(dname,argv[1]);
	strcat(dname,".data");
	if ((fd = fopen(dname,"r")) == NULL){
		fprintf(stderr,"No %s file!\n", dname);
		fclose(ofd);
		unlink(oname);
		exit(1);
	}
	while (fread(buf, sizeof(*buf),128, fd) > 0){
		fwrite(buf, sizeof(*buf),128, ofd);
		bzero(buf,128);
	}
	fclose(fd);
	strcpy(rname,argv[1]);
	strcat(rname,".rsrc");
	if ((fd = fopen(rname,"r")) == NULL){
		fprintf(stderr,"No %s file!\n", rname);
		fclose(ofd);
		unlink(oname);
		exit(1);
	}
	while (fread(buf, sizeof(*buf),128, fd) > 0){
		fwrite(buf, sizeof(*buf),128, ofd);
		bzero(buf,128);
	}
	fclose(fd);
	fclose(ofd);
}
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads