جدول اسکی

پیوست ‎T‎- جدول ASCII

به طور قراردادی کتابی از این نوع، دارای یک پیوست جدول ASCII می‌باشد. این کتاب چنین جدولی ندارد. در عوض، در اینجا چند اسکریپت کوتاه هست، که هر یک از آنها یک جدول ASCII کامل تولید می‌کند.

مثال ‎T-1‎- اسکریپتی که یک جدول اسکی تولید می‌کند

#!/bin/bash
# 
#     نگارش ‎0.2‎، تاریخ انتشار ‎26 Aug 2008‎
#        تعمیر شده توسط مولف راهنمای ABS.

#    اسکریپت اصلی نوشته ‎Sebastian Arming‎.
# با مجوز در اینجا استفاده گردیده(تشکر!).

exec >ASCII.txt         # ذخیره خروجی در فایل، همچون در اسکریپت‌های
                        #+  مثال ‎reassign-stdout.sh‎ و ‎upperconv.sh

MAXNUM=256
COLUMNS=5
OCT=8
OCTSQU=64
LITTLESPACE=-3
BIGSPACE=-5

i=1    # شمارشگر دسیمال
o=1    #  شمارشگر اکتال

while [ "$i" -lt "$MAXNUM" ]; do       # نباید بعد از ‎400‎ اکتال را بشماریم.
        paddi="    $i"
        echo -n "${paddi: $BIGSPACE}  "           #       فاصله گذاری ستون.
        paddo="00$o"
#              #       در اسکریپت اولیه.
        echo -ne "\\0${paddo: $LITTLESPACE}"      #              تعمیر شده.
# 
        echo -n "     "
        if (( i % $COLUMNS == 0)); then           #               سطر جدید.
           echo
        fi
        ((i++, o++))
        #نشانه‌گذاری اکتال برای ‎8‎ می‌شود ‎10‎، و ‎64‎ دسیمال برابر ‎100‎ اکتال است.
        (( i % $OCT == 0))    && ((o+=2))
        (( i % $OCTSQU == 0)) && ((o+=20))
done

exit $?

# این اسکریپت را با مثال ‎pr-asc.sh‎ مقایسه نمایید.
# این کاراکترهای غیر قابل چاپ را هم مدیریت می‌کند.

#                                تمرین:
# این اسکریپت را جهت استفاده از اعداد دسیمال به جای اکتال ، بازنویسی کنید.

مثال ‎T-2‎. یک اسکریپت جدول اسکی دیگر

#!/bin/bash
#            نویسنده اسکریپت: ‎Joseph Steinhauser‎
# ویرایش جزیی توسط نگارنده، اما بدون توضیح دادن.
#     در راهنمای ABS با مجوز استفاده گردیده است.

# -------------------------------------------------------------------------
#-- 
# -------------------------------------------------------------------------
#--    
# --
#--  این اسکریپت خلاصه وضعیتی از کاراکترهای اسکی از کد ‎0‎ تا ‎127‎ چاپ می‌کند.
#--   مقادیر عددی می‌تواند در مبنای دسیمال، اکتال، یا هگزادسیمال چاپ بشود.
# --
#-- قالب مبتنی بر: ‎/usr/share/lib/pub/ascii‎ با مبنای ‎10‎ به عنوان پیش‌فرض.
#--                                    برای توضیحات بیشتر ‎man ascii‎ . . .
# -------------------------------------------------------------------------

[ -n "$BASH_VERSION" ] && shopt -s extglob

case "$1" in
   oct|[Oo]?([Cc][Tt])|8)       Obase=Octal;  Numy=3o;;
   hex|[Hh]?([Ee][Xx])|16|[Xx]) Obase=Hex;    Numy=2X;;
   help|?(-)[h?])        sed -n '2,/^[ ]*$/p' $0;exit;;
   code|[Cc][Oo][Dd][Ee])sed -n '/case/,$p'   $0;exit;;
   *) Obase=Decimal
esac     # واقعا کد کوتاه‌تر از جدول است!

printf "\t\t## $Obase ASCII Chart ##\n\n"; FM1="|%0${Numy:-3d}"; LD=-1

AB="nul soh stx etx eot enq ack bel bs tab nl vt np cr so si dle"
AD="dc1 dc2 dc3 dc4 nak syn etb can em sub esc fs gs rs us sp"

for TOK in $AB $AD; do ABR[$((LD+=1))]=$TOK; done;
ABR[127]=del

IDX=0
while [ $IDX -le 127 ] && CHR="${ABR[$IDX]}"
   do ((${#CHR}))&& FM2='%-3s'|| FM2=`printf '\\\\%o  ' $IDX`
      printf "$FM1 $FM2" "$IDX" $CHR; (( (IDX+=1)%8))||echo '|'
   done

exit $?

مثال ‎T-3‎. اسکریپت سوم جدول اسکی، با استفاده از awk

#!/bin/bash
#  اسکریپت جدول ASCII با استفاده از awk.
#               مولف: ‎Joseph Steinhauser‎
# با مجوز در راهنمای ABS استفاده گردیده.


# -------------------------------------------------------------------------
#-- 
# -------------------------------------------------------------------------
#-- 
# --
#--  این اسکریپت یک خلاصه وضعیت از کاراکترها از کد صفر تا ‎127‎ چاپ می‌کند.
#--   مقادیر عددی می‌توانند در مبنای ‎10‎، اکتال، یا هگز (مبنای ‎16‎) باشند.
#-- 
#-- قالب برمبنای: ‎/usr/share/lib/pub/ascii‎ با مبنای ‎10‎ به عنوان پیش‌فرض.
#--                                  برای توضیحات بیشتر ‎man ascii‎ . . .
# -------------------------------------------------------------------------

[ -n "$BASH_VERSION" ] && shopt -s extglob

case "$1" in
   oct|[Oo]?([Cc][Tt])|8)       Obase=Octal;  Numy=3o;;
   hex|[Hh]?([Ee][Xx])|16|[Xx]) Obase=Hex;    Numy=2X;;
   help|?(-)[h?])        sed -n '2,/^[ ]*$/p' $0;exit;;
   code|[Cc][Oo][Dd][Ee])sed -n '/case/,$p'   $0;exit;;
   *) Obase=Decimal
esac
export Obase   # کد واقعاً کوتاه‌تر از جدول است!

awk 'BEGIN{print "\n\t\t## "ENVIRON["Obase"]" ASCII Chart ##\n"
           ab="soh,stx,etx,eot,enq,ack,bel,bs,tab,nl,vt,np,cr,so,si,dle,"
           ad="dc1,dc2,dc3,dc4,nak,syn,etb,can,em,sub,esc,fs,gs,rs,us,sp"
           split(ab ad,abr,",");abr[0]="nul";abr[127]="del";
           fm1="|%0'"${Numy:- 4d}"' %-3s"
           for(idx=0;idx<128;idx++){fmt=fm1 (++colz%8?"":"|\n")
           printf(fmt,idx,(idx in abr)?abr[idx]:sprintf("%c",idx))} }'

exit $?