.CM *ID* VCT44    VDN      changed on 1992-03-18-09.42.15 by CARSTEN   *
.ad 8
.bm 8
.fm 4
.bt $Copyright by   Software AG, 1996$$Page %$
.tm 12
.hm 6
.hs 3
.tt 1 $SQL$Project Distributed Database System$VCT44$
.tt 2 $$$
.tt 3 $Zabach$Miniscript Filehandling$1996-11-14$
***********************************************************
.nf


    ========== licence begin LGPL
    Copyright (C) 2002 SAP AG

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    ========== licence end

.fo
.nf
.sp
Module  : Miniscript_Filehandling
=========
.sp
Purpose : Filehandling
.CM *-END-* purpose -------------------------------------
.sp
.cp 3
Define  :
 
        VAR
              c44errfile        : tsp_int4;
              c44summary        : tsp_int4;
              c44imfileno       : tsp_int4;
              c44glossar        : tsp_int4;
              c44infileno       : tsp_int4;
              c44outfileno      : tsp_int4;
&       IF $OS = MSDOS
              c44pathincl       : tsp_vfilename;
&       ENDIF
 
        PROCEDURE
              c44makereset;
 
        PROCEDURE
              c44gmake_reset;
 
        FUNCTION
              c44files_init_ok : boolean;
 
        PROCEDURE
              c44close_files;
 
        PROCEDURE
              c44openfile (VAR ln     : tct_line;
                    VAR pos    : tsp_int2;
                    VAR filen  : tsp_vfilename;
                    VAR fileno : tsp_int4;
                    line_no    : integer;
                    VAR ferr   : tsp_vf_return);
 
.CM *-END-* define --------------------------------------
.sp;.cp 3
Use     :
 
        FROM
              String_utilities : VCT02;
 
        PROCEDURE
              c02vfwrite (fno     : tsp_int4;
                    VAR buf : tct_line);
 
        PROCEDURE
              c02int4to_line (int       : tsp_int4;
                    with_zero : boolean;
                    int_len   : integer;
                    ln_pos    : integer;
                    VAR ln    : tsp_line);
 
        PROCEDURE
              c02blankline (VAR ln : tct_line);
 
        PROCEDURE
              c02putname (VAR ln  : tct_line;
                    pos     : integer;
                    nam     : tsp_name);
 
      ------------------------------ 
 
        FROM
              RTE-Extension-10 : VSP10;
 
        PROCEDURE
              s10mv1 (size1    : tsp_int4;
                    size2    : tsp_int4;
                    VAR val1 : tsp_name;
                    p1       : tsp_int4;
                    VAR val2 : tsp_vfilename;
                    p2       : tsp_int4;
                    cnt      : tsp_int4);
 
        PROCEDURE
              s10mv3 (size1    : tsp_int4;
                    size2    : tsp_int4;
                    VAR val1 : tsp_vfilename;
                    p1       : tsp_int4;
                    VAR val2 : tsp_line;
                    p2       : tsp_int4;
                    cnt      : tsp_int4);
 
      ------------------------------ 
 
        FROM
              RTE_driver : VEN102;
 
        PROCEDURE
              sqlfopen (VAR hostfile : tsp_vfilename;
                    direction      : tsp_opcodes;
                    resource       : tsp_vf_resource;
                    VAR hostfileno : tsp_int4;
                    VAR format     : tsp_vf_format;
                    VAR rec_len    : tsp_int4;
                    poolptr        : tsp_int4;
                    buf_count      : tsp_int2;
                    VAR block      : tct_lineaddr;
                    VAR error      : tsp_vf_return;
                    VAR errtext    : tsp_errtext);
 
        PROCEDURE
              sqlfclose (VAR hostfileno : tsp_int4;
                    erase             : boolean;
                    poolptr           : tsp_int4;
                    buf_count         : tsp_int2;
                    block             : tct_lineaddr;
                    VAR error         : tsp_vf_return;
                    VAR errtext       : tsp_errtext);
 
        PROCEDURE
              sqlargl  (VAR args : tsp_line);
