* SUBROUTINE StatPerson                                              
*//                                                                  
*====================================================================
*(                                                                   
*  ணࠬ, 뢠 ⨪                           
*  / ᠭ    ⠫     
*  -                                                          
*  - 栬                                                         
*   饬                                                         
*  -                                                        
*  -                                                             
* ணࠬ, ᯮ , ᮧ                           
* ணࠬ MakeStatScreen(Val.Stat)                             
*)                                                                   
*                                                                    
*  1 . - ᥣ  (।஢)                          
*  2 . -  ( 祭)                                       
*  3 . - ⮣   ( 祭)                              
*  4 . -  ( -祭, 祭 -  2 .)           
*  5 . - ⮣  栬 ( -祭, 祭 -  2 .) 
*                                                                    
*                                                                    
* () Dmitry Popkov, 2001, Moscow                                    
*====================================================================
  EQU AM TO CHAR(254)                                       
  EQU VM TO CHAR(253)                                       
  EQU SM TO CHAR(252)                                       
*                                                           
 NmPrg = "StatPerson"                                       
 Database.default = "liber"                                 
*                                                           
 Database = ""                                              
*                                                           
 GOSUB ReadTCLData            ;* 뢠   TCL     
 *!* GOSUB ShowProgHeader         ;* 뢮 蠯          
 GOSUB CheckParams            ;* ஢塞   
 *!* GOSUB ShowProgHeader         ;* 뢮 蠯          
*-----------------                                          
* 뢠 䠩                                           
*-----------------                                          
 OPEN Database:",PARAMETRE," TO FPARAMETRE                  
 OPEN Database:",IMPRIMANTE," TO FIMPRIMANTE                
 OPEN Database:",COMPTEUR," TO FCOMPTEUR                    
*------------------------------                             
* ⡨ࠥ  ⠫஢                             
*-------------------------------                            
  Lst.Catal = ""                                            
 PROMPT ""                                                  
 CRT "⡨ࠥ  ⠫஢   ":Database:" ...": 
  GOSUB SelectAllCatal                                      
 CRT " [":DCOUNT(Lst.Catal<1>,CHAR(253)):"] ":              
 CRT @(SYSTEM(2)-5):"o'k"                                   
  * 塞 ६ Lst.Catal                           
  Tmp.Lst = ""                                              
  Tmp.Lst = Lst.Catal                                       
  Lst.Catal = ""                                            
 *!*  Crt Tmp.Lst; In KEy                                   
*--------------------------------------                     
* । 짮⥫                       
*---------------------------------------                    
 CRT "    ⠫ ":                 
 CRT " * -   ":                              
  GOSUB GetInputValue; ID.Catal = Value                     
 BEGIN CASE                                                 
  CASE ID.Catal = "*"                                       
   Lst.Catal = Tmp.Lst  ;* ⮡                     
  CASE ID.Catal = ""                                        
   GOTO EndOfProg                                           
  CASE ID.Catal # ""                                        
   *-------------------------------------------             
   * ஢塞  䨪, ,                
   *--------------------------------------------            
    NPos = 0                                 
   FOR J=1 TO 3                              
    NPos = 0                                 
    LOCATE(ID.Catal,Tmp.Lst,J;NPos;"") THEN  
     Lst.Catal<1>  = Tmp.Lst<1,NPos>         
     Lst.Catal<2>  = Tmp.Lst<2,NPos>         
     Lst.Catal<3>  = Tmp.Lst<3,NPos>         
    END                                      
   NEXT J                                    
    IF Lst.Catal = "" THEN                   
     CRT "訡! ࠢ쭮  "
      GOTO EndOfProg                         
    END                                      
  CASE 1                                     
   GOTO EndOfProg                            
 END CASE                                    
 *-----------------------------------------  
 *   ᥬ ⠫ࠬ             
 *-----------------------------------------  
 NumLoop = 1                                 
SearchBIndex:                                
  FileLoc = Database:",LIVRE,"               
  BIndex = "a256"                            
  NumCatal = DCOUNT(Lst.Catal<1>,CHAR(253))  
 FOR I=1 TO NumCatal                                         
*!* CRT Lst.Catal<1,I>                                       
   ROOT FileLoc,BIndex TO BVal THEN                          
    *  , 饬 ...                            
     ReqStr = Lst.Catal<1,I> ;* ⥪饥          
     ChkStr = ReqStr                                         
    *                                                        
* debug                                                      
    KEY("C",BVal,ReqStr,FndID) THEN                          
      All.Doc = 0                                            
      ID.Stat = "STAT.":ChkStr                               
      Val.Stat = ""; Val.Stat<1> = 0                         
     LOOP                                                    
      *---------------------------------------               
      *  ᫥騩 B-                         
      *---------------------------------------               
                                                             
       KEY("N",BVal,ReqStr,FndID) ELSE                       
 *      CRT " ":Bindex:"   ᮧ, ᮧ ....": 
 *       EXECUTE "CREATE-INDEX ":FileLoc:" ":BIndex          
 *         NumLoop = NumLoop + 1                             
 *        GOTO SearchBIndex                                  
 *      CRT @(SYSTEM(2)-5):"o'k"                             
  *      EXIT                                                
     ChkStr = ""                                      
    END                                               
