105 #define BASENAME_FMT "%c%04dFORMrecv" 111 static char BaseName[] = BASENAME_FMT;
113 static char *BaseName =
"FORMrecv";
118 static char *recoveryfile = 0;
124 static char *intermedfile = 0;
128 static char *sortfile = 0;
132 static char *hidefile = 0;
136 static char *storefile = 0;
142 static int done_snapshot = 0;
149 static int PF_fmt_pos;
155 static const char *PF_recoveryfile(
char prefix,
int id,
int intermed)
161 static char *tmp_recovery = NULL;
162 static char *tmp_intermed = NULL;
164 if ( tmp_recovery == NULL ) {
165 if ( PF.numtasks > 9999 ) {
166 MesPrint(
"Checkpoint: too many number of processors.");
169 tmp_recovery = (
char *)Malloc1(strlen(recoveryfile) + strlen(intermedfile) + 2,
"PF_recoveryfile");
170 tmp_intermed = tmp_recovery + strlen(recoveryfile) + 1;
171 strcpy(tmp_recovery, recoveryfile);
172 strcpy(tmp_intermed, intermedfile);
174 tmp = intermed ? tmp_intermed : tmp_recovery;
175 c = tmp[PF_fmt_pos + 13];
176 sprintf(tmp + PF_fmt_pos, BASENAME_FMT, prefix,
id);
177 tmp[PF_fmt_pos + 13] = c;
198 static int PF_CheckRecoveryFile()
203 if ( PF.me == MASTER ) {
204 if ( (fd = fopen(recoveryfile,
"r")) ) {
218 if (PF.me == MASTER){
220 for(i=1; i<PF.numtasks;i++){
221 const char *tmpnam = PF_recoveryfile(
'm', i, 0);
222 if ( (fd = fopen(tmpnam,
"r")) )
230 for(j=1; j<PF.numtasks;j++){
238 MesPrint(
"The file %s exists but some of the slave recovery files are absent.",
244 for(i=1; i<PF.numtasks;i++){
245 const char *tmpnam = PF_recoveryfile(
'm', i, 0);
246 fd = fopen(tmpnam,
"r");
259 fd=fopen(recoveryfile,
"w");
261 MesPrint(
"Failed to open %s in write mode in process %w", recoveryfile);
270 remove(recoveryfile);
282 ret = PF_CheckRecoveryFile();
285 if ( (fd = fopen(recoveryfile,
"r")) ) {
291 MesPrint(
"Fail checking recovery file");
294 else if ( ret > 0 ) {
295 if ( AC.CheckpointFlag != -1 ) {
298 if ( PF.me == MASTER ) {
300 MesPrint(
"The recovery file %s exists, but the recovery option -R has not been given!",
RecoveryFilename());
301 MesPrint(
"FORM will be terminated to avoid unintentional loss of data.");
302 MesPrint(
"Delete the recovery file manually, if you want to start FORM without recovery.");
312 if ( AC.CheckpointFlag == -1 ) {
315 if ( PF.me == MASTER )
317 MesPrint(
"Option -R for recovery has been given, but the recovery file %s does not exist!",
RecoveryFilename());
335 if ( done_snapshot ) {
336 remove(recoveryfile);
338 if( PF.me == MASTER){
340 for(i=1; i<PF.numtasks;i++){
341 const char *tmpnam = PF_recoveryfile(
'm', i, 0);
366 return(recoveryfile);
377 static char *InitName(
char *str,
char *ext)
381 s = (
char*)AM.TempDir;
382 while ( *s ) { *d++ = *s++; }
386 while ( *s ) { *d++ = *s++; }
389 while ( *s ) { *d++ = *s++; }
401 int lenpath = AM.TempDir ? strlen((
char*)AM.TempDir)+1 : 0;
403 sprintf(BaseName,BASENAME_FMT,(PF.me == MASTER)?
'm':
's',PF.me);
406 PF_fmt_pos = lenpath;
408 recoveryfile = (
char*)Malloc1(5*(lenpath+strlen(BaseName)+4+1),
"InitRecovery");
409 intermedfile = InitName(recoveryfile,
"tmp");
410 sortfile = InitName(intermedfile,
"XXX");
411 hidefile = InitName(sortfile,
"out");
412 storefile = InitName(hidefile,
"hid");
413 InitName(storefile,
"str");
423 void print_BYTE(
void *p)
425 UBYTE h = (UBYTE)(*((UBYTE*)p) >> 4);
426 UBYTE l = (UBYTE)(*((UBYTE*)p) & 0x0F);
427 if ( h > 9 ) h += 55;
else h += 48;
428 if ( l > 9 ) l += 55;
else l += 48;
429 printf(
"%c%c ", h, l);
432 static void print_STR(UBYTE *p)
435 MesPrint(
"%s", (
char*)p);
442 static void print_WORDB(WORD *buf, WORD *top)
447 if ( size > MAXPOSITIVE ) i = MAXPOSITIVE;
450 MesPrint(
"%a",i,buf);
455 static void print_VOIDP(
void *p,
size_t size)
460 if ( size > MAXPOSITIVE ) i = MAXPOSITIVE;
463 MesPrint(
"%b",i,(UBYTE *)p);
472 static void print_CHARS(UBYTE *p,
size_t size)
476 if ( size > MAXPOSITIVE ) i = MAXPOSITIVE;
479 MesPrint(
"%C",i,(
char *)p);
484 static void print_WORDV(WORD *p,
size_t size)
489 if ( size > MAXPOSITIVE ) i = MAXPOSITIVE;
501 static void print_INTV(
int *p,
size_t size)
508 MesPrint(
"%I",i,iarray);
514 if ( i > 0 ) MesPrint(
"%I",i,iarray);
521 static void print_LONGV(LONG *p,
size_t size)
528 MesPrint(
"%I",i,larray);
534 if ( i > 0 ) MesPrint(
"%I",i,larray);
541 static void print_PRELOAD(
PRELOAD *l)
544 print_CHARS(l->buffer, l->size);
546 MesPrint(
"%ld", l->size);
549 static void print_PREVAR(
PREVAR *l)
551 MesPrint(
"%s", l->
name);
554 MesPrint(
"%d", l->
nargs);
558 static void print_DOLLARS(
DOLLARS l)
560 print_VOIDP(l->where, l->size);
561 MesPrint(
"%ld", l->size);
562 MesPrint(
"%ld", l->name);
563 MesPrint(
"%s", AC.dollarnames->namebuffer+l->name);
564 MesPrint(
"%d", l->type);
565 MesPrint(
"%d", l->node);
566 MesPrint(
"%d", l->index);
567 MesPrint(
"%d", l->zero);
568 MesPrint(
"%d", l->numdummies);
569 MesPrint(
"%d", l->nfactors);
572 static void print_LIST(
LIST *l)
576 MesPrint(
"%d", l->
num);
577 MesPrint(
"%d", l->
maxnum);
578 MesPrint(
"%d", l->
size);
584 static void print_DOLOOP(
DOLOOP *l)
586 print_PRELOAD(&(l->
p));
588 if ( l->type != NUMERICALLOOP ) {
591 print_STR(l->contents);
592 if ( l->type != LISTEDLOOP && l->type != NUMERICALLOOP ) {
595 MesPrint(
"%l", l->startlinenumber);
596 MesPrint(
"%l", l->firstnum);
597 MesPrint(
"%l", l->lastnum);
598 MesPrint(
"%l", l->incnum);
599 MesPrint(
"%d", l->type);
600 MesPrint(
"%d", l->NoShowInput);
601 MesPrint(
"%d", l->errorsinloop);
602 MesPrint(
"%d", l->firstloopcall);
605 static void print_PROCEDURE(
PROCEDURE *l)
607 if ( l->loadmode != 1 ) {
608 print_PRELOAD(&(l->p));
611 MesPrint(
"%d", l->loadmode);
614 static void print_NAMETREE(
NAMETREE *t)
636 void print_CBUF(
CBUF *c)
645 for ( i=0; i<c->numlhs; ++i ) {
646 if ( c->
lhs[i]) MesPrint(
"%d", *(c->
lhs[i]));
648 for ( i=0; i<c->numrhs; ++i ) {
649 if ( c->
rhs[i]) MesPrint(
"%d", *(c->
rhs[i]));
653 MesPrint(
"%d", *c->
numdum);
654 for ( i=0; i<c->MaxTreeSize; ++i ) {
660 static void print_STREAM(
STREAM *t)
662 print_CHARS(t->
buffer, t->inbuffer);
666 if ( t->type == PREVARSTREAM || t->type == DOLLARSTREAM ) {
669 MesPrint(
"%l", (LONG)t->fileposition);
670 MesPrint(
"%l", (LONG)t->linenumber);
671 MesPrint(
"%l", (LONG)t->prevline);
672 MesPrint(
"%l", t->buffersize);
673 MesPrint(
"%l", t->bufferposition);
674 MesPrint(
"%l", t->inbuffer);
675 MesPrint(
"%d", t->previous);
676 MesPrint(
"%d", t->handle);
678 case FILESTREAM: MesPrint(
"%d == FILESTREAM", t->type);
break;
679 case PREVARSTREAM: MesPrint(
"%d == PREVARSTREAM", t->type);
break;
680 case PREREADSTREAM: MesPrint(
"%d == PREREADSTREAM", t->type);
break;
681 case PIPESTREAM: MesPrint(
"%d == PIPESTREAM", t->type);
break;
682 case PRECALCSTREAM: MesPrint(
"%d == PRECALCSTREAM", t->type);
break;
683 case DOLLARSTREAM: MesPrint(
"%d == DOLLARSTREAM", t->type);
break;
684 case PREREADSTREAM2: MesPrint(
"%d == PREREADSTREAM2", t->type);
break;
685 case EXTERNALCHANNELSTREAM: MesPrint(
"%d == EXTERNALCHANNELSTREAM", t->type);
break;
686 case PREREADSTREAM3: MesPrint(
"%d == PREREADSTREAM3", t->type);
break;
687 default: MesPrint(
"%d == UNKNOWN", t->type);
691 static void print_M()
693 MesPrint(
"%%%% M_const");
694 MesPrint(
"%d", *AM.gcmod);
695 MesPrint(
"%d", *AM.gpowmod);
696 print_STR(AM.TempDir);
697 print_STR(AM.TempSortDir);
698 print_STR(AM.IncDir);
699 print_STR(AM.InputFileName);
700 print_STR(AM.LogFileName);
701 print_STR(AM.OutBuffer);
703 print_STR(AM.SetupDir);
704 print_STR(AM.SetupFile);
705 MesPrint(
"--MARK 1");
706 MesPrint(
"%l", (LONG)BASEPOSITION(AM.zeropos));
708 MesPrint(
"%l", AM.ThreadScratSize);
709 MesPrint(
"%l", AM.ThreadScratOutSize);
711 MesPrint(
"%l", AM.MaxTer);
712 MesPrint(
"%l", AM.CompressSize);
713 MesPrint(
"%l", AM.ScratSize);
714 MesPrint(
"%l", AM.SizeStoreCache);
715 MesPrint(
"%l", AM.MaxStreamSize);
716 MesPrint(
"%l", AM.SIOsize);
717 MesPrint(
"%l", AM.SLargeSize);
718 MesPrint(
"%l", AM.SSmallEsize);
719 MesPrint(
"%l", AM.SSmallSize);
720 MesPrint(
"--MARK 2");
721 MesPrint(
"%l", AM.STermsInSmall);
722 MesPrint(
"%l", AM.MaxBracketBufferSize);
723 MesPrint(
"%l", AM.hProcessBucketSize);
724 MesPrint(
"%l", AM.gProcessBucketSize);
725 MesPrint(
"%l", AM.shmWinSize);
726 MesPrint(
"%l", AM.OldChildTime);
727 MesPrint(
"%l", AM.OldSecTime);
728 MesPrint(
"%l", AM.OldMilliTime);
729 MesPrint(
"%l", AM.WorkSize);
730 MesPrint(
"%l", AM.gThreadBucketSize);
731 MesPrint(
"--MARK 3");
732 MesPrint(
"%l", AM.ggThreadBucketSize);
733 MesPrint(
"%d", AM.FileOnlyFlag);
734 MesPrint(
"%d", AM.Interact);
735 MesPrint(
"%d", AM.MaxParLevel);
736 MesPrint(
"%d", AM.OutBufSize);
737 MesPrint(
"%d", AM.SMaxFpatches);
738 MesPrint(
"%d", AM.SMaxPatches);
739 MesPrint(
"%d", AM.StdOut);
740 MesPrint(
"%d", AM.ginsidefirst);
741 MesPrint(
"%d", AM.gDefDim);
742 MesPrint(
"%d", AM.gDefDim4);
743 MesPrint(
"--MARK 4");
744 MesPrint(
"%d", AM.NumFixedSets);
745 MesPrint(
"%d", AM.NumFixedFunctions);
746 MesPrint(
"%d", AM.rbufnum);
747 MesPrint(
"%d", AM.dbufnum);
748 MesPrint(
"%d", AM.SkipClears);
749 MesPrint(
"%d", AM.gfunpowers);
750 MesPrint(
"%d", AM.gStatsFlag);
751 MesPrint(
"%d", AM.gNamesFlag);
752 MesPrint(
"%d", AM.gCodesFlag);
753 MesPrint(
"%d", AM.gTokensWriteFlag);
754 MesPrint(
"%d", AM.gSortType);
755 MesPrint(
"%d", AM.gproperorderflag);
756 MesPrint(
"--MARK 5");
757 MesPrint(
"%d", AM.hparallelflag);
758 MesPrint(
"%d", AM.gparallelflag);
759 MesPrint(
"%d", AM.totalnumberofthreads);
760 MesPrint(
"%d", AM.gThreadStats);
761 MesPrint(
"%d", AM.ggThreadStats);
762 MesPrint(
"%d", AM.gFinalStats);
763 MesPrint(
"%d", AM.ggFinalStats);
764 MesPrint(
"%d", AM.gThreadsFlag);
765 MesPrint(
"%d", AM.ggThreadsFlag);
766 MesPrint(
"%d", AM.gThreadBalancing);
767 MesPrint(
"%d", AM.ggThreadBalancing);
768 MesPrint(
"%d", AM.gThreadSortFileSynch);
769 MesPrint(
"%d", AM.ggThreadSortFileSynch);
770 MesPrint(
"%d", AM.gProcessStats);
771 MesPrint(
"%d", AM.ggProcessStats);
772 MesPrint(
"%d", AM.gOldParallelStats);
773 MesPrint(
"%d", AM.ggOldParallelStats);
774 MesPrint(
"%d", AM.maxFlevels);
775 MesPrint(
"--MARK 6");
776 MesPrint(
"%d", AM.resetTimeOnClear);
777 MesPrint(
"%d", AM.gcNumDollars);
778 MesPrint(
"%d", AM.MultiRun);
779 MesPrint(
"%d", AM.gNoSpacesInNumbers);
780 MesPrint(
"%d", AM.ggNoSpacesInNumbers);
781 MesPrint(
"%d", AM.MaxTal);
782 MesPrint(
"%d", AM.IndDum);
783 MesPrint(
"%d", AM.DumInd);
784 MesPrint(
"%d", AM.WilInd);
785 MesPrint(
"%d", AM.gncmod);
786 MesPrint(
"%d", AM.gnpowmod);
787 MesPrint(
"%d", AM.gmodmode);
788 MesPrint(
"--MARK 7");
789 MesPrint(
"%d", AM.gUnitTrace);
790 MesPrint(
"%d", AM.gOutputMode);
791 MesPrint(
"%d", AM.gCnumpows);
792 MesPrint(
"%d", AM.gOutputSpaces);
793 MesPrint(
"%d", AM.gOutNumberType);
794 MesPrint(
"%d %d %d %d", AM.gUniTrace[0], AM.gUniTrace[1], AM.gUniTrace[2], AM.gUniTrace[3]);
795 MesPrint(
"%d", AM.MaxWildcards);
796 MesPrint(
"%d", AM.mTraceDum);
797 MesPrint(
"%d", AM.OffsetIndex);
798 MesPrint(
"%d", AM.OffsetVector);
799 MesPrint(
"%d", AM.RepMax);
800 MesPrint(
"%d", AM.LogType);
801 MesPrint(
"%d", AM.ggStatsFlag);
802 MesPrint(
"%d", AM.gLineLength);
803 MesPrint(
"%d", AM.qError);
804 MesPrint(
"--MARK 8");
805 MesPrint(
"%d", AM.FortranCont);
806 MesPrint(
"%d", AM.HoldFlag);
807 MesPrint(
"%d %d %d %d %d", AM.Ordering[0], AM.Ordering[1], AM.Ordering[2], AM.Ordering[3], AM.Ordering[4]);
808 MesPrint(
"%d %d %d %d %d", AM.Ordering[5], AM.Ordering[6], AM.Ordering[7], AM.Ordering[8], AM.Ordering[9]);
809 MesPrint(
"%d %d %d %d %d", AM.Ordering[10], AM.Ordering[11], AM.Ordering[12], AM.Ordering[13], AM.Ordering[14]);
810 MesPrint(
"%d", AM.silent);
811 MesPrint(
"%d", AM.tracebackflag);
812 MesPrint(
"%d", AM.expnum);
813 MesPrint(
"%d", AM.denomnum);
814 MesPrint(
"%d", AM.facnum);
815 MesPrint(
"%d", AM.invfacnum);
816 MesPrint(
"%d", AM.sumnum);
817 MesPrint(
"%d", AM.sumpnum);
818 MesPrint(
"--MARK 9");
819 MesPrint(
"%d", AM.OldOrderFlag);
820 MesPrint(
"%d", AM.termfunnum);
821 MesPrint(
"%d", AM.matchfunnum);
822 MesPrint(
"%d", AM.countfunnum);
823 MesPrint(
"%d", AM.gPolyFun);
824 MesPrint(
"%d", AM.gPolyFunType);
825 MesPrint(
"--MARK 10");
826 MesPrint(
"%d", AM.dollarzero);
827 MesPrint(
"%d", AM.atstartup);
828 MesPrint(
"%d", AM.exitflag);
829 MesPrint(
"%d", AM.NumStoreCaches);
830 MesPrint(
"%d", AM.gIndentSpace);
831 MesPrint(
"%d", AM.ggIndentSpace);
832 MesPrint(
"%d", AM.gShortStatsMax);
833 MesPrint(
"%d", AM.ggShortStatsMax);
834 MesPrint(
"%%%% END M_const");
838 static void print_P()
841 MesPrint(
"%%%% P_const");
842 print_LIST(&AP.DollarList);
843 for ( i=0; i<AP.DollarList.num; ++i ) {
844 print_DOLLARS(&(Dollars[i]));
846 MesPrint(
"--MARK 1");
847 print_LIST(&AP.PreVarList);
848 for ( i=0; i<AP.PreVarList.num; ++i ) {
849 print_PREVAR(&(PreVar[i]));
851 MesPrint(
"--MARK 2");
852 print_LIST(&AP.LoopList);
853 for ( i=0; i<AP.LoopList.num; ++i ) {
854 print_DOLOOP(&(DoLoops[i]));
856 MesPrint(
"--MARK 3");
857 print_LIST(&AP.ProcList);
858 for ( i=0; i<AP.ProcList.num; ++i ) {
859 print_PROCEDURE(&(Procedures[i]));
861 MesPrint(
"--MARK 4");
862 for ( i=0; i<=AP.PreSwitchLevel; ++i ) {
863 print_STR(AP.PreSwitchStrings[i]);
865 MesPrint(
"%l", AP.preStop-AP.preStart);
866 if ( AP.preFill ) MesPrint(
"%l", AP.preFill-AP.preStart);
867 print_CHARS(AP.preStart, AP.pSize);
868 MesPrint(
"%s", AP.procedureExtension);
869 MesPrint(
"%s", AP.cprocedureExtension);
870 print_INTV(AP.PreIfStack, AP.MaxPreIfLevel);
871 print_INTV(AP.PreSwitchModes, AP.NumPreSwitchStrings+1);
872 print_INTV(AP.PreTypes, AP.NumPreTypes+1);
873 MesPrint(
"%d", AP.PreAssignFlag);
874 MesPrint(
"--MARK 5");
875 MesPrint(
"%d", AP.PreContinuation);
876 MesPrint(
"%l", AP.InOutBuf);
877 MesPrint(
"%l", AP.pSize);
878 MesPrint(
"%d", AP.PreproFlag);
879 MesPrint(
"%d", AP.iBufError);
880 MesPrint(
"%d", AP.PreOut);
881 MesPrint(
"%d", AP.PreSwitchLevel);
882 MesPrint(
"%d", AP.NumPreSwitchStrings);
883 MesPrint(
"%d", AP.MaxPreTypes);
884 MesPrint(
"--MARK 6");
885 MesPrint(
"%d", AP.NumPreTypes);
886 MesPrint(
"%d", AP.DelayPrevar);
887 MesPrint(
"%d", AP.AllowDelay);
888 MesPrint(
"%d", AP.lhdollarerror);
889 MesPrint(
"%d", AP.eat);
890 MesPrint(
"%d", AP.gNumPre);
891 MesPrint(
"%d", AP.PreDebug);
892 MesPrint(
"--MARK 7");
893 MesPrint(
"%d", AP.DebugFlag);
894 MesPrint(
"%d", AP.preError);
895 MesPrint(
"%C", 1, &(AP.ComChar));
896 MesPrint(
"%C", 1, &(AP.cComChar));
897 MesPrint(
"%%%% END P_const");
901 static void print_C()
905 MesPrint(
"%%%% C_const");
906 for ( i=0; i<32; ++i ) {
908 t = NumCopy((WORD)(AC.separators[i].bit_7),t);
909 t = NumCopy((WORD)(AC.separators[i].bit_6),t);
910 t = NumCopy((WORD)(AC.separators[i].bit_5),t);
911 t = NumCopy((WORD)(AC.separators[i].bit_4),t);
912 t = NumCopy((WORD)(AC.separators[i].bit_3),t);
913 t = NumCopy((WORD)(AC.separators[i].bit_2),t);
914 t = NumCopy((WORD)(AC.separators[i].bit_1),t);
915 t = NumCopy((WORD)(AC.separators[i].bit_0),t);
918 print_NAMETREE(AC.dollarnames);
919 print_NAMETREE(AC.exprnames);
920 print_NAMETREE(AC.varnames);
921 MesPrint(
"--MARK 1");
922 print_LIST(&AC.ChannelList);
923 for ( i=0; i<AC.ChannelList.num; ++i ) {
924 MesPrint(
"%s %d", channels[i].name, channels[i].handle);
926 MesPrint(
"--MARK 2");
927 print_LIST(&AC.DubiousList);
928 MesPrint(
"--MARK 3");
929 print_LIST(&AC.FunctionList);
930 for ( i=0; i<AC.FunctionList.num; ++i ) {
931 if ( functions[i].tabl ) {
934 MesPrint(
"%l", functions[i].symminfo);
935 MesPrint(
"%l", functions[i].name);
936 MesPrint(
"%d", functions[i].namesize);
938 MesPrint(
"--MARK 4");
939 print_LIST(&AC.ExpressionList);
940 print_LIST(&AC.IndexList);
941 print_LIST(&AC.SetElementList);
942 print_LIST(&AC.SetList);
943 MesPrint(
"--MARK 5");
944 print_LIST(&AC.SymbolList);
945 print_LIST(&AC.VectorList);
946 print_LIST(&AC.PotModDolList);
947 print_LIST(&AC.ModOptDolList);
948 print_LIST(&AC.TableBaseList);
958 MesPrint(
"--MARK 6");
960 print_LIST(&AC.AutoSymbolList);
961 print_LIST(&AC.AutoIndexList);
962 print_LIST(&AC.AutoVectorList);
963 print_LIST(&AC.AutoFunctionList);
965 print_NAMETREE(AC.autonames);
966 MesPrint(
"--MARK 7");
968 print_LIST(AC.Symbols);
969 print_LIST(AC.Indices);
970 print_LIST(AC.Vectors);
971 print_LIST(AC.Functions);
972 MesPrint(
"--MARK 8");
974 print_NAMETREE(*AC.activenames);
976 MesPrint(
"--MARK 9");
978 MesPrint(
"%d", AC.AutoDeclareFlag);
980 for ( i=0; i<AC.NumStreams; ++i ) {
981 MesPrint(
"Stream %d\n", i);
982 print_STREAM(AC.Streams+i);
984 print_STREAM(AC.CurrentStream);
985 MesPrint(
"--MARK 10");
987 print_LONGV(AC.termstack, AC.maxtermlevel);
988 print_LONGV(AC.termsortstack, AC.maxtermlevel);
989 print_VOIDP(AC.cmod, AM.MaxTal*4*
sizeof(UWORD));
990 print_WORDV((WORD *)(AC.cmod), 1);
991 print_WORDV((WORD *)(AC.powmod), 1);
992 print_WORDV((WORD*)AC.modpowers, 1);
993 print_WORDV((WORD*)AC.halfmod, 1);
994 MesPrint(
"--MARK 10-2");
1000 MesPrint(
"--MARK 11");
1003 print_CHARS((UBYTE*)AC.tokens, AC.toptokens-AC.tokens);
1004 MesPrint(
"%l", AC.endoftokens-AC.tokens);
1005 print_WORDV(AC.tokenarglevel, AM.MaxParLevel);
1006 print_WORDV((WORD*)AC.modinverses, ABS(AC.ncmod));
1008 print_LONGV(AC.inputnumbers, AC.sizepfirstnum+AC.sizepfirstnum*
sizeof(WORD)/
sizeof(LONG));
1009 print_WORDV(AC.pfirstnum, 1);
1011 MesPrint(
"--MARK 12");
1012 print_LONGV(AC.argstack, MAXNEST);
1013 print_LONGV(AC.insidestack, MAXNEST);
1014 print_LONGV(AC.inexprstack, MAXNEST);
1015 MesPrint(
"%l", AC.iBufferSize);
1016 MesPrint(
"%l", AC.TransEname);
1017 MesPrint(
"%l", AC.ProcessBucketSize);
1018 MesPrint(
"%l", AC.mProcessBucketSize);
1019 MesPrint(
"%l", AC.CModule);
1020 MesPrint(
"%l", AC.ThreadBucketSize);
1021 MesPrint(
"%d", AC.NoShowInput);
1022 MesPrint(
"%d", AC.ShortStats);
1023 MesPrint(
"%d", AC.compiletype);
1024 MesPrint(
"%d", AC.firstconstindex);
1025 MesPrint(
"%d", AC.insidefirst);
1026 MesPrint(
"%d", AC.minsidefirst);
1027 MesPrint(
"%d", AC.wildflag);
1028 MesPrint(
"%d", AC.NumLabels);
1029 MesPrint(
"%d", AC.MaxLabels);
1030 MesPrint(
"--MARK 13");
1031 MesPrint(
"%d", AC.lDefDim);
1032 MesPrint(
"%d", AC.lDefDim4);
1033 MesPrint(
"%d", AC.NumWildcardNames);
1034 MesPrint(
"%d", AC.WildcardBufferSize);
1035 MesPrint(
"%d", AC.MaxIf);
1036 MesPrint(
"%d", AC.NumStreams);
1037 MesPrint(
"%d", AC.MaxNumStreams);
1038 MesPrint(
"%d", AC.firstctypemessage);
1039 MesPrint(
"%d", AC.tablecheck);
1040 MesPrint(
"%d", AC.idoption);
1041 MesPrint(
"%d", AC.BottomLevel);
1042 MesPrint(
"%d", AC.CompileLevel);
1043 MesPrint(
"%d", AC.TokensWriteFlag);
1044 MesPrint(
"%d", AC.UnsureDollarMode);
1045 MesPrint(
"%d", AC.outsidefun);
1046 MesPrint(
"%d", AC.funpowers);
1047 MesPrint(
"--MARK 14");
1048 MesPrint(
"%d", AC.WarnFlag);
1049 MesPrint(
"%d", AC.StatsFlag);
1050 MesPrint(
"%d", AC.NamesFlag);
1051 MesPrint(
"%d", AC.CodesFlag);
1052 MesPrint(
"%d", AC.TokensWriteFlag);
1053 MesPrint(
"%d", AC.SetupFlag);
1054 MesPrint(
"%d", AC.SortType);
1055 MesPrint(
"%d", AC.lSortType);
1056 MesPrint(
"%d", AC.ThreadStats);
1057 MesPrint(
"%d", AC.FinalStats);
1058 MesPrint(
"%d", AC.ThreadsFlag);
1059 MesPrint(
"%d", AC.ThreadBalancing);
1060 MesPrint(
"%d", AC.ThreadSortFileSynch);
1061 MesPrint(
"%d", AC.ProcessStats);
1062 MesPrint(
"%d", AC.OldParallelStats);
1063 MesPrint(
"%d", AC.BracketNormalize);
1064 MesPrint(
"%d", AC.maxtermlevel);
1065 MesPrint(
"%d", AC.dumnumflag);
1066 MesPrint(
"--MARK 15");
1067 MesPrint(
"%d", AC.bracketindexflag);
1068 MesPrint(
"%d", AC.parallelflag);
1069 MesPrint(
"%d", AC.mparallelflag);
1070 MesPrint(
"%d", AC.properorderflag);
1071 MesPrint(
"%d", AC.vetofilling);
1072 MesPrint(
"%d", AC.tablefilling);
1073 MesPrint(
"%d", AC.vetotablebasefill);
1074 MesPrint(
"%d", AC.exprfillwarning);
1075 MesPrint(
"%d", AC.lhdollarflag);
1076 MesPrint(
"%d", AC.NoCompress);
1078 MesPrint(
"%d", AC.numpfirstnum);
1079 MesPrint(
"%d", AC.sizepfirstnum);
1081 MesPrint(
"%d", AC.RepLevel);
1082 MesPrint(
"%d", AC.arglevel);
1083 MesPrint(
"%d", AC.insidelevel);
1084 MesPrint(
"%d", AC.inexprlevel);
1085 MesPrint(
"%d", AC.termlevel);
1086 MesPrint(
"--MARK 16");
1087 print_WORDV(AC.argsumcheck, MAXNEST);
1088 print_WORDV(AC.insidesumcheck, MAXNEST);
1089 print_WORDV(AC.inexprsumcheck, MAXNEST);
1090 MesPrint(
"%d", AC.MustTestTable);
1091 MesPrint(
"%d", AC.DumNum);
1092 MesPrint(
"%d", AC.ncmod);
1093 MesPrint(
"%d", AC.npowmod);
1094 MesPrint(
"%d", AC.modmode);
1095 MesPrint(
"%d", AC.nhalfmod);
1096 MesPrint(
"%d", AC.DirtPow);
1097 MesPrint(
"%d", AC.lUnitTrace);
1098 MesPrint(
"%d", AC.NwildC);
1099 MesPrint(
"%d", AC.ComDefer);
1100 MesPrint(
"%d", AC.CollectFun);
1101 MesPrint(
"%d", AC.AltCollectFun);
1102 MesPrint(
"--MARK 17");
1103 MesPrint(
"%d", AC.OutputMode);
1104 MesPrint(
"%d", AC.Cnumpows);
1105 MesPrint(
"%d", AC.OutputSpaces);
1106 MesPrint(
"%d", AC.OutNumberType);
1107 print_WORDV(AC.lUniTrace, 4);
1108 print_WORDV(AC.RepSumCheck, MAXREPEAT);
1109 MesPrint(
"%d", AC.DidClean);
1110 MesPrint(
"%d", AC.IfLevel);
1111 MesPrint(
"%d", AC.WhileLevel);
1112 print_WORDV(AC.IfSumCheck, (AC.MaxIf+1));
1113 MesPrint(
"%d", AC.LogHandle);
1114 MesPrint(
"%d", AC.LineLength);
1115 MesPrint(
"%d", AC.StoreHandle);
1116 MesPrint(
"%d", AC.HideLevel);
1117 MesPrint(
"%d", AC.lPolyFun);
1118 MesPrint(
"%d", AC.lPolyFunType);
1119 MesPrint(
"%d", AC.SymChangeFlag);
1120 MesPrint(
"%d", AC.CollectPercentage);
1121 MesPrint(
"%d", AC.ShortStatsMax);
1122 MesPrint(
"--MARK 18");
1124 print_CHARS(AC.Commercial, COMMERCIALSIZE+2);
1126 MesPrint(
"%", AC.CheckpointFlag);
1127 MesPrint(
"%l", AC.CheckpointStamp);
1128 print_STR((
unsigned char*)AC.CheckpointRunAfter);
1129 print_STR((
unsigned char*)AC.CheckpointRunBefore);
1130 MesPrint(
"%l", AC.CheckpointInterval);
1132 MesPrint(
"%%%% END C_const");
1136 static void print_R()
1140 MesPrint(
"%%%% R_const");
1141 MesPrint(
"%l", (LONG)(AR.infile-AR.Fscr));
1142 MesPrint(
"%s", AR.infile->name);
1143 MesPrint(
"%l", (LONG)(AR.outfile-AR.Fscr));
1144 MesPrint(
"%s", AR.outfile->name);
1145 MesPrint(
"%l", AR.hidefile-AR.Fscr);
1146 MesPrint(
"%s", AR.hidefile->name);
1147 for ( i=0; i<3; ++i ) {
1148 MesPrint(
"FSCR %d", i);
1149 print_WORDB(AR.Fscr[i].PObuffer, AR.Fscr[i].POfull);
1152 MesPrint(
"%l", AR.OldTime);
1153 MesPrint(
"%l", AR.InInBuf);
1154 MesPrint(
"%l", AR.InHiBuf);
1155 MesPrint(
"%l", AR.pWorkSize);
1156 MesPrint(
"%l", AR.lWorkSize);
1157 MesPrint(
"%l", AR.posWorkSize);
1158 MesPrint(
"%d", AR.NoCompress);
1159 MesPrint(
"%d", AR.gzipCompress);
1160 MesPrint(
"%d", AR.Cnumlhs);
1162 MesPrint(
"%d", AR.exprtodo);
1164 MesPrint(
"%d", AR.GetFile);
1165 MesPrint(
"%d", AR.KeptInHold);
1166 MesPrint(
"%d", AR.BracketOn);
1167 MesPrint(
"%d", AR.MaxBracket);
1168 MesPrint(
"%d", AR.CurDum);
1169 MesPrint(
"%d", AR.DeferFlag);
1170 MesPrint(
"%d", AR.TePos);
1171 MesPrint(
"%d", AR.sLevel);
1172 MesPrint(
"%d", AR.Stage4Name);
1173 MesPrint(
"%d", AR.GetOneFile);
1174 MesPrint(
"%d", AR.PolyFun);
1175 MesPrint(
"%d", AR.PolyFunType);
1176 MesPrint(
"%d", AR.Eside);
1177 MesPrint(
"%d", AR.MaxDum);
1178 MesPrint(
"%d", AR.level);
1179 MesPrint(
"%d", AR.expchanged);
1180 MesPrint(
"%d", AR.expflags);
1181 MesPrint(
"%d", AR.CurExpr);
1182 MesPrint(
"%d", AR.SortType);
1183 MesPrint(
"%d", AR.ShortSortCount);
1184 MesPrint(
"%%%% END R_const");
1195 #define CACHED_SNAPSHOT 1197 #define CACHE_SIZE 4096 1199 #ifdef CACHED_SNAPSHOT 1200 unsigned char cache_buffer[CACHE_SIZE];
1201 size_t cache_fill = 0;
1203 size_t fwrite_cached(
const void *ptr,
size_t size,
size_t nmemb, FILE *fd)
1205 size_t fullsize = size*nmemb;
1206 if ( fullsize+cache_fill >= CACHE_SIZE ) {
1207 size_t overlap = CACHE_SIZE-cache_fill;
1208 memcpy(cache_buffer+cache_fill, (
unsigned char*)ptr, overlap);
1209 if ( fwrite(cache_buffer, 1, CACHE_SIZE, fd) != CACHE_SIZE )
return 0;
1210 fullsize -= overlap;
1211 if ( fullsize >= CACHE_SIZE ) {
1212 cache_fill = fullsize % CACHE_SIZE;
1213 if ( cache_fill ) memcpy(cache_buffer, (
unsigned char*)ptr+overlap+fullsize-cache_fill, cache_fill);
1214 if ( fwrite((
unsigned char*)ptr+overlap, 1, fullsize-cache_fill, fd) != fullsize-cache_fill )
return 0;
1217 memcpy(cache_buffer, (
unsigned char*)ptr+overlap, fullsize);
1218 cache_fill = fullsize;
1222 memcpy(cache_buffer+cache_fill, (
unsigned char*)ptr, fullsize);
1223 cache_fill += fullsize;
1228 size_t flush_cache(FILE *fd)
1231 size_t retval = fwrite(cache_buffer, 1, cache_fill, fd);
1232 if ( retval != cache_fill ) {
1241 size_t fwrite_cached(
const void *ptr,
size_t size,
size_t nmemb, FILE *fd)
1243 return fwrite(ptr, size, nmemb, fd);
1246 size_t flush_cache(FILE *fd)
1262 #define R_FREE(ARG) \ 1263 if ( ARG ) M_free(ARG, #ARG); 1265 #define R_FREE_NAMETREE(ARG) \ 1266 R_FREE(ARG->namenode); \ 1267 R_FREE(ARG->namebuffer); \ 1270 #define R_FREE_STREAM(ARG) \ 1271 R_FREE(ARG.buffer); \ 1272 R_FREE(ARG.FoldName); \ 1277 #define R_SET(VAR,TYPE) \ 1278 VAR = *((TYPE*)p); p = (unsigned char*)p + sizeof(TYPE); 1282 #define R_COPY_B(VAR,SIZE,CAST) \ 1283 VAR = (CAST)Malloc1(SIZE,#VAR); \ 1284 memcpy(VAR, p, SIZE); p = (unsigned char*)p + SIZE; 1286 #define S_WRITE_B(BUF,LEN) \ 1287 if ( fwrite_cached(BUF, 1, LEN, fd) != (size_t)(LEN) ) return(__LINE__); 1290 if ( flush_cache(fd) != 1 ) return(__LINE__); 1294 #define R_COPY_S(VAR,CAST) \ 1296 VAR = (CAST)Malloc1(strlen(p)+1,"R_COPY_S"); \ 1297 strcpy((char*)VAR, p); p = (unsigned char*)p + strlen(p) + 1; \ 1300 #define S_WRITE_S(STR) \ 1302 l = strlen((char*)STR) + 1; \ 1303 if ( fwrite_cached(STR, 1, l, fd) != (size_t)l ) return(__LINE__); \ 1308 #define R_COPY_LIST(ARG) \ 1309 if ( ARG.maxnum ) { \ 1310 R_COPY_B(ARG.lijst, ARG.size*ARG.maxnum, void*) \ 1313 #define S_WRITE_LIST(LST) \ 1314 if ( LST.maxnum ) { \ 1315 S_WRITE_B((char*)LST.lijst, LST.maxnum*LST.size) \ 1320 #define R_COPY_NAMETREE(ARG) \ 1321 R_COPY_B(ARG, sizeof(NAMETREE), NAMETREE*); \ 1322 if ( ARG->namenode ) { \ 1323 R_COPY_B(ARG->namenode, ARG->nodesize*sizeof(NAMENODE), NAMENODE*); \ 1325 if ( ARG->namebuffer ) { \ 1326 R_COPY_B(ARG->namebuffer, ARG->namesize, UBYTE*); \ 1329 #define S_WRITE_NAMETREE(ARG) \ 1330 S_WRITE_B(ARG, sizeof(NAMETREE)); \ 1331 if ( ARG->namenode ) { \ 1332 S_WRITE_B(ARG->namenode, ARG->nodesize*sizeof(struct NaMeNode)); \ 1334 if ( ARG->namebuffer ) { \ 1335 S_WRITE_B(ARG->namebuffer, ARG->namesize); \ 1340 #define S_WRITE_DOLLAR(ARG) \ 1341 if ( ARG.size && ARG.where && ARG.where != &(AM.dollarzero) ) { \ 1342 S_WRITE_B(ARG.where, ARG.size*sizeof(WORD)) \ 1347 #ifdef PRINTTIMEMARKS 1348 time_t announce_time;
1349 #define ANNOUNCE(str) time(&announce_time); MesPrint("TIMEMARK %s %s", ctime(&announce_time), #str); 1351 #define ANNOUNCE(str) 1392 char *namebufout, *namebufhide;
1394 void *oldAMdollarzero;
1395 LIST PotModDolListBackup;
1396 LIST ModOptDolListBackup;
1399 MesPrint(
"Recovering ... %"); fflush(0);
1401 if ( !(fd = fopen(recoveryfile,
"r")) )
return(__LINE__);
1404 if ( fread(&pos,
sizeof(
POSITION), 1, fd) != 1 )
return(__LINE__);
1405 size = BASEPOSITION(pos) -
sizeof(
POSITION);
1406 buf = Malloc1(size,
"recovery buffer");
1407 if ( fread(buf, size, 1, fd) != 1 )
return(__LINE__);
1413 R_SET(*moduletype,
int);
1420 R_SET(AM.hparallelflag,
int);
1421 R_SET(AM.gparallelflag,
int);
1422 R_SET(AM.gCodesFlag,
int);
1423 R_SET(AM.gNamesFlag,
int);
1424 R_SET(AM.gStatsFlag,
int);
1425 R_SET(AM.gTokensWriteFlag,
int);
1426 R_SET(AM.gNoSpacesInNumbers,
int);
1427 R_SET(AM.gIndentSpace, WORD);
1428 R_SET(AM.gUnitTrace, WORD);
1429 R_SET(AM.gDefDim,
int);
1430 R_SET(AM.gDefDim4,
int);
1431 R_SET(AM.gncmod, WORD);
1432 R_SET(AM.gnpowmod, WORD);
1433 R_SET(AM.gmodmode, WORD);
1434 R_SET(AM.gOutputMode, WORD);
1435 R_SET(AM.gCnumpows, WORD);
1436 R_SET(AM.gOutputSpaces, WORD);
1437 R_SET(AM.gOutNumberType, WORD);
1438 R_SET(AM.gfunpowers,
int);
1439 R_SET(AM.gPolyFun, WORD);
1440 R_SET(AM.gPolyFunType, WORD);
1441 R_SET(AM.gProcessBucketSize, LONG);
1442 R_SET(AM.OldChildTime, LONG);
1443 R_SET(AM.OldSecTime, LONG);
1444 R_SET(AM.OldMilliTime, LONG);
1445 R_SET(AM.gproperorderflag,
int);
1446 R_SET(AM.gThreadBucketSize, LONG);
1447 R_SET(AM.gThreadStats,
int);
1448 R_SET(AM.gFinalStats,
int);
1449 R_SET(AM.gThreadsFlag,
int);
1450 R_SET(AM.gThreadBalancing,
int);
1451 R_SET(AM.gThreadSortFileSynch,
int);
1452 R_SET(AM.gProcessStats,
int);
1453 R_SET(AM.gOldParallelStats,
int);
1454 R_SET(AM.gSortType,
int);
1455 R_SET(AM.gShortStatsMax, WORD);
1456 R_SET(AM.gIsFortran90,
int);
1457 R_SET(oldAMdollarzero,
void*);
1458 R_FREE(AM.gFortran90Kind);
1459 R_SET(AM.gFortran90Kind,UBYTE *);
1460 R_COPY_S(AM.gFortran90Kind,UBYTE *);
1462 R_COPY_S(AM.gextrasym,UBYTE *);
1463 R_COPY_S(AM.ggextrasym,UBYTE *);
1465 R_SET(AM.PrintTotalSize,
int);
1466 R_SET(AM.fbuffersize,
int);
1467 R_SET(AM.gOldFactArgFlag,
int);
1468 R_SET(AM.ggOldFactArgFlag,
int);
1482 R_FREE_NAMETREE(AC.dollarnames);
1483 R_FREE_NAMETREE(AC.exprnames);
1484 R_FREE_NAMETREE(AC.varnames);
1485 for ( i=0; i<AC.ChannelList.num; ++i ) {
1486 R_FREE(channels[i].name);
1488 R_FREE(AC.ChannelList.lijst);
1489 R_FREE(AC.DubiousList.lijst);
1490 for ( i=0; i<AC.FunctionList.num; ++i ) {
1491 TABLES T = functions[i].tabl;
1515 R_FREE(AC.FunctionList.lijst);
1516 for ( i=0; i<AC.ExpressionList.num; ++i ) {
1517 if ( Expressions[i].renum ) {
1518 R_FREE(Expressions[i].renum->symb.lo);
1519 R_FREE(Expressions[i].renum);
1521 if ( Expressions[i].bracketinfo ) {
1522 R_FREE(Expressions[i].bracketinfo->indexbuffer);
1523 R_FREE(Expressions[i].bracketinfo->bracketbuffer);
1524 R_FREE(Expressions[i].bracketinfo);
1526 if ( Expressions[i].newbracketinfo ) {
1527 R_FREE(Expressions[i].newbracketinfo->indexbuffer);
1528 R_FREE(Expressions[i].newbracketinfo->bracketbuffer);
1529 R_FREE(Expressions[i].newbracketinfo);
1531 if ( Expressions[i].renumlists != AN.dummyrenumlist ) {
1532 R_FREE(Expressions[i].renumlists);
1534 R_FREE(Expressions[i].inmem);
1536 R_FREE(AC.ExpressionList.lijst);
1537 R_FREE(AC.IndexList.lijst);
1538 R_FREE(AC.SetElementList.lijst);
1539 R_FREE(AC.SetList.lijst);
1540 R_FREE(AC.SymbolList.lijst);
1541 R_FREE(AC.VectorList.lijst);
1542 for ( i=0; i<AC.TableBaseList.num; ++i ) {
1543 R_FREE(tablebases[i].iblocks);
1544 R_FREE(tablebases[i].nblocks);
1545 R_FREE(tablebases[i].name);
1546 R_FREE(tablebases[i].fullname);
1547 R_FREE(tablebases[i].tablenames);
1549 R_FREE(AC.TableBaseList.lijst);
1550 for ( i=0; i<AC.cbufList.num; ++i ) {
1551 R_FREE(cbuf[i].Buffer);
1552 R_FREE(cbuf[i].lhs);
1553 R_FREE(cbuf[i].rhs);
1554 R_FREE(cbuf[i].boomlijst);
1556 R_FREE(AC.cbufList.lijst);
1557 R_FREE(AC.AutoSymbolList.lijst);
1558 R_FREE(AC.AutoIndexList.lijst);
1559 R_FREE(AC.AutoVectorList.lijst);
1561 R_FREE(AC.AutoFunctionList.lijst);
1562 R_FREE_NAMETREE(AC.autonames);
1563 for ( i=0; i<AC.NumStreams; ++i ) {
1564 R_FREE_STREAM(AC.Streams[i]);
1567 R_FREE(AC.termstack);
1568 R_FREE(AC.termsortstack);
1570 R_FREE(AC.modpowers);
1575 for ( i=0; i<AC.NumLabels; ++i ) {
1576 R_FREE(AC.LabelNames[i]);
1578 R_FREE(AC.LabelNames);
1579 R_FREE(AC.FixIndices);
1580 R_FREE(AC.termsumcheck);
1581 R_FREE(AC.WildcardNames);
1583 R_FREE(AC.tokenarglevel);
1584 R_FREE(AC.modinverses);
1585 R_FREE(AC.Fortran90Kind);
1587 R_FREE(AC.inputnumbers);
1589 R_FREE(AC.IfSumCheck);
1590 R_FREE(AC.CheckpointRunAfter);
1591 R_FREE(AC.CheckpointRunBefore);
1596 PotModDolListBackup = AC.PotModDolList;
1597 ModOptDolListBackup = AC.ModOptDolList;
1598 oldLogHandle = AC.LogHandle;
1603 AC = *((
struct C_const*)p); p = (
unsigned char*)p +
sizeof(
struct C_const);
1605 R_COPY_NAMETREE(AC.dollarnames);
1606 R_COPY_NAMETREE(AC.exprnames);
1607 R_COPY_NAMETREE(AC.varnames);
1609 R_COPY_LIST(AC.ChannelList);
1610 for ( i=0; i<AC.ChannelList.num; ++i ) {
1611 R_COPY_S(channels[i].name,
char*);
1612 channels[i].handle = ReOpenFile(channels[i].name);
1614 AC.ChannelList.message =
"channel buffer";
1616 AC.DubiousList.lijst = 0;
1617 AC.DubiousList.message =
"ambiguous variable";
1618 AC.DubiousList.num =
1619 AC.DubiousList.maxnum =
1620 AC.DubiousList.numglobal =
1621 AC.DubiousList.numtemp =
1622 AC.DubiousList.numclear = 0;
1624 R_COPY_LIST(AC.FunctionList);
1625 for ( i=0; i<AC.FunctionList.num; ++i ) {
1626 if ( functions[i].tabl ) {
1629 functions[i].tabl = tabl;
1638 TABLEEXTENSION*
sizeof(WORD)*(tabl->
totind), WORD*);
1645 for ( j=0; j<AM.totalnumberofthreads; ++j ) {
1652 for ( j=0; j<AM.totalnumberofthreads; ++j ) {
1666 R_COPY_B(tabl->
flags, tabl->
numind*(LONG)
sizeof(WORD), WORD*);
1669 R_COPY_S(tabl->
argtail,UBYTE*);
1672 if ( tabl->
spare ) {
1675 tabl->
spare = spare;
1684 TABLEEXTENSION*
sizeof(WORD)*(spare->
totind), WORD*);
1690 R_COPY_B(spare->
flags, spare->
numind*(LONG)
sizeof(WORD), WORD*);
1695 spare->
spare = tabl;
1700 AC.FunctionList.message =
"function";
1702 R_COPY_LIST(AC.ExpressionList);
1703 for ( i=0; i<AC.ExpressionList.num; ++i ) {
1707 org = (UBYTE*)ex->renum->
symb.
lo;
1708 R_SET(size,
size_t);
1709 R_COPY_B(ex->renum->
symb.
lo, size, WORD*);
1710 ofs = (UBYTE*)ex->renum->
symb.
lo - org;
1712 ex->renum->
symb.
hi = (WORD*)((UBYTE*)ex->renum->
symb.
hi + ofs);
1713 ex->renum->
indi.
lo = (WORD*)((UBYTE*)ex->renum->
indi.
lo + ofs);
1715 ex->renum->
indi.
hi = (WORD*)((UBYTE*)ex->renum->
indi.
hi + ofs);
1716 ex->renum->
vect.
lo = (WORD*)((UBYTE*)ex->renum->
vect.
lo + ofs);
1718 ex->renum->
vect.
hi = (WORD*)((UBYTE*)ex->renum->
vect.
hi + ofs);
1719 ex->renum->
func.
lo = (WORD*)((UBYTE*)ex->renum->
func.
lo + ofs);
1721 ex->renum->
func.
hi = (WORD*)((UBYTE*)ex->renum->
func.
hi + ofs);
1722 ex->renum->
symnum = (WORD*)((UBYTE*)ex->renum->
symnum + ofs);
1723 ex->renum->
indnum = (WORD*)((UBYTE*)ex->renum->
indnum + ofs);
1724 ex->renum->
vecnum = (WORD*)((UBYTE*)ex->renum->
vecnum + ofs);
1725 ex->renum->
funnum = (WORD*)((UBYTE*)ex->renum->
funnum + ofs);
1727 if ( ex->bracketinfo ) {
1730 R_COPY_B(ex->bracketinfo->
bracketbuffer, ex->bracketinfo->bracketbuffersize*
sizeof(WORD), WORD*);
1732 if ( ex->newbracketinfo ) {
1735 R_COPY_B(ex->newbracketinfo->
bracketbuffer, ex->newbracketinfo->bracketbuffersize*
sizeof(WORD), WORD*);
1743 R_SET(size,
size_t);
1744 R_COPY_B(ex->inmem, size, WORD*);
1747 AC.ExpressionList.message =
"expression";
1749 R_COPY_LIST(AC.IndexList);
1750 AC.IndexList.message =
"index";
1751 R_COPY_LIST(AC.SetElementList);
1752 AC.SetElementList.message =
"set element";
1753 R_COPY_LIST(AC.SetList);
1754 AC.SetList.message =
"set";
1755 R_COPY_LIST(AC.SymbolList);
1756 AC.SymbolList.message =
"symbol";
1757 R_COPY_LIST(AC.VectorList);
1758 AC.VectorList.message =
"vector";
1760 AC.PotModDolList = PotModDolListBackup;
1761 AC.ModOptDolList = ModOptDolListBackup;
1763 R_COPY_LIST(AC.TableBaseList);
1764 for ( i=0; i<AC.TableBaseList.num; ++i ) {
1765 if ( tablebases[i].iblocks ) {
1766 R_COPY_B(tablebases[i].iblocks, tablebases[i].info.numberofindexblocks*
sizeof(
INDEXBLOCK*),
INDEXBLOCK**);
1767 for ( j=0; j<tablebases[i].info.numberofindexblocks; ++j ) {
1768 if ( tablebases[i].iblocks[j] ) {
1773 if ( tablebases[i].nblocks ) {
1774 R_COPY_B(tablebases[i].nblocks, tablebases[i].info.numberofnamesblocks*
sizeof(
NAMESBLOCK*),
NAMESBLOCK**);
1775 for ( j=0; j<tablebases[i].info.numberofindexblocks; ++j ) {
1776 if ( tablebases[i].nblocks[j] ) {
1782 if ( ( tablebases[i].handle = fopen(tablebases[i].fullname,
"r+b") ) == NULL ) {
1783 MesPrint(
"ERROR: Could not reopen tablebase %s!",tablebases[i].name);
1786 R_COPY_S(tablebases[i].name,
char*);
1787 R_COPY_S(tablebases[i].fullname,
char*);
1788 R_COPY_S(tablebases[i].tablenames,
char*);
1790 AC.TableBaseList.message =
"list of tablebases";
1792 R_COPY_LIST(AC.cbufList);
1793 for ( i=0; i<AC.cbufList.num; ++i ) {
1794 org = (UBYTE*)cbuf[i].Buffer;
1795 R_COPY_B(cbuf[i].Buffer, cbuf[i].BufferSize*
sizeof(WORD), WORD*);
1796 ofs = (UBYTE*)cbuf[i].Buffer - org;
1797 cbuf[i].Top = (WORD*)((UBYTE*)cbuf[i].Top + ofs);
1798 cbuf[i].Pointer = (WORD*)((UBYTE*)cbuf[i].Pointer + ofs);
1799 R_COPY_B(cbuf[i].lhs, cbuf[i].maxlhs*(LONG)
sizeof(WORD*), WORD**);
1800 for ( j=1; j<=cbuf[i].numlhs; ++j ) {
1801 if ( cbuf[i].lhs[j] ) cbuf[i].lhs[j] = (WORD*)((UBYTE*)cbuf[i].lhs[j] + ofs);
1803 org = (UBYTE*)cbuf[i].rhs;
1804 R_COPY_B(cbuf[i].rhs, cbuf[i].maxrhs*(LONG)(
sizeof(WORD*)+2*
sizeof(LONG)+2*
sizeof(WORD)), WORD**);
1805 for ( j=1; j<=cbuf[i].numrhs; ++j ) {
1806 if ( cbuf[i].rhs[j] ) cbuf[i].rhs[j] = (WORD*)((UBYTE*)cbuf[i].rhs[j] + ofs);
1808 ofs = (UBYTE*)cbuf[i].rhs - org;
1809 cbuf[i].CanCommu = (LONG*)((UBYTE*)cbuf[i].CanCommu + ofs);
1810 cbuf[i].NumTerms = (LONG*)((UBYTE*)cbuf[i].NumTerms + ofs);
1811 cbuf[i].numdum = (WORD*)((UBYTE*)cbuf[i].numdum + ofs);
1812 cbuf[i].dimension = (WORD*)((UBYTE*)cbuf[i].dimension + ofs);
1813 if ( cbuf[i].boomlijst ) {
1814 R_COPY_B(cbuf[i].boomlijst, cbuf[i].MaxTreeSize*
sizeof(
COMPTREE),
COMPTREE*);
1817 AC.cbufList.message =
"compiler buffer";
1819 R_COPY_LIST(AC.AutoSymbolList);
1820 AC.AutoSymbolList.message =
"autosymbol";
1821 R_COPY_LIST(AC.AutoIndexList);
1822 AC.AutoIndexList.message =
"autoindex";
1823 R_COPY_LIST(AC.AutoVectorList);
1824 AC.AutoVectorList.message =
"autovector";
1825 R_COPY_LIST(AC.AutoFunctionList);
1826 AC.AutoFunctionList.message =
"autofunction";
1828 R_COPY_NAMETREE(AC.autonames);
1830 AC.Symbols = &(AC.SymbolList);
1831 AC.Indices = &(AC.IndexList);
1832 AC.Vectors = &(AC.VectorList);
1833 AC.Functions = &(AC.FunctionList);
1834 AC.activenames = &(AC.varnames);
1836 org = (UBYTE*)AC.Streams;
1837 R_COPY_B(AC.Streams, AC.MaxNumStreams*(LONG)
sizeof(
STREAM),
STREAM*);
1838 for ( i=0; i<AC.NumStreams; ++i ) {
1839 if ( AC.Streams[i].type != FILESTREAM ) {
1841 org2 = AC.Streams[i].buffer;
1842 if ( AC.Streams[i].inbuffer ) {
1843 R_COPY_B(AC.Streams[i].buffer, AC.Streams[i].inbuffer, UBYTE*);
1845 ofs = AC.Streams[i].buffer - org2;
1846 AC.Streams[i].pointer += ofs;
1847 AC.Streams[i].top += ofs;
1850 p = (
unsigned char*)p + AC.Streams[i].inbuffer;
1852 AC.Streams[i].buffersize = AC.Streams[i].inbuffer;
1853 R_COPY_S(AC.Streams[i].FoldName,UBYTE*);
1854 R_COPY_S(AC.Streams[i].name,UBYTE*);
1855 if ( AC.Streams[i].type == PREVARSTREAM || AC.Streams[i].type == DOLLARSTREAM ) {
1856 AC.Streams[i].pname = AC.Streams[i].name;
1858 else if ( AC.Streams[i].type == FILESTREAM ) {
1860 org2 = AC.Streams[i].buffer;
1861 AC.Streams[i].buffer = (UBYTE*)Malloc1(AC.Streams[i].buffersize,
"buffer");
1862 ofs = AC.Streams[i].buffer - org2;
1863 AC.Streams[i].pointer += ofs;
1864 AC.Streams[i].top += ofs;
1868 AC.Streams[i].handle = OpenFile((
char *)(AC.Streams[i].name));
1869 if ( AC.Streams[i].handle == -1 ) {
1870 MesPrint(
"ERROR: Could not reopen stream %s!",AC.Streams[i].name);
1876 ADDPOS(pos, AC.Streams[i].bufferposition);
1877 SeekFile(AC.Streams[i].handle, &pos, SEEK_SET);
1879 AC.Streams[i].inbuffer = ReadFile(AC.Streams[i].handle, AC.Streams[i].buffer, AC.Streams[i].inbuffer);
1881 SETBASEPOSITION(pos, AC.Streams[i].fileposition);
1882 SeekFile(AC.Streams[i].handle, &pos, SEEK_SET);
1894 ofs = (UBYTE*)AC.Streams - org;
1895 AC.CurrentStream = (
STREAM*)((UBYTE*)AC.CurrentStream + ofs);
1897 if ( AC.termstack ) {
1898 R_COPY_B(AC.termstack, AC.maxtermlevel*(LONG)
sizeof(LONG), LONG*);
1901 if ( AC.termsortstack ) {
1902 R_COPY_B(AC.termsortstack, AC.maxtermlevel*(LONG)
sizeof(LONG), LONG*);
1906 R_COPY_B(AC.cmod, AM.MaxTal*4*(LONG)
sizeof(UWORD), UWORD*);
1907 AM.gcmod = AC.cmod + AM.MaxTal;
1908 AC.powmod = AM.gcmod + AM.MaxTal;
1909 AM.gpowmod = AC.powmod + AM.MaxTal;
1917 ofs = AC.IfStack - AC.IfHeap;
1918 R_COPY_B(AC.IfHeap, (LONG)
sizeof(LONG)*(AC.MaxIf+1), LONG*);
1919 AC.IfStack = AC.IfHeap + ofs;
1920 R_COPY_B(AC.IfCount, (LONG)
sizeof(LONG)*(AC.MaxIf+1), LONG*);
1924 size = AC.iStop - AC.iBuffer + 2;
1925 R_COPY_B(AC.iBuffer, size, UBYTE*);
1926 ofs = AC.iBuffer - org;
1930 if ( AC.LabelNames ) {
1931 org = (UBYTE*)AC.LabelNames;
1932 R_COPY_B(AC.LabelNames, AC.MaxLabels*(LONG)(
sizeof(UBYTE*)+
sizeof(WORD)), UBYTE**);
1933 for ( i=0; i<AC.NumLabels; ++i ) {
1934 R_COPY_S(AC.LabelNames[i],UBYTE*);
1936 ofs = (UBYTE*)AC.LabelNames - org;
1937 AC.Labels = (
int*)((UBYTE*)AC.Labels + ofs);
1940 R_COPY_B(AC.FixIndices, AM.OffsetIndex*(LONG)
sizeof(WORD), WORD*);
1942 if ( AC.termsumcheck ) {
1943 R_COPY_B(AC.termsumcheck, AC.maxtermlevel*(LONG)
sizeof(WORD), WORD*);
1946 R_COPY_B(AC.WildcardNames, AC.WildcardBufferSize, UBYTE*);
1949 size = AC.toptokens - AC.tokens;
1951 org = (UBYTE*)AC.tokens;
1952 R_COPY_B(AC.tokens, size, SBYTE*);
1953 ofs = (UBYTE*)AC.tokens - org;
1954 AC.endoftokens += ofs;
1955 AC.toptokens += ofs;
1959 AC.endoftokens = AC.tokens;
1960 AC.toptokens = AC.tokens;
1964 R_COPY_B(AC.tokenarglevel, AM.MaxParLevel*(LONG)
sizeof(WORD), WORD*);
1968 R_COPY_S(AC.Fortran90Kind,UBYTE *);
1971 if ( AC.inputnumbers ) {
1972 org = (UBYTE*)AC.inputnumbers;
1973 R_COPY_B(AC.inputnumbers, AC.sizepfirstnum*(LONG)(
sizeof(WORD)+
sizeof(LONG)), LONG*);
1974 ofs = (UBYTE*)AC.inputnumbers - org;
1975 AC.pfirstnum = (WORD*)((UBYTE*)AC.pfirstnum + ofs);
1977 AC.halfmodlock = dummylock;
1980 if ( AC.IfSumCheck ) {
1981 R_COPY_B(AC.IfSumCheck, (LONG)
sizeof(WORD)*(AC.MaxIf+1), WORD*);
1984 AC.LogHandle = oldLogHandle;
1986 R_COPY_S(AC.CheckpointRunAfter,
char*);
1987 R_COPY_S(AC.CheckpointRunBefore,
char*);
1989 R_COPY_S(AC.extrasym,UBYTE *);
2003 for ( i=0; i<AP.DollarList.num; ++i ) {
2004 if ( Dollars[i].size ) {
2005 R_FREE(Dollars[i].where);
2007 CleanDollarFactors(Dollars+i);
2009 R_FREE(AP.DollarList.lijst);
2011 for ( i=0; i<AP.PreVarList.num; ++i ) {
2012 R_FREE(PreVar[i].name);
2014 R_FREE(AP.PreVarList.lijst);
2016 for ( i=0; i<AP.LoopList.num; ++i ) {
2017 R_FREE(DoLoops[i].p.buffer);
2018 if ( DoLoops[i].dollarname ) {
2019 R_FREE(DoLoops[i].dollarname);
2022 R_FREE(AP.LoopList.lijst);
2024 for ( i=0; i<AP.ProcList.num; ++i ) {
2025 R_FREE(Procedures[i].p.buffer);
2026 R_FREE(Procedures[i].name);
2028 R_FREE(AP.ProcList.lijst);
2030 for ( i=1; i<=AP.PreSwitchLevel; ++i ) {
2031 R_FREE(AP.PreSwitchStrings[i]);
2033 R_FREE(AP.PreSwitchStrings);
2034 R_FREE(AP.preStart);
2035 R_FREE(AP.procedureExtension);
2036 R_FREE(AP.cprocedureExtension);
2037 R_FREE(AP.PreIfStack);
2038 R_FREE(AP.PreSwitchModes);
2039 R_FREE(AP.PreTypes);
2046 AP = *((
struct P_const*)p); p = (
unsigned char*)p +
sizeof(
struct P_const);
2048 AP.PreVarLock = dummylock;
2051 R_COPY_LIST(AP.DollarList);
2052 for ( i=0; i<AP.DollarList.num; ++i ) {
2054 size = d->size *
sizeof(WORD);
2055 if ( size && d->where && d->where != oldAMdollarzero ) {
2056 R_COPY_B(d->where, size,
void*);
2059 d->pthreadslockread = dummylock;
2060 d->pthreadslockwrite = dummylock;
2062 if ( d->nfactors > 1 ) {
2064 for ( j = 0; j < d->nfactors; j++ ) {
2065 if ( d->factors[j].size > 0 ) {
2066 R_COPY_B(d->factors[i].where,
sizeof(WORD)*(d->factors[j].size+1),WORD*);
2071 AP.DollarList.message =
"$-variable";
2073 R_COPY_LIST(AP.PreVarList);
2074 for ( i=0; i<AP.PreVarList.num; ++i ) {
2075 R_SET(size,
size_t);
2076 org = PreVar[i].name;
2077 R_COPY_B(PreVar[i].name, size, UBYTE*);
2078 ofs = PreVar[i].name - org;
2079 if ( PreVar[i].value ) PreVar[i].value += ofs;
2080 if ( PreVar[i].argnames ) PreVar[i].argnames += ofs;
2082 AP.PreVarList.message =
"PreVariable";
2084 R_COPY_LIST(AP.LoopList);
2085 for ( i=0; i<AP.LoopList.num; ++i ) {
2086 org = DoLoops[i].p.buffer;
2087 R_COPY_B(DoLoops[i].p.buffer, DoLoops[i].p.size, UBYTE*);
2088 ofs = DoLoops[i].p.buffer - org;
2089 if ( DoLoops[i].name ) DoLoops[i].name += ofs;
2090 if ( DoLoops[i].vars ) DoLoops[i].vars += ofs;
2091 if ( DoLoops[i].contents ) DoLoops[i].contents += ofs;
2092 if ( DoLoops[i].type == ONEEXPRESSION ) {
2093 R_COPY_S(DoLoops[i].dollarname,UBYTE*);
2096 AP.LoopList.message =
"doloop";
2098 R_COPY_LIST(AP.ProcList);
2099 for ( i=0; i<AP.ProcList.num; ++i ) {
2100 if ( Procedures[i].p.size ) {
2101 if ( Procedures[i].loadmode != 1 ) {
2102 R_COPY_B(Procedures[i].p.buffer, Procedures[i].p.size, UBYTE*);
2106 Procedures[i].p.buffer = Procedures[j].p.buffer;
2109 R_COPY_S(Procedures[i].name,UBYTE*);
2111 AP.ProcList.message =
"procedure";
2113 size = (AP.NumPreSwitchStrings+1)*(LONG)
sizeof(UBYTE*);
2114 R_COPY_B(AP.PreSwitchStrings, size, UBYTE**);
2115 for ( i=1; i<=AP.PreSwitchLevel; ++i ) {
2116 R_COPY_S(AP.PreSwitchStrings[i],UBYTE*);
2120 R_COPY_B(AP.preStart, AP.pSize, UBYTE*);
2121 ofs = AP.preStart - org;
2122 if ( AP.preFill ) AP.preFill += ofs;
2123 if ( AP.preStop ) AP.preStop += ofs;
2125 R_COPY_S(AP.procedureExtension,UBYTE*);
2126 R_COPY_S(AP.cprocedureExtension,UBYTE*);
2128 R_COPY_B(AP.PreIfStack, AP.MaxPreIfLevel*(LONG)
sizeof(
int),
int*);
2129 R_COPY_B(AP.PreSwitchModes, (AP.NumPreSwitchStrings+1)*(LONG)
sizeof(
int),
int*);
2130 R_COPY_B(AP.PreTypes, (AP.MaxPreTypes+1)*(LONG)
sizeof(
int),
int*);
2141 AR.infile = AR.Fscr+1;
2142 AR.outfile = AR.Fscr;
2143 AR.hidefile = AR.Fscr+2;
2146 AR.infile = AR.Fscr;
2147 AR.outfile = AR.Fscr+1;
2148 AR.hidefile = AR.Fscr+2;
2156 namebufout = AR.outfile->name;
2157 namebufhide = AR.hidefile->name;
2158 R_FREE(AR.outfile->PObuffer);
2160 R_FREE(AR.outfile->zsp);
2161 R_FREE(AR.outfile->ziobuffer);
2163 namebufhide = AR.hidefile->name;
2164 R_FREE(AR.hidefile->PObuffer);
2166 R_FREE(AR.hidefile->zsp);
2167 R_FREE(AR.hidefile->ziobuffer);
2175 org = (UBYTE*)AR.outfile->PObuffer;
2176 size = AR.outfile->POfull - AR.outfile->PObuffer;
2177 AR.outfile->PObuffer = (WORD*)Malloc1(AR.outfile->POsize,
"PObuffer");
2179 memcpy(AR.outfile->PObuffer, p, size*
sizeof(WORD));
2180 p = (
unsigned char*)p + size*
sizeof(WORD);
2182 ofs = (UBYTE*)AR.outfile->PObuffer - org;
2183 AR.outfile->POstop = (WORD*)((UBYTE*)AR.outfile->POstop + ofs);
2184 AR.outfile->POfill = (WORD*)((UBYTE*)AR.outfile->POfill + ofs);
2185 AR.outfile->POfull = (WORD*)((UBYTE*)AR.outfile->POfull + ofs);
2186 AR.outfile->name = namebufout;
2188 AR.outfile->wPObuffer = AR.outfile->PObuffer;
2189 AR.outfile->wPOstop = AR.outfile->POstop;
2190 AR.outfile->wPOfill = AR.outfile->POfill;
2191 AR.outfile->wPOfull = AR.outfile->POfull;
2195 AR.outfile->zsp = 0;
2196 AR.outfile->ziobuffer = 0;
2202 if ( AR.outfile->handle >= 0 ) {
2203 if (
CopyFile(sortfile, AR.outfile->name) ) {
2204 MesPrint(
"ERROR: Could not copy old output sort file %s!",sortfile);
2207 AR.outfile->handle = ReOpenFile(AR.outfile->name);
2208 if ( AR.outfile->handle == -1 ) {
2209 MesPrint(
"ERROR: Could not reopen output sort file %s!",AR.outfile->name);
2212 SeekFile(AR.outfile->handle, &AR.outfile->POposition, SEEK_SET);
2217 AR.hidefile->name = namebufhide;
2218 if ( AR.hidefile->PObuffer ) {
2219 org = (UBYTE*)AR.hidefile->PObuffer;
2220 size = AR.hidefile->POfull - AR.hidefile->PObuffer;
2221 AR.hidefile->PObuffer = (WORD*)Malloc1(AR.hidefile->POsize,
"PObuffer");
2223 memcpy(AR.hidefile->PObuffer, p, size*
sizeof(WORD));
2224 p = (
unsigned char*)p + size*
sizeof(WORD);
2226 ofs = (UBYTE*)AR.hidefile->PObuffer - org;
2227 AR.hidefile->POstop = (WORD*)((UBYTE*)AR.hidefile->POstop + ofs);
2228 AR.hidefile->POfill = (WORD*)((UBYTE*)AR.hidefile->POfill + ofs);
2229 AR.hidefile->POfull = (WORD*)((UBYTE*)AR.hidefile->POfull + ofs);
2231 AR.hidefile->wPObuffer = AR.hidefile->PObuffer;
2232 AR.hidefile->wPOstop = AR.hidefile->POstop;
2233 AR.hidefile->wPOfill = AR.hidefile->POfill;
2234 AR.hidefile->wPOfull = AR.hidefile->POfull;
2239 AR.hidefile->zsp = 0;
2240 AR.hidefile->ziobuffer = 0;
2243 if ( AR.hidefile->handle >= 0 ) {
2244 if (
CopyFile(hidefile, AR.hidefile->name) ) {
2245 MesPrint(
"ERROR: Could not copy old hide file %s!",hidefile);
2248 AR.hidefile->handle = ReOpenFile(AR.hidefile->name);
2249 if ( AR.hidefile->handle == -1 ) {
2250 MesPrint(
"ERROR: Could not reopen hide file %s!",AR.hidefile->name);
2253 SeekFile(AR.hidefile->handle, &AR.hidefile->POposition, SEEK_SET);
2258 if ( ISNOTZEROPOS(pos) ) {
2259 CloseFile(AR.StoreData.Handle);
2261 if (
CopyFile(storefile, FG.fname) ) {
2262 MesPrint(
"ERROR: Could not copy old store file %s!",storefile);
2265 AR.StoreData.Handle = (WORD)ReOpenFile(FG.fname);
2266 SeekFile(AR.StoreData.Handle, &AR.StoreData.Position, SEEK_SET);
2270 R_SET(AR.OldTime, LONG);
2271 R_SET(AR.InInBuf, LONG);
2272 R_SET(AR.InHiBuf, LONG);
2274 R_SET(AR.NoCompress,
int);
2275 R_SET(AR.gzipCompress,
int);
2277 R_SET(AR.outtohide,
int);
2279 R_SET(AR.GetFile, WORD);
2280 R_SET(AR.KeptInHold, WORD);
2281 R_SET(AR.BracketOn, WORD);
2282 R_SET(AR.MaxBracket, WORD);
2283 R_SET(AR.CurDum, WORD);
2284 R_SET(AR.DeferFlag, WORD);
2285 R_SET(AR.TePos, WORD);
2286 R_SET(AR.sLevel, WORD);
2287 R_SET(AR.Stage4Name, WORD);
2288 R_SET(AR.GetOneFile, WORD);
2289 R_SET(AR.PolyFun, WORD);
2290 R_SET(AR.PolyFunType, WORD);
2291 R_SET(AR.Eside, WORD);
2292 R_SET(AR.MaxDum, WORD);
2293 R_SET(AR.level, WORD);
2294 R_SET(AR.expchanged, WORD);
2295 R_SET(AR.expflags, WORD);
2296 R_SET(AR.CurExpr, WORD);
2297 R_SET(AR.SortType, WORD);
2298 R_SET(AR.ShortSortCount, WORD);
2303 AR.CompressPointer = AR.CompressBuffer;
2306 for ( j = 0; j < AM.totalnumberofthreads; j++ ) {
2307 R_SET(AB[j]->R.wranfnpair1,
int);
2308 R_SET(AB[j]->R.wranfnpair2,
int);
2309 R_SET(AB[j]->R.wranfcall,
int);
2310 R_SET(AB[j]->R.wranfseed, ULONG);
2311 R_SET(AB[j]->R.wranfia,ULONG*);
2312 if ( AB[j]->R.wranfia ) {
2313 R_COPY_B(AB[j]->R.wranfia,
sizeof(ULONG)*AB[j]->R.wranfnpair2, ULONG*);
2317 R_SET(AR.wranfnpair1,
int);
2318 R_SET(AR.wranfnpair2,
int);
2319 R_SET(AR.wranfcall,
int);
2320 R_SET(AR.wranfseed, ULONG);
2321 R_SET(AR.wranfia,ULONG*);
2323 R_COPY_B(AR.wranfia,
sizeof(ULONG)*AR.wranfnpair2, ULONG*);
2336 l =
sizeof(A.O) - ((UBYTE *)(&(A.O.NumInBrack))-(UBYTE *)(&A.O));
2337 memcpy(&(A.O.NumInBrack), p, l); p = (
unsigned char*)p + l;
2344 if ( A.O.OptimizeResult.codesize > 0 ) {
2345 R_COPY_B(A.O.OptimizeResult.code,A.O.OptimizeResult.codesize*
sizeof(WORD),WORD *);
2347 R_COPY_S(A.O.OptimizeResult.nameofexpr,UBYTE *);
2354 R_SET(numtasks,
int);
2355 if(numtasks!=PF.numtasks){
2356 MesPrint(
"%d number of tasks expected instead of %d; use mpirun -np %d",
2357 numtasks,PF.numtasks,numtasks);
2363 R_SET(PF.rhsInParallel,
int);
2364 R_SET(PF.exprbufsize,
int);
2372 for ( j=1; j<AM.totalnumberofthreads; ++j ) {
2374 AB[j]->R.OldTime = -(*((LONG*)p+j));
2376 WriteTimerInfo((LONG*)p,(LONG *)((
unsigned char*)p + i*(LONG)
sizeof(LONG)));
2377 p = (
unsigned char*)p + 2*i*(LONG)
sizeof(LONG);
2380 if ( fclose(fd) )
return(__LINE__);
2382 M_free(buf,
"recovery buffer");
2390 AC.CheckpointStamp = TimeWallClock(1);
2393 MesPrint(
"done."); fflush(0);
2418 static int DoSnapshot(
int moduletype)
2428 LONG *longp,*longpp;
2431 MesPrint(
"Saving recovery point ... %"); fflush(0);
2432 #ifdef PRINTTIMEMARKS 2436 if ( !(fd = fopen(intermedfile,
"wb")) )
return(__LINE__);
2439 if ( fwrite(&pos, 1,
sizeof(
POSITION), fd) !=
sizeof(
POSITION) )
return(__LINE__);
2442 if ( fwrite(&moduletype, 1,
sizeof(
int), fd) !=
sizeof(
int) )
return(__LINE__);
2452 S_WRITE_B(&AM.hparallelflag,
sizeof(
int));
2453 S_WRITE_B(&AM.gparallelflag,
sizeof(
int));
2454 S_WRITE_B(&AM.gCodesFlag,
sizeof(
int));
2455 S_WRITE_B(&AM.gNamesFlag,
sizeof(
int));
2456 S_WRITE_B(&AM.gStatsFlag,
sizeof(
int));
2457 S_WRITE_B(&AM.gTokensWriteFlag,
sizeof(
int));
2458 S_WRITE_B(&AM.gNoSpacesInNumbers,
sizeof(
int));
2459 S_WRITE_B(&AM.gIndentSpace,
sizeof(WORD));
2460 S_WRITE_B(&AM.gUnitTrace,
sizeof(WORD));
2461 S_WRITE_B(&AM.gDefDim,
sizeof(
int));
2462 S_WRITE_B(&AM.gDefDim4,
sizeof(
int));
2463 S_WRITE_B(&AM.gncmod,
sizeof(WORD));
2464 S_WRITE_B(&AM.gnpowmod,
sizeof(WORD));
2465 S_WRITE_B(&AM.gmodmode,
sizeof(WORD));
2466 S_WRITE_B(&AM.gOutputMode,
sizeof(WORD));
2467 S_WRITE_B(&AM.gCnumpows,
sizeof(WORD));
2468 S_WRITE_B(&AM.gOutputSpaces,
sizeof(WORD));
2469 S_WRITE_B(&AM.gOutNumberType,
sizeof(WORD));
2470 S_WRITE_B(&AM.gfunpowers,
sizeof(
int));
2471 S_WRITE_B(&AM.gPolyFun,
sizeof(WORD));
2472 S_WRITE_B(&AM.gPolyFunType,
sizeof(WORD));
2473 S_WRITE_B(&AM.gProcessBucketSize,
sizeof(LONG));
2474 S_WRITE_B(&AM.OldChildTime,
sizeof(LONG));
2475 S_WRITE_B(&AM.OldSecTime,
sizeof(LONG));
2476 S_WRITE_B(&AM.OldMilliTime,
sizeof(LONG));
2477 S_WRITE_B(&AM.gproperorderflag,
sizeof(
int));
2478 S_WRITE_B(&AM.gThreadBucketSize,
sizeof(LONG));
2479 S_WRITE_B(&AM.gThreadStats,
sizeof(
int));
2480 S_WRITE_B(&AM.gFinalStats,
sizeof(
int));
2481 S_WRITE_B(&AM.gThreadsFlag,
sizeof(
int));
2482 S_WRITE_B(&AM.gThreadBalancing,
sizeof(
int));
2483 S_WRITE_B(&AM.gThreadSortFileSynch,
sizeof(
int));
2484 S_WRITE_B(&AM.gProcessStats,
sizeof(
int));
2485 S_WRITE_B(&AM.gOldParallelStats,
sizeof(
int));
2486 S_WRITE_B(&AM.gSortType,
sizeof(
int));
2487 S_WRITE_B(&AM.gShortStatsMax,
sizeof(WORD));
2488 S_WRITE_B(&AM.gIsFortran90,
sizeof(
int));
2489 adr = &AM.dollarzero;
2490 S_WRITE_B(&adr,
sizeof(
void*));
2491 S_WRITE_B(&AM.gFortran90Kind,
sizeof(UBYTE *));
2492 S_WRITE_S(AM.gFortran90Kind);
2494 S_WRITE_S(AM.gextrasym);
2495 S_WRITE_S(AM.ggextrasym);
2497 S_WRITE_B(&AM.PrintTotalSize,
sizeof(
int));
2498 S_WRITE_B(&AM.fbuffersize,
sizeof(
int));
2499 S_WRITE_B(&AM.gOldFactArgFlag,
sizeof(
int));
2500 S_WRITE_B(&AM.ggOldFactArgFlag,
sizeof(
int));
2509 S_WRITE_B(&AC,
sizeof(
struct C_const));
2511 S_WRITE_NAMETREE(AC.dollarnames);
2512 S_WRITE_NAMETREE(AC.exprnames);
2513 S_WRITE_NAMETREE(AC.varnames);
2515 S_WRITE_LIST(AC.ChannelList);
2516 for ( i=0; i<AC.ChannelList.num; ++i ) {
2517 S_WRITE_S(channels[i].name);
2520 ANNOUNCE(AC.FunctionList)
2521 S_WRITE_LIST(AC.FunctionList);
2522 for ( i=0; i<AC.FunctionList.num; ++i ) {
2524 if ( functions[i].tabl ) {
2525 TABLES tabl = functions[i].tabl;
2526 S_WRITE_B(tabl,
sizeof(
struct TaBlEs));
2538 TABLEEXTENSION*
sizeof(WORD)*(tabl->
totind));
2543 S_WRITE_B(tabl->
flags, tabl->
numind*(LONG)
sizeof(WORD));
2549 if ( tabl->
spare ) {
2551 S_WRITE_B(spare,
sizeof(
struct TaBlEs));
2561 TABLEEXTENSION*
sizeof(WORD)*(spare->
totind));
2565 S_WRITE_B(spare->
flags, spare->
numind*(LONG)
sizeof(WORD));
2574 ANNOUNCE(AC.ExpressionList)
2575 S_WRITE_LIST(AC.ExpressionList);
2576 for ( i=0; i<AC.ExpressionList.num; ++i ) {
2579 S_WRITE_B(ex->renum,
sizeof(
struct ReNuMbEr));
2590 S_WRITE_B(&l,
sizeof(
size_t));
2591 S_WRITE_B(ex->renum->
symb.
lo, l);
2593 if ( ex->bracketinfo ) {
2596 S_WRITE_B(ex->bracketinfo->
bracketbuffer, ex->bracketinfo->bracketbuffersize*
sizeof(WORD));
2598 if ( ex->newbracketinfo ) {
2599 S_WRITE_B(ex->newbracketinfo,
sizeof(
BRACKETINFO));
2601 S_WRITE_B(ex->newbracketinfo->
bracketbuffer, ex->newbracketinfo->bracketbuffersize*
sizeof(WORD));
2610 S_WRITE_B(&l,
sizeof(
size_t));
2611 S_WRITE_B(ex->inmem, l);
2615 ANNOUNCE(AC.IndexList)
2616 S_WRITE_LIST(AC.IndexList);
2617 S_WRITE_LIST(AC.SetElementList);
2618 S_WRITE_LIST(AC.SetList);
2619 S_WRITE_LIST(AC.SymbolList);
2620 S_WRITE_LIST(AC.VectorList);
2622 ANNOUNCE(AC.TableBaseList)
2623 S_WRITE_LIST(AC.TableBaseList);
2624 for ( i=0; i<AC.TableBaseList.num; ++i ) {
2626 if ( tablebases[i].iblocks ) {
2627 S_WRITE_B(tablebases[i].iblocks, tablebases[i].info.numberofindexblocks *
sizeof(
INDEXBLOCK*));
2628 for ( j=0; j<tablebases[i].info.numberofindexblocks; ++j ) {
2629 if ( tablebases[i].iblocks[j] ) {
2630 S_WRITE_B(tablebases[i].iblocks[j],
sizeof(
INDEXBLOCK));
2634 if ( tablebases[i].nblocks ) {
2635 S_WRITE_B(tablebases[i].nblocks, tablebases[i].info.numberofnamesblocks *
sizeof(
NAMESBLOCK*));
2636 for ( j=0; j<tablebases[i].info.numberofnamesblocks; ++j ) {
2637 if ( tablebases[i].nblocks[j] ) {
2638 S_WRITE_B(tablebases[i].nblocks[j],
sizeof(
NAMESBLOCK));
2642 S_WRITE_S(tablebases[i].name);
2643 S_WRITE_S(tablebases[i].fullname);
2644 S_WRITE_S(tablebases[i].tablenames);
2647 ANNOUNCE(AC.cbufList)
2648 S_WRITE_LIST(AC.cbufList);
2649 for ( i=0; i<AC.cbufList.num; ++i ) {
2650 S_WRITE_B(cbuf[i].Buffer, cbuf[i].BufferSize*
sizeof(WORD));
2652 S_WRITE_B(cbuf[i].lhs, cbuf[i].maxlhs*(LONG)
sizeof(WORD*));
2653 S_WRITE_B(cbuf[i].rhs, cbuf[i].maxrhs*(LONG)(
sizeof(WORD*)+2*
sizeof(LONG)+2*
sizeof(WORD)));
2654 if ( cbuf[i].boomlijst ) {
2655 S_WRITE_B(cbuf[i].boomlijst, cbuf[i].MaxTreeSize*(LONG)
sizeof(
COMPTREE));
2659 S_WRITE_LIST(AC.AutoSymbolList);
2660 S_WRITE_LIST(AC.AutoIndexList);
2661 S_WRITE_LIST(AC.AutoVectorList);
2662 S_WRITE_LIST(AC.AutoFunctionList);
2664 S_WRITE_NAMETREE(AC.autonames);
2666 ANNOUNCE(AC.Streams)
2667 S_WRITE_B(AC.Streams, AC.MaxNumStreams*(LONG)
sizeof(
STREAM));
2668 for ( i=0; i<AC.NumStreams; ++i ) {
2669 if ( AC.Streams[i].inbuffer ) {
2670 S_WRITE_B(AC.Streams[i].buffer, AC.Streams[i].inbuffer);
2672 S_WRITE_S(AC.Streams[i].FoldName);
2673 S_WRITE_S(AC.Streams[i].name);
2676 if ( AC.termstack ) {
2677 S_WRITE_B(AC.termstack, AC.maxtermlevel*(LONG)
sizeof(LONG));
2680 if ( AC.termsortstack ) {
2681 S_WRITE_B(AC.termsortstack, AC.maxtermlevel*(LONG)
sizeof(LONG));
2684 S_WRITE_B(AC.cmod, AM.MaxTal*4*(LONG)
sizeof(UWORD));
2687 S_WRITE_B(AC.IfHeap, (LONG)
sizeof(LONG)*(AC.MaxIf+1));
2688 S_WRITE_B(AC.IfCount, (LONG)
sizeof(LONG)*(AC.MaxIf+1));
2691 l = AC.iStop - AC.iBuffer + 2;
2692 S_WRITE_B(AC.iBuffer, l);
2694 if ( AC.LabelNames ) {
2695 S_WRITE_B(AC.LabelNames, AC.MaxLabels*(LONG)(
sizeof(UBYTE*)+
sizeof(WORD)));
2696 for ( i=0; i<AC.NumLabels; ++i ) {
2697 S_WRITE_S(AC.LabelNames[i]);
2701 S_WRITE_B(AC.FixIndices, AM.OffsetIndex*(LONG)
sizeof(WORD));
2703 if ( AC.termsumcheck ) {
2704 S_WRITE_B(AC.termsumcheck, AC.maxtermlevel*(LONG)
sizeof(WORD));
2707 S_WRITE_B(AC.WildcardNames, AC.WildcardBufferSize);
2710 l = AC.toptokens - AC.tokens;
2712 S_WRITE_B(AC.tokens, l);
2716 S_WRITE_B(AC.tokenarglevel, AM.MaxParLevel*(LONG)
sizeof(WORD));
2718 S_WRITE_S(AC.Fortran90Kind);
2721 if ( AC.inputnumbers ) {
2722 S_WRITE_B(AC.inputnumbers, AC.sizepfirstnum*(LONG)(
sizeof(WORD)+
sizeof(LONG)));
2726 if ( AC.IfSumCheck ) {
2727 S_WRITE_B(AC.IfSumCheck, (LONG)
sizeof(WORD)*(AC.MaxIf+1));
2730 S_WRITE_S(AC.CheckpointRunAfter);
2731 S_WRITE_S(AC.CheckpointRunBefore);
2733 S_WRITE_S(AC.extrasym);
2741 S_WRITE_B(&AP,
sizeof(
struct P_const));
2743 S_WRITE_LIST(AP.DollarList);
2744 for ( i=0; i<AP.DollarList.num; ++i ) {
2746 S_WRITE_DOLLAR(Dollars[i]);
2747 if ( d->nfactors > 1 ) {
2748 S_WRITE_B(&(d->factors),
sizeof(
FACDOLLAR)*d->nfactors);
2749 for ( j = 0; j < d->nfactors; j++ ) {
2750 if ( d->factors[j].size > 0 ) {
2751 S_WRITE_B(&(d->factors[i].where),
sizeof(WORD)*(d->factors[j].size+1));
2757 S_WRITE_LIST(AP.PreVarList);
2758 for ( i=0; i<AP.PreVarList.num; ++i ) {
2762 l = strlen((
char*)PreVar[i].name) + 1;
2763 if ( PreVar[i].value ) {
2764 l += strlen((
char*)(PreVar[i].name+l)) + 1;
2766 for ( j=0; j<PreVar[i].nargs; ++j ) {
2767 l += strlen((
char*)(PreVar[i].name+l)) + 1;
2769 S_WRITE_B(&l,
sizeof(
size_t));
2770 S_WRITE_B(PreVar[i].name, l);
2773 ANNOUNCE(AP.LoopList)
2774 S_WRITE_LIST(AP.LoopList);
2775 for ( i=0; i<AP.LoopList.num; ++i ) {
2776 S_WRITE_B(DoLoops[i].p.buffer, DoLoops[i].p.size);
2777 if ( DoLoops[i].type == ONEEXPRESSION ) {
2780 S_WRITE_S(DoLoops[i].dollarname);
2784 S_WRITE_LIST(AP.ProcList);
2785 for ( i=0; i<AP.ProcList.num; ++i ) {
2786 if ( Procedures[i].p.size ) {
2787 if ( Procedures[i].loadmode != 1 ) {
2788 S_WRITE_B(Procedures[i].p.buffer, Procedures[i].p.size);
2791 for ( j=0; j<AP.ProcList.num; ++j ) {
2792 if ( Procedures[i].p.buffer == Procedures[j].p.buffer ) {
2796 if ( j == AP.ProcList.num ) {
2797 MesPrint(
"Error writing procedures to recovery file!");
2799 S_WRITE_B(&j,
sizeof(
int));
2802 S_WRITE_S(Procedures[i].name);
2805 S_WRITE_B(AP.PreSwitchStrings, (AP.NumPreSwitchStrings+1)*(LONG)
sizeof(UBYTE*));
2806 for ( i=1; i<=AP.PreSwitchLevel; ++i ) {
2807 S_WRITE_S(AP.PreSwitchStrings[i]);
2810 S_WRITE_B(AP.preStart, AP.pSize);
2812 S_WRITE_S(AP.procedureExtension);
2813 S_WRITE_S(AP.cprocedureExtension);
2815 S_WRITE_B(AP.PreIfStack, AP.MaxPreIfLevel*(LONG)
sizeof(
int));
2816 S_WRITE_B(AP.PreSwitchModes, (AP.NumPreSwitchStrings+1)*(LONG)
sizeof(
int));
2817 S_WRITE_B(AP.PreTypes, (AP.MaxPreTypes+1)*(LONG)
sizeof(
int));
2824 l = AR.infile - AR.Fscr;
2825 S_WRITE_B(&l,
sizeof(LONG));
2829 l = AR.outfile->POfull - AR.outfile->PObuffer;
2831 S_WRITE_B(AR.outfile->PObuffer, l*
sizeof(WORD));
2834 l = AR.hidefile->POfull - AR.hidefile->PObuffer;
2836 S_WRITE_B(AR.hidefile->PObuffer, l*
sizeof(WORD));
2839 S_WRITE_B(&AR.StoreData.Fill,
sizeof(
POSITION));
2840 if ( ISNOTZEROPOS(AR.StoreData.Fill) ) {
2841 S_WRITE_B(&AR.StoreData,
sizeof(
FILEDATA));
2844 S_WRITE_B(&AR.DefPosition,
sizeof(
POSITION));
2846 l = TimeCPU(1); l = -l;
2847 S_WRITE_B(&l,
sizeof(LONG));
2849 ANNOUNCE(AR.InInBuf)
2850 S_WRITE_B(&AR.InInBuf,
sizeof(LONG));
2851 S_WRITE_B(&AR.InHiBuf,
sizeof(LONG));
2853 S_WRITE_B(&AR.NoCompress,
sizeof(
int));
2854 S_WRITE_B(&AR.gzipCompress,
sizeof(
int));
2856 S_WRITE_B(&AR.outtohide,
sizeof(
int));
2858 S_WRITE_B(&AR.GetFile,
sizeof(WORD));
2859 S_WRITE_B(&AR.KeptInHold,
sizeof(WORD));
2860 S_WRITE_B(&AR.BracketOn,
sizeof(WORD));
2861 S_WRITE_B(&AR.MaxBracket,
sizeof(WORD));
2862 S_WRITE_B(&AR.CurDum,
sizeof(WORD));
2863 S_WRITE_B(&AR.DeferFlag,
sizeof(WORD));
2864 S_WRITE_B(&AR.TePos,
sizeof(WORD));
2865 S_WRITE_B(&AR.sLevel,
sizeof(WORD));
2866 S_WRITE_B(&AR.Stage4Name,
sizeof(WORD));
2867 S_WRITE_B(&AR.GetOneFile,
sizeof(WORD));
2868 S_WRITE_B(&AR.PolyFun,
sizeof(WORD));
2869 S_WRITE_B(&AR.PolyFunType,
sizeof(WORD));
2870 S_WRITE_B(&AR.Eside,
sizeof(WORD));
2871 S_WRITE_B(&AR.MaxDum,
sizeof(WORD));
2872 S_WRITE_B(&AR.level,
sizeof(WORD));
2873 S_WRITE_B(&AR.expchanged,
sizeof(WORD));
2874 S_WRITE_B(&AR.expflags,
sizeof(WORD));
2875 S_WRITE_B(&AR.CurExpr,
sizeof(WORD));
2876 S_WRITE_B(&AR.SortType,
sizeof(WORD));
2877 S_WRITE_B(&AR.ShortSortCount,
sizeof(WORD));
2880 for ( j = 0; j < AM.totalnumberofthreads; j++ ) {
2881 S_WRITE_B(&(AB[j]->R.wranfnpair1),
sizeof(
int));
2882 S_WRITE_B(&(AB[j]->R.wranfnpair2),
sizeof(
int));
2883 S_WRITE_B(&(AB[j]->R.wranfcall),
sizeof(
int));
2884 S_WRITE_B(&(AB[j]->R.wranfseed),
sizeof(ULONG));
2885 S_WRITE_B(&(AB[j]->R.wranfia),
sizeof(ULONG *));
2886 if ( AB[j]->R.wranfia ) {
2887 S_WRITE_B(AB[j]->R.wranfia,
sizeof(ULONG)*AB[j]->R.wranfnpair2);
2891 S_WRITE_B(&(AR.wranfnpair1),
sizeof(
int));
2892 S_WRITE_B(&(AR.wranfnpair2),
sizeof(
int));
2893 S_WRITE_B(&(AR.wranfcall),
sizeof(
int));
2894 S_WRITE_B(&(AR.wranfseed),
sizeof(ULONG));
2895 S_WRITE_B(&(AR.wranfia),
sizeof(ULONG *));
2897 S_WRITE_B(AR.wranfia,
sizeof(ULONG)*AR.wranfnpair2);
2907 l =
sizeof(A.O) - ((UBYTE *)(&(A.O.NumInBrack))-(UBYTE *)(&A.O));
2908 S_WRITE_B(&(A.O.NumInBrack),l);
2913 if ( A.O.OptimizeResult.codesize > 0 ) {
2914 S_WRITE_B(A.O.OptimizeResult.code,A.O.OptimizeResult.codesize*
sizeof(WORD));
2916 S_WRITE_S(A.O.OptimizeResult.nameofexpr);
2921 S_WRITE_B(&PF.numtasks,
sizeof(
int));
2922 S_WRITE_B(&PF.rhsInParallel,
sizeof(
int));
2923 S_WRITE_B(&PF.exprbufsize,
sizeof(
int));
2924 S_WRITE_B(&PF.log,
sizeof(
int));
2930 ANNOUNCE(GetTimerInfo)
2934 i = GetTimerInfo(&longp,&longpp);
2935 S_WRITE_B(&i,
sizeof(
int));
2936 S_WRITE_B(longp, i*(LONG)
sizeof(LONG));
2937 S_WRITE_B(&i,
sizeof(
int));
2938 S_WRITE_B(longpp, i*(LONG)
sizeof(LONG));
2945 ANNOUNCE(file length)
2946 SETBASEPOSITION(pos, (ftell(fd)));
2947 fseek(fd, 0, SEEK_SET);
2948 if ( fwrite(&pos, 1,
sizeof(
POSITION), fd) !=
sizeof(
POSITION) )
return(__LINE__);
2949 fseek(fd, BASEPOSITION(pos), SEEK_SET);
2951 ANNOUNCE(file close)
2952 if ( fclose(fd) )
return(__LINE__);
2954 if ( PF.me == MASTER ) {
2959 ANNOUNCE(copy store file)
2960 if ( ISNOTZEROPOS(AR.StoreData.Fill) ) {
2961 if (
CopyFile(FG.fname, storefile) )
return(__LINE__);
2966 ANNOUNCE(copy sort file)
2967 if ( AR.outfile->handle >= 0 ) {
2968 if (
CopyFile(AR.outfile->name, sortfile) )
return(__LINE__);
2973 ANNOUNCE(copy hide file)
2974 if ( AR.hidefile->handle >= 0 ) {
2975 if (
CopyFile(AR.hidefile->name, hidefile) )
return(__LINE__);
2987 ANNOUNCE(rename intermediate file)
2988 if ( rename(intermedfile, recoveryfile) )
return(__LINE__);
2992 MesPrint(
"done."); fflush(0);
3017 LONG timestamp = TimeWallClock(1);
3019 if(PF.me == MASTER){
3021 if ( timestamp - AC.CheckpointStamp >= AC.CheckpointInterval ) {
3024 if ( AC.CheckpointRunBefore ) {
3027 l = strlen(AC.CheckpointRunBefore);
3028 NumToStr((UBYTE*)argbuf, AC.CModule);
3029 l2 = strlen(argbuf);
3030 str = (
char*)Malloc1(l+l2+2,
"callbefore");
3031 strcpy(str, AC.CheckpointRunBefore);
3033 strcpy(str+l+1, argbuf);
3034 retvalue = system(str);
3035 M_free(str,
"callbefore");
3037 MesPrint(
"Script returned error -> no recovery file will be created.");
3044 if ( retvalue == 0 ) {
3045 if ( (error = DoSnapshot(moduletype)) ) {
3046 MesPrint(
"Error creating recovery files: %d", error);
3052 for(i=1; i<PF.numtasks;i++){
3054 const char *tmpnam = PF_recoveryfile(
'm', i, 1);
3055 fd = fopen(tmpnam,
"w");
3057 MesPrint(
"Error opening recovery file for slave %d",i);
3062 MesPrint(
"Error receiving recovery file from slave %d",i);
3070 ANNOUNCE(rename intermediate file)
3071 for ( i = 0; i < PF.numtasks; i++ ) {
3072 const char *src = PF_recoveryfile(
'm', i, 1);
3073 const char *dst = PF_recoveryfile(
'm', i, 0);
3074 if ( rename(src, dst) ) {
3075 MesPrint(
"Error renaming recovery file %s -> %s", src, dst);
3079 MesPrint(
"done."); fflush(0);
3083 if ( AC.CheckpointRunAfter ) {
3086 l = strlen(AC.CheckpointRunAfter);
3087 NumToStr((UBYTE*)argbuf, AC.CModule);
3088 l2 = strlen(argbuf);
3089 str = (
char*)Malloc1(l+l2+2,
"callafter");
3090 strcpy(str, AC.CheckpointRunAfter);
3092 strcpy(str+l+1, argbuf);
3093 retvalue = system(str);
3094 M_free(str,
"callafter");
3096 MesPrint(
"Error calling script after recovery.");
3099 AC.CheckpointStamp = TimeWallClock(1);
3111 error = DoSnapshot(moduletype);
3119 fd = fopen(intermedfile,
"r");
3127 remove(intermedfile);
void DeleteRecoveryFile()
char * RecoveryFilename()
int DoRecovery(int *moduletype)
int PF_SendFile(int to, FILE *fd)
int CopyFile(char *, char *)
LONG PF_BroadcastNumber(LONG x)
BRACKETINDEX * indexbuffer
int PF_RecvFile(int from, FILE *fd)
void DoCheckpoint(int moduletype)