| 1 | TMGDBAP2 ;TMG/kst/Barcode Interface to Linux ;12/20/07
 | 
|---|
| 2 |          ;;1.0;TMG-LIB;**1**;12/20/07
 | 
|---|
| 3 | 
 | 
|---|
| 4 | 
 | 
|---|
| 5 |  ;"=======================================================================
 | 
|---|
| 6 |  ;" API -- Public Functions.
 | 
|---|
| 7 |  ;"=======================================================================
 | 
|---|
| 8 |  ;"$$MAKEBC^TMGBARC(Message) -- shell to Linux, to create barcode image.
 | 
|---|
| 9 |  ;"$$READBC^TMGBARC(FPathName) -- shell to Linux, to read barcode image.
 | 
|---|
| 10 | 
 | 
|---|
| 11 |  ;"=======================================================================
 | 
|---|
| 12 |  ;"PRIVATE API FUNCTIONS
 | 
|---|
| 13 |  ;"=======================================================================
 | 
|---|
| 14 |  ;"Test
 | 
|---|
| 15 | 
 | 
|---|
| 16 |  ;"=======================================================================
 | 
|---|
| 17 | 
 | 
|---|
| 18 | 
 | 
|---|
| 19 | MAKEBC(Message,Option)
 | 
|---|
| 20 |         ;"Purpose: to shell out to Linux, and call dmtxwrite to create
 | 
|---|
| 21 |         ;"         the barcode image.
 | 
|---|
| 22 |         ;"Input: Message -- the text to be encode in the barcode
 | 
|---|
| 23 |         ;"                 Note: the barcode function may limit what type of chars
 | 
|---|
| 24 |         ;"                 can be put it, and how long. (explore more later...)
 | 
|---|
| 25 |         ;"       Option -- PASS BY REFERENCE.  Array that may hold optional
 | 
|---|
| 26 |         ;"                 settings, as follows:  Default value is "png"
 | 
|---|
| 27 |         ;"                 Option("IMAGE TYPE")="jpg" <-- output is desired in .jpg format
 | 
|---|
| 28 |         ;"Output: Returns filename, on host file system, of created image, or "" if error
 | 
|---|
| 29 |         ;"
 | 
|---|
| 30 |         ;"NOTE: dmtxwrite must be installed on linux host.
 | 
|---|
| 31 |         ;"      I found source code here:
 | 
|---|
| 32 |         ;"      http://sourceforge.net/projects/libdmtx/
 | 
|---|
| 33 |         ;"      After installing (./configure --> make --> make install etc), I
 | 
|---|
| 34 |         ;"        copied dmtxread and dmtxwrite, which were found in the
 | 
|---|
| 35 |         ;"        (installdir)/util/dmtxread/.libs and (installdir)/util/dmtxwrite/.libs
 | 
|---|
| 36 |         ;"        folders, into a folder on the system path.  I chose /usr/bin/
 | 
|---|
| 37 |         ;"      Also, to achieve compile of above, I had to install required libs.
 | 
|---|
| 38 |         ;"      See notes included with source code.
 | 
|---|
| 39 | 
 | 
|---|
| 40 |         new result set result=""
 | 
|---|
| 41 |         new msgFName set msgFName=$$UNIQUE^%ZISUTL("/tmp/msg.txt")
 | 
|---|
| 42 |         new imageFName set imageFName=$$UNIQUE^%ZISUTL("/tmp/barcode.png")
 | 
|---|
| 43 |         new imageType set imageType=$$LOW^XLFSTR($get(OPTION("IMAGE TYPE"),"png"))
 | 
|---|
| 44 | 
 | 
|---|
| 45 |         ;"Write Message to host file .txt file
 | 
|---|
| 46 |         new %ZIS,IOP,POP
 | 
|---|
| 47 |         set %ZIS("HFSNAME")=msgFName
 | 
|---|
| 48 |         set IOP="HFS"
 | 
|---|
| 49 |         do ^%ZIS  ;"standard device call
 | 
|---|
| 50 |         if POP goto MBCDone
 | 
|---|
| 51 |         use IO
 | 
|---|
| 52 |         write Message
 | 
