/*************************************************************************/

/* Bibliothek                                                            */

/* Firma        : PDP-Hannover Uwe Mayer E.K.                            */

/* Programm     : COMMLIB.CMD                                            */

/* Datum        : 10.04.1996                                             */

/* Beschreibung :                                                        */

/* Hinweis      :                                                        */

/*                                                                       */

/*************************************************************************/

 

 

#include dbank.h 

 

/*************************************************************************/

/* ID-Checker                                                            */

/*                                                                       */

 

sub check_id (char compare,short error)

  fptr fp;

  short eof;

  char buffer[255];

 

  file open (fp,"elcad_id","r") return (error);

  if (!error)

    file enter (fp,buffer,eof);

    if (compare<>buffer)

      error=[1];

    endif

  else

    error=[1];

  endif

  if (error)

    msg_error (("Modul"));

  endif

subend

 

/*************************************************************************/

/* Projekteinstellung                                                    */

 

/*************************************************************************/

/* Einlesen des Geraetepfades                                            */

 

 

sub ed_project (struct TDBANK startdb,struct TDBANK db)

  short error=[0];

  short exit=[0];

  struct TDBANK db2;

  char dummy[32]="";

 

  db2:path=db:path;

  db2:proj=db:proj;

  db2:nam1=db:nam1;

  db2:nam2=db:nam2;

  db2:nam3=db:nam3;

  db2:nam4=db:nam4;

 

  ed var

    ("Pfad              : ","db2:path","select_path (startdb,db2:path)","","?")

    ("Projekt           : ","db2:proj","select_projekt (db2:path,db2:proj)","","?")

    ("Kostenträger      : ","db2:nam1","select_sheet (db2,dummy,dummy,dummy,dummy)","","?")

    ("Baugruppe         : ","db2:nam2","select_sheet (db2,db2:nam1,dummy,dummy,dummy)","","?")

    ("Benennung/Gerät   : ","db2:nam3","select_sheet (db2,db2:nam1,db2:nam2,dummy,dummy)","","?")

    ("Benennung Lfd. Nr : ","db2:nam4","select_sheet (db2,db2:nam1,db2:nam2,db:nam3,dummy)","","?")

    title ("Auswahl eines Gerätes")

    esc (exit);

 

  if (!exit)

    check_project (db2,error);

    if (!error)

      db:path=db2:path;

      db:proj=db2:proj;

      db:nam1=db2:nam1;

      db:nam2=db2:nam2;

      db:nam3=db2:nam3;

      db:nam4=db2:nam4;

      write_ini (db);

    else

      msg_error (("Bitte Eingabe Überprüfen!"));

    endif 

  endif

subend

 

/***************************************************************************/

/* PDP.PRO anlegen, falls noch nicht vorhanden und Massenspeicher einlesen */

 

 

sub init_mp (struct TDBANK db)

  short exist;

  short error;

 

  db:path="";

  db:proj="PDP";

  db:nam1="Massenspeicher";

  db:nam2="";

  db:nam3="";

  db:list="Liste";

 

  exist pro (exist,db:path,db:proj);

  if (!exist)

    pro create (db:path,db:proj) return (error);

  endif

  read_path (db);

subend

 

/*************************************************************************/

/* Einlesen der Massenspeicherpfade in eine Datenbank                    */

/*                                                                       */

sub read_path (struct TDBANK db)

  short exist;

  short error;

  short count;

  char nm[7];

  char pt[7];

  char cm[10];

  short id;

  char section[12]="MassStorages";

  char pfad[80];

  char name[20];

  char kommentar[20];

  long rec_no;

 

  unlink (db:path,db:proj,db:nam1,db:nam2,db:nam3) return (error);

  exist (exist,db:path,db:proj,db:nam1,db:nam2,db:nam3);

  if (!exist)

    create (db:path,db:proj,db:nam1,db:nam2,db:nam3);

  endif

  use (db:path,db:proj,db:nam1,db:nam2,db:nam3);

  exist table (exist,db:list);

  if (exist)

    table unlink (db:list);

  endif

  create (db:path,db:proj,db:nam1,db:nam2,db:nam3) !add

    table (db:list)

    comment ("")

    structure

      (name "Name"        code [32007] length [20]),

      (name "Kommentar"   code [32008] length [20]),

      (name "Pfad"        code [32009] length [80]);

  use (db:path,db:proj,db:nam1,db:nam2,db:nam3);

  table (db:list);

  ini open (id,"aucotec.ini") return (error);

  if (!error)

    while (count<[16])

      string format (nm,"%s%s","Name",count);

      string format (pt,"%s%s","Path",count);

      string format (cm,"%s%s","Comment",count);

      count ++;

      ini read (id,section,pt,char,pfad);

      ini read (id,section,nm,char,name);

      ini read (id,section,cm,char,kommentar);

      Name=name;

      Pfad=pfad;

      Kommentar=kommentar;

      record insert record (rec_no) return (error);

      exist=:rec_no;

    endwhile

  endif 

  ini close (id,[0]);

subend

 

/*************************************************************************/

/* Einen Projektpfad auswaehlen                                          */

/*                                                                       */

sub select_path (struct TDBANK db, char pf)

  short cancel;

  long rec_no;

  short error;

  short exit;

 

  use (db:path,db:proj,db:nam1,db:nam2,db:nam3);

  table (db:list);

 

  edit all

    head_line ("Auswahl Massenspeicher")

    exit_var (exit)

    record (rec_no)

    button ("&OK") call select_button (exit,cancel,([0]))

    button ("&Abbruch") call select_button (exit,cancel,([1]))

    record (rec_no)

    field (Name)

    field (Kommentar)

    field (Pfad);

  if (!cancel)

    record enter (rec_no) return (error);

    pf=Pfad;

    string change (pf,"\\","/");

    lwc (pf);

  endif

subend

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub select_button (short exit,short cancel,short value)

  exit=[1];

  cancel=value;

subend

 

 

/*************************************************************************/

/* Ein Projekt auswaehlen                                                */

/*                                                                       */

sub select_projekt (char pf, char pr)

  select dir (pr,pf,"*.pro",[0]);

subend

 

/*************************************************************************/

/* Ein File    auswaehlen                                                */

/*                                                                       */

sub select_file (char file,char path)

  char pt[255]=path;

 

  select file (file,pt,"*.*",[1]);

subend

 

/*************************************************************************/

/* Die Ebenen auswaehlen dabei werden nur die Ebenen 1-4 benutzt         */

/*                                                                       */

sub select_sheet (struct TDBANK db,char n1,char n2,char n3, char n4)

  char nam[5][32];

  nam[1]=n1;

  nam[2]=n2;

  nam[3]=n3;

  nam[4]=n4;

  nam[5]="";

  select sheet (db:path,db:proj,nam);

  db:nam1=nam[1];

  db:nam2=nam[2];

  db:nam3=nam[3];

  db:nam4=nam[4];

subend

 

/*************************************************************************/

/* Stueklisten-Ini lesen                                                 */

/*                                                                       */

