Extended the code from the previous commit to handle automatically
pointing GDS_FILE to a compressed filename when using "gds readonly true" on a compressed file. The start and end pointers still point to data bounds in the uncompressed file.
This commit is contained in:
parent
85d8ad6622
commit
da49a50d8e
|
|
@ -294,8 +294,11 @@ calmaExact()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool
|
bool
|
||||||
calmaParseStructure(filename)
|
calmaParseStructure(filename, origname)
|
||||||
char *filename; /* Name of the GDS file read */
|
char *filename; /* Name of the GDS file read */
|
||||||
|
char *origname; /* Original name of the GDS file
|
||||||
|
* (used with compressed files)
|
||||||
|
*/
|
||||||
{
|
{
|
||||||
static int structs[] = { CALMA_STRCLASS, CALMA_STRTYPE, -1 };
|
static int structs[] = { CALMA_STRCLASS, CALMA_STRTYPE, -1 };
|
||||||
int nbytes, rtype, nsrefs, osrefs, npaths;
|
int nbytes, rtype, nsrefs, osrefs, npaths;
|
||||||
|
|
@ -446,7 +449,7 @@ calmaParseStructure(filename)
|
||||||
|
|
||||||
/* Substitute variable for PDK path or ~ for home directory */
|
/* Substitute variable for PDK path or ~ for home directory */
|
||||||
/* the same way that cell references are handled in .mag files. */
|
/* the same way that cell references are handled in .mag files. */
|
||||||
DBPathSubstitute(filename, cstring, cifReadCellDef);
|
DBPathSubstitute(origname, cstring, cifReadCellDef);
|
||||||
fncopy = StrDup(NULL, cstring);
|
fncopy = StrDup(NULL, cstring);
|
||||||
sprintf(fpcopy, "%"DLONG_PREFIX"d", (dlong) filepos);
|
sprintf(fpcopy, "%"DLONG_PREFIX"d", (dlong) filepos);
|
||||||
DBPropPut(cifReadCellDef, "GDS_START", (ClientData)fpcopy);
|
DBPropPut(cifReadCellDef, "GDS_START", (ClientData)fpcopy);
|
||||||
|
|
|
||||||
|
|
@ -152,9 +152,12 @@ int calmaElementIgnore[] = { CALMA_ELFLAGS, CALMA_PLEX, -1 };
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void
|
||||||
CalmaReadFile(file, filename)
|
CalmaReadFile(file, filename, origname)
|
||||||
FILE *file; /* File from which to read Calma */
|
FILE *file; /* File from which to read Calma */
|
||||||
char *filename; /* The real name of the file read */
|
char *filename; /* The real name of the file read */
|
||||||
|
char *origname; /* Original name of file read (used for
|
||||||
|
* compressed files)
|
||||||
|
*/
|
||||||
{
|
{
|
||||||
int k, version;
|
int k, version;
|
||||||
char *libname = NULL;
|
char *libname = NULL;
|
||||||
|
|
@ -234,7 +237,7 @@ CalmaReadFile(file, filename)
|
||||||
if (!calmaParseUnits()) goto done;
|
if (!calmaParseUnits()) goto done;
|
||||||
|
|
||||||
/* Main body of GDS-II input */
|
/* Main body of GDS-II input */
|
||||||
while (calmaParseStructure(filename))
|
while (calmaParseStructure(filename, origname))
|
||||||
if (SigInterruptPending)
|
if (SigInterruptPending)
|
||||||
goto done;
|
goto done;
|
||||||
(void) calmaSkipExact(CALMA_ENDLIB);
|
(void) calmaSkipExact(CALMA_ENDLIB);
|
||||||
|
|
|
||||||
|
|
@ -953,7 +953,7 @@ calmaProcessDef(def, outf, do_library)
|
||||||
namelen = strlen(filename);
|
namelen = strlen(filename);
|
||||||
if ((namelen > 4) && !strcmp(filename + namelen - 3, ".gz"))
|
if ((namelen > 4) && !strcmp(filename + namelen - 3, ".gz"))
|
||||||
{
|
{
|
||||||
char *sysCmd, sptr;
|
char *sysCmd, *sptr;
|
||||||
|
|
||||||
sptr = strrchr(filename, '/');
|
sptr = strrchr(filename, '/');
|
||||||
if (sptr == NULL)
|
if (sptr == NULL)
|
||||||
|
|
@ -965,7 +965,7 @@ calmaProcessDef(def, outf, do_library)
|
||||||
*(modName + strlen(modName) - 3) = '\0';
|
*(modName + strlen(modName) - 3) = '\0';
|
||||||
|
|
||||||
sysCmd = mallocMagic(18 + namelen + strlen(modName));
|
sysCmd = mallocMagic(18 + namelen + strlen(modName));
|
||||||
sprinf(sysCmd, "gunzip -c -k %s > %s", filename, modName);
|
sprintf(sysCmd, "gunzip -c -k %s > %s", filename, modName);
|
||||||
if (system(sysCmd) != 0)
|
if (system(sysCmd) != 0)
|
||||||
{
|
{
|
||||||
/* File didn't uncompress. Go back to original name,
|
/* File didn't uncompress. Go back to original name,
|
||||||
|
|
|
||||||
|
|
@ -931,7 +931,7 @@ CmdCalma(w, cmd)
|
||||||
cmd->tx_argv[2], cmd->tx_argv[2], cmd->tx_argv[2]);
|
cmd->tx_argv[2], cmd->tx_argv[2], cmd->tx_argv[2]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
CalmaReadFile(f, namep);
|
CalmaReadFile(f, namep, cmd->tx_argv[2]);
|
||||||
(void) fclose(f);
|
(void) fclose(f);
|
||||||
if (modName != cmd->tx_argv[2])
|
if (modName != cmd->tx_argv[2])
|
||||||
{
|
{
|
||||||
|
|
@ -957,7 +957,7 @@ outputCalma:
|
||||||
dotptr = strrchr(namep, '.');
|
dotptr = strrchr(namep, '.');
|
||||||
|
|
||||||
/* Check for additional ".gz" extension */
|
/* Check for additional ".gz" extension */
|
||||||
if (!strcmp(dotptr, ".gz"))
|
if (dotptr && !strcmp(dotptr, ".gz"))
|
||||||
{
|
{
|
||||||
gzipd = TRUE;
|
gzipd = TRUE;
|
||||||
*dotptr = '\0';
|
*dotptr = '\0';
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue