1
0
mirror of https://github.com/PDP-10/its.git synced 2026-03-21 08:48:51 +00:00
Files
PDP-10.its/src/librm3/mghelp.urs000
Lars Brinkhoff f530e7f5fe MIGS - Muddle interactive graphics system.
Files courtesy of Rich Shiffman.
2021-02-09 20:44:08 +01:00

441 lines
18 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<PACKAGE "MGHELP">
<ENTRY INFOT HLIST HELP1>
<SET HLIST '(("GEN";"GENERAL DISCRIPTION OF MUDDLE GRAPHICS"
<1 .INFOT>)
("MUDDLE";"SHORT AND INCOMPLETE DESCRIPTION OF MUDDLE"
<2 .INFOT>)
("ALL";"PRINTS THE WHOLE WORLD" <3 .INFOT>)
("TERMINAL";"USEFULL FACTS ABOUT SCOPES" <4 .INFOT>)
("CIRCLE" <5 .INFOT>)
("DISPLAY";"HOW TO USE THE DISPLAY COMPILER" <25 .INFOT>)
("DRAW" <6 .INFOT>)
("DSKIMAGE" <7 .INFOT>)
("ELIPSE" <8 .INFOT>)
("FNCTG" <9 .INFOT>)
("LINE" <10 .INFOT>)
("M3D" <11 .INFOT>)
("M3DSK" <12 .INFOT>)
("MIJPL" <13 .INFOT>)
("MINIMAX" <14 .INFOT>)
("MOVE" <15 .INFOT>)
("MTRIANGLE" <16 .INFOT>)
("PAGE" <17 .INFOT>)
("PARAG" <26 .INFOT>)
("PLOTV" <18 .INFOT>)
("PLOTVDSK" <19 .INFOT>)
("POINT" <20 .INFOT>)
("SEND" <21 .INFOT>)
("SFXYP" <22 .INFOT>)
("TRANS" <23 .INFOT>)
("ORG" <24 .INFOT>) )>
<DEFINE HELP1 (HLIST INFOT)
<PRINT "TYPE HELP$ (WHERE '$' IS THE ESC KEY ON THE TTY) FOR
A LIST OF THINGS THAT HELP IS AVAILALBE FOR, OR <-FUNCTION->$ (THE
NAME OF A FUNCTION), OR RETURN$ TO LEAVE HELP.">
<TERPRI>
<TERPRI>
<REPEAT (A B)
<TERPRI>
<PRINC "?">
<SET A <PNAME <READ>>>
<SET B <1 .A>>
<COND (<==? .B !"H>
<PRINT "HELP IS AVAILABLE FOR THE FOLLOWING">
<TERPRI>
<MAPF <>
#FUNCTION((X)
<TERPRI>
<PRINC <STRING <1 .X>
" "
<GET <REST .X 0>
COMMENT
" ">>>)
.HLIST> <AGAIN>)
(<==? .B !"R> <RETURN .B>)>
<TERPRI>
<SET B <SCAN .A .HLIST>>
<COND (<NOT .B> <PRINC "INVALID ENTRY">)
(<0? .B> <TERPRI><PRINC .INFO>)
(<L? .B 0> <PRINC "NO INFO YET">)
(ELSE
<TERPRI>
<PRINC <.B .INFO>> )
(ELSE <PRINC "INVALID ENTRY">)> >>
<DEFINE SCAN (KEY HLIST
"AUX" (B #FALSE())
"ACT" A1)
<COND (<NOT .B>
<MAPF <>
#FUNCTION ((X)
<COND (<=? .KEY <1 .X>>
<SET B <EVAL <2 .X>>>
<AGAIN .A1>)>)
.HLIST>)>
.B>
<SET INFO '("
SFXYP 5-9 THIS WILL PRODUCE A SURFACE PLOT
WITH HIDDEN LINE ELIM. NOTE IT IS
SLOW.
<SFXYP XL XH YL YH FUNCT PRAM
RES DSK FILE>
XL,XH ARE THE LOW AND HIGH LIMITS
ON X
YL,YH ARE THE LOW AND HIGH LIMITS
ON Y
FUNCT IS THE NAME OF THE FUNCTION
TO BE PLOTTED.
PRAM IS A LIST OF OPTIONAL ARGS
FOR THE FUNCTION
RES IS THE # OF POINTS PER LINE.
SO THE PLOT WILL CONTAIN A
TOTAL OF .RES * .RES POINTS
THE DEFAULT IS 60,USE AS FEW
POINTS AS POSSIBLE BECAUSE
RUN TIME GOES UP VERY FAST
WITH THE # OF POINTS.
DSK IF THIS ISNT #FALSE() THE
OUTPUT GOES TO A DSK FILE.
FILE IS THE NAME OF THE DSK FILE
IT IS A LIST OF THE FORM
(''F1'' ''F2'' ''DSK'' ''DIR'')
THE DEFAULT IS M3D OUTPUT.
ALL ARGS AFTER THE NAME OF THE
FUNCTION ARE OPTIONAL AND THE
ROUTINE DEFAULTS ITS OUTPUT TO THE
4010 SCOPE YOU ARE USING.
"
"
M3D 1 THIS FUNCTION TAKES AN N BY N
MATRIX AND DOES THE SURFACE PLOT
AND HIDDEN LINE ELIM. THE VALUES
OF THE ELEMENTS SHOULD BE FROM
0 TO 400 AND INTEGERS.
EXAMPLE
<SET A ILIST 20 <ILIST 20
<* 200 <+ 1 <SIN .Y>>>>>
<M3D .A>$
"
"
M3DSK 1-2 THIS IS THE SAME AS M3D, BUT THE
OUTPUT GOES TO A FILE. THE
SECOND ARG IS OPTIONAL AND THE
DEFAULT FILE IS M3D OUTPUT.
<M3DSK .A (''F1'' ''F2'' ''DSK'' ''DIR'')
"
"
DSKIMAGE 0-4 THIS FUNCTION WILL DISPLAY
THE OUTPUT GENERATED BY M3DSK
OR ANY FILE FOR THAT MATTER.
THE DEFAULT IS M3D OUTPUT.
<DSKIMAGE ''F1'' ''F2'' ''DSK'' ''DIR''>
"
"
CIRCLE 4 This draws a circle with
center x,y and radius r
and p pionts in it
<CIRCLE .X .Y .R .P>.
"
"
DRAW 2 This draws from where the
beam is to the coordinents
given to DRAW. MOVE must be
called befroe the first DRAW
because it sets the scope in
in graphics mode. the co-
ordinents should be in the
range of 0 -> 1024
<DRAW .x .y>
"
"
ELIPSE 5 THIS WILL DRAW AN ELIPSE
WITH IT CENTER AT X,Y AND
SEMI-AXISES A AND B, WITH
P PIONTS.
<ELIPSE .X .Y .A .B .P>
"
"
FNCTG 3-6 This will plot the graph of
any function of one varible.
it will auto-scale unless you
tell it not to.
<FNCTG .xl .xh .f .scl .hpts .p>
for example
<define a(x) <* .x .x>>$
<FNCTG -1 1 ,a>$ will
plot a(x) for x=-1 to 1
with auto scaling.
<FNCTG -1 1 ,a (800 800)
(.5 .5) 100>$ will not
scale for you
"
"
LINE 4 THIS FUNCTION WILL DRAW A
LINE FROM X0,Y0 TO X1,Y1
,THE COORDINATES SHOULD BE
IN THE RANGE OF 0 TO 1024.
<LINE .X0 .Y0 .X1 .Y1>
"
"
MINIMAX 1 THIS FUNCTION IS USED BY
FNCTG. GIVEN A VECTOR OR
LIST IT RETURNS A TWO ELEMENT
LIST WITH THE MINIMUM AND
MAXIMUM VALUES OF THE VECTOR.
<MINIMAX .X>
"
"
MOVE 2 THIS MOVES THE BEAM OF THE
COORDINATES GIVEN. IT ALSO
SET THE SCOPE IN GRAPHICS
MODE SO IT MUST BE CALLED BEFORE
DRAW. THE RANGE OF THE
COORDINATES IS THE SAME AS DRAW
<MOVE .X .Y>
"
"
PAGE 0 THIS ERASES THE SCREEN ON
THE 4010. YOU SHOULD GIVE THE
SCOPE ABOUT ONE SECOND BEFORE
DRAWING MORE STUFF.
<PAGE>
"
"
PLOTV 2 THIS FUNCTION WILL PLOT
TWO VECTORS OR LISTS AGAINST
EACH OTHER. IT MOVES TO THE
FIRST POINT AND DRAWS TO THE
REST. AGAIN THE COORDINATES
SHOULD BE IN THE RANGE OF 0
TO 1024. THE TWO VECTORS
MUST BE OF THE SAME LENGTH
<SET X [1 2 3 4]>$
<SET Y [2 4 8 16]>$
<PLOTV .X .Y>$
"
"
POINT 2 THIS WILL PLOT A POINT AT
X,Y. THE COORDINATES
SHOULD BE IN THE RANGE OF 0
TO 1024.
<POINT .X .Y>
"
"
TERMINAL
THIS IS NOT A FUNTCTION BUT SHOWS YOU HOW
TO TELL MIGS WHAT TYPE OF TERMINAL YOU ARE USING. WHEN MIGS ASKS
YOU WHATE TYPE YOU ARE GIVE IT ONE OF THE FOLLOWING CHARACTERS
FOLLOWED BY A ESC.
CHAR. TERMINAL
..................
A ARDS OR IMLAC
G GT42(PDP11-10) LOAD WITH PICTUREBOOK
T TEKTRONIX
""
M.I.G.S. DISPLAY COMPILER
THERE IS NOW A USEABLE DISPLAY COMPILER IN
MIGS. IT WILL ALLOW THE USER TO DO MANY OF THE THINGS THAT REQUIRED THE
E&S BEFORE. AS WITH MIGS' PRIMATIVES IT WILL SUPPORT IMLACS, ARDS, AND
TEKTRONICS SCOPES. THE DISPLAY COMPILER IS COMPILED,
WHICH MEANS IT IS FAST AT THE PRESENTTIME.
THE COMPILER AND PROCESSOR LETS THE USER CREAT A PICTURE (MCELL),
ROTATE THEM, TRANSLATE THEM, AND SCALE THEM. SUBPICTURING IS ALLOWED TO
ANY DEPTH. THE MCELLS CAN BE TWO OR THREE DIMENSIONAL AND WILL BE CLIPPED
AND PROJECTED AS NEEDED.
TO USE THE COMPILER AND PROCESSOR FLOAD RRS;MUDDLE INIT. FOLLOW MIGS'
INSTRUCTIONS TO DEFINE THE TERMINAL THAT YOU ARE USING. NEXT TYPE 'Y'
WHEN MIGS ASKS IF YOU WANT THE DISPLAY COMPILER. YOU MAY WANT TO FLOAD
RRS;TEST GRAPHS TO PLAY WITH. THE FUNCTIONS
THAT YOU NEED TO KNOW ABOUT ARE LISTED BELOW.
FUNCTION ARGS DISCRIPTION
........ .... ...........
MCELL 6 OR MORE THIS FUNCTION CREATS A MCELL (PICTURE) THE
CALL IS
<MCELL NAME () () .3D .BLK <-BODY-> >
NAME IS AN ATOM WHICH IS THE NAME OF THE
MCELL TO BE CREATED.
THE TWO LIST ARENT USED YET BUT ARE NEEDED
THE VALUE OF 3D DETERMINS IF THE MCELL IS
2 OR 3 DIMENSIONAL. IF .3D IS FALSE THE MCELL
IS 2D.
IF .BLK IS TRUE THE MCELL IS BLANKED.
THE <-BODY-> CAN BE ANY VALID MUDDLE OBJECT
OR OBECTS. HOPEFULLY THERE SHOULD BE SOME
MIGS PRIMATIVES IN IT. AT THIS TIME THERE IS
A KNOWN BUG IN MCELL, IF YOU GET AN ERROR
YOU WILL PROBABLY HAVE TO RELOAD THE MIGS
PRIMATIVES. TO DO THIS <TEKGRA-INIT>$,OR IF
YOU ARE USING AN ARDS <FLOAD ''RRS;ARDGRA >''>$
DISP 1 OR MORE THIS FUNCTION WILL DISPLAY A MCELL. THE CALL
IS <DISP NAME <-XFORMS-> >.
NAME IS AN ATOM WHICH IS THE NAME OF THE MCELL
TO BE DISPLAYED.
THE <-XFORMS-> ARE THE TRANSFORMS THAT YOU WANT
TO APPLY TO THE MCELL. THEY ARE OPTIONAL.
CALL 1 OR MORE THIS FUNCTION CALLS A SUBPICTURE. IT MUST BE
USED IN THE <-BODY-> OF A CALL TO MCELL.
<CALL NAME <-XFORMS-> >
NAME IS AN ATOM WHICH IS THE NAME OF A MCELL
WHICH IS TO BE USED AS A SUBPICTURE. IT HAD
BETTER EXIST BY THE TIME YOU DISPLAY THE MCELL
THAT DID THE CALL.
NOW HERE ARE THE TRANSFORMS THAT ARE CURRENTLY AVAILABLE. THEY MUST BE USED
IN A CALL IN A MCELL OR IN DISP. NOTE MCELL EVALS THE ARGS TO A TRANSFORM,
BUT NOT THE TRANSFORM ITSELF.SO IF YOU DONT WANT THE ARGS EVALED TILL YOU
DISPLAY THE MCELL,QUOTE THEM. TRANSFORMS ARE ANY FUNCTION THAT RETURNS AN
OBJECT OF THE FOLLOWING TYPE. FOR 2D
#DECL((VALUE)<VECTOR FIX FIX <VECTOR [9 FLOAT>]>>)
FOR 3D
#DECL ((VALUE)<VECTOR FIX FIX <VECTOR [16 FLOAT]>) WHERE THE FIRST
TWO FIXS SHOULD BE 3 FOR 2D, AND 4 FOR 3D. TO TELL IF THE MCELL THAT IS BEING
DISPLAYED IS 2D OR 3D THE TRANSFORM SHOULD LOOK AT <1 .3DSTK!-DISPCOM>. IF
IT IS TRUE THEN THE MCELL IS 3D. THE TRANSFORM SYSTEM IS BASED ON HOMOGYNIOUS
COORDINATES.THE VECTOR TO BE TRANSFORMED IS A ROW VECTOR WHICH IS MULTIPLIED
BY THE TRANSFORM MATRIX ON THE RIGHT OF THE VECTOR (I.E. V*M).
FUNCTION ARGS DISCRIPTION
........ .... ...........
XLATE 2 - 3 THIS FUNCTION TRANSLATES A MCELL.
<XLATE .X .Y .Z>
.X IS THE NUMBER OF UNITS TO MOVE IN THE X DIR.
.Y IS THE NUMBER OF UNITS TO MOVE IN THE Y DIR.
.Z IS THE NUMBER OF UNITS TO MOVE IN THE Z DIR.
(INTO THE SCREEN). IT IS OPTIONAL (Z=0) AND IS
IGNORED IN A 2D MCELL.
SCALE 1 - 3 THIS FUNCTION SCALES A MCELL.
<SCALE .X .Y .Z>
Y AND Z ARE OPTIONAL AND DEFULT TO .X.
Z IS IGNORED IN 2D MCELLS.
ROTZ 1 THIS FUNCTION WILL ROTATE A MCELL ABOUT THE
Z AXIS.
<ROTZ .T>
.T IS THE ANGLE IN RADIENS. ROTZ IS THE ONLY
ROTATION THAT CAN BE APPLIED TO A 2D MCELL.
ROTX 1 THIS ROTATES AMCELL ABOUT THE X AXIS.
<ROTX .T>
.T IS THE ANGLE IN RADIENS.
ROTY 1 THIS FUNCTION ROTATES A MCELL ABOUT THE Y AXIS.
<ROTY .T>
.T IS THE ANGLE IN RADIENS.
ONE NOTE AND THEN SOME EXAMPLES, THE ORIGEN OF THE COORDINATE SYSTEM
IS AT THE LOWER LEFT CORNER OF THE SCREEN. THE VISABLE AREA IS BOUNDED
BY THE RECTANGLE (0,0),(0,1023),(1023,1023),(1023,0).
EXAMPLE 1
<PAGE>;''CLEAR THE SCREEN''$
<MCELL TRI () () <> <>
<MOVE 0 200> <DRAW 141 -141><DRAW -141 -141><DRAW 0 200>>
;''CREAT A MCELL CALLED TRI THAT HAS A TRIANGLE IN IT. TRI IS A 2D MCELL''$
<DISP TRI <XLATE 500 500>>;''DISPLAY IT AT THE CENTER OF THE SCREEN.''$
EXAMPLE 2
<MCELL NTRI () () <> <>
<CALL TRI <ROTZ </ 3.14159 6>> <XLATE 500 500>> >
;''MAKE A NEW MCELL CALLED NTRI THAT HAS THE TRIANGLE ROTATED 30 DEGREES
AND MOVED TO THE CENTER OF THE SCREEN.''$
<DISP NTRI>;''LETS HAVE A LOOK AT IT.''$
EXAMPLE 3
<FLOAD ''RRS;TEST GRAPHS''>;''GET SOME GOODIES TO PLAY WITH''$
<MCELL C () () 3D <>
<CUBE -50 -50 -50 50 50 50>>;''A CUBE AROUND THE ORIGEN.''$
<PAGE>$
<DISP C>;'' LETS HAVE A LOOK AT IT.''
<DISP C <ROTY </ 3.14159 6>> <ROTX </ 3.14159 4>> <XLATE 500 500 0>>
;''ROTATE THE CUBE 30 DEGREES ABOUT Y AND 45 DEGREES ABOUT X, THEN
MOVE TO THE CENTER OF THE SCREEN''$
EXAMPLE 4
<MCELL TRIP () () 3D <>
<REPEAT ( (8PI <* 8 3.14159>)
(T .8PI)
(DT </ 50 .8PI>)
(SF </ 500 .8PI>))
<CALL C <ROTZ <- .T>>
<XLATE <* .SF .T <COS .T>>
<* .SF .T <SIN .T>>
<- 10000 <* 20 .SF .T>> >>
<COND (<L? <SET T <- .T .DT>> 0> <RETURN T>)> >>$
<PAGE>
<DISP TRIP <XLATE 500 500>>;''TRY IT YOU'LL LIKE IT''$
"
"
PARAG 4-8 THIS FUNCTION WILL PRODUCE A
PARAMETRIC PLOT OF TWO
FUNCTIONS.
<PARAG .TL .TH FOO BAR
.P .MODE .SCL .XYDIS>
TL IS THE LOWWER LIMIT OF THE
THE PARAMETER, AND TH IS THE
HIGH LIMIT. FOO AND BAR
ARE THE ATOMS WHO ARE THE NAMES
TWO FUNCTIONS TO BE PLOTED. THE
REST OF THE ARGS. ARE OPTIONAL.
P IS THE NUMBER OF POINTS TO BE
PLOTED. MODE CONTROLS THE SCAL ING,
IF .MODE =''SAS'' (THE DEFALT)
PARAG WILL SCALE ONE AXIS TO THE
MAXIMUM SIZE ON THE SCREEN.
IF .MODE=''DAS'' PARAG WILL SCALE
BOTH X AND Y TO FULL SCREEN.
THIS HOWEVER, DOESNT PRESERV
ANGLES. IF .MODE ''NAS'' PARAG
DOESNT DO ANY AUTOSCALING, YOU
YOU HAVE TO. SCL IS A TWO
ELEMENT LIST WITH THE X AND Y
SCALES IN IT. XYDIDIS IS A TWO
ELEMENT LIST WITH THE X AND Y
DISPLACEMENTS IN IT.
EX.
<PARAG 0 6.3 SIN COS>$
")>
<SET INFOT ![-1 -1 0 15 5 6 4 7 8 9 2 3 -1 10 11 -1 12 13
-1 14 -1 1 -1 -1 16 17!]>
<ENDPACKAGE>