sub read_ini (struct TDBANK db)

  short id;

  short error;

  char section[8]="projekt";

  char path[4]="pfad";

  char project[7]="projekt";

  char eb1[6]="ebene1";

  char eb2[6]="ebene2";

  char eb3[6]="ebene3";

  char eb4[6]="ebene4";

  char nam2[12]="namlist2";

  char nam3[12]="namlist3";

  char apath[12]="ascii-path";

  char aname[12]="ascii-name";

 

  ini open (id,"stueck.ini") return (error);

  if (!error)

    ini read (id,section,path,char,db:path);

    ini read (id,section,project,char,db:proj);

    ini read (id,section,eb1,char,db:nam1);

    ini read (id,section,eb2,char,db:nam2);

    ini read (id,section,eb3,char,db:nam3);

    ini read (id,section,eb4,char,db:nam4);

    ini read (id,section,nam2,char,db:namlist2);

    ini read (id,section,nam3,char,db:namlist3);

    ini read (id,section,apath,char,db:asc_pt);

    ini read (id,section,aname,char,db:asc_nm);

  endif

  ini close (id,[0]);

subend

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub read_rec_ini (struct TDBANK db)

  short id;

  short error;

  char section[9]="datenbank";

  char path[4]="pfad";

  char project[7]="name";

  char eb1[6]="ebene1";

  char eb2[6]="ebene2";

  char eb3[6]="ebene3";

  char nam2[12]="namlist2";

  char nam3[12]="namlist3";

  char source[6]="quelle";

 

  ini open (id,"stueck.ini") return (error);

  if (!error)

    ini read (id,section,path,char,db:path);

    ini read (id,section,project,char,db:proj);

    ini read (id,section,eb1,char,db:nam1);

    ini read (id,section,eb2,char,db:nam2);

    ini read (id,section,eb3,char,db:nam3);

    ini read (id,section,source,char,db:source);

  endif

  ini close (id,[0]);

  db:list="DABA";

subend

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub write_ini (struct TDBANK db)

  short id;

  short error;

  char section[8]="projekt";

  char path[4]="pfad";

  char project[7]="projekt";

  char eb1[6]="ebene1";

  char eb2[6]="ebene2";

  char eb3[6]="ebene3";

  char eb4[6]="ebene4";

  char nam2[12]="namlist2";

  char nam3[12]="namlist3";

  char apath[12]="ascii-path";

  char aname[12]="ascii-name";

 

  db:namlist2="Stückliste";

  ini open (id,"stueck.ini") return (error);

  ini write (id,section,path,char,db:path);

  ini write (id,section,project,char,db:proj);

  ini write (id,section,eb1,char,db:nam1);

  ini write (id,section,eb2,char,db:nam2);

  ini write (id,section,eb3,char,db:nam3);

  ini write (id,section,eb4,char,db:nam4);

  ini write (id,section,nam2,char,db:namlist2);

  ini write (id,section,nam3,char,db:namlist3);

  ini write (id,section,apath,char,db:asc_pt);

  ini write (id,section,aname,char,db:asc_nm);

  ini close (id,[1]);

subend

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub write_rec_ini (struct TDBANK db)

  short id;

  short error;

  char section[9]="datenbank";

  char path[4]="pfad";

  char project[7]="name";

  char eb1[6]="ebene1";

  char eb2[6]="ebene2";

  char eb3[6]="ebene3";

  char nam2[12]="namlist2";

  char nam3[12]="namlist3";

  char source[6]="quelle";

 

  db:namlist2="Stückliste";

  ini open (id,"stueck.ini") return (error);

  ini write (id,section,path,char,db:path);

  ini write (id,section,project,char,db:proj);

  ini write (id,section,eb1,char,db:nam1);

  ini write (id,section,eb2,char,db:nam2);

  ini write (id,section,eb3,char,db:nam3);

  ini write (id,section,source,char,db:source);

  ini close (id,[1]);

subend

 

/*************************************************************************/

/*                                                                       */

 

sub check_project (struct TDBANK db,short error)

  short exist=[0];

 

  exist pro (exist,db:path,db:proj);

  if (exist)

    exist sheet (exist,db:path,db:proj,db:nam1,db:nam2,db:nam3,db:nam4,"1");

    if (exist)

      error=[0];

    else

      error=[1];

    endif

  else

    error=[1];

  endif

subend

 

/*************************************************************************/

/* Ausgabepfad fuer ASCII-Liste                                          */

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub ed_hostpath (struct TDBANK startdb,struct TDBANK db)

  char pt[255];

  char nm[13];

  short exit=[0];

  short error=[0];

 

  pt=db:asc_pt;

  nm=db:asc_nm;

  ed var

    ("Pfad      : ","pt","select_path (startdb,pt)","","?")

    ("Dateiname : ","nm","select_file (nm,pt)","","?")

    title ("Auswahl des Ausgabepfades")

    esc (exit);

 

  if (!exit)

    check_path (pt,error);

    if (!error)

      db:asc_pt=pt;

      if (nm<>"")

        db:asc_nm=nm;

        write_ini (db);

      else

        msg_error (("Es wurde kein Dateiname angegeben!"));

      endif

    endif

  endif

subend

 

/*************************************************************************/

/* Einstellen der Zieldatenbank                                          */

/*                                                                       */

sub ed_dbase (struct TDBANK startdb,struct TDBANK db,short allert)

  short exit=[0];

  struct TDBANK db2;

  char dummy[32]="";

  short error=[0];

 

  db2:path=db:path;

  db2:proj=db:proj;

  db2:nam1=db:nam1;

  db2:nam2=db:nam2;

  db2:nam3=db:nam3;

 

  ed var

    ("Pfad    : ","db2:path","select_path (startdb,db2:path)","","?")

    ("Projekt : ","db2:proj","select_projekt (db2:path,db2:proj)","","?")

    ("Ebene 1 : ","db2:nam1","select_dbase (db2,dummy,dummy,dummy)","","?")

    ("Ebene 2 : ","db2:nam2","select_dbase (db2,db2:nam1,dummy,dummy)","","?")

    ("Ebene 3 : ","db2:nam3","select_dbase (db2,db2:nam1,db2:nam2,dummy)","","?")

    title ("Auswahl der Zieldatenbank")

    esc (exit);

 

  if (!exit)

    if (allert)

      check_db (db2,error);

    endif

    if (!error or !allert)

      db:path=db2:path;

      db:proj=db2:proj;

      db:nam1=db2:nam1;

      db:nam2=db2:nam2;

      db:nam3=db2:nam3;

      write_rec_ini (db);

    endif

  endif

subend

 

/*************************************************************************/

/* Die Ebenen auswaehlen dabei werden nur die Ebenen 1-3 benutzt         */

/*                                                                       */

sub select_dbase (struct TDBANK db,char n1,char n2,char n3)

  db:nam1=n1;

  db:nam2=n2;

  db:nam3=n3;

  select daba (db:path,db:proj,db:nam1,db:nam2,db:nam3);

subend

 

/*************************************************************************/

/* Prueft, ob Verzeichnis vorhanden                                      */

/*                                                                       */

sub check_path (char name,short error)

  short exist;

 

  exist file (exist,name);

  if (!exist)

    msg_error (("Verzeichnispfad nicht vorhanden!"));

    error=[1];

  else

    error=[0];

  endif

subend

 

/*************************************************************************/

/* Prueft, ob Datei vorhanden                                            */

/*                                                                       */

sub check_file (char name,short error)

  short exist;

 

  exist file (exist,name);

  if (!exist)

    msg_error (("Datei nicht vorhanden!"));

    error=[1];

  else

    error=[0];

  endif

subend

 

/*************************************************************************/

/* Prueft, ob Datenbank vorhanden                                        */

/*                                                                       */

sub check_db (struct TDBANK db,short error)

  short exist;

 

  exist (exist,db:path,db:proj,db:nam1,db:nam2,db:nam3);

  if (!exist)

    msg_error (("Datenbank nicht vorhanden!"));

    error=[1];

  else

    error=[0];

  endif

subend

 

/*************************************************************************/

