104 lines
3.2 KiB
Mathematica
104 lines
3.2 KiB
Mathematica
ZIBVLMSM ; IHS/ADC/GTH - LIST MSM VARIABLES ; [ 02/07/97 3:02 PM ]
|
|
;;4.0;XB;;Jul 20, 2009;Build 2
|
|
;
|
|
; This routine lists variables that begin with the string
|
|
; entered by the user. Selection of variables is case
|
|
; sensitive.
|
|
;
|
|
; This routine is specific to Micronetics. It will work
|
|
; with any M implementation that has all Type A extensions
|
|
; to the 1990 M ANSI standard implemented. The front end
|
|
; routine, XBVL, stops if any other than an MSM
|
|
; implementation is encountered.
|
|
;
|
|
; Routine provided by Don Enos, OHPRD, 5 Feb 96.
|
|
;
|
|
START ;
|
|
NEW ZIBVLC,ZIBVLDQT,ZIBVLI,ZIBVLLC,ZIBVLNS,ZIBVLQ,ZIBVLX,ZIBVLX2,ZIBVLY,ZIBVLZ
|
|
S $P(ZIBVLZ,"=",40)=""
|
|
F D LOOP Q:ZIBVLQ
|
|
Q
|
|
;
|
|
LOOP ; WRITE NAME SPACED VARIABLES UNTIL USER IS THROUGH
|
|
D READ ; get name space
|
|
Q:ZIBVLQ
|
|
Q:ZIBVLNS=""
|
|
I $D(IOF) W @IOF I 1
|
|
E W !!
|
|
W ZIBVLZ,! ; write leading === line
|
|
I ZIBVLNS="*" D ALL I 1 ; list variables
|
|
E D NMSPACE
|
|
D:ZIBVLLC>20 PAUSE ; pause if bottom of screen
|
|
I 'ZIBVLQ W ZIBVLZ,! I 1 ; write trailing === line
|
|
E W !
|
|
S ZIBVLQ=0
|
|
Q
|
|
;
|
|
NMSPACE ; LIST VARIABLES IN NAME SPACE
|
|
S ZIBVLX=$O(@ZIBVLNS,-1) ; backup to variable before name space
|
|
S:ZIBVLX="" ZIBVLX="%" ; if none start with %
|
|
I ZIBVLNS="%",$D(%) D WRITE,QUERY ;if % name space list % variable
|
|
; now list variables in name space and subnodes if arrays
|
|
; skip ZIBVL* variables
|
|
F S ZIBVLX=$O(@ZIBVLX) Q:ZIBVLX="" Q:$E(ZIBVLX,1,$L(ZIBVLNS))]ZIBVLNS I $E(ZIBVLX,1,$L(ZIBVLNS))=ZIBVLNS,$E(ZIBVLX,1,5)'="ZIBVL" D WRITE Q:ZIBVLQ D QUERY Q:ZIBVLQ
|
|
Q
|
|
;
|
|
ALL ; LIST ALL VARIABLES
|
|
S ZIBVLX="%"
|
|
I $D(%) D WRITE,QUERY ; if % exists list it
|
|
; now list all variables and subnodes if arrays
|
|
; skip ZIBVL* variables
|
|
F S ZIBVLX=$O(@ZIBVLX) Q:ZIBVLX="" I $E(ZIBVLX,1,5)'="ZIBVL" D WRITE Q:ZIBVLQ D QUERY Q:ZIBVLQ
|
|
Q
|
|
;
|
|
QUERY ; $Q THROUGH ARRAYS
|
|
S ZIBVLX2=ZIBVLX
|
|
NEW ZIBVLX
|
|
S ZIBVLX=ZIBVLX2
|
|
F S ZIBVLX=$Q(@ZIBVLX) Q:ZIBVLX="" D WRITE Q:ZIBVLQ
|
|
Q
|
|
;
|
|
WRITE ; WRITE ONE VARIABLE NAME AND VALUE
|
|
Q:'($D(@ZIBVLX)#2)
|
|
; quote non-numeric values (numeric = canonic < 16 digits)
|
|
S ZIBVLDQT=""""
|
|
I $L(@ZIBVLX)<16,@ZIBVLX=+@ZIBVLX S ZIBVLDQT=""
|
|
; figure out # of lines that will be used
|
|
S ZIBVLC=$L(ZIBVLX)+1+($L(ZIBVLDQT)*2)+$L(@ZIBVLX) F ZIBVLI=1:1 S ZIBVLC=ZIBVLC-80 Q:ZIBVLC<1
|
|
S ZIBVLLC=ZIBVLLC+ZIBVLI
|
|
I ZIBVLLC>22 S ZIBVLLC=0 D PAUSE ; pause if not enough room
|
|
Q:ZIBVLQ
|
|
W ZIBVLX,"=",ZIBVLDQT,@ZIBVLX,ZIBVLDQT,! ; write name=value
|
|
Q
|
|
;
|
|
READ ; READ USER INPUT
|
|
S ZIBVLQ=1,ZIBVLLC=0
|
|
R !,"Enter Name Space: ",ZIBVLNS:300
|
|
S:'$T ZIBVLNS="^"
|
|
Q:ZIBVLNS=""
|
|
Q:ZIBVLNS["^"
|
|
S ZIBVLQ=0
|
|
I ZIBVLNS["?" D HELP Q
|
|
I $E(ZIBVLNS,1,5)="ZIBVL" W !!,"ZIBVL is not allowed!",*7 D HELP Q
|
|
I ZIBVLNS=" " W !!,"BLANK is not allowed!",*7 D HELP Q
|
|
I $L(ZIBVLNS)>1,$E(ZIBVLNS,$L(ZIBVLNS))="*" S ZIBVLNS=$E(ZIBVLNS,1,($L(ZIBVLNS)-1))
|
|
D I ZIBVLQ S ZIBVLQ=0 D HELP W *7 Q
|
|
. Q:ZIBVLNS?1"%".AN
|
|
. Q:ZIBVLNS?1A.AN
|
|
. Q:ZIBVLNS="*"
|
|
. S ZIBVLQ=1
|
|
. Q
|
|
Q
|
|
;
|
|
HELP ; DISPLAY HELP MESSAGE
|
|
W !!,"Enter valid variable name string (e.g IO), or * for all, or RETURN or ^ to exit.",!
|
|
S ZIBVLNS=""
|
|
Q
|
|
;
|
|
PAUSE ; PAUSE FOR USER
|
|
R "Press any key to continue",ZIBVLY:300 S:'$T ZIBVLY="^"
|
|
W !
|
|
I ZIBVLY["^" S ZIBVLQ=1 Q
|
|
W:$D(IOF) @IOF
|
|
Q
|