&       IF $OS = MSDOS
 
        PROCEDURE
              sqlffindpath (
                    VAR hostfile : tsp_vfilename;
                    VAR pathfile : tsp_vfilename);
&       ENDIF
&       if $OS in [  VMSP, VMS  ]
&       else
&       ifndef debugvm
 
        PROCEDURE
              sqlgetenv (VAR envname  : tsp_vfilename;
                    VAR envvalue : tsp_vfilename;
                    VAR envfound : boolean);
 
        PROCEDURE
              sqlconcat (VAR first_part  : tsp_vfilename;
                    VAR second_part : tsp_vfilename;
                    VAR resconcat   : tsp_vfilename;
                    VAR error       : boolean);
&       endif
&       endif
&       if $COMP=PTOC
&       else
 
      ------------------------------ 
 
        FROM
              RTE-Extension-30 : VSP30;
 
        FUNCTION
              s30gad (VAR b : tsp_line) : tct_lineaddr;
&       endif
 
.CM *-END-* use -----------------------------------------
.sp;.cp 3
Synonym :
 
        PROCEDURE
              s10mv1;
 
              tsp_moveobj tsp_name
              tsp_moveobj tsp_vfilename
 
        PROCEDURE
              s10mv3;
 
              tsp_moveobj tsp_vfilename
              tsp_moveobj tsp_line
&             if $OS = VMSP
&             else
&             ifndef debugvm
 
        PROCEDURE
              sqlgetenv;
 
              tsp_c64 tsp_vfilename
              tsp_c64 tsp_vfilename
 
        PROCEDURE
              sqlconcat;
 
              tsp_c64 tsp_vfilename
              hostname tsp_vfilename
              hostname tsp_vfilename
&             endif
&             endif
&             if $COMP=PTOC
&             else
 
        FUNCTION
              s30gad;
 
              tsp_moveobj tsp_line
              tsp_addr tct_lineaddr
&             endif
 
        PROCEDURE
              sqlfopen;
 
              tsp_vf_bufaddr tct_lineaddr
 
        PROCEDURE
              sqlfclose;
 
              tsp_vf_bufaddr tct_lineaddr
 
.CM *-END-* synonym -------------------------------------
Author  : Kernighan / Plauger / Zabach / Nemack
.sp
.cp 3
Created : 01.09.1988
.sp
.cp 3
Version : 1996-11-14
.sp
.cp 3
Release :  6.2 	 Date : 1996-11-14
.sp
***********************************************************
.sp
.cp 10
.fo
.oc _/1
Specification:
 
.CM *-END-* specification -------------------------------
.nf
***********************************************************
.sp
.cp 10
.fo
.oc _/1
Description:
 
.sp 2
PROCEDURE c44makereset:
.sp
C44_MAKE_RESET closes the summary-file and opens it for reading.
.sp 2
PROCEDURE c44gmake_reset:
.sp
C44_G_MAKE_RESET closes the glossary-file and opens it for reading.
.sp 2
PROCEDURE summary_delete:
.sp
SUMMARY_DELETE rewrites the summary-file. It will be erased by
the operating-system.
.sp 2
PROCEDURE glossary_delete:
.sp
GLOSSARY_DELETE rewrites the glossary-file. It will be erased by
the operating-system.
.sp 2
FUNCTION c44files_init_ok:
.sp
The function c44files_init_ok opens all files for the miniscript module.
The name of the file which shall be processed is given as parameter when
miniscript is called. If the function is not able to open the file
it returns 'false', else true.
.sp 2
PROCEDURE c44close_files:
.sp
This procedure closes all files.
.CM *-END-* description ---------------------------------
.sp 2
***********************************************************
.sp
.cp 10
.nf
.oc _/1
Structure:
 
.CM *-END-* structure -----------------------------------
.sp 2
**********************************************************
.sp
.cp 10
.nf
.oc _/1
.CM -lll-
Code    :
 
 
CONST
&     if $OS = VMSP
      (*
      '123456789 123456789 123456789 123456789 123456789 123456789 1234*)
      c_imfile      =
            'IMFILE VDN *                                                    ';
      c_summary     =
            'VCT44S CMSUT1 A1                                                ';
      c_glossar     =
            'VCT44G CMSUT1 A1                                                ';
      c_errfile     =
            'SCRIPT ERRFILE A1                                               ';
&     else
&     if $OS = VMS
      c_imfile      =
            'RVXPAR:SCRIPT.PAR                                               ';
      c_summary     =
            'RVXLOG:SCRIPT.SUM                                               ';
      c_glossar     =
            'RVXLOG:SCRIPT.GLO                                               ';
      c_errfile     =
            'RVXLOG:SCRIPT:ERR                                               ';
&     else
&     if $OS = MSDOS
      c_root        =
            'DBROOT                                                          ';
      c_imfile      =
            '%DBROOT%\\CONFIG\\SCRIPT.PAR                                      ';
      c_imf         =
            '%DBROOT%                                                        ';
      c_man         =
            '%DBROOT%                                                        ';
      c_summary     =
            '%DBROOT%\\PROT\\SCRIPT.SUM                                        ';
      c_glossar     =
            '%DBROOT%\\PROT\\SCRIPT.GLO                                        ';
      c_errfile     =
            '%DBROOT%\\PROT\\SCRIPT.ERR                                      ';
&     else
      c_root        =
            'DBROOT                                                          ';
      c_imfile      =
            'imfile                                                          ';
      c_imf         =
            'man/imfile                                                      ';
      c_man         =
            'man                                                             ';
      c_summary     =
            'vct44s.cmsut1                                                   ';
      c_glossar     =
            'vct44g.cmsut1                                                   ';
      c_errfile     =
            'script.errfile                                                  ';
&     endif
&     endif
&     endif
 
 
(*------------------------------*) 
 
PROCEDURE
      c44makereset;
 
VAR
      filen        : tsp_vfilename;
      reclen       : tsp_int4;
      ferr         : tsp_vf_return;
      ferr_txt     : tsp_errtext;
      bufadr       : tct_lineaddr;
      format       : tsp_vf_format;
 
BEGIN
bufadr := NIL;
sqlfclose (c44summary, false, 0, 0, bufadr, ferr, ferr_txt);
reclen := 0;
ferr   := vf_ok;
filen  := c_summary;
format := vf_record;
sqlfopen (filen, vread, vf_stack, c44summary, format,
      reclen, 0, 0, bufadr, ferr,ferr_txt);
END;
 
(*------------------------------*) 
 
PROCEDURE
      c44gmake_reset;
 
VAR
      filen        : tsp_vfilename;
      reclen       : tsp_int4;
      ferr         : tsp_vf_return;
      ferr_txt     : tsp_errtext;
      bufadr       : tct_lineaddr;
      format       : tsp_vf_format;
 
BEGIN
bufadr := NIL;
sqlfclose (c44glossar, false, 0, 0, bufadr, ferr, ferr_txt);
reclen  := 0;
ferr    := vf_ok;
filen   := c_glossar;
format  := vf_record;
sqlfopen (filen, vread, vf_stack, c44glossar, format,
      reclen, 0, 0, bufadr, ferr,ferr_txt);
END;
 
(*------------------------------*) 
 
PROCEDURE
      summary_delete;
 
VAR
      filen        : tsp_vfilename;
      reclen       : tsp_int4;
      ferr         : tsp_vf_return;
      ferr_txt     : tsp_errtext;
      bufadr       : tct_lineaddr;
      format       : tsp_vf_format;
 
BEGIN
bufadr := NIL;
sqlfclose (c44summary, false, 0, 0, bufadr, ferr, ferr_txt);
reclen := 0;
ferr   := vf_ok;
filen  := c_summary;
format := vf_record;
sqlfopen (filen, voverwrite, vf_stack, c44summary, format,
      reclen, 0, 0, bufadr, ferr,ferr_txt);
sqlfclose (c44summary, false, 0, 0, bufadr, ferr, ferr_txt);
END;
 
(*------------------------------*) 
 
PROCEDURE
      glossary_delete;
 
VAR
      filen        : tsp_vfilename;
      reclen       : tsp_int4;
      ferr         : tsp_vf_return;
      ferr_txt     : tsp_errtext;
      bufadr       : tct_lineaddr;
      format       : tsp_vf_format;
 
BEGIN
bufadr := NIL;
sqlfclose (c44glossar, false, 0, 0, bufadr, ferr, ferr_txt);
reclen   := 0;
ferr     := vf_ok;
filen    := c_glossar;
format   := vf_record;
sqlfopen (filen, voverwrite, vf_stack, c44glossar, format,
      reclen, 0, 0, bufadr, ferr,ferr_txt);
sqlfclose (c44glossar, false, 0, 0, bufadr, ferr, ferr_txt);
END;
 
(*------------------------------*) 
 
PROCEDURE
      c44openfile (VAR ln     : tct_line;
            VAR pos    : tsp_int2;
            VAR filen  : tsp_vfilename;
            VAR fileno : tsp_int4;
            line_no    : integer;
            VAR ferr   : tsp_vf_return);
 
VAR
      i            : integer;
      j            : integer;
      reclen       : tsp_int4;
      ferr_txt     : tsp_errtext;
      ok           : boolean;
&     if $OS in [  VMSP, VMS  ]
&     else
      envname      : tsp_vfilename;
      path         : tsp_vfilename;
      filen2       : tsp_vfilename;
      dbr_found    : boolean;
      cc_error     : boolean;
&     endif
      delimiter    : tct_delim;
      bufadr       : tct_lineaddr;
      format       : tsp_vf_format;
 
BEGIN
&if $OS = VMSP
delimiter := [ ' ' ];
&else
delimiter := [ '.', ' ' ];
&endif
&ifdef debugvm
delimiter := [ '.', ' ' ];
&endif
reclen := 0;
ferr   := vf_ok;
i      := pos;
j      := 1;
filen  := bsp_c64;
(* skipover blanks *)
WHILE (i <= ln.len) AND (ln.l[ i ] IN delimiter) DO
    i := succ (i);
(*ENDWHILE*) 
WHILE (i <= ln.len) AND NOT (ln.l[ i ] IN delimiter) DO
    BEGIN
&   if $OS in [  VMSP, VMS  ]
&   else
    IF  (ln.l[ i ] IN [ 'a'..'i', 'j'..'r', 's'..'z' ])
    THEN
        filen[ j ] := chr(ord(ln.l[ i ]) + ord ('A') - ord ('a'))
    ELSE
&       endif
        filen[ j ] := ln.l[ i ];
    (*ENDIF*) 
    i := succ (i);
    j := succ (j);
    END;
(*ENDWHILE*) 
&if $OS in [  VMSP, VMS  ]
filen[ j ] := bsp_c1;
&else
filen[ j ] := '.';
&endif
j          := succ (j);
(* skipover blanks *)
WHILE (i <= ln.len) AND (ln.l[ i ] IN delimiter) DO
    i := succ (i);
(*ENDWHILE*) 
WHILE (i <= ln.len) AND NOT (ln.l[ i ] IN delimiter) DO
    BEGIN
&   if $OS in [  VMSP, VMS  ]
&   else
    IF  (ln.l[ i ] IN [ 'A'..'I', 'J'..'R', 'S'..'Z' ])
    THEN
        filen[ j ] := chr(ord(ln.l[ i ]) - ord ('A') + ord ('a'))
    ELSE
&       endif
        filen[ j ] := ln.l[ i ];
    (*ENDIF*) 
    i := succ (i);
    j := succ (j);
    END;
(*ENDWHILE*) 
pos := i;
&if $OS in [  VMSP, VMS  ]
filen[ j ] := bsp_c1;
j          := succ (j);
filen[ j ] := '*';
&endif
reclen := 0;
ferr   := vf_ok;
&ifdef testdebug
writeln ('incl. file  = >',filen,'<');
&endif
format := vf_plaintext;
sqlfopen (filen, vread, vf_stack, fileno, format,
      reclen, 0, 0, bufadr, ferr,ferr_txt);
&ifdef testdebug
writeln ('ferr = ',ord(ferr), '  vf_ok = ',ord(vf_ok));
writeln (ferr_txt);
&endif
(* changed from 'ferr = vf_ok' on 1989-06-16 by Carsten/Frank Str. *)
IF  (ferr <> vf_ok)
THEN
    BEGIN
&   if $OS in [  VMSP, VMS  ]
&   else
&   ifndef debugvm
    envname   := c_root;
    dbr_found := false;
    sqlgetenv (envname, path, dbr_found);
    IF  dbr_found
    THEN
        BEGIN
&       IF $OS = MSDOS
        cc_error := true;
        filen2   := filen;
        sqlconcat (c44pathincl, filen2, filen, cc_error);
&       ELSE
        cc_error := true;
        filen2   := c_man;
        sqlconcat (path, filen2, path, cc_error);
        filen2   := filen;
        sqlconcat (path, filen2, filen, cc_error);
&       ENDIF
        END;
    (*ENDIF*) 
    reclen := 0;
&   endif
&   ifdef testdebug
    writeln ('incl. file  = >',filen,'<');
&   endif
    format := vf_plaintext;
&   if $OS = MSDOS
    IF  dbr_found
    THEN
&       endif
        sqlfopen (filen, vread, vf_stack, fileno, format,
              reclen, 0, 0, bufadr, ferr,ferr_txt);
    (*ENDIF*) 
    IF  (ferr <> vf_ok)
    THEN
        BEGIN
        reclen := 0;
&       ifdef testdebug
        writeln ('incl. file  = >',filen,'<');
&       endif
        format := vf_plaintext;
&       if $OS = MSDOS
        IF  dbr_found
        THEN
&           endif
            sqlfopen (filen, vread, vf_stack, fileno, format,
                  reclen, 0, 0, bufadr, ferr,ferr_txt);
        (*ENDIF*) 
        END;
&   endif
    (*ENDIF*) 
    END;
(*ENDIF*) 
IF  (ferr <> vf_ok)
THEN
    c44open_file_error (filen, line_no);
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      c44files_init_ok : boolean;
 
VAR
      i            : integer;
      j            : integer;
      name_end     : integer;
      filen        : tsp_vfilename;
      reclen       : tsp_int4;
      ferr         : tsp_vf_return;
      ferr_txt     : tsp_errtext;
      hname        : tsp_name;
      ok           : boolean;
&     if $OS in [  VMSP, VMS  ]
&     else
      envname      : tsp_vfilename;
      path         : tsp_vfilename;
      im_file      : tsp_vfilename;
      filen2       : tsp_vfilename;
      dbr_found    : boolean;
      cc_error     : boolean;
&     endif
      delimiter    : tct_delim;
      errtext      : tsp_errtext;
      error        : boolean;
      argln        : tsp_line;
      bufadr       : tct_lineaddr;
      format       : tsp_vf_format;
 
BEGIN
&if $OS = VMSP
delimiter := [ ' ' ];
&else
delimiter := [ '.', ' ' ];
&endif
&ifdef debugvm
delimiter := [ '.', ' ' ];
&endif
ok     := false;
reclen := 0;
ferr   := vf_ok;
filen  := c_errfile;
&ifdef testdebug
writeln ('errfile     = >',filen,'<');
&endif
format := vf_plaintext;
sqlfopen (filen, voverwrite, vf_stack, c44errfile, format,
      reclen, 0, 0, bufadr, ferr,ferr_txt);
sqlargl  (argln);
i      := 1;
j      := 1;
filen  := bsp_c64;
(* skipover blanks *)
WHILE (i < mxsp_line) AND (argln[ i ] IN delimiter) DO
    i := succ (i);
(*ENDWHILE*) 
WHILE (i < mxsp_line) AND NOT (argln[ i ] IN delimiter) DO
    BEGIN
    filen[ j ] := argln[ i ];
    i          := succ (i);
    j          := succ (j);
    END;
(*ENDWHILE*) 
filen[ j ] := argln[ i ];
IF  filen = bsp_c64
THEN
    BEGIN
    ferr := vf_notok;
    ferr_txt := 'NO FILENAME GIVEN                       '
    END
ELSE
    BEGIN
    name_end   := j;
    j          := succ (j);
    (* skipover blanks *)
&   if $OS = VMSP
&   else
    IF  argln [i] = '.'
    THEN
        BEGIN
&       endif
        WHILE (i < mxsp_line) AND (argln[ i ] IN delimiter) DO
            i := succ (i);
        (*ENDWHILE*) 
        WHILE (i <= mxsp_line) AND NOT (argln[ i ] IN delimiter) DO
            BEGIN
            filen[ j ] := argln[ i ];
            i          := succ (i);
            j          := succ (j);
            END;
        (*ENDWHILE*) 
&       if $OS = VMSP
&       else
        END;
&   endif
&   if $OS in [  VMSP, VMS  ]
    (*ENDIF*) 
    filen[ j ] := bsp_c1;
    j          := succ (j);
    WHILE (i < mxsp_line) AND (argln[ i ] IN delimiter) DO
        i := succ (i);
    (*ENDWHILE*) 
    WHILE (i < mxsp_line) AND NOT (argln[ i ] IN delimiter) DO
        BEGIN
        filen[ j ] := argln[ i ];
        i          := succ (i);
        j          := succ (j);
        END;
    (*ENDWHILE*) 
&   endif
    reclen := 0;
    ferr   := vf_ok;
&   ifdef testdebug
    writeln ('inpfile     = >',filen,'<');
&   endif
&   ifndef debugvm
    format := vf_plaintext;
    sqlfopen (filen, vread, vf_stack, c44infileno, format,
          reclen, 0, 0, bufadr, ferr,ferr_txt);
&   endif
    IF  (ferr <> vf_ok)
    THEN
        BEGIN
&       if $OS in [  VMSP, VMS  ]
&       else
&       ifndef debugvm
        envname   := c_root;
        dbr_found := false;
        sqlgetenv (envname, path, dbr_found);
        IF  dbr_found
        THEN
            BEGIN
            cc_error := true;
            filen2   := c_man;
            sqlconcat (path, filen2, path, cc_error);
            filen2   := filen;
            sqlconcat (path, filen2, filen, cc_error);
            END;
        (*ENDIF*) 
        reclen := 0;
&       endif
&       ifdef testdebug
        writeln ('inpfile     = >',filen,'<');
&       endif
        format := vf_plaintext;
&       if $OS = MSDOS
        IF  dbr_found
        THEN
&           endif
            sqlfopen (filen, vread, vf_stack, c44infileno, format,
                  reclen, 0, 0, bufadr, ferr,ferr_txt);
&       endif
        (*ENDIF*) 
        END;
    (*ENDIF*) 
    END;
(*ENDIF*) 
IF  (ferr = vf_ok)
THEN
    BEGIN
&   if $OS = VMSP
    hname := ' SCR A1           ';
&   else
    hname := '.SCR              ';
&   endif
    s10mv1 (mxsp_name, mxsp_vfilename, hname, 1, filen, name_end,
          mxsp_name);
&   IF $OS = MSDOS
    sqlffindpath (filen, c44pathincl);
    (* writeln ('inpfile  =>', filen, '<', 'path  ', c44pathincl ); *)
&   ENDIF
&   ifdef testdebug
    writeln ('outfile     = >',filen,'<');
&   endif
    reclen := mxsp_line;
&   ifndef debugvm
    format := vf_plaintext;
    sqlfopen (filen, voverwrite, vf_stack, c44outfileno, format,
          reclen, 0, 0, bufadr, ferr,ferr_txt);
&   endif
&   if $OS in [  VMSP, VMS  ]
    filen  := c_imfile;
    reclen := 0;
&   ifdef testdebug
    writeln ('imfile      = >',filen,'<');
&   endif
&   ifndef debugvm
    format := vf_plaintext;
    sqlfopen (filen, vread, vf_stack, c44imfileno, format,
          reclen, 0, 0, bufadr, ferr,ferr_txt);
&   endif
&   else
&   ifndef debugvm
    envname   := c_root;
    dbr_found := false;
    sqlgetenv (envname, path, dbr_found);
    IF  dbr_found
    THEN
        BEGIN
        cc_error := true;
        im_file  := c_imf;
        sqlconcat (path, im_file, filen, cc_error);
        IF  cc_error
        THEN
            filen := c_imfile;
        (*ENDIF*) 
        END
    ELSE
        filen := c_imfile;
    (*ENDIF*) 
    reclen := 0;
&   ifdef testdebug
    writeln ('imfile      = >',filen,'<');
&   endif
    format := vf_plaintext;
    sqlfopen (filen, vread, vf_stack, c44imfileno, format,
          reclen, 0, 0, bufadr, ferr,ferr_txt);
&   endif
    IF  (ferr <> vf_ok)
    THEN
        BEGIN
        reclen := 0;
        filen  := c_imfile;
&       ifndef debugvm
&       ifdef testdebug
        writeln ('imfile      = >',filen,'<');
&       endif
        format := vf_plaintext;
        sqlfopen (filen, vread, vf_stack, c44imfileno, format,
              reclen, 0, 0, bufadr, ferr,ferr_txt);
&       endif
        END;
&   endif
    (*ENDIF*) 
    IF  (ferr = vf_ok)
    THEN
        BEGIN
        reclen := 0;
        filen  := c_summary;
&       ifdef testdebug
        writeln ('summary     = >',filen,'<');
&       endif
&       ifndef debugvm
        format := vf_record;
        sqlfopen (filen, voverwrite, vf_stack, c44summary, format,
              reclen, 0, 0, bufadr, ferr,ferr_txt);
&       endif
        reclen := 0;
        filen := c_glossar;
&       ifdef testdebug
        writeln ('summary     = >',filen,'<');
&       endif
&       ifndef debugvm
        format := vf_record;
        sqlfopen (filen, voverwrite, vf_stack, c44glossar, format,
              reclen, 0, 0, bufadr, ferr,ferr_txt);
&       endif
        ok := true;
        END
    ELSE
        c44open_file_error (filen, 0);
    (*ENDIF*) 
    END
ELSE
    c44open_file_error (filen, 0);
(*ENDIF*) 
c44files_init_ok := ok;
END;
 
(*------------------------------*) 
 
PROCEDURE
      c44close_files;
 
VAR
      ferr         : tsp_vf_return;
      ferr_txt     : tsp_errtext;
      bufadr       : tct_lineaddr;
 
BEGIN
bufadr := NIL;
sqlfclose (c44infileno,  false, 0, 0, bufadr, ferr, ferr_txt);
sqlfclose (c44outfileno, false, 0, 0, bufadr, ferr, ferr_txt);
sqlfclose (c44imfileno,  false, 0, 0, bufadr, ferr, ferr_txt);
sqlfclose (c44errfile,   false, 0, 0, bufadr, ferr, ferr_txt);
summary_delete;
glossary_delete;
END;
 
(*------------------------------*) 
 
PROCEDURE
      c44open_file_error (VAR filen : tsp_vfilename;
            line_no   : integer);
 
VAR
      i            : integer;
      hline        : tct_line;
      hname        : tsp_name;
 
BEGIN
c02blankline (hline);
&if $COMP=PTOC
hline.adr := @hline.l;
&else
hline.adr := s30gad (hline.l);
&endif
hname := 'Module ''          ';
c02putname (hline, 0, hname);
i     := mxsp_vfilename;
WHILE ((i > 0) AND (filen[ i ] = bsp_c1)) DO
    i := i - 1;
(*ENDWHILE*) 
s10mv3 (mxsp_vfilename, mxsp_line, filen, 1, hline.l, hline.len, i);
hline.len := hline.len + i - 1;
hname     := ''' not found       ';
c02putname (hline, 0, hname);
IF  (line_no > 0)
THEN
    BEGIN
    hname     := '     Lineno :     ';
    c02putname (hline, 0, hname);
    c02int4to_line (line_no, false, 5, hline.len, hline.l);
    hline.len := hline.len + 5;
    END;
(*ENDIF*) 
hline.len := hline.len + 10;
c02vfwrite (c44errfile, hline);
END;
 
.CM *-END-* code ----------------------------------------
.SP 2 
***********************************************************
*-PRETTY-*  statements    :        230
*-PRETTY-*  lines of code :        656        PRETTY  3.09 
*-PRETTY-*  lines in file :        961         1992-11-23 
.PA 
