From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/latex/contrib/rtsched/rtsched.sty | 427 +++++++++++++++++++++++++++++++
 1 file changed, 427 insertions(+)
 create mode 100644 macros/latex/contrib/rtsched/rtsched.sty

(limited to 'macros/latex/contrib/rtsched/rtsched.sty')

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
+
-- 
cgit v1.2.3

