This thesis contains program coding module for generation logics test by Boolean gap

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Category: Programs in C, C++

Program: Prac_ndf.cBooldif.zip
File exe: Booldif.exe
need: Adresar.cColor.cDerivac.cError.cFunkcie.cHelp.cKey.cLine_edi.cMain.cMenu.cObsluha.cOkno.cPrac_ndf.cSlovnik.cSlov_fon.cStatist.cUtil.cVideo.cVystupy.cAdresar.hColor.hDefine.hError.hFunkcie.hGlob.hKey.hLine_edi.hMbooldif.hMenu.hOkno.hSlov_fon.hUtil.hVideo.h
Example: Example.zipBin_10_o.ndfBin_10_o.ndfBin_1and.ndfBin_2rad.ndfBin_3rad.ndfBin_4rad.ndfHard.ndfI_reg_lo.ndfReg_jk.ndfScitac_s.ndfScp_1rad.ndfScp_2rad.ndfScp_2r_1.ndfScp_3rad.ndfScp_4r_2.ndfScp_6r_3.ndfScp_8r_4.ndfSc_1r_pj.ndfSc_1r_sj.ndfSc_1_aoi.ndfSc_2r_4.ndfSc_3r_6.ndfSc_7400n.ndfSc_aon.ndfSimp3_a.ndfSimp3_b.ndfSimp4_a.ndfSimp4_b.ndfSimp4_c.ndfSimp6_a.ndfTest_vod.ndfZle.ndf
Manual: Prirucky.zip

This thesis contains program coding module for generation logics test by Boolean gap. Compile vector of fault for existent circuit, forth about all boughs herself chauffeur. Results is absolute gauge. Program application enables four modes It is implemented in the C programming language for the operating system MS-DOS, or another compatible with it. The program is suitable for an interactive way to communicate with the user, allowing a comfortable working environment are similar to Turbo Vision.
/*****************************************************************************
*								             *
*                                Subor MENU.C                                *
*									     *
*****************************************************************************/
 
 
#include <stdlib.h>
#include <dos.h>
#include <alloc.h>
#include <string.h>
 
#include "key.h"
#include "util.h"
#include "glob.h"
#include "menu.h"
#include "video.h"
#include "okno.h"
#include "error.h"
 
#pragma warn -wsus
#include "menu.def"
#pragma warn +wsus
 
 
//************************************************************************//
// PULL_DOWN_MENU							  //
//                                                            30.10.1997  //
//************************************************************************//
 
int pull_down_menu(struct HL_Menu *hlavne,struct Menu podmenu[],int volba)
{
 int pocet_volieb;
 int k=0,i;
 int koniec=0;
 struct Polozka_HL_Menu *polozka;
 
 polozka=hlavne->polozky;
 pocet_volieb=0;
 while(polozka->text!=NULL)
	{
	polozka++;
	pocet_volieb++;
	}
 pocet_volieb--;
 while(!koniec)
	{
	k=0;
	if(volba!=0)
		{
		hlavne->posledna_volba=volba-1;
		goto enter;
		}
	switch(vodorovne_menu(hlavne))
		{
		case -1:
			exit(1);
		case DOWN:
 enter:		case ENTER:
			while(k==0)
				{
				i=hlavne->posledna_volba;
				switch(zvisle_menu(&podmenu[i]))
					{
					case -1:
						neodstranitelna_chyba();
					case ESC:
 
 
						zatvor_okno();
						zrus_menu();
						volba=0;
						k=1;
						break;
					case ENTER:
						zatvor_okno();
						zrus_menu();
					      /*k=1;
						koniec=ENTER;*/
						break;
					case LEFT:
						zatvor_okno();
						zrus_menu();
						if(--hlavne->posledna_volba<0)
							hlavne->posledna_volba=pocet_volieb;
						break;
					case RIGHT:
						zatvor_okno();
						zrus_menu();
						if(++hlavne->posledna_volba>pocet_volieb)
							hlavne->posledna_volba=0;
						break;
					}
				tlac_vodorovne_menu(hlavne);
				zvyrazni_vodorovne_menu(hlavne);
				}
		break;
		}
	}
 return koniec;
}
 
 
//************************************************************************//
// ZVISLE_MENU								  //
//                                                            30.10.1997  //
//************************************************************************//
 
