*	SUBROUTINE MakeINVScreen(Val.Stat)
*//
*====================================================================
* ணࠬ  7- 
* -/./////ᠭ
*
* (ணࠬ 뢮  ࠭ ࠭ 
* (  ࠥ묨 ⮫栬)
* 堭:
* ᫥ ᪠ ணࠬ MakeINScreen, ஢ 稥 
* MakeINVScreen  䠩 PARAMETRE ࠭ , ᫨  , 
* 뢠 ࠬ   , ᫨  ,  ᮧ
* ࠬ  㬮砭, 뢠  㪧   
*  ன ᯮ  뤠  ࠭.
*    㤮묨 砬 ᪠ ணࠬ, ᮢ
* ᭠砫 ந   箬 -?, ⨯ MakeINVScreen -?
* !  쭥襬  ஥筠     
* 㤠   ஥  室 ﭨ.
* ⮣  㬬, - ᥩ   ⥪饩 ࠭  ᥣ
*  ⥫! 祭     
* த⥫쭮 ६)
*====================================================================
* 
*   室: 
*	Val.Stat<1,i> - 뢮  ⮫ ଠ
*	Val.Stat<2,1,i> - ਭ ⮫  ࠭
*	Val.Stat<2,2,i> - ਭ ⮫  ਭ ()
*	Val.Stat<2,3,i> - ਭ ⮫  ਭ (졮)
*	Val.Stat<3,i> -  ⮫
*	Val.Stat<4,i> - ࠢ  ⮫
*====================================================================
* (c) Dmitry Popkov Moscow 2001,2002,2003
*====================================================================
  EQU AM TO CHAR(254)
  EQU VM TO CHAR(253)
  EQU SM TO CHAR(252)
*
 Database.default = "liber"
 NmSetFile = "PARAMETRE"
*
 NmPrg = "MakeINVScreen"
 PrTab = SPACE(9) ;* ᬥ襭 ⠡  訢 (9 ᨬ)
 PrStr = 0 ;* - ப  
 ScrStr = 0 ;* - ப  ࠭
 Database = ""
 NmSetRec = ""
 BINV = 0
 EINV = 0
 MaxStr = 0
*
 GOSUB ReadTCLData           ;* ⠥ ࠬ  TCl
 GOSUB CheckTCLData ;* ஢塞  
 GOSUB GetReportSet ;* ⠥ ࠬ 
  PROMPT ""
 GOSUB OpenFiles         ;* 뢠 䠩
 GOSUB GetINVList         ;* ᯨ᮪ ஢
*! GOSUB ShowLiner
 GOSUB MakeReport                                ;* 
 GOSUB DefnDirRep        ;* ।塞 ࠢ 
*
GOSUB Printer_ON          ;* 砥 
*
  MNs = 0 ;* ᨬ쭮 - ப  ⮫
 FOR S=1 TO DCOUNT(Val.Stat<2,NAtt>,SM)
  IF MNs < DCOUNT(Val.Stat<1,S>,SM) THEN MNs = DCOUNT(Val.Stat<1,S>,SM)
 NEXT S
*
GOSUB ShowAddInfo
GOSUB GetHeading         ;* 뢮 
*-------------------------
* 砫 뢮 ᯨ᪠
*------------------------
 BDa = 1
FOR I=1 TO DCOUNT(Lst<1>,VM)
 IF Act = "P" THEN CRT PrTab:
  **
   IF REM(I,MaxStr) = 0 THEN
	GOSUB GetFooting                               ;*  뢮 ᯨ᪠
	GOSUB ShowAllPrice
      BDa = I
     IF Act = "S" THEN GOSUB GetInputKey; CRT @(-1)
     IF Act = "P" THEN CRT;CRT
	GOSUB ShowAddInfo
	GOSUB GetHeading         ;* 뢮 
	IF Act = "P" THEN CRT PrTab:
   END 
  **
  CRT CHAR(179):
 FOR J=1 TO DCOUNT(Lst,AM)
  **
   TMsk = "M":Val.Stat<4,J>:"#":Val.Stat<2,NAtt,J>
   IF Lst<J,I> = "" THEN Lst<J,I> = " "
   CRT OCONV(Lst<J,I>,TMsk):
   IF J < DCOUNT(Lst,AM) THEN CRT CHAR(179):
  **
 NEXT J
 CRT CHAR(179)