*                                                     
 *! CRT ReqStr<1,1,1>:" ":ChkStr; In ANY              
     WHILE ReqStr<1,1,1> = ChkStr AND NumLoop <= 3 DO 
      *---------------------------                    
      * ࠡ뢠 .                      
      *---------------------------                    
       Year = OCONV(ReqStr<1,1,2>,"DY")"R#4"          
       Month = OCONV(ReqStr<1,1,2>,"DM")"R#2"         
       Week = OCONV(ReqStr<1,1,2>,"DW")               
       Day  = OCONV(ReqStr<1,1,2>,"DD")               
*!*     CRT Year:" ":Month:" ":Week:" ":Day; IN ANY   
        *------------                                 
        *                                          
        *-------------                                
           NYPos = 0                                  
         LOCATE(Year,Val.Stat,2;NYPos;"AR") THEN      
          Val.Stat<3,NYPos> = Val.Stat<3,NYPos> + 1   
         END ELSE                                     
          Val.Stat<2,-1> = Year                       
          Val.Stat<3,-1> = 1                          
         END                                          
        *----------------                             
        *                                                            
        *----------------                                                 
         NMPos = 0                                                        
         LOCATE(Month,Val.Stat,4,NYPos;NMPos;"AR") THEN                   
          Val.Stat<5,NYPos,NMPos> = Val.Stat<5,NYPos,NMPos> + 1           
         END ELSE                                                         
          Val.Stat<4,NYPos,NMPos>  = Month                                
          Val.Stat<5,NYPos,NMPos>  = 1                                    
         END                                                              
       All.Doc = All.Doc + 1                                              
        Val.Stat<1> = All.Doc                                             
     REPEAT                                                               
   ***                                                                    
  IF Val.Stat<1> # 0 THEN                                                 
   NameCatal = ""                                                         
    IF Lst.Catal<2,I> # "" THEN                                           
     NameCatal = Lst.Catal<2,I>                                           
    END ELSE                                                              
     NameCatal = Lst.Catal<1,I>                                           
    END                                                                   
    *                                                                     
      WDth = 30                                                           
     MskNmCatal = WDth - LEN(All.Doc)- 3 - 1                              
    Val.Stat<1> = OCONV(NameCatal,"ML#":MskNmCatal):" ":("[":All.Doc:"]") 
    Val.Stat<1,2> = WDth                                            
     CALL MakeStatScreen(Val.Stat)  ;* 뢮   ࠭      
     GOSUB NextAction                                               
  END                                                               
   **                                                               
   WRITE Val.Stat ON FPARAMETRE,ID.Stat                             
    END ELSE                                                        
      *                                                    
    END                                                             
   END ELSE                                                         
    IF NumLoop < 2 THEN                                             
     *   ᮧ,   ᮧ                            
     CRT "訡!   ᮧ,   ᮧ. ":             
     CRT " ..."                                              
      EXECUTE "CREATE-INDEX ":FileLoc:" ":BIndex                    
      NumLoop = NumLoop + 1                                         
     GOTO SearchBIndex                                              
    END ELSE                                                        
     CRT " 쥧 訡!"                               
     CRT "஢  ᮧ    ᮢ "  
     CRT "    ࠧࠡ稪"                     
     GOTO EndOfProg                                                 
    END                                                             
   END                                                              
  NEXT I                                                 
*                                                        
GOTO EndOfProg                                           
*=======================================                 
*           SUBROUTINES                                  
*=======================================                 
ReadTCLData:                                             
*------------------------------------------------        
* ⠥ ࠬ c TCL                                 
*                                                        
* 㦥 ᯮ짮 㪢:                                
* b  -  ࠡ祩                            
*---------------------------------------------------     
  TCLBuff = ""                                           
 TCLREAD TCLBuff                                         
*                                                        
 FirstPos = INDEX(TCLBuff,NmPrg,1)                       
 TCLBuff = TCLBuff[FirstPos,LEN(TCLBuff)-FirstPos+1]     