|---|
| 53 |         do ^%ZISC  ;"close device
 | 
|---|
| 54 | 
 | 
|---|
| 55 |         ;"Setup and launch linux command to execute dmtxwrite
 | 
|---|
| 56 |         ;"Note: dmtxwrite only makes .png format images
 | 
|---|
| 57 |         new CmdStr
 | 
|---|
| 58 |         set CmdStr="cat "_msgFName_" | dmtxwrite -o "_imageFName
 | 
|---|
| 59 |         do
 | 
|---|
| 60 |         . new $ETRAP,$ZTRAP
 | 
|---|
| 61 |         . set $ETRAP="S $ECODE="""""
 | 
|---|
| 62 |         . zsystem CmdStr  ;"Launch command
 | 
|---|
| 63 | 
 | 
|---|
| 64 |         ;"get result of execution. (low byte only)  -- if wanted
 | 
|---|
| 65 |         new CmdResult
 | 
|---|
| 66 |         set CmdResult=$ZSYSTEM&255
 | 
|---|
| 67 |         if CmdResult'=0 goto MBCDone
 | 
|---|
| 68 | 
 | 
|---|
| 69 |         ;"No error, so successful
 | 
|---|
| 70 | 
 | 
|---|
| 71 |         ;"Convert to specified image type, if needed
 | 
|---|
| 72 |         if imageType'="png" set imageFName=$$Convert^TMGKERNL(imageFName,imageType)
 | 
|---|
| 73 | 
 | 
|---|
| 74 |         set result=imageFName
 | 
|---|
| 75 | 
 | 
|---|
| 76 |         ;"Delete Message .txt file
 | 
|---|
| 77 |         new FName,FPath,FileSpec
 | 
|---|
| 78 |         do SplitFNamePath^TMGIOUTL(msgFName,.FPath,.FName,"/")
 | 
|---|
| 79 |         set FileSpec(FName)=""
 | 
|---|
| 80 |         new temp set temp=$$DEL^%ZISH(FPath,$name(FileSpec))
 | 
|---|
| 81 | 
 | 
|---|
| 82 | MBCDone
 | 
|---|
| 83 |         quit result
 | 
|---|
| 84 | 
 | 
|---|
| 85 | 
 | 
|---|
| 86 | READBC(FPathName)
 | 
|---|
| 87 |         ;"Purpose: to shell out to Linux, and call dmtxread to read a
 | 
|---|
| 88 |         ;"         barcode image.
 | 
|---|
| 89 |         ;"Input: FPathName -- valid host file name of image to be decoded.
 | 
|---|
| 90 |         ;"Output: Returns message stored in barcode, or "" if problem
 | 
|---|
| 91 |         ;"
 | 
|---|
| 92 |         ;"NOTE: dmtxread must be installed on linux host.
 | 
|---|
| 93 |         ;"      I found source code here:
 | 
|---|
| 94 |         ;"      http://sourceforge.net/projects/libdmtx/
 | 
|---|
| 95 |         ;"      After installing (./configure --> make --> make install), I
 | 
|---|
| 96 |         ;"        copied dmtxread and dmtxwrite, which were found in the
 | 
|---|
| 97 |         ;"        (installdir)/util/dmtxread/.libs and (installdir)/util/dmtxwrite/.libs
 | 
|---|
| 98 |         ;"        folders, into a folder on the system path.  I chose /usr/bin/
 | 
|---|
| 99 |         ;"      Also, to achieve compile of above, I had to install required libs.
 | 
|---|
| 100 |         ;"      See notes included with source code.
 | 
|---|
| 101 | 
 | 
|---|
| 102 |         new result set result=""
 | 
|---|
| 103 | 
 | 
|---|
| 104 |         new msgFName set msgFName=$$UNIQUE^%ZISUTL("/tmp/msg.txt")
 | 
|---|
| 105 |         new FName,FPath,FileSpec
 | 
|---|
| 106 |         do SplitFNamePath^TMGIOUTL(msgFName,.FPath,.FName,"/")
 | 
|---|
| 107 |         set FileSpec(FName)=""
 | 
|---|
| 108 | 
 | 
|---|
| 109 |         ;"Setup and launch linux command to execute dmtxwrite
 | 
|---|
| 110 |         new CmdStr
 | 
|---|
| 111 |         set CmdStr="dmtxread -g 32 "_FPathName_" >> "_msgFName
 | 
|---|
| 112 |         ;"Add a leading filler character to prevent possible read error
 | 
|---|
| 113 |         ;"from an empty file.
 | 
|---|
| 114 |         set CmdStr="echo ""#"" > "_msgFName_";"_CmdStr
 | 
|---|
| 115 |         do
 | 
|---|
| 116 |         . zsystem CmdStr  ;"Launch command
 | 
|---|
| 117 | 
 | 
|---|
| 118 |         ;"get result of execution. (low byte only)  -- if wanted
 | 
|---|
| 119 |         new CmdResult set CmdResult=$ZSYSTEM&255
 | 
|---|
| 120 |         if CmdResult'=0 goto RBCDone
 | 
|---|
| 121 | 
 | 
|---|
| 122 |         set ^TMG("TMP","BARCODE","LOG")="5d"  ;"temp
 | 
|---|
| 123 | 
 | 
|---|
| 124 |         new resultArray
 | 
|---|
| 125 |         if $$FTG^%ZISH(FPath,FName,"resultArray(0)",1)=0 do  goto RBCDone
 | 
|---|
| 126 |         ;"First line should be just '#' (filler character)
 | 
|---|
| 127 |         ;"Second line should hold answer
 | 
|---|
| 128 |         set result=$get(resultArray(1))
 | 
|---|
| 129 | 
 | 
|---|
| 130 |         merge ^TMG("TMP","BARCODE","RESULT FILE")=resultArray
 | 
|---|
| 131 | 
 | 
|---|
| 132 |         ;"Read Message from host file .txt file
 | 
|---|
| 133 |         ;"do OPEN^%ZISH("FILE1",FPath,FName,"R")
 | 
|---|
| 134 |         ;"if POP goto RBCDone
 | 
|---|
| 135 |         ;"do
 | 
|---|
| 136 |         ;". use IO
 | 
|---|
| 137 |         ;". read result
 | 
|---|
| 138 |         ;"do CLOSE^%ZISH("FILE1")
 | 
|---|
| 139 |         ;"new resultArray
 | 
|---|
| 140 |         ;"do CleaveToArray^TMGSTUTL(result,$char(10),.resultArray)
 | 
|---|
| 141 |         ;"for now I am only going to pay attention to first line...
 | 
|---|
| 142 |         ;"set result=$get(resultArray(1))
 | 
|---|
| 143 |         ;"set result=$extract(result,2,999) ;"remove 1st character which is filler '#'
 | 
|---|
| 144 | 
 | 
|---|
| 145 | 
 | 
|---|
| 146 |         ;"Delete Message .txt file
 | 
|---|
| 147 |         ;"TEMP!!! DELETE LATER...
 | 
|---|
| 148 |         new temp set temp=$$DEL^%ZISH(FPath,$name(FileSpec))
 | 
|---|
| 149 | 
 | 
|---|
| 150 | RBCDone
 | 
|---|
| 151 |         quit result
 | 
|---|
| 152 | 
 | 
|---|
| 153 | 
 | 
|---|
| 154 | Test
 | 
|---|
| 155 |         new msg,file
 | 
|---|
| 156 |         set msg="This is a test message"
 | 
|---|
| 157 |         write "Creating barcode...",!
 | 
|---|
| 158 |         set file=$$MAKEBC(msg)
 | 
|---|
| 159 |         write "reading barcode....",!,!
 | 
|---|
| 160 |         write $$READBC(file),!
 | 
|---|
| 161 | 
 | 
|---|
| 162 |         ;"delete temp image file
 | 
|---|
| 163 |         new FName,FPath,FileSpec
 | 
|---|
| 164 |         do SplitFNamePath^TMGIOUTL(file,.FPath,.FName,"/")
 | 
|---|
| 165 |         set FileSpec(FName)=""
 | 
|---|
| 166 |         new temp set temp=$$DEL^%ZISH(FPath,"FileSpec")
 | 
|---|
| 167 | 
 | 
|---|
| 168 |         quit
 | 
|---|