//_Header //******************************************************************* // NOVA ALIGNMENT Controls --- Lawrence Livermore Laboratory //******************************************************************* // //_Module_Name: Int32 _File: [SMDEV.SRC]INT32.PRX // //_Description: // 32 bit integer support routines for use with // LSI Praxis code. //_Call: // //_Identifier: { none } //******************************************************************* //_Author: R. T. Shelton _Creation_Date: 14-JAN-1982 //_Revisions: // 1.000 22-SPT-1983 RTS Initial Key-in. // 1.001 09-Dec-1983 RTS Added 32 bit string to int //******************************************************************* //_End %IDENT "2.000" module Int32 export N_32, S_32, Conv_32, Compare_32 Function Compare_32 (A : in ref 32 bit integer, op : in ref packed array [1..?N] of char, B : in ref 32 bit integer, Debug : optional in ref boolean initially false ) returns Bval : boolean declare conv_16 is array [1..2] of 16 bit integer A_16 : conv_16 B_16 : conv_16 enddeclare A_16 := force conv_16 (A) B_16 := force conv_16 (B) Bval := false for index := 1 to N do select op [index] from case $L, $l : if A_16[2] < B_16[2] do Bval := true orif A_16[2] = B_16[2] do if force cardinal(A_16[1]) < force cardinal (B_16[1]) do Bval := true endif endif case $E, $e : if A_16[2] = B_16[2] and A_16[1] = B_16[1] do Bval := true endif case $G, $g : if A_16[2] > B_16[2] do Bval := true orif A_16[2] = B_16[2] do if force cardinal(A_16[1]) > force cardinal (B_16[1]) do Bval := true endif endif endselect endfor endfunction Function N_32 param Str1 : in ref packed array [1..?N] of char endparam Returns Num : 32 bit integer declare index : 16 bit integer temp : 32 bit integer temp2 : 32 bit integer done : boolean initially false started : boolean initially false sign : integer initially 1 Power : 32 bit integer temp16 : 16 bit integer enddeclare temp16 := 1 Power := temp16 temp16 := 0 Temp := temp16 index := N while not done and index > 0 do if str1 [index] = $- do Done := true sign := -1 orif str1 [index] >= $0 and str1 [index] <= $9 do Started := true temp16 := force integer(str1 [index]) - force integer ($0) temp2 := temp16 temp := temp + temp2 * power temp16 := 10 temp2 := temp16 power := power * temp2 orif started do done := true endif index *= -1 endwhile temp2 := sign num := temp * temp2 endfunction Procedure S_32 param Num : in ref 32 bit integer str1 : out ref packed array [1..?N] of char endparam declare temp : 32 bit integer temp2 : 32 bit integer index : 16 bit integer cval : 16 bit integer power : 32 bit integer started : boolean temp16 : 16 bit integer enddeclare index := 1 temp := N_32("0") if compare_32 (Num,"L",temp) do str1 [index] := $- index *= +1 temp2 := N_32("-1") temp := Num temp := temp * temp2 otherwise temp := Num endif Power := N_32 ("1000000000") started := false for i := 1 to 10 do temp2 := temp / power cval := integer(temp2) temp := temp - (temp2 * power) temp16 := 10 temp2 := temp16 power := power / temp2 if (Cval > 0 or started) and index <= N do started := true str1 [index] := char (force integer ($0) + cval) index *= +1 endif endfor if not started do str1 [index] := $0 index *= +1 endif if index <= N do for i := index to N do str1 [i] := $<40> endfor endif endprocedure Function Conv_32 param A : in ref 16 bit integer endparam Returns Num : 32 bit integer declare T1_32 : 32 bit integer T2_32 : 32 bit integer T_16 : 16 bit integer enddeclare if A < 0 do T_16 := -A T1_32 := T_16 T2_32 := T1_32*N_32("-1") otherwise T2_32 := A endif Num := T2_32 endfunction endmodule