[796] | 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
|
---|