mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
309 lines
6.3 KiB
309 lines
6.3 KiB
/*++
|
|
|
|
Copyright (c) 1990 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
mac2hex.c
|
|
|
|
Abstract:
|
|
|
|
This program will read in MAC.BIN and produce MACBIN.H. MACBIN.H
|
|
will consist of a character array representation (MacBinImage[])
|
|
of MAC.BIN.
|
|
|
|
Author:
|
|
|
|
Keith Moore (KeithMo) 23-Jan-1991
|
|
|
|
Environment:
|
|
|
|
OS/2 1.x/2.x Protected Mode
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
#define INCL_BASE
|
|
#include <os2.h>
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
|
|
//
|
|
// Macros
|
|
//
|
|
#define CHECK_RETURN(code) \
|
|
{ \
|
|
if ((code) != NO_ERROR) { \
|
|
printf( \
|
|
"Error %d, File %s, Line %ld\n", \
|
|
(code), \
|
|
__FILE__, \
|
|
(long)__LINE__ \
|
|
); \
|
|
exit(1); \
|
|
} \
|
|
}
|
|
|
|
|
|
//
|
|
// Prototypes
|
|
//
|
|
int
|
|
main(
|
|
int nArgc,
|
|
char *pArgv[]
|
|
);
|
|
|
|
VOID
|
|
CreateHeaderFile(
|
|
PUCHAR pBuffer,
|
|
USHORT usLength
|
|
);
|
|
|
|
|
|
//
|
|
// main
|
|
//
|
|
int
|
|
main(
|
|
int nArgc,
|
|
char *pArgv[]
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Usual C entry point.
|
|
|
|
Arguments:
|
|
|
|
nArgc - Count of command line arguments.
|
|
pArgv - Array of pointers to the command line arguments.
|
|
|
|
Return Value:
|
|
|
|
0 if everything went OK.
|
|
1 if something horrible happened.
|
|
|
|
--*/
|
|
|
|
{
|
|
|
|
FILESTATUS FileStatus;
|
|
HFILE hFile;
|
|
PCHAR pFileName;
|
|
PVOID pBuffer;
|
|
SEL Selector;
|
|
USHORT usAction;
|
|
USHORT usFileSize;
|
|
USHORT usNumRead;
|
|
USHORT usResult;
|
|
|
|
//
|
|
// If no command line arguments are given, then
|
|
// use "MAC.BIN" for the input file. Otherwise,
|
|
// assume that the first (only?) argument is the
|
|
// name of the download file.
|
|
//
|
|
|
|
pFileName = (nArgc > 1) ? (PCHAR)pArgv[1] : (PCHAR)"MAC.BIN";
|
|
|
|
//
|
|
// Open MAC.BIN.
|
|
//
|
|
|
|
usResult = DosOpen(
|
|
pFileName,
|
|
&hFile,
|
|
&usAction,
|
|
0L,
|
|
FILE_NORMAL,
|
|
FILE_OPEN,
|
|
OPEN_ACCESS_READONLY
|
|
| OPEN_SHARE_DENYNONE,
|
|
0L
|
|
);
|
|
CHECK_RETURN(usResult);
|
|
|
|
//
|
|
// Query the file so we can retrive its length.
|
|
//
|
|
|
|
usResult = DosQFileInfo(
|
|
hFile,
|
|
FIL_STANDARD,
|
|
(PBYTE)&FileStatus,
|
|
sizeof(FILESTATUS)
|
|
);
|
|
CHECK_RETURN(usResult);
|
|
|
|
usFileSize = (USHORT)FileStatus.cbFile;
|
|
|
|
//
|
|
// Allocate a chunk of memory to use.
|
|
//
|
|
|
|
usResult = DosAllocSeg(
|
|
usFileSize,
|
|
&Selector,
|
|
SEG_NONSHARED
|
|
);
|
|
CHECK_RETURN(usResult);
|
|
|
|
//
|
|
// Build our pointer from the selector we just allocated.
|
|
//
|
|
|
|
pBuffer = MAKEP(Selector, 0);
|
|
|
|
//
|
|
// Read MAC.BIN into our buffer.
|
|
//
|
|
|
|
usResult = DosRead(
|
|
hFile,
|
|
pBuffer,
|
|
usFileSize,
|
|
&usNumRead
|
|
);
|
|
CHECK_RETURN(usResult);
|
|
|
|
//
|
|
// Close MAC.BIN.
|
|
//
|
|
|
|
usResult = DosClose(
|
|
hFile
|
|
);
|
|
CHECK_RETURN(usResult);
|
|
|
|
//
|
|
// Write the new file.
|
|
//
|
|
CreateHeaderFile(pBuffer, usFileSize);
|
|
|
|
//
|
|
// Free the allocated memory.
|
|
//
|
|
usResult = DosFreeSeg(
|
|
Selector
|
|
);
|
|
CHECK_RETURN(usResult);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
//
|
|
// CreateHeaderFile
|
|
//
|
|
VOID
|
|
CreateHeaderFile(
|
|
PUCHAR pBuffer,
|
|
USHORT usLength
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Create a C header file containing a character
|
|
array representation of the specified buffer.
|
|
|
|
Arguments:
|
|
|
|
pBuffer - Pointer to the buffer to convert.
|
|
|
|
usLength - The length (in bytes) of the buffer.
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
|
|
//
|
|
// TRUE if we're starting a new line.
|
|
//
|
|
BOOL fNewLine;
|
|
|
|
//
|
|
// Number of bytes on current line.
|
|
//
|
|
USHORT usNumBytes;
|
|
|
|
//
|
|
// Create the prologue
|
|
//
|
|
|
|
printf("/*++\n");
|
|
printf("\n");
|
|
printf("Copyright (c) 1990 Microsoft Corporation\n");
|
|
printf("\n");
|
|
printf("Module Name:\n");
|
|
printf("\n");
|
|
printf(" macbin.h\n");
|
|
printf("\n");
|
|
printf("Abstract:\n");
|
|
printf("\n");
|
|
printf(" This module is generated by MAC2HEX.EXE. MAC2HEX reads in the\n");
|
|
printf(" NE3200's MAC.BIN module and produces this C character array\n");
|
|
printf(" representation. This is an unfortunate artifact of having\n");
|
|
printf(" all device drivers linked into the kernel. Once we have real\n");
|
|
printf(" installable device drivers, this will be unnecessary (the\n");
|
|
printf(" NE3200 driver will just open MAC.BIN and read it). But for now,\n");
|
|
printf(" all device drivers get initialized *before* the filesystem.\n");
|
|
printf(" Ergo, device drivers cannot open files at initialization time.\n");
|
|
printf("\n");
|
|
printf("Author:\n");
|
|
printf("\n");
|
|
printf(" Keith Moore (KeithMo) 24-Jan-1991\n");
|
|
printf("\n");
|
|
printf("Environment:\n");
|
|
printf("\n");
|
|
printf(" Kernel Mode - Or whatever is the equivalent on OS/2 and DOS.\n");
|
|
printf("\n");
|
|
printf("Revision History:\n");
|
|
printf("\n");
|
|
printf("\n");
|
|
printf("--*/\n");
|
|
printf("\n");
|
|
printf("#define NE3200_MACBIN_LENGTH %u\n", usLength);
|
|
printf("\n");
|
|
printf("UCHAR NE3200MacBinImage[] = {");
|
|
|
|
fNewLine = TRUE;
|
|
|
|
while(usLength--) {
|
|
|
|
if (fNewLine) {
|
|
|
|
printf("\n");
|
|
printf(" ");
|
|
fNewLine = FALSE;
|
|
usNumBytes = 0;
|
|
|
|
}
|
|
|
|
printf("0x%02X", (UINT)(*pBuffer++));
|
|
|
|
if (usLength > 0)
|
|
printf(",");
|
|
|
|
if (++usNumBytes >= 13)
|
|
fNewLine = TRUE;
|
|
|
|
}
|
|
|
|
printf("\n");
|
|
printf(" };\n");
|
|
|
|
}
|