9

Fortran 95/2003 for Scientists and Engineers पुस्तक में, यह पहचानने के महत्व को बहुत अधिक बात दी गई है कि प्रारूप विवरण में पहला कॉलम नियंत्रण वर्णों के लिए आरक्षित है। मैंने इंटरनेट पर कैरिज नियंत्रण के रूप में संदर्भित नियंत्रण वर्ण भी देखे हैं।क्या फ़ोरट्रान नियंत्रण वर्ण (कैरिज नियंत्रण) अभी भी कंपाइलरों में लागू किए गए हैं?

नियंत्रण वर्णों से भ्रम से बचने के लिए, मैं पहले में रखे गए आउटपुट के ऊर्ध्वाधर अंतर पर प्रभाव होने के रूप में वर्णों को "1, एक खाली (यानी \ s), 0, और +" का संदर्भ देता हूं। फॉर्मेट स्टेटमेंट का कॉलम (कैरेक्टर)।

इसके अलावा, यह टेक्स्ट-केवल वेब पेज पूरी तरह से निश्चित-चौड़ाई टाइपफ़ेस में लिखा गया है: Fortran carriage-control (क्योंकि कुछ भी मोनोस्पेस्ड फ़ॉन्ट में गद्य से सटीकता और पुरातनता को बेहतर नहीं करता है)। मुझे यह पृष्ठ मिला और दूसरों को यह स्पष्ट नहीं होना चाहिए।

Fortran 95/2003 for Scientists and Engineers के अनुसार, विफलता याद करने के लिए कि पहले कॉलम गाड़ी नियंत्रण भयानक अनायास ही उत्पादन के लिए नेतृत्व कर सकते हैं के लिए आरक्षित है। पैराफ्रिसिंग Dave Barry, गलत चरित्र टाइप करें, और परमाणु मिसाइलों को नॉर्वे में निकाल दिया जाएगा।

हालांकि, जब मैं इस कठोर चेतावनी का पालन करने का प्रयास करता हूं, तो मुझे लगता है कि gfortran को पता नहीं है कि मैं किस बारे में बात कर रहा हूं।

मुझे कुछ उदाहरण कोड के साथ अपने बिंदु को चित्रित करने की अनुमति दें। मैं बाहर संख्या पाई मुद्रित करने के लिए कोशिश कर रहा हूँ:

1New page: 3.141592741 
Single Space: 3.141592741 
0Double Space: 3.141592741 

"1" और लिखने की त्रुटियों "0" नहीं हैं:

PROGRAM test_format 
IMPLICIT NONE 

REAL :: PI = 2 * ACOS(0.0) 

WRITE (*, 100) PI 
WRITE (*, 200) PI 
WRITE (*, 300) PI 
100 FORMAT ('1', "New page: ", F11.9) 
200 FORMAT (' ', "Single Space: ", F11.9) 
300 FORMAT ('0', "Double Space: ", F11.9) 
END PROGRAM test_format 

यह उत्पादन होता है। ऐसा लगता है कि gfortran नियंत्रण चरित्र कॉलम पूरी तरह से अनदेखा कर रहा है।

मेरा प्रश्न है, तो, यह है:

नियंत्रण वर्ण अभी भी मानकों के अनुरूप compilers में लागू किए गए हैं या gfortran बस नहीं मानकों के अनुरूप है?

स्पष्टता के लिए, यहाँ की मेरी gfortran -v

Using built-in specs. Target: powerpc-apple-darwin9 Configured with: ../gcc-4.4.0/configure --prefix=/sw --prefix=/sw/lib/gcc4.4 --mandir=/sw/share/man --infodir=/sw/share/info --enable-languages=c,c++,fortran,objc,java --with-gmp=/sw --with-libiconv-prefix=/sw --with-ppl=/sw --with-cloog=/sw --with-system-zlib --x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib --disable-libjava-multilib --build=powerpc-apple-darwin9 --host=powerpc-apple-darwin9 --target=powerpc-apple-darwin9 Thread model: posix gcc version 4.4.0 (GCC)

+0