NEXT I
*                            
  IF Act = "P" THEN CRT PrTab:
  GOSUB GetFooting                               ;*  뢮 ᯨ᪠
  GOSUB ShowAllPrice
  GOSUB Printer_OFF          ;* 뢠 
*
GOTO EndOfProg
*****************************************************
*                 
*****************************************************
ShowSepStr:
*---------------------
* 뢮 ப ࠧ⥫
*----------------------
 IF Act = "P" AND I < DCOUNT(Lst<1>,VM) THEN
* 뢮 ப ࠧ⥫
 CRT PrTab:CHAR(195):
FOR J=1 TO DCOUNT(Val.Stat<2,NAtt>,VM)
 CRT STR(CHAR(196),Val.Stat<2,NAtt,J>):
 IF J < DCOUNT(Val.Stat<2,NAtt>,VM) THEN CRT CHAR(197):
NEXT J
CRT CHAR(180)
 END
RETURN
*
ShowAddInfo:
*----------------------
* 뢮  ଠ樨
*----------------------
IF Act # "S" THEN
 CRT PrTab:SPACE(3):STR("_",15):" "
 CRT
END
RETURN
*
ShowAllPrice:
*---------------------------------
* 뢠 業
*---------------------------------
AllPrice = 0 ;
 PrAtt = 6; PrTab2 = 0
   IF Act = "P" THEN PrTab2 = LEN(PrTab)
   FOR K=1 TO (PrAtt-1)
	PrTab2 = PrTab2 + Val.Stat<2,1,K>
   NEXT K
	PrTab2 = PrTab2 + PrAtt
   **
   FOR K=BDa TO I
	IF Lst<PrAtt,K> # "" THEN
     AllPrice  = AllPrice + TRIM(Lst<PrAtt,K>)
	END
   NEXT K
* CRT "AllPrice=":AllPrice;IN NAY
Info5 = "⮣  㬬"
   CRT SPACE(PrTab2-LEN(Info5)-1):
   CRT Info5:" ":
   CRT OCONV(AllPrice,"M":Val.Stat<4,PrAtt>:"#":Val.Stat<2,NAtt,PrAtt>):
**
 CRT SPACE(3):BDa:"-":(I-1):"/":DCOUNT(Lst<1>,VM):