int zvisle_menu(Menu *menu)
{
 register int i;
 int rx,ry;
 int zx,zy;
 int volba=0;
 int kl=0;
 
 vypni_kurzor();
 zisti_suradnice(menu,&zx,&zy,&rx,&ry);
 if (otvor_okno(zx,zy,zx+rx,zy+ry,menu->attr_okna,menu->attr_okraja,menu->typ_okraja)!=TRUE)
    return(-1);
 
 zarad_menu(menu);
 
 i=0;
 while (menu->polozky[i].text!=NULL)
       tlac_riadok_menu(zx,zy,i++,menu,rx-2);
 
 for (i=0;i<rx-2;i++)
     nastav_atribut(zx+1+i,zy+1+menu->posledna_volba,menu->attr_bar);
 
 while (volba==0)
	{
	tlac_riadok_help(menu->polozky[menu->posledna_volba].spodny_riadok,menu->attr_spodneho_riadku,menu->attr_hot_key);
	kl=key();
	tlac_riadok_menu(zx,zy,menu->posledna_volba,menu,rx-2);
	switch(kl)
		{
		case UP:
			if (--menu->posledna_volba<0)menu->
			   posledna_volba=ry-3;
			break;
		case DOWN:
			if (++menu->posledna_volba>=ry-2)
			   menu->posledna_volba=0;
			break;
		case PGDOWN:
		case END:
			menu->posledna_volba=ry-3;
			break;
		case PGUP:
		case HOME:
			menu->posledna_volba=0;
			break;
		case LEFT:
			volba=LEFT;
			break;
		case RIGHT:
			volba=RIGHT;
			break;
		case ESC:
			return ESC;
		case ENTER:
opak_enter:
			if (menu->polozky[menu->posledna_volba].cinnost == MENU)
			   {
			    zvisle_menu(menu->polozky[menu->posledna_volba].c.podmenu);
			    zatvor_okno();
			    zrus_menu();
			    volba=0;
			   }
			  else
			   {
			    if (menu->polozky[menu->posledna_volba].c.fnc != NULL)
			       {
				tlac_riadok_menu(zx,zy,menu->posledna_volba,menu,rx-2);
				volba=menu->polozky[menu->posledna_volba].c.fnc();
			       }
			   }
			break;
		case F1:
			for (i=0;i<rx-2;i++)
			    nastav_atribut(zx+1+i,zy+1+menu->posledna_volba,menu->attr_bar);
			if (menu->polozky[menu->posledna_volba].help!=NULL)
			    help(*menu->polozky[menu->posledna_volba].help);
			break;
		default:
			kl=prevod_na_velke(kl);
			for (i=0;i<ry-2;i++)
			    if (kl==prevod_na_velke(menu->polozky[i].hot_key))
			       {
				menu->posledna_volba=i;
				goto opak_enter;
			       }
			break;
		}
		info_okno();
 
	for (i=0;i<rx-2;i++)
	    nastav_atribut(zx+1+i,zy+1+menu->posledna_volba,menu->attr_bar);
	}
 
 return volba;
}
 
 
//************************************************************************//
// VODOROVNE_MENU							  //
//                                                            30.10.1997  //
//************************************************************************//
 
int vodorovne_menu(struct HL_Menu *menu)
{
 register int i=0;
 int pocet_volieb;
 int volba=0;
 int kl=0;
 struct Polozka_HL_Menu *polozka;
 
 polozka=menu->polozky;
 pocet_volieb=0;
 while(polozka->text!=NULL)
	{
	polozka++;
	pocet_volieb++;
	}
 pocet_volieb--;
 vypni_kurzor();
 tlac_vodorovne_menu(menu);
 zvyrazni_vodorovne_menu(menu);
 tlac_riadok_help(menu->polozky[menu->posledna_volba].spodny_riadok,menu->attr_spodneho_riadku,menu->attr_hot_key);
 while(volba==0)
	{
	switch(kl=key())
		{
		case LEFT:
			if(--menu->posledna_volba<0)
			menu->posledna_volba=pocet_volieb;
			break;
		case RIGHT:
			if(++menu->posledna_volba>pocet_volieb)
			menu->posledna_volba=0;
			break;
		case PGDOWN:
		case END:
			menu->posledna_volba=pocet_volieb;
			break;
		case PGUP:
		case HOME:
			menu->posledna_volba=0;
			break;
		case DOWN:
		case ESC:
		case ENTER:
			volba=kl;
			break;
		case F1:
			if(menu->polozky[menu->posledna_volba].help!=NULL)
			help(*menu->polozky[menu->posledna_volba].help);
			break;
		default:
			kl=prevod_na_velke(kl);
			for(i=0;i<=pocet_volieb;i++)
				if(kl==prevod_na_velke(menu->polozky[i].hot_key))
					{
					menu->posledna_volba=i;
					volba=ENTER;
					}
			break;
		}
	tlac_vodorovne_menu(menu);
	zvyrazni_vodorovne_menu(menu);
	tlac_riadok_help(menu->polozky[menu->posledna_volba].spodny_riadok,menu->attr_spodneho_riadku,menu->attr_hot_key);
	}
 return volba;
}
 
 
//************************************************************************//
// TLAC_VODOROVNE_MENU							  //
//                                                            30.10.1997  //
//************************************************************************//
 
