|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ B T ┃
Length: 5355 (0x14eb) Types: TextFile Names: »BREAK_C«
└─⟦149519bd4⟧ Bits:30000546 8mm tape, Rational 1000, !projects 93-07-13 └─ ⟦124ff5788⟧ »DATA« └─⟦this⟧ └─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11 └─ ⟦129cab021⟧ »DATA« └─⟦this⟧ └─⟦f64eaa120⟧ Bits:30000752 8mm tape, Rational 1000, !projects 93 02 16 └─ ⟦6f12a12be⟧ »DATA« └─⟦this⟧ └─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04 └─ ⟦d65440be7⟧ »DATA« └─⟦this⟧
/*================================================================= ; IRP MULHOUSE AVRIL 93 ;------------------------------------------------------------------- ; PROJECT : Z80 SIMULATOR ; STUDENTS : ; ; FILE : Break.c ================================================================== ; DESCRIPTION : ; Fichier source pour la gestion des Break Points ;----------------------------------------------------------------*/ /*----------- Inclusion -------------------------*/ #include <Xm/List.h> #include <Xm/ListP.h> /*----------- Definitions -----------------------*/ #define MAX_BREAKS 10 /*----------- Globales --------------------------*/ Widget TopLevel; char BreakPointList[MAX_BREAKS*4] ="#######################################"; Widget wgBreakList; int nbBreakPoint = 0; /*-------------------------------------------------------- Efface le champ de saisie des points d'arrets ----------------------------------------------------------*/ void ClearInput() { Action(WidgetToFrame(TopLevel),"PutField","MW.BB.Break.F.Input",""); } /*-------------------------------------------------------------- Affichage du message d'erreur ---------------------------------------------------------------*/ void SetMessage(char *msg) { Action(WidgetToFrame(TopLevel),"PutField","MW.BB.Message",msg); } /*------------------------------------------------- Initialisation --------------------------------------------------*/ void BreakInit (Widget w) { TopLevel=w; wgBreakList=XtNameToWidget(TopLevel,"MW.BB.Break.F.FormList.List"); } /*------------------------------------------------- Verifie la validite de l'adresse du point d'arret et la transforme en majuscules --------------------------------------------------*/ static Boolean CheckInput (int nb_car,char *string) { int i; Boolean error_found=FALSE; char FormatString[9]; for (i=0; i<strlen(string); i++) if (string[i]==' ') string[i]='0'; i=0; while ((i<nb_car) && (!error_found)) { string[i]=toupper(string[i]); error_found=!(isdigit(string[i]) || ( (string[i] >= 'A') && (string[i] <= 'F')) ); i++; } if (error_found) { SetMessage("INPUT ERROR: Hexa value expected !!!"); ClearInput(); return TRUE; } else return FALSE; } static Boolean BreakLower(char *Break1,char *Break2) { return (strncmp(Break1,Break2,4)<0); } static Boolean BreakEqual(char *Break1,char *Break2) { return (strncmp(Break1,Break2,4)==0); } /*------------------------------------------------------- Ajoute un point d'arret dans la liste et la retrie --------------------------------------------------------*/ void AddActivate(char *value) { int InsertPos,i,j; char BreakInput[5]; sprintf(BreakInput,"%4s",value); if (BreakEqual(BreakInput," ")) return; if (nbBreakPoint >= MAX_BREAKS) { SetMessage("INPUT ERROR: Maximum number of break points is reached !!!"); ClearInput(); return; } if (!CheckInput(4,BreakInput)) { if (nbBreakPoint) { for (InsertPos=0; InsertPos<=(nbBreakPoint-1); InsertPos++) { if (BreakEqual(BreakInput,&BreakPointList[InsertPos*4])) { SetMessage("INPUT ERROR: This break point already exist !!!"); ClearInput(); return; } if (BreakLower(BreakInput,&BreakPointList[InsertPos*4] )) break; } if (nbBreakPoint!=InsertPos) for (i=(nbBreakPoint*4)-1; i>=InsertPos*4; i--) BreakPointList[i+4]=BreakPointList[i]; } else InsertPos=0; for (i=InsertPos*4,j=0; i<(InsertPos+1)*4; j++,i++) BreakPointList[i]=BreakInput[j]; XmListAddItemUnselected (wgBreakList, XmStringCreate(BreakInput,XmSTRING_DEFAULT_CHARSET),++InsertPos); nbBreakPoint++; PutEvent(TopLevel,"FieldEnter","AddBrk",BreakInput); ClearInput(); SetMessage(""); } } /*--------------------------------------------------------------- Supprime le ou les points d'arrets selectionnes de la liste ----------------------------------------------------------------*/ void DeleteActivate() { int i,j,pos; int delta=0; int *position_list,position_count; char BreakInput[5]; if (XmListGetSelectedPos(wgBreakList, &position_list, &position_count)) { for (i=0; i<position_count; i++) { pos=position_list[i]-delta; strncpy(BreakInput,&BreakPointList[4*(pos-1)],4); BreakInput[4]='\0'; XmListDeletePos(wgBreakList,pos); for (j=4*(pos-1); j<=4*(nbBreakPoint-1); j++) BreakPointList[j]=BreakPointList[j+4]; for (j=(nbBreakPoint-1)*4; j<nbBreakPoint*4; j++) BreakPointList[j]='#'; delta++; PutEvent(TopLevel,"FieldEnter","DeleteBrk",BreakInput); } nbBreakPoint-=position_count; XtFree((char *)position_list); } } /*--------------------------------------------------------------- Supprime tous les points d'arrets de la liste ----------------------------------------------------------------*/ void DeleteAllActivate() { int cntmax=((XmListWidget)wgBreakList)->list.itemCount; int cnt; if (nbBreakPoint>0) { for (cnt=0; cnt < cntmax; cnt++) XmListDeletePos( wgBreakList, 1); nbBreakPoint=0; strcpy(BreakPointList,"#######################################"); PutEvent(TopLevel,"PushButton","DeleteAllBrk",""); } }