RETURN
*
ReadTCLData:
*---------------------------------------------
* ⠥ ࠬ c TCL
*  室:
*  - NmPrg -  ணࠬ
*  室:
*  - 㥬 ࠬ . 
*
* 㥬:
* ============
* 㦥 ᯮ짮 㪢:
*    b -  
*    f -  {,  ୨ ᠭ 
*    r -  ,  ன  ࠬ 
* (c) Dmitry Popkov, Moscow, 2001
*-------------------------------------------
  TCLBuff = ""
 TCLREAD TCLBuff
*
 FirstPos = INDEX(TCLBuff,NmPrg,1)
 TCLBuff = TCLBuff[FirstPos,LEN(TCLBuff)-FirstPos+1]
 TCLBuff = TRIM(TCLBuff)
*
 *--------------------------------
 *
 *-------------------------------
   NumPar = 2; TmpPar = ""
  LOOP
   TmpPar = FIELD(TCLBuff," ",NumPar)
  WHILE TmpPar # "" DO
     Action = OCONV(TmpPar[1,2],"MCL")
     Value                   = TmpPar[LEN(Action)+1,LEN(TmpPar)-LEN(Action)]
   *-------------------------------
   * ᬮਬ ࠬ   ᮤন
   *------------------------------
   BEGIN CASE
	CASE Action = "-b"                 ;* 
      Database = Value
	CASE Action = "-f"                 ;* 
      NmSetFile = Value
	CASE Action = "-r"                 ;* 
      NmSetRec = Value
	CASE Action = "-a"
      BINV = Value
	CASE Action = "-c"
      EINV = Value
	CASE Action = "-?"
      GOSUB HelpView
	CASE 1
      GOSUB HelpView
   END CASE
   NumPar = NumPar + 1
  REPEAT
*
RETURN
*
HelpView:
*-------------------------
*
*-------------------------
  Tab1 = SPACE(3)
 CRT
 CRT "⠪ ᪠ ணࠬ '.'"
 CRT "MakeINVScreen -ࠬ1 -ࠬ2"
 CRT " ࠬ  ਭ ᫥騥 祭:"
 CRT Tab1:"-b__,  㬮砭 ᯮ liber"
 CRT Tab1:"-砫_ , 易⥫ ࠬ"
 CRT Tab1:"-᪮_ , 易⥫ ࠬ"
 GOTO EndOfProg
RETURN
*
CheckTCLData:
*----------------------------------------
* ஢塞    TCL
*-----------------------------------------
 IF Database = "" THEN Database = Database.default
 IF NmSetRec = "" THEN NmSetRec = NmPrg
RETURN
*
DefnDirRep:
*-------------------------------------
* ।塞 ࠢ 뢮 
*--------------------------------------
 CRT "뢮  ࠭   ਭ  室 (//Esc) ":
   WVal = 1; GOSUB GetInputValue
  *!* INPUT Act,1; Act = OCONV(Act,"MCU")
  Act = Value; Act = OCONV(Act,"MCU")
  BEGIN CASE
   CASE Act = 0 
	GOTO EndOfProg
   CASE Act = "" OR Act = "" OR Act = '"' OR Act = "'"
	NAtt = 1; MaxWidth = SYSTEM(2);MaxStr = SYSTEM(3)-6
     Act = "S"
      GOSUB CheckWidthtable
	CASE Act = "" OR Act = "G" OR Act = ""
     Act = "P"
     CRT "ᯮ짮   졮 ᯮ (/) ":
     INPUT Orient,1
       Orient = OCONV(Orient,"MCU")
      BEGIN CASE
       CASE Orient = "R" OR Orient = "" OR Orient = ""
         NAtt = 2; MaxWidth = 80; MaxStr = 65
         PrScr = 16
       CASE Orient = "F" OR Orient = "" OR Orient = ""
         NAtt = 3; MaxWidth = 130; MaxStr = 65
         PrScr = 16
       CASE 1 
         CRT "訡!  ୮ 㪠 {ଠ  "
         GOTO EndofProg
      END CASE
   CASE 1
     CRT "訡! ன⢮ 뢮  ࠭  ࠭  ୮"
      GOTO EndOfProg
  END CASE
*
GetReportSet:
*-----------------------------------
*  ࠬ 
*------------------------------------
 OPEN Database:",":NmSetFile:"," TO FSetFile ELSE
  CRT "File ":Database:",":NmSetFile:", not opened"
   GOTO EndOfProg
 END
  **
CRT "- ⠥ ࠬ  ":
   Val.Stat = ""
  READ Val.Stat FROM FSetFile,NmSetRec ELSE
   CRT "<ᮧ>":" ":
 Val.Stat<1> = "":SM:"⨨":VM:".N":VM:"":VM:"":VM:"":VM:"":VM:"."
   ** 㪠뢠 ਭ ⮫殢
 Val.Stat<2,1> = "6":SM:"8":SM:"15":SM:"25":SM:"4":SM:"6":SM:"5"
 Val.Stat<2,2> = "6":SM:"8":SM:"15":SM:"25":SM:"4":SM:"6":SM:"5"
 Val.Stat<2,3> = "6":SM:"8":SM:"15":SM:"25":SM:"4":SM:"6":SM:"5"
   ** 㪠뢠  ⮫殢
 Val.Stat<3> = "1":VM:"2":VM:"3":VM:"4":VM:"5":VM:"6":VM:"7"
   ** 㪠뢠 ࠢ  ⮡
 Val.Stat<4> = "R":VM:"R":VM:"L":VM:"L":VM:"R":VM:"R":VM:"R"
  **
   WRITE Val.Stat ON FSetFile,NmSetRec
 END
 CRT @(SYSTEM(2)-5):"o'k"
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
*
ShowLiner:
*------------------------
* 뢮 
*------------------------
   FOR S=1 TO SYSTEM(2)
     CRT REM(I,10):
	NEXT S
   CRT
RETURN
*
OpenFiles:
*----------------------------------------
* 뢠 {, 室  ࠡ
*-----------------------------------------
 CRT "- 뢠 䠩   ":Database:" ":
  OPEN Database:",CODBAR," TO FCODBAR ELSE GOTO EndOfProg
  OPEN Database:",LIVRE," TO FLIVRE ELSE GOTO EndOfProg
  OPEN Database:",INVENT," TO FINVENT ELSE GOTO EndOfProg
 CRT @(SYSTEM(2)-5):"o'k"
RETURN
*
GetINVList:
*----------------------------------------------
*
*----------------------------------------------
 CRT "  .஢ "
 IF BINV = 0 THEN
  CRT "- 砫 . ":
  WVal = 7; GOSUB GetInputValue; BINV = Value
 END
 **
 IF EINV = 0 THEN
  CRT "-  .  ":
  WVal = 7; GOSUB GetInputValue; EINV = Value
 END
 **
  SrhStr = "SSELECT ":Database:",INVENT, "
 BEGIN CASE
  CASE BINV = "" AND EINV = ""
   CRT "訡!  . ஢  "; CRT
	GOTO EndOfProg
  CASE BINV # "" AND EINV = ""
	SrhStr = SrhStr:'WITH A0 >= "':BINV:'"'
  CASE EINV # "" AND BINV = ""
	SrhStr = SrhStr:'WITH A0 <= "':EINV:'"'
  CASE EINV < BINV
   CRT "訡!  .   砫쭮"; CRT
	GOTO EndOfProg
  CASE 1
	SrhStr = SrhStr:'WITH A0 >= "':BINV:'" AND WITH A0 <= "':EINV:'"'
 END CASE
   CRT "- ந ⡮ ᥩ ":
  SrhStr = SrhStr:" BY A0"
  EXECUTE SrhStr CAPTURING Dummy    
   IF SYSTEM(11) = 0 THEN
     CRT @(SYSTEM(2)-6):"訡"; CRT; CRT SPACE(4):
     CRT "! ᥩ  㪠   㦥"; CRT
      GOTO EndOfProg
   END
   CRT "[":SYSTEM(11):"] ":
   CRT @(SYSTEM(2)-5):"o'k"
RETURN
*
CheckWidthTable:
*-------------------------------
* ஢塞   ⠡
*--------------------------------
      TWidth=0
       FOR J=1 TO DCOUNT(Val.Stat<2,NAtt>,SM)
         TWidth = TWidth + Val.Stat<2,NAtt,J>
       NEXT J
       TWidth = TWidth + J + 1
      *!
       IF TWidth > MaxWidth THEN
         CRT "!   ⮫殢 ॢ蠥 ਭ ࠭"
         GOTO EndOfProg
       END
     *!
RETURN
*
MakeReport:
*-------------------------
* ⮢ ᯨ᮪
*-------------------------
 CRT "-  ⮢ ᯨ᮪ ":BINV:"-":EINV:" ":
  Lst = ""; NumElm = 1
 LOOP
   READNEXT INV.ID ELSE EXIT
	*
 WHILE INV.ID # "" DO
	Val.INV = ""
  READ Val.INV FROM FINVENT,INV.ID THEN
	Val.CODB = ""; Price = 0
   READ Val.CODB FROM FCODBAR,Val.INV<1,1> THEN
     Val.LIVRE =""
      Price = Val.CODB<4,1,3>
	READ Val.LIVRE FROM FLIVRE,Val.CODB<1> THEN
      Lst<1,NumElm> = ""
      Lst<2,NumElm> = INV.ID
      Lst<3,NumElm> = Val.LIVRE<42>
      Lst<4,NumElm> = Val.LIVRE<1>
       * 181 .  -  
      Lst<5,NumElm> = OCONV(Val.LIVRE<181,1,1>,"DY")
       * 137 .            - 業 ஧筠
      IF Price = 0 THEN Lst<5,NumElm> = OCONV(Val.LIVRE<137,1,1>,"MR2,")
      Lst<6,NumElm> = Price
      Lst<7,NumElm> = ""
	END
   END
  END
  NumElm = NumElm + 1
 REPEAT
CRT DCOUNT(Lst<1>,VM):" ":
CRT @(SYSTEM(2)-5):"o'k"
RETURN
*
GetHeading:
*-----------------------
* ࢠ ப 
*-----------------------
 IF Act = "P" THEN CRT PrTab:
 CRT CHAR(218):
  TMax = DCOUNT(Val.Stat<2,NAtt>,SM)
 FOR S=1 TO TMax
  CRT STR(CHAR(196),Val.Stat<2,NAtt,S>):
  IF S < TMax THEN CRT "":
 NEXT S
 CRT CHAR(191)
*-------------------------------
* ᫥ ப() 
*-------------------------------
  FOR S1=1 TO MNs
   IF Act = "P" THEN CRT PrTab:
   CRT CHAR(179):
   TMax = DCOUNT(Val.Stat<2,NAtt>,SM)
   FOR S2=1 TO TMax
	TMsk = "M":Val.Stat<4,S2>:"#":Val.Stat<2,NAtt,S2>
	IF Val.Stat<1,S2,S1> = "" THEN Val.Stat<1,S2,S1> = " "
     CRT OCONV(Val.Stat<1,S2,S1>,TMsk):
	IF S2 < TMax THEN CRT CHAR(179):
   NEXT S2
     CRT CHAR(179)
 NEXT S1
*
GOTO HeadStr2
*--------------------------
* ᫥ 
*---------------------------
 IF Act = "P" THEN CRT PrTab:
 CRT CHAR(195):
  TMax = DCOUNT(Val.Stat<2,NAtt>,SM)
 FOR I=1 TO TMax
  CRT STR(CHAR(196),Val.Stat<2,NAtt,I>):
  IF I < TMax THEN CRT CHAR(197):
 NEXT I
 CRT CHAR(180)
*--------------------------
* ।᫥ 
*---------------------------
 IF Act = "P" THEN CRT PrTab:
 CRT CHAR(179):
  TMax = DCOUNT(Val.Stat<2,NAtt>,SM)
 FOR I=1 TO TMax
   PrSym1 = INT((Val.Stat<2,NAtt,I>-LEN(Val.Stat<3,I>))/2)
   PrSym2 = Val.Stat<2,NAtt,I>-PrSym1-LEN(Val.Stat<3,I>)
	CRT SPACE(PrSym1):Val.Stat<3,I>:SPACE(PrSym2):
  IF I < TMax THEN CRT CHAR(179):
 NEXT I
 CRT CHAR(179)
HeadStr2:
*--------------------------
* ᫥ 
*---------------------------
 IF Act = "P" THEN CRT PrTab:
 CRT CHAR(195):
  TMax = DCOUNT(Val.Stat<2,NAtt>,SM)
 FOR S=1 TO TMax
  CRT STR(CHAR(196),Val.Stat<2,NAtt,S>):
  IF S < TMax THEN CRT CHAR(197):
 NEXT S
 CRT CHAR(180)
RETURN
*
GetFooting:
*--------------------------------
* ᫥ 窠  ⠡
*---------------------------------
*IF Act = "P" THEN CRT PrTab:
 CRT CHAR(192):
  TMax = DCOUNT(Val.Stat<2,NAtt>,SM)
 FOR S=1 TO TMax
  CRT STR(CHAR(196),Val.Stat<2,NAtt,S>):
  IF S < TMax THEN CRT CHAR(193):
 NEXT S
 CRT CHAR(217):
RETURN
*
Printer_ON:
*------------------------------
* 砥  ()
*------------------------------
 BEGIN CASE
   CASE Act = "S"
	CRT @(-1)
   CASE Act = "P"
	CRT CHAR(27):"[5i"
   CASE 1
 END CASE
RETURN
*
Printer_OFF:
*------------------------------
* 몫砥  ()
*------------------------------
 BEGIN CASE
   CASE Act = "P"
	CRT CHAR(27):"[4i"       ;* 
   CASE 1
 END CASE
RETURN
*****************************************************
*                 SUBROUTINES
*****************************************************
EndOfProg:
 CRT
*  CRT "  "
* RETURN  ;* If It's SUBROUTINE
  END     ;* If It's PROGRAMM
