بـــــســـــم الـــــلـــــه

ترجم برنامج يترجم الرَّقِيم أي كود سورس من الحروف الإنقليزية إلى العربية و من العربية إلى الإنقليزية.
و هو معد لترجمة رقيم لغة سيي و يمكنه ترجمة جافا لأنها شبيهة بسيي.

و يمكنه ترجمة لغة بيسك بتمرير معطى عند طلب البرنامج ليفهم أن ' تبدأ نَوْطا أي كومّانت.
و يمكن تمرير أوامر ترجمة وسط الرقيم لقلب << و >> في سيي بلاس بلاس أو منع ذلك.

و يمكنه ترجمة عامة جافاسكريبت ولكنه يعامل الأنساق المحاطة بـ ' معاملة حروف لغة سيي. و لا يعرف الأعداد الثمانية و الزوجية في جافاسكريبت مثل 0b1101 و لا يقبل _ وسط الأعداد.

يترجم البرنامج حروف الأسماء فيصير b باء و h هاء و v ثاء و V ذالا ...
و بعض الحروف لا يترجمها فيبقيها كما هي مثل Z و Q...
و يعمل أيضا بمعجم كلمات فيمكن أن تكتب فيه الكلمات التي لا يحسن ترجمتها مثل:

printf, برينتف # حرف p يصير تاء مربوطة عادة
MAX_INT, ماكس_إنت_ك
Max_Int, ماكس_إنت_ر
linux, لينكس # حرف i يصير كسرة عادة و حرف u يصير فتحة
             # و x يصير خاء عادة

ترجم يفهم الأعداد الثمانية أي أوكتال و السَّتْعَشِيَّة أي هيغزاديسيمال و الأعداد المجزأة أي فلووت. فيعرب 0123 ٠١٢٣ و 12.3e+11f ١٢٫٣ق+١١ف.
و هو يترجم أيضا الحروف في آخر الأعداد مثل l و u و f فيصيرها ل و ع و ف.
و يترجم الأعداد إلى الأرقام المشرقية تلقائيا و يمكن تمرير علم فيترجم إلى الأرقام المغربية.
و هو يقلب الرموز و الأرقام لتظهر صوابا في محرر فييم و يمكن تمرير أعلام لمنع قلب الرموز أو الأعداد ليظهر الرقيم صوابا في إماكس.
و هو يفهم الحروف و الأنساق أي سترينغ كما تقبل في لغة سيي. و يفهم ثوابت الحروف مثل \a و \x4d1 فيعربه و /س١د٤.
و يفهم أيضا أوامر برينتاف و سكاناف مثل %0 +0012.3f فيعربها %٠ +٣٫٠٠١٢ف .
و هو يترجم أعلام برينتاف بثلاث طرق يتم اختياره بأعلام تمرر إلى البرنامج مثل -2 أو -3 .
و هو يترجم الأسماء و الأعداد وسط الأنساق تلقائيا و لكن يمكن وضع أوامر تمنع الترجمة و أوامر تسمح بالترجمة في أنواط أي كومانت.
و هو يزيد فصلا أي |.!.| لمنع إدخال أخطاء في الرقيم ف "\z\v" يعرب فيصير "/|.!.|ز/ز" ثم يُرَوَّمُ فيعود كما كان. و يمكن تمرير علم لمنع زيادة الفصلة.

ثمة من يبرمج بأسماء متغيرين فرنسية و إنقليزية مثل number_of_arrays و ثمة من يبرمج بالعربية بحروف لاتينية مثل Edd_Sfwf و ثمة من يبرمج بالعربية مثل عدد_صفوف.
و أكثر وقت البرمجة يُمضى في قراءة الرقيم و ليس في كتابته.
و وجدت أن نصا عربيا بحروف عربية يقرأ عادة في 91.4% من الوقت المقضى لقراءة نص عربي بحروف رومية.
أو يمكن فهم ذلك أن البرمجة بحروف عربية تحتاج تفكرا أقل من التفكر الواجب للبرمجة بحروف إنقليزية ب 8.5%.
و من أجل ذلك كتبت ترجم عسى أن يسهل لي البرمجة.

و هذا مثال رقيم و ترجمته:

