Commit | Line | Data |
---|---|---|
81e70d48 PH |
1 | / \ e HPCOND.RA\r |
2 | /\r | |
3 | SECT #COND\r | |
4 | ENTRY NCOND / FORTRAN INTEGER FUNCTION\r | |
5 | ENTRY COND / FORTRAN REAL FUNCTION\r | |
6 | /\r | |
7 | / ODD NUMBER OF PARAMETERS: I=NCOND(LA,A,LB,B,...,LY,Y,Z)\r | |
8 | / NCOND:=.IF LA .THEN A .ELIF LB .THEN B .ELIF ... .ELSE Z .FI\r | |
9 | / EVEN NUMBER OF PARAMETERS: I=NCOND(LA,A,LB,B,...,LZ,Z)\r | |
10 | / NCOND:=.IF LA .THEN A .ELIF .... .ELIF LZ .THEN Z .ELSE 0 .FI\r | |
11 | /\r | |
12 | X0= 0\r | |
13 | X1= X0+1\r | |
14 | X2= X1+1\r | |
15 | XR, ORG .+X2+1\r | |
16 | / TEXT 'NCOND '\r | |
17 | /CXR, SETX XR\r | |
18 | / SETB BAS\r | |
19 | BAS, ORG .+3\r | |
20 | T1, ORG .+3 / POINTER INTO PARAMETER LIST\r | |
21 | T2, ORG .+3 / HOLD ADR. OF PARAMETERS\r | |
22 | RETURN, JA .;0 / RETURN ADR\r | |
23 | TWO, 0;0;2\r | |
24 | / ORG 10*3+BAS / COMPLETE BASE PAGE IS NOT USED HERE\r | |
25 | / FNOP\r | |
26 | / JA CXR\r | |
27 | /\r | |
28 | /\r | |
29 | BASE 0\r | |
30 | NCOND,\r | |
31 | COND,\r | |
32 | STARTD\r | |
33 | FLDA 3*10 / GET RETURN ADR\r | |
34 | FSTA RETURN\r | |
35 | FLDA 0 / POINTER TO PARAMETER LIST --> T1\r | |
36 | SETB BAS\r | |
37 | BASE BAS\r | |
38 | FSTA T1\r | |
39 | FLDA% T1 / RETURN ADR --> FAC\r | |
40 | FSUB T1 / AND COMPUTE LENGTH OF PARAMETER LIST\r | |
41 | FSUB TWO\r | |
42 | SETX XR\r | |
43 | LDX 1,X2 / SHIFT ONE BIT TO THE RIGHT\r | |
44 | ALN X2 / DIVIDE BY TWO AND BUMP NO. OF PARAMETERS\r | |
45 | FNEG / INTO X2\r | |
46 | ATX X2\r | |
47 | LDX 0,X1 / SET UP POINTER\r | |
48 | STARTF\r | |
49 | JEQ RETURN / NO PARAMETERS AT ALL, RETURN WITH FAC=0\r | |
50 | /\r | |
51 | /\r | |
52 | LOOP,\r | |
53 | STARTD / LOAD AND TEST THE ODD NUMBERED PARAMETERS\r | |
54 | FLDA% T1,X1+\r | |
55 | FSTA T2 / STORE THE ADR. OF THE PARAMETER\r | |
56 | STARTF\r | |
57 | FLDA% T2 / AND LOAD IT'S VALUE\r | |
58 | JNE TRUE / WE FOUND A NONZERO SWITCH\r | |
59 | /\r | |
60 | JXN C1,X2+ / IF THERE ARE NO PARAMETERS LEFT THEN\r | |
61 | JA RETURN / RETURN WITH FAC=0 ELSE\r | |
62 | /\r | |
63 | C1, ADDX 1,X1 / SKIP THE EVEN NUMBERED PARAMETER\r | |
64 | JXN LOOP,X2+ / IF THIS WAS THE LAST PARAMETER THEN\r | |
65 | JA RETURN / RETURN WITH FAC =0 ELSE GET NEXT PAIR OF PARAMETERS\r | |
66 | /\r | |
67 | /\r | |
68 | TRUE, JXN C2,X2+ / IF THERE IS A ODD NUMBER OF PARAMETERS\r | |
69 | JA RETURN / THEN RETURN WITH FAC=LAST PARAMETER ELSE\r | |
70 | C2,\r | |
71 | STARTD\r | |
72 | FLDA% T1,X1+ / RETURN THE EVEN NUMBERED PARAMETER\r | |
73 | FSTA T2\r | |
74 | STARTF\r | |
75 | FLDA% T2\r | |
76 | JA RETURN\r | |
77 | END\r | |
78 | \1a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 |