/* * * Wo1.0e.c * * Aztec C V3.4: * cc (+Irad:inlcude.pre) +C +D +L -E140 wo.c * ln wo.o -lml32 -lcl32 * */ /* * inlcudes and defines */ /* I compile with pre-compiled include-files ! #include #include #include #include #include #include #include #include #include #include */ #define ABOUT " Wo 1.0e © Heinzel 2.3.90 " #define MX IntuitionBase->ActiveScreen->MouseX #define MY IntuitionBase->ActiveScreen->MouseY #define a_w IntuitionBase->ActiveWindow #define MAXLEN 255 #define KEYS sizeof(key)/sizeof(UBYTE) /* for codiere()/decodiere() */ #define MAXI 500 /* maximal number of records (can be modified, of course) */ /* * declarations */ UBYTE key[] = {0,1,2,3,4,5,6,7,8,9,}; /* for password */ struct Daten { char such_begriff[32]; char name[32]; char strasse[32]; char ort[32]; char tel[32]; }; struct Daten *person[MAXI]; int zaehler = 0; /* for person[zaehler] */ int vergleich(); /* for QuickSort() */ FILE *faus, *fopen(); struct FileHandle *fein; struct FileLock *lock; struct FileInfoBlock *eintrag; char *platz; struct IntuitionBase *IntuitionBase; struct GfxBase *GfxBase; long DosBase=0, j, k; long i=0; BOOL anderung = FALSE; /* has actual file been changed and must be saved ? */ struct IntuiMessage *message; ULONG class; USHORT code; struct MsgPort *timerport = NULL; /* for timer-clock */ long openerror = 1; struct timerequest timereq; ULONG zmem, tt =0; long diff = 0; struct Preferences prefs; /* for movemouse() */ struct RastPort *rp; struct Screen *screen; struct Window *w, *offne_win, *list_win, *input_win, *sesam_win; char liste[MAXI][33]; /* for list() */ char Date_Buffer[10] ; UBYTE DefString[30]; UBYTE Undo [30]; struct StringInfo TexString = /* for text in text-gadgets */ {DefString,Undo,0,30,0,0,0,0, 0,0, NULL, 0, NULL}; UBYTE DefString2[30] = ":wo/wo.file"; /* in offne_file-window */ UBYTE Undo2[30]; struct StringInfo TexString2 = {DefString2,Undo2,0,30,0,0,0,0, 0,0, NULL, 0, NULL}; UBYTE DefString3[30]; /* in input-window */ UBYTE Undo3[30]; struct StringInfo Input_TexString = {DefString3,Undo3,0,30,0,0,0,0, 0,0, NULL, 0, NULL}; UBYTE DefString4[70]; /* in sesam-window */ UBYTE Undo4[70]; struct StringInfo sesam_TexString = {DefString4,Undo4,0,70,0,0,0,0, 0,0, NULL, 0, NULL}; char alert1[] = {"\0\170\26 W r o n g P a s s w o r d , S u c k e r !\0\0"}; /* * Borders */ SHORT Pairs1[] = /* from Text Gadget Border */ {38,36, 250,36, 250,51, 38,51, 38,36 }; SHORT Pairs3[] = /* ... in offne_file */ {21,5, 231,5, 231,21, 21,21, 21,5 }; SHORT Pairs4[] = /* ... in input_window */ {38,16, 250,16, 250,31, 38,31, 38,16 }; struct Border StrBorder5 = {-17,-11, 1,0,JAM1, 5, Pairs4, NULL }; struct Border StrBorder4 = {0,0, 1,0,JAM1, 5, Pairs4, NULL }; struct Border StrBorder3 = {0,0, 1,0,JAM1, 5, Pairs3, NULL }; struct Border StrBorder = {0,0, 1,0,JAM1, 5, Pairs1, NULL }; /* * IntuiTexts */ BOOL ergebnis = FALSE; struct IntuiText postext1 = {0,1,JAM2,9,4,NULL,(UBYTE *)"Yo ",NULL }; struct IntuiText negtext1 = {0,1,JAM2,9,4,NULL,(UBYTE *)" NO !",NULL }; struct IntuiText text= {0,1,JAM1,9,6,NULL,(UBYTE *)" No reords ! "}; struct IntuiText text2= {0,1,JAM1,9,6,NULL,(UBYTE *)NULL}; struct IntuiText text3= {0,1,JAM1,6,6,NULL,(UBYTE *)" No current record !"}; struct IntuiText text4= {0,1,JAM1,9,6,NULL,(UBYTE *)" DELETE records ?"}; struct IntuiText text5= {0,1,JAM1,9,6,NULL,(UBYTE *)" Save modified file ?"}; struct IntuiText yo_str = {1,0,JAM2,49,2,NULL,(UBYTE *)"Yo !",NULL }; struct IntuiText del_str = {3,0,JAM2,1,0,0,(UBYTE *)" Del ",0}; struct IntuiText neu_str = {3,0,JAM2,1,0,0,(UBYTE *)" New ",0}; struct IntuiText print_str = {3,0,JAM2,1,0,0,(UBYTE *)" Print ",0}; struct IntuiText abbruch_str = {1,0,JAM1,25,2,0,(UBYTE *)"CANCEL",0}; struct IntuiText list_str = {3,0,JAM2,1,0,0,(UBYTE *)" List ",0}; struct IntuiText input_str = {3,0,JAM2,1,0,0,(UBYTE *)" Input ",0}; struct IntuiText speicher_str = {3,0,JAM2,1,0,0,(UBYTE *)" Save ",0}; struct IntuiText lade_str = {3,0,JAM2,1,0,0,(UBYTE *)" Open ",0}; struct IntuiText edit_str = {3,0,JAM2,1,0,0,(UBYTE *)" Edit ",0}; struct IntuiText yes_str = {1,0,JAM1,14,2,0,NULL,0}; struct IntuiText no_str = {1,0,JAM1,25,2,0,(UBYTE *)"Cancel",0}; struct IntuiText vor_str = {1,0,JAM1,4,0,0,(UBYTE *)"--->>>",0}; struct IntuiText zurueck_str = {1,0,JAM1,4,0,0,(UBYTE *)"<<<---",0}; struct IntuiText namen_str[13] = { {1,0,JAM2,3,1,0,NULL,0}, {1,0,JAM2,3,1,0,NULL,0}, {1,0,JAM2,3,1,0,NULL,0}, {1,0,JAM2,3,1,0,NULL,0}, {1,0,JAM2,3,1,0,NULL,0}, {1,0,JAM2,3,1,0,NULL,0}, {1,0,JAM2,3,1,0,NULL,0}, {1,0,JAM2,3,1,0,NULL,0}, {1,0,JAM2,3,1,0,NULL,0}, {1,0,JAM2,3,1,0,NULL,0}, {1,0,JAM2,3,1,0,NULL,0}, {1,0,JAM2,3,1,0,NULL,0}, {1,0,JAM2,3,1,0,NULL,0} }; /* * Gadgets */ struct Gadget yo_gad = {NULL, 66,25,120,12, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET, NULL,0,&yo_str,0,0, 2, 0}; struct Gadget sesam_gad = {&yo_gad, 26,9,200,12, GADGHCOMP, RELVERIFY, STRGADGET, NULL, 0, NULL, 0, (APTR)&sesam_TexString, 1,0}; struct Gadget input_tex_gad = {NULL, 45,20,200,12, GADGHCOMP, STRINGCENTER|RELVERIFY, STRGADGET, NULL, 0, NULL, 0, (APTR)&Input_TexString, 1,0}; struct Gadget zurueck_gad = {NULL, 74,170,54,8, GADGHBOX|GADGDISABLED,GADGIMMEDIATE|RELVERIFY, BOOLGADGET, NULL,0,&zurueck_str,0,0, 21, 0}; struct Gadget vor_gad = {&zurueck_gad, 6,170,54,8, GADGHBOX|GADGDISABLED,GADGIMMEDIATE|RELVERIFY, BOOLGADGET, NULL,0,&vor_str,0,0, 20, 0}; struct Gadget namen_gad[13] = { {&vor_gad, 10, 12,110,10, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET,NULL,0,&namen_str[0], 0,0,0, 0}, {&namen_gad[0], 10, 22,110,10, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET,NULL,0,&namen_str[1], 0,0,1, 0}, {&namen_gad[1], 10, 32,110,10, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET,NULL,0,&namen_str[2], 0,0,2, 0}, {&namen_gad[2], 10, 42,110,10, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET,NULL,0,&namen_str[3], 0,0,3, 0}, {&namen_gad[3], 10, 52,110,10, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET,NULL,0,&namen_str[4], 0,0,4, 0}, {&namen_gad[4], 10, 62,110,10, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET,NULL,0,&namen_str[5], 0,0,5, 0}, {&namen_gad[5], 10, 72,110,10, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET,NULL,0,&namen_str[6], 0,0,6, 0}, {&namen_gad[6], 10, 82,110,10, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET,NULL,0,&namen_str[7], 0,0,7, 0}, {&namen_gad[7], 10, 92,110,10, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET,NULL,0,&namen_str[8], 0,0,8, 0}, {&namen_gad[8], 10,102,110,10, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET,NULL,0,&namen_str[9], 0,0,9, 0}, {&namen_gad[9], 10,112,110,10, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET,NULL,0,&namen_str[10],0,0,10,0}, {&namen_gad[10],10,122,110,10, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET,NULL,0,&namen_str[11],0,0,11,0}, {&namen_gad[11],10,132,110,10, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET,NULL,0,&namen_str[12],0,0,12,0} }; struct Gadget no_gad = /* in offne_file-window */ {NULL, 20,27,100,12, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET, NULL,0,&no_str,0,0, 3, 0}; struct Gadget yes_gad = {&no_gad, 140,27,100,12, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET, NULL,0,&yes_str,0,0, 2, 0}; struct Gadget file_gad = {&yes_gad, 26,9,200,12, GADGHCOMP, STRINGCENTER|RELVERIFY, STRGADGET, NULL, 0, NULL, 0, (APTR)&TexString2, 1,0}; struct Gadget del_gad = {NULL, 119,140,42,8, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET, NULL,0,&del_str,0,0, 10, 0}; struct Gadget neu_gad = {&del_gad, 161,140,42,8, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET, NULL,0,&neu_str,0,0, 9, 0}; struct Gadget edit_gad = {&neu_gad, 127,126,50,8, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET, NULL,0,&edit_str,0,0, 8, 0}; struct Gadget lade_gad = {&edit_gad, 177,126,50,8, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET, NULL,0,&lade_str,0,0, 7, 0}; struct Gadget speicher_gad = {&lade_gad, 227,126,50,8, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET, NULL,0,&speicher_str,0,0, 6, 0}; struct Gadget input_gad = {&speicher_gad, 69,126,58,8, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET, NULL,0,&input_str,0,0, 5, 0}; struct Gadget list_gad = {&input_gad, 11,126,58,8, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET, NULL,0,&list_str,0,0, 4, 0}; struct Gadget abbruch_gad = {&list_gad, 12,140,99,12, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET, NULL,0,&abbruch_str,0,0, 3, 0}; struct Gadget print_gad = {&abbruch_gad, 203,140,74,8, GADGHBOX,GADGIMMEDIATE|RELVERIFY, BOOLGADGET, NULL,0,&print_str,0,0, 2, 0}; struct Gadget tex_gad = {&print_gad, 45,40,200,12, GADGHCOMP, STRINGCENTER|RELVERIFY, STRGADGET, NULL, 0, NULL, 0, (APTR)&TexString, 1,0}; struct Requester request = /* look at function schein-request() */ {NULL,-1,-1,1,1,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL}; /* * Windows */ struct NewWindow nw = { 40,20,291,176, 0,1, MOUSEBUTTONS|GADGETDOWN|GADGETUP|RAWKEY|CLOSEWINDOW, ACTIVATE|RMBTRAP|GIMMEZEROZERO|WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE, &tex_gad, NULL, (UBYTE *) ABOUT, NULL, NULL, 0,0,0,0, WBENCHSCREEN }; struct NewWindow nw3 = /* name-window */ { 345,20,260,55, 0,1, GADGETDOWN|GADGETUP, ACTIVATE|RMBTRAP|GIMMEZEROZERO|WINDOWDRAG|WINDOWDEPTH, &file_gad, NULL, NULL, NULL, NULL, 0,0,0,0, WBENCHSCREEN }; struct NewWindow nw4 = /* list-window */ { 345,5,145,194, 0,1, GADGETDOWN|GADGETUP|CLOSEWINDOW|MOUSEBUTTONS, ACTIVATE|RMBTRAP|GIMMEZEROZERO|WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE, &namen_gad[12], NULL, (UBYTE *) " List ", NULL, NULL, 0,0,0,0, WBENCHSCREEN }; struct NewWindow nw5 = /* input-window */ { 345,20,291,50, 0,1, GADGETDOWN|GADGETUP|CLOSEWINDOW, ACTIVATE|RMBTRAP|GIMMEZEROZERO|WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE, &input_tex_gad, /* Gad */ NULL, NULL, NULL, NULL, 0,0,0,0, WBENCHSCREEN }; struct NewWindow nw6 = /* sesam-window */ { 345,80,260,55, 0,1, GADGETUP|GADGETDOWN, ACTIVATE|RMBTRAP|GIMMEZEROZERO|WINDOWDRAG|WINDOWDEPTH, &sesam_gad, NULL, (UBYTE *) " password: ", NULL, NULL, 0,0,0,0, WBENCHSCREEN }; struct NewWindow new_inf_win = /* info_window */ {0,90,640,28, 1,2, NULL, ACTIVATE, NULL,NULL,NULL, NULL, NULL, 20,20,640,256, WBENCHSCREEN }; /* * master control program */ main(argc,argv) short argc; char *argv[]; { if( IntuitionBase->ActiveScreen->Width<639 ) ende(7); if(!(DosBase=(long)OpenLibrary("dos.library",0))) ende(1); if(!(GfxBase = (struct GfxBase *)OpenLibrary("graphics.library",0))) ende(2); if(!(IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library",0))) ende(3); GetPrefs(&prefs,(long)sizeof(struct Preferences)); if(!(timerport = CreatePort("Timer Port",0L))) ende(4); if((openerror = OpenDevice(TIMERNAME,UNIT_VBLANK,(char *)&timereq,0L))!=0) ende(4); if(argc>1) strcpy(DefString2,argv[1]); draw(); start_timer(); zmem = time(tt)-diff; print_time(diff); for(i=0;iUserPort->mp_SigBit) | (1<mp_SigBit)); while(message = (struct IntuiMessage *)GetMsg(w->UserPort)) { class = message->Class; code = message->Code; ReplyMsg(message); switch (class) { case CLOSEWINDOW: ende(0); case GADGETUP: do_gadget_text(message, w); break; case GADGETDOWN: do_gadgets_bool(message, w); break; case RAWKEY: if(code==80) ActivateGadget(&tex_gad,w,NULL); break; } /* End switch */ } /* End while1 */ while(GetMsg(timerport)) {start_timer(); diff=time(tt)-zmem; print_time(diff); } /* end while2 */ } /* end for */ } /* End schleife() */ do_gadget_text (mes, win) /* execute text-gadget */ struct IntuiMessage *mes; struct Window *win; { struct Gadget *igad; int gadgid; igad = (struct Gadget *) mes->IAddress; gadgid = igad->GadgetID; switch(gadgid) { case 1: suchen(DefString); break; }; } do_gadgets_bool (mes, win) /* execute BOOL-gadgets */ struct IntuiMessage *mes; struct Window *win; { struct Gadget *igad; int gadgid; igad = (struct Gadget *) mes->IAddress; gadgid = igad->GadgetID; switch(gadgid) { case 2: drucke(DefString); break; case 3: ende(0); case 4: list(); break; case 5: input(0); break; /* = new input */ case 7: if((anderung==TRUE)&&(zaehler>0)) /*load*/ {movemouse(190,38); ergebnis = AutoRequest(NULL,&text5,&postext1,&negtext1,NULL,NULL,260,50); if(ergebnis==TRUE) offne_file(1); /* if file has been saved: Request: Save ? */ } offne_file(0); break; case 6: if(zaehler==0) {movemouse(150,33); ergebnis = AutoRequest(NULL,&text,&postext1,&postext1,NULL,NULL,200,50); movemouse(w->LeftEdge+150,w->TopEdge+130); break;} offne_file(1); break; /*save*/ case 8: input(1); break; /* = edit record */ case 9: neu(); break; case 10: del(); break; }; } /* * the functions */ status(was) /* shows status */ char *was; { Move(rp,16,25); Text(rp,was,25); } s() {status("Click gadget ... ");} de() {Delay(50L); s();} schein_request(an) /* Requester: mouse-clicks won't be buffered ! */ int an; /* 1 = onn, 0 = off */ { if(an==1) {InitRequester(&request); Request(&request,w);} else EndRequest(&request,w); } draw() /* Opening the main-window */ { if(!(w = (struct Window *)OpenWindow(&nw))) ende(5); rp = w->RPort; SetRast(rp,2); SetAPen(rp,2);SetBPen(rp,1);Move(rp,16,12); Text(rp,"Status:",7); SetAPen(rp,0); RectFill(rp,12,140,110,151); /* blue background at CANCEL-gadget */ SetAPen(rp,3);SetBPen(rp,1); Move(rp,16,68); Text(rp," Number of records: ",20); Move(rp,16,85); Text(rp," Name:",7); Move(rp,16,95); Text(rp,"Street:",7); Move(rp,16,105);Text(rp," Town:",7); Move(rp,16,115);Text(rp," Phone:",7); SetAPen(rp,1);SetBPen(rp,2); DrawBorder(rp,&StrBorder,0,0); RefreshGadgets(&tex_gad,w,NULL); /* draw gadgets */ print_anzahl(); } drucke(wen) /* print address */ char *wen; { char john[30]; UBYTE *reg2 = 12570624; UBYTE a; a = *reg2&1; if(zaehler==0) {movemouse(150,33); ergebnis = AutoRequest(NULL,&text,&postext1,&postext1,NULL,NULL,200,50); goto close_it;} for(i=0;isuch_begriff)==NULL) { strcpy(john," Print <"); strcat(john,person[i]->such_begriff); strcat(john,"> ? "); (UBYTE *) text2.IText = (UBYTE *)john; movemouse((strlen(john)*10)-50,38); ergebnis = AutoRequest(NULL,&text2,&postext1,&negtext1,NULL,NULL,strlen(john)*10+5,50); if(ergebnis == FALSE) goto close_it; if(a==1) {status("Printer off_line ! "); de(); goto close_it; } if((faus=fopen("par:","w"))==NULL) {status("No parallel.device ! "); de(); return(0);} status("Printing address. "); fputs(person[i]->name,faus); fputs("\n",faus); fputs(person[i]->strasse,faus); fputs("\n",faus); fputs(person[i]->ort,faus); fputs("\n",faus); fputs(person[i]->tel,faus); fputs("\n\n",faus); if(faus) fclose(faus); s(); return(1); } } movemouse(150,33); ergebnis = AutoRequest(NULL,&text3,&postext1,&postext1,NULL,NULL,200,50); close_it: movemouse(w->LeftEdge+150,w->TopEdge+130); return(0); } /* end drucke() */ open_file(welches) /* read data-file into memory */ UBYTE welches[30]; { register char *z, *hilf; long number; status("Opening File ! "); if((eintrag = AllocMem(sizeof(struct FileInfoBlock),0L))==NULL) ende(6); if(( lock = (struct FileLock *) Lock(welches,ACCESS_READ))==NULL) {kein_wofile(); return(0);} if(Examine(lock,eintrag)==NULL) {kein_wofile(); return(0);} UnLock(lock); if((platz = AllocMem(eintrag->fib_Size,0L))==NULL) {kein_wofile(); ende(6);} if((fein=Open(welches,MODE_OLDFILE))==NULL) {kein_wofile(); return(0);} number = Read(fein,platz,eintrag->fib_Size); if(fein) Close(fein); get_sesam(); if(DefString4[0]!=0) {compute(DefString4); decodiere(platz,number); strcpy(DefString4,"\0"); } SetAPen(rp,2); RectFill(rp,77,78,285,120); SetAPen(rp,1); strcpy(DefString,"\0"); RefreshGadgets(&tex_gad,w,NULL); if(zaehler>0) { for(i=0;i break */ if((person[zaehler] = AllocMem(sizeof(struct Daten),0L))==NULL) break; z+=1; hilf = z; for(;*z!='[';z++) ; *(z-1) = '\0'; strcpy(person[zaehler]->such_begriff,hilf); z+=1; hilf = z; for(;*z!='[';z++) ; *(z-1) = '\0'; strcpy(person[zaehler]->name,hilf); z+=1; hilf = z; for(;*z!='[';z++) ; *(z-1) = '\0'; strcpy(person[zaehler]->strasse,hilf); z+=1; hilf = z; for(;*z!='[';z++) ; *(z-1) = '\0'; strcpy(person[zaehler]->ort,hilf); z+=1; hilf = z; for(;*z!=']';z++) ; *(z) = '\0'; strcpy(person[zaehler]->tel,hilf); zaehler += 1; } anderung = FALSE; if(eintrag) FreeMem(eintrag,sizeof(struct FileInfoBlock)); if(platz) FreeMem(platz,eintrag->fib_Size); print_anzahl(); RefreshGadgets(&tex_gad,w,NULL); s(); } /* End open_file() */ kein_wofile() /* error during read-in data into memory */ { if(lock) {UnLock(lock); lock = NULL;} if(platz) {FreeMem(platz,eintrag->fib_Size); platz = NULL;} if(eintrag) {FreeMem(eintrag,sizeof(struct FileInfoBlock)); eintrag=NULL;} status("File - Error ! "); Delay(50L); status("Load - Mode ... "); } mach_reset() /* wrong password: Good By ! */ { SetTaskPri(FindTask(0),127); DisplayAlert(RECOVERY_ALERT,&alert1[0],50); Forbid(); Disable(); sys_info(3,"Reset your system !!!",200); reset(); } reset() /* wrong password: reset ! */ { #asm move $0,34 #endasm } my_strcmp(t1,t2) char *t1,*t2; { register unsigned char c1, c2; register COUNT count; for(count=0; count<=strlen(t1); count++) { c1=t1[count]; c2=t2[count]; if(c1>180) c1=c1-131; if(c2>180) c2=c2-131; if(c2>=65 && c2<=90) c2 +=32; if(c1>=65 && c1<=90) c1 +=32; if(c1c2) return(1); } return(0); } suchen(wen) /* searches for term and and gives you suitable address */ char *wen; { for(i=0;isuch_begriff)==NULL) { SetAPen(rp,2); RectFill(rp,77,78,285,120); SetAPen(rp,1); Move(rp,80,85); Text(rp,person[i]->name,strlen(person[i]->name)); Move(rp,80,95); Text(rp,person[i]->strasse,strlen(person[i]->strasse)); Move(rp,80,105); Text(rp,person[i]->ort,strlen(person[i]->ort)); Move(rp,80,115); Text(rp,person[i]->tel,strlen(person[i]->tel)); return(1);} } status("No matching record ! "); de(); return(0); } /* end suchen() */ start_timer() /* initializing of timer-clock */ { timereq.tr_time.tv_secs = 0; timereq.tr_time.tv_micro = 999500; timereq.tr_node.io_Command = TR_ADDREQUEST; timereq.tr_node.io_Flags = 0; timereq.tr_node.io_Error = 0; timereq.tr_node.io_Message.mn_ReplyPort = timerport; SendIO((char *) &timereq.tr_node); } print_time(diff) /* prints time on screen */ long diff; { char s[8]; long h,m; h=diff/3600; diff -=h*3600; m=diff/60; diff -=m*60; if(h<10) {s[0] = '0'; s[1] = '0'+h;} else {s[0] = '0'+(h/10); s[1] = '0'+(h-((h/10)*10));} s[2] = ':'; if(m<10) {s[3] = '0'; s[4] = '0'+m;} else {s[3] = '0'+(m/10); s[4] = '0'+(m-((m/10)*10));} s[5] = ':'; if(diff<10) {s[6] = '0'; s[7] = '0'+diff;} else {s[6] = '0'+(diff/10); s[7] = '0'+(diff-((diff/10)*10));} s[8] = '\0'; Move(rp,210,12); Text(rp,&s,8L); } offne_file(knoff) /* load/save a file */ short knoff; { struct RastPort *rp_name; struct IntuiMessage *message2; ULONG class2; USHORT code2; struct Gadget *igad2; int gadgid2; schein_request(1); /*an*/ if(knoff==1) { status("Save - Mode ... "); nw3.Title = (UBYTE *)" File-Name (Save)"; yes_str.IText = (UBYTE *)" Save";} if(knoff==0) { status("Load - Mode ... "); nw3.Title = (UBYTE *)" File-Name (Load)"; yes_str.IText = (UBYTE *)" Load";} if(!(offne_win = (struct Window *)OpenWindow(&nw3))) {sys_info(3,"No List-WINDOW !",0); return(0);} rp_name = offne_win->RPort; SetRast(rp_name,2); SetAPen(rp_name,0); movemouse(a_w->LeftEdge+230,a_w->TopEdge+42); RectFill(rp_name,20,27,119,38); RectFill(rp_name,140,27,239,38); RefreshGadgets(&file_gad,offne_win,NULL); DrawBorder(rp_name,&StrBorder3,0,0); ActivateGadget(&file_gad,offne_win,NULL); for(;;) { Wait(1<UserPort->mp_SigBit); while(message2 = (struct IntuiMessage *)GetMsg(offne_win->UserPort)) { class2 = message2->Class; code2 = message2->Code; ReplyMsg(message2); igad2 = (struct Gadget *) message2->IAddress; gadgid2 = igad2->GadgetID; switch (class2) { case GADGETDOWN: switch(gadgid2) { case 2: if(knoff==0) {if(open_file(DefString2)!=0) goto sense; } /*yes */ if(knoff==1) {if(speichern(DefString2)!=0) goto sense; } ActivateGadget(&file_gad,offne_win,NULL); break; case 3: goto sense; break; /* no */ }; case GADGETUP: switch(gadgid2) {case 1: if(knoff==0) {if(open_file(DefString2)!=0) goto sense; } /*yes */ if(knoff==1) {if(speichern(DefString2)!=0) goto sense; } ActivateGadget(&file_gad,offne_win,NULL); break; }; }; } /* end while */ } /* end for */ sense: schein_request(0); /*off*/ if(offne_win) {CloseWindow(offne_win); offne_win=NULL; s(); movemouse(w->LeftEdge+150,w->TopEdge+130); } } /* End offne_file() */ int vergleich(a,b) /* for quicksort() */ char *a, *b; { return(my_strcmp(a,b)); } list() /* shows you list of terms (alphabetical), click them ! */ { struct RastPort *rp_list; struct IntuiMessage *message2; ULONG class2; USHORT code2; struct Gadget *igad2; int gadgid2; register int j=0, akt=0; schein_request(1); /*an*/ status("List - Mode ... "); for(i=0;iRPort; SetRast(rp_list,2); SetAPen(rp_list,3); SetBPen(rp_list,1); SetDrMd(rp_list,JAM2); movemouse(a_w->LeftEdge+30,a_w->TopEdge+187); for(i=0;isuch_begriff); qsort(liste,zaehler,33,vergleich); j = ((zaehler-1)/13); /* how many whole pages ? (13 records/page possible) */ if(zaehler<=13) { for(i=0;i=zaehler;i--) namen_gad[i].Flags |= GADGDISABLED; } else {for(i=0;i<13;i++) (char *)namen_str[i].IText = liste[i]; OnGadget(&vor_gad,list_win,NULL); akt=0; Move(rp_list,6,156); Text(rp_list,"(more)",6);} col(akt,-2); sprintf(Date_Buffer,"%d/%d",akt+1,j+1); Move(rp_list,a_w->Width-14-(strlen(Date_Buffer)*7),156); Text(rp_list,Date_Buffer,strlen(Date_Buffer)); for(;;) { Wait(1<UserPort->mp_SigBit); while(message2 = (struct IntuiMessage *)GetMsg(list_win->UserPort)) { class2 = message2->Class; code2 = message2->Code; ReplyMsg(message2); igad2 = (struct Gadget *) message2->IAddress; gadgid2 = igad2->GadgetID; switch (class2) { case MOUSEBUTTONS: if(code2==MENUDOWN) goto close_it_1; break; case CLOSEWINDOW: goto close_it_1; case GADGETDOWN: if(gadgid2>=0 && gadgid2<=12) {such(gadgid2);col(akt,gadgid2);} break; case GADGETUP: if(gadgid2>=0 && gadgid2<=12) {RefreshGadgets(&namen_gad[12],list_win,NULL);} if(gadgid2==20) /*go on*/ {akt = akt+1; for(i=0;i<13;i++) (char *)namen_str[i].IText = liste[(akt*13)+i]; SetRast(rp_list,2); OnGadget(&zurueck_gad,list_win,NULL); if(akt==j) { for(i=12;i>=zaehler-(j*13);i--) namen_gad[i].Flags |= GADGDISABLED; vor_gad.Flags |= GADGDISABLED; Move(rp_list,6,156); Text(rp_list,"(end) ",6);} else {Move(rp_list,6,156); Text(rp_list,"(more)",6);} sprintf(Date_Buffer,"%d/%d",akt+1,j+1); Move(rp_list,a_w->Width-14-(strlen(Date_Buffer)*7),156); Text(rp_list,Date_Buffer,strlen(Date_Buffer)); col(akt,-1); } if(gadgid2==21) /*go back*/ { for(i=12;i>=zaehler-(j*13);i--) namen_gad[i].Flags &= ~GADGDISABLED; akt = akt-1; for(i=0;i<13;i++) (char *)namen_str[i].IText = liste[(akt*13)+i]; SetRast(rp_list,2); OnGadget(&vor_gad,list_win,NULL); Move(rp_list,6,156); Text(rp_list,"(more)",6); if(akt==0) zurueck_gad.Flags |= GADGDISABLED; sprintf(Date_Buffer,"%d/%d",akt+1,j+1); Move(rp_list,a_w->Width-14-(strlen(Date_Buffer)*7),156); Text(rp_list,Date_Buffer,strlen(Date_Buffer)); col(akt,-1); } };/* switch class2 */ } /* end while */ } /* end for */ close_it_1: for(i=12;i>=zaehler-(j*13);i--) namen_gad[i].Flags &= ~GADGDISABLED; zurueck_gad.Flags |= GADGDISABLED; vor_gad.Flags |= GADGDISABLED; if(list_win) {CloseWindow(list_win); list_win=NULL;} close_it_2: schein_request(0); /*aus*/ s(); movemouse(w->LeftEdge+150,w->TopEdge+130); } /* end list() */ such(a) short a; { strcpy(DefString,(char *)namen_str[a].IText); RefreshGadgets(&tex_gad,w,NULL); suchen((char *)namen_str[a].IText); } col(page,num) /* changes color of activated tracing term */ short page; short num; { static short st_page=-1; static short st_num=-1; short i; if(num==-2) { for(i=0;i<=12;i++) {namen_str[i].FrontPen=1; namen_str[i].BackPen=2;} st_page=-1; st_num=-1; } if(num==-1) { if(st_page==page) {namen_str[st_num].FrontPen=2; namen_str[st_num].BackPen=1;} else for(i=0;i<=12;i++) {namen_str[i].FrontPen=1; namen_str[i].BackPen=2;} } if(num<0) RefreshGadgets(&namen_gad[12],list_win,NULL); if(num>=0) { st_page=page; st_num=num; for(i=0;i<=12;i++) {namen_str[i].FrontPen=1; namen_str[i].BackPen=2;} namen_str[st_num].FrontPen=2; namen_str[st_num].BackPen=1; } } /* end col() */ input(edit) /* new input (edit=0), modify record (edit=1) */ short edit; { struct RastPort *rp_input; struct IntuiMessage *message2; ULONG class2; USHORT code2; struct Gadget *igad2; int gadgid2; short what = 1; schein_request(1); /*an*/ if(edit==1) { status("Edit - Mode ... "); for(i=0;isuch_begriff)==NULL) {strcpy(DefString3,person[i]->such_begriff); nw5.Title = (UBYTE *)" Edit "; goto weiter;} movemouse(150,33); ergebnis = AutoRequest(NULL,&text3,&postext1,&postext1,NULL,NULL,200,50); goto close_in; } if(edit==0) {nw5.Title = (UBYTE *)" Input "; status("Input - Mode ... ");} weiter: if(!(input_win = (struct Window *)OpenWindow(&nw5))) { sys_info(3,"No Input/Edit-WINDOW !",0); return(0);} rp_input = input_win->RPort; SetRast(rp_input,2); movemouse(a_w->LeftEdge+10,a_w->TopEdge+5); DrawBorder(rp_input,&StrBorder4,0,0); SetAPen(rp_input,1); SetBPen(rp_input,2); SetDrMd(rp_input,JAM2); Move(rp_input,5,10); Text(rp_input,"Tracing term: ",16); if(edit==0) {strcpy(DefString,"\0"); RefreshGadgets(&tex_gad,w,NULL); strcpy(DefString3,"\0"); SetAPen(rp,2); RectFill(rp,77,78,285,120); SetAPen(rp,1);} for(;;) { RefreshGadgets(&input_tex_gad,input_win,NULL); ActivateGadget(&input_tex_gad,input_win,NULL); Wait(1<UserPort->mp_SigBit); while(message2 = (struct IntuiMessage *)GetMsg(input_win->UserPort)) { class2 = message2->Class; code2 = message2->Code; ReplyMsg(message2); igad2 = (struct Gadget *) message2->IAddress; gadgid2 = igad2->GadgetID; switch (class2) { case CLOSEWINDOW: goto close_in; case GADGETDOWN: switch(gadgid2) {case 1: break; }; case GADGETUP: switch(gadgid2) { case 1: if(what==1) { if(edit==0) {if((person[zaehler] = AllocMem(sizeof(struct Daten),0L))==NULL) return(0); strcpy(person[zaehler]->such_begriff,DefString3); strcpy(DefString,DefString3); strcpy(DefString3,"\0"); } if(edit==1) { strcpy(person[i]->such_begriff,DefString3); strcpy(DefString,DefString3); strcpy(DefString3,person[i]->name); } RefreshGadgets(&tex_gad,w,NULL); Move(rp_input,5,10); Text(rp_input,"Name/First-Name:",16); what = 2; break; } if(what==2) { Move(rp,80,85); Text(rp,DefString3,strlen(DefString3)); if(edit==0) {strcpy(person[zaehler]->name,DefString3); strcpy(DefString3,"\0");} if(edit==1) {strcpy(person[i]->name,DefString3); strcpy(DefString3,person[i]->strasse); suchen((char *)DefString);} Move(rp_input,5,10); Text(rp_input,"Street: ",16); what = 3; break; } if(what==3) { Move(rp,80,95); Text(rp,DefString3,strlen(DefString3)); if(edit==0) {strcpy(person[zaehler]->strasse,DefString3); strcpy(DefString3,"\0");} if(edit==1) {strcpy(person[i]->strasse,DefString3); strcpy(DefString3,person[i]->ort); suchen((char *)DefString);} Move(rp_input,5,10); Text(rp_input,"Town: ",16); what = 4; break; } if(what==4) { Move(rp,80,105); Text(rp,DefString3,strlen(DefString3)); if(edit==0) {strcpy(person[zaehler]->ort,DefString3); strcpy(DefString3,"\0");} if(edit==1) {strcpy(person[i]->ort,DefString3); strcpy(DefString3,person[i]->tel); suchen((char *)DefString);} Move(rp_input,5,10); Text(rp_input,"Phone-Nr.: ",16); what = 5; break; } if(what==5) { Move(rp,80,115); Text(rp,DefString3,strlen(DefString3)); if(edit==0) {strcpy(person[zaehler]->tel,DefString3); strcpy(DefString3,"\0"); Move(rp_input,5,10); Text(rp_input,"Tracing term:",13); SetAPen(rp,2); RectFill(rp,77,78,285,120); SetAPen(rp,1); strcpy(DefString,"\0"); RefreshGadgets(&tex_gad,w,NULL); zaehler +=1; print_anzahl(); what = 1; } if(edit==1) {strcpy(person[i]->tel,DefString3); suchen((char *)DefString); goto close_in;} break; } };/*switch gadgid*/ break; };/*switch messageclass*/ } /* end while */ } /* end for */ close_in: anderung = TRUE; if(input_win) {CloseWindow(input_win); input_win=NULL;} if(edit==0){SetAPen(rp,2); RectFill(rp,77,78,285,120); SetAPen(rp,1); strcpy(DefString,"\0"); RefreshGadgets(&tex_gad,w,NULL);} schein_request(0); /*aus*/ s(); movemouse(w->LeftEdge+150,w->TopEdge+130); } /* end input() */ speichern(speicher_string) /* the saving */ UBYTE speicher_string[30]; { char *hilf; LONG anzahl = 0; int handle; status("Saving file ... "); if((handle=creat(speicher_string,0))==-1) {status("Saving-Error !!! "); de(); return(0);} for(i=0;isuch_begriff) + strlen(person[i]->name) + strlen(person[i]->strasse) + strlen(person[i]->ort) + strlen(person[i]->tel) + 10; /* die Klammern */ } anzahl += 2; /* for ~ und \0 */ if((platz = AllocMem(anzahl,0L))==NULL) {status("Saving-Error !!! "); de(); return(0);} hilf = platz; for(i=0;isuch_begriff); hilf+=strlen(person[i]->such_begriff); strcat(hilf,"}["); hilf+=2; strcat(hilf,person[i]->name); hilf+=strlen(person[i]->name); strcat(hilf,"]["); hilf+=2; strcat(hilf,person[i]->strasse); hilf+=strlen(person[i]->strasse); strcat(hilf,"]["); hilf+=2; strcat(hilf,person[i]->ort); hilf+=strlen(person[i]->ort); strcat(hilf,"]["); hilf+=2; strcat(hilf,person[i]->tel); hilf+=strlen(person[i]->tel); strcat(hilf,"]"); hilf+=1; } strcat(hilf,"~\0"); get_sesam(); if(DefString4[0]!=0) {compute(DefString4); codiere(platz,anzahl); strcpy(DefString4,"\0"); } write(handle,platz,anzahl); close(handle); if(platz) FreeMem(platz,anzahl); anderung = FALSE; movemouse(w->LeftEdge+150,w->TopEdge+130); DisplayBeep(NULL); s(); return(1); } /* end speichern() */ neu() /* delete all records */ { if(zaehler==0) goto aff; movemouse(150,33); ergebnis = AutoRequest(NULL,&text4,&postext1,&negtext1,NULL,NULL,200,50); if(ergebnis==FALSE) goto aff; for(i=0;iLeftEdge+150,w->TopEdge+130); } /* end neu() */ del() /* delete actual record */ { char john[30]; short a; if(zaehler==0) {movemouse(150,33); ergebnis = AutoRequest(NULL,&text,&postext1,&postext1,NULL,NULL,200,50); goto close_neu;} for(i=0;isuch_begriff)==NULL) { strcpy(john," Delete <"); strcat(john,person[i]->such_begriff); strcat(john,"> ? "); (UBYTE *) text2.IText = (UBYTE *)john; movemouse((strlen(john)*10)-50,38); ergebnis = AutoRequest(NULL,&text2,&postext1,&negtext1,NULL,NULL,strlen(john)*10+5,50); movemouse(w->LeftEdge+150,w->TopEdge+130); if(ergebnis == FALSE) goto close_neu; if(person[i]) FreeMem(person[i],sizeof(struct Daten)); for(a=i;aLeftEdge+150,w->TopEdge+130); return(0); } /* end del() */ movemouse (ziel_x, ziel_y) /* moves mouse-cursor to a given position; */ int ziel_x; /* needs preferences (look at main() */ int ziel_y; { struct InputEvent mouse; struct IOStdReq *ioreq; struct MsgPort *ioport; int pos_x = IntuitionBase->ActiveScreen->MouseX; int pos_y = IntuitionBase->ActiveScreen->MouseY; int dx = ziel_x - pos_x; int dy = ziel_y - pos_y; if (!(ioport = CreatePort (NULL, NULL))) goto weg; if(!(ioreq = CreateStdIO(ioport))) goto weg; if (OpenDevice ("input.device", 0L, ioreq, 0L)) { ioreq -> io_Device = 0; goto weg;} ioreq -> io_Command = IND_WRITEEVENT; ioreq -> io_Flags = 0; ioreq -> io_Length = sizeof (struct InputEvent); ioreq -> io_Data = (APTR) &mouse; mouse.ie_NextEvent = 0; mouse.ie_Class = IECLASS_RAWMOUSE; mouse.ie_TimeStamp.tv_secs = mouse.ie_TimeStamp.tv_micro = 0; mouse.ie_Code = IECODE_NOBUTTON; mouse.ie_Qualifier = IEQUALIFIER_RELATIVEMOUSE; mouse.ie_X = prefs.PointerTicks * dx; mouse.ie_Y = prefs.PointerTicks * (dy+dy); /* because HiRes ! */ if(DoIO (ioreq)) goto weg; weg: if (ioreq) { if(ioreq->io_Device) CloseDevice(ioreq); DeleteStdIO (ioreq); } if (ioport) DeletePort (ioport); } /* end movemouse() */ print_anzahl() /* shows number of records */ { SetAPen(rp,2); RectFill(rp,192,60,285,72); SetAPen(rp,1); sprintf(Date_Buffer,"%d",zaehler); Move(rp,193,68); Text(rp,Date_Buffer,strlen(Date_Buffer)); } decodiere(reihe,number) UBYTE reihe[]; LONG number; { ; } /* end decodiere() */ codiere(reihe,number) UBYTE reihe[]; LONG number; { ; } /* end codiere() */ compute(sesam) UBYTE sesam[]; { ; } /* end compute() */ get_sesam() /* enter the password */ { struct RastPort *rp_sesam; struct IntuiMessage *message2; ULONG class2; USHORT code2; struct Gadget *igad2; int gadgid2; if(!(sesam_win = (struct Window *)OpenWindow(&nw6))) { sys_info(3,"No Sesam-WINDOW !",0); return(0);} rp_sesam = sesam_win->RPort; SetRast(rp_sesam,2); SetAPen(rp_sesam,0); RectFill(rp_sesam,66,25,185,36); DrawBorder(rp_sesam,&StrBorder5,0,0); RefreshGadgets(&sesam_gad,sesam_win,NULL); ActivateGadget(&sesam_gad,sesam_win,NULL); movemouse(a_w->LeftEdge+170,a_w->TopEdge+38); for(;;) { Wait((1<UserPort->mp_SigBit)); while(message2 = (struct IntuiMessage *)GetMsg(sesam_win->UserPort)) { class2 = message2->Class; code2 = message2->Code; ReplyMsg(message2); igad2 = (struct Gadget *) message2->IAddress; gadgid2 = igad2->GadgetID; switch (class2) { case GADGETDOWN: switch(gadgid2) { case 2: goto jesus; break; }; case GADGETUP: goto jesus; break; }; } /* end while */ } /* end for */ jesus: if(sesam_win) {CloseWindow(sesam_win); sesam_win=NULL;} return(1); } sys_info(a_pen,text,dauer) /* a_pen: Color of Text; */ int dauer; /* if dauer==0 : then depending on the length of text */ short a_pen; char *text; { struct Window *inf_win; struct RastPort *inf_rp; if((new_inf_win.Width = (strlen(text)*8)+10)<190) new_inf_win.Width=190; new_inf_win.LeftEdge = (640-new_inf_win.Width)/2; new_inf_win.Title = (UBYTE *)"(Wo) User-Information: "; if((inf_win =(struct Window *)OpenWindow(&new_inf_win)) == NULL) return(0); inf_rp = inf_win->RPort; SetAPen(inf_rp,1); RectFill(inf_rp,2,10,new_inf_win.Width-3,26); SetAPen(inf_rp,a_pen); SetBPen(inf_rp,1); SetDrMd(inf_rp,JAM2); Move(inf_rp,5,21); Text(inf_rp,text,strlen(text)); switch(dauer) { case 0: Delay(strlen(text)*7); break; /*von Anzahl der Buchstaben abhängig */ default: Delay(dauer); break; /* so lang wie dauer */ }; if(inf_win) CloseWindow(inf_win); } ende(error_nr) /* it's never to late ... */ short error_nr; { if((anderung==TRUE)&&(zaehler>0)) { movemouse(190,38); ergebnis = AutoRequest(NULL,&text5,&postext1,&negtext1,NULL,NULL,260,50); if(ergebnis==TRUE) offne_file(1); /* if file has been changed: save it ? */ } AbortIO((char *) &timereq.tr_node); if(openerror==0) CloseDevice(&timereq); if(timerport) DeletePort(timerport); if(zaehler>0) {for(i=0;i