2023-01-26-16929201

մաս առաջին՝ պատմական ակնարկ

դեռ 19֊րդ դարում օգտագործւում էր մորզէ կոդը՝ տեղեկատւութիւն տեղափոխելու համար։ մորզէն տպւում էր ոչ թէ a4 թղթերի վրայ, այլ թղթէ ժապաւէնի։ եւ խնդիր կար տողերն առանձնացնելու։ այդ համար օգտագործւում էր BT յաջորդականութիւնը։ նշանակում էր՝ breat text։ այսպէս էլ գրում էին տեքստի մէջ՝ BT՝ բնաւ ոչ անտեսանելի։

յետոյ, երբ եկաւ տելետայպների եւ թուանշային գրամեքենաների ժամանակը, այդ տեսակ նիշերը թաքցուեցին, դարձան անտեսանելի։

այսպիմի նիշերից մէկն ա cr֊ն, որը նշանակում ա՝ carriage return՝ կրողի վերադարձ։ եթէ տեսել էք տպագրական մեքենայ, գուցէ նկատել էք որ մեքենայի մի մասը կրում ա թուղթը։

տպելիս կրող մասը շարժւում ա աջից ձախ (քանի որ մենք գրում ենք ձախից աջ) որ ամէն նոր նիշը տպուած լինի թղթի նոր տեղում։

եւ երբ տողն աւարտուած ա լինում, պէտք ա վերադարձնել թուղթը ելքային դիրք։

թուանշային տպագրական մեքենաներում այդ համար մտածել են հատուկ անտեսանելի նշան, անունը՝ cr, որ երբ մեքենան հանդիպի այն, կրողը կը վերադարձնի թուղթը ելքային դիրք։ այդ անտեսանելի նիշի համարը ascii աղիւսակում տասականով 13 ա, իսկ տասնվեցականով՝ 0d։

windows֊ում տողադարձը նշւում ա երկու անտեսանելի նիշով, cr ու lf։ վերջինը նշանակում ա՝ line feed։ եթէ cr֊ը վերադարձնում ա թուղթը աջ, կամ հետեւաբար կուրսորը՝ ձախ, ապա lf֊ն բարձրացնում ա տողը, կամ կարգիչներում՝ իջեցնում կուրսորը։

այս անտեսանելի նիշի համարն ա, տասականով՝ 10, տասնվեցականով՝ 0a։

իսկ իւնիքս համակարգերում ձեւաւորուեց այլ աւանդոյթ՝ ամէն տողի վերջում երկու բայթ չզբաղեցնելու համար պարզապէս օգտագործուել ա lf֊ն՝ որպէս տողադարձի նշան, տողի վերջի նշան։

գոյութիւն ունի եւ երրորդ աւանդոյթ՝ գրել միայն cr եւ հասկանալ նոյնը՝ տողադարձ։