*                                                        
 *--------------------------------                       
 *                                                       
 *-------------------------------                        
   NumPar = 1; TmpPar = ""                               
  LOOP                                                   
   TmpPar = FIELD(TCLBuff,"-",NumPar)                       
  WHILE TmpPar # "" DO                                      
    TmpPar = TRIM(TmpPar)                                   
     Action = OCONV(TmpPar[1,1],"MCL")                      
     Value  = TmpPar[2,LEN(TmpPar)-1]                       
   *-------------------------------                         
   * ᬮਬ ࠬ   ᮤন                      
   *------------------------------                          
   BEGIN CASE                                               
    CASE Action = "b"                 ;*      
     Database = Value                                       
    CASE Action = "?"                                       
     GOSUB Help_View                                        
    CASE 1                                                  
   END CASE                                                 
   NumPar = NumPar + 1                                      
  REPEAT                                                    
*                                                           
RETURN                                                      
*                                                           
Help_View:                                                  
*---------------------                                      
*                                                           
*----------------------                                     
 CRT "  ணࠬ StatPerson  ᬮ "           
 CRT "/䨪樨 ᪨   "          
 CRT " ॣ஢  ⥬ ⠫஢."                
 CRT                                                                   
 CRT "-㬮砭, ⨪ ஢   liber, "        
 CRT "롮 㣮  室  ணࠬ  祬 -b" 
 CRT "ਬ:"                                                         
 CRT "StaPerson -b_"                                           
 CRT                                                                   
  GOTO EndOfProg                                                       
RETURN                                                                 
*                                                                      
CheckParams:                                                           
*--------------------------                                            
* ஢塞 ࠬ                                                  
*---------------------------                                           
 IF Database = "" THEN Database = Database.default                     
RETURN                                                                 
*                                                                      
GetInputKey:                                                           
*----------------------                                                
*                                                            
*-----------------------                                               
  Key = ""                                                             
 LOOP                                                
  ECHO OFF                                           
    IN TmpKey                                        
  ECHO ON                                            
 WHILE SYSTEM(14) # 0 DO                             
  Key<-1> = TmpKey                                   
 REPEAT                                              
  Key<-1> = TmpKey                                   
RETURN                                               
*                                                    
GetInputValue:                                       
*-------------------------------------               
*                                                    
*  WVal -  ப                               
*  Value - 砥 ᫮, ப                  
*------------------------------------                
   Value = ""; Flg = 0                               
 LOOP                                                
 WHILE Flg = 0 DO                                    
   GOSUB GetInputKey                                 
  BEGIN CASE                                         
   CASE DCOUNT(Key,AM) > 1 ;*  ᯥ ᨬ     
   CASE Key = 8  ;* Backspace                        
    CRT @(-9):" ":@(-9):                             
    IF LEN(Value) > 0 THEN Value = Value[1,LEN(Value)-1]              
   CASE Key = 13 ;* Enter                                             
    Flg = 1                                                           
   CASE Key = 27 ;*   ணࠬ                                
    CRT; GOTO EndOfProg                                               
   CASE 1                                                             
    CRT CHAR(Key):                                                    
    Value= Value:CHAR(Key)                                            
  END CASE                                                            
 REPEAT                                                               
CRT                                                                   
RETURN                                                                
*                                                                     
*                                                                     
SelectAllCatal:                                                       
*--------------------------------                                     
* ᮧ ᯨ᮪ ⠫஢                                      
*--------------------------------                                     
  SelStr = 'SELECT ':Database:',PARAMETRE, WITH A0 = "CATALOGUEUR.]"' 
 EXECUTE SelStr CAPTURING Dummy                                       
*                                                                     
 Lst.Catal = ""; Num.Catal = 1                                        
  LOOP                                                                
   READNEXT ID.Catal ELSE EXIT                                        
  WHILE ID.Catal # "" DO                                               
   Lst.Catal<1,Num.Catal> = ID.Catal  ;* 䨪                
     Val.Catal = ""                                                    
    READ Val.Catal FROM FPARAMETRE,ID.Catal THEN                       
     Lst.Catal<2,Num.Catal> = Val.Catal<1> ;* ᠭ ⠫஢ 
     Lst.Catal<3,Num.Catal> = Val.Catal<3> ;*  ⠫஢     
    END                                                                
    Num.Catal = Num.Catal + 1                                          
  REPEAT                                                               
*!* CRT Lst.Catal                                                      
RETURN                                                                 
*                                                                      
NextAction:                                                            
 Mes = "(), 室(Esc)  த(Enter)"                   
 CRT @(INT((SYSTEM(2)-LEN(Mes))/2)):Mes:                               
  GOSUB GetInputValue                                                  
   Value = OCONV(Value,"MCU")                                          
  BEGIN CASE                                                           
   CASE Value = "" OR Value = "" OR Value = "G"                      
    CRT CHAR(27):"[5i"                                                 
     CALL MakeStatScreen(Val.Stat)  ;* 뢮   ࠭         
    CRT CHAR(27):"[4i"                                                 
   CASE 1                                                              
  END CASE                                                             
RETURN                                   
*======================================= 
EndOfProg:                               
 CRT "  "       
* RETURN ;* If It's SUBROUTINE           
 END    ;* If It's PROGRAM