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
|
---|