a99  V32.6
allegro Windows Hauptprogramm
 Alle Klassen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
warqa.cpp
gehe zur Dokumentation dieser Datei
1 // warqa.cpp: aresqa-Fenster
2 // 2005 (V25)
3 // Copyright 2011 Universitätsbibliothek Braunschweig, more see bottom
4 
5 #include "stdafx.h"
6 #include "program.h"
7 #include "ca99.h"
8 #include "a99.h"
9 #include "warqa.h"
10 
11 #ifdef _DEBUG
12 #define new DEBUG_NEW
13 #undef THIS_FILE
14 static char THIS_FILE[] = __FILE__;
15 #endif
16 
17 extern char inpu[];
18 extern int accu; // Berech.Stufe
19 
20 extern EXET *Dsp;
21 
22 #define NULL 0
23 
24 /////////////////////////////////////////////////////////////////////////////
25 // Dialogfeld Warqa
26 
27 
28 Warqa::Warqa(CWnd* pParent /*=NULL*/)
29  : CDialog(Warqa::IDD, pParent)
30 {
31  //{{AFX_DATA_INIT(Warqa)
32  //}}AFX_DATA_INIT
33 }
34 
35 
36 void Warqa::DoDataExchange(CDataExchange* pDX)
37 {
39  //{{AFX_DATA_MAP(Warqa)
40  DDX_Control(pDX, IDC_CL, m_cl);
41  DDX_Control(pDX, IDC_BHELP, m_help);
42  DDX_Control(pDX, IDC_PLU, m_plu);
43  DDX_Control(pDX, IDC_MIN, m_min);
44  DDX_Control(pDX, IDC_CODE, m_code);
45  DDX_Control(pDX, IDC_STX, m_stx);
46  DDX_Control(pDX, IDC_ADD, m_add);
47  DDX_Control(pDX, IDC_UNDO, m_undo);
48  DDX_Control(pDX, IDC_REDO, m_redo);
49  DDX_Control(pDX, IDC_SW, m_x);
50  DDX_Control(pDX, IDC_SIZ, m_sz);
51  DDX_Control(pDX, IDC_SAVBUT, m_sav);
52  DDX_Control(pDX, IDC_SC, m_sc);
53  DDX_Control(pDX, IDOK, m_vo);
54  DDX_Control(pDX, IDCANCEL, m_vc);
55  DDX_Control(pDX, IDC_ARESQALIST, m_al);
56  DDX_Control(pDX, IDC_SRCH, m_srch);
57  //}}AFX_DATA_MAP
58 }
59 
60 
61 BEGIN_MESSAGE_MAP(Warqa, CDialog)
62  ON_MESSAGE(WM_GOODBYE, OnGoodbye) // fuer Del
63  //{{AFX_MSG_MAP(Warqa)
64  ON_BN_CLICKED(IDC_SAVBUT, OnSavbut)
65  ON_BN_CLICKED(IDC_CODE, OnCode)
66  ON_BN_CLICKED(IDC_BHELP, OnBhelp)
67  ON_LBN_DBLCLK(IDC_ARESQALIST, editLine)
68  ON_LBN_SELCHANGE(IDC_ARESQALIST, OnSelch)
69  ON_WM_SIZE()
70  ON_BN_CLICKED(IDC_MIN, OnMin)
71  ON_BN_CLICKED(IDC_PLU, OnPlu)
72  ON_BN_CLICKED(IDC_UNDO, OnUndo)
73  ON_BN_CLICKED(IDC_REDO, OnRedo)
74  ON_BN_CLICKED(IDC_ADD, OnAdd)
75  ON_BN_CLICKED(IDC_SW, OnSw)
76  ON_WM_HELPINFO()
77  ON_BN_CLICKED(IDC_OK, On_Ok)
78  ON_BN_CLICKED(IDC_CL, OnCl)
79  ON_WM_CONTEXTMENU()
80  //}}AFX_MSG_MAP
81 END_MESSAGE_MAP()
82 
83 
84 int cxa=0, cya=0, czn; // fuer Groesse des Fensters
85 
86 int Warqa::DoModal()
87 {
88  return CDialog::DoModal();
89 }
90 
91 // Uebergabe der Daten per iV = Variable inpu[]
92 extern WINDOWPLACEMENT arplace;
93 bool sxm; // start mode switch
94 
95 
96 BOOL Warqa::OnInitDialog() // Vorbereitung des Fensters
97 {
98  extern char aname[];
99  bool nmd=FALSE; // new mode
101 // ShowWindow(SW_MINIMIZE);
102  if(arplace.length) SetWindowPlacement(&arplace);
103  else { GetWindowPlacement(&arplace); // erste Nutzung: rechteck setzen
104  arplace.rcNormalPosition.left=172;
105  arplace.rcNormalPosition.right=850;
106  arplace.rcNormalPosition.top=96;
107  arplace.rcNormalPosition.bottom=600;
108  }
109  cxa=arplace.rcNormalPosition.right; cya=arplace.rcNormalPosition.bottom;
110  if(*aname) SetWindowText(aname);
111  else SetWindowText("...");
112 #ifdef A99
113  if(accu<3) // Bearb.Buttons unsichtbar machen
114 #endif // in alcarta immer:
115 {
116  m_sav.ShowWindow(SW_HIDE);
117  m_sc.ShowWindow(SW_HIDE);
118  m_undo.ShowWindow(SW_HIDE);
119  m_redo.ShowWindow(SW_HIDE);
120  m_add.ShowWindow(SW_HIDE);
121  m_x.ShowWindow(SW_HIDE);
122  m_cl.ShowWindow(SW_HIDE);
123 }
124  char *ch, *il;
125 
126 int fsz=1; // number of lines
127 bool md=0;
128 
129 sxm=FALSE;
130 
131 m_al.lm=0;
132 m_al.cli=0;
133 up=ne=0;
134 m_undo.EnableWindow(false); m_redo.EnableWindow(false);
135 vwmod=false; // not a ViewList
136 m_al.InitStorage( 6000, 256000 ); // should make it faster with big files
137 il=inpu;
138 UtRemsp((CHAR *)inpu);
139 cof=1; cf=1; // Annahme: Datei ist ANSI, Anzeige auch
140 int cd=1, cw=1;
141 strcpy(Aerror,"... ");
142 if(*inpu=='?') // ?ifilename, i=0/1 = ASCI/ANSI
143 {
144  md=true; cof=inpu[1]-'0'; strcpy(inpu+1,inpu+2); *inpu='*';
145 }
146 if(*inpu=='*') // !filename : load this file into listbox m_al
147 {
148  fsz=0;
149  strcat(Aerror,inpu+1);
150 if(strstr(inpu,".vw")) vwmod=true; // it is a ViewList
151  FILE *af=fopen(inpu+1,"r");
152  if(af)
153  while(fgets(line,4092,af)!=0)
154  {
155  if(strlen(line)>4090) MessageBox("Das ist keine Textdatei!","ACHTUNG");
156  UtRemsp((CHAR *)line);
157  ++fsz;
158  if(strpbrk(line,"„”")) ++cd;
159  if(strpbrk(line,"äöü")) ++cw;
160  m_al.AddString(line);
161  }
162  if(af) fclose(af);
163  il=0;
164 }
165 else if (*inpu) while((ch=strchr(il,'\n'))!=0) // file content is already in inpu
166 {
167  *ch=0;
168  strcpy(line,il);
169  ++fsz;
170  UtRemsp((CHAR *)line);
171  il=ch+1;
172 /*
173  if(strpbrk(line,"„”")) ++cd;
174  if(strpbrk(line,"äöü")) ++cw;
175 */
176  m_al.AddString(line);
177  *ch='\n';
178 }
179 else { il=0; strcat(Aerror,"Neue Datei"); nmd=TRUE; }
180 if(il) // letzte Zeile ist noch uebrig vom Fall *inpu=='*'
181 {
182 // strcat(Aerror,"Keine Datei");
183  strcpy(line,il);
184  ++fsz;
185  UtRemsp((CHAR *)line);
186  m_al.AddString(line);
187 }
188 
189 if(*aname) SetWindowText(aname); else SetWindowText(Aerror); *Aerror=0;
190 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
191 SetIcon(m_hIcon, FALSE); // Set small icon
192  // guess at file coding: cof==0 = ASCII
193 if(!md && fsz>19) // nicht bei ganz kleinen Dateien
194 {
195 if(cd>4 || cd>cw) cof=0;
196 if(cw>2 && cw<20 && cw>cd && cd<10) // ambiguous
197 {
198 sprintf(Aerror,"%s (%d/%d)",inpu+1,cd,cw);
199  int y=MessageBox("Anscheinend sind das Daten im Windows-Code, stimmts?\n(Nein : DOS-Code)",Aerror,MB_YESNO);
200  if(y==IDYES) cof=1; else cof=0;
201  *Aerror=0;
202 }
203 }
204 if(!cof) m_sc.SetWindowText("DOS"); else m_sc.SetWindowText("Win");
205 if(!cof) OnCode(); // sets cf=0
206 else cf=0;
207  m_sav.EnableWindow(false);
208 SetC(0);
209  m_al.SetCurSel(0);
210  m_al.SetFocus();
211  remove("aresqa.lst");
212  // Sonderfall: Entscheidungsliste
213 if(accu<5 && m_al.GetCount()<20)
214 {
215  int i=m_al.GetCount();
216  if(i<5) i=80; else i=i*16;
217  m_srch.ShowWindow(SW_HIDE);
218  m_stx.ShowWindow(SW_HIDE);
219  m_min.ShowWindow(SW_HIDE);
220  m_plu.ShowWindow(SW_HIDE);
221  m_sz.ShowWindow(SW_HIDE);
222  m_code.ShowWindow(SW_HIDE);
223  m_help.ShowWindow(SW_HIDE);
224 
225 arplace.rcNormalPosition.right=arplace.rcNormalPosition.left+500;
226 arplace.rcNormalPosition.bottom=arplace.rcNormalPosition.top+44+i;
227 SetWindowPlacement(&arplace);
228 }
229 extern CFont *bFont;
230  if(bFont)
231  {
232  SetFont(bFont);
233  m_al.SetFont(bFont);
234  }
235 // ShowWindow(SW_RESTORE);
236 if(nmd) OnAdd();
237  return TRUE;
238 // Klappt nicht: (deshalb Loesung mit WindowPlacement)
239 // if(cxa) m_al.MoveWindow(47,7,cxa-47,cya-10);
240 }
241 
242 void Warqa::SetC(int i) // set counter line/total
243 {
244  sprintf(Aerror,"%d / %d",i+1,m_al.GetCount()); m_sz.SetWindowText(Aerror); *Aerror=0;
245 }
246 
247 /////////////////////////////////////////////////////////////////////////////
248 // Behandlungsroutinen für Nachrichten Warqa
249 
250 void Warqa::OnCancel() // Esc-Button oder -Taste
251 {
252 int i=0;
253 if(*Aerror!=1) *inpu=0; // echtes Cancel
254 // wurde was veraendert? Dann fragen, ob speichern
255  if(m_sav.IsWindowVisible() && !m_sav.EnableWindow())
256  {
257  i=MessageBox("Vor Beendung noch speichern?","Frage",MB_YESNOCANCEL);
258  if(i==IDCANCEL) return;
259  if(i==IDYES) OnSavbut();
260  i=0;
261  }
262 #ifdef A99
263 while(i<nE) { sprintf(Aerror,"%d.aqa",i++); remove(Aerror); }
264 #endif
265  GetWindowPlacement(&arplace);
266 if(accu<5 && m_al.GetCount()<20)
267 {
268 arplace.rcNormalPosition.right=cxa;
269 arplace.rcNormalPosition.bottom=cya;
270 }
271 // sprintf(Aerror,"le=%d, ri=%d, to=%d, bo=%d",arplace.rcNormalPosition.left,arplace.rcNormalPosition.right,arplace.rcNormalPosition.top,arplace.rcNormalPosition.bottom);
272 // MessageBox(Aerror); *Aerror=0;
273 *Aerror=0;
274 extern char aname[];
275 *aname=0;
277 }
278 
279 bool Warqa::Log() // open next undo log file
280 {
281 #ifdef A99
282  ne=up;
283  sprintf(log,"%d.aqa",ne);
284  lg=fopen(log,"w");
285  if(!lg) return false; // logging not possible
286  ++ne; up=ne; m_undo.EnableWindow(true); m_redo.EnableWindow(false);
287  nE=max(ne,nE);
288 #endif
289  return true;
290 }
291 
292 LRESULT Warqa::OnGoodbye(WPARAM wParam, LPARAM lParam)
293 {
294 // diese messages werden durch aListBox ausgeloest,
295 // wenn eine Taste gedrueckt wurde
296 
297  if(wParam==31)
298  { int i;
299 int k=m_al.GetCount();
300 #ifdef A99
301  if(lParam==46 && accu>4) // backspace/del was pressed in listbox
302  {
303  int j=m_al.GetCurSel();
304  if(j==-1) return 0;
305  m_al.GetText(j,inpu);
306  if(Log())
307  { fprintf(lg,"d%d\n%s ",j,inpu);
308  fclose(lg);
309  }
310  m_al.DeleteString(j);
311  m_al.SetCurSel(j); SetC(j);
312  m_sav.EnableWindow(true);
313  }
314 #endif
315 #ifdef A99
316  if(lParam==45 && accu>4) // Einfg : neue Zeile
317  {
318  int i=m_al.GetCurSel();
319 // Bank->E3Coding((CHAR *)zeile,0,0); // ASCII->ansi
320 // sprintf(Aerror,"a=%s",zeile); MessageBox(Aerror); *Aerror=0;
321 
322  if(i==-1) return 0;
323  *inpu=0;
324  GetL *m_getl;
325  m_getl = new GetL(this);
326  m_getl->Ask("Neue Zeile");
327  delete m_getl;
328  if(*inpu)
329  {
330  m_al.InsertString(i,inpu);
331  m_al.SetCurSel(i+1); SetC(i+1);
332  m_sav.EnableWindow(true);
333  if(Log())
334  { fprintf(lg,"i%d\n%s ",i,inpu);
335  fclose(lg);
336  }
337  }
338  return 0;
339  }
340 #endif
341  if(lParam==37) // Cursor links : EDIT this line
342  editLine();
343 
344  if(lParam==122) if(this->IsZoomed()) ShowWindow(SW_NORMAL); else ShowWindow(SW_SHOWMAXIMIZED); // F11
345  if(lParam==34) { i=m_al.GetCurSel()+25; if(i>k) i=k-1; m_al.SetTopIndex(i); m_al.SetCurSel(i); SetC(i); } // PgDn
346  if(lParam==33) { i=m_al.GetCurSel()-25; if(i<0) i=0; m_al.SetTopIndex(i); m_al.SetCurSel(i); SetC(i); } // PgUp
347 
348  if(lParam==36) { m_al.SetTopIndex(0); m_al.SetCurSel(0); SetC(0); } // Home
349  if(lParam==35) { m_al.SetTopIndex(k-20); m_al.SetCurSel(k-1); SetC(k-1); } // End
350 
351  extern a99 *dlg; // main dialog
352 
353  if(lParam==116) dlg->SendMessage(WM_GOODBYE,8,0); // F5
354 /*
355  if(lParam==118)
356  {
357  dlg->SendMessage(WM_GOODBYE,31,118); // Alt+Z
358  }
359 */
360 
361  }
362 
363  int p=m_al.GetCurSel();
364 
365  if(wParam==32)
366  if(lParam=='#') // # : full line display
367  {
368  m_al.GetText(p,Aerror); MessageBox(Aerror); *Aerror=0;
369  }
370  else { m_srch.GetWindowText((char*)kd,32);
371  if(!*kd) strcpy(kd,"^");
372  strcat(kd,"x"); kd[strlen(kd)-1]=(char)lParam;
373  m_srch.SetWindowText((char *)kd);
374  m_srch.SetFocus();
375  OnOK();
376  }
377 
378  return 0L;
379 
380 }
381 
382 void Warqa::editLine() // gewaehlte Zeile bearb. (nach Enter-Druck)
383 {
384  if(accu<5) { OnOK(); return; }
385 #ifdef A99
386  char zeile[4096];
387  int i=m_al.GetCurSel();
388  if(i==-1) return;
389  strcpy(zeile,"EDIT=");
390  m_al.GetText(i,zeile+5);
391 // Bank->E3Coding((CHAR *)zeile,0,0); // ASCII->ansi
392 // sprintf(Aerror,"a=%s",zeile); MessageBox(Aerror); *Aerror=0;
393 
394  GetL *m_getl;
395  m_getl = new GetL(this,0);
396  m_getl->Ask(zeile);
397  delete m_getl;
398  if(*inpu && strcmp(zeile+5,inpu)) // zeile wirklich veraendert?
399  {
400  if(Log())
401  { fprintf(lg,"e%d\n%s\n%s ",i,zeile+5,inpu);
402  fclose(lg);
403  }
404  m_al.DeleteString(i);
405  m_al.InsertString(i,inpu);
406  m_al.SetCurSel(i+1); SetC(i+1);
407  m_sav.EnableWindow(true);
408  }
409 #endif
410  return;
411 }
412 
413 
414 void Warqa::OnSavbut() // Liste speichern
415 {
416  extern ABASE *BANK;
417 #ifdef A99
418  char vs[4096];
419  int j,i=0; int k=m_al.GetCount();
420  FILE *lst=fopen("aresqa.lst","w");
421  int ll=0; // line len of ViewList
422  if(!lst) return;
423  if(vwmod) // ViewList: max Zeilenlaenge feststellen
424  while(i<k)
425  { m_al.GetText(i,vs); ++i;
426  ll=max((unsigned)ll,strlen(vs));
427  }
428  i=0;
429  while(i<k)
430  {
431  // cof==1: ANSI 0: ASCII (datei) cf==0 ANSI cf=1 ASCII (display)
432  m_al.GetText(i,vs);
433 // if(!cof && !cf) BANK->E3Coding((CHAR *)vs,0,1); // ANSI -> ASCII
434 // if(cof && cf) BANK->E3Coding((CHAR *)vs,0,0); // ASCII -> ANSI
435  if(!cof && !cf) Dsp->E3Coding((CHAR *)vs,0,1); // ANSI -> ASCII //V26
436  if(cof && cf) Dsp->E3Coding((CHAR *)vs,0,0); // ASCII -> ANSI //V26
437  fprintf(lst,"%s",vs);
438  if(vwmod) // ViewList: Zeilenlaenge egalisieren
439  {
440  j=strlen(vs);
441  while(j++<ll) fputc(' ',lst);
442  }
443 
444  fprintf(lst,"\n",vs);
445  ++i;
446 }
447  m_sav.EnableWindow(false);
448  fclose(lst);
449 #endif
450 }
451 
452 void Warqa::OnOK() // Enter gedrueckt. Wenn [OK]-Button: -> On_Ok() !!
453 {
454  // focus auf Liste: Zeile bearb.
455  if(GetFocus()==&m_al) if(accu>4) { OnGoodbye(31,37); return; }
456  else On_Ok();
457  // focus auf Find: Suche
458  if(GetFocus()==&m_srch) { if(Srch(m_al.GetCurSel())==-1) MessageBox("SORRY"); return; }
459 }
460 
461 
462 int Warqa::Srch(int p, int inc) // search from line p
463 {
464  extern a99 *dlg; // main dialog
465  extern ABASE *BANK;
466  char z1[4096], t[4096], st[36];
467  char *u;
468  if(inc==1) ++p;
469  if(inc==-1) --p;
470  if(!inc) p=0, inc=1;
471  m_srch.GetWindowText(z1,100);
472 
473  if(*z1=='#') // #nnn
474  {
475  int z=atoi(z1+1)-1;
476  if(z<0) z=0; if(z>m_al.GetCount()) z=m_al.GetCount()-1;
477  m_al.SetCurSel(z); SetC(z);
478  m_al.SetFocus();
479  return 0;
480  }
481 #ifdef A99
482  if(*z1=='<') // <i : clip i characters from front
483  {
484  int i=0; int j=atoi(z1+1); int k=m_al.GetCount();
485  if(j<1) return 0;
486  while(i<k) {
487  m_al.GetText(i,z1);
488  strcpy(t,z1+j);
489  m_al.DeleteString(i);
490  m_al.InsertString(i++,t);
491  }
492  m_al.SetFocus();
493  m_sav.EnableWindow(true);
494  ne=up=0;
495  return 0;
496  }
497  if(*z1=='>') // >i : add i spaces at front
498  {
499  int i=0; int j=atoi(z1+1); int k=m_al.GetCount();
500  if(j<1) return 0;
501  strcpy(t," ");
502  while(i<k) {
503  m_al.GetText(i,z1);
504  strcpy(t+j,z1);
505  m_al.DeleteString(i);
506  m_al.InsertString(i++,t);
507  }
508  m_al.SetFocus();
509  m_sav.EnableWindow(true);
510  ne=up=0;
511  return 0;
512  }
513  if(*z1=='_' || *z1==',') // srch & repl
514  {
515  int na=ne;
516  int m=0,k=0; char str[250], ss[250];
517  char d,c=z1[k++]; str[0]=ss[0]=0;
518  while((d=z1[k++])!=c && d) str[m++]=d;
519  if(!m) return -1; // ,, oder __
520  str[m]=0; m=0;
521  if(d) while((d=z1[k++])!=c && d) ss[m++]=d;
522  ss[m]=0;
523  int i=p; int j=m_al.GetCount();
524  char *fn;
525  int a,b; a=strlen(str); b=strlen(ss)-a;
526  while(i>-1 && i<j)
527  {
528  m_al.GetText(i,z1);
529  strcpy(inpu,z1);
530  fn=z1;
531  while((fn=strstr(fn,str)))
532  { *fn=0; fn+=a;
533  sprintf(Aerror,"%s%s%s%c",z1,ss,fn,0);
534  fn+=b;
535  strcpy(z1,Aerror);
536  }
537  if(*Aerror)
538  {
539  if(k!=1000) k=MessageBox(z1,"Recht so?",MB_YESNOCANCEL);
540  if(k==IDCANCEL) break;
541  if(k!=1000 || k==IDYES) k=MessageBox("Alle ersetzen? Nein=nur dieses",str,MB_YESNOCANCEL);
542  if(k==IDYES) k=1000;
543  if(k==1000 || k==IDNO)
544  {
545  if(Log())
546  {
547  fprintf(lg,"e%d\n%s\n%s ",i,inpu,z1);
548  fclose(lg);
549  }
550  m_al.DeleteString(i);
551  m_al.InsertString(i,z1);
552  }
553  }
554  *Aerror=0;
555  ++i;
556  }
557  if(na<ne && k==1000)
558  {
559  sprintf(Aerror,"%d Ersetzungen",ne-na); MessageBox(Aerror);
560  m_sav.EnableWindow(true);
561  }
562  *Aerror=0;
563  }
564 #endif
565  //V26
566 // if(*z1=='^') BANK->E3Coding((CHAR *)z1+1,0,1); else BANK->E3Coding((CHAR *)z1,0,1); // ANSI->ASCII
567  if(*z1=='^') Dsp->E3Coding((CHAR *)z1+1,0,1); else Dsp->E3Coding((CHAR *)z1,0,1); // ANSI->ASCII
568  *st='^';
569  if(*z1=='^') dlg->xcode(st+1,z1+1,0); else dlg->xcode(st,z1,0);
570  if(*z1==92) strcpy(st,st+1); // term begins \: ignore \ (search for #nnn, for example!)
571  int i=p; int j=m_al.GetCount();
572  while(i>-1 && i<j)
573  {
574  m_al.GetText(i,z1);
575 // BANK->E3Coding((CHAR *)z1,0,1); // ANSI->ASCII
576  Dsp->E3Coding((CHAR *)z1,0,1); // ANSI->ASCII //V26
577  dlg->xcode(t,z1,0);
578  if(*st=='^') { u=t; while(*u==' ') ++u; if(!strncmp(u,st+1,strlen(st)-1)) break; }
579  else if(strstr(t,st)) break;
580  i+=inc;
581  }
582  if(-1<i && i<j)
583  { m_al.SetFocus();
584  m_al.SetCurSel(i); SetC(i);
585  return i;
586  }
587  else return -1;
588 }
589 
590 
591 void Warqa::OnSize(UINT ntype, int cx, int cy) // Groessenaenderung findet statt
592 {
593  CDialog::OnSize(ntype,cx,cy);
594 // empirische Werte fuer das Listenfeld:
595  m_al.MoveWindow(47,7,cx-47,cy-10);
596 }
597 
598 void Warqa::OnCode() // Code-Umschaltung ASCII <-> ANSI
599 {
600 // if(cxa) m_al.MoveWindow(47,7,cxa-47,cya-10,TRUE);
601  extern ABASE *BANK;
602  int cs=m_al.GetCurSel();
603  int i=0; int k=m_al.GetCount();
604  // cf=1 heisst : wir haben gerade ASCII
605  cf=1-cf;
606  while(i<k)
607  {
608  m_al.GetText(i,line);
609 // BANK->E3Coding((CHAR *)line,0,cf); // cf=1: ANSI->ASCII , 0: ASCII->ANSI
610  Dsp->E3Coding((CHAR *)line,0,cf); // cf=1: ANSI->ASCII , 0: ASCII->ANSI
611  m_al.DeleteString(i);
612  m_al.InsertString(i,line);
613 
614  ++i;
615  }
616 
617  m_al.SetFocus();
618  m_al.SetCurSel(cs);
619  m_sav.EnableWindow(true);
620 }
621 
622 void Warqa::OnBhelp() // Help
623 {
624  extern a99 *dlg; // main dialog
625  if(accu>4) dlg->helpinfo("_ar",uif[352]); else dlg->helpinfo("_ar0",uif[352]);
626  SetFocus();
627 }
628 
629 
630 void Warqa::OnSelch() // gewaehlte Zeile hat gewechselt
631 {
632  extern a99 *dlg; // main dialog
633  char vs[4096];
634 
635  // wurde Maus auf anderer Zeile gedrueckt als losgelassen? dann Zeile verschieben
636 #ifdef A99
637  if(m_al.lm && (m_al.d!=m_al.GetCurSel()))
638 {
639  if(Log()) { fprintf(lg,"m%d\n",m_al.d); }
640  m_al.GetText(m_al.d,vs);
641  m_al.DeleteString(m_al.d);
642  m_al.d=m_al.GetCurSel();
643  m_al.InsertString(m_al.d,vs);
644  if(log) { fprintf(lg,"%d",m_al.d); fclose(lg); }
645  m_al.SetCurSel(m_al.d);
646  m_sav.EnableWindow(true);
647 }
648 #endif
649  m_al.lm=false;
650  m_al.d=m_al.GetCurSel();
651  SetC(m_al.d);
652  m_al.GetText(m_al.d,vs);
653  long rr=0;
654 // Was fuer eine Zeile ist das? Sonderfaelle bearbeiten:
655  if(*vs=='i' && isdigit(vs[1]) && strchr(vs,9) ) rr=atol(vs+1); // inummer : aresqa-Tabelle
656  else if(isdigit(*vs) && strchr(vs,'|') && vwmod) rr=atol(vs); // nummer| : ViewListe
657  else if(*vs=='h' && vs[1]==' ' && vwmod) // help command (ViewListe)
658  { char *h;
659  h=strchr(vs,'|');
660  *h--=0;
661  while(h>vs && *h==' ') *h--=0;
662  dlg->helpinfo(vs+2,"?");
663  }
664  if(rr)
665  { dlg->dbFetch(rr,1); // no recnr, no display
666  dlg->nrec=0;
667  }
668 }
669 
670 
671 void Warqa::OnMin() // Button Minus: suche voriges Vorkommnis
672 {
673  if(Srch(m_al.GetCurSel(),-1)==-1) MessageBox("sorry");
674 }
675 
676 void Warqa::OnPlu() // Button Plus: suche naechstes Vorkommnis
677 {
678  if(Srch(m_al.GetCurSel(),1)==-1) MessageBox("sorry");
679 }
680 
681 void Warqa::OnUndo() // revoke latest action (repeateble!)
682 {
683  int j,k;
684 #ifdef A99
685  m_al.SetFocus();
686  if(!ne || !up) return;
687  sprintf(log,"%d.aqa",--up);
688  m_redo.EnableWindow(true);
689  if(!up) m_undo.EnableWindow(false);
690  lg=fopen(log,"r");
691  if(!lg) return; // logging not possible
692  fgets(line,40,lg);
693  j=atoi(line+1);
694  char fc=*line;
695  fgets(line,4095,lg);
696  fclose(lg);
697  UtRemsp((CHAR *)line);
698  if(!*line) strcpy(line," ");
699 
700  switch(fc)
701  {
702  case 'm': // move
703  k=atoi(line);
704  m_al.GetText(k,line);
705  m_al.DeleteString(k);
706  m_al.InsertString(j,line);
707  break;
708  case 'e': // edit
709  m_al.DeleteString(j);
710  case 'd': // delete
711  m_al.InsertString(j,line);
712  break;
713  case 'i': // insert
714  m_al.DeleteString(j);
715  break;
716  default: break;
717  }
718  m_al.SetCurSel(j); SetC(j);
719  m_sav.EnableWindow(true);
720 #endif
721 }
722 
723 void Warqa::OnRedo() // Un-Undo
724 {
725  int j,k;
726 #ifdef A99
727  m_al.SetFocus();
728  if(up>=ne) return;
729  sprintf(log,"%d.aqa",up++);
730  m_undo.EnableWindow(true);
731  if(up==ne) m_redo.EnableWindow(false);
732  lg=fopen(log,"r");
733  if(!lg) return; // logging not possible
734  fgets(line,40,lg);
735  j=atoi(line+1);
736  char fc=*line;
737  fgets(line,4095,lg);
738  if(fc=='e') fgets(line,4095,lg);
739  fclose(lg);
740 
741  switch(fc)
742  {
743  case 'm': // move
744  k=atoi(line);
745  m_al.GetText(j,line);
746  m_al.DeleteString(j);
747  m_al.InsertString(k,line);
748  j=k;
749  break;
750  case 'd': // delete
751  m_al.DeleteString(j);
752  break;
753  case 'e': // edit
754  m_al.DeleteString(j);
755  m_al.InsertString(j,line);
756  break;
757  case 'i': // insert
758  m_al.InsertString(j,line);
759  break;
760  default: break;
761  }
762  m_al.SetCurSel(j); SetC(j);
763  m_sav.EnableWindow(true);
764 #endif
765 }
766 
767 void Warqa::OnAdd() // neue Zeile am Ende anfuegen
768 {
769  int i;
770 if(accu<5) return;
771 #ifdef A99
772  *inpu=0;
773  GetL *m_getl;
774  m_getl = new GetL(this);
775 while(1)
776 {
777  m_getl->Ask("Neue Zeile (kommt ans Ende)");
778  if(*inpu)
779  {
780  i=m_al.AddString(inpu);
781  m_al.SetCurSel(i); SetC(i);
782  m_sav.EnableWindow(true);
783  }
784  else break;
785  if(Log())
786  { fprintf(lg,"i%d\n%s ",i,inpu);
787  fclose(lg);
788  }
789 }
790  delete m_getl;
791  m_al.SetFocus();
792 #endif
793 }
794 
795 void Warqa::OnSw() // Switch code for saving DOS <-> Win
796 {
797  if(cof) m_sc.SetWindowText("DOS"); else m_sc.SetWindowText("Win");
798  if(!sxm) { cf=1-cf; OnCode(); sxm=TRUE; } //test
799  cof=1-cof;
800  m_al.SetFocus();
801  m_sav.EnableWindow(true);
802 }
803 
804 BOOL Warqa::OnHelpInfo(HELPINFO* pHelpInfo)
805 {
806  OnBhelp(); return 1;
807 // return CDialog::OnHelpInfo(pHelpInfo);
808 }
809 
810 
811 void Warqa::On_Ok() // OK-Button
812 {
813  int i;
814  i=m_al.GetCurSel(); // markierte Zeile in inpu kopieren
815  m_al.GetText(i,inpu);
816  *Aerror=1; // flag fuer OnCancel
817  extern WINDOWPLACEMENT arplace;
818  OnCancel(); // sonst wie bei Esc
819 }
820 
821 void Warqa::OnCl()
822 {
823  int i=m_al.GetCurSel(); // markierte Zeile in inpu kopieren
824  if(i==-1) return;
825  m_al.GetText(i,inpu);
826  GetL *m_getl;
827  m_getl = new GetL(this);
828  sprintf(line,"Neue Zeile=%s",inpu);
829  m_getl->Ask(line);
830  delete m_getl;
831  if(*inpu)
832  {
833  m_al.InsertString(i+1,inpu);
834  m_al.SetCurSel(i+1); SetC(i+1);
835  m_sav.EnableWindow(true);
836  if(Log())
837  { fprintf(lg,"i%d\n%s ",i+1,inpu);
838  fclose(lg);
839  }
840  }
841 
842 }
843 
844 void Warqa::OnContextMenu(CWnd* pWnd, CPoint point)
845 {
846  MessageBox("Kein Kontextmenü!");
847  return;
848 }
849 
850 /*
851  Copyright 2011 Universitätsbibliothek Braunschweig
852 
853  Licensed under the Apache License, Version 2.0 (the "License");
854  you may not use this file except in compliance with the License.
855  You may obtain a copy of the License at
856 
857  http://www.apache.org/licenses/LICENSE-2.0
858 
859  Unless required by applicable law or agreed to in writing, software
860  distributed under the License is distributed on an "AS IS" BASIS,
861  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
862  See the License for the specific language governing permissions and
863  limitations under the License.
864 */
865 
866 
867