#إنكلود<ستدإيو.ه>
#إنكلود "مثال.ه"

#دفاين جيم (٣)
#إفداف دال_ذال
فولاتايل إنت هاء = ١٢٣؛
#آلس
كونست ستاتك
   لونغ لونغ واو_زاي = ٠١٠٠؛
#آندإف

فلوت تاء = +١٥٫١١ق+١ف؛
فلوت عين = +١٥٫١١ق١٢ف؛
فلوت فاء = ١٥٫ف؛
دابل ياء = ٠سوهدج٫٢بأ١ق+١٢ل؛
شار نون = '/سج١‎/١٢٣/ن'؛
شار *قاف = "/سج١‎/١٢٣/ن"؛
شار *سين = ر٨"تتت"؛

ستركت كاف_س {
   إنت ألف؛
   شار باء؛
}؛

ينيون لام_ن {
   ستركت كاف_س كاف؛
   إنت ميم؛
}؛
\\ نَوط ١٠ "/أ"
\* ٣ع
 * ١ق+١٥ل
 *\
فويد عين_عين(فويد *فاء)
{
   تاء += ١٫٠ل؛
   ياء = (دابل)١؛
   إف (نون && سين)
      هاء = ١؛
   آلس
      هاء = ياء ؟ ٣علل : ٤ل؛

   وايل (هاء > ١) {
      فور (م = ٠؛ م < هاء؛ م++) {
         برنتف("%+٠٣ش"، م)؛
      }
   }
   برنتف(   "% #+٣٫١١^ل^ف %% %٠٫ف"،
            ياء، تاء)؛
أعد:
   سويتش (نون)
   {
      دفولت:
         بريك؛
      كايز '1':
         كنتنيو؛
      كايز '2':
         غوتو أعد؛
   }
   دو {
      هاء += ١؛
   } وايل (هاء << ١)؛
   سين = "ك ١٢٫٣ف"؛
   سين = ل""؛
   سين = ر"" "٢٫٢"؛
   نون = سين[٠]؛
   نون = ر'4'؛
   نون = ل'3'؛

   نون = '12e+3 Abjd /س١٢'؛
   سين = "١٢ق+٣ أبجد /س١٢"؛

\* رنسق *\
   نون = '12e+3 Abjd /س١٢'؛
   سين = "12e+3 Abjd /س١٢"؛
\* ترسق *\
# دفاين سبتر
# دفاين كفتر
   nwn = '12e+3 Abjd';
   syn = "12e+3 Abjd";

   سبتر

# دفاين قبزج
# دفاين أرزج
   هاء = هاء >> ياء؛
   قبزج
   ك << هاء << ياء؛
   \* أرزج *\
   هاء = هاء >> ياء؛

   سين = " "؛
   \* نكلم *\
   سين = " "؛
   \* قرلم *\
   سين = " "؛

   رتورن؛
}
#أنداف جيم
#إفداف جيم
#  إرور .................
#  ورنينغ ---------------/
            --------------
#آندإف
#include<stdio.h>
#include "mval.h"

#define jym (3)
#ifdef dal_Val
volatile int hae = 123;
#else
const static
   long long waw_zay = 0100;
#endif

float tae = +15.11E+1f;
float Eyn = +15.11E12f;
float fae = 15.f;
double yae = 0x1ab.2cdefp+12L;
char nwn = '\x1c\123\n';
char *qaf = "\x1c\123\n";
char *syn = u8"ttt";

struct kaf_s {
   int Alf;
   char bae;
};

union lam_n {
   struct kaf_s kaf;
   int mym;
};
// nuwT 10 "\a"
/* 3u
 * 1e+15l
 */
