I have looked around on TeX.SX and I have learnt a lot of things. One of the things I have not yet mastered is how to use the key=value function that packages like keyval or xkeyval offer or even pgfkeys. Here is a MWE with the style I designed last year based on something I read online, can't remember where.

MWE
\documentclass{article}
\usepackage{tmpsty}
\university{University Name}
\department{Department Name}
\coursetitle{Course Name}
\coursecode{Course Code}
\coursesession{Semester Running}
\assessmenttitle{Assessment Title}
\begin{document}
\schoolheader
\course
sample test
\end{document}
Syle File Used
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{tmpsty}[2013/09/24 Standard Style File For Assessments At SHJC]
\RequirePackage[T1]{fontenc}
\RequirePackage[latin9]{inputenc}
\RequirePackage[letterpaper,tmargin=2cm,bmargin=2cm,lmargin=2.5cm,rmargin=2.5cm]{geometry}
\RequirePackage{amsmath,amssymb,amsfonts}
\RequirePackage{booktabs,array}
\RequirePackage[dvipsnames,table]{xcolor}
\RequirePackage{graphicx}
\RequirePackage{mwe}
%----------------------------------------------------------------------------------
% Some Definitions
%----------------------------------------------------------------------------------
\def\university#1{\gdef\@university{#1}}
\def\department#1{\gdef\@department{#1}}
%
\def\coursetitle#1{\gdef\@coursetitle{#1}}
\def\coursecode#1{\gdef\@coursecode{#1}}
\def\coursesection#1{\gdef\@coursesection{#1}}
%
\def\coursesession#1{\gdef\@coursesession{#1}}
\def\assessmenttitle#1{\gdef\@assessmenttitle{#1}}
%----------------------------------------------------------------------------------
% Header
%----------------------------------------------------------------------------------
\newcommand{\schoolheader}{%
\global\let\university\@empty
\global\let\department\@empty
\global\let\coursetitle\@empty
\global\let\coursecode\@empty
\global\let\coursesection\@empty
\global\let\coursesession\@empty
\global\let\assessmenttitle\@empty
%
\global\let\university\relax
\global\let\department\relax
\global\let\coursetitle\relax
\global\let\coursecode\relax
\global\let\coursesection\relax
\global\let\coursesession\relax
\global\let\assessmenttitle\relax
%
\begin{center}
\begin{tabular}{>{\raggedright}m{2.65cm}>{\centering}m{10cm}>{\raggedleft}m{2.65cm}}
%\includegraphics[scale=0.22]{example-image}
&
\textbf{\LARGE\@university}\par\vskip5pt%
{\Large\bfseries\@department}%
&
\includegraphics[scale=0.22]{example-image}
\end{tabular}
\end{center}
%
}
%----------------------------------------------------------------------------------
% Assessment Information
%----------------------------------------------------------------------------------
\newcommand{\course}{%
\begin{center}
\textbf{%
\@coursetitle\ (\@coursecode)\\
\@coursesession\\
\@assessmenttitle%
}
\end{center}%
}
\newcommand{\handout}{%
\begin{center}
\textbf{%
\@coursetitle\ (\@coursecode)\\[1.5ex]
\@assessmenttitle%
}
\end{center}%
}
%----------------------------------------------------------------------------------%
% End of File %
%----------------------------------------------------------------------------------%
\endinput
I know that it is a common understanding that using \def is a bad practice and that \newcommand is better but am willing to accept suggestions on how to tweak or achieve the definitions stated in the tmpsty.sty file in a different way or more importantly how to use the key=value style of defining user entries.
