Files
Cody Boone Ferguson 05b41b922e Alt code/try scripts added to 2004/jdalbec
The alt code allows one to set how many numbers to print on a line
before adding a line break. This is done because the more numbers that
there are the harder it is to see where it 'belongs'. Defaults to 11
(protons, salt) but the macro name is Ag, silver (because silver is my
favourite precious metal, it wasn't used already and it allowed for some
irony in the alt build section).

The try.alt.sh script uses the alt code.

The try.sh script uses the fixed code (fixes I made quite a while back).

The bugs.md has had INAFIAB section added to this entry.

The README.md file has been format/typo checked.

This should complete the review of 2004/jdalbec.
2023-11-19 09:53:30 -08:00

215 lines
3.8 KiB
C

??= define Ba BC(B, I)
??= define Be BC(Br, I)
??= define Ca(C, Ca) CB(B, In C, Ca)
??= define Cl(Cl) Cl Cl
??= define Cs const
??= define FrB N = Zr; Fr((O, B = BrB(BrF, I)))
??= define Fe(F) FO (In = Zr; F; In++)
??= define FF FB(B); FB(BF);
??= define FI Fe(IO)
??= define FO for
??= define Fr(F) FO (I = Zr; F; I++)
??= define II I I, In
??= define In(I, Ir) main(I, Ir)
??= define IO In[O[C + I]]
??= define Ir(I) if (I)
??= define Nb N > N && N > -O
??= define Rb(Rb, B) BBr(Br, Rb, B)
??= define Re return
??= define Sc struct
??= define Si(Te) sizeof (Te)
??= define Te typedef
??= define Zn N < Zr
Te char C;
Te int I;
Te size_t Si;
Te void V;
Cs C *Na =
"H " "He "
"Li Be " "B C N O F Ne "
"Na Mg " "Al Si P S Cl Ar "
"K Ca Sc Ti V Cr Mn Fe Co Ni Cu Zn Ga Ge As Se Br Kr "
"Rb Sr Y Zr Nb Mo Tc Ru Rh Pd Ag Cd In Sn Sb Te I Xe "
"Cs Ba* Lu Hf Ta W Re Os Ir Pt Au Hg Tl Pb Bi Po At Rn "
"Fr Ra**"
" *La Ce Pr Nd Pm Sm Eu Gd Tb Dy Ho Er Tm Yb "
" **Ac Th Pa U Np Pu ";
Cs C *Xe = "111%%d:\0\n";
Cs C H[] = "22";
Cs C U[] = "3";
Cs I Zr = 0;
Cs I O = 1;
Cs I W = 2;
V (*At)(V) = abort;
V (*F)(V *) = free;
V *(*Mo)(Si) = malloc;
I (*Pr)(Cs C *, ...) = printf;
I (*P)(I) = putchar;
??= define Tm(B,C) Sc B { C *B; I N; } ; Te Sc B *B; B N##B (I) ; V F##B (B) ; C B##C (B, I) ; V C##B (B, I, C) ; B N##B (I N) { B B; Re (W, B = Mo(Si(Sc B))) ? (O, B->B = Mo(((W, B->N = N) ? N : O) * Si(C))) ? B Cl(: (At(), B)); } V F##B (B B) { F(B->B); F(B); } C B##C (B B, I N) { Re B->Nb ? B->B[N] : (C) Zr; } V C##B (B B, I N, C C) { N; B->Nb ? B->B[N] = C : C ? At(), C : C; }
Tm(B,C)
V Pb (B) ;
I Bi (B) ;
C Co (B, B, I) ;
B Sb (B, I) ;
V Pb (B B) {
I I;
Fr(Ba)
P(Ba);
}
I Bi (B B) {
I I;
Fr(Ba) ;
Re I;
}
C Co (B Br, B B, I N) {
I I;
Fr(I < N)
Ir(Be - Ba)
Re Be - Ba;
Re Zr;
}
B Sb (B Br, I N) {
B B;
I I;
B = NB(Zn ? Bi(Br) + N : N);
FO(I = Zn ? -N : Zr; Zn ? Be : I < N; I++)
CB(B, Zn ? I + N : I, Be);
Re B;
}
Tm(Br,B)
V PBr (Br, I) ;
V PBr (Br B, I N) {
I I, Rn=0;
Pr(W * W + Xe, N);
Fr(BrB(B, I)) {
P(O[Na]);
Pb(BrB(B, I));
Ir(++Rn==Ag) Rn=0, P(Xe[W << W]);
}
P(Xe[W << W]);
}
B Dy (B, I) ;
I S (C, B) ;
Br Sr (Br) ;
B Dy (B Br, I N) {
B B;
C C, Cr;
II;
B = NB(W * Bi(Br));
FO(In = I = Zr; (O, C = Be); I++) {
FO(Cr = O; (W, C == BC(Br, I + Cr)); Cr++) ;
I += Cr - O;
Ca(++, Cr + Si(H)**H - Si(U)**U);
Ca(++, C);
}
Ir(N)
FB(Br);
Ca(-N, W[H]);
Re B;
}
I S (C C, B Br) {
B B, BF;
II;
Ir(C == BC(Br, Zr))
Re Zr;
Fr(Be) {
B = Cl(BF = Sb(Br, I); )
Fe(BC(B, Zr)) {
B = Dy(B, W);
Ir(C == BC(B, Zr)) {
FF
Re Zr;
}
Ir(In % W)
BF = Dy(BF, W);
Ir(Zr == Co(B, BF, Bi(BF))) {
FF
Re O;
}
}
FF
}
B = Dy(Br, Zr);
I = S(C, B);
FB(B);
Re I;
}
Br Sr (Br BrF) {
Br Br;
B B, BF;
II, N;
FrB
N += Bi(B);
Br = NBr(N);
FrB {
Rb(N++, B);
Fe(BC(B, In + O))
S(BC(B, In), BF = Sb(B, -In - O)) ?
Ca(+O, O[U]),
Rb(N++, B = BF),
In = Zr :
(FB(BF), W);
}
FBr(BrF);
Rb(N, (V *) Zr);
Re Br;
}
I In (I, C **) ;
I In (I N, C ** C) {
Br Br;
B B;
II;
Br = NBr(--N);
Fr(I < N) {
FI ;
Rb(I, B = NB(In));
FI
Ca(-Zr, IO);
}
Fr(BrB(Br, Zr)) {
Br = Sr(Br);
PBr(Br, I);
Fe((W, B = BrB(Br, In))) {
Rb(In, Dy(B, Zr));
FB(B);
}
}
{ } { } { } { } { } { } { } { } { } { } { }
{ } { { } } { } { } { } { } { } { } { } { } { { } }
{ { } } { } { } { } { } { } { } { { } } { } { } { { } } C;
{ } { { } } { } { } { } { } { } { } { } { } { { } }
{ } { } { } { } { } { } { } { } { } { } { }
Re Zr;
}