/* Messageboxes                                                          */

 

/*************************************************************************/

/* Abbruchbox                                                            */

/*                                                                       */

sub msg_attention_abbort (short exit,char text)

  confirm_box

    text (text)

    bitmap_no ([3])

    button ("&Abbruch","&OK")

    ret_button (exit)

    def_button([1]);

  if (exit=[2])

    exit=[0];

  endif

subend

 

/*************************************************************************/

/* FATALER FEHLER ALWIN VERLASSEN                                        */

/*                                                                       */

sub msg_exit (char text)

  confirm_box

   text (text)

   bitmap_no ([3])

   button ("&Abbruch");

  exit;

subend

 

/*************************************************************************/

/* Normale Infobox                                                       */

/*                                                                       */

sub msg (char text)

  confirm_box

    text (text)

    bitmap_no ([3])

    button("&OK");

subend

 

/*************************************************************************/

/* Fehlerbox                                                             */

/*                                                                       */

sub msg_error (char text)

  confirm_box

    text (text)

    bitmap_no ([4])

    button("&OK");

subend

 

/*************************************************************************/

/* Fehlerbox mit Wartezeit                                               */

/*                                                                       */

sub msg_error_delay (char text,short wait)

  confirm_box

    text (text)

    bitmap_no ([4])

    delay (wait)

    button("&OK");

subend

 

/*************************************************************************/

/* Statusbox                                                             */

/*                                                                       */

sub st_box_create (char title,char text,long max)

  status_box create

    title (title)

    pos ([1])

    max (max)

    width ([60])

    (text);

subend

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub select_record (struct TDBANK db, struct TDRECORD rec,long rec_no)

  char search_entry[3][1];

  short found=[0];

  char entry[2][10];

  short exit;

  short exist;

  short length;

 

  exist (exist,db:path,db:proj,db:nam1,db:nam2,db:nam3);

  if (exist)

    use (db:path,db:proj,db:nam1,db:nam2,db:nam3);

    exist table (exist,db:list);

    if (exist)

      table (db:list);

      select data ("Material",[0],search_entry,found,entry)

        record (rec_no)

        esc (exit);

      record enter (rec_no);

      rec:sachnummer=Sachnummer;

      rec:materialgruppe=Materialgruppe;

      rec:klasse=Klasse;

      rec:hauptgruppe=Hauptgruppe;

      rec:untergruppe=Untergruppe;

      rec:bezeichnung=Bezeichnung;

      rec:norm=Norm;

      strlen (Abmessung1,length);

      if (length<[8])

        rec:abmessung1=Abmessung1;

      endif

      strlen (Abmessung2,length);

      if (length<[8])

        rec:abmessung2=Abmessung2;

      endif

      strlen (Abmessung3,length);

      if (length<[5])

        rec:abmessung3=Abmessung3;

      endif

/*      rec:abmessung2=Abmessung2;

      rec:abmessung3=Abmessung3;*/

      rec:abmessungstext=Abmessungstext;

      rec:gewicht=Gewicht;

      rec:test=Test;

      rec:werkstoff=Werkstoff;

      rec:werkstofftext=WerkstoffText;

      rec:technbewertung=TechnBewertung;

    else

      msg_error (("Die Datenbank ist nicht vorhanden!"));

    endif

  else

    msg_error (("Datenbankeinstellungen überprüfen!"));

  endif

subend

 

 

/*************************************************************************/

/* Bibliothek   : edi1lib.cmd                                            */

/* Firma        : PDP-Hannover Uwe Mayer E.K.                            */

/* Programm     : EDI1LIB.CMD                                            */

/* Datum        : 09.04.1996                                             */

/* Beschreibung :                                                        */

/* Hinweis   :                                                           */

/*                                                                       */

/*************************************************************************/

 

#include dbank.h

 

/*************************************************************************/

/* Tabellenstrukturen                                                    */

/* add_table haengt eine neue Tabelle in einen Datenbankzweig ein        */

/* existiert die Tabelle bereits, so wird sie ueberschrieben             */

/*                                                                       */

sub add_list (struct TDBANK db, char tab)

  remove_list (([0]),db,tab);

  create(db:path,db:proj,db:nam1,db:namlist2,db:namlist3) add

      table(tab)

        comment("")

        structure

          (name "Position"     code [32001] length [ 3]     typ [17]),

          (name "Sachnummer"   code [   80] length [ 6]),

          (name "Variante"     code [   82] length [ 3]     typ [1]),

          (name "Menge"        code [  149] length [ 4]     typ [1]),

          (name "Sachnr_Halbz" code [20080] length [ 6]),

          (name "Anlage"       code [    1] length [ 6]),

          (name "Funktion"     code [    2] length [ 6]),

          (name "Einbauort"    code [    3] length [20]),

          (name "BMK"          code [    4] length [ 6]),

          (name "Abmessung1"   code [ 4003] length [ 7]     typ [1]),

          (name "Abmessung2"   code [ 4004] length [ 7]     typ [1]),

          (name "Abmessung3"   code [ 4005] length [ 4]     typ [1]),

          (name "Lot_hinten"   code [  166] length [ 6]     typ [1]),

          (name "Lot_basis"    code [  168] length [ 5]     typ [1]),

          (name "Lot_mitte"    code [  167] length [ 5]     typ [1]),

          (name "Hand"         code [32002] length [ 1]     typ [4]),

          (name "Rev"          code [32003] length [ 1]     typ [4]),

          (name "BMKlang"      code [32004] length [30])

        level

          ("BMKKEY")(Anlage,Funktion,Einbauort,BMK),

          ("Sachnr")(Sachnummer),

          ("BMK")(BMKlang);

/*          ("BMKKEY")(Anlage,Funktion,Einbauort,BMK,Sachnummer),*/

subend

 

/*************************************************************************/

/* add_dir haengt eine neue Tabelle fuer das Inhaltsverzeichnis an       */

/*                                                                       */

sub add_dir (struct TDBANK db)

  remove_dir (db);

  create (db:path,db:proj,db:nam1,db:namlist2,"") add

    table (db:dir)

      comment("")

      structure

        (name "Kostentraeger" code [   60] length [6]),

        (name "Geraetkl"      code [   61] length [6]),

        (name "Geraet"        code [   63] length [6]),

        (name "Zeichtyp"      code [   64] length [6]),

        (name "Seite"         code [   62] length [6]),

        (name "Konstr_de"     code [   66] length [40]),

        (name "Konstr_gb"     code [20166] length [40]),

        (name "Ort"           code [    3] length [20]),

        (name "Konstrukteur"  code [   78] length [6]),

        (name "Abteilung"     code [   79] length [4]),

        (name "Zusatz_de"     code [20065] length [80]),

        (name "Zusatz_gb"     code [20165] length [80]),

        (name "Datei"         code [32006] length [6])

      level

        ("Geraeteauswahl") (Kostentraeger,Geraetkl,Geraet,Zeichtyp),

        ("Seite") (Kostentraeger,Geraetkl,Geraet,Zeichtyp,Seite),

        ("Datei") (Datei);

subend

 

/*************************************************************************/

/* add_head haengt eine Tabelle fuer den Kopf an                         */

/*                                                                       */

sub add_head (struct TDBANK db)

  remove_head (([0]),db);

  create (db:path,db:proj,db:nam1,db:namlist2,db:namlist3) add

    table (db:head)

      comment("")

      structure

        (name "Kostentraeger" code [   60] length [6]),

        (name "Znummer"       code [   61] length [20]),

        (name "Konstr_de"     code [   66] length [40]),

        (name "Konstr_gb"     code [20166] length [40]),

        (name "Konstrukteur"  code [   78] length [6]),

        (name "Abteilung"     code [   79] length [4]),

        (name "Zusatz_de"     code [20065] length [80]),

        (name "Zusatz_gb"     code [20165] length [80]);

