⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mkcode.c

📁 Open Watcom 的 C 编译器源代码
💻 C
字号:
/****************************************************************************
*
*                            Open Watcom Project
*
*    Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
*
*  ========================================================================
*
*    This file contains Original Code and/or Modifications of Original
*    Code as defined in and that are subject to the Sybase Open Watcom
*    Public License version 1.0 (the 'License'). You may not use this file
*    except in compliance with the License. BY USING THIS FILE YOU AGREE TO
*    ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
*    provided with the Original Code and Modifications, and is also
*    available at www.sybase.com/developer/opensource.
*
*    The Original Code and all software distributed under the License are
*    distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
*    EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
*    ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
*    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
*    NON-INFRINGEMENT. Please see the License for the specific language
*    governing rights and limitations under the License.
*
*  ========================================================================
*
* Description:  Convertor from binary format file to C source code, for 
*                assembly code bursts.
*
****************************************************************************/


/* This program is used to link against an assembly file containing
   code bursts for inline pragmas.  The information from the assembly
   is output to either codei86.gh (16-bit) or code386.gh (32-bit).
   This allows us to use an assembler to translate the code bursts into
   the appropriate byte sequences. This program convert binary file
   generated by assembler and linker to appropriate C source code.
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#ifndef O_BINARY
#define O_BINARY 0
#endif

struct bursts {
    unsigned short defs;
    unsigned short name;
    unsigned short burst;
};

static char *buff;

static char usage[] = "Usage: inp.file out.file\n";

#define Xptr(x) (char*)(buff + x)

int main(int argc, char *argv[])
{
    FILE        *fp;
    int         fi;
    int         i;
    int         len;
    unsigned char *p;
    struct bursts *cb;
    struct stat bufstat;


    if( argc > 2 ) {
        fi = open( argv[1], O_BINARY );
        fp = fopen( argv[2], "w" );
        stat( argv[1], &bufstat );
    } else {
        printf( usage );
    }
    buff = malloc( bufstat.st_size );
    read( fi, buff, bufstat.st_size );
    close( fi );
    cb = (struct bursts *) Xptr( *(short*)buff );
    for(;;) {
        p = Xptr(cb->defs);
        if( (char *)p == buff ) break;
        for(;;) {
            fprintf( fp, "%s\n", p );
            while( *p != '\0' )  ++p;
            ++p;
            if( *p == '\0' ) break;
        }
        p = Xptr(cb->burst);
        len = *p;
        fprintf( fp, "static byte_seq %s = { 0x%2.2X, {\n    ", 
            Xptr(cb->name), *p++ );
        i = 0;
        for(;;) {
            fprintf( fp, "0x%2.2X", *p++ );
            --len;
            if( len == 0 ) break;
            fprintf( fp, "," );
            i++;
            if( i == 10 ) {
                fprintf( fp, "\n    " );
                i = 0;
            }
        }
        fprintf( fp, "\n} };\n\n" );
        cb++;
    }
    fclose( fp );
    free( buff );
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -