gev.old 47 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651
  1. % GEV Editor, PSL version. G. Novak 31 Jan. 1983
  2. [GLISPGLOBALS
  3. (GEVACTIVEFLG BOOLEAN )
  4. (GEVCHARWIDTH INTEGER )
  5. (GEVEDITCHAIN EDITCHAIN )
  6. (GEVEDITFLG BOOLEAN )
  7. (GEVMENUWINDOW WINDOW )
  8. (GEVMENUWINDOWHEIGHT INTEGER )
  9. (GEVMOUSEAREA MOUSESTATE )
  10. (GEVSHORTCHARS INTEGER )
  11. (GEVWINDOW WINDOW )
  12. (GEVWINDOWY INTEGER )
  13. ]
  14. [GLISPOBJECTS
  15. (AREA
  16. (LIST (START VECTOR)
  17. (SIZE VECTOR))
  18. PROP ((LEFT (START:X))
  19. (BOTTOM (START:Y))
  20. (RIGHT (LEFT+WIDTH))
  21. (TOP (BOTTOM+HEIGHT))
  22. (WIDTH (SIZE:X))
  23. (HEIGHT (SIZE:Y))
  24. (CENTER (START+SIZE/2))
  25. (AREA (WIDTH*HEIGHT)))
  26. ADJ ((EMPTY (WIDTH IS ZERO OR HEIGHT IS ZERO))
  27. (ZERO (self IS EMPTY)))
  28. MSG ((CONTAINS? REGION-CONTAINS OPEN T)) )
  29. (EDITCHAIN
  30. (LISTOF EDITFRAME)
  31. PROP [(TOPFRAME ((CAR self)))
  32. (TOPITEM ((CAR TOPFRAME:PREVS] )
  33. (EDITFRAME
  34. (LIST (PREVS (LISTOF GSEITEM))
  35. (SUBITEMS (LISTOF GSEITEM))
  36. (PROPS (LISTOF GSEITEM))) )
  37. (GSEITEM
  38. (LIST (NAME ATOM)
  39. (VALUE ANYTHING)
  40. (TYPE ANYTHING)
  41. (SHORTVALUE ATOM)
  42. (NODETYPE ATOM)
  43. (SUBVALUES (LISTOF GSEITEM))
  44. (NAMEPOS VECTOR)
  45. (VALUEPOS VECTOR))
  46. PROP [(NAMEAREA ((VIRTUAL REGION WITH START = NAMEPOS
  47. WIDTH = 8* (NCHARS NAME)
  48. HEIGHT = 12))
  49. VTYPE GLVTYPE4)
  50. (VALUEAREA ((VIRTUAL REGION WITH START = VALUEPOS
  51. WIDTH = 8* (NCHARS NAME)
  52. HEIGHT = 12] )
  53. (MOUSESTATE
  54. (LIST (AREA AREA)
  55. (ITEM GSEITEM)
  56. (FLAG BOOLEAN)
  57. (GROUP INTEGER)) )
  58. (DOLPHINREGION
  59. (RECORD REGION (LEFT INTEGER)
  60. (BOTTOM INTEGER)
  61. (WIDTH INTEGER)
  62. (HEIGHT INTEGER)) )
  63. (MENU
  64. (RECORD MENU (ITEMS (LISTOF ATOM)))
  65. MSG ((SELECT MENU RESULT ATOM)) )
  66. (VECTOR
  67. (LIST (X INTEGER)
  68. (Y INTEGER))
  69. PROP [(MAGNITUDE ((SQRT X^2 + Y^2)))
  70. (ANGLE ((ARCTAN2 Y X T))
  71. RESULT RADIANS)
  72. (UNITVECTOR ((A RVECTOR WITH X = X/MAGNITUDE Y = Y/MAGNITUDE]
  73. ADJ ((ZERO (X IS ZERO AND Y IS ZERO))
  74. (NORMALIZED (MAGNITUDE = 1.0)))
  75. MSG [(PRIN1 ((PRIN1 "(")
  76. (PRIN1 X)
  77. (PRIN1 ",")
  78. (PRIN1 Y)
  79. (PRIN1 ")")))
  80. (PRINT ((_ self PRIN1)
  81. (TERPRI] )
  82. (WINDOW
  83. ANYTHING
  84. PROP ((REGION ((DSPCLIPPINGREGION NIL self))
  85. RESULT DOLPHINREGION)
  86. (XPOSITION ((DSPXPOSITION NIL self))
  87. RESULT INTEGER)
  88. (YPOSITION ((DSPYPOSITION NIL self))
  89. RESULT INTEGER)
  90. (HEIGHT (REGION:HEIGHT))
  91. (WIDTH (REGION:WIDTH))
  92. (LEFT ((DSPXOFFSET NIL self))
  93. RESULT INTEGER)
  94. (BOTTOM ((DSPYOFFSET NIL self))
  95. RESULT INTEGER))
  96. MSG ((CLEAR CLEARW)
  97. (OPEN OPENW)
  98. (CLOSE CLOSEW)) )
  99. ]
  100. (DEFINEQ
  101. (AREA-CONTAINS
  102. (GLAMBDA (AREA P)
  103. % edited: "26-OCT-82 11:45"
  104. % Test whether an area contains a point P.
  105. (P:X>=AREA:LEFT AND P:X<=AREA:RIGHT
  106. AND P:Y>=AREA:BOTTOM AND P:Y<=AREA:TOP)))
  107. (GEV
  108. [NLAMBDA (VAR STR)
  109. % edited: "12-OCT-82 14:19"
  110. % GLISP Edit Value function.
  111. % Edit VAL according to structure description STR.
  112. (PROG (VAL)
  113. (SETQ VAL (EVAL VAR))
  114. (SETQ STR (EVAL STR))
  115. (GEVA VAR VAL STR])
  116. (GEVA
  117. (GLAMBDA (VAR VAL STR)
  118. % edited: "22-DEC-82 14:16"
  119. % GLISP Edit Value function.
  120. % Edit VAL according to structure description STR.
  121. (PROG (GLNATOM TMP HEADER)
  122. (OR (AND (BOUNDP (QUOTE GEVWINDOW))
  123. GEVWINDOW)
  124. (GEVINITEDITWINDOW))
  125. (OPENW GEVMENUWINDOW)
  126. (GEVACTIVEFLG_T)
  127. (GEVEDITFLG_NIL)
  128. (GLNATOM_0)
  129. (GEVSHORTCHARS_27)
  130. (GEVCHARWIDTH_7)
  131. (IF VAR IS A LIST AND (CAR VAR)='QUOTE
  132. THEN VAR_(CONCAT "'" (CADR VAR)))
  133. (IF ~STR
  134. THEN (IF VAL IS ATOMIC AND (GETPROP VAL (QUOTE GLSTRUCTURE))
  135. THEN STR_'GLTYPE
  136. ELSEIF (GEVGLISPP)
  137. THEN STR_(GLCLASS VAL)))
  138. (HEADER_(A GSEITEM WITH NAME = VAR VALUE = VAL TYPE = STR))
  139. (GEVEDITCHAIN_(LIST (LIST (LIST HEADER)
  140. NIL NIL)))
  141. (GEVREFILLWINDOW)
  142. (GEVMOUSELOOP))))
  143. (GEVBUTTONEVENTFN
  144. [GLAMBDA NIL
  145. % edited: "11-NOV-82 16:53"
  146. % Respond to a button event within the editing window.
  147. (PROG (POS SELECTION TMP TOP N)
  148. (GETMOUSESTATE)
  149. % Test the state of the left mouse button.
  150. (IF (ZEROP (LOGAND LASTMOUSEBUTTONS 4))
  151. THEN
  152. % Button is now up.
  153. (IF GEVMOUSEAREA
  154. THEN (SELECTION_GEVMOUSEAREA)
  155. (GEVMOUSEAREA_NIL)
  156. (GEVINVERTENTRY SELECTION:AREA GEVWINDOW)
  157. % Execute action.
  158. (IF SELECTION:FLAG
  159. THEN (IF SELECTION:GROUP=1
  160. THEN (TMP_GEVEDITCHAIN:TOPFRAME:PREVS)
  161. (N_0)
  162. (WHILE TMP AND (TOP-_TMP)
  163. <>SELECTION:ITEM
  164. DO N_+1)
  165. (GEVPOP NIL N)
  166. ELSE (GEVPUSH SELECTION:ITEM))
  167. ELSE (PRIN1 SELECTION:ITEM:NAME)
  168. (PRIN1 " is ")
  169. (PRINTDEF SELECTION:ITEM:TYPE (POSITION T))
  170. (TERPRI))
  171. (RETURN)
  172. ELSE
  173. % Button is now down.
  174. (POS _(A VECTOR WITH X =(LASTMOUSEX GEVWINDOW)
  175. Y =(LASTMOUSEY GEVWINDOW)))
  176. (IF GEVMOUSEAREA
  177. THEN (IF (_ GEVMOUSEAREA:AREA CONTAINS? POS)
  178. THEN (RETURN)
  179. ELSE
  180. % Mouse has moved out of area with button down.
  181. (SELECTION_GEVMOUSEAREA)
  182. (GEVMOUSEAREA_NIL)
  183. (GEVINVERTENTRY SELECTION:AREA GEVWINDOW)))
  184. % Try to find an item at current mouse position.
  185. (IF GEVMOUSEAREA _(GEVFINDPOS POS GEVEDITCHAIN:TOPFRAME)
  186. THEN (GEVINVERTENTRY GEVMOUSEAREA:AREA GEVWINDOW])
  187. (GEVCOMMANDFN
  188. [GLAMBDA (COMMANDWORD:ATOM)
  189. % edited: "11-NOV-82 16:20"
  190. (PROG (PL SUBPL PROPNAME VAL PROPNAMES TOPITEM)
  191. (CASE COMMANDWORD OF (EDIT (GEVEDIT))
  192. (QUIT (IF GEVMOUSEAREA
  193. THEN (GEVINVERTENTRY GEVMOUSEAREA:AREA GEVWINDOW)
  194. (GEVMOUSEAREA_NIL)
  195. ELSE (GEVQUIT)))
  196. (POP (GEVPOP T 1))
  197. (PROGRAM (GEVPROGRAM))
  198. ((PROP ADJ ISA MSG)
  199. (TOPITEM_GEVEDITCHAIN:TOPITEM)
  200. (GEVCOMMANDPROP TOPITEM COMMANDWORD NIL))
  201. ELSE
  202. (ERROR])
  203. (GEVCOMMANDPROP
  204. [GLAMBDA (ITEM:GSEITEM COMMANDWORD:ATOM PROPNAME:ATOM)
  205. % edited: "22-DEC-82 11:30"
  206. (PROG (VAL PROPNAMES FLG)
  207. (IF PROPNAME
  208. THEN FLG_T)
  209. (IF ITEM:TYPE IS ATOMIC
  210. THEN (PROPNAMES_(GEVCOMMANDPROPNAMES ITEM:TYPE
  211. COMMANDWORD GEVEDITCHAIN:TOPFRAME)
  212. ))
  213. (IF ITEM:TYPE IS ATOMIC OR COMMANDWORD='PROP
  214. THEN (IF COMMANDWORD='PROP
  215. THEN (IF (CDR PROPNAMES)
  216. THEN PROPNAMES+_'All)
  217. PROPNAMES+_'self)
  218. (IF ~PROPNAMES (RETURN))
  219. [IF ~PROPNAME (PROPNAME _(MENU (create MENU
  220. ITEMS _ PROPNAMES]
  221. (IF ~PROPNAME (RETURN)
  222. ELSEIF PROPNAME='self
  223. THEN (PRIN1 PROPNAME)
  224. (PRIN1 " = ")
  225. (PRINT ITEM:VALUE)
  226. ELSEIF COMMANDWORD='PROP AND PROPNAME='All
  227. THEN (FOR X IN (OR (CDDR PROPNAMES)
  228. (CDR PROPNAMES))
  229. DO (GEVDOPROP ITEM X COMMANDWORD FLG))
  230. ELSE (GEVDOPROP ITEM PROPNAME COMMANDWORD FLG))
  231. (IF COMMANDWORD='MSG
  232. THEN (GEVREFILLWINDOW)
  233. (GEVEDITFLG_T])
  234. (GEVCOMMANDPROPNAMES
  235. (GLAMBDA (OBJ:GLTYPE PROPTYPE:ATOM TOPFRAME:EDITFRAME)
  236. % edited: "22-DEC-82 11:09"
  237. % Get all property names of properties of type PROPTYPE for OBJ.
  238. % Properties are filtered to remove system
  239. % properties and those which are already displayed.
  240. (PROG (RESULT TYPE)
  241. (RESULT _(FOR P IN (CASE PROPTYPE OF (PROP OBJ:PROPS)
  242. (ADJ OBJ:ADJS)
  243. (ISA OBJ:ISAS)
  244. (MSG OBJ:MSGS))
  245. WHEN ~(PROPTYPE~='MSG AND (THE PROP OF TOPFRAME WITH
  246. NAME =(CAR P)))
  247. AND ~[PROPTYPE='PROP AND
  248. (MEMB (CAR P)
  249. (QUOTE (SHORTVALUE DISPLAYPROPS]
  250. AND ~(PROPTYPE='MSG AND (CADR P) IS ATOMIC
  251. AND (~(GETD (CADR P))
  252. OR [LENGTH (CADR (GETD (CADR P]
  253. >1))
  254. COLLECT P:NAME))
  255. [FOR S IN OBJ:SUPERS DO
  256. (RESULT _(NCONC RESULT (GEVCOMMANDPROPNAMES S PROPTYPE
  257. TOPFRAME]
  258. (RETURN RESULT))))
  259. (GEVCOMPPROP
  260. [GLAMBDA (STR:GLTYPE PROPNAME,PROPTYPE:ATOM)
  261. % edited: "22-DEC-82 11:17"
  262. % Compile a property whose name is PROPNAME and whose
  263. % property type (ADJ, ISA, PROP, MSG is PROPTYPE for the
  264. % object type STR.)
  265. (PROG (PROPENT)
  266. (IF ~(MEMB PROPTYPE (QUOTE (ADJ ISA PROP MSG)))
  267. (RETURN (QUOTE GEVERROR)))
  268. % If the property is implemented by a named function,
  269. % return the function name.
  270. (IF (PROPENT_(GEVGETPROP STR PROPNAME PROPTYPE))
  271. AND (CADR PROPENT) IS ATOMIC
  272. THEN (RETURN (CADR PROPENT)))
  273. % Compile code for this property and save it.
  274. % First be sure the GLISP compiler is loaded.
  275. (RETURN (COND
  276. ((GEVGLISPP)
  277. (GLCOMPPROP STR PROPNAME PROPTYPE)
  278. OR
  279. (QUOTE GEVERROR))
  280. (T (ERROR
  281. "GLISP compiler must be loaded for PROPs which
  282. are not specified with function name equivalents."
  283. (LIST STR PROPTYPE PROPNAME])
  284. (GEVDATANAMES
  285. [GLAMBDA (OBJ:GLTYPE FILTER:ATOM)
  286. % edited: " 4-NOV-82 16:08"
  287. % Get a flattened list of names and types from a given
  288. % structure description.
  289. (PROG (RESULT)
  290. (GEVDATANAMESB OBJ:STRDES FILTER)
  291. (RETURN (DREVERSE RESULT])
  292. (GEVDATANAMESB
  293. [GLAMBDA (STR:ANYTHING FILTER:ATOM)
  294. % edited: " 4-NOV-82 16:07"
  295. % Get a flattened list of names and types from a given
  296. % structure description.
  297. (GLOBAL RESULT)
  298. (PROG (TMP)
  299. (IF STR IS ATOMIC
  300. THEN (RETURN)
  301. ELSE (CASE (CAR STR)
  302. OF
  303. (CONS (GEVDATANAMESB (CADR STR)
  304. FILTER)
  305. (GEVDATANAMESB (CADDR STR)
  306. FILTER))
  307. ((ALIST PROPLIST LIST)
  308. (FOR X IN (CDR STR) DO (GEVDATANAMESB X FILTER)))
  309. (RECORD (FOR X IN (CDDR STR) DO
  310. (GEVDATANAMESB X FILTER)))
  311. (ATOM (GEVDATANAMESB (CADR STR)
  312. FILTER)
  313. (GEVDATANAMESB (CADDR STR)
  314. FILTER))
  315. (BINDING (GEVDATANAMESB (CADR STR)
  316. FILTER))
  317. (LISTOF (RETURN))
  318. ELSE
  319. [IF (GEVFILTER (CADR STR)
  320. FILTER)
  321. THEN (RESULT +_(LIST (CAR STR)
  322. (CADR STR]
  323. ((GEVDATANAMESB (CADR STR)
  324. FILTER])
  325. (GEVDISPLAYNEWPROP
  326. (GLAMBDA NIL
  327. % edited: "14-OCT-82 15:35"
  328. % Display a newly added property in the window.
  329. (PROG (Y NEWONE:GSEITEM)
  330. (Y_GEVWINDOWY)
  331. (NEWONE_(CAR (LAST GEVEDITCHAIN:TOPFRAME:PROPS)))
  332. (GEVPPS NEWONE 1 GEVWINDOW Y)
  333. (GEVWINDOWY_Y))))
  334. (GEVDOPROP
  335. [GLAMBDA (ITEM:GSEITEM PROPNAME,COMMANDWORD:ATOM FLG:BOOLEAN)
  336. % edited: "16-OCT-82 16:09"
  337. % Add the property PROPNAME of type COMMANDWORD to the
  338. % display for ITEM.
  339. (PROG (VAL)
  340. (VAL_(GEVEXPROP ITEM:VALUE ITEM:TYPE PROPNAME COMMANDWORD NIL))
  341. (GEVEDITCHAIN:TOPFRAME:PROPS_+(A GSEITEM WITH NAME = PROPNAME
  342. TYPE =(GEVPROPTYPE
  343. ITEM:TYPE PROPNAME COMMANDWORD)
  344. VALUE = VAL NODETYPE = COMMANDWORD))
  345. (IF ~FLG
  346. THEN (GEVDISPLAYNEWPROP])
  347. (GEVEDIT
  348. (GLAMBDA NIL
  349. % edited: "12-OCT-82 16:34"
  350. % Edit the currently displayed item.
  351. (PROG (CHANGEDFLG GEVTOPITEM)
  352. (GEVTOPITEM_GEVEDITCHAIN:TOPITEM)
  353. (IF GEVTOPITEM:TYPE IS ATOMIC AND
  354. (GEVEXPROP GEVTOPITEM:VALUE GEVTOPITEM:TYPE
  355. (QUOTE EDIT)
  356. (QUOTE MSG)
  357. NIL)
  358. ~='GEVERROR
  359. THEN CHANGEDFLG_T
  360. ELSEIF GEVTOPITEM:VALUE IS A LIST
  361. THEN (EDITV GEVTOPITEM:VALUE)
  362. (CHANGEDFLG_T)
  363. ELSE (RETURN))
  364. (IF CHANGEDFLG
  365. THEN (GEVREFILLWINDOW))
  366. (GEVEDITFLG_CHANGEDFLG))))
  367. (GEVEXPROP
  368. [GLAMBDA (OBJ STR PROPNAME,PROPTYPE:ATOM ARGS)
  369. % edited: " 4-NOV-82 15:10"
  370. % Execute a property whose name is PROPNAME and whose property
  371. % type (ADJ, ISA, PROP, MSG is PROPTYPE on the
  372. % object OBJ whose type is STR.)
  373. (PROG (FN)
  374. (IF ~(MEMB PROPTYPE (QUOTE (ADJ ISA PROP MSG))) OR
  375. (ARGS AND PROPTYPE~='MSG)
  376. (RETURN (QUOTE GEVERROR)))
  377. (IF (FN_(GEVCOMPPROP STR PROPNAME PROPTYPE))='GEVERROR
  378. THEN (RETURN FN)
  379. ELSE (RETURN (APPLY FN (CONS OBJ ARGS])
  380. (GEVFILLWINDOW
  381. (GLAMBDA NIL
  382. % edited: "14-OCT-82 15:23"
  383. % Fill the GEV editor window with the item which is at
  384. % the top of GEVEDITCHAIN.
  385. (PROG (Y TOP)
  386. (_ GEVWINDOW CLEAR)
  387. % Compute an initial Y value for printing titles in the
  388. % window.
  389. (Y_GEVWINDOW:HEIGHT
  390. - 20)
  391. % Print the titles from the edit chain first.
  392. (TOP_GEVEDITCHAIN:TOPFRAME)
  393. (FOR X IN (REVERSE TOP:PREVS) DO (GEVPPS X 1 GEVWINDOW Y))
  394. (GEVHORIZLINE GEVWINDOW)
  395. (FOR X IN TOP:SUBITEMS DO (GEVPPS X 1 GEVWINDOW Y))
  396. (GEVHORIZLINE GEVWINDOW)
  397. (FOR X IN TOP:PROPS DO (GEVPPS X 1 GEVWINDOW Y))
  398. (GEVWINDOWY_Y))))
  399. (GEVFILTER
  400. (GLAMBDA (TYPE FILTER)
  401. % GSN "21-JAN-83 10:24"
  402. % Filter types according to a specified FILTER.
  403. (TYPE_(GEVXTRTYPE TYPE))
  404. (CASE FILTER OF (NUMBER ~(MEMB TYPE (QUOTE (ATOM STRING BOOLEAN ANYTHING)))
  405. AND ~((LISTP TYPE) AND (CAR TYPE)='LISTOF))
  406. (LIST (LISTP TYPE) AND (CAR TYPE)='LISTOF)
  407. ELSE T)))
  408. (GEVFINDITEMPOS
  409. [GLAMBDA (POS:VECTOR ITEM:GSEITEM N:INTEGER)
  410. % edited: "14-OCT-82 11:32"
  411. (RESULT MOUSESTATE)
  412. % Test whether ITEM contains the mouse position POS. The result is NIL
  413. % if not found, else a list of the sub-item
  414. % and a flag which is NIL if the NAME part is identified,
  415. % T if the VALUE part is identified.
  416. (OR (GEVPOSTEST POS ITEM:NAMEPOS ITEM:NAME ITEM NIL N)
  417. (GEVPOSTEST POS ITEM:VALUEPOS ITEM:SHORTVALUE ITEM T N)
  418. ((ITEM:NODETYPE='STRUCTURE OR ITEM:NODETYPE='SUBTREE
  419. OR ITEM:NODETYPE='LISTOF)
  420. AND (GEVFINDLISTPOS POS ITEM:SUBVALUES N])
  421. (GEVFINDLISTPOS
  422. (GLAMBDA (POS:VECTOR ITEMS:(LISTOF GSEITEM)
  423. N)
  424. % edited: "13-OCT-82 12:03"
  425. (RESULT MOUSESTATE)
  426. % Find some ITEM corresponding to the mouse position POS.
  427. (IF ITEMS
  428. THEN (GEVFINDITEMPOS POS (CAR ITEMS)
  429. N)
  430. OR (GEVFINDLISTPOS POS (CDR ITEMS)
  431. N))))
  432. (GEVFINDPOS
  433. (GLAMBDA (POS:VECTOR FRAME:EDITFRAME)
  434. % edited: "13-OCT-82 12:06"
  435. (RESULT MOUSESTATE)
  436. % Find the sub-item of FRAME corresponding to the mouse position POS.
  437. % The result is NIL if not found, else a list
  438. % of the sub-item and a flag which is NIL if the NAME part is identified,
  439. % T if the VALUE part is identified.
  440. (PROG (TMP N ITEMS:(LISTOF GSEITEM))
  441. (N_0)
  442. (WHILE FRAME AND ~TMP DO (N_+1)
  443. ITEMS-_FRAME
  444. (TMP_(GEVFINDLISTPOS POS ITEMS N)))
  445. (RETURN TMP))))
  446. (GEVGETNAMES
  447. [GLAMBDA (OBJ:GLTYPE FILTER:ATOM)
  448. % edited: "22-DEC-82 14:53"
  449. % Get all names of properties and stored data from a GLISP object type.
  450. (PROG (DATANAMES PROPNAMES)
  451. (SETQ DATANAMES (GEVDATANAMES OBJ FILTER))
  452. (SETQ PROPNAMES (GEVPROPNAMES OBJ (QUOTE PROP)
  453. FILTER))
  454. (RETURN (NCONC DATANAMES PROPNAMES])
  455. (GEVGETPROP
  456. [GLAMBDA (STR PROPNAME,PROPTYPE:ATOM)
  457. % edited: "14-OCT-82 12:50"
  458. % Retrieve a GLISP property whose name is PROPNAME and whose property type
  459. % (ADJ, ISA, PROP, MSG is PROPTYPE for the object type STR.)
  460. (PROG (PL SUBPL PROPENT)
  461. (IF ~(MEMB PROPTYPE (QUOTE (ADJ ISA PROP MSG)))
  462. (ERROR))
  463. (RETURN (AND (PL_(GETPROP STR (QUOTE GLSTRUCTURE)))
  464. (SUBPL_(LISTGET (CDR PL)
  465. PROPTYPE))
  466. (PROPENT_(ASSOC PROPNAME SUBPL])
  467. (GEVGLISPP
  468. [LAMBDA NIL
  469. % edited: "11-NOV-82 15:53"
  470. (BOUNDP (QUOTE GLBASICTYPES])
  471. (GEVHORIZLINE
  472. (GLAMBDA (W:WINDOW)
  473. % edited: "14-OCT-82 09:42"
  474. (GLOBAL Y:INTEGER)
  475. % Draw a horizontal line across window W at Y and decrease Y.
  476. (DRAWLINE 1 Y+4 W:WIDTH Y+4 1 (QUOTE PAINT)
  477. WINDOW)
  478. (Y_-12)))
  479. (GEVINIT
  480. [LAMBDA NIL
  481. % edited: "15-OCT-82 17:16"
  482. (SETQ GLNATOM 0)
  483. (SETQ GEVWINDOW NIL])
  484. (GEVINITEDITWINDOW
  485. [LAMBDA NIL
  486. % edited: " 6-OCT-82 16:29"
  487. % Initialize an edit window for the GLISP structure editor.
  488. (PROG (GEVMENU (LEFT 600)
  489. (BOTTOM 200)
  490. (WIDTH 300)
  491. (HEIGHT 400))
  492. (SETQ GEVWINDOW
  493. (CREATEW (create REGION
  494. LEFT _ LEFT
  495. BOTTOM _ BOTTOM
  496. WIDTH _ WIDTH
  497. HEIGHT _ HEIGHT)
  498. "GEV Structure Editor Window"))
  499. (SETQ GEVMOUSEAREA NIL)
  500. (WINDOWPROP GEVWINDOW (QUOTE BUTTONEVENTFN)
  501. (QUOTE GEVBUTTONEVENTFN))
  502. (WINDOWPROP GEVWINDOW (QUOTE MOVEFN)
  503. (QUOTE GEVMOVEWINDOWFN))
  504. (SETQ GEVMENUWINDOWHEIGHT 40)
  505. (SETQ GEVMENUWINDOW (CREATEW (create REGION
  506. LEFT _ LEFT
  507. BOTTOM _(IDIFFERENCE BOTTOM
  508. GEVMENUWINDOWHEIGHT)
  509. WIDTH _ WIDTH
  510. HEIGHT _ GEVMENUWINDOWHEIGHT)
  511. NIL 0))
  512. (SETQ GEVMENU (create MENU
  513. ITEMS _(QUOTE (QUIT POP EDIT PROGRAM PROP ADJ ISA MSG))
  514. CENTERFLG _ T
  515. MENUROWS _ 2
  516. MENUFONT _(FONTCREATE (QUOTE HELVETICA)
  517. 10
  518. (QUOTE BOLD))
  519. ITEMHEIGHT _ 15
  520. ITEMWIDTH _(IDIFFERENCE (IQUOTIENT WIDTH 4)
  521. 2)
  522. WHENSELECTEDFN _(QUOTE GEVCOMMANDFN)))
  523. (ADDMENU GEVMENU GEVMENUWINDOW)
  524. (RETURN GEVWINDOW])
  525. (GEVINVERTENTRY
  526. (GLAMBDA (AREA:AREA WINDOW)
  527. % edited: " 5-OCT-82 14:43"
  528. % Invert the area of WINDOW which is covered by the specified AREA.
  529. (BITBLT WINDOW AREA:LEFT AREA:BOTTOM WINDOW
  530. AREA:LEFT AREA:BOTTOM AREA:WIDTH AREA:HEIGHT
  531. (QUOTE INVERT)
  532. (QUOTE REPLACE)
  533. NIL NIL)))
  534. (GEVLENGTHBOUND
  535. [LAMBDA (VAL NCHARS)
  536. % edited: "12-OCT-82 12:12"
  537. % Bound the length of VAL to NCHARS.
  538. (COND
  539. ((IGREATERP (NCHARS VAL)
  540. NCHARS)
  541. (CONCAT (SUBSTRING VAL 1 (SUB1 NCHARS))
  542. "-"))
  543. (T VAL])
  544. (GEVMAKENEWFN
  545. [GLAMBDA
  546. [OPERATION,INPUTTYPE:ATOM SET:(LIST (NAME ATOM)
  547. (TYPE GLTYPE))
  548. PATH:(LISTOF (LIST (NAME ATOM)
  549. (TYPE GLTYPE]
  550. % edited: " 6-NOV-82 14:23"
  551. % Make a function to perform OPERATION on set SETNAME
  552. % from INPUTTYPE following PATH to get to the data.
  553. (PROG (LASTPATH)
  554. (SETQ LASTPATH (CAR (LAST PATH)))
  555. (RETURN
  556. (LIST [LIST (QUOTE GLAMBDA)
  557. (LIST (MKATOM (CONCAT (QUOTE GEVNEWFNTOP)
  558. ":" INPUTTYPE)))
  559. (LIST (QUOTE PROG)
  560. (CONS (QUOTE GEVNEWFNVALUE)
  561. (CASE OPERATION OF
  562. (COLLECT (QUOTE (GEVNEWFNRESULT)))
  563. ((MAXIMUM MINIMUM)
  564. (QUOTE (GEVNEWFNTESTVAL GEVNEWFNINSTANCE)))
  565. [TOTAL (QUOTE ((GEVNEWFNSUM 0]
  566. [AVERAGE (QUOTE ((GEVNEWFNSUM 0.0)
  567. (GEVNEWFNCOUNT 0]
  568. ELSE
  569. (ERROR)))
  570. [NCONC [LIST (QUOTE FOR)
  571. (QUOTE GEVNEWFNLOOPVAR)
  572. (QUOTE IN)
  573. (MKATOM (CONCAT (QUOTE GEVNEWFNTOP)
  574. ":" SET:NAME))
  575. (QUOTE DO)
  576. (LIST (QUOTE GEVNEWFNVALUE)
  577. (QUOTE _)
  578. (DREVERSE
  579. (CONS (QUOTE GEVNEWFNLOOPVAR)
  580. (MAPCONC PATH
  581. (FUNCTION (LAMBDA (X)
  582. (LIST (QUOTE OF)
  583. (CAR X)
  584. (QUOTE THE]
  585. (COPY (CASE OPERATION OF
  586. [COLLECT (QUOTE ((GEVNEWFNRESULT +_
  587. GEVNEWFNVALUE]
  588. [MAXIMUM (QUOTE ((IF ~ GEVNEWFNINSTANCE
  589. OR GEVNEWFNVALUE >
  590. GEVNEWFNTESTVAL
  591. THEN (GEVNEWFNTESTVAL _
  592. GEVNEWFNVALUE)
  593. (GEVNEWFNINSTANCE _
  594. GEVNEWFNLOOPVAR]
  595. [MINIMUM (QUOTE ((IF ~ GEVNEWFNINSTANCE
  596. OR GEVNEWFNVALUE
  597. < GEVNEWFNTESTVAL
  598. THEN (GEVNEWFNTESTVAL _
  599. GEVNEWFNVALUE)
  600. (GEVNEWFNINSTANCE _
  601. GEVNEWFNLOOPVAR]
  602. [AVERAGE (QUOTE ((GEVNEWFNSUM _+
  603. GEVNEWFNVALUE)
  604. (GEVNEWFNCOUNT _+
  605. 1]
  606. (TOTAL (QUOTE ((GEVNEWFNSUM _+
  607. GEVNEWFNVALUE]
  608. (LIST (QUOTE RETURN)
  609. (CASE OPERATION OF (COLLECT (QUOTE (DREVERSE GEVNEWFNRESULT)))
  610. ((MAXIMUM MINIMUM)
  611. (QUOTE (LIST GEVNEWFNTESTVAL GEVNEWFNINSTANCE)))
  612. [AVERAGE (QUOTE (QUOTIENT GEVNEWFNSUM (FLOAT GEVNEWFNCOUNT]
  613. (TOTAL (QUOTE GEVNEWFNSUM]
  614. (CASE OPERATION OF (COLLECT (LIST (QUOTE LISTOF)
  615. (CADR LASTPATH)))
  616. [(MAXIMUM MINIMUM)
  617. (LIST (QUOTE LIST)
  618. (COPY LASTPATH)
  619. (LIST (QUOTE WINNER)
  620. (CADR SET:TYPE]
  621. (AVERAGE (QUOTE REAL))
  622. (TOTAL (CADR LASTPATH])
  623. (GEVMATCH
  624. [GLAMBDA (STR VAL FLG)
  625. % edited: " 8-OCT-82 10:43"
  626. (RESULT (LISTOF GSEITEM))
  627. % Match a structure description, STR, and a value VAL
  628. % which matches that description, to form a structure
  629. % editor tree structure.
  630. (PROG (RESULT)
  631. (GEVMATCHB STR VAL NIL FLG)
  632. (RETURN (DREVERSE RESULT])
  633. (GEVMATCHA
  634. [GLAMBDA (STR VAL FLG)
  635. % edited: " 8-OCT-82 10:01"
  636. % Make a single item which matches structure STR and value VAL.
  637. (PROG (RES)
  638. (RES_(GEVMATCH STR VAL FLG))
  639. (IF ~(CDR RES)
  640. THEN (RETURN (CAR RES))
  641. ELSE (RETURN (A GSEITEM WITH VALUE = VAL TYPE = STR
  642. SUBVALUES = RES NODETYPE
  643. =(QUOTE SUBTREE])
  644. (GEVMATCHATOM
  645. [GLAMBDA (STR VAL NAME)
  646. % edited: " 7-OCT-82 16:38"
  647. % Match an ATOM structure to a given value.
  648. (PROG (L STRB TMP)
  649. (IF VAL IS NOT ATOMIC OR VAL IS NULL
  650. THEN (RETURN))
  651. (STRB_(CADR STR))
  652. (IF (CAR STRB)
  653. ~='PROPLIST
  654. THEN (RETURN))
  655. (L_(CDR STRB))
  656. (FOR X IN L DO (IF TMP_(GETPROP VAL (CAR X))
  657. THEN (GEVMATCHB X TMP NIL NIL])
  658. (GEVMATCHALIST
  659. [GLAMBDA (STR VAL NAME)
  660. % edited: " 7-OCT-82 16:57"
  661. % Match an ALIST structure to a given value.
  662. (PROG (L TMP)
  663. (L_(CDR STR))
  664. (FOR X IN L DO (IF TMP_(ASSOC (CAR X)
  665. VAL)
  666. THEN (GEVMATCHB X (CDR TMP)
  667. NIL NIL])
  668. (GEVMATCHB
  669. [GLAMBDA (STR:(LISTOF ANYTHING)
  670. VAL NAME:ATOM FLG:BOOLEAN)
  671. % edited: "22-DEC-82 15:26"
  672. % Match a structure description, STR, and a value VAL which matches
  673. % that description, to form a structure editor
  674. % tree structure. If FLG is set, the match will descend inside an atomic
  675. % type name. Results are added to the free variable RESULT.
  676. (GLOBAL RESULT)
  677. (PROG (X Y STRB XSTR TOP TMP)
  678. (XSTR_(GEVXTRTYPE STR))
  679. (IF STR IS ATOMIC
  680. THEN (IF FLG AND [STRB _(CAR (GETPROP STR (QUOTE GLSTRUCTURE]
  681. THEN (RESULT +_(A GSEITEM WITH NAME = NAME
  682. VALUE = VAL SUBVALUES =(
  683. GEVMATCH STRB VAL NIL)
  684. TYPE = STR
  685. NODETYPE =(QUOTE STRUCTURE)))
  686. ELSE (RESULT +_(A GSEITEM WITH NAME = NAME VALUE = VAL
  687. TYPE = STR)))
  688. (RETURN)
  689. ELSE (CASE (CAR STR)
  690. OF
  691. (CONS (GEVMATCHB (CADR STR)
  692. (CAR VAL)
  693. NIL NIL)
  694. (GEVMATCHB (CADDR STR)
  695. (CDR VAL)
  696. NIL NIL))
  697. [LIST (FOR X IN (CDR STR) DO
  698. (IF VAL (GEVMATCHB X (CAR VAL)
  699. NIL NIL)
  700. (VAL_(CDR VAL]
  701. (ATOM (GEVMATCHATOM STR VAL NAME))
  702. (ALIST (GEVMATCHALIST STR VAL NAME))
  703. (PROPLIST (GEVMATCHPROPLIST STR VAL NAME))
  704. (LISTOF (GEVMATCHLISTOF STR VAL NAME))
  705. (RECORD (GEVMATCHRECORD STR VAL NAME))
  706. ((OBJECT ATOMOBJECT LISTOBJECT)
  707. (GEVMATCHOBJECT STR VAL NAME))
  708. ELSE
  709. (IF NAME
  710. THEN (TMP _(GEVMATCH STR VAL NIL))
  711. (TOP_(CAR TMP))
  712. [RESULT +_(IF ~(CDR TMP) AND ~TOP:NAME
  713. THEN (TOP:NAME_NAME)
  714. TOP
  715. ELSE (A GSEITEM WITH NAME = NAME
  716. VALUE = VAL
  717. SUBVALUES = TMP
  718. TYPE = XSTR NODETYPE =(
  719. QUOTE SUBTREE]
  720. ELSEIF (STRB _(GEVXTRTYPE (CADR STR))) IS ATOMIC
  721. THEN (GEVMATCHB STRB VAL (CAR STR)
  722. NIL)
  723. ELSEIF (TMP_(GEVMATCH (CADR STR)
  724. VAL NIL))
  725. THEN (TOP_(CAR TMP))
  726. [RESULT +_(IF ~(CDR TMP) AND ~TOP:NAME
  727. THEN (TOP:NAME_(CAR STR))
  728. TOP
  729. ELSE (A GSEITEM WITH NAME =(CAR STR)
  730. VALUE = VAL
  731. SUBVALUES = TMP TYPE =(
  732. CADR STR)
  733. NODETYPE =(QUOTE SUBTREE]
  734. ELSE (PRINT "GEVMATCHB Failed"])
  735. (GEVMATCHLISTOF
  736. (GLAMBDA (STR VAL NAME)
  737. % edited: " 8-OCT-82 10:15"
  738. % Match a LISTOF structure.
  739. (GLOBAL RESULT)
  740. (RESULT+_(A GSEITEM WITH NAME = NAME VALUE = VAL TYPE = STR))))
  741. (GEVMATCHOBJECT
  742. [GLAMBDA (STR VAL NAME)
  743. % edited: "22-DEC-82 10:04"
  744. % Match the OBJECT structures.
  745. (GLOBAL RESULT)
  746. (PROG ((OBJECTTYPE (CAR STR))
  747. TMP)
  748. (RESULT _+(A GSEITEM WITH NAME =(QUOTE CLASS)
  749. VALUE =[CASE OBJECTTYPE OF ((OBJECT LISTOBJECT)
  750. (TMP-_VAL))
  751. (ATOMOBJECT (GETPROP VAL (QUOTE CLASS]
  752. TYPE =(QUOTE GLTYPE)))
  753. (FOR X IN (CDR STR) DO (CASE OBJECTTYPE OF ((OBJECT LISTOBJECT)
  754. (IF VAL (GEVMATCHB X (TMP-_VAL)
  755. NIL NIL)))
  756. (ATOMOBJECT (IF TMP_(GETPROP VAL (CAR X))
  757. THEN (GEVMATCHB X TMP NIL NIL])
  758. (GEVMATCHPROPLIST
  759. [GLAMBDA (STR VAL NAME)
  760. % edited: "24-NOV-82 16:31"
  761. % Match an PROPLIST structure to a given value.
  762. (PROG (L TMP)
  763. (L_(CDR STR))
  764. (FOR X IN L DO (IF TMP_(LISTGET VAL (CAR X))
  765. THEN (GEVMATCHB X TMP NIL NIL])
  766. (GEVMATCHRECORD
  767. [GLAMBDA (STR VAL NAME)
  768. % edited: "21-DEC-82 17:32"
  769. % Match a RECORD structure.
  770. (PROG (STRNAME FIELDS)
  771. (IF (CADR STR) IS ATOMIC
  772. THEN STRNAME_(CADR STR)
  773. FIELDS_(CDDR STR)
  774. ELSE FIELDS_(CDR STR))
  775. (FOR X IN FIELDS DO (GEVMATCHB X (RECORDACCESS (CAR X)
  776. VAL NIL NIL STRNAME)
  777. NIL NIL])
  778. (GEVMOUSELOOP
  779. (GLAMBDA NIL
  780. % edited: "27-SEP-82 16:24"
  781. % Wait in a loop for mouse actions within the edit
  782. window.
  783. (PROG NIL)))
  784. (GEVMOVEWINDOWFN
  785. [LAMBDA (W NEWPOS)
  786. % edited: " 5-OCT-82 11:36"
  787. (PROG NIL
  788. (MOVEW GEVMENUWINDOW (CONS (CAR NEWPOS)
  789. (IDIFFERENCE (CDR NEWPOS)
  790. GEVMENUWINDOWHEIGHT])
  791. (GEVPOP
  792. (GLAMBDA (FLG:BOOLEAN N:INTEGER)
  793. % GSN "21-JAN-83 13:50"
  794. % Pop up from the current item to the previous one.
  795. % If FLG is set, popping continues through extended LISTOF
  796. % elements.
  797. (PROG (TMP TOP:GSEITEM TMPITEM)
  798. (IF N<1 (RETURN))
  799. LP (TMP-_GEVEDITCHAIN)
  800. (IF ~GEVEDITCHAIN
  801. THEN (RETURN (GEVQUIT)))
  802. (TOP_(CAAAR GEVEDITCHAIN))
  803. % Test for repeated LISTOF elements.
  804. (TMPITEM_(CAR TMP:PREVS))
  805. (IF FLG AND TMPITEM:NODETYPE='FORWARD
  806. THEN (GO LP))
  807. (IF (N_-1)
  808. >0
  809. THEN (GO LP))
  810. (IF TOP:TYPE IS A LIST AND (CAR TOP:TYPE)='LISTOF AND ~(CDR TOP:VALUE)
  811. THEN (GO LP))
  812. (IF GEVEDITFLG AND
  813. ~(MEMBER TMPITEM:SHORTVALUE (QUOTE ("(...)" "---")))
  814. THEN (GEVREFILLWINDOW)
  815. ELSE GEVEDITFLG_NIL
  816. (GEVFILLWINDOW))
  817. (GEVMOUSELOOP))))
  818. (GEVPOSTEST
  819. (GLAMBDA (POS,TPOS:VECTOR NAME ITEM:GSEITEM FLG N:INTEGER)
  820. % edited: "21-OCT-82 10:54"
  821. (RESULT MOUSESTATE)
  822. % Test whether TPOS contains the mouse position POS. The result is NIL
  823. % if not found, else a list of the sub-item
  824. % and a flag which is NIL if the NAME part is identified, T if the
  825. % VALUE part is identified.
  826. (IF POS:Y>=TPOS:Y AND POS:Y<=TPOS:Y+12 AND POS:X>=TPOS:X AND
  827. POS:X<TPOS:X+100
  828. THEN (A MOUSESTATE WITH AREA =
  829. (AN AREA WITH START =(A VECTOR WITH X = TPOS:X Y =
  830. TPOS:Y - 1)
  831. SIZE =(A VECTOR WITH X = GEVCHARWIDTH*(NCHARS
  832. NAME)
  833. Y = 12))
  834. ITEM = ITEM FLAG = FLG GROUP = N))))
  835. (GEVPPS
  836. [GLAMBDA (ITEM:GSEITEM COL:INTEGER WINDOW:WINDOW)
  837. % GSN "21-JAN-83 10:25"
  838. (GLOBAL Y:INTEGER)
  839. % Pretty-print a structure defined by ITEM in the window WINDOW, beginning
  840. % at horizontal column COL and vertical
  841. % position Y. The positions in ITEM are modified to match the positions in
  842. % the window.
  843. (PROG (NAMEX VALX TOP)
  844. % Make sure there is room in window.
  845. (IF Y<0
  846. THEN (RETURN))
  847. % Position in window for slot name.
  848. (NAMEX_COL*GEVCHARWIDTH)
  849. (ITEM:NAMEPOS:X_NAMEX)
  850. (ITEM:NAMEPOS:Y_Y)
  851. (MOVETO NAMEX Y WINDOW)
  852. (IF ITEM:NODETYPE='FULLVALUE
  853. THEN (PRIN1 "(expanded)" WINDOW)
  854. ELSEIF ITEM:NAME
  855. THEN (IF ITEM:NAME IS NUMERIC
  856. THEN (PRIN1 "#" WINDOW))
  857. (PRIN1 (GEVLENGTHBOUND ITEM:NAME 11)
  858. WINDOW))
  859. % See if there is a value to print for this name.
  860. (IF ~ITEM:NODETYPE OR (MEMB ITEM:NODETYPE
  861. (QUOTE (FORWARD BACKUP PROP ADJ MSG ISA)))
  862. THEN (VALX_NAMEX+100)
  863. (ITEM:VALUEPOS:X_VALX)
  864. (ITEM:VALUEPOS:Y_Y)
  865. (MOVETO VALX Y WINDOW)
  866. (PRIN1 [ITEM:SHORTVALUE OR
  867. (ITEM:SHORTVALUE _(GEVSHORTVALUE ITEM:VALUE
  868. ITEM:TYPE
  869. (GEVSHORTCHARS
  870. - COL]
  871. WINDOW)
  872. (IF ~(EQ ITEM:SHORTVALUE ITEM:VALUE)
  873. THEN (MOVETO (VALX - 20)
  874. Y WINDOW)
  875. (PRIN1 "~" WINDOW))
  876. (Y_-12)
  877. ELSEIF ITEM:NODETYPE='FULLVALUE
  878. THEN (Y_-12)
  879. (MOVETO 0 Y WINDOW)
  880. (RESETLST (RESETSAVE SYSPRETTYFLG T)
  881. (SHOWPRINT ITEM:VALUE WINDOW))
  882. (Y_WINDOW:YPOSITION
  883. - 12)
  884. ELSEIF ITEM:NODETYPE='DISPLAY
  885. THEN (GEVEXPROP ITEM:VALUE ITEM:TYPE (QUOTE GEVDISPLAY)
  886. (QUOTE MSG)
  887. (LIST WINDOW Y))
  888. ELSE
  889. % This is a subtree
  890. Y_-12
  891. (FOR VSUB IN ITEM:SUBVALUES DO (GEVPPS VSUB COL+2 WINDOW])
  892. (GEVPROGRAM
  893. (GLAMBDA NIL
  894. % GSN "21-JAN-83 10:56"
  895. % Write an interactive program involving the current
  896. item.
  897. (PROG (TOPITEM COMMAND SET PATH DONE NEXT TYPE NEWFN RESULT LAST ABORTFLG)
  898. (TOPITEM_GEVEDITCHAIN:TOPITEM)
  899. (IF [COMMAND_(MENU (create MENU
  900. ITEMS _(QUOTE (Quit COLLECT TOTAL AVERAGE MAXIMUM MINIMUM]
  901. ='Quit
  902. OR ~ COMMAND
  903. THEN (RETURN))
  904. (IF (SET_(GEVPROPMENU TOPITEM:TYPE (QUOTE LIST)
  905. NIL))='Quit OR SET='Pop OR ~SET
  906. THEN (RETURN))
  907. (PATH_(LIST SET (LIST TOPITEM:NAME TOPITEM:TYPE)))
  908. (NEXT_SET)
  909. (TYPE_(CADADR SET))
  910. (WHILE ~DONE AND ~ABORTFLG
  911. DO (NEXT_(GEVPROPMENU TYPE (COMMAND~='COLLECT AND (QUOTE NUMBER))
  912. COMMAND='COLLECT))
  913. [CASE NEXT OF ((NIL Quit)
  914. (ABORTFLG_T))
  915. [Pop (IF ~(CDDR PATH)
  916. THEN (ABORTFLG_T)
  917. ELSE (NEXT-_PATH)
  918. (NEXT_(CAR PATH))
  919. (TYPE_(CADR NEXT))
  920. (IF TYPE IS A LIST
  921. THEN TYPE_(CADR TYPE))
  922. (LAST_(CAR NEXT]
  923. (Done (DONE_T))
  924. ELSE
  925. (PROGN (PATH+_NEXT)
  926. (TYPE_(CADR NEXT))
  927. (LAST_(CAR NEXT]
  928. (IF (MEMB TYPE (QUOTE (ATOM INTEGER STRING REAL BOOLEAN NIL)))
  929. DONE_T))
  930. (IF ABORTFLG (RETURN))
  931. (PATH_(DREVERSE PATH))
  932. (NEWFN_(GEVMAKENEWFN COMMAND TOPITEM:TYPE SET (CDDR PATH)))
  933. (PUTD (QUOTE GEVNEWFN)
  934. (CAR NEWFN))
  935. (RESULT_(GEVNEWFN TOPITEM:VALUE))
  936. % Print result as well as displaying it.
  937. (PRIN1 COMMAND)
  938. (SPACES 1)
  939. (FOR X IN (CDDR PATH) DO (PRIN1 (CAR X))
  940. (SPACES 1))
  941. (PRIN1 "OF ")
  942. (PRIN1 (CAAR PATH))
  943. (SPACES 1)
  944. (PRIN1 (CAADR PATH))
  945. (PRIN1 " = ")
  946. (PRINT RESULT)
  947. (GEVEDITCHAIN:TOPFRAME:PROPS_+(A GSEITEM WITH NAME
  948. =(CONCAT COMMAND " " LAST)
  949. TYPE =(CADR NEWFN)
  950. VALUE = RESULT NODETYPE =(QUOTE MSG)))
  951. (GEVDISPLAYNEWPROP))))
  952. (GEVPROPMENU
  953. [GLAMBDA (OBJ:GLTYPE FILTER:ATOM FLG:BOOLEAN)
  954. % GSN "21-JAN-83 10:32"
  955. % Make a menu to get properties of object OBJ with filter FILTER. FLG
  956. % is T if it is okay to stop before reaching a basic type.
  957. (PROG (PROPS SEL PNAMES MENU)
  958. (PROPS_(GEVGETNAMES OBJ FILTER))
  959. (IF ~PROPS
  960. THEN (RETURN)
  961. ELSE (PNAMES_(MAPCAR PROPS (FUNCTION CAR)))
  962. (SEL_(SEND [A MENU WITH ITEMS =(CONS (QUOTE Quit)
  963. (CONS (QUOTE Pop)
  964. (IF FLG
  965. THEN (CONS (QUOTE Done)
  966. PNAMES)
  967. ELSE PNAMES]
  968. SELECT))
  969. (RETURN (CASE SEL OF ((Quit Pop Done NIL)
  970. SEL)
  971. ELSE
  972. (ASSOC SEL PROPS])
  973. (GEVPROPNAMES
  974. (GLAMBDA (OBJ:GLTYPE PROPTYPE:ATOM FILTER:ATOM)
  975. % edited: "22-DEC-82 14:52"
  976. % Get all property names and types of properties of
  977. % type PROPTYPE for OBJ when they satisfy FILTER.
  978. (PROG (RESULT TYPE)
  979. (RESULT _(FOR P IN (CASE PROPTYPE OF (PROP OBJ:PROPS)
  980. (ADJ OBJ:ADJS)
  981. (ISA OBJ:ISAS)
  982. (MSG OBJ:MSGS))
  983. WHEN (TYPE_(GEVPROPTYPE! OBJ P:NAME (QUOTE PROP)))
  984. AND (GEVFILTER TYPE FILTER)
  985. COLLECT (LIST P:NAME TYPE)))
  986. [FOR S IN OBJ:SUPERS DO
  987. (RESULT _(NCONC RESULT (GEVPROPNAMES S PROPTYPE FILTER]
  988. (RETURN RESULT))))
  989. (GEVPROPTYPE
  990. [GLAMBDA (STR,PROPNAME,PROPTYPE:ATOM)
  991. % edited: "22-DEC-82 13:56"
  992. % Find the type of a computed property.
  993. (PROG (PL SUBPL PROPENT TMP)
  994. (IF STR IS NOT ATOMIC
  995. THEN (RETURN)
  996. ELSEIF (PROPENT_(GEVGETPROP STR PROPNAME PROPTYPE))
  997. AND (TMP_(LISTGET (CDDR PROPENT)
  998. (QUOTE RESULT)))
  999. THEN (RETURN TMP)
  1000. ELSEIF PROPENT AND (CADR PROPENT) IS ATOMIC AND
  1001. (TMP_(GETPROP (CADR PROPENT)
  1002. (QUOTE GLRESULTTYPE))
  1003. )
  1004. THEN (RETURN TMP)
  1005. ELSEIF (AND (PL_(GETPROP STR (QUOTE GLPROPFNS)))
  1006. (SUBPL_(ASSOC PROPTYPE PL))
  1007. (PROPENT_(ASSOC PROPNAME (CDR SUBPL)))
  1008. (TMP_(CADDR PROPENT)))
  1009. THEN (RETURN TMP)
  1010. ELSEIF PROPTYPE='ADJ
  1011. THEN (RETURN (QUOTE BOOLEAN])
  1012. (GEVPROPTYPE!
  1013. [LAMBDA (OBJ NAME TYPE)
  1014. % edited: " 4-NOV-82 15:39"
  1015. (OR (GEVPROPTYPE OBJ NAME TYPE)
  1016. (AND (GEVCOMPPROP OBJ NAME TYPE)
  1017. (GEVPROPTYPE OBJ NAME TYPE])
  1018. (GEVPUSH
  1019. (GLAMBDA (ITEM:GSEITEM)
  1020. % GSN "24-JAN-83 14:14"
  1021. % Push down to look at an item referenced from the current item.
  1022. (PROG (NEWITEMS TOPITEM LSTITEM:GSEITEM)
  1023. (IF ITEM:NODETYPE='BACKUP
  1024. THEN (GEVPOP NIL 1)
  1025. (RETURN))
  1026. (TOPITEM_GEVEDITCHAIN:TOPITEM)
  1027. (IF ITEM:NODETYPE='FORWARD
  1028. THEN (NEWITEMS_(GEVPUSHLISTOF ITEM T))
  1029. ELSEIF ITEM:TYPE IS ATOMIC AND
  1030. ~(GETPROP ITEM:TYPE (QUOTE GLSTRUCTURE))
  1031. THEN (CASE ITEM:TYPE OF
  1032. [(ATOM NUMBER REAL INTEGER STRING ANYTHING)
  1033. (IF ITEM:VALUE=ITEM:SHORTVALUE
  1034. THEN (RETURN)
  1035. ELSE (NEWITEMS_(LIST (A GSEITEM WITH
  1036. NAME = ITEM:NAME VALUE =
  1037. ITEM:VALUE SHORTVALUE = ITEM:SHORTVALUE
  1038. TYPE = ITEM:TYPE NODETYPE =(QUOTE
  1039. FULLVALUE]
  1040. ELSE
  1041. (RETURN))
  1042. ELSEIF ITEM:TYPE IS A LIST AND (CAR ITEM:TYPE)='LISTOF
  1043. THEN (NEWITEMS_(GEVPUSHLISTOF ITEM NIL)))
  1044. (GEVEDITCHAIN+_(AN EDITFRAME WITH
  1045. PREVS =(CONS ITEM GEVEDITCHAIN:TOPFRAME:PREVS)
  1046. SUBITEMS = NEWITEMS))
  1047. % Do another PUSH automatically for a list of only one item.
  1048. (GEVREFILLWINDOW)
  1049. (IF ITEM:TYPE IS A LIST AND (CAR ITEM:TYPE)='LISTOF AND
  1050. ~(CDR ITEM:VALUE)
  1051. THEN (LSTITEM_(CAADAR GEVEDITCHAIN))
  1052. (GEVPUSH (CAR LSTITEM:SUBVALUES))
  1053. (RETURN))
  1054. (GEVMOUSELOOP))))
  1055. (GEVPUSHLISTOF
  1056. [GLAMBDA (ITEM:GSEITEM FLG:BOOLEAN)
  1057. % edited: "16-OCT-82 15:15"
  1058. % Push into a datum of type LISTOF, expanding it into the individual elements. If FLG is set, ITEM is a FORWARD
  1059. item to be continued.
  1060. (PROG (ITEMTYPE TOPFRAME N:INTEGER NROOM LST VALS:(LISTOF ANYTHING)
  1061. TMP)
  1062. % Compute the vertical room available in the window.
  1063. (IF ~ITEM:VALUE (RETURN))
  1064. (TOPFRAME_GEVEDITCHAIN:TOPFRAME)
  1065. (NROOM _(GEVWINDOW:HEIGHT - 50)/12 -(LENGTH TOPFRAME:PREVS))
  1066. % If there was a previous display of this list, insert
  1067. an ellipsis header.
  1068. (IF FLG
  1069. THEN (LST+_(A GSEITEM WITH SHORTVALUE = "(..." NODETYPE =(QUOTE BACKUP)))
  1070. (N_ITEM:NAME)
  1071. (ITEMTYPE_ITEM:TYPE)
  1072. (NROOM_-1)
  1073. (VALS_ITEM:SUBVALUES)
  1074. ELSE (N_1)
  1075. (ITEMTYPE_(CADR ITEM:TYPE))
  1076. (VALS_ITEM:VALUE))
  1077. % Now make entries for each value on the list.
  1078. (WHILE VALS AND (NROOM>1 OR (NROOM=1 AND ~(CDR VALS)))
  1079. DO (LST+_(A GSEITEM WITH VALUE =(TMP-_VALS)
  1080. , TYPE = ITEMTYPE NAME = N))
  1081. (NROOM_-1)
  1082. (N_+1))
  1083. (IF VALS
  1084. THEN (LST+_(A GSEITEM WITH SHORTVALUE = "...)" NODETYPE =(QUOTE FORWARD)
  1085. TYPE = ITEMTYPE NAME = N SUBVALUES = VALS)))
  1086. (RETURN (LIST (A GSEITEM WITH NAME = "expanded" TYPE = ITEMTYPE NODETYPE =(QUOTE
  1087. LISTOF)
  1088. SUBVALUES =(DREVERSE LST])
  1089. (GEVQUIT
  1090. (GLAMBDA NIL
  1091. % edited: "13-OCT-82 10:55"
  1092. (SETQ GEVACTIVEFLG NIL)
  1093. (_ GEVWINDOW CLOSE)
  1094. (_ GEVMENUWINDOW CLOSE)))
  1095. (GEVREDOPROPS
  1096. [GLAMBDA (TOP:EDITFRAME)
  1097. % edited: "19-OCT-82 10:23"
  1098. % Recompute property values for the item.
  1099. (PROG (ITEM L)
  1100. (ITEM_(CAR TOP:PREVS))
  1101. (IF ~TOP:PROPS AND (L_(GEVEXPROP ITEM:VALUE ITEM:TYPE (QUOTE DISPLAYPROPS)
  1102. (QUOTE PROP)
  1103. NIL))
  1104. ~='GEVERROR
  1105. THEN (IF L IS ATOMIC
  1106. THEN (GEVCOMMANDPROP ITEM (QUOTE PROP)
  1107. (QUOTE All))
  1108. ELSEIF L IS A LIST
  1109. THEN (FOR X IN L (GEVCOMMANDPROP ITEM (QUOTE PROP)
  1110. X)))
  1111. ELSE (FOR X IN TOP:PROPS WHEN X:NODETYPE~='MSG
  1112. DO (X:VALUE _(GEVEXPROP ITEM:VALUE ITEM:TYPE X:NAME X:NODETYPE NIL))
  1113. (X:SHORTVALUE _ NIL])
  1114. (GEVREFILLWINDOW
  1115. (GLAMBDA NIL
  1116. % edited: "14-OCT-82 12:46"
  1117. % Re-expand the top item of GEVEDITCHAIN, which may
  1118. have been changed due to editing.
  1119. (PROG (TOP TOPITEM SUBS TOPSUB)
  1120. (TOP_GEVEDITCHAIN:TOPFRAME)
  1121. (TOPITEM_GEVEDITCHAIN:TOPITEM)
  1122. (TOPSUB_(CAR TOP:SUBITEMS))
  1123. [IF ~TOPSUB OR (TOPSUB:NODETYPE~='FULLVALUE AND TOPSUB:NODETYPE~='LISTOF)
  1124. THEN (IF (GEVGETPROP TOPITEM:TYPE (QUOTE GEVDISPLAY)
  1125. (QUOTE MSG))
  1126. THEN [TOP:SUBITEMS_(LIST (A GSEITEM WITH VALUE = TOPITEM:VALUE TYPE =
  1127. TOPITEM:TYPE NODETYPE =(QUOTE DISPLAY]
  1128. ELSE (SUBS_(GEVMATCH TOPITEM:TYPE TOPITEM:VALUE T))
  1129. (TOPSUB_(CAR SUBS))
  1130. (TOP:SUBITEMS_(IF ~(CDR SUBS) AND TOPSUB:NODETYPE='STRUCTURE
  1131. AND TOPSUB:VALUE=TOPITEM:VALUE AND
  1132. TOPSUB:TYPE=TOPITEM:TYPE
  1133. THEN TOPSUB:SUBVALUES
  1134. ELSE SUBS]
  1135. (GEVREDOPROPS TOP)
  1136. (GEVFILLWINDOW))))
  1137. (GEVSHORTATOMVAL
  1138. [LAMBDA (ATM NCHARS)
  1139. % edited: " 8-OCT-82 15:41"
  1140. (COND
  1141. ((NUMBERP ATM)
  1142. (COND
  1143. ((IGREATERP (NCHARS ATM)
  1144. NCHARS)
  1145. (GEVSHORTSTRINGVAL (MKSTRING ATM)
  1146. NCHARS))
  1147. (T ATM)))
  1148. ((IGREATERP (NCHARS ATM)
  1149. NCHARS)
  1150. (CONCAT (SUBSTRING ATM 1 (SUB1 NCHARS))
  1151. "-"))
  1152. (T ATM])
  1153. (GEVSHORTCONSVAL
  1154. [GLAMBDA (VAL STR NCHARS:INTEGER)
  1155. % edited: " 8-OCT-82 15:19"
  1156. % Compute a short value for printing a CONS of two
  1157. items.
  1158. (PROG (NLEFT RES TMP NC)
  1159. (RES +_ "(")
  1160. (NLEFT _ NCHARS - 5)
  1161. (TMP_(GEVSHORTVALUE (CAR VAL)
  1162. (CADR STR)
  1163. NLEFT - 3))
  1164. (NC_(NCHARS TMP))
  1165. (IF NC>NLEFT - 3
  1166. THEN TMP_ "---" NC_3)
  1167. (RES+_TMP)
  1168. (RES +_ " . ")
  1169. (NLEFT_-NC)
  1170. (TMP_(GEVSHORTVALUE (CDR VAL)
  1171. (CADDR STR)
  1172. NLEFT))
  1173. (NC_(NCHARS TMP))
  1174. (IF NC>NLEFT
  1175. THEN TMP_ "---" NC_3)
  1176. (RES+_TMP)
  1177. (RES+_ ")")
  1178. (RETURN (APPLY (FUNCTION CONCAT)
  1179. (DREVERSE RES])
  1180. (GEVSHORTLISTVAL
  1181. [GLAMBDA (VAL STR NCHARS:INTEGER)
  1182. % edited: " 6-NOV-82 15:01"
  1183. % Compute a short value for printing a list of items.
  1184. (PROG (NLEFT RES TMP QUIT NC NCI REST RSTR)
  1185. (RES +_ "(")
  1186. (REST_4)
  1187. (NLEFT _ NCHARS - 2)
  1188. (RSTR_(CDR STR))
  1189. [WHILE VAL AND ~QUIT AND (NCI_(IF (CDR VAL)
  1190. THEN NLEFT - REST
  1191. ELSE NLEFT))
  1192. >2
  1193. DO (TMP_(GEVSHORTVALUE (CAR VAL)
  1194. (IF (CAR STR)='LISTOF
  1195. THEN (CADR STR)
  1196. ELSEIF (CAR STR)='LIST
  1197. THEN (CAR RSTR))
  1198. NCI))
  1199. [QUIT _(MEMBER TMP (QUOTE (GEVERROR "(...)" "---" "???"]
  1200. (NC_(NCHARS TMP))
  1201. (IF NC>NCI AND (CDR RES)
  1202. THEN QUIT_T
  1203. ELSE (IF NC>NCI
  1204. THEN TMP_ "---" NC_3
  1205. QUIT_T)
  1206. (RES+_TMP)
  1207. (NLEFT_-NC)
  1208. (VAL_(CDR VAL))
  1209. (RSTR_(CDR RSTR))
  1210. (IF VAL
  1211. THEN (RES+_ " ")
  1212. (NLEFT_-1]
  1213. (IF VAL
  1214. THEN (RES+_ "..."))
  1215. (RES+_ ")")
  1216. (RETURN (APPLY (FUNCTION CONCAT)
  1217. (DREVERSE RES])
  1218. (GEVSHORTSTRINGVAL
  1219. [LAMBDA (VAL NCHARS)
  1220. % edited: "12-OCT-82 12:14"
  1221. % Compute the short value of a string VAL.
  1222. The result is a string which can be printed within
  1223. NCHARS.
  1224. (COND
  1225. ((STRINGP VAL)
  1226. (GEVLENGTHBOUND VAL NCHARS))
  1227. (T "???"])
  1228. (GEVSHORTVALUE
  1229. [LAMBDA (VAL STR NCHARS)
  1230. % edited: " 6-NOV-82 14:37"
  1231. % Compute the short value of a given value VAL whose type is STR. The result is an atom, string, or list
  1232. structure which can be printed within NCHARS.
  1233. (PROG (TMP)
  1234. (SETQ STR (GEVXTRTYPE STR))
  1235. (RETURN (COND
  1236. ([AND (ATOM STR)
  1237. (FMEMB STR (QUOTE (ATOM INTEGER REAL]
  1238. (GEVSHORTATOMVAL VAL NCHARS))
  1239. ((EQ STR (QUOTE STRING))
  1240. (GEVSHORTSTRINGVAL VAL NCHARS))
  1241. ((AND (ATOM STR)
  1242. (NEQ (SETQ TMP (GEVEXPROP VAL STR (QUOTE SHORTVALUE)
  1243. (QUOTE PROP)
  1244. NIL))
  1245. (QUOTE GEVERROR)))
  1246. (GEVLENGTHBOUND TMP NCHARS))
  1247. ((OR (ATOM VAL)
  1248. (NUMBERP VAL))
  1249. (GEVSHORTATOMVAL VAL NCHARS))
  1250. ((STRINGP VAL)
  1251. (GEVSHORTSTRINGVAL VAL NCHARS))
  1252. ((LISTP STR)
  1253. (SELECTQ (CAR STR)
  1254. ((LISTOF LIST)
  1255. (COND
  1256. ((LISTP VAL)
  1257. (GEVSHORTLISTVAL VAL STR NCHARS))
  1258. (T "???")))
  1259. (CONS (COND
  1260. ((LISTP VAL)
  1261. (GEVSHORTCONSVAL VAL STR NCHARS))
  1262. (T "???")))
  1263. "---"))
  1264. ((LISTP VAL)
  1265. (GEVSHORTLISTVAL VAL STR NCHARS))
  1266. (T "---"])
  1267. (GEVXTRTYPE
  1268. [LAMBDA (TYPE)
  1269. % edited: "21-OCT-82 11:17"
  1270. % Extract an atomic type name from a type spec which
  1271. may be either <type> or (A <type>.)
  1272. (COND
  1273. ((ATOM TYPE)
  1274. TYPE)
  1275. ((NLISTP TYPE)
  1276. NIL)
  1277. ((AND (FMEMB (CAR TYPE)
  1278. (QUOTE (A AN a an An TRANSPARENT)))
  1279. (CDR TYPE)
  1280. (ATOM (CADR TYPE)))
  1281. (CADR TYPE))
  1282. ((MEMB (CAR TYPE)
  1283. GEVTYPENAMES)
  1284. TYPE)
  1285. ((AND (BOUNDP GLUSERSTRNAMES)
  1286. (ASSOC (CAR TYPE)
  1287. GLUSERSTRNAMES))
  1288. TYPE)
  1289. ((AND (ATOM (CAR TYPE))
  1290. (CDR TYPE))
  1291. (GEVXTRTYPE (CADR TYPE)))
  1292. (T (ERROR (QUOTE GEVXTRTYPE)
  1293. (LIST TYPE "is an illegal type specification."))
  1294. NIL])
  1295. (PICTURE-GEVDISPLAY
  1296. (GLAMBDA (PICTURE,WINDOW:WINDOW YMAX)
  1297. % edited: "14-OCT-82 14:12"
  1298. % Display PICTURE in (GLOBAL Y:INTEGER WINDOW within
  1299. YMAX.)
  1300. (PROG (PWD PHT NEWX NEWY)
  1301. (PHT_(MIN (YMAX - 20)
  1302. PICTURE:HEIGHT))
  1303. (PWD _(MIN (WINDOW:WIDTH - 20)
  1304. PICTURE:WIDTH))
  1305. (NEWX _(WINDOW:WIDTH - PWD)/2)
  1306. (NEWY _ YMAX - PHT - 10)
  1307. (MOVEW PICTURE (CONS 0 0))
  1308. % Also copy the picture onto the current window.
  1309. (BITBLT PICTURE 1 1 WINDOW NEWX NEWY PWD PHT (QUOTE INPUT)
  1310. (QUOTE REPLACE)
  1311. NIL NIL)
  1312. (MOVEW PICTURE (CONS (WINDOW:LEFT+NEWX)
  1313. (WINDOW:BOTTOM+NEWY)))
  1314. (Y _ NEWY - 12))))
  1315. (VECTOR-SHORTVALUE
  1316. (GLAMBDA (V:VECTOR)
  1317. % edited: " 7-OCT-82 12:58"
  1318. (CONCAT "(" (MKSTRING V:X)
  1319. ","
  1320. (MKSTRING V:Y)
  1321. ")")))
  1322. )
  1323. (RPAQQ GEVTYPENAMES (CONS LIST RECORD LISTOF ALIST ATOM OBJECT LISTOBJECT ATOMOBJECT))