COBOL: structure

สำหรับ COBOL ใน Mainframe จะต้องมีโครงสร้าง column เข้ามาร่วมด้วย ดังนี้

  1. column 1-6 เป็น sequence number
  2. column 7 ไว้ใส่ตัวอักษรที่มีความหมายพิเศษ
    • * แสดงว่าบรรทัดนั้นเป็น comment
    • - แสดงว่าบรรทัดนี้ต่อมาจากบรรทัดข้างบน
  3. column 8-11 เป็น area A ซึ่งไว้ใส่ division ในโปรแกรม
  4. column 12-72 เป็น area B ไว้ใส่ code อื่นๆ นอกจาก division
  5. column 73-80 เป็น optional ที่แสดง program identification or comments
ซึ่งโครงสร้างด้านล่าง จะละ column 1-7 ไว้ (เนื่องจากไม่ได้ใส่ comment) code จะเริ่มที่ column 8 เป็นต้นไป


IDENTIFICATION DIVISION.
PROGRAM-ID
ProgName.
[AUTHOR
Desc.]
[INSTALLATION
Desc.]
[DATE-WRITTEN
Desc.]
[DATE-COMPILED
Desc.]
[SECURITY
Desc.]

[
ENVIRONMENT DIVISION.

[INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT
FileName
[ASSIGN [TO] DISK|PRINTER.]
[ORGANIZATION IS SEQUENTIAL|LINE SEQUENTIAL|RELATIVE|INDEXED.]
[ACCESS MODE IS SEQUENTIAL|RANDOM|DYNAMIC.]]]

