1 /*---------------------------------------------------------------------------*
2 Project: output file generator for dvd archiver
3 File: out.c
4
5 Copyright (C) 2001-2006 Nintendo. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Log: out.c,v $
14 Revision 1.1 2006/04/20 01:41:22 hiratsu
15 Initial check-in.
16
17
18 1 7/02/01 11:34p Hashida
19 Initial revision.
20
21 $NoKeywords: $
22 *---------------------------------------------------------------------------*/
23
24 #include "darch.h"
25
26
makeOutFile(char * name)27 int makeOutFile(char* name)
28 {
29 int fido;
30 int fidi;
31 ARCHeader header;
32
33 if (debugMode)
34 {
35 fprintf(stderr, "output file size is %d\n",
36 map.userFilePosition + map.userFileLength);
37 }
38
39 if( (fido = open(name,
40 O_TRUNC | O_CREAT | O_BINARY | O_WRONLY, 0666)) == -1 )
41 {
42 fprintf(stderr, "%s: Cannot open %s\n", progName, name);
43 exit (1);
44 }
45
46 // Copy fst
47 if( (fidi = open(fstFile, O_BINARY | O_RDONLY)) == -1 )
48 {
49 fprintf(stderr, "%s: Cannot open %s\n", progName, fstFile);
50 exit (1);
51 }
52
53 CopyUtility(fidi, 0, fido, map.fstPosition, map.fstLength);
54
55 close(fidi);
56
57 // Copy user file
58 if( (fidi = open(userFile, O_BINARY | O_RDONLY)) == -1 )
59 {
60 fprintf(stderr, "%s: Cannot open %s\n", progName, userFile);
61 exit (1);
62 }
63
64 CopyUtility(fidi, 0, fido, map.userFilePosition, map.userFileLength);
65
66 close(fidi);
67
68
69 // Write header
70 header.magic = REV32(DARCH_MAGIC);
71 header.fstStart = REV32(map.fstPosition);
72 header.fstSize = REV32(map.fstLength);
73 header.fileStart = REV32(map.userFilePosition);
74 header.reserve[0] = 0;
75 header.reserve[1] = 0;
76 header.reserve[2] = 0;
77 header.reserve[3] = 0;
78
79 if ( -1 == lseek(fido, 0, SEEK_SET) )
80 {
81 fprintf(stderr, "%s: Error occurred when issuing seek to a file\n",
82 progName);
83 exit(1);
84 }
85
86 if (sizeof(ARCHeader) != write(fido, &header, sizeof(ARCHeader)))
87 {
88 fprintf(stderr, "%s: Cannot write %s\n", progName, name);
89 exit (1);
90 }
91
92 if (close(fido) == -1)
93 {
94 fprintf(stderr, "%s: Cannot close %s\n", progName, name);
95 exit (1);
96 }
97
98 return 0;
99 }
100
101