1411 char *namebufout, *namebufhide;
1413 void *oldAMdollarzero;
1414 LIST PotModDolListBackup;
1415 LIST ModOptDolListBackup;
1418 MesPrint(
"Recovering ... %"); fflush(0);
1420 if ( !(fd = fopen(recoveryfile,
"r")) )
return(__LINE__);
1423 if ( fread(&pos,
sizeof(
POSITION), 1, fd) != 1 )
return(__LINE__);
1424 size = BASEPOSITION(pos) -
sizeof(
POSITION);
1425 buf = Malloc1(size,
"recovery buffer");
1426 if ( fread(buf, size, 1, fd) != 1 )
return(__LINE__);
1432 R_SET(*moduletype,
int);
1439 R_SET(AM.hparallelflag,
int);
1440 R_SET(AM.gparallelflag,
int);
1441 R_SET(AM.gCodesFlag,
int);
1442 R_SET(AM.gNamesFlag,
int);
1443 R_SET(AM.gStatsFlag,
int);
1444 R_SET(AM.gTokensWriteFlag,
int);
1445 R_SET(AM.gNoSpacesInNumbers,
int);
1446 R_SET(AM.gIndentSpace, WORD);
1447 R_SET(AM.gUnitTrace, WORD);
1448 R_SET(AM.gDefDim,
int);
1449 R_SET(AM.gDefDim4,
int);
1450 R_SET(AM.gncmod, WORD);
1451 R_SET(AM.gnpowmod, WORD);
1452 R_SET(AM.gmodmode, WORD);
1453 R_SET(AM.gOutputMode, WORD);
1454 R_SET(AM.gCnumpows, WORD);
1455 R_SET(AM.gOutputSpaces, WORD);
1456 R_SET(AM.gOutNumberType, WORD);
1457 R_SET(AM.gfunpowers,
int);
1458 R_SET(AM.gPolyFun, WORD);
1459 R_SET(AM.gPolyFunInv, WORD);
1460 R_SET(AM.gPolyFunType, WORD);
1461 R_SET(AM.gPolyFunExp, WORD);
1462 R_SET(AM.gPolyFunVar, WORD);
1463 R_SET(AM.gPolyFunPow, WORD);
1464 R_SET(AM.gProcessBucketSize, LONG);
1465 R_SET(AM.OldChildTime, LONG);
1466 R_SET(AM.OldSecTime, LONG);
1467 R_SET(AM.OldMilliTime, LONG);
1468 R_SET(AM.gproperorderflag,
int);
1469 R_SET(AM.gThreadBucketSize, LONG);
1470 R_SET(AM.gSizeCommuteInSet,
int);
1471 R_SET(AM.gThreadStats,
int);
1472 R_SET(AM.gFinalStats,
int);
1473 R_SET(AM.gThreadsFlag,
int);
1474 R_SET(AM.gThreadBalancing,
int);
1475 R_SET(AM.gThreadSortFileSynch,
int);
1476 R_SET(AM.gProcessStats,
int);
1477 R_SET(AM.gOldParallelStats,
int);
1478 R_SET(AM.gSortType,
int);
1479 R_SET(AM.gShortStatsMax, WORD);
1480 R_SET(AM.gIsFortran90,
int);
1481 R_SET(oldAMdollarzero,
void*);
1482 R_FREE(AM.gFortran90Kind);
1483 R_SET(AM.gFortran90Kind,UBYTE *);
1484 R_COPY_S(AM.gFortran90Kind,UBYTE *);
1486 R_COPY_S(AM.gextrasym,UBYTE *);
1487 R_COPY_S(AM.ggextrasym,UBYTE *);
1489 R_SET(AM.PrintTotalSize,
int);
1490 R_SET(AM.fbuffersize,
int);
1491 R_SET(AM.gOldFactArgFlag,
int);
1492 R_SET(AM.ggOldFactArgFlag,
int);
1494 R_SET(AM.gnumextrasym,
int);
1495 R_SET(AM.ggnumextrasym,
int);
1496 R_SET(AM.NumSpectatorFiles,
int);
1497 R_SET(AM.SizeForSpectatorFiles,
int);
1498 R_SET(AM.gOldGCDflag,
int);
1499 R_SET(AM.ggOldGCDflag,
int);
1500 R_SET(AM.gWTimeStatsFlag,
int);
1503 R_SET(AM.Path,UBYTE *);
1504 R_COPY_S(AM.Path,UBYTE *);
1506 R_SET(AM.FromStdin, BOOL);
1507 R_SET(AM.IgnoreDeprecation, BOOL);
1521 R_FREE_NAMETREE(AC.dollarnames);
1522 R_FREE_NAMETREE(AC.exprnames);
1523 R_FREE_NAMETREE(AC.varnames);
1524 for ( i=0; i<AC.ChannelList.num; ++i ) {
1525 R_FREE(channels[i].name);
1527 R_FREE(AC.ChannelList.lijst);
1528 R_FREE(AC.DubiousList.lijst);
1529 for ( i=0; i<AC.FunctionList.num; ++i ) {
1530 TABLES T = functions[i].tabl;
1554 R_FREE(AC.FunctionList.lijst);
1555 for ( i=0; i<AC.ExpressionList.num; ++i ) {
1556 if ( Expressions[i].renum ) {
1557 R_FREE(Expressions[i].renum->symb.lo);
1558 R_FREE(Expressions[i].renum);
1560 if ( Expressions[i].bracketinfo ) {
1561 R_FREE(Expressions[i].bracketinfo->indexbuffer);
1562 R_FREE(Expressions[i].bracketinfo->bracketbuffer);
1563 R_FREE(Expressions[i].bracketinfo);
1565 if ( Expressions[i].newbracketinfo ) {
1566 R_FREE(Expressions[i].newbracketinfo->indexbuffer);
1567 R_FREE(Expressions[i].newbracketinfo->bracketbuffer);
1568 R_FREE(Expressions[i].newbracketinfo);
1570 if ( Expressions[i].renumlists != AN.dummyrenumlist ) {
1571 R_FREE(Expressions[i].renumlists);
1573 R_FREE(Expressions[i].inmem);
1575 R_FREE(AC.ExpressionList.lijst);
1576 R_FREE(AC.IndexList.lijst);
1577 R_FREE(AC.SetElementList.lijst);
1578 R_FREE(AC.SetList.lijst);
1579 R_FREE(AC.SymbolList.lijst);
1580 R_FREE(AC.VectorList.lijst);
1581 for ( i=0; i<AC.TableBaseList.num; ++i ) {
1582 R_FREE(tablebases[i].iblocks);
1583 R_FREE(tablebases[i].nblocks);
1584 R_FREE(tablebases[i].name);
1585 R_FREE(tablebases[i].fullname);
1586 R_FREE(tablebases[i].tablenames);
1588 R_FREE(AC.TableBaseList.lijst);
1589 for ( i=0; i<AC.cbufList.num; ++i ) {
1590 R_FREE(cbuf[i].Buffer);
1591 R_FREE(cbuf[i].lhs);
1592 R_FREE(cbuf[i].rhs);
1593 R_FREE(cbuf[i].boomlijst);
1595 R_FREE(AC.cbufList.lijst);
1596 R_FREE(AC.AutoSymbolList.lijst);
1597 R_FREE(AC.AutoIndexList.lijst);
1598 R_FREE(AC.AutoVectorList.lijst);
1600 R_FREE(AC.AutoFunctionList.lijst);
1601 R_FREE_NAMETREE(AC.autonames);
1602 for ( i=0; i<AC.NumStreams; ++i ) {
1603 R_FREE_STREAM(AC.Streams[i]);
1606 R_FREE(AC.termstack);
1607 R_FREE(AC.termsortstack);
1609 R_FREE(AC.modpowers);
1614 for ( i=0; i<AC.NumLabels; ++i ) {
1615 R_FREE(AC.LabelNames[i]);
1617 R_FREE(AC.LabelNames);
1618 R_FREE(AC.FixIndices);
1619 R_FREE(AC.termsumcheck);
1620 R_FREE(AC.WildcardNames);
1622 R_FREE(AC.tokenarglevel);
1623 R_FREE(AC.modinverses);
1624 R_FREE(AC.Fortran90Kind);
1626 R_FREE(AC.inputnumbers);
1628 R_FREE(AC.IfSumCheck);
1629 R_FREE(AC.CommuteInSet);
1630 R_FREE(AC.CheckpointRunAfter);
1631 R_FREE(AC.CheckpointRunBefore);
1636 PotModDolListBackup = AC.PotModDolList;
1637 ModOptDolListBackup = AC.ModOptDolList;
1638 oldLogHandle = AC.LogHandle;
1643 AC = *((
struct C_const*)p); p = (
unsigned char*)p +
sizeof(
struct C_const);
1645 R_COPY_NAMETREE(AC.dollarnames);
1646 R_COPY_NAMETREE(AC.exprnames);
1647 R_COPY_NAMETREE(AC.varnames);
1649 R_COPY_LIST(AC.ChannelList);
1650 for ( i=0; i<AC.ChannelList.num; ++i ) {
1651 R_COPY_S(channels[i].name,
char*);
1652 channels[i].handle = ReOpenFile(channels[i].name);
1654 AC.ChannelList.message =
"channel buffer";
1656 AC.DubiousList.lijst = 0;
1657 AC.DubiousList.message =
"ambiguous variable";
1658 AC.DubiousList.num =
1659 AC.DubiousList.maxnum =
1660 AC.DubiousList.numglobal =
1661 AC.DubiousList.numtemp =
1662 AC.DubiousList.numclear = 0;
1664 R_COPY_LIST(AC.FunctionList);
1665 for ( i=0; i<AC.FunctionList.num; ++i ) {
1666 if ( functions[i].tabl ) {
1669 functions[i].tabl = tabl;
1678 TABLEEXTENSION*
sizeof(WORD)*(tabl->
totind), WORD*);
1685 for ( j=0; j<AM.totalnumberofthreads; ++j ) {
1692 for ( j=0; j<AM.totalnumberofthreads; ++j ) {
1706 R_COPY_B(tabl->
flags, tabl->
numind*(LONG)
sizeof(WORD), WORD*);
1709 R_COPY_S(tabl->
argtail,UBYTE*);
1712 if ( tabl->
spare ) {
1715 tabl->
spare = spare;
1724 TABLEEXTENSION*
sizeof(WORD)*(spare->
totind), WORD*);
1730 R_COPY_B(spare->
flags, spare->
numind*(LONG)
sizeof(WORD), WORD*);
1735 spare->
spare = tabl;
1740 AC.FunctionList.message =
"function";
1742 R_COPY_LIST(AC.ExpressionList);
1743 for ( i=0; i<AC.ExpressionList.num; ++i ) {
1747 org = (UBYTE*)ex->renum->
symb.
lo;
1748 R_SET(size,
size_t);
1749 R_COPY_B(ex->renum->
symb.
lo, size, WORD*);
1750 ofs = (UBYTE*)ex->renum->
symb.
lo - org;
1752 ex->renum->
symb.
hi = (WORD*)((UBYTE*)ex->renum->
symb.
hi + ofs);
1753 ex->renum->
indi.
lo = (WORD*)((UBYTE*)ex->renum->
indi.
lo + ofs);
1755 ex->renum->
indi.
hi = (WORD*)((UBYTE*)ex->renum->
indi.
hi + ofs);
1756 ex->renum->
vect.
lo = (WORD*)((UBYTE*)ex->renum->
vect.
lo + ofs);
1758 ex->renum->
vect.
hi = (WORD*)((UBYTE*)ex->renum->
vect.
hi + ofs);
1759 ex->renum->
func.
lo = (WORD*)((UBYTE*)ex->renum->
func.
lo + ofs);
1761 ex->renum->
func.
hi = (WORD*)((UBYTE*)ex->renum->
func.
hi + ofs);
1762 ex->renum->
symnum = (WORD*)((UBYTE*)ex->renum->
symnum + ofs);
1763 ex->renum->
indnum = (WORD*)((UBYTE*)ex->renum->
indnum + ofs);
1764 ex->renum->
vecnum = (WORD*)((UBYTE*)ex->renum->
vecnum + ofs);
1765 ex->renum->
funnum = (WORD*)((UBYTE*)ex->renum->
funnum + ofs);
1767 if ( ex->bracketinfo ) {
1770 R_COPY_B(ex->bracketinfo->
bracketbuffer, ex->bracketinfo->bracketbuffersize*
sizeof(WORD), WORD*);
1772 if ( ex->newbracketinfo ) {
1775 R_COPY_B(ex->newbracketinfo->
bracketbuffer, ex->newbracketinfo->bracketbuffersize*
sizeof(WORD), WORD*);
1783 R_SET(size,
size_t);
1784 R_COPY_B(ex->inmem, size, WORD*);
1787 AC.ExpressionList.message =
"expression";
1789 R_COPY_LIST(AC.IndexList);
1790 AC.IndexList.message =
"index";
1791 R_COPY_LIST(AC.SetElementList);
1792 AC.SetElementList.message =
"set element";
1793 R_COPY_LIST(AC.SetList);
1794 AC.SetList.message =
"set";
1795 R_COPY_LIST(AC.SymbolList);
1796 AC.SymbolList.message =
"symbol";
1797 R_COPY_LIST(AC.VectorList);
1798 AC.VectorList.message =
"vector";
1800 AC.PotModDolList = PotModDolListBackup;
1801 AC.ModOptDolList = ModOptDolListBackup;
1803 R_COPY_LIST(AC.TableBaseList);
1804 for ( i=0; i<AC.TableBaseList.num; ++i ) {
1805 if ( tablebases[i].iblocks ) {
1806 R_COPY_B(tablebases[i].iblocks, tablebases[i].info.numberofindexblocks*
sizeof(
INDEXBLOCK*),
INDEXBLOCK**);
1807 for ( j=0; j<tablebases[i].info.numberofindexblocks; ++j ) {
1808 if ( tablebases[i].iblocks[j] ) {
1813 if ( tablebases[i].nblocks ) {
1814 R_COPY_B(tablebases[i].nblocks, tablebases[i].info.numberofnamesblocks*
sizeof(
NAMESBLOCK*),
NAMESBLOCK**);
1815 for ( j=0; j<tablebases[i].info.numberofindexblocks; ++j ) {
1816 if ( tablebases[i].nblocks[j] ) {
1822 if ( ( tablebases[i].handle = fopen(tablebases[i].fullname,
"r+b") ) == NULL ) {
1823 MesPrint(
"ERROR: Could not reopen tablebase %s!",tablebases[i].name);
1826 R_COPY_S(tablebases[i].name,
char*);
1827 R_COPY_S(tablebases[i].fullname,
char*);
1828 R_COPY_S(tablebases[i].tablenames,
char*);
1830 AC.TableBaseList.message =
"list of tablebases";
1832 R_COPY_LIST(AC.cbufList);
1833 for ( i=0; i<AC.cbufList.num; ++i ) {
1834 org = (UBYTE*)cbuf[i].Buffer;
1835 R_COPY_B(cbuf[i].Buffer, cbuf[i].BufferSize*
sizeof(WORD), WORD*);
1836 ofs = (UBYTE*)cbuf[i].Buffer - org;
1837 cbuf[i].Top = (WORD*)((UBYTE*)cbuf[i].Top + ofs);
1838 cbuf[i].Pointer = (WORD*)((UBYTE*)cbuf[i].Pointer + ofs);
1839 R_COPY_B(cbuf[i].lhs, cbuf[i].maxlhs*(LONG)
sizeof(WORD*), WORD**);
1840 for ( j=1; j<=cbuf[i].numlhs; ++j ) {
1841 if ( cbuf[i].lhs[j] ) cbuf[i].lhs[j] = (WORD*)((UBYTE*)cbuf[i].lhs[j] + ofs);
1843 org = (UBYTE*)cbuf[i].rhs;
1844 R_COPY_B(cbuf[i].rhs, cbuf[i].maxrhs*(LONG)(
sizeof(WORD*)+2*
sizeof(LONG)+2*
sizeof(WORD)), WORD**);
1845 for ( j=1; j<=cbuf[i].numrhs; ++j ) {
1846 if ( cbuf[i].rhs[j] ) cbuf[i].rhs[j] = (WORD*)((UBYTE*)cbuf[i].rhs[j] + ofs);
1848 ofs = (UBYTE*)cbuf[i].rhs - org;
1849 cbuf[i].CanCommu = (LONG*)((UBYTE*)cbuf[i].CanCommu + ofs);
1850 cbuf[i].NumTerms = (LONG*)((UBYTE*)cbuf[i].NumTerms + ofs);
1851 cbuf[i].numdum = (WORD*)((UBYTE*)cbuf[i].numdum + ofs);
1852 cbuf[i].dimension = (WORD*)((UBYTE*)cbuf[i].dimension + ofs);
1853 if ( cbuf[i].boomlijst ) {
1854 R_COPY_B(cbuf[i].boomlijst, cbuf[i].MaxTreeSize*
sizeof(
COMPTREE),
COMPTREE*);
1857 AC.cbufList.message =
"compiler buffer";
1859 R_COPY_LIST(AC.AutoSymbolList);
1860 AC.AutoSymbolList.message =
"autosymbol";
1861 R_COPY_LIST(AC.AutoIndexList);
1862 AC.AutoIndexList.message =
"autoindex";
1863 R_COPY_LIST(AC.AutoVectorList);
1864 AC.AutoVectorList.message =
"autovector";
1865 R_COPY_LIST(AC.AutoFunctionList);
1866 AC.AutoFunctionList.message =
"autofunction";
1868 R_COPY_NAMETREE(AC.autonames);
1870 AC.Symbols = &(AC.SymbolList);
1871 AC.Indices = &(AC.IndexList);
1872 AC.Vectors = &(AC.VectorList);
1873 AC.Functions = &(AC.FunctionList);
1874 AC.activenames = &(AC.varnames);
1876 org = (UBYTE*)AC.Streams;
1877 R_COPY_B(AC.Streams, AC.MaxNumStreams*(LONG)
sizeof(
STREAM),
STREAM*);
1878 for ( i=0; i<AC.NumStreams; ++i ) {
1879 if ( AC.Streams[i].type != FILESTREAM ) {
1881 org2 = AC.Streams[i].buffer;
1882 if ( AC.Streams[i].inbuffer ) {
1883 R_COPY_B(AC.Streams[i].buffer, AC.Streams[i].inbuffer, UBYTE*);
1885 ofs = AC.Streams[i].buffer - org2;
1886 AC.Streams[i].pointer += ofs;
1887 AC.Streams[i].top += ofs;
1890 p = (
unsigned char*)p + AC.Streams[i].inbuffer;
1892 AC.Streams[i].buffersize = AC.Streams[i].inbuffer;
1893 R_COPY_S(AC.Streams[i].FoldName,UBYTE*);
1894 R_COPY_S(AC.Streams[i].name,UBYTE*);
1895 if ( AC.Streams[i].type == PREVARSTREAM || AC.Streams[i].type == DOLLARSTREAM ) {
1896 AC.Streams[i].pname = AC.Streams[i].name;
1898 else if ( AC.Streams[i].type == FILESTREAM ) {
1900 org2 = AC.Streams[i].buffer;
1901 AC.Streams[i].buffer = (UBYTE*)Malloc1(AC.Streams[i].buffersize,
"buffer");
1902 ofs = AC.Streams[i].buffer - org2;
1903 AC.Streams[i].pointer += ofs;
1904 AC.Streams[i].top += ofs;
1908 AC.Streams[i].handle = OpenFile((
char *)(AC.Streams[i].name));
1909 if ( AC.Streams[i].handle == -1 ) {
1910 MesPrint(
"ERROR: Could not reopen stream %s!",AC.Streams[i].name);
1916 ADDPOS(pos, AC.Streams[i].bufferposition);
1917 SeekFile(AC.Streams[i].handle, &pos, SEEK_SET);
1919 AC.Streams[i].inbuffer = ReadFile(AC.Streams[i].handle, AC.Streams[i].buffer, AC.Streams[i].inbuffer);
1921 SETBASEPOSITION(pos, AC.Streams[i].fileposition);
1922 SeekFile(AC.Streams[i].handle, &pos, SEEK_SET);
1934 ofs = (UBYTE*)AC.Streams - org;
1935 AC.CurrentStream = (
STREAM*)((UBYTE*)AC.CurrentStream + ofs);
1937 if ( AC.termstack ) {
1938 R_COPY_B(AC.termstack, AC.maxtermlevel*(LONG)
sizeof(LONG), LONG*);
1941 if ( AC.termsortstack ) {
1942 R_COPY_B(AC.termsortstack, AC.maxtermlevel*(LONG)
sizeof(LONG), LONG*);
1946 R_COPY_B(AC.cmod, AM.MaxTal*4*(LONG)
sizeof(UWORD), UWORD*);
1947 AM.gcmod = AC.cmod + AM.MaxTal;
1948 AC.powmod = AM.gcmod + AM.MaxTal;
1949 AM.gpowmod = AC.powmod + AM.MaxTal;
1957 ofs = AC.IfStack - AC.IfHeap;
1958 R_COPY_B(AC.IfHeap, (LONG)
sizeof(LONG)*(AC.MaxIf+1), LONG*);
1959 AC.IfStack = AC.IfHeap + ofs;
1960 R_COPY_B(AC.IfCount, (LONG)
sizeof(LONG)*(AC.MaxIf+1), LONG*);
1964 size = AC.iStop - AC.iBuffer + 2;
1965 R_COPY_B(AC.iBuffer, size, UBYTE*);
1966 ofs = AC.iBuffer - org;
1970 if ( AC.LabelNames ) {
1971 org = (UBYTE*)AC.LabelNames;
1972 R_COPY_B(AC.LabelNames, AC.MaxLabels*(LONG)(
sizeof(UBYTE*)+
sizeof(WORD)), UBYTE**);
1973 for ( i=0; i<AC.NumLabels; ++i ) {
1974 R_COPY_S(AC.LabelNames[i],UBYTE*);
1976 ofs = (UBYTE*)AC.LabelNames - org;
1977 AC.Labels = (
int*)((UBYTE*)AC.Labels + ofs);
1980 R_COPY_B(AC.FixIndices, AM.OffsetIndex*(LONG)
sizeof(WORD), WORD*);
1982 if ( AC.termsumcheck ) {
1983 R_COPY_B(AC.termsumcheck, AC.maxtermlevel*(LONG)
sizeof(WORD), WORD*);
1986 R_COPY_B(AC.WildcardNames, AC.WildcardBufferSize, UBYTE*);
1989 size = AC.toptokens - AC.tokens;
1991 org = (UBYTE*)AC.tokens;
1992 R_COPY_B(AC.tokens, size, SBYTE*);
1993 ofs = (UBYTE*)AC.tokens - org;
1994 AC.endoftokens += ofs;
1995 AC.toptokens += ofs;
1999 AC.endoftokens = AC.tokens;
2000 AC.toptokens = AC.tokens;
2004 R_COPY_B(AC.tokenarglevel, AM.MaxParLevel*(LONG)
sizeof(WORD), WORD*);
2008 R_COPY_S(AC.Fortran90Kind,UBYTE *);
2011 if ( AC.inputnumbers ) {
2012 org = (UBYTE*)AC.inputnumbers;
2013 R_COPY_B(AC.inputnumbers, AC.sizepfirstnum*(LONG)(
sizeof(WORD)+
sizeof(LONG)), LONG*);
2014 ofs = (UBYTE*)AC.inputnumbers - org;
2015 AC.pfirstnum = (WORD*)((UBYTE*)AC.pfirstnum + ofs);
2017 AC.halfmodlock = dummylock;
2020 if ( AC.IfSumCheck ) {
2021 R_COPY_B(AC.IfSumCheck, (LONG)
sizeof(WORD)*(AC.MaxIf+1), WORD*);
2023 if ( AC.CommuteInSet ) {
2024 R_COPY_B(AC.CommuteInSet, (LONG)
sizeof(WORD)*(AC.SizeCommuteInSet+1), WORD*);
2027 AC.LogHandle = oldLogHandle;
2029 R_COPY_S(AC.CheckpointRunAfter,
char*);
2030 R_COPY_S(AC.CheckpointRunBefore,
char*);
2032 R_COPY_S(AC.extrasym,UBYTE *);
2046 for ( i=0; i<AP.DollarList.num; ++i ) {
2047 if ( Dollars[i].size ) {
2048 R_FREE(Dollars[i].where);
2050 CleanDollarFactors(Dollars+i);
2052 R_FREE(AP.DollarList.lijst);
2054 for ( i=0; i<AP.PreVarList.num; ++i ) {
2055 R_FREE(PreVar[i].name);
2057 R_FREE(AP.PreVarList.lijst);
2059 for ( i=0; i<AP.LoopList.num; ++i ) {
2060 R_FREE(DoLoops[i].p.buffer);
2061 if ( DoLoops[i].dollarname ) {
2062 R_FREE(DoLoops[i].dollarname);
2065 R_FREE(AP.LoopList.lijst);
2067 for ( i=0; i<AP.ProcList.num; ++i ) {
2068 R_FREE(Procedures[i].p.buffer);
2069 R_FREE(Procedures[i].name);
2071 R_FREE(AP.ProcList.lijst);
2073 for ( i=1; i<=AP.PreSwitchLevel; ++i ) {
2074 R_FREE(AP.PreSwitchStrings[i]);
2076 R_FREE(AP.PreSwitchStrings);
2077 R_FREE(AP.preStart);
2078 R_FREE(AP.procedureExtension);
2079 R_FREE(AP.cprocedureExtension);
2080 R_FREE(AP.PreIfStack);
2081 R_FREE(AP.PreSwitchModes);
2082 R_FREE(AP.PreTypes);
2089 AP = *((
struct P_const*)p); p = (
unsigned char*)p +
sizeof(
struct P_const);
2091 AP.PreVarLock = dummylock;
2094 R_COPY_LIST(AP.DollarList);
2095 for ( i=0; i<AP.DollarList.num; ++i ) {
2097 size = d->size *
sizeof(WORD);
2098 if ( size && d->where && d->where != oldAMdollarzero ) {
2099 R_COPY_B(d->where, size,
void*);
2102 INIRECLOCK(d->pthreadslock);
2104 if ( d->nfactors > 1 ) {
2106 for ( j = 0; j < d->nfactors; j++ ) {
2107 if ( d->factors[j].size > 0 ) {
2108 R_COPY_B(d->factors[i].where,
sizeof(WORD)*(d->factors[j].size+1),WORD*);
2113 AP.DollarList.message =
"$-variable";
2115 R_COPY_LIST(AP.PreVarList);
2116 for ( i=0; i<AP.PreVarList.num; ++i ) {
2117 R_SET(size,
size_t);
2118 org = PreVar[i].name;
2119 R_COPY_B(PreVar[i].name, size, UBYTE*);
2120 ofs = PreVar[i].name - org;
2121 if ( PreVar[i].value ) PreVar[i].value += ofs;
2122 if ( PreVar[i].argnames ) PreVar[i].argnames += ofs;
2124 AP.PreVarList.message =
"PreVariable";
2126 R_COPY_LIST(AP.LoopList);
2127 for ( i=0; i<AP.LoopList.num; ++i ) {
2128 org = DoLoops[i].p.buffer;
2129 R_COPY_B(DoLoops[i].p.buffer, DoLoops[i].p.size, UBYTE*);
2130 ofs = DoLoops[i].p.buffer - org;
2131 if ( DoLoops[i].name ) DoLoops[i].name += ofs;
2132 if ( DoLoops[i].vars ) DoLoops[i].vars += ofs;
2133 if ( DoLoops[i].contents ) DoLoops[i].contents += ofs;
2134 if ( DoLoops[i].type == ONEEXPRESSION ) {
2135 R_COPY_S(DoLoops[i].dollarname,UBYTE*);
2138 AP.LoopList.message =
"doloop";
2140 R_COPY_LIST(AP.ProcList);
2141 for ( i=0; i<AP.ProcList.num; ++i ) {
2142 if ( Procedures[i].p.size ) {
2143 if ( Procedures[i].loadmode != 1 ) {
2144 R_COPY_B(Procedures[i].p.buffer, Procedures[i].p.size, UBYTE*);
2148 Procedures[i].p.buffer = Procedures[j].p.buffer;
2151 R_COPY_S(Procedures[i].name,UBYTE*);
2153 AP.ProcList.message =
"procedure";
2155 size = (AP.NumPreSwitchStrings+1)*(LONG)
sizeof(UBYTE*);
2156 R_COPY_B(AP.PreSwitchStrings, size, UBYTE**);
2157 for ( i=1; i<=AP.PreSwitchLevel; ++i ) {
2158 R_COPY_S(AP.PreSwitchStrings[i],UBYTE*);
2162 R_COPY_B(AP.preStart, AP.pSize, UBYTE*);
2163 ofs = AP.preStart - org;
2164 if ( AP.preFill ) AP.preFill += ofs;
2165 if ( AP.preStop ) AP.preStop += ofs;
2167 R_COPY_S(AP.procedureExtension,UBYTE*);
2168 R_COPY_S(AP.cprocedureExtension,UBYTE*);
2170 R_COPY_B(AP.PreAssignStack,AP.MaxPreAssignLevel*(LONG)
sizeof(LONG),LONG*);
2171 R_COPY_B(AP.PreIfStack, AP.MaxPreIfLevel*(LONG)
sizeof(
int),
int*);
2172 R_COPY_B(AP.PreSwitchModes, (AP.NumPreSwitchStrings+1)*(LONG)
sizeof(
int),
int*);
2173 R_COPY_B(AP.PreTypes, (AP.MaxPreTypes+1)*(LONG)
sizeof(
int),
int*);
2184 AR.infile = AR.Fscr+1;
2185 AR.outfile = AR.Fscr;
2186 AR.hidefile = AR.Fscr+2;
2189 AR.infile = AR.Fscr;
2190 AR.outfile = AR.Fscr+1;
2191 AR.hidefile = AR.Fscr+2;
2199 namebufout = AR.outfile->name;
2200 namebufhide = AR.hidefile->name;
2201 R_FREE(AR.outfile->PObuffer);
2203 R_FREE(AR.outfile->zsp);
2204 R_FREE(AR.outfile->ziobuffer);
2206 namebufhide = AR.hidefile->name;
2207 R_FREE(AR.hidefile->PObuffer);
2209 R_FREE(AR.hidefile->zsp);
2210 R_FREE(AR.hidefile->ziobuffer);
2218 org = (UBYTE*)AR.outfile->PObuffer;
2219 size = AR.outfile->POfull - AR.outfile->PObuffer;
2220 AR.outfile->PObuffer = (WORD*)Malloc1(AR.outfile->POsize,
"PObuffer");
2222 memcpy(AR.outfile->PObuffer, p, size*
sizeof(WORD));
2223 p = (
unsigned char*)p + size*
sizeof(WORD);
2225 ofs = (UBYTE*)AR.outfile->PObuffer - org;
2226 AR.outfile->POstop = (WORD*)((UBYTE*)AR.outfile->POstop + ofs);
2227 AR.outfile->POfill = (WORD*)((UBYTE*)AR.outfile->POfill + ofs);
2228 AR.outfile->POfull = (WORD*)((UBYTE*)AR.outfile->POfull + ofs);
2229 AR.outfile->name = namebufout;
2231 AR.outfile->wPObuffer = AR.outfile->PObuffer;
2232 AR.outfile->wPOstop = AR.outfile->POstop;
2233 AR.outfile->wPOfill = AR.outfile->POfill;
2234 AR.outfile->wPOfull = AR.outfile->POfull;
2238 AR.outfile->zsp = 0;
2239 AR.outfile->ziobuffer = 0;
2245 if ( AR.outfile->handle >= 0 ) {
2246 if (
CopyFile(sortfile, AR.outfile->name) ) {
2247 MesPrint(
"ERROR: Could not copy old output sort file %s!",sortfile);
2250 AR.outfile->handle = ReOpenFile(AR.outfile->name);
2251 if ( AR.outfile->handle == -1 ) {
2252 MesPrint(
"ERROR: Could not reopen output sort file %s!",AR.outfile->name);
2255 SeekFile(AR.outfile->handle, &AR.outfile->POposition, SEEK_SET);
2260 AR.hidefile->name = namebufhide;
2261 if ( AR.hidefile->PObuffer ) {
2262 org = (UBYTE*)AR.hidefile->PObuffer;
2263 size = AR.hidefile->POfull - AR.hidefile->PObuffer;
2264 AR.hidefile->PObuffer = (WORD*)Malloc1(AR.hidefile->POsize,
"PObuffer");
2266 memcpy(AR.hidefile->PObuffer, p, size*
sizeof(WORD));
2267 p = (
unsigned char*)p + size*
sizeof(WORD);
2269 ofs = (UBYTE*)AR.hidefile->PObuffer - org;
2270 AR.hidefile->POstop = (WORD*)((UBYTE*)AR.hidefile->POstop + ofs);
2271 AR.hidefile->POfill = (WORD*)((UBYTE*)AR.hidefile->POfill + ofs);
2272 AR.hidefile->POfull = (WORD*)((UBYTE*)AR.hidefile->POfull + ofs);
2274 AR.hidefile->wPObuffer = AR.hidefile->PObuffer;
2275 AR.hidefile->wPOstop = AR.hidefile->POstop;
2276 AR.hidefile->wPOfill = AR.hidefile->POfill;
2277 AR.hidefile->wPOfull = AR.hidefile->POfull;
2282 AR.hidefile->zsp = 0;
2283 AR.hidefile->ziobuffer = 0;
2286 if ( AR.hidefile->handle >= 0 ) {
2287 if (
CopyFile(hidefile, AR.hidefile->name) ) {
2288 MesPrint(
"ERROR: Could not copy old hide file %s!",hidefile);
2291 AR.hidefile->handle = ReOpenFile(AR.hidefile->name);
2292 if ( AR.hidefile->handle == -1 ) {
2293 MesPrint(
"ERROR: Could not reopen hide file %s!",AR.hidefile->name);
2296 SeekFile(AR.hidefile->handle, &AR.hidefile->POposition, SEEK_SET);
2301 if ( ISNOTZEROPOS(pos) ) {
2302 CloseFile(AR.StoreData.Handle);
2304 if (
CopyFile(storefile, FG.fname) ) {
2305 MesPrint(
"ERROR: Could not copy old store file %s!",storefile);
2308 AR.StoreData.Handle = (WORD)ReOpenFile(FG.fname);
2309 SeekFile(AR.StoreData.Handle, &AR.StoreData.Position, SEEK_SET);
2313 R_SET(AR.OldTime, LONG);
2314 R_SET(AR.InInBuf, LONG);
2315 R_SET(AR.InHiBuf, LONG);
2317 R_SET(AR.NoCompress,
int);
2318 R_SET(AR.gzipCompress,
int);
2320 R_SET(AR.outtohide,
int);
2322 R_SET(AR.GetFile, WORD);
2323 R_SET(AR.KeptInHold, WORD);
2324 R_SET(AR.BracketOn, WORD);
2325 R_SET(AR.MaxBracket, WORD);
2326 R_SET(AR.CurDum, WORD);
2327 R_SET(AR.DeferFlag, WORD);
2328 R_SET(AR.TePos, WORD);
2329 R_SET(AR.sLevel, WORD);
2330 R_SET(AR.Stage4Name, WORD);
2331 R_SET(AR.GetOneFile, WORD);
2332 R_SET(AR.PolyFun, WORD);
2333 R_SET(AR.PolyFunInv, WORD);
2334 R_SET(AR.PolyFunType, WORD);
2335 R_SET(AR.PolyFunExp, WORD);
2336 R_SET(AR.PolyFunVar, WORD);
2337 R_SET(AR.PolyFunPow, WORD);
2338 R_SET(AR.Eside, WORD);
2339 R_SET(AR.MaxDum, WORD);
2340 R_SET(AR.level, WORD);
2341 R_SET(AR.expchanged, WORD);
2342 R_SET(AR.expflags, WORD);
2343 R_SET(AR.CurExpr, WORD);
2344 R_SET(AR.SortType, WORD);
2345 R_SET(AR.ShortSortCount, WORD);
2350 AR.CompressPointer = AR.CompressBuffer;
2353 for ( j = 0; j < AM.totalnumberofthreads; j++ ) {
2354 R_SET(AB[j]->R.wranfnpair1,
int);
2355 R_SET(AB[j]->R.wranfnpair2,
int);
2356 R_SET(AB[j]->R.wranfcall,
int);
2357 R_SET(AB[j]->R.wranfseed, ULONG);
2358 R_SET(AB[j]->R.wranfia,ULONG*);
2359 if ( AB[j]->R.wranfia ) {
2360 R_COPY_B(AB[j]->R.wranfia,
sizeof(ULONG)*AB[j]->R.wranfnpair2, ULONG*);
2364 R_SET(AR.wranfnpair1,
int);
2365 R_SET(AR.wranfnpair2,
int);
2366 R_SET(AR.wranfcall,
int);
2367 R_SET(AR.wranfseed, ULONG);
2368 R_SET(AR.wranfia,ULONG*);
2370 R_COPY_B(AR.wranfia,
sizeof(ULONG)*AR.wranfnpair2, ULONG*);
2383 l =
sizeof(A.O) - ((UBYTE *)(&(A.O.NumInBrack))-(UBYTE *)(&A.O));
2384 memcpy(&(A.O.NumInBrack), p, l); p = (
unsigned char*)p + l;
2391 if ( A.O.OptimizeResult.codesize > 0 ) {
2392 R_COPY_B(A.O.OptimizeResult.code,A.O.OptimizeResult.codesize*
sizeof(WORD),WORD *);
2394 R_COPY_S(A.O.OptimizeResult.nameofexpr,UBYTE *);
2399 if ( AO.SizeDictionaries > 0 ) {
2402 for ( i = 0; i < AO.NumDictionaries; i++ ) {
2404 AO.Dictionaries[i] = DictFromBytes(p);
2413 R_SET(numtasks,
int);
2414 if(numtasks!=PF.numtasks){
2415 MesPrint(
"%d number of tasks expected instead of %d; use mpirun -np %d",
2416 numtasks,PF.numtasks,numtasks);
2422 R_SET(PF.rhsInParallel,
int);
2423 R_SET(PF.exprbufsize,
int);
2431 for ( j=1; j<AM.totalnumberofthreads; ++j ) {
2433 AB[j]->R.OldTime = -(*((LONG*)p+j));
2435 WriteTimerInfo((LONG*)p,(LONG *)((
unsigned char*)p + i*(LONG)
sizeof(LONG)));
2436 p = (
unsigned char*)p + 2*i*(LONG)
sizeof(LONG);
2439 if ( fclose(fd) )
return(__LINE__);
2441 M_free(buf,
"recovery buffer");
2452 MesPrint(
"done."); fflush(0);