այդպէս էր ընդունուած անել commodore, spectrum դասական ութ բիթանի համակարգիչներում, ու գուցէ այդ պատճառոջ էլ այդպէս էր ընդունուած apple ][֊ում, իսկ հետագայում՝ macintosh համակարգում։ խօսքը հին, այսօր «դասական» կոչուած macos֊ի մասին ա։ cr֊ն նաեւ օգտագործւում էր այսպէս կոչուած «լիսպ մեքենաներում», եւ՝ «օբերոն» օպերացիոն համակարգում։

նոյնիսկ վերջին թարմացման ժամանակ, project oberon 2013֊ում, վիրտը կրկին օգտագործել ա 0d֊ն որպէս տողի աւարտի նշան։

ահա, այս նիշքի սկզբում գրուած ա՝

TAB = 9X; CR = 0DX;
TextTag = 0F1X;
replace* = 0; insert* = 1; delete* = 2; unmark* = 3;  (*op-codes*)

եւ գրել ա յատուկ Tools.convert() ֆունկցիան, որպէսզի 0d տողադարձով նիշքերը փոխակերպի հրապարակման համար։

մինչ այդ, lilith համակարգիչներում, ըստ երեւոյթին օգտագործւում էր lfcr յաջորդականութիւնը՝ 0d յետոյ 0a։ յամենայն դէպս օրիգինալ կոմպիլեատորի ելատեքստում այդպէս ա։

այսպիսի փախած կոդաւորում էր միայն առաջին arm համակարգիչներից մէկում՝ acorn bbc֊ում, որ աշխատում էր risc os֊ով։ այսօր risc os֊ը կարելի ա օգտագործել raspberry pi֊երի վրայ, զի arm ա։

մաս երկրորդ՝ խնդիր եւ լուծում

իմ խնդիրն էր՝ ես ուզում էի խմբագրել, աշխատել օբերոն համակարգի ելատեքստերի վրայ եւ կարողանալ օգտագործել որեւէ control revision կոդի համար։

օբերոն նիշքերն ունեն երկու հիմնական խնդիր՝

ի՞նչ եմ ուզում՝ ուզում եմ կարողանալ կոնսոլում անել git diff ու համեմատել վարկածները։ որ github֊ի, gitlab֊ի, gitea֊ի վեբ ինտերֆէյսները կը կարողանան ցոյց տալ ռեւիզիաների տարբերութիւնները՝ յոյս չէի փայփայում։ կոնսոլում աշխատի՝ լաւ ա։

git֊ն ունի երկու մեզ հետաքրքիր հնարաւորութիւն՝ text ու diff։ text֊ն այն մասին ա, ինչպէ՞ս պահել, ներմուծել նիշքը git֊ի տուեալների բազա (այն որ .git պանակի մէջ ա)։ diff֊ն այն մասին՝ ինչպէս համեմատել տողեր։

ես սկզբից դա չէի հասկացել, ու փորձում էի աւելացնել .gitattributes նիշքի մէջ՝

*.Mod text
*.Mod    eol=cr
text eol=cr

առաջին տողով ուզում էի ասել, որ ֆայլը բինար չէ։ պարզուեց՝ անիմաստ, զի յետոյ հասկացայ, որ դա ընդամէնը կապ ունի նրա հետ, ինչպէս տեքստը լցնել տուեալների բազայի մէջ՝ կոնուերտե՞լ տողադարձը lf թէ՞ չէ։ ըստ որում, պարզւում ա, cr տարբերակը git֊ը չի հասկանում։ կարելի ա ասել՝ crlf, բայց մեր դէպքը ելատեքստում նախատեսուած չի։

նաեւ փորձեցի արդեօք կաշխատի diff֊ը։ .gitattributes֊ում այսպիսի տող փորձեցի՝

*.Mod diff eol=cr

ու չօգնեց, զի կրկին՝ cr կարգաւորումը նախատեսուած չի, handle չի լինում, ելատեքստում չկայ։

ահա այսպէս էր տարբերութիւնը ցոյց տալիս՝

ամբողջ ֆայլի պարունակութիւնը մի վարկածից ու մի տողով, ու յետոյ ամբողջ միւս ֆայլի պարունակութիւնը, մի տողով։

արդէն յուսահատուել էի։ git֊ը կարգաւորում չունի։ մտածեցի՝ կարո՞ղ ա mercurial֊ն ունենայ։

արագ գտայ, որ mercurial֊ն ունի eol extension բայց, աւաղ՝

Older versions of Mac OS used CR (\r), but Mac OS X is Unix and uses LF. This extension does not support the old CR format.

չկպաւ։ :/

մտածեցի՝ բայց հին մակօսի կոդերի հետ մի ձեւ աշխատում են չէ՞։ ու սկսեցի փնտրել։ եւ գտայ այս շղթան։

այնտեղ առաջարկւում էր ստեղծել զտիչ՝ convert-cr անունով, ու սահմանել այն։ նաեւ առանձին մեկնաբանութիւնը վերաբերում ա diff֊ի համար կարգաւորմանը։

փորձում եմ, ինչպէս խորհուրդ ա տրւում, աւելացնել .git/config նիշքում՝

[filter "convert-cr"]
clean = tr '\r' '\n'
smudge = tr '\n' '\r'

բայց ապա յետոյ git֊ը չի աշխատում, ասում ա՝ կոնֆիգում սխալ կայ։

fatal: bad config line 13 in file .git/config

մտածում եմ, ո՞նց անել։

յետոյ ջոկեցի՝ աւելացրի հրամանային տողից այսպէս՝

git config filter.convert-cr.clean "tr '\r' '\n'"
git config filter.convert-cr.smudge "tr '\n' '\r'"

իսկ այս տողը շղթայում այսպէս էլ տուեցին՝

git config diff.cr.textconv "tr '\r' '\n' <"

դրանից ջոկեցի ինչպէս անել։

ահա, փաստօրէն .git/config֊ում աւելացրել եմ՝

[diff "cr"]
textconv = tr '\\r' '\\n' <
[filter "convert-cr"]
clean = tr '\\r' '\\n'
smudge = tr '\\n' '\\r'

հետեւեալ հրամաններով՝

git config diff.cr.textconv "tr '\r' '\n' <"
git config filter.convert-cr.clean "tr '\r' '\n'"
git config filter.convert-cr.smudge "tr '\n' '\r'"

.gitattributes֊ում գրեցի՝

*.Mod   filter=convert-cr
*.Text    filter=convert-cr

փորձեցի կրկին քոմիթ անել, ու համեմատել քոմիթը՝ չկպաւ։

ապա յիշեցի, այս անգամ աւելացրի .gitattributes֊ում՝ *.Mod diff eol=cr ու այն այսպիսի տեսք ունեցաւ՝

*.Mod   filter=convert-cr
*.Text    filter=convert-cr
*.Mod diff eol=cr

ու հա՛, աշխատե՛ց։

հիմա կարող եմ օբերոն ֆայլերի հետ գործ անել։

#օբերոն #էկրանահան #գիտ #ծրագրաւորում #պատմութիւն #հետազօտութիւն #տեք #կարգաւորում #ձեռնարկ #կարգիչ

բնօրինակ ծմակուտում(եւ մեկնաբանութիւննե՞ր)

պիտակներ՝         օբերոն  էկրանահան  գիտ  ծրագրաւորում  պատմութիւն  հետազօտութիւն  տեք  կարգաւորում  ձեռնարկ  կարգիչ