subend

 

/*************************************************************************/

/* Kopftabelle loeschen, falls vorhanden                                 */

/*                                                                       */

sub remove_head (short allert,struct TDBANK db)

  short exist=[0];

  short exit=[0];

 

  if (allert)

    msg_attention_abbort (exit,("Achtung! Tabelle wirklich löschen?"));

    if (exit)

      return;

    endif

  endif

 

  exist (exist,db:path,db:proj,db:nam1,db:namlist2,db:namlist3);

  if (exist)

    use (db:path,db:proj,db:nam1,db:namlist2,db:namlist3);

    exist table (exist,db:head);

    if (exist)

      table unlink (db:head);

    else

      if (allert)

        msg_error (("Tabelle nicht vorhanden!"));

      endif

    endif

  endif

subend

 

/*************************************************************************/

/* Listentabelle loeschen, falls vorhanden                               */

/*                                                                       */

sub remove_list (short allert,struct TDBANK db,char tab)

  short exist=[0];

  short exit=[0];

 

  if (allert)

    msg_attention_abbort (exit,("Achtung! Tabelle wirklich löschen?"));

    if (exit)

      return;

    endif

  endif

 

  exist (exist,db:path,db:proj,db:nam1,db:namlist2,db:namlist3);

  if (exist)

    use (db:path,db:proj,db:nam1,db:namlist2,db:namlist3);

    exist table (exist,tab);

    if (exist)

      table unlink (tab);

    else

      if (allert)

        msg_error (("Tabelle nicht vorhanden!"));

      endif

    endif

  endif

subend

 

/*************************************************************************/

/* Inhaltsverzeichnis loeschen, falls vorhanden                          */

/*                                                                       */

sub remove_dir (struct TDBANK db)

  short exist=[0];

 

  exist (exist,db:path,db:proj,db:nam1,db:namlist2,"");

  if (exist)

    use (db:path,db:proj,db:nam1,db:namlist2,"");

    exist table (exist,db:dir);

    if (exist)

      table unlink (db:dir);

    endif

  endif

subend

 

/*************************************************************************/

/* Inhalte in Tabelle lesen                                              */

 

/*************************************************************************/

/* Inhaltsverzeichnis einfuegen                                          */

/*                                                                       */

sub insert_dir (struct TDBANK db)

  short exist=[0];

 

  exist (exist,db:path,db:proj,db:nam1,db:namlist2,"");

  if (! exist)

    create (db:path,db:proj,db:nam1,db:namlist2,"");

  endif

  add_dir (db);

  use (db:path,db:proj,db:nam1,db:namlist2,"");

  table (db:dir);

  append directory;

subend

 

/*************************************************************************/

/* Stueckliste in Tabelle einfuegen                                      */

/*                                                                       */

sub insert_list (struct TDBANK db, char tab,struct TDBANK dbase)

  long rec_no=[1];

  long rel_no=[1];

  long max=[0];

  char buffer[20]="";

  char sheet_no[6]="";

  char dirbuf[13][80];

  short code[13];

  short count=[13];

  short error;

 

  code[1]=[60];

  code[2]=[61];

  code[3]=[63];

  code[4]=[64];

  code[5]=[62];

  code[6]=[66];

  code[7]=[20166];

  code[8]=[3];

  code[9]=[78];

  code[10]=[79];

  code[11]=[20065];

  code[12]=[20165];

  code[13]=[32006];

  quiet on;

  insert_dir (db);

  run_batch (db);

  quiet off;

  use (db:path,db:proj,db:nam1,db:namlist2,db:namlist3);

  table (tab);

  append sheet;

  use (db:path,db:proj,db:nam1,db:namlist2,db:namlist3);

  table (tab);

  relation (dbase:path,dbase:proj,dbase:nam1,dbase:nam2,dbase:nam3) table ("DABA") key ("Sachnummer");

  quiet on;

  modify;

  quiet off;

  if (error)

    msg_error (("Fehler beim Abgleich!"));

  endif

  relation (db:path,db:proj,db:nam1,db:namlist2,"") table (db:dir);

  status last_record (max);

  while (rec_no<=max)

    record enter (rec_no);

    record status (rec_no) sheet_no (sheet_no);

    relation get (rel_no) s_key ("Datei") (sheet_no) (count,code,dirbuf) return (error);

    if (Einbauort<>dirbuf[8])

      Menge=[0];

    endif

/*    string format (buffer,"%s%s%s%s%s",Anlage,Funktion,Einbauort,BMK,Sachnummer);*/

    string format (buffer,"%s%s%s%s",Anlage,Funktion,Einbauort,BMK);

    BMKlang=buffer;

    record output (rec_no);

    rec_no ++;

  endwhile

subend

 

/*************************************************************************/

/* Eingabemasken                                                         */

 

/*************************************************************************/

/* Kopfdaten                                                             */

/*                                                                       */

sub ed_head (struct TDBANK db)

  short exit=[0];

  short exist=[0];

  short error=[0];

  long rec_no=[1];

  struct THEAD hd;

  char kost_text[255];

  char znum_text[255];

  char kons_text[255];

  char abtl_text[255];

 

  exist (exist,db:path,db:proj,db:nam1,db:namlist2,db:namlist3);

  if (!exist)

    create (db:path,db:proj,db:nam1,db:namlist2,db:namlist3);

  endif

  use (db:path,db:proj,db:nam1,db:namlist2,db:namlist3);

  exist table (exist,db:head);

  if (exist)

    table (db:head);

    record enter (rec_no);

    hd:znum=Znummer;

    hd:bkde=Konstr_de;

    hd:bkgb=Konstr_gb;

  else

    quiet on;

    insert_dir(db);

    quiet off;

    use (db:path,db:proj,db:nam1,db:namlist2,"");

    table (db:dir);

    record get (rec_no) s_key ("Geraeteauswahl") (db:nam1,db:nam2,db:nam3,db:nam4);

    string format (hd:znum,"%s%s%s%s%s%s%s",Kostentraeger,"/",Geraetkl,"-",Geraet,"-",Zeichtyp);

    string format (hd:bkde,"%s%s%s",Ort,"-",Konstr_de);

    string format (hd:bkgb,"%s%s%s",Ort,"-",Konstr_gb);

  endif

  hd:kost=Kostentraeger;

  hd:kons=Konstrukteur;

  hd:abtl=Abteilung;

  hd:zkde=Zusatz_de;

  hd:zkgb=Zusatz_gb;

 

  string format (kost_text,"Kostenträger                          %s",hd:kost);

  string format (znum_text,"Zeichnungsnummer                      %s",hd:znum);

  string format (kons_text,"Konstrukteur                          %s",hd:kons);

  string format (abtl_text,"Konstruktionsabteilung                %s",hd:abtl);

  ed  var

    (!kost_text,"hd:kost")

    (!znum_text,"hd:znum")

    ("Bemerkung Konstruktion deutsch","hd:bkde")

    ("Bemerkung Konstruktion englisch","hd:bkgb")

    (!kons_text,"hd:kons")

    (!abtl_text,"hd:abtl")

    ("Zusatzbemerkung Konstruktion deutsch","hd:zkde")

    ("Zusatzbemerkung Konstruktion englisch","hd:zkgb")

    title("Kopfdaten")

    esc (exit);

 

  if (!exit)

    rec_no=[1];

    add_head (db);

    use (db:path,db:proj,db:nam1,db:namlist2,db:namlist3);

    table (db:head);

    1=hd:kost;

    2=hd:znum;

    3=hd:bkde;

    4=hd:bkgb;

    5=hd:kons;

    6=hd:abtl;

    7=hd:zkde;

    8=hd:zkgb;

    record insert;

  endif

