Mattis Lind (matli2) 5 éve
szülő
commit
97edf72593

+ 21 - 0
dnix-headers/dir.h

@@ -0,0 +1,21 @@
+/*	Copyright (c) 1984 AT&T	*/
+/*	  All Rights Reserved  	*/
+
+/*	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T	*/
+/*	The copyright notice above does not evidence any   	*/
+/*	actual or intended publication of such source code.	*/
+
+#ifndef _rhSYS_FS_DNIX_DIR
+#define _rhSYS_FS_DNIX_DIR
+
+#ident	"@(#)kern-port:sys/fs/dnix/dir.h	10.1"
+#ifndef	DIRSIZ
+#define	DIRSIZ	14
+#endif
+struct	direct
+{
+	unsigned short	d_ino;
+	char	d_name[DIRSIZ];
+};
+#endif /* _rhSYS_FS_DNIX_DIR */
+

+ 46 - 0
dnix-headers/diskpar.h

@@ -0,0 +1,46 @@
+/*
+ *	Copyright (C) Dataindustrier DIAB AB, Sweden, 1986
+ */
+/*
+ *	Structures used by filehandler
+ *	SCCSID(@(#) diskpar.h	5.2.2.1)
+ */
+#ifndef _rhSYS_FS_DNIX_DISKPAR
+#define _rhSYS_FS_DNIX_DISKPAR
+
+/*
+ * Disk definition equs
+ */
+/*
+ * Fixed inode numbers
+ */
+#define INOBDSP	((ino_t)1)	/* i number of badspot file */
+#define INOROOT	((ino_t)2)	/* i number of all roots */
+#define INOLIST	((ino_t)3)	/* i number of inode list */
+#define INOBITM	((ino_t)4)	/* i number of bitmap file */
+#define INOVDSF	((ino_t)5)	/* i number of volume description file */
+
+#define INO_LAST INOVDSF	/* Last of the fixed inode numbers */
+
+/*
+ *	First part of a file system volume
+ */
+#define BOOTREC	((daddr_t)0)	/* First 512 bytes set aside for booting */
+#define SYSFPTR	((daddr_t)512)	/* 512 bytes for pointer record */
+#define DRVPAR	((daddr_t)1024)	/* 512 bytes set aside for disk driver use */
+#define VUTIL	((daddr_t)1536)	/* 512 bytes reserved */
+#define LOCFREE	((daddr_t)2048)	/* possible start of file system */
+/*
+ *	structure of the pointer record at SYSFPTR
+ */
+struct sysfptr {
+	daddr_t	vdsp;		/* Pointer to volume descriptor block */
+	daddr_t	vdspn;		/* 1:s complement of previous item */
+	daddr_t	cleanfl;	/* Volume clean flag */
+	time_t	timestamp;	/* Timestamp */
+	daddr_t	x[124];		/* Reserved */
+};
+
+#define CLEANFL	((daddr_t)0x76543210)	/* Volume clean magic number */
+#endif /* _rhSYS_FS_DNIX_DISKPAR */
+

+ 23 - 0
dnix-headers/inode.h

@@ -0,0 +1,23 @@
+/*
+ * Inode structure as it appears on disk.
+ * The 40 address bytes:
+ *	39 used; 13 addresses
+ *	of 3 bytes each.
+ */
+#ifndef _rhSYS_FS_DNIX_INODE
+#define _rhSYS_FS_DNIX_INODE
+
+struct dinode
+{
+	unsigned short	di_mode;	/* mode and type of file */
+	short	di_nlink;	/* number of links to file */
+	short	di_uid;		/* owner's user id */
+	short	di_gid;		/* owner's group id */
+	daddr_t	di_size;	/* number of bytes infile */
+	char	di_addr[40];	/* disk block addresses */
+	time_t	di_atime;	/* time last accessed */
+	time_t	di_mtime;	/* time last modified */
+	time_t	di_ctime;	/* time inode last modified */
+};
+#endif /* _rhSYS_FS_DNIX_INODE */
+

+ 50 - 0
dnix-headers/sysfile.h

@@ -0,0 +1,50 @@
+/*
+ *	Copyright (C) Dataindustrier DIAB AB, Sweden, 1986
+ */
+#ifndef _rhSYS_FS_DNIX_SYSFILE
+#define _rhSYS_FS_DNIX_SYSFILE
+
+/*
+ *	Structures used by filehandler
+ *	SCCSID(@(#) sysfile.h	5.2.2.1)
+ */
+/*
+ *	Structure of the system-file
+ *
+ *	This is a read-only structure for some vital volume parameters
+ *	All numerical values are 32-bit	stored MSByte ... LSByte.
+ *	Last byte is an overall checksum computed as
+ *	the sum of all bytes modulo 256 and negated(so it will sum to 0).
+ *
+ *	Soft checksum stuff:
+ *	If the "s_ckflg" flag is set, then soft checksum is enabled on this
+ *	volume. This checksum is computed by XOR'ing each data block
+ *	(s_bksiz bytes each) into a n-byte integer. The value of n is given by
+ *	the value of "s_chkflg". n is preferrably four (4) on a 32-bit CPU.
+ *	The checksum's are stored at s_vlsiz and beyond, one n-byte value
+ *	for each logical block. There is a utility program to turn this
+ *	feature on or off.
+ */
+struct sysfile {
+	char	s_fhnd[16];	/* Filehandler spec */
+	daddr_t	s_bmadr;	/* Bitmap pointer */
+	daddr_t	s_inadr;	/* Inode list pointer */
+	daddr_t	s_rtadr;	/* Root file pointer */
+	daddr_t	s_swadr;	/* Swap area */
+	daddr_t	s_vlsiz;	/* Volume size */
+	daddr_t	s_bmsiz;	/* Bitmap size */
+	daddr_t	s_swsiz;	/* Swap area size */
+	daddr_t	s_bksiz;	/* Block size */
+	daddr_t	s_disiz;	/* Size of a directory entry */
+	daddr_t	s_insiz;	/* Default size of inode list */
+	time_t	s_time;		/* Time initiated */
+	char	s_fname[8];	/* Filsys name */
+	char	s_fpack[8];	/* Filsys pack name */
+	daddr_t	s_[44];		/* Reserved */
+	char	s_c[2];		/* Reserved */
+	char	s_ckflg;	/* Checksum on this volume */
+	char	s_chksum;	/* Check sum of all bytes */
+};
+#define filsys	sysfile		/* To make diab and ATT compatible */
+#endif /* _rhSYS_FS_DNIX_SYSFILE */
+

+ 34 - 0
dnix-traverse/dnix-traverse.c

@@ -0,0 +1,34 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+typedef unsigned long daddr_t;
+
+#include "diskpar.h"
+#include "inode.h"
+#include "sysfile.h"
+#include "dir.h"
+
+
+
+
+
+int main (int argc, char ** argv) {
+  FILE * image_file;
+  int opt;
+  while ((opt = getopt(argc, argv, "d:")) != -1) {
+    switch (opt) {
+    case 'd':
+      image_file = fopen (optarg, "r");
+      if (image_file == NULL) {
+	perror ("Failure opening file.");
+	exit(EXIT_FAILURE);
+      }
+      break;
+    default: /* '?' */
+      fprintf(stderr, "Usage: %s [-d disk-image-file]\n", argv[0]);
+      exit(EXIT_FAILURE);
+    }
+  }
+
+}

BIN
images/disk014.img