diff --git a/src/arabic.c b/src/arabic.c
index d6679d6..1c30598 100644
--- a/src/arabic.c
+++ b/src/arabic.c
@@ -43,8 +43,7 @@
  * Returns True if c is an ISO-8859-6 shaped ARABIC letter (user entered)
  */
     static int
-A_is_a(cur_c)
-    int cur_c;
+A_is_a(int cur_c)
 {
     switch (cur_c)
     {
@@ -96,8 +95,7 @@
  * Returns True if c is an Isolated Form-B ARABIC letter
  */
     static int
-A_is_s(cur_c)
-    int cur_c;
+A_is_s(int cur_c)
 {
     switch (cur_c)
     {
@@ -148,8 +146,7 @@
  * Returns True if c is a Final shape of an ARABIC letter
  */
     static int
-A_is_f(cur_c)
-    int cur_c;
+A_is_f(int cur_c)
 {
     switch (cur_c)
     {
@@ -202,8 +199,7 @@
  * Change shape - from ISO-8859-6/Isolated to Form-B Isolated
  */
     static int
-chg_c_a2s(cur_c)
-    int cur_c;
+chg_c_a2s(int cur_c)
 {
     int tempc;
 
@@ -332,8 +328,7 @@
  * Change shape - from ISO-8859-6/Isolated to Initial
  */
     static int
-chg_c_a2i(cur_c)
-    int cur_c;
+chg_c_a2i(int cur_c)
 {
     int tempc;
 
@@ -462,8 +457,7 @@
  * Change shape - from ISO-8859-6/Isolated to Medial
  */
     static int
-chg_c_a2m(cur_c)
-    int cur_c;
+chg_c_a2m(int cur_c)
 {
     int tempc;
 
@@ -592,8 +586,7 @@
  * Change shape - from ISO-8859-6/Isolated to final
  */
     static int
-chg_c_a2f(cur_c)
-    int cur_c;
+chg_c_a2f(int cur_c)
 {
     int tempc;
 
@@ -732,8 +725,7 @@
  * Change shape - from Initial to Medial
  */
     static int
-chg_c_i2m(cur_c)
-    int cur_c;
+chg_c_i2m(int cur_c)
 {
     int tempc;
 
@@ -820,8 +812,7 @@
  * Change shape - from Final to Medial
  */
     static int
-chg_c_f2m(cur_c)
-    int cur_c;
+chg_c_f2m(int cur_c)
 {
     int tempc;
 
@@ -930,8 +921,7 @@
  * Change shape - from Combination (2 char) to an Isolated
  */
     static int
-chg_c_laa2i(hid_c)
-    int hid_c;
+chg_c_laa2i(int hid_c)
 {
     int tempc;
 
@@ -961,8 +951,7 @@
  * Change shape - from Combination-Isolated to Final
  */
     static int
-chg_c_laa2f(hid_c)
-    int hid_c;
+chg_c_laa2f(int hid_c)
 {
     int tempc;
 
@@ -991,8 +980,7 @@
  * Do "half-shaping" on character "c".  Return zero if no shaping.
  */
     static int
-half_shape(c)
-    int		c;
+half_shape(int c)
 {
     if (A_is_a(c))
 	return chg_c_a2i(c);
@@ -1011,13 +999,13 @@
  * in:     "next_c"  is the next character (not shaped).
  */
     int
-arabic_shape(c, ccp, c1p, prev_c, prev_c1, next_c)
-    int		c;
-    int		*ccp;
-    int		*c1p;
-    int		prev_c;
-    int		prev_c1;
-    int		next_c;
+arabic_shape(
+    int		c,
+    int		*ccp,
+    int		*c1p,
+    int		prev_c,
+    int		prev_c1,
+    int		next_c)
 {
     int		curr_c;
     int		shape_c;
@@ -1082,9 +1070,9 @@
  * A_firstc_laa returns first character of LAA combination if it exists
  */
     static int
-A_firstc_laa(c, c1)
-    int c;	/* base character */
-    int c1;	/* first composing character */
+A_firstc_laa(
+    int c,	/* base character */
+    int c1)	/* first composing character */
 {
     if (c1 != NUL && c == a_LAM && !A_is_harakat(c1))
 	return c1;
@@ -1097,8 +1085,7 @@
  *		(harakat/tanween)
  */
     static int
-A_is_harakat(c)
-    int c;
+A_is_harakat(int c)
 {
     return (c >= a_FATHATAN && c <= a_SUKUN);
 }
@@ -1109,8 +1096,7 @@
  *		(alphabet/number/punctuation)
  */
     static int
-A_is_iso(c)
-    int c;
+A_is_iso(int c)
 {
     return ((c >= a_HAMZA && c <= a_GHAIN)
 	    || (c >= a_TATWEEL && c <= a_HAMZA_BELOW)
@@ -1123,8 +1109,7 @@
  *		(alphabet/number/punctuation)
  */
     static int
-A_is_formb(c)
-    int c;
+A_is_formb(int c)
 {
     return ((c >= a_s_FATHATAN && c <= a_s_DAMMATAN)
 	    || c == a_s_KASRATAN
@@ -1137,8 +1122,7 @@
  * A_is_ok returns TRUE if 'c' is an Arabic 10646 (8859-6 or Form-B)
  */
     static int
-A_is_ok(c)
-    int c;
+A_is_ok(int c)
 {
     return (A_is_iso(c) || A_is_formb(c));
 }
@@ -1149,8 +1133,7 @@
  *		with some exceptions/exclusions
  */
     static int
-A_is_valid(c)
-    int c;
+A_is_valid(int c)
 {
     return (A_is_ok(c) && !A_is_special(c));
 }
@@ -1161,8 +1144,7 @@
  *		Specials don't adhere to most of the rules.
  */
     static int
-A_is_special(c)
-    int c;
+A_is_special(int c)
 {
     return (c == a_HAMZA || c == a_s_HAMZA);
 }