subend

 

/*************************************************************************/

/* Datensatz editieren                                                   */

/*                                                                       */

sub ed_record (struct TDBANK db,struct TDBANK dbase,long rec_no)

  short exit=[0];

  struct TRECORD rec;

  char pos[30];

  short return=[1];

  char hand[30];

 

  use (db:path,db:proj,db:nam1,db:namlist2,db:namlist3);

  table (db:list);

 

  if (rec_no)

    record enter (rec_no);

 

    rec:position=:1;

    rec:sachnummer=2;

    rec:variante=3;

    rec:menge=4;

    rec:sachnr_Halbz=5;

    rec:anlage=6;

    rec:funktion=7;

    rec:einbauort=8;

    rec:bmk=9;

    rec:abmessung1=10;

    rec:abmessung2=11;

    rec:abmessung3=12;

    rec:lot_hinten=13;

    rec:lot_basis=14;

    rec:lot_mitte=15;

    rec:hand=16;

    rec:rev=17;

 

    if (rec:hand)

      hand="Handeintrag";

    else

      hand="";

    endif

 

    string format (pos,"Position     %s",rec:position);

    ed var

      (!pos,"rec:position")

      ("Sachnummer","rec:sachnummer","get_record (db,dbase,rec)","","?")

      ("Variante","rec:variante")

      ("Menge","rec:menge")

      ("Sachnr_Halbz","rec:sachnr_Halbz")

      ("Lot_hinten","rec:lot_hinten")

      ("Lot_basis","rec:lot_basis")

      ("Lot_mitte","rec:lot_mitte")

      ("Anlage","rec:anlage")

      ("Funktion","rec:funktion")

      ("Einbauort","rec:einbauort")

      ("BMK","rec:bmk")

      ("Abmessung1","rec:abmessung1")

      ("Abmessung2","rec:abmessung2")

      ("Abmessung3","rec:abmessung3")

      (!hand,"rec:hand")

  /*    ("Rev","rec:rev")

      (!BMKlang)*/

      title ("Datensatz bearbeiten")

      esc (exit);

 

    if (!exit)

      if (!rec:hand)

        confirm_box ("Achtung! Dieser Eintrag ist automatisch erstellt","und wird wieder überschrieben","Speichern?")

          button ("&Ja","&Nein")

          ret_button (return);

      endif

      if (return=[1])

        1=rec:position;

        2=rec:sachnummer;

        3=:rec:variante;

        4=:rec:menge;

        5=rec:sachnr_Halbz;

        6=rec:anlage;

        7=rec:funktion;

        8=rec:einbauort;

        9=rec:bmk;

        10=:rec:abmessung1;

        11=:rec:abmessung2;

        12=:rec:abmessung3;

        13=:rec:lot_hinten;

        14=:rec:lot_basis;

        15=:rec:lot_mitte;

        16=rec:hand;

        17=rec:rev;

        record output (rec_no);

      endif

    endif

  endif

subend

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub get_record (struct TDBANK db,struct TDBANK dbase,struct TRECORD rec)

  struct TDRECORD rec2;

  long rec_no;

 

  rec2:sachnummer="";

  select_record (dbase,rec2,rec_no);

  if (rec2:sachnummer)

    rec:sachnummer=rec2:sachnummer;

    rec:abmessung1=rec2:abmessung1;

    rec:abmessung2=rec2:abmessung2;

    rec:abmessung3=rec2:abmessung3;

  endif

  use (db:path,db:proj,db:nam1,db:namlist2,db:namlist3);

  table (db:list);

subend

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub remove_record (struct TDBANK db,long rec_no)

  short error;

  short return=[2];

 

  confirm_box ("Datensatz wirklich löschen?")

    button ("&Ja","&Nein")

    def_button (([2]))

    bitmap_no ([1])

    ret_button (return);

  if (return=[1])

    record enter (rec_no) return (error);

    empty_record ();

    record output (rec_no) return (error); 

  endif

subend

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub end_ed_all (short exit)

  exit=[1];

subend

 

 

 

 

/*************************************************************************/

/* Bibliothek edi2lib.cmd                                                */

/* Firma        : PDP-Hannover Uwe Mayer E.K.                            */

/* Programm     : EDI2LIB.CMD                                            */

/* Datum        : 10.04.1996                                             */

/* Beschreibung :                                                        */

/* Hinweis      :                                                        */

/*                                                                       */

/*************************************************************************/

 

#include dbank.h

 

/*************************************************************************/

/* Positionsdaten                                                        */

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub build_list (struct TDBANK db,struct TDBANK dbase)

  short exist=[0];

  short error=[0];

  short return=[2];

 

  check_project (db,error);

  if (!error)

    check_db (dbase,error);

    if (!error)

      confirm_box ("Neue Positionsdaten erstellen"," /bestehende Liste überarbeiten?")

        button ("&Ja","&Nein")

        bitmap_no ([1])

        def_button ([2])

        ret_button (return);

      if (return=[1])

        exist (exist,db:path,db:proj,db:nam1,db:namlist2,db:namlist3);

        if (!exist)           /* Wenn Datenbank noch nicht existiert, erstellen*/

          create (db:path,db:proj,db:nam1,db:namlist2,db:namlist3);

        endif

        status_box create

          title ("Positionsdaten erstellen")

          pos ([1])

          width([58])

          ("Die Erstellung der Positionsdaten wird vorbereitet.","Dieses kann einen Moment dauern.");

        use (db:path,db:proj,db:nam1,db:namlist2,db:namlist3);

        exist table (exist,db:list);

        if (exist)                   /* Wenn Stueckliste schon mal erstellt    */

          add_list (db,db:tmp);      /* Neue Tabelle anhaengen                 */

          insert_list (db,db:tmp,dbase);

          update_list (db);          /* Neue Stueckliste mit alter abgleichen  */

        else

          add_list (db,db:list);     /* Neue Tabelle anhaengen (original-Liste)*/

          add_list (db,db:tmp);      /* Neue Tabelle anhaengen                 */

          insert_list (db,db:tmp,dbase);

          update_list (db);          /* Neue Stueckliste mit alter abgleichen  */

        endif

      endif

    endif

  else

    msg_error (("Bitte die Projekteinstellungen überprüfen!"));

  endif

subend

 

/*************************************************************************/

/* Neue Stueckliste mit alter abgleichen                                 */

/*                                                                       */

sub update_list (struct TDBANK db)

  short error=[0];

  long max=[0];

  long rec_no=[1];

  long rec_no_array[32];

  long maxcount;

  long count;

  long new_no=[0];

  char key[32];

  key="";

  char buffer[18][40];

  char filterstring[80];

  short test;

 

  use (db:path,db:proj,db:nam1,db:namlist2,db:namlist3);

  table (db:list);

  table (db:tmp);

  status last_record (max);

 

  st_box_create (("Positionsdaten aktualisieren"),("Neue Sätze hinzufügen"),max);

  while (rec_no<=max)

    table select (db:tmp);

    record enter (rec_no) return (error);

 

    if (Menge and !error)

      key=BMKlang;

      couple data_to_field (buffer);

      table select (db:list);

      couple field_to_data (buffer);

 

      count=[0];

      string format (filterstring,"BMKlang=\"%s\"",BMKlang);

      filter filterstring;

      quiet on;

      record get all

        (maxcount,rec_no_array)

        order by (Position)

        max ([32])

        ignore_parent

        return (error);

      quiet off;

      if (maxcount > [0])