DATA DIVISION.
[FILE SECTION.
FD
FileName [RECORD MODE [IS] BINARY|DECIMAL LOW|HIGH|HYPER DENSITY]
LABEL RECORD|RECORDS IS|ARE STANDARD|OMITTED
[VALUE OF FILE-ID IS [
DataName |Literal ]
[BLOCK CONTAINS
Integer CHARACTERS|RECORDS]
[RECORD CONTAINS
Integer CHARACTERS]
[DATA RECORD IS|RECORDS ARE
DataName1[, DataName2, ...]]

[
LevelNo DataName |FILLER
[REDEFINES
DataName ]
[PIC|PICTURE [IS]
Pattern ]
[OCCURS [
Interger TO] Integer TIMES
[DEPEND ON
DataName1 ]
[ASCENDING|DESCENDING [KEY] [IS]
DataName2 [, DataName3, ...]]
[INDEXED [BY]
IndexName1 [, IndexName2, ...]]
[RENAMES
DataName [THRU DataName2 ]]
[VALUE [IS|ARE]
Literal1 [THRU Literal2 ] [Literal3 [THRU Literal4]] ...
[JUST|JUSTIFIED RIGHT]
[SIZE [IS]
Integer CHARACTERS|DIGITS]
[CLASS [IS] NUMERIC|ALPHABETIC|ALPHANUMERIC]
[USAGE [IS] COMP|COMPUTATIONAL 1|COMP-1|COMPUTATION-1|DISPLAY|INDEX]
[BLANK WHEN ZERO]]

WORKING-STORAGE SECTION.
[77
DataName PIC|PICTURE [IS] Pattern.]
...
[
LevelNo DataName |FILLER
[REDEFINES
DataName ]
[PIC|PICTURE [IS]
Pattern ]
[OCCURS [
Interger TO] Integer TIMES
[DEPEND ON
DataName1 ]
[ASCENDING|DESCENDING [KEY] [IS]
DataName2 [, DataName3, ...]]
[INDEXED [BY]
IndexName1 [, IndexName2, ...]]
[RENAMES
DataName [THRU DataName2 ]]
[VALUE [IS|ARE]
Literal1 [THRU Literal2 ] [Literal3 [THRU Literal4]] ...
[JUST|JUSTIFIED RIGHT]
[SIZE [IS]
Integer CHARACTERS|DIGITS]
[CLASS [IS] NUMERIC|ALPHABETIC|ALPHANUMERIC]
[USAGE [IS] COMP|COMPUTATIONAL 1|COMP-1|COMPUTATION-1|DISPLAY|INDEX]
[BLANK WHEN ZERO]]
...

[LINKAGE SECTION.
[77
DataName PIC|PICTURE [IS] Pattern.]
...
[
LevelNo DataName |FILLER
[REDEFINES
DataName ]
[PIC|PICTURE [IS]
Pattern ]
[OCCURS [
Interger TO] Integer TIMES
[DEPEND ON
DataName1 ]
[ASCENDING|DESCENDING [KEY] [IS]
DataName2 [, DataName3, ...]]
[INDEXED [BY]
IndexName1 [, IndexName2, ...]]
[RENAMES
DataName [THRU DataName2 ]]
[VALUE [IS|ARE]
Literal1 [THRU Literal2 ] [Literal3 [THRU Literal4]] ...
[JUST|JUSTIFIED RIGHT]
[SIZE [IS]
Integer CHARACTERS|DIGITS]
[CLASS [IS] NUMERIC|ALPHABETIC|ALPHANUMERIC]
[USAGE [IS] COMP|COMPUTATIONAL 1|COMP-1|COMPUTATION-1|DISPLAY|INDEX]
[BLANK WHEN ZERO]]
...]

[SCREEN SECTION.
LevelNo [ScreenName] [BLANK-SCREEN]
[LINE [NUMBER] [IS] [PLUS]
Integer]
[LINE [NUMBER] [IS] [PLUS] Integer]
[BLANK LINE]
[BELL] [HIGHLIGHT|BLINK]
[VALUE [IS] Literal | PIC|PICTURE [IS]
Pattern FROM Literal2 | Identifier1 |TO Identifier2 |USING Identifier3
[BLANK WHEN ZERO]
[JUST|JUSTIFIED RIGHT]
[AUTO]
[SECURE]]

PROCEDURE DIVISION.

ParagraphName1.
Statement.
....

JCL Overview

JCL (Job Control Language) เป็น programming language ที่ใ้ช้ในการควบคุมการทำงานบน Mainfram JCL จะถูก interpret และำ execute โดย JES (Job Entry Subsystem) ฮับ ซึ่งเป็น subsystem ของ MVS อีกที ดังนั้นก่อนจะรู้จัก JCL เรามาทำความรู้จักกับ MVS กันคร่าวๆ กันก่อน

โครงสร้าง JCL จะประกอบไปด้วย
  1. // ทุกบรรทัีดของ JCL จะเริ่มต้นด้วย // ซึ่งบรรทัดไหนที่ไม่มี // ขึ้นต้น อาจจะเป็นส่วนของ data หรือว่าคำสั่งพิเศษ ที่ใช้กับ software อื่นๆ
  2. job name เริ่มต้นที่ column 3 JCL name สามารถยาวได้ 8 ตัวอักษร และสามารถประกอบด้วยตัวอักษร และตัวเลข และอักขระพิเศษอื่นๆ เช่น @, $, # แต่ไม่สามารถใช้ - หรือขึ้นต้นด้วยตัวเลขได้
  3. JCL operator เริ่มต้นได้ตั้งแต่ column 4 ซึ่งมีด้วยกัน 3 ตัว คือ JOB, EXEC และ DD
    • JOB จะถูกใช้เป็น statement แรก ที่ใช้ระบุข้อมูลของ job นั้นๆ
    • EXEC เป็น operator ที่ใช้ใันแต่ละ step ของแต่ละ job เป็นตัวบอกว่า ในแต่ละ step จะต้อง execute อะไร
    • DD (Data Definition) เป็น operator ที่ระบุที่อยู่ของข้อมูล และลักษณะของข้อมูล ที่จะใช้ในการ process ของ step นั้นๆ
  4. JCL parameter ซึ่งแล้วแต่ JCL Operator ที่ใช้ สำหรับในกรณีที่ parameter เยอะ สามารถขึ้นบรรทัดใหม่ได้ แต่ปิดบรรทัดด้วย , และจะต้องเริ่มต้นที่ column 4-16 เท่านั้น (โดยที่ column แรกยังคงต้องเป็น //) parameter ที่ใส่ใน JCL สามารถใช้แบบตามตำแหน่ง คือจะต้องใส่ให้เีรียงกันไปตามตำแหน่งให้ถูกต้อง หรือว่าจะใส่โดยใช้ parameter name เป็นตัวบอกและใส่ = ต่อท้ายก็ได้ ซึ่งโดยปกติก็จะนิยมแบบหลังมากกว่า เพราะว่า parameter ค่อยข้างเยอะ จำได้ยากว่าจะต้องตัวไหนมาก่อนมาหลัง
  5. อาจจะปิดท้ายด้วย sequence number 8 ตัว ซึ่งอาจจะมีหรือไม่มีก็ได้ เป็น optional ดังนั้น JCL name, operator และ parameter จะอยู่ใน column 3 - 71 เท่านั้น

สำหรับคนที่ีไม่ชินกับ Mainframe อาจจะไม่เข้าใจว่า column ที่ว่าคืออะไร มันก็คือ text ตัวที่เท่าไรในบรรทัดนั้นๆ นะเอง ใน editor บางตัวเราจะเห็นได้จาก status bar ที่โชว์ว่า ณ.ขณะนี้ cursor เราอยู่ที่ บรรทัดอะไร column อะไร ซึ่ง programming language ใน Mainframe ส่วนใหญ่จะต้องอิงตาม column และจะ้ต้องใช้ให้ถูกด้วย ม่ะงั้นมันจะ compile ไม่ผ่าน

ตัวอย่าง JCL ฮับ Job นี้ชื่อว่า IS198CPY มี step เดียวชื่อ COPY01 และก็มี parameter มากมายโดยใช้คู่กับ parameter name

//IS198CPY JOB (IS198T30500),'COPY JOB',CLASS=L,MSGCLASS=X
//COPY01 EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DSN=OLDFILE,DISP=SHR
//SYSUT2 DD DSN=NEWFILE,
// DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(40,5),RLSE),
// DCB=(LRECL=115,BLKSIZE=1150)
//SYSIN DD DUMMY

Comment ใน JCL จะใช้ มี 2 แบบ
  1. all line comment จะใช้ //* ขึ้นต้น และ มันจะ ignore ข้อความหลังจากนั้นทั้งบรรทัด
  2. หรือ ถ้าเราเว้น space ด้านหลังของ parameter ก็จะถือเป็น comment เหมือนกัน ซึ่งนั้นก็หมายความว่า parameter ด้านหลังทั้งหมดจะต้องติดกัน ห้ามเว้น space เลยฮับ มิฉะนั้น parameter นั่นจะหายไปเลย... แง๊ว
แต่ถ้าเราใส่ // โดยไม่มี * จะหมายถึง หยุดการ process ทั้งหมดแค่นี้

JCL จะถูกอ่านโดย JES2 (subsystem หนึ่งของ MVS) เพื่อเช็ค syntax และเปลี่ยนให้เป็นงานที่อยู่ในคิว โดยงานแต่ละคิว จะถูกแบ่งตาม Class และ initiator จะเป็นตัวจัดการกับงานที่อยุ่ในคิวต่างๆ อีกที โดยเลือกงานตามลำดับความสำคัญ และ กำหนด I/O ตามที่งานนั้นต้องการ โดยใช้ MVS Service ช่วยอีกที

Reference:
Job Control Language - Wikipedia
JCL Study Material

Computer history ฉบับย่อ

ทุกวันนี้คนใ้ช้คอมพิวเตอร์กันเป็นเรื่องปกติ แต่จริงๆ แล้วก่อนหน้านี้คอมพิวเตอร์ไม่ได้หน้าตาแบบนี้ หุ่นเพียวบางแบบนี้ และคอมพิวเตอร์เครื่องหนาๆ เป็นตู้เสื้อผ้า ก็ยังคงมีใช้กันอยู่ในบางที่ กับบางงาน และเมื่อเราต้องเผชิญหน้ากับชื่อและคำศัพท์พวกนี้ เราก็มักจะงงว่าอะไรมันเป็นอะไรกันแน่ สรุปมาให้เห็นแบบสั้นๆ ง่ายๆ (เพราะว่า ยากๆ ก็ไม่รู้เหมือนกัน) แบบนี้



MainframeMinicomputerWorkstation (RISC)
1964-IBM System/360
1970-IBM System/370
1978-
IBM System/34
1980-
IBM System/38
1983-
IBM System/36
1986-

Sun SPARC
1988-
AS/400
late 1980s-

RISC System/6000 หรือ RS System/6000
1990-IBM System/390
mid 1990s-

DEC Alpha
2000-IBM eServer zSeriesIBM eServer iSeriesIBM eServer pSeries
2006-IBM System z (z Series)IBM System i
2008-

IBM System p

*ตัวที่ใส่ตัวหนาไว้ จะเป็นรุ่นที่ได้รับความนิยมอย่างมาก และมีการใช้กันแพร่หลาย ซึ่ง เป็นชื่อที่ให้เรียกกันมาจนถึงทุกวันนี้ อย่างเช่น AS/400 ข้อสังเกตุอีกอย่างหนึ่งก็คือ SUN ได้รับความนิยมจากเครื่อง workstation มากกว่า IBM

AS/400 มักจะมีคนสับสนกับเครื่อง mainframe แต่จริงๆ แล้วมันเป็นเครื่อง minicomputer ที่ IBM ผลิตขึ้นมา เมื่อกระแสความต้องการคอมพิวเตอร์ที่มีราคาถูกลง เครื่องเล็กลง ประสิทธิภาพอาจจะไม่เท่า Mainframe แต่ก็เพียงพอต่อความต้องการ จนกระทั่งมาถึง PC ซึ่งเป็น architecture แบบ CISC ซึ่งเกิดขึ้นมาพร้อมๆ กับ RISC บน workstation แต่ CISC สามารถผลิตได้ถูกกว่า เครื่อง CISC แรกๆ ก็คือ chip ตระกูล x86 เช่น 386, 486 เดิม ของ Intel

แม้ว่าเครื่อง mainframe และ minicomputer จะถูก IBM ครองตลาด แต่สำหรับเครื่อง workstation ซึ่งเป็น RISC กลับมีผู้ผลิตหลายรายที่ผลิตชิพของตัวเองและ design workstation ขึ้นมาขายแข่งกับ IBM ด้วย อย่างเช่น Sparc ของ Sun Microsystem ซึ่งค่อยข้างดัง และยังมี Alpha ของ DEC (Digital Equipment Corporation) ด้วย

นอกจากคำศัพท์ประเภทเครื่อง และรุ่น ของคอมพิวเตอร์แล้ว OS ก็อีกเป็นปัจจัยหลักที่มาคู่กับเครื่องคอมพิวเตอร์ ซึ่งบางครั้งเราก็จะได้ยิน คนเรียกชื่อ OS แทนชื่อเครื่อง แล้วก็ทำให้เราสับสนไปกันใหญ่ (ไม่รู้คนอื่นจะสับสนเหมือนกันหรือเปล่า) ว่ามันเป็นเครื่องรุ่นใหม่ แบบใหม่ หรืออย่างไร

MVS เกิดขึ้นไปปี 1974 ใชักับเครื่อง IBM System/370 และ System/390
OS/390 เกิดขึ้นมาปี 1995 นำมาใช้บน IBM System/390 แทน MVS
z/OS เป็นการ re-brand OS/390 เดิม ตามเครื่อง IBM System z

อย่างไรก็ตาม OS/390, z/OS หรือ OS อื่นๆ ที่ใช้กับเครื่อง mainframe ก็ยังมี core เป็น MVS จึงเป็นคำเรียกติดปากของคนทั่วไป เหมือนกับที่เราเรียก Redhat เป็น Linux

OS/400 เกิดขึ้นปี 1988 พร้อมกับ AS/400 ที่ใช้ร่วมกัน ซึ่งภายหลังได้ rename เป็น i5/OS และ IBM i ตาม IBM System i

AIX เป็น OS ที่ใช้บน IBM Workstation หรือเริ่มต้นใช้กับ System/6000 ซึ่งพัฒนามาจาก UNIX System V และ 4.3 BSD-compatible
OpenVMS เป็น OS สำหรับเครื่อง Alpha

นอกจากชื่อ computer ประเภทและรุ่นต่างๆ แล้ว ยังมีระบบคอมพิวเตอร์ที่เคยโด่งดังในสมัยหนึ่ง ของบริษัท Tandem Computers, Inc. ซึ่งใช้ชื่อบริษัทเป็นชื่อของระบบคอมพิวเตอร์ที่ออกแบบขึ้นโดยใช้แนวคิดแบบ fault-tolerant ซึ่งเป็นระบบที่สามารถรองรับงานได้ 24 ชม. ตลอดทั้งปี โดยออกแบบมาให้มีการรองรับ failure ที่จะเกิดขึ้นทั้งใน software และ hardward (ในขณะที่ mainframe จำเป็นจะต้องมีความเวลาในการ maintenence ซึ่งจะต้องหยุดระบบงานที่มีอยู่ทั้งหมด อย่างน้อย 1 ครั้งต่อปี และเป็นที่มาของวันหยุดธนาคารกลางปีนะเอง) ระบบของ Tandem ที่ออกมาตัวแรก ในปี 1975 ชื่อ Tandem-16 หรือ T/16 (ต่อมาเปลี่ยนชื่อเป็น NonStop I) ซึ่งออกเพื่อรองรับการทำงาน OLTP (On-Line Transaction Processing) ของธนาคาร ระบบ Tandem จะใช้ custom OS (เนื่องจากต้องมีการจัดการเรื่อง failure) โดย OS ตัวแรกชื่อ T/TOS และหลังจากนั้นระบบของ Tandem ก็แพร่หลายออกไป จนในปี 1997 บริษัท Compaq ก็ได้มาซื้อบริษัท Tamdem ไป

Reference:
Wikipedia
Tamdem - Wikipedia
Computer History Museum


TCP: default port

port number ก็คือเลข 16-bit (0 - 65535) ที่ใช้บอก application ที่จะใช้

เนื่องจากในการส่งข้อมูลภายใน internet (หรือเครือข่ายที่ใช้ TCP protocol) นั้นสามารถนำไปใช้กับ application ได้หลากหลาย ซึ่งแต่ละ application ก็สามารถใช้ protocol ที่แตกต่างกันออกไปในการตีความข้อมูลที่ส่งไป-มาใน network เช่น เราส่ง HTML โดยใช้ protocol HTTP หรือการส่งไฟล์โดยใช้ protocol FTP เป็นต้น ดังนั้นเพื่อจะบอก server ได้ว่าข้อมูลที่ส่งมานั้นเป็น application อะไร จะต้องใช้ protocol ตัวไหน จึงต้องมีการกำหนดหมายเลข port ขึ้นมา

ทั้งนี้ทั้งนั้น ตอนที่เรา config application เราสามารถกำหนดได้เองว่า จะใช้ application นั้นๆ ใช้ port หมายเลขอะไร แต่โดยทั่วไปแล้ว application ซึ่งเป็นที่รู้จักกันโดยทั่วไปจะมี ค่า default ของ application นั้นๆ อยู่ เช่น

port 21 เป็น FTP
port 22 เป็น SSH
port 23 เป็น Telnet
port 25 เป็น SMTP
port 80 เป็น HTTP
port 110 เป็น POP3
port 443 เป็น HTTPS

นอกจากนี้ยังมี applicatoin อื่นๆ อีก ซึ่ง port 0 - 1023 จะถูกสำรองไว้สำหรับ application ที่เป็นที่รู้จักเหล่านี้ ดังนั้นถ้าเรามีการสร้าง application ของเราเองที่ใช้อยู่บน TCP ก็ควรจะหลีกเลี่ยงการใช้ port เหล่านี้

HTTP and HTML introduction and architecture

อย่างที่เรารู้กันว่า เราส่ง HTML ไปด้วย protocol HTTP โดย HTML นั้นจะถูกหุ้มด้วย HTTP header อีกทีหนึ่ง ซึ่งตัว header ที่ว่านี้ก็อาจจะแตกต่างกันไปเล็กน้อยแล้วแต่ HTTP method

เช่น Get request method


GET /select/selectBeerTaste.jsp?color=dark&taste=malty
HTTP/1.1 Host: www.wickedlysmart.com
User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.4) Gecko/ 20030624 Netscape/7.1
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/ plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-aliv
e



หรือ Post request method

POST /advisor/selectBeerTaste.do HTTP/1.1
Host: www.wickedlysmart.com
User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.4) Gecko/ 20030624 Netscape/7.1
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/ plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive


color=dark&taste=malty

ข้อแตกต่างของ get กับ post ที่เห็นได้ชัดๆ ก็คือ post จะสามารถมี body ได้ (บรรทัดสุดท้าย color=dark... คือส่วนของ body) โดย get method จะส่ง parameter ตามหลัง URL เลยทำให้ไม่สามารถส่งค่าที่มีความยาวมากๆ ได้ แต่ว่า post จะส่งโดยผ่าน body ทำให้มีความยาวได้ไม่จำกัด

นอกจาก post และ get แล้ว ยังมี HTTP method อื่นๆ อีก ดังนี้ HEAD, TRACE, OPTIONS, PUT,
DELETE และ CONNECT

ดูในส่วนของ request ไปแล้ว ทีนี้มาดูตัวอย่างของ response ที่ server ตอบกลับไปที่ client กันบ้าง


HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=0AAB6C8DE415E2E5F307CF334BFCA0C1; Path=/testEL
Content-Type: text/html
Content-Length: 397 Date: Wed, 19 Nov 2003 03:25:40 GMT Server: Apache-Coyote/1.1 Connection: close
<html>
...
</html>



ด้านล่างก็เป็นส่วน body ของ respond ซึ่งโดยส่วนใหญ่ก็จะเป็น HTML ที่นำมาแสดงในหน้า browser กันนะเอง โดย browser จะอ่าน message ในส่วนของ body และตีความและแสดงให้เราเห็น ดังนั้นเราจึงมี HTML standard ที่กำหนดว่า tag อะไรจะต้องแสดงผลแบบไหน ซึ่ง browser แต่ละ version ก็จะมีการบอกไว้ว่าตัวนี้ comply กับ HTML version อะไร ก็คือเป็น standard version นะเอง

Mainframe: TSO and ISPF

ทั้ง TSO และ ISPF เป็น application software เหมือนกับ software ทั่วๆ ไปบน windows แต่สองตัวนี้จะใช้เป็น software หลักๆ บน Mainframe

TSO (Time Sharing Option)
TSO เป็น software ที่เทียบได้กับ command.exe บน windows ที่คอยรับคำสั่งจาก user ไปทำงาน โดยใช้หลักการ time sharing คือ คอมพิวเตอร์ที่ต่อกับ terminal หลายตัว จะแบ่งทำงานตามคำสั่งที่ได้รับ โดย ณ.เวลาหนึ่งจะทำงานแค่คำสั่งเดียวเท่านั้น แต่การทำงานจะเป็นไปอย่างรวดเร็ว ทำให้ดูเสมือนว่าทำงานสนับสนุน terminal หลายตัวไปพร้อมกัน

เนื่องจาก Mainframe แต่ละเครื่องจะมีการ config การเข้าใช้งานที่แตกต่างกัน ตัวอย่างการใช้งาน เช่น เปิดให้เลือกเครื่องก่อน



หลังจากนั้นก็ log in โดยใส่ user id



จากหน้าจอ log in เมื่อจะเข้าใช้ TSO (Time Sharing Option) จะเห็นหน้าจอ Log On Parameter คล้ายๆ กันดังนี้



เมื่อเข้ามาแล้ว ก็เป็นอันเสร็จ เราสามารถ run command ต่างๆ ต่อไป หรือถ้าต้องการดู help ให้พิมพ์ help ก็จะได้หน้าจอประมาณนี้ (ทั้งนี้แตกต่างกันไปแล้วแต่ config ของเครื่องนั้นๆ )




ISPF (Interactive System Productivity Facility)
เนื่องจากความยากในการใช้งานของ TSO ซึ่งจะต้องจำ coommand และลำดับของ parameter ต่างๆ ISPF จึงเกิดขึ้นเพื่อช่วยให้สามารถใช้คำสั่งต่างๆ ได้อย่างสะดวกขึ้น

สำหรับ ISPF ซึ่งจะต้องเรียกผ่าน TSO อีกที โดยพิมพ์ command ISPF ที่หน้าจอ TSO หลังจากที่ มันแสดง TSO ready prompt



เมื่อเข้าหน้าจอ ISPF แล้ว จะแสดงหน้าจอประมาณนี้



ซึ่งเมนูมีอะไรบ้างนั้น ก็จะขึ้นอยู่กับแต่ละเครื่องจะ config อีกเ่ช่นเดียวกัน ISPF จะเปรียบเหมือนหน้า desktop บน windows แต่ละเมนู คือ application ซึ่งแต่ละเครื่องก็จะมี application ให้ใช้แตกต่างกันไป

การจะใช้ ISPF จะใช้ร่วมกับ program function keys (PF keys) หรือ ไอ้ปุ่ม F1 - F12 บนแป้น keyboard เรานั่นแหละ ซึ่ง user แต่ละคนสามารถกำหนดหน้าที่ของแต่ละ function key ได้เอง แต่โดยมาตรฐานแล้วจะกำหนดไว้คล้ายๆ กัน ดังนี้
  • PF1 = Help
  • PF2 = Split: Split the session (lets you use two functions of TSO at the same time.)
  • PF3 = End
  • PF4 = Return
  • PF5 = Rfind (repeat last find)
  • PF6 = Rchange (repeat last change)
  • PF7 = Move Backward
  • PF8 = Move forweard
  • PF9 = Switch between screeens during a split session; goes with PF 2
  • PF10 = Move left
  • PF11 = Move right
  • PF12 = Retrieve last command
นอกจาก PF1 - 12 แล้วใน ISPF และอีกหลายๆ โปรแกรมบน Mainframe ยังมีการใช้ Program Function Key ถึง 24 keys ซึ่ง PF13 - 24 ก็จะใช้ Shift + Function key เช่น
PF13 <-- Shift + PF1 PF14 <-- Shift + PF2 ... เราสามารถให้มันแสดง function key ไว้ข้างใต้หน้าจอ โดยพิมพ์ PFSHOW ON หรือถ้าจะไม่ให้แสดงก็พิมพ์ PFSHOW OFF ได้เช่นกัน


Reference:
Using TSO and ISPF