summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/rtsched/rtsched.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/rtsched/rtsched.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/rtsched/rtsched.sty')
-rw-r--r--macros/latex/contrib/rtsched/rtsched.sty427
1 files changed, 427 insertions, 0 deletions
diff --git a/macros/latex/contrib/rtsched/rtsched.sty b/macros/latex/contrib/rtsched/rtsched.sty
new file mode 100644
index 0000000000..a418caed1f
--- /dev/null
+++ b/macros/latex/contrib/rtsched/rtsched.sty
@@ -0,0 +1,427 @@
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{rtsched}[2005/01/01]
+\typeout{'rtsched' style for Latex and PSTricks}
+\typeout{Easily draw real-time schedules in TeX/Latex.}
+\typeout{(c) 2005, Giuseppe Lipari, Pisa, Italy (g.lipari@sssup.it)}
+\typeout{Version 1.0}
+
+\RequirePackage{multido}
+\RequirePackage{pstricks}
+\RequirePackage{keyval}
+
+%%
+%% These can be changed at any time
+%%
+\def\RTWindowLength{10cm} % window length
+\def\RTWindowHeight{0cm} % window height
+\def\RTNullWindowHeight{0cm} % nullwindow height
+\def\RTTaskLabelSize{10pt} % Size in pt of the task label
+\def\RTNumberLabelSize{10pt} % Size in pt of the number labels
+\def\RTDefTaskSymbol{\tau}
+\def\RTDefNumberOffset{0}
+\def\RTDefTaskFill{solid}
+\def\RTDefTaskColor{gray}
+\def\RTDefLineColor{black}
+\def\RTDefXScale{1}
+\def\RTDefWriteSymbols{0}
+\def\RTDefGridInvisible{0}
+\def\RTDefNumbersInvisible{0}
+\def\RTDefRowLabelOffset{0pt}
+
+\def\RTExecLabel{\ }
+\def\RTTaskSymbol{\RTDefTaskSymbol}
+\def\RTTaskFill{\RTDefTaskFill}
+\def\RTTaskColor{\RTDefTaskColor}
+\def\RTLineColor{\RTDefLineColor}
+\def\RTXScale{\RTDefXScale}
+\def\RTWriteSymbols{\RTDefWriteSymbols}
+\def\RTNumberOffset{\RTDefNumberOffset}
+\def\RTNumberOffset{\RTDefNumberOffset}
+\def\RTGridInvisible{\RTDefGridInvisible}
+\def\RTNumbersInvisible{\RTDefGridInvisible}
+\def\RTRowLabelOffset{\RTDefRowLabelOffset}
+
+\define@key{RT}{height}[\RTNullWindowHeight]{\def\RTWindowHeight{#1}}
+\define@key{RT}{width}[10cm]{\def\RTWindowLength{#1}}
+\define@key{RT}{labelsize}[10pt]{\def\RTTaskLabelSize{#1}}
+\define@key{RT}{numbersize}[10pt]{\def\RTNumberLabelSize{#1}}
+\define@key{RT}{color}[\RTDefTaskColor]{\def\RTTaskColor{#1}}
+\define@key{RT}{linecolor}[\RTDefLineColor]{\def\RTLineColor{#1}}
+\define@key{RT}{execlabel}[\ ]{\def\RTExecLabel{#1}}
+\define@key{RT}{fillstyle}[\RTDefTaskFill]{\def\RTTaskFill{#1}}
+\define@key{RT}{nocommand}{}
+\define@key{RT}{xscale}[\RTDefXScale]{\def\RTXScale{#1}}
+\define@key{RT}{symbol}[{\tau}]{\def\RTTaskSymbol{#1}}
+\define@key{RT}{nosymbols}[\RTDefWriteSymbols]{\def\RTWriteSymbols{#1}}
+\define@key{RT}{numoffset}[\RTDefNumberOffset]{\def\RTNumberOffset{#1}}
+\define@key{RT}{nogrid}[\RTDefGridInvisible]{\def\RTGridInvisible{#1}}
+\define@key{RT}{nonumbers}[\RTDefNumbersInvisible]{\def\RTNumbersInvisible{#1}}
+\define@key{RT}{labeloffset}[\RTDefRowLabelOffset]{\def\RTRowLabelOffset{#1}}
+
+
+%%
+%% temporaries
+\newdimen\sx % slot length
+\newdimen\sy % slot height
+\newdimen\hy % frame height
+\newdimen\xx % x position
+\newdimen\yy % y position
+\newdimen\xxx % x position
+\newdimen\yyy % y position
+\newcount\nsx % number of horizontal slots
+\newcount\nsy % number of vertical slots
+\newcount\nhl % number of horizonatal lines
+\newcount\nvl % number of vertical lines
+\newcount\tmp % temp
+
+\newcounter{myLabel}
+
+\def\RTGrid{\@ifnextchar[\@mygrid@begin{\@mygrid@begin[]}}
+
+\def\RTGridBegin{\@ifnextchar[\@mygrid@begin{\@mygrid@begin[]}}
+\def\@mygrid@begin[#1]#2#3{\setkeys{RT}{#1}%
+ %% number of horizontal steps in the grid
+ \nsx = #3 \advance \nsx by 2 %
+ %% real lenght of the window (approx)
+ \nvl = \nsx \advance \nvl by 1 %
+ %% compute lenght of a step
+ \sx = \RTWindowLength \divide \sx by \nsx %
+ %% number of vertical steps in the grid
+ \nsy = #2 \multiply \nsy by 3 \advance \nsy by 1 %
+ %% compute lenght of a vertical step (if height is null, \sy is the
+ %% same as \sx)
+ \ifx\RTWindowHeight\RTNullWindowHeight%
+ \sy = \sx%
+ \hy = \sy \multiply \hy by \nsy \advance \hy by \sy%
+ \else
+ \sy = \RTWindowHeight \divide \sy by \nsy %
+ \hy = \RTWindowHeight \advance \hy by \sy %
+ \fi
+ %% compute real height
+ \nhl = \nsy \advance \nhl by 1 %
+ \advance \nsy by -1 \advance \nsx by -1
+ %% the picture
+ \begin{pspicture}(0,0)(\RTWindowLength,\hy) %
+ %% draw grid (if not invisible)
+ \if\RTGridInvisible\RTDefGridInvisible
+ \multips(0,\sy)(0,\sy){\nsy}{\psline[linecolor=lightgray]{-}(0,\sy)(\RTWindowLength,\sy)}%
+ \multips(\sx,0)(\sx,0){\nsx}{\psline[linecolor=lightgray]{-}(0,\sy)(0,\hy)}%
+ \psframe(0,\sy)(\RTWindowLength,\hy)%
+ \else\relax
+ \fi
+ %% draw numbers (if not invisible)
+ \if\RTNumbersInvisible\RTDefNumbersInvisible
+ \tmp = #3 \divide \tmp by 2 \advance \tmp by 1%
+ \pssetlength{\xx}{\sx}%
+ \setcounter{myLabel}{\RTNumberOffset}
+ \multido{\n=0+1}{\tmp}{%
+ \uput{4pt}[d](\xx,\sy){%
+ \usefont{T1}{phv}{m}{n}%
+ \fontsize{\RTNumberLabelSize}{\RTNumberLabelSize}%
+ \selectfont{\arabic{myLabel}}}%
+ \psaddtolength{\xx}{\sx}%
+ \psaddtolength{\xx}{\sx}%
+ \addtocounter{myLabel}{2}
+ }
+ \else\relax
+ \fi
+ %
+ %% Task Names
+ \setcounter{myLabel}{1}
+ \pssetlength{\yy}{\hy}%
+ \psaddtolength{\yy}{-\sy}
+ \multido{\n=0+1}{#2}{%
+ \uput{4pt}[d](-\sx,\yy){
+ \usefont{T1}{phv}{m}{n}
+ \fontsize{\RTTaskLabelSize}{\RTTaskLabelSize}
+ \if\RTWriteSymbols\RTDefWriteSymbols\selectfont{$\RTTaskSymbol_{\arabic{myLabel}}$}
+ \else\relax
+ \fi
+ }%
+ \psaddtolength{\yy}{-3\sy}%
+ \addtocounter{myLabel}{1}
+ }%
+ %% Horizontal axes
+ \xx = \sx \xxx = \RTWindowLength \advance \xxx by -\sx
+ \yy = 2\sy
+ \multido{\n=0+1}{#2}{
+ \psline{->}(\xx,\yy)(\xxx,\yy)
+ \advance \yy by 3\sy
+ }
+}
+
+
+\def\@RTDefaultValues{%
+ \setkeys{RT}{height}%
+ \setkeys{RT}{width}%
+ \setkeys{RT}{labelsize}%
+ \setkeys{RT}{numbersize}%
+ \setkeys{RT}{symbol}%
+ \setkeys{RT}{fillstyle}%
+ \setkeys{RT}{color}
+ \setkeys{RT}{linecolor}%
+ \setkeys{RT}{xscale}%
+ \setkeys{RT}{nosymbols}%
+}
+
+\def\@RTExecDefaultValues{
+ \setkeys{RT}{color}%
+ \setkeys{RT}{execlabel}%
+ \setkeys{RT}{linecolor}%
+}
+
+\def\RTGridEnd{
+ \end{pspicture}%
+ \@RTDefaultValues%
+}
+
+\def\endRTGrid{
+ \end{pspicture}%
+ \@RTDefaultValues%
+}
+
+\newcommand{\RTSet}[1]{
+ \setkeys{RT}{#1}
+}
+
+\newcommand{\RTSetDefault}{
+ \@RTDefaultValues
+}
+
+%% internal
+\newcommand{\@compute@xx}[1]{
+ \xx = #1\sx
+ \divide \xx by \RTXScale
+ \advance \xx by \sx
+}
+
+\newcommand{\@compute@xxx}[1]{
+ \xxx = #1\sx
+ \divide \xxx by \RTXScale
+ \advance \xxx by \sx
+}
+
+\newcommand{\@compute@yy}[1]{
+ \yy = -3\sy \multiply \yy by #1
+ \advance \yy by \hy
+}
+
+
+%% Task Arrival: draws an up arrow at the specified slot
+%% #1 : task number from 1 to n
+%% #2 : slot number from 0 to l-1
+\newcommand{\TaskArrival}[3][nocommand=1]{%
+ \setkeys{RT}{#1}%
+ \@compute@yy{#2}
+ \@compute@xx{#3}
+ \yyy = \yy \advance \yyy by 2\sy%
+ \psline[linecolor=\RTLineColor]{->}(\xx,\yy)(\xx,\yyy)%
+ \@RTExecDefaultValues%
+}
+
+%% Task Arrival and deadline: draws an up arrow and a down arrow at the specified slots
+%% #1 : task number from 1 to n
+%% #2 : slot number from 0 to l-1
+%% #3 : relative deadline
+\newcommand{\TaskArrDead}[4][nocommand=1]{
+ \setkeys{RT}{#1}%
+ \@compute@yy{#2}
+ \@compute@xx{#3}
+ \yyy = \yy \advance \yyy by 2\sy
+ \psline[linecolor=\RTLineColor]{->}(\xx,\yy)(\xx,\yyy)
+ \advance \xx by #4\sx
+ \psline[linecolor=\RTLineColor]{->}(\xx,\yyy)(\xx,\yy)
+ \@RTExecDefaultValues
+}
+
+
+%% Task Deadline: draws a down arrow at the specified slot
+%% #1 : task number from 1 to n
+%% #2 : slot number from 0 to l-1
+\newcommand{\TaskDeadline}[3][nocommand=1]{
+ \setkeys{RT}{#1}%
+ \@compute@yy{#2}
+ \@compute@xx{#3}
+ \yyy = \yy \advance \yyy by 2\sy
+ \psline[linecolor=\RTLineColor]{<-}(\xx,\yy)(\xx,\yyy)
+ \@RTExecDefaultValues
+}
+
+\newcommand{\TaskExecution}[4][nocommand=1]{
+ \setkeys{RT}{#1}%
+ \@compute@yy{#2}
+ \@compute@xx{#3}
+ \yyy = \yy \advance \yyy by \sy
+ \@compute@xxx{#4}
+ \psframe[fillstyle=\RTTaskFill,fillcolor=\RTTaskColor,linecolor=\RTLineColor](\xx,\yy)(\xxx,\yyy)
+ \advance \xx by \xxx \xx = .5\xx
+ \uput{2pt}[u](\xx,\yy){%
+ \usefont{T1}{phv}{m}{n}%
+ \fontsize{\RTNumberLabelSize}{\RTNumberLabelSize}%
+ \selectfont{\RTExecLabel}%
+ }
+ \@RTExecDefaultValues
+}
+
+% Task Lock
+% par 1: task
+% par 2: time
+% par 3: resource
+%
+\newcommand{\TaskLock}[4][nocommand=1]{
+ \setkeys{RT}{#1}%
+ \@compute@yy{#2}
+ \@compute@xx{#3}
+ \yyy = \yy \advance \yyy by \sy
+ \uput{2pt}[u](\xx,\yyy){%
+ \usefont{T1}{phv}{m}{n}%
+ \fontsize{\RTNumberLabelSize}{\RTNumberLabelSize}%
+ \selectfont{L(#4)}%
+ }
+ \@RTExecDefaultValues
+}
+
+% \TaskUnlock
+% par 1: task
+% par 2: time
+% par 3: resource
+%
+\newcommand{\TaskUnlock}[4][nocommand=1]{
+ \setkeys{RT}{#1}%
+ \@compute@yy{#2}
+ \@compute@xx{#3}
+ \yyy = \yy \advance \yyy by \sy
+ \uput{2pt}[u](\xx,\yyy){%
+ \usefont{T1}{phv}{m}{n}%
+ \fontsize{\RTNumberLabelSize}{\RTNumberLabelSize}%
+ \selectfont{U(#4)}%
+ }
+ \@RTExecDefaultValues
+}
+
+%
+% par 1: number of vertical slot
+% par 2: time
+% par 3: label
+%
+\newcommand{\Label}[4][nocommand=1]{
+ \setkeys{RT}{#1}%
+ %\@compute@yy{#2}
+ \@compute@xx{#3}
+ \yy = -\sy \multiply \yy by #2
+ \advance \yy by \hy
+ \yyy = \yy \advance \yyy by \sy
+ \uput{2pt}[u](\xx,\yyy){%
+ \psshadowbox{
+ \usefont{T1}{phv}{m}{n}%
+ \fontsize{\RTNumberLabelSize}{\RTNumberLabelSize}%
+ \selectfont{{#4}}}%
+ }
+ \@RTExecDefaultValues
+}
+
+%
+% par 1: higher priority task (from)
+% par 2: lower priority task (to)
+% par 3: time
+%
+\newcommand{\Inherit}[4][nocommand=1]{
+ \setkeys{RT}{#1}%
+ \@compute@yy{#2}
+ \@compute@xx{#4}
+ \yyy = -3\sy \multiply \yyy by #3 \advance \yyy by \sy
+ \advance \yyy by \hy \advance \yyy by -\sy % \RTWindowHeight
+ \psline[linestyle=dashed,linewidth=1.5pt]{->}(\xx,\yy)(\xx,\yyy)
+ \@RTExecDefaultValues
+}
+
+%
+% par 1: activating task (from)
+% par 2: signal start time
+% par 3: activated task (to)
+% par 4: signal arrival time
+%
+\newcommand{\Activation}[5][nocommand=1]{
+ \setkeys{RT}{#1}%
+ \@compute@yy{#2}
+ \@compute@xx{#3}
+ \yyy = -3\sy \multiply \yyy by #4 %\advance \yyy by \sy
+ \advance \yyy by \hy %\advance \yyy by -\sy %\RTWindowHeight
+ \xxx = #5\sx \advance \xxx by \sx
+ \psline[linestyle=dashed,linewidth=1pt]{->}(\xx,\yy)(\xxx,\yyy)
+}
+
+%
+% par 1: time1
+% par 2: time2
+%
+\newcommand{\RTBox}[3][nocommand=1]{
+ \setkeys{RT}{#1}%
+ \yy = 0cm
+ \advance \yy by \hy
+ \yyy = \sy
+ \@compute@xx{#2}
+ \@compute@xxx{#3}
+ \psframe[fillstyle=crosshatch,hatchwidth=.2pt,hatchsep=2pt,hatchcolor=lightgray,linewidth=0pt,framearc=.2](\xx,\yy)(\xxx,\yyy)
+ \@RTExecDefaultValues
+}
+
+% %
+% % par 1: task
+% % par 2: first instant (arrival)
+% % par 3: second instant (deadline)
+% %
+% \newcommand{\Interval}[4][nocommand=1]{
+% \setkeys{RT}{#1}%
+% \@compute@yy{#2}
+% \advance \yy by 2.5\sy
+% \@compute@xx{#3}
+% \@compute@xxx{#4}
+% % da cambiare con psarc
+% \pscurve*[linecolor=\RTLineColor]{-}(\xx,\yy)(\xxx,\yy)
+% \@RTExecDefaultValues
+% }
+
+\newcommand{\RowLabel}[3][nocommand=1]{
+ \setkeys{RT}{#1}%
+ \@compute@yy{#2}
+ \advance \yy by 1.5\sy
+ \xx = \RTRowLabelOffset %\advance \xx by \sx
+ \uput{4pt}[dl](-\xx,\yy){
+ \usefont{T1}{phv}{m}{n}
+ \fontsize{\RTTaskLabelSize}{\RTTaskLabelSize}
+ \selectfont{#3}
+ }%
+}
+
+\newcommand{\TaskExecDelta}[4][nocommand=1]{
+ \setkeys{RT}{#1}%
+ \@compute@yy{#2}
+ \@compute@xx{#3}
+ \yyy = \yy \advance \yyy by \sy
+ %\@compute@xxx{#4}
+ \xxx = \xx \advance \xxx by #4\sx
+ \psframe[fillstyle=\RTTaskFill,fillcolor=\RTTaskColor,linecolor=\RTLineColor](\xx,\yy)(\xxx,\yyy)
+ \advance \xx by \xxx \xx = .5\xx
+ \uput{2pt}[u](\xx,\yy){%
+ \usefont{T1}{phv}{m}{n}%
+ \fontsize{\RTNumberLabelSize}{\RTNumberLabelSize}%
+ \selectfont{\RTExecLabel}%
+ }
+ \@RTExecDefaultValues
+}
+
+\newcommand{\TaskRespTime}[4][nocommand=1]{
+ \setkeys{RT}{#1}
+ \@compute@yy{#2}
+ \@compute@xx{#3}
+ \yyy = \yy \advance \yyy by \sy
+ \xxx = \xx \advance \xxx by #4\sx
+ \psframe[fillstyle=crosshatch*,hatchcolor=white,
+ hatchwidth=.4pt,hatchsep=1pt,
+ linestyle=none,fillcolor=\RTTaskColor](\xx,\yy)(\xxx,\yyy)
+ \@RTExecDefaultValues
+}
+
+\endinput
+