/*        record enter (rec_no_array[count]) return (error);*/

        Rev=[1];

        while ((count<maxcount) and Rev)

          count ++; 

          record enter (rec_no_array[count]) return (error);

        endwhile

        if (Rev)

          new_no=[0];

        else

          new_no=rec_no_array[count];

        endif

      else

        new_no=[0];

      endif

 

      filter ();

      couple field_to_data (buffer);

      if (!new_no)

        record insert record (new_no);

      endif

      Rev="1";

      record output (new_no);

    endif

 

/*  if (Menge)

      key=BMKlang;

      couple data_to_field (buffer);

      table select (db:list);

      couple field_to_data (buffer);

      record exist (new_no) s_key ("BMK")(key);

      if (!new_no)

        record insert record (new_no);

      endif

      Rev="1";

      record output (new_no);

    endif*/

 

    rec_no ++;

    status_box update (rec_no);

  endwhile  status_box cancel;

 

  table select (db:list);

  status last_record (max);

  st_box_create (("Positionsdaten aktualisieren"),("Sätze überarbeiten"),max);

  rec_no=[1];

  while (rec_no<=max)

    record enter (rec_no);

    if ((Rev="0") and (Hand="0"))

      empty_record();

    else

      Rev="0";

    endif

    record output (rec_no);

    rec_no ++;

    status_box update (rec_no);

  endwhile

  status_box cancel;

subend

 

/*************************************************************************/

/* Aktuellen Datensatz "leermachen"                                      */

/*                                                                       */

sub empty_record

  2=:"";

  3=:"";

  4=:[0];

  5=:"";

  6=:"";

  7=:"";

  8=:"";

  9=:"";

  10=:[0];

  11=:[0];

  12=:[0];

  13=:[0];

  14=:[0];

  15=:[0];

  /*16=:"";*/

  17=:"";

subend

 

/*************************************************************************/

/* Batchverarbeitung                                                     */

 

/*************************************************************************/

/* Zurücksetzen des Projektes und dann geraet auswerten                  */

/*                                                                       */

sub run_batch (struct TDBANK db)

  char symname[255];

  char batall[255];

  char batnew[255];

  short error=[0];

 

  fspec build (batall,"%s%p%e%f",db:path,db:proj,"pro","batchall.asc");

  fspec build (batnew,"%s%p%e%f",db:path,db:proj,"pro","batchnew.asc");

  set ge_path (db:path);

  set ge_pro (db:proj);

  load_symbols (db);

  if (!error)

    batch create_all;

    batch bin_to_ascii (batall);

    quiet on;

    batch offline;

    quiet off;

    create_batch (db,batall,batnew);

    batch ascii_to_bin (batnew);

    file unlink (batnew);

    batch online;

    batch reset;

  else

    msg_error (("Die Symbolbiliothek kann nicht geöffnet werden!"));

  endif

subend

 

/*************************************************************************/

/* Symbolbibliotheken laden                                              */

/*                                                                       */

sub load_symbols (struct TDBANK db)

  char symname[4][80];

  short count=[4];

  short error=[0];

  short open[4];

 

  set ge_path (db:path);

  set ge_pro (db:proj);

  get_symname (db,symname);

  while (count>[0])

    if (symname[count])

      use symbol count (symname[count]) return (error);

      if (error)

        confirm_box (symname[count],"kann nicht geladen werden") button ("&OK");

      endif

    endif

    count --;

  endwhile

subend

 

/*************************************************************************/

/* ASCII-Stapel generieren                                               */

/*                                                                       */

sub create_batch (struct TDBANK db, char batchall,char batch_new)

  fptr fp;

  char buffer[32]; 

  char filename[6];

  char fullname[255];

  char eb[5][32];

  short eof=[0];

  short anz=[0];

  long rec_no=[0];

  long max;

  long rec_array[4678];

  short error;

 

  use (db:path,db:proj,db:nam1,db:namlist2,"");

  table (db:dir);

  file open (fp,batchall,"r") return (error);

  file enter (fp,buffer,eof);

  filename=buffer[1,6];

  while (!eof)

    fspec build (fullname,"%s%p%e%f",db:path,db:proj,"pro",filename);

    sgetname (fullname,anz,eb);

    record get (rec_no) s_key ("Seite") (eb[1],eb[2],eb[3],eb[4],eb[5]);

    Datei=filename;

    record output (rec_no);

    file enter (fp,buffer,eof);

    filename=buffer[1,6];

  endwhile

  /* die folgende zeile ist nur kontrolle*/

  /*list (Datei,Kostentraeger,Geraetkl,Geraet,Zeichtyp,Seite);*/

  table close all;

  use (db:path,db:proj,db:nam1,db:namlist2,"");

  table (db:dir);

  /* Diese Zeile ist anscheinend noetig, damit das programm nicht abstuerzt*/

  file close (fp);

  file unlink (batchall);

  file open (fp,batch_new,"w+") return (error);

  if (!error)

    rec_no=[1];

    record get all s_key ("Geraeteauswahl") (db:nam1,db:nam2,db:nam3,db:nam4) (max,rec_array);

    while (rec_no <= max)

      record enter (rec_array[rec_no]) return (error);

      if (!error)

        file output (fp,"%s\n",Datei);

      else

        msg_error (("Datensatz nicht vorhanden!"));

      endif

      rec_no ++;

    endwhile

    file close (fp);

  else

    msg_error (("Kann keinen Stapel erstellen!"));

  endif

subend

 

/*************************************************************************/

/* Filterbearbeitung                                                     */

/*                                                                       */

sub ed_filter (char name_buffer,char inhalt_buffer)

  short id;

  short exit=[0];

  short error;

  short count=[1];

  char name[40][36];

  char inhalt[40][100];

  char nm[7];

  char ct[10];

  char section[25]="Filter";

  char pos_asc[2];

  short pos;

 

  ini open (id,"stueck.ini") return (error);

  if (!error)

    while (count <= [40])

      string format (nm,"%s%s","Name",count);

      string format (ct,"%s%s","Contens",count);

      ini read (id,section,nm,char,name[count]);

      ini read (id,section,ct,char,inhalt[count]);

      count ++;

    endwhile

  endif

 

  ed var

    ("Filternr (1-40)","pos_asc","load_filter (pos_asc,name_buffer,inhalt_buffer,name,inhalt)","","?")

    ("Filtername","name_buffer","get_filter (pos_asc,name_buffer,inhalt_buffer,name,inhalt)","","?")

    ("Filterstring","inhalt_buffer")

    title ("Filter bearbeiten")

    esc (exit);

 

  if (!exit)

    string_to_num (pos_asc,pos);

    if ((pos>[0]) and (pos<[41]))

      name[pos]=name_buffer;

      inhalt[pos]=inhalt_buffer;

      count=[1];

      while (count <= [40])

        string format (nm,"%s%s","Name",count);

        string format (ct,"%s%s","Contens",count);

        ini write (id,section,nm,char,name[count]);

        ini write (id,section,ct,char,inhalt[count]);

        count ++;

      endwhile

    endif

    if (inhalt_buffer)

      filter inhalt_buffer return (error);

      if (error)

        msg_error (("Ungültiger Filter!"));

      endif

    else

      filter ();

    endif

 endif

 ini close (id,[1]);