void tlac_vodorovne_menu(struct HL_Menu *menu)
{
 register int i=0,j;
 char *p;
 int bol;
 int zx,zy;
 int attr1,attr2;
 struct Polozka_HL_Menu *polozka;
 
 zy=menu->riadok;
 attr1=menu->attr_okna;
 attr2=menu->attr_hot_key;
 polozka=menu->polozky;
 
 while(polozka->text!=NULL)
	{
	bol=0;
	zx=polozka->stlpec;
	p=polozka->text;
	j=0;
	while(*p!='\0')
		{
		if(*p!=polozka->hot_key)
			{
			tlac_znak(zx+j,zy,attr1,*p);
			}
		else
			if(bol==0)
				{
				tlac_znak(zx+j,zy,attr2,*p);
				bol=1;
				}
			else
				tlac_znak(zx+j,zy,attr1,*p);
		j++;
		p++;
		}
	i++;
	polozka++;
	}
}
 
 
//************************************************************************//
// ZVYRAZNI_VODOROVNE_MENU						  //
//                                                            30.10.1997  //
//************************************************************************//
 
void zvyrazni_vodorovne_menu(struct HL_Menu *menu)
{
 register int j;
 register char i;
 char *p;
 int bol=0;
 int zx,zy;
 int attr1,attr2;
 
 zy=menu->riadok;
 attr1=menu->attr_bar;
 attr2=(menu->attr_hot_key & 0x0f)|(menu->attr_bar & 0xf0);
 zx=menu->polozky[menu->posledna_volba].stlpec;
 p=menu->polozky[menu->posledna_volba].text;
 i=menu->polozky[menu->posledna_volba].hot_key;
 j=0;
 while(*p!='\0')
	{
	if(*p!=i)
		{
		tlac_znak(zx+j,zy,attr1,*p);
		}
	else
		if(bol==0)
			{
			tlac_znak(zx+j,zy,attr2,*p);
			bol=1;
			}
		else
			tlac_znak(zx+j,zy,attr1,*p);
	j++;
	p++;
	}
}
 
 
//************************************************************************//
// TLAC_RIADOK_MENU							  //
//                                                            30.10.1997  //
//************************************************************************//
 
void tlac_riadok_menu(int zx,int zy,int riadok,struct Menu *menu,int sirka)
{
 register int i=0,bol=0;
 char *p;
 
 p=menu->polozky[riadok].text;
 while(*p!='\0')
	{
	if(*p!=menu->polozky[riadok].hot_key || bol!=0)
		tlac_znak(zx+1+i,zy+1+riadok,menu->attr_okna,*p);
	else
		{
		tlac_znak(zx+1+i,zy+1+riadok,menu->attr_hot_key,*p);
		bol=1;
		}
	i++;
	p++;
	}
 while(i<sirka)
	{
	tlac_znak(zx+1+i,zy+1+riadok,menu->attr_okna,' ');
	i++;
	}
}
 
 
//************************************************************************//
// TLAC_RIADOK_HELP							  //
//                                                            30.10.1997  //
//************************************************************************//
 
void tlac_riadok_help(char *p,unsigned char attr1,unsigned char attr2)
{
 register int i=0;
 register int j;
 
 j=attr1;
 while(*p!='\0')
	if(*p=='~')
		{
		j=attr2;
		p++;
		}
	else
		{
		if(*p==' ')
			j=attr1;
		tlac_znak(i++,_riadkov-1,j,*p++);
		}
 tlac_do_konca_riadku(i,_riadkov-1,attr1,' ');
}
 
 
//************************************************************************//
// ZISTI_SIRKU_OKNA							  //
//                                                            30.10.1997  //
//************************************************************************//
 
int zisti_sirku_okna(Polozka_Menu *polozky)
{
 register int i=0,j;
 int max=0;
 char *p;
 
 while(polozky[i].text!=0)
	{
	j=0;
	p=polozky[i].text;
	i++;
	while(*p++!='\0')
		j++;
	if(j>max)
		max=j;
	}
 return max+2;
}
 
 
//************************************************************************//
// ZISTI_VYSKU_OKNA							  //
//                                                            30.10.1997  //
//************************************************************************//
 
int zisti_vysku_okna(Polozka_Menu *polozky)
{
 register int i=0;
 
 while(polozky[i++].text!=NULL);
 return i+1;
}
 
 
//************************************************************************//
// INIC_MENU								  //
//                                                            30.10.1997  //
//************************************************************************//
 
void inic_menu(struct HL_Menu *hlavne,struct Menu podmenu[])
{
 register int i;
 struct Polozka_HL_Menu *h;
 struct Menu *m;
 
 h=hlavne->polozky;
 m=podmenu;
 while(h->text!=NULL)
	{
	m->horny=hlavne->riadok+1;
	i=zisti_sirku_okna(m->polozky);
	if(h->stlpec==0)
		m->lavy=0;
	else
		if(h->stlpec+i+4>_stlpcov)
			m->lavy=_stlpcov-i-3;
		else
			m->lavy=h->stlpec-1;
	m++;
	h++;
	}
	info_okno();
 
}
 
 
/*------------------------------END-----------------------------------------*/