DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦9fe4e8c41⟧ TextFile

    Length: 5354 (0x14ea)
    Types: TextFile
    Notes: R1k Text-file segment

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦368efe0f4⟧ 
            └─⟦this⟧ 

TextFile

/*=================================================================
;  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","");
 }
}