subend

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub load_filter (char pos_asc,char nm,char ct,char nm_ar,char ct_ar)

  short pos;

 

  if (pos_asc)

    string_to_num (pos_asc,pos);

  else

    pos=[-1];

  endif

  if ((pos>[0]) and (pos<[41]))

    nm=nm_ar[pos];

    ct=ct_ar[pos];

  endif

subend

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub get_filter (char pos_asc,char nm,char ct,char nm_ar,char ct_ar)

  short exit;

  long rec_no;

  short error;

  short pos;

 

  edit all

    head_line ("Filtername")

    exit_var (exit)

    record (rec_no)

    button ("&OK") call end_ed_filter (([1]),exit,error)

    button ("&Abbruch") call end_ed_filter (([0]),exit,error)

    var_text ([40],nm_ar);

  if (!error)

    pos=rec_no;

    nm=nm_ar[pos];

    pos_asc=:pos;

    ct=ct_ar[pos];

  endif

subend

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub end_ed_filter (short action,short exit,short error)

  exit=[1];

  if (action)

    error=[0];

  else

    error=[1];

  endif

subend

 

 

/*************************************************************************/

/* Bibliothek                                                            */

/* Firma        : PDP-Hannover Uwe Mayer E.K.                            */

/* Programm     : HELPLIB.CMD                                            */

/* Datum        : 11.04.1996                                             */

/* Beschreibung :                                                        */

/* Hinweis      :                                                        */

/*                                                                       */

/*************************************************************************/

 

 

#include dbank.h 

 

/*************************************************************************/

/* Hilfefunktionen                                                       */

 

/*************************************************************************/

/* Infotext zum Programm                                                 */

/*                                                                       */

sub help_info

  char text1[80]="Version x.xx   Datum:xx.xx.xxxx    PDP-Hannover Uwe Mayer E.K. ";

  char text2[80]="                   I N F O R M A T I O N !!                    ";

  char text3[80]="       Aucotec  Version ELCAD 5.5 / KS-ALWIN CC 5.5            ";

  char text4[80]="Dieses Programm kann nur dann eingesetzt werden, wenn auch     ";

  char text5[80]="   tatsächlich eine Lizenz und ELCAD_ID-Nr.: vorliegt !!       ";

  char text6[80]="Alle Rechte, insbesondere das Recht der Vervielfältigung und   ";

  char text7[80]="  Verbreitung bleiben der Firma PDP-Hannover vorbehalten.      ";

  char text8[80]="PDP-Hannover Uwe Mayer Wendlandstr.3 Tel.: 0511 / 279 56-0     ";

  char text9[80]="                                     Fax.: 0511 / 279 56-30    ";

 

  confirm_box

    (text1," ",text2," ",text3," ",text4,text5,text6,text7," ",text8,text9)

    button ("&OK");

subend

 

 

/*************************************************************************/

/* Bibliothek   : reclib.cmd                                             */

/* Firma        : PDP-Hannover Uwe Mayer E.K.                            */

/* Programm     : RECLIB.CMD                                             */

/* Datum        : 09.04.1996                                             */

/* Beschreibung :                                                        */

/* Hinweis      :                                                        */

/*                                                                       */

/*************************************************************************/

 

#include dbank.h 

 

/*************************************************************************/

/* Tabelle fuer Teiledatenbank                                           */

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub add_reclist (struct TDBANK db,char nam3,char tab)

  create (db:path,db:proj,db:nam1,db:nam2,nam3) add

    table (tab)

    comment ("")

    structure

      (name "Sachnummer"     code    [80] length [6]),

      (name "Materialgruppe" code   [152] length [6]),

      (name "Klasse"         code [32010] length [1]),

      (name "Hauptgruppe"    code [32011] length [1]),

      (name "Untergruppe"    code [32012] length [1]),

      (name "Bezeichnung"    code   [150] length [40]),

      (name "Norm"           code   [154] length [16]),

      (name "Abmessung1"     code  [4003] length [10]),

      (name "Abmessung2"     code  [4004] length [10]),

      (name "Abmessung3"     code  [4005] length [10]),

      (name "Abmessungstext" code    [41] length [35]),

      (name "Gewicht"        code    [47] length [9]),

      (name "Test"           code [32005] length [12]),

      (name "Werkstoff"      code   [155] length [10]),

      (name "WerkstoffText"  code   [156] length [10]),

      (name "TechnBewertung" code [20053] length [1])

    key (Sachnummer)

    level ("Material") (Klasse,Hauptgruppe,Untergruppe);

subend

 

/*************************************************************************/

/* ASCII-Liste einlesen                                                  */

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub insert_reclist2 (struct TDBANK db,char nam3,char tab)

  short exist=[0];

  short error=[0];

  fptr fp;

  char buffer[255];

  char c[1];

  short eof=[0];

  short str_len=[0];

  short found;

  char field[10][10];

  char delim[2][1];

  short rec_no;

  char error_msg[80];

 

  use (db:path,db:proj,db:nam1,db:nam2,nam3);

  exist table (exist,tab);

  if (exist)

    table unlink (tab);

  endif

  add_reclist (db,nam3,tab);

  use (db:path,db:proj,db:nam1,db:nam2,nam3);

  table (tab);

  file open (fp,db:source,"r") return (error);

  if (!error)

    status_box create

      title ("Einlesen der ASCII-Liste")

      ("Eingelesene Datensätze",rec_no);   

    while (!eof)

      file enter (fp,buffer,eof,[255]);

      rec_no ++;

      strlen (buffer,str_len);

      if (str_len=[147])

        c=buffer[1,1];

        if (c="S")

          Sachnummer    =buffer[2,7];

          Klasse        =buffer[8,8];

          Hauptgruppe   =buffer[9,9];

          Untergruppe   =buffer[10,10];

          Materialgruppe=buffer[8,13];

          Bezeichnung   =buffer[14,53];

          Norm          =buffer[54,69];

          Abmessungstext=buffer[70,104];

          Gewicht       =buffer[105,113];

          Test          =buffer[114,125];

          Werkstoff     =buffer[126,135];

          WerkstoffText =buffer[136,145];

          TechnBewertung=buffer[146,146];

          field[1]="";

          field[2]="";

          field[3]="";

          field[4]="";

          delim[1]="X";

          delim[2]="X";

          buffer=Abmessungstext;

          parse get_delimiter (buffer,found,field,delim);

          Abmessung1=field[1];

          Abmessung2=field[2];

          Abmessung3=field[3];

          record insert return (error);

          else

            string format (error_msg,"In Zeile %s : Fehlerhafter Datensatz!",rec_no);

            msg_error_delay (error_msg,([2]));

        endif

      else

        if (((str_len>[147]) or (str_len<[147])) and (str_len>[4]))

          string format (error_msg,"In Zeile %s : Fehlerhafter Datensatz!",rec_no);

          msg_error_delay (error_msg,([2]));

        endif

      endif

      status_box update text ("Eingelesene Datensätze",rec_no);

    endwhile

    status_box cancel;

  endif

