#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %EXTERNALROUTINE BACKGAMMON (%STRING(255) ST)
void BACKGAMMON(_imp_string255 ST) {
// 2 %OWNINTEGER BBOFF,WBOFF,DICE1,DICE2,BARFL,BRDVAL,BSTVAL,COMPVAL
static int BBOFF;
static int WBOFF;
static int DICE1;
static int DICE2;
static int BARFL;
static int BRDVAL;
static int BSTVAL;
static int COMPVAL;
// 3 %OWNINTEGER M1,M2,M3,M4,V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,I,J,K,RUNNING
static int M1;
static int M2;
static int M3;
static int M4;
static int V1;
static int V2;
static int V3;
static int V4;
static int V5;
static int V6;
static int V7;
static int V8;
static int V9;
static int V10;
static int I;
static int J;
static int K;
static int RUNNING;
// 4 %OWNINTEGER NOMOV,BARPT1,BARPT2,PT1,PT2,L,M,N,TEMP,BSTMOV1,BSTMOV2
static int NOMOV;
static int BARPT1;
static int BARPT2;
static int PT1;
static int PT2;
static int L;
static int M;
static int N;
static int TEMP;
static int BSTMOV1;
static int BSTMOV2;
// 5 %OWNINTEGER BSTPT1,BSTPT2,W1,W2,W3,W4,W5,W6,W7,W8,W9,W10
static int BSTPT1;
static int BSTPT2;
static int W1;
static int W2;
static int W3;
static int W4;
static int W5;
static int W6;
static int W7;
static int W8;
static int W9;
static int W10;
// 6 %OWNINTEGER SECOND,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10
static int SECOND;
static int BV1;
static int BV2;
static int BV3;
static int BV4;
static int BV5;
static int BV6;
static int BV7;
static int BV8;
static int BV9;
static int BV10;
// 7 %CONSTINTEGERARRAY ODDS(1:12)=35,38,44,47,47,53,18,21,15,12,6,9
const int ODDS[12] = {35, 38, 44, 47, 47, 53, 18, 21, 15, 12, 6, 9};
struct _imp_dv ODDS_dv = {ODDS, sizeof(int) /*, dims, <bounds> */};
// 8 %RECORDFORMAT F(%INTEGER WS,BS)
struct F {
union {
struct {
int WS;
int BS;
};
};
};
// 9 %OWNRECORD(f)%ARRAY BOARD(0:25){(F)}
static struct F BOARD[26];
struct _imp_dv BOARD_dv = {BOARD, sizeof(struct F) /*, dims, <bounds> */};
// 10 %OWNINTEGER G,H,PT3,PT4,DICE3,DICE4,BSTPT3,BSTPT4,BARPT3,BARPT4
static int G;
static int H;
static int PT3;
static int PT4;
static int DICE3;
static int DICE4;
static int BSTPT3;
static int BSTPT4;
static int BARPT3;
static int BARPT4;
// 11 %INTEGERFN HOMEB
int HOMEB(void) {
// 12 %INTEGER NO,I
int NO;
int I;
// 13 NO=BBOFF
NO = BBOFF;
// 14 %CYCLE I=1,1,6
// %for I = 1, 1, 6 %cycle
{
I = 0;
L_0001:
if (I == 6) goto L_0002;
I += 1;
// 15 NO=NO+BOARD(I)_BS
NO = NO + BOARD[I].BS;
// 16 %REPEAT
goto L_0001;
}
L_0002:;
// 17 %IF NO=15 %THENRESULT = 1 %ELSERESULT = 0
if (NO != 15) goto L_0004;
return 1;
L_0004:;
return 0;
// 18 %END
} /* end of HOMEB */
// 19
// 20 %ROUTINE DOBLACK
void DOBLACK(void) {
// 21 %INTEGER PT,NO,M,D1,D2,D3,D4,TOT
int PT;
int NO;
int M;
int D1;
int D2;
int D3;
int D4;
int TOT;
// 22 PROMPT ("Point:")
_imp_PROMPT(_imp_str_literal_size(15, "Point:"));
// 23 %CYCLE
L_0005:;
// 24 READ(D1); READ(D2)
_imp_READ(/*?*/ &D1);
_imp_READ(/*?*/ &D2);
// 25 %IF D1>6 %OR D2>6 %THEN PRINTSTRING("No way") %AND NEWLINE %ELSEEXIT
if (D1 > 6) goto L_0006;
if (D2 <= 6) goto L_0007;
L_0006:;
_imp_PRINTSTRING(_imp_str_literal("No way"));
_imp_NEWLINE();
goto L_0008;
L_0007:;
goto L_0009;
L_0008:;
// 26 %REPEAT
goto L_0005;
L_0009:;
// 27 %IF D1=D2 %THEN D3=D1 %AND D4=D2 %ELSE D3=0 %AND D4=0
if (D1 != D2) goto L_000A;
D3 = D1;
D4 = D2;
goto L_000B;
L_000A:;
D3 = 0;
D4 = 0;
L_000B:;
// 28 PRINTSTRING("Your throw was")
_imp_PRINTSTRING(_imp_str_literal("Your throw was"));
// 29 WRITE(D1,2); WRITE(D2,2)
_imp_WRITE(D1, 2);
_imp_WRITE(D2, 2);
// 30 NEWLINE
_imp_NEWLINE();
// 31 %IF BOARD(25)_BS>0 %THENSTART
if (BOARD[25].BS <= 0) goto L_000C;
// 32 %IF BOARD(25-D1)_WS>1 %AND BOARD(25-D2)_WS>1 %C
if (BOARD[25 - D1].WS <= 1) goto L_000D;
if (BOARD[25 - D2].WS <= 1) goto L_000D;
_imp_PRINTSTRING(_imp_str_literal("You cannot move"));
_imp_NEWLINE();
return;
L_000D:;
// 33+ %THEN PRINTSTRING("You cannot move") %AND NEWLINE %ANDRETURN
// 34 %IF BOARD(25)_BS#1 %THENSTART
if (BOARD[25].BS == 1) goto L_000E;
// 35 %IF D1#D2 %THENSTART
if (D1 == D2) goto L_000F;
// 36 %IF BOARD(25-D1)_WS>1 %THENSTART
if (BOARD[25 - D1].WS <= 1) goto L_0010;
// 37 BOARD(25-D2)_BS=BOARD(25-D2)_BS+1
BOARD[25 - D2].BS = BOARD[25 - D2].BS + 1;
// 38 BOARD(25)_BS=BOARD(25)_BS-1
BOARD[25].BS = BOARD[25].BS - 1;
// 39 BOARD(25-D2)_WS=0
BOARD[25 - D2].WS = 0;
// 40 BOARD(0)_WS=BOARD(0)_WS+1
BOARD[0].WS = BOARD[0].WS + 1;
// 41 PRINTSTRING("I have made your move")
_imp_PRINTSTRING(_imp_str_literal("I have made your move"));
// 42 NEWLINE
_imp_NEWLINE();
// 43 %RETURN
return;
// 44 %FINISH
L_0010:;
// 45 %IF BOARD(25-D2)_WS>1 %THENSTART
if (BOARD[25 - D2].WS <= 1) goto L_0011;
// 46 BOARD(25-D1)_BS=BOARD(25-D1)_BS+1
BOARD[25 - D1].BS = BOARD[25 - D1].BS + 1;
// 47 BOARD(25)_BS=BOARD(25)_BS-1
BOARD[25].BS = BOARD[25].BS - 1;
// 48 BOARD(25-D1)_WS=0
BOARD[25 - D1].WS = 0;
// 49 BOARD(0)_WS=BOARD(0)_WS+1
BOARD[0].WS = BOARD[0].WS + 1;
// 50 PRINTSTRING("I have made your move")
_imp_PRINTSTRING(_imp_str_literal("I have made your move"));
// 51 NEWLINE
_imp_NEWLINE();
// 52 %RETURN
return;
// 53 %FINISH
L_0011:;
// 54 %FINISH
L_000F:;
// 55 %FINISH
L_000E:;
// 56 %FINISH
L_000C:;
// 57 PRINTSTRING("Make your move"); NEWLINE
_imp_PRINTSTRING(_imp_str_literal("Make your move"));
_imp_NEWLINE();
// 58 %CYCLE M=1,1,4
// %for M = 1, 1, 4 %cycle
{
M = 0;
L_0012:
if (M == 4) goto L_0013;
M += 1;
// 59 AGN: TOT=D1+D2+D3+D4
U_1000:;
TOT = D1 + D2 + D3 + D4;
// 60 %IF TOT=0 %THENRETURN
if (TOT != 0) goto L_0014;
return;
L_0014:;
// 61 READ(PT); %IF PT=100 %THENRETURN; READ(NO)
_imp_READ(/*?*/ &PT);
if (PT != 100) goto L_0015;
return;
L_0015:;
_imp_READ(/*?*/ &NO);
// 62 %IF BOARD(PT)_BS=0 %THEN PRINTSTRING("No blacks on point") %C
if (BOARD[PT].BS != 0) goto L_0016;
_imp_PRINTSTRING(_imp_str_literal("No blacks on point"));
_imp_NEWLINE();
goto U_1000;
L_0016:;
// 63+ %AND NEWLINE %AND ->AGN
// 64 %IF BOARD(25)_BS#0 %AND PT#25 %THEN %C
if (BOARD[25].BS == 0) goto L_0017;
if (PT == 25) goto L_0017;
_imp_PRINTSTRING(_imp_str_literal("You have pieces on the bar"));
_imp_NEWLINE();
goto U_1000;
L_0017:;
// 65+ PRINTSTRING("You have pieces on the bar") %AND NEWLINE %AND ->AGN
// 66 %IF PT-NO<=0 %THENSTART
if (PT - NO > 0) goto L_0018;
// 67 %IF HOMEB=0 %THEN PRINTSTRING("Not all home") %AND %C
if (HOMEB() != 0) goto L_0019;
_imp_PRINTSTRING(_imp_str_literal("Not all home"));
_imp_NEWLINE();
goto U_1000;
L_0019:;
// 68+ NEWLINE %AND ->AGN; ->LEGMOV
goto U_1001;
// 69 %FINISH
L_0018:;
// 70 %IF BOARD(PT-NO)_WS>1 %THEN PRINTSTRING("White has point") %C
if (BOARD[PT - NO].WS <= 1) goto L_001A;
_imp_PRINTSTRING(_imp_str_literal("White has point"));
_imp_NEWLINE();
goto U_1000;
L_001A:;
// 71+ %AND NEWLINE %AND ->AGN
// 72 LEGMOV: %IF NO=D1 %THEN D1=0 %ELSESTART
U_1001:;
if (NO != D1) goto L_001B;
D1 = 0;
goto L_001C;
L_001B:;
// 73 %IF NO=D2 %THEN D2=0 %ELSESTART
if (NO != D2) goto L_001D;
D2 = 0;
goto L_001E;
L_001D:;
// 74 %IF NO=D3 %THEN D3=0 %ELSESTART
if (NO != D3) goto L_001F;
D3 = 0;
goto L_0020;
L_001F:;
// 75 %IF NO=D4 %THEN D4=0 %ELSESTART
if (NO != D4) goto L_0021;
D4 = 0;
goto L_0022;
L_0021:;
// 76 PRINTSTRING("Illegal move"); NEWLINE; ->AGN
_imp_PRINTSTRING(_imp_str_literal("Illegal move"));
_imp_NEWLINE();
goto U_1000;
// 77 %FINISH
L_0022:;
// 78 %FINISH
L_0020:;
// 79 %FINISH
L_001E:;
// 80 %FINISH
L_001C:;
// 81 %IF PT-NO <=0 %THEN ->BBEARO
if (PT - NO > 0) goto L_0023;
goto U_1002;
L_0023:;
// 82 BOARD(PT)_BS=BOARD(PT)_BS-1
BOARD[PT].BS = BOARD[PT].BS - 1;
// 83 BOARD(PT-NO)_BS=BOARD(PT-NO)_BS+1
BOARD[PT - NO].BS = BOARD[PT - NO].BS + 1;
// 84 %IF BOARD(PT-NO)_WS=1 %THEN BOARD(PT-NO)_WS=0 %C
if (BOARD[PT - NO].WS != 1) goto L_0024;
BOARD[PT - NO].WS = 0;
BOARD[0].WS = BOARD[0].WS + 1;
L_0024:;
// 85+ %AND BOARD(0)_WS=BOARD(0)_WS+1
// 86 ->SKP
goto U_1003;
// 87 BBEARO: BBOFF=BBOFF+1
U_1002:;
BBOFF = BBOFF + 1;
// 88 BOARD(PT)_BS=BOARD(PT)_BS-1
BOARD[PT].BS = BOARD[PT].BS - 1;
// 89 %IF BBOFF=15 %THENRETURN
if (BBOFF != 15) goto L_0025;
return;
L_0025:;
// 90 SKP: %REPEAT
U_1003:;
goto L_0012;
}
L_0013:;
// 91 %END
return;
} /* end of DOBLACK */
// 92
// 93 %ROUTINE INITIALIZE
void INITIALIZE(void) {
// 94 WBOFF=0
WBOFF = 0;
// 95 BBOFF=0
BBOFF = 0;
// 96 BOARD(1)_WS=2
BOARD[1].WS = 2;
// 97 BOARD(6)_BS=5
BOARD[6].BS = 5;
// 98 BOARD(8)_BS=3
BOARD[8].BS = 3;
// 99 BOARD(12)_WS=5
BOARD[12].WS = 5;
// 100 BOARD(13)_BS=5
BOARD[13].BS = 5;
// 101 BOARD(17)_WS=3
BOARD[17].WS = 3;
// 102 BOARD(19)_WS=5
BOARD[19].WS = 5;
// 103 BOARD(24)_BS=2
BOARD[24].BS = 2;
// 104 %END
return;
} /* end of INITIALIZE */
// 105
// 106 %ROUTINE PRINTSTATE
void PRINTSTATE(void) {
// 107 %INTEGER I,J,K,M
int I;
int J;
int K;
int M;
// 108 NEWLINES(2)
_imp_NEWLINES(2);
// 109 PRINTSTRING(" 12 11 10 9 8 7 6 5 4 3 2 1")
_imp_PRINTSTRING(_imp_str_literal(" 12 11 10 9 8 7 6 5 4 3 2 1"));
// 110 NEWLINE
_imp_NEWLINE();
// 111 PRINTSTRING("___________________________________________________")
_imp_PRINTSTRING(_imp_str_literal("___________________________________________________"));
// 112 %CYCLE I=0,1,6
// %for I = 0, 1, 6 %cycle
{
I = -1;
L_0026:
if (I == 6) goto L_0027;
I += 1;
// 113 NEWLINE
_imp_NEWLINE();
// 114 SPACES(2)
_imp_SPACES(2);
// 115 %CYCLE J=12,-1,1
// %for J = 12, -1, 1 %cycle
{
J = 13;
L_0028:
if (J == 1) goto L_0029;
J -= 1;
// 116 %IF BOARD(J)_WS>I %THEN PRINTSYMBOL('W') %AND ->RPT
if (BOARD[J].WS <= I) goto L_002B;
_imp_PRINTSYMBOL(87);
goto U_1004;
L_002B:;
// 117 %IF BOARD(J)_BS>I %THEN PRINTSYMBOL('B') %AND ->RPT
if (BOARD[J].BS <= I) goto L_002C;
_imp_PRINTSYMBOL(66);
goto U_1004;
L_002C:;
// 118 SPACE
_imp_SPACE();
// 119 RPT: %IF J=7 %THEN PRINTSTRING(" ** ") %ELSE SPACES(3)
U_1004:;
if (J != 7) goto L_002D;
_imp_PRINTSTRING(_imp_str_literal(" ** "));
goto L_002E;
L_002D:;
_imp_SPACES(3);
L_002E:;
// 120 %REPEAT
goto L_0028;
}
L_0029:;
// 121 %REPEAT
goto L_0026;
}
L_0027:;
// 122 %CYCLE K=6,-1,0
// %for K = 6, -1, 0 %cycle
{
K = 7;
L_002F:
if (K == 0) goto L_0030;
K -= 1;
// 123 NEWLINE
_imp_NEWLINE();
// 124 SPACES(2)
_imp_SPACES(2);
// 125 %CYCLE M=13,1,24
// %for M = 13, 1, 24 %cycle
{
M = 12;
L_0031:
if (M == 24) goto L_0032;
M += 1;
// 126 %IF BOARD(M)_WS>K %THEN PRINTSYMBOL('W') %AND ->RPT2
if (BOARD[M].WS <= K) goto L_0033;
_imp_PRINTSYMBOL(87);
goto U_1005;
L_0033:;
// 127 %IF BOARD(M)_BS>K %THEN PRINTSYMBOL('B') %AND ->RPT2
if (BOARD[M].BS <= K) goto L_0034;
_imp_PRINTSYMBOL(66);
goto U_1005;
L_0034:;
// 128 SPACE
_imp_SPACE();
// 129 RPT2: %IF M=18 %THEN PRINTSTRING(" ** ") %ELSE SPACES(3)
U_1005:;
if (M != 18) goto L_0035;
_imp_PRINTSTRING(_imp_str_literal(" ** "));
goto L_0036;
L_0035:;
_imp_SPACES(3);
L_0036:;
// 130 %REPEAT
goto L_0031;
}
L_0032:;
// 131 %REPEAT
goto L_002F;
}
L_0030:;
// 132 NEWLINE
_imp_NEWLINE();
// 133 PRINTSTRING("____________________________________________________")
_imp_PRINTSTRING(_imp_str_literal("____________________________________________________"));
// 134 NEWLINE
_imp_NEWLINE();
// 135 PRINTSTRING(" 13 14 15 16 17 18 19 20 21 22 23 24")
_imp_PRINTSTRING(_imp_str_literal(" 13 14 15 16 17 18 19 20 21 22 23 24"));
// 136 NEWLINE
_imp_NEWLINE();
// 137 %IF BOARD(0)_WS>0 %THENSTART
if (BOARD[0].WS <= 0) goto L_0037;
// 138 NEWLINE
_imp_NEWLINE();
// 139 PRINTSTRING("There are")
_imp_PRINTSTRING(_imp_str_literal("There are"));
// 140 WRITE(BOARD(0)_WS,2)
_imp_WRITE(BOARD[0].WS, 2);
// 141 PRINTSTRING(" whites on the bar")
_imp_PRINTSTRING(_imp_str_literal(" whites on the bar"));
// 142 %FINISH
L_0037:;
// 143 %IF BOARD(25)_BS>0 %THENSTART
if (BOARD[25].BS <= 0) goto L_0038;
// 144 NEWLINE
_imp_NEWLINE();
// 145 PRINTSTRING("there are")
_imp_PRINTSTRING(_imp_str_literal("there are"));
// 146 WRITE(BOARD(25)_BS,2)
_imp_WRITE(BOARD[25].BS, 2);
// 147 PRINTSTRING(" blacks on the bar")
_imp_PRINTSTRING(_imp_str_literal(" blacks on the bar"));
// 148 %FINISH
L_0038:;
// 149 %IF WBOFF>0 %THENSTART
if (WBOFF <= 0) goto L_0039;
// 150 NEWLINE
_imp_NEWLINE();
// 151 PRINTSTRING("white has born off")
_imp_PRINTSTRING(_imp_str_literal("white has born off"));
// 152 WRITE(WBOFF,3)
_imp_WRITE(WBOFF, 3);
// 153 %FINISH
L_0039:;
// 154 %IF BBOFF>0 %THENSTART
if (BBOFF <= 0) goto L_003A;
// 155 NEWLINE
_imp_NEWLINE();
// 156 PRINTSTRING("black has born off")
_imp_PRINTSTRING(_imp_str_literal("black has born off"));
// 157 WRITE(BBOFF,3)
_imp_WRITE(BBOFF, 3);
// 158 %FINISH
L_003A:;
// 159 NEWLINE
_imp_NEWLINE();
// 160 %END
return;
} /* end of PRINTSTATE */
// 161
// 162 %INTEGERFN BBAR
int BBAR(void) {
// 163 %RESULT = BOARD(25)_BS
return BOARD[25].BS;
// 164 %END
} /* end of BBAR */
// 165
// 166 %INTEGERFN WBAR
int WBAR(void) {
// 167 %RESULT = BOARD(0)_WS
return BOARD[0].WS;
// 168 %END
} /* end of WBAR */
// 169
// 170 %INTEGERFN BSIN
int BSIN(void) {
// 171 %INTEGER I,J; J=0
int I;
int J;
J = 0;
// 172 %CYCLE I=1,1,25
// %for I = 1, 1, 25 %cycle
{
I = 0;
L_003B:
if (I == 25) goto L_003C;
I += 1;
// 173 %IF BOARD(I)_BS=1 %THEN J=J+1
if (BOARD[I].BS != 1) goto L_003D;
J = J + 1;
L_003D:;
// 174 %REPEAT
goto L_003B;
}
L_003C:;
// 175 %RESULT = J
return J;
// 176 %END
} /* end of BSIN */
// 177
// 178 %INTEGERFN WSIN
int WSIN(void) {
// 179 %INTEGER I,J; J=0
int I;
int J;
J = 0;
// 180 %CYCLE I=0,1,24
// %for I = 0, 1, 24 %cycle
{
I = -1;
L_003E:
if (I == 24) goto L_003F;
I += 1;
// 181 %IF BOARD(I)_WS=1 %THEN J=J+1
if (BOARD[I].WS != 1) goto L_0040;
J = J + 1;
L_0040:;
// 182 %REPEAT
goto L_003E;
}
L_003F:;
// 183 %RESULT = J
return J;
// 184 %END
} /* end of WSIN */
// 185
// 186 %INTEGERFN BSINCL
int BSINCL(void) {
// 187 %INTEGER I,J,K,SUM; SUM=0
int I;
int J;
int K;
int SUM;
SUM = 0;
// 188 %CYCLE I=25,-1,1
// %for I = 25, -1, 1 %cycle
{
I = 26;
L_0041:
if (I == 1) goto L_0042;
I -= 1;
// 189 %IF BOARD(I)_BS=1 %THENSTART
if (BOARD[I].BS != 1) goto L_0043;
// 190 %IF I-12<0 %THEN J=0 %ELSE J=I-12
if (I - 12 >= 0) goto L_0044;
J = 0;
goto L_0045;
L_0044:;
J = I - 12;
L_0045:;
// 191 %CYCLE K=I-1,-1,J
// %for K = I - 1, -1, J %cycle
{
int _initial = I - 1, _final = J;
if (invalid_for_loop(_initial, -1, _final)) _imp_signal(5, 1, 0, "Illegal cycle K = I - 1, -1, J");
K = _initial - (-1);
L_0046:
if (K == _final) goto L_0047;
K -= 1;
// 192 %IF BOARD(K)_WS>0 %THEN SUM=SUM+ODDS(I-K)
if (BOARD[K].WS <= 0) goto L_0049;
SUM = SUM + ODDS[I - K - 1];
L_0049:;
// 193 %REPEAT
goto L_0046;
}
L_0047:;
// 194 %FINISH
L_0043:;
// 195 %REPEAT
goto L_0041;
}
L_0042:;
// 196 %RESULT = SUM
return SUM;
// 197 %END
} /* end of BSINCL */
// 198
// 199 %INTEGERFN WSINCL
int WSINCL(void) {
// 200 %INTEGER I,J,K,SUM; SUM=0
int I;
int J;
int K;
int SUM;
SUM = 0;
// 201 %CYCLE I=0,1,24
// %for I = 0, 1, 24 %cycle
{
I = -1;
L_004A:
if (I == 24) goto L_004B;
I += 1;
// 202 %IF BOARD(I)_WS=1 %THENSTART
if (BOARD[I].WS != 1) goto L_004C;
// 203 %IF I+12>25 %THEN J=25 %ELSE J=I+12
if (I + 12 <= 25) goto L_004D;
J = 25;
goto L_004E;
L_004D:;
J = I + 12;
L_004E:;
// 204 %CYCLE K=I+1,1,J
// %for K = I + 1, 1, J %cycle
{
int _initial = I + 1, _final = J;
if (invalid_for_loop(_initial, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle K = I + 1, 1, J");
K = _initial - (1);
L_004F:
if (K == _final) goto L_0050;
K += 1;
// 205 %IF BOARD(K)_BS>0 %THEN SUM=SUM+ODDS(K-I)
if (BOARD[K].BS <= 0) goto L_0051;
SUM = SUM + ODDS[K - I - 1];
L_0051:;
// 206 %REPEAT
goto L_004F;
}
L_0050:;
// 207 %FINISH
L_004C:;
// 208 %REPEAT
goto L_004A;
}
L_004B:;
// 209 %RESULT = SUM
return SUM;
// 210 %END
} /* end of WSINCL */
// 211
// 212 %INTEGERFN WPTSHOME
int WPTSHOME(void) {
// 213 %INTEGER I,J; J=0
int I;
int J;
J = 0;
// 214 %CYCLE I=19,1,24
// %for I = 19, 1, 24 %cycle
{
I = 18;
L_0052:
if (I == 24) goto L_0053;
I += 1;
// 215 %IF BOARD(I)_WS>1 %THEN J=J+1
if (BOARD[I].WS <= 1) goto L_0054;
J = J + 1;
L_0054:;
// 216 %REPEAT
goto L_0052;
}
L_0053:;
// 217 %RESULT = J
return J;
// 218 %END
} /* end of WPTSHOME */
// 219
// 220 %INTEGERFN BPTSHOME
int BPTSHOME(void) {
// 221 %INTEGER I,J; J=0
int I;
int J;
J = 0;
// 222 %CYCLE I=1,1,6
// %for I = 1, 1, 6 %cycle
{
I = 0;
L_0055:
if (I == 6) goto L_0056;
I += 1;
// 223 %IF BOARD(I)_BS>1 %THEN J=J+1
if (BOARD[I].BS <= 1) goto L_0057;
J = J + 1;
L_0057:;
// 224 %REPEAT
goto L_0055;
}
L_0056:;
// 225 %RESULT = J
return J;
// 226 %END
} /* end of BPTSHOME */
// 227
// 228 %INTEGERFN WPTS
int WPTS(void) {
// 229 %INTEGER I,J; J=0
int I;
int J;
J = 0;
// 230 %CYCLE I=1,1,24
// %for I = 1, 1, 24 %cycle
{
I = 0;
L_0058:
if (I == 24) goto L_0059;
I += 1;
// 231 %IF BOARD(I)_WS>1 %THEN J=J+1
if (BOARD[I].WS <= 1) goto L_005A;
J = J + 1;
L_005A:;
// 232 %REPEAT
goto L_0058;
}
L_0059:;
// 233 %RESULT = J
return J;
// 234 %END
} /* end of WPTS */
// 235
// 236 %INTEGERFN BPTS
int BPTS(void) {
// 237 %INTEGER I,J;J=0
int I;
int J;
J = 0;
// 238 %CYCLE I=1,1,24
// %for I = 1, 1, 24 %cycle
{
I = 0;
L_005B:
if (I == 24) goto L_005C;
I += 1;
// 239 %IF BOARD(K)_BS>1 %THEN J=J+1
if (BOARD[K].BS <= 1) goto L_005D;
J = J + 1;
L_005D:;
// 240 %REPEAT
goto L_005B;
}
L_005C:;
// 241 %RESULT = J
return J;
// 242 %END
} /* end of BPTS */
// 243
// 244 %INTEGERFN WPTSSUCC
int WPTSSUCC(void) {
// 245 %INTEGER I,J,K; K=0
int I;
int J;
int K;
K = 0;
// 246 %CYCLE J=1,1,22
// %for J = 1, 1, 22 %cycle
{
J = 0;
L_005E:
if (J == 22) goto L_005F;
J += 1;
// 247 %IF BOARD(J)_BS>0 %THENSTART
if (BOARD[J].BS <= 0) goto L_0060;
// 248 %CYCLE I=J+1,1,23
// %for I = J + 1, 1, 23 %cycle
{
int _initial = J + 1;
if (invalid_for_loop(_initial, 1, 23)) _imp_signal(5, 1, 0, "Illegal cycle I = J + 1, 1, 23");
I = _initial - (1);
L_0061:
if (I == 23) goto L_0062;
I += 1;
// 249 %IF BOARD(I)_WS>1 %THENSTART
if (BOARD[I].WS <= 1) goto L_0063;
// 250 %IF BOARD(I+1)_WS>1 %THEN K=K+1
if (BOARD[I + 1].WS <= 1) goto L_0064;
K = K + 1;
L_0064:;
// 251 %FINISH
L_0063:;
// 252 %REPEAT
goto L_0061;
}
L_0062:;
// 253 %EXIT
goto L_005F;
// 254 %FINISH
L_0060:;
// 255 %REPEAT
goto L_005E;
}
L_005F:;
// 256 %RESULT = K
return K;
// 257 %END
} /* end of WPTSSUCC */
// 258
// 259 %INTEGERFN BPTSSUCC
int BPTSSUCC(void) {
// 260 %INTEGER I,J,K; K=0
int I;
int J;
int K;
K = 0;
// 261 %CYCLE J=24,-1,3
// %for J = 24, -1, 3 %cycle
{
J = 25;
L_0065:
if (J == 3) goto L_0066;
J -= 1;
// 262 %IF BOARD(J)_WS>0 %THENSTART
if (BOARD[J].WS <= 0) goto L_0067;
// 263 %CYCLE I=J-1,-1,2
// %for I = J - 1, -1, 2 %cycle
{
int _initial = J - 1;
if (invalid_for_loop(_initial, -1, 2)) _imp_signal(5, 1, 0, "Illegal cycle I = J - 1, -1, 2");
I = _initial - (-1);
L_0068:
if (I == 2) goto L_0069;
I -= 1;
// 264 %IF BOARD(I)_BS>1 %THENSTART
if (BOARD[I].BS <= 1) goto L_006A;
// 265 %IF BOARD(I-1)_BS>1 %THEN K=K+1
if (BOARD[I - 1].BS <= 1) goto L_006B;
K = K + 1;
L_006B:;
// 266 %FINISH
L_006A:;
// 267 %REPEAT
goto L_0068;
}
L_0069:;
// 268 %EXIT
goto L_0066;
// 269 %FINISH
L_0067:;
// 270 %REPEAT
goto L_0065;
}
L_0066:;
// 271 %RESULT = K
return K;
// 272 %END
} /* end of BPTSSUCC */
// 273
// 274 %INTEGERFN BFST3
int BFST3(void) {
// 275 %INTEGER I,J; J=0
int I;
int J;
J = 0;
// 276 %CYCLE I=22,1,25
// %for I = 22, 1, 25 %cycle
{
I = 21;
L_006C:
if (I == 25) goto L_006D;
I += 1;
// 277 J=J+BOARD(I)_BS
J = J + BOARD[I].BS;
// 278 %REPEAT
goto L_006C;
}
L_006D:;
// 279 %RESULT = J
return J;
// 280 %END
} /* end of BFST3 */
// 281
// 282 %INTEGERFN WFST3
int WFST3(void) {
// 283 %INTEGER I,J; J=0
int I;
int J;
J = 0;
// 284 %CYCLE I=0,1,3
// %for I = 0, 1, 3 %cycle
{
I = -1;
L_006E:
if (I == 3) goto L_006F;
I += 1;
// 285 J=J+BOARD(I)_WS
J = J + BOARD[I].WS;
// 286 %REPEAT
goto L_006E;
}
L_006F:;
// 287 %RESULT = J
return J;
// 288 %END
} /* end of WFST3 */
// 289
// 290 %INTEGERFN BFST6
int BFST6(void) {
// 291 %INTEGER I,J; J=0
int I;
int J;
J = 0;
// 292 %CYCLE I=19,1,25
// %for I = 19, 1, 25 %cycle
{
I = 18;
L_0070:
if (I == 25) goto L_0071;
I += 1;
// 293 J=J+BOARD(I)_BS
J = J + BOARD[I].BS;
// 294 %REPEAT
goto L_0070;
}
L_0071:;
// 295 %RESULT = J
return J;
// 296 %END
} /* end of BFST6 */
// 297
// 298 %INTEGERFN WFST6
int WFST6(void) {
// 299 %INTEGER I,J; J=0
int I;
int J;
J = 0;
// 300 %CYCLE I=0,1,6
// %for I = 0, 1, 6 %cycle
{
I = -1;
L_0072:
if (I == 6) goto L_0073;
I += 1;
// 301 J=J+BOARD(I)_WS
J = J + BOARD[I].WS;
// 302 %REPEAT
goto L_0072;
}
L_0073:;
// 303 %RESULT = J
return J;
// 304 %END
} /* end of WFST6 */
// 305
// 306 %INTEGERFN BFST12
int BFST12(void) {
// 307 %INTEGER I,J
int I;
int J;
// 308 J=BFST6
J = BFST6();
// 309 %CYCLE I=13,1,18
// %for I = 13, 1, 18 %cycle
{
I = 12;
L_0074:
if (I == 18) goto L_0075;
I += 1;
// 310 J=J+BOARD(I)_BS
J = J + BOARD[I].BS;
// 311 %REPEAT
goto L_0074;
}
L_0075:;
// 312 %RESULT = J
return J;
// 313 %END
} /* end of BFST12 */
// 314
// 315 %INTEGERFN WFST12
int WFST12(void) {
// 316 %INTEGER I,J
int I;
int J;
// 317 J=WFST6
J = WFST6();
// 318 %CYCLE I=7,1,12
// %for I = 7, 1, 12 %cycle
{
I = 6;
L_0076:
if (I == 12) goto L_0077;
I += 1;
// 319 J=BOARD(I)_WS+J
J = BOARD[I].WS + J;
// 320 %REPEAT
goto L_0076;
}
L_0077:;
// 321 %RESULT = J
return J;
// 322 %END
} /* end of WFST12 */
// 323
// 324 %INTEGERFN WHOME
int WHOME(void) {
// 325 %INTEGER I,J; J=0
int I;
int J;
J = 0;
// 326 %CYCLE I=19,1,24
// %for I = 19, 1, 24 %cycle
{
I = 18;
L_0078:
if (I == 24) goto L_0079;
I += 1;
// 327 J=J+BOARD(I)_WS
J = J + BOARD[I].WS;
// 328 %REPEAT
goto L_0078;
}
L_0079:;
// 329 %RESULT = J
return J;
// 330 %END
} /* end of WHOME */
// 331
// 332 %INTEGERFN BHOME
int BHOME(void) {
// 333 %INTEGER I,J; J=0
int I;
int J;
J = 0;
// 334 %CYCLE I=1,1,6
// %for I = 1, 1, 6 %cycle
{
I = 0;
L_007A:
if (I == 6) goto L_007B;
I += 1;
// 335 J=J+BOARD(I)_BS
J = J + BOARD[I].BS;
// 336 %REPEAT
goto L_007A;
}
L_007B:;
// 337 %RESULT = J
return J;
// 338 %END
} /* end of BHOME */
// 339
// 340 %INTEGERFN WTOGO
int WTOGO(void) {
// 341 %INTEGER I,J,K,SUM; SUM=0
int I;
int J;
int K;
int SUM;
SUM = 0;
// 342 %CYCLE I=0,1,18
// %for I = 0, 1, 18 %cycle
{
I = -1;
L_007C:
if (I == 18) goto L_007D;
I += 1;
// 343 J=BOARD(I)_WS
J = BOARD[I].WS;
// 344 %IF J>0 %THENSTART
if (J <= 0) goto L_007E;
// 345 %CYCLE K=1,1,J
// %for K = 1, 1, J %cycle
{
int _final = J;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle K = 1, 1, J");
K = 0;
L_007F:
if (K == _final) goto L_0080;
K += 1;
// 346 SUM=SUM+19-I
SUM = SUM + 19 - I;
// 347 %REPEAT
goto L_007F;
}
L_0080:;
// 348 %FINISH
L_007E:;
// 349 %REPEAT
goto L_007C;
}
L_007D:;
// 350 %RESULT = SUM
return SUM;
// 351 %END
} /* end of WTOGO */
// 352
// 353 %INTEGERFN BTOGO
int BTOGO(void) {
// 354 %INTEGER I,J,K,SUM; SUM=0
int I;
int J;
int K;
int SUM;
SUM = 0;
// 355 %CYCLE I=7,1,25
// %for I = 7, 1, 25 %cycle
{
I = 6;
L_0081:
if (I == 25) goto L_0082;
I += 1;
// 356 J=BOARD(I)_BS
J = BOARD[I].BS;
// 357 %IF J>0 %THENSTART
if (J <= 0) goto L_0083;
// 358 %CYCLE K=1,1,J
// %for K = 1, 1, J %cycle
{
int _final = J;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle K = 1, 1, J");
K = 0;
L_0084:
if (K == _final) goto L_0085;
K += 1;
// 359 SUM=SUM+I-6
SUM = SUM + I - 6;
// 360 %REPEAT
goto L_0084;
}
L_0085:;
// 361 %FINISH
L_0083:;
// 362 %REPEAT
goto L_0081;
}
L_0082:;
// 363 %RESULT = SUM
return SUM;
// 364 %END
} /* end of BTOGO */
// 365
// 366 %ROUTINE GBRDVAL
void GBRDVAL(void) {
// 367 V1=W1*(BBAR-WBAR)
V1 = W1 * (BBAR() - WBAR());
// 368 V2=W2*(BSIN-WSIN)
V2 = W2 * (BSIN() - WSIN());
// 369 V3=W3*(BSINCL-WSINCL)//10
V3 = ((long)(W3 * (BSINCL() - WSINCL())) / (long)10);
// 370 V4=W4*(WPTSHOME-BPTSHOME)
V4 = W4 * (WPTSHOME() - BPTSHOME());
// 371 V5=W5*(WPTS-BPTS)
V5 = W5 * (WPTS() - BPTS());
// 372 V6=W6*(WPTSSUCC-BPTSSUCC)
V6 = W6 * (WPTSSUCC() - BPTSSUCC());
// 373 V7=W7*(BFST6-WFST6)
V7 = W7 * (BFST6() - WFST6());
// 374 V8=W8*(BTOGO//6-WTOGO//6)
V8 = W8 * (((long)BTOGO() / (long)6) - ((long)WTOGO() / (long)6));
// 375 V9=W9*(BFST3-WFST3)
V9 = W9 * (BFST3() - WFST3());
// 376 V10=W10*(WHOME-BHOME)
V10 = W10 * (WHOME() - BHOME());
// 377 BRDVAL=V1+V2+V3+V4+V5+V6+V7+V8+V9+V10
BRDVAL = V1 + V2 + V3 + V4 + V5 + V6 + V7 + V8 + V9 + V10;
// 378 %END
return;
} /* end of GBRDVAL */
// 379
// 380 %ROUTINE GBRD
void GBRD(void) {
// 381 V1=W1*(BBAR)
V1 = W1 * BBAR();
// 382 V2=W2*(-WSIN)
V2 = W2 * -WSIN();
// 383 V3=W3*(-WSINCL)//10
V3 = ((long)(W3 * -WSINCL()) / (long)10);
// 384 V4=W4*(WPTSHOME)
V4 = W4 * WPTSHOME();
// 385 V5=W5*(WPTS)
V5 = W5 * WPTS();
// 386 V6=W6*(WPTSSUCC)
V6 = W6 * WPTSSUCC();
// 387 V7=W7*(-WFST6)
V7 = W7 * -WFST6();
// 388 V8=W8*(-WTOGO)//6
V8 = ((long)(W8 * -WTOGO()) / (long)6);
// 389 V9=W9*(-WFST3)
V9 = W9 * -WFST3();
// 390 V10=W10*(WHOME)
V10 = W10 * WHOME();
// 391 BRDVAL=V1+V2+V3+V4+V5+V6+V7+V8+V9+V10
BRDVAL = V1 + V2 + V3 + V4 + V5 + V6 + V7 + V8 + V9 + V10;
// 392 %IF BRDVAL>BSTVAL %THENSTART
if (BRDVAL <= BSTVAL) goto L_0086;
// 393 BV1=V1; BV2=V2; BV3=V3; BV4=V4; BV5=V5; BV6=V6; BV7=V7; BV8=V8
BV1 = V1;
BV2 = V2;
BV3 = V3;
BV4 = V4;
BV5 = V5;
BV6 = V6;
BV7 = V7;
BV8 = V8;
// 394 BV9=V9; BV10=V10; BSTVAL=BRDVAL; BSTMOV1=DICE1; BSTPT1=PT1
BV9 = V9;
BV10 = V10;
BSTVAL = BRDVAL;
BSTMOV1 = DICE1;
BSTPT1 = PT1;
// 395 BSTMOV2=DICE2; BSTPT2=PT2; BSTPT3=PT3; BSTPT4=PT4
BSTMOV2 = DICE2;
BSTPT2 = PT2;
BSTPT3 = PT3;
BSTPT4 = PT4;
// 396 %FINISH
L_0086:;
// 397 %END
return;
} /* end of GBRD */
// 398
// 399
// 400 %ROUTINE MTSTMOV (%INTEGER P,D,%INTEGERNAME BP)
void MTSTMOV(int P, int D, int *BP) {
// 401 BOARD(P)_WS=BOARD(P)_WS-1
BOARD[P].WS = BOARD[P].WS - 1;
// 402 BOARD(P+D)_WS=BOARD(P+D)_WS+1
BOARD[P + D].WS = BOARD[P + D].WS + 1;
// 403 %IF BOARD(P+D)_BS=1 %THEN BOARD(P+D)_BS=0 %C
if (BOARD[P + D].BS != 1) goto L_0087;
BOARD[P + D].BS = 0;
BOARD[25].BS = BOARD[25].BS + 1;
*BP = 1;
L_0087:;
// 404+ %AND BOARD(25)_BS=BOARD(25)_BS+1 %AND BP=1
// 405 %END
return;
} /* end of MTSTMOV */
// 406
// 407 %ROUTINE CLTSTMOV (%INTEGER P,D,%INTEGERNAME BP)
void CLTSTMOV(int P, int D, int *BP) {
// 408 BOARD(P)_WS=BOARD(P)_WS+1
BOARD[P].WS = BOARD[P].WS + 1;
// 409 BOARD(P+D)_WS=BOARD(P+D)_WS-1
BOARD[P + D].WS = BOARD[P + D].WS - 1;
// 410 %IF BP=1 %THEN BOARD(P+D)_BS=1 %AND BOARD(25)_BS=BOARD(25)_BS-1 %C
if (*BP != 1) goto L_0088;
BOARD[P + D].BS = 1;
BOARD[25].BS = BOARD[25].BS - 1;
*BP = 0;
L_0088:;
// 411+ %AND BP=0
// 412 %END
return;
} /* end of CLTSTMOV */
// 413
// 414 %ROUTINE MMOVE (%INTEGER P,D)
void MMOVE(int P, int D) {
// 415 BOARD(P)_WS=BOARD(P)_WS-1
BOARD[P].WS = BOARD[P].WS - 1;
// 416 BOARD(P+D)_WS=BOARD(P+D)_WS+1
BOARD[P + D].WS = BOARD[P + D].WS + 1;
// 417 BOARD(25)_BS=BOARD(25)_BS+BOARD(P+D)_BS
BOARD[25].BS = BOARD[25].BS + BOARD[P + D].BS;
// 418 BOARD(P+D)_BS=0
BOARD[P + D].BS = 0;
// 419 %END
return;
} /* end of MMOVE */
// 420
// 421 %ROUTINE GOOD (%INTEGERNAME S,WT)
void GOOD(int *S, int *WT) {
// 422 %IF S=0 %THENRETURN
if (*S != 0) goto L_0089;
return;
L_0089:;
// 423 %IF S<0 %THEN WT=WT-1 %ELSE WT=WT+1
if (*S >= 0) goto L_008A;
*WT = *WT - 1;
goto L_008B;
L_008A:;
*WT = *WT + 1;
L_008B:;
// 424 %END
return;
} /* end of GOOD */
// 425
// 426 %ROUTINE BAD (%INTEGERNAME S,WT)
void BAD(int *S, int *WT) {
// 427 %IF S=0 %THENRETURN
if (*S != 0) goto L_008C;
return;
L_008C:;
// 428 %IF S>0 %THEN WT=WT-1 %ELSE WT=WT+1
if (*S <= 0) goto L_008D;
*WT = *WT - 1;
goto L_008E;
L_008D:;
*WT = *WT + 1;
L_008E:;
// 429 %END
return;
} /* end of BAD */
// 430
// 431 %ROUTINE LOADWTS
void LOADWTS(void) {
// 432 W1 = 19
W1 = 19;
// 433 W2 = 117
W2 = 117;
// 434 W3 = 102
W3 = 102;
// 435 W4 = 15
W4 = 15;
// 436 W5 = 15
W5 = 15;
// 437 W6 = 12
W6 = 12;
// 438 W7 = 64
W7 = 64;
// 439 W8 = 43
W8 = 43;
// 440 W9 = 62
W9 = 62;
// 441 W10 = 15
W10 = 15;
// 442 %END
return;
} /* end of LOADWTS */
// 443
// 444 %ROUTINE DUMPWTS
void DUMPWTS(void) {
// 445 SELECTOUTPUT(2)
_imp_SELECTOUTPUT(2);
// 446 NEWLINES(3); WRITE(W1,1); NEWLINE; WRITE(W2,1)
_imp_NEWLINES(3);
_imp_WRITE(W1, 1);
_imp_NEWLINE();
_imp_WRITE(W2, 1);
// 447 NEWLINE; WRITE(W3,1); NEWLINE; WRITE(W4,1)
_imp_NEWLINE();
_imp_WRITE(W3, 1);
_imp_NEWLINE();
_imp_WRITE(W4, 1);
// 448 NEWLINE; WRITE(W5,1); NEWLINE; WRITE(W6,1)
_imp_NEWLINE();
_imp_WRITE(W5, 1);
_imp_NEWLINE();
_imp_WRITE(W6, 1);
// 449 NEWLINE; WRITE(W7,1); NEWLINE; WRITE(W8,1)
_imp_NEWLINE();
_imp_WRITE(W7, 1);
_imp_NEWLINE();
_imp_WRITE(W8, 1);
// 450 NEWLINE; WRITE(W9,1); NEWLINE; WRITE(W10,1)
_imp_NEWLINE();
_imp_WRITE(W9, 1);
_imp_NEWLINE();
_imp_WRITE(W10, 1);
// 451 %END
return;
} /* end of DUMPWTS */
// 452
// 453 %INTEGERFN WBEARO
int WBEARO(void) {
// 454 %INTEGER I,J; J=WBOFF
int I;
int J;
J = WBOFF;
// 455 %CYCLE I=19,1,24
// %for I = 19, 1, 24 %cycle
{
I = 18;
L_008F:
if (I == 24) goto L_0090;
I += 1;
// 456 J=J+BOARD(I)_WS
J = J + BOARD[I].WS;
// 457 %REPEAT
goto L_008F;
}
L_0090:;
// 458 %RESULT = J
return J;
// 459 %END
} /* end of WBEARO */
// 460
// 461 %ROUTINE DOBEST(%INTEGER D)
void DOBEST(int D) {
// 462 %IF D#0 %THENSTART
if (D == 0) goto L_0091;
// 463 %IF BOARD(25-D)_WS>0 %THENSTART
if (BOARD[25 - D].WS <= 0) goto L_0092;
// 464 BOARD(25-D)_WS=BOARD(25-D)_WS-1
BOARD[25 - D].WS = BOARD[25 - D].WS - 1;
// 465 WBOFF=WBOFF+1
WBOFF = WBOFF + 1;
// 466 %FINISHELSESTART
goto L_0093;
L_0092:;
// 467 %IF BOARD(25-D+1)_WS>0 %THENSTART
if (BOARD[25 - D + 1].WS <= 0) goto L_0094;
// 468 BOARD(25-D+1)_WS=BOARD(25-D+1)_WS-1
BOARD[25 - D + 1].WS = BOARD[25 - D + 1].WS - 1;
// 469 WBOFF=WBOFF+1
WBOFF = WBOFF + 1;
// 470 %FINISHELSESTART
goto L_0095;
L_0094:;
// 471 %CYCLE M=19,1,25-D
// %for M = 19, 1, 25 - D %cycle
{
int _final = 25 - D;
if (invalid_for_loop(19, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle M = 19, 1, 25 - D");
M = 18;
L_0096:
if (M == _final) goto L_0097;
M += 1;
// ?Non-local
// 472 %IF WBOFF<8 %THENSTART
if (WBOFF >= 8) goto L_0099;
// 473 %IF BOARD(M)_WS>2 %THEN MMOVE(M,D) %ANDRETURN
if (BOARD[M].WS <= 2) goto L_009A;
MMOVE(M, D);
return;
L_009A:;
// 474 %FINISHELSESTART
goto L_009B;
L_0099:;
// 475 %IF BOARD(M)_WS>1 %THEN MMOVE(M,D) %ANDRETURN
if (BOARD[M].WS <= 1) goto L_009C;
MMOVE(M, D);
return;
L_009C:;
// 476 %FINISH
L_009B:;
// 477 %REPEAT
goto L_0096;
}
L_0097:;
// 478 %CYCLE M=19,1,24
// %for M = 19, 1, 24 %cycle
{
M = 18;
L_009D:
if (M == 24) goto L_009E;
M += 1;
// ?Non-local
// 479 %IF DICE2+M<25 %THENSTART
if (DICE2 + M >= 25) goto L_009F;
// 480 %IF BOARD(M)_WS>0 %THEN MMOVE(M,DICE2) %ANDRETURN
if (BOARD[M].WS <= 0) goto L_00A0;
MMOVE(M, DICE2);
return;
L_00A0:;
// 481 %FINISHELSESTART
goto L_00A1;
L_009F:;
// 482 %IF BOARD(M)_WS>0 %THENSTART
if (BOARD[M].WS <= 0) goto L_00A2;
// 483 BOARD(M)_WS=BOARD(M)_WS-1
BOARD[M].WS = BOARD[M].WS - 1;
// 484 WBOFF=WBOFF+1; %RETURN
WBOFF = WBOFF + 1;
return;
// 485 %FINISH
L_00A2:;
// 486 %FINISH
L_00A1:;
// 487 %REPEAT
goto L_009D;
}
L_009E:;
// 488 %FINISH
L_0095:;
// 489 %FINISH
L_0093:;
// 490 %FINISH
L_0091:;
// 491 %END
return;
} /* end of DOBEST */
// 492
// 493 %ROUTINE MTSTBOFF(%INTEGER NUM,DIE)
void MTSTBOFF(int NUM, int DIE) {
// 494 %IF NUM+DIE<25 %THENSTART
if (NUM + DIE >= 25) goto L_00A3;
// 495 %IF BOARD(NUM+DIE)_BS=0 %THEN MMOVE(NUM,DIE) %ELSE NOMOV=1
if (BOARD[NUM + DIE].BS != 0) goto L_00A4;
MMOVE(NUM, DIE);
goto L_00A5;
L_00A4:;
NOMOV = 1;
L_00A5:;
// 496 %FINISHELSESTART
goto L_00A6;
L_00A3:;
// 497 BOARD(NUM)_WS=BOARD(NUM)_WS-1
BOARD[NUM].WS = BOARD[NUM].WS - 1;
// 498 WBOFF=WBOFF+1
WBOFF = WBOFF + 1;
// 499 %FINISH
L_00A6:;
// 500 %END
return;
} /* end of MTSTBOFF */
// 501
// 502 %ROUTINE CLTSTBOFF(%INTEGER NUM,DIE)
void CLTSTBOFF(int NUM, int DIE) {
// 503 TEMP=0
TEMP = 0;
// 504 %IF NUM+DIE<25 %THEN CLTSTMOV(NUM,DIE,TEMP) %ELSESTART
if (NUM + DIE >= 25) goto L_00A7;
CLTSTMOV(NUM, DIE, /*?*/ &TEMP);
goto L_00A8;
L_00A7:;
// 505 BOARD(NUM)_WS=BOARD(NUM)_WS+1
BOARD[NUM].WS = BOARD[NUM].WS + 1;
// 506 WBOFF=WBOFF-1
WBOFF = WBOFF - 1;
// 507 %FINISH
L_00A8:;
// 508 %END
return;
} /* end of CLTSTBOFF */
// 509
// 510 !
// 511 !
// 512 !
// 513 LOADWTS
LOADWTS();
// 514 SELECTINPUT(0)
_imp_SELECTINPUT(0);
// 515 CLOSESTREAM(1)
_imp_CLOSESTREAM(1);
// 516 INITIALIZE
INITIALIZE();
// 517 PRINTSTATE
PRINTSTATE();
// 518 STRT: %CYCLE
U_1006:;
L_00A9:;
// 519 READ(DICE1); READ(DICE2); BSTVAL=X'80000000'
_imp_READ(/*?*/ &DICE1);
_imp_READ(/*?*/ &DICE2);
BSTVAL = -2147483648;
// 520 %IF DICE1=DICE2 %THEN DICE3=DICE1 %AND DICE4=DICE2 %C
if (DICE1 != DICE2) goto L_00AA;
DICE3 = DICE1;
DICE4 = DICE2;
goto L_00AB;
L_00AA:;
DICE3 = 0;
DICE4 = 0;
L_00AB:;
// 521+ %ELSE DICE3=0 %AND DICE4=0
// 522 RUNNING=0
RUNNING = 0;
// 523 %IF WBEARO=15 %THEN -> BEAROFF
if (WBEARO() != 15) goto L_00AC;
goto U_1007;
L_00AC:;
// 524 TEMP=BBOFF
TEMP = BBOFF;
// 525 %CYCLE L=0,1,24
// %for L = 0, 1, 24 %cycle
{
L = -1;
L_00AD:
if (L == 24) goto L_00AE;
L += 1;
// 526 %IF BOARD(L)_WS>0 %THENEXIT
if (BOARD[L].WS <= 0) goto L_00AF;
goto L_00AE;
L_00AF:;
// 527 TEMP=TEMP+BOARD(L)_BS
TEMP = TEMP + BOARD[L].BS;
// 528 %REPEAT
goto L_00AD;
}
L_00AE:;
// 529 %IF TEMP=15 %THEN RUNNING=1 %AND -> RUN
if (TEMP != 15) goto L_00B0;
RUNNING = 1;
goto U_1008;
L_00B0:;
// 530 M1=0;M2=0;M3=0;M4=0;BARFL=0
M1 = 0;
M2 = 0;
M3 = 0;
M4 = 0;
BARFL = 0;
// 531 %IF WBAR>0 %THENSTART
if (WBAR() <= 0) goto L_00B1;
// 532 %IF WBAR>1 %THENSTART
if (WBAR() <= 1) goto L_00B2;
// 533 %IF BOARD(DICE1)_BS<2 %THEN MMOVE(0,DICE1)
if (BOARD[DICE1].BS >= 2) goto L_00B3;
MMOVE(0, DICE1);
L_00B3:;
// 534 %IF BOARD(DICE2)_BS<2 %THEN MMOVE(0,DICE2)
if (BOARD[DICE2].BS >= 2) goto L_00B4;
MMOVE(0, DICE2);
L_00B4:;
// 535 -> DONE
goto U_1009;
// 536 %FINISH
L_00B2:;
// 537 %IF BOARD(DICE1)_BS>1 %AND BOARD(DICE2)_BS>1 %THEN -> DONE
if (BOARD[DICE1].BS <= 1) goto L_00B5;
if (BOARD[DICE2].BS <= 1) goto L_00B5;
goto U_1009;
L_00B5:;
// 538 BARFL=1
BARFL = 1;
// 539 %FINISH
L_00B1:;
// 540 %CYCLE K=1,1,2
// %for K = 1, 1, 2 %cycle
{
K = 0;
L_00B6:
if (K == 2) goto L_00B7;
K += 1;
// 541 %IF K=1 %THEN SECOND=0 %ELSESTART
if (K != 1) goto L_00B8;
SECOND = 0;
goto L_00B9;
L_00B8:;
// 542 TEMP=DICE1; DICE1=DICE2; DICE2=TEMP; SECOND=1
TEMP = DICE1;
DICE1 = DICE2;
DICE2 = TEMP;
SECOND = 1;
// 543 %FINISH
L_00B9:;
// 544 %CYCLE I=0,1,23
// %for I = 0, 1, 23 %cycle
{
I = -1;
L_00BA:
if (I == 23) goto L_00BB;
I += 1;
// 545 %IF BOARD(I)_WS>0 %THEN PT1=I %ELSE -> CYC1
if (BOARD[I].WS <= 0) goto L_00BC;
PT1 = I;
goto L_00BD;
L_00BC:;
goto U_100A;
L_00BD:;
// 546 %IF PT1+DICE1<25 %AND BOARD(PT1+DICE1)_BS<2 %THENSTART
if (PT1 + DICE1 >= 25) goto L_00BE;
if (BOARD[PT1 + DICE1].BS >= 2) goto L_00BE;
// 547 MTSTMOV(PT1,DICE1,BARPT1); M1=1
MTSTMOV(PT1, DICE1, /*?*/ &BARPT1);
M1 = 1;
// 548 %IF WBEARO=15 %THEN DICE1=0 %AND -> BEAROFF
if (WBEARO() != 15) goto L_00BF;
DICE1 = 0;
goto U_1007;
L_00BF:;
// 549 %IF SECOND=1 %THEN N=I+1 %ELSE N=I
if (SECOND != 1) goto L_00C0;
N = I + 1;
goto L_00C1;
L_00C0:;
N = I;
L_00C1:;
// 550 %CYCLE J=N,1,24
// %for J = N, 1, 24 %cycle
{
int _initial = N;
if (invalid_for_loop(_initial, 1, 24)) _imp_signal(5, 1, 0, "Illegal cycle J = N, 1, 24");
J = _initial - (1);
L_00C2:
if (J == 24) goto L_00C3;
J += 1;
// 551 %IF BOARD(J)_WS>0 %THEN PT2=J %ELSE -> CYC2
if (BOARD[J].WS <= 0) goto L_00C5;
PT2 = J;
goto L_00C6;
L_00C5:;
goto U_100B;
L_00C6:;
// 552 %IF PT2+DICE2<25 %AND BOARD(PT2+DICE2)_BS<2 %THENSTART
if (PT2 + DICE2 >= 25) goto L_00C7;
if (BOARD[PT2 + DICE2].BS >= 2) goto L_00C7;
// 553 MTSTMOV(PT2,DICE2,BARPT2); M2=1
MTSTMOV(PT2, DICE2, /*?*/ &BARPT2);
M2 = 1;
// 554 %IF DICE1=DICE2 %THENSTART
if (DICE1 != DICE2) goto L_00C8;
// 555 %IF WBEARO=15 %THEN DICE2=0 %AND DICE1=0 %AND -> BEAROFF
if (WBEARO() != 15) goto L_00C9;
DICE2 = 0;
DICE1 = 0;
goto U_1007;
L_00C9:;
// 556 %CYCLE G=J,1,23
// %for G = J, 1, 23 %cycle
{
int _initial = J;
if (invalid_for_loop(_initial, 1, 23)) _imp_signal(5, 1, 0, "Illegal cycle G = J, 1, 23");
G = _initial - (1);
L_00CA:
if (G == 23) goto L_00CB;
G += 1;
// 557 %IF BOARD(G)_WS>0 %THEN PT3=G %ELSE -> CYC3
if (BOARD[G].WS <= 0) goto L_00CD;
PT3 = G;
goto L_00CE;
L_00CD:;
goto U_100C;
L_00CE:;
// 558 %IF PT3+DICE1<25 %AND BOARD(PT3+DICE1)_BS<2 %C
if (PT3 + DICE1 >= 25) goto L_00CF;
if (BOARD[PT3 + DICE1].BS >= 2) goto L_00CF;
// 559+ %THENSTART
// 560 MTSTMOV(PT3,DICE1,BARPT3); M3=1
MTSTMOV(PT3, DICE1, /*?*/ &BARPT3);
M3 = 1;
// 561 %IF WBEARO=15 %THEN DICE1=0 %AND DICE2=0 %C
if (WBEARO() != 15) goto L_00D0;
DICE1 = 0;
DICE2 = 0;
DICE3 = 0;
goto U_1007;
L_00D0:;
// 562+ %AND DICE3=0 %AND -> BEAROFF
// 563 %CYCLE H=G,1,23
// %for H = G, 1, 23 %cycle
{
int _initial = G;
if (invalid_for_loop(_initial, 1, 23)) _imp_signal(5, 1, 0, "Illegal cycle H = G, 1, 23");
H = _initial - (1);
L_00D1:
if (H == 23) goto L_00D2;
H += 1;
// 564 %IF BOARD(H)_WS>0 %THEN PT4=H %ELSE -> CYC4
if (BOARD[H].WS <= 0) goto L_00D4;
PT4 = H;
goto L_00D5;
L_00D4:;
goto U_100D;
L_00D5:;
// 565 %IF PT4+DICE2<25 %AND BOARD(PT4+DICE2)_BS<2 %C
if (PT4 + DICE2 >= 25) goto L_00D6;
if (BOARD[PT4 + DICE2].BS >= 2) goto L_00D6;
// 566+ %THENSTART
// 567 MTSTMOV(PT4,DICE2,BARPT4); M4=1
MTSTMOV(PT4, DICE2, /*?*/ &BARPT4);
M4 = 1;
// 568 GBRD
GBRD();
// 569 CLTSTMOV(PT4,DICE2,BARPT4)
CLTSTMOV(PT4, DICE2, /*?*/ &BARPT4);
// 570 %FINISH
L_00D6:;
// 571 CYC4: %REPEAT
U_100D:;
goto L_00D1;
}
L_00D2:;
// 572 %IF M4=0 %THEN GBRD %AND BSTVAL=X'80000000'
if (M4 != 0) goto L_00D7;
GBRD();
BSTVAL = -2147483648;
L_00D7:;
// 573 CLTSTMOV(PT3,DICE1,BARPT3)
CLTSTMOV(PT3, DICE1, /*?*/ &BARPT3);
// 574 %FINISH
L_00CF:;
// 575 CYC3: %REPEAT
U_100C:;
goto L_00CA;
}
L_00CB:;
// 576 %IF M3=0 %THEN GBRD %AND BSTVAL=X'80000000'
if (M3 != 0) goto L_00D8;
GBRD();
BSTVAL = -2147483648;
L_00D8:;
// 577 %FINISHELSE GBRD
goto L_00D9;
L_00C8:;
GBRD();
L_00D9:;
// 578 CLTSTMOV(PT2,DICE2,BARPT2)
CLTSTMOV(PT2, DICE2, /*?*/ &BARPT2);
// 579 %FINISH
L_00C7:;
// 580 CYC2: %REPEAT
U_100B:;
goto L_00C2;
}
L_00C3:;
// 581 %IF M2=0 %THEN GBRD %AND BSTVAL=X'80000000'
if (M2 != 0) goto L_00DA;
GBRD();
BSTVAL = -2147483648;
L_00DA:;
// 582 CLTSTMOV(PT1,DICE1,BARPT1)
CLTSTMOV(PT1, DICE1, /*?*/ &BARPT1);
// 583 %FINISH
L_00BE:;
// 584 %EXITIF BARFL=1
if (BARFL != 1) goto L_00DB;
goto L_00BB;
L_00DB:;
// 585 CYC1: %REPEAT
U_100A:;
goto L_00BA;
}
L_00BB:;
// 586 %EXITIF DICE1=DICE2
if (DICE1 != DICE2) goto L_00DC;
goto L_00B7;
L_00DC:;
// 587 %REPEAT
goto L_00B6;
}
L_00B7:;
// 588 %IF M1=1 %THEN MMOVE(BSTPT1,BSTMOV1)
if (M1 != 1) goto L_00DD;
MMOVE(BSTPT1, BSTMOV1);
L_00DD:;
// 589 %IF M2=1 %THEN MMOVE(BSTPT2,BSTMOV2)
if (M2 != 1) goto L_00DE;
MMOVE(BSTPT2, BSTMOV2);
L_00DE:;
// 590 %IF DICE1=DICE2 %THENSTART
if (DICE1 != DICE2) goto L_00DF;
// 591 %IF M3=1 %THEN MMOVE(BSTPT3,BSTMOV1)
if (M3 != 1) goto L_00E0;
MMOVE(BSTPT3, BSTMOV1);
L_00E0:;
// 592 %IF M4=1 %THEN MMOVE(BSTPT4,BSTMOV2)
if (M4 != 1) goto L_00E1;
MMOVE(BSTPT4, BSTMOV2);
L_00E1:;
// 593 %FINISH
L_00DF:;
// 594 DONE: %IF WBOFF=15 %THEN PRINTSTRING("yeah") %AND NEWLINE %ANDEXIT
U_1009:;
if (WBOFF != 15) goto L_00E2;
_imp_PRINTSTRING(_imp_str_literal("yeah"));
_imp_NEWLINE();
goto L_00E3;
L_00E2:;
// 595 PRINTSTATE; DOBLACK
PRINTSTATE();
DOBLACK();
// 596 %IF BBOFF=15 %THEN PRINTSTRING("pity") %AND NEWLINE %ANDEXIT
if (BBOFF != 15) goto L_00E4;
_imp_PRINTSTRING(_imp_str_literal("pity"));
_imp_NEWLINE();
goto L_00E3;
L_00E4:;
// 597 %IF RUNNING=1 %THEN -> STRT
if (RUNNING != 1) goto L_00E5;
goto U_1006;
L_00E5:;
// 598 GBRDVAL
GBRDVAL();
// 599 %IF BRDVAL=COMPVAL %THEN -> STRT
if (BRDVAL != COMPVAL) goto L_00E6;
goto U_1006;
L_00E6:;
// 600 %IF COMPVAL<BRDVAL %THENSTART
if (COMPVAL >= BRDVAL) goto L_00E7;
// 601 GOOD(BV1,W1); GOOD(BV2,W2); GOOD(BV3,W3); GOOD(BV4,W4)
GOOD(/*?*/ &BV1, /*?*/ &W1);
GOOD(/*?*/ &BV2, /*?*/ &W2);
GOOD(/*?*/ &BV3, /*?*/ &W3);
GOOD(/*?*/ &BV4, /*?*/ &W4);
// 602 GOOD(BV5,W5); GOOD(BV6,W6); GOOD(BV7,W7); GOOD(BV8,W8)
GOOD(/*?*/ &BV5, /*?*/ &W5);
GOOD(/*?*/ &BV6, /*?*/ &W6);
GOOD(/*?*/ &BV7, /*?*/ &W7);
GOOD(/*?*/ &BV8, /*?*/ &W8);
// 603 GOOD(BV9,W9); GOOD(BV10,W10)
GOOD(/*?*/ &BV9, /*?*/ &W9);
GOOD(/*?*/ &BV10, /*?*/ &W10);
// 604 %FINISHELSESTART
goto L_00E8;
L_00E7:;
// 605 BAD(BV1,W1); BAD(BV2,W2); BAD(BV3,W3); BAD(BV4,W4); BAD(BV5,W5)
BAD(/*?*/ &BV1, /*?*/ &W1);
BAD(/*?*/ &BV2, /*?*/ &W2);
BAD(/*?*/ &BV3, /*?*/ &W3);
BAD(/*?*/ &BV4, /*?*/ &W4);
BAD(/*?*/ &BV5, /*?*/ &W5);
// 606 BAD(BV6,W6); BAD(BV7,W7); BAD(BV8,W8); BAD(BV9,W9); BAD(BV10,W10)
BAD(/*?*/ &BV6, /*?*/ &W6);
BAD(/*?*/ &BV7, /*?*/ &W7);
BAD(/*?*/ &BV8, /*?*/ &W8);
BAD(/*?*/ &BV9, /*?*/ &W9);
BAD(/*?*/ &BV10, /*?*/ &W10);
// 607 %FINISH
L_00E8:;
// 608 COMPVAL=BRDVAL; -> STRT
COMPVAL = BRDVAL;
goto U_1006;
// 609 RUN: %IF DICE2>DICE1 %THENSTART
U_1008:;
if (DICE2 <= DICE1) goto L_00E9;
// 610 TEMP=DICE2; DICE2=DICE1; DICE1=TEMP
TEMP = DICE2;
DICE2 = DICE1;
DICE1 = TEMP;
// 611 %FINISH
L_00E9:;
// 612 TEMP=0
TEMP = 0;
// 613 %CYCLE I=1,1,18
// %for I = 1, 1, 18 %cycle
{
I = 0;
L_00EA:
if (I == 18) goto L_00EB;
I += 1;
// 614 %IF BOARD(I)_WS>0 %THENSTART
if (BOARD[I].WS <= 0) goto L_00EC;
// 615 MMOVE(I,DICE1); TEMP=1
MMOVE(I, DICE1);
TEMP = 1;
// 616 %CYCLE J=I,1,18
// %for J = I, 1, 18 %cycle
{
int _initial = I;
if (invalid_for_loop(_initial, 1, 18)) _imp_signal(5, 1, 0, "Illegal cycle J = I, 1, 18");
J = _initial - (1);
L_00ED:
if (J == 18) goto L_00EE;
J += 1;
// 617 %IF BOARD(J)_WS>0 %THENSTART
if (BOARD[J].WS <= 0) goto L_00EF;
// 618 %IF DICE1#DICE2 %THEN MMOVE(J,DICE2) %C
if (DICE1 == DICE2) goto L_00F0;
MMOVE(J, DICE2);
goto L_00F1;
L_00F0:;
MMOVE(J, DICE1);
L_00F1:;
// 619+ %ELSE MMOVE(J,DICE1); TEMP=2
TEMP = 2;
// 620 %IF DICE1=DICE2 %THENSTART
if (DICE1 != DICE2) goto L_00F2;
// 621 %CYCLE G=J,1,18
// %for G = J, 1, 18 %cycle
{
int _initial = J;
if (invalid_for_loop(_initial, 1, 18)) _imp_signal(5, 1, 0, "Illegal cycle G = J, 1, 18");
G = _initial - (1);
L_00F3:
if (G == 18) goto L_00F4;
G += 1;
// 622 %IF BOARD(G)_WS>0 %THENSTART
if (BOARD[G].WS <= 0) goto L_00F6;
// 623 MMOVE(G,DICE1); TEMP=3
MMOVE(G, DICE1);
TEMP = 3;
// 624 %CYCLE H=G,1,18
// %for H = G, 1, 18 %cycle
{
int _initial = G;
if (invalid_for_loop(_initial, 1, 18)) _imp_signal(5, 1, 0, "Illegal cycle H = G, 1, 18");
H = _initial - (1);
L_00F7:
if (H == 18) goto L_00F8;
H += 1;
// 625 %IF BOARD(H)_WS>0 %THENSTART
if (BOARD[H].WS <= 0) goto L_00FA;
// 626 MMOVE(H,DICE2); TEMP=4
MMOVE(H, DICE2);
TEMP = 4;
// 627 %EXIT
goto L_00F8;
// 628 %FINISH
L_00FA:;
// 629 %REPEAT
goto L_00F7;
}
L_00F8:;
// 630 %EXIT
goto L_00F4;
// 631 %FINISH
L_00F6:;
// 632 %REPEAT
goto L_00F3;
}
L_00F4:;
// 633 %FINISH
L_00F2:;
// 634 %EXIT
goto L_00EE;
// 635 %FINISH
L_00EF:;
// 636 %REPEAT
goto L_00ED;
}
L_00EE:;
// 637 %EXIT
goto L_00EB;
// 638 %FINISH
L_00EC:;
// 639 %REPEAT
goto L_00EA;
}
L_00EB:;
// 640 %IF DICE1=DICE2 %AND TEMP=4 %THEN -> DONE
if (DICE1 != DICE2) goto L_00FB;
if (TEMP != 4) goto L_00FB;
goto U_1009;
L_00FB:;
// 641 %IF DICE1#DICE2 %AND TEMP=2 %THEN -> DONE
if (DICE1 == DICE2) goto L_00FC;
if (TEMP != 2) goto L_00FC;
goto U_1009;
L_00FC:;
// 642 %IF DICE1#DICE2 %THEN DICE1=0 %AND -> BEAROFF
if (DICE1 == DICE2) goto L_00FD;
DICE1 = 0;
goto U_1007;
L_00FD:;
// 643 DICE1=0
DICE1 = 0;
// 644 %IF TEMP>1 %THEN DICE2=0
if (TEMP <= 1) goto L_00FE;
DICE2 = 0;
L_00FE:;
// 645 %IF TEMP>2 %THEN DICE3=0
if (TEMP <= 2) goto L_00FF;
DICE3 = 0;
L_00FF:;
// 646 BEAROFF: RUNNING=1
U_1007:;
RUNNING = 1;
// 647 TEMP=WBOFF
TEMP = WBOFF;
// 648 %CYCLE M=24,-1,19
// %for M = 24, -1, 19 %cycle
{
M = 25;
L_0100:
if (M == 19) goto L_0101;
M -= 1;
// 649 %IF BOARD(M)_BS>0 %THEN -> SAFETY
if (BOARD[M].BS <= 0) goto L_0102;
goto U_100E;
L_0102:;
// 650 TEMP=TEMP+BOARD(M)_WS
TEMP = TEMP + BOARD[M].WS;
// 651 %IF TEMP=15 %THENEXIT
if (TEMP != 15) goto L_0103;
goto L_0101;
L_0103:;
// 652 %REPEAT
goto L_0100;
}
L_0101:;
// 653 %IF DICE1>DICE2 %THENSTART
if (DICE1 <= DICE2) goto L_0104;
// 654 TEMP=DICE2; DICE2=DICE1; DICE1=TEMP
TEMP = DICE2;
DICE2 = DICE1;
DICE1 = TEMP;
// 655 %FINISH
L_0104:;
// 656 %IF DICE1#0 %THENSTART
if (DICE1 == 0) goto L_0105;
// 657 %IF BOARD(25-DICE1)_WS>0 %THENSTART
if (BOARD[25 - DICE1].WS <= 0) goto L_0106;
// 658 BOARD(25-DICE1)_WS=BOARD(25-DICE1)_WS-1
BOARD[25 - DICE1].WS = BOARD[25 - DICE1].WS - 1;
// 659 WBOFF=WBOFF+1
WBOFF = WBOFF + 1;
// 660 %FINISHELSESTART
goto L_0107;
L_0106:;
// 661 %IF BOARD(25-DICE1+1)_WS>0 %THENSTART
if (BOARD[25 - DICE1 + 1].WS <= 0) goto L_0108;
// 662 BOARD(25-DICE1+1)_WS=BOARD(25-DICE1+1)_WS-1
BOARD[25 - DICE1 + 1].WS = BOARD[25 - DICE1 + 1].WS - 1;
// 663 WBOFF=WBOFF+1
WBOFF = WBOFF + 1;
// 664 %FINISHELSESTART
goto L_0109;
L_0108:;
// 665 %CYCLE M=19,1,25-DICE1
// %for M = 19, 1, 25 - DICE1 %cycle
{
int _final = 25 - DICE1;
if (invalid_for_loop(19, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle M = 19, 1, 25 - DICE1");
M = 18;
L_010A:
if (M == _final) goto L_010B;
M += 1;
// 666 %IF WBOFF<8 %THENSTART
if (WBOFF >= 8) goto L_010C;
// 667 %IF BOARD(M)_WS>2 %THEN MMOVE(M,DICE1) %AND -> SEC
if (BOARD[M].WS <= 2) goto L_010D;
MMOVE(M, DICE1);
goto U_100F;
L_010D:;
// 668 %FINISHELSESTART
goto L_010E;
L_010C:;
// 669 %IF BOARD(M)_WS>1 %THEN MMOVE(M,DICE1) %AND -> SEC
if (BOARD[M].WS <= 1) goto L_010F;
MMOVE(M, DICE1);
goto U_100F;
L_010F:;
// 670 %FINISH
L_010E:;
// 671 %REPEAT
goto L_010A;
}
L_010B:;
// 672 %CYCLE M=19,1,24
// %for M = 19, 1, 24 %cycle
{
M = 18;
L_0110:
if (M == 24) goto L_0111;
M += 1;
// 673 %IF DICE2+M<25 %THENSTART
if (DICE2 + M >= 25) goto L_0112;
// 674 %IF BOARD(M)_WS>0 %THEN MMOVE(M,DICE1) %ANDEXIT
if (BOARD[M].WS <= 0) goto L_0113;
MMOVE(M, DICE1);
goto L_0111;
L_0113:;
// 675 %FINISH
L_0112:;
// 676 %IF M+DICE2=25 %THENSTART
if (M + DICE2 != 25) goto L_0114;
// 677 %IF BOARD(M)_WS>1 %THEN MMOVE(M,DICE1) %ANDEXIT
if (BOARD[M].WS <= 1) goto L_0115;
MMOVE(M, DICE1);
goto L_0111;
L_0115:;
// 678 %FINISH
L_0114:;
// 679 %IF DICE2+M>25 %THENSTART
if (DICE2 + M <= 25) goto L_0116;
// 680 %IF BOARD(M)_WS>0 %THENSTART
if (BOARD[M].WS <= 0) goto L_0117;
// 681 %IF M+DICE1<25 %THEN MMOVE(M,DICE1) %ELSE %C
if (M + DICE1 >= 25) goto L_0118;
MMOVE(M, DICE1);
goto L_0119;
L_0118:;
WBOFF = WBOFF + 1;
BOARD[M].WS = BOARD[M].WS - 1;
L_0119:;
// 682+ WBOFF=WBOFF+1 %AND BOARD(M)_WS=BOARD(M)_WS-1
// 683 %EXIT
goto L_0111;
// 684 %FINISH
L_0117:;
// 685 %FINISH
L_0116:;
// 686 %REPEAT
goto L_0110;
}
L_0111:;
// 687 %FINISH
L_0109:;
// 688 %FINISH
L_0107:;
// 689 %FINISH
L_0105:;
// 690 SEC: DOBEST(DICE2)
U_100F:;
DOBEST(DICE2);
// 691 %IF DICE4=0 %THEN ->DONE
if (DICE4 != 0) goto L_011A;
goto U_1009;
L_011A:;
// 692 DOBEST(DICE3)
DOBEST(DICE3);
// 693 DOBEST(DICE4)
DOBEST(DICE4);
// 694 ->DONE
goto U_1009;
// 695 SAFETY: %IF DICE4#0 %THENSTART
U_100E:;
if (DICE4 == 0) goto L_011B;
// 696 %IF DICE3=0 %THEN DICE1=DICE4 %AND DICE4=0 %ELSESTART
if (DICE3 != 0) goto L_011C;
DICE1 = DICE4;
DICE4 = 0;
goto L_011D;
L_011C:;
// 697 %IF DICE2=0 %THENSTART
if (DICE2 != 0) goto L_011E;
// 698 DICE1=DICE4; DICE4=0; DICE2=DICE3; DICE3=0
DICE1 = DICE4;
DICE4 = 0;
DICE2 = DICE3;
DICE3 = 0;
// 699 %FINISHELSESTART
goto L_011F;
L_011E:;
// 700 %IF DICE1=0 %THEN DICE1=DICE4 %AND DICE4=0
if (DICE1 != 0) goto L_0120;
DICE1 = DICE4;
DICE4 = 0;
L_0120:;
// 701 %FINISH
L_011F:;
// 702 %FINISH
L_011D:;
// 703 %FINISHELSESTART
goto L_0121;
L_011B:;
// 704 %IF DICE1=0 %THEN DICE1=DICE2 %AND DICE2=0
if (DICE1 != 0) goto L_0122;
DICE1 = DICE2;
DICE2 = 0;
L_0122:;
// 705 %FINISH
L_0121:;
// 706 %IF DICE1<DICE2 %THENSTART
if (DICE1 >= DICE2) goto L_0123;
// 707 TEMP=DICE2; DICE2=DICE1; DICE1=TEMP
TEMP = DICE2;
DICE2 = DICE1;
DICE1 = TEMP;
// 708 %FINISH
L_0123:;
// 709 %CYCLE K=35,3,56
// %for K = 35, 3, 56 %cycle
{
K = 32;
L_0124:
if (K == 56) goto L_0125;
K += 3;
// 710 %CYCLE I=19,1,24
// %for I = 19, 1, 24 %cycle
{
I = 18;
L_0126:
if (I == 24) goto L_0127;
I += 1;
// 711 %IF BOARD(I)_WS>0 %THENSTART
if (BOARD[I].WS <= 0) goto L_0128;
// 712 NOMOV=0; MTSTBOFF(I,DICE1)
NOMOV = 0;
MTSTBOFF(I, DICE1);
// 713 %IF NOMOV=1 %THEN ->REP1
if (NOMOV != 1) goto L_0129;
goto U_1010;
L_0129:;
// 714 %IF DICE2=0 %THENSTART
if (DICE2 != 0) goto L_012A;
// 715 %IF WSINCL<K %THEN ->DONE
if (WSINCL() >= K) goto L_012B;
goto U_1009;
L_012B:;
// 716 %FINISHELSESTART
goto L_012C;
L_012A:;
// 717 %CYCLE J=19,1,24
// %for J = 19, 1, 24 %cycle
{
J = 18;
L_012D:
if (J == 24) goto L_012E;
J += 1;
// 718 %IF BOARD(J)_WS>0 %THENSTART
if (BOARD[J].WS <= 0) goto L_0130;
// 719 NOMOV=0; MTSTBOFF(J,DICE2)
NOMOV = 0;
MTSTBOFF(J, DICE2);
// 720 %IF NOMOV=1 %THEN ->REP2
if (NOMOV != 1) goto L_0131;
goto U_1011;
L_0131:;
// 721 %IF DICE3=0 %THENSTART
if (DICE3 != 0) goto L_0132;
// 722 %IF WSINCL<K %THEN ->DONE
if (WSINCL() >= K) goto L_0133;
goto U_1009;
L_0133:;
// 723 %FINISHELSESTART
goto L_0134;
L_0132:;
// 724 %CYCLE G=19,1,24
// %for G = 19, 1, 24 %cycle
{
G = 18;
L_0135:
if (G == 24) goto L_0136;
G += 1;
// 725 %IF BOARD(G)_WS>0 %THENSTART
if (BOARD[G].WS <= 0) goto L_0137;
// 726 NOMOV=0; MTSTBOFF(G,DICE3)
NOMOV = 0;
MTSTBOFF(G, DICE3);
// 727 %IF NOMOV=1 %THEN ->REP3
if (NOMOV != 1) goto L_0138;
goto U_1012;
L_0138:;
// 728 %IF DICE4=0 %THENSTART
if (DICE4 != 0) goto L_0139;
// 729 %IF WSINCL<K %THEN ->DONE
if (WSINCL() >= K) goto L_013A;
goto U_1009;
L_013A:;
// 730 %FINISHELSESTART
goto L_013B;
L_0139:;
// 731 %CYCLE H=19,1,24
// %for H = 19, 1, 24 %cycle
{
H = 18;
L_013C:
if (H == 24) goto L_013D;
H += 1;
// 732 %IF BOARD(H)_WS>0 %THENSTART
if (BOARD[H].WS <= 0) goto L_013F;
// 733 NOMOV=0; MTSTBOFF(H,DICE4)
NOMOV = 0;
MTSTBOFF(H, DICE4);
// 734 %IF NOMOV=1 %THEN ->REP4
if (NOMOV != 1) goto L_0140;
goto U_1013;
L_0140:;
// 735 %IF WSINCL<K %THEN ->DONE
if (WSINCL() >= K) goto L_0141;
goto U_1009;
L_0141:;
// 736 CLTSTBOFF(H,DICE4)
CLTSTBOFF(H, DICE4);
// 737 %FINISH
L_013F:;
// 738 REP4: %REPEAT
U_1013:;
goto L_013C;
}
L_013D:;
// 739 %FINISH
L_013B:;
// 740 CLTSTBOFF(G,DICE3)
CLTSTBOFF(G, DICE3);
// 741 %FINISH
L_0137:;
// 742 REP3: %REPEAT
U_1012:;
goto L_0135;
}
L_0136:;
// 743 %FINISH
L_0134:;
// 744 CLTSTBOFF(J,DICE2)
CLTSTBOFF(J, DICE2);
// 745 %FINISH
L_0130:;
// 746 REP2: %REPEAT
U_1011:;
goto L_012D;
}
L_012E:;
// 747 %FINISH
L_012C:;
// 748 CLTSTBOFF(I,DICE1)
CLTSTBOFF(I, DICE1);
// 749 %FINISH
L_0128:;
// 750 REP1: %REPEAT
U_1010:;
goto L_0126;
}
L_0127:;
// 751 %REPEAT
goto L_0124;
}
L_0125:;
// 752 %REPEAT
goto L_00A9;
L_00E3:;
// 753 DUMPWTS
DUMPWTS();
// 754 %END
return;
} /* end of BACKGAMMON */
// ?WFST12 unused
// ?BFST12 unused
// ?ST unused
// 755
// 756 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 757 backgammon("")
BACKGAMMON(_imp_str_literal(""));
// 758 %end
_imp_stop(0);
return 0;
end_0:;
}
// 759
// 760 %ENDOFFILE