| 1 | GECSUNUM ;WISC/RFJ-get next counter number                          ;01 Nov 93
 | 
|---|
| 2 |  ;;2.0;GCS;**34**;MAR 14, 1995
 | 
|---|
| 3 |  Q
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | COUNTER(GECSNAME) ;  return next counter number
 | 
|---|
| 7 |  ;  gecsname=station-batch type-fiscal year
 | 
|---|
| 8 |  ;  example for fms: 460-FMS:MO-94
 | 
|---|
| 9 |  ;  return next counter number
 | 
|---|
| 10 |  I $L($G(GECSNAME))<10!($L($G(GECSNAME))>20) Q "invalid format for "_$G(GECSNAME)
 | 
|---|
| 11 |  N %,DA
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 |  S DA=+$O(^GECS(2101.5,"B",GECSNAME,0))
 | 
|---|
| 14 |  I 'DA D
 | 
|---|
| 15 |  .   ;  add entry to file
 | 
|---|
| 16 |  .   L +^GECS(2101.5,0)
 | 
|---|
| 17 |  .   ;  check to make sure another job did not add entry between locks
 | 
|---|
| 18 |  .   S DA=+$O(^GECS(2101.5,"B",GECSNAME,0)) I DA Q
 | 
|---|
| 19 |  .   S %=^GECS(2101.5,0)
 | 
|---|
| 20 |  .   F DA=$P(%,"^",3)+1:1 Q:'$D(^GECS(2101.5,DA))
 | 
|---|
| 21 |  .   S ^GECS(2101.5,DA,0)=GECSNAME_"^0"
 | 
|---|
| 22 |  .   S ^GECS(2101.5,"B",GECSNAME,DA)=""
 | 
|---|
| 23 |  .   S $P(%,"^",3)=DA,$P(%,"^",4)=$P(%,"^",4)+1,^GECS(2101.5,0)=%
 | 
|---|
| 24 |  .   L -^GECS(2101.5,0)
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 |  L +^GECS(2101.5,DA)
 | 
|---|
| 27 |  S %=$P(^GECS(2101.5,DA,0),"^",2)+1
 | 
|---|
| 28 |  I %>9999999 S %=1
 | 
|---|
| 29 |  I %=0 S %=1
 | 
|---|
| 30 |  S $P(^GECS(2101.5,DA,0),"^",2)=%
 | 
|---|
| 31 |  L -^GECS(2101.5,DA)
 | 
|---|
| 32 |  Q %
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 | ACOUNTER(GECSNAME) ;  return next alphanumeric counter number
 | 
|---|
| 35 |  ;  gecsname=station-batch type-fiscal year
 | 
|---|
| 36 |  ;  example for fms: 460-FMS:MO-94
 | 
|---|
| 37 |  ;  return next alphanumeric counter number
 | 
|---|
| 38 |  I $L($G(GECSNAME))<10!($L($G(GECSNAME))>20) Q "invalid format for "_$G(GECSNAME)
 | 
|---|
| 39 |  N %,DA,GECALPHA,GECCNT,X1,X2,X3
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 |  S GECALPHA="ABCDEFGHIJKLMNPQRSTUVWXYZA"
 | 
|---|
| 42 |  S DA=+$O(^GECS(2101.5,"B",GECSNAME,0))
 | 
|---|
| 43 |  I 'DA D
 | 
|---|
| 44 |  .   ;  add entry to file
 | 
|---|
| 45 |  .   L +^GECS(2101.5,0)
 | 
|---|
| 46 |  .   ;  check to make sure another job did not add entry between locks
 | 
|---|
| 47 |  .   S DA=+$O(^GECS(2101.5,"B",GECSNAME,0)) I DA Q
 | 
|---|
| 48 |  .   S %=^GECS(2101.5,0)
 | 
|---|
| 49 |  .   F DA=$P(%,"^",3)+1:1 Q:'$D(^GECS(2101.5,DA))
 | 
|---|
| 50 |  .   S ^GECS(2101.5,DA,0)=GECSNAME_"^0"
 | 
|---|
| 51 |  .   S ^GECS(2101.5,"B",GECSNAME,DA)=""
 | 
|---|
| 52 |  .   S $P(%,"^",3)=DA,$P(%,"^",4)=$P(%,"^",4)+1,^GECS(2101.5,0)=%
 | 
|---|
| 53 |  .   L -^GECS(2101.5,0)
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 |  L +^GECS(2101.5,DA)
 | 
|---|
| 56 |  S %=$P(^GECS(2101.5,DA,0),"^",2)
 | 
|---|
| 57 |  I %?1N2A D  G ACNTEND
 | 
|---|
| 58 |  . I %="9ZZ"!(%="9zz") S %=1 Q  ;Highest value reached, start over at 1
 | 
|---|
| 59 |  . S X3=$E(%,3)
 | 
|---|
| 60 |  . S X2=$E(%,2)
 | 
|---|
| 61 |  . S X1=$E(%,1)
 | 
|---|
| 62 |  . S X3=$$ALPHA(X3) ;increment 3rd digit alpha
 | 
|---|
| 63 |  . I X3="A" D  ;if 3rd digit alpha equal "A", then increment 2nd digit alpha
 | 
|---|
| 64 |  .. S X2=$$ALPHA(X2) ; increment 2nd digit alpha
 | 
|---|
| 65 |  .. I X2="A" S X1=X1+1 ;if 2nd digit alpha equal "A", then increase 1st digit number
 | 
|---|
| 66 |  . S %=X1_X2_X3
 | 
|---|
| 67 |  I %?2N1A D  G ACNTEND
 | 
|---|
| 68 |  . I %="99Z"!(%="99z") S %="0AA" Q  ;Highest value reached, begin using alpha for 2nd digit
 | 
|---|
| 69 |  . S X3=$E(%,3)
 | 
|---|
| 70 |  . S GECCNT=$E(%,1,2)+1 ; increment number by 1
 | 
|---|
| 71 |  . I GECCNT>99 S GECCNT="00" D  ;reset cnt to zero and increment 3rd digit alpha
 | 
|---|
| 72 |  .. S X3=$$ALPHA(X3) ;increment 3rd digit alpha
 | 
|---|
| 73 |  . I $L(GECCNT)=1 S GECCNT="0"_GECCNT
 | 
|---|
| 74 |  . S %=GECCNT_X3
 | 
|---|
| 75 |  S %=%+1
 | 
|---|
| 76 |  I %>999 S %="00A" ;Highest all numeric value reached, begin using alpha as 3rd digit
 | 
|---|
| 77 | ACNTEND S $P(^GECS(2101.5,DA,0),"^",2)=%
 | 
|---|
| 78 |  L -^GECS(2101.5,DA)
 | 
|---|
| 79 |  Q %
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 | ALPHA(A) ;Increment alpha character to next letter in the alphabet
 | 
|---|
| 82 |  ; A = Any letter in the alphabet except O to prevent confusion with zero
 | 
|---|
| 83 |  N X,Y
 | 
|---|
| 84 |  I A'?1A!(A="") Q "Z" ;when in doubt return "Z"
 | 
|---|
| 85 |  S X=A X ^%ZOSF("UPPERCASE") S A=Y
 | 
|---|
| 86 |  I A="O" Q "P"
 | 
|---|
| 87 |  S A=$E(GECALPHA,$F(GECALPHA,A))
 | 
|---|
| 88 |  Q A
 | 
|---|