grgprin.sl 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922
  1. %==========================================================================%
  2. % GRGprin.sl Output Routines %
  3. %==========================================================================%
  4. % GRG 3.2 Standard Lisp Source Code (C) 1988-96 Vadim V. Zhytnikov %
  5. %==========================================================================%
  6. % This file is distributed without any warranty. You may modify it but you %
  7. % are not allowed to remove author's name and/or distribute modified file. %
  8. %==========================================================================%
  9. %----- REDUCE algebraic expression printing -----------------------------
  10. % Algebraic Expressions Printing ...
  11. (de algpri!> (w)
  12. (cond ((getd 'assgnpri) (assgnpri w nil nil))
  13. (t (varpri w nil nil))))
  14. % TERPRI for algebraic expressions ...
  15. (de algterpri!> nil
  16. (cond ((getd 'assgnpri) (assgnpri "" nil t))
  17. (t (varpri "" nil t))))
  18. % Plain print list without spaces and () ...
  19. (de algrpril!> (lst) (mapc lst 'algrpri!>))
  20. % Print list without () with Special treatment
  21. % of strings and spaces ...
  22. (de algprinwb!> (lst)
  23. (foreach!> x on lst do
  24. (prog2
  25. (cond
  26. ((stringp(car x)) (progn (algpri!> '!" )
  27. (algpri!> (car x) )
  28. (algpri!> '!" )))
  29. ((atom(car x)) (algpri!> (car x) ))
  30. (t(progn
  31. (algpri!> '!( )
  32. (algprinwb!>(car x))
  33. (algpri!> '!) ) )))
  34. (cond((and x (cdr x) (atom(cadr x))
  35. (not(or (flagp (cadr x) '!+nonsp)
  36. (flagp (car x) '!+nonsp))))
  37. (algpri!> " " ))))))
  38. %----- Print Functions with Linelength check ---------------------------
  39. (de gterpri!> nil
  40. (progn
  41. (cond(![line!] (gterpri0!> ![line!])))
  42. (terpri)
  43. (setq ![gpfirst!] nil)
  44. (setq ![line!] nil)
  45. (setq ![lline!] 0) ))
  46. (de gterpri0!> (lst)
  47. (cond
  48. ((null(cdr lst)) (prin2(car lst)))
  49. (t (prog2 (gterpri0!>(cdr lst)) (prin2(car lst))))))
  50. (de gprinreset!> nil
  51. (progn (setq ![lline!] 0)
  52. (setq ![line!] nil)
  53. (setq ![gpfirst!] t)
  54. (setq ![gptab!] 0) ))
  55. (de gprin!> (w)
  56. (cond
  57. ((pairp w) (progn (gprin!> "(") (mapcar w 'gprin!>) (gprin!> ")")))
  58. (t(prog (wc wl)
  59. (setq wl (difference (linelength nil) spare!*))
  60. (setq wc (length(explode2 w)))
  61. (cond
  62. ((lessp (plus2 ![lline!] wc) wl) (progn
  63. (cond
  64. ((and(null ![line!])(not ![gpfirst!])) (progn
  65. (spaces ![gptab!])
  66. (setq ![lline!] ![gptab!]))))
  67. (cond % We skip '! in the beginning of line (but not " ") ...
  68. ((not(and (null ![line!]) (seprp w))) (prog2
  69. (setq ![line!] (cons w ![line!]))
  70. (setq ![lline!] (plus2 ![lline!] wc)) )))))
  71. (t(progn
  72. (gterpri!>)
  73. (cond((not(seprp w))(progn
  74. (spaces ![gptab!])
  75. (setq ![lline!] (plus2 ![gptab!] wc))
  76. (setq ![line!] (ncons w))))))))))))
  77. % Print list without () by GPRIN> with Special treatment
  78. % of strings and spaces ...
  79. (de gprinwb!> (lst) (gprinwb0!> lst 0))
  80. (de gprinwb0!> (lst wl)
  81. (foreach!> x on lst do
  82. (prog2
  83. (cond
  84. ((stringp(car x)) (progn
  85. (gprin!> '!")
  86. (gprin!>(car x))
  87. (gprin!> '!") ))
  88. ((atom(car x)) (gprin!>(car x)))
  89. (t(progn
  90. (gprin!> '!( )
  91. (gprinwb0!> (car x) (add1 wl))
  92. (gprin!> '!) ) )))
  93. (cond ((and x (cdr x) (atom(cadr x))
  94. (not(or (flagp (cadr x) '!+nonsp)
  95. (flagp (car x) '!+nonsp))))
  96. (gprin!> '! )))
  97. (cond ((and (eq (car x) '!,) (zerop wl)) (gprin!> '! )))
  98. )))
  99. % Prints simply spaced list of atoms without ()
  100. (de gprils!> (lst)
  101. (while!> lst
  102. (gprin!>(car lst)) (gprin!> '! )
  103. (setq lst (cdr lst))))
  104. % Prints simply spaced list of atoms without ()
  105. % and without last trailing space
  106. (de gprils0!> (lst)
  107. (while!> lst
  108. (gprin!> (car lst))
  109. (cond ((cdr lst) (gprin!> '! )))
  110. (setq lst (cdr lst))))
  111. (de gprils0dot!> (lst)
  112. (while!> lst
  113. (gprin!> (cond ((cdr lst) (car lst))
  114. (t (incom!> (append (explode2(car lst)) '(!! !.))))))
  115. (cond ((cdr lst) (gprin!> '! )))
  116. (setq lst (cdr lst))))
  117. (de gpris!> nil (gprin!> '! ))
  118. % Prints concatenated list of atoms
  119. (de gpril!> (lst)
  120. (while!> lst
  121. (gprin!>(car lst))
  122. (setq lst (cdr lst))))
  123. % Function Print
  124. (de gfnpri!> (lst)
  125. (progn (gprin!> (car lst))
  126. (cond ((get (car lst) 'generic!_function) (gprin!> "*")))
  127. (gprin!> "(")
  128. (gfnpri0!> (cdr lst))
  129. (gprin!> ")") ))
  130. (de gfnpri0!> (lst)
  131. (cond((null(cdr lst)) (gprin!>(car lst)))
  132. (t(progn (gprin!>(car lst))(gprin!> ",")(gfnpri0!>(cdr lst))))))
  133. %---------- Output Switches Management ---------------------------------
  134. % Fancy/LaTeX (FT) switcses: FANCY LATEX
  135. % Output (O) switches: GRG REDUCE MAPLE MATH MACSYMA
  136. % FT mode is defined by *FANCY=T (FANCYON>)
  137. % latex mode is defined by *latex=T
  138. % This detects O output mode ...
  139. (de ifmodo!> nil (or !*grg !*reduce !*maple !*math !*macsyma))
  140. % This detects existence of fancy mode in REDUCE
  141. (de fancyexist!> nil (flagp 'fancy 'switch))
  142. (de fancyloaded!> nil (getd 'fmp!-switch))
  143. (de fancyon!> nil
  144. (and (or(fluidp '!*fancy)(globalp '!*fancy)) (eval '!*fancy)))
  145. (de tunefancy!> (bool)
  146. (cond(bool(progn
  147. (cond((or (fluidp '!*fancy!-lower) (globalp '!*fancy!-lower))
  148. (set '!*fancy!-lower nil))
  149. (t(msg!> 9100)))
  150. (cond ((not ![fldtuned!]) (fldtune!>)))
  151. (onoff2!> 'latex nil)
  152. (set 'fancy!-switch!-on!* (int2id 16))
  153. (set 'fancy!-switch!-off!* (int2id 17))
  154. (onfancydefs!>)
  155. (offothero!> nil)))
  156. (t(offallo!>))))
  157. (de tunetex!> (bool)
  158. (prog nil
  159. (cond ((not(fancyexist!>)) (loadpack!> '(fmprint) nil)))
  160. (cond ((not(fancyexist!>))
  161. (progn (msg!> 9101)
  162. (msg!> 91011)
  163. (msg!> 91012)
  164. (msg!> 91013)
  165. (msg!> 91014)
  166. (setq !*latex nil)
  167. (return nil))))
  168. (cond(bool(progn
  169. (on fancy)
  170. (cond((or (fluidp '!*fancy!-lower) (globalp '!*fancy!-lower))
  171. (set '!*fancy!-lower nil))
  172. (t (progn (msg!> 9100)
  173. (msg!> 91011)
  174. (msg!> 91012)
  175. (msg!> 91013)
  176. (msg!> 91014) )))
  177. (cond ((not ![fldtuned!]) (fldtune!>)))
  178. (set 'fancy!-switch!-on!* '!$)
  179. (set 'fancy!-switch!-off!* '!$)
  180. (ontexdefs!>)
  181. (offothero!> nil)))
  182. (t(progn
  183. (offothero!> nil)
  184. (set 'fancy!-switch!-on!* (int2id 16))
  185. (set 'fancy!-switch!-off!* (int2id 17))
  186. (onfancydefs!>) )))))
  187. (de fldtune!> nil
  188. (progn
  189. (setq ![fldtuned!] t)
  190. (copyd 'oldfld!> 'fancy!-lower!-digits)
  191. (remd 'fancy!-lower!-digits)
  192. (copyd 'fancy!-lower!-digits 'fancylowerdigits!>)
  193. ))
  194. (de fancylowerdigits!> (u)
  195. (prog (w wa wn wz wr)
  196. (setq w (reverse u))
  197. % Last symbol is ~ ?
  198. (cond ((eq (car w) '!~) (setq wz t) (setq w (cdr w))))
  199. % Selecting digits ...
  200. lab1
  201. (cond ((or (null w) (not(digit(car w)))) (go lab2)))
  202. (setq wn (cons (car w) wn))
  203. (setq w (cdr w))
  204. (go lab1)
  205. lab2
  206. % Atom itself
  207. (setq w (reverse w))
  208. (setq wa (intern(compress w)))
  209. % Symbol is special
  210. (cond
  211. ((setq wa (get wa 'fancy!-special!-symbol))
  212. (cond
  213. ((stringp wa) (setq w (explode2 wa)))
  214. (t (setq w (append '(!\ !s !y !m !b !{)
  215. (append (explode2 wa) '(!}))))))))
  216. (cond
  217. (!*latex % latex mode: usinge \dot{}
  218. (cond
  219. (wz (setq w (append '( !\ !d !o !t !{ ) (append w '( !} ))))))
  220. (cond
  221. (wn (setq wr (append w (append '( !_ !{ ) (append wn '( !} ))))))
  222. (t (setq wr w))))
  223. (t(cond % FANCY mode: using ' for conjugation
  224. ((and wz wn)
  225. (setq wr (append w (append '( !' !_ !{ ) (append wn '( !} ))))))
  226. (wz (setq wr (append w '( !' ))))
  227. (wn (setq wr (append w (append '( !_ !{ ) (append wn '( !} ))))))
  228. (t (setq wr w)))))
  229. (return wr)))
  230. (de tunedfindexed!> (bool)
  231. (cond ((or (globalp 'fancy!_print!_df) (fluidp 'fancy!_print!_df))
  232. (cond (bool (set 'fancy!_print!_df 'indexed))
  233. (t (set 'fancy!_print!_df 'partial))))))
  234. (de tunegrg!> (bool)
  235. (cond(bool(progn
  236. (offft!>)
  237. (offothero!> 'grg)))
  238. (t(offallo!>))))
  239. (de tunereduce!> (bool)
  240. (cond(bool(progn
  241. (offft!>)
  242. (offothero!> 'reduce)))
  243. (t(offallo!>))))
  244. (de tunemaple!> (bool)
  245. (cond(bool(progn
  246. (offft!>)
  247. (offothero!> 'maple)))
  248. (t(offallo!>))))
  249. (de tunemath!> (bool)
  250. (cond(bool(progn
  251. (offft!>)
  252. (offothero!> 'math)))
  253. (t(offallo!>))))
  254. (de tunemacsyma!> (bool)
  255. (cond(bool(progn
  256. (offft!>)
  257. (offothero!> 'macsyma)))
  258. (t(offallo!>))))
  259. % Offs All O-switches exept WSS ...
  260. (de offothero!> (wss)
  261. (proc (w)
  262. (setq w ![flaglo!])
  263. (while!> w
  264. (cond((not(eq (car w) wss))
  265. (onoff2!> (car w) nil)))
  266. (setq w (cdr w)))))
  267. % Offs FT-switces ...
  268. (de offft!> nil
  269. (progn
  270. (cond(!*latex (onoff2!> 'latex nil)))
  271. (cond((fancyon!>)(off fancy)))))
  272. % Offs all FT and O-switches ...
  273. (de offallo!> nil
  274. (prog2 (offft!>) (offothero!> nil)))
  275. (de ontexdefs!> nil
  276. (progn
  277. (put '!#!#lr 'fancy!-special!-symbol "{}")
  278. (put '!#!#e 'fancy!-special!-symbol "e")
  279. (put '!#!#b 'fancy!-special!-symbol "b")
  280. (put '!#!#p 'fancy!-special!-symbol "\partial")
  281. (flag '(!#!#e !#!#p) 'print!-indexed)
  282. (put 'e 'fancy!-special!-symbol "e")
  283. (put 'i 'fancy!-special!-symbol "i")
  284. (put '!a!l!p!h!a 'fancy!-special!-symbol "\alpha")
  285. (remprop '!A!L!P!H!A 'fancy!-special!-symbol)
  286. (put '!b!e!t!a 'fancy!-special!-symbol "\beta")
  287. (remprop '!B!E!T!A 'fancy!-special!-symbol)
  288. (put '!g!a!m!m!a 'fancy!-special!-symbol "\gamma")
  289. (put '!G!A!M!M!A 'fancy!-special!-symbol "\Gamma")
  290. (put '!G!a!m!m!a 'fancy!-special!-symbol "\Gamma")
  291. (put '!d!e!l!t!a 'fancy!-special!-symbol "\delta")
  292. (put '!D!E!L!T!A 'fancy!-special!-symbol "\Delta")
  293. (put '!D!e!l!t!a 'fancy!-special!-symbol "\Delta")
  294. (put '!e!p!s!i!l!o!n 'fancy!-special!-symbol "\epsilon")
  295. (remprop '!E!P!S!I!L!O!N 'fancy!-special!-symbol)
  296. (put '!z!e!t!a 'fancy!-special!-symbol "\zeta")
  297. (remprop '!Z!E!T!A 'fancy!-special!-symbol)
  298. (put '!e!t!a 'fancy!-special!-symbol "\eta")
  299. (remprop '!E!T!A 'fancy!-special!-symbol)
  300. (put '!t!h!e!t!a 'fancy!-special!-symbol "\theta")
  301. (put '!T!H!E!T!A 'fancy!-special!-symbol "\Theta")
  302. (put '!T!h!e!t!a 'fancy!-special!-symbol "\Theta")
  303. (put '!i!o!t!a 'fancy!-special!-symbol "\iota")
  304. (remprop '!I!O!T!A 'fancy!-special!-symbol)
  305. (put '!k!a!p!p!a 'fancy!-special!-symbol "\kappa")
  306. (remprop '!K!A!P!P!A 'fancy!-special!-symbol)
  307. (put '!l!a!m!b!d!a 'fancy!-special!-symbol "\lambda")
  308. (put '!L!A!M!B!D!A 'fancy!-special!-symbol "\Lambda")
  309. (put '!L!a!m!b!d!a 'fancy!-special!-symbol "\Lambda")
  310. (put '!m!u 'fancy!-special!-symbol "\mu")
  311. (remprop '!M!U 'fancy!-special!-symbol)
  312. (put '!n!u 'fancy!-special!-symbol "\nu")
  313. (remprop '!N!U 'fancy!-special!-symbol)
  314. (put '!x!i 'fancy!-special!-symbol "\xi")
  315. (put '!X!I 'fancy!-special!-symbol "\Xi")
  316. (put '!X!i 'fancy!-special!-symbol "\Xi")
  317. (put '!p!i 'fancy!-special!-symbol "\pi")
  318. (put '!P!I 'fancy!-special!-symbol "\pi")
  319. (put '!P!i 'fancy!-special!-symbol "\Pi")
  320. (put '!r!h!o 'fancy!-special!-symbol "\rho")
  321. (remprop '!R!H!O 'fancy!-special!-symbol)
  322. (put '!s!i!g!m!a 'fancy!-special!-symbol "\sigma")
  323. (put '!S!I!G!M!A 'fancy!-special!-symbol "\Sigma")
  324. (put '!S!i!g!m!a 'fancy!-special!-symbol "\Sigma")
  325. (put '!t!a!u 'fancy!-special!-symbol "\tau")
  326. (remprop '!T!A!U 'fancy!-special!-symbol)
  327. (put '!u!p!s!i!l!o!n 'fancy!-special!-symbol "\upsilon")
  328. (put '!U!P!S!I!L!O!N 'fancy!-special!-symbol "\Upsilon")
  329. (put '!U!p!s!i!l!o!n 'fancy!-special!-symbol "\Upsilon")
  330. (put '!p!h!i 'fancy!-special!-symbol "\phi")
  331. (put '!P!H!I 'fancy!-special!-symbol "\Phi")
  332. (put '!P!h!i 'fancy!-special!-symbol "\Phi")
  333. (put '!c!h!i 'fancy!-special!-symbol "\chi")
  334. (remprop '!C!H!I 'fancy!-special!-symbol)
  335. (put '!p!s!i 'fancy!-special!-symbol "\psi")
  336. (put '!P!S!I 'fancy!-special!-symbol "\Psi")
  337. (put '!P!s!i 'fancy!-special!-symbol "\Psi")
  338. (put '!o!m!e!g!a 'fancy!-special!-symbol "\omega")
  339. (put '!O!M!E!G!A 'fancy!-special!-symbol "\Omega")
  340. (put '!O!m!e!g!a 'fancy!-special!-symbol "\Omega")
  341. (put 'infinity 'fancy!-special!-symbol "\infty")
  342. (put 'partial!-df 'fancy!-special!-symbol "\partial")
  343. (remflag '(!D!E!L!T!A !d!e!l!t!a) 'PRINT!-INDEXED)
  344. (put 'sin 'fancy!-functionsymbol "\sin")
  345. (put 'sinh 'fancy!-functionsymbol "\sinh")
  346. (put 'asin 'fancy!-functionsymbol "\arcsin")
  347. (put 'asinh 'fancy!-functionsymbol "arcsinh")
  348. (put 'cos 'fancy!-functionsymbol "\cos")
  349. (put 'cosh 'fancy!-functionsymbol "\cosh")
  350. (put 'acos 'fancy!-functionsymbol "\arccos")
  351. (put 'acosh 'fancy!-functionsymbol "arccosh")
  352. (put 'tan 'fancy!-functionsymbol "\tan")
  353. (put 'tanh 'fancy!-functionsymbol "\tanh")
  354. (put 'atan 'fancy!-functionsymbol "\arctan")
  355. (put 'atanh 'fancy!-functionsymbol "arctanh")
  356. (put 'cot 'fancy!-functionsymbol "\cot")
  357. (put 'coth 'fancy!-functionsymbol "\coth")
  358. (put 'acot 'fancy!-functionsymbol "arccot")
  359. (put 'acoth 'fancy!-functionsymbol "arccoth")
  360. (put 'sec 'fancy!-functionsymbol "\sec")
  361. (put 'sech 'fancy!-functionsymbol "sech")
  362. (put 'asec 'fancy!-functionsymbol "arcsec")
  363. (put 'asech 'fancy!-functionsymbol "arcsech")
  364. (put 'csc 'fancy!-functionsymbol "\csc")
  365. (put 'csch 'fancy!-functionsymbol "csch")
  366. (put 'acsc 'fancy!-functionsymbol "arccsc")
  367. (put 'acsch 'fancy!-functionsymbol "arccsch")
  368. (put 'ln 'fancy!-functionsymbol "\ln")
  369. (put 'log 'fancy!-functionsymbol "\log")
  370. ))
  371. (DE ONFANCYDEFS!> NIL
  372. (PROGN
  373. (put '!#!#lr 'fancy!-special!-symbol "{}")
  374. (put '!#!#e 'fancy!-special!-symbol "e")
  375. (put '!#!#b 'fancy!-special!-symbol "b")
  376. (put '!#!#p 'fancy!-special!-symbol 182)
  377. (flag '(!#!#e !#!#p) 'print!-indexed)
  378. (put 'e 'fancy!-special!-symbol "e")
  379. (put 'i 'fancy!-special!-symbol "i")
  380. (put '!a!l!p!h!a 'fancy!-special!-symbol "\alpha")
  381. (remprop '!A!L!P!H!A 'fancy!-special!-symbol)
  382. (put '!b!e!t!a 'fancy!-special!-symbol "\beta")
  383. (remprop '!B!E!T!A 'fancy!-special!-symbol)
  384. (put '!g!a!m!m!a 'fancy!-special!-symbol "\gamma")
  385. (put '!G!A!M!M!A 'fancy!-special!-symbol 71)
  386. (put '!G!a!m!m!a 'fancy!-special!-symbol 71)
  387. (put '!d!e!l!t!a 'fancy!-special!-symbol "\delta")
  388. (put '!D!E!L!T!A 'fancy!-special!-symbol 68)
  389. (put '!D!e!l!t!a 'fancy!-special!-symbol 68)
  390. (put '!e!p!s!i!l!o!n 'fancy!-special!-symbol "\epsilon")
  391. (remprop '!E!P!S!I!L!O!N 'fancy!-special!-symbol)
  392. (put '!z!e!t!a 'fancy!-special!-symbol "\zeta")
  393. (remprop '!Z!E!T!A 'fancy!-special!-symbol)
  394. (put '!e!t!a 'fancy!-special!-symbol "\eta")
  395. (remprop '!E!T!A 'fancy!-special!-symbol)
  396. (put '!t!h!e!t!a 'fancy!-special!-symbol "\theta")
  397. (put '!T!H!E!T!A 'fancy!-special!-symbol 81)
  398. (put '!T!h!e!t!a 'fancy!-special!-symbol 81)
  399. (put '!i!o!t!a 'fancy!-special!-symbol "\iota")
  400. (remprop '!I!O!T!A 'fancy!-special!-symbol)
  401. (put '!k!a!p!p!a 'fancy!-special!-symbol "\kappa")
  402. (remprop '!K!A!P!P!A 'fancy!-special!-symbol)
  403. (put '!l!a!m!b!d!a 'fancy!-special!-symbol "\lambda")
  404. (put '!L!A!M!B!D!A 'fancy!-special!-symbol 76)
  405. (put '!L!a!m!b!d!a 'fancy!-special!-symbol 76)
  406. (put '!m!u 'fancy!-special!-symbol "\mu")
  407. (remprop '!M!U 'fancy!-special!-symbol)
  408. (put '!n!u 'fancy!-special!-symbol "\nu")
  409. (remprop '!N!U 'fancy!-special!-symbol)
  410. (put '!x!i 'fancy!-special!-symbol "\xi")
  411. (put '!X!I 'fancy!-special!-symbol 88)
  412. (put '!X!i 'fancy!-special!-symbol 88)
  413. (put '!p!i 'fancy!-special!-symbol "\pi")
  414. (put '!P!I 'fancy!-special!-symbol "\pi")
  415. (put '!P!i 'fancy!-special!-symbol 80)
  416. (put '!r!h!o 'fancy!-special!-symbol "\rho")
  417. (remprop '!R!H!O 'fancy!-special!-symbol)
  418. (put '!s!i!g!m!a 'fancy!-special!-symbol "\sigma")
  419. (put '!S!I!G!M!A 'fancy!-special!-symbol 83)
  420. (put '!S!i!g!m!a 'fancy!-special!-symbol 83)
  421. (put '!t!a!u 'fancy!-special!-symbol "\tau")
  422. (remprop '!T!A!U 'fancy!-special!-symbol)
  423. (put '!u!p!s!i!l!o!n 'fancy!-special!-symbol "\upsilon")
  424. (put '!U!P!S!I!L!O!N 'fancy!-special!-symbol 161)
  425. (put '!U!p!s!i!l!o!n 'fancy!-special!-symbol 161)
  426. (put '!p!h!i 'fancy!-special!-symbol "\phi")
  427. (put '!P!H!I 'fancy!-special!-symbol 70)
  428. (put '!P!h!i 'fancy!-special!-symbol 70)
  429. (put '!c!h!i 'fancy!-special!-symbol "\chi")
  430. (remprop '!C!H!I 'fancy!-special!-symbol)
  431. (put '!p!s!i 'fancy!-special!-symbol "\psi")
  432. (put '!P!S!I 'fancy!-special!-symbol 89)
  433. (put '!P!s!i 'fancy!-special!-symbol 89)
  434. (put '!o!m!e!g!a 'fancy!-special!-symbol "\omega")
  435. (put '!O!M!E!G!A 'fancy!-special!-symbol 87)
  436. (put '!O!m!e!g!a 'fancy!-special!-symbol 87)
  437. (put 'infinity 'fancy!-special!-symbol "\infty")
  438. (put 'partial!-df 'fancy!-special!-symbol 182)
  439. (remflag '(!D!E!L!T!A !d!e!l!t!a) 'PRINT!-INDEXED)
  440. (put 'sin 'fancy!-functionsymbol "sin")
  441. (put 'sinh 'fancy!-functionsymbol "sinh")
  442. (put 'asin 'fancy!-functionsymbol "asin")
  443. (put 'asinh 'fancy!-functionsymbol "asinh")
  444. (put 'cos 'fancy!-functionsymbol "cos")
  445. (put 'cosh 'fancy!-functionsymbol "cosh")
  446. (put 'acos 'fancy!-functionsymbol "acos")
  447. (put 'acosh 'fancy!-functionsymbol "acosh")
  448. (put 'tan 'fancy!-functionsymbol "tan")
  449. (put 'tanh 'fancy!-functionsymbol "tanh")
  450. (put 'atan 'fancy!-functionsymbol "atan")
  451. (put 'atanh 'fancy!-functionsymbol "atanh")
  452. (put 'cot 'fancy!-functionsymbol "cot")
  453. (put 'coth 'fancy!-functionsymbol "coth")
  454. (put 'acot 'fancy!-functionsymbol "acot")
  455. (put 'acoth 'fancy!-functionsymbol "acoth")
  456. (put 'sec 'fancy!-functionsymbol "sec")
  457. (put 'sech 'fancy!-functionsymbol "sech")
  458. (put 'asec 'fancy!-functionsymbol "asec")
  459. (put 'asech 'fancy!-functionsymbol "asech")
  460. (put 'csc 'fancy!-functionsymbol "csc")
  461. (put 'csch 'fancy!-functionsymbol "csch")
  462. (put 'acsc 'fancy!-functionsymbol "acsc")
  463. (put 'acsch 'fancy!-functionsymbol "acsch")
  464. (put 'ln 'fancy!-functionsymbol "ln")
  465. (put 'log 'fancy!-functionsymbol "log")
  466. ))
  467. %------- Print functions for GRG REDUCE MAPLE ... ------------------------
  468. (de ooprin!> (lst)
  469. (cond ((atom lst) (ooatom!> lst))
  470. ((eq (car lst) 'plus) (oonop!> lst "+"))
  471. ((eq (car lst) 'minus) (oominus!> lst))
  472. ((eq (car lst) 'difference) (oo2op!> lst "-"))
  473. ((eq (car lst) 'times) (oonop!> lst "*"))
  474. ((eq (car lst) 'quotient) (oo2op!> lst "/"))
  475. ((eq (car lst) 'expt) (oo2op!> lst '!^ ))
  476. (t (oofun!> lst))
  477. ))
  478. (de oominus!> (lst)
  479. (progn (gprin!> "(")
  480. (gprin!> "-")
  481. (ooprin!> (cadr lst))
  482. (gprin!> ")") ))
  483. (de oo2op!> (lst w)
  484. (progn (gprin!> "(")
  485. (ooprin!> (cadr lst))
  486. (gprin!> w)
  487. (ooprin!> (caddr lst))
  488. (gprin!> ")") ))
  489. (de oonop!> (lst w)
  490. (proc nil
  491. (gprin!> "(")
  492. (setq lst (cdr lst))
  493. (ooprin!> (car lst))
  494. (setq lst (cdr lst))
  495. (while!> lst
  496. (gprin!> w)
  497. (ooprin!> (car lst))
  498. (setq lst (cdr lst)))
  499. (gprin!> ")")))
  500. (de ooatom!> (w)
  501. (cond ((null w) (gprin!> 0))
  502. ((eq w 'e) (ooae!>))
  503. ((eq w 'i) (ooai!>))
  504. ((eq w 'pi) (ooapi!>))
  505. ((eq w 'infinity) (ooainf!>))
  506. ((and (not !*grg) (get w '!=depend))
  507. (oofun0!>(get w '!=depend)))
  508. (t (gprin!> w))))
  509. (de ooae!> nil
  510. (gprin!> (cond
  511. (!*macsyma '!%!e )
  512. ((or !*math !*maple) '!E )
  513. (t 'e ))))
  514. (de ooai!> nil
  515. (gprin!> (cond
  516. (!*macsyma '!%!i )
  517. ((or !*math !*maple) '!I )
  518. (t 'i ))))
  519. (de ooapi!> nil
  520. (gprin!> (cond
  521. (!*macsyma '!%!p!i )
  522. ((or !*maple !*math) '!P!i )
  523. (t 'pi ))))
  524. (de ooainf!> nil
  525. (gprin!> (cond
  526. (!*maple '!i!n!f!i!n!i!t!y )
  527. (!*math '!I!n!f!i!n!i!t!y )
  528. (t 'infinity ))))
  529. (de oolb!> nil (gprin!> (cond (!*math "[") (t "("))))
  530. (de oorb!> nil (gprin!> (cond (!*math "]") (t ")"))))
  531. (de oofun!> (w)
  532. (cond
  533. ((or !*grg !*reduce) (oofun0!> w))
  534. ((eq (car w) 'df) (oodf!> w))
  535. ((eq (car w) 'int) (ooint!> w))
  536. ((eq (car w) 'prod) (oops!> w t))
  537. ((eq (car w) 'sum) (oops!> w nil))
  538. ((eq (car w) 'ln) (ooln!> w))
  539. ((eq (car w) 'log) (oolog!> w))
  540. ((eq (car w) 'sqrt) (oosqrt!> w))
  541. ((flagp (car w) '!+trig) (ootrig!> w))
  542. (t (oofun0!> w))))
  543. (de oofun0!> (lst)
  544. (prog2
  545. (gprin!> (car lst))
  546. (ooargs!> (cdr lst))))
  547. (de ooargs!> (lst)
  548. (proc nil
  549. (oolb!>)
  550. (ooprin!> (car lst))
  551. (setq lst (cdr lst))
  552. (while!> lst
  553. (gprin!> ",")
  554. (ooprin!> (car lst))
  555. (setq lst (cdr lst)))
  556. (oorb!>)))
  557. (de oodf!> (lst)
  558. (cond((or !*reduce !*grg) (oofun0!> lst))
  559. (t(prog2
  560. (gprin!> (cond ((or !*maple !*macsyma) '!d!i!f!f )
  561. (!*math '!D )
  562. (t 'df )))
  563. (ooargsdf!>(cdr lst))))))
  564. (de ooargsdf!> (lst)
  565. (proc (w wc)
  566. (oolb!>)
  567. (ooprin!> (car lst))
  568. (setq lst (cdr lst))
  569. (while!> lst
  570. (gprin!> ",")
  571. (setq wc (car lst))
  572. (cond
  573. ((numberp wc)
  574. (for!> ww (2 1 wc) do
  575. (prog2 (ooprin!> w)
  576. (cond((not(eqn ww wc))(gprin!> ","))))))
  577. (t(ooprin!> wc)))
  578. (setq w wc)
  579. (setq lst (cdr lst)))
  580. (oorb!>)))
  581. (de ooint!> (lst)
  582. (prog2
  583. (gprin!> (cond ((or !*maple !*macsyma) '!i!n!t!e!g!r!a!t!e )
  584. (!*math '!I!n!t!e!g!r!a!t!e )
  585. (t 'int )))
  586. (ooargs!>(cdr lst))))
  587. (de oosqrt!> (lst)
  588. (prog2
  589. (gprin!> (cond ((or !*maple !*macsyma) '!s!q!r!t )
  590. (!*math '!S!q!r!t )
  591. (T 'sqrt )))
  592. (ooargs!>(cdr lst))))
  593. (de ooln!> (lst)
  594. (prog2
  595. (gprin!> (cond (!*maple '!l!n )
  596. (!*macsyma '!l!o!g )
  597. (!*math '!L!o!g )
  598. (t 'ln )))
  599. (ooargs!>(cdr lst))))
  600. (de oolog!> (lst)
  601. (prog2
  602. (gprin!> (cond (!*maple '!l!o!g )
  603. (!*macsyma '!l!o!g )
  604. (!*math '!L!o!g )
  605. (t 'log )))
  606. (ooargs!>(cdr lst))))
  607. (de oops!> (lst bool)
  608. (prog nil
  609. (gprin!>
  610. (cond (bool (cond ((or !*maple !*macsyma) '!p!r!o!d )
  611. (!*math '!P!r!o!d )
  612. (t 'prod )))
  613. (t (cond ((or !*maple !*macsyma) '!s!u!m )
  614. (!*math '!S!u!m )
  615. (t 'sum ))) ))
  616. (cond((not(or !*math !*maple))
  617. (prog2 (ooargs!>(cdr lst)) (return nil))))
  618. (oolb!>)
  619. (ooprin!> (cadr lst))
  620. (setq lst (cddr lst))
  621. (gprin!> ",")
  622. (cond(!*math (gprin!> "{")))
  623. (ooprin!> (car lst))
  624. (gprin!> (cond (!*math ",")
  625. (!*maple "=")))
  626. (ooprin!> (cadr lst))
  627. (gprin!> (cond (!*math ",")
  628. (!*maple "..")))
  629. (ooprin!> (caddr lst))
  630. (cond(!*math (gprin!> "}")))
  631. (oorb!>)))
  632. (de ootrig!> (lst)
  633. (prog (w wa)
  634. (setq w (explode2(car lst)))
  635. (cond((eq (car w) 'a) (prog2
  636. (setq wa t)
  637. (setq w (cdr w)))))
  638. (cond(wa
  639. (setq wa (cond (!*maple '( !a !r !c ))
  640. (!*math '( !A !r !c ))
  641. (t '( A ))))))
  642. (cond
  643. (!*maple (setq w (mapcar w 'tolc!>)))
  644. (!*math (setq w (cons (touc!> (car w)) (mapcar (cdr w) 'tolc!>)))))
  645. (setq w (compress(append wa w)))
  646. (oofun0!>(cons w (cdr lst)))))
  647. (de ooend!> nil
  648. (cond ((not !*math) (gprin!> ";"))))
  649. (de ooends!> nil
  650. (cond((not !*math)
  651. (gprin!>
  652. (cond ((or !*reduce !*macsyma) "$")
  653. (!*maple ":")
  654. (t ";"))))))
  655. (de ooelem!> (wi wl)
  656. (proc nil
  657. (gprin!> wi)
  658. (cond((null wl) (return nil)))
  659. (gprin!> (cond((or !*math !*macsyma) "[")(t "(")))
  660. (while!> wl
  661. (gprin!> (car wl))
  662. (cond((cdr wl)(gprin!> ",")))
  663. (setq wl (cdr wl)))
  664. (gprin!> (cond((or !*math !*macsyma) "]")(t ")")))
  665. ))
  666. %---------- For Write ----------------------------------------------------
  667. (de wriassign!> (we)
  668. (cond ((fancyon!>) (algpri!> (cond (we ":\,") (t "\,=\,")) ))
  669. ((ifmodo!>)
  670. (gprin!>
  671. (cond (!*macsyma " : " )
  672. ((or !*maple !*reduce) " := ")
  673. (t " = " ))))
  674. (t (algpri!> (cond (we " : ") (t " = ")) ))))
  675. (de wriequal!> nil
  676. (cond ((fancyon!>) (algpri!> "\,=\," ))
  677. ((ifmodo!>)
  678. (gprin!>
  679. (cond (!*math " == ")
  680. (t " = " ))))
  681. (t (algpri!> " = " ))))
  682. %---------- Equations Printing ------------------------------------------
  683. (de eqpri!> (wl wr wt)
  684. (progn
  685. (cond ((zerop wt) (alpri!> wl)) (t (dfpri!> wl wt)))
  686. (wriequal!>)
  687. (cond ((zerop wt) (alpri!> wr)) (t (dfpri!> wr wt)))
  688. ))
  689. %---------- Algebraic Expressions Printing -----------------------------
  690. (de alpri!> (lst)
  691. (cond ((ifmodo!>) (ooprin!> lst))
  692. (t (algpri!> (cond (!*wrs (aeval lst)) (t lst)) ))))
  693. %---------- Form Printing ----------------------------------------------
  694. (de dfpri!> (lst type)
  695. (cond ((ifmodo!>) (dfpri1!> lst type))
  696. (t (dfpri0!> lst type))))
  697. (de dfpri0!> (lst type)
  698. (cond((null lst) (algpri!> 0 )) % 0
  699. (t(prog (wx)
  700. (setq type (lessp type 0))
  701. (cond(!*wrs(setq lst(aevalform!> lst))))
  702. (cond((null lst)(algpri!> 0 ))(t
  703. (foreach!> x in lst do % for all terms ...
  704. (progn
  705. (cond((eqn(car x)-1) (primi!>)) % - d x
  706. ((not(eq x(car lst))) (pripl!>))) % ... + ...
  707. (cond((not(or(eqn(car x)-1)(eqn(car x)1))) % d x
  708. (cond((or(idp(car x))
  709. (and(numberp(car x))(not(lessp(car x)0)))
  710. (and !*wrs
  711. !*exp (not(getd 'taysimpexpt))
  712. (not(numberp(car x))) % not -n
  713. (eqn(cdr(cadar x)) 1) % den = 1
  714. (null(cdar(cadar x)) ) % not a + b
  715. (eqn(cdaar(cadar x)) 1) % not n * a
  716. (eqn(cdaaar(cadar x)) 1) % not a ** b
  717. )) % a d x
  718. (algpri!> (car x) ))
  719. (t
  720. % (algpri!> (list2 '! (car x)) )
  721. (progn
  722. (algpri!> "(" )
  723. (algpri!> (car x) )
  724. (algpri!> ")" ) )
  725. )) )) % (...) d x
  726. (setq wx (cddr x)) % wx - d x list
  727. (prixvost!> wx type) ))))))))
  728. (de primi!> nil
  729. (algpri!>
  730. (cond (!*latex "-")
  731. (t " -")) ))
  732. (de pripl!> nil
  733. (algpri!>
  734. (cond (!*latex "+")
  735. (t " + ")) ))
  736. (de prixvost!> (wx type)
  737. (proc (w wc)
  738. (setq wc 0)
  739. (while!> wx
  740. (cond((caar wx) (prog2
  741. (printdx0!> wc type)
  742. (cond((cdr wx) (priex!>))) )))
  743. (setq wc (add1 wc))
  744. (setq wx (cdr wx)))))
  745. (de priex!> nil
  746. (algpri!>
  747. (cond (!*latex "\,\wedge")
  748. ((fancyon!>) "\,\symb{217}")
  749. (t " /\"))
  750. ))
  751. (de printdx0!> (wc type)
  752. (cond
  753. (![modp!] %%% Anholonomic mode: b or e
  754. (cond
  755. ((fancyon!>) (prog2 % latex or fancy ...
  756. (algpri!> "\," )
  757. (cond (type (algpri!> (list '!#!#e wc) )) % e_i
  758. (t (algpri!> (list 'expt '!#!#b wc) ))))) % b^i
  759. (t (prog2 % plain grg ...
  760. (algpri!> " " )
  761. (algpri!>
  762. (compress (cons (bore!> type) (explode2 wc))) % bi or ei
  763. )))))
  764. (t(cond %%% Holonomic mode: @ x or d x ...
  765. ((fancyon!>) % latex or fancy ...
  766. (cond (type % \partial_x
  767. (algpri!> (list '!#!#p (getel1!> ![cord!] wc)) ))
  768. (t (prog2 % d x
  769. (algpri!> "\,d\," )
  770. (algpri!> (getel1!> ![cord!] wc) )))))
  771. (t (prog2 % plain grg ...
  772. (algpri!> (cond(type " @ ")(t " d ")) )
  773. (algpri!> (getel1!> ![cord!] wc) )))))))
  774. (de bore!> (type) (cond (type '!e) (t '!b)))
  775. (de dfpri1!> (lst type)
  776. (cond((null lst) (gprin!> 0)) % 0
  777. (t(proc (w wf wx wc)
  778. (setq type (lessp type 0))
  779. (while!> lst
  780. (setq w (car lst))
  781. (cond (wf (gprin!> "+"))
  782. (t (setq wf t)))
  783. (cond((not(equal (car w) 1)) (prog2
  784. (cond
  785. ((and (numberp(car w)) (lessp (car w) 0))
  786. (ooprin!> (list2 'minus (minus(car w)))))
  787. (t (ooprin!> (car w))))
  788. (gprin!> "*"))))
  789. (setq w (cddr w)) % d x list
  790. (setq wc 0)
  791. (setq wx nil)
  792. (while!> w
  793. (cond((caar w)
  794. (setq wx (cons (prepdx1!> wc type) wx))))
  795. (setq wc (add1 wc))
  796. (setq w (cdr w)))
  797. (cond(!*grg (oogrgdx!> (reverse wx) type))
  798. (t (oofun0!> (cons (cond (type '!pd) (t '!dx))
  799. (reverse wx)))))
  800. (setq lst (cdr lst)))))))
  801. (de oogrgdx!> (wx type)
  802. (loop!>
  803. (cond((not ![modp!])(prog2
  804. (cond (type (gprin!> '!@))
  805. (t (gprin!> '!d)))
  806. (gprin!> '! ))))
  807. (gprin!> (car wx))
  808. (setq wx (cdr wx))
  809. (exitif (null wx))
  810. (gprin!> '!/!\)))
  811. (de prepdx1!> (wc type)
  812. (cond
  813. (![modp!] (compress (cons (bore!> type)
  814. (explode2 wc))))
  815. (t (getel1!> ![cord!] wc))))
  816. %-------- Some General Print Functions -----------------------------------
  817. (de grgterpri!> nil
  818. (cond((ifmodo!>) (gterpri!>))
  819. (t (algterpri!>))))
  820. (de grgend!> nil
  821. (cond((ifmodo!>) (ooend!>))))
  822. (de grgends!> nil
  823. (cond((ifmodo!>) (ooends!>))))
  824. %============ End of GRGprin.sl ===========================================%