a99  V32.6
allegro Windows Hauptprogramm
 Alle Klassen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
aform.cpp
gehe zur Dokumentation dieser Datei
1 // aform.cpp : Formularfenster, Alternative zur Abfrageliste
2 // 1998-10-22
3 // Copyright 2011 Universitätsbibliothek Braunschweig, more see bottom
4 
5 
6 #include "stdafx.h"
7 #include "ca99.h"
8 #include "a99.h"
9 #include "aform.h"
10 
11 #ifdef _DEBUG
12 #define new DEBUG_NEW
13 #undef THIS_FILE
14 static char THIS_FILE[] = __FILE__;
15 #endif
16 
17 // MessageCode fuer Botschaft an a99
18 #define WM_GOODBYE WM_USER + 5
19 
20 // Globals
21 
22 int Foc=-1; // number of field that has the focus
23 int Frm=0; // currently selected form
24 int act=0; // flag
25 
26 int kfl=0; // killflag: 1=killfocus message wird erledigt
27 int xfl; // ==1: accept '#' as first character
28 int chkmd=1; // checkmode: 1:check all fields when changing form 0:not
29 
30 extern int frmn;
31 extern int frm[];
32 
33 CEdit *Lb[14]; // field labels "..." vor den Eingabefeldern
34 CaEdit *Ed[14]; // Eingabefelder
35 
36 char line[3000]; // Formularzeile
37 char *la; // pointer in line
38 char pre[14][40]; // prefixes #xxx
39 
40 char Ix[14][24]; // Index belonging to line (Alt+i)
41 
42 extern CHAR w[]; // Eingabefeld
43 
44 extern a99 *dlg; // main dialog
45 
46 /////////////////////////////////////////////////////////////////////////////
47 // Aform dialog
48 
49 extern ABASE *BANK;
50 
51 void Aform::CpFld(int i)
52 {
53  // Ein Feld kopieren, aus Datensatz oder Reservespeicher ins Formular
54  // Buttons Kopie und Reserve
55  char pref[40];
56  int l,m,k; char *ad;
57  k=strlen(pre[i])-skt; // normal: 0 (laenge des Vorspanns)
58  strcpy(pref,pre[i]);
59  if(strchr(pref,'~')) *strchr(pref,'~')=0; // for multifield
60  if(pref[2]=='-') { l=3; k-=3; } else l=0; // subfield
61  pref[tgl+l+2]=0; // pref = #nnn
62  ad=0;
63  if(*Aerror!=1)
64  {
65  if((m=Rec->Pos((CHAR *)pref+l))!=-1) // field exists already
66  ad=(char *)Rec->ga[m];
67  else if(pref[l+1]=='u') ad=(char *)UtFind(pref+l); // #uxy
68  }
69  else ad=(char *)UtFind(pref+l); // Reserve
70 // ad = gefundene Adresse
71  if(ad)
72  {
73 // if(*pref!='$' && pref[1]!='$') pre[i][tgl+l+2]=0; // Praetext wegnehmen, wenn schon existiert!
74  *line=0;
75  if(*ad!='#') l=2; else l=0;
76 // strcpy(line,ad+strlen(pre[i])+l);
77  if(pref[2]=='-') // this line is for a subfield
78  {
79  char SF=dlg->Cfg->SF;
80  char sc[4]; *sc=SF; sc[1]=pref[1]; sc[2]=0;
81  char *sf;
82  if(sc[1]=='$') sf=ad+skt+l-2; else sf=strstr(ad+skt+l,sc);
83  if(sf)
84  {
85  int i=0;
86  sf+=2+k;
87  while(*sf && *sf!=SF) line[i++]=*sf++;
88  line[i]=0;
89  }
90  }
91  else { strcpy(line,ad+strlen(pre[i])+l);
92  strncpy(pre[i],ad+l,strlen(pre[i])); // NEU $$031029
93  }
94  BANK->E3Coding((CHAR *)line,0,0); // ASCII -> ANSI //V26
95  Ed[i]->SetWindowText(line);
96  }
97 
98  return;
99 }
100 
101 
102 void Aform::display(int fo, int md)
103 {
104  // Formular fo anzeigen
105  // md==0 re-display
106  int j; char *ax;
107  int i=0;
108  if(fo>=frmn) return;
109 if(md)
110 {
111  extern char IxStart[];
112  int k=UtPfind(frm[fo])+1; //pa[k] = 1st line of form fo
113  if(k==EOF) return;
114  act=0;
115  j=0;
116  while(j<14) // clear the form
117  {
118  Lb[j]->SetWindowText("");
119  Ed[j]->SetWindowText("");
120  *pre[j++]=0;
121  }
122  xfl=0;
123  while(1)
124  {
125  j=0;
126  if(k>=phi) break;
127  strcpy(line,(char *)pa[k]);
128 
129  if(*line=='[' || pi[k]>29999) break;
130  if(*line=='C') { xfl=1; ++k; continue; }
131  if(*line=='<') // automatische eingabe
132  { // nach w kopieren
133  if(line[1]=='$') strcpy((char *)w,line+1); // <$a-#nnn Text
134  else { strcpy((char *)w+1,line+1); *w='#'; }
135  m_aView->SendMessage(WM_AFORM,10,-1); // and send to parent
136  ++k;
137  continue;
138  }
139  if(isdigit(*line))
140  { i=atoi(line)-1; while(isdigit(line[j])) ++j; }
141  if(i>13) i=13;
142  while(line[j]!=34) { pre[i][j]=line[j]; ++j; }
143  pre[i][j]=0;
144  ++j;
145  la=line+j;
146  while(line[j]!=34) ++j;
147 
148  ax=strchr(line,'|'); // Index prefix defined?
149  if(ax) { strcpy(Ix[i],ax); *ax=0; } // yes
150  else *Ix[i]=0; // strcpy(Ix[i],IxStart); // default
151  line[j++]=0;
152 
153  Lb[i]->SetWindowText(la); // Label
154  if(line[j]=='.') OnRes();
155  else Ed[i]->SetWindowText(line+j); // Text
156 
157  ++i;
158  if(i==14) break;
159  ++k;
160 }
161 } // if(md)
162 i=0;
163 while(i<14)
164 {
165  if(*pre[i]==0) break; // Zeile undefiniert
166  CpFld(i);
167  ++i;
168 }
169 
170  act=1;
171  if(md) Foc=0;
172 
173  return;
174 } // ENDE display()
175 
176 
177 Aform::Aform(CWnd* pParent /*=NULL*/)
178  : CDialog(Aform::IDD, pParent)
179 {
180  m_aView=pParent;
181  //{{AFX_DATA_INIT(Aform)
182  //}}AFX_DATA_INIT
183 }
184 
185 
186 BOOL Aform::Create(EXET *B, RECORD *R, int formnr)
187 {
188  // Nonmodal operation! formnr = number of form to activate
189  int i=0;
190  BOOL b=FALSE;
191  Dsp=B;
192  Rec=R;
193  if(!frmn) return b;
194  Frm=formnr;
195  skt=R->kfg->skt;
196  tgl=R->kfg->tgl;
197 
199 
200  extern WINDOWPLACEMENT adplace; // Koordinaten
201 
202  if(adplace.length) { adplace.showCmd=SW_SHOWNORMAL; SetWindowPlacement(&adplace);}
203 
204  extern CFont *bFont;
205  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
206  SetIcon(m_hIcon, FALSE); // Set small icon
207 
208  while(i<frmn)
209  {
210  m_cedi.InsertString(i,(char *)pa[UtPfind(frm[i])]);
211  ++i;
212  }
213  Ed[0]=&m_i1; Lb[0]=&m_l1;
214  Ed[1]=&m_i2; Lb[1]=&m_l2;
215  Ed[2]=&m_i3; Lb[2]=&m_l3;
216  Ed[3]=&m_i4; Lb[3]=&m_l4;
217  Ed[4]=&m_i5; Lb[4]=&m_l5;
218  Ed[5]=&m_i6; Lb[5]=&m_l6;
219  Ed[6]=&m_i7; Lb[6]=&m_l7;
220  Ed[7]=&m_i8; Lb[7]=&m_l8;
221  Ed[8]=&m_i9; Lb[8]=&m_l9;
222  Ed[9]=&m_i10; Lb[9]=&m_l10;
223  Ed[10]=&m_i11; Lb[10]=&m_l11;
224  Ed[11]=&m_i12; Lb[11]=&m_l12;
225  Ed[12]=&m_i13; Lb[12]=&m_l13;
226  Ed[13]=&m_i14; Lb[13]=&m_l14;
227 
228  if(bFont)
229  {
230  int i=14;
231  while(i) Ed[--i]->SetFont(bFont,TRUE);
232  }
233  SetWindowText(uif[353]);
234 
235  m_cedi.SetCurSel(formnr);
236  display(formnr); // show form 0
237 
238  return b;
239 }
240 
241 
242 void Aform::DoDataExchange(CDataExchange* pDX)
243 {
245  //{{AFX_DATA_MAP(Aform)
246  DDX_Control(pDX, IDC_FORM, m_form);
247  DDX_Control(pDX, IDC_L1, m_l1);
248  DDX_Control(pDX, IDC_L2, m_l2);
249  DDX_Control(pDX, IDC_L3, m_l3);
250  DDX_Control(pDX, IDC_L4, m_l4);
251  DDX_Control(pDX, IDC_L5, m_l5);
252  DDX_Control(pDX, IDC_L6, m_l6);
253  DDX_Control(pDX, IDC_L7, m_l7);
254  DDX_Control(pDX, IDC_L8, m_l8);
255  DDX_Control(pDX, IDC_L9, m_l9);
256  DDX_Control(pDX, IDC_L10, m_l10);
257  DDX_Control(pDX, IDC_L11, m_l11);
258  DDX_Control(pDX, IDC_L12, m_l12);
259  DDX_Control(pDX, IDC_L13, m_l13);
260  DDX_Control(pDX, IDC_L14, m_l14);
261  DDX_Control(pDX, IDC_CEDI, m_cedi);
262  DDX_Control(pDX, IDC_I1, m_i1);
263  DDX_Control(pDX, IDC_I2, m_i2);
264  DDX_Control(pDX, IDC_I3, m_i3);
265  DDX_Control(pDX, IDC_I4, m_i4);
266  DDX_Control(pDX, IDC_I5, m_i5);
267  DDX_Control(pDX, IDC_I6, m_i6);
268  DDX_Control(pDX, IDC_I7, m_i7);
269  DDX_Control(pDX, IDC_I8, m_i8);
270  DDX_Control(pDX, IDC_I9, m_i9);
271  DDX_Control(pDX, IDC_I10, m_i10);
272  DDX_Control(pDX, IDC_I11, m_i11);
273  DDX_Control(pDX, IDC_I12, m_i12);
274  DDX_Control(pDX, IDC_I13, m_i13);
275  DDX_Control(pDX, IDC_I14, m_i14);
276  //}}AFX_DATA_MAP
277 }
278 
279 
280 BEGIN_MESSAGE_MAP(Aform, CDialog)
281  ON_MESSAGE(WM_GOODBYE, OnAform) // Winx message fuer nichtmod IndexDialog
282  ON_MESSAGE(WM_AFORM, OnAform) // Winx message fuer nichtmod IndexDialog
283  //{{AFX_MSG_MAP(Aform)
284  ON_BN_CLICKED(ID_EXFORM, OnEnd)
285  ON_EN_SETFOCUS(IDC_I1, OnSetI1)
286  ON_EN_SETFOCUS(IDC_I2, OnSetI2)
287  ON_EN_SETFOCUS(IDC_I3, OnSetI3)
288  ON_EN_SETFOCUS(IDC_I4, OnSetI4)
289  ON_EN_SETFOCUS(IDC_I5, OnSetI5)
290  ON_EN_SETFOCUS(IDC_I6, OnSetI6)
291  ON_EN_SETFOCUS(IDC_I7, OnSetI7)
292  ON_EN_SETFOCUS(IDC_I8, OnSetI8)
293  ON_EN_SETFOCUS(IDC_I9, OnSetI9)
294  ON_EN_SETFOCUS(IDC_I10, OnSetI10)
295  ON_EN_SETFOCUS(IDC_I11, OnSetI11)
296  ON_EN_SETFOCUS(IDC_I12, OnSetI12)
297  ON_EN_SETFOCUS(IDC_I13, OnSetI13)
298  ON_EN_SETFOCUS(IDC_I14, OnSetI14)
299  ON_EN_KILLFOCUS(IDC_I1, OnOutI1)
300  ON_EN_KILLFOCUS(IDC_I2, OnOutI2)
301  ON_EN_KILLFOCUS(IDC_I3, OnOutI3)
302  ON_EN_KILLFOCUS(IDC_I4, OnOutI4)
303  ON_EN_KILLFOCUS(IDC_I5, OnOutI5)
304  ON_EN_KILLFOCUS(IDC_I6, OnOutI6)
305  ON_EN_KILLFOCUS(IDC_I7, OnOutI7)
306  ON_EN_KILLFOCUS(IDC_I8, OnOutI8)
307  ON_EN_KILLFOCUS(IDC_I9, OnOutI9)
308  ON_EN_KILLFOCUS(IDC_I10, OnOutI10)
309  ON_EN_KILLFOCUS(IDC_I11, OnOutI11)
310  ON_EN_KILLFOCUS(IDC_I12, OnOutI12)
311  ON_EN_KILLFOCUS(IDC_I13, OnOutI13)
312  ON_EN_KILLFOCUS(IDC_I14, OnOutI14)
313  ON_WM_SETFOCUS()
314  ON_BN_CLICKED(IDC_FILL, OnFill)
315  ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
316  ON_BN_CLICKED(IDC_AH, OnAh)
317  ON_BN_CLICKED(IDC_COPY, OnCopy)
318  ON_BN_CLICKED(IDC_RES, OnRes)
319  ON_CBN_SELENDOK(IDC_CEDI, OnSelected)
320  ON_WM_HELPINFO()
321  ON_BN_CLICKED(IDC_INDEX, OnIndex)
322  ON_BN_CLICKED(IDC_Z, OnZ)
323  ON_BN_CLICKED(IDC_BP, OnBp)
324  ON_BN_CLICKED(IDC_BM, OnBm)
325  ON_CBN_SETFOCUS(IDC_CEDI, OnComboSetFoc)
326  ON_BN_CLICKED(IDC_FORM, OnForm)
327  ON_BN_CLICKED(IDC_ALTM, OnAltm)
328  //}}AFX_MSG_MAP
329 END_MESSAGE_MAP()
330 
331 /////////////////////////////////////////////////////////////////////////////
332 // Aform message handlers
333 
334 void Aform::OK(int in)
335 {
336  return;
337 }
338 
339 
341 {
342  // [Enter] auf einer Formularzeile
343  // Foc ist die Zeilennummer (0-13)
344 
345  if(!act || Foc==-1) return;
346  int l; char *wp;
347  strcpy((char *)w,pre[Foc]);
348  wp=(char *)w+strlen((char *)w);
349  l=Ed[Foc]->GetWindowText(wp,3000); // get input
350  UtRemsp((CHAR *)wp);
351  l=strlen(wp);
352 // if(l)
353  {
354  if(*wp=='#' && !xfl) strcpy((char *)w,wp); // Direkteingabe mit #
355 //sprintf(Aerror,"%s,%s",pre[Foc],(char *)w); MessageBox(Aerror);
356 // MessageBox((char *)w);
357 
358 // if(!*wp || (!*pre[Foc] && *w!='#')) ;
359  if(*pre[Foc] || *w=='#')
360  {
361  m_aView->SendMessage(WM_AFORM, 10, l); // send w to parent
362  OnCopy(); // and get field back (may have been changed!)
363  }
364  // no correct prefix
365  }
366 if(!kfl)
367 {
368  kfl=1;
369  if(Foc<13) ++Foc; else Foc=0;
370 
371 // extern WINDOWPLACEMENT adplace;
372 // GetWindowPlacement(&adplace);
373  Ed[Foc]->SetFocus();
374  Ed[Foc]->SetSel(0,-1);
375  kfl=0;
376 }
377  extern int answ;
378  answ=IDYES;
379 
380  return;
381 }
382 
383 
385 {
386 return;
387 }
388 
389 extern int answ; // FLEX variable fuer yes/no/cancel
390 
391 void Aform::OnCancel() // keine echte message handling routine (nonmodal!)
392 {
393 extern WINDOWPLACEMENT adplace; // size and position for next call
394 GetWindowPlacement(&adplace);
395 
396  if(answ==-5) answ=IDYES; else answ=IDCANCEL;
397  DestroyWindow();
398 extern char fomd;
399  fomd=0;
400  m_aView->SendMessage(WM_AFORM, 15, 1); // tell parent we're done
401 
402 // OnMinimize(); // Esc: klein machen
403  return;
404 }
405 
406 void Aform::OnEnd() // get out of form
407 {
408  extern char endfm; // mit set F1 in FLEX
409  if(endfm) // end mode: // alle Felder durchpruefen! (Default)
410  {
411  Foc=0;
412  Ed[0]->SetFocus();
413  while(Foc<13) OnOK();
414  OnOK();
415  }
416  else OnOK(); // sonst nur das aktuelle Feld (set F0)
417 
418  answ=-5;
419  OnCancel();
420 }
421 
422 void Aform::OnSelected() // fill the form
423 {
424  display(Frm=m_cedi.GetCurSel());
425  Ed[Foc=0]->SetFocus();
426 }
427 
429 {
430  Foc=0;
431 }
432 
434 {
435  Foc=1;
436 }
438 {
439  Foc=2;
440 }
442 {
443  Foc=3;
444 }
446 {
447  Foc=4;
448 }
450 {
451  Foc=5;
452 }
454 {
455  Foc=6;
456 }
458 {
459  Foc=7;
460 }
462 {
463  Foc=8;
464 }
466 {
467  Foc=9;
468 }
470 {
471  Foc=10;
472 }
474 {
475  Foc=11;
476 }
478 {
479  Foc=12;
480 }
482 {
483  Foc=13;
484 }
485 
486 
487 void Aform::OnOutI1() // on kill focus I1 !
488 {
489  OK(1);
490 }
491 
492 void Aform::OnOutI2() // on kill focus I1 !
493 {
494  OK(2);
495 }
496 
497 void Aform::OnOutI3() // on kill focus I1 !
498 {
499  OK(3);
500 }
501 
502 void Aform::OnOutI4() // on kill focus I1 !
503 {
504  OK(4);
505 }
506 
507 void Aform::OnOutI5() // on kill focus I1 !
508 {
509  OK(5);
510 }
511 
512 void Aform::OnOutI6() // on kill focus I1 !
513 {
514  OK(6);
515 }
516 
517 void Aform::OnOutI7() // on kill focus I1 !
518 {
519  OK(7);
520 }
521 
522 void Aform::OnOutI8() // on kill focus I1 !
523 {
524  OK(8);
525 }
526 
527 void Aform::OnOutI9() // on kill focus I1 !
528 {
529  OK(9);
530 }
531 
532 void Aform::OnOutI10() // on kill focus I1 !
533 {
534  OK(10);
535 }
536 
537 void Aform::OnOutI11() // on kill focus I1 !
538 {
539  OK(11);
540 }
541 
542 void Aform::OnOutI12() // on kill focus I1 !
543 {
544  OK(12);
545 }
546 
547 void Aform::OnOutI13() // on kill focus I1 !
548 {
549  OK(13);
550 }
551 
552 void Aform::OnOutI14() // on kill focus I1 !
553 {
554  OK(14);
555 }
556 
557 
558 void Aform::OnSetFocus(CWnd* pOldWnd) // returning from a99.cpp
559 {
560  int foc=Foc;
561  CDialog::OnSetFocus(pOldWnd);
562  Foc=foc;
563  Ed[Foc]->SetFocus();
564 }
565 
566 
567 LRESULT Aform::OnAform(WPARAM wParam, LPARAM lParam)
568 {
569 
570 // diese messages werden durch Button Copy
571 // des nichtmodalen Winx ausgeloest
572 
573 if(wParam==20) // Copy a line from index
574 { // the line is in zeile
575  extern char zeile[];
576  int cm=1;
577  char *a; a=zeile;
578 // if(strchr(a,':')) { cm=0; a=strchr(a,':')+1; } // X:abc=xyz ==> abc
579 // if(cm) *a=toupper(*a);
580  while(*a && *a!='=')
581  {
582 // if(cm) if(a[1]==' ' || a[1]=='-') a[2]=toupper(a[2]); // klein->gross
583 extern int Esc;
584  if(*a==Esc) Ed[Foc]->esc=1;
585  Ed[Foc]->SendMessage(WM_CHAR,*a++);
586  }
587 
588  if(Foc>-1) Ed[Foc]->SetFocus();
589 }
590  if(wParam==31)
591  {
592  if(lParam==116) OnZ(); // F5
593  if(lParam==117) OnIndex();
594  if(lParam==118)
595  {
596  dlg->SendMessage(WM_GOODBYE,31,118); // Alt+Z
597  }
598  }
599  return 0L;
600 }
601 
602 
604 {
605  display(Frm=m_cedi.GetCurSel());
606  Ed[Foc]->SetFocus();
607 }
608 
609 void Aform::OnButton2() // Alt+t wurde gedrueckt, Zeichen 
610 {
611  Ed[Foc]->SendMessage(WM_CHAR,182);
612 }
613 
614 void Aform::OnAh()
615 {
616  extern a99 *dlg; // main dialog
617  dlg->helpinfo("_ad",uif[353]);
618  SetFocus();
619  return ;
620 }
621 
622 
624 {
625  // copy field from Rec into form
626  // char pref[20]; int m,l;
627  CpFld(Foc);
628  if(!kfl) Ed[Foc]->SetFocus();
629 }
630 
631 void Aform::OnRes() // copy from reserve
632 {
633  *Aerror=1;
634  CpFld(Foc);
635  *Aerror=0;
636  Ed[Foc]->SetFocus();
637 }
638 
639 
640 BOOL Aform::OnHelpInfo(HELPINFO* pHelpInfo)
641 {
642  extern a99 *dlg; // main dialog
643  char he[10];
644  strncpy(he+1,pre[Foc]+1,8);
645  he[4]=0;
646  if(*pre[Foc]=='$') // subfield $a-#nnn
647  { strncpy(he+1,pre[Foc]+4,3); UtRemsp((CHAR *)he); he[strlen(he)+1]=0; he[strlen(he)]= pre[Foc][1]; }
648 
649  *he='h';
650  if(!dlg->helpinfo(he,"!"))
651  dlg->helpinfo("_ad",uif[353]);
652  SetFocus();
653  return TRUE;
654 // return CDialog::OnHelpInfo(pHelpInfo);
655 }
656 
658 {
659  // user wants to see index for this field
660 
661  extern char zeile[];
662  if(!*Ix[Foc]) return; // no index of ViewList specified for this field
663  strcpy(zeile,Ix[Foc]);
664  if(zeile[1]=='V')
665  {
666  int v=dlg->ShowView(zeile+2,1);
667  if(v>0)
668  { char *p; p=strchr(zeile,'|');
669  if(p) *p=0;
670 // Dsp->E3Coding((CHAR *)zeile,0,0);
671  BANK->E3Coding((CHAR *)zeile,0,0); //V26
672  p=zeile; v=strlen(p)-1;
673  while(v && p[v]==' ') p[v--]=0; // leeres Ende abschneiden!
674 
675  while(*p)
676  {
677  extern int Esc; // Esc-Mechanismus soll nicht wirken!
678  if(*p==Esc) Ed[Foc]->esc=1;
679  Ed[Foc]->SendMessage(WM_CHAR,*p++);
680  }
681 // Ed[Foc]->SetWindowText(zeile);
682  }
683  }
684  else
685  {
686  Ed[Foc]->GetWindowText(zeile+strlen(zeile),200); // get input
687  if(strlen(zeile)==2) strcat(zeile,"a"); // Form.Zeile noch leer und keine Vorgabe
688 // Dsp->E3Coding((CHAR *)zeile,0,1); // ANSI -> ASCII
689  BANK->E3Coding((CHAR *)zeile,0,1); // ANSI -> ASCII //V26
690 
691  m_aView->PostMessage(WM_AFORM, 11, 1); // and send to parent
692  }
693  Ed[Foc]->SetFocus();
694 }
695 
696 void Aform::OnZ()
697 {
698  m_aView->SendMessage(WM_GOODBYE,8,0); // Alt+Z oder F5
699  SetFocus();
700 }
701 
702 
704 {
705  // Alt++ Nxt Field with same tag
706 
707  int i,j,m;
708  char pref[10];
709  extern a99 *dlg; // main dialog
710  int K=dlg->Cfg->tgl+1; // Pos. des Wiederholungszeichens
711  int L=0;
712  i=Foc; kfl=1; OnOK(); Foc=i; // Feld absenden
713  Ed[Foc]->SetFocus(); kfl=0; // Focus wieder drauf
714  if(pre[Foc][0]!='#') // ist es eins ohne # vorne? Also $
715  { j=3; L=3;
716  while(Foc>0) // zurueckgehen in der Feldliste des Formulars
717  {
718  if(pre[Foc][0]!='#') j=3; else j=0;
719  if(pre[Foc-1][0]!='#') i=3; else i=0;
720  if(strncmp(pre[Foc]+j,pre[Foc-1]+i,K)) break; // voriges ist ein anderes
721  --Foc;
722  }
723  }
724  else j=0;
725  strncpy(pref,pre[Foc]+j,7);
726  pref[K+1]=0;
727  m=Rec->Pos((CHAR *)pref); // Pos. dieses Felds im Satz
728  if(m==-1) return; // nicht vorh.
729  if(!strncmp(Rec->ga[m],Rec->ga[m+1],K))
730  {
731  j=Foc; char c=Rec->ga[m+1][K];
732  if(*pre[Foc]=='#') { pre[Foc][K]=c; ++j; }
733  while(pre[j][0]=='$' && !strncmp(pre[j]+3,pre[Foc]+L,K-1)) pre[j++][K+3]=c;
734  strncpy(pref,Rec->ga[m+1],K+1);
735  }
736  else
737  {
738  int rc; char c;
739  pref[K]='~'; pref[K+1]=pref[K+2]=' '; pref[K+3]='X';
740 *Aerror=0;
741  rc=Rec->Ins((CHAR *)pref);
742 // if(*Aerror) MessageBox(Aerror);
743  if(rc<0) return; // insert was not possible, repet code not allowed
744 // additional, for safety:
745  if(strncmp(pref,(char *)Rec->ga[rc],K)) return; // tag not the same
746  c=Rec->ga[rc][K]; Rec->ga[rc][K+1]=' ';
747 
748  strncpy(pref,Rec->ga[rc],K+2);
749  Rec->PartDel(rc,rc+1);
750  j=Foc;
751  if(*pre[j]=='#') { Ed[j]->SetWindowText(""); pre[j][K]=c; ++j; }
752  while(pre[j][0]=='$') { Ed[j]->SetWindowText(""); pre[j++][K+3]=c; }
753 
754  }
755  display(Frm,0);
756  pref[K+3]=0; Lb[Foc]->SetWindowText(pref); // show Label
757  kfl=1; Ed[Foc]->SetFocus(); kfl=0;
758 
759 }
760 
762 {
763  // alt+- prev field with same tag
764 
765  int i,j,m;
766  char pref[8];
767  extern a99 *dlg; // main dialog
768  int K=dlg->Cfg->tgl+1;
769  i=Foc; kfl=1; OnOK(); Foc=i; Ed[Foc]->SetFocus(); kfl=0;
770  if(pre[Foc][0]!='#')
771 { j=3;
772  while(Foc>0)
773  {
774  if(pre[Foc][0]!='#') j=3; else j=0;
775  if(pre[Foc-1][0]!='#') i=3; else i=0;
776  if(strncmp(pre[Foc]+j,pre[Foc-1]+i,K)) break;
777  --Foc;
778  }
779 }
780  else j=0;
781 
782  strncpy(pref,pre[Foc]+j,7);
783  pref[K+1]=0;
784  m=Rec->Pos((CHAR *)pref);
785  if(m==-1) { pref[K]=0; m=Rec->Pos((CHAR *)pref)+1; }
786  if(m==0) return;
787  if(!strncmp(pref,Rec->ga[m-1],K))
788  {
789  j=Foc; char c=Rec->ga[m-1][K];
790  if(*pre[Foc]=='#') { pre[Foc][K]=c; ++j; }
791  while(pre[j][0]=='$') pre[j++][K+3]=c;
792  strncpy(pref,Rec->ga[m-1],K+1);
793  Lb[Foc]->SetWindowText(pref); // show Label
794  }
795  display(Frm,0);
796  kfl=1; Ed[Foc]->SetFocus(); kfl=0;
797 
798 }
799 
801 {
802  extern char endfm;
803  if(chkmd && endfm) // end mode: // alle Felder durchpruefen!
804  {
805  chkmd=0;
806  extern int limo; int li=limo;
807  limo=6; // prevent irritation
808  Foc=0;
809  Ed[0]->SetFocus();
810  while(Foc<13) OnOK();
811  OnOK();
812  limo=li;
813  dlg->OnDBP(); dlg->OnRecDisp(); // show the altered rec
814  m_cedi.SetFocus();
815  chkmd=1;
816  }
817 }
818 
820 {
821  m_cedi.SetFocus();
822  if(!m_cedi.GetDroppedState()) m_cedi.ShowDropDown(TRUE);
823 }
824 
826 {
827  // Alt+m: Sonderzeichen-Hilfstext anzeigen, eins anwaehlen, mit Alt+m kopieren
828  extern a99 *dlg; // main dialog
829  extern char *hptr; extern int hmod;
830  char *h; h=hptr;
831  while(*h!='|') --h; ++h; // spchr.rtf enzeigen: (das ist der Hilfstext)
832  if(!hmod || (strncmp(h,"spchr",5) && hmod)) { dlg->helpinfo("spchr","?"); dlg->m_rdisp.SetFocus(); }
833  ShowWindow(SW_MINIMIZE);
834 }
835 /*
836  Copyright 2011 Universitätsbibliothek Braunschweig
837 
838  Licensed under the Apache License, Version 2.0 (the "License");
839  you may not use this file except in compliance with the License.
840  You may obtain a copy of the License at
841 
842  http://www.apache.org/licenses/LICENSE-2.0
843 
844  Unless required by applicable law or agreed to in writing, software
845  distributed under the License is distributed on an "AS IS" BASIS,
846  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
847  See the License for the specific language governing permissions and
848  limitations under the License.
849 */
850