1 | TMGBUTIL ;TMG/kst/Binary Global Data Utilities ;03/25/06
|
---|
2 | ;;1.0;TMG-LIB;**1**;08/20/05
|
---|
3 |
|
---|
4 | ;"TMG BINARY GLOBAL DATA UTILITY FUNCTIONS
|
---|
5 | ;"Kevin Toppenberg MD
|
---|
6 | ;"GNU General Public License (GPL) applies
|
---|
7 | ;"8-20-2005
|
---|
8 |
|
---|
9 | ;"=======================================================================
|
---|
10 | ;" API -- Public Functions.
|
---|
11 | ;"=======================================================================
|
---|
12 | ;"DISPLAY(globalRef,incSubscr,offset,numLines,bytesPerLine)
|
---|
13 | ;"BROWSE(globalRef,incSubscr)
|
---|
14 |
|
---|
15 | ;"=======================================================================
|
---|
16 | ;"PRIVATE API FUNCTIONS
|
---|
17 | ;"=======================================================================
|
---|
18 |
|
---|
19 |
|
---|
20 | ;"=======================================================================
|
---|
21 | ;"DEPENDENCIES
|
---|
22 | ;"=======================================================================
|
---|
23 | ;"Uses: TMGBINF
|
---|
24 | ;" TMGMISC
|
---|
25 | ;" TMGSTUTL
|
---|
26 |
|
---|
27 | ;"=======================================================================
|
---|
28 |
|
---|
29 | BROWSE(globalRef,incSubscr)
|
---|
30 | ;"SCOPE: PUBLIC
|
---|
31 | ;"Purpose: to browse a binary set as hex codes
|
---|
32 |
|
---|
33 | new offset set offset=0
|
---|
34 | new input
|
---|
35 | for do quit:(offset="")
|
---|
36 | . read "Offset to browse (? for help): ",input:$get(DTIME,3600),!
|
---|
37 | . if input="?" write "^ to abort,A=browse up, Z=browse down",! quit
|
---|
38 | . if input="^" set offset="" quit
|
---|
39 | . if input="" set input="Z"
|
---|
40 | . if "Aa"[input set offset=offset-(8*16)
|
---|
41 | . if "Zz"[input set offset=offset+(8*16)
|
---|
42 | . if $extract(input,1)="$" set input=$$HEX2NUM^TMGMISC(input)
|
---|
43 | . if +input=input set offset=input
|
---|
44 | . if +offset'=offset set offset="" quit
|
---|
45 | . do DISPLAY(globalRef,incSubscr,offset,8,16)
|
---|
46 |
|
---|
47 | quit
|
---|
48 |
|
---|
49 |
|
---|
50 | DISPLAY(globalRef,incSubscr,offset,numLines,bytesPerLine)
|
---|
51 | ;"SCOPE: PUBLIC
|
---|
52 | ;"Purpose: to display a binary set as hex codes
|
---|
53 | ;"Input: gobalRef -- the reference of the beginning of the block (in closed form)
|
---|
54 | ;" incSubscr-- (required) Identifies the incrementing subscript level. For example, if you
|
---|
55 | ;" pass ^TMP(115,1,1,0) as the global_ref parameter and pass 3 as the
|
---|
56 | ;" inc_subscr parameter, $$BIN2GBL will increment the third subscript, such
|
---|
57 | ;" as ^TMP(115,1,x), but will WRITE notes at the full global reference, such
|
---|
58 | ;" as ^TMP(115,1,x,0).
|
---|
59 | ;" offset -- (OPTIONAL) the bytes offset from the beginning of the
|
---|
60 | ;" block to start from. Default=0
|
---|
61 | ;" numLines -- (OPTIONAL) the number of lines to show. Default=8
|
---|
62 | ;" bytesPerLine -- (OPTIONAL) the number of bytes to show per line Default=16
|
---|
63 | ;"Output -- displays the hex bytes to the screen
|
---|
64 | ;"Result -- none
|
---|
65 |
|
---|
66 | ;"Note: each line in the global ref is assumed to hold 512 bytes.
|
---|
67 |
|
---|
68 | new index,data
|
---|
69 | new bytesNeeded
|
---|
70 | new atEnd set atEnd=0
|
---|
71 |
|
---|
72 | set offset=$get(offset,0)
|
---|
73 | set numLines=$get(numLines,8)
|
---|
74 | set bytesPerLine=$get(bytesPerLine,16)
|
---|
75 | set bytesNeeded=numLines*bytesPerLine
|
---|
76 | set index=offset\512
|
---|
77 |
|
---|
78 | if index>0 set globalRef=$$NEXTNODE^TMGBINF(globalRef,incSubscr,1,index)
|
---|
79 | if (globalRef="") goto DispDone
|
---|
80 | set data=$extract($get(@globalRef),(offset#512)+1,512)
|
---|
81 |
|
---|
82 | for quit:($length(data)'<bytesNeeded)!(atEnd>0) do
|
---|
83 | . set globalRef=$$NEXTNODE^TMGBINF(globalRef,incSubscr,1,1)
|
---|
84 | . if (globalRef="") set atEnd=1 quit
|
---|
85 | . new oneLine set oneLine=$get(@globalRef)
|
---|
86 | . if oneLine="" set atEnd=1 quit
|
---|
87 | . set data=data_$extract(oneLine,1,bytesNeeded-$length(data))
|
---|
88 |
|
---|
89 | ;"Now display data
|
---|
90 | new dispLine
|
---|
91 | new dispOffset set dispOffset=offset
|
---|
92 | for quit:($length(data)=0) do
|
---|
93 | . set dispLine=$extract(data,1,bytesPerLine)
|
---|
94 | . set data=$extract(data,bytesPerLine+1,bytesNeeded)
|
---|
95 | . write "$",$$HEXCHR2^TMGMISC(dispOffset,6)," "
|
---|
96 | . write $$STRB2H^TMGSTUTL(dispLine,1),!
|
---|
97 | . set dispOffset=dispOffset+bytesPerLine
|
---|
98 |
|
---|
99 |
|
---|
100 | DispDone
|
---|
101 | quit
|
---|