[796] | 1 | TMGIOUTL ;TMG/kst/IO Utilities ;03/25/06
|
---|
| 2 | ;;1.0;TMG-LIB;**1**;07/12/05
|
---|
| 3 |
|
---|
| 4 | ;"TMG IO UTILITIES
|
---|
| 5 | ;"Kevin Toppenberg MD
|
---|
| 6 | ;"GNU General Public License (GPL) applies
|
---|
| 7 | ;"7-12-2005
|
---|
| 8 |
|
---|
| 9 | ;"=======================================================================
|
---|
| 10 | ;" API -- Public Functions.
|
---|
| 11 | ;"=======================================================================
|
---|
| 12 | ;"$$FNameExtract^TMGIOUTL(FullNamePath,NodeDiv)
|
---|
| 13 | ;"$$PathExtract^TMGIOUTL(FullNamePath,NodeDiv)
|
---|
| 14 | ;"$$UpPath^TMGIOUTL(Path,NodeDiv) -- return a path that is one step up from current path
|
---|
| 15 | ;"SplitFNamePath^TMGIOUTL(FullNamePath,OutName,OutPath,NodeDiv)
|
---|
| 16 | ;"$$GetFName^TMGIOUTL(Msg,DefPath,DefFName,NodeDiv,OutPath,OutName,Prompt)
|
---|
| 17 | ;"$$GetDirName(Msg,DefPath,NodeDiv,OutPath,Prompt) -- query user for a directory name
|
---|
| 18 | ;"$$IsDir^TMGIOUTL(Path) ;DEPRECIATED .. moved to ^TMGKERNL
|
---|
| 19 | ;"$$Move^TMGIOUTL(Source,Dest) ;DEPRECIATED .. moved to ^TMGKERNL
|
---|
| 20 | ;"$$FileExists^TMGIOUTL(FullNamePath)
|
---|
| 21 | ;"$$Dos2Unix^TMGIOUTL(FullNamePath) ;DEPRECIATED .. moved to ^TMGKERNL
|
---|
| 22 | ;"$$WP2HFS^TMGIOUTL(GlobalP,path,filename)
|
---|
| 23 | ;"$$WP2HFSfp^TMGIOUTL(GlobalP,pathfilename)
|
---|
| 24 | ;"$$HFS2WP^TMGIOUTL(path,filename,GlobalP)
|
---|
| 25 | ;"$$HFS2WPfp^TMGIOUTL(pathfilename,GlobalP)
|
---|
| 26 | ;"$$DelFile^TMGIOUTL(pathfilename)
|
---|
| 27 | ;"$$EnsureTrailDiv^TMGIOUTL(path)
|
---|
| 28 |
|
---|
| 29 | ;"=======================================================================
|
---|
| 30 | ;"Dependancies
|
---|
| 31 | ;"TMGUSRIF for showing dialogs.
|
---|
| 32 | ;"TMGDEBUG
|
---|
| 33 | ;"TMGSTUTL
|
---|
| 34 | ;"TMGMISC
|
---|
| 35 | ;"=======================================================================
|
---|
| 36 |
|
---|
| 37 | ;"=======================================================================
|
---|
| 38 |
|
---|
| 39 | FNameExtract(FullNamePath,NodeDiv)
|
---|
| 40 | ;"SCOPE: Public
|
---|
| 41 | ;"Purpose: to extract a file name from a full path+name string
|
---|
| 42 | ;"Input: FullNamePath: String to process.
|
---|
| 43 | ;" e.g.: "/tmp/myfilename.txt"
|
---|
| 44 | ;" NodeDiv: [OPTIONAL] -- the character that separates folders (e.g. "/")
|
---|
| 45 | ;" if not supplied, then default value is "/"
|
---|
| 46 | ;"Result: the filename, or "" if not found
|
---|
| 47 | ;" e.g.: "myfilename.txt"
|
---|
| 48 |
|
---|
| 49 | new OutPath,OutName
|
---|
| 50 | do SplitFNamePath(.FullNamePath,.OutPath,.OutName,.NodeDiv)
|
---|
| 51 | quit $get(OutName)
|
---|
| 52 |
|
---|
| 53 |
|
---|
| 54 | PathExtract(FullNamePath,NodeDiv)
|
---|
| 55 | ;"SCOPE: Public
|
---|
| 56 | ;"Purpose: to extract a file name from a full path+name string
|
---|
| 57 | ;"Input: FullNamePath: String to process.
|
---|
| 58 | ;" e.g.: "/usr/local/myfilename.txt"
|
---|
| 59 | ;" NodeDiv: [OPTIONAL] -- the character that separates folders (e.g. "/")
|
---|
| 60 | ;" if not supplied, then default value is "/"
|
---|
| 61 | ;"Result: the path, or "" if not found
|
---|
| 62 | ;" e.g.: "/usr/local/"
|
---|
| 63 |
|
---|
| 64 | new OutPath,OutName
|
---|
| 65 | do SplitFNamePath(.FullNamePath,.OutPath,.OutName,.NodeDiv)
|
---|
| 66 | quit $get(OutPath)
|
---|
| 67 |
|
---|
| 68 | UpPath(Path,NodeDiv)
|
---|
| 69 | ;"SCOPE: Public
|
---|
| 70 | ;"Purpose: To return a path that is one step up from current path
|
---|
| 71 | ;"Input: Path -- NOTE: **MUST NOT** have a file name
|
---|
| 72 | ;" e.g. RIGHT --> '/var/local/'
|
---|
| 73 | ;" WRONG --> '/var/MyFile.txt' <-- 'MyFile.txt' would be treated as path node
|
---|
| 74 | ;" '/var/MyFile.txt' = '/var/MyFile.txt/' ==> UP ==> '/var/'
|
---|
| 75 | ;" NodeDiv: [OPTIONAL] -- the character that separates folders (e.g. "/")
|
---|
| 76 | ;" if not supplied, then default value is "/"
|
---|
| 77 | ;"Results: Returns resulting path. E.g. '/var/local/' --> '/var/'
|
---|
| 78 | ;" Note: '/' --> '/' (i.e. can't go higher than root)
|
---|
| 79 | set NodeDiv=$get(NodeDiv,"/")
|
---|
| 80 | new tempPath set tempPath=$$EnsureTrailDiv($get(Path),NodeDiv)
|
---|
| 81 | new result set result=NodeDiv
|
---|
| 82 | if tempPath'=NodeDiv do
|
---|
| 83 | . set result=$piece(tempPath,"/",1,$length(tempPath,"/")-2)_NodeDiv
|
---|
| 84 | else set result=NodeDiv
|
---|
| 85 | quit result
|
---|
| 86 |
|
---|
| 87 | ExtExtract(FullNamePath,NodeDiv)
|
---|
| 88 | ;"Purpose: to return the extension of the file name from full path+name string
|
---|
| 89 | ;" This will be everything after the last '.'
|
---|
| 90 | ;"Input: FullNamePath: String to process.
|
---|
| 91 | ;" e.g.: "/usr/local/myfilename.txt"
|
---|
| 92 | ;" NodeDiv: [OPTIONAL] -- the character that separates folders (e.g. "/")
|
---|
| 93 | ;" if not supplied, then default value is "/"
|
---|
| 94 | ;"Result: the extension or "" if not found
|
---|
| 95 | ;" e.g.: "txt" (doesn't include '.'
|
---|
| 96 |
|
---|
| 97 | new result
|
---|
| 98 | set result=$piece(FullNamePath,".",$length(FullNamePath,"."))
|
---|
| 99 | quit result
|
---|
| 100 |
|
---|
| 101 | SplitFNamePath(FullNamePath,OutPath,OutName,NodeDiv)
|
---|
| 102 | ;"SCOPE: Public
|
---|
| 103 | ;"Purpose: Take FullNamePath, and split into name and path.
|
---|
| 104 | ;"Input: FullNamePath: String to process.
|
---|
| 105 | ;" e.g.: "/tmp/myfilename.txt"
|
---|
| 106 | ;" NOTICE: IF PASSED BY REFERENCE, WILL BE CHANGED TO FILENAME!
|
---|
| 107 | ;" OutName: MUST BE PASSED BY REFERENCE. This is an OUT parameter
|
---|
| 108 | ;" OutPath: MUST BE PASSED BY REFERENCE. This is an OUT parameter
|
---|
| 109 | ;" NodeDiv: [OPTIONAL] -- the character that separates folders (e.g. "/")
|
---|
| 110 | ;" if not supplied, then default value is "/"
|
---|
| 111 | ;"Output: The resulting file name is put into OutName,
|
---|
| 112 | ;" e.g.: "myfilename.txt"
|
---|
| 113 | ;" and the path is put into OutPath.
|
---|
| 114 | ;" e.g.: "/tmp/"
|
---|
| 115 | ;"Result: None.
|
---|
| 116 |
|
---|
| 117 | set OutPath=""
|
---|
| 118 | set OutName=""
|
---|
| 119 | new PathNode
|
---|
| 120 | set NodeDiv=$get(NodeDiv,"/")
|
---|
| 121 | set FullNamePath=$get(FullNamePath)
|
---|
| 122 | SPN1
|
---|
| 123 | if (FullNamePath[NodeDiv)=0 set OutName=FullNamePath goto SPNDone
|
---|
| 124 | set PathNode=$piece(FullNamePath,NodeDiv,1)
|
---|
| 125 | set OutPath=OutPath_PathNode_NodeDiv
|
---|
| 126 | set $piece(FullNamePath,NodeDiv,1)=""
|
---|
| 127 | set FullNamePath=$extract(FullNamePath,2,255)
|
---|
| 128 | goto SPN1
|
---|
| 129 |
|
---|
| 130 | SPNDone
|
---|
| 131 | quit
|
---|
| 132 |
|
---|
| 133 |
|
---|
| 134 | GetFName(Msg,DefPath,DefFName,NodeDiv,OutPath,OutName,Prompt)
|
---|
| 135 | ;"SCOPE: PUBLIC
|
---|
| 136 | ;"Purpose: To query the user, to get a filename back
|
---|
| 137 | ;" Supplies optional directory listing.
|
---|
| 138 | ;"Input: Msg. [OPTIONAL] A message to show user prior to name prompt.
|
---|
| 139 | ;" May contain "\n" character for line wrapping.
|
---|
| 140 | ;" DefPath: [OPTIONAL] The default path to offer user.
|
---|
| 141 | ;" DefFName:[OPTIONAL] The default filename to offer user.
|
---|
| 142 | ;" NodeDiv: [OPTIONAL] -- the character that separates folders (e.g. "/")
|
---|
| 143 | ;" if not supplied, then default value is "/"
|
---|
| 144 | ;" OutPath: [OPTIONAL] Pass by reference, filled with selected path
|
---|
| 145 | ;" //no --> Note: Will return like this: '/home/test' not '/home/test/'
|
---|
| 146 | ;" (6-5-05: I think this because $$FTG^%ZISH wants the path like this)
|
---|
| 147 | ;" OutName: [OPTIONAL] Pass by reference, filled with selected name
|
---|
| 148 | ;" Prompt: [OPTIONAL] Prompt for user to enter filename/directory name
|
---|
| 149 | ;"Result: returns user specified filename (with path), or "" if aborted
|
---|
| 150 |
|
---|
| 151 | ;"5/16/09 -- Code changed to use newer, more GUI, file browser.
|
---|
| 152 | new Option
|
---|
| 153 | new result set result=""
|
---|
| 154 | set Option("MSG")=$get(Msg)
|
---|
| 155 | set Option("PATH")=$get(DefPath)
|
---|
| 156 | set Option("NAME")=$get(DefFName)
|
---|
| 157 | set Option("NodeDiv")=$get(NodeDiv)
|
---|
| 158 | set Option("PROMPT")=$get(Prompt)
|
---|
| 159 | set result=$$FBrowse^TMGIOUT2(.Option,.OutPath,.OutName)
|
---|
| 160 | quit result
|
---|
| 161 |
|
---|
| 162 | ;"------- older code below ---------------
|
---|
| 163 | if $get(TMGDEBUG)>0 do DebugEntry^TMGDEBUG(.DBIndent,"GetFName^TMGIOUTL")
|
---|
| 164 |
|
---|
| 165 | set Prompt=$get(Prompt,"Enter File Name (? for help): ")
|
---|
| 166 | if $data(Msg) do
|
---|
| 167 | . if $get(TMGDEBUG)>0 do DebugMsg^TMGDEBUG(DBIndent,"Calling PopupBox")
|
---|
| 168 | . do PopupBox^TMGUSRIF("Message:",$get(Msg)_"\nEnter ? for help.")
|
---|
| 169 |
|
---|
| 170 | set DefFName=$get(DefFName)
|
---|
| 171 | if $get(NodeDiv)="" kill NodeDiv
|
---|
| 172 | set NodeDiv=$get(NodeDiv,"/")
|
---|
| 173 | set DefPath=$get(DefPath)
|
---|
| 174 | new StackCaller set StackCaller=$$Caller^TMGMISC
|
---|
| 175 | if DefPath="" set DefPath=$get(^TMG("TMP","SETTINGS","GetFName",StackCaller)) ;"Default to the path used last time by caller
|
---|
| 176 | if DefPath="" set DefPath=NodeDiv
|
---|
| 177 | set OutPath=$get(OutPath)
|
---|
| 178 | set OutName=$get(OutName)
|
---|
| 179 | new UserName
|
---|
| 180 | new result set result=""
|
---|
| 181 | new loop set loop=0
|
---|
| 182 |
|
---|
| 183 | if $$IsDir^TMGKERNL(DefPath)=0 do
|
---|
| 184 | . ;"write "Default directory ["_DefPath_"] doesn't exist.",!
|
---|
| 185 | . set DefPath=NodeDiv
|
---|
| 186 |
|
---|
| 187 | GFN1 write Prompt ;"hello
|
---|
| 188 | if $extract(DefPath,$length(DefPath))'=NodeDiv do
|
---|
| 189 | . set DefPath=DefPath_NodeDiv
|
---|
| 190 | write DefPath_DefFName,""
|
---|
| 191 | set UserName=$$Read^TMGUSRIF("rt",$get(DTIME,3600),,DefPath_DefFName) write !
|
---|
| 192 | set UserName=$$Trim^TMGSTUTL(UserName)
|
---|
| 193 |
|
---|
| 194 | if (UserName["..") do goto GFN1
|
---|
| 195 | . new temp1
|
---|
| 196 | . ;"anything missing on this line? Was blank...
|
---|
| 197 | . if ($extract(DefPath,$length(DefPath))=NodeDiv)&(DefPath'="/") do
|
---|
| 198 | . set DefPath=$extract(DefPath,1,$length(DefPath)-1)
|
---|
| 199 | . do SplitFNamePath(DefPath,.DefPath,.temp,1)
|
---|
| 200 | else if UserName="" do goto GFNDone
|
---|
| 201 | . set OutPath=DefPath
|
---|
| 202 | . set OutName=DefFName
|
---|
| 203 | . set result=DefPath_DefFName
|
---|
| 204 | else if ($$UP^XLFSTR(UserName)["??") do goto GFN1
|
---|
| 205 | . new TMGMask,UserMask
|
---|
| 206 | . set UserMask=$piece(UserName,"?? ",2)
|
---|
| 207 | . if UserMask="" set UserMask=$piece(UserName,"?? ",2)
|
---|
| 208 | . if UserMask="" set UserMask="*"
|
---|
| 209 | . set TMGMask(UserMask)=""
|
---|
| 210 | . new TMGFiles
|
---|
| 211 | . if $$IsDir^TMGKERNL(DefPath)=0 write "?? invalid directory",! quit
|
---|
| 212 | . if $$LIST^%ZISH(DefPath,"TMGMask","TMGFiles")=1 do
|
---|
| 213 | . . write "Directory Listing",!
|
---|
| 214 | . . write "-----------------",!
|
---|
| 215 | . . new col set col=3
|
---|
| 216 | . . new index set index=""
|
---|
| 217 | . . for set index=$order(TMGFiles(index)) quit:(index)="" do
|
---|
| 218 | . . . set col=(col+1)#4
|
---|
| 219 | . . . write ?(col*20)+1," "
|
---|
| 220 | . . . new testDir set testDir=$$EnsureTrailDiv(DefPath,NodeDiv)
|
---|
| 221 | . . . set testDir=testDir_index
|
---|
| 222 | . . . if $$IsDir^TMGKERNL(testDir) write "<",index,">"
|
---|
| 223 | . . . else write index
|
---|
| 224 | . . . if col=3 write !
|
---|
| 225 | . . write !
|
---|
| 226 | else if UserName["^" do goto GFNDone
|
---|
| 227 | . set result=""
|
---|
| 228 | . set OutPath=""
|
---|
| 229 | . set OutName=""
|
---|
| 230 | else if UserName["?" do goto GFN1
|
---|
| 231 | . write " Current directory: [",DefPath,"]",!
|
---|
| 232 | . write " Default file name: [",DefFName,"]",!
|
---|
| 233 | . write " Example input: ",NodeDiv,"Data",NodeDiv,"Office",NodeDiv,"myfile.txt",!
|
---|
| 234 | . write " DELETE (with backspace) parts of path not wanted.",!
|
---|
| 235 | . write " Enter ^ to abort",!
|
---|
| 236 | . write " Enter ?? for directory listing (?? a* to show files starting with a)",!
|
---|
| 237 | . write " Enter .. to move up one directory level",!
|
---|
| 238 | . write " NOTE: If a partial name is entered then [ENTER] or [TAB], it will be autofinished.",!
|
---|
| 239 | else if $extract(UserName,$length(UserName))=NodeDiv do goto GFN1
|
---|
| 240 | . new tempPath set tempPath=DefPath
|
---|
| 241 | . if $extract(UserName,1,1)=NodeDiv set DefPath=""
|
---|
| 242 | . if $$IsDir^TMGKERNL(DefPath_UserName) set DefPath=DefPath_UserName
|
---|
| 243 | . else write "?? invalid directory",! set DefPath=tempPath
|
---|
| 244 | else for do quit:(loop'=1)
|
---|
| 245 | . if loop=0 do
|
---|
| 246 | . . if $extract(UserName,1,1)=NodeDiv do SplitFNamePath(UserName,.DefPath,.UserName)
|
---|
| 247 | . . set OutPath=DefPath
|
---|
| 248 | . . set OutName=UserName
|
---|
| 249 | . . set result=OutPath_OutName
|
---|
| 250 | . else set loop=0
|
---|
| 251 | . if $$IsDir^TMGKERNL(result) do quit
|
---|
| 252 | . . set DefPath=result
|
---|
| 253 | . . set DefName=""
|
---|
| 254 | . . set result=""
|
---|
| 255 | . . do CUU^TMGTERM(1) ;"cursor up 1 VT100 esc sequence.
|
---|
| 256 | . if result["*" do
|
---|
| 257 | . . set result=$$PickOneFile(result)
|
---|
| 258 | . if '$$FileExists(result) do
|
---|
| 259 | . . new tempresult set tempresult=result
|
---|
| 260 | . . set result=$$PickOneFile(result_"*")
|
---|
| 261 | . . if result="^" set loop=0 quit
|
---|
| 262 | . . if result'="" set loop=1 quit
|
---|
| 263 | . . new UseAnyway
|
---|
| 264 | . . write !,"File name """,tempresult,""" doesn't exist.",!
|
---|
| 265 | . . read "Use name anyway? NO// ",UseAnyway:$get(DTIME,3600),!
|
---|
| 266 | . . set UseAnyway=$$UP^XLFSTR(UseAnyway)
|
---|
| 267 | . . if '(UseAnyway["Y") set result=""
|
---|
| 268 | . . else set result=tempresult
|
---|
| 269 |
|
---|
| 270 | if result="" goto GFN1
|
---|
| 271 |
|
---|
| 272 | GFNDone
|
---|
| 273 | if (result'=UserName)&(UserName'="^") do
|
---|
| 274 | . write "Using file: ",result,!
|
---|
| 275 |
|
---|
| 276 | do SplitFNamePath(result,.OutPath,.OutName,NodeDiv)
|
---|
| 277 | set ^TMG("TMP","SETTINGS","GetFName",StackCaller)=OutPath ;"store for future use.
|
---|
| 278 | quit result
|
---|
| 279 |
|
---|
| 280 |
|
---|
| 281 | GetDirName(Msg,DefPath,NodeDiv,Prompt)
|
---|
| 282 | ;"SCOPE: PUBLIC
|
---|
| 283 | ;"Purpose: To query the user, to get a directory name back
|
---|
| 284 | ;"Input: Msg. [OPTIONAL] A message to show user prior to name prompt.
|
---|
| 285 | ;" May contain "\n" character for line wrapping.
|
---|
| 286 | ;" DefPath: [OPTIONAL] The default path to offer user.
|
---|
| 287 | ;" NodeDiv: [OPTIONAL] -- the character that separates folders (e.g. "/")
|
---|
| 288 | ;" if not supplied, then default value is "/"
|
---|
| 289 | ;" Prompt: [OPTIONAL] Prompt for user to enter filename/directory name
|
---|
| 290 | ;"Result: returns user specified filename (with path), or "" if aborted
|
---|
| 291 | ;
|
---|
| 292 | new Option
|
---|
| 293 | new result set result=""
|
---|
| 294 | set Option("MSG")=$get(Msg)
|
---|
| 295 | set Option("PATH")=$get(DefPath)
|
---|
| 296 | set Option("NodeDiv")=$get(NodeDiv)
|
---|
| 297 | set Option("PROMPT")=$get(Prompt)
|
---|
| 298 | set Option("SELECT DIR")=1
|
---|
| 299 | set result=$$FBrowse^TMGIOUT2(.Option)
|
---|
| 300 | quit result
|
---|
| 301 |
|
---|
| 302 |
|
---|
| 303 | IsDir(Path)
|
---|
| 304 | ;"Purpose: To determine if Path is a path to a directory (i.e. are there sub files)
|
---|
| 305 | ;"Input: Path to test, e.g. "/home/user" or "/home/user/"
|
---|
| 306 | ;"Result: 1 if there are files in path, 0 otherwise
|
---|
| 307 | ;"Note: if Path is a valid path to a directory, but there are no files in directory, 0 returned.
|
---|
| 308 |
|
---|
| 309 |
|
---|
| 310 | ;"Moved to ^TMGKERNL
|
---|
| 311 | quit $$IsDir^TMGKERNL(.Path)
|
---|
| 312 |
|
---|
| 313 |
|
---|
| 314 | Move(Source,Dest)
|
---|
| 315 | ;"Purpose to provide a shell for the Linux command 'mv'
|
---|
| 316 | ;" This can serve to move or rename a file
|
---|
| 317 | ;"Note: a platform independant version of the this could be constructed later...
|
---|
| 318 | ;"Result: 0 if no error; >0 if error
|
---|
| 319 | ;"Notice!!!! The return code here is DIFFERENT from usual
|
---|
| 320 |
|
---|
| 321 | ;"Moved to ^TMGKERNL
|
---|
| 322 | quit $$Move^TMGKERNL(.Source,.Dest)
|
---|
| 323 |
|
---|
| 324 |
|
---|
| 325 | FileExists(FullNamePath)
|
---|
| 326 | ;"To determine if file exists.
|
---|
| 327 | ;"Input: FullNamePath -- the full name and path of file to test, e.g. "/tmp/myfiles/a/test.txt"
|
---|
| 328 | ;"Results: 1 if file exists (and is unique), 0 if not
|
---|
| 329 | ;"Note: If FullNamePath indicates a directory, then 0 is returned.
|
---|
| 330 | ;" Note if FullNamePath contains a * pattern, that would cause multiple
|
---|
| 331 | ;" files to be returned, then filename is not unique, and function
|
---|
| 332 | ;" will RETURN THAT IT IS NOT A (unique) FILE
|
---|
| 333 |
|
---|
| 334 | new JustName,JustPath
|
---|
| 335 | new TMGMask
|
---|
| 336 | new TMGFiles
|
---|
| 337 | new result set result=0
|
---|
| 338 |
|
---|
| 339 | do SplitFNamePath(FullNamePath,.JustPath,.JustName)
|
---|
| 340 |
|
---|
| 341 | set TMGMask(JustName)=""
|
---|
| 342 | if $$LIST^%ZISH(JustPath,"TMGMask","TMGFiles")=1 do
|
---|
| 343 | . if $$ListCt^TMGMISC("TMGFiles")=1 do
|
---|
| 344 | . . set result='$$IsDir^TMGKERNL(FullNamePath)
|
---|
| 345 |
|
---|
| 346 | quit result
|
---|
| 347 |
|
---|
| 348 |
|
---|
| 349 | PickOneFile(PartNamePath)
|
---|
| 350 | ;"To take a name like "MyFil*", and display all matches and allow user to pick one
|
---|
| 351 | ;"Input: PartNamePath -- the partial name and path of file to test, e.g. "/tmp/myfiles/a/tes*"
|
---|
| 352 | ;"Results: The FullNamePath of the chosen file (or "" if none, or canceled)
|
---|
| 353 | ;" 12-14-05, if user enters "^", this is returned.
|
---|
| 354 |
|
---|
| 355 | new JustName,JustPath
|
---|
| 356 | new TMGMask
|
---|
| 357 | new TMGFiles
|
---|
| 358 | new result set result=""
|
---|
| 359 |
|
---|
| 360 | do SplitFNamePath(PartNamePath,.JustPath,.JustName)
|
---|
| 361 |
|
---|
| 362 | set TMGMask(JustName)=""
|
---|
| 363 | if $$LIST^%ZISH(JustPath,"TMGMask","TMGFiles")=1 do
|
---|
| 364 | . new count set count=$$ListCt^TMGMISC("TMGFiles")
|
---|
| 365 | . if count=1 set result=$order(TMGFiles("")) quit
|
---|
| 366 | . write count," matches to ",PartNamePath," found. Pick one:",!
|
---|
| 367 | . new part,fName,Num
|
---|
| 368 | . set fName=$order(TMGFiles(""))
|
---|
| 369 | . set Num=1
|
---|
| 370 | . set part=1
|
---|
| 371 | . if fName'="" for do quit:(fName="")!(result="^")
|
---|
| 372 | . . write " ",Num,". ",JustPath,fName
|
---|
| 373 | . . if $$IsDir^TMGKERNL(JustPath_fName) write "/"
|
---|
| 374 | . . write !
|
---|
| 375 | . . set TMGFiles(Num)=fName
|
---|
| 376 | . . set fName=$order(TMGFiles(fName))
|
---|
| 377 | . . if (part=10)!(fName="") do
|
---|
| 378 | . . . new choice
|
---|
| 379 | . . . set part=1
|
---|
| 380 | . . . write "Choose file (1-",Num,"), '^' to cancel, or [Enter] to continue: "
|
---|
| 381 | . . . read choice:$get(DTIME,3600),!!
|
---|
| 382 | . . . if choice="^" set fName="",result="^" quit
|
---|
| 383 | . . . if (+choice>0)&(+choice<Num+1) do
|
---|
| 384 | . . . . set result=$get(TMGFiles(+choice))
|
---|
| 385 | . . . . set fName=""
|
---|
| 386 | . . set part=part+1
|
---|
| 387 | . . set Num=Num+1
|
---|
| 388 |
|
---|
| 389 | if result'="" do
|
---|
| 390 | . if result'="^" set result=JustPath_result
|
---|
| 391 | else do
|
---|
| 392 | . write "(No file selected.)",!
|
---|
| 393 |
|
---|
| 394 | quit result
|
---|
| 395 |
|
---|
| 396 |
|
---|
| 397 | Dos2Unix(FullNamePath)
|
---|
| 398 | ;"Purpose: To execute the unix command Dos2Unix on filename path
|
---|
| 399 | ;"FullNamePath: The filename to act on.
|
---|
| 400 | ;"Result: 0 if no error; >0 if error
|
---|
| 401 | ;"Notice!!!! The return code here is DIFFERENT from usual
|
---|
| 402 |
|
---|
| 403 | ;"Moved to ^TMGKERNL
|
---|
| 404 | quit $$Dos2Unix^TMGKERNL(FullNamePath)
|
---|
| 405 |
|
---|
| 406 |
|
---|
| 407 | WP2HFS(GlobalP,path,filename)
|
---|
| 408 | ;"Purpose: To write a WP field to a Host-File-System file
|
---|
| 409 | ;"Input: GlobalP -- The reference to the header node (e.g. ^TMG(22702,99,1) in example below)
|
---|
| 410 | ;" path: for the output file, the path up to, but not including, the filename
|
---|
| 411 | ;" filename -- the filename to save to in the host file system. If file already exists, it will be overwritten.
|
---|
| 412 | ;"Note: The format of a WP field is as follows:
|
---|
| 413 | ;" e.g. ^TMG(22702,99,1,0) = ^^4^4^3050118^
|
---|
| 414 | ;" ^TMG(22702,99,1,1,0) = Here is the first line of text
|
---|
| 415 | ;" ^TMG(22702,99,1,2,0) = And here is another line
|
---|
| 416 | ;" ^TMG(22702,99,1,3,0) =
|
---|
| 417 | ;" ^TMG(22702,99,1,4,0) = And here is a final line
|
---|
| 418 | ;" And the format of the 0 node is: ^^<line count>^<linecount>^<fmdate>^^
|
---|
| 419 | ;"Result: 0 if failure, 1 if success
|
---|
| 420 | ;"Assumptions: That GlobalP is a valid reference to a WP field
|
---|
| 421 |
|
---|
| 422 | new result set result=0 ;"default to failure
|
---|
| 423 |
|
---|
| 424 | if $data(GlobalP)&($data(path))&($data(filename)) do
|
---|
| 425 | . new TMGWP
|
---|
| 426 | . merge TMGWP=@GlobalP
|
---|
| 427 | . set result=$$GTF^%ZISH("TMGWP(1,0)",1,path,filename)
|
---|
| 428 |
|
---|
| 429 | quit result
|
---|
| 430 |
|
---|
| 431 | WP2HFSfp(GlobalP,pathfilename)
|
---|
| 432 | ;"Purpose: To provide an interface to WP2HFS for cases when filename is not already separated from path
|
---|
| 433 | ;"Result: 0 if failure, 1 if success
|
---|
| 434 |
|
---|
| 435 | new path,filename,result
|
---|
| 436 |
|
---|
| 437 | do SplitFNamePath(.pathfilename,.path,.filename)
|
---|
| 438 | set result=$$WP2HFS(.GlobalP,.path,.filename)
|
---|
| 439 | quit result
|
---|
| 440 |
|
---|
| 441 |
|
---|
| 442 | HFS2WP(path,filename,GlobalP)
|
---|
| 443 | ;"Purpose: To read a WP field from a Host-File-System file
|
---|
| 444 | ;"Input: path: for the output file, the path up to, but not including, the filename
|
---|
| 445 | ;" filename -- the filename to save to in the host file system. If file already exists, it will be overwritten.
|
---|
| 446 | ;" GlobalP -- The reference to the header node (e.g. ^TMG(22702,99,1) in example below)
|
---|
| 447 | ;"Note: The format of a WP field is as follows:
|
---|
| 448 | ;" e.g. ^TMG(22702,99,1,0) = ^^4^4^3050118^
|
---|
| 449 | ;" ^TMG(22702,99,1,1,0) = Here is the first line of text
|
---|
| 450 | ;" ^TMG(22702,99,1,2,0) = And here is another line
|
---|
| 451 | ;" ^TMG(22702,99,1,3,0) =
|
---|
| 452 | ;" ^TMG(22702,99,1,4,0) = And here is a final line
|
---|
| 453 | ;" And the format of the 0 node is: ^^<line count>^<linecount>^<fmdate>^^
|
---|
| 454 | ;"Result: 0 if failure, 1 if success
|
---|
| 455 | ;"Assumptions: That GlobalP is a valid reference to a WP field
|
---|
| 456 |
|
---|
| 457 | new result set result=0 ;"default to failure
|
---|
| 458 |
|
---|
| 459 | if $data(GlobalP)&($data(path))&($data(filename)) do
|
---|
| 460 | . new TMGWP,WP
|
---|
| 461 | . set result=$$FTG^%ZISH(path,filename,"TMGWP(1,0)",1)
|
---|
| 462 | . ;"zwr TMGWP(*)
|
---|
| 463 | . ;"new temp read "press enter to continue",temp:$get(DTIME,3600),!
|
---|
| 464 | . if result=0 quit
|
---|
| 465 | . ;"Scan for overflow nodes, and integrate into main body
|
---|
| 466 | . new i set i=$order(TMGWP(""))
|
---|
| 467 | . if i'="" for do quit:(i="")
|
---|
| 468 | . . if $data(TMGWP(i,"OVF")) do
|
---|
| 469 | . . . new j set j=$order(TMGWP(i,"OVF",""))
|
---|
| 470 | . . . if j'="" for do quit:(j="")
|
---|
| 471 | . . . . new n set n=i+(j/10)
|
---|
| 472 | . . . . set TMGWP(n,0)=TMGWP(i,"OVF",j)
|
---|
| 473 | . . . . set j=$order(TMGWP(i,"OVF",j))
|
---|
| 474 | . . . kill TMGWP(i,"OVF")
|
---|
| 475 | . . set i=$order(TMGWP(i))
|
---|
| 476 | . ;"Now copy into another variable, renumbering lines (in case there were overflow lines)
|
---|
| 477 | . set i=$order(TMGWP(""))
|
---|
| 478 | . set j=0
|
---|
| 479 | . if i'="" for do quit:(i="")
|
---|
| 480 | . . set j=j+1
|
---|
| 481 | . . set WP(j,0)=TMGWP(i,0)
|
---|
| 482 | . . set i=$order(TMGWP(i))
|
---|
| 483 | . ;"now create a header node
|
---|
| 484 | . do NOW^%DTC ;"returns result in X
|
---|
| 485 | . set WP(0)="^^"_j_"^"_j_"^"_X_"^^"
|
---|
| 486 | . ;"now put WP into global reference.
|
---|
| 487 | . ;"zwr WP(*)
|
---|
| 488 | . ;"new temp read "press enter to continue",temp:$get(DTIME,3600),!
|
---|
| 489 | . kill @GlobalP
|
---|
| 490 | . merge @GlobalP=WP
|
---|
| 491 |
|
---|
| 492 | quit result
|
---|
| 493 |
|
---|
| 494 |
|
---|
| 495 | HFS2WPfp(pathfilename,GlobalP)
|
---|
| 496 | ;"Purpose: To provide an interface to HFS2WP for cases when filename is not already separated from path
|
---|
| 497 | ;"Result: 0 if failure, 1 if success
|
---|
| 498 |
|
---|
| 499 | new path,filename,result
|
---|
| 500 |
|
---|
| 501 | do SplitFNamePath(.pathfilename,.path,.filename)
|
---|
| 502 | set result=$$HFS2WP(.path,.filename,.GlobalP)
|
---|
| 503 | quit result
|
---|
| 504 |
|
---|
| 505 |
|
---|
| 506 | DelFile(pathfilename)
|
---|
| 507 | ;"Purpose: to delete one file on host file system
|
---|
| 508 | ;"Results: returns 1 if success, 0 if failure
|
---|
| 509 | ;"Note: 2/22/2006 -- if deletion is blocked by OS, then 1 may be returns but file is not deleted.
|
---|
| 510 |
|
---|
| 511 | new path,filename,result
|
---|
| 512 | new TMGFile
|
---|
| 513 |
|
---|
| 514 | do SplitFNamePath(.pathfilename,.path,.filename)
|
---|
| 515 | set TMGFile(filename)=""
|
---|
| 516 | set result=$$DEL^%ZISH(path,"TMGFile")
|
---|
| 517 |
|
---|
| 518 | quit result
|
---|
| 519 |
|
---|
| 520 |
|
---|
| 521 | EnsureTrailDiv(Path,NodeDiv)
|
---|
| 522 | ;"Purpose: to ensure that a path ends with a node divider.
|
---|
| 523 | ;" e.g. /var/local --> /var/local/
|
---|
| 524 | ;" and /var/local/ --> /var/local/
|
---|
| 525 | ;"Input: Path -- the path to convert
|
---|
| 526 | ;" NodeDiv: [OPTIONAL] -- the character that separates folders (e.g. "/")
|
---|
| 527 | ;" if not supplied, then default value is "/"
|
---|
| 528 | ;"Result: the converted/verified path.
|
---|
| 529 | ;
|
---|
| 530 | set Path=$get(Path)
|
---|
| 531 | set NodeDiv=$get(NodeDiv,"/")
|
---|
| 532 | new result set result=Path
|
---|
| 533 | if $extract(Path,$length(Path))'=NodeDiv do
|
---|
| 534 | . set result=Path_NodeDiv
|
---|
| 535 | ;
|
---|
| 536 | quit result
|
---|