Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,77 @@
|
|||
begin
|
||||
% returns a string representing the number in s incremented %
|
||||
% As strings are fixed length, the significant length of s must %
|
||||
% be specified in length %
|
||||
% s must contain an unsigned integer %
|
||||
% If the string is invalid or the result would require more %
|
||||
% than 256 characters (the maximum string length), "error" %
|
||||
% is returned %
|
||||
string(256) procedure increment( string(256) value s
|
||||
; integer value length
|
||||
) ;
|
||||
begin
|
||||
logical isValid;
|
||||
integer rPos, sPos, carry;
|
||||
string(256) iValue;
|
||||
string(1) c;
|
||||
isValid := true;
|
||||
iValue := " ";
|
||||
rPos := 256;
|
||||
sPos := length - 1;
|
||||
carry := 1; % ensure the first digit is incremented %
|
||||
while isValid and sPos >= 0 and rPos >= 0 do begin
|
||||
c := s( sPos // 1 );
|
||||
sPos := sPos - 1;
|
||||
if c not = " " then begin
|
||||
isValid := ( c >= "0" and c <= "9" );
|
||||
if isValid then begin
|
||||
integer d;
|
||||
d := ( decode( c ) - decode( "0" ) ) + carry;
|
||||
carry := d div 10;
|
||||
rPos := rPos - 1;
|
||||
iValue( rPos // 1 ) := code( decode( "0" ) + d rem 10 )
|
||||
end if_isValid
|
||||
end if_c_ne_space
|
||||
end while_isValid_and_sPos_ge_0_and_rPOs_ge_0 ;
|
||||
if isValid then begin
|
||||
% the number was incremented successfully %
|
||||
if carry not = 0 then begin
|
||||
% need an extra digit %
|
||||
if rPos <= 0
|
||||
then isValid := false % no room for an extra digit %
|
||||
else begin
|
||||
% have space for an extra digit %
|
||||
rPos := rPos - 1;
|
||||
iValue( rPos // 1 ) := code( decode( "0" ) + carry )
|
||||
end if_rPos_lt_0__
|
||||
end if_carry_gt_0
|
||||
end if_isValid ;
|
||||
if not isValid then begin
|
||||
% s is not a numeric string or the result would be longer than 256 characters %
|
||||
iValue := "error"
|
||||
end
|
||||
else begin
|
||||
% the string could be incremented %
|
||||
string(256) rightJustifiedValue;
|
||||
rightJustifiedValue := iValue;
|
||||
iValue := " ";
|
||||
for iPos := 0 until 255 - rPos do iValue( iPos // 1 ) := rightJustifiedValue( rPos + iPos // 1 )
|
||||
end if_not_isValid_or_carry_ne_0__ ;
|
||||
iValue
|
||||
end increment ;
|
||||
% writes the string s, up to the first blank %
|
||||
procedure writeonToBlank ( string(256) value s ) ;
|
||||
begin
|
||||
integer sPos;
|
||||
sPos := 0;
|
||||
while sPos < 256 and s( sPos // 1 ) not = " " do begin
|
||||
writeon( s_w := 0, s( sPos // 1 ) );
|
||||
sPos := sPos + 1
|
||||
end while_spos_lt_256_and_s_Spos_ne_space
|
||||
end writeonToBlank ;
|
||||
% test increment %
|
||||
write( " 0 + 1: " ); writeonToBlank( increment( "0", 1 ) );
|
||||
write( " 9 + 1: " ); writeonToBlank( increment( "9", 1 ) );
|
||||
write( " 123456789 + 1: " ); writeonToBlank( increment( "123456789", 9 ) );
|
||||
write( "99999999999999999999 + 1: " ); writeonToBlank( increment( "99999999999999999999", 20 ) )
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue