123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- % module build; % Code to help with bootstrapping REDUCE from Lisp.
- % Author: Anthony C. Hearn.
- % The baroque syntax in this file is a consequence of the bootstrapping
- % process.
- global '(loaded!-packages!* oldchan!*);
- % Since some of the early modules may have tabs in them, we must redefine
- % seprp.
- symbolic procedure seprp u;
- or(eq(u,'! ),eq(u,'! ),eq(u,!$eol!$));
- symbolic procedure concat2(u,v);
- % This would be better supported at a lower level.
- compress('!" . append(explode2 u,nconc(explode2 v,list '!")));
- symbolic procedure string!-downcase u;
- % This definition is designed to overcome bootstrapping difficulties
- % in the various Lisps used.
- begin scalar y,z;
- if null stringp u then u := '!" . append(explode2 u,'(!"))
- else u := explode u;
- a: if null u then return compress reverse z;
- y := atsoc(car u,
- '((A . "a") (B . "b") (C . "c") (D . "d") (E . "e") (F . "f")
- (G . "g") (H . "h") (I . "i") (J . "j") (K . "k") (L . "l")
- (M . "m") (N . "n") (O . "o") (P . "p") (Q . "q") (R . "r")
- (S . "s") (T . "t") (U . "u") (V . "v") (W . "w") (X . "x")
- (Y . "y") (Z . "z")));
- if y then z := car explode2 cdr y . z else z := car u . z;
- u := cdr u;
- go to a
- end;
- symbolic procedure mod2file(u,v);
- concat2("$reduce/packages/",concat2(string!-downcase v,
- concat2("/",concat2(string!-downcase u,".red"))));
- symbolic procedure inmodule(u,v);
- begin
- u := open(mod2file(u,v),'input);
- v := rds u;
- cursym!* := '!*semicol!*;
- a: if eq(cursym!*,'end) then return progn(rds v, close u);
- prin2 eval form xread nil;
- go to a;
- end;
- symbolic procedure load!-package!-sources(u,v);
- begin scalar !*int,!*echo,w;
- inmodule(u,v);
- if (w := get(u,'package)) then w := cdr w;
- a: if w then progn(inmodule(car w,v), w := cdr w, go to a);
- loaded!-packages!* := u . loaded!-packages!*;
- end;
- % endmodule;
- end;
|