subend

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub insert_reclist (struct TDBANK db,char nam3,char tab)

  short exist=[0];

  short asc;

  char zeichen[1];

  fptr fp;

  short eof=[0];

  char buffer[255];

  short error=[0];

  short found;

  char field[10][10];

  char delim[2][1];

  short rec_no;

 

  status_box create

    title ("Einlesen der ASCII-Liste")

    ("Eingelesene Datensätze",rec_no);   

  use (db:path,db:proj,db:nam1,db:nam2,nam3);

  exist table (exist,tab);

  if (exist)

    table unlink (tab);

  endif

  add_reclist (db,nam3,tab);

  use (db:path,db:proj,db:nam1,db:nam2,nam3);

  table (tab);

  file open (fp,db:source,"r") return (error);

  if (!error)

    while (!eof)

      file get_char (fp,asc,eof);

      chr (zeichen,asc);

      if ((zeichen = "S") and !eof)

        fgets (fp,([6]),buffer,eof);

        Sachnummer=buffer;

        if (!eof)

          file get_char (fp,asc,eof);

          chr (zeichen,asc);

          Klasse=zeichen;

          file get_char (fp,asc,eof);

          chr (zeichen,asc);

          Hauptgruppe=zeichen;

          file get_char (fp,asc,eof);

          chr (zeichen,asc);

          Untergruppe=zeichen;

          file seek (fp,[-3],[1]);

          fgets (fp,([6]),buffer,eof);

          Materialgruppe=buffer;

          if (!eof)

            fgets (fp,([40]),buffer,eof);

            Bezeichnung=buffer;

            if (!eof)

              fgets (fp,([16]),buffer,eof);

              Norm=buffer;

              if (!eof)

                fgets (fp,([35]),buffer,eof);

                Abmessungstext=buffer;

                if (!eof)

                  fgets (fp,([9]),buffer,eof);

                  Gewicht=buffer;

                  if (!eof)

                    fgets (fp,([12]),buffer,eof);

                    Test=buffer;

                    if (!eof)

                      fgets (fp,([10]),buffer,eof);

                      Werkstoff=buffer;

                      if (!eof)

                        fgets (fp,([10]),buffer,eof);

                        WerkstoffText=buffer;

                        if (!eof)

                          file get_char (fp,asc,eof);

                          chr (zeichen,asc);

                          TechnBewertung=zeichen;

                          if (!eof)

                            file get_char (fp,asc,eof);

                            chr (zeichen,asc);

                            if ((zeichen=";") and !eof)

                              file get_char (fp,asc,eof);

                              if ((asc=[13]) and !eof)

                                file get_char (fp,asc,eof);

                                if ((asc<>[10]) or eof)

                                  eof=[1];

                                endif

                              endif

                            endif

                          endif

                        endif

                      endif

                    endif

                  endif

                endif

              endif

            endif

          endif

          if (eof)

            msg (("Unerwartetes Ende der Quelldatei."));

          endif

        endif

        field[1]="";

        field[2]="";

        field[3]="";

        field[4]="";

        delim[1]="X";

        delim[2]="X";

        buffer=Abmessungstext;

        parse get_delimiter (buffer,found,field,delim);

        Abmessung1=field[1];

        Abmessung2=field[2];

        Abmessung3=field[3];

        record insert return (error);

      else

        eof=[1];

      endif

      rec_no ++;

      status_box update text ("Eingelesene Datensätze",rec_no);

    endwhile

    status_box cancel;

    file close (fp);

  else

    msg_error (("Datei konnte nicht geöffnet werden!"));

  endif

subend

 

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub fgets (fptr fp, short count, char txt, short eof);

  char c[1];

  short asc;

 

  txt="";

  while (count and !eof)

    file get_char (fp,asc,eof);

    chr (c,asc);

    string format (txt,"%s%s",txt,c);

    count --;

  endwhile

subend

 

/*************************************************************************/

/* updatedb                                                              */

/*                                                                       */

sub update_db (struct TDBANK db)

  short exist=[0];

  short error=[0];

  long rec_no=[0];

  long rel_no=[1];

  long max=[0];

  char rec[16][40];

  short codenr[16];

  short fieldcnt=[16];

  short share_no;

  char buffer[20];

 

  check_path (db:path,error);

  if (!error)

    exist pro (exist,db:path,db:proj);

    if (exist)

      exist (exist,db:path,db:proj,db:nam1,db:nam2,db:nam3);

      if (exist)

        share lock daba (share_no,error,buffer,"w",[1],db:path,db:proj,db:nam1,db:nam2,db:nam3);

      endif

      if (!error)

        exist (exist,db:path,db:proj,db:nam1,db:nam2,db:nam3);

        if (!exist)

          create (db:path,db:proj,db:nam1,db:nam2,db:nam3);

        endif

        exist (exist,db:path,db:proj,db:nam1,db:nam2,db:namlist3);

        if (!exist)

          create (db:path,db:proj,db:nam1,db:nam2,db:namlist3);

        endif

        use (db:path,db:proj,db:nam1,db:nam2,db:nam3);

        exist table (exist,db:list);

        if (!exist)

          insert_reclist (db,db:nam3,db:list);

        else

          table (db:list);

          insert_reclist2 (db,db:namlist3,db:tmp);

          use (db:path,db:proj,db:nam1,db:nam2,db:nam3);

          table (db:list);

          relation (db:path,db:proj,db:nam1,db:nam2,db:namlist3) table (db:tmp);

          modify;

          relation status last_record (max);

          while (rel_no<=max)

            relation enter (rel_no) (fieldcnt,codenr,rec);

            record exist (rec_no) (rec[1]);

            if (!rec_no)

              couple field_to_data (rec);

              record insert record (rec_no);

            endif

            rel_no ++;

          endwhile

          relation close;

          unlink (db:path,db:proj,db:nam1,db:nam2,db:namlist3);

          share unlock (share_no);

        endif

      else

        msg_error (("Datenbankzugriff nicht möglich!"));

      endif

    else

      msg_error (("Datenbankeinstellung überprüfen!"));

    endif

  endif

subend

 

/*************************************************************************/

/* Eingabemaske fuer Quellenpfad                                         */

/*                                                                       */

sub ed_ascii (struct TDBANK db,struct TDBANK startdb)

  char path[255];

  char file[13];

  short exit=[0];

  char buffer[255];

  short error=[0];

 

  fspec get_path (path,db:source);

  fspec get_name (file,db:source);

  ed var

    ("Pfad  : ","path","select_path (startdb,path)","","?")

    ("Datei : ","file","select_file (file,path)","","?")

    title ("Auswahl der Quelldatei")

    esc (exit);

 

  if (!exit)

    if (file<>"")

      fspec build (buffer,"%s%f",path,file);

      check_file (buffer,error);

      if (!error)

        db:source=buffer;

        write_rec_ini (db);

      endif

    else

      msg_error (("Es wurde keine Datei ausgewählt!"));

    endif

  endif

subend

 

 

/*************************************************************************/

/* Bibliothek   : sendlib.cmd                                            */

/* Firma        : PDP-Hannover Uwe Mayer E.K.                            */

/* Programm     : SENDLIB.CMD                                            */

/* Datum        : 09.04.1996                                             */

/* Beschreibung :                                                        */

/* Hinweis      :                                                        */

/*                                                                       */

/*************************************************************************/

 

#include dbank.h 

 

 

/*************************************************************************/

/* ASCII-Liste erstellen und "senden"                                    */

/*                                                                       */

sub send_ascii (struct TDBANK db,short free)

  short share_no;

  short error;

  char buffer[20];

 

  share lock projekt (share_no,error,buffer,"w",[1],db:path,db:proj);

  if (!error)

    create_ascii (db,free);

    share unlock (share_no);

  endif

subend

 

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub sep (fptr fp,short free)

  if (!free and free)

    file put_char (fp,[124]);

  endif

subend

 

 

/*************************************************************************/

/*                                                                       */

/*                                                                       */

sub write_blank (fptr fp, short count)

  while (count)

    file put_char (fp,[32]);

    count --;

  endwhile

subend