आपके इबिलियो लेखकों को कुछ क्रेडिट। उनके दस्तावेज़ में सादा पाठ में स्वरूपित तालिकाओं की पर्याप्त मात्रा शामिल है। एक आनुपातिक टाइपफेस का चयन करना एक बहुत ही बदतर विकल्प होगा। सभी को एक चिह्नित स्रोत दस्तावेज़ नहीं मिला है! – Pekka

उत्तर

10

पिछले कुछ वर्षों में, पहले कॉलम के इस उपयोग को अनदेखा करने से लाइन प्रिंटर पर खराब चीजें हो सकती हैं, जैसे पेज निकास - लेकिन आखिरी बार जब आपने लाइन प्रिंटर देखा था? अन्यथा यह आउटपुट डिवाइस, कंपाइलर और ओएस निर्भर था। वैज्ञानिकों और इंजीनियरों के लिए "फोरट्रान 95/2003" की सलाह लगभग 15 या 20 साल पहले उत्कृष्ट थी।टर्मिनलों, पोस्टस्क्रिप्ट और अन्य आधुनिक प्रिंटर के साथ, स्तंभ एक अब विशेष नहीं है। मैं अब कॉलम पर विशेष ध्यान नहीं देता हूं और मुझे परेशानी नहीं मिली है।

फोरट्रान 2003 मानक कैरिज नियंत्रण हटा दिया गया है, जो कुछ ऐसा है जो फोरट्रान भाषा मानकों को शायद ही कभी करता है। "फोर्ट्रान 95/2003 समझाया गया" पृष्ठ का पृष्ठ 35 9 या "द फोरट्रान 2003 हैंडबुक" पृष्ठ 326 देखें। शायद gfortran के साथ -std = f2003 या -std = f2008 का चयन करने की गारंटी होगी कि कॉलम 1 को कैरिज नियंत्रण का उपयोग नहीं किया जाएगा ताकि "बुरी चीजें" पूरी तरह असंभव हो।

+2

+1: मुझे चैपलैन की पुस्तक के रास्ते को वापस पसंद नहीं आया, और यहां एक कारण है जो मैं अभी भी नहीं करता हूं। –

+0

+1, लेकिन मैं अभी भी चैपलैन की पुस्तक को सहन करता हूं – steabert

1

मेरा मानना ​​है कि फोरट्रान 95 मुद्रित आउटपुट के स्तंभ 1 में पात्रों के लिए विशेष अर्थ निर्दिष्ट करने के लिए अंतिम संस्करण था उत्पादन होता है।

+0

किस मामले में, '-std = g95' एक संभावना हो सकती है ... – paxdiablo

+0

मेरे gfortran मैन पेजों में, वाक्यविन्यास -std = f95 है, लेकिन मैं आपके सुझाव के लिए धन्यवाद देना चाहता हूं। हालांकि, इस कोशिश की वजह से परिणाम नहीं बदला। – EMiller

+0

@ जेरी_Cऑफिन, मैंने यह भी देखा था, कि नियंत्रण वर्ण फोरट्रान 95 के बाद चले गए हैं। लेकिन मैंने पीछे की संगतता के लिए सोचा था, पहले चरित्र का शाब्दिक रूप से मुद्रित होने के बजाय उत्पादन पर कोई प्रभाव नहीं पड़ेगा। – EMiller

1

कैरिज नियंत्रण वर्णों को आउटपुट के लिए प्रिंटर के लिए परिभाषित किया गया था। अन्य प्रकार के उपकरणों के लिए आउटपुट (उदाहरण के लिए पेंच किए गए कार्ड, पेपर टेप, या उन नए गुंबददार चुंबकीय घूर्णन वाली चीजें) उनमें नहीं था। यदि आपका आउटपुट डिस्क फ़ाइल पर जाता है तो gfortran सही काम कर रहा है।

संपादित करें: gfortran वास्तव में सही काम कर रहा है। यदि आप सचमुच प्रिंट करने के बजाय फोरट्रान कैरिज नियंत्रण वर्णों की व्याख्या करने के लिए प्रिंटर ड्राइवर को आदेश देना चाहते हैं, तो f फ़िल्टर विकल्प का उपयोग करके lpr कमांड में ऐसा कहें। उदाहरण के लिए देखें http://www.computerhope.com/unix/ulpr.htm

2

सामान्य प्रिंटर हार्डवेयर कॉलम 1 की सामग्री के आधार पर विशेष चीजें करेगा। ध्यान दें कि लाइन प्रिंटर के पास एक प्रिंट हेड नहीं था जो पीछे और पीछे चले गए - उनके पास चेन या ड्रम और 132 हथौड़ा थे एक बफर में एक बाइट से जुड़ा हुआ है। जब हथौड़ा के सामने वाला चरित्र बफर में से मेल खाता है, तो हथौड़ा सक्रिय हो जाएगा और बफर के बाइट को खाली कर दिया जाएगा। जब पूरा बफर खाली था, तो प्रिंटर अगली पंक्ति लोड करेगा।

प्रिंटर में कैरिज-रिटर्न, लाइन-फीड, या फॉर्म-फीड कंट्रोल कैरेक्टर की कोई अवधारणा नहीं थी। इसके बजाए, उन्होंने बफर के पहले चरित्र का उपयोग यह इंगित करने के लिए किया कि क्या प्रत्येक पंक्ति को मुद्रित करने से पहले कागज को कुछ भी करना चाहिए। कुछ कोड पेपर को निश्चित मात्रा में अग्रिम करेंगे; अन्य कोड पेपर टेप रीडर पर आठ कॉलम (आईआईआरसी) का चयन करेंगे, और उचित कॉलम पर एक छेद देखा जाने तक प्रिंटिंग पेपर और पेपर टेप को एक साथ आगे बढ़ाएंगे। परंपरागत रूप से, पेपर टेप एक लूप एक मुद्रित पृष्ठ के समान लंबाई होगा, और कॉलम 1 में एक छेद होगा; पेपर को रेखांकित किया जाएगा ताकि कॉलम -1 होल्ड हो, जहां प्रत्येक पृष्ठ पर प्रिंटिंग शुरू होनी चाहिए। मैंने एक दुकान की पढ़ाई की है जो डबल-लम्बाई प्रकार का उपयोग करती है, और कॉलम 7 और 8 लाइनों को अंदरूनी- और फैनफोल्ड पेपर के बाहर की तरफ छिद्रण के साथ लाइन किया गया था। अच्छी चाल - मुझे आश्चर्य है कि यह कितना आम था।

किसी भी मामले में, कैरिज-नियंत्रण वर्ण भाषा के साथ दृढ़ता से जुड़े एक सम्मेलन हो सकते हैं, लेकिन वे एक भाषा की बजाय हार्डवेयर सुविधा हैं। दरअसल, कोई विशेष गारंटी नहीं है कि "1" पृष्ठ के शीर्ष पर जायेगा, इस तथ्य से परे कि अधिकतर यदि सभी दुकानों ने अपने कैरिज-नियंत्रण टेप को इस तरह स्थापित नहीं किया है।

1

हां, फोरट्रान कंपाइलर अभी भी फोरट्रान कैरिज नियंत्रण का समर्थन करते हैं, हालांकि अक्सर इसे डिफ़ॉल्ट रूप से अक्षम किया जाता है। इंटेल फोरट्रान में, उदाहरण के लिए, किसी को गैर-मानक (लेकिन व्यापक रूप से कार्यान्वित) CARRIAGECONTROL = 'FORTRAN' विकल्प के साथ फ़ाइल खोलने की आवश्यकता है। यह देखने के लिए देखें कि क्या गोरफ्रान में कुछ समान है।

उसने कहा, मैं इस सम्मेलन का उपयोग करके नए अनुप्रयोगों को कोडिंग करने की अनुशंसा नहीं करता, क्योंकि यह सभी आउटपुट उपकरणों पर जिस तरह से आप चाहते हैं, काम नहीं कर सकता है।

संबंधित मुद्दे

 संबंधित मुद्दे