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 ) {
1427 size = BASEPOSITION(pos) -
sizeof(
POSITION);
1428 buf = Malloc1(size,
"recovery buffer");
1429 if ( fread(buf, size, 1, fd) != 1 ) {
1438 R_SET(*moduletype,
int);
1445 R_SET(AM.hparallelflag,
int);
1446 R_SET(AM.gparallelflag,
int);
1447 R_SET(AM.gCodesFlag,
int);
1448 R_SET(AM.gNamesFlag,
int);
1449 R_SET(AM.gStatsFlag,
int);
1450 R_SET(AM.gTokensWriteFlag,
int);
1451 R_SET(AM.gNoSpacesInNumbers,
int);
1452 R_SET(AM.gIndentSpace, WORD);
1453 R_SET(AM.gUnitTrace, WORD);
1454 R_SET(AM.gDefDim,
int);
1455 R_SET(AM.gDefDim4,
int);
1456 R_SET(AM.gncmod, WORD);
1457 R_SET(AM.gnpowmod, WORD);
1458 R_SET(AM.gmodmode, WORD);
1459 R_SET(AM.gOutputMode, WORD);
1460 R_SET(AM.gCnumpows, WORD);
1461 R_SET(AM.gOutputSpaces, WORD);
1462 R_SET(AM.gOutNumberType, WORD);
1463 R_SET(AM.gfunpowers,
int);
1464 R_SET(AM.gPolyFun, WORD);
1465 R_SET(AM.gPolyFunInv, WORD);
1466 R_SET(AM.gPolyFunType, WORD);
1467 R_SET(AM.gPolyFunExp, WORD);
1468 R_SET(AM.gPolyFunVar, WORD);
1469 R_SET(AM.gPolyFunPow, WORD);
1470 R_SET(AM.gProcessBucketSize, LONG);
1471 R_SET(AM.OldChildTime, LONG);
1472 R_SET(AM.OldSecTime, LONG);
1473 R_SET(AM.OldMilliTime, LONG);
1474 R_SET(AM.gproperorderflag,
int);
1475 R_SET(AM.gThreadBucketSize, LONG);
1476 R_SET(AM.gSizeCommuteInSet,
int);
1477 R_SET(AM.gThreadStats,
int);
1478 R_SET(AM.gFinalStats,
int);
1479 R_SET(AM.gThreadsFlag,
int);
1480 R_SET(AM.gThreadBalancing,
int);
1481 R_SET(AM.gThreadSortFileSynch,
int);
1482 R_SET(AM.gProcessStats,
int);
1483 R_SET(AM.gOldParallelStats,
int);
1484 R_SET(AM.gSortType,
int);
1485 R_SET(AM.gShortStatsMax, WORD);
1486 R_SET(AM.gIsFortran90,
int);
1487 R_SET(oldAMdollarzero,
void*);
1488 R_FREE(AM.gFortran90Kind);
1489 R_SET(AM.gFortran90Kind,UBYTE *);
1490 R_COPY_S(AM.gFortran90Kind,UBYTE *);
1492 R_COPY_S(AM.gextrasym,UBYTE *);
1493 R_COPY_S(AM.ggextrasym,UBYTE *);
1495 R_SET(AM.PrintTotalSize,
int);
1496 R_SET(AM.fbuffersize,
int);
1497 R_SET(AM.gOldFactArgFlag,
int);
1498 R_SET(AM.ggOldFactArgFlag,
int);
1500 R_SET(AM.gnumextrasym,
int);
1501 R_SET(AM.ggnumextrasym,
int);
1502 R_SET(AM.NumSpectatorFiles,
int);
1503 R_SET(AM.SizeForSpectatorFiles,
int);
1504 R_SET(AM.gOldGCDflag,
int);
1505 R_SET(AM.ggOldGCDflag,
int);
1506 R_SET(AM.gWTimeStatsFlag,
int);
1509 R_SET(AM.Path,UBYTE *);
1510 R_COPY_S(AM.Path,UBYTE *);
1512 R_SET(AM.FromStdin, BOOL);
1513 R_SET(AM.IgnoreDeprecation, BOOL);
1527 R_FREE_NAMETREE(AC.dollarnames);
1528 R_FREE_NAMETREE(AC.exprnames);
1529 R_FREE_NAMETREE(AC.varnames);
1530 for ( i=0; i<AC.ChannelList.num; ++i ) {
1531 R_FREE(channels[i].name);
1533 R_FREE(AC.ChannelList.lijst);
1534 R_FREE(AC.DubiousList.lijst);
1535 for ( i=0; i<AC.FunctionList.num; ++i ) {
1536 TABLES T = functions[i].tabl;
1560 R_FREE(AC.FunctionList.lijst);
1561 for ( i=0; i<AC.ExpressionList.num; ++i ) {
1562 if ( Expressions[i].renum ) {
1563 R_FREE(Expressions[i].renum->symb.lo);
1564 R_FREE(Expressions[i].renum);
1566 if ( Expressions[i].bracketinfo ) {
1567 R_FREE(Expressions[i].bracketinfo->indexbuffer);
1568 R_FREE(Expressions[i].bracketinfo->bracketbuffer);
1569 R_FREE(Expressions[i].bracketinfo);
1571 if ( Expressions[i].newbracketinfo ) {
1572 R_FREE(Expressions[i].newbracketinfo->indexbuffer);
1573 R_FREE(Expressions[i].newbracketinfo->bracketbuffer);
1574 R_FREE(Expressions[i].newbracketinfo);
1576 if ( Expressions[i].renumlists != AN.dummyrenumlist ) {
1577 R_FREE(Expressions[i].renumlists);
1579 R_FREE(Expressions[i].inmem);
1581 R_FREE(AC.ExpressionList.lijst);
1582 R_FREE(AC.IndexList.lijst);
1583 R_FREE(AC.SetElementList.lijst);
1584 R_FREE(AC.SetList.lijst);
1585 R_FREE(AC.SymbolList.lijst);
1586 R_FREE(AC.VectorList.lijst);
1587 for ( i=0; i<AC.TableBaseList.num; ++i ) {
1588 R_FREE(tablebases[i].iblocks);
1589 R_FREE(tablebases[i].nblocks);
1590 R_FREE(tablebases[i].name);
1591 R_FREE(tablebases[i].fullname);
1592 R_FREE(tablebases[i].tablenames);
1594 R_FREE(AC.TableBaseList.lijst);
1595 for ( i=0; i<AC.cbufList.num; ++i ) {
1596 R_FREE(cbuf[i].Buffer);
1597 R_FREE(cbuf[i].lhs);
1598 R_FREE(cbuf[i].rhs);
1599 R_FREE(cbuf[i].boomlijst);
1601 R_FREE(AC.cbufList.lijst);
1602 R_FREE(AC.AutoSymbolList.lijst);
1603 R_FREE(AC.AutoIndexList.lijst);
1604 R_FREE(AC.AutoVectorList.lijst);
1606 R_FREE(AC.AutoFunctionList.lijst);
1607 R_FREE_NAMETREE(AC.autonames);
1608 for ( i=0; i<AC.NumStreams; ++i ) {
1609 R_FREE_STREAM(AC.Streams[i]);
1612 R_FREE(AC.termstack);
1613 R_FREE(AC.termsortstack);
1615 R_FREE(AC.modpowers);
1620 for ( i=0; i<AC.NumLabels; ++i ) {
1621 R_FREE(AC.LabelNames[i]);
1623 R_FREE(AC.LabelNames);
1624 R_FREE(AC.FixIndices);
1625 R_FREE(AC.termsumcheck);
1626 R_FREE(AC.WildcardNames);
1628 R_FREE(AC.tokenarglevel);
1629 R_FREE(AC.modinverses);
1630 R_FREE(AC.Fortran90Kind);
1632 R_FREE(AC.inputnumbers);
1634 R_FREE(AC.IfSumCheck);
1635 R_FREE(AC.CommuteInSet);
1636 R_FREE(AC.CheckpointRunAfter);
1637 R_FREE(AC.CheckpointRunBefore);
1642 PotModDolListBackup = AC.PotModDolList;
1643 ModOptDolListBackup = AC.ModOptDolList;
1644 oldLogHandle = AC.LogHandle;
1649 AC = *((
struct C_const*)p); p = (
unsigned char*)p +
sizeof(
struct C_const);
1651 R_COPY_NAMETREE(AC.dollarnames);
1652 R_COPY_NAMETREE(AC.exprnames);
1653 R_COPY_NAMETREE(AC.varnames);
1655 R_COPY_LIST(AC.ChannelList);
1656 for ( i=0; i<AC.ChannelList.num; ++i ) {
1657 R_COPY_S(channels[i].name,
char*);
1658 channels[i].handle = ReOpenFile(channels[i].name);
1660 AC.ChannelList.message =
"channel buffer";
1662 AC.DubiousList.lijst = 0;
1663 AC.DubiousList.message =
"ambiguous variable";
1664 AC.DubiousList.num =
1665 AC.DubiousList.maxnum =
1666 AC.DubiousList.numglobal =
1667 AC.DubiousList.numtemp =
1668 AC.DubiousList.numclear = 0;
1670 R_COPY_LIST(AC.FunctionList);
1671 for ( i=0; i<AC.FunctionList.num; ++i ) {
1672 if ( functions[i].tabl ) {
1675 functions[i].tabl = tabl;
1684 TABLEEXTENSION*
sizeof(WORD)*(tabl->
totind), WORD*);
1691 for ( j=0; j<AM.totalnumberofthreads; ++j ) {
1698 for ( j=0; j<AM.totalnumberofthreads; ++j ) {
1712 R_COPY_B(tabl->
flags, tabl->
numind*(LONG)
sizeof(WORD), WORD*);
1715 R_COPY_S(tabl->
argtail,UBYTE*);
1718 if ( tabl->
spare ) {
1721 tabl->
spare = spare;
1730 TABLEEXTENSION*
sizeof(WORD)*(spare->
totind), WORD*);
1736 R_COPY_B(spare->
flags, spare->
numind*(LONG)
sizeof(WORD), WORD*);
1741 spare->
spare = tabl;
1746 AC.FunctionList.message =
"function";
1748 R_COPY_LIST(AC.ExpressionList);
1749 for ( i=0; i<AC.ExpressionList.num; ++i ) {
1753 org = (UBYTE*)ex->renum->
symb.
lo;
1754 R_SET(size,
size_t);
1755 R_COPY_B(ex->renum->
symb.
lo, size, WORD*);
1756 ofs = (UBYTE*)ex->renum->
symb.
lo - org;
1758 ex->renum->
symb.
hi = (WORD*)((UBYTE*)ex->renum->
symb.
hi + ofs);
1759 ex->renum->
indi.
lo = (WORD*)((UBYTE*)ex->renum->
indi.
lo + ofs);
1761 ex->renum->
indi.
hi = (WORD*)((UBYTE*)ex->renum->
indi.
hi + ofs);
1762 ex->renum->
vect.
lo = (WORD*)((UBYTE*)ex->renum->
vect.
lo + ofs);
1764 ex->renum->
vect.
hi = (WORD*)((UBYTE*)ex->renum->
vect.
hi + ofs);
1765 ex->renum->
func.
lo = (WORD*)((UBYTE*)ex->renum->
func.
lo + ofs);
1767 ex->renum->
func.
hi = (WORD*)((UBYTE*)ex->renum->
func.
hi + ofs);
1768 ex->renum->
symnum = (WORD*)((UBYTE*)ex->renum->
symnum + ofs);
1769 ex->renum->
indnum = (WORD*)((UBYTE*)ex->renum->
indnum + ofs);
1770 ex->renum->
vecnum = (WORD*)((UBYTE*)ex->renum->
vecnum + ofs);
1771 ex->renum->
funnum = (WORD*)((UBYTE*)ex->renum->
funnum + ofs);
1773 if ( ex->bracketinfo ) {
1776 R_COPY_B(ex->bracketinfo->
bracketbuffer, ex->bracketinfo->bracketbuffersize*
sizeof(WORD), WORD*);
1778 if ( ex->newbracketinfo ) {
1781 R_COPY_B(ex->newbracketinfo->
bracketbuffer, ex->newbracketinfo->bracketbuffersize*
sizeof(WORD), WORD*);
1789 R_SET(size,
size_t);
1790 R_COPY_B(ex->inmem, size, WORD*);
1793 AC.ExpressionList.message =
"expression";
1795 R_COPY_LIST(AC.IndexList);
1796 AC.IndexList.message =
"index";
1797 R_COPY_LIST(AC.SetElementList);
1798 AC.SetElementList.message =
"set element";
1799 R_COPY_LIST(AC.SetList);
1800 AC.SetList.message =
"set";
1801 R_COPY_LIST(AC.SymbolList);
1802 AC.SymbolList.message =
"symbol";
1803 R_COPY_LIST(AC.VectorList);
1804 AC.VectorList.message =
"vector";
1806 AC.PotModDolList = PotModDolListBackup;
1807 AC.ModOptDolList = ModOptDolListBackup;
1809 R_COPY_LIST(AC.TableBaseList);
1810 for ( i=0; i<AC.TableBaseList.num; ++i ) {
1811 if ( tablebases[i].iblocks ) {
1812 R_COPY_B(tablebases[i].iblocks, tablebases[i].info.numberofindexblocks*
sizeof(
INDEXBLOCK*),
INDEXBLOCK**);
1813 for ( j=0; j<tablebases[i].info.numberofindexblocks; ++j ) {
1814 if ( tablebases[i].iblocks[j] ) {
1819 if ( tablebases[i].nblocks ) {
1820 R_COPY_B(tablebases[i].nblocks, tablebases[i].info.numberofnamesblocks*
sizeof(
NAMESBLOCK*),
NAMESBLOCK**);
1821 for ( j=0; j<tablebases[i].info.numberofindexblocks; ++j ) {
1822 if ( tablebases[i].nblocks[j] ) {
1828 if ( ( tablebases[i].handle = fopen(tablebases[i].fullname,
"r+b") ) == NULL ) {
1829 MesPrint(
"ERROR: Could not reopen tablebase %s!",tablebases[i].name);
1832 R_COPY_S(tablebases[i].name,
char*);
1833 R_COPY_S(tablebases[i].fullname,
char*);
1834 R_COPY_S(tablebases[i].tablenames,
char*);
1836 AC.TableBaseList.message =
"list of tablebases";
1838 R_COPY_LIST(AC.cbufList);
1839 for ( i=0; i<AC.cbufList.num; ++i ) {
1840 org = (UBYTE*)cbuf[i].Buffer;
1841 R_COPY_B(cbuf[i].Buffer, cbuf[i].BufferSize*
sizeof(WORD), WORD*);
1842 ofs = (UBYTE*)cbuf[i].Buffer - org;
1843 cbuf[i].Top = (WORD*)((UBYTE*)cbuf[i].Top + ofs);
1844 cbuf[i].Pointer = (WORD*)((UBYTE*)cbuf[i].Pointer + ofs);
1845 R_COPY_B(cbuf[i].lhs, cbuf[i].maxlhs*(LONG)
sizeof(WORD*), WORD**);
1846 for ( j=1; j<=cbuf[i].numlhs; ++j ) {
1847 if ( cbuf[i].lhs[j] ) cbuf[i].lhs[j] = (WORD*)((UBYTE*)cbuf[i].lhs[j] + ofs);
1849 org = (UBYTE*)cbuf[i].rhs;
1850 R_COPY_B(cbuf[i].rhs, cbuf[i].maxrhs*(LONG)(
sizeof(WORD*)+2*
sizeof(LONG)+2*
sizeof(WORD)), WORD**);
1851 for ( j=1; j<=cbuf[i].numrhs; ++j ) {
1852 if ( cbuf[i].rhs[j] ) cbuf[i].rhs[j] = (WORD*)((UBYTE*)cbuf[i].rhs[j] + ofs);
1854 ofs = (UBYTE*)cbuf[i].rhs - org;
1855 cbuf[i].CanCommu = (LONG*)((UBYTE*)cbuf[i].CanCommu + ofs);
1856 cbuf[i].NumTerms = (LONG*)((UBYTE*)cbuf[i].NumTerms + ofs);
1857 cbuf[i].numdum = (WORD*)((UBYTE*)cbuf[i].numdum + ofs);
1858 cbuf[i].dimension = (WORD*)((UBYTE*)cbuf[i].dimension + ofs);
1859 if ( cbuf[i].boomlijst ) {
1860 R_COPY_B(cbuf[i].boomlijst, cbuf[i].MaxTreeSize*
sizeof(
COMPTREE),
COMPTREE*);
1863 AC.cbufList.message =
"compiler buffer";
1865 R_COPY_LIST(AC.AutoSymbolList);
1866 AC.AutoSymbolList.message =
"autosymbol";
1867 R_COPY_LIST(AC.AutoIndexList);
1868 AC.AutoIndexList.message =
"autoindex";
1869 R_COPY_LIST(AC.AutoVectorList);
1870 AC.AutoVectorList.message =
"autovector";
1871 R_COPY_LIST(AC.AutoFunctionList);
1872 AC.AutoFunctionList.message =
"autofunction";
1874 R_COPY_NAMETREE(AC.autonames);
1876 AC.Symbols = &(AC.SymbolList);
1877 AC.Indices = &(AC.IndexList);
1878 AC.Vectors = &(AC.VectorList);
1879 AC.Functions = &(AC.FunctionList);
1880 AC.activenames = &(AC.varnames);
1882 org = (UBYTE*)AC.Streams;
1883 R_COPY_B(AC.Streams, AC.MaxNumStreams*(LONG)
sizeof(
STREAM),
STREAM*);
1884 for ( i=0; i<AC.NumStreams; ++i ) {
1885 if ( AC.Streams[i].type != FILESTREAM ) {
1887 org2 = AC.Streams[i].buffer;
1888 if ( AC.Streams[i].inbuffer ) {
1889 R_COPY_B(AC.Streams[i].buffer, AC.Streams[i].inbuffer, UBYTE*);
1891 ofs = AC.Streams[i].buffer - org2;
1892 AC.Streams[i].pointer += ofs;
1893 AC.Streams[i].top += ofs;
1896 p = (
unsigned char*)p + AC.Streams[i].inbuffer;
1898 AC.Streams[i].buffersize = AC.Streams[i].inbuffer;
1899 R_COPY_S(AC.Streams[i].FoldName,UBYTE*);
1900 R_COPY_S(AC.Streams[i].name,UBYTE*);
1901 if ( AC.Streams[i].type == PREVARSTREAM || AC.Streams[i].type == DOLLARSTREAM ) {
1902 AC.Streams[i].pname = AC.Streams[i].name;
1904 else if ( AC.Streams[i].type == FILESTREAM ) {
1906 org2 = AC.Streams[i].buffer;
1907 AC.Streams[i].buffer = (UBYTE*)Malloc1(AC.Streams[i].buffersize,
"buffer");
1908 ofs = AC.Streams[i].buffer - org2;
1909 AC.Streams[i].pointer += ofs;
1910 AC.Streams[i].top += ofs;
1914 AC.Streams[i].handle = OpenFile((
char *)(AC.Streams[i].name));
1915 if ( AC.Streams[i].handle == -1 ) {
1916 MesPrint(
"ERROR: Could not reopen stream %s!",AC.Streams[i].name);
1922 ADDPOS(pos, AC.Streams[i].bufferposition);
1923 SeekFile(AC.Streams[i].handle, &pos, SEEK_SET);
1925 AC.Streams[i].inbuffer = ReadFile(AC.Streams[i].handle, AC.Streams[i].buffer, AC.Streams[i].inbuffer);
1927 SETBASEPOSITION(pos, AC.Streams[i].fileposition);
1928 SeekFile(AC.Streams[i].handle, &pos, SEEK_SET);
1940 ofs = (UBYTE*)AC.Streams - org;
1941 AC.CurrentStream = (
STREAM*)((UBYTE*)AC.CurrentStream + ofs);
1943 if ( AC.termstack ) {
1944 R_COPY_B(AC.termstack, AC.maxtermlevel*(LONG)
sizeof(LONG), LONG*);
1947 if ( AC.termsortstack ) {
1948 R_COPY_B(AC.termsortstack, AC.maxtermlevel*(LONG)
sizeof(LONG), LONG*);
1952 R_COPY_B(AC.cmod, AM.MaxTal*4*(LONG)
sizeof(UWORD), UWORD*);
1953 AM.gcmod = AC.cmod + AM.MaxTal;
1954 AC.powmod = AM.gcmod + AM.MaxTal;
1955 AM.gpowmod = AC.powmod + AM.MaxTal;
1963 ofs = AC.IfStack - AC.IfHeap;
1964 R_COPY_B(AC.IfHeap, (LONG)
sizeof(LONG)*(AC.MaxIf+1), LONG*);
1965 AC.IfStack = AC.IfHeap + ofs;
1966 R_COPY_B(AC.IfCount, (LONG)
sizeof(LONG)*(AC.MaxIf+1), LONG*);
1970 size = AC.iStop - AC.iBuffer + 2;
1971 R_COPY_B(AC.iBuffer, size, UBYTE*);
1972 ofs = AC.iBuffer - org;
1976 if ( AC.LabelNames ) {
1977 org = (UBYTE*)AC.LabelNames;
1978 R_COPY_B(AC.LabelNames, AC.MaxLabels*(LONG)(
sizeof(UBYTE*)+
sizeof(WORD)), UBYTE**);
1979 for ( i=0; i<AC.NumLabels; ++i ) {
1980 R_COPY_S(AC.LabelNames[i],UBYTE*);
1982 ofs = (UBYTE*)AC.LabelNames - org;
1983 AC.Labels = (
int*)((UBYTE*)AC.Labels + ofs);
1986 R_COPY_B(AC.FixIndices, AM.OffsetIndex*(LONG)
sizeof(WORD), WORD*);
1988 if ( AC.termsumcheck ) {
1989 R_COPY_B(AC.termsumcheck, AC.maxtermlevel*(LONG)
sizeof(WORD), WORD*);
1992 R_COPY_B(AC.WildcardNames, AC.WildcardBufferSize, UBYTE*);
1995 size = AC.toptokens - AC.tokens;
1997 org = (UBYTE*)AC.tokens;
1998 R_COPY_B(AC.tokens, size, SBYTE*);
1999 ofs = (UBYTE*)AC.tokens - org;
2000 AC.endoftokens += ofs;
2001 AC.toptokens += ofs;
2005 AC.endoftokens = AC.tokens;
2006 AC.toptokens = AC.tokens;
2010 R_COPY_B(AC.tokenarglevel, AM.MaxParLevel*(LONG)
sizeof(WORD), WORD*);
2014 R_COPY_S(AC.Fortran90Kind,UBYTE *);
2017 if ( AC.inputnumbers ) {
2018 org = (UBYTE*)AC.inputnumbers;
2019 R_COPY_B(AC.inputnumbers, AC.sizepfirstnum*(LONG)(
sizeof(WORD)+
sizeof(LONG)), LONG*);
2020 ofs = (UBYTE*)AC.inputnumbers - org;
2021 AC.pfirstnum = (WORD*)((UBYTE*)AC.pfirstnum + ofs);
2023 AC.halfmodlock = dummylock;
2026 if ( AC.IfSumCheck ) {
2027 R_COPY_B(AC.IfSumCheck, (LONG)
sizeof(WORD)*(AC.MaxIf+1), WORD*);
2029 if ( AC.CommuteInSet ) {
2030 R_COPY_B(AC.CommuteInSet, (LONG)
sizeof(WORD)*(AC.SizeCommuteInSet+1), WORD*);
2033 AC.LogHandle = oldLogHandle;
2035 R_COPY_S(AC.CheckpointRunAfter,
char*);
2036 R_COPY_S(AC.CheckpointRunBefore,
char*);
2038 R_COPY_S(AC.extrasym,UBYTE *);
2052 for ( i=0; i<AP.DollarList.num; ++i ) {
2053 if ( Dollars[i].size ) {
2054 R_FREE(Dollars[i].where);
2056 CleanDollarFactors(Dollars+i);
2058 R_FREE(AP.DollarList.lijst);
2060 for ( i=0; i<AP.PreVarList.num; ++i ) {
2061 R_FREE(PreVar[i].name);
2063 R_FREE(AP.PreVarList.lijst);
2065 for ( i=0; i<AP.LoopList.num; ++i ) {
2066 R_FREE(DoLoops[i].p.buffer);
2067 if ( DoLoops[i].dollarname ) {
2068 R_FREE(DoLoops[i].dollarname);
2071 R_FREE(AP.LoopList.lijst);
2073 for ( i=0; i<AP.ProcList.num; ++i ) {
2074 R_FREE(Procedures[i].p.buffer);
2075 R_FREE(Procedures[i].name);
2077 R_FREE(AP.ProcList.lijst);
2079 for ( i=1; i<=AP.PreSwitchLevel; ++i ) {
2080 R_FREE(AP.PreSwitchStrings[i]);
2082 R_FREE(AP.PreSwitchStrings);
2083 R_FREE(AP.preStart);
2084 R_FREE(AP.procedureExtension);
2085 R_FREE(AP.cprocedureExtension);
2086 R_FREE(AP.PreIfStack);
2087 R_FREE(AP.PreSwitchModes);
2088 R_FREE(AP.PreTypes);
2095 AP = *((
struct P_const*)p); p = (
unsigned char*)p +
sizeof(
struct P_const);
2097 AP.PreVarLock = dummylock;
2100 R_COPY_LIST(AP.DollarList);
2101 for ( i=0; i<AP.DollarList.num; ++i ) {
2103 size = d->size *
sizeof(WORD);
2104 if ( size && d->where && d->where != oldAMdollarzero ) {
2105 R_COPY_B(d->where, size,
void*);
2108 INIRECLOCK(d->pthreadslock);
2110 if ( d->nfactors > 1 ) {
2112 for ( j = 0; j < d->nfactors; j++ ) {
2113 if ( d->factors[j].size > 0 ) {
2114 R_COPY_B(d->factors[i].where,
sizeof(WORD)*(d->factors[j].size+1),WORD*);
2119 AP.DollarList.message =
"$-variable";
2121 R_COPY_LIST(AP.PreVarList);
2122 for ( i=0; i<AP.PreVarList.num; ++i ) {
2123 R_SET(size,
size_t);
2124 org = PreVar[i].name;
2125 R_COPY_B(PreVar[i].name, size, UBYTE*);
2126 ofs = PreVar[i].name - org;
2127 if ( PreVar[i].value ) PreVar[i].value += ofs;
2128 if ( PreVar[i].argnames ) PreVar[i].argnames += ofs;
2130 AP.PreVarList.message =
"PreVariable";
2132 R_COPY_LIST(AP.LoopList);
2133 for ( i=0; i<AP.LoopList.num; ++i ) {
2134 org = DoLoops[i].p.buffer;
2135 R_COPY_B(DoLoops[i].p.buffer, DoLoops[i].p.size, UBYTE*);
2136 ofs = DoLoops[i].p.buffer - org;
2137 if ( DoLoops[i].name ) DoLoops[i].name += ofs;
2138 if ( DoLoops[i].vars ) DoLoops[i].vars += ofs;
2139 if ( DoLoops[i].contents ) DoLoops[i].contents += ofs;
2140 if ( DoLoops[i].type == ONEEXPRESSION ) {
2141 R_COPY_S(DoLoops[i].dollarname,UBYTE*);
2144 AP.LoopList.message =
"doloop";
2146 R_COPY_LIST(AP.ProcList);
2147 for ( i=0; i<AP.ProcList.num; ++i ) {
2148 if ( Procedures[i].p.size ) {
2149 if ( Procedures[i].loadmode != 1 ) {
2150 R_COPY_B(Procedures[i].p.buffer, Procedures[i].p.size, UBYTE*);
2154 Procedures[i].p.buffer = Procedures[j].p.buffer;
2157 R_COPY_S(Procedures[i].name,UBYTE*);
2159 AP.ProcList.message =
"procedure";
2161 size = (AP.NumPreSwitchStrings+1)*(LONG)
sizeof(UBYTE*);
2162 R_COPY_B(AP.PreSwitchStrings, size, UBYTE**);
2163 for ( i=1; i<=AP.PreSwitchLevel; ++i ) {
2164 R_COPY_S(AP.PreSwitchStrings[i],UBYTE*);
2168 R_COPY_B(AP.preStart, AP.pSize, UBYTE*);
2169 ofs = AP.preStart - org;
2170 if ( AP.preFill ) AP.preFill += ofs;
2171 if ( AP.preStop ) AP.preStop += ofs;
2173 R_COPY_S(AP.procedureExtension,UBYTE*);
2174 R_COPY_S(AP.cprocedureExtension,UBYTE*);
2176 R_COPY_B(AP.PreAssignStack,AP.MaxPreAssignLevel*(LONG)
sizeof(LONG),LONG*);
2177 R_COPY_B(AP.PreIfStack, AP.MaxPreIfLevel*(LONG)
sizeof(
int),
int*);
2178 R_COPY_B(AP.PreSwitchModes, (AP.NumPreSwitchStrings+1)*(LONG)
sizeof(
int),
int*);
2179 R_COPY_B(AP.PreTypes, (AP.MaxPreTypes+1)*(LONG)
sizeof(
int),
int*);
2190 AR.infile = AR.Fscr+1;
2191 AR.outfile = AR.Fscr;
2192 AR.hidefile = AR.Fscr+2;
2195 AR.infile = AR.Fscr;
2196 AR.outfile = AR.Fscr+1;
2197 AR.hidefile = AR.Fscr+2;
2205 namebufout = AR.outfile->name;
2206 namebufhide = AR.hidefile->name;
2207 R_FREE(AR.outfile->PObuffer);
2209 R_FREE(AR.outfile->zsp);
2210 R_FREE(AR.outfile->ziobuffer);
2212 namebufhide = AR.hidefile->name;
2213 R_FREE(AR.hidefile->PObuffer);
2215 R_FREE(AR.hidefile->zsp);
2216 R_FREE(AR.hidefile->ziobuffer);
2224 org = (UBYTE*)AR.outfile->PObuffer;
2225 size = AR.outfile->POfull - AR.outfile->PObuffer;
2226 AR.outfile->PObuffer = (WORD*)Malloc1(AR.outfile->POsize,
"PObuffer");
2228 memcpy(AR.outfile->PObuffer, p, size*
sizeof(WORD));
2229 p = (
unsigned char*)p + size*
sizeof(WORD);
2231 ofs = (UBYTE*)AR.outfile->PObuffer - org;
2232 AR.outfile->POstop = (WORD*)((UBYTE*)AR.outfile->POstop + ofs);
2233 AR.outfile->POfill = (WORD*)((UBYTE*)AR.outfile->POfill + ofs);
2234 AR.outfile->POfull = (WORD*)((UBYTE*)AR.outfile->POfull + ofs);
2235 AR.outfile->name = namebufout;
2237 AR.outfile->wPObuffer = AR.outfile->PObuffer;
2238 AR.outfile->wPOstop = AR.outfile->POstop;
2239 AR.outfile->wPOfill = AR.outfile->POfill;
2240 AR.outfile->wPOfull = AR.outfile->POfull;
2244 AR.outfile->zsp = 0;
2245 AR.outfile->ziobuffer = 0;
2251 if ( AR.outfile->handle >= 0 ) {
2252 if (
CopyFile(sortfile, AR.outfile->name) ) {
2253 MesPrint(
"ERROR: Could not copy old output sort file %s!",sortfile);
2256 AR.outfile->handle = ReOpenFile(AR.outfile->name);
2257 if ( AR.outfile->handle == -1 ) {
2258 MesPrint(
"ERROR: Could not reopen output sort file %s!",AR.outfile->name);
2261 SeekFile(AR.outfile->handle, &AR.outfile->POposition, SEEK_SET);
2266 AR.hidefile->name = namebufhide;
2267 if ( AR.hidefile->PObuffer ) {
2268 org = (UBYTE*)AR.hidefile->PObuffer;
2269 size = AR.hidefile->POfull - AR.hidefile->PObuffer;
2270 AR.hidefile->PObuffer = (WORD*)Malloc1(AR.hidefile->POsize,
"PObuffer");
2272 memcpy(AR.hidefile->PObuffer, p, size*
sizeof(WORD));
2273 p = (
unsigned char*)p + size*
sizeof(WORD);
2275 ofs = (UBYTE*)AR.hidefile->PObuffer - org;
2276 AR.hidefile->POstop = (WORD*)((UBYTE*)AR.hidefile->POstop + ofs);
2277 AR.hidefile->POfill = (WORD*)((UBYTE*)AR.hidefile->POfill + ofs);
2278 AR.hidefile->POfull = (WORD*)((UBYTE*)AR.hidefile->POfull + ofs);
2280 AR.hidefile->wPObuffer = AR.hidefile->PObuffer;
2281 AR.hidefile->wPOstop = AR.hidefile->POstop;
2282 AR.hidefile->wPOfill = AR.hidefile->POfill;
2283 AR.hidefile->wPOfull = AR.hidefile->POfull;
2288 AR.hidefile->zsp = 0;
2289 AR.hidefile->ziobuffer = 0;
2292 if ( AR.hidefile->handle >= 0 ) {
2293 if (
CopyFile(hidefile, AR.hidefile->name) ) {
2294 MesPrint(
"ERROR: Could not copy old hide file %s!",hidefile);
2297 AR.hidefile->handle = ReOpenFile(AR.hidefile->name);
2298 if ( AR.hidefile->handle == -1 ) {
2299 MesPrint(
"ERROR: Could not reopen hide file %s!",AR.hidefile->name);
2302 SeekFile(AR.hidefile->handle, &AR.hidefile->POposition, SEEK_SET);
2307 if ( ISNOTZEROPOS(pos) ) {
2308 CloseFile(AR.StoreData.Handle);
2310 if (
CopyFile(storefile, FG.fname) ) {
2311 MesPrint(
"ERROR: Could not copy old store file %s!",storefile);
2314 AR.StoreData.Handle = (WORD)ReOpenFile(FG.fname);
2315 SeekFile(AR.StoreData.Handle, &AR.StoreData.Position, SEEK_SET);
2319 R_SET(AR.OldTime, LONG);
2320 R_SET(AR.InInBuf, LONG);
2321 R_SET(AR.InHiBuf, LONG);
2323 R_SET(AR.NoCompress,
int);
2324 R_SET(AR.gzipCompress,
int);
2326 R_SET(AR.outtohide,
int);
2328 R_SET(AR.GetFile, WORD);
2329 R_SET(AR.KeptInHold, WORD);
2330 R_SET(AR.BracketOn, WORD);
2331 R_SET(AR.MaxBracket, WORD);
2332 R_SET(AR.CurDum, WORD);
2333 R_SET(AR.DeferFlag, WORD);
2334 R_SET(AR.TePos, WORD);
2335 R_SET(AR.sLevel, WORD);
2336 R_SET(AR.Stage4Name, WORD);
2337 R_SET(AR.GetOneFile, WORD);
2338 R_SET(AR.PolyFun, WORD);
2339 R_SET(AR.PolyFunInv, WORD);
2340 R_SET(AR.PolyFunType, WORD);
2341 R_SET(AR.PolyFunExp, WORD);
2342 R_SET(AR.PolyFunVar, WORD);
2343 R_SET(AR.PolyFunPow, WORD);
2344 R_SET(AR.Eside, WORD);
2345 R_SET(AR.MaxDum, WORD);
2346 R_SET(AR.level, WORD);
2347 R_SET(AR.expchanged, WORD);
2348 R_SET(AR.expflags, WORD);
2349 R_SET(AR.CurExpr, WORD);
2350 R_SET(AR.SortType, WORD);
2351 R_SET(AR.ShortSortCount, WORD);
2356 AR.CompressPointer = AR.CompressBuffer;
2359 for ( j = 0; j < AM.totalnumberofthreads; j++ ) {
2360 R_SET(AB[j]->R.wranfnpair1,
int);
2361 R_SET(AB[j]->R.wranfnpair2,
int);
2362 R_SET(AB[j]->R.wranfcall,
int);
2363 R_SET(AB[j]->R.wranfseed, ULONG);
2364 R_SET(AB[j]->R.wranfia,ULONG*);
2365 if ( AB[j]->R.wranfia ) {
2366 R_COPY_B(AB[j]->R.wranfia,
sizeof(ULONG)*AB[j]->R.wranfnpair2, ULONG*);
2370 R_SET(AR.wranfnpair1,
int);
2371 R_SET(AR.wranfnpair2,
int);
2372 R_SET(AR.wranfcall,
int);
2373 R_SET(AR.wranfseed, ULONG);
2374 R_SET(AR.wranfia,ULONG*);
2376 R_COPY_B(AR.wranfia,
sizeof(ULONG)*AR.wranfnpair2, ULONG*);
2389 l =
sizeof(A.O) - ((UBYTE *)(&(A.O.NumInBrack))-(UBYTE *)(&A.O));
2390 memcpy(&(A.O.NumInBrack), p, l); p = (
unsigned char*)p + l;
2397 if ( A.O.OptimizeResult.codesize > 0 ) {
2398 R_COPY_B(A.O.OptimizeResult.code,A.O.OptimizeResult.codesize*
sizeof(WORD),WORD *);
2400 R_COPY_S(A.O.OptimizeResult.nameofexpr,UBYTE *);
2405 if ( AO.SizeDictionaries > 0 ) {
2408 for ( i = 0; i < AO.NumDictionaries; i++ ) {
2410 AO.Dictionaries[i] = DictFromBytes(p);
2419 R_SET(numtasks,
int);
2420 if(numtasks!=PF.numtasks){
2421 MesPrint(
"%d number of tasks expected instead of %d; use mpirun -np %d",
2422 numtasks,PF.numtasks,numtasks);
2428 R_SET(PF.rhsInParallel,
int);
2429 R_SET(PF.exprbufsize,
int);
2437 for ( j=1; j<AM.totalnumberofthreads; ++j ) {
2439 AB[j]->R.OldTime = -(*((LONG*)p+j));
2441 WriteTimerInfo((LONG*)p,(LONG *)((
unsigned char*)p + i*(LONG)
sizeof(LONG)));
2442 p = (
unsigned char*)p + 2*i*(LONG)
sizeof(LONG);
2445 if ( fclose(fd) )
return(__LINE__);
2447 M_free(buf,
"recovery buffer");
2458 MesPrint(
"done."); fflush(0);