void Eyn_Eyn(void *fae)
{
   tae += 1.0l;
   yae = (double)1;
   if (nwn && syn)
      hae = 1;
   else
      hae = yae ? 3ull : 4l;

   while (hae > 1) {
      for (m = 0; m < hae; m++) {
         printf("%+03d\n", m);
      }
   }
   printf(  "% #+11.3LF %% %.0f\n",
            yae, tae);
AEd:
   switch (nwn)
   {
      default:
         break;
      case '1':
         continue;
      case '2':
         goto AEd;
   }
   do {
      hae += 1;
   } while (hae >> 1);
   syn = "k 12.3f";
   syn = L"";
   syn = u"\1" "2.2";
   nwn = syn[0];
   nwn = u'4';
   nwn = L'3';

   nwn = '12e+3 Abjd \x12';
   syn = "12e+3 Abjd \x12";

/* rnsq */
   nwn = '12e+3 Abjd \x12';
   syn = "12e+3 Abjd \x12";
/* trsq */
# define sbtr
# define kftr
   nwn = '12e+3 Abjd';
   syn = "12e+3 Abjd";

   sbtr

# define qbzj
# define Arzj
   hae = hae << yae;
   qbzj
   k << hae << yae;
   /* Arzj */
   hae = hae << yae;

   syn = "%d %f";
   /* nklm */
   syn = "%d %f";
   /* qrlm */
   syn = "%d %f";

   return;
}
#undef jym
#ifdef jym
#  error .................
#  warning ---------------\
            --------------
#endif

و هذا مثال رقيم ثان و ترجمته بطريقتين:

#إنكلود<سيس\تايم.ه>

