|
|
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 - metrics - 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","");
}
}