entry.red 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. COMMENT This file sets up necessary entry points for autoloading modules
  2. in Reduce. It uses a modified version of the Defautoload function
  3. of Eric Benson;
  4. SYMBOLIC MACRO PROCEDURE DEFAUTOLOAD U;
  5. % (DEFAUTOLOAD name), (DEFAUTOLOAD name loadname),
  6. % (DEFAUTOLOAD name loadname fntype), or
  7. % (DEFAUTOLOAD name loadname fntype numargs)
  8. % Default is 1 Arg EXPR in module of same name;
  9. BEGIN SCALAR NAME, NUMARGS, LOADNAME, FNTYPE;
  10. U := CDR U;
  11. NAME := CAR U;
  12. U := CDR U;
  13. IF U THEN <<LOADNAME := CAR U; U :=CDR U>> ELSE LOADNAME := NAME;
  14. IF EQCAR(NAME, 'QUOTE) THEN NAME := CADR NAME;
  15. IF ATOM LOADNAME THEN LOADNAME := LIST LOADNAME
  16. ELSE IF CAR LOADNAME EQ 'QUOTE THEN LOADNAME := CADR LOADNAME;
  17. IF U THEN <<FNTYPE := CAR U; U := CDR U>> ELSE FNTYPE := 'EXPR;
  18. IF U THEN NUMARGS := CAR U ELSE NUMARGS := 1;
  19. NUMARGS := IF NUMARGS=0 THEN NIL
  20. ELSE IF NUMARGS=1 THEN '(X1)
  21. ELSE IF NUMARGS=2 THEN '(X1 X2)
  22. ELSE IF NUMARGS=3 THEN '(X1 X2 X3)
  23. ELSE IF NUMARGS=4 THEN '(X1 X2 X3 X4)
  24. ELSE ERROR(99,LIST(NUMARGS,"too large in DEFAUTOLOAD"));
  25. RETURN
  26. LIST('PUTD,
  27. MKQUOTE NAME,
  28. MKQUOTE FNTYPE,
  29. MKQUOTE LIST('LAMBDA, NUMARGS,
  30. 'PROGN .
  31. ACONC(FOR EACH J IN LOADNAME
  32. COLLECT LIST('LOAD!-MODULE,MKQUOTE J),
  33. LIST('APPLY,
  34. MKQUOTE NAME,
  35. 'LIST . NUMARGS))))
  36. END;
  37. COMMENT Actual Entry Point Definitions;
  38. %input editor entry points;
  39. DEFAUTOLOAD CEDIT;
  40. DEFAUTOLOAD(DISPLAY,CEDIT);
  41. PUT('DISPLAY,'STAT,'RLIS);
  42. DEFAUTOLOAD(EDITDEF,CEDIT);
  43. PUT('EDITDEF,'STAT,'RLIS);
  44. DEFAUTOLOAD(EDITDEF1,CEDIT);
  45. %Compiler and LAP entry points;
  46. %DEFAUTOLOAD(COMPD,'(LAP COMPLR CMACRO),EXPR,3);
  47. %DEFAUTOLOAD(COMPILE,'(LAP COMPLR CMACRO));
  48. DEFAUTOLOAD(LAP,'(LAP COMPILER CMACRO));
  49. %Cross-reference module entry points;
  50. PUT('CREF ,'SIMPFG ,'((T (CREFON)) (NIL (CREFOFF))));
  51. DEFAUTOLOAD(CREFON,'(RCREF REDIO),EXPR,0);
  52. %Factorizer module entry points;
  53. REMPROP('FACTOR,'STAT);
  54. DEFAUTOLOAD(EZGCDF,FACTOR,EXPR,2);
  55. DEFAUTOLOAD(FACTORF,FACTOR);
  56. DEFAUTOLOAD(SIMPFACTORIZE,FACTOR);
  57. PUT('FACTORIZE,'SIMPFN,'SIMPFACTORIZE);
  58. DEFAUTOLOAD(SIMPNPRIMITIVE,FACTOR);
  59. PUT('NPRIMITIVE,'SIMPFN,'SIMPNPRIMITIVE);
  60. DEFAUTOLOAD(SIMPRESULTANT,FACTOR);
  61. PUT('RESULTANT,'SIMPFN,'SIMPRESULTANT);
  62. PUT('FACTOR,'STAT,'RLIS);
  63. %FASL module entry points;
  64. REMPROP('FASLOUT,'STAT);
  65. DEFAUTOLOAD(FASLOUT,'(LAP COMPLR CMACRO FAP));
  66. PUT('FASLOUT,'STAT,'RLIS);
  67. %Help module entry points (not yet available);
  68. %REMFLAG('(HELP),'GO);
  69. %REMPROP('HELP,'STAT);
  70. %DEFAUTOLOAD HELP;
  71. %FLAG('(HELP),'GO);
  72. %PUT('HELP,'STAT,'RLIS);
  73. %Part module entry points;
  74. DEFAUTOLOAD(ARGLENGTH,PART);
  75. FLAG('(ARGLENGTH),'OPFN);
  76. DEFAUTOLOAD(SIMPPART,PART);
  77. PUT('PART,'SIMPFN,'SIMPPART);
  78. DEFAUTOLOAD(SIMPSETPART,PART);
  79. PUT('SETPART!*,'SIMPFN,'SIMPSETPART);
  80. PUT('PART,'SETQFN,'SETPART!*);
  81. %Prettyprint module entry point;
  82. DEFAUTOLOAD(PRETTYPRINT,PRETTY);
  83. %Matrix module entry points;
  84. DEFAUTOLOAD(DETQ,MATR);
  85. DEFAUTOLOAD(LETMTR,MATR,EXPR,3);
  86. DEFAUTOLOAD(MAPC2,MATR,EXPR,2); %used by SOLVE;
  87. DEFAUTOLOAD(MATSM!*,MATR);
  88. DEFAUTOLOAD(SIMPDET,MATR);
  89. PUT('DET,'SIMPFN,'SIMPDET);
  90. DEFAUTOLOAD(SIMPTRACE,MATR);
  91. PUT('TRACE,'SIMPFN,'SIMPTRACE);
  92. %META module entry point (not yet available);
  93. %DEFAUTOLOAD META;
  94. %Rprint module entry point;
  95. DEFAUTOLOAD RPRINT;
  96. %SOLVE module entry point;
  97. DEFAUTOLOAD(SIMPSOLVE,'(MATR SOLVE));
  98. PUT('SOLVE,'SIMPFN,'SIMPSOLVE);
  99. %High energy physics module entry points;
  100. REMPROP('INDEX,'STAT); REMPROP('MASS,'STAT);
  101. REMPROP('MSHELL,'STAT); REMPROP('VECDIM,'STAT);
  102. REMPROP('VECTOR,'STAT);
  103. DEFAUTOLOAD(INDEX,HEPHYS);
  104. DEFAUTOLOAD(MASS,HEPHYS);
  105. DEFAUTOLOAD(MSHELL,HEPHYS);
  106. DEFAUTOLOAD(VECDIM,HEPHYS);
  107. DEFAUTOLOAD(VECTOR,HEPHYS);
  108. PUT('INDEX,'STAT,'RLIS);
  109. PUT('MSHELL,'STAT,'RLIS);
  110. PUT('MASS,'STAT,'RLIS);
  111. PUT('VECDIM,'STAT,'RLIS);
  112. PUT('VECTOR,'STAT,'RLIS);
  113. FLAGOP NONCOM,NOSPUR;
  114. %Integrator module entry point;
  115. DEFAUTOLOAD(SIMPINT,INT);
  116. PUT('INT,'SIMPFN,'SIMPINT);
  117. PUT('BIGFLOAT,'MODULE!-NAME,'BFLOAT);
  118. %Debug module entry points;
  119. DEFAUTOLOAD(EMBFN,DEBUG,EXPR,3);
  120. %DEFAUTOLOAD(SU2SL,TRANS);
  121. % exec and system editor entry points;
  122. REMFLAG('(EXEC PUSH),'GO);
  123. IF SYSTEM!* NEQ 0 THEN
  124. <<REMPROP('CMD,'STAT);
  125. REMPROP('EDIT,'STAT);
  126. REMPROP('CREATE,'STAT);
  127. REMPROP('EXEC,'STAT);
  128. REMPROP('PUSH,'STAT);
  129. DEFAUTOLOAD(EXEC,EXEC,EXPR,0);
  130. DEFAUTOLOAD(PUSH,EXEC,EXPR,0);
  131. DEFAUTOLOAD(CREATE,'(EXEC EDIT),EXPR,0);
  132. DEFAUTOLOAD(EDIT1,'(EXEC EDIT),EXPR,2);
  133. DEFAUTOLOAD(CMD,'(EXEC EDIT),EXPR,0);
  134. DEFAUTOLOAD(EDITSTAT,'(EXEC EDIT),EXPR,0);
  135. DEFAUTOLOAD(PINSTAT,EXEC,EXPR,0);
  136. PUT('CMD,'STAT,'EDITSTAT);
  137. PUT('EXEC,'STAT,'PINSTAT);
  138. PUT('PUSH,'STAT,'PINSTAT);
  139. PUT('CREATE,'STAT,'PINSTAT);
  140. PUT('EDIT,'STAT,'EDITSTAT);
  141. FLAG('(EXEC PUSH CREATE),'IGNORE);
  142. FLAG('(CMD EDIT),'EVAL);
  143. %FLAG('(EXEC PUSH),'GO);
  144. >>;
  145. END;