semi合集-English.pdf - 第5932页
SEMI P39-0304 E2 © SEMI 2004 35 { case 1 : path = "<stdin>"; fptr = stdin; /* read from standard input */ break; case 2 : /* open input file (use the ’b’ flag to read as binary rather than text) */ path =…

SEMI P39-0304
E2
© SEMI 2004 34
A1-2 Sample CHECKSUM32 C-Language Source Code
/*
(c) Copyright 2003 SEMI
no warranty, express or implied
not liable for damages resulting from or in connection with use of this software
*/
#include <stdio.h>
#include <errno.h>
/********************/
/* basic data types */
/********************/
typedef unsigned char byte;
typedef unsigned int uint32;
#ifdef _ILP32
typedef unsigned long long uint64;
#else
typedef unsigned long uint64;
#endif
/*************/
/* constants */
/*************/
#define BUFFER_SZ 8 * 1024
#define BITS_IN_BYTE 8
/**********/
/* macros */
/**********/
#define CHG_ENDIAN(a) {byte *p, t; p=(byte *)&(a); t=p[0]; p[0]=p[3]; p[3]=t; t=p[1]; p[1]=p[2];
p[2]=t;}
void
checksum_init(uint32 *chksum)
{
*chksum = 0;
}
void
checksum_add(uint32 *chksum,
byte *buf,
size_t len
)
{
uint64 val; /* could be a uint32, but overflow handling is undefined */
size_t i;
val = (uint64) *chksum;
for (i = 0; i < len; i++)
{
val += buf[i]; /* sum */
val &= 0xffffffff; /* limit to 32 bits */
}
*chksum = (uint32) val;
}
main(int argc, char **argv)
{
char *path;
FILE *fptr;
size_t len;
byte buf[BUFFER_SZ];
uint32 chksum;
uint32 chksum_to_file;
switch (argc)

SEMI P39-0304
E2
© SEMI 2004 35
{
case 1 :
path = "<stdin>";
fptr = stdin; /* read from standard input */
break;
case 2 :
/* open input file (use the ’b’ flag to read as binary rather than text) */
path = argv[1];
if ( (fptr = fopen(path, "rb") ) == NULL)
{
fprintf(stderr, "\nerror opening %s (%s)\n", path, strerror(errno) );
exit(1);
}
break;
default :
fprintf(stderr, "\nusage: %s pathname\n", argv[0]);
fprintf(stderr, " -or-");
fprintf(stderr, "\n %s < pathname\n", argv[0]);
exit(1);
}
/* initialize */
checksum_init(&chksum);
/* calculate checksum for all data in file */
while (len = (fread(buf, 1, BUFFER_SZ, fptr) ) )
checksum_add(&chksum, buf, len);
if (!feof(fptr) )
{
fprintf(stderr, "\nerror reading %s (%s)\n", path, strerror(errno) );
if (fptr != stdin)
fclose(fptr);
exit(1);
}
if (fptr != stdin)
fclose(fptr);
chksum_to_file = chksum;
/* ensure CHECKSUM32 is written to OASIS file in LITTLE_ENDIAN byte order */
#ifdef BIG_ENDIAN_MACHINE
CHG_ENDIAN(chksum_to_file);
#endif
/* this is the checksum value that should be the last 4 bytes in the file */
printf("chksum_to_file = 0x%08x\n", chksum_to_file);
exit(0);
}

SEMI P39-0304
E2
© SEMI 2004 36
APPENDIX 2
OASIS Standard Properties
NOTICE: The material in this appendix is an official part of SEMI P39 and was approved by full letter ballot
procedures on July 12, 2003.
A2-1 File-Level Standard Properties
A2-1.1 Any file-level standard properties must appear immediately after the START record in an OASIS file. Use
of file-level standard properties is optional—OASIS processors may omit/ignore any or all of them.
A2-1.2 S_MAX_SIGNED_INTEGER_WIDTH
A2-1.2.1 This property declares the maximum number of bytes required to represent any signed-integer in the file,
after all continuation bits have been removed and the integer has been expressed in twos-complement form. Its value
list consists of a single unsigned-integer.
A2-1.3 S_MAX_UNSIGNED_INTEGER_WIDTH
A2-1.3.1 This property declares the maximum number of bytes required to represent any unsigned-integer in the
file, after all continuation bits have been removed. Its value list consists of a single unsigned-integer.
A2-1.4 S_MAX_STRING_LENGTH
A2-1.4.1 This property declares the maximum number of bytes permitted in any string within the file. Its value list
consists of a single unsigned-integer.
A2-1.5 S_POLYGON_MAX_VERTICES
A2-1.5.1 This property declares the maximum number of vertices permitted in any polygon within the file,
including any implicit vertices, but counting the initial vertex only once. Its value list consists of a single unsigned-
integer.
A2-1.6 S_PATH_MAX_VERTICES
A2-1.6.1 This property declares the maximum number of vertices permitted in any path within the file. Its value list
consists of a single unsigned-integer.
A2-1.7 S_TOP_CELL
A2-1.7.1 This property is used to declare the name of the “top cell” of a cell hierarchy. Its value list consists of a
single n-string. It may be repeated if more than one distinct cell hierarchy exists within the OASIS file in which it
appears.
A2-1.8 S_BOUNDING_BOXES_AVAILABLE
A2-1.8.1 This property indicates whether or not S_BOUNDING_BOX properties appear in CELLNAME records.
Its value list consists of a single unsigned-integer. A value of 0 means that S_BOUNDING_BOX properties are not
provided. A value of 1 means that at least some S_BOUNDING_BOX properties are provided. A value of 2 means
that an S_BOUNDING_BOX property is provided for every CELLNAME record.
A2-2 Cell-Level Standard Properties
A2-2.1 Any cell-level standard properties must appear immediately after the corresponding CELLNAME record in
an OASIS file. Use of cell-level standard properties is optional—OASIS processors may omit/ignore any or all of
them.
A2-2.2 S_BOUNDING_BOX
A2-2.2.1 This property may occur once after each CELLNAME record, and declares the bounding box of that cell.
Its value list consists of the following 5 fields: <flags> <lower-left-x> <lower-left-y> <width> <height>. The lower-
left-x and lower-left-y fields are signed-integers representing the lower-left corner of the cell’s bounding box. The
width and height fields are unsigned-integers representing the width and height of the cell’s bounding box. The