📄 pstasks.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 + -