Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: AICDKWL2

AICDKWL2.m

Go to the documentation of this file.
  1. AICDKWL2 ; IHS/OHPRD/ACC - PART 3 OF LOOKUP CONTROL PROGRAM FOR "AND"ING INVERTED SEARCH ;
  1. ;;4.0;AICD;;DEC 03, 2014;Build 7
  1. ; AICDKWCT,AICDREF,AICDREF2 ARE PASSED IN AND SHOULD NOT BE KILLED
  1. ; THE FOLLOWING ARE PASSED OUT AND SHOULD NOT BE KILLED:
  1. ; AICDADFN(),AICDAWRD(),AICDDFN(),AICDNUSE(),AICDNWDS,
  1. ; AICDPRTL(),AICDWORD()
  1. ;
  1. PREPSCH ; PREPARE FOR SEARCH BY BUILDING WORD/DFN TABLES
  1. S AICDNWDS=0
  1. G:$O(AICDWT(""))="" PREPSCHX
  1. S AICDNWS=^DD("KWIC")_"IN^OF^AN^IS^AS^AT^IF^IT^ON^OR^BY^"
  1. S AICDWD=""
  1. F AICDQ=0:0 S AICDWD=$O(AICDWT(AICDWD)) Q:AICDWD="" D WDCHK
  1. W:AICDASK&AICDNWDS " )",!
  1. PREPSCHX K AICDWT,AICDNWS,AICDWD,AICDQ
  1. K AICDEXAC,AICDPART,AICDSYN,AICDINCR
  1. Q
  1. ;
  1. WDCHK ; DETERMINE IF PARTIAL OR EXACT MATCH
  1. S AICDWSAV=AICDWD
  1. S (AICDISNT,AICDFXAC)=0
  1. RECHK I $E(AICDWD)="'" S AICDISNT=1,AICDWD=$E(AICDWD,2,255) G RECHK
  1. I $E(AICDWD)="~" S AICDFXAC=1,AICDWD=$E(AICDWD,2,255) G RECHK
  1. I AICDWD?1N.E!(AICDNWS[("^"_AICDWD_"^")) S AICDNUSE=AICDNUSE+1,AICDNUSE(AICDWD)="" G WDCHKX
  1. S AICDINCR=0,AICDSYN=$D(^AICDKWLC(AICDKWCT,1,"B",AICDWD))
  1. I 'AICDSYN D CKWD G WDCHKX
  1. S AICDWDTX=$O(^AICDKWLC(AICDKWCT,1,"B",AICDWD,0))
  1. S AICDWX=AICDWD,AICDWDSX=0 F AICDQ=0:0 S AICDWDSX=$O(^AICDKWLC(AICDKWCT,1,AICDWDTX,1,AICDWDSX)) Q:AICDWDSX="" S AICDWD=^AICDKWLC(AICDKWCT,1,AICDWDTX,1,AICDWDSX,0) D CKWD
  1. WDCHKX S AICDWD=AICDWSAV
  1. K AICDWSAV,AICDWX,AICDISNT,AICDFXAC,AICDWDTX,AICDWDSX
  1. K AICDI,AICDJ
  1. Q
  1. CKWD S AICDEXAC=$S($D(@AICDREF):1,1:0)
  1. S AICDWD2=$O(@AICDREF)
  1. S AICDPART=('AICDFXAC)&($L(AICDWD)>2)&($S($E(AICDWD2,1,$L(AICDWD))=AICDWD:1,1:0))
  1. I 'AICDEXAC,'AICDPART S AICDNUSE=AICDNUSE+1,AICDNUSE(AICDWD)="" K AICDWD2 Q
  1. CKNOT I AICDISNT S AICDINCX=AICDINCR,AICDNWDX=AICDNWDS,AICDINCR=1,AICDNWDS=0 D CKWD2 S AICDINCR=AICDINCX,AICDNWDS=AICDNWDX K AICDISNT,AICDINCX,AICDNWDX Q
  1. CKWD2 I AICDASK W:'AICDNWDS "(" W $S(AICDSYN&AICDINCR:"|",1:" ")_$S(AICDFXAC:"~",1:"")_$S(AICDISNT:"'",1:"")_AICDWD
  1. I 'AICDSYN,AICDEXAC,'AICDPART,'AICDISNT S AICDNWDS=AICDNWDS+1,AICDPRTL(AICDNWDS)=0,AICDWORD(AICDNWDS)=AICDWD,AICDDFN(AICDNWDS)=$O(@AICDREF2) Q
  1. S:'AICDINCR AICDNWDS=AICDNWDS+1,AICDPRTL(AICDNWDS)=1,AICDWORD(AICDNWDS)=AICDWD
  1. S AICDWD2=AICDWD
  1. S AICDN=0 S AICDJ="" F AICDQ=0:0 S AICDJ=$O(AICDAWRD(AICDNWDS,AICDJ)) Q:AICDJ="" S AICDN=AICDJ
  1. S AICDN=AICDN+1
  1. I AICDEXAC S AICDAWRD(AICDNWDS,AICDN)=AICDWD,AICDADFN(AICDNWDS,AICDN)=$O(@AICDREF2),AICDN=AICDN+1
  1. CKWD3 I 'AICDFXAC F AICDN=AICDN:1 S AICDWD=$O(@AICDREF) Q:$E(AICDWD,1,$L(AICDWD2))'=AICDWD2 S AICDAWRD(AICDNWDS,AICDN)=AICDWD,AICDADFN(AICDNWDS,AICDN)=$O(@AICDREF2) W:AICDASK "/",AICDWD
  1. S AICDWD=AICDWD2
  1. S AICDN=AICDN-1
  1. S AICDD=AICDADFN(AICDNWDS,1) F AICDI=1:1:AICDN S:AICDADFN(AICDNWDS,AICDI)<AICDD AICDD=AICDADFN(AICDNWDS,AICDI)
  1. S AICDDFN(AICDNWDS)=AICDD
  1. I 'AICDSYN,AICDN=1 S AICDPRTL(AICDNWDS)=0,AICDWORD(AICDNWDS)=AICDAWRD(AICDNWDS,1),AICDDFN(AICDNWDS)=AICDADFN(AICDNWDS,1)
  1. S AICDINCR=1
  1. K AICDN,AICDWD2,AICDD
  1. Q