code 34071; procedure SOLBND(A, N, LW, RW, M, P, B); value N, LW, RW; integer N, LW, RW; integer array P; array A, B, M; begin integer F, I, K, KK, W, W1, W2, SHIFT; real S; F:= LW; SHIFT:= - LW; W1:= LW - 1; for K:= 1 step 1 until N do begin if F < N then F:= F + 1; SHIFT:= SHIFT + W1; I:=P[K]; S:= B[I]; if I ^= K then begin B[I]:= B[K]; B[K]:= S end; ELMVEC(K + 1, F, SHIFT, B, M, - S) end; W1:= LW + RW; W:= W1 + 1; KK:= (N + 1) * W - W1; W2:= - 1; SHIFT:= N * W1; for K:= N step - 1 until 1 do begin KK:= KK - W; SHIFT:= SHIFT - W1; if W2 < W1 then W2:= W2 + 1; B[K]:= (B[K] - VECVEC(K + 1, K + W2, SHIFT, B, A)) / A[KK] end end SOLBND; eop