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: ┃ M T ┃
Length: 8775 (0x2247) Types: TextFile Names: »MEMORY_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 92 ;------------------------------------------------------------------- ; PROJECT : Z80 SIMULATOR ; STUDENTS : MOREAUX & VERGER ; ; FILE : Memory.c ================================================================== ; DESCRIPTION : ; Fichier source pour la gestion de la memoire avec l'interface ; WINDOW SYSTEM ;----------------------------------------------------------------*/ /*----------- Inclusion -------------------------*/ #include "GUI_Interface.h" #include <Xm/List.h> #include <Xm/ListP.h> /*----------- Definitions -----------------------*/ #define MAX_MEMORY 16 #define MAX_DUMP_X 48 #define MAX_DUMP_ASC_X 17 #define DUMP(x,y) avMemoryDump[(y)*MAX_DUMP_X + (x)] #define DUMP_ASC(x,y) avMemoryDumpAscii[(y)*MAX_DUMP_ASC_X+ (x)] /*----------- Globales -------------------------*/ char MemoryList[MAX_MEMORY*4+1]; Widget wgMemoryList; XmString *xmstrMemoryList; int nbMemoryPoint = 0; int Iterator = 0; int CntMemoryAddActivate = 0; char avMemoryInput[] = "0000"; char avMemoryDump[ MAX_MEMORY*MAX_DUMP_X +1]; char avMemoryDumpAscii[ MAX_MEMORY*MAX_DUMP_ASC_X +1]; /*------------------------------------------------- Gestion de l'affichage ( Appels Internes ) --------------------------------------------------*/ static void DeleteLine(int line) { int x; for ( x=0 ; x < MAX_DUMP_X-1 ; x++) DUMP(x,line) = ' '; DUMP(x,line) = '\n'; for ( x=0 ; x < MAX_DUMP_ASC_X-1 ; x++) DUMP_ASC(x,line) = ' '; DUMP_ASC(x,line) = '\n'; } static void DisplayDump() { FmSetActiveValue (0,"MemoryDump"); FmSetActiveValue (0,"MemoryDumpAscii"); } static void DeleteDump() { int cntLine; for(cntLine=0 ; cntLine < MAX_MEMORY ; cntLine++) DeleteLine(cntLine); } /*------------------------------------------------- Initialisation ( Appel depuis C ) --------------------------------------------------*/ void MemoryInit (Widget TopLevel) { Arg wargs [10]; int i; wgMemoryList = XtNameToWidget(TopLevel,"Memory.BB.FormList.MemoryList"); xmstrMemoryList = (XmString *) XtMalloc (sizeof(XmString) * MAX_MEMORY); for (i=0; i<MAX_MEMORY; i++) xmstrMemoryList [i] = XmStringCreate ( " ", XmSTRING_DEFAULT_CHARSET); XtSetArg (wargs[0], XmNitems, xmstrMemoryList); XtSetArg (wargs[1], XmNitemCount,MAX_MEMORY); XtSetValues ( wgMemoryList, wargs, 2); for (i=0 ; i < 4*MAX_MEMORY ; i++) MemoryList[i] = '#' ; MemoryList[4*MAX_MEMORY] = '\0'; FmAttachAv ("MemoryInput", avMemoryInput); FmAttachAv ("MemoryDump",avMemoryDump); FmAttachAv ("MemoryDumpAscii",avMemoryDumpAscii); DeleteDump(); } /*------------------------------------------------- Gestion des PushButtons Add,Delete,DeleteAll,+,- ( Appels depuis WINDOW ) --------------------------------------------------*/ static Boolean isinAF(char hexa) { char hexaUp = toupper(hexa); return ( (hexaUp >= 'A') && (hexaUp <= 'F') ); } static Boolean ishexa(char hexa) { return ( isdigit(hexa) || isinAF(hexa) ); } static Boolean CheckInput ( int nb_car, char * string) { int i; Boolean error_found = FALSE; if (strlen(string) != nb_car) error_found = TRUE; else { i = 0; while ( (i < nb_car) && (! error_found) ) { string[i] = toupper(string[i]); error_found = ! ishexa(string[i]); i++; } } if (error_found) { for ( i = 0; i < nb_car; i++ ) string[i] = '0'; SetMessage("INPUT ERROR : Hexa value expected !!!"); FmBeep(); return TRUE; } else { SetMessage(""); string[3] = '0'; return FALSE; } } static Boolean MemoryLower(char *Break1,char *Break2) { return ( strncmp(Break1,Break2,4) < 0 ); } static Boolean MemoryEqual(char *Break1,char *Break2) { return ( strncmp(Break1,Break2,4) == 0 ); } static int hexatoi(char *hexa) { if ( isdigit(*hexa) ) return (int)(*hexa - '0'); if ( isinAF(*hexa) ) return (int)( toupper(*hexa) - 'A') + 10 ; return 0 ; } static int hexabytoi(char *hexa) { return hexatoi(hexa)*16 + hexatoi(hexa+1); } static int hexaddtoi(char *hexa) { return hexabytoi(hexa)*256 + hexabytoi(hexa+2); } /*-- PushButton Add -------------------*/ void MemoryAddActivate() { int InsertPos,i,j; if (nbMemoryPoint < MAX_MEMORY ) { FmGetActiveValue ( 0, "MemoryInput"); if (!CheckInput(4,avMemoryInput)) { if (nbMemoryPoint) { for (InsertPos=0; InsertPos <= (nbMemoryPoint -1 ) ; InsertPos++ ) { if (MemoryEqual( avMemoryInput,&MemoryList[InsertPos*4] )) { FmBeep(); return; } if (MemoryLower( avMemoryInput,&MemoryList[InsertPos*4] )) break; } if( nbMemoryPoint != InsertPos ) for(i= (nbMemoryPoint*4)-1 ; i >= InsertPos*4 ; i--) MemoryList[i+4] = MemoryList[i]; } else InsertPos = 0; for ( i = InsertPos*4,j=0 ; i < (InsertPos+1)*4 ; j++,i ++ ) MemoryList[i] = avMemoryInput[j]; XmListAddItemUnselected (wgMemoryList, XmStringCreate (avMemoryInput,XmSTRING_DEFAULT_CHARSET), InsertPos+1); CntMemoryAddActivate++; nbMemoryPoint ++; } } else FmBeep(); } /*-- PushButton Delete -------------------*/ void MemoryDeleteActivate() { int i,j,pos; int delta = 0; int *position_list,position_count; if (XmListGetSelectedPos (wgMemoryList, &position_list, &position_count)) { for (i=0; i<position_count; i++) { pos = position_list[i] - delta ; XmListDeletePos(wgMemoryList, pos); for (j=4*(pos-1) ; j <= 4*(nbMemoryPoint-1) ; j++) MemoryList[j] = MemoryList[j+4]; for (j = (nbMemoryPoint-1)*4 ; j < nbMemoryPoint*4 ; j++) MemoryList[j] = '#'; delta++; } nbMemoryPoint -= position_count; XtFree((char *)position_list); CntMemoryAddActivate++; } } /*-- PushButton DeleteAll -------------------*/ void MemoryDeleteAllActivate() { XmListWidget l = (XmListWidget) wgMemoryList; int cntmax = l->list.itemCount; int cnt,i; for (cnt=0; cnt < cntmax; cnt++) { XmListDeletePos( wgMemoryList, 1); } nbMemoryPoint = 0; for(i=0; i < 4*MAX_MEMORY ; i++) MemoryList[i] = '#'; DeleteDump(); DisplayDump(); } /*------------------------------------------------- Gestion du Dump ( Appels depuis Ada ) --------------------------------------------------*/ int GetCntMemoryAddActivate() { return CntMemoryAddActivate; } void DisplayMemoryDump() { DisplayDump(); } void DeleteMemoryDump() { DeleteDump(); } void SetMemoryLine(char *MemoryLine) { int i,j; int x,line; int hexa; char adresse[]="0000"; strncpy(adresse ,MemoryLine,4); for (line = 0 ; line < nbMemoryPoint ; line++ ) if (strncmp(&MemoryList[line*4],adresse,4)==0) break; line--; for ( i=0 , x=0 ; i < 16 ; i++ , x+=3 ) { DUMP(x,line) = MemoryLine[4+(i*2)]; DUMP(x+1,line) = MemoryLine[5+(i*2)]; DUMP(x+2,line) = ' '; } DUMP(MAX_DUMP_X-1,line) ='\n'; for ( i=0 ; i< MAX_DUMP_ASC_X ; i++) { hexa = hexabytoi(&MemoryLine[4+ i*2]); DUMP_ASC(i,line) = (isprint(hexa) ? (char)hexa: '.'); } DUMP_ASC(MAX_DUMP_ASC_X-1,line) = '\n'; } /*------------------------------------------------- Iterateur pour la lecture des pointeurs ( Appels depuis C ) --------------------------------------------------*/ void MemoryListIterInit() { Iterator = 0; } void MemoryListIterNext () { Iterator++; } Boolean MemoryListIterDone () { return (Iterator == strlen (MemoryList)); } char MemoryListIterValue() { return MemoryList[Iterator]; } /*------------------------------------------------- Iterateur pour la lecture du dump memoire ( Appels depuis C ) --------------------------------------------------*/ void MemoryDumpIterInit() { FmGetActiveValue(0,"MemoryDump"); Iterator = 0; } void MemoryDumpIterNext () { Iterator++; } Boolean MemoryDumpIterDone () { return (Iterator == strlen (avMemoryDump)); } char MemoryDumpIterValue() { return toupper(avMemoryDump[Iterator]); } /*================= FIN DU FICHIER ======================================*/