إنت ياء = ١٢ل؛
شار نون = 'w'؛
شار سين[٢][٣ستركت كاف_س {
   إنت ألف : ٣؛
   إنت باء : ١؛
}؛
ستركت لام_س {
   إنت جيم؛
   إنت دال؛
}؛

فويد عين()
{
   ستركت لام_س *لام = نوول؛
   ياء = لام->جيم؛
   ياء = ٤ + ٥؛

   إف (نون)
      وايل (ياء > ٠)
         ياء--؛
}
#ضمن<سيس\تايم.ه>

صحيح ياء = 12ل؛
حرف نون = 'w'؛
حرف سين[2][3]؛

رفيئة كاف_س {
   صحيح الف : 3؛
   صحيح باء : 1؛
}؛
رفيئة لام_س {
   صحيح جيم؛
   صحيح دال؛
}؛

فراغ عين()
{
   رفيئة لام_س *لام = عدم؛
   ياء = لام->جيم؛
   ياء = 4 + 5؛

   إن (نون)
      بينا (ياء > 0)
         ياء--؛
}
#include<sys/time.h>

int yae = 12L;
char nwn = 'w';
char syn[2][3];

struct kaf_s {
   int Alf : 3;
   int bae : 1;
};
struct lam_s {
   int jym;
   int dal;
};

void Eyn()
{
   struct lam_s *lam = null;
   yae = lam->jym;
   yae = 4 + 5;

   if (nwn)
      while (yae > 0)
         yae--;
}

الترجمة اليمنى ترجم كالرقيم الأول بأرقام مشرقية و بنفس معجم كلمات المثال الأول.
الترجمة الثانية في الوسط استعملت الأرقام المغربية و استعملت معجما مغايرا لتعريب كلمات لغة سيي. و التلوين في الترجمة الثانية أقل جراء تغير تعريب كلمات سيي و كون اعرف_سيي.فييم (aErf_syy.vim) لا يعرف تلك الكلمات فيلونها. و اعرف_سيي.فييم ملف سكريبت مرافق لترجم لكي يزيد تلوين الرَّقِيم في محرر فييم (vim).

ما يجب فهمه من المثال الأخير أن طريقة الترجمة قد تتبدل مع الوقت فقد يفضل المبرمج في وقت ما وايل لترجمة while و بعد عدة أشهر قد يفضل كلمة أخرى مثل بينا. و لذلك عند حفظ الرقيم يحسن أن يحفظ بالإنقليزية في الملف و في سيفياس (cvs) مثلا. و ثمة جراء ذلك لغة برمجة واحدة بالإنقليزية ولكن تظهر بطريقة التعريب المفضلة عند تغيير الرقيم أو قراءته.
أما لو حفظ الرقيم بالعربية في سيفياس ثم تغيرت طريقة التعريب فعندئذ يجب مراجعة كل الرقيم لتصويبه عند تغير طريقة التعريب و كأن كل طريقة تعريب، لغة برمجة مختلفة عن غيرها.

محاذير قلب الكتابة في يونيكود

بعض برامج الكتابة تعمل بطريقة يونيكود لإظهار الكلمات العربية من اليمين لليسار.
و هذا قد يُعقِب بعض الأخطاء عند إظهار الرقيم و ليس عند الترجمة، فقد يعرّب الرقيم فيظهر خاطئا في إماكس ثم يترجم للإنقليزية فيرجع كما كان و الخطأ فقط في الإظهار و ليس في الترجمة.
من هذه البرامج إماكس و كديفلوب. أما فييم فلا يعمل بها.
و بعض هذه الأخطاء في الإظهار يحدث في نسخ معينة من بعض البرامج دون غيرها.

من هذه الأحوال حال أمر سيي:
k = "123\45\67";
فهي تعرب مع ‎-z و ‎-nbq فتصير:
ك = "١٢٣/٤٥/٦٧"؛
و تظهر في إماكس:
ك = "١٢٣/٤٥/٦٧"؛
و الصواب أن تظهر في إماكس:
ك = "١٢٣‎/٤٥‎/٦٧"؛
و لمنع خطإ الإظهار يحسن أن يصير الأمر في سيي:
k = "123" "\45" "\67";
وفي جافاسكريبت يكون الأمر:
k = "123" + "\45" + "\67";

و كذلك أمر سيي:
k = "\x12c\34\56\n";
فهو يعرب مع ‎-z و ‎-nbq فيصير:
ك = "/سج٢١/٣٤/٥٦/ن"؛
و لكنه يظهر في إماكس 25.2.2:
ك = "/سج١٢‎/٣٤‎/٢١ﺞﺳ"؛
و الصواب أن يظهر:
ك = "/سج١٢‎/٣٤‎/٥٦/ن"؛
و لتجنب ذلك الخطإ يحسن أن يصير الأمر:
k = "\x12c" "\34" "\56\n";

و كذلك أمر سيي:
k = m?12:34;
n++;
فهو يعرب مع ‎-z و ‎-nbq فيصير:
ك = م؟٢١:٣٤؛
ن++؛
و يظهر في إماكس 25.2.2:
ك = م؟٢١:١٢؟ﻡﻥ++؛
و الصواب أن يظهر:
ك = م؟١٢:‎٣٤؛
ن++؛
و لتصويب ذلك يحسن أن يصير الأمر:
k = m ? 12 : 34;
n++;

و كذلك أمر سيي:
for (m=0; q+=2,33>m; m++);
يعرب مع ‎-z و ‎-njE و ‎-g فيصير:
فور (م=0؛ ق+=2،33>م؛ م++)؛
و يظهر في إماكس:
فور (م=0؛ ق+=2،33>م؛ م++)؛
و الصواب أن يظهر:
فور (م=0؛ ق+=2،‎33>م؛ م++)؛
و لتصويب ذلك يحسن أن يزاد فضاء بعد الفاصل:
for (m=0; q+=2, 33>m; m++);

و هذه الأخطاء تظهر إذا وجد عددان و وجد حرف بينهما من الحروف التالية: ',' و '.' و '/' و ':' و فاصل عربي '،' و فاصل عشري عربي '٫' .
و زيادة فضاء بين العددين تزيل هذا الخطأ في الإظهار.

و هذه الأخطاء في الإظهار تحدث في إماكس و كديفلوب و لا تحدث في فييم.

لنيل برنامج ترجم

برنامج ترجم برنامج تجاري.
لمزيد التفاصيل لنيل برنامج ترجم انظر الصفحة التالية.

صفة ملاف ترجم

حزمة ترجم تحوي الملاف التالية: و حجم الملاف هي: و أختام ملاف ترجم 4.8.2.76 :
trjm.lnx
md5: e5e125e7a2e3da3879f325ded6369479
sha1: adc6d9dce1c8a906c3edb7d1459665c96bdc2c5c
sha256: a10e0c180960787d2ed46582831534736090986903cf855b7b691db40c46ba4e

trjm.xxd
md5: 9e25712bad376e33799bc5b08d8cc9d5
sha1: 03434f3fe8e5c4e925aae46a4855796dba7815eb
sha256: 5bb4fc282c23e9959d60591353ee94f98575eb2161b83fc500ac58897c4f56eb

trjm_l32.lnx
md5: 2a5c1b05f907711d4ea4024674b2a936
sha1: 8ed7f47ca62ad8279287fb828d3d9659aeb48022
sha256: 0b90b93b54d297e7e7b0ba75355b99753d79a8124efd3063231041f904dedb29

trjm_l32.xxd
md5: 9309210630684e953ed45abbbdc60f08
sha1: c55ac05504dc8c7fc6387e4c634493e3a3f1847d
sha256: 3e6b3956b4c705a858213e15ea5226b2a5dc52706e5251c685b2141393863e2f

trjm_w32.exe
md5: bd1020c2573f6160c35ce8b9125c5446
sha1: ddd4b1ec5b98aa3a3092259d169e9925294a9367
sha256: a4fe406ea32588d17ad1e402b1027416570e23ea8b0e2cd8197f32a6c9e1c928

trjm_w32.xxd
md5: 49a5fa0e4eb5ab34330a055f2bc354b6
sha1: 0f6f60c0d0410fdf3376e27c78f2cf1f4db6b6f2
sha256: a6dd515f6b9a86e417fab80e6a20e9470f87914a015a556c83bb7643718b71fd

fsr.htm
md5: 6b741494b92e4da36d33cde068703033
sha1: f3d0e9f9203656b1af1c8c868054a0c95c340104
sha256: 44834cf65f22d0b27e1c6a48ae181e720bb4c03ec0882d8ef9367e29a1f671e5

help.htm
md5: eb9c273f4f26d40647c16bef75deb681
sha1: 70da3075d879334f321cfbd7fe1b45b100747bf9
sha256: eb73024836155e2a8e7590f7d763f95c8de52fef474693be4259e1ab400bd9ad

aErf_syy.vim
md5: 47f0cdf2e4f5c04bb211afb3e17c7012
sha1: aea4b58687d9e97afc9e502362c202decb12017b
sha256: ba62345e5da03cba6188f887b9e8e943d94c770cf1a69591785657a9c1e0228e

aErf_syy_2.vim
md5: 49c440c7ea719611cb4acf2595647cfb
sha1: 8411ce0f1e23ca0996b19b3407c8639f71fd94ad
sha256: 07d0cd897bf29532ba4e9fce1ee60ad9ae2eaa1ef2d0b3d8bd486bd40528eea6

aTw_syy.vim
md5: 5d86d5094f14d11f8788b5776e447feb
sha1: cca77b23272c2a774137242d429c3ad2f8b77f48
sha256: 36c41f74f340a90938da859501b0543e6c5093d313d09ef5fad0f36e65248e9a

lc.vim
md5: 47c9e97b9276d713e00f701550bb2ca7
sha1: 50ff9a79a9be843969c9524b13abbc47f4e6ad10
sha256: 9a9f2e877da3a02d5145f758ca023a968b422deb04c63516c7000384bb59f75e

lsyy.vim
md5: 6e6b34c19136337143af718f485357bd
sha1: f5e00516f07a45e2235c87e343fe9cf475849c95
sha256: 157cb9e66f11f82f6d5041d429b274ad138fa4cc3370d139091fcb1caab42dc8

ملاف .لنكس .lnx و .اكسو .exe و .اكسدي .xxd تحوي أرقاما تسلسلية ذات 53 رقما يجب تصفيرها قبل حساب الأختام.
و في ملاف .اكسدي تتواجد دوما في سطرين متعاقبين و يبدأ الرقم التسلسلي من أول السطر و آخر السطر الثاني أصفار.
و أسطر بدء الأرقام التسلسلية هي:

مثلا لحساب أختام ترجم.اكسدي يصفر الرقم التسلسلي بالأمر التالي:
cat trjm.xxd | sed '5537,+1 s/3[0-9]/30/g' | sed '5539,+1 s/3[0-9]/35/g' > t_0.xxd
ثم تحسب أختام الملف t_0.xxd .

ولحساب أختام ترجم.لنكس يصفر الرقم التسلسلي بالأمر التالي:
cat trjm.lnx | xxd -p | sed '5537,+1 s/3[0-9]/30/g' | sed '5539,+1 s/3[0-9]/35/g' > t_0.xxd
cat t_0.xxd | xxd -r -p > t_0.bin
ثم تحسب أختام الملف t_0.bin .