a99  V32.6
allegro Windows Hauptprogramm
 Alle Klassen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
winx.cpp
gehe zur Dokumentation dieser Datei
1 // winx.cpp : IndexFenster
2 // 1998/....
3 // Copyright 2011 Universitätsbibliothek Braunschweig, more see bottom
4 
5 // Oeffnen des Fensters: siehe Create()
6 
7 #include "program.h"
8 
9 #include "stdafx.h" // for MFC
10 #include "ca99.h" // main header, includes the class lib files
11 #include "a99.h" // for a99
12 #include "winx.h" // for index window
13 
14 #ifdef _DEBUG
15 #define new DEBUG_NEW
16 #undef THIS_FILE
17 static char THIS_FILE[] = __FILE__;
18 #endif
19 
20 // set the program name
21 #ifdef A99
22 #define PRGN "a99"
23 #else
24 #define PRGN "alcarta"
25 #endif
26 
27 // GLOBALs
28 
29 // int onflag=0; // how many times hit Enter on a result set?
30 int iz=0; // counter for lines
31 
32 // Fensterpositionen
33 WINDOWPLACEMENT ixplace;
34 WINDOWPLACEMENT listplace;
35 
36 // EXTERN
37 
38 extern RECNR result[]; // for sesult sets
39 extern int rsize; // size of res set
40 extern char zeile[]; // for srch term
41 extern int smod; // sort mode of res set (2==rec#)
42 extern char srText[]; // name of current result set
43 extern char srTerm[]; // search term from find field in a99
44 extern int flxflg; // ==1 if FLEX running
45 extern int accu; // access (Berechtigung aus .ini)
46 
47 // char output routines for export
48 extern int putBuff(int);
49 extern int Outnul(int);
50 
51 extern CHAR ex[]; // export buffer
52 extern int ei; // current length
53 
54 extern a99 *dlg; // a99 Hauptfenster
55 
56 extern char fowi, fomd, suwi;
57 
58 
59 char suchwort[260], found[260]; // Suchbegr., gefundene Zeile
60 char lil[260]; // Hilfszeile
61 char AUX[260]; // Hilfszeile
62 
63 
64 void cuts(char *a, char t) // cut a at t
65 {
66  char *b; b=a+1;
67  while(*b && *b!=t) ++b;
68  if(*b==t) b[1]=0;
69 }
70 
71 char *strStr(char *a, char*b) // find b in a
72 {
73  char *c;
74  if(*b=='!') c=strstr(a,b+1); // ! find whether b NOT in a
75  else return strstr(a,b);
76  if(c) return 0; else return a;
77 }
78 
79 
80 /////////////////////////////////////////////////////////////////////////////
81 // Winx dialog
82 
83 
84 Winx::Winx(CWnd* pParent /*=NULL*/) // Konstruktor fuer Kurzlisten-Dialog
85  : CDialog(Winx::IDD, pParent)
86 {
87  m_dView=pParent;
88  //{{AFX_DATA_INIT(Winx)
89  //}}AFX_DATA_INIT
90 }
91 
92 Winx::Winx(CView* iView) // nichtmodaler Konstruktor fuer ViewListen
93 {
94  m_iView = iView;
95 }
96 
97 BOOL Winx::Create(ABASE *aBank, int ij)
98 {
99  // Fenster oeffnen
100  // Call this for nonmodal operation!
101 
102  extern char IxStart[];
103  extern char IxShow[];
104  char Reg[200];
105  BOOL b;
106  int d=0, i=0;
108  extern CFont *bFont;
109  if(bFont)
110  {
111  m_ix1.SetFont(bFont);
112  m_ix2.SetFont(bFont);
113  m_in.SetFont(bFont);
114  }
115 
116  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
117  SetIcon(m_hIcon, FALSE); // Set small icon
118 
119  Bank=aBank;
120  wPar=ij;
121  ix=1;
122  tmd=0;
123  trunc=0;
124  trp=prl=pri=0;
125  thr=0;
126  *subs=*prf=0;
127  m_combo.ResetContent();
128 
129  i=0;
130  while(i<Bank->tnix) // logische Register
131  {
132 /*
133 #ifdef ALCARTA // MultiX-Register ausschliessen?
134  if(!isdigit(Bank->InamE[i][4])) { ++i; continue; }
135 #endif
136 */
137  sprintf(Reg,"%.3s : %s",Bank->InamE[i],Bank->InamX[i]);
138  d=m_combo.AddString(Reg);
139  m_combo.SetItemData(d,d+20);
140  ++i;
141  }
142  i=0;
143  while(i<((accu<4)?10:11)) // physische Register
144  {
145 #ifdef ALCARTA
146  extern bool i10a;
147  if(i==10 && !i10a) break;
148 #endif
149 
150  if(*Bank->IndeX[i]) sprintf(Reg,"%d : %s",i+1,Bank->IndeX[i]);
151  else { ++i; continue; }
152 // Bank->ExE3Coding((CHAR *)zeile,0,0); // ASCII->ANSI
153 #ifdef ALCARTA
154  extern char IxShow[];
155  if(IxShow[i]=='1')
156 #endif
157  {
158 // *Reg=d+'1';
159  d=m_combo.AddString(Reg);
160  m_combo.SetItemData(d,i);
161  }
162  ++i;
163  }
164  if(*zeile=='|') sprintf(Reg,"%d : ",zeile[1]-'0');
165  else sprintf(Reg,"%d : ",IxStart[1]-'0');
166  if(m_combo.SelectString(-1,Reg)==CB_ERR) m_combo.SetCurSel(0);
167  // m_combo.SelectString(-1,"1 :");
168 
169 
170 // m_headline.SetWindowText(zeile);
171 // strcpy(zeile,IxStart);
172  m_inb.SetWindowText(uif[330]);
173  m_ixl=&m_ix1;
174  tmd=1;
175 
176  if(*zeile=='|') { Bank->InSwix(Bank->ixf[zeile[1]-49]); filllist(zeile); } // MultiX
177  else { Bank->InSwix(Bank->ixf[IxStart[1]-49]); filllist(IxStart); }
178  extern char dbDir[];
179  extern char dbN[];
180 
181  if(Bank->IndeX[12]==nil) sprintf(Aerror,"%s : %s%s",PRGN,(char *)dbDir,dbN);
182  else sprintf(Aerror,"%s : %s",PRGN,(char *)Bank->IndeX[12]);
183  SetWindowText(Aerror); *Aerror=0;
184 
185  if(ij==11) { SetWindowText(uif[351]);
186  m_rset.SetWindowText(srText);
187  }
188  else SetWindowText(uif[350]);
189  m_showr.SetWindowText(uif[340]);
190  m_trp.SetWindowText(uif[332]);
191  m_sub.SetWindowText(uif[333]);
192  m_thr.SetWindowText(uif[334]);
193  m_setr.SetWindowText(uif[335]);
194  m_and.SetWindowText(uif[197]);
195  m_or.SetWindowText(uif[198]);
196  m_not.SetWindowText(uif[199]);
197  m_resdel.SetWindowText(uif[195]);
198  m_chg.SetWindowText(uif[337]);
199  m_copy.SetWindowText(uif[338]);
200  m_retr.SetWindowText(uif[369]);
201 
202  fox=focw=0; // fox=0: focus is on list
203  if(fowi==2) m_ilist.SetWindowText(uif[461]);
204  else m_ilist.SetWindowText(uif[368]);
205  if(flxflg || fomd) m_ilist.SetWindowText(" ");
206  m_ix1.InitStorage(25,254); // Set aside memory for index1
207  m_ix2.InitStorage(25,254); // .. 2
208  m_ix1.GetWindowPlacement(&listplace);
209 
210  tmd=0;
211  OnFlop();
212  OnFlop();
213  return b;
214 }
215 
216 
217 void Winx::DoDataExchange(CDataExchange* pDX)
218 {
220  //{{AFX_DATA_MAP(Winx)
221  DDX_Control(pDX, IDC_TRP, m_itrp);
222  DDX_Control(pDX, IDC_THR, m_ithr);
223  DDX_Control(pDX, IDC_SUB, m_isub);
224  DDX_Control(pDX, IDC_BTRP, m_trp);
225  DDX_Control(pDX, IDC_BTHR, m_thr);
226  DDX_Control(pDX, IDC_BSUB, m_sub);
227  DDX_Control(pDX, IDC_LIST, m_ilist);
228  DDX_Control(pDX, IDC_COPY, m_copy);
229  DDX_Control(pDX, IDC_BChg, m_chg);
230  DDX_Control(pDX, IDC_BUTRET, m_retr);
231  DDX_Control(pDX, IDC_SHOWR, m_showr);
232  DDX_Control(pDX, IDC_RSET, m_rset); // Name der Erg.Mg., unten mitte
233  DDX_Control(pDX, IDC_BUTTON1, m_inb);
234  DDX_Control(pDX, IDC_COMBO1, m_combo);
235  DDX_Control(pDX, IDC_IXL, m_ix1);
236  DDX_Control(pDX, IDC_IX2 , m_ix2);
237  DDX_Control(pDX, IDC_IN, m_in);
238  DDX_Control(pDX, IDC_RSAVE, m_setr);
239  DDX_Control(pDX, IDC_AND, m_and);
240  DDX_Control(pDX, IDC_OR, m_or);
241  DDX_Control(pDX, IDC_NOT, m_not);
242  DDX_Control(pDX, IDC_RESDEL, m_resdel);
243  //}}AFX_DATA_MAP
244 }
245 
246 
247 BEGIN_MESSAGE_MAP(Winx, CDialog)
248  ON_MESSAGE(WM_GOODBYE, OnGood) // Winx message fuer nichtmod IndexDialog
249  //{{AFX_MSG_MAP(Winx)
250  ON_LBN_SETFOCUS(IDC_IXL, OnSetIxl)
251  ON_CBN_SETFOCUS(IDC_IN, OnSetIn)
252 // ON_WM_CTLCOLOR()
253  ON_BN_CLICKED(IDC_B2, OnB2)
254  ON_BN_CLICKED(IDC_B1, OnB1)
255  ON_BN_CLICKED(IDC_B3, OnB3)
256  ON_BN_CLICKED(IDC_B4, OnB4)
257  ON_BN_CLICKED(IDC_B5, OnB5)
258  ON_BN_CLICKED(IDC_B6, OnB6)
259  ON_BN_CLICKED(IDC_B7, OnB7)
260  ON_BN_CLICKED(IDC_B8, OnB8)
261  ON_BN_CLICKED(IDC_B9, OnB9)
262  ON_BN_CLICKED(IDC_B10, OnB10)
263  ON_LBN_DBLCLK(IDC_IXL, OnDoubIxl)
264  ON_BN_CLICKED(IDC_Minimize, OnMinimize)
265  ON_LBN_SELCHANGE(IDC_IXL, OnSelch)
266  ON_BN_CLICKED(IDC_COPY, OnCopyLine)
267  ON_CBN_SELENDOK(IDC_COMBO1, OnSelchangeCombo1)
268  ON_BN_CLICKED(IDC_BUTTON1, OnEnter)
269  ON_BN_CLICKED(IDC_BChg, OnBChg)
270  ON_WM_HELPINFO()
271  ON_BN_CLICKED(IDC_LIST, OnList)
272  ON_BN_CLICKED(IDC_AND, OnAnd)
273  ON_BN_CLICKED(IDC_OR, OnOr)
274  ON_BN_CLICKED(IDC_NOT, OnNot)
275  ON_BN_CLICKED(IDC_SHOWR, OnShowr)
276  ON_BN_CLICKED(IDC_Z, OnZ)
277  ON_BN_CLICKED(IDC_BSUB, OnBsub)
278  ON_BN_CLICKED(IDC_BTHR, OnBthr)
279  ON_BN_CLICKED(IDC_BTRP, OnBtrp)
280  ON_EN_SETFOCUS(IDC_TRP, OnFocTrp)
281  ON_EN_SETFOCUS(IDC_SUB, OnFocSub)
282  ON_EN_SETFOCUS(IDC_THR, OnFocThr)
283  ON_BN_CLICKED(IDC_BUTRET, OnButret)
284  ON_BN_CLICKED(IDC_FLOP, OnFlop)
285  ON_BN_CLICKED(IDC_RESDEL, OnResdel)
286  ON_BN_CLICKED(IDC_IUP, OnIUp)
287  ON_BN_CLICKED(IDC_IDWN, OnIDwn)
288  ON_LBN_SETFOCUS(IDC_IX2, OnSetIxl)
289  ON_LBN_DBLCLK(IDC_IX2, OnDoubIxl)
290  ON_LBN_SELCHANGE(IDC_IX2, OnSelch)
291  ON_BN_CLICKED(IDC_HILF, SpeclHelp)
292  ON_BN_CLICKED(IDC_BUTTON2, OnMinimize)
293  ON_WM_SETFOCUS()
294  ON_CBN_DBLCLK(IDC_IN, OnOK)
295  ON_BN_CLICKED(IDC_RSAVE, OnRsave)
296  ON_WM_SIZE()
297  //}}AFX_MSG_MAP
298 END_MESSAGE_MAP()
299 
300 /////////////////////////////////////////////////////////////////////////////
301 // Winx message handlers
302 
303 void Winx::OnOK()
304 {
305  // kein echter message handler (Dialog ist nichtmodal)
306 
307  if(focw>1)
308 {
309  m_ix2.GetText(1,AUX);
310  m_in.SetWindowText(AUX+6);
311  focw=0;
312 }
313 
314  if(focw==0) // focus on enter field
315  {
316  char ent[256], ixc[10];
317 // if(m_in.GetWindowTextLength()) ;
318  if(!prl) m_in.GetWindowText(ent+2,255);
319  else { strcpy(ent+2,prf); m_in.GetWindowText(ent+2+prl,255); }
320 // if(ent[2]=='#') trunc=atoi(ent+3); // obsolet $$060115
321 // else
322  if(ent[2]=='|')
323  {
324  extern char IxShow[];
325  if(IxShow[ent[3]-'0']=='0')
326  {
327  int k=0; char c=ent[3];
328  while(k<Bank->tnix) { if(Bank->InamE[k][4]==c) {sprintf(AUX,"%c : ",c); break;} else ++k; }
329  if(k>=Bank->tnix) return ; // verbotenes Reg.
330  m_combo.SetCurSel(k);
331  }
332  else { sprintf(AUX,"%d : ",ent[3]-'0'); m_combo.SelectString(-1,AUX); }
333  strcpy(ent,ent+2);
334  }
335  else {
336  if(ent[2]=='>') { thr=atoi(ent+3);
337  m_ix2.GetText(0,ent);
338  strcpy(ent+2,ent+6);
339  }
340  if(ent[2]=='"') strcpy(subs,ent+3); // Nur AUXn mit ...
341  *ent='|'; ent[1]=ix+'0';
342  }
343  char *pq=strchr(ent,'?');
344  if(pq) { trunc=pq-ent-1; trp=0; }
345  else if(m_itrp.GetWindowTextLength())
346  {
347  trp=0;
348  m_itrp.GetWindowText(ixc,8);
349  if(trunc=atoi(ixc)) ++trunc; else trp=*ixc;
350  }
351 
352  if(trunc) { sprintf(ixc,"%d",trunc-1); m_itrp.SetWindowText(ixc); }
353 
354  if(m_ithr.GetWindowTextLength())
355  {
356  m_ithr.GetWindowText(ixc,8);
357  thr=atoi(ixc);
358  }
359  if(m_isub.GetWindowTextLength())
360  {
361  int i=m_isub.GetWindowText(subs,30); subs[i]=0;
362  Bank->E3Coding((CHAR *)subs,0,1); // ANSI->ASCII
363  }
364  else *subs=0;
365  m_in.InsertString(0,ent);
366  m_in.DeleteString(20);
367 //MessageBox(ent);
368  filllist(ent);
369 // m_ixl->SetFocus();
370 // m_ixl->SendMessage(WM_KEYDOWN,VK_DOWN);
371  return;
372  }
373 
374  if(focw==1) // focus on list
375  {
376  int rsi; // sonst Fehler im Hauptprogramm!
377  int m=m_ixl->GetCurSel();
378  _strnset(xstring,0,255); // clear xstring
379 // AUX wird immer aus m_ix2 geholt, da steht Original drin
380  m_ix2.GetText(m,xstring);
381 // SetClipboardData(2,xstring);
382  Bank->E3Coding((CHAR *)xstring,0,1); // ANSI -> ASCII
383 
384  char *j;
385  j=strstr(xstring,"->");
386  if(j) j+=2;
387 // j=xstring+strlen(xstring)-2;
388 // while(j>xstring+2 && *j!='>') --j;
389 // if(*Aerror!=1 && j>xstring+2 && j[1] && j[-1]=='-') // kommt "->" vor?
390  if(*Aerror!=1 && j && j[1] && j[2] && wPar<16) // not / + -
391  {
392 // ++j;
393  while(*j==' ') ++j;
394  prl=0; *prf=0;
395  if(*j=='|') strcpy(AUX,j);
396  else sprintf(AUX,"|%c%s",ix+'0',j); //wr extern
397 if(AUX[1]<'1' || AUX[1]>';') return;
398  Bank->E3Coding((CHAR *)AUX,0,0); // ASCII->ANSI
399  filllist(AUX);
400  sprintf(AUX,"%d : %s",ix,Bank->IndeX[ix-1]);
401  m_combo.SelectString(-1,AUX);
402 
403  m_ixl->SetFocus();
404  }
405  else // normale RegisterAUX ausgewaehlt
406  {
407  if(flxflg==2 || flxflg==1) { OnCopyLine(); return; } // FLEX running
408  char Op[4]="";
409  int pr=0; char op=0; // 16==AND 32==OR 64==NOT
410  if(wPar>15)
411  { // if(!rsize) return; // nothing to combine
412  if(!*srText) rsize=0; // (gleich nach Start)
413  pr=rsize; // es wurde + / - gedrueckt!
414  extern a99 *dlg; // main dialog
415  if(pr) dlg->ReSort(1);
416  if(wPar&16) { op='A'; strcpy(Op," + "); }
417  else if(wPar&64) { op='N'; strcpy(Op," - "); }
418  else if(*srText) strcpy(Op," / ");
419  }
420 // Den Titel der neuen Erg.Menge zusammensetzen
421  m_combo.GetLBText(m_combo.GetCurSel(),lil);
422  if(!isdigit(*lil)) sprintf(AUX,"%s%.3s %c",Op,lil,0); // virt Reg. ist eingeschaltet?
423  else sprintf(AUX,"%s|%c %c",Op,ix+'0',0); // nein, reales Register: |i
424  {int i=0; while(xstring[i]==' ') ++i;
425  while(isdigit(xstring[i])) ++i; while(xstring[i]==' ') ++i;
426  strcat(AUX,xstring+i); //wr extern
427 // sprintf(Aerror,"xsring+i=%s, AUX=%s<",xstring+i,AUX); MessageBox(Aerror); //test
428  }
429  if(trp || trunc) strcat(AUX,"?");
430  m=atoi(xstring);
431 
432 // if(!*Op)
433  // while(AUX[2]==' ')
434 //
435 // sprintf(Aerror,">%s<%s<",xstring+5,AUX); MessageBox(Aerror); //test
436 
437  if(m>99999) {// if(*Op) strcpy(AUX+4,AUX+6); else strcpy(AUX+2,AUX+5);
438  strcpy(xstring+6,xstring+8); // over 100000 results...
439  }
440  else if(m>9999) {// if(*Op) strcpy(AUX+4,AUX+5); else strcpy(AUX+1,AUX+4);
441  strcpy(xstring+6,xstring+7); // over 10000 results...
442  }
443  xstring[5]='_';
444 
445 // sprintf(Aerror,">%s<",xstring+5);MessageBox(Aerror,AUX); //test
446  if(prl)
447  {
448  strcpy(lil,xstring+6);
449  sprintf(xstring+6,"%s%s",prf,lil);
450  }
451  if(trp || trunc) // find entries in index, truncated
452  rsi=Bank->InGetSet(ix,xstring+5,1,MAXR,result,0,pr,op);
453  else // not trunc
454  rsi=Bank->InGetSet(ix,xstring+5,0,MAXR,result,0,pr,op);
455 
456  if(rsi==-1L) MessageBox(uif[367]);
457  if(wPar>15)rsize=rsi;
458  if(rsize==-1L) return;
459  fox=1;
460  m_ix1.SendMessage(WM_KEYDOWN,VK_DOWN);
461  m_ix2.SendMessage(WM_KEYDOWN,VK_DOWN);
462 strcpy(zeile,AUX);
463 extern int rss;
464  if(onflag && rsi>1 && wPar<16 && rss>2 && !flxflg) --rss;
465  ++onflag;
466  m_dView->SendMessage(WM_GOODBYE, wPar, rsi); // wPar = 10 or 11
467  if(flxflg!=1)
468  {
469  if(rsi<1L) *srText=*srTerm=0;
470  m_rset.SetWindowText(srText);
471  }
472  }
473  SetFocus();
474  return;
475  }
476 
477 
478 
479  if(m_iView!=NULL) // falls nichtmodal fuer view
480  {
481  UpdateData(TRUE);
482  m_iView->PostMessage(WM_GOODBYE, IDOK);
483  }
484  else // falls fuer Dialog
485  m_dView->PostMessage(WM_GOODBYE, IDOK);
486 // CDialog::OnOK();
487 }
488 
490 {
491  // keine echte message handling routine (nonmodal!)
492  if(afl) { SendMessage(WM_CHAR,27,27); iz=26; afl=0; return; }
493  OnMinimize(); // Esc: klein machen
494  onflag=0;
495  if(flxflg) *zeile=0;
496 
497  if(flxflg==2) m_dView->PostMessage(WM_GOODBYE, 20);
498  else m_dView->SendMessage(WM_GOODBYE, 15, 1); // tell parent we're done
499  return;
500 /*
501 if(m_iView!=NULL)
502 { // falls nichtmodal, OnCancel() der Basisklasse nicht aufrufen!
503  m_iView->PostMessage(WM_GOODBYE, IDCANCEL);
504 }
505 else
506 // CDialog::OnCancel(); // falls modal
507 
508  // FLEX running?
509 
510  m_dView->PostMessage(WM_GOODBYE, IDCANCEL);
511 */
512 }
513 
515 {
516  fox=0;
517  focw=1;
518 }
519 
521 {
522  if(!fox) { focw=0; m_in.SetEditSel(-1,0); }
523  else m_ixl->SetFocus();
524 }
525 
526 
527 int Winx::filllist(char *s)
528 {
529  // Liste mit Daten aus dem Index fuellen
530  // s=Start point for new display, ANSI!
531  // s=="|iabc" : Register i bei abc
532 
533  int zaehler;
534  int k;
535  MSG message;
536 // aktivieren, wenn restr. auch im index wirken sollen
537 // extern CHAR restri[];
538 
539  CHAR *restR=0;
540  if(s[3]==1) return 0;
541 
543 
544  iz=0;
545 
546 // if(*restri) restR=restri; else restR=0;
547  message.message=0;
548 #ifdef ALCARTA
549  extern char IxShow[];
550  if(s[1]==';') return 0; // Reg.11 nicht erlaubt
551 //int iu=IxShow[s[1]-49];
552 // if(iu!='1') return 0; // verbotene Reg. auch nicht
553 #else
554  if(s[1]==';' && accu<3) return 0;
555 
556 #endif
557  *suchwort='_';
558 if(s[1]<'<') //normal index
559 { strcpy(suchwort+1,s+2); ix=s[1]-'0';
560 }
561 else // symbolic index
562 {
563  ix=pri; sprintf(suchwort,"_%s%s",prf,s+2);
564 }
565 
566  if(trp) cuts(suchwort,trp);
567  else if(trunc) suchwort[trunc+prl]=0;
568 
569  if(!suchwort[1]) strcpy(suchwort,"_0");
570  Bank->E3Coding((CHAR *)suchwort,0,1); // ANSI ->ASCII
571 
572  m_ix1.ResetContent(); // clear displ
573  m_ix2.ResetContent(); // clear displ
574  zaehler=Bank->InFindEnt(ix,suchwort+1,found,-2); // find entries
575  if(!zaehler || (prl && strncmp(found,prf,prl))) zaehler=Bank->InFindEnt(ix,suchwort+1,found,2);
576  strcpy(suchwort+1,found);
577  {
578  m_in.SetWindowText("");
579  afl=true;
580  while(iz<25) // 25 Registereintraege holen und zeigen
581  {
582  CWaitCursor wait; //Sanduhr
583 /* if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
584  {
585  ::TranslateMessage(&message);
586 // if(message.message==WM_CHAR)
587  if(message.wParam==8 || message.wParam==27)
588  // BackSpace or ESC was pressed
589  {
590  break;
591  }
592  ::DispatchMessage(&message);
593  if(message.message==WM_CHAR) break;
594  }
595 */
596  if(trp) if(!strchr(suchwort,trp)) k=0; else { cuts(suchwort,trp); k=1; }
597  else if(trunc) suchwort[trunc+prl]=0;
598  if(trp)
599  zaehler=Bank->InGetSet(ix,suchwort,k,0,0,restR); // how many entries?
600  else if(trunc && strlen(suchwort)>=trunc+prl)
601  zaehler=Bank->InGetSet(ix,suchwort,1,0,0,restR); // how many entries?
602  else zaehler=Bank->InGetSet(ix,suchwort,0,0,0,restR); // how many entries?
603  if(zaehler>thr)
604  {
605  sprintf(lil,"%4d %s",zaehler,suchwort+1+prl);
606  if(*subs) if(!strStr(lil,subs)) { --iz; goto weiter; }
607  ei=0;
608  strcpy(found,"#u1 "); sprintf(found+dlg->Cfg->skt,"%c%s",ix+'0',lil);
609  Bank->ch1=(CHAR *)found;
610 // Fussabschnitt in den Indexparam. abarbeiten: Maskerade
611  Bank->Exp(dlg->Rec,1,(CHAR *)"\01");
612  ex[ei]=0;
613  Bank->E3Coding((CHAR *)lil,0,0); // ASCII -> ANSI
614  m_ix2.AddString(lil); // unveraend.Zeile kommt in ix2
615 
616  if(ei) { Bank->E3Coding(ex,0,0); m_ix1.AddString((char *)ex); }
617  else m_ix1.AddString(lil);
618 // if(iz<13 && (iz%3)==0) m_ixl->RedrawWindow(); // jede 3. zeile: Bild erneuern
619 // $$030210 unnoetig?
620  }
621  else --iz;
622 weiter:
623  if(trp && k) strcat(suchwort,"\xff");
625  if(!prl) { if(Bank->InFindEnt(ix, suchwort, found, 3)==0) break; }
626  else if(Bank->InFindEnt(ix, suchwort, found, 3)!=0) { if(strncmp(found,prf,prl)) break; }
627  else break;
628  strcpy(suchwort+1,found);
629  ++iz;
630  }
631  afl=false;
632  Bank->ExOutf(Outnul);
633  }
634  m_ix2.SetCurSel(1);
635  m_ix1.SetCurSel(1); // klappt leider nicht, liefert LB_ERR !
636  m_ixl->SetFocus(); // deshalb VK_DOWN, um Zeile 1 zu highlighten
637  if(message.message==WM_KEYDOWN)
638  {
639  fox=0;
640  m_in.SetFocus();
641 // m_in.SetWindowText("");
642  ::DispatchMessage(&message);
643 // m_in.SendMessage(WM_CHAR,message.wParam,message.lParam);
644  }
645  else m_ixl->SendMessage(WM_KEYDOWN,VK_DOWN);
646 // Notmassnahme, damit Cursor nicht immer tiefer rutscht, wenn man
647 // den Finger auf PgDn oder PgUp parkt:
648 if(m_ixl->GetCurSel()>1) m_ixl->SendMessage(WM_KEYDOWN,VK_UP);
649  return 1;
650 } // ENDE filllist()
651 
652 
653 void Winx::SwitchReg(int i)
654  {
655 // Register umschalten
656 // i>100: Zeile suchen, die mit Ziffer i-52 anfängt, d.h. 100 = '0'
657 // Wenn AUX = "#text, dann zur Stelle text, sonst zur selben Stelle wie im vorigen Reg.
658 
659  int d,e, j;
660  j=i;
661 
662  // if(i==ix) return;
663 if(i>100) // 101 = Reg.1, Ziffernbutton
664 {
665  Bank->InSwix(Bank->ixf[i-101]); // MultiX: korrekten Index einschalten
666  sprintf(AUX,"%d",i-100);
667  e=m_combo.SelectString(-1,AUX); // Zeile suchen, die mit der Ziffer anfaengt
668  if(e==CB_ERR)
669  {
670  int k=0; char c=i-52; // '1' = 49
671  while(k<Bank->tnix) if(Bank->InamE[k][4]==c) break; else ++k;
672  if(k>=Bank->tnix) d=-1 ; // verbotenes Reg.
673  else e=k;
674  m_combo.SetCurSel(e);
675  }
676  else i=i-101;
677  d=m_combo.GetItemData(e);
678 
679 }
680 else d=m_combo.GetItemData(i-20);
681  if(d==-1) return;
682 
683  int m=m_ixl->GetCurSel(); // AUX == "#text" : Stelle text suchen
684  // sonst Stelle aus aktueller Registerzeile nehmen
685  if(*AUX!='#') m_ix2.GetText(m,AUX);
686  xstring[4]='|';
687  if(*AUX=='#') strcpy(xstring+6,AUX+1); else strcpy(xstring+6,AUX+6);
688  strcpy(AUX+6,xstring+6);
689 // sprintf(Aerror,"d=%d, AUX=%s",d,AUX); MessageBox(Aerror);
690 
691 if(d>19)
692 {
693 extern char aix;
694  strcpy(AUX,AUX+6);
695  pri=Bank->InamE[d-20][4]; // z.B. PER 1 Personen oder WFR e1 Wortfragmente: pri='e'
696  if(pri>96 && pri<123) // Buchstabe: MultiX
697  { Bank->InSwix(pri); pri=Bank->InamE[d-20][5];
698  prl=strlen(Bank->InamE[d-20])-6; strcpy(prf,Bank->InamE[d-20]+6);
699  } // z.B. pri='e' -> '1'
700  else // Ziffer
701  { Bank->InSwix('d');
702  prl=strlen(Bank->InamE[d-20])-5; strcpy(prf,Bank->InamE[d-20]+5);
703  }
704  pri-='0';
705  sprintf(xstring+6,"%s%s",prf,AUX);
706 // sprintf(Aerror,"%s, %d, pri=%d, prl=%d, prf=%s, xstr+6=%s, AUX=%s",Bank->InamE[d-20],d,pri,prl,prf,xstring+6,AUX); MessageBox(Aerror);
707  d=pri-1;
708  xstring[5]=d+'1';
709 }
710 else
711 {
712  if(i>0 && !*Bank->IndeX[i-1]) return; // show no indexes without headline
713  prl=pri=0; *prf=0;
714  xstring[5]=i+'1';
715 }
716 // MessageBox(xstring+4);
717  trp=trunc=thr=*subs=0;
718  m_itrp.SetWindowText("");
719  m_ithr.SetWindowText("");
720  m_isub.SetWindowText("");
721 
722 if(j<100)
723 { if(filllist(xstring+4)) ; // m_combo.SetCurSel(d);
724  else m_combo.SetCurSel(ix-1);
725 }
726  else filllist(xstring+4);
727  // m_ixl->SetFocus();
728 // m_ixl->SetCurSel(1);
729  return;
730 
731 } // ENDE SwitchReg()
732 
733 
734 void Winx::OnB1()
735 {
736  SwitchReg(101);
737 }
738 
739 void Winx::OnB2()
740 {
741  SwitchReg(102);
742 }
743 
744 void Winx::OnB3()
745 {
746  SwitchReg(103);
747 }
748 
749 void Winx::OnB4()
750 {
751  SwitchReg(104);
752 }
753 
754 void Winx::OnB5()
755 {
756  SwitchReg(105);
757 }
758 
759 void Winx::OnB6()
760 {
761  SwitchReg(106);
762 }
763 
764 void Winx::OnB7()
765 {
766  SwitchReg(107);
767 }
768 
769 void Winx::OnB8()
770 {
771  SwitchReg(108);
772 }
773 
774 void Winx::OnB9()
775 {
776  SwitchReg(109);
777 }
778 
779 void Winx::OnB10()
780 {
781 #ifndef ALCARTA
782  SwitchReg(110);
783 #else
784  m_combo.ShowDropDown();
785 #endif
786 }
787 
789 {
790  OnOK();
791 }
792 
793 
794 void Winx::OnMinimize() // Fenster minim.
795 {
796  extern int ixon;
797  if(IsIconic())
798  {
799  onflag=0;
800  ShowWindow(SW_RESTORE);
801  m_ixl->SetFocus();
802  }
803  else
804  { ShowWindow(SW_MINIMIZE); ShowWindow(SW_HIDE); --ixon; }
805 }
806 
807 
809 {
810  // Zeile wurde gewechselt, pruefen:
811  // Anfang oder Ende des Ausschnitts erreicht?
812  // (bei Pfeil rauf/runter im Index)
813  int p=m_ixl->GetCurSel();
814  int o;
815  if(p==0 && !tmd) // top reached, get previous line
816  {
817  m_ix2.GetText(0,xstring); // this is the first line, as visible in index window
818  if(xstring[6]==1 || !atoi(xstring)) return; // ANFANG d. Registers: da steht Code 1
819  xstring[5]='_';
820  if(prl)
821  { o=6;
822  while(xstring[o]==' ') ++o;
823  strcpy(AUX,xstring+o); sprintf(xstring+6,"%s%s",prf,AUX);
824  }
825  *auxil='_';
826  Bank->E3Coding((CHAR *)xstring,0,1); // ANSI->ASCII
827 prevline:
828 {
829  CWaitCursor wait; //Sanduhr
830  strcpy(auxil+1,xstring+5); // Zeilen mit mehr als 9999 Eintr.
831  while(auxil[1]==' ') strcpy(auxil+1,auxil+2);
832  if(Bank->InFindEnt(ix, auxil+1, auxil+1, -2)!=0)
833  {
834  if(*prf) if(strncmp(auxil+1,prf,prl)) return; // prefix unequal
835  if(trp) cuts(auxil+1,trp);
836  else if(trunc) auxil[trunc+prl]=0;
837  if(trp) p=Bank->InGetSet(ix,auxil,1,0); // how many entries?
838  else if(trunc && strlen(auxil+1)>=trunc+prl-1)
839  p=Bank->InGetSet(ix,auxil,1,0);
840  else p=Bank->InGetSet(ix,auxil,0,0);
841 
842  if(*subs) if(!strStr(auxil,subs)) { strcpy(xstring+6,auxil+1); goto prevline; }
843 }
844 // p=Bank->InGetSet(ix,auxil,0,0); // find entries in index 3
845  m_ix1.DeleteString(24);
846  m_ix2.DeleteString(24);
847  if(prl) strcpy(auxil+1,auxil+1+prl);
848  sprintf(xstring,"%4d %s",p,auxil+1);
849 
851 ei=0;
852 strcpy(zeile,"#u1 "); sprintf(zeile+dlg->Cfg->skt,"%c%s",ix+'0',xstring);
853 Bank->ch1=(CHAR *)zeile;
854 Bank->Exp(dlg->Rec,1,(CHAR *)"\01");
855 ex[ei]=0;
856  Bank->E3Coding((CHAR *)xstring,0,0);
857  m_ix2.InsertString(0,xstring);
858  if(ei) { Bank->E3Coding(ex,0,0); m_ix1.InsertString(0,(char *)ex); }
859  else m_ix1.InsertString(0,xstring);
860 Bank->ExOutf(Outnul);
861 
862 // m_ix1.InsertString(0,xstring);
863  m_ixl->SetCurSel(0);
864  tmd=1;
865  m_ixl->SendMessage(WM_KEYDOWN,VK_DOWN);
866  m_ixl->SetFocus();
867  m_ixl->RedrawWindow();
868 // m_ixl->SendMessage(WM_KEYDOWN,VK_UP);
869  tmd=0;
870  }
871  }
872 
873  else if(p==24) // bottom reached, get nxt line
874  {
875  m_ix2.DeleteString(0);
876  m_ix1.DeleteString(0);
877  m_ix2.GetText(23,xstring+1); // Zeile 23 des Fensters nach xstring
878  *xstring='_';
879  while(xstring[1]==' ') strcpy(xstring+1,xstring+2);
880  while(isdigit(xstring[1])) strcpy(xstring+1,xstring+2);
881  while(xstring[1]==' ') strcpy(xstring+1,xstring+2);
882  if(prl) { strcpy(AUX,xstring); sprintf(xstring,"%s%s",prf,AUX); }
883  *auxil='_';
884  Bank->E3Coding((CHAR *)xstring+1,0,1);
885  if(trp || trunc) strcat(xstring,"\xFF");
886  strcpy(auxil,xstring);
887 // else strcat(xstring," ");
888 nxtline:
889  {
890 // CWaitCursor wait; //Sanduhr
891  if(Bank->InFindEnt(ix, xstring, auxil+1, 3)==0) ;
892  else
893  {
894 // MessageBox(Aerror); // Test: was hat InFindEx ergeben? (in index.cpp Aerror belegen!
895  if(*prf) if(strncmp(auxil+1,prf,prl)) return; // prefix unequal
896  if(trp) cuts(auxil+1,trp);
897  else if(trunc) auxil[trunc+prl]=0;
898 
899 // sprintf(Aerror,">%s<",auxil); MessageBox(Aerror); // Test
900 
901  if(trp) p=Bank->InGetSet(ix,auxil,1,0); // how many entries?
902  else if(trunc && strlen(auxil+1)>=trunc+prl-1)
903  p=Bank->InGetSet(ix,auxil,1,0); // how many entries?
904  else p=Bank->InGetSet(ix,auxil,0,0); // how many entries?
905 
906  if(*subs) if(!strStr(auxil,subs)) { strcpy(xstring+1,auxil+1); goto nxtline; }
907  }
908 
909 // p=Bank->InGetSet(ix,auxil,0,0);
910 
911  if(prl) strcpy(auxil+1,auxil+1+prl);
912  sprintf(xstring,"%4d %s",p,auxil+1);
913  Bank->ExOutf(putBuff);
914  ei=0;
915  strcpy(zeile,"#u1 "); sprintf(zeile+dlg->Cfg->skt,"%c%s",ix+'0',xstring);
916  Bank->ch1=(CHAR *)zeile;
917  Bank->Exp(dlg->Rec,1,(CHAR *)"\01"); // f.d. andere Registerfenster
918  ex[ei]=0;
919  Bank->E3Coding((CHAR *)xstring,0,0);
920  m_ix2.AddString(xstring);
921  if(ei) { Bank->E3Coding(ex,0,0); m_ix1.AddString((char *)ex); }
922  else m_ix1.AddString(xstring);
923  Bank->ExOutf(Outnul);
924  m_ixl->SetCurSel(23);
925  }
926 
927  }
928 
929  return;
930 } // ENDE OnSelch()
931 
932 
934 {
935  char *a;
936 
937 /*
938 #ifdef ALCARTA
939 if(*zeile!=1) // in alcarta: this button for specl help
940 {
941  SpeclHelp();
942  return;
943 }
944 #endif
945 */
946  int m=m_ixl->GetCurSel();
947  m_ix2.GetText(m,zeile);
948  sprintf(zeile,"%s%s",prf,zeile+6);
949  if(trunc || trp) strcat(zeile,"?");
950  if(Bank->i5) if((a=strchr(zeile,Bank->i5))!=0)
951  if(a[1]=='&') strcpy(zeile,a+1); // V23 : entity &#nnn;
952  else strcpy(zeile,a); // V14: xyz _nnn
953  m_dView->PostMessage(WM_GOODBYE, 20);
954  OnMinimize();
955 }
956 
957 
959 {
960  int i=m_combo.GetCurSel();
961  int d=m_combo.GetItemData(i);
962 
963  if(d<20) SwitchReg(d+101);
964  else SwitchReg(i+20);
965 }
966 
968 {
969  m_in.SetFocus();
970 }
971 
972 void Winx::OnBChg() // change position: copy line to input field
973 {
974  int m=m_ixl->GetCurSel();
975  m_ix2.GetText(m,zeile);
976  strcpy(zeile,zeile+6);
977  m_in.SetWindowText(zeile);
978  m_in.SetFocus();
979 
980 }
981 
982 int ipl,ipr;
983 
984 
985 LRESULT Winx::OnGood(WPARAM wParam, LPARAM lParam)
986 {
987  // Message wParam kommt vom Hauptprogramm: es gab Aenderungen, Anzeige neu aufbauen!
988  // ODER vom ListBox-Unterfenster: Cursortaste oder Buchstabe
989 
990  if(wParam==31 && lParam==122) // F11 Position und Groesse wechseln
991  {
992  GetWindowPlacement(&ixplace);
993  m_ix1.GetWindowPlacement(&listplace);
994  extern WINDOWPLACEMENT mwplace;
995  dlg->GetWindowPlacement(&mwplace);
996  int l,r,L,R;
997  l=ixplace.rcNormalPosition.left;
998  r=ixplace.rcNormalPosition.right;
999  L=mwplace.rcNormalPosition.left+1;
1000  R=mwplace.rcNormalPosition.right;
1001  if(l==L && r==R) l=ipl, r=ipr; else { ipl=l; l=L; ipr=r; r=R; }
1002  ixplace.rcNormalPosition.left=l;
1003  ixplace.rcNormalPosition.right=r;
1004  SetWindowPlacement(&ixplace);
1005  return 0;
1006  }
1007 
1008 
1009 int f7=0;
1010 if(wParam==31) if(lParam==120) f7=1; // F9 !!
1011 #ifdef A99
1012  else if(lParam==219) // alt+ss
1013  {
1014  if(accu>2) SwitchReg(111);
1015  }
1016 #endif
1017 if(wParam==32 || f7) // CHAR ascii-zeichen eingegeben
1018 {
1019 if(strchr("+-/",lParam))
1020 {
1021  extern int rss;
1022  if(onflag && rsize>1 && rss>2 && !flxflg) --rss;
1023  ++onflag;
1024 }
1025 
1026  int wp=wPar;
1027 // m_in.SetWindowText("");
1028  if(lParam=='+') //AND
1029  { wPar=wp+16; /* if(rsize>1) */ OnOK(); wPar=wp; m_ixl->SetFocus(); }
1030  else if(lParam=='/') //OR
1031  { wPar=wp+32; /* if(rsize>1) */ OnOK(); wPar=wp; m_ixl->SetFocus(); }
1032  else if(lParam=='-') //NOT
1033  { wPar=wp+64; /* if(rsize>1) */ OnOK(); wPar=wp; m_ixl->SetFocus(); }
1034 
1035  else if(strchr("<>#.,:()?=@;'",lParam) || f7) // truncator
1036  {
1037  if(lParam=='<') { if(trunc>2) --trunc; }
1038  else if(lParam=='>') { if(trunc) ++trunc; }
1039  else if(f7) {
1040  trp=trunc=thr=*subs=0;
1041  prl=pri=*prf=0;
1042  m_itrp.SetWindowText("");
1043  m_ithr.SetWindowText("");
1044  m_isub.SetWindowText("");
1045  }
1046  else if(lParam=='#')
1047  {
1048  m_ix2.GetText(m_ixl->GetCurSel(),xstring);
1049  Bank->E3Coding((CHAR *)xstring+6,0,1);
1050  MessageBox(xstring+6);
1051  return 0;
1052  }
1053  else // Sonderzeichen eingegeben: Trunkieren
1054  {
1055  trp=lParam; xstring[1]=0; *xstring=trp; m_itrp.SetWindowText(xstring);
1056  }
1057  if(trunc) { sprintf(xstring,"%d",trunc-1); m_itrp.SetWindowText(xstring); }
1058  m_ix2.GetText(m_ixl->GetCurSel(),xstring); // xstring = current line
1059  xstring[3]='|'; xstring[4]=ix+'0'; xstring[5]='_';
1060  if(prl) { strcpy(AUX,xstring+6); sprintf(xstring+6,"%s%s",prf,AUX); }
1061  filllist(xstring+3);
1062  m_ixl->SetFocus();
1063  m_ixl->SetCurSel(1);
1064  }
1065  else
1066  {
1067  fox=0;
1068  m_in.SetFocus();
1069  m_in.SendMessage(WM_CHAR, lParam);
1070  iz=25; // stops filllist() !
1071  }
1072 }
1073 
1074 if(wParam==31) // cursor key? PgUp/Dn = 33/34 left=37 right=39
1075  // Cursor up/down: siehe OnSelch() !
1076 {
1077  int x=1; // 1: liste erneuern
1078  switch(lParam)
1079  {
1080  case 37: // Left == Enter
1081  {
1082  extern char fowi;
1083  *Aerror=1;
1084  if(fowi==2) OnList(); else OnOK();
1085  return 0;
1086  }
1087  case 36: // Home Pos1
1088  {
1089  sprintf(xstring+3,"|%c_%s/",ix+'0',prf);
1090  break;
1091  }
1092 #ifdef A99
1093  case 46: // Del
1094  {
1095  if(accu<5) return 0;
1096  RECNR rn;
1097  int m=m_ixl->GetCurSel(); int n;
1098  _strnset(xstring,0,255); // clear xstring
1099  m_ix2.GetText(m,xstring); xstring[5]='_';
1100  Bank->E3Coding((CHAR *)xstring+6,0,1); // ANSI -> ASCII
1101  rn=Bank->InFindEnt(ix, xstring+5, zeile, 0, 0L);
1102 sprintf(Aerror,"%d:%s, rec# %ld",ix,zeile,rn);
1103  if(rn) n=MessageBox(Aerror,uif[491],MB_YESNOCANCEL | MB_ICONQUESTION | MB_DEFBUTTON2); // loeschen?
1104  else n=0;
1105  *Aerror=0;
1106  if(n==IDYES)
1107  { // _strnset(xstring,0,255); // clear xstring
1108  // m_ix2.GetText(m,xstring);
1109  n=aiEntLo(Bank->Adn*15+ix-1,(CHAR *)zeile,rn);
1110  if(!n) sprintf(xstring+3,"|%c%s",ix+'0',zeile);
1111  else { sprintf(Aerror,"Kein Erfolg mit %s, err# %d",xstring+6,n); MessageBox(Aerror); return 0; }
1112  }
1113  else return 0;
1114  break;
1115  }
1116 #endif
1117  case 35: // End
1118  {
1119  sprintf(xstring+3,"|%c_%s¦¦¦",ix+'0',prf);
1120  break;
1121  }
1122 
1123  case 34: // PgDn
1124  {
1125  int i=m_ixl->GetCount()-1;
1126 // if(i>16) i=16;
1127  if(m_ix2.GetText(i,AUX)==LB_ERR) return 0;
1128  xstring[3]='|'; xstring[4]=ix+'0'; xstring[5]='_';
1129  sprintf(xstring+6,"%s%s",prf,AUX+6);
1130 // Bank->E3Coding((CHAR *)xstring+6,0,1);
1131  break;
1132  }
1133  case 33: // PgUp
1134  {
1135  m_ix2.GetText(0,AUX);
1136  xstring[3]='|'; xstring[4]=ix+'0'; xstring[5]='_';
1137  *auxil='_';
1138  sprintf(xstring+6,"%s%s",prf,AUX+6);
1139 // Bank->E3Coding((CHAR *)xstring+6,0,1); // ANSI -> ASCII
1140  if(Bank->InFindEnt(ix, xstring+5, auxil+1, -2)!=0)
1141  {
1142  int i=0, z;
1143  MSG message;
1144  CWaitCursor wait; //Sanduhr
1145  if(prl) if(strncmp(auxil+1,prf,prl)) return 0; // 1st line same prefix?
1146  while(i++<22) // frueher 14
1147  {
1148  if(prl) if(strncmp(auxil+1,prf,prl)) break; // same prefix?
1149  strcpy(xstring+6,auxil+1);
1150  z=Bank->InFindEnt(ix, xstring+5, auxil+1, -2);
1151  if(!z) break;
1152  if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
1153  {
1154  ::TranslateMessage(&message);
1155  if(message.message==WM_CHAR)
1156  {
1157  break;
1158  }
1159  ::DispatchMessage(&message);
1160  }
1161  if(thr)
1162  {
1163  z=Bank->InGetSet(ix,auxil+1); // how many entries?
1164  if(z<thr+1) --i;
1165  }
1166  }
1167  }
1168  Bank->E3Coding((CHAR *)xstring+6,0,0); // ASCI -> ANSI
1169  break;
1170  }
1171  case 116: // F5
1172  OnZ();
1173  x=0;
1174  break;
1175  case 117: // F6
1176  SendMessage(WM_CLOSE);
1177  return 1;
1178  case 118: // F7
1179  m_dView->SendMessage(WM_GOODBYE,31,118); // Alt+Z
1180  x=0;
1181  break;
1182  default: x=0;
1183  break;
1184  }
1185  if(x) filllist(xstring+3);
1186 // m_ixl->SetFocus();
1187 // m_ixl->SetCurSel(1);
1188 
1189 }
1190 
1191 if(wParam==20) // signal for index re-display (e.g., after a rec was saved or deleted!)
1192 {
1193 int n=m_ixl->GetCurSel();
1194  m_ix2.GetText(1,xstring);
1195  xstring[4]='|'; xstring[5]=ix+'0';
1196  filllist(xstring+4);
1197  m_ix1.SetCurSel(n); m_ix2.SetCurSel(n);
1198  m_ixl->SetFocus();
1199 }
1200 if(wParam==21) // zeile[] contains new index line, ASCII! (FLEX+Flip : index |iabc oder ~ziabc (MultiX)
1201 {
1202  char zl[10];
1203  char zei[250];
1204  strcpy(zei,zeile);
1205  if(*zei=='~') // MultiX
1206  {
1207  Bank->InSwix(zei[1]);
1208  *zei='|';
1209  strcpy(zei+1,zei+2);
1210  }
1211  int i=zei[1]-'0'; if(!i) i=10;
1212  if(*zei!='|')
1213  if(zei[3]!=' ') { i=ix; memmove(zei+2,zei,250); *zei='|'; zei[1]=ix+'0'; }
1214  else // z.B. PER name
1215  {
1216  char nam[5]; strncpy(nam,zei,3); nam[3]=0;
1217  int d=m_combo.SelectString(-1,nam);
1218  if(d==-1) { d=0; m_combo.SetCurSel(0); } // MultiX
1219  else { Bank->E3Coding((CHAR *)zei,0,0); sprintf(AUX,"#%s",zei+4); m_combo.SetCurSel(d); OnSelchangeCombo1(); return 0; }
1220 
1221  zei[1]=Bank->InamE[d][4]; prl=strlen(Bank->InamE[d]+5); strcpy(prf,Bank->InamE[d]+5);
1222  sprintf(AUX,"|%c%s%s",zei[1],prf,zei+4);
1223  strcpy(zei,AUX);
1224  }
1225  else // zei=="|iabc"
1226  {
1227  sprintf(zl,"%d : ",i); // find line beginning |i :
1228  if(m_combo.SelectString(-1,zl)==CB_ERR) ; // MessageBox(uif[365]); // set combo position
1229  while(zei[2]==' ') strcpy(zei+2,zei+3); // |i xxx -> |ixxx
1230  if(*zeile!='~') Bank->InSwix(Bank->ixf[zei[1]-49]); // MultiX: richtigen Index einschalten
1231  }
1232  Bank->E3Coding((CHAR *)zei,0,0); // ASCII -> ANSI
1233  trp=trunc=0; // reset truncations
1234  filllist(zei);
1235  m_ixl->SetFocus();
1236  m_ixl->SetCurSel(1);
1237 }
1238  return 0;
1239 
1240 } // ENDE OnGood()
1241 
1242 
1243 BOOL Winx::OnHelpInfo(HELPINFO* pHelpInfo) // general help
1244 {
1245  extern a99 *dlg; // main dialog
1246  extern int inmo;
1247  inmo=1;
1248  dlg->helpinfo("_ix",uif[350]);
1249  inmo=0;
1250  SetFocus();
1251  return 1;
1252 // return CDialog::OnHelpInfo(pHelpInfo);
1253 }
1254 
1256 {
1257  extern a99 *dlg; // main dialog
1258  extern int inmo;
1259  inmo=1;
1260  char he[5]="_in";
1261  if(ix<10) he[2]=ix+'0';
1262  if(ix==10) strcpy(he+2,"10"); // Reg.10
1263  if(ix==11) strcpy(he+2,"11"); // Reg.11
1264  if(!dlg->helpinfo(he,uif[350])) // spezifische hilfe?
1265  dlg->helpinfo("_IX",uif[350]); // nein, dann allgemeine
1266  SetFocus();
1267  return;
1268 }
1269 
1270 
1272 {
1273  // Button &Liste
1274  extern char fowi;
1275  extern a99 *dlg; // main dialog
1276  if(flxflg) { m_ixl->SetFocus(); return; } // do nothing if FLEX running
1277  if(fowi==2) // Button says &Show
1278  {
1279  fowi=1;
1280  m_ilist.SetWindowText(uif[368]);
1281  m_ixl->RedrawWindow();
1282  OnOK();
1283  return;
1284  }
1285 
1286  char ent[6];
1287  m_in.GetWindowText(ent,5);
1288  int n=atoi(ent);
1289  int m=m_ixl->GetCurSel();
1290  m_ix2.GetText(m,zeile+1);
1291  *zeile=ix+'0'; zeile[1]='_'; strcpy(zeile+2,zeile+7);
1292 // if(Bank->i5) if((a=strchr(zeile+2,Bank->i5))!=0) strcpy(zeile,a); // V14: xyz _nnn
1293 
1294  Bank->E3Coding((CHAR *)zeile,0,1); // ANSI->ASCII
1295 
1296  m_dView->SendMessage(WM_GOODBYE, 21,n);
1297  OnMinimize();
1298 }
1299 
1301 {
1302 // Button AND
1303  OnGood(32,'+');
1304 }
1305 
1306 void Winx::OnOr()
1307 {
1308 // Button OR
1309  OnGood(32,'/');
1310 }
1311 
1313 {
1314 // Button NOT
1315  OnGood(32,'-');
1316 }
1317 
1319 {
1320  OnMinimize(); // Esc: klein machen
1321  m_dView->SendMessage(WM_GOODBYE, 15, 2); // tell parent we're done
1322 }
1323 
1324 
1325 
1327 {
1328  // Fenster neu anzeigen, z.B. cmd = SW_SHOWNORMAL
1329  int l;
1330  m_ix1.GetWindowPlacement(&listplace);
1331  GetWindowPlacement(&ixplace);
1332  l=ixplace.rcNormalPosition.left;
1333  if(!l) // unerklaerlich: manchmal ist dieses Placement
1334  // auf ein Icon geschrumpft
1335  {
1336  ixplace.rcNormalPosition.left=6;
1337  ixplace.rcNormalPosition.right=647;
1338  ixplace.rcNormalPosition.top=352;
1339  ixplace.rcNormalPosition.bottom=734;
1340  SetWindowPlacement(&ixplace);
1341  RedrawWindow();
1342  }
1343  if(cmd&SW_RESTORE)
1344  {
1345  extern CFont *bFont;
1346  if(bFont)
1347  {
1348  m_ix1.SetFont(bFont);
1349  m_ix2.SetFont(bFont);
1350  m_in.SetFont(bFont);
1351  }
1352 
1353  if(atoi(srText)>1) m_rset.SetWindowText(srText);
1354  else { m_rset.SetWindowText(""); *srText=*srTerm=0; }
1355  extern char fowi, fomd; // main dialog
1356  if(fowi==2) m_ilist.SetWindowText(uif[461]);
1357  else m_ilist.SetWindowText(uif[368]);
1358  if(flxflg || fomd) m_ilist.SetWindowText(" ");
1359  }
1360  CDialog::ShowWindow(cmd);
1361 }
1362 
1363 void Winx::OnZ() // to toggle display
1364 {
1365  m_dView->SendMessage(WM_GOODBYE,8,0); // Alt+Z
1366 }
1367 
1368 
1370 {
1371  m_isub.SetFocus();
1372 }
1373 
1375 {
1376  m_ithr.SetFocus();
1377 }
1378 
1380 {
1381  m_itrp.SetFocus();
1382 }
1383 
1385 {
1386  focw=2;
1387 }
1388 
1390 {
1391  focw=3;
1392 }
1393 
1395 {
1396  focw=4;
1397 }
1398 
1399 void Winx::OnButret() // Retour button : send F9
1400 {
1401  SendMessage(WM_GOODBYE,31,120);
1402 }
1403 
1405 {
1406 // Zwischen den beiden Darstellungen umschalten (Alt+u)
1407 // (sog. "Register-Maskerade")
1408 
1409 int i=m_ixl->GetCurSel();
1410 if(m_ixl==&m_ix1)
1411 {
1412  m_ixl=&m_ix2;
1413  m_ix1.ModifyStyle(WS_VISIBLE,0);
1414  m_ix2.ModifyStyle(0,WS_VISIBLE);
1415 }
1416 else
1417 {
1418  m_ixl=&m_ix1;
1419  m_ix2.ModifyStyle(WS_VISIBLE,0);
1420  m_ix1.ModifyStyle(0,WS_VISIBLE);
1421 }
1422 m_ixl->RedrawWindow();
1423 m_ixl->SetFocus();
1424 m_ixl->SetCurSel(i);
1425 }
1426 
1427 void Winx::OnResdel() // bestehende erg.menge schliessen (damit man neue machen kann)
1428 {
1429  extern int flxflg; extern char fomd;
1430  extern int rss;
1431  if(flxflg || fomd || !rsize) return;
1432  dlg->remRset(rss+1);
1433  *srText=0;
1434  m_rset.SetWindowText("");
1435  rsize=0;
1436  ShowWindow(SW_SHOWNORMAL);
1437  m_ixl->SetFocus();
1438 }
1439 
1440 extern CBrush dbr;
1441 
1442 
1444 {
1445  // Button [Erg]: save current line as result set
1446  // Einstellungen
1447  int extern rwu;
1448  char extern fowi;
1449  int f=focw; focw=1;
1450  int fw=fowi; fowi=1;
1451  int F=flxflg;
1452  flxflg=3;
1453  rwu=-2;
1454  OnOK();
1455 // einstellungen ruecksetzen
1456  flxflg=F;
1457  focw=f;
1458  fowi=fw;
1459 }
1460 
1461 void Winx::OnIUp() // Button [<<<]: one page up
1462 {
1463  OnGood(31, 33);
1464 }
1465 
1466 void Winx::OnIDwn() // Button [>>>]: one page down
1467 {
1468  OnGood(31, 34);
1469 }
1470 
1471 void Winx::OnSize(UINT ntype, int cx, int cy)
1472 {
1473  // Groessenaenderung findet statt insbes. F11
1474 
1475  CDialog::OnSize(ntype,cx,cy);
1476 // empirische Werte fuer das Listenfeld:
1477 
1478 if(ntype!=SIZE_RESTORED) return;
1479 
1480  int L,R,T,B;
1481 // int l,r,t,b;
1482 int b;
1483 
1484 L=listplace.rcNormalPosition.left;
1485 R=listplace.rcNormalPosition.right;
1486 T=listplace.rcNormalPosition.top;
1487 B=listplace.rcNormalPosition.bottom;
1488 
1489 //l=ixplace.rcNormalPosition.left;
1490 //r=ixplace.rcNormalPosition.right;
1491 //t=ixplace.rcNormalPosition.top;
1492 
1493 b=ixplace.rcNormalPosition.bottom;
1494 
1495 if(!b) return;
1496 
1497 // sprintf(Aerror,"L=%d, R=%d, T=%d, B=%d,\nl=%d, r=%d, t=%d, b=%d\n cx=%d, cy=%d",L,R,T,B,l,r,t,b,cx,cy); MessageBox(Aerror);
1498 
1499 // left, top, width, height:
1500 
1501  m_ix1.MoveWindow(L,T,cx-L,B-T);
1502  m_ix2.MoveWindow(L,T,cx-L,B-T);
1503 // m_ix1.MoveWindow(L,T,R-L-40,B-T);
1504 // m_ix2.MoveWindow(L,T,R-L-40,B-T);
1505 
1506 } // ENDE OnSize()
1507 
1508 /*
1509  Copyright 2011 Universitätsbibliothek Braunschweig
1510 
1511  Licensed under the Apache License, Version 2.0 (the "License");
1512  you may not use this file except in compliance with the License.
1513  You may obtain a copy of the License at
1514 
1515  http://www.apache.org/licenses/LICENSE-2.0
1516 
1517  Unless required by applicable law or agreed to in writing, software
1518  distributed under the License is distributed on an "AS IS" BASIS,
1519  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1520  See the License for the specific language governing permissions and
1521  limitations under the License.
1522 */
1523 
1524