| 1 | IBDFBKS ;ALB/CJM/AAS - Create form spec file for scanning ; 6-JUN-95 | 
|---|
| 2 | ;;3.0;AUTOMATED INFO COLLECTION SYS;**25**;APR 24, 1997 | 
|---|
| 3 | ; | 
|---|
| 4 | SCAN(IBFORMID) ; | 
|---|
| 5 | ; | 
|---|
| 6 | Q:'$G(IBFORMID) | 
|---|
| 7 | N IBLC,PERPAGE,PAGE,ROW,COL,PAGESIZE,SCAN,ARY,X,Y,ROWHT,ROWWIDTH,CONVERT,COUNT,LINE,TAG,NAME,XOFFSET,YOFFSET,NODE,FID,TYPE,XBUBOS,YBUBOS,COUNT,YHANDOS,FIELD,IEN,QLFR,PRIORPAG,END,LN,FIELDS,IBDFILL,IBDBKGND,XYSMALL | 
|---|
| 8 | ;XOFFSET,YOFFSET are the page margins (in decipoints) | 
|---|
| 9 | ;XBUBOS,YBUBOS are the offsets within the col,row of the bubbles | 
|---|
| 10 | ;YHANDOS is the offset for a handprint field within the row | 
|---|
| 11 | ; | 
|---|
| 12 | I '$D(DT) D DT^DICRW | 
|---|
| 13 | I $D(^IBD(359.2,IBFORMID,0)),$D(^IBD(357.95,IBFORMID,0)) S DIK="^IBD(359.2,",DA=IBFORMID D ^DIK | 
|---|
| 14 | I '$D(DT) D DT^DICRW | 
|---|
| 15 | S IBLC=0 | 
|---|
| 16 | D PARAM | 
|---|
| 17 | S CONVERT=.352778 ;for converting PCL decipoints to .1mm | 
|---|
| 18 | ; This number is actually 254/720 ... 254 PK points (.1 mm) = 1 inch | 
|---|
| 19 | ;                                     720 PCL5 decipoints = 1 inch | 
|---|
| 20 | ;     A PCL5 decipoint = .352778 PK points | 
|---|
| 21 | S SCAN="^TMP(""IBDF"",$J,""SCAN"",IBFORMID)" | 
|---|
| 22 | K @SCAN | 
|---|
| 23 | ; | 
|---|
| 24 | S FIELDS="^TMP(""IBDF"",$J,""FIELDS"")" | 
|---|
| 25 | K @FIELDS | 
|---|
| 26 | ; | 
|---|
| 27 | ;get form description | 
|---|
| 28 | S NODE=$G(^IBD(357.95,IBFORMID,0)) | 
|---|
| 29 | Q:NODE="" | 
|---|
| 30 | S PERPAGE=$P(NODE,"^",10) | 
|---|
| 31 | ;determine sizes and offsets - in terms of PCL decipoints | 
|---|
| 32 | S XOFFSET=180 ; This is 1/4 inch ... .25*720 PCL decipoints | 
|---|
| 33 | S YOFFSET=360 ; This is 1/2 inch ... .5*720 PCL decipoints | 
|---|
| 34 | ; rowht = # of PCL decipoints/line in height | 
|---|
| 35 | ;   80 lines (133 Col) = 720/8 lines per inch) | 
|---|
| 36 | ;   72 lines (96 Col) = 720/7.2 lines per inch) | 
|---|
| 37 | ;   60 lines (80 Col) = 720/6 lines per inch) | 
|---|
| 38 | S ROWHT=$P(NODE,"^",10),ROWHT=$S(ROWHT>72:90,ROWHT>60:100.0005,1:120) | 
|---|
| 39 | S COLWIDTH=$P(NODE,"^",9) | 
|---|
| 40 | S XBUBOS=$S(COLWIDTH>96:.5,COLWIDTH>80:.75,1:1) ;leaves offset in terms of fraction of column width - must still convert to decipoints | 
|---|
| 41 | S YBUBOS=$S(COLWIDTH>96:65,COLWIDTH>80:75,1:85) | 
|---|
| 42 | ; colwidth = # of PCL decipoints/character in width | 
|---|
| 43 | ;   133 Col = 720/16.67 char per inch | 
|---|
| 44 | ;   96 Col = 720/12 char per inch | 
|---|
| 45 | ;   80 Col = 720/10 char per inch | 
|---|
| 46 | S COLWIDTH=$S(COLWIDTH>96:(720/16.67),COLWIDTH>80:60,1:72) ;converted to decipoints | 
|---|
| 47 | S XBUBOS=XBUBOS*COLWIDTH ;converted to decipoints | 
|---|
| 48 | S YHANDOS=$S(ROWHT=90:0,ROWHT=100.0005:15,1:30) | 
|---|
| 49 | ; | 
|---|
| 50 | ;get the list of scannable pages | 
|---|
| 51 | S IEN=0 F  S IEN=$O(^IBD(357.95,IBFORMID,3,IEN)) Q:'IEN  S NODE=$G(^IBD(357.95,IBFORMID,3,IEN,0)) S:$P(NODE,"^",2) PAGE(+NODE)="" | 
|---|
| 52 | ; | 
|---|
| 53 | ; | 
|---|
| 54 | S PAGE=0 F  S PAGE=$O(PAGE(PAGE)) Q:'PAGE  D | 
|---|
| 55 | .; | 
|---|
| 56 | .;list all the bubbles | 
|---|
| 57 | .S ROW=((PAGE-1)*PERPAGE)-1 | 
|---|
| 58 | .S ARY="^IBD(357.95,""AC"","_IBFORMID_")" | 
|---|
| 59 | .F  S ROW=$O(@ARY@(ROW)) Q:ROW=""  D | 
|---|
| 60 | ..Q:(ROW\PERPAGE)+1'=PAGE | 
|---|
| 61 | ..S COL="" F  S COL=$O(@ARY@(ROW,COL)) Q:COL=""  S IEN=0 F  S IEN=$O(@ARY@(ROW,COL,IEN)) Q:'IEN  D | 
|---|
| 62 | ...S NODE=$G(^IBD(357.95,IBFORMID,1,IEN,0)) | 
|---|
| 63 | ...Q:($P(NODE,"^",6)="")!(($P(NODE,"^",4)="")&($P(NODE,"^",8)=""))!('$P(NODE,"^",3)) | 
|---|
| 64 | ...S NAME=$E($P(NODE,"^",5),1,17),QLFR=$P(NODE,"^",10) | 
|---|
| 65 | ...S TYPE=$P(NODE,"^",7) | 
|---|
| 66 | ...I (TYPE=0)!(TYPE=3) S:QLFR QLFR=$P($G(^IBD(357.98,QLFR,0)),"^",3) | 
|---|
| 67 | ...I (TYPE=1)!(TYPE=2) S:QLFR QLFR=$E($P($G(^IBD(357.98,QLFR,0)),"^"),1,12) | 
|---|
| 68 | ...I QLFR'="" S NAME=NAME_"("_QLFR_")" | 
|---|
| 69 | ...I QLFR="" S NAME=NAME_"-" | 
|---|
| 70 | ...S @SCAN@(PAGE,$P(NODE,"^",6),+$P(NODE,"^",7),COL,(ROW-((PAGE-1)*PERPAGE)),IEN)=$P(NODE,"^",3,12) | 
|---|
| 71 | ...S @SCAN@(PAGE,$P(NODE,"^",6))=NAME | 
|---|
| 72 | ...; | 
|---|
| 73 | .; | 
|---|
| 74 | .;list all the handprint fields | 
|---|
| 75 | .S ARY="^IBD(357.95,""AD"","_IBFORMID_")" | 
|---|
| 76 | .S ROW=((PAGE-1)*PERPAGE)-1 | 
|---|
| 77 | .F  S ROW=$O(@ARY@(ROW)) Q:ROW=""  D | 
|---|
| 78 | ..Q:(ROW\PERPAGE)+1'=PAGE | 
|---|
| 79 | ..S COL="" F  S COL=$O(@ARY@(ROW,COL)) Q:COL=""  S IEN=0 F  S IEN=$O(@ARY@(ROW,COL,IEN)) Q:'IEN  D | 
|---|
| 80 | ...S NODE=$G(^IBD(357.95,IBFORMID,2,IEN,0)) | 
|---|
| 81 | ...Q:($P(NODE,"^",8)="")!('$P(NODE,"^",4))!('$P(NODE,"^",15)) | 
|---|
| 82 | ...S @SCAN@(PAGE,$P(NODE,"^",8),6,COL,(ROW-((PAGE-1)*PERPAGE)),IEN)=$P(NODE,"^",3,17),NAME=$E($P(NODE,"^",5),1,15) | 
|---|
| 83 | ...I $P(NODE,"^",17) S NAME=NAME_"("_$P($G(^IBE(359.1,$P(NODE,"^",17),0)),"^")_")" | 
|---|
| 84 | ...S @SCAN@(PAGE,$P(NODE,"^",8))=NAME | 
|---|
| 85 | ; | 
|---|
| 86 | ;make form description | 
|---|
| 87 | F COUNT=1:1 S LINE=$T(FORM+COUNT^IBDFBKS1),TAG=$P(LINE,";;"),LINE=$P(LINE,";;",2) Q:TAG["QUIT"  D | 
|---|
| 88 | .N PG | 
|---|
| 89 | .D BLDARY("") | 
|---|
| 90 | .I TAG["NAME" S IBDFSA(IBLC)=IBDFSA(IBLC)_"  NAME = ""ENCOUNTER FORM "_IBFORMID_""";" Q | 
|---|
| 91 | .I TAG["SITE" S IBDFSA(IBLC)=IBDFSA(IBLC)_"'VA SITE = "_$P($$SITE^VASITE,"^",2),LINE="" | 
|---|
| 92 | .I TAG["PGCK" S IBDFSA(IBLC)=IBDFSA(IBLC)_"  else if ("  D  Q | 
|---|
| 93 | ..S PG=$O(PAGE(0)) | 
|---|
| 94 | ..S IBDFSA(IBLC)=IBDFSA(IBLC)_"(page!="_PG_")" | 
|---|
| 95 | ..F  S PG=$O(PAGE(PG)) Q:'PG  S IBDFSA(IBLC)=IBDFSA(IBLC)_"&&(page!="_PG_")" | 
|---|
| 96 | ..S IBDFSA(IBLC)=IBDFSA(IBLC)_"){" | 
|---|
| 97 | .S IBDFSA(IBLC)=IBDFSA(IBLC)_LINE | 
|---|
| 98 | .;D BLDARY(LINE) | 
|---|
| 99 | ; | 
|---|
| 100 | ;make fields | 
|---|
| 101 | S PAGE=0,FIELD=9,PRIORPG=$O(@SCAN@(0)),LN=0,BLN=0 | 
|---|
| 102 | F  S PAGE=$O(@SCAN@(PAGE)) D:PRIORPG'=PAGE PRINTEND^IBDFBKS3 Q:'PAGE  S FID="" F  S FID=$O(@SCAN@(PAGE,FID)) Q:FID=""  S TYPE=$O(@SCAN@(PAGE,FID,"")) Q:TYPE=""  D | 
|---|
| 103 | .S NAME=$G(@SCAN@(PAGE,FID)) | 
|---|
| 104 | .; | 
|---|
| 105 | .; -- 1 = EXACTLY ONE, 2 = AT MOST ONE (0 or 1) | 
|---|
| 106 | .I (TYPE=1)!(TYPE=2) S FIELD=FIELD+1,@FIELDS@(PAGE,FIELD)="" D | 
|---|
| 107 | ..I TYPE=1 S NAME=NAME_" (1 Required)" | 
|---|
| 108 | ..I TYPE=2 S NAME=NAME_" (1 Optional)" | 
|---|
| 109 | ..S NAME=$$NAME(NAME) | 
|---|
| 110 | ..D BUBBLE^IBDFBKS3 Q | 
|---|
| 111 | .; | 
|---|
| 112 | .I TYPE=6 D  Q | 
|---|
| 113 | ..N OLDNAME S OLDNAME=NAME | 
|---|
| 114 | ..S COL="" F  S COL=$O(@SCAN@(PAGE,FID,TYPE,COL)) Q:COL=""  S ROW="" F  S ROW=$O(@SCAN@(PAGE,FID,TYPE,COL,ROW)) Q:ROW=""  S IEN=0 F  S IEN=$O(@SCAN@(PAGE,FID,TYPE,COL,ROW,IEN)) Q:'IEN  D | 
|---|
| 115 | ...S NAME=$$NAME(OLDNAME) | 
|---|
| 116 | ...;S IBDLAST=0 I $O(@SCAN@(PAGE,FID,TYPE,COL,ROW))="",$O(@SCAN@(PAGE,FID,TYPE,COL))="",$O(@SCAN@(PAGE,FID,TYPE))="" S IBDLAST=1 | 
|---|
| 117 | ...S NODE=$G(@SCAN@(PAGE,FID,6,COL,ROW,IEN)) D HANDPRNT^IBDFBKS2(IEN,NAME,PAGE,ROW,COL,$P(NODE,"^",1),$P(NODE,"^",4),$P(NODE,"^",13),$P(NODE,"^",15),$P(NODE,"^",2)) | 
|---|
| 118 | .; | 
|---|
| 119 | .;0 = ANY NUMBER | 
|---|
| 120 | .;3 = AT LEAST ONE (1 or more) | 
|---|
| 121 | .I (TYPE=0)!(TYPE=3) D | 
|---|
| 122 | ..N OLDNAME | 
|---|
| 123 | ..;I TYPE=3 N FIRST,LAST S LAST=FIELD+1,LAST="" | 
|---|
| 124 | ..I TYPE=3 N FIRST,LAST S FIRST=FIELD+1,LAST="" | 
|---|
| 125 | ..S COL="" F  S COL=$O(@SCAN@(PAGE,FID,TYPE,COL)) Q:COL=""  S ROW="" F  S ROW=$O(@SCAN@(PAGE,FID,TYPE,COL,ROW)) Q:ROW=""  S IEN=$O(@SCAN@(PAGE,FID,TYPE,COL,ROW,0)) D:IEN | 
|---|
| 126 | ...S FIELD=FIELD+1,@FIELDS@(PAGE,FIELD)="",NODE=$G(@SCAN@(PAGE,FID,TYPE,COL,ROW,IEN)) | 
|---|
| 127 | ...S (NAME,OLDNAME)=$G(@SCAN@(PAGE,FID)) | 
|---|
| 128 | ...S NAME=$$NAME(NAME) | 
|---|
| 129 | ...I TYPE=3,$O(@SCAN@(PAGE,FID,TYPE,COL,ROW))="",($O(@SCAN@(PAGE,FID,TYPE,COL))="") S LAST=FIELD | 
|---|
| 130 | ...D BUBBLE^IBDFBKS3 | 
|---|
| 131 | ; | 
|---|
| 132 | END ; -- end of routine | 
|---|
| 133 | K @SCAN | 
|---|
| 134 | K @FIELDS | 
|---|
| 135 | K ^TMP("IBDF-NAME",$J) | 
|---|
| 136 | S ^IBD(359.2,IBFORMID,10,IBLC,0)=IBDFSA(IBLC) | 
|---|
| 137 | S ^IBD(359.2,IBFORMID,10,0)="^^"_IBLC_"^"_IBLC_"^"_DT_"^" | 
|---|
| 138 | Q | 
|---|
| 139 | ; | 
|---|
| 140 | NAME(NAME) ; | 
|---|
| 141 | ; -- make sure name is unique | 
|---|
| 142 | N X | 
|---|
| 143 | I (TYPE=0)!(TYPE=3) S NAME=NAME_" "_$P(NODE,"^",6) I TYPE=3 | 
|---|
| 144 | I TYPE=1,NAME'["Required" S NAME=NAME_" Required" | 
|---|
| 145 | S X=$G(^TMP("IBDF-NAME",$J,NAME))+1 | 
|---|
| 146 | S ^TMP("IBDF-NAME",$J,NAME)=+X | 
|---|
| 147 | I X>1 S NAME=NAME_"  #"_X | 
|---|
| 148 | Q NAME | 
|---|
| 149 | ; | 
|---|
| 150 | BLDARY(TEXT) ; | 
|---|
| 151 | ; -- builds the export array IBDFS(linecount) = text | 
|---|
| 152 | N DIC,DA,DINUM,X,Y,I,J,DLAYGO | 
|---|
| 153 | I IBLC=1 D | 
|---|
| 154 | .S DIC="^IBD(359.2,",DIC(0)="L",DLAYGO=359.2,(DINUM,X)=IBFORMID D FILE^DICN | 
|---|
| 155 | .Q | 
|---|
| 156 | ; | 
|---|
| 157 | I IBLC>0 D | 
|---|
| 158 | .S ^IBD(359.2,IBFORMID,10,IBLC,0)=IBDFSA(IBLC) | 
|---|
| 159 | .K IBDFSA(IBLC) | 
|---|
| 160 | .Q | 
|---|
| 161 | ; | 
|---|
| 162 | S IBLC=IBLC+1 | 
|---|
| 163 | S IBDFSA(IBLC)=$G(TEXT) | 
|---|
| 164 | Q | 
|---|
| 165 | ; | 
|---|
| 166 | WRITE(IBFORMID) ; | 
|---|
| 167 | N LINE S LINE=0 | 
|---|
| 168 | S X=0 X ^%ZOSF("RM") | 
|---|
| 169 | F  S LINE=$O(^IBD(359.2,IBFORMID,10,LINE))  Q:'LINE  W !,$G(^IBD(359.2,IBFORMID,10,LINE,0)) | 
|---|
| 170 | S X=80 X ^%ZOSF("RM") | 
|---|
| 171 | Q | 
|---|
| 172 | ; | 
|---|
| 173 | PARAM ; -- get values from parameter file | 
|---|
| 174 | ;    ibdfill  := % fill required | 
|---|
| 175 | ;    ibdbkgnd := % background expected | 
|---|
| 176 | S IBDFILL=$P($G(^IBD(357.09,1,0)),"^",8) I IBDFILL="" S IBDFILL=20 | 
|---|
| 177 | S IBDBKGND=$P($G(^IBD(357.09,1,0)),"^",9) I IBDBKGND="" S IBDBKGND=5 | 
|---|
| 178 | S XYSMALL=$P(^IBD(357.09,1,0),"^",12) I XYSMALL'=+XYSMALL S XYSMALL=4 | 
|---|
| 179 | Q | 
|---|