⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pstasks.c

📁 实时操作系统RT LINUX的源代码
💻 C
字号:
#include <stdio.h>#include <string.h>/*#include "store.h"*/#include "input.tab.h"#include "crono.h"#define MAX_TIME  550#define X_PUNTOS 500 /*Puntos PostScript eje X*/#define Y_PUNTOS 650 /*Puntos PostScript eje Y*/#define TASK_HIGH 30 /*Altura de una tarea en puntos PS*/#define MAX_DRAW_Y 650 /*Altura de dibujo maxima eje y*/#define MAX_DRAW_X 612 #define LEFTB      50extern int   NPoints;extern int   TimeSim;extern int   NTasks;extern int   NResources;static int   TimeSim;char *pchar;FILE *fout;int prx, pry, large;char tira[25]; extern Accion        Chronog[MAX_MATRIX];extern char          Tasks[MAX_TASKS][20];extern char          Resources[MAX_TASKS][20];int Puntos(int tiempo);int Puntos_Task(int tid);void Print_Rule();void Print_Title();void Print_Tasks_Number();void Hide();/*PostScript Macros*/static char cab[]={"%!PS-Adobe 2.0%%Title: prueba 2%%CreationDate:14/3/94%%Creator: Juan Echague%% REAL-TIME SYSTEM RUN TIME EXECUTION%!PS-Adobe 2.0%%Title:grid %%CreationDate:3/3/94%%Creator: Juan Echague50 0 translate0 setgray% page size 612 x 792 points% 0 0 in bottom left corner%Constants/taskhigh 15 def/exehigh  {taskhigh 0.7 mul} def/dashigh {taskhigh 0.9 mul} def/xfact  {1 mul} def %factor eje x/da {taskhigh 0.15 mul} def%Routines/drawexewin   {    /long exch def    /y exch def     /x exch def    x y moveto    2 setlinewidth    x  y taskhigh add lineto %barra vertical    stroke    x y moveto    .5 setlinewidth    x long xfact add  y lineto    x long xfact add  y dashigh add  lineto	    x long xfact add  da sub y dashigh add da sub lineto    x long xfact add  y dashigh add moveto    x long xfact add  da add y dashigh add da sub lineto    stroke   }def    /drawexe    {    /long exch def    /y exch def     /x exch def    newpath    x y moveto    x long xfact add  y lineto    x long xfact add  y exehigh add lineto    x  y exehigh add lineto    closepath    0 setgray    %fill    stroke    0 setgray   }def"};void PS_output(char *name, int inicio, int fin){  char *fil;  Accion  *p;  int i;  int cond=1,temp;  int evento;       /*Cabecera del fichero PostScript*/  fout=fopen(name,"w");  fprintf(fout,"%s",cab);  TimeSim= fin-inicio;    i=0;  cond=1;  while (i<NPoints && cond)    {      p=&Chronog[i];      /*if ((p->x1 <=fin && p->x1>=inicio) && (p->x2 <=fin && p->x2>=inicio))*/      if (1)	{	  /*Calcular los puntos de dibujo*/	  prx=Puntos(p->x1-inicio);	  pry=Puntos_Task(p->id);	  if (p->accion==ACTI || p->accion==EXEC)	    {	      temp=Puntos(p->x2-inicio);	      large=temp-prx;	    }	  /*VAlor actual de la matriz*/	  if (prx>=-100 && prx<=600)	    {	      evento=p->accion;	      switch(evento)		{		case ACTI:		  fprintf(fout,"%d %d %d drawexewin\n",prx, pry, large);		  break;		case EXEC:		  fprintf(fout,"%d %d %d drawexe\n",prx, pry, large);		  break;		  		case END:		  		  break;		}	    }	}      i++;    }  Hide();  Print_Rule(inicio,fin);  Print_Title();  fprintf(fout,"showpage\n");  fclose(fout);} int Puntos(int tiempo)  {    return((int)(tiempo*X_PUNTOS/TimeSim));  }int Puntos_Task(int tid)  {    return((int)(Y_PUNTOS-TASK_HIGH*tid));  }void Print_Rule(int inicio, int fin){  int sep,i;  /*Select the rule scale*/  if(TimeSim <=10)     sep=1;  else if (TimeSim <=100)    sep=10;  else if (TimeSim <=200)    sep=20;  else if (TimeSim <=500)    sep=50;  else if (TimeSim <=1000)    sep=100;  else    sep=100;  pry=Puntos_Task(NTasks+1)+10;  /*Tipo de Letra*/  fprintf(fout,"/Times-Bold findfont 8 scalefont setfont\n");  for(i=0;i<=TimeSim;i+=sep)    {      prx=(int)(X_PUNTOS*i/TimeSim);      fprintf(fout,"%d %d moveto\n (%d) show\n",prx-5,pry,i+inicio);      /*X rule*/      fprintf(fout,"%d %d moveto\n",prx,pry+8);      fprintf(fout,"%d %d lineto\n",prx,pry+12);    }  prx=Puntos(TimeSim);  /*Ultimo valor de la regla*/  /*  fprintf(fout,"%d %d moveto\n (%d) show\n",prx-8,pry,TimeSim);  fprintf(fout,"%d %d moveto\n",prx,pry+8);  fprintf(fout,"%d %d lineto\n",prx,pry+12);/*  /*Linea del ejeX*/  fprintf(fout,"%d %d moveto\n",0,pry+10);  fprintf(fout,"%d %d lineto\n",prx,pry+10);  /*Linea de ejeY*/  fprintf(fout,"%d %d moveto\n",0,pry+10);  fprintf(fout,"%d %d lineto\n",0,Y_PUNTOS+TASK_HIGH+10);  fprintf(fout,"stroke\n");}void Print_Title(){  char TITLE[50];  strcpy(TITLE,"EDF SCHEDULER");  fprintf(fout,"/Times-Bold findfont 15 scalefont setfont\n");  fprintf(fout,"%d %d moveto\n (%s) show\n",200,Y_PUNTOS+(int)(1.5*TASK_HIGH),TITLE);}void Print_Tasks_Number(){  int i;  for (i=1;i<=NTasks;i++);}void Hide(){  /*Ocultar borde izquierdo*/  fprintf(fout,"1 setgray\n");  fprintf(fout,"-50 %d moveto\n",MAX_DRAW_Y);  fprintf(fout,"-50 0 lineto\n");  fprintf(fout,"0 0 lineto\n");  fprintf(fout,"0 %d lineto\n",MAX_DRAW_Y);  fprintf(fout,"closepath\n");  fprintf(fout,"fill\n");  /*Borde derecho*/  fprintf(fout,"%d %d moveto\n",X_PUNTOS,MAX_DRAW_Y);  fprintf(fout,"%d 0 lineto\n",X_PUNTOS);  fprintf(fout,"%d 0 lineto\n",MAX_DRAW_X);  fprintf(fout,"%d %d lineto\n",MAX_DRAW_X,MAX_DRAW_Y);  fprintf(fout,"closepath\n");  fprintf(fout,"fill\n");  fprintf(fout,"stroke\n");  fprintf(fout,"0 setgray\n");}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -