TShiftState Shift);
void __fastcall FormKeyUp(TObject *Sender, WORD &Key,
TShiftState Shift);
void __fastcall FormActivate(TObject *Sender);
void __fastcall SaveAsMnuClick(TObject *Sender);
void __fastcall SigPropClick(TObject *Sender);
void __fastcall SaveBtnClick(TObject *Sender);
private: // User declarations
public: // User declarations
void __fastcall LoadFromFile(char *fname);
void __fastcall AddSignal(int type);
void __fastcall ChangeBusVal(char *val,int ff);
__fastcall TStmForm(TComponent* Owner);
};
//-----------------------------------------------------------------------
#define N 100 //макс. кол-во перключений у сигнала
#define M 5 //макс. длина в символах значения сигнала
#define NUM_SIGNALS 10 //макс. кол-во сигналов
#define NUM_LINES 10
#define OFFS_X 0
#define OTSTUP 100
#define Y_STEP 80
#define RAZBROS 30
class signal{
private:
int num_ff; //количество переключений сигнала
int times[N]; //время переключения сигнала
char v[N][M]; //значене сигнала
int dim; //разрядность сигнала
char name[100]; //имя сигнала
public:
void SetSignalInfo(int _ff, int _dim,char *_name); //Установка информ. о сигнале
void SetOneFF(int index,int _time, char *val); //Уст. инф. об одном переключении
void InsertFF(int _time, char *val); //вставить переключение
char *GetValAtTime(int _time); //вернуть значение по времени
int FindNearest(int _time);//ищет индекс ближайшего переключения
int GetFFAtTime(int _time); //Возвращает номер переключения
void delFF(int index);//удаляет переключение по индексу
int GetDimension(); //Считать разрядность сигнала
int GetNumFF(); //Считать кол-во переключений сигнала
char *GetName(); //Считать имя сигнала
void GetOneFF(int index, int *_time, char *val); //Считать информацию о переключении
void Save(FILE *f); //сохранть сигнал
signal(); //конструктор
} signals[NUM_SIGNALS];
int num_signals=0;
int r_res_x=2000;
int offset=0;
int sig_offset=0;
int cur_sig=0; //текущий сигнал
int ctrl_down=0;
int schname_len=0; //длина строки имени схемы
int CUR_X=0;
int opened=0; //открыт ли файл
char schname[100];
//---------------------------------------------------------------------------
extern PACKAGE TStmForm *StmForm;
//---------------------------------------------------------------------------
#endif
Main.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "main.h"
#include "newsig.h"
#include "about.h"
#include "newbasic.h"
#include "newbus.h"
#include "newclock.h"
#include "prop.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TStmForm *StmForm;
//---
int GetSchLen(FILE *f)
{
char v;
fseek(f,12l,SEEK_SET);
fread(&v,sizeof(char),1,f);
return v;
}
void read_signal_info(FILE *f)
{
char v,c=100,schname[50],signame[50],len,ff/*flip-flop*/,type,vv,siglen,_tmp[100];
char value[10];
long pos=0,pos2=0;
unsigned long tp=0,val=0;
int i;
int signal_counter=-1;
unsigned long start_p,p_one,p_two;
char one_v[3],two_v[3];
schname_len=GetSchLen(f);
fseek(f,12l,SEEK_SET);
while(!feof(f))
{
fread(&v,sizeof(char),1,f);
if (feof(f)) return;
if (v==schname_len)
{
fread(schname,schname_len,1,f);
schname[schname_len]=0;
fread(&len,sizeof(char),1,f);
fread(signame,len,1,f);
signame[len]=0;
fread(&ff,sizeof(char),1,f);
fseek(f,4,SEEK_CUR);
fread(&type,sizeof(char),1,f);
signal_counter+=1;
strcpy(_tmp,schname);
strcat(_tmp,".");
strcat(_tmp,signame);
signals[signal_counter].SetSignalInfo(ff,1,_tmp);
switch(type)
{
//clock signal
case 0x24:
fseek(f,1,SEEK_CUR);
fread(&start_p,sizeof(unsigned long),1,f);
fseek(f,4,SEEK_CUR);
fread(&p_one,sizeof(unsigned long),1,f);
fseek(f,4,SEEK_CUR);
fread(&p_two,sizeof(unsigned long),1,f);
fseek(f,9,SEEK_CUR);
if (feof(f))
fseek(f,-3,SEEK_CUR);
else
fseek(f,-4,SEEK_CUR);
for(i=0;c!=0x1;i++)
{
fread(&c,1,1,f);
one_v[i]=c;
}
one_v[i-1]=0;
for(i=0;c!=schname_len&&!feof(f);i++)
{
fread(&c,1,1,f);
two_v[i]=c;
}
two_v[i-1]=0;
fseek(f,-1,SEEK_CUR);
signals[signal_counter].SetOneFF(0,p_one,one_v);
signals[signal_counter].SetOneFF(1,p_two,two_v);
signals[signal_counter].SetSignalInfo(2,3,_tmp);
break;
case 0x21:
int ff_counter=-1;
for (int i=0;i<ff&&!feof(f);i++){
fseek(f,1,SEEK_CUR);
fread(&tp,sizeof(long),1,f);
fread(&val,sizeof(long),1,f);
switch (tp)
{
case 0x2:vv='0';
break;
case 0x3:vv='1';
break;
case 0x4:vv='Z';
break;
case 0xFFFFFFFF:vv='B';
signals[signal_counter].SetSignalInfo(ff,2,_tmp);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.