18.08.2013 Views

(SYSLIB) Programming Reference Manual - Public Support Login ...

(SYSLIB) Programming Reference Manual - Public Support Login ...

(SYSLIB) Programming Reference Manual - Public Support Login ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

OS 2200<br />

System Service Routines Library<br />

(<strong>SYSLIB</strong>)<br />

<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong><br />

û 2001 Unisys Corporation.<br />

All rights reserved.<br />

ClearPath OS 2200 Release 7.0<br />

Printed in USA<br />

November 2001 7833 1733–004<br />

UNISYS


NO WARRANTIES OF ANY NATURE ARE EXTENDED BY THIS DOCUMENT. Any product or related information<br />

described herein is only furnished pursuant and subject to the terms and conditions of a duly executed agreement to<br />

purchase or lease equipment or to license software. The only warranties made by Unisys, if any, with respect to the<br />

products described in this document are set forth in such agreement. Unisys cannot accept any financial or other<br />

responsibility that may be the result of your use of the information in this document or software material, including<br />

direct, special, or consequential damages.<br />

You should be very careful to ensure that the use of this information and/or software material complies with the laws,<br />

rules, and regulations of the jurisdictions with respect to which it is used.<br />

The information contained herein is subject to change without notice. Revisions may be issued to advise of such<br />

changes and/or additions.<br />

Notice to Government End Users: The software and accompanying documentation are delivered and licensed as<br />

“commercial computer software” and “commercial computer software documentation” as those terms are used in 48<br />

C.F.R. § 12.212 and 48 C.F.R. § 227.7202-1 through 227.7202-4, as applicable. The Government shall receive only those<br />

rights provided in the standard commercial software license, or where applicable, the restricted and limited rights<br />

provisions of the contract FAR or DFARS (or equivalent agency) clause.<br />

Correspondence regarding this publication can be e-mailed to doc@unisys.com.<br />

Unisys and ClearPath are registered trademarks of Unisys Corporation.<br />

All other marks are acknowledged to be the trademarks or registered trademarks of their respective owners. Unisys<br />

Corporation cannot attest to the accuracy of this information.


OS 2200<br />

System Service Routines<br />

Library (<strong>SYSLIB</strong>)<br />

<strong>Programming</strong> <strong>Reference</strong><br />

<strong>Manual</strong><br />

ClearPath OS 2200<br />

Release 7.0<br />

OS 2200<br />

System Service<br />

Routines Library<br />

(<strong>SYSLIB</strong>)<br />

<strong>Programming</strong><br />

<strong>Reference</strong><br />

<strong>Manual</strong><br />

ClearPath OS 2200<br />

Release 7.0<br />

7833 1733–004 7833 1733–004<br />

Bend here, peel upwards and apply to spine.


Contents<br />

Section 1. Introduction.......................................................................1–1<br />

1.1. About This <strong>Manual</strong> ................................................................... 1–1<br />

1.2. Notation Conventions............................................................... 1–2<br />

1.3. About <strong>SYSLIB</strong>........................................................................... 1–4<br />

Section 2. System Standard Procedures and Definitions ...................2–1<br />

2.1. Common Bank Entry Points ..................................................... 2–1<br />

2.2. MAXR$–Register and Partial-Word Definitions........................ 2–2<br />

2.3. PROC$–System Procedures .................................................... 2–4<br />

2.4. SSTYP$–Element Subtypes ..................................................... 2–4<br />

2.5. ASUBTYP$–Executable Element Subtypes and Subsubtypes...............................................................................<br />

2–7<br />

2.6. SYS$DEF–System Definitions.................................................. 2–8<br />

2.7. <strong>SYSLIB</strong>$ID–<strong>SYSLIB</strong> Identification ............................................ 2–9<br />

Section 3. <strong>SYSLIB</strong> Access Methods ....................................................3–1<br />

3.1. Relocatable Collection Method ................................................ 3–2<br />

3.2. Common Bank Call Using I$BJ ................................................ 3–3<br />

3.3. Common Bank Call Using Auto Switch Method ...................... 3–5<br />

Section 4. AEDIT$–ASCII Image Composition Editing Package..........4–1<br />

4.1. Packet....................................................................................... 4–2<br />

4.1.1. Packet Format.................................................................. 4–3<br />

4.1.2. Packet Generation PROC ................................................ 4–4<br />

4.1.3. Examples ......................................................................... 4–5<br />

4.2. Calling Sequence...................................................................... 4–6<br />

4.2.1. General-Purpose Editing Routines................................... 4–7<br />

4.2.2. Floating-Point Editing Routines...................................... 4–14<br />

4.2.2.1. Calling Procedures for the Floating-Point<br />

Editing Routines ............................................... 4–16<br />

4.2.2.2. Example ................................................................ 4–17<br />

4.2.3. Time and Date Editing Routines .................................... 4–18<br />

4.2.4. Standard Format Date and Time Editing Routines ........ 4–19<br />

4.2.4.1. Recommended Date and Time Formats............... 4–21<br />

4.2.4.2. Calling Procedure for Date and Time Editing........ 4–21<br />

4.2.4.3. Example ................................................................ 4–23<br />

7833 1733–004 iii


Contents<br />

4.2.5. Error Status Codes ........................................................ 4–24<br />

4.2.6. Examples....................................................................... 4–25<br />

Section 5. BSP$–Program File Basic Service Package ....................... 5–1<br />

5.1. BSP$ Functions........................................................................ 5–3<br />

5.1.1. Read FTI .......................................................................... 5–3<br />

5.1.2. Read Program File Table ................................................. 5–9<br />

5.1.3. Search Table for Requested Item ................................. 5–11<br />

5.1.4. Delete Item from Requested Table............................... 5–14<br />

5.1.5. Entry Look-Up by Number............................................. 5–18<br />

5.1.6. Change Item in Requested Table.................................. 5–21<br />

5.1.7. Add Item to Requested Table ....................................... 5–23<br />

5.1.8. Write Last Item <strong>Reference</strong>d.......................................... 5–29<br />

5.1.9. Mark Item as Updated................................................... 5–30<br />

5.1.10. Write Requested Table Back to Mass Storage ............. 5–32<br />

5.1.11. Write FTI........................................................................ 5–33<br />

5.2. Example of Using BSP$ ......................................................... 5–34<br />

5.3. LEPF Considerations.............................................................. 5–35<br />

Section 6. CABSAD$, CRELAD$–Addressing Routines ...................... 6–1<br />

6.1. Absolute Addressing Routines................................................. 6–1<br />

6.1.1. CABSAD$–Compute Absolute Address.......................... 6–2<br />

6.1.2. CAINIT$–Initialize CABSAD$........................................... 6–4<br />

6.1.3. CBX$–Compute Bank Descriptor Index .......................... 6–5<br />

6.1.4. CSX$–Compute Segment Index ..................................... 6–6<br />

6.1.5. CSYMVL$–Compute Symbol Value ................................ 6–7<br />

6.2. Relocatable Addressing Routines ............................................ 6–8<br />

6.2.1. CRELAD$–Compute Relative Address............................ 6–9<br />

6.2.2. CRINIT$–Initialize CRELAD$ ......................................... 6–12<br />

6.2.3. CBN$–Convert BDI to Symbolic Bank Name................ 6–13<br />

6.2.4. CSN$–Convert Segment Index to Segment<br />

Name......................................................................... 6–14<br />

Section 7. CONWRD$–Condition Word Routine ................................. 7–1<br />

7.1. MASM Interface ...................................................................... 7–1<br />

7.2. PLUS Interface......................................................................... 7–3<br />

Section 8. EDIT$–Fieldata Image Composition Editing Package........ 8–1<br />

8.1. EDIT$–Packet Format .............................................................. 8–2<br />

8.2. EDIT$–General-Purpose Editing Routines ............................... 8–5<br />

8.3. EDIT$T–Time and Date Editing Routines................................. 8–8<br />

8.4. EDIT$F–Floating-Point Editing Routines .................................. 8–9<br />

iv 7833 1733–004


Contents<br />

Section 9. FDASC$–Fieldata/ASCII Data Conversion ..........................9–1<br />

9.1. MASM Interface....................................................................... 9–1<br />

9.1.1. Fieldata to ASCII Conversion........................................... 9–1<br />

9.1.2. ASCII to Fieldata Conversion........................................... 9–3<br />

9.2. TABLE$–Fieldata/ASCII Conversion Table ............................... 9–3<br />

Section 10. GETPSF$–Get a Scratch File Routine ...............................10–1<br />

10.1. File Assignment...................................................................... 10–1<br />

10.2. MASM Interface..................................................................... 10–2<br />

10.2.1. Packet............................................................................ 10–2<br />

10.2.2. Calling Sequence ........................................................... 10–2<br />

Section 11. ID$–Identification Line Routine .......................................11–1<br />

11.1. MASM Interface..................................................................... 11–2<br />

11.1.1. Packet............................................................................ 11–2<br />

11.1.2. Calling Sequence ........................................................... 11–5<br />

11.1.3. Examples ....................................................................... 11–7<br />

11.2. PLUS Interface ....................................................................... 11–8<br />

11.2.1. Packet............................................................................ 11–8<br />

11.2.2. Calling Sequence ........................................................... 11–8<br />

11.2.3. Example ....................................................................... 11–11<br />

11.3. Packet Format ...................................................................... 11–12<br />

Section 12. INFOR$–Internal Format Table Interface Routines ...........12–1<br />

12.1. Format of the Internal Format Table ...................................... 12–2<br />

12.2. General Considerations for Using the INFOR Routines ......... 12–2<br />

12.3. INFOR$–Routines................................................................... 12–3<br />

12.3.1. RINF$–Read INFOR Table ............................................. 12–4<br />

12.3.2. SINF$–Search INFOR Table........................................... 12–6<br />

12.3.3. SELT$–Transfer to ELT$ Table from INFOR Table........ 12–8<br />

12.3.4. DUSE$–Assign a USE Name to the File in ELT$......... 12–11<br />

Section 13. MFDSP$–Master File Directory Service Package .............13–1<br />

13.1. Packet..................................................................................... 13–1<br />

13.2. Calling Sequence.................................................................... 13–2<br />

13.3. Error Conditions...................................................................... 13–5<br />

13.4. Examples................................................................................ 13–9<br />

Section 14. PREPRM, PREPRO, PREPF$, and POSTPR$......................14–1<br />

14.1. PREPRO, PREPRM–Preprocessor Routines.......................... 14–1<br />

14.1.1. PREPRO–Preprocessor Routine .................................... 14–2<br />

14.1.2. PREPRM–Preprocessor Routine ................................... 14–3<br />

14.1.3. PARTBL Description ...................................................... 14–5<br />

7833 1733–004 v


Contents<br />

14.1.4. Reusable Processor Construction ................................. 14–7<br />

14.1.4.1. REPRO$–Reusable Processor Preprocessor<br />

Routine ............................................................. 14–8<br />

14.1.4.2. REPRM$–Reusable Processor<br />

Preprocessor Routine....................................... 14–9<br />

14.1.5. FLDGET–Processor Field Retrieval ............................. 14–10<br />

14.2. PREPF$–Preprocessor Routine............................................ 14–12<br />

14.3. POSTPR$–Postprocessor Routine....................................... 14–14<br />

14.4. FLDREL$–Field Release....................................................... 14–14<br />

Section 15. ROR, ROR$–Relocatable Output Routine......................... 15–1<br />

15.1. SROR$, SROR$EB–Start Relocatable Output<br />

Routine .............................................................................. 15–1<br />

15.2. ROR$, ROR$EB–Generation of Relocatable<br />

Output................................................................................ 15–2<br />

15.3. EROR$, EROR$EB–End Relocatable Output<br />

Routine .............................................................................. 15–6<br />

15.4. TBLWR$, TBLWR$EB–Write Table to File ............................ 15–6<br />

15.5. Optimization Information ....................................................... 15–7<br />

Section 16. SAR$–Symbolic Access Routines.................................... 16–1<br />

16.1. File Information Packet .......................................................... 16–2<br />

16.1.1. PLUS Interface .............................................................. 16–2<br />

16.1.1.1. FIP Field Descriptions........................................... 16–2<br />

16.1.1.2. READ and WRITE Field Requirements................. 16–6<br />

16.1.2. MASM Interface............................................................ 16–7<br />

16.1.2.1. FIP Field Descriptions........................................... 16–7<br />

16.1.2.2. READ and WRITE Field Requirements............... 16–11<br />

16.2. SAR$ Internal Format........................................................... 16–12<br />

Section 17. SAR$ READ..................................................................... 17–1<br />

17.1. READ Function/PLUS Interface ............................................. 17–1<br />

17.1.1. READ Packet Data Structure Description ..................... 17–1<br />

17.1.1.1. Required Information for READ Procedures ........ 17–2<br />

17.1.1.2. Optional Information for READ Procedures ......... 17–3<br />

17.1.1.3. Information Returned by READ Procedures......... 17–6<br />

17.1.2. Buffers and Tables for PLUS READ Procedures......... 17–10<br />

17.1.3. READ Procedures Called from PLUS .......................... 17–12<br />

17.1.3.1. SAR_OPEN_INPUT Procedure Call .................... 17–13<br />

17.1.3.2. SAR_READ Procedure Call ................................. 17–14<br />

17.1.3.3. SAR_CLOSE_INPUT Procedure Call................... 17–15<br />

17.1.3.4. Example .............................................................. 17–16<br />

17.1.4. Status Lists for PLUS READ Procedures .................... 17–17<br />

17.2. READ Function/MASM Interface......................................... 17–20<br />

17.2.1. READ Packet and Data Area Description .................... 17–20<br />

17.2.1.1. Required Information for READ Procedures ...... 17–20<br />

17.2.1.2. Optional Information for READ Procedures ....... 17–21<br />

vi 7833 1733–004


Contents<br />

17.2.1.3. Information Returned by READ Procedures....... 17–23<br />

17.2.1.4. READ Packet Definition PROC ........................... 17–26<br />

17.2.2. Buffers and Tables for MASM READ Procedures....... 17–27<br />

17.2.3. READ Procedures Called from MASM........................ 17–27<br />

17.2.3.1. Open-Input Procedure Call (S$AROPENI)........... 17–28<br />

17.2.3.2. Read Procedure Call (S$ARREAD)...................... 17–29<br />

17.2.3.3. Close-Input Procedure Call (S$ARCLOSI)........... 17–30<br />

17.2.4. Status Lists for MASM READ Procedures .................. 17–30<br />

17.3. <strong>Support</strong>ed Character Set Types for the READ Function ...... 17–33<br />

17.3.1. Fieldata ........................................................................ 17–33<br />

17.3.2. ASCII/ISO and ASCII-like ............................................. 17–33<br />

17.3.3. ASCII/ISO with Embedded Shift-Coded Kanji.............. 17–34<br />

17.3.4. Attributed Character Data............................................ 17–34<br />

Section 18. SAR$ WRITE.....................................................................18–1<br />

18.1. WRITE Function/PLUS Interface ............................................ 18–1<br />

18.1.1. WRITE Packet Data Structure Description .................... 18–1<br />

18.1.1.1. Required Information for WRITE<br />

Procedures........................................................ 18–2<br />

18.1.1.2. Optional Information for WRITE Procedures ........ 18–4<br />

18.1.1.3. Information Returned by WRITE<br />

Procedures........................................................ 18–9<br />

18.1.2. Buffers and Tables for PLUS WRITE Procedures........ 18–10<br />

18.1.3. WRITE Procedures Called from PLUS......................... 18–12<br />

18.1.3.1. SAR_OPEN_OUTPUT Procedure Call ................. 18–13<br />

18.1.3.2. SAR_WRITE Procedure Call................................ 18–14<br />

18.1.3.3. SAR_WRITE_CONTROL Procedure Call............. 18–15<br />

18.1.3.4. SAR_CLOSE_OUTPUT Procedure Call ............... 18–17<br />

18.1.3.5. Example .............................................................. 18–18<br />

18.1.4. Status Lists for PLUS WRITE Procedures................... 18–19<br />

18.2. WRITE Function/MASM Interface........................................ 18–21<br />

18.2.1. WRITE Packet and Data Area Description................... 18–22<br />

18.2.1.1. Required Information for WRITE<br />

Procedures...................................................... 18–22<br />

18.2.1.2. Optional Information for WRITE Procedures ...... 18–23<br />

18.2.1.3. Information Returned by WRITE<br />

Procedures...................................................... 18–27<br />

18.2.1.4. WRITE Packet Definition PROC.......................... 18–28<br />

18.2.2. MASM WRITE Procedures Buffers and Tables........... 18–29<br />

18.2.3. WRITE Procedures Called from MASM ...................... 18–29<br />

18.2.3.1. Open-Output Procedure Call (S$AROPENO)...... 18–29<br />

18.2.3.2. WRITE Procedure Call (S$ARWRITE) ................. 18–30<br />

18.2.3.3. Close-Output Procedure Call (S$ARCLOSO) ...... 18–31<br />

18.2.4. Status Lists for MASM WRITE Procedures ................ 18–32<br />

18.3. WRITE Function <strong>Support</strong>ed Character Set Types ................ 18–34<br />

18.3.1. ASCII/ISO and ASCII-like ............................................. 18–35<br />

18.3.2. ASCII/ISO with Embedded Shift-Coded Kanji.............. 18–35<br />

18.3.3. Attributed Character Data............................................ 18–35<br />

7833 1733–004 vii


Contents<br />

Section 19. SAR$ ATREAD ................................................................ 19–1<br />

19.1. ATREAD Function/PLUS Interface......................................... 19–1<br />

19.1.1. ATREAD Packet Data Structure Description................. 19–1<br />

19.1.1.1. Required Information for ATREAD<br />

Procedures ....................................................... 19–2<br />

19.1.1.2. Optional Information for ATREAD<br />

Procedures ....................................................... 19–3<br />

19.1.1.3. Information Returned by ATREAD<br />

Procedures ....................................................... 19–5<br />

19.1.2. PLUS ATREAD Procedures Buffers and Tables............ 19–7<br />

19.1.3. ATREAD Procedures Called from PLUS........................ 19–8<br />

19.1.3.1. SAR_INITIALIZE_ATREAD Procedure Call ........... 19–8<br />

19.1.3.2. SAR_ATREAD Procedure Call............................... 19–9<br />

19.1.4. SAR_RESTORE_ATREAD Procedure Call ................... 19–11<br />

19.1.5. Status Lists for PLUS ATREAD Procedures................ 19–11<br />

19.2. ATREAD Function/MASM Interface .................................... 19–13<br />

19.2.1. ATREAD Packet and Data Area Description................ 19–13<br />

19.2.1.1. Required Information for ATREAD<br />

Procedures ..................................................... 19–13<br />

19.2.1.2. Optional Information for ATREAD<br />

Procedures ..................................................... 19–14<br />

19.2.1.3. Information Returned by ATREAD<br />

Procedures ..................................................... 19–16<br />

19.2.1.4. ATREAD Packet Definition PROC<br />

(S$ARATRDEF)............................................... 19–17<br />

19.2.1.5. ATREAD Packet Generation PROC<br />

(S$ARATRPKT) ............................................... 19–18<br />

19.2.2. MASM ATREAD Procedures Buffers and Tables ....... 19–19<br />

19.2.3. ATREAD Procedures Called from MASM ................... 19–19<br />

19.2.3.1. Initialize ATREAD Procedure Call<br />

(S$ARINITATR) ............................................... 19–19<br />

19.2.3.2. ATREAD Procedure Call (S$ARATREAD) ........... 19–20<br />

19.2.3.3. Reset ATREAD Procedure Call<br />

(S$ARRSATR) ................................................. 19–22<br />

19.2.4. Status Lists for MASM ATREAD Procedures ............. 19–23<br />

Section 20. SAR$ COM ...................................................................... 20–1<br />

20.1. SAR$ COM Function/PLUS Interface .................................... 20–1<br />

20.1.1. SAR$ COM Packet Data Structure Description ............ 20–1<br />

20.1.1.1. Required Information for SAR$ COM<br />

Procedure ......................................................... 20–1<br />

20.1.1.2. Optional Information for SAR$ COM<br />

Procedure ......................................................... 20–2<br />

20.1.1.3. Information Returned by SAR$ COM<br />

Procedure ......................................................... 20–6<br />

20.1.2. SAR$ PLUS COM Procedure Buffers and Tables ......... 20–7<br />

20.1.3. SAR$ COM Procedure Called from PLUS..................... 20–8<br />

20.1.4. Status Lists for PLUS COM Procedure ......................... 20–9<br />

20.2. SAR$ COM Function/MASM Interface................................ 20–11<br />

viii 7833 1733–004


Contents<br />

20.2.1. SAR$ COM Packet and Data Area Description ........... 20–11<br />

20.2.1.1. Required Information for SAR$ COM<br />

Procedure ....................................................... 20–11<br />

20.2.1.2. Optional Information for SAR$ COM<br />

Procedure ....................................................... 20–12<br />

20.2.1.3. Information Returned by COM Procedure.......... 20–14<br />

20.2.1.4. COM Packet Definition PROC<br />

(S$ARCOMDEF) ............................................. 20–15<br />

20.2.1.5. SAR$ COM Packet Generation PROC<br />

(S$ARCOMPKT).............................................. 20–16<br />

20.2.2. MASM SAR$ COM Procedure Buffers and<br />

Tables ...................................................................... 20–17<br />

20.2.3. SAR$ MASM COM Procedure Call (S$ARCOM)......... 20–17<br />

20.2.4. Status Lists for the MASM COM Procedure............... 20–19<br />

Section 21. SDFI, SDFO–System Data Format I/O Routines ................21–1<br />

21.1. SDFI–System Data Format Input Routine .............................. 21–2<br />

21.1.1. Packet............................................................................ 21–2<br />

21.1.1.1. Packet Format....................................................... 21–3<br />

21.1.1.2. Packet Generation PROC...................................... 21–4<br />

21.1.2. Calling Sequence ........................................................... 21–7<br />

21.1.2.1. Open SDFI ............................................................ 21–7<br />

21.1.2.2. Read an Image ...................................................... 21–8<br />

21.1.2.3. Close SDFI .......................................................... 21–10<br />

21.2. SDFO–System Data Format Output Routine ....................... 21–10<br />

21.2.1. Packet.......................................................................... 21–10<br />

21.2.1.1. Packet Format..................................................... 21–11<br />

21.2.1.2. Packet Generation PROC.................................... 21–13<br />

21.2.2. Calling Sequence ......................................................... 21–16<br />

21.2.2.1. Open SDFO......................................................... 21–16<br />

21.2.2.2. Write an Image ................................................... 21–17<br />

21.2.2.3. Close SDFO ........................................................ 21–17<br />

21.3. Error Return.......................................................................... 21–18<br />

Section 22. SFDT$–System Standard Format Date and Time .............22–1<br />

22.1. MASM Interface..................................................................... 22–3<br />

22.1.1. Packet............................................................................ 22–3<br />

22.1.2. Calling Sequence ........................................................... 22–5<br />

22.1.3. Example ......................................................................... 22–7<br />

22.2. PLUS Interface ....................................................................... 22–8<br />

22.2.1. Packet............................................................................ 22–8<br />

22.2.2. Calling Sequence ......................................................... 22–11<br />

22.2.3. Example ....................................................................... 22–12<br />

22.3. SFDTBL$–Month and Day Table .......................................... 22–12<br />

7833 1733–004 ix


Contents<br />

Section 23. SIR$–Symbolic Input/Output Routine.............................. 23–1<br />

23.1. SIR$–Control Options ............................................................ 23–6<br />

23.2. SIR$ Entry Points ................................................................. 23–10<br />

23.2.1. OPNSR$–Open SIR$ Input and Output....................... 23–10<br />

23.2.2. INISR$–Initialize SIR$ Input and Output...................... 23–11<br />

23.2.3. GETAS$–Get Symbolic Image in ASCII....................... 23–13<br />

23.2.4. GETSR$–Get Symbolic Image in Fieldata ................... 23–16<br />

23.2.5. GETNM$–Get Symbolic Image Without<br />

Translation............................................................... 23–18<br />

23.2.6. CLOSR$–Close SIR$ Input and Output....................... 23–19<br />

23.3. External Labels..................................................................... 23–20<br />

23.4. SIR$–Multipass Capability.................................................... 23–20<br />

23.5. Compressed Symbolic Elements......................................... 23–20<br />

Section 24. Program Trace Routine ................................................... 24–1<br />

24.1. Calling Sequence ................................................................... 24–3<br />

24.2. Terminating Trace .................................................................. 24–3<br />

24.3. Symbol Tables........................................................................ 24–4<br />

24.4. Demand Mode Operation ...................................................... 24–5<br />

24.4.1. Contingency Processing................................................ 24–7<br />

24.4.2. Demand Mode Commands........................................... 24–8<br />

24.5. Control Flags ........................................................................ 24–18<br />

Section 25. SOR–Symbolic Output Routine ....................................... 25–1<br />

25.1. SSOR$–Start Symbolic Output .............................................. 25–2<br />

25.2. SORASC$ and SORASCA$–Output ASCII Image.................. 25–3<br />

25.3. Output Fieldata Image ........................................................... 25–4<br />

25.4. SORNM$ and SORNMA$–Output Specified Coded<br />

Character Set Image.......................................................... 25–5<br />

25.5. ESOR$–End Symbolic Output................................................ 25–6<br />

25.6. SOR File Control Table (SORFCT$)........................................ 25–6<br />

Appendix A. Using <strong>SYSLIB</strong> ....................................................................A–1<br />

A.1. Efficient Collections .................................................................A–1<br />

A.2. PLUS Routines.........................................................................A–1<br />

A.3. Compilations ............................................................................A–1<br />

Appendix B. Diagnostic Messages ........................................................ B–1<br />

B.1. Processor Interface Routine Messages...................................B–1<br />

B.2. SIR$–Line-Change Diagnostics................................................B–4<br />

x 7833 1733–004


Contents<br />

Appendix C. <strong>SYSLIB</strong> Restrictions .......................................................... C–1<br />

C.1. ASM Compatibility....................................................................C–1<br />

C.2. Object Modules........................................................................C–1<br />

C.3. SDFI and SDFO Tape Handling ................................................C–1<br />

C.4. Symbolic Access Routine (SAR$).............................................C–1<br />

C.5. 65K Addressing Limit ...............................................................C–1<br />

Appendix D. <strong>SYSLIB</strong> Elements .............................................................. D–1<br />

Appendix E. <strong>SYSLIB</strong> Common Bank Entry Points ..................................E–1<br />

Appendix F. Interface to Selected Extended Mode Executive<br />

Requests ............................................................................F–1<br />

F.1. Calling Sequence...................................................................... F–1<br />

F.2. Packet Generation .................................................................... F–2<br />

F.2.1. EM$READPKT ................................................................. F–2<br />

F.2.2. EM$PRINTPKT................................................................. F–3<br />

F.2.3. EM$TREADPKT ............................................................... F–4<br />

F.2.4. EM$SNAPPKT ................................................................. F–5<br />

F.3. Example.................................................................................... F–6<br />

Appendix G. INFOR Information ............................................................ G–1<br />

G.1. INFOR Identifiers for Processor Call Statement ..................... G–1<br />

G.2. The INFOR Table ..................................................................... G–3<br />

G.3. INFOR Table Conventions....................................................... G–7<br />

G.4. INFOR Table Example ............................................................. G–8<br />

G.5. Reading the INFOR Table........................................................ G–9<br />

G.6. Determining the INFOR Table Size ......................................... G–9<br />

Appendix H. ASCII-like Character Sets ................................................. H–1<br />

Appendix I. Extended Mode Interface to <strong>SYSLIB</strong> .................................. I–1<br />

I.1. General ...................................................................................... I–1<br />

I.2. Interface to the AEDIT$ Package .............................................. I–2<br />

I.3. Interface to BSP$ ...................................................................... I–5<br />

I.4. Interface to FDASC$ ................................................................. I–9<br />

I.5. Interface to GETPSF$.............................................................. I–10<br />

I.6. Interface to ID$ ....................................................................... I–12<br />

I.7. Interface to INFOR$ ................................................................ I–13<br />

I.8. Interface to MFDSP$............................................................... I–15<br />

7833 1733–004 xi


Contents<br />

Appendix J. Obsolete Entry Points, PROCs, and Routines.....................J–1<br />

J.1. AEDIT$–Generating the AEDIT$ Packet .................................. J–1<br />

J.1.1. A$EPKT ........................................................................... J–1<br />

J.1.2. A$EPKTF ......................................................................... J–1<br />

J.1.3. A$EPKTSFDT................................................................... J–2<br />

J.1.4. Examples of Generating the AEDIT$ Packet................... J–2<br />

J.2. CONWRD$–MASM PROCs and Entry Points ......................... J–2<br />

J.3. EOUT$–Generalized Output Editing Routine ........................... J–3<br />

J.3.1. Editing Functions............................................................. J–5<br />

J.3.2. Output Functions............................................................. J–6<br />

J.3.3. Modal Functions.............................................................. J–7<br />

J.3.4. Control Functions ............................................................ J–8<br />

J.3.5. EOUT$–Calling Sequences ............................................. J–9<br />

J.4. I$D–Calling Sequence ............................................................ J–11<br />

J.5. IDLINE$ and IDONLY$–Identification Line<br />

Routines............................................................................. J–13<br />

J.5.1. IDLINE$ ......................................................................... J–14<br />

J.5.1.1. IDLINE$ ................................................................ J–14<br />

J.5.1.2. IDTIME$................................................................ J–15<br />

J.5.2. IDONLY$ ....................................................................... J–15<br />

J.5.2.1. IDONLY$............................................................... J–15<br />

J.5.2.2. IDTOME$.............................................................. J–15<br />

J.6. SFDT$–MASM Calling Sequence .......................................... J–15<br />

J.7. SYS$RLIB$ID–RLIB Identification.......................................... J–16<br />

J.8. PIRCB$ Common Bank Entry Points ..................................... J–17<br />

Appendix K. Related Product Information............................................. K–1<br />

Glossary ..............................................................................................1<br />

Index ..............................................................................................1<br />

xii 7833 1733–004


Figures<br />

4–1. AEDIT$: Packet Format ...................................................................................... 4–3<br />

5–1. BSP$: File Control Table (FCT) .......................................................................... 5–5<br />

8–1. EDIT$: Packet Format ....................................................................................... 8–2<br />

12–1. INFOR$: Format of the ELT$ Table.................................................................. 12–9<br />

14–1. PARTBL Table Format ...................................................................................... 14–4<br />

15–1. ROR: Item Format ............................................................................................ 15–3<br />

16–1. SAR$: Attribute Table Entry ........................................................................... 16–12<br />

17–1. SAR$: Attribute Table Entry ........................................................................... 17–11<br />

18–1. SAR$: Attribute Table Entry ........................................................................... 18–11<br />

21–1. SDFI: Packet Format ....................................................................................... 21–3<br />

21–2. SDFO: Packet Format..................................................................................... 21–11<br />

22–1. SFDT$: Packet Format ..................................................................................... 22–3<br />

7833 1733–004 xiii


Figures<br />

xiv 7833 1733–004


Tables<br />

2–1. MAXR$: Control Register and Partial Word Designator Mnemonics................. 2–3<br />

2–2. SSTYP$: Element Subtypes .............................................................................. 2–5<br />

2–3. ASUBTYP$: Absolute Element Subtypes and Sub-subtypes............................ 2–7<br />

2–4. SYS$DEF: System Standard Definitions ........................................................... 2–8<br />

4–1. AEDIT$: Initialization and Termination Editing Routines ................................... 4–9<br />

4–2. AEDIT$: General Purpose ASCII Editing Routines .......................................... 4–10<br />

4–3. AEDIT$F: Floating-Point ASCII Editing Routines ............................................. 4–16<br />

4–4. AEDIT$T: ASCII Time and Date Editing Routines ........................................... 4–18<br />

4–5. AEDIT$: Error Status Codes............................................................................ 4–24<br />

8–1. Initialization and Termination.............................................................................. 8–5<br />

8–2. General-Purpose Editing Routines ..................................................................... 8–6<br />

8–3. Time and Date Editing Routines......................................................................... 8–8<br />

8–4. EDIT$F–Floating-Point Editing Routines........................................................... 8–10<br />

12–1. INFOR$: RINF$ Error Messages ..................................................................... 12–5<br />

16–1. SAR$: Attribute Types and Values ................................................................ 16–13<br />

17–1. SAR$: PLUS READ Buffer and Table Length Defaults ................................. 17–12<br />

17–2. SAR$: PLUS READ Buffer and Table Type Definitions ................................. 17–12<br />

17–3. SAR$: READ Procedure CALL_STATUS Codes ............................................ 17–17<br />

17–4. SAR$: READ Procedure IO_STATUS Status List .......................................... 17–19<br />

17–5. SAR$: MASM READ Buffer and Table Lengths............................................ 17–27<br />

17–6. SAR$: READ Procedure SR$CALLST Status Codes ..................................... 17–30<br />

17–7. SAR$: READ Procedure SR$IOSTAT Status Codes...................................... 17–32<br />

18–1. SAR$: PLUS WRITE Buffer and Table Length Defaults................................ 18–12<br />

18–2. SAR$: PLUS WRITE Buffer and Table Type Definitions ............................... 18–12<br />

18–3. SAR$: WRITE Procedure CALL_STATUS Codes .......................................... 18–19<br />

18–4. SAR$: WRITE Procedure IO_STATUS Status List......................................... 18–21<br />

18–5. SAR$: MASM WRITE Buffer and Table Lengths .......................................... 18–29<br />

18–6. SAR$: WRITE Procedure SW$CALLST Codes.............................................. 18–32<br />

18–7. SAR$: WRITE Procedure SW$IOSTAT Status List ....................................... 18–34<br />

19–1. SAR$: PLUS ATREAD Buffer and Table Length Defaults ............................... 19–7<br />

19–2. SAR$: PLUS ATREAD Buffer and Table Type Definitions............................... 19–7<br />

19–3. SAR$: ATREAD Procedure CALL_STATUS Codes........................................ 19–11<br />

19–4. SAR$: ATREAD Procedure IO_STATUS Status List...................................... 19–13<br />

19–5. SAR$: MASM ATREAD Buffer and Table Lengths ....................................... 19–19<br />

19–6. SAR$: ATREAD Procedure SA$CALLST Status Codes................................. 19–23<br />

19–7. SAR$: ATREAD Procedure SA$IOSTAT Status Codes ................................. 19–24<br />

7833 1733–004 xv


Tables<br />

20–1. SAR$: PLUS COM Buffer and Table Length Defaults .................................... 20–7<br />

20–2. SAR$: PLUS COM Buffer and Table Type Definitions.................................... 20–7<br />

20–3. SAR$: COM Procedure CALL_STATUS Codes............................................... 20–9<br />

20–4. SAR$: MASM COM Buffer and Table Lengths ............................................ 20–17<br />

20–5. SAR$: COM Procedure SC$CALLST Status Codes...................................... 20–19<br />

B–1. SIR$: Line-change Diagnostics .........................................................................B–5<br />

D–1. <strong>SYSLIB</strong> Elements ...............................................................................................D–1<br />

D–2. <strong>SYSLIB</strong> Common Bank Absolute Elements.......................................................D–5<br />

E–1. <strong>SYSLIB</strong>$1 Entry Points....................................................................................... E–1<br />

E–2. <strong>SYSLIB</strong>$2 Entry Points....................................................................................... E–4<br />

E–3. <strong>SYSLIB</strong>$3 Entry Points....................................................................................... E–5<br />

E–4. <strong>SYSLIB</strong>$4 Entry Points....................................................................................... E–5<br />

H–1. Character Set Types...........................................................................................H–1<br />

I–1. EM$EDIT Function Codes................................................................................... I–3<br />

I–2. EM$EDIT First Parameter Field Values............................................................... I–4<br />

I–3. EM$EDIT Second Parameter Field Values.......................................................... I–4<br />

I–4. EM$BSP Function Codes.................................................................................... I–7<br />

I–5. EM$BSP Parameter Field Values........................................................................ I–7<br />

I–6. EM$INFOR Function Codes.............................................................................. I–13<br />

I–7. EM$INFOR Additional Parameter Field Values................................................. I–14<br />

I–8. EM$MFDSP Function Codes ............................................................................ I–16<br />

I–9. EM$MFDSP Parameter Field Values ................................................................ I–16<br />

J–1. IDLINE$, IDONLY$: IDBUFF Length............................................................... J–14<br />

J–2. PIRCB$ Entry Points ........................................................................................ J–17<br />

xvi 7833 1733–004


Section 1<br />

Introduction<br />

1.1. About This <strong>Manual</strong><br />

This manual is a detailed programming reference for the OS 2200 System Service<br />

Routines Library (<strong>SYSLIB</strong>). The descriptions of the <strong>SYSLIB</strong> routines include their calling<br />

sequence, parameters, and error or normal returns.<br />

Master Doc PLE<br />

This manual contains all the information that was available at the time of publication.<br />

Technical changes that were not available at the time of publication are documented in<br />

problem list entry (PLE) 17668757. To obtain a copy of this PLE, log on with entitled<br />

privileges to the Unisys Product <strong>Support</strong> web site (http://www.support.unisys.com/) or<br />

contact your Unisys representative.<br />

Audience<br />

This manual is for developers of both application and system software in the OS 2200<br />

environment. This standardized implementation of commonly required services<br />

eliminates the need for detailed knowledge of internal OS 2200 data structures, which<br />

are subject to change.<br />

Prerequisites<br />

To use the Service Library routines effectively, the programmer should be familiar with<br />

• OS 2200 concepts, facilities, and job control language<br />

• Executive system (Exec) concepts and facilities<br />

• MASM and PLUS programming languages<br />

7833 1733–004 1–1


Introduction<br />

1.2. Notation Conventions<br />

In this manual, the 36 bits of the computer word are numbered from left to right. For<br />

example:<br />

0 8 9 17 18 26 27 35<br />

The following mnemonics define partial-word references:<br />

sixth- S1 S2 S3 S4 S5 S6<br />

word 0 5 6 11 12 17 18 23 24 29 30 35<br />

quarter- Q1 Q2 Q3 Q4<br />

word 0 8 9 17 18 26 27 35<br />

third- T1 T2 T3<br />

word 0 11 12 23 24 35<br />

half- H1 H2<br />

word 0 17 18 35<br />

The 2200 Series Assembler mnemonics are used whenever machine instructions are<br />

discussed. The Assembler mnemonics for partial-word transfers and registers are<br />

defined in the MASM definition element MAXR$. These mnemonics are used in<br />

assembly language programs.<br />

The mnemonics U and XU indicate immediate data references. (The operand is taken<br />

directly from the address portion of the instruction rather than from the main storage<br />

referenced by that address.) The mnemonics XH1, XH2, and XU indicate that the system<br />

will load the 18-bit value with sign extension to 36 bits (in other words, if bit 18 is a one,<br />

bits 0 through 17 are set to one). This does not affect the store operation.<br />

Control registers are referenced with the following mnemonics:<br />

A0, A1,..., A15<br />

Accumulators (A0 through A3 can also be used as index registers.)<br />

A15+1, A15+2<br />

Additional accumulators for double- or triple-precision instructions<br />

1–2 7833 1733–004


X1, X2,..., X11<br />

Index registers<br />

R1, R2,..., R15<br />

R registers<br />

Activities may use one of two control register sets.<br />

Major set<br />

All control registers as described above<br />

Minor set<br />

Registers X8 through X11; A0 through A5; R1, R2, and R3<br />

Introduction<br />

Subroutines frequently use a subset of the minor set, called volatile registers. This<br />

subset includes<br />

Volatile set<br />

Registers X11, A0 through A5, R1, R2, and R3<br />

The volatile register set is assumed to be available for all routines in <strong>SYSLIB</strong>. The<br />

AEDIT$/EDIT$ routines also use registers X1, X2, and X3, which are saved and restored.<br />

When a subroutine uses one of the volatile registers, the register is not saved or<br />

replaced. Any registers that are used but are not part of the volatile register set are<br />

saved and restored.<br />

The AEDIT$/EDIT$ routines assume that a subset of the volatile register set is available.<br />

These registers are: A0, A1, A2, A3, R1, and X11, and they are not saved or restored.<br />

The dollar sign ($) is generally used in system-defined external symbols, procedure<br />

names, and file names; to avoid duplication, do not use this character. The $ generally<br />

occurs as the last character of a symbol; an exception is procedure names in which the $<br />

is usually the second character.<br />

In calling sequences and table formats, parameters in italic type indicate information that<br />

the calling program supplies; parameters in regular type indicate information that the<br />

system returns.<br />

Brackets indicate optional parameters. (The brackets are not part of the parameter and<br />

are not included by the calling program.)<br />

The symbol ∆ indicates a blank character.<br />

In control statements, Executive requests, and procedure call formats, capital letters<br />

indicate code that should be used as shown. Lowercase letters represent variables that<br />

should be used as the text directs.<br />

7833 1733–004 1–3


Introduction<br />

Numbers are represented as in Assembler syntax; that is, a leading zero specifies octal.<br />

Control statements have the following general format:<br />

@label:command,options parameters . comments<br />

or<br />

@@command,options parameters . comments<br />

Parameters are separated by commas. A field may specify a single parameter, or it may<br />

contain several related parameters in subfields. Slashes (///) separate subfields. An<br />

ellipsis (...) indicates that there may be any number of additional parameters following<br />

the format of the last shown (for example, reel numbers of a tape file or elements to be<br />

listed).<br />

See the ECL and FURPUR <strong>Reference</strong> <strong>Manual</strong> for a complete discussion of control<br />

statement syntax.<br />

1.3. About <strong>SYSLIB</strong><br />

<strong>SYSLIB</strong> contains absolute, object module, omnibus, procedure, relocatable, and symbolic<br />

elements.<br />

The <strong>SYSLIB</strong> routines can be grouped into six functional areas. The following groupings<br />

are only a subset of the <strong>SYSLIB</strong> elements. For a complete listing of all <strong>SYSLIB</strong><br />

elements, see Appendix D.<br />

• System Procedures, Definitions, and Entry Points<br />

AXR$ SYS$DEF<br />

MAXR$ SSTYP$<br />

PROC$ TABLE$<br />

SDFP$ <strong>SYSLIB</strong>$ID<br />

• Collector Interface Routines<br />

DLOAD$ IDLAD$<br />

IDL$ IDLD$<br />

IDLA$ SNAP$<br />

• Diagnostic and Debugging Routines<br />

CABSAD$ CRELAD$<br />

CONWRD$ SNOOPY<br />

1–4 7833 1733–004


• Editing Routines<br />

AEDIT$ SFDT$DG<br />

AEDIT$F SFDTBL$<br />

AEDIT$SFDT EDIT$<br />

AEDIT$T EDIT$F<br />

SFDT$ EDIT$T<br />

SFDT$D<br />

• Processor Interface Routines (PIRs)<br />

BSP$ PREPRM<br />

GETPSF$ PREPRO<br />

ID$ ROR<br />

INFOR$ SAR$<br />

POSTPR$ SIR$<br />

PREPF$ SOR<br />

• Utility Routines<br />

FDASC$ SDFI<br />

MFDSP$ SDFO<br />

Introduction<br />

The Collector <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> explains the Collector interface routines.<br />

This manual describes the remaining routines.<br />

The method you use to install the <strong>SYSLIB</strong> routines determines which file or files will<br />

contain the routines. If you install <strong>SYSLIB</strong> without COMUS, then the routines are placed<br />

in two files, SYS$*RLIB$ and SYS$*LIB$. If you install with COMUS, all of the routines<br />

are placed in the SYS$LIB$*<strong>SYSLIB</strong> file. The following paragraphs explain these two<br />

arrangements.<br />

If you install <strong>SYSLIB</strong> without COMUS, the <strong>SYSLIB</strong> routines are contained in the system<br />

relocatable library file SYS$*RLIB$ along with other relocatable libraries. When a<br />

program calls a <strong>SYSLIB</strong> routine, the Collector automatically searches SYS$*RLIB$ for the<br />

routine and places the routine in the absolute program that the Collector is constructing.<br />

Subsets of the <strong>SYSLIB</strong> routines are also contained in common banks. These common<br />

banks reside in the system absolute library file SYS$*LIB$. The routines in the common<br />

banks are the AEDIT$ package (AEDIT$, AEDIT$F, AEDIT$SFDT), BSP$, CABSAD$ and<br />

CRELAD$, CONWRD$, FDASC$ (and TABLE$), GETPSF$, ID$, INFOR$, MFDSP$,<br />

SAR$, SDFI, SDFO, and SFDT$ (and SFDTBL$). See Section 3 for details of how to<br />

access the routines in the <strong>SYSLIB</strong> common banks.<br />

7833 1733–004 1–5


Introduction<br />

If you install <strong>SYSLIB</strong> using COMUS (level 4R2 and higher), all of the routines and the<br />

common banks are placed in the <strong>SYSLIB</strong> product file SYS$LIB$*<strong>SYSLIB</strong>. The Collector<br />

(level 31R2 and higher) automatically searches SYS$LIB$*<strong>SYSLIB</strong> for referenced <strong>SYSLIB</strong><br />

routines and places them in the absolute program that it is constructing. MASM (level<br />

4R2 and higher) also automatically searches SYS$LIB$*<strong>SYSLIB</strong>.<br />

Several restrictions apply to the released level of <strong>SYSLIB</strong>. For details of these<br />

restrictions, see Appendix C.<br />

1–6 7833 1733–004


Section 2<br />

System Standard Procedures and<br />

Definitions<br />

This section describes system definitions and procedures that are provided by <strong>SYSLIB</strong>.<br />

System definitions are supplied to calling programs for information such as<br />

• Mnemonics for control registers<br />

• Names and bank descriptor indexes (BDI) for some system configured common<br />

banks and entry points to the common banks<br />

• Program file element subtype mnemonics and codes<br />

<strong>SYSLIB</strong> procedures perform functions such as<br />

• Generating calling sequences to <strong>SYSLIB</strong> routines<br />

• Generating ASCII and Fieldata character sets<br />

• Defining ASCII control characters<br />

2.1. Common Bank Entry Points<br />

System configured common bank names, their associated BDI values, and the absolute<br />

values of the entry points to the common banks are defined in relocatable elements with<br />

CBEP$$ as the first six characters of the element name. This element naming<br />

convention is used by the Collector to detect the use of configured common banks.<br />

During program collection, the Collector automatically includes CBEP$$ elements that<br />

contain configured common bank names or entry points referenced in the program being<br />

collected.<br />

7833 1733–004 2–1


System Standard Procedures and Definitions<br />

The relocatable element CERU$ is located in the EXEC system relocatable library file,<br />

SYS$*RLIB$. CERU$ reserves 620 BDI values for users. The BDI values reserved for<br />

users are<br />

0400300 to 0400323<br />

0400400 to 0400411<br />

0400500 to 0400511<br />

0400600 to 0400611<br />

0400700 to 0400711<br />

0401000 to 0401011<br />

0401100 to 0401111<br />

0401200 to 0401211<br />

. . .<br />

. . .<br />

0403300 to 0403311<br />

. . .<br />

. . .<br />

0407700 to 0407711<br />

2.2. MAXR$–Register and Partial-Word Definitions<br />

MAXR$ is a MASM definition mode (omnibus) element that defines mnemonic<br />

designators for<br />

• Control registers<br />

• Base registers<br />

• J-registers and staging registers<br />

• Partial-word designators<br />

For a complete description of these registers, refer to the applicable processor and<br />

storage reference or the AIM <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

Table 2–1 lists the mnemonic designators and absolute addresses of control registers<br />

and partial-word designators that MAXR$ contains.<br />

All registers used in assembler programs must be defined. The following example<br />

shows how to include MAXR$ in assembly language source code. MAXR$ defines the<br />

register (A0) and J-designator (U).<br />

$(1),START<br />

$INCLUDE 'MAXR$'<br />

L,U A0,1<br />

ER EXIT$<br />

$END START<br />

2–2 7833 1733–004


System Standard Procedures and Definitions<br />

The MASM PROC AXR$ also defines these mnemonic designators.<br />

Table 2–1. MAXR$: Control Register and Partial Word Designator Mnemonics<br />

Base Registers<br />

Index<br />

Registers<br />

Arithmetic<br />

Registers<br />

R-Registers<br />

Staging<br />

Registers and<br />

J-Registers<br />

Partial-Word<br />

Designators<br />

Mne Val Mne Abs Mne Abs Mne Abs Mne Abs Mn-J J-Va<br />

B0 0 X0 0 A0 14 R0 100 SR1 103 W (or<br />

none)<br />

B1 1 X1 1 A1 15 R1 101 SR2 104 H1 1<br />

B2 2 X2 2 A2 16 R2 102 SR3 105 H2 2<br />

B3 3 X3 3 A3 17 R3 103 J0 106 XH2 3<br />

B4 4 X4 4 A4 20 R4 104 J1 107 XH1 4<br />

B5 5 X5 5 A5 21 R5 105 J2 110 T3 5<br />

B6 6 X6 6 A6 22 R6 106 J3 111 T2 6<br />

B7 7 X7 7 A7 23 R7 107 T1 7<br />

B8 10 X8 10 A8 24 R8 110 S1 15<br />

B9 11 X9 11 A9 25 R9 111 S2 14<br />

B10 12 X10 12 A10 26 R10 112 S3 13<br />

B11 13 X11 13 A11 27 R11 113 S4 12<br />

B12 14 A12 30 R12 114 S5 11<br />

B13 15 A13 31 R13 115 S6 10<br />

B14 16 A14 32 R14 116 Q1 7<br />

B15 17 A15 33 R15 117 Q2 4<br />

Legend<br />

Mne Mnemonic<br />

Val Value (octal)<br />

Abs Absolute (octal)<br />

Mn-J Mnemonic for J<br />

J-Val J-Value (octal)<br />

7833 1733–004 2–3<br />

0


System Standard Procedures and Definitions<br />

2.3. PROC$–System Procedures<br />

PROC$ is an element that contains the following assembler procedures (PROC). Refer<br />

to the designated section of this manual or to the other manuals listed below for<br />

instructions on how to use these procedures. Only those PROCs that are not described<br />

elsewhere in this document are listed.<br />

• Collector segment loading PROCs. See the Collector <strong>Programming</strong> <strong>Reference</strong><br />

<strong>Manual</strong>. (L$OAD, D$REL, D$LOAD)<br />

• Procedures that generate calls to the PMD dynamic dump routines (X$MARK,<br />

X$BACK, X$BUFR, X$SIZE, X$IF, X$OR, X$AND, X$LST, X$TALY, X$FRMT,<br />

X$MESG, X$CREG, X$DUMP, X$CORE, X$DRUM, X$TAPE, X$FILE, X$CW, X$ON,<br />

X$OFF). See the PMD <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

• Procedures, ASCII and FIELDATA, used with the Meta-Assembler (MASM) to<br />

change the radix for generating character data.<br />

• Procedure A$SCTRL to define mnemonics for the ASCII control characters<br />

corresponding to octal codes 0 through 37 and 177. See the ER <strong>Programming</strong><br />

Quick-<strong>Reference</strong> Guide.<br />

• J$REG PROC to aid loading J-registers in character addressing mode. See the AIM<br />

<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

• I$BJ and D$BJ PROC calls to generate IBJ$ (DBJ$) calling sequences used by the<br />

Collector in bank switching. See the Collector <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

• U$C function to uppercase ASCII character string. For example<br />

P$ $PROC<br />

U$C<br />

TYPE $EQU U$C(P$(0,1) . Get type in uppercase ASCII<br />

$IF TYPE='A'<br />

...<br />

$ENDF<br />

$END<br />

2.4. SSTYP$–Element Subtypes<br />

SSTYP$ is a nonexecutable relocatable element consisting of a table of standard<br />

symbolic and omnibus element subtype names and their associated values. It has a<br />

single external definition, SSTYP$. SSTYP$ is the address of a word that contains the<br />

length of the table. The table begins at SSTYP$ + 1.<br />

The element subtype number is used to index into the SSTYP$ table to obtain the<br />

corresponding Fieldata name. For example, the octal value for an element subtype of<br />

'PLS' (PLUS) is 015. The word at address SSTYP$+16 contains the Fieldata characters<br />

'PLS∆∆∆'.<br />

2–4 7833 1733–004


System Standard Procedures and Definitions<br />

If the element subtype number exceeds the length of SSTYP$, no table entry exists.<br />

The released table length is 64 words. If the element subtype number does not have a<br />

definition, SSTYP$ contains the number in Fieldata characters. For example, the octal<br />

value 076 does not have a subtype definition assigned to it. The word at address<br />

SSTYP$+077 contains the Fieldata characters '076∆∆∆'.<br />

Entries in the SSTYP$ table are one to four Fieldata characters per word, left-justified and<br />

space-filled.<br />

The element subtype codes are stored in the element table items in the program file<br />

table of contents. See 5.1.7 regarding packet formats for table item add.<br />

Table 2–2 contains the currently defined symbolic and omnibus element subtypes.<br />

Table 2–2. SSTYP$: Element Subtypes<br />

Mnemonic Code Description<br />

SYM 00 Symbolic (No subtype)<br />

ELT 01 ELT<br />

ASM 02 Assembler<br />

COB 03 COBOL<br />

FOR 04 FORTRAN<br />

ALG 05 ALGOL<br />

MAP 06 Collector<br />

DOC 07 Document processor<br />

SEC 010 SECURE processor<br />

SSG 011 Symbolic Stream Generator<br />

APL 012 A <strong>Programming</strong> Language<br />

BAS 013 BASIC<br />

LSP 014 LISP<br />

PLS 015 PLUS<br />

PL1 016 PL/I<br />

CTS 017 Conversational Time Sharing<br />

FLT 020 FLIT processor<br />

PNC 021 Panic<br />

TCL 022 Traffic Control Language<br />

MSM 023 Meta-Assembler (MASM)<br />

MSD 024 MASM definition language<br />

MAC 025 MACRO<br />

APT 026 Automatically Programmed Tools<br />

7833 1733–004 2–5


System Standard Procedures and Definitions<br />

Table 2–2. SSTYP$: Element Subtypes<br />

Mnemonic Code Description<br />

PGA 027 PROMEGA<br />

QLP 030 Query Language Processor<br />

INL 031 PLUS INLINE processor<br />

DCL 032 Declaration Control Language<br />

SDL 033 System Definition Language<br />

FDP 034 File Definition Processor<br />

PSP 035 PLUS Procedure<br />

PAS 036 PASCAL<br />

IPF 037 Interactive Processing Facility<br />

GSA 040 General Syntax Analyzer<br />

MSG 041 Local language message system<br />

(LLMS)<br />

PRT 042 Symbionts<br />

RPG 043 Report Program Generator<br />

ADA 044 Ada language<br />

PEER 045 Program Execution Evaluation Routine<br />

C 046 C language<br />

FHLL 047 FLIT High-Level Language<br />

LINK 050 Linking System<br />

COM 051 COMUS<br />

PADS 052 Programmer's Advanced Debugging<br />

System<br />

SSDP 053 Subsystem Definition Processor<br />

FLDP 054 Form Language Definition Processor<br />

(DPS)<br />

2–6 7833 1733–004


System Standard Procedures and Definitions<br />

2.5. ASUBTYP$–Executable Element Subtypes and<br />

Sub-subtypes<br />

ASUBTYP$ is a nonexecutable relocatable element consisting of a table of executable<br />

element subtype and sub-subtype mnemonics. An executable element can be one of<br />

several subtypes and each subtype can have sub-subtypes associated with it.<br />

For the absolute element subtype/sub-subtype table, a two-part access must be used.<br />

Because each absolute subtype can have more than one associated sub-subtype, the<br />

first access obtains a pointer to the subtype's sub-subtype mnemonic table. The second<br />

access, using the sub-subtype value from the element table, will obtain the Fieldata<br />

mnemonic for the absolute element.<br />

The initial access is off of ASUBTYP$ + 1 as follows:<br />

LA A0,ASUBTYP$+1,A0<br />

Here, A0 is conditioned with the absolute element's subtype from word 7, bits 0–5 in the<br />

element table entry. Next, with A1 conditioned with the element's sub-subtype value<br />

from word 7, bits 6–11 in the element table entry:<br />

AA,U A0,1,A1<br />

Register A0 now points into the sub-subtype mnemonic table for the particular subtype,<br />

then:<br />

LA A1,0,A0<br />

Register A1 contains the Fieldata mnemonic identifying the absolute element.<br />

The Data Structures <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> contains details on the program file<br />

element table entry for absolute elements.<br />

Table 2–3 contains the currently defined absolute element subtypes and sub-subtypes.<br />

Table 2–3. ASUBTYP$: Absolute Element Subtypes and<br />

Sub-subtypes<br />

Mnemonic Numeric Subtype Numeric Sub-subtype Description<br />

ABS 0 0 Absolute<br />

OM 1 0 Object Module<br />

BOM 1 1 Bound Object Module<br />

SSD 2 0 Subsystem Definition<br />

ZOOM 3 1 Zero Overhead Object<br />

Module<br />

7833 1733–004 2–7


System Standard Procedures and Definitions<br />

2.6. SYS$DEF–System Definitions<br />

<strong>SYSLIB</strong> provides SYS$DEF as a relocatable, omnibus, and object module element that<br />

equates externally defined mnemonic names to system definitions. These definitions<br />

can be obtained during an assembly by including the following in the source code:<br />

$INCLUDE 'SYS$DEF'. Table 2–4 contains the mnemonic names and values defined by<br />

SYS$DEF.<br />

Table 2–4. SYS$DEF: System Standard Definitions<br />

Name Description<br />

CYCLIM$ Symbolic element cycle maximum<br />

EMPCTBD$ BDI value for Extended Mode user PCT bank<br />

PCTBD$ BDI value for user PCT bank<br />

PFET$ Starting sector address of the element table<br />

PFAPT$ Starting sector address of the assembler procedure table<br />

PFCPT$ Starting sector address of the COBOL procedure table<br />

PFFPT$ Starting sector address of the FORTRAN/PLUS procedure table<br />

PFEPT$ Starting sector address of the relocatable element entry point table<br />

PFTEXT$ Starting sector address of the element text area<br />

LPF$ET Starting sector address of the large program file element table<br />

LPF$APT Starting sector address of the large program file assembler procedure<br />

table<br />

LPF$CPT Starting sector address of the large program file COBOL procedure<br />

table<br />

LPF$FPPT Starting sector address of the large program file FORTRAN/PLUS<br />

procedure table<br />

LPF$REEPT Starting sector address of the large program file relocatable element<br />

entry point table<br />

LPF$TEXT Starting sector address of the large program file element text area<br />

RPCTA$ User entry point to PCT bank<br />

PF$ID Program file identifier<br />

LPF$ID Large program file identifier<br />

LEPF$ID Large element program file identifier<br />

PF$LEVEL0 Current revision level for the standard program file<br />

LPF$LEVEL1 Current revision level for the large program file<br />

LEPF$LEVEL1 Current revision level for the large element program file<br />

ASCLIKE$ A 72-bit ASCII-like bit mask. Bit 71-n is set to 1 if coded character set<br />

(CCS) n is defined as ASCII-like. Otherwise, the bit is 0. See<br />

Table 1–1. This double-word equate is defined only for the omnibus<br />

version of SYS$DEF.<br />

2–8 7833 1733–004


System Standard Procedures and Definitions<br />

2.7. <strong>SYSLIB</strong>$ID–<strong>SYSLIB</strong> Identification<br />

<strong>SYSLIB</strong>$ID is a relocatable element in the <strong>SYSLIB</strong> installation file, SYS$LIB$*<strong>SYSLIB</strong>. It<br />

is also included in each of the <strong>SYSLIB</strong> common banks. This element identifies the<br />

<strong>SYSLIB</strong> level only. That is, it does not perform any functions. <strong>SYSLIB</strong>$ID defines the<br />

following external labels:<br />

<strong>SYSLIB</strong>$ID1 First 4 characters of ID in ASCII<br />

<strong>SYSLIB</strong>$ID2 Second 4 characters of ID in ASCII<br />

<strong>SYSLIB</strong>$ID3 Third 4 characters of ID in ASCII<br />

For example, the definitions for <strong>SYSLIB</strong> 75R2Q7 are<br />

<strong>SYSLIB</strong>$ID1 $EQU 75R2<br />

<strong>SYSLIB</strong>$ID2 $EQU Q7∆∆<br />

<strong>SYSLIB</strong>$ID3 $EQU ∆∆∆∆<br />

7833 1733–004 2–9


System Standard Procedures and Definitions<br />

2–10 7833 1733–004


Section 3<br />

<strong>SYSLIB</strong> Access Methods<br />

<strong>SYSLIB</strong> routines AEDIT$, AEDIT$F, AEDIT$SFDT, BSP$, CABSAD$, CRELAD$,<br />

CONWRD$, FDASC$, GETPSF$, INFOR$, ID$, MFDSP$, SAR$, SDFI, SDFO, and SFDT$<br />

are available as both relocatable and common bank routines. When using the common<br />

bank version of these routines, the library routine is not collected into the calling<br />

program.<br />

The calling program contains a jump to the common bank that contains the library<br />

routine, but the actual code of the library routine remains in the common bank. Because<br />

the common bank code does not get collected into the calling program, as the<br />

relocatable versions of the routines do, the calling program will be smaller. In cases<br />

where the library routine is large, this can result in a considerable saving of space. Also,<br />

since the common bank library routines exist independently of the calling programs, they<br />

may be modified without forcing the calling programs to be recompiled or re-collected.<br />

The jumps in the calling program remain valid even though the common bank code itself<br />

changes. When transporting an absolute program from one machine to another, the<br />

second machine must have the common bank library routines installed or the absolute<br />

program may guard mode or produce unpredictable results.To check on whether the<br />

<strong>SYSLIB</strong> common bank routines have been installed, it is only necessary to look for the<br />

absolute elements <strong>SYSLIB</strong>$1, <strong>SYSLIB</strong>$2, <strong>SYSLIB</strong>$3, and <strong>SYSLIB</strong>$4 in the file that<br />

contains the <strong>SYSLIB</strong> routines. These elements replace the <strong>SYSLIB</strong> common bank<br />

PIRCB$. However, PIRCB$ is still included to enable programs that were collected<br />

before the installation of <strong>SYSLIB</strong> level 75R3 to continue to run correctly.<br />

If an installation of <strong>SYSLIB</strong> is done using COMUS level 4R2 (and higher levels), then the<br />

<strong>SYSLIB</strong> common banks are put in the file SYS$LIB$*<strong>SYSLIB</strong>. If COMUS is not used for<br />

the installation of <strong>SYSLIB</strong>, then the elements will be contained in the file SYS$*LIB$. All<br />

the <strong>SYSLIB</strong> common banks have a starting address of 01000.<br />

Table D–2 in Appendix D lists the highest address of all <strong>SYSLIB</strong> common banks. The<br />

address of the <strong>SYSLIB</strong> level identifier is kept at 01003. The first word of the identifier is<br />

the number of words in the identifier followed by the ASCII character representation of<br />

the <strong>SYSLIB</strong> level (for example, 75R3).<br />

Some of the common bank <strong>SYSLIB</strong> routines require the calling program to provide a data<br />

area or a packet containing information that the routine needs. This area must be<br />

contained within a bank that is write enabled and based when the <strong>SYSLIB</strong> routine is<br />

called, and its addressing range must not overlap that of the <strong>SYSLIB</strong> common bank.<br />

7833 1733–004 3–1


<strong>SYSLIB</strong> Access Methods<br />

All the <strong>SYSLIB</strong> routines are available as relocatable elements. The routines listed at the<br />

beginning of this section are also available as common bank routines. For the <strong>SYSLIB</strong><br />

routines CABSAD$, CONWRD$, CRELAD$, GETPSF$, ID$, INFOR$, MFDSP$, and<br />

SFDT$, <strong>SYSLIB</strong> provides procedures that generate the calling sequence to access these<br />

routines. These procedures have been provided for the convenience of the calling<br />

program. Through the use of a parameter on the procedure call, they allow the calling<br />

program to access the relocatable version of the <strong>SYSLIB</strong> routine, the common bank<br />

version of the <strong>SYSLIB</strong> routine using the I$BJ calling sequence or the common bank<br />

version of the <strong>SYSLIB</strong> routine using the Auto Switch calling method.<br />

One of the advantages of using these procedures is that if a change to the calling<br />

sequence of the routine has to be made, an internal change to the <strong>SYSLIB</strong> calling<br />

procedure can also be made, and the calling program can remain the same. For the<br />

<strong>SYSLIB</strong> routines that do not have a procedure provided to generate the calling sequence,<br />

the calling program must explicitly code these instructions. The method for calling a<br />

particular <strong>SYSLIB</strong> routine is contained in the chapter describing the routine. Some<br />

general considerations on the different types of calls are given in the following<br />

subsections.<br />

3.1. Relocatable Collection Method<br />

The Relocatable Collection method causes the <strong>SYSLIB</strong> relocatable element to be<br />

collected into the calling program and become an integral part of it. Once this has been<br />

done, the resulting absolute element will not be affected by any changes made to the<br />

version of <strong>SYSLIB</strong> on the system. In other words, any <strong>SYSLIB</strong> routines the program<br />

requires are retrieved from the system library file and collected along with the other<br />

relocatable elements of the program to form an absolute element. If this type of call to<br />

<strong>SYSLIB</strong> is used, the resulting absolute can be transported from one system to another<br />

without regard as to what level of <strong>SYSLIB</strong> is on the other machine. Also, any changes<br />

made to <strong>SYSLIB</strong> after the program has been collected have no effect on how the<br />

program performs.<br />

For the <strong>SYSLIB</strong> routines that have a procedure to generate the calling sequence, this is<br />

the type of call that is generated as the default if the Common Bank call or Auto Switch<br />

call are not requested.<br />

3–2 7833 1733–004


3.2. Common Bank Call Using I$BJ<br />

<strong>SYSLIB</strong> Access Methods<br />

The I$BJ calling sequence is the preferred method of calling the <strong>SYSLIB</strong> common bank<br />

routines. For the <strong>SYSLIB</strong> routines with a calling procedure, this is the type of call that is<br />

generated when the calling program sets the parameter on the call to access the<br />

common bank version of the routine. This method provides a much more flexible means<br />

of using the <strong>SYSLIB</strong> routines than the Auto Switch method or explicitly coding an LIJ<br />

instruction, and it retains all the advantages associated with using the common bank<br />

version of the routines. That is, the calling program remains small because the <strong>SYSLIB</strong><br />

routines do not become an actual part of the calling program absolute. In addition, the<br />

calling program will automatically reference new versions of the <strong>SYSLIB</strong> routines as they<br />

are installed without the need for the calling program to be recompiled or re-collected.<br />

Another advantage to using the I$BJ calling sequence is that the calling program can<br />

switch between using the common bank version of the routines and the relocatable<br />

version of the routines by re-collecting the program with the proper collector EQU<br />

directives. A recompilation of the calling program is unnecessary; only a recollection is<br />

needed. For example, if the following call to the MFDSP$ routine were in a program, the<br />

common bank version of the MFDSP$ routine would be used.<br />

M$FDSP,'CB' PKTLENGTH,PKTADDR,FUNCCODE<br />

To force the program to use the relocatable version of the MFDSP$ routine, it would only<br />

be necessary to re-collect the program with the following Collector directives included:<br />

IN MFDSP$<br />

EQU CBMFDSP$/MFDSP$<br />

The Collector directive EQU forces the tag CBMFDSP$ to be evaluated as MFDSP$. An<br />

explicit inclusion of the element that contains the entry point MFDSP$ (in this case the<br />

element name is MFDSP$) is necessary to avoid errors during the collection. Appendix<br />

E lists the names of all the common banks and relocatable entry points and the names of<br />

the <strong>SYSLIB</strong> elements that include them. After the collection, the <strong>SYSLIB</strong> routine<br />

MFDSP$ is an integral part of the new absolute program. This adds about 1,000 words<br />

to the size of the absolute element.<br />

Programs that originally call the relocatable version of a <strong>SYSLIB</strong> routine, for example<br />

I$BJ X11,RFTI$ . BSP$, read file table index<br />

and that wish to call the common bank version of the routine need the following<br />

collector directives:<br />

IN CBEP$$<strong>SYSLIB</strong><br />

EQU RFTI$/CBRFTI$<br />

The Collector directive EQU forces the tag RFTI$ to be evaluated as CBRFTI$. The<br />

explicit inclusion of the element CBEP$$<strong>SYSLIB</strong> is necessary to resolve the reference to<br />

CBRFTI$. The element CBEP$$<strong>SYSLIB</strong> contains all the common bank entry point names<br />

and must be explicitly included in collections that use the EQU directive to switch from<br />

the relocatable version of a <strong>SYSLIB</strong> routine to the common bank version of the routine.<br />

7833 1733–004 3–3


<strong>SYSLIB</strong> Access Methods<br />

This type of switching between relocatable and common bank versions of a routine can<br />

be done as long as the calling program makes use of the I$BJ instruction instead of an<br />

LMJ or LIJ instruction to call the <strong>SYSLIB</strong> routines. For <strong>SYSLIB</strong> routines with a calling<br />

procedure, the field that determines the type of call to make to the routine must be set<br />

to 'CB' (common bank). If the field is set to 'A' (call the common bank version of the<br />

routine using the Auto Switch calling sequence) or left blank (a blank field means call the<br />

relocatable version of the routine), then the calling procedure generates an LMJ<br />

instruction. If an LMJ instruction or an LIJ instruction is generated to call the routine,<br />

then the program cannot switch between the common bank version and the relocatable<br />

version as described above.<br />

The I$BJ instruction is necessary because it remains undefined until the program is<br />

collected. At collection time, the I$BJ is resolved to an LMJ if the label being referenced<br />

resides in the same bank as the instruction referencing it, or it is resolved to an LIJ if the<br />

label is in another bank. Programs written before the implementation of the I$BJ routine<br />

may contain calling sequences such as the one that follows.<br />

LXI,U X11,PIRCB$<br />

LIJ X11,BASCFD$<br />

This sequence requires the calling program to know which common bank contains the<br />

routine as well as the name of the routine. Since the LIJ instruction is explicitly coded<br />

into this program, it always calls the common bank version of the <strong>SYSLIB</strong> ASCII to<br />

Fieldata routine. The program would have to be rewritten and reassembled to make it<br />

reference the relocatable version of the <strong>SYSLIB</strong> routine. A more flexible calling<br />

sequence is<br />

I$BJ X11,CBFDASC$<br />

The I$BJ procedure determines whether or not to generate a call to a common bank<br />

based on the label included on the call, in this case. If a common bank call is generated,<br />

the procedure handles retrieving the bank descriptor index of the common bank. Prior to<br />

executing the above calling sequence, the calling program must ensure that the correct<br />

values required by the <strong>SYSLIB</strong> routine have been loaded into the correct registers.<br />

For more information on common bank calls and the I$BJ routine, consult the Collector<br />

<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

3–4 7833 1733–004


<strong>SYSLIB</strong> Access Methods<br />

3.3. Common Bank Call Using Auto Switch Method<br />

The Auto Switch method of referencing the common bank version of the <strong>SYSLIB</strong><br />

routines requires the calling program to be explicitly aware of its own addressing<br />

structure. The program must know what banks are based and the addressing range of<br />

each bank. To access one of the <strong>SYSLIB</strong> routines, the calling program bases the<br />

particular <strong>SYSLIB</strong> common bank that contains the routine. (See Appendix D and<br />

Appendix E for the list of the <strong>SYSLIB</strong> common banks, the routines that are contained in<br />

them, and the addressing limits of the bank.) The program then executes an LMJ<br />

instruction to the common bank entry-point address minus 1. The calling program must<br />

ensure that none of the banks it has based overlap the <strong>SYSLIB</strong> addressing space.<br />

The advantage to this system is that the program may force the <strong>SYSLIB</strong> common bank<br />

to remain based so that multiple calls to routines in that bank can avoid the expense of<br />

basing the bank again and again. When the I$BJ method of accessing the common bank<br />

routines is used, it unbases the active bank of the calling program, bases the <strong>SYSLIB</strong><br />

common bank, executes the <strong>SYSLIB</strong> routine, then unbases the <strong>SYSLIB</strong> common bank<br />

and bases the calling program once again.<br />

The disadvantage to the Auto Switch method is that the structure of the calling program<br />

needs to be rigidly defined. Any changes to the program must always take into<br />

consideration what banks are based at what times and the addressing range of the<br />

banks. For these reasons, the use of the Auto Switch method is not encouraged. The<br />

Auto Switch calling method can only be used on systems that can base more than one<br />

bank simultaneously using the LIJ instruction.<br />

For the <strong>SYSLIB</strong> routines that have procedures to generate the calling code, the Auto<br />

Switch calling sequence is generated by appropriately setting a parameter on the<br />

procedure call.<br />

7833 1733–004 3–5


<strong>SYSLIB</strong> Access Methods<br />

3–6 7833 1733–004


Section 4<br />

AEDIT$–ASCII Image Composition<br />

Editing Package<br />

The AEDIT$ package is a set of ASCII editing subroutines. The calling program uses<br />

these subroutines to compose strings of ASCII characters in a specified data area.<br />

AEDIT$ is helpful in composing ASCII images for<br />

• ASCII output printed by ER APRINT$, ER APRNTA$, and ER SYMB$ (PRINT$)<br />

• ASCII output punched by ER APUNCH$, ER APNCHA$, and ER SYMB$ (PUNCH$)<br />

• Other Executive requests that require ASCII images, such as ER ASCF$, ER CSI$,<br />

and ER QECL$<br />

• Any other applications that require ASCII images<br />

AEDIT$ uses the full ASCII character set. Images are built up from individual characters<br />

or groups of characters or by copying character strings from other data areas. AEDIT$<br />

allows the calling program to use column settings when composing the ASCII image.<br />

AEDIT$ edits numeric data into ASCII characters. This includes decimal, octal, and<br />

floating-point numbers. The floating-point numbers can be either single-precision or<br />

double-precision. AEDIT$ also creates an ASCII string containing the date and time,<br />

using standard formats. AEDIT$ uses the current date and time, or a date and time<br />

specified by the calling program.<br />

AEDIT$ places the composed image in the data area or buffer provided by the calling<br />

program.<br />

AEDIT$ is reentrant and does not use any D-bank storage. The calling program supplies<br />

the packet for AEDIT$, which is used to pass information to and from the AEDIT$<br />

routines. The size of the AEDIT$ packet is 17 words. The packet format is described in<br />

4.1.<br />

AEDIT$ is available in both relocatable and common bank versions. The relocatable and<br />

common bank entry points for the AEDIT$ routines are listed in Appendix E.<br />

AEDIT$ establishes an "edit mode" while the image is being composed. The edit mode<br />

begins when the A$EDIT or A$EDITR PROCs are called and terminates when the<br />

A$EDITX or A$EPRINT PROCs are called. The AEDIT$ routines use the volatile register<br />

set. In addition, the relocatable version of AEDIT$ saves the contents of and uses<br />

registers X1, X2, and X3 during edit mode. These registers must not be modified during<br />

edit mode. AEDIT$ restores the original contents when exiting edit mode.<br />

7833 1733–004 4–1


AEDIT$–ASCII Image Composition Editing Package<br />

The common bank version of AEDIT$ uses only register X1 during edit mode. If the<br />

calling program modifies X1 during edit mode, it must reset H2 of X1 to the address of<br />

the AEDIT$ packet.<br />

The AEDIT$ editing package consists of five elements:<br />

AEDIT$ General-purpose editing routines<br />

AEDIT$F Floating-point editing routines<br />

AEDIT$P Procedure calls for editing routines<br />

AEDIT$SFDT System standard format date and time editing routines<br />

AEDIT$T Date and time editing routines<br />

AEDIT$ does not reference any other routines. AEDIT$T uses AEDIT$. AEDIT$SFDT<br />

uses AEDIT$ and SFDT$.<br />

The AEDIT$ routines expect input strings to be in the ASCII character set. The $ASCII<br />

MASM directive can be used to insure all generated strings (strings between single<br />

quotes) will be in the ASCII character set. Fieldata mode can be entered after the<br />

AEDIT$ routines by using the $FDATA MASM directive. If strings are generated in an<br />

area of the code that must remain in Fieldata mode, the $CAS (Convert to ASCII String)<br />

function may be used to convert specific strings to ASCII.<br />

4.1. Packet<br />

The calling program must provide a packet for the AEDIT$ routines. The AEDIT$ packet<br />

format and the procedure to generate the packet are described in the following<br />

subsections.<br />

4–2 7833 1733–004


4.1.1. Packet Format<br />

AEDIT$–ASCII Image Composition Editing Package<br />

The format of the AEDIT$ packet is shown in Figure 4–1. This packet format is provided<br />

for information only; the AEDIT$ packet is generated by the MASM procedures<br />

described in 4.1.2. The size of the AEDIT$ packet is 17 words. This packet is used for<br />

all AEDIT$, AEDIT$F, AEDIT$T, and AEDIT$SFDT functions.<br />

If A$EDITPKT is not called to generate the AEDIT$ packet, then the calling program must<br />

supply the fields of the AEDIT$ packet indicated by italics. All other fields in the packet<br />

are reserved for use by AEDIT$, and are not to be used by the calling program.<br />

0 5 6 11 12 17 18 23 24 29 30 35<br />

0 Test and<br />

Set<br />

1 character<br />

index<br />

qwm imagelength<br />

relative word<br />

index<br />

2 fps fpr flag<br />

bits<br />

AEMSG$<br />

character<br />

index<br />

image-address<br />

AEMSG$ word index<br />

zero return address for character store<br />

(22-bit absolute address)<br />

3 user's return address save of original X1 modifier<br />

4 save of original X2 contents, or save of character pointer<br />

5 save of original X3 contents, or save of word pointer<br />

6 msg dpc spc ilx<br />

7 reserved for future use<br />

(must be zero)<br />

digits before<br />

decimal point<br />

digits after<br />

decimal<br />

point<br />

negative<br />

sign<br />

8 final column position exponent's power of 10<br />

9 save area for intermediate floating-point results<br />

10<br />

not<br />

normalized<br />

11 Version date-format time-format error code zero separator<br />

character<br />

12 month<br />

(TDATE$)<br />

day<br />

(TDATE$)<br />

year<br />

(TDATE$)<br />

seconds since midnight (TDATE$)<br />

13 time in milliseconds (TIME$) since midnight<br />

14<br />

15 used by common bank version<br />

16<br />

Figure 4–1. AEDIT$: Packet Format<br />

7833 1733–004 4–3


AEDIT$–ASCII Image Composition Editing Package<br />

4.1.2. Packet Generation PROC<br />

The MASM PROC A$EDITPKT generates the AEDIT$ packet. The calling program<br />

supplies the parameters in italics. The parameters in brackets are optional and may be<br />

omitted. If they are omitted, the default value is used.<br />

Calling Sequence<br />

label A$EDITPKT image-length, image-address [‘MSG’,msg];<br />

[‘FPS’, fps] [‘FPR’, fpr] [‘DPC’, dpc];<br />

[‘SPC’, spc] [‘DFT’, date-format] [‘TFT’, time-format];<br />

[‘SEP’, separator-character]<br />

where:<br />

label<br />

The label that identifies the beginning of the AEDIT$ packet.<br />

image-length<br />

The word length of the data area that is to contain the image. The maximum length<br />

is 63 words. If a larger data area is required, set this field to zero and the ilx field to<br />

the word length, with a maximum length of 511 words.<br />

image-address<br />

msg<br />

fps<br />

fpr<br />

The address of the data area where AEDIT$ constructs the image.<br />

The stop character for the A$EMSG and A$EMSGR subroutines. The default is ‘&'.<br />

The number of digits placed to the left of the decimal point for scientific format,<br />

floating-point editing. The default is 1.<br />

The flag for floating-point rounding.<br />

0 Floating-point numbers are not rounded.<br />

1 Floating-point numbers are rounded (default).<br />

Example with fpr = 1:<br />

Input 1.4356<br />

3 digits printed<br />

Result = 1.44<br />

4–4 7833 1733–004


dpc<br />

spc<br />

AEDIT$–ASCII Image Composition Editing Package<br />

The character that separates the mantissa and the exponent for scientific format,<br />

double-precision, floating-point editing. The default is no character used.<br />

The character that separates the mantissa and the exponent for scientific format,<br />

single-precision, floating-point editing. The default is no character used.<br />

date-format<br />

The date format index (0 through 8), corresponding to the date formats listed in<br />

4.2.4. If set to zero, the date is not formatted; only the time is formatted. The<br />

default is 8.<br />

time-format<br />

The time format index (0 through 3), corresponding to the time formats listed in<br />

4.2.4. If set to zero, the time is not formatted; only the date is formatted. The<br />

default is 2.<br />

separator-character<br />

The character used to separate the date and time formats. It may be either a space<br />

(default) or a dash.<br />

Note: The A$EDITPKT proc sets the flag bits (word 2, bits 12 and 13) to 1 and the<br />

version (word 11, bits 0:5) to 1.<br />

4.1.3. Examples<br />

The following examples generate the AEDIT$ packet from MASM programs.<br />

Example 1<br />

$(2)<br />

PACKET A$EDITPKT 20,ASCIILINE . AEDIT$ packet<br />

ASCIILINE $RES 20 . Data area for ASCII image<br />

In example 1, the MASM procedure A$EDITPKT generates the AEDIT$ packet at the<br />

location PACKET in location counter 2. AEDIT$ stores the generated ASCII string in the<br />

20-word data area at location ASCIILINE. All other parameters are set to the default<br />

values.<br />

7833 1733–004 4–5


AEDIT$–ASCII Image Composition Editing Package<br />

Example 2<br />

LINELEN $EQU 33 . Length of ASCII data area<br />

$(4)<br />

LINE $RES LINELEN . Data area for ASCII image<br />

PACKET A$EDITPK LINELEN,LINE ‘DFT’,2 ‘TFT’, 3 . AEDIT$ packet<br />

In example 2, the MASM procedure A$EDITPKT generates the AEDIT$ packet for ASCII<br />

editing with date and time formats. AEDIT$ stores the generated ASCII string in the 33word<br />

data area at location LINE. AEDIT$ uses date format index 2 and time format<br />

index 3. AEDIT$ uses the default values for the msg, fps, fpr, dpc, spc, and separatorcharacter<br />

parameters.<br />

Example 3<br />

BUFLEN $EQU 8 . Length of buffer for f-p number<br />

$(2)<br />

FPNUM $RES BUFLEN . Buffer for floating-point number<br />

FPPKT A$EDITP BUFLEN,FPNUM ‘FPR’,0 ‘DPC’,’D’ . AEDIT$ packet<br />

In example 3, the MASM procedure A$EDITPKT generates the AEDIT$ packet at location<br />

FPPKT. AEDIT$ stores the generated ASCII strings in the eight-word buffer at location<br />

FPNUM. AEDIT$ does not round floating-point numbers and uses a separator character<br />

of 'D'. AEDIT$ uses the default values for the msg, fps, spc, date-format, time-format,<br />

and separator-character parameters.<br />

4.2. Calling Sequence<br />

There are several categories of AEDIT$ routines.<br />

• General-purpose editing routines (see 4.2.1)<br />

• Floating-point editing routines (see 4.2.2)<br />

• Time and date editing routines (see 4.2.3)<br />

• System standard format date and time editing routines (see 4.2.4)<br />

The calling program calls the AEDIT$ routines with MASM PROCs from the element<br />

AEDIT$P. Each routine has a corresponding PROC. The PROCs can call either the<br />

relocatable or common bank version of AEDIT$. The relocatable version is called with an<br />

LMJ on X11 to the relocatable entry point. The common bank version is called with an<br />

IBJ$ on X11 to the common bank entry point or an LMJ on X11 to the common bank<br />

entry point if the Auto Switch method is used.<br />

4–6 7833 1733–004


The general calling format for the AEDIT$ PROCs is<br />

A$Exxxxx [,t] p1,p2<br />

where:<br />

xxxxx<br />

t<br />

p1, p2<br />

Characters for the specific AEDIT$ PROC call.<br />

AEDIT$–ASCII Image Composition Editing Package<br />

The type of call to AEDIT$. This parameter is optional and may be omitted. CB or A,<br />

if specified, must be enclosed by apostrophes.<br />

The possible values of t are<br />

blank Call the relocatable version of AEDIT$. This is the default if t is omitted.<br />

'CB' Call the common bank version of AEDIT$.<br />

'A' Call the common bank version of AEDIT$ using the Auto Switch method.<br />

Parameters specific to the individual PROC call (see Table 4–1, Table 4–2, and<br />

Table 4–3).<br />

A column pointer is maintained by AEDIT$. It is advanced by the number of characters<br />

the calling program inserts when editing. The first column is zero.<br />

Some AEDIT$ PROCs return an error status in register A1. See the individual PROC calls<br />

in Table 4–1, Table 4–2, and Table 4–3 for possible error status codes. Unless<br />

documented, no error status is returned for the PROC calls.<br />

4.2.1. General-Purpose Editing Routines<br />

The calling program must establish an "edit mode" before using the AEDIT$ routines. The<br />

edit mode begins when the A$EDIT PROC is called, and ends when either the A$EDITX<br />

or A$EPRINT PROCs are called.<br />

Edit mode is reestablished by calling the A$EDITR PROC. A$EDITR assumes that a prior<br />

call to the A$EDITX PROC has been made. If A$EDITR is called without a previous call<br />

to A$EDITX results are unpredictable and may be erroneous.<br />

7833 1733–004 4–7


AEDIT$–ASCII Image Composition Editing Package<br />

The sequence which must be used when calling the AEDIT$ routines is<br />

A$EDIT pkt . Establish edit mode.<br />

A$Exxxx p1,p2 . Call the AEDIT$ PROCs<br />

. to perform editing.<br />

A$EDITX . Terminate edit mode (A$EPRINT also<br />

. terminates edit mode).<br />

. .<br />

. . Other processing may take place here.<br />

. .<br />

A$EDITR pkt . Re-establish edit mode.<br />

A$Exxxx p1,p2 . Perform more editing.<br />

A$EDITR . Terminate edit mode (or A$EPRINT<br />

. to print line and terminate).<br />

Table 4–1 describes the AEDIT$ routines to initialize and terminate edit mode. Table 4–2<br />

and Table 4–3 describe the routines that may be called in edit mode.<br />

The AEDIT$ PROCs pass parameters in registers A0 and A1. If the parameters are<br />

omitted on the call, then the corresponding load instructions are not generated, and<br />

AEDIT$ assumes the input data is in the designated registers. The parameters may be<br />

in the instruction word format "*u,*x,j"which may be defined with the MASM $EQUF<br />

directive ("label $EQUF *u,*x,*j") and the $EQUF label specified as the parameter.<br />

Parameters are indicated by p1 and p2 in Table 4–1 and Table 4–2.<br />

4–8 7833 1733–004


AEDIT$–ASCII Image Composition Editing Package<br />

Table 4–1. AEDIT$: Initialization and Termination Editing Routines<br />

PROC Call Generated<br />

Instructions<br />

A$EDIT p1 LA,XU A0,p1<br />

LMJ X11,AEDIT$<br />

A$EDITR p1 LA,XU A0,p1<br />

LMJ X11,AEDITR$<br />

Description<br />

Initialize and establish edit mode.<br />

p1 is the address of the AEDIT$ packet. If p1 is not specified,<br />

the address of the packet must be in A0. S3 of the first word<br />

of the packet is expected to contain the number of words in the<br />

image area, and H2 of the first word of the packet is expected<br />

to contain the location of the image area. The image is set to<br />

blanks, and edit mode is established. The column pointer is set<br />

to the start of the image. AEDIT$ enters quarter-word mode.<br />

AEDIT$ returns a status code in register A1. If A1 is zero, no<br />

error occurred; if A1 is nonzero, an error occurred and AEDIT$<br />

terminates with an ER ERR$. See Table 4–5 for an explanation<br />

of error status codes.<br />

Reenter edit mode without initializing.<br />

A$EDITX LMJ X11,AEDITX$ Terminate edit mode.<br />

A$EPRINT p1 LA,U A0,p1<br />

LMJ X11,AEPRINT$<br />

If p1 is not specified, the address packet must be in register<br />

A0. Edit mode is reestablished, and the column pointer (saved<br />

by AEDITX$) is restored.<br />

The column pointer is saved in the packet. AEDITX$ returns<br />

with the packet address in A0 and the number of words in the<br />

image in A1.<br />

Print image and leave editing mode (call AEDITX$).<br />

Parameter p1 specifies the line spacing for the image. See the<br />

A$EPRINT description in Table 4–2.<br />

7833 1733–004 4–9


AEDIT$–ASCII Image Composition Editing Package<br />

Table 4–2. AEDIT$: General Purpose ASCII Editing Routines<br />

PROC Call Generated<br />

Instructions<br />

A$ECHAR p1 LA,XU A0,p1<br />

LMJ X11,AECHAR$<br />

Description<br />

Insert the character in p1 into the next position of the data<br />

area.<br />

The character contained in Q4 of A0 is inserted into the data<br />

area.<br />

A$ECLEAR LMJ X11,AECLEAR$ Clear the data area for the ASCII image.<br />

The data area is set to blanks and the column pointer is set to<br />

the start of the data area (column zero).<br />

A$ECOLN LMJ X11,AECOLN Compute the current column number.<br />

A$ECOL p1 LA,XU A0,p1<br />

A$ECOPY<br />

p1,p2<br />

A$EDCFZ<br />

p1,p2<br />

A$EDECF<br />

p1,p2<br />

LMJ X11,AECOL$<br />

LA,U A0,p2<br />

LA,U A1,p1<br />

LMJ X11,AECOPY$<br />

LA A0,p2<br />

LA,U A1,p1<br />

LMJ X11,AEDCFZ$<br />

LA A0,p2<br />

LA,U A1,p1<br />

LMJ X11,AEDECF$<br />

A$EDECV p1 LA A0,p1<br />

LMJ X11,AEDECV$<br />

Returns with the column number in A0.<br />

Position to the column specified in p1.<br />

The column pointer is changed to the number specified in p1.<br />

The first character position of the image is column 0.<br />

Copy a string into the data area.<br />

p2 is expected to contain the address of a string of characters.<br />

A character offset for the first word of the string may be<br />

supplied in H1 of register A0. The offset is in the range 0–3<br />

with 0=Q1, 1=Q2, 2=Q3, and 3=Q4 of the first word.<br />

If the character offset is supplied in H1 of register A0, then the<br />

PROC call should not be used. Instead, the calling sequence<br />

should be coded directly. The number of characters in p1 is<br />

copied from this area into the data area.<br />

Edit a decimal number (fixed length with leading zeros).<br />

Edit p2 to a decimal number right-justified in a field of p1<br />

characters. A leading "-" is added if p2 is negative. The result<br />

overflows the field to the right if it does not fit into the<br />

specified field size.<br />

Leading zeros are produced where AEDECF$ would produce<br />

leading spaces. This routine is convenient for editing decimal<br />

fractions.<br />

Edit a decimal number (fixed length).<br />

Edits p2 to a decimal number right-justified in a field of p1<br />

characters. A leading "--" is added if p2 is negative. The result<br />

overflows the field to the right if it does not fit into the<br />

specified field size.<br />

Edit a decimal number (variable length).<br />

Edits p1 to a decimal number. A leading "-" is added if p1 is<br />

negative. The number of characters generated is a function of<br />

the sign and magnitude of p1.<br />

4–10 7833 1733–004


AEDIT$–ASCII Image Composition Editing Package<br />

Table 4–2. AEDIT$: General Purpose ASCII Editing Routines<br />

PROC Call Generated<br />

Instructions<br />

A$EFD1 p1 LA A0,p1<br />

LMJ X11,AEFD1$<br />

A$EFD2 p1 DL A0,p1<br />

LMJ X11,AEFD2$<br />

A$EMSG p1 LA,U A0,p1<br />

LMJ X11,AEMSG$<br />

Description<br />

Insert one word of ASCII characters.<br />

The four characters in p1 are inserted into the image. ASCII<br />

spaces (040) and null characters (000) are ignored.<br />

Insert two words of ASCII characters.<br />

The eight characters in p1 are inserted into the data area.<br />

Blanks and null characters are ignored.<br />

Message editor initial entry.<br />

A$EMSGR LMJ X11,AEMSGR$ Message editor reentry.<br />

A$EOCTF<br />

p1,p2<br />

LA A0,p2<br />

LA,U A1,p1<br />

LMJ X11,AEOCTF$<br />

A$EOCTV p1 LA A0,p1<br />

A$EPACK<br />

p1,p2<br />

LMJ X11,AEOCTV$<br />

LA,U A0,p2<br />

LA,U A1,p1<br />

LMJ X11,AEPACK$<br />

Copies the characters starting at the address given in p1 into<br />

the data area. This process stops when the character in Q1 of<br />

the sixth word of the packet (stop character) is found. The<br />

pointer to the string is saved in the packet.<br />

The string at address p1 must contain at least one stop<br />

character. A character offset for the first word of the string<br />

may be supplied in H1 of register A0. The offset is in the<br />

range 0–3 with 0=Q1,1=Q2, 2=Q3, and 3=Q4 of the first<br />

word.<br />

If the character offset is supplied in H1 of register A0, then the<br />

PROC call should not be used. Instead, the calling sequence<br />

should be coded directly.<br />

This routine performs the same operation as AEMSG$ except<br />

that the pointer to the input string is taken from the packet.<br />

With these two routines, it is possible to copy a string into the<br />

data area, occasionally interrupting this process to perform<br />

other editing functions at certain selected points in the string.<br />

Edit an octal number (fixed length).<br />

Edits p2 to p1 octal digits. Leading zeros are not suppressed.<br />

P1 must not exceed 12.<br />

Edit an octal number (variable length).<br />

Edits contents of p1 to octal. The number of digits edited<br />

depends on the size of the number. If the number is greater<br />

than seven, a leading zero is added.<br />

Copy and pack a string.<br />

Same as A$ECOPY except that null (000) characters are<br />

ignored. A$QPACK removes the null (000) characters from the<br />

output string while A$ECOPY retains them. Null characters do<br />

not show up in the printed line.<br />

7833 1733–004 4–11


AEDIT$–ASCII Image Composition Editing Package<br />

Table 4–2. AEDIT$: General Purpose ASCII Editing Routines<br />

PROC Call Generated<br />

Instructions<br />

A$EPACK<br />

p1,p2<br />

A$EPRINT p1 LA,U A0,p1<br />

LA,U A0,p2 Copy and pack a string.<br />

LMJ X11,AEPRINT$<br />

A$ESKIP p1 LA,XU A0,p1<br />

LMJ X11,AESKIP$<br />

Print image line and AEDITX$.<br />

Description<br />

The image pointed to by the image location in the packet is<br />

printed and AEDITX$ performed. The line spacing is given in<br />

p1. If the parameter is omitted, a value of one is used.<br />

The AEDIT$ routines do not limit the size of the image that can<br />

be created. However, the size of the image that can be<br />

printed is limited by both the AEPRINT$ routine and the<br />

current print width.<br />

The AEPRINT$ routine has a limit of 63 words or 252 ASCII<br />

characters. If the image contains more than 63 words,<br />

AEPRINT$ prints the first 63 words and ignores the extra<br />

words.<br />

The print width is a control parameter for the Exec printer<br />

handlers. If the length of the image is greater than the current<br />

print width, a type 02 (SYMB) code 04 (SDF image length<br />

error) contingency occurs.<br />

The standard default value for print width is 33 words or 132<br />

ASCII characters. To print an image larger than this, you must<br />

increase the print width by using the print control 'W' function.<br />

Refer to the Exec Request <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for<br />

a description of the print control functions.<br />

Note: To establish the print width for the maximum size<br />

image that can be output by AEPRINT$ (63 words or 252 ASCII<br />

characters), issue a print control "W,42" function. With this<br />

print width, no contingency due to length error will ever occur<br />

when using AEPRINT$. This is because AEPRINT$ prints a<br />

maximum of 63 words of image data and ignores any words<br />

beyond 63.<br />

Advance the column pointer.<br />

The number given in p1 is added to the column pointer.<br />

p1 may be negative.<br />

4–12 7833 1733–004


AEDIT$–ASCII Image Composition Editing Package<br />

Example<br />

The following example shows a MASM program that generates an ASCII string by calling<br />

the relocatable version of AEDIT$.<br />

$ASCII<br />

$INCLUDE ‘MAXR$’<br />

$(2)<br />

LINE $RES 20 . Data area for image<br />

PACKET A$EDITPKT 20,LINE . AEDIT$ packet<br />

STRING ‘The contents of variable’ . ASCII character string<br />

VAR ‘ADDRESS’ . Variable name<br />

VALUE + 02741 . Octal value for variable<br />

$(1)<br />

START<br />

A$EDIT PACKET . Initialize and enter ASCII editing mode<br />

A$ECOL 10 . Move to column 10<br />

A$ECOPY 24,STRING . Copy 24 characters from string to the data area<br />

A$ECHAR ‘


AEDIT$–ASCII Image Composition Editing Package<br />

4.2.2. Floating-Point Editing Routines<br />

AEDIT$F edits floating-point numbers into one of two general formats.<br />

• Fixed decimal format (no exponent)<br />

• Scientific format<br />

Fixed Decimal Format<br />

A number edited in fixed decimal format consists of a sign (if negative) followed by the<br />

digits of the number with an embedded decimal point. The sign is present only if the<br />

number is negative; a positive number has no sign character.<br />

The floating-point editing routines require three parameters in addition to the address of<br />

the floating-point packet. The first two are called x and y and are supplied in S5 and S6<br />

of register A0. They specify the format of the edited number as described below. The<br />

third parameter is the single- or double-precision number to be edited. If single<br />

precision, the number is specified in A1; if double precision, the number is specified in<br />

registers A1 and A2.<br />

The x parameter specifies the width of the edited field; in other words, the number of<br />

character positions that the edited number will occupy, including sign and decimal point.<br />

If the value of x is too small to represent the value being edited, it is ignored, and as<br />

many character positions are used as are required to correctly represent the number.<br />

The y parameter specifies how many fractional digits will be edited. This is the number<br />

of digits appearing to the right of the decimal point. The value of y may be any value<br />

greater than or equal to zero, but should always be less than the value of x to allow for<br />

the sign and decimal point characters.<br />

The maximum number of significant digits for which the floating-point routines can<br />

generate correct results in the fixed decimal format is 8 for single-precision numbers and<br />

17 for double precision. It includes digits on both the sides of the decimal point. This is<br />

because the 2200 single-precision floating-point format uses 27 bits for mantissa which<br />

can represent up to 8 decimal digits. The double-precision floating-point format uses 60<br />

bits for the mantissa which can represent up to 18 decimal digits. Rounding can be done<br />

at a maximum of the 18th digit. This will provide rounded results up to 17 digits. If the<br />

rounding option has been set with a value of y greater than 17 rounding will not be done<br />

by these routines.<br />

For example, the following numbers are in fixed decimal format:<br />

258.61 Requires parameter values of x > 6 and y = 2.<br />

-85.2239 Requires parameter values of x > 8 and y = 4.<br />

1093. Requires parameter values of x > 5 and y = 0.<br />

4–14 7833 1733–004


AEDIT$–ASCII Image Composition Editing Package<br />

Scientific Format<br />

The scientific format is similar to the fixed decimal format, but it has an exponent at the<br />

right. The exponent consists of an optional exponent character (usually 'E' for singleprecision<br />

and 'D' for double-precision numbers) followed by the exponent's sign (either<br />

"+" or "-") and the exponent's digits. Exponents of single-precision numbers are always<br />

edited as a 2-digit value, and those of double-precision numbers are always edited as a<br />

3–digit value.<br />

The x parameter specifies the total number of character positions to be occupied by the<br />

edited number, including signs, digits, decimal point, and exponent character. If the<br />

edited numbers require more character positions than are specified by the value of x, the<br />

x parameter is ignored and the required character positions are used.<br />

The y parameter specifies the total number of mantissa digits to appear in the edited<br />

number. It includes the digits on both sides of the decimal point but not the decimal<br />

point itself. The placement of the decimal point within the y digits of the mantissa is<br />

determined by the value in the packet cell fps. This is the number of digits to appear to<br />

the left of the decimal point. It is normally set to one.<br />

The floating-point routines provide rounding up to 8 significant digits for single-precision<br />

floating-point numbers and 17 significant digits for double-precision floating-point<br />

numbers. This is because the 2200 single-precision and the double-precision formats<br />

use 27 and 60 bits for the mantissa, respectively. These can represent up to 8 and 18<br />

significant digits in these cases. As rounding is done at a maximum of the 18th digit, the<br />

maximum value of y for which a rounded result will be produced is 8 for single-precision<br />

and 17 for double-precision floating-point numbers. The value of x should allow for the<br />

sign, decimal point, the exponent character, the exponent sign, and the exponent digits.<br />

For example, the following numbers are in scientific format:<br />

8.66E+01 Requires parameter values of x ≥ 8 and y = 3.<br />

-1.3375E-10 Requires parameter values of x ≥ 11 and y = 5.<br />

5.164D+003 Requires parameter values of x ≥ 10 and y = 4.<br />

7833 1733–004 4–15


AEDIT$–ASCII Image Composition Editing Package<br />

4.2.2.1. Calling Procedures for the Floating-Point Editing Routines<br />

Table 4–3 describes the floating-point editing routines and the procedures used to call<br />

them.<br />

Table 4–3. AEDIT$F: Floating-Point ASCII Editing Routines<br />

PROC Call Generated<br />

Instructions<br />

A$EFLF1 x*/6+y,p LA A1,p<br />

LA,U A0,x*/6+y<br />

LMJ X11,AEFLF1$<br />

A$EFLF2 x*/6+y,p DL A1,p<br />

LA,U A0,x*/6+y<br />

LMJ X11,AEFLF2$<br />

A$EFLG1 x*/6+y,p LA A1,p<br />

LA,U A0,x*/6+y<br />

LMJ X11,AEFLG1$<br />

A$EFLG2 x*/6+y,p DL A1,p<br />

LA,U A0,x*/6+y<br />

LMJ X11,AEFLG2$<br />

A$EFLS1 x*/6+y,p LA A1,p<br />

LA,U A0,x*/6+y<br />

LMJ X11,AEFLS1$<br />

A$EFLS2 x*/6+y,p DL A1,p<br />

LA,U A0,x*/6+y<br />

LMJ X11,AEFLS2$<br />

Description<br />

Single-precision fixed decimal format.<br />

The floating-point number p is edited to fixed<br />

decimal format with y digits following the decimal<br />

point, right-justified, in a field of size x.<br />

Double-precision fixed decimal format.<br />

The floating-point number p is edited to fixed<br />

decimal format with y digits following the decimal<br />

point, right-justified, in a field of size x.<br />

Single-precision generalized format.<br />

Same as scientific format except that an attempt is<br />

made to move the decimal point in such a way as to<br />

reduce the exponent to zero. If this can be done,<br />

the exponent is set to blanks. Otherwise scientific<br />

format is used.<br />

Double-precision generalized format.<br />

See AEFLG1$ and AEFLS2$.<br />

Single-precision scientific format.<br />

The floating-point number p is edited to scientific<br />

format with y significant digits in a field size of x.<br />

The exponent is two digits long.<br />

Double-precision scientific format.<br />

The floating-point number p is edited to scientific<br />

format with y significant digits in a field size of x.<br />

The exponent is three digits long.<br />

4–16 7833 1733–004


4.2.2.2. Example<br />

AEDIT$–ASCII Image Composition Editing Package<br />

The following example shows a MASM program that generates an ASCII string<br />

containing floating-point numbers with the common bank version of AEDIT$.<br />

$ASCII<br />

$INCLUDE ‘MAXR$’<br />

$(2)<br />

PACKET A$EDITPKT 20,LINE ‘FPS’,0 ‘SPC’,’E’ . AEDIT$ packet<br />

LINE $RES 20 . Image buffer<br />

DIVIDEND + 1.0 . Floating-point 1.0<br />

DEC1 + 1 . Integer 1<br />

DIVISOR + 32.0 . Floating-point 32.0<br />

DEC32 + 32 . Integer 32<br />

QUOTIENT + 0 . Quotient location<br />

STRING ‘ divided by ‘<br />

$(1)<br />

START<br />

A$EDIT,’CB’ PACKET . Enter ASCII edit mode<br />

A$EDECV,’CB’ DEC1 . Edit ASCII ‘1’<br />

A$ECOPY,’CB’ 12,STRING . Copy 12 characters<br />

A$EDECV,’CB’ DEC32 . Edit ASCII ‘32’<br />

A$ECHAR,’CB’ ‘


AEDIT$–ASCII Image Composition Editing Package<br />

The floating-point number at location DIVIDEND is divided by the floating-point number<br />

at location DIVISOR and stored at the location QUOTIENT. The A$EFLS1 procedure<br />

edits the quotient into scientific format. The total number of characters used is 11. Five<br />

of these characters are used for digits.<br />

The A$EPRINT procedure prints the image generated at location LINE by executing an<br />

ER APRINT$ and exits edit mode.<br />

4.2.3. Time and Date Editing Routines<br />

PROC Call<br />

A$EDAY1 p1<br />

A$EDAT1<br />

A$EDAY2 p1<br />

A$EDAT2<br />

A$EDAY3 p1<br />

A$EDAT3<br />

AEDIT$T provides ASCII time and date editing to common formats.<br />

Each of these functions accepts input in ER TDATE$ format. (See the Exec ER<br />

<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.)<br />

month day year (relative to<br />

1964)<br />

number of seconds since midnight<br />

Table 4–4. AEDIT$T: ASCII Time and Date Editing Routines<br />

Generated<br />

Instructions<br />

LA A0,p1<br />

LMJ X11,AEDAY1$<br />

ER TDATE$<br />

LMJ X11,AEDAY1$<br />

LA A0,p1<br />

LMJ X11,AEDAY2$<br />

ER TDATE$<br />

LMJ X11,AEDAY2$<br />

LA A0,p1<br />

LMJ X11,AEDAY3$<br />

ER TDATE$<br />

LMJ X11,AEDAY3$<br />

Description<br />

Edits the date portion of A0 into the format<br />

mm/dd/yy<br />

where mm, dd, yy are the 2 digits of the month, day, and year,<br />

respectively.<br />

Edits the date portion of A0 into the format<br />

dd mmm yy<br />

where dd and yy are the 2 digits of the day and year,<br />

respectively, and mmm is a 3-character abbreviation for the<br />

month.<br />

Edits the date portion of A0 into the format<br />

month dd, year<br />

where month is the name of the month (up to 9 characters), dd is<br />

the day (1 or 2 characters), and year is the 4-digit year.<br />

4–18 7833 1733–004


PROC Call<br />

A$EDAY4 p1<br />

A$EDAT4<br />

A$EDAY5 p1<br />

A$EDAT5<br />

A$ETIME p1<br />

A$ETD<br />

AEDIT$–ASCII Image Composition Editing Package<br />

Table 4–4. AEDIT$T: ASCII Time and Date Editing Routines<br />

Generated<br />

Instructions<br />

LA A0,p1<br />

LMJ X11,AEDAY4$<br />

ER TDATE$<br />

LMJ X11,AEDAY4$<br />

LA A0,p1<br />

LMJ X11,AEDAY5$<br />

ER TDATE$<br />

LMJ X11,AEDAY5$<br />

LA A0,p1<br />

LMJ X11,AETIME$<br />

ER TDATE$<br />

LMJ X11,AETIME$<br />

Description<br />

Edits the date portion of A0 into the format<br />

yearmmdd<br />

where year is the 4-digit year, and mm and dd are the 2 digits of<br />

the month and day, respectively.<br />

Edits the date portion of A0 into the format<br />

yymmdd<br />

where yy, mm, and dd are the 2 digits of the year, month, and<br />

day, respectively.<br />

Edits the time portion of A0 into the format<br />

hh:mm:ss<br />

where hh, mm, and ss are the 2 digits of the hours, minutes, and<br />

seconds of the time, respectively.<br />

4.2.4. Standard Format Date and Time Editing Routines<br />

AEDIT$SFDT is a routine that creates an ASCII string using standard formats for date and<br />

time. The current date and time (or caller-specified date and time) are converted into an<br />

ASCII string and placed into the buffer that the calling program provides. This routine is<br />

used like the other AEDIT$ routines.<br />

There are eight system standard date formats and three system standard time formats:<br />

Date Formats Time Formats<br />

1. YYMMDD 1. HHMM<br />

2. CCYYMMDD 2. HHMM:SS<br />

3. YY-MM-DD 3. HHMM:SS.FFF<br />

4. CCYY-MM-DD<br />

5. YY mmm DD<br />

6. CCYY mmm DD<br />

7. YY mmm DD ddd<br />

8. CCYY mmm DD ddd<br />

7833 1733–004 4–19


AEDIT$–ASCII Image Composition Editing Package<br />

where:<br />

CC<br />

YY<br />

MM<br />

DD<br />

HH<br />

MM<br />

SS<br />

FF<br />

mmm<br />

ddd<br />

Two-digit decimal century<br />

Two-digit decimal year of century<br />

Two-digit decimal month<br />

Two-digit decimal day of month<br />

Two-digit decimal hour<br />

Two-digit decimal minute<br />

Two-digit decimal second<br />

Three-digit decimal fractional second (only significant digits included)<br />

Three ASCII character abbreviation for month (see 22.3, SFDTBL$)<br />

Three ASCII character abbreviation for day of week (see 22.3, SFDTBL$)<br />

The calling program can edit an individual date, individual time, or combined date and<br />

time format. If combined together, the date format precedes the time format, and the<br />

date and time are separated by either a space character (' ') or a dash character ('–'). The<br />

space character separator may be used with all formats. The dash character separator<br />

may only be used with date formats 1 through 4.<br />

4–20 7833 1733–004


4.2.4.1. Recommended Date and Time Formats<br />

AEDIT$–ASCII Image Composition Editing Package<br />

Since there are many possible date and time format combinations, the following formats<br />

are recommended as standard:<br />

YYMMDD HHMM:SS format (1,2) (most compact)<br />

CCYY-MM-DD HHMM:SS format (4,2)<br />

CCYY mmm DD ddd HHMM:SS format (8,2) (most descriptive)<br />

The element SFDTBL$ contains the ASCII character abbreviations for months and days.<br />

It is accessed by the external label SFDTBL$. These abbreviations may be changed to<br />

other abbreviations for months and days, for example, when using languages other than<br />

English.<br />

4.2.4.2. Calling Procedure for Date and Time Editing<br />

The following procedure calls the ASCII system standard format date and time editing<br />

routine:<br />

A$ESFDT[,t] [date] [time]<br />

error return<br />

normal return<br />

where:<br />

t<br />

date<br />

The type of call to AEDIT$SFDT: This parameter is optional and may be omitted.<br />

CB or A, if specified, must be enclosed by apostrophes.<br />

blank<br />

'CB'<br />

'A'<br />

Call the relocatable version of AEDIT$SFDT. This is the default if t is omitted.<br />

Call the common bank version of AEDIT$SFDT.<br />

Call the common bank version of AEDIT$SFDT using the Auto Switch method.<br />

The address of a caller-specified date and time. If specified, it must be in TDATE$<br />

format. This parameter is optional.<br />

7833 1733–004 4–21


AEDIT$–ASCII Image Composition Editing Package<br />

time<br />

The address of a caller-specified time. If specified, it must be in TIME$ format.<br />

This parameter is optional.<br />

If date or time are not included on the calling statement, the current date and time is<br />

used (from ER TDATE$ or current time from ER TIME$ for time format 3). Indexing,<br />

incrementation, indirect addressing, and j-designator selection in the format “*u,*x,j”<br />

may be used to specify date and time if they are defined with the MASM $EQUF<br />

directive ("label $EQUF *u,*x,j") and the $EQUF label is specified as the parameter.<br />

The calling program specifies the date format index and time format index in the AEDIT$<br />

packet. See 4.1.1.<br />

If an error occurs, the error return is taken, and register A1 contains one of the error<br />

codes in Table 4–5. The code is also stored in the packet in field “error code” (see<br />

4.1.1).<br />

If the normal return is taken, the date and time string has been successfully stored in the<br />

caller's data area.<br />

The generated instructions for the relocatable call, if both date and time parameters are<br />

present:<br />

L A0,date<br />

L A1,time<br />

LMJ X11,AESFDT$<br />

4–22 7833 1733–004


4.2.4.3. Example<br />

AEDIT$–ASCII Image Composition Editing Package<br />

The following example shows a MASM program that creates an ASCII string with date<br />

and time formats using the relocatable version of AEDIT$.<br />

$ASCII<br />

$INCLUDE ‘MAXR$’<br />

$(2)<br />

PKT A$EDITPKT 15,DATELINE ‘DFT’,8 ‘TFT’,3 . AEDIT$ packet<br />

DATELINE $RES 15 . Image buffer<br />

MSG ‘Current date and time:’ . Output string<br />

$(1)<br />

START<br />

A$EDIT PKT . Enter edit mode<br />

A$ECOPY 23,MSG . Copy 23 character string<br />

A$ESFDT . Edit the date and time<br />

J ERROR . Jump if error occurred<br />

A$EPRINT . Print out edited string<br />

J DONE .<br />

ERROR . Error return<br />

L$SNAP ‘SFDT’,2 . Dump A-registers<br />

DONE .<br />

ER EXIT$<br />

$END START<br />

This MASM program calls the relocatable version of AEDIT$ to create and print the<br />

following ASCII string:<br />

Current date and time: 1983 Sep 10 Sat 1643:14.057<br />

In this example, AEDIT$ generates the ASCII string in the 15-word data area DATELINE.<br />

The AEDIT$ packet is generated by the A$EDITPKT procedure using date format 8 and<br />

time format 3.<br />

The A$EDIT procedure initializes the AEDIT$ packet at location PKT and enters edit<br />

mode. The A$ECOPY procedure copies 23 characters from location MSG to the data<br />

area (including one space character following the colon). The A$ESFDT procedure call<br />

generates the standard date and time format string in the data area. Since no date or<br />

time parameters are specified on the A$ESFDT procedure call, the current date and time<br />

are used.<br />

If A$ESFDT takes the error return, the A-registers are dumped by the L$SNAP procedure<br />

call. Otherwise, the A$EPRINT procedure prints the image generated at location<br />

DATELINE by executing an ER APRINT$. Edit mode is then exited.<br />

7833 1733–004 4–23


AEDIT$–ASCII Image Composition Editing Package<br />

4.2.5. Error Status Codes<br />

The status codes listed in Table 4–5 are returned in register A1 when an error occurs in<br />

some of the AEDIT$ routines.<br />

Table 4–5. AEDIT$: Error Status Codes<br />

Octal Code Status<br />

0 Normal return from A$ESFDT.<br />

01 A prelevel 75R1 <strong>SYSLIB</strong> AEDIT$ packet format is being used.<br />

02 An outdated version of the AEDIT$ packet is being used.<br />

03 The date format index is out of range.<br />

04 The time format index is out of range.<br />

05 Both of the date and time formats are zero.<br />

06 The common bank version of AEDIT$ is being called without<br />

using the A$EDITPKT PROC to generate the AEDIT$ packet.<br />

4–24 7833 1733–004


4.2.6. Examples<br />

AEDIT$–ASCII Image Composition Editing Package<br />

The following table contains examples of AEDIT$ PROC calls and the instructions that<br />

the PROC call generates.<br />

Procedure Call Generated Instructions<br />

A$ECHAR ‘A’ LA,U A0,’A’<br />

LMJ X11,AECHAR$<br />

A$ECHAR *TAG,X6,S5 LA,S5 A0,*TAG,X6<br />

LMJ X11,AECHAR$<br />

A$ECHAR,’CB’ I$BJ X11,CBAECHAR$<br />

A$EDECV COUNT,,H2 LA,H2 A0,COUNT<br />

LMJ X11,AEDECV$<br />

A$EDECV LMJ X11,AEDECV$<br />

A$ECOPY 50,LINE LA,U A0,LINE<br />

LA,U A1,50<br />

LMJ X11,AECOPY$<br />

A$ECOPY 50,TAB,X6,W LA A0,TAB,X6<br />

LA,U A1,50<br />

LMJ X11,AECOPY$<br />

A$ECOPY COUNT LA,U A1,COUNT<br />

LMJ X11,AECOPY$<br />

A$EDECF,’A’ 10,COUNT LA A0,COUNT<br />

LA,U A1,10<br />

LMJ X11,CBAEDECF$-1<br />

A$EFLF2 30*/6+18,(1.234D) DL A1,(1.234D)<br />

LA,U A0,30*/6+18<br />

LMJ X11,AEFLF2$<br />

A$EFLF1 20*/6+9 LA,U A0,20*/6+9<br />

LMJ X11,AEFLF1$<br />

7833 1733–004 4–25


AEDIT$–ASCII Image Composition Editing Package<br />

4–26 7833 1733–004


Section 5<br />

BSP$-Program File Basic Service<br />

Package<br />

The Basic Service Package (BSP$) provides an interface between the calling program<br />

and the table of contents (TOC) of a program file.<br />

The program file format is described in the Data Structures <strong>Programming</strong> <strong>Reference</strong><br />

<strong>Manual</strong>. The file table index (FTI) is the control part of the program file. Figure 5-1<br />

contains a general description of the FTI. The FTI describes five tables that are accessed<br />

by the BSP$ functions.<br />

• Element table<br />

• Assembler procedure table<br />

• COBOL procedure table<br />

• FORTRAN/PLUS procedure table<br />

• Relocatable element entry point table<br />

The part of the program file occupied by the five tables is called the TOC.<br />

BSP$ performs the following functions:<br />

• Reads the FTI into a buffer.<br />

• Reads a selected program file table into a buffer.<br />

• Searches a selected program file table for a specific entry.<br />

• Deletes a specific entry in a program file table.<br />

• Locates a program file table entry from its sequence number in the table.<br />

• Changes a specific entry in a program file table.<br />

• Adds an entry to a program file table.<br />

• Writes the last entry referenced back to the file.<br />

• Marks the last entry referenced in a program file table as having been updated.<br />

• Writes a program file table back to the file.<br />

• Writes the FTI back to the file.<br />

Reading the FTI of a previously unwritten file changes that file to a program file. The<br />

table is not written to the file until BSP$ writes the FTI.<br />

7833 1733–004 5–1


BSP$-Program File Basic Service Package<br />

Some guidelines concerning the use of BSP$ are the following:<br />

• There are two basic program file formats. The standard program file (PF) has small<br />

variable-length tables. The large program file (LPF) has large fixed-length tables. For<br />

example, the PF has a normal maximum of 2,671 element table entries that can be<br />

expanded to 5,000 entries, while the LPF has a fixed maximum of 26,146 element<br />

table entries.<br />

• PF and LPF elements are limited to a maximum of 262,143 sectors of text for each<br />

element. A new program file type, the large element program file (LEPF) removes<br />

this limitation and allows elements to have over 262,143 sectors of text, if desired.<br />

An LEPF can be initialized with the small variable-length format of a standard<br />

program file (standard LEPF) or with the large fixed-length format of a large program<br />

file (large LEPF).<br />

• If the calling program attempts to create a program file in a file area in which a file<br />

was previously written, the calling program will receive an error return if the first<br />

word encountered is not the program file identifier constant or if sector 0 is not all<br />

zeros.<br />

• For standard PF format, each table on mass storage begins at the system-defined<br />

sector or at a greater sector if a previous table occupies the defined sector. The<br />

element table always starts at the system-defined sector. The system-defined<br />

sectors and starting sector for element text are the six ‘PFxx$' equates in element<br />

SYS$DEF (see Table 2–4).<br />

• For LPF formats, each table on mass storage begins at the system-defined sector.<br />

The system-defined sectors and starting sector for element text are the six 'LPF$xx'<br />

equates in element SYS$DEF (see Table 2–4).<br />

• For standard PF formats, the system default TOC size is 1,792 sectors (28 tracks).<br />

For LPF formats, the system default TOC size is 40,256 sectors (629 tracks).<br />

• The calling program must provide a 43-word data area (for BSP$). This area is<br />

referred to as the file control table (FCT). The calling program must also provide<br />

main storage buffers for each table read.<br />

• The calling program must request to read the FTI before any other BSP$ functions<br />

are called. The FTI must be in the BSP$ FCT until all BSP$ functions are executed.<br />

• The FTI part of the FCT data area is used by BSP$ to contain necessary information<br />

about the file.<br />

• A table must be read into the caller’s buffer (RPFxxT$ calls) before any operations<br />

are performed on the table.<br />

• BSP$ returns an error code if a table cannot hold another item.<br />

• A table must be written back from the caller's buffer (WPFxxT$ calls) before the<br />

buffer can be used to hold another table.<br />

• BSP$ operates most efficiently when the caller’s buffer is large enough to contain<br />

the entire program file table, including the size of entries to be added to the table.<br />

The current length of each program file is available when the FTI is read.<br />

• Each table that has been modified must be written back to the program file table of<br />

contents on mass storage.<br />

5–2 7833 1733–004


BSP$-Program File Basic Service Package<br />

BSP$ is available in both the <strong>SYSLIB</strong> common bank <strong>SYSLIB</strong>$1 and as a relocatable<br />

element in the <strong>SYSLIB</strong> installation file (SYS$LIB$*<strong>SYSLIB</strong>). The relocatable and common<br />

bank entry points to BSP$ are listed in Appendix E.<br />

5.1. BSP$ Functions<br />

The following descriptions of the BSP$ functions include three calling methods:<br />

relocatable, common bank, and Auto Switch. Entry points to the common bank BSP$<br />

are the same as the relocatble entry points except they are prefixed with the letters CB.<br />

Section 3 describes the <strong>SYSLIB</strong> access methods.<br />

Some BSP$ functions require that the address of a packet be passed as a parameter.<br />

In those cases, a diagram shows the format of the packet. If a field name is italicized,<br />

the caller must provide a value for the field. All element, version, and procedure names<br />

are 12 Fieldata characters, left-justified and space-filled. DF is the delete flag and is set<br />

to one for deleted items. CI is the continuation indicator and is set to one for COBOL<br />

procedure names longer than 12 characters.<br />

5.1.1. Read FTI<br />

The FTI must be read into the data area provided by the caller for the FCT before any<br />

other operations can be performed. If any add, delete, or change operations are<br />

completed, then a WFTI$ call must be done to write the FTI back to the file.<br />

Two functions are available to read the FTI. The RFTI$ function can be used to read an<br />

existing PF or LPF and to initialize an empty file as a PF. The RFTI$$ function, described<br />

later in this section, can be used to read an existing PF, LPF, or LEPF and to initialize an<br />

empty file as a PF, LPF, or LEPF.<br />

The following describes the RFTI$ function:<br />

Calling Sequence<br />

Auto Switch<br />

L,U A0,address-of-FCT<br />

LMJ X11,CBRFTI$-1<br />

error return<br />

normal return<br />

Common Bank or<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

I$BJ X11,CBRFTI$<br />

error return<br />

normal return<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

LMJ X11,RFTI$<br />

error return<br />

normal return<br />

7833 1733–004 5–3


BSP$-Program File Basic Service Package<br />

Parameters<br />

address-of-FCT<br />

Address of data area for BSP$. This data area requires 43 words. Words 0 and 1<br />

must contain an internal file name that is in the Fieldata character set, left-justified,<br />

and space-filled. This data area is referred to as the FCT, and must not be modified<br />

between calls to BSP$ after it has been initialized by RFTI$.<br />

Returns<br />

error return<br />

A0 has one of the following values:<br />

02<br />

04<br />

05<br />

07<br />

010<br />

File is not a program file.<br />

File is not assigned to the run or is not a sector formatted mass storage file.<br />

Program file does not contain a supported revision level.<br />

No starting sector address for large program file table.<br />

Program file does not contain a valid size indicator.<br />

07700000000nn<br />

normal return<br />

nn is error status from ER IOW$.<br />

The FTI is stored in the file control table starting at word FCT+6. The FTI is initialized<br />

in the FCT if an I/O status 05 was returned as RFTI$ attempted to read from the file<br />

name specified in words 0 and 1 of the FCT. If the caller is going to be adding an<br />

element to the file, the next sector location for writing the text of the element is<br />

found at word FCT + 7.<br />

On return, A1, S6 (bits 30 through 35) has the FTI size indicator. A PF will have a<br />

value of 0. An LPF will have a value of 4. A1, bit 29 (octal 0100) is the large-element<br />

text-allowed bit. Since RFTI$ can only be used to access a PF or LPF, bit 29 is<br />

always zero (clear). A1 bits 0 through 28 are always zero.<br />

5–4 7833 1733–004


BSP$-Program File Basic Service Package<br />

Figure 5–1 indicates the arrangement of the program file control table after the FTI is<br />

read.<br />

Figure 5–1. BSP$: File Control Table (FCT)<br />

7833 1733–004 5–5


BSP$-Program File Basic Service Package<br />

The following describes the RFTI$$ function:<br />

Calling sequence<br />

Auto Switch<br />

L,U A0,address-of-FCT<br />

L A1,(BSP$-int-level, lengthof-FCT)<br />

L,U A2,[large-elt text++]sizeindicator<br />

LMJ X11,CBRFTI$$-1<br />

error return<br />

normal return<br />

Parameters<br />

address-of-FCT<br />

Common Bank or<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

A1(BSP$-int-level, lengthof-FCT)<br />

L,U A2,[large-elt text++]sizeindicator<br />

I$BJ X11,CBRFTI$$<br />

error return<br />

normal return<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

L,U A1,(BSP$-int-level, lengthof-FCT)<br />

LMJ A2,[large-elt text++]sizeindicator<br />

LMJ X11,RFTI$$<br />

error return<br />

normal return<br />

Address of data area for BSP$. This data area requires at least 43 words. A data<br />

area of 56 words is recommended to accommodate future BSP$ expansion. Words<br />

0 and 1 of this data area must contain an internal file name that is in Fieldata, leftjustified,<br />

and space-filled. This data area is referred to as the file control table (FCT)<br />

and must not be modified between calls to BSP$ after it has been initialized by<br />

RFTI$$.<br />

BSP$-int-level<br />

The BSP$ interface level required by the calling program. The following values may<br />

be specified:<br />

0 This is the only value supported prior to <strong>SYSLIB</strong> 76R1. It allows access to an<br />

existing PF or LPF and allows an empty file to be initialized as a PF or LPF.<br />

1 This value allows access to an existing PF, LPF or LEPF and allows an empty<br />

file to be initialized as a PF, LPF or LEPF. Note that special care must be<br />

taken when processing elements and element text in an LEPF. See sections<br />

5.1.7 and 5.3 for additional information.<br />

2 This value is supported beginning with <strong>SYSLIB</strong> 76R3. Allows the same file<br />

access and initialization as interface level 1. In addition, returns an indication if<br />

the program file was initialized on this function call.<br />

length-of-FCT<br />

Length in words of the data area provided in register A0.<br />

5–6 7833 1733–004


large-elt-text<br />

BSP$-Program File Basic Service Package<br />

The optional large-element text-allowed control bit is bit 29 (octal 0100) in register<br />

A2. It is used by BSP$ only if an empty file is to be initialized as a program file. If bit<br />

29 is zero (clear), the program file is initialized as a PF or an LPF (as specified by<br />

size-indicator) and elements are limited to 262,143 sectors of element text each. If<br />

this bit is one (set), the program file is initialized as a standard LEPF or a large LEPF<br />

(as specified by size-indicator) and elements are allowed to have over 262,143<br />

sectors of element text each. Note that bit 29 cannot be set unless BSP$ interface<br />

level is at least 1.<br />

size-indicator<br />

Size-indicator is in register A2, S6 (bits 30 through 35). It is used by BSP$ only if an<br />

empty file is to be initialized as a program file and its value determines the format of<br />

the program file. The following values may be specified:<br />

0 Standard PF format.<br />

1 Alternate, unsupported standard PF format. A value of 0 will be substituted.<br />

2 Alternate, unsupported LPF format. A value of 4 will be substituted.<br />

3 Alternate, unsupported LPF format. A value of 4 will be substituted.<br />

4 LPF format.<br />

For values 0 and 1, an empty file will be initialized as a PF if large-elt-text is clear and<br />

as a standard LEPF if large-elt-text is set and if BSP$-int-level is at least 1. For values<br />

2, 3, and 4, an empty file will be initialized as an LPF if large-elt-text is clear and as a<br />

large LEPF if large-elt-text is set and if BSP$-int-level is at least 1.<br />

Returns<br />

error return<br />

A0 has one of the following values:<br />

01<br />

02<br />

03<br />

Specified length of data area for FCT (length-of-FCT) is less than the minimum<br />

required.<br />

File is not a PF.<br />

Specified BSP$ interface level (BSP$-int-level) is not supported by this level of<br />

<strong>SYSLIB</strong>.<br />

7833 1733–004 5–7


BSP$-Program File Basic Service Package<br />

04<br />

05<br />

06<br />

07<br />

010<br />

File is not assigned to the run or is not a sector formatted mass storage file.<br />

PF does not contain a supported revision level.<br />

Specified size indicator (size-indicator) is illegal.<br />

No starting sector address for LPF table.<br />

PF does not contain a valid size indicator.<br />

07700000000nn<br />

normal return<br />

nn is error status from ER IOW$.<br />

The FTI is stored in the FCT starting at word 6 (see Figure 5–1). The FTI is initialized if<br />

the file was empty (I/O status 05) or if the first sector was zeroes. If the caller is<br />

going to be adding an element to the file, the next sector location for writing element<br />

text is found at word FCT+7.<br />

On return A1, S6 (bits 30 through 35) has the FTI size indicator. A standard PF (PF or<br />

standard LEPF) will have a value of 0. An LPF (LPF or large LEPF) will have a value<br />

of 4.<br />

On return A1, bit 29 (octal 0100) is the large-element text-allowed bit. For a PF or<br />

LPF, bit 29 is zero (clear). For an LEPF, bit 29 is one (set).<br />

On return when the BSP$ interface level specified on the RFTI$$ function call is 0 or<br />

1, A1, bit 28 (octal 0200) is zero (clear). On return when the BSP$ interface level<br />

specified on the RFTI$$ function call is 2 or more, A1, bit 28 is the program file<br />

initialized bit. If the file was already a program file, bit 28 is zero (clear). If the file was<br />

empty and was initialized as a program file, bit 28 is one (set).<br />

On return A1, bits 0 through 27 are zeroes.<br />

5–8 7833 1733–004


Example of Using RFTI$$<br />

BSP$-Program File Basic Service Package<br />

The following code fragment illustrates an RFTI$$ calling sequence:<br />

L,U A0,FCT . Address of the File Control Table<br />

L A1,(1,56) . BSP$ interface level 1, 56 word FCT<br />

L,U A2,0100++4 . Initialize empty file to allow large<br />

. element text and as a large program<br />

. file (large LEPF)<br />

I$BJ X11,CBRFTI$$ . Call common banked BSP$<br />

J BSPERR . Error on FTI read/initialize<br />

. Proceed on normal return<br />

5.1.2. Read Program File Table<br />

This table must be read into the calling buffer before any operations are performed on<br />

the table. If any add delete, or change operations were completed, then the table must<br />

be written back to the file with one of the WPFxxT$ calls.<br />

The BSP$ entry points for reading program file tables are<br />

(CB)RPFET$ Read Program File Element Table<br />

(CB)RPFAPT$ Read Program File Assembler Procedure Table<br />

(CB)RPFCPT$ Read Program File COBOL Procedure Table<br />

(CB)RPFEPT$ Read Program File FORTRAN/PLUS Procedure Table<br />

(CB)RPFEPT$ Read Program File Relocatable Element Entry Point Table<br />

Calling Sequence<br />

Auto Switch Common Bank or<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

L A1,(buffer, length)<br />

LMJ X11,CBRPFxxT$-1<br />

error return<br />

normal return<br />

L,U A0,address-of-FCT<br />

L A1,(buffer, length)<br />

I$BJ X11,CBRPFxxT$<br />

error return<br />

normal return<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

L,U A1,(buffer, length)<br />

LMJ X11,RPFxxT$<br />

error return<br />

normal return<br />

7833 1733–004 5–9


BSP$-Program File Basic Service Package<br />

Parameters<br />

buffer<br />

length<br />

The starting address of the buffer that is used for the table.<br />

The length in words of the buffer area reserved for the PF table. Only lengths of 196<br />

words (7 sectors), 224 words (8 sectors), and 28* (5+4n) words (5+4n sectors),<br />

where n is a positive integer, are used by BSP$. The specified length will be<br />

rounded down to the next lower buffer length, if necessary. Only this adjusted<br />

buffer length will be read and written by BSP$. A minimum buffer length of 28*<br />

(5+4*2) or 364 is recommended. For maximum efficiency, the buffer length should<br />

be large enough to contain the entire PF table, including the size of table entries to<br />

be added. The starting address of the buffer plus the length must be less than or<br />

equal to 0777777.<br />

Returns<br />

error return<br />

A0 has one of the following values:<br />

012<br />

013<br />

024<br />

025<br />

044<br />

User does not have FTI in main storage.<br />

No starting sector for large program file table.<br />

User buffer too small. The buffer length should be at least 252 words.<br />

User buffer too large. The starting address of the buffer plus the length of the<br />

buffer exceeded 0777777.<br />

No room in file to create this table.<br />

7700000000xx<br />

I/O error, where xx is the I/O status returned.<br />

5–10 7833 1733–004


normal return<br />

BSP$-Program File Basic Service Package<br />

The buffer is filled with the requested table as read from the PF. If the table length<br />

in words in the FTI is 0214 (the size of the pointer table) or less, the requested table<br />

will not be read from the PF but instead the buffer will be initialized. Buffer<br />

initialization means that the requested table will have its pointer table cleared to zero<br />

and its control word set. H1 of the control word will contain the length of the items<br />

comprising the requested table, and H2 will contain zero for the number of table<br />

items.<br />

5.1.3. Search Table for Requested Item<br />

The search table items are<br />

(CB)ETIS$ Element Table Item Search<br />

(CB)APTIS$ Assembler Procedure Table Item Search<br />

(CB)CPTIS$ COBOL Procedure Table Item Search<br />

(CB)FPTIS$ FORTRAN/PLUS Procedure Table Item Search<br />

(CB)EPTIS$ Relocatable Element Entry Point Table Item Search<br />

Calling Sequence<br />

Auto Switch<br />

L,U A0,address-of-FCT<br />

L,U A1,address-of-searchpacket<br />

LMJ X11,CBxxIS$-1<br />

error or no find<br />

normal return<br />

Returns<br />

error return<br />

A0 has one of the following values:<br />

04<br />

Illegal pointer link<br />

Common Bank or<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

L,U A1,address-of-searchpacket<br />

I$BJ X11,CBxxIS$<br />

error or no find<br />

normal return<br />

Registers returned when A0 = 04<br />

A1 = address of search packet<br />

A2 = 0 or previous sequence number containing bad link<br />

A3 = address of table descriptor in FCT<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

L,U A1,address-of-searchpacket<br />

LMJ X11,xxIS$<br />

error or no find<br />

normal return<br />

7833 1733–004 5–11


BSP$-Program File Basic Service Package<br />

012<br />

A4 = 0 or link identifier (1=pointer, 2=type, 3=version)<br />

A5 = sequence number out of range<br />

No FTI<br />

7700000000xx<br />

no find return<br />

I/O error, where xx is the I/O status returned<br />

A0 has one of the following values:<br />

001<br />

011<br />

021<br />

041<br />

A1 = 0<br />

Pointer table<br />

Pointer link<br />

Type link<br />

Version link<br />

A2 = sequence number of last item referenced<br />

normal return<br />

A0 = item location in buffer (that table was previously read into using RPFxxT$).<br />

A1 = sequence number of item<br />

A2<br />

The first half of A2 (H1) is the link type and has one of the following values:<br />

0 Pointer Table<br />

1 Pointer Link<br />

2 Type Link<br />

3 Version Link<br />

5–12 7833 1733–004


BSP$-Program File Basic Service Package<br />

The second half of A2 (H2) contains 0 or the sequence number of the pointing<br />

item.<br />

Packet Formats for Table Item Search<br />

All elements, versions, and procedure names in the following packets are 12 Fieldata<br />

characters, left-justified and space-filled. DF is the delete flag; it is set to 1 if searching<br />

for deleted items.<br />

• Element Table Item Search Packet<br />

0 11 12 17 18 35<br />

0 element name<br />

1<br />

2 zeros<br />

3 D<br />

F<br />

zeros element type zeros<br />

4 version name<br />

5<br />

• Assembler, FORTRAN, or PLUS Procedure Table Item Search Packet<br />

0 35<br />

0 procedure name<br />

1<br />

2 zeros<br />

3 D<br />

F<br />

zeros<br />

7833 1733–004 5–13


BSP$-Program File Basic Service Package<br />

• COBOL Procedure Table Item Search Packet<br />

The first four words are always present in the search packet. The second four<br />

words are present only if the COBOL procedure name exceeds 12 characters and<br />

word 3 bit 1 (CI) is 1.<br />

0 1 2 35<br />

0 COBOL procedure name (first 12 characters)<br />

1<br />

2 zeros<br />

3 D<br />

F<br />

C<br />

I<br />

4 COBOL procedure name (second 12 characters)<br />

5<br />

6 zeros<br />

7 COBOL procedure name (last 6 characters)<br />

• Entry Point Table Item Search Packet<br />

5–14 7833 1733–004<br />

zeros<br />

0 35<br />

0 entry point name<br />

1<br />

2 zeros<br />

3 D<br />

F<br />

zeros<br />

5.1.4. Delete Item from Requested Table<br />

The BSP$ entry points for deleting program file table items are<br />

(CB)ETID$ Element Table Item Delete<br />

(CB)APTID$ Assembler Procedure Table Item Delete<br />

(CB)CPTID$ COBOL Procedure Table Item Delete<br />

(CB)FPTID$ FORTRAN/PLUS Procedure Table Item Delete<br />

(CB)EPTID$ Relocatable Element Entry Point Table Item Delete


Calling Sequence<br />

BSP$-Program File Basic Service Package<br />

Auto Switch Common Bank or Relocatable Relocatable<br />

L,U A0,address-of-FCT<br />

L,U A1,address-of-deletepacket<br />

LMJ X11,CBxxID$-1<br />

error return or no find<br />

return<br />

normal return<br />

Returns<br />

error return<br />

A0 has one of the following values:<br />

04<br />

012<br />

022<br />

Illegal pointer link<br />

L,U A0,address-of-FCT<br />

L,U A1,address-of-deletepacket<br />

I$BJ X11,CBxxID$<br />

error return or no find<br />

return<br />

normal return<br />

Registers returned when A0 = 04:<br />

A1 = address of delete packet<br />

A2 = 0 or previous sequence number containing bad link<br />

A3 = address of table descriptor<br />

A4 = 0 or link identifier (1=pointer, 2=type, 3=version)<br />

A5 = sequence number out of range<br />

FTI not in main storage<br />

Designated table not in main storage<br />

7700000000xx<br />

I/O error, where xx is the I/O status returned<br />

L,U A0,address-of-FCT<br />

L,U A1,address-of-deletepacket<br />

LMJ X11,xxID$<br />

error return or no find<br />

return<br />

normal return<br />

It may be necessary to write the requested table back to mass storage (WPFxxT$)<br />

and write the FTI (WFTI$) to appropriately update the file for changes that were<br />

successfully made before the error occurred. Otherwise the file is left in a partially<br />

corrupted state.<br />

7833 1733–004 5–15


BSP$-Program File Basic Service Package<br />

no find return<br />

A0 has one of the following values:<br />

001<br />

011<br />

021<br />

041<br />

Pointer table<br />

Pointer<br />

A1 = 0<br />

Type Link<br />

Version link<br />

A2 = sequence number of last item referenced<br />

normal return<br />

Requested item has been deleted from table.<br />

A0 = pointer to item marked as deleted<br />

A1 = sequence number of item marked as deleted<br />

A2 = link type (H1) and sequence number of item pointing to this item (H2)<br />

Packet Formats for Table Item Delete<br />

• Element Table Item<br />

0 11 12 17 18 35<br />

0 element name<br />

1<br />

2 zeros<br />

3 zeros zeros type zeros<br />

4 version name or blank<br />

5<br />

Note: Element type 1 may be used for deleting procedures of types 2, 3, or 4.<br />

5–16 7833 1733–004


BSP$-Program File Basic Service Package<br />

• Assembler, FORTRAN, or PLUS Procedure Table Item Delete Packet<br />

0 35<br />

0 procedure name<br />

1<br />

3 zeros<br />

4 zeros<br />

• COBOL Procedure Table Item Delete Packet<br />

0 1 35<br />

0 COBOL procedure name (first 12 characters)<br />

1<br />

2 zeros<br />

3 0 C<br />

I<br />

4 COBOL procedure name (second 12 characters)<br />

5<br />

6 zeros<br />

7 COBOL procedure name (last six characters)<br />

Note: The first 4 words are included in every CPT Delete Packet. The second 4 words<br />

are included only if the procedure name exceeds 12 characters, and bit 1 of word 3<br />

(Continuation Indicator) is set.<br />

• Entry Point Table Item Delete Packet<br />

0 35<br />

0 entry point name<br />

1<br />

2 zeros<br />

3 zeros<br />

7833 1733–004 5–17


BSP$-Program File Basic Service Package<br />

5.1.5. Entry Look-Up by Number<br />

The BSP$ entry points for looking up program file items by sequence number are<br />

(CB)ETNL$ Element Table Number Look-up<br />

(CB)APTNL$ Assembler Procedure Table Number Look-up<br />

(CB)CPTNL$ COBOL Procedure Table Number Look-up<br />

(CB)FPTNL$ FORTRAN Procedure Table Number Look-up<br />

(CB)EPTNL$ Relocatable Element Entry Point Table Number Look-up<br />

Calling Sequence<br />

Auto Switch<br />

L,U A0,address-of-FCT<br />

L,U A1,sequence-number<br />

LMJ X11,CBxxNL$-1<br />

error return<br />

normal return<br />

Returns<br />

error return<br />

A0 has one of the following values:<br />

04<br />

012<br />

014<br />

022<br />

Sequence number not in table<br />

FTI not in main storage<br />

Common Bank or<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

L,U A1,sequence-number<br />

I$BJ X11,CBxxNL$<br />

error return<br />

normal return<br />

Sequence number is out of range<br />

Table not in main storage<br />

7700000000xx<br />

I/O error, where xx is the I/O status returned<br />

Relocatable<br />

L,,U A0,address-of-FCT<br />

L,U A1,sequence-number<br />

LMJ X11,xxNL$<br />

error return<br />

normal return<br />

5–18 7833 1733–004


A1 = sequence number<br />

A2 = number of entries in table<br />

normal return<br />

BSP$-Program File Basic Service Package<br />

A0 = Location of item in buffer (that table was previously read into using RPFxxT$).<br />

For the CPTNL$ entry point, this is the location of the 4-word block indicated by the<br />

sequence number supplied by the caller.<br />

The COBOL procedure table item may be 4 words or 8 words in length. However,<br />

BSP$ returns the pointer to a 4-word block in register A0. Therefore, the<br />

continuation indicator (bit 1, offset 3 of the item) may be checked to determine the<br />

size of the item. A suggested method of searching the COBOL procedure table is<br />

shown in the following example.<br />

7833 1733–004 5–19


BSP$-Program File Basic Service Package<br />

Example of Using CPTNL$<br />

The following example uses CPTNL$ to search the COBOL procedure table:<br />

$INCLUDE 'MAXR$' .<br />

$(0) .<br />

FCT $RES 34 . File control table<br />

CPTBL $RES 252 . Buffer for COBOL procedure table<br />

FILENAME ‘FILE ‘ . Program file name<br />

CPTNUM $EQUF,H2 0213,X1 . Number of 4 word blocks<br />

$(1) .<br />

START .<br />

DL A6,FILENAME . Get file name<br />

DS A6,FCT . Put it in first two words of FCT<br />

L,U A0,FCT . Get address of FCT<br />

LMJ X11,RFTI$ . Read FTI<br />

J BSPERR . Error return<br />

.<br />

L,U A0,FCT . Get address of FCT<br />

L A1,(CPTBL,252) . Get address, length of buffer<br />

LMJ X11,RPFCPT$ . Read COBOL procedure table<br />

J BSPERR . Error return<br />

.<br />

L,U X1,CPTBL . Get address of buffer for CPTNUM<br />

LA,U A7,0 . Initialize loop counter to zero<br />

LOOP .<br />

L,U A0,FCT . Get address of FCT<br />

AA,U A7,1 . Increment loop counter<br />

L A1,A7 . Set sequence number<br />

LMJ X11,CPTNL$ . Get COBOL item for sequence number<br />

J BSPERR . Error return<br />

.<br />

L,S1 A3,3,A0 . Get continuation indicator bit<br />

TOP,U A3,020 . Is it set?<br />

J 4WORDITEM . No, handle 4 word item<br />

AA,U A7,1 . 8 word item, increment loop counter<br />

. to skip reading next 4-word block<br />

. .<br />

. . handle 8-word item<br />

. .<br />

J CHKLOOP . Check for loop termination<br />

4WORDITEM .<br />

. .<br />

. . handle 4-word item<br />

. .<br />

CHKLOOP . Loop termination code<br />

TE A7,CPTNUM . Last 4-word block reached?<br />

J LOOP . No, keep reading<br />

. .<br />

. .<br />

. .<br />

5–20 7833 1733–004


5.1.6. Change Item in Requested Table<br />

BSP$-Program File Basic Service Package<br />

The entry points to change an item in one of the program file tables are the following<br />

[CB]ETIC$ Change Element Table Item<br />

[CB]APTIC$ Change Assembler Procedure Table Item<br />

[CB]CPTIC$ Change COBOL Procedure Table Item<br />

[CB]FPTIC$ Change FORTRAN/PLUS Procedure Table Item<br />

[CB]EPTIC$ Change Relocatable Element Entry Point Table Item<br />

Calling Sequence<br />

Auto Switch<br />

L,U A0,address-of-FCT<br />

L,U A1,address-of-searchpacket<br />

L,U A2,address-of-new-item<br />

LMJ X11,CBxxIC$-1<br />

error or no find return<br />

normal return<br />

Common Bank or<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

L,U A1,address-of-searchpacket<br />

L,U A2,address-of-new-item<br />

I$BJ X11,CBxxIC$<br />

error or no find return<br />

normal return<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

L,U A1,address-of-searchpacket<br />

L,U A2,address-of-new-item<br />

LMJ X11,xxIC$<br />

error or no find return<br />

normal return<br />

The formats for the Table Item Search Packet are described in 5.1.3, “Search Table for<br />

Requested Item.” The name in this packet is the name of the item to be changed. If an<br />

Element Table Item is to be changed then the element type and version name (if any)<br />

must also be specified. The address of the Table Item Search Packet must be in register<br />

A1.<br />

The formats for the new Table Item are described in 5.1.7, “Add Item to Requested<br />

Table.” The address of the new Table Item must be in register A2.<br />

The new Table Item (address in register A2) will replace the Table Item specified by the<br />

search packet (address in register A1).<br />

Returns<br />

error return (0,X11)<br />

A0 has one of the following values:<br />

004<br />

012<br />

Illegal pointer link<br />

No FTI<br />

7833 1733–004 5–21


BSP$-Program File Basic Service Package<br />

022<br />

045<br />

Designated table not in main storage buffer<br />

New item is different size than search item<br />

07700000000xx<br />

I/O error, xx is I/O status code<br />

It may be necessary to write the requested table back to mass storage (WPFxxT$)<br />

and write the FTI (WFTI$) to appropriately update the file for changes that were<br />

successfully made before the error occurred. Otherwise the file is left in a partially<br />

corrupted state.<br />

no-find return (0,X11)<br />

A0 has one of the following values:<br />

001<br />

011<br />

021<br />

041<br />

Pointer table<br />

Pointer link<br />

Type link<br />

Version link<br />

normal return (1,X11)<br />

A0<br />

A1<br />

A2<br />

Location of changed item in buffer that table was previously read into using<br />

Read Program File Table (RFPxxT$) function<br />

Sequence number of changed item<br />

Sequence number of duplicate item that was deleted (if any)<br />

5–22 7833 1733–004


5.1.7. Add Item to Requested Table<br />

BSP$-Program File Basic Service Package<br />

The BSP$ entry points for adding items to program file tables are<br />

(CB)ETIA$ Element Table Item Add<br />

(CB)APTIA$ Assembler Procedure Table Item Add<br />

(CB)CPTIA$ COBOL Procedure Table Item Add<br />

(CB)FPTIA$ FORTRAN/PLUS Procedure Table Item Add<br />

(CB)EPTIA$ Relocatable Entry Point Table Item Add<br />

Calling Sequence<br />

Auto Switch<br />

L,U A0,address-of-FCT<br />

L,U A1,address-of-addpacket<br />

LMJ X11,CBxxIC$-1<br />

error or no find return<br />

normal return<br />

Returns<br />

error return<br />

A0 has one of the following values:<br />

04<br />

Illegal pointer link<br />

Registers returned when A0 = 04:<br />

012<br />

022<br />

Common Bank or<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

L,U A1,address-of-addpacket<br />

I$BJ X11,CBxxIC$<br />

error return<br />

normal return<br />

A1 = address of packet (search, add, or delete)<br />

A2 = 0 or previous sequence number containing bad link<br />

A3 = address of table descriptor<br />

A4 = 0 or link identifier (1=pointer, 2=type, 3=version)<br />

A5 = sequence number out of range<br />

FTI not in main storage<br />

Designated table not in main storage<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

L,U A1,address-of-addpacket<br />

LMJ X11,xxIC$<br />

error return<br />

normal return<br />

7833 1733–004 5–23


BSP$-Program File Basic Service Package<br />

044<br />

046<br />

047<br />

No room for item<br />

Illegal element type of 1 (subtype 035 only), 2, 3, 4, 5, or 6 for LEPF<br />

Illegal element text length granularity value for LEPF<br />

7700000000xx<br />

I/O error, where xx is the I/O status retured<br />

It may be necessary to write the requested table back to mass storage (WPFxxT$)<br />

and write the FTI (WFTI$) to appropriately update the file for changes that were<br />

successfully made before the error occurred. Otherwise the file is left in a partially<br />

corrupted state.<br />

normal return<br />

Requested item has been added to designated table.<br />

A0 = address in buffer of item added<br />

A1 = new sequence number<br />

A2 = sequence number of duplicate element or 0<br />

If the item being added duplicates an existing item, the existing item is automatically<br />

marked as deleted by BSP$.<br />

If the item being added is for the Element Table (ETIA$ function), the following items<br />

should be noted:<br />

• If the first word of the version name in the packet (word 4) is zeroes, blanks will be<br />

used for the entire version name (words 4 and 5).<br />

• If time and date in the packet (word 9) are zeroes, the current time and date will be<br />

used.<br />

• If this program file is a PF or LPF (RFTI$ or RFTI$$ normal return with A1, bit 29<br />

clear; see 5.1.1), the element may have at most 262,143 sectors of element text.<br />

• If this program file is an LEPF (RFTI$$ normal return with A1, bit 29 set) the element<br />

may have over 262,143 sectors of element text. Additional LEPF considerations are<br />

contained in this section under the packet descriptions for symbolic and omnibus<br />

elements and in 5.3.<br />

• If this program file is an LEPF, procedure elements (element type 1, subtype 035 and<br />

element types 2, 3, and 4), relocatable elements (element type 5), and executable<br />

elements (element type 6) may not be added to the PF.<br />

5–24 7833 1733–004


BSP$-Program File Basic Service Package<br />

• The calling program is responsible for updating the FTI next write location in word<br />

FCT+7 (see Figure 5–1).<br />

• If the element being added is a relocatable element, the Relocatable Element Entry<br />

Point Table control information in the FTI is cleared. This removes the table when<br />

the FTI is written back to the program file.<br />

Packet Formats for Table Item Add<br />

• Symbolic or Procedure Element Add to Element Table<br />

0 5 6 11 12 17 18 23 24 29 30 35<br />

0 element name (Fieldata L.J.S.F.)<br />

1<br />

2 zero<br />

3 flag-bits element-type zero<br />

4 version name or blanks (Fieldata L.J.S.F.)<br />

5<br />

6 cycle limit latest cycle number current number of cycles<br />

7 element<br />

subtype<br />

length of element text<br />

8 sector location of element text on mass storage<br />

9 time element added (or zero) date element added (or zero)<br />

Flag-bits (word 3, bits 0 through 11) include the 2-bit element-text-length granularity<br />

field in bits 1 and 2. The meaning of this field depends on one of the following two<br />

program file types:<br />

• For a PF or LPF, this field is not used and should be zero.<br />

• For an LEPF, this field contains the granularity of the length of element-text field<br />

in word 7.<br />

The following may be specified for element-text-length granularity:<br />

0 Element text length is in number of sectors<br />

1 Element text length is in number of tracks. A track contains<br />

64 sectors.<br />

2 Element text length is in number of positions. A position<br />

contains 64 tracks or 4,096 sectors.<br />

7833 1733–004 5–25


BSP$-Program File Basic Service Package<br />

Element type is<br />

01 If Symbolic Element<br />

02 If Assembler Procedure Element<br />

03 If COBOL Procedure Element<br />

04 If FORTRAN Procedure Element.<br />

A procedure element cannot be added to an LEPF.<br />

Element subtype: see 2.4, SSTYP$.<br />

Length of element text (word 7, bits 6 through 35). The meaning of this field<br />

depends on one of the following two program file types:<br />

• For a PF or LPF, bits 6 through 17 of this field are not used and should be zero.<br />

Bits 18 through 35 are the length of the element text in sectors. This allows a<br />

maximum of 0777777 or 262,143 sectors of element text.<br />

• For an LEPF, the meaning of this field depends on the contents of the flag-bits<br />

element-text-length granularity field, as previously described.<br />

• Relocatable Element Add to Element Table<br />

0 11 12 17 18 35<br />

0 element name (Fieldata L.J.S.F.)<br />

1<br />

2 zero<br />

3 flag-bits type = 5 zero<br />

4 version name or blanks (Fieldata L.J.S.F.)<br />

5<br />

6 location of preamble<br />

7 length of preamble length of relocatable text<br />

8 sector location of element text on mass storage<br />

9 time element added (or zero) date element added (or zero)<br />

5–26 7833 1733–004


BSP$-Program File Basic Service Package<br />

The total length in sectors of the element text is the sum for length of preamble and<br />

length of relocatable text.<br />

A relocatable element cannot be added to an LEPF.<br />

• Executable Element Add to Element Table<br />

0 11 12 17 18 35<br />

0 element name (Fieldata L.J.S.F.)<br />

1<br />

2 zero<br />

3 flag-bits type = 6 zero<br />

4 version name or blanks<br />

5<br />

6 bank informataion<br />

7 zero length of element text<br />

8 sector location of element on mass storage<br />

9 time element added (or zero) date element added (or zero)<br />

An executable element cannot be added to an LEPF.<br />

• Omnibus Element Add to Element Table<br />

0 5 6 11 12 17 18 23 24 29 30 35<br />

0 element name (Fieldata L.J.S.F.)<br />

1<br />

2 zero<br />

3 flag-bits type = 7 zero<br />

4 version name or blanks (Fieldata L.J.S.F.)<br />

5<br />

6 Reserved for use by applications<br />

7 element<br />

subtype<br />

element<br />

subsubtype<br />

length of element text<br />

8 sector location of element text on mass storage<br />

9 time element added (or zero) date element added (or zero)<br />

7833 1733–004 5–27


BSP$-Program File Basic Service Package<br />

Flag-bits (word 3, bits 0 through 11) include the 2-bit element-text-length granularity<br />

field in bits 1 and 2. This field is described following the Symbolic or Procedure<br />

Element Add to Element Table packet.<br />

Element subtype (word 7, bits 0 through 5) is described in section 2.4, SSTYP$.<br />

Length of element text (word 7, bits 12 through 35). The meaning of this field<br />

depends on one of the following two program file types:<br />

• For a PF or LPF, bits 12 through 17 of this field are not used and should be zero.<br />

Bits 18 through 35 are the length of the element text in sectors. This allows a<br />

maximum of 0777777 or 262,143 sectors of element text.<br />

• For an LEPF, the meaning of this field depends on the contents of the flag-bits<br />

element-text-length-granularity field, as described following the Symbolic or<br />

Procedure Element Add to Element Table packet.<br />

• Assembler, FORTRAN, or PLUS Procedure Item<br />

0 1 2 3 4 5 6 17 18 35<br />

0 procedure name<br />

1<br />

2 related element table item number zero<br />

3 D<br />

F<br />

0 A S K 0 relative word location of the procedure in the file<br />

• COBOL Procedure Item Add to COBOL Procedure Table<br />

0 1 2 3 4 5 6 17 18 35<br />

0 COBOL procedure name (first 12 characters)<br />

1<br />

2 related element table item number zero<br />

3 D<br />

F<br />

C<br />

I<br />

A S K 0 relative word location of the procedure in the file<br />

4 COBOL procedure name (second 12 characters)<br />

5<br />

6 zeros<br />

7 COBOL procedure name (final six characters)<br />

Note: The first 4 words must be in all COBOL Procedure Table Add Packets.<br />

The second 4 words will be present only if the COBOL procedure name exceeds<br />

12 characters, and bit 1 of word 3 (continuation indicator) is set to 1.<br />

5–28 7833 1733–004


• Entry Point Table Item Add<br />

BSP$-Program File Basic Service Package<br />

0 17 18 35<br />

0 entry point name<br />

1<br />

2 related element table item number zero<br />

3 D<br />

F<br />

5.1.8. Write Last Item <strong>Reference</strong>d<br />

7833 1733–004 5–29<br />

zeros<br />

The BSP$ entry points for writing out the last item referenced are<br />

(CB)PTEWT$ Part Table Element Table Write<br />

(CB)PTATWT$ Part Table Assembler Procedure Table Write<br />

(CB)PTCTWT$ Part Table COBOL Procedure Table Write<br />

(CB)PTFTWT$ Part Table FORTRAN Procedure Table Write<br />

(CB)PTETWT$ Part Table Entry Point Table Write<br />

Calling Sequence<br />

Auto Switch<br />

L,U A0,address-of-FCT<br />

LMJ X11,CBPTxxWT$-1<br />

Returns<br />

error return<br />

error return<br />

normal return<br />

A0 has one of the following values:<br />

7700000000xx<br />

012<br />

Common Bank or<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

I$BJ X11,CBPTxxWT$<br />

error return<br />

normal return<br />

I/O error, where xx is the I/O status returned<br />

No FTI<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

LMJ X11,PTxxWT$<br />

error return<br />

normal return


BSP$-Program File Basic Service Package<br />

022<br />

024<br />

Table not in main storage. Caller must have first done an RPFxxT$ call.<br />

User error<br />

normal return<br />

Last item referenced written.<br />

This function should be called only if the previous BSP$ functions: search table (xxIS$),<br />

delete item (xxIS$), entry look-up (xxNL$), change item (xxIC$), or add item (xxIA$)<br />

resulted in a normal return. In each case, register A0 has the address of the table item<br />

processed by the function. The PTxxWT$ function will write the 1 or 2 sectors (28 or 56<br />

words) that contain the table item to mass storage. Note the following about this<br />

function:<br />

• It is not necessary to call this function after the delete item, change item, or add<br />

item functions. The modified item will be written to mass storage either before<br />

BSP$ reads the next buffer or when the WPFxx$ function is called.<br />

• This function should be called only if it is determined that the table item must be<br />

written to mass storage immediately.<br />

• This function is very inefficient, particularly if many table items need to be written,<br />

for the following reasons:<br />

− Writing small buffers of 1 or 2 sectors incurs a large amount of overhead.<br />

− Because each table item is only a partial sector, each sector may need to be<br />

written multiple times. For the element table, each sector is written an average<br />

of 3.6 times. For the other program file tables, each sector is written an average<br />

of 7 times.<br />

• The mark item as updated (xxIS$) function (see 5.1.9) should be considered as a<br />

more efficient alternative to this function.<br />

5.1.9. Mark Item as Updated<br />

The BSP$ entry points for marking the last program file table item referenced as having<br />

been updated are:<br />

(CB)ETIU$ Element Table Item Updated<br />

(CB)APTIU$ Assembler Procedure Table Item Updated<br />

(CB)CPTIU$ COBOL Procedure Table Item Updated<br />

(CB)FPTIU$ FORTRAN/PLUS Procedure Table Item Updated<br />

(CB)EPTIU$ Relocatable Element Entry Point Item Updated<br />

5–30 7833 1733–004


Calling Sequence<br />

Auto Switch<br />

L,U A0,address-of-FCT<br />

LMJ X11,CBxxIU$-1<br />

Returns<br />

error return<br />

error return<br />

normal return<br />

A0 has one of the following values:<br />

012<br />

022<br />

normal return<br />

FTI not in main storage.<br />

BSP$-Program File Basic Service Package<br />

Common Bank or<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

I$BJ X11,CBxxIU$<br />

Designated table not in main storage.<br />

error return<br />

normal return<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

LMJ X11,xxIU$<br />

error return<br />

normal return<br />

The last program file table item referenced is marked as having been updated. The<br />

table item will be written to mass storage, either before BSP$ reads the next buffer<br />

or when the WPFxx$ function is called.<br />

This function should be called only if the previous BSP$ search table (xxIS$) or look-up<br />

(xxNL$) function resulted in a normal return and if the caller subsequently modified the<br />

table item pointed to by register A0. The following should be noted about this function:<br />

• It is not necessary to call this function after the delete item (xxID$), change item<br />

(xxIC$) or add item (xxIA$) functions. The table item is already marked as updated<br />

by these functions.<br />

• This function is efficient, since it does not perform any I/O.<br />

• The write last item referenced (PTxxWT$) function described in 5.1.8 should be used<br />

if it determined that the table item must be written to mass storage immediately.<br />

7833 1733–004 5–31


BSP$-Program File Basic Service Package<br />

5.1.10. Write Requested Table Back to Mass Storage<br />

The BSP$ entry points for writing program file tables back to the file are<br />

(CB)WPFET$ Write Program File Element Table<br />

(CB)WPFAPT$ Write Program File Assembler Procedure Table<br />

(CB)WPFCPT$ Write Program File COBOL Procedure Table<br />

(CB)WPFFPT$ Write Program File FORTRAN Procedure Table<br />

(CB)WPFEPT$ Write Program File Entry Point Table<br />

Calling Sequence<br />

Auto Switch<br />

L,U A0,address-of-FCT<br />

LMJ X11,CBWPFxx$-1<br />

error return<br />

normal return<br />

Returns<br />

error return<br />

A0 has one of the following values:<br />

012<br />

022<br />

FTI not in main storage<br />

Common Bank or<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

I$BJ X11,CBWPFxx$<br />

error return<br />

normal return<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

LMJ X11,WPFxx$<br />

error return<br />

normal return<br />

Requested table not in main storage. Caller must have first done an RPFxxT$<br />

call.<br />

7700000000xx<br />

normal return<br />

I/O error, where xx is the I/O status returned.<br />

Designated Table, Pointer Table, and last segment left in main storage, if changed,<br />

are written to mass storage.<br />

5–32 7833 1733–004


5.1.11. Write FTI<br />

Write the FTI back to the program file.<br />

Calling Sequence<br />

Auto Switch<br />

L,U A0,address-of-FCT<br />

LMJ X11,CBWFTI$-1<br />

error return<br />

normal return<br />

Returns<br />

error return<br />

A0 has one of the following values:<br />

042<br />

043<br />

BSP$-Program File Basic Service Package<br />

Common Bank or<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

I$BJ X11,CBWFTI$<br />

error return<br />

normal return<br />

Relocatable<br />

L,U A0,address-of-FCT<br />

LMJ X11,WFTI$<br />

error return<br />

normal return<br />

At least one table has not been written back by a call on Write Program File<br />

Table.<br />

Invalid next sector for text<br />

7700000000xx<br />

normal return<br />

I/O Error, where xx is the I/O status code returned.<br />

The FTI has been written back to mass storage.<br />

7833 1733–004 5–33


BSP$-Program File Basic Service Package<br />

5.2. Example of Using BSP$<br />

The following example uses BSP$ to access a program file:<br />

$(2)<br />

FCT $RES 43 . File control table<br />

ELTTBL $RES 252 . Buffer for element table<br />

FILENAME ‘TESTFILE ‘ . Program file name<br />

ADDPKT . BSP$ add packet<br />

‘NEWPROGRAM ‘ . Element name<br />

+ 0 . Word 2 of add packet<br />

+ 1,0 . Element type (symbolic)<br />

‘VERS-3 ‘ . Element version name<br />

+ 5,0,1 . Element cycle information<br />

+ ELTLEN . Sector length of element text<br />

+ ELTADRR . Address of element text (sector)<br />

+ 0 . Time and date element added<br />

. (filled by BSP$)<br />

.<br />

.<br />

.<br />

$(1)<br />

DL A6,FILENAME . Get file name<br />

DS A6,FCT . Put in top of FCT<br />

L,U A0,FCT . Get address of FCT<br />

LMJ X11,RFTI$ . Read FTI<br />

J BSPERR . Error return<br />

.<br />

L,U A0,FCT . Get address of FCT<br />

L A1,(ELTTBL,252) . Get addr,len of buffer<br />

LMJ X11,RPFET$ . Read element table into buffer<br />

J BSPERR . Error return<br />

.<br />

L,U A0,FCT . Get address of FCT<br />

L,U A1,ADDPKT . Get address of add packet<br />

LMJ X11,ETIA$ . Add the element to the file<br />

J BSPERR . Error return<br />

.<br />

. Write element text, using SDFO (for example)<br />

.<br />

L,U A0,FCT . Get address of FCT<br />

LMJ X11,WPFET$ . Write back the element table<br />

J BSPERR . Error return<br />

L A7,FCT+7 . Get next write location<br />

A,U A7,ELTLEN . Add length of new element<br />

S A7,FCT+7 . Put in FCT<br />

.<br />

L,U A0,FCT . Get address of FCT<br />

LMJ X11,WFTI$ . Write back the<br />

J BSPERR . Error return<br />

.<br />

.<br />

.<br />

5–34 7833 1733–004


BSP$-Program File Basic Service Package<br />

In this example, BSP$ adds an element to a program file. The following two buffers and<br />

one packet are required:<br />

• FCT is for the file control table<br />

• ELTTBL is for the program file element table<br />

• ADDPKT is for a packet that holds information about the element to be added<br />

The first call to BSP$ reads the file control table. The file control table must be read<br />

before any other calls are made to BSP$.<br />

The next call to BSP$ is to read the program file element table. This table must be read<br />

before elements are added, deleted or searched for.<br />

The BSP$ call to ETIA$ adds the element described in the add packet ADDPKT to the<br />

contents in the file TESTFILE. The element name is NEWPROGRAM with version name<br />

VERS-3. It is a symbolic element, cycle 0, with a maximum cycle limit of 5.<br />

ELTLEN is the sector length of the element. ELTADDR is the starting sector address of<br />

the element in the file TESTFILE. The calling program must write the actual text of the<br />

element to the file using the SDFO routine.<br />

When the element is added to the program file element table, the table must be written<br />

back to WPFET$. The next write location is updated by adding the element sector<br />

length to word 7 of the FCT. A call to WFTI$ writes the updated FTI back to the file.<br />

This completes updating of the file.<br />

5.3. LEPF Considerations<br />

This section contains additional information, limitations, restrictions, and considerations<br />

pertaining to LEPFs and their use.<br />

The following are general limitations and restrictions:<br />

• LEPFs are first supported by the BSP$ contained in <strong>SYSLIB</strong> level 76R1. LEPFs are<br />

not recognized as program files by any prior <strong>SYSLIB</strong> level.<br />

• The initial implementation of LEPFs is intended primarily for use by MAPPER, as a<br />

container for large MAPPER reports (symbolic elements) that have over 262,143<br />

sectors of element text.<br />

• Initially, only MAPPER, FURPUR, PCFP, and BSP$ support LEPFs.<br />

• Initially, LEPFs are not supported by the Exec, including the ER PFx$ interface and<br />

the command line interface (@ADD, @START, @XQT, and so on).<br />

• Initially, LEPFs cannot contain procedure elements (element type 1, subtype 035,<br />

and element types 2, 3, and 4), relocatable elements (element type 5), and<br />

executable elements (element type 6).<br />

• Calling programs that are not modified will not recognize LEPFs as program files.<br />

This includes programs that call the relocatable version of BSP$, even when they are<br />

re-collected with <strong>SYSLIB</strong> level 76R1 or higher.<br />

7833 1733–004 5–35


BSP$-Program File Basic Service Package<br />

The following are considerations when reading or initializing the program file FTI with the<br />

RFTI$ or RFTI$$ functions (see 5.1.1):<br />

• Calling programs that use the RFTI$ function will not recognize existing LEPFs and<br />

cannot initialize an empty file as an LEPF. These programs must be modified to use<br />

the RFTI$$ function to read the FTI.<br />

• Calling programs that use the RFTI$$ function must be modified to specify the new<br />

parameter, BSP$ interface level, in register A1, H1. A value of 1 is required to<br />

recognize existing LEPFs and to initialize an empty file as an LEPF.<br />

• The parameter specified in register A2 is ignored if the file is an existing program file.<br />

• On a normal return, the value in register A1 describes the basic program file<br />

characteristics of the file that was read or initialized. Bit 29 of A1 is clear if this file is<br />

a PF or LPF; bit 29 of A1 is set if this file is an LEPF. The calling program should<br />

save the A1 return value so that the contents of existing element table entries can<br />

be correctly interpreted and so that new element table entries can be correctly<br />

formatted.<br />

To correctly interpret the length of element text when reading element table entries with<br />

the ETIS$ function (see 5.1.3) or the ETNL$ function (see 5.1.5), the following need to be<br />

considered:<br />

• When reading elements from a PF or LPF:<br />

− The maximum element text size is 262,143 sectors.<br />

− The element text length in word 7 is stated in sectors for all element types.<br />

− For all element types, the flag bits field, element-text-length granularity (word 3,<br />

bits 1 and 2) is not used and should be ignored.<br />

− For symbolic elements, element-text-length word 7, bits 6 through 17 (S2 and<br />

S3) are not used and should be ignored.<br />

− For omnibus elements, element-text-length word 7, bits 12 through 17 (S3) are<br />

not used and should be ignored.<br />

• When reading elements from an LEPF:<br />

− The maximum element text size is limited only by maximum file size. The<br />

theoretical maximum is 07777764400 or 1,073,735,936 sectors. This is based<br />

on the maximum possible file size minus 1,792 sectors reserved for the TOC of<br />

a standard LEPF.<br />

− Make sure the correct field size is used when loading element-text length from<br />

word 7. For symbolic elements the field size is 30 bits (bits 6 through 35) and<br />

for omnibus elements the field size is 24 bits (bits 12 through 35).<br />

− Once the correct element-text-length value is loaded, the element-text-length<br />

granularity field (word 3, bits 1 and 2) must be examined:<br />

ο If it is 0, element text length is stated in sectors.<br />

ο If it is 1, element text length is stated in tracks. Track granularity can be<br />

converted to sector granularity by multiplying by 64 or by shifting left by 6<br />

bits.<br />

5–36 7833 1733–004


BSP$-Program File Basic Service Package<br />

ο If it is 2, element text length is stated in positions. Position granularity can<br />

be converted to sector granularity by multiplying by 4,096 or by shifting left<br />

by 12 bits.<br />

ο Combinations of element text length and element text length granularity can<br />

result in a number of sectors that are over the theoretical maximum<br />

described above. The result may even be over 36 bits, so maximum value<br />

checks or double-word operations are recommended to determine the<br />

validity of the calculated element text length.<br />

The following are considerations when creating element table entries with the ETIA$<br />

function (see 5.1.7):<br />

• When creating elements in a PF or LPF:<br />

− The maximum element text size is 262,143 sectors.<br />

− The element-text-length granularity (word 3, bits 1 and 2) field should be 0.<br />

− For symbolic elements, element-text-length word 7, bits 6 through 17 (S2 and<br />

S3) should be 0.<br />

− For omnibus elements, element-text-length word 7, bits 12 through 17 (S3)<br />

should be 0.<br />

• When creating elements in an LEPF:<br />

− If the element text is at most 262,143 sectors, use the previous PF and LPF<br />

format for the element table item.<br />

− For efficiency and to avoid wasted mass storage, select the smallest granularity<br />

possible. Sector granularity is the smallest, followed by track and then position.<br />

ο For symbolic elements, the 30-bit element-text-length field is large enough<br />

to describe any element text using sector granularity. Neither track nor<br />

position granularity is needed for symbolic elements.<br />

ο For omnibus elements, the 24-bit element-text-length field is large enough to<br />

describe element text of 16,777,152 sectors using sector granularity. For<br />

element text larger that this, use track granularity. Position granularity is not<br />

needed for omnibus elements.<br />

− When using track or position granularity, make sure that element text length is<br />

rounded up to the next granule, if necessary. For example, 5,000 tracks plus 1<br />

sector (320,001 sectors) must be rounded up to 5,001 tracks (320,064 sectors);<br />

70 positions plus 1 sector (286,721 sectors) must be rounded up to 71 positions<br />

(290,816 sectors).<br />

− If element text length is rounded up, as described above, additional sectors must<br />

be written to pad the element to the proper granule boundary. It is<br />

recommended that sectors containing zeroes be used for the padding. In the<br />

previous examples, the track granularity element would require 63 sectors of<br />

padding and the position granularity element would require 4,095 sectors of<br />

padding.<br />

− When using track or position granularity, make sure that the final element text<br />

length is converted back to number of sectors when updating the FTI next write<br />

location in word FCT+7 (see Figure 5–1).<br />

7833 1733–004 5–37


BSP$-Program File Basic Service Package<br />

5–38 7833 1733–004


Section 6<br />

CABSAD$, CRELAD$–Addressing<br />

Routines<br />

The CABSAD$ routine computes the absolute address for a given address relative to a<br />

location counter. CRELAD$ computes the element name, location counter number, and<br />

address relative to the location number of a caller-specified absolute address.<br />

The following routines are available either as relocatables or common bank absolutes and<br />

can be used in conjunction with D-bank segments above 65K addressing.<br />

When calling the common bank version of the routines, it is necessary to provide a<br />

300-word buffer for their internal use.<br />

6.1. Absolute Addressing Routines<br />

The CABSAD$ routines are called by the MASM procedure C$ABSAD. C$ABSAD is<br />

used to generate the calling sequence for the relocatable version, the common bank<br />

version, or the common bank version using the Auto Switch calling sequence. Section 3<br />

describes the advantages and disadvantages of using the different types of calls.<br />

Calling Format<br />

C$ABSAD[,t] func-code [,p1,p2,p3] [pkt-addr]<br />

error return<br />

normal return<br />

Parameters<br />

t<br />

Type of call to the routine. This parameter is optional and may be omitted. CB or A,<br />

if specified, must be enclosed by apostrophes.<br />

blank Call the relocatable version. This is the default if t is omitted.<br />

'CB' Call the common bank version.<br />

'A' Call the common bank version using the Auto Switch method.<br />

7833 1733–004 6–1


CABSAD$, CRELAD$–Addressing Routines<br />

func-code<br />

The function code determines which of the absolute addressing routines is called by<br />

C$ABSAD. The function codes are described in the sections explaining each of the<br />

functions. The function code must be enclosed by apostrophes.<br />

The only values allowed for the function code on the C$ABSAD procedure call are<br />

CABSAD$, CAINIT$, CBX$, CSX$, and CSYMVL$. Any other value entered for the<br />

function code parameter on the C$ABSAD procedure call causes MASM to generate<br />

an E flag on that line and print the error message.<br />

p1,p2,p3<br />

ILLEGAL C$ABSAD FUNCTION<br />

The use of these parameters depends on the particular routine being called by<br />

C$ABSAD. Some of the routines use only p1; some may use only p1 and p2. In<br />

general, these parameters may be omitted. If so, the calling procedure uses the<br />

values in specific registers for the values of these parameters. Each routine's<br />

subsection describes these parameters.<br />

pkt-addr<br />

Address of the 300-word packet required by the common bank version of the<br />

routines. If this parameter is omitted and the common bank version of the routine is<br />

called (parameter t set to 'A' or 'CB'), then the address in register A5 is used as the<br />

starting address of the packet. This parameter may be omitted if the call is to the<br />

relocatable version of the routines but including it does not cause any problems.<br />

6.1.1. CABSAD$–Compute Absolute Address<br />

CABSAD$ computes the absolute address for a given address relative to a location<br />

counter.<br />

Calling Format<br />

C$ABSAD[,t] ‘CABSAD$’[,rel-addr,lc,elt-name] [pkt-addr]<br />

error return<br />

normal return<br />

Parameters<br />

t<br />

See 6.1.<br />

CABSAD$<br />

CABSAD$ is the function code that determines which of the absolute addressing<br />

routines is called by C$ABSAD. It must be enclosed by apostrophes.<br />

6–2 7833 1733–004


el-addr<br />

lc<br />

CABSAD$, CRELAD$–Addressing Routines<br />

Relative address to be converted. This is the address relative to some location<br />

counter that is converted to an absolute address.<br />

Location counter of the address to be converted. Parameter rel-addr gives the<br />

address to be converted relative to a specific location counter. This parameter tells<br />

the routine which location counter to use. This parameter may be given as an actual<br />

number, a tag that has been equated to an actual number, or the address of a word<br />

that contains the number.<br />

elt-name<br />

Name of the element containing the relocatable address that is to be converted to an<br />

absolute address. The element name may be from 1 to 12 characters selected from<br />

the set A through Z, 0 through 9, and the special characters - and $. If given as a<br />

string, then the parameter must be surrounded by apostrophes on the procedure<br />

call. This parameter can also be given as the address of a two-word area that<br />

contains the name in Fieldata format, left-justified and space-filled.<br />

pkt-addr<br />

See 6.1.<br />

If all of the parameters rel-addr,lc,elt-name are omitted on the call, then the routine uses<br />

the value in register A0 for rel-addr, the value in register A1 for lc, and the value in<br />

registers A2 and A3 for elt-name.<br />

Returns<br />

normal<br />

Register A0 contains the requested absolute address and A1 contains a pointer to<br />

the Segment Load Table (SLT$). If register A1 = 0, either the program is not<br />

segmented or the element lies in the main segment. The absolute address returned<br />

in A0 is always in main storage.<br />

The following instruction causes the instruction immediately after it to be skipped if<br />

the element is in main storage:<br />

TP SLT$,A1<br />

On return, H1 of register A2 contains the length of the specified location counter and<br />

H2 of register A2 contains the starting address of that location counter, for possible<br />

further use.<br />

7833 1733–004 6–3


CABSAD$, CRELAD$–Addressing Routines<br />

error<br />

A0 < 0<br />

A0 > 0<br />

The requested address does not exist. Possible reasons include:<br />

• The executing program does not have this element<br />

• The element has no such location counter<br />

• The location is out of range for that location counter<br />

• The program was collected with the Z option, so there are no diagnostic<br />

tables. See the Collector <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong><br />

• The element is not an absolute element<br />

A0 has an I/O error status code, and register A1 contains the sector address of<br />

the error on mass storage in the file from which the program is loaded.<br />

Reinitializing CABSAD$<br />

If a program using CABSAD$ is checkpointed and restarted, the restart contingency<br />

routine should contain the following instruction to reinitialize the CABSAD$ tables:<br />

SZ *CABSAD$-1<br />

6.1.2. CAINIT$–Initialize CABSAD$<br />

CAINIT$ initializes CABSAD$ to examine the diagnostic tables of an absolute element<br />

other than the one being executed.<br />

CAINIT$ initializes the tables in CABSAD$. The tables point to the diagnostic tables of<br />

an absolute element that is indicated by the file name and header table start address.<br />

Until reinitialized, all references to CABSAD$, CSX$, CBX$, and CSYMVL$ refer to the<br />

specified absolute element. <strong>Reference</strong>s to the Segment Load Table (SLT$) are not valid<br />

unless CABSAD$ is working on the absolute element that is executing.<br />

Calling Format<br />

C$ABSAD[,t] ‘CAINIT$’[,file-name,sector-addr] [pkt-addr]<br />

error return<br />

normal return<br />

Parameters<br />

t<br />

See 6.1.<br />

6–4 7833 1733–004


CAINIT$<br />

CABSAD$, CRELAD$–Addressing Routines<br />

CAINIT$ is the function code that determines which of the absolute addressing<br />

routines is called by C$ABSAD. It must be enclosed by apostrophes.<br />

file-name<br />

Internal name of the file containing the absolute element that the calling program<br />

wishes to examine. The file name may be from 1 to 12 characters selected from the<br />

set A through Z, 0 through 9, and the special characters - and $. If given as a string,<br />

then the parameter must be surrounded by apostrophes on the procedure call. This<br />

parameter may also be given as the address of a two-word area that contains the<br />

name in Fieldata format, left-justified and space-filled.<br />

sector-addr<br />

Sector location of the absolute element in the file named by parameter file-name.<br />

This parameter may be given as an actual number, a tag that has been equated to an<br />

actual number or the address of a word that contains value that is to be used as the<br />

sector address.<br />

pkt-addr<br />

See 6.1.<br />

If both of the parameters file-name and sector-addr are omitted on the call, then the<br />

routine uses the value in the register pair A0 and A1 for file-name and the value in<br />

register A2 for sector-addr.<br />

Error Return<br />

The error return is identical to a CABSAD$ error return.<br />

6.1.3. CBX$–Compute Bank Descriptor Index<br />

CBX$ computes the bank descriptor index (BDI) that corresponds to a given bank name.<br />

Calling Format<br />

C$ABSAD[,t] ‘CBX$’[,bank-name] [pkt-addr]<br />

error return<br />

normal return<br />

Parameters<br />

t<br />

See 6.1.<br />

7833 1733–004 6–5


CABSAD$, CRELAD$–Addressing Routines<br />

CBX$<br />

CBX$ is the function code that determines which of the absolute addressing routines<br />

are called by C$ABSAD. It must be enclosed by apostrophes.<br />

bank-name<br />

Name of the bank for which the routine should find the BDI. The bank name may be<br />

from 1 to 12 characters selected from the set A through Z, 0 through 9, and the<br />

special characters - and $. If given as a string, then the parameter must be<br />

surrounded by apostrophes on the procedure call. This parameter may also be given<br />

as the address of a two-word area that contains the name in Fieldata format, leftjustified<br />

and space-filled.<br />

If the parameter bank-name is omitted, then the routine uses the value in registers<br />

A0 and A1 for bank-name. In this case the bank name must be left justified in the<br />

register pair and space filled. The name must be in Fieldata format.<br />

pkt-addr<br />

See 6.1.<br />

Returns<br />

error<br />

normal<br />

A0 = 0<br />

A0 > 0<br />

The system could not find the specified name in the diagnostic table.<br />

An I/O error occurred. The register contents are the same as for an I/O error<br />

from CABSAD$.<br />

Register A0 contains the requested BDI.<br />

6.1.4. CSX$–Compute Segment Index<br />

CSX$ computes the segment index that corresponds to a given segment name.<br />

The calling program can convert a segment index to a Segment Load Table (SLT$) offset<br />

pointer by multiplying the index by 4. Segment indexes are the values that reference ER<br />

LOAD$. The main segment is an exception.<br />

Calling Format<br />

C$ABSAD[,t] ‘CSX$’[,seg-name] [pkt-addr]<br />

error return<br />

normal return<br />

6–6 7833 1733–004


Parameters<br />

t<br />

CSX$<br />

See 6.1.<br />

CABSAD$, CRELAD$–Addressing Routines<br />

CSX$ is the function code that determines which of the absolute addressing routines<br />

are called by C$ABSAD. It must be enclosed by apostrophes.<br />

seg-name<br />

Name of the segment for which the routine should find the segment index. The<br />

segment name may be from 1 to 12 characters selected from the set A through Z, 0<br />

through 9, and the special characters - and $. If given as a string, then the parameter<br />

must be surrounded by apostrophes on the procedure call. This parameter may also<br />

be given as the address of a two-word area that contains the name in Fieldata<br />

format, left-justified and space-filled.<br />

pkt-addr<br />

See 6.1.<br />

If the parameter seg-name is omitted, then the routine uses the value in registers A0 and<br />

A1 for seg-name. In this case, the bank name must be left-justified in the register pair<br />

and space-filled. The name must be in Fieldata format.<br />

Returns<br />

error<br />

normal<br />

The error conditions are the same as for CBX$.<br />

Register A0 contains the requested segment index.<br />

6.1.5. CSYMVL$–Compute Symbol Value<br />

CSYMVL$ computes the value of an externally defined global symbol.<br />

Calling Format<br />

C$ABSAD[,t] ‘CSYMVL$’[,symbol] [pkt-addr]<br />

error return<br />

normal return<br />

Parameters<br />

t<br />

See 6.1.<br />

7833 1733–004 6–7


CABSAD$, CRELAD$–Addressing Routines<br />

CSYMVL$<br />

CSYMVL$ is the function code that determines which of the absolute addressing<br />

routines are called by C$ABSAD. It must be enclosed by apostrophes.<br />

symbol<br />

Name of the symbol for which the routine computes a value. The symbol name may<br />

be from 1 to 12 characters selected from the set A through Z, 0 through 9, and the<br />

special character $. If given as a string, then the parameter must be surrounded by<br />

apostrophes on the procedure call. This parameter may also be given as the address<br />

of a two-word area that contains the name in Fieldata format, left-justified and spacefilled.<br />

If the parameter symbol is omitted, then the routine uses the value in registers A0<br />

and A1 for symbol. In this case, the name must be left-justified in the register pair<br />

and space-filled. The name must be in Fieldata format.<br />

pkt-addr<br />

See 6.1.<br />

Returns<br />

error<br />

normal<br />

Error conditions are the same as those for CBX$.<br />

Register A0 contains the value of the symbol, and register A1 contains a Segment<br />

Load Table (SLT$) pointer (as discussed for CABSAD$). If the symbol is absolute,<br />

register A1 is always zero. If the collection source uses the TYPE EXTDIAG<br />

statement, any externally defined symbol of the collection may be looked up.<br />

Otherwise, unreferenced symbols and symbols defined in SYS$*RLIB$ elements are<br />

excluded. If the symbol is not global, in other words, if it is defined instead by a<br />

locally included element, one of the local definitions is returned. The definition that<br />

is returned cannot be predicted.<br />

6.2. Relocatable Addressing Routines<br />

The CRELAD$ routines are called by the MASM procedure C$RELAD. C$RELAD is used<br />

to generate the calling sequence for the relocatable version, the common bank version,<br />

or the common bank version using the Auto Switch calling sequence. Section 3<br />

describes the advantages and disadvantages of using the different types of calls.<br />

Calling Format<br />

C$RELAD[,t] func-code [,p1,p2] [pkt-addr]<br />

error return<br />

normal return<br />

6–8 7833 1733–004


Parameters<br />

t<br />

CABSAD$, CRELAD$–Addressing Routines<br />

Type of call to the routine. This parameter is optional and may be omitted. CB or A,<br />

if specified, must be enclosed by apostrophes.<br />

func-code<br />

p1,p2<br />

blank Call the relocatable version. This is the default if t is omitted.<br />

'CB' Call the common bank version.<br />

'A' Call the common bank version using the Auto Switch method.<br />

The function code determines which of the absolute addressing routines are called<br />

by C$RELAD. The function codes are described in the sections explaining each of<br />

the functions. The function code must be enclosed by apostrophes.<br />

The only values allowed for the function code on the C$RELAD procedure call are<br />

CRELAD$, CRINIT$, CBN$, and CSN$. Any other value entered for the function<br />

code parameter on the C$RELAD procedure call causes MASM to generate an E flag<br />

on that line and print the error message<br />

ILLEGAL C$RELAD FUNCTION<br />

The description of these parameters depends on the particular routine being called<br />

by C$RELAD. Some of the routines only use p1; some may use both p1 and p2. In<br />

general, these parameters may be omitted. If so, the calling procedure uses the<br />

values in specific registers for the values of these parameters. Each routine's<br />

subsection describes these parameters.<br />

pkt-addr<br />

Address of the 300-word packet required by the common bank version of the<br />

routines. If this parameter is omitted and the common bank version of the routine is<br />

called (parameter t set to 'A' or 'CB'), then the address in register A5 is used as the<br />

starting address of the packet. This parameter may be omitted if the call is to the<br />

relocatable version of the routines, but including it does not cause any problems.<br />

6.2.1. CRELAD$–Compute Relative Address<br />

CRELAD$ computes the element name, location counter number, and address relative<br />

to the location number of a caller-specified absolute address.<br />

Calling Format<br />

C$RELAD[,t] ‘CRELAD$’[,abs-addr] [pkt-addr]<br />

error return<br />

normal return<br />

7833 1733–004 6–9


CABSAD$, CRELAD$–Addressing Routines<br />

Parameters<br />

t<br />

See 6.1.<br />

CRELAD$<br />

CRELAD$ is the function code that determines which of the absolute addressing<br />

routines is called by C$RELAD. It must be enclosed by apostrophes.<br />

abs-addr<br />

Absolute address that is to be converted to a relative address.<br />

If this parameter is omitted, then the routine uses the value in register A0 for<br />

abs-addr.<br />

pkt-addr<br />

See 6.1<br />

Normal Return<br />

If CRELAD$ returns normally, registers A2 and A3 contain an element name that is<br />

left-justified and space-filled. The relative address values corresponding to the input<br />

absolute address are in two registers: register A1 contains a location counter number,<br />

and register A0 contains an address relative to that location counter.<br />

If the input value in register A0 is not in the range of the program, then register A0 is<br />

unchanged, register A1 is set to zero, the register pair A2, A3 is filled with the Fieldata<br />

characters "*ABSOLUTE*", and the normal return is taken. This case also occurs if the<br />

collection of the absolute is done with the Z option on the call to the Collector. When<br />

the Z option is used on the Collector call, the diagnostic tables are not included in the<br />

absolute element produced, and relative addresses cannot be computed.<br />

On normal return, registers A4 and A5 contain the location counter limits or zeros if the<br />

address was absolute. Register A4 equals the location counter lower limit - 1, and A5<br />

equals the location counter upper limit. The following instruction skips the instruction<br />

immediately after it if x contains an address in the same element and location counter<br />

range as the address on the call to CRELAD$ that computed A4 and A5.<br />

TW A4,x<br />

The calling program can save the computation by calling CRELAD$ using registers A1,<br />

A2, and A3 and computing A0 = x-(A4+1).<br />

The routine must be part of the main segment. Only one activity can use CRELAD$ at<br />

one time.<br />

If more than one element in different segments has addresses corresponding to the<br />

given absolute address, the one in main storage is used. If there is no element in main<br />

storage, an error condition exists.<br />

6–10 7833 1733–004


CABSAD$, CRELAD$–Addressing Routines<br />

Error Return<br />

The error return is taken if an I/O status other than 0 or 5 is encountered. In that case,<br />

register A0 contains the status code, register A1 contains the error address on mass<br />

storage, A2 through A3 contain the Fieldata characters "INPUT ERROR", and A4 through<br />

A5 contain zero.<br />

Reinitializing CRELAD$<br />

If a program using CRELAD$ is checkpointed and restarted, CRELAD$ must be<br />

reinitialized. Use the following instruction in the restart contingency code when calling<br />

the relocatable version.<br />

SZ *CRELAD$-1<br />

When calling the common bank version, store zero into the first word of the 300-word<br />

buffer.<br />

SZ buffer-name<br />

The alternate relocatable calling sequence is<br />

L A0,(bdi,addr)<br />

LMJ X11,CRELAD$<br />

error return<br />

normal return<br />

The alternate common bank calling sequence is<br />

L A0,(bdi,addr)<br />

L,U A5,300-word-buffer-starting-address<br />

I$BJ X11,CB$CRELAD$<br />

error return<br />

normal return<br />

This entry and the previous example provide the same results. The only difference is<br />

that a bank descriptor index is specified in H1 of A0. This is necessary if the address in<br />

H2 of register A0 is in an unbased bank or a bank that overlaps the bank containing<br />

CRELAD$ (usually the control bank) and the address is in the overlap area. Otherwise,<br />

when CRELAD$ performs an ER BANK$ to determine the bank descriptor index for the<br />

address, it obtains the wrong BDI because the CRELAD$ bank descriptor register is then<br />

active.<br />

7833 1733–004 6–11


CABSAD$, CRELAD$–Addressing Routines<br />

6.2.2. CRINIT$–Initialize CRELAD$<br />

CRINIT$ initializes CRELAD$ to examine the diagnostic tables of an absolute element<br />

other than the one the system is executing.<br />

This routine initializes the tables of CRELAD$ so that they point to the diagnostic tables<br />

of the absolute element specified by the calling program. All references to CRELAD$,<br />

CSN$, and CBN$ refer to the specified absolute element until they are reinitialized.<br />

<strong>Reference</strong>s to loaded segments are not meaningful unless CRELAD$ is working on the<br />

absolute element that the system is executing.<br />

Calling Format<br />

C$RELAD[,t] ‘CRINIT$’[,file-name,sector-addr] [pkt-addr]<br />

error return<br />

normal return<br />

Parameters<br />

t<br />

See 6.1<br />

CRINIT$<br />

CRINIT$ is the function code that determines which of the absolute addressing<br />

routines is called by C$RELAD. It must be enclosed by apostrophes.<br />

file-name<br />

Internal name of the file containing the absolute element that the calling program<br />

wishes to examine. The file name may be from 1 to 12 characters selected from the<br />

set A through Z, 0 through 9, and the special characters - and $. If given as a string,<br />

then the parameter must be surrounded by apostrophes on the procedure call. This<br />

parameter may also be given as the address of a two-word area that contains the<br />

name in Fieldata format, left-justified and space-filled.<br />

sector-addr<br />

The sector location of the absolute element in the file named by parameter p1. This<br />

parameter may be given as an actual number, a tag that has been equated to an<br />

actual number or the address of a word that contains a value that is to be used as<br />

the sector address.<br />

6–12 7833 1733–004


pkt-addr<br />

See 6.1<br />

CABSAD$, CRELAD$–Addressing Routines<br />

If both of the parameters file-name and sector-addr are omitted on the call, then the<br />

routine uses the value in registers A0 and A1 for file-name and the value in register A2<br />

for sector-addr.<br />

Error Return<br />

The error return is identical to a CRELAD$ error return.<br />

6.2.3. CBN$–Convert BDI to Symbolic Bank Name<br />

CBN$ determines the symbolic bank name that corresponds to the given BDI and<br />

returns it in registers A0 and A1 in Fieldata format, left-justified, and space-filled.<br />

Calling Format<br />

C$RELAD[,t] ‘CBN$’[,bdi] [pkt-addr]<br />

error return<br />

normal return<br />

Parameters<br />

t<br />

CBN$<br />

bdi<br />

See 6.1.<br />

CBN$ is the function code that determines which of the absolute addressing<br />

routines is called by C$RELAD. It must be enclosed by apostrophes.<br />

bank descriptor index that is to be translated into a bank name. This parameter may<br />

be included as a number, as a tag that has been equated to a number, or as the<br />

address of a word that contains the value of the number.<br />

If parameter bdi is omitted, then the value in register A0 is used as the BDI.<br />

pkt-addr<br />

See 6.1.<br />

Error Return<br />

If A0 = 0 at the error return, the BDI is out of range or refers to a common bank. If A0 ≠<br />

0, an I/O error occurred and the registers contain the same values as for a CRELAD$ I/O<br />

error.<br />

7833 1733–004 6–13


CABSAD$, CRELAD$–Addressing Routines<br />

6.2.4. CSN$–Convert Segment Index to Segment Name<br />

CSN$ determines the symbolic segment name that corresponds to the given segment<br />

index and returns it in registers A0 and A1 in Fieldata format, left-justified, and spacefilled.<br />

Calling Format<br />

C$RELAD[,t] ‘CSN$’[,seg-index] [pkt-addr]<br />

error return<br />

normal return<br />

Parameters<br />

t<br />

CSN$<br />

See 6.1.<br />

CSN$ is the function code that determines which of the absolute addressing<br />

routines is called by C$RELAD. It must be enclosed by apostrophes.<br />

seg-index<br />

Segment index of the segment is to be translated into a segment name. This<br />

parameter may be included as a number, as a tag that has been equated to a<br />

number, or as the address of a word that contains the value of the number.<br />

If the parameter seg-index is omitted, then the value in register A0 is used as the<br />

segment index.<br />

pkt-addr<br />

See 6.1.<br />

Returns<br />

The error and normal returns are the same as for CBN$.<br />

6–14 7833 1733–004


Section 7<br />

CONWRD$–Condition Word Routine<br />

The CONWRD$ routine manipulates bits 7 and 8 of the condition word (bit 0 is the<br />

leftmost bit of the word). These bits indicate whether a task completed successfully or<br />

unsuccessfully, and are defined as follows:<br />

Bit 7 If set, one or more previous tasks had an error.<br />

Bit 8 If set, the most recent task had an error.<br />

See the Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for details on the condition word. The<br />

EXEC extensions to ER SETC$ and @SETC that use bits 7 and 8 of the condition word<br />

are in level 38R2 and higher levels.<br />

CONWRD$ can be called from both MASM or PLUS routines. CONWRD$ is available as<br />

a relocatable element in the <strong>SYSLIB</strong> file (SYS$LIB$*<strong>SYSLIB</strong>) or SYS$*RLIB$ and also in<br />

the <strong>SYSLIB</strong> common bank <strong>SYSLIB</strong>$1. The relocatable and common bank entry points to<br />

CONWRD$ are listed in Appendix E.<br />

7.1. MASM Interface<br />

CONWRD$ is called with the MASM PROC C$ONWRD. This PROC can call CONWRD$<br />

as a relocatable element, a common bank element, or a common bank element using<br />

the Auto Switch method.<br />

CONWRD$ does not return any parameters or status codes to the caller.<br />

Calling format<br />

C$ONWRD[,t] func<br />

normal return<br />

7833 1733–004 7–1


CONWRD$–Condition Word Routine<br />

Parameters<br />

t<br />

func<br />

The type of call to CONWRD$. This parameter is optional and may be omitted. If CB<br />

or A is specified, it must be enclosed by apostrophes.<br />

blank<br />

'CB'<br />

'A'<br />

Call the relocatable version of CONWRD$. This is the default if t is omitted.<br />

Call the common bank version of CONWRD$.<br />

Call the common banked version of CONWRD$ using the Auto Switch method.<br />

The function for CONWRD$ to perform; it must be enclosed by apostrophes.<br />

'SET27$'<br />

Set bit 8 of the condition word; if bit 8 was already set, then set bit 7.<br />

'CLEAR27$'<br />

Clear bit 8 of the condition word; bit 7 is not changed.<br />

Note: The names SET27 and CLEAR27 may appear to be unusual names for these<br />

functions. The reason for this is that they were named when a different numbering<br />

convention for bit positions was being used. Bit position 27 in the old convention<br />

corresponds to bit position 8 in the current convention.<br />

Example<br />

The following example calls CONWRD$ from a MASM routine.<br />

1. $(1)<br />

2. START<br />

.<br />

.<br />

.<br />

3. C$ONWRD ‘SET27$’ . Set bit 8 of the condition word<br />

.<br />

.<br />

4. C$ONWRD,’CB’ ‘CLEAR27$’ . Clear bit 8<br />

In this example, line 3 calls the relocatable version of CONWRD$ to set bit 8 of the<br />

condition word. Line 4 calls the common bank version of CONWRD$ to clear bit 8 of the<br />

condition word.<br />

7–2 7833 1733–004


7.2. PLUS Interface<br />

CONWRD$–Condition Word Routine<br />

CONWRD$ is called from PLUS routines by declaring procedures with the appropriate<br />

entry points.<br />

Calling Sequence<br />

The following entry points are defined for CONWRD$:<br />

CWSET$<br />

Call the relocatable version of CONWRD$ and set bit 8 of the condition word; if bit 8<br />

is already set, then set bit 7 (bit 0 is the leftmost bit of the word).<br />

CWCLEAR$<br />

Call the relocatable version of CONWRD$ and clear bit 8 of the condition word; bit 7<br />

is not changed.<br />

CBCWSET$<br />

Call the common bank version of CONWRD$ and set bit 8 of the condition word; if<br />

bit 8 is already set, then set bit 7.<br />

CBCWCLEAR$<br />

Call the common bank version of CONWRD$ and clear bit 8 of the condition word;<br />

bit 7 is not changed.<br />

Example<br />

The following example calls CONWRD$ from a PLUS routine:<br />

1. PROCEDURE SET_TASK_ERROR IMPORTED (‘CWSET$’);<br />

2. PROCEDURE CLEAR_TASK_ERROR IMPORTED (‘CBCWCLEAR$’);<br />

.<br />

.<br />

.<br />

3. SET_TASK_ERROR; " Set bit 8 of Condition Word<br />

.<br />

.<br />

4. CLEAR_TASK_ERROR; " Clear bit 8<br />

In this example, line 1 declares a procedure to call the relocatable version of CONWRD$<br />

and set bit 8 of the condition word. Line 2 declares a procedure to call the common<br />

bank version of CONWRD$ and clear bit 8 of the condition word. Lines 3 and 4 execute<br />

the calls to CONWRD$ to manipulate the condition word.<br />

7833 1733–004 7–3


CONWRD$–Condition Word Routine<br />

7–4 7833 1733–004


Section 8<br />

EDIT$–Fieldata Image Composition<br />

Editing Package<br />

EDIT$ is a unified collection of routines that may be used to compose strings of Fieldata<br />

characters in an area that you specify. EDIT$ may produce<br />

• Images for the printer and the punch<br />

• Symbiont control images<br />

• Control statements for CSF$<br />

EDIT$ has routines for editing decimal, octal, and floating point (single and double<br />

precision) as well as routines for copying character strings and adjusting column settings.<br />

Routines are also available for editing the time and the date. A versatile collection of<br />

Assembler procedures makes it easy to code for EDIT$.<br />

EDIT$ is reentrant and uses no D-bank storage. Working storage is provided by a 6-word<br />

packet (10 words if floating point is used) provided by the user. The format of this<br />

packet is given in 8.1.<br />

The EDIT$ editing package consists of four elements.<br />

• EDIT$–general-purpose editing routines<br />

• EDIT$T–time and date editing routines<br />

• EDIT$F–floating-point editing routines<br />

• EDIT$P–procedure calls for editing routines<br />

EDIT$ does not reference the other routines. However, both EDIT$T and EDIT$F require<br />

the services of EDIT$.<br />

7833 1733–004 8–1


EDIT$–Fieldata Image Composition Editing Package<br />

8.1. EDIT$–Packet Format<br />

The EDIT$ packet format is as shown in Figure 8–1 (italicized fields are filled by the<br />

caller).<br />

0 ts msg il iloc<br />

1 CIX WIX CIM WIM<br />

2 fps fpr zero RETURN<br />

3 RET SAVE1<br />

4 SAVE2<br />

5 SAVE3<br />

6 dpc spc NDP NDF SIGN ZERO<br />

7 FCOL SCALE<br />

8 VALUE<br />

9<br />

Fields Set by the Caller<br />

ts<br />

msg<br />

il<br />

iloc<br />

fps<br />

fpr<br />

Figure 8–1. EDIT$: Packet Format<br />

This area may be used as a test-and-set flag by the user.<br />

Signal character for EMSG$ and EMSGR$.<br />

Image length in words.<br />

Image location (18-bit address).<br />

Number of digits to be placed to the left of the decimal point for scientific-format,<br />

floating-point editing.<br />

If nonzero, the floating-point rounding option is on; five is added to the first<br />

significant digit after the last significant digit to be printed.<br />

For example, if the input is 1.4356 and 3 digits are to be printed, the result is 1.44.<br />

8–2 7833 1733–004


zero<br />

dpc<br />

spc<br />

Must be zero.<br />

EDIT$–Fieldata Image Composition Editing Package<br />

If nonzero, specifies the character that will separate the mantissa and the exponent<br />

for scientific-format, double-precision, floating-point editing. Normally D if nonzero.<br />

If nonzero, specifies the character that will separate the mantissa and the exponent<br />

for scientific format, single-precision, floating-point editing. Normally E if nonzero.<br />

Fields Maintained by EDIT$<br />

These fields are used only for debugging.<br />

CIX<br />

WIX<br />

CIM<br />

WIM<br />

Used by EDITX$ to save the character index for EDITR$.<br />

Used by EDITX$ to save the relative word index for EDITR$.<br />

Used by EMSG$ and EMSGR$ to save the character index to the input message.<br />

Used by EMSG$ and EMSGR$ to save the word index to the input message.<br />

RETURN<br />

RET<br />

SAVE1<br />

SAVE2<br />

Used as the return point for the character store vector.<br />

Used to save the return point to the user during calls to other EDIT$ functions.<br />

Used to save the modifier portion of X1 during edit mode.<br />

Used to save X2 during edit mode.<br />

7833 1733–004 8–3


EDIT$–Fieldata Image Composition Editing Package<br />

SAVE3<br />

NDP<br />

NDF<br />

SIGN<br />

ZERO<br />

FCOL<br />

SCALE<br />

VALUE<br />

Used to save X3 during edit mode.<br />

Number of digits to be edited before the decimal point.<br />

Number of digits to be edited following the decimal point.<br />

Nonzero if the floating-point number being edited is negative.<br />

Nonzero if the floating-point number being edited was not normalized.<br />

Contains information to facilitate proper positioning of the edited result.<br />

Used to build the exponent.<br />

Used to save intermediate results (two words). (Used only by floating point.)<br />

Packet Generation<br />

Two procedures are available to generate a packet for EDIT$. The E$PKT procedure<br />

generates a 6-word packet, and the E$PKTF procedure generates a 10-word packet<br />

suitable for floating-point editing. The format of the procedure calls is<br />

E$PKT il,iloc [‘MSG’,EMSG$-stop]<br />

E$PKTF il,iloc [‘MSG’,EMSG$-stop]<br />

[‘FPS’,fps-number] [‘FPR’,fpr-number]<br />

[‘DPC’,dpc-char] [‘SPC’,spc-char]<br />

The optional lists override the assumed values to be placed in the fields msg, fps, fpr,<br />

dpc, spc. The assumed values are msg = '&', fps = 1, fpr = 1, dpc = 0, and spc = 0.<br />

The format of an override list consists of the name of the field enclosed in quotes, a<br />

comma, and the value to be used. For example, the following PROC reference<br />

generates a packet that edits floating-point numbers in a format similar to that used by<br />

FORTRAN:<br />

PKT E$PKTF 22,LINE ‘FPS’,0 ‘FPR’,0 ‘SPC’,’E’ ‘DPC’,‘D’<br />

8–4 7833 1733–004


EDIT$–Fieldata Image Composition Editing Package<br />

8.2. EDIT$–General-Purpose Editing Routines<br />

PROC Call<br />

Before using the EDIT$ package, the caller must first establish edit mode by calling the<br />

EDIT$ routine. When edit mode is on, the index registers X1, X2, and X3 are used as<br />

pointers by EDIT$; do not disturb them. The original values of these registers are<br />

restored when edit mode is turned off. The only other registers used by EDIT$ are X11,<br />

A0, A1, A2, A3, and R1. These registers are not saved or restored. Table 8–1 describes<br />

the routines used to initialize and terminate EDIT$.<br />

All EDIT$ routines are called with an LMJ on X11 and expect the parameters in A0, A1,<br />

and A2. A column pointer is maintained by EDIT$; the pointer is advanced by the<br />

number of characters inserted whenever an editing function is performed. The first<br />

column is zero.<br />

Table 8–2 describes the EDIT$ routines.<br />

Each routine in the EDIT$ editing package has a corresponding procedure call. If there<br />

are no parameters, then load instructions are not generated and the input data is<br />

assumed to be in the designated registers. The parameters may be in the format<br />

"*u,*x,j".<br />

When two parameters are required (p1, p2), the first instruction is not generated if p2 is<br />

missing. If both p1 and p2 are missing, neither load instruction is generated. Some of<br />

the procedures do not require any parameters.<br />

Table 8–1. Initialization and Termination<br />

Generated<br />

Instructions<br />

E$DIT p1 LA,U A0,p1<br />

LMJ X11,EDIT$<br />

E$DITR p1 LA,U A0,p1<br />

LMJ X11,EDITR$<br />

Description<br />

Initializes and establishes edit mode.<br />

If p1 is not specified, the address of the packet must be in A0. S3<br />

of the first word of the packet is expected to contain the number<br />

of words in the image area, and H2 of the first word of the packet<br />

is expected to contain the location of the image area. The image is<br />

set to blanks and edit mode is established. The column pointer is<br />

set to the start of the image.<br />

Reenters edit mode.<br />

E$DITX LMJ X11,EDITX$ Terminates edit mode.<br />

E$PRINT p1 LA,U A0,p1<br />

LMJ X11,EPRINT$<br />

If p1 is not specified, the address packet must be in A0. Edit<br />

mode is reestablished and the column pointer (saved by EDITX$) is<br />

restored.<br />

The column pointer is saved in the packet. EDITX$ returns with<br />

the packet address in A0 and the number of words in the image in<br />

A1.<br />

Prints image line and EDITX$.<br />

See EPRINT$ description in Table 8–2.<br />

7833 1733–004 8–5


EDIT$–Fieldata Image Composition Editing Package<br />

PROC Call Generated<br />

Instructions<br />

E$CHAR p1 LA,U A0,p1<br />

Table 8–2. General-Purpose Editing Routines<br />

LMJ X11,ECHAR$<br />

Inserts a character.<br />

E$CLEAR LMJ X11,ECLEAR$ Clears image.<br />

Description<br />

The character contained in S6 of A0 is inserted into the image.<br />

The image is set to blanks and the column pointer is set to the<br />

start of the image (column zero).<br />

E$COLN LMJ X11,ECOLN$ Computes the column number.<br />

E$COL p1 LA,U A0,p1<br />

LMJ X11,ECOL$<br />

E$COPY p1, p2 LA,U A0,p2<br />

LA,U A1,p1<br />

LMJ X11,ECOPY$<br />

E$DCFZ p1, p2 LA A0,p2<br />

LA,U A1,p1<br />

LMJ X11,EDCFZ$<br />

E$DECF p1, p2 LA A0,p2<br />

LA,U A1,p1<br />

LMJ X11,EDECF$<br />

E$DECV p1 LA A0,p1<br />

LMJ X11,EDECV$<br />

E$FD1 p1 LA A0,p1<br />

LMJ X11,EFD1$<br />

E$FD2 p1 DL A0,p1<br />

LMJ X11,EFD2$<br />

Returns with the column number in A0.<br />

Positions to a fixed column.<br />

The column pointer is changed to the number specified in A0.<br />

The first character position of the image is column 0.<br />

Copies a string.<br />

A0 is expected to contain the address of a string of characters.<br />

A0 increment may contain a character offset for the first word<br />

in the range 0–5. Number of characters in A1 is copied from<br />

this area into the image.<br />

Edits decimal (fixed length with leading zero).<br />

Edits A0 to a decimal number right-justified in a field of A1<br />

characters. A leading "-" is added if A0 is negative. The result<br />

overflows the field to the right if it does not fit into the specified<br />

field size. Leading zeros are produced where EDECF$ would<br />

produce leading spaces. This routine is convenient for editing<br />

decimal fractions.<br />

Edits decimal (fixed length).<br />

Edits A0 to a decimal number right-justified in a field of A1<br />

characters. A leading "-" is added if A0 is negative. The result<br />

overflows the field to the right if it does not fit into the specified<br />

field size.<br />

Edits decimal (variable length).<br />

Edits A0 to a decimal number. A leading "-" is added if A0 is<br />

negative. The number of characters generated is a function of<br />

the sign and magnitude of A0.<br />

Inserts Fieldata (one word).<br />

The six characters in A0 are inserted into the image. Blanks and<br />

master spaces are ignored.<br />

Inserts Fieldata (two words).<br />

The 12 characters in A0 and A1 are inserted into the image.<br />

Blanks and master spaces are ignored.<br />

8–6 7833 1733–004


PROC Call Generated<br />

Instructions<br />

EDIT$–Fieldata Image Composition Editing Package<br />

Table 8–2. General-Purpose Editing Routines<br />

E$MSGR LMJ X11,EMSGR$ Message editor reentry.<br />

E$MSG p1 LA,U A0,p1<br />

LMJ X11,EMSG$<br />

E$OCTF p1, p2 LA A0,p2<br />

LA,U A1,p1<br />

LMJ X11,EOCTF$<br />

E$OCTV p1 LA A0,p1<br />

LMJ X11,EOCTV$<br />

E$PACK p1, p2 LA,U A0,p2<br />

LA,U A1,p1<br />

LMJ X11,EPACK$<br />

E$PRINT p1 LA,U A0,p1<br />

LMJ X11,EPRINT$<br />

E$SKIP p1 LA,U A0,p1<br />

LMJ X11,ESKIP$<br />

Description<br />

This routine performs the same operation as EMSG$ except<br />

that the pointer to the input string is taken from the packet.<br />

With these two routines, it is possible to copy a string into the<br />

image, occasionally interrupting this process to perform other<br />

editing functions at certain selected points in the string.<br />

Message editor initial entry.<br />

Copies the characters starting at the address given in A0 into<br />

the image. This process stops when the character in S2 of the<br />

first word of the packet is found. The pointer to this string is<br />

saved in the packet and return is made to the user.<br />

Edit octal (fixed length).<br />

Edits A0 to A1 octal digits. Leading zeros are not suppressed.<br />

A1 must not exceed 12.<br />

Edit octal (variable length).<br />

Edits contents of A0 to octal. The number of digits edited<br />

depends on the size of the number. If the number is greater<br />

than seven, a leading zero is added.<br />

Copies and packs a string.<br />

Same as ECOPY$ except that master spaces are ignored.<br />

Prints image line and EDITX$.<br />

The image pointed to by the image location in the packet is<br />

printed and EDITX$ performed. The line spacing is given in A0.<br />

If the parameter is omitted, a value of one is used.<br />

Advances the column pointer.<br />

The number given in A0 is added to the column pointer. A0<br />

may be negative.<br />

7833 1733–004 8–7


EDIT$–Fieldata Image Composition Editing Package<br />

8.3. EDIT$T–Time and Date Editing Routines<br />

Table 8–3 describes the time and date editing routines.<br />

Each of these routines accepts input in ER TDATE$ format (see the Exec ER<br />

<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>).<br />

Month day year (relative to<br />

1964)<br />

Table 8–3. Time and Date Editing Routines<br />

PROC Call Generated Instructions Description<br />

E$DAY1 p1 LA A0,p1<br />

LMJ X11,EDAY1$<br />

E$DAT1 ER TDATE$<br />

LMJ X11,EDAY1$<br />

E$DAY2 p1 LA A0,p1<br />

LMJ X11,EDAY2$<br />

E$DAT2 ER TDATE$<br />

LMJ X11,EDAY2$<br />

E$DAY3 p1 LA A0,p1<br />

LMJ X11,EDAY3$<br />

E$DAT3 ER TDATE$<br />

LMJ X11,EDAY3$<br />

E$DAY4 p1 LA A0,p1<br />

LMJ X11,EDAY4$<br />

E$DAT4 ER TDATE$<br />

LMJ X11,EDAY4$<br />

E$DAY5 p1 LA A0,p1<br />

LMJ X11,EDAY5$<br />

Edits a date (mm/dd/yy).<br />

number of seconds since midnight<br />

Edits the date portion of A0 into the format<br />

mm/dd/yy<br />

where mm, dd, yy are the 2 digits of the month, day, and year,<br />

respectively.<br />

Edits a date (dd mmm yy).<br />

Edits the date portion of A0 into the format<br />

dd mmm yy<br />

where dd and yy are the 2 digits of the day and year,<br />

respectively, and mmm is a 3-character abbreviation for the<br />

month.<br />

Edits a date (month dd, year).<br />

Edits the date portion of A0 into the format<br />

month dd, year<br />

where month is the name of the month (up to 9 characters),<br />

dd is the day (one or two characters), and year is the 4-digit<br />

year.<br />

Edits a date (yearmmdd).<br />

Edits the date portion of A0 into the format<br />

yearmmdd<br />

where year is the 4-digit year, and mm and dd are the 2 digits<br />

of the month and day, respectively.<br />

Edits a date (yymmdd).<br />

8–8 7833 1733–004


EDIT$–Fieldata Image Composition Editing Package<br />

Table 8–3. Time and Date Editing Routines<br />

PROC Call Generated Instructions Description<br />

E$DAT5 ER TDATE$<br />

LMJ X11,EDAY5$<br />

E$TIME p1 LA A0,p1<br />

LMJ X11,ETIME$<br />

E$TD ER TDATE$<br />

LMJ X11,ETIME$<br />

Edits the date portion of A0 into the format<br />

yymmdd<br />

where yy, mm, and dd are the 2 digits of the year, month, and<br />

day, respectively.<br />

Edits a time.<br />

Edits the time portion of A0 into the format<br />

hh:mm:ss<br />

where hh, mm, and ss are the 2 digits of the hours, minutes,<br />

and seconds of the time, respectively.<br />

8.4. EDIT$F–Floating-Point Editing Routines<br />

The floating-point editing routines require three parameters in addition to the address of<br />

the floating-point packet. The first two are called x and y and are supplied in S5 and S6<br />

of A0. These parameters specify the format of the edited number as described below.<br />

The third parameter is the single- or double-precision number to be edited. If singleprecision,<br />

the number is specified in A1; if double-precision, the number is specified in<br />

A1 and A2.<br />

Edited numbers may appear in one of the two general formats: fixed-decimal format<br />

(no exponent) and scientific format. A number edited in fixed-decimal format consists of<br />

a sign (if negative) followed by the digits of the number and an embedded decimal point.<br />

The sign is present only if the number is negative; a positive number has no sign<br />

character.<br />

The parameter x specifies the width of the edited field, or the number of character<br />

positions the edited number will occupy, including sign and decimal point. If the value of<br />

x is too small to represent the value being edited, it is ignored, and as many character<br />

positions as necessary are used to correctly represent the number.<br />

The parameter y specifies how many fractional digits will be edited. This is the number<br />

of digits appearing to the right of the decimal point. The value of y may be any value<br />

greater than or equal to zero, but should always be less than the value of x to allow for<br />

the sign and decimal point characters.<br />

The scientific format is similar to the fixed-decimal format but has an exponent at the<br />

right. The exponent consists of an optional exponent character (usually 'E' for<br />

single-precision and 'D' for double-precision numbers) followed by the exponent's sign<br />

(either "+" or "-") and digits. Exponents of single-precision numbers are always edited as<br />

a 2-digit value, and those of double-precision numbers are always edited as a 3-digit<br />

value.<br />

7833 1733–004 8–9


EDIT$–Fieldata Image Composition Editing Package<br />

PROC Call<br />

The parameter x specifies the total number of character positions to be occupied by the<br />

edited number, including signs, digits, decimal point, and exponent character. If the<br />

edited numbers require more character positions than specified by the value of x, the<br />

parameter x is ignored, and the required character positions are used.<br />

The parameter y specifies the total number of mantissa digits to appear in the edited<br />

number. It includes the digits on both sides of the decimal point but not the decimal<br />

point itself. The placement of the decimal point within the y digits of the mantissa is<br />

determined by the value in the packet cell FPS. This is the number of digits to appear to<br />

the left of the decimal point. It is normally set to one.<br />

Table 8–4 describes the floating-point editing routines.<br />

Table 8–4. EDIT$F–Floating-Point Editing Routines<br />

Generated<br />

Instructions<br />

E$FLF1 x*/6+y,p LA A1,p<br />

LA,U A0,x*/6+y<br />

LMJ X11,EFLF1$<br />

E$FLF2 x*/6+y,p DL A1,p<br />

LA,U A0,x*/6+y<br />

LMJ X11,EFLF2$<br />

E$FLG1 x*/6+y,p LA A1,p<br />

LA,U A0,x*/6+y<br />

LMJ X11,EFLG1$<br />

E$FLG2 x*/6+y,p DL A1,p<br />

LA,U A0,x*/6+y<br />

LMJ X11,EFLG2$<br />

E$FLS1 x*/6+y,p LA A1,p<br />

LA,U A0,x*/6+y<br />

LMJ X11,EFLS1$<br />

E$FLS2 x*/6+y,p DL A1,p<br />

LA,U A0,x*/6+y<br />

LMJ X11,EFLS2$<br />

Description<br />

Single-precision fixed decimal format.<br />

A1 is edited to fixed decimal format with y digits following the<br />

decimal point, right-justified, in a field of size x.<br />

Double-precision fixed decimal format.<br />

A1, A2 is edited to fixed decimal format with y digits following<br />

the decimal point, right-justified, in a field of size x.<br />

Single-precision generalized format.<br />

Same as scientific format except that an attempt is made to<br />

move the decimal point in such a way as to reduce the<br />

exponent to zero. If this can be done, the exponent is set to<br />

blanks. Otherwise scientific format is used.<br />

Double-precision generalized format.<br />

See EFLG1$ and EFLS2$.<br />

Single-precision, scientific format.<br />

A1 is edited to scientific format with y significant digits in a<br />

field size of x. The exponent is 2 digits long.<br />

Double-precision, scientific format.<br />

A1, A2 is edited to scientific format with y significant digits in<br />

a field size of x. The exponent is 3 digits long.<br />

8–10 7833 1733–004


Section 9<br />

FDASC$–Fieldata/ASCII Data<br />

Conversion<br />

The Fieldata/ASCII conversion routine performs the following character string<br />

conversions:<br />

• Converts Fieldata strings to ASCII (see 9.1.1).<br />

• Converts ASCII strings to Fieldata (see 9.1.2).<br />

The Fieldata/ASCII conversion routine consists of the following two elements:<br />

• FDASC$<br />

− Converts the characters from the input string one word at a time and places<br />

them into the output string.<br />

− Space-fills the last word converted out to a word boundary. If the last word is all<br />

spaces after the space filling, then the length of the output string is decreased<br />

by one word.<br />

− Is reentrant and does not assume quarter/third-word mode.<br />

− Is a relocatable element in the file SYS$LIB$*<strong>SYSLIB</strong> and also collected in the<br />

<strong>SYSLIB</strong> common bank <strong>SYSLIB</strong>$3. The relocatable and common bank entry<br />

points for FDASC$ are listed in Appendix E.<br />

− May be called from MASM programs.<br />

• TABLE$<br />

Contains the conversion codes for Fieldata and ASCII characters.<br />

9.1. MASM Interface<br />

The calling program may call FDASC$ as a relocatable element, a common bank<br />

element, or a common bank element with the Auto Switch method.<br />

9.1.1. Fieldata to ASCII Conversion<br />

FDASC$ converts Fieldata character strings to ASCII when the FDASC$ entry point is<br />

called. The following table lists the calling sequences.<br />

7833 1733–004 9–1


FDASC$–Fieldata/ASCII Data Conversion<br />

Auto Switch Common Bank or Relocatable Relocatable<br />

L,U A0,input-buffer-word- count<br />

L,U A1,input-buffer-address<br />

L,U A2,output-buffer-address<br />

LMJ X11,CBFDASC$-1<br />

normal return<br />

L,U A0,input-buffer-word- count<br />

L,U A1,input-buffer-address<br />

L,U A2,output-buffer-address<br />

I$BJ X11,CBFDASC$<br />

normal return<br />

L,U A0,input-buffer-word- count<br />

L,U A1,input-buffer-address<br />

L,U A2,output-buffer-address<br />

LMJ X11,FDASC$<br />

normal return<br />

FDASC$ converts the Fieldata characters in the input buffer (six characters per word) to<br />

ASCII and places them into the output buffer (four characters per word, with trailing<br />

space-fill if necessary). The length of the output buffer in words must be at least 1-1/2<br />

times the length of the input buffer. The input buffer and the output buffer may specify<br />

the same buffer, since the string is converted tail-to-head to prevent overwriting.<br />

FDASC$ returns the word length of the converted ASCII image in register A0.<br />

Example<br />

The following example demonstrates a call to the relocatable version of FDASC$ to<br />

convert a Fieldata character string to ASCII:<br />

$FDATA<br />

$INCLUDE ‘MAXR$’<br />

$(2)<br />

INBUF ‘SOME FIELDATA CHARACTERS.’ . Fieldata character string<br />

INLEN $EQU $-INBUF . Word length<br />

OUTBUF $RES INLEN*3//2 . Output buffer<br />

PCW $GFORM 12,1, 6,0, 18,OUTBUF . Print Control Word<br />

$(1)<br />

START<br />

L,U A0,INLEN . Input string word length<br />

L,U A1,INBUF . Input string address<br />

L,U A2,OUTBUF . Output buffer address<br />

LMJ X11,FDASC$ . Convert FD to ASCII<br />

.<br />

S,S3 A0,PCW . Put word length of<br />

L A0,PCW . converted image in PCW<br />

ER APRINT$ . Print ASCII image<br />

.<br />

ER EXIT$ .<br />

$END START .<br />

This MASM routine calls the relocatable version of FDASC$ to convert the Fieldata string<br />

at INBUF to ASCII. The word length of the converted image is returned from FDASC$ in<br />

A0. An ER APRINT$ prints the converted image.<br />

9–2 7833 1733–004


9.1.2. ASCII to Fieldata Conversion<br />

FDASC$–Fieldata/ASCII Data Conversion<br />

FDASC$ converts ASCII character strings to Fieldata when the ASCFD$ entry point is<br />

called.<br />

The following table lists the calling sequences.<br />

Auto Switch Common Bank or Relocatable Relocatable<br />

L,U A0,input-buffer-word- count<br />

L,U A1,input-buffer-address<br />

L,U A2,output-buffer-address<br />

LMJ X11,CBASCFD$-1<br />

normal return<br />

L,U A0,input-buffer-word- count<br />

L,U A1,input-buffer-address<br />

L,U A2,output-buffer-address<br />

I$BJ X11,CBASCFD$<br />

normal return<br />

L,U A0,input-buffer-word- count<br />

L,U A1,input-buffer-address<br />

L,U A2,output-buffer-address<br />

LMJ X11,ASCFD$<br />

normal return<br />

ASCFD$ converts the ASCII characters in the input buffer (four characters per word) to<br />

Fieldata and places them in the output buffer (six characters per word, with trailing<br />

space-fill if necessary). The length of the output buffer in words must be at least twothirds<br />

the length of the input buffer. The input buffer and the output buffer may specify<br />

the same buffer, since the string is converted head to tail to prevent overwriting.<br />

ASCFD$ returns the word length of the converted Fieldata image in register A0.<br />

9.2. TABLE$–Fieldata/ASCII Conversion Table<br />

TABLE$ contains the conversion codes for each ASCII and Fieldata character. Each<br />

word of TABLE$ has the ASCII to Fieldata code in H1 and the Fieldata to ASCII code in<br />

H2. The H2 portion of TABLE$ is used when the FDASC$ entry point is called; the H1<br />

portion is used when the ASCFD$ entry point is called.<br />

TABLE$ is 256 words long and has an entry point of ASCFDASC$. The H2 portion of the<br />

last 192 words (Fieldata to ASCII codes) is unused.<br />

TABLE$ is a relocatable element in the file SYS$LIB$*<strong>SYSLIB</strong> and is also collected in the<br />

<strong>SYSLIB</strong> common bank <strong>SYSLIB</strong>$3.<br />

7833 1733–004 9–3


FDASC$–Fieldata/ASCII Data Conversion<br />

9–4 7833 1733–004


Section 10<br />

GETPSF$–Get a Scratch File Routine<br />

The GETPSF$ routine assigns program scratch files.<br />

10.1. File Assignment<br />

For greater efficiency, a common set of file names has been defined for use by system<br />

processors, language processors, and programs that require one or more scratch files.<br />

Based on the abbreviation PSF (program scratch file), these file names are PSF$, PSF1$,<br />

PSF2$...PSF9$.<br />

These files are generally assigned only once per run. The first program that requires a<br />

file calls GETPSF$ to perform the assignment and then leaves it assigned for subsequent<br />

use by other programs in the run. Since GETPSF$ does not initialize or clear the scratch<br />

files, programs must assume that there may be data in the scratch file left over from its<br />

previous use.<br />

Programs may call GETPSF$ to assign up to 10 PSF files. To avoid the extra expense of<br />

assigning scratch files to a run, request file PSF$ if only one file is needed. If two files<br />

are needed, request PSF$ and PSF1$. If this convention is followed, chances are greater<br />

that the file requested has already been assigned to the run. When a call to GETPSF$<br />

requests the assignment of a file that is already assigned to the run, the cost to the<br />

calling program is considerably less than if GETPSF$ actually has to assign a file.<br />

7833 1733–004 10–1


GETPSF$–Get a Scratch File Routine<br />

10.2. MASM Interface<br />

The next two subsections describe the packet and the calling sequence.<br />

10.2.1. Packet<br />

On a call to the relocatable version of the GETPSF$ routine, the calling program passes<br />

the number of files or the specific PSF file number to be assigned to the run.<br />

For a call to the common bank version of the routine, the calling program must also<br />

provide the address of a 13-word data area that is used by the GETPSF$ routine. This is<br />

a scratch data area that does not have to be initialized by the caller and can be reused by<br />

the calling program when control returns from GETPSF$. The packet must be in a writeenabled<br />

bank of the calling program. The bank must also be based when the call to the<br />

GETPSF$ routine is made.<br />

For more information on the different methods of calling the <strong>SYSLIB</strong> routines, see<br />

Section 3.<br />

10.2.2. Calling Sequence<br />

The GETPSF$ routine is called by the MASM procedure G$ETPSF. This procedure can<br />

be used to generate the calling sequence for the relocatable version, the common bank<br />

version, or the common bank version using the Auto Switch calling sequence.<br />

Calling Format<br />

G$ETPSF[,t] func-code [,n] [pkt-addr]<br />

error return<br />

normal return<br />

Parameters<br />

t<br />

Call the relocatable version. This parameter is optional and may be omitted. CB or<br />

A, if specified, must be enclosed by apostrophes.<br />

blank Call the relocatable version. This is the default if t is omitted.<br />

'CB' Call the common bank version.<br />

'A' Call the common bank version using the Auto Switch method.<br />

10–2 7833 1733–004


func-code<br />

GETPSF$–Get a Scratch File Routine<br />

The function code tells GETPSF$ how to treat the parameter n. If the function code<br />

is set to GETPSF$, then the routine assigns scratch files in sequence beginning with<br />

file PSF$ and continuing to file PSFn$, where n is the number given as the second<br />

parameter.<br />

If the function code is set to GETPSFN$, then only one file is assigned by GETPSF$.<br />

That file is PSF$ if n is omitted or set to 0. If n is set to a value of 1 to 9, then the file<br />

PSFn$ is assigned. The function code must be enclosed by apostrophes. The only<br />

allowable function codes for GETPSF$ are<br />

GETPSF$<br />

Assign files PSF$ to PSFn$. If n is zero or is omitted, only file PSF$ is assigned.<br />

GETPSFN$<br />

Assign only file PSFn$. If n is zero or is omitted then file PSF$ is assigned.<br />

Note: Any other value entered for the function code parameter on the G$ETPSF<br />

procedure call causes MASM to generate an E flag on that line and print the error<br />

message.<br />

n<br />

ILLEGAL G$ETPSF FUNCTION<br />

The parameter n can be set to an integer value of 0 through 9. It may be given as an<br />

actual number, a tag that has been equated to a number or the address of a word<br />

that contains the number. The parameter n defines the highest numbered PSF file<br />

to be assigned if a group of files is requested (that is, if the function code is set to<br />

GETPSF$). Otherwise, n defines the particular PSF file to be assigned when the<br />

function code is set to GETPSFN$.<br />

If n is set to 2 and the function code is GETPSF$, then files PSF$, PSF1$, and PSF2$<br />

are assigned. If n is set to 2 and the function code is GETPSFN$, then only one file,<br />

PSF2$, is assigned.<br />

pkt-addr<br />

Address of the packet provided by the calling program to the GETPSF$ routine. This<br />

parameter is needed only if the parameter t has been set to 'A' or 'CB'. If t is set to<br />

'A' or 'CB', then this parameter must be included or the address of the packet must<br />

already be in register A1. If the parameter t is blank, that is, if the call is to the<br />

relocatable version of the GETPSF$ routine, then this parameter may be omitted.<br />

However, including it on the call does not cause any problems.<br />

If only the function code is given on the GETPSF$ procedure call, GETPSF uses the value<br />

in register A0 for n. If the parameter t has been set to A or CB, then the value in register<br />

A1 is used as the address of the packet required by the common bank routine.<br />

7833 1733–004 10–3


GETPSF$–Get a Scratch File Routine<br />

Normal Return<br />

If the normal return is taken, the requested files are assigned to the run as track granular,<br />

sector-addressable mass storage files with a maximum size of 3,000 granules. The<br />

GETPSF$ routines do not reassign PSF files. If a PSF file is already assigned and<br />

GETPSF$ is called to assign it again, the normal return is taken and the file remains<br />

exactly as it was before the call to GETPSF$.<br />

The first three characters of all files assigned by the GETPSF$ routines are always PSF.<br />

The last three characters vary, depending on how the GETPSF$ routine was called.<br />

These three characters are returned to the calling program in H1 of register A1 on a<br />

normal return.<br />

On a normal return from GETPSF$ when func-code=GETPSF$, H1 of register A1<br />

contains "$∆∆" if only the file PSF$ was requested or "n$∆", where "n" is the highest<br />

numbered PSF$ file requested. The symbol "∆" represents a blank.<br />

On a normal return from GETPSF$ when func-code=GETPSFN$, H1 of register A1<br />

contains "n$∆", where "n" is the number of the file requested or "$∆∆" if file PSF$ is<br />

requested.<br />

After a normal return, the calling program can store the content of register A1 into a<br />

Fieldata string that can be submitted by ER CSF$ to attach an internal file name to the<br />

PSF file using the @USE command. See the example.<br />

Error Return<br />

When the error return is taken, register A0 contains an error code with auxiliary<br />

information in other registers. The error codes are as follows:<br />

A0 = 0<br />

A0 = 1<br />

A0 = 2<br />

The input value n is negative or exceeds 9. Register A1 contains the value.<br />

A file is assigned to the run that is not in sector-addressable format. Register A1<br />

points to the FACIL$ packet.<br />

A CSF$ request was rejected. Register A1 points to the FACIL$ packet. Register A2<br />

contains the status bits returned by CSF$.<br />

10–4 7833 1733–004


Example<br />

$INCLUDE ‘MAXR$/’<br />

$(2)<br />

PSFNUM $EQU 3<br />

FUNCT $EQU ‘GETPSF$’<br />

VALUE + 3<br />

BUFFER $RES 13<br />

BUFFLN $EQU $-BUFFER<br />

CSFIMG ‘@USE SF,PSF ‘<br />

$(1)<br />

START .<br />

G$ETPSF,‘CB’ FUNCT,3 BUFFER<br />

J PSFERR<br />

LXI,U X11,0<br />

G$ETPSF ‘GETPSFN$’,PSFNUM BUFFER<br />

J PSFERR<br />

S A1, CSFIMG + 2<br />

L A0, (3, CSFIMG)<br />

ER CSF$<br />

JN A0, PSFERR<br />

LA,U A1,BUFFER<br />

G$ETPSF,‘CB’ ‘GETPSF$’,VALUE<br />

J PSFERR<br />

J DONE<br />

PSFERR .<br />

L$SNAP ‘PSFERR’,2,0,0<br />

DONE .<br />

ER EXIT$<br />

$END START<br />

GETPSF$–Get a Scratch File Routine<br />

The preceding examples all call the GETPSF$ routine to assign four temporary files to<br />

the run (files PSF$, PSF1$, PSF2$, and PSF3$). The last call does not include BUFFER<br />

as a parameter. Prior to making the call, the address of BUFFER must have been loaded<br />

into register A1. The internal filename "SF" is attached to filename "PSF3$."<br />

7833 1733–004 10–5


GETPSF$–Get a Scratch File Routine<br />

10–6 7833 1733–004


Section 11<br />

ID$–Identification Line Routine<br />

ID$ provides the calling program with an identification line or lines for any processor or<br />

program. ID$ identifies the processor called and the time it was called. The information<br />

in the identification line consists of a processor/program description, an optional date of<br />

creation and time for the processor/program, and the current (execution) date and time.<br />

The System Standard Format Date and Time (SFDT$) routine formats the dates and<br />

times. All output is in ASCII.<br />

ID$ can be called from both MASM and PLUS programs. ID$ is available as a relocatable<br />

element in the <strong>SYSLIB</strong> file SYS$LIB$*<strong>SYSLIB</strong> and also in the <strong>SYSLIB</strong> common bank<br />

<strong>SYSLIB</strong>$1. The relocatable and common bank entry points for ID$ are listed in<br />

Appendix E.<br />

ID$ Output<br />

The format of the identification line is<br />

Processor/program description (creation date and time) execution date and<br />

time<br />

where:<br />

Processor/program description<br />

The calling program provides this field; it can contain any number of ASCII<br />

characters. There are two methods to specify the description.<br />

• A separate buffer may contain the description; the address and length in<br />

characters are passed to ID$.<br />

• The description can be specified as a string on the I$DPKT procedure call that<br />

sets up the ID$ packet.<br />

Creation date and time<br />

ID$ obtains the date and time that the calling program was created from the<br />

Collector-supplied values for D$ATE and T$IME. ID$ places the date and time in<br />

parentheses using the following format: (YYMMDD HHMM:SS). Date and time are<br />

separated from the last character of the description by one space. This field can be<br />

excluded from the ID$ output.<br />

7833 1733–004 11–1


ID$–Identification Line Routine<br />

Execution date and time<br />

ID$ uses the current date and time unless a date and time are in the ID$ packet.<br />

(This should be the contents of R2 at load time.) Two formats are available: default is<br />

"CCYY mmm DD ddd HHMM:SS", or optionally "YYMMDD HHMM:SS". The date<br />

and time are separated from the last character of the creation date/time (or<br />

description if creation date/time is excluded) by one space.<br />

See SFDT$ routine comments for further details on the date/time formats.<br />

The calling program can format ID$ output for 80 characters per line (demand) or 132<br />

characters per line (batch or breakpointed-demand). If the length of the output exceeds<br />

the maximum character length of a line, the remainder is continued on the following line.<br />

If the creation date/time or execution date/time does not fit on one line, they are placed<br />

entirely on the next line (there is no wraparound for date/time).<br />

Sample displays of an ASCII string generated by ID$.<br />

1. MASM 3R1T1 (800827 1448:46) 1983 Sep 10 Sat 1651:18<br />

2. FURPUR 28R3 File Utility Routine/Program File Utility Routine<br />

(820312 1356:02) 1984 May 11 Fri 1017:24<br />

11.1. MASM Interface<br />

The ID$ routine may be called directly from MASM programs. Subsection 11.3<br />

describes the ID$ packet format and the MASM PROC I$DPKT that generates the<br />

packet. Subsection 11.1.2 describes the calling sequence for ID$, the MASM PROC<br />

I$D$ to call ID$, and the MASM PROC I$DPRINT to print the output.<br />

11.1.1. Packet<br />

The calling program must provide ID$ with an 11-word (or more) packet. The ID$ packet<br />

format is described in 11.3, and the PROC to generate the ID$ packet is described<br />

below.<br />

The MASM PROC I$DPKT generates the packet for the ID$ routine.<br />

Calling Format<br />

label I$DPKT {idlen | idbuf | ‘bufname’} {hdrlen | hdrbuf | ‘string’} optbits<br />

11–2 7833 1733–004


Parameters<br />

label<br />

A label to identify the start of the ID$ packet.<br />

idlen,idbuf<br />

ID$–Identification Line Routine<br />

idlen is the length in words of the ID$ output buffer. idbuf is the address of the ID$<br />

output buffer.<br />

'bufname'<br />

A label that identifies the output buffer which is generated immediately after the ID$<br />

packet. This eliminates the need for a separately defined output buffer.<br />

hdrlen,hdrbuf<br />

'string'<br />

optbits<br />

hdrlen is the length in characters of the processor/program description. hdrbuf is the<br />

address of the buffer containing the processor/program description.<br />

The ASCII character string used as the processor/program description, which is<br />

stored immediately after the ID$ packet. This eliminates the need for a separate<br />

description buffer and length.<br />

Octal number with the following bit significance (rightmost bit is 35):<br />

Bit 35<br />

Bit 34<br />

Bit 33<br />

Clear: maximum characters per line is 80.<br />

Set: maximum characters per line is 132.<br />

Clear: include the creation date and time.<br />

Set: exclude the creation date and time.<br />

Clear: use long execution date/time format.<br />

Set: use short execution date/time format.<br />

7833 1733–004 11–3


ID$–Identification Line Routine<br />

Bit 32<br />

Bit 31<br />

Clear: line spacing for first PCW is 1 (next line).<br />

Set: line spacing for first PCW is 07777 (top of page).<br />

Clear: do not print the ID$ output.<br />

Set: call I$DPRINT to print all ID$ output.<br />

The following are two examples of generating the ID$ packet with I$DPKT:<br />

Example 1<br />

$(2)<br />

IDPACKET I$DPKT ‘IDOUTPUT’ ‘Collector 31R1’<br />

In example 1, the I$DPKT procedure generates an 11-word packet at location IDPACKET<br />

under location counter 2. The I$DPKT procedure also allocates space following the ID$<br />

packet for a buffer, which will contain the ID$ output. IDOUTPUT specifies the location<br />

of the first word of this buffer. I$DPKT determines the length of the buffer (in this<br />

example, 14 words).<br />

I$DPKT also stores the ASCII string 'Collector 31R1' following the ID$ packet. The<br />

options bits parameter is omitted. This sets all option bits to zero.<br />

Example 2<br />

$(4)<br />

IDPAC I$DPKT 20,IDLINE 27,PGMIDENT 026<br />

IDLINE $RES 20<br />

PGMIDENT ‘Math Quiz Program (Level 8)’<br />

In example 2, the I$DPKT procedure generates an 11-word packet at location IDPAC<br />

under location counter 4. ID$ generates the identification line in the 20-word data area at<br />

location IDLINE. ID$ uses the 27-character string at location PGMIDENT for the program<br />

description part of the identification line.<br />

The octal code 026 sets condition bits 34, 33, and 31. This directs ID$ to exclude the<br />

creation date and time from the identification line, use the short format for execution<br />

data and time, and print the identification line.<br />

11–4 7833 1733–004


11.1.2. Calling Sequence<br />

ID$–Identification Line Routine<br />

ID$ is called with the MASM PROC I$D$. This PROC can call ID$ as a relocatable<br />

element, a common bank element, or a common bank element using the Auto Switch<br />

method.<br />

Calling Format<br />

I$D$[,t] pkt-addr date<br />

error return<br />

normal return<br />

Parameters<br />

t<br />

The type of call to ID$. This parameter is optional and may be omitted. CB or A,<br />

if specified, must be enclosed by apostrophes.<br />

pktaddr<br />

date<br />

blank Call the relocatable version of ID$. This is the default if t is omitted.<br />

'CB' Call the common bank version of ID$.<br />

'A' Call the common bank version of ID$ using the Auto Switch method.<br />

The address of the ID$ packet.<br />

The address of a caller-specified date and time (it must be in TDATE$ format). This<br />

parameter is optional.<br />

The calling program can use indexing, incrementation, indirect addressing, and register<br />

basing in specifying the addresses for pktaddr and date by using the $EQUF directive.<br />

See $EQUF definitions in the MASM <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

If date is included on the calling statement, the TDATE$ value at that address is used for<br />

the execution date/time. If the date is excluded, the TDATE$ value in word 8 of the ID$<br />

packet is used. If no value is present in Word 8, in other words, if it is zero, the current<br />

date/time is obtained from ER TDATE$.<br />

7833 1733–004 11–5


ID$–Identification Line Routine<br />

Error Return<br />

If ID$ takes the error return, either A1 or A2 contains a negative error code. If the error<br />

occurred in ID$, A1 contains the error code. If the error occurred in SFDT$, A2 contains<br />

the error code.<br />

• ID$ error codes (returned in A1)<br />

-01 An outdated version of the ID$ packet is being used.<br />

• SFDT$ error codes (returned in A2)<br />

-01 through -05 SFDT$ routine error; see Section 22.<br />

The error code is also stored in the packet, in ERRCODE.<br />

ID$ Output<br />

The output ID$ generates may be one or more lines. This depends on the length of the<br />

processor/program description and specified options. For each line of ID$ output, a print<br />

control word is constructed (line spacing, image length, image address) and stored<br />

sequentially in the ID$ packet starting with word 10. The number of print control words<br />

constructed is stored in S6 of word 0 of the ID$ packet.<br />

The following procedure simplifies printing of the ID$ output:<br />

I$DPRINT pktaddr<br />

where pktaddr is the address of the ID$ packet.<br />

This procedure performs an APRINT$ for each print control word. It may be called from<br />

the I$D$ PROC by setting option bit 31.<br />

All output from ID$ is directed to the current print file.<br />

Normal Return<br />

If the normal return occurs, the first print control word is returned in A0.<br />

11–6 7833 1733–004


11.1.3. Examples<br />

ID$–Identification Line Routine<br />

The following example calls the ID$ routine to generate an ASCII identification line.<br />

$ASCII<br />

$INCLUDE ‘MAXR$’<br />

$(2)<br />

IDPAC I$DPKT ‘IDLINE’ ‘Math Quiz Program (Level 8)’ 026<br />

$(1)<br />

START<br />

I$D$ IDPAC . Generate and print the ID line<br />

J ERROR . Jump ahead if error return<br />

.<br />

. (Program code)<br />

.<br />

J DONE . Program complete<br />

ERROR<br />

L$SNAP ‘ID$’, 2 . Dump the A-registers<br />

DONE<br />

ER EXIT$<br />

$END START<br />

This MASM routine uses the ID$ routine to create and print the following identification<br />

line:<br />

Math Quiz Program (Level 8) 840425 1147:31<br />

In this example, ID$ generates the ASCII identification line in the 11-word data area at<br />

location IDLINE. The I$DPKT procedure generates the ID$ packet (see11.2.2 for details<br />

on the I$DPKT packet generation PROC).<br />

The I$D$ procedure calls the relocatable version of ID$, which generates the<br />

identification line and prints it by executing an ER APRINT$ (because option bit 4 is set).<br />

If ID$ takes the error return, L$SNAP prints the A-registers. Otherwise, the program<br />

continues executing.<br />

7833 1733–004 11–7


ID$–Identification Line Routine<br />

11.2. PLUS Interface<br />

ID$ can be called directly from PLUS programs. The data structure requirements for ID$<br />

are described in 11.1.2. The calling sequence for ID$ is described in 11.2.2.<br />

When ID$ is called from PLUS programs, the output is limited to a maximum of 10 lines<br />

for the processor/program identification line(s).<br />

11.2.1. Packet<br />

PLUS programs that call ID$ do not need to supply a packet for ID$. Instead, the calling<br />

program passes parameters to ID$, and ID$ builds the packet on the Automatic Storage<br />

Stack (PLSSTACK).<br />

The calling program must provide the following data entities:<br />

• A buffer containing the ASCII processor/program description. It may be any length<br />

up to ten times the maximum number of characters per line, minus the number of<br />

characters needed for the date/time output fields. (Date/time fields require 41 or<br />

fewer characters, depending on specified options.) The length of this buffer must be<br />

passed to ID$ in character granularity.<br />

• A buffer to contain the ASCII output from ID$. It must be long enough to contain the<br />

entire output string (at most 41 characters longer than the description). ID$ will<br />

space-fill this buffer to its end. The length of the buffer must be passed to ID$ in<br />

word granularity.<br />

• A 36-bit signed integer used to return error codes from ID$ to the calling program.<br />

The above data entities must be declared LOCATABLE. These data entities are passed<br />

to ID$ to create the identification line.<br />

11.2.2. Calling Sequence<br />

The following procedure declaration is required to call the ID$ routine. This procedure<br />

must be declared by the calling program.<br />

PROCEDURE ID_LINE( ID_OUTPUT_ADDRESS: 36 BIT MACHINE POINTER,<br />

ID_OUTPUT_LENGTH: 36 BIT SIGNED INTEGER,<br />

ID_NAME_ADDRESS: 36 BIT MACHINE POINTER,<br />

ID_NAME_LENGTH: 36 BIT SIGNED INTEGER,<br />

ID_DATE: 36 BIT MACHINE LOGICAL,<br />

ID_OPTIONS: 36 BIT SIGNED INTEGER,<br />

%ID_ERROR_CODE: 36 BIT SIGNED INTEGER)<br />

IMPORTED (‘external-name’);<br />

11–8 7833 1733–004


Parameters<br />

ID_OUTPUT_ADDRESS<br />

ID$–Identification Line Routine<br />

The address of the buffer that will contain the ASCII output from ID$.<br />

ID_OUTPUT_LENGTH<br />

The length in words of the output buffer.<br />

ID_NAME_ADDRESS<br />

The address of the buffer containing the ASCII processor/program description.<br />

ID_NAME_LENGTH<br />

The length in characters of the processor/program description buffer.<br />

ID_DATE<br />

The execution date and time; it may be a value in TDATE$ format, or set to minus<br />

one (-1) to use current date and time.<br />

ID_OPTIONS<br />

Bit 36<br />

Bit 35<br />

Bit 34<br />

Bit 33<br />

An octal number that specifies which options ID$ uses (bit 36 is the rightmost bit of<br />

ID_OPTIONS).<br />

Clear: maximum characters per line is 80.<br />

Set: maximum characters per line is 132.<br />

Clear: include the creation date and time.<br />

Set: exclude the creation date and time.<br />

Clear: use long execution date/time format.<br />

Set: use short execution date/time format.<br />

Clear: line spacing for first PCW is 1 (next line).<br />

Set: line spacing for first PCW is 07777 (top of page).<br />

7833 1733–004 11–9


ID$–Identification Line Routine<br />

Bit 32<br />

Clear: do not print the ID$ output.<br />

Set: Print the ID$ output.<br />

ID_ERROR_CODE<br />

Contains the error code (if any) returned by ID$.<br />

external-name<br />

One of two entry points to ID$:<br />

ID$P<br />

ID$PG<br />

For modules compiled without the G option. Calls the relocatable version of ID$.<br />

For modules compiled with the G option (I$BJ procedure and function calling<br />

sequence). Calls the common bank version of ID$.<br />

If after calling ID_LINE, ID_ERROR_CODE is zero, then the call to ID_LINE was<br />

successful; ID_OUTPUT_ADDRESS now contains the output string. If<br />

ID_ERROR_CODE is negative, an error occurred (see 11.1.2).<br />

11–10 7833 1733–004


11.2.3. Example<br />

The following example uses ID$ in a PLUS program:<br />

MODULE;<br />

DECLARE ID_BUFFER: 80 ASCII CHARACTERS LOCATABLE,<br />

DESCRIPTION: 32 ASCII CHARACTERS LOCATABLE,<br />

ERROR: 36 BIT SIGNED INTEGER LOCATABLE;<br />

"<br />

PROCEDURE ID_LINE( ID_OUTPUT_ADDRESS: 36 BIT MACHINE POINTER,<br />

ID_OUTPUT_LENGTH: 36 BIT SIGNED INTEGER,<br />

ID_NAME_ADDRESS: 36 BIT MACHINE POINTER,<br />

ID_NAME_LENGTH: 36 BIT SIGNED INTEGER,<br />

ID_DATE: 36 BIT MACHINE LOGICAL,<br />

ID_OPTIONS: 36 BIT SIGNED INTEGER,<br />

%ID_ERROR_CODE: 36 BIT SIGNED INTEGER)<br />

IMPORTED (‘ID$P’);<br />

.<br />

.<br />

.<br />

DESCRIPTION:= ‘Weekly Status Reports’;<br />

ID_LINE(LOC(ID_BUFFER),20,LOC(DESCRIPTION),21,-1,0’32’,%ERROR);<br />

.<br />

.<br />

ID$–Identification Line Routine<br />

In this example, the calling program calls the relocatable version of ID$. ID$ places the<br />

identification line into "ID_BUFFER", with no creation date and time. The ID$ routine<br />

uses the current date and time for the creation date and time. ID$ places output at the<br />

top of the next page and sends it immediately to the current print file.<br />

7833 1733–004 11–11


ID$–Identification Line Routine<br />

11.3. Packet Format<br />

The following shows the ID$ packet format. The calling program must provide<br />

appropriate values for the fields in italics.<br />

0 tscell pktvers pktlen linelim qwmflg numpcw<br />

01 optbits idlen hdrlen<br />

02 idbuf<br />

03 hdrbuf<br />

04 numwrds datefmt timefmt reserved (must be zero) sfdtvers<br />

05 offset sfdtnch sfdtlen errcode<br />

06 sfdtbuf<br />

07 crdate<br />

010 exdate<br />

011 X11save<br />

012 pcword<br />

012+1 pcword 1<br />

012+n pcword n<br />

Packet Fields<br />

tscell<br />

pktvers<br />

pktlen<br />

linelim<br />

bufspace<br />

Available to the calling program as a test-and-set cell (optional).<br />

The packet version number (for code maintenance only). The current version is 1<br />

(required).<br />

The length in words of the ID$ packet (required). This includes the length through<br />

the last allocated PCW.<br />

qwmflg<br />

The maximum length in words of the output lines (either 20 or 33 words) (required).<br />

Quarter Word Mode flag; set to a positive value if ID$ changes to QWM; otherwise<br />

zero.<br />

11–12 7833 1733–004


numpcw<br />

optbits<br />

idlen<br />

hdrlen<br />

idbuf<br />

hdrbuf<br />

Number of Print Control Words necessary for the ID$ output.<br />

The octal number that specifies available ID$ options (optional).<br />

The length in words of the ID$ output buffer (required).<br />

ID$–Identification Line Routine<br />

The length in characters of the processor/program description (required).<br />

The address of the ID$ output buffer (required).<br />

The address of the buffer containing the processor/program description (required).<br />

numwrds<br />

datefmt<br />

timefmt<br />

A running total of the number of words written out to the current output line.<br />

The date format index for SFDT$.<br />

The time format index for SFDT$.<br />

sfdtvers<br />

offset<br />

The SFDT$ packet version; see SFDT$ routine (Section 22) for the current version<br />

(required).<br />

sfdtnch<br />

sfdtlen<br />

The character offset within the first word (0 to 3) of the ID$ output (optional).<br />

The number of characters that SFDT$ writes.<br />

The length in words of output buffer for SFDT$.<br />

7833 1733–004 11–13


ID$–Identification Line Routine<br />

errcode<br />

sfdtbuf<br />

crdate<br />

exdate<br />

A negative error code returned from ID$ or SFDT$.<br />

The address for output from SFDT$ (contained within the ID$ output buffer).<br />

If the MASM PROC, I$DPKT, is not used to generate this packet, crdate must be<br />

specified by the user if optbits bit 34 is clear. For example, this value can be entered<br />

as<br />

+ D$ATE*/18+T$IME<br />

which will then be resolved at collection time. The value contained in this word will<br />

be interpreted as a date and time, whether or not it was specified as such. If a value<br />

of zero is used, the current date and time at execution will appear on the ID line in<br />

the position of the creation date and time.<br />

The execution date and time in TDATE$ format (optional).<br />

X11save<br />

pcword<br />

Storage space for return address.<br />

Storage space for the first ID$ output print control word (PCW).<br />

pcword n<br />

Storage spaces for n additional PCWs, when more than one PCW is required for the<br />

ID$ output. If the ID image is longer than that allowed by the number of allocated<br />

PCWs, the ID line is truncated.<br />

bufspace<br />

Storage space reserved for the ID$ output buffer, the processor/program description<br />

buffer, or both. Space is reserved only if requested in packet generation (see the<br />

I$DPKT description), and allocated immediately after the ID$ packet.<br />

Words 4 to 8 of the ID$ packet are the packet for SFDT$ (Standard Format Date and<br />

Time routine).<br />

11–14 7833 1733–004


Section 12<br />

INFOR$–Internal Format Table Interface<br />

Routines<br />

The INFOR interface routines read the INFOR table into memory, search through the<br />

table for specific information, retrieve information from the INFOR table, and dynamically<br />

assign internal use names to files.<br />

The INFOR routines can be included in the calling program as relocatable elements or<br />

can be referenced from one of the <strong>SYSLIB</strong> common banks by either the I$BJ or the Auto<br />

Switch method. For a complete description of these calling methods see Section 3.<br />

Appendix E includes a list of the <strong>SYSLIB</strong> common bank names and the routines included<br />

in them.<br />

Internal format (INFOR) refers to the data format used to pass information from the<br />

processor call statement to a program when it is called as a processor instead of being<br />

called by an @XQT command. The difference between calling a program as a processor<br />

and calling it by an @XQT statement is how the first read instruction of the program is<br />

executed. If the program is called by the @XQT command:<br />

@XQT PROGRAM file.element/version<br />

then there is nothing different about how the first read instruction is executed. It is<br />

executed like any other read in the program. When the read instruction is encountered<br />

the program stops and waits for data to be entered. The extra information entered on<br />

the call line, (in this example, file.element/version,) is ignored. If the program is called as<br />

a processor:<br />

@PROGRAM file.element/version<br />

then the first read receives information from the processor call statement in internal<br />

format. More than one read command may be needed to read all the information.<br />

When all information has been read into memory, it is refered to as the INFOR table.<br />

A processor can accomplish this by calling the INFOR$ routine RINF$ (Read Internal<br />

Format). Having the data from the call line placed in a table with a predefined format and<br />

then having a common set of routines to access this table gives processors a fast and<br />

efficient means of getting at the information they need.<br />

7833 1733–004 12–1


INFOR$–Internal Format Table Interface Routines<br />

12.1. Format of the Internal Format Table<br />

See Appendix G for the structure of the INFOR table and the identifiers used to<br />

reference the information it contains.<br />

12.2. General Considerations for Using the INFOR<br />

Routines<br />

If the calling program uses the relocatable version of the INFOR$ routines, the INFOR$<br />

routine allocates a 28-word packet under location counter 2. Normally this results in the<br />

area being defined in the calling program data bank. The actual location of the packet<br />

can be specified by the calling program through the use of Collector directives that<br />

define where data items under specific location counters are to be put. The following<br />

data area labels are externally defined by the relocatable version of the INFOR$ routines.<br />

These labels reference data areas in the 28-word packet and, since they are externalized,<br />

they can be used by the calling program.<br />

INFOR$<br />

Flag used by RINF$ to determine if the INFOR table has already been read.<br />

INFOR$+1<br />

FILE$<br />

ELT$<br />

Contents of A0 after first READ$ performed by RINF$ (status bits, CLIST$ index, and<br />

so on).<br />

Edited file name from DUSE$ (8 words).<br />

Field description table from SELT$ (14 words).<br />

If the calling program uses the common bank form of the INFOR$ routines, the calling<br />

program must provide a 30-word packet in a write-enabled bank that is based when the<br />

call to the INFOR$ routine is made. This packet can be generated by including a call to<br />

the procedure I$NFORPKT in the calling program code. This procedure reserves 30<br />

words of space and externalizes the data area tags INFOR$, FILE$, and ELT$. (See the<br />

definitions for INFOR$, FILE$, and ELT$ listed above.)<br />

The I$NFORPKT procedure should not be used when the relocatable version of INFOR$<br />

is called because the procedure I$NFORPKT and the relocatable version of INFOR$<br />

externalizes these tags.<br />

12–2 7833 1733–004


INFOR$–Internal Format Table Interface Routines<br />

The only values allowed for the function code on the I$NFOR procedure call are RINF$,<br />

SINF$, SELT$, and DUSE$. Any other value entered for the function code parameter on<br />

the I$NFOR procedure call causes MASM to generate an E flag on that line and print the<br />

error message:<br />

ILLEGAL I$NFOR FUNCTION<br />

All of the code in the INFOR$ routines is I-bank reentrant. The INFOR$ code is quarterword<br />

and third-word insensitive.<br />

12.3. INFOR$–Routines<br />

The INFOR$ routines are a set of routines that read and manipulate the INFOR table.<br />

The INFOR$ routines are:<br />

• RINF$<br />

Read the INFOR table into memory.<br />

• SINF$<br />

Search the INFOR table for a specification subfield.<br />

• SELT$<br />

Transfer a subfield from the INFOR table to the ELT$ table.<br />

• DUSE$<br />

Perform a dynamic @USE to attach an internal name to a file (see ECL and FURPUR<br />

<strong>Reference</strong> <strong>Manual</strong>.<br />

Limitation of INFOR Routines<br />

Because the field number (the FN subfield, see Appendix G) is limited to 6 bits, only 63<br />

fields (octal 1 to octal 77) can be uniquely numbered in the INFOR table. If more than 63<br />

fields are given, then the field numbers start over going from 1 to 63 again. For<br />

example, if a processor had 68 parameters on its call line, all 68 parameters would be<br />

included in the INFOR table. However, they would be numbered 1 to 63 and then 1 to 5.<br />

In this case, the INFOR$ routines SINF$ and SELT$ cannot be used to access the last<br />

five fields.<br />

The field number given on these calls must be in the range of 1 to 63, and the<br />

information returned would always come from one of the first 63 fields. If a programmer<br />

wishes to allow more than 63 parameters on the call line, the RINF$ routine can be used<br />

to create the INFOR$ table but all subsequent processing of the data would have to be<br />

done by the processor itself.<br />

7833 1733–004 12–3


INFOR$–Internal Format Table Interface Routines<br />

12.3.1. RINF$–Read INFOR Table<br />

The RINF$ routine performs a read operation to read the INFOR table and store it in an<br />

area that the calling program supplies. The RINF$ routine must be called before the<br />

SINF$, the SELT$, or the DUSE$ routines may be used.<br />

INFOR$ is a word defined externally by the INFOR$ routine. If it is zero, then the RINF$<br />

routine executes a read instruction and reads the INFOR table into the area indicated by<br />

parameter start-addr. If INFOR$ is not zero, RINF$ assumes that the INFOR table has<br />

already been read and immediately does a normal return to the caller. The calling<br />

program must set INFOR$ to zero if the calling program is reusable and is making<br />

multiple calls to the RINF$ routine.<br />

The RINF$ routine is called by the MASM procedure I$NFOR. This procedure can be<br />

used to generate the calling sequence for the relocatable version of the RINF$ routine,<br />

the common bank version of the routine, or the common bank version of the routine<br />

using the Auto Switch calling sequence. Section 3 describes the advantages and<br />

disadvantages of using the different types of calls.<br />

Calling Format<br />

I$NFOR[,t] ‘RINF$’[,word-count,start-addr] [packet]<br />

error return<br />

normal return<br />

Parameters<br />

t<br />

RINF$<br />

Type of call to RINF$. This parameter is optional and may be omitted. CB or A, if<br />

specified, must be enclosed by apostrophes.<br />

blank Call the relocatable version of RINF$. This is the default if t is omitted.<br />

'CB' Call the common bank version of RINF$.<br />

'A' Call the common bank version of RINF$ using the Auto Switch method.<br />

RINF$ is the function code which specifies which of the INFOR$ routines the<br />

procedure I$NFOR should call. It must be enclosed by apostrophes.<br />

word-count<br />

Length in words of the memory area provided by the caller into which the RINF$<br />

routine is to store the INFOR table. If this parameter is omitted, the RINF$ routine<br />

uses the value in H1 of register A0 as the length.<br />

12–4 7833 1733–004


INFOR$–Internal Format Table Interface Routines<br />

To determine the length of the memory area needed to store the INFOR table, see the<br />

section, "Determining the INFOR Table Size" in Appendix G. After this size value is<br />

calculated, add 28 to it. The additional 28 words are needed because one extra word is<br />

used for a word of zeroes that RINF$ puts after the last word of the INFOR table and 27<br />

extra words are used as an overflow area when RINF$ reads the last block of INFOR<br />

data.<br />

Word-count = (size value calculated using Appendix G) + 28.<br />

start-addr<br />

packet<br />

Address of the data area in which the RINF$ routine stores the INFOR table. If this<br />

parameter is omitted, the RINF$ routine uses the value in H2 of register A0 as the<br />

starting address of the data area.<br />

Address of the 30-word packet required by the common bank version of INFOR$<br />

routine. This parameter is ignored unless parameter t is set to 'A' or 'CB'. If the<br />

common bank version of the RINF$ routine is being called and this parameter is<br />

omitted, then the routine assumes the address has already been loaded into register<br />

A2 by the calling program.<br />

Returns<br />

If the normal return is taken, the INFOR table has been read into the area specified by<br />

parameter start-addr followed by a zero-filled word. H2 of register A1 contains the<br />

address of this word.<br />

If the error return is taken, register A1 contains the error code and register A0 contains<br />

the PRINT$ control word for the error message. Table 12–1 lists the possible messages.<br />

Table 12–1. INFOR$: RINF$ Error Messages<br />

Error Code Error Message and Description<br />

1 PROCESSOR CALL ERROR<br />

Data images were returned on the first call to READ$, indicating that no INFOR<br />

table was created for this program.<br />

2 ABNORMAL RETURN FROM READ$<br />

READ$ returned with an end-of-file or other status that indicates this program<br />

has neither an INFOR table nor input data images.<br />

3 TOO MANY SPECIFICATIONS<br />

The buffer area is not large enough to hold the INFOR table.<br />

7833 1733–004 12–5


INFOR$–Internal Format Table Interface Routines<br />

12.3.2. SINF$–Search INFOR Table<br />

SINF$ searches the INFOR table (previously read by RINF$; see 12.3.1) for a<br />

specification subfield.<br />

The SINF$ routine is called by the MASM procedure I$NFOR. This procedure can be<br />

used to generate the calling sequence for the relocatable version of the routine, the<br />

common bank version of the routine, or the common bank version of the routine using<br />

the Auto Switch calling sequence. Section 3 describes the advantages and<br />

disadvantages of using the different types of calls.<br />

Calling Format<br />

I$NFOR[,t] ‘SINF$’[,ftfnsfn] [packet]<br />

no-find-return<br />

find return<br />

Parameters<br />

t<br />

SINF$<br />

ftfnsfn<br />

Type of call to SINF$. This parameter is optional and may be omitted. CB or A,<br />

if specified, must be enclosed by apostrophes.<br />

blank Call the relocatable version of SINF$. This is the default if t is omitted.<br />

'CB' Call the common bank version of SINF$.<br />

'A' Call the common bank version of SINF$ using the Auto Switch method.<br />

SINF$ is the function code which specifies which of the INFOR$ routines the<br />

procedure I$NFOR should call. It must be enclosed by apostrophes.<br />

Subfield specification that the SINF$ routine is to search for.<br />

ft Field type (see FT in Appendix G)<br />

fn Field number (see FN in Appendix G)<br />

sfn Subfield number (see SFN in Appendix G)<br />

The field type value may only be 1 (specification field). If 0 is specified, SINF$ will<br />

use a field type value of 1. The field number value may be equal to or greater than<br />

01. The subfield number may be a number between 01 and 10 8 . For example, to<br />

return the element name subfield of field 3, the parameter would be set to 010306.<br />

If this parameter is omitted, the SINF$ routine assumes the calling program has<br />

already loaded the information into H2 of register A0.<br />

12–6 7833 1733–004


packet<br />

INFOR$–Internal Format Table Interface Routines<br />

Address of the 30-word packet required by the common bank version of INFOR$<br />

routine. This parameter is ignored unless parameter t is set to 'A' or 'CB'. If the<br />

common bank version of the SINF$ routine is being called and this parameter is<br />

omitted, then the routine assumes the address has already been loaded into register<br />

A2 by the calling program.<br />

Returns<br />

There is a special case where an element name is preceded by a period and entered<br />

without a filename.<br />

@processor .element<br />

This is normally interpreted to mean that the file name for the present subfield is either<br />

TPF$ (if it is the first subfield) or it is the same file name as in the previous subfield.<br />

When SINF$ is used to retrieve the element name and this condition exists, SINF$<br />

makes a normal find-return to the calling program with the element name in the register<br />

pair A0,A1 and sets the FCI field in the subfield control word to an octal 75. (Octal 75 is<br />

the Fieldata code for a period.) Register A2 contains the address of the subfield control<br />

word and the following test can be used to detect this condition.<br />

TNZ,S4 0,A2<br />

The instruction immediately after the TNZ will be skipped if the element name was given<br />

on the processor call line with a leading period but no file name.<br />

Another special case is when there is no qualifier in a field but an asterisk precedes the<br />

file name.<br />

@processor *file.<br />

In this case, if SINF$ is used to retrieve the qualifier, it makes a normal find-return to the<br />

calling program with blanks in the register pair A0,A1. When the processor call line<br />

specifies a file name with no qualifier or leading asterisk<br />

@processor file.<br />

SINF$ takes the no-find-return if asked to retrieve the qualifier.<br />

When a find-return occurs, the registers contain:<br />

A0,A1 the contents of the specified subfield in Fieldata (left-justified, space-filled).<br />

A2 (H2) location of subfield control word (see Appendix G).<br />

A3 number of characters.<br />

When a no-find-return occurs, A2 points to the word that stopped the search. If this<br />

word is zero, the end of the INFOR table has been reached.<br />

7833 1733–004 12–7


INFOR$–Internal Format Table Interface Routines<br />

12.3.3. SELT$–Transfer to ELT$ Table from INFOR Table<br />

The SELT$ routine transfers a field from the INFOR table to the ELT$ table.<br />

The SELT$ routine is called by the MASM procedure I$NFOR. This procedure can be<br />

used to generate the calling sequence for the relocatable version of the SELT$ routine,<br />

the common bank version of the routine, or the common bank version of the routine<br />

using the Auto Switch calling sequence. Section 3 describes the advantages and<br />

disadvantages of using the different types of calls.<br />

Calling Format<br />

I$NFOR[,t] ‘SELT$’[,ftfn] [packet]<br />

no-find return<br />

find-return<br />

Parameters<br />

t<br />

SELT$<br />

ftfn<br />

Type of call to SELT$. This parameter is optional and may be omitted. If CB or A is<br />

specified, it must be enclosed by apostrophes.<br />

blank Call the relocatable version of SELT$. This is the default if t is omitted.<br />

'CB' Call the common bank version of SELT$.<br />

'A' Call the common bank version of SELT$ using the Auto Switch method.<br />

SELT$ is the function code which specifies which of the INFOR$ routines the<br />

procedure I$NFOR should call. It must be enclosed by apostrophes.<br />

Field that is transferred to the ELT$ table from the INFOR table. If this parameter is<br />

omitted, the SELT$ routine uses the value in H2 of register A0. The value in S5 of<br />

A0 is the field type and the value in S6 of A0 is the field number of the field to be<br />

transferred.<br />

ft Field type (see FT in Appendix G).<br />

fn Field number (see FN in Appendix G).<br />

The field type value may only be 1 (specification field). If 0 is specified, SELT$ will<br />

use a field type value of 1. The field number value may be 1 or greater.<br />

12–8 7833 1733–004


packet<br />

INFOR$–Internal Format Table Interface Routines<br />

Address of the 30-word packet required by the common bank version of INFOR$<br />

routine. This parameter is ignored unless parameter t is set to 'A' or 'CB'. If the<br />

common bank version of the SELT$ routine is being called and this parameter is<br />

omitted, then the routine assumes the address has already been loaded into register<br />

A2 by the calling program.<br />

ELT$ Table Format<br />

Figure 12–1 displays the ELT$ table fields.<br />

0 5 6 11 12 17 18 23 24 29 30 35<br />

ELT$+0 FQL FNL FCL RKL WKL IQF<br />

+1 ENL EVL ECL CFN ECC BEC<br />

+2 FQUAL<br />

+3 (two words)<br />

+4 FNAME<br />

+5 (two words)<br />

+6 FCYC<br />

+7 RKEY<br />

+8 WKEY<br />

+9 ENAME<br />

(two words)<br />

+11 EVER<br />

(two words)<br />

ELT$+13 ECYC<br />

Figure 12–1. INFOR$: Format of the ELT$ Table<br />

The Assembler procedure, ELT$, defines the field names in the ELT$ table (see Figure<br />

12–1) as EQUF and EQU directives.<br />

7833 1733–004 12–9


INFOR$–Internal Format Table Interface Routines<br />

Field Descriptions<br />

The fields in Figure 12–1 represent the following:<br />

FQL Length (in characters) of file qualifier or zero<br />

FNL Length (in characters) of file name or zero<br />

FCL Length (in characters) of F-cycle or zero<br />

RKL Length (in characters) of read key or zero<br />

WKL Length (in characters) of write key or zero<br />

IQF Implied qualifier flag<br />

ENL Length (in characters) of element name or zero<br />

EVL Length (in characters) of element version or zero<br />

ECL Length (in characters) of element cycle or zero<br />

CFN File continuation field number or zero<br />

ECC Element cycle signal character<br />

BEC Binary element cycle<br />

FQUAL Fieldata file qualifier<br />

FNAME Fieldata file name<br />

FCYC Fieldata F-cycle<br />

RKEY Fieldata read key<br />

WKEY Fieldata write key<br />

ENAME Fieldata element name<br />

EVER Fieldata element version<br />

ECYC Fieldata element cycle<br />

SELT does not clear ELT$. The calling program should test which field lengths of the<br />

first two words are nonzero. This determines which Fieldata fields contain meaningful<br />

information. If a Fieldata field is defined, the information it contains is left-justified and<br />

space-filled to one or two words.<br />

If the field selected by SELT$ contains a leading period, then the CFN field is set.<br />

The CFN field contains the number of the last field that did not contain a leading period.<br />

For example<br />

@PROCESSOR F.E1,E2,.E3<br />

12–10 7833 1733–004


INFOR$–Internal Format Table Interface Routines<br />

The element E3 is assumed to be in the same file as element E2. If the SELT$ routine is<br />

called to transfer the third field into the ELT$ table, then CFN is set to 2. Because there<br />

is no file name and no leading period in the second field, it is assumed that E2 is in file<br />

TPF$. Since TPF$ is an assumed file and not explicitly included on the processor call<br />

line, the field FNL is set to zero. In the following example:<br />

@PROCESSOR F.E1,.E2,.E3<br />

field two contains a leading period. The element E3 is still assumed to be in the same<br />

file as E2. By the same convention, element E2 is assumed to be in the same file as<br />

element E1. In this case, when SELT$ is called to transfer the third field of the<br />

processor call line, CFN is set to 1, FNL is set to 1, and the field FNAME in ELT$ is set to<br />

the Fieldata character string F.<br />

A leading asterisk sets the implied qualifier flag (IQF) to nonzero and the file qualifier<br />

length (FQL) to zero.<br />

SELT$ handles element cycles from the processor call line as follows:<br />

• If the element cycle field is not specified, the element cycle signal character (ECC)<br />

equals a Fieldata minus sign (-), and the Binary Element Cycle (BEC) equals zero.<br />

• When the element cycle field is specified, the numeric portion of the cycle is<br />

converted to binary and the result is placed in BEC.<br />

• If the cycle is neither numeric nor signed numeric or is greater than 63, the field ECC<br />

contains the Fieldata image E, which indicates an error. Normally, ECC contains 0,<br />

Fieldata +, or Fieldata - when the first character of the cycle is numeric, +, or -,<br />

respectively.<br />

No-find Return<br />

When a no-find return occurs, register A0 contains the address of the control word in the<br />

INFOR table that stopped the search. If this word is zero, the rest of the INFOR table is<br />

empty.<br />

12.3.4. DUSE$–Assign a USE Name to the File in ELT$<br />

The DUSE$ routine dynamically attaches an internal name to the file currently in the<br />

ELT$ table.<br />

The DUSE$ routine is called by the MASM procedure I$NFOR. This procedure can be<br />

used to generate the calling sequence for the relocatable version of the DUSE$ routine,<br />

the common bank version of the routine, or the common bank version of the routine<br />

using the Auto Switch calling sequence. Section 3 describes the advantages and<br />

disadvantages of using the different types of calls.<br />

Calling Format<br />

I$NFOR[,t] ‘DUSE$’[,use-name] [packet]<br />

return<br />

7833 1733–004 12–11


INFOR$–Internal Format Table Interface Routines<br />

Parameters<br />

t<br />

Type of call to DUSE$. This parameter is optional and may be omitted. If CB or A is<br />

specified, it must be enclosed by apostrophes.<br />

blank Call the relocatable version of DUSE$. This is the default if t is omitted.<br />

'CB' Call the common bank version of DUSE$.<br />

'A' Call the common bank version of DUSE$ using the Auto Switch<br />

method.<br />

DUSE$<br />

DUSE$ is the function code which specifies which of the INFOR$ routines the<br />

procedure I$NFOR should call. It must be enclosed by apostrophes.<br />

use-name<br />

packet<br />

The use name that is to be attached to the file currently in the ELT$ table. The use<br />

name may be from 1 to 12 characters selected from the set A through Z, 0 through<br />

9, including the special characters - and $. If given as a string, then this parameter<br />

must be surrounded by apostrophes on the procedure call. This parameter may also<br />

be given as the address of a two-word area that contains the name in Fieldata<br />

format, left-justified and space-filled. If the use-name parameter is not specified in<br />

the DUSE$ call, the use name is assumed to be contained by registers A0 and A1.<br />

Address of the 30-word packet required by the common bank version of INFOR$<br />

routine. This parameter is ignored unless parameter t is set to 'A' or 'CB'. If the<br />

common bank version of the INFOR$ routines is being called and this parameter is<br />

omitted, then the routine assumes the address has already been loaded into register<br />

A2 by the calling program.<br />

Return<br />

After the return, register A0 contains the status bits from CSF$ (see the Exec ER<br />

<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for information). The eight-word area, FILE$, contains<br />

the edited file name, left-justified, and space-filled). If a file name is not specified (FNL =<br />

0), TPF$ is assumed to be the default file.<br />

12–12 7833 1733–004


Section 13<br />

MFDSP$–Master File Directory Service<br />

Package<br />

MFDSP$ retrieves information about files from the master file directory (MFD). A copy<br />

of the MFD is needed before the MFDSP$ routine can be used. The MFD copy is<br />

produced by a call to ER MSCON$ (using the DGET$ or DGETP$ function). Once this<br />

copy of the MFD is in a mass storage file that is assigned to the calling program, the<br />

MFDSP$ routine can be used to retrieve the lead items, main items, and device area<br />

descriptor (DAD) tables of all the files in the MFD. A complete description of how the<br />

ER MSCON$ is used and what information is contained in lead items, main items, and<br />

DAD tables can be found in the Exec Installation and Configuration Guide.<br />

The copy of the MFD can also be obtained by initially calling MFDSP$ with function code<br />

10. MFDSP$ then does an ER MSCON$ DGET$ function to copy the MFD to a scratch<br />

file that MFDSP$ has assigned.<br />

The following subsections describe the packet needed by the MFDSP$ routine, as well<br />

as the MASM calling sequence.<br />

13.1. Packet<br />

The MFDSP$ routine requires that the calling program provide it with a packet. The first<br />

two words of the MFDSP$ packet must contain (in Fieldata LJSF) the internal file name<br />

of the file that holds the output from the ER MSCON$. This file must be assigned<br />

before the call to MFDSP$ can be made. Failure to have the file assigned results in an<br />

I/O error type 01, code 21, contingency 12.<br />

The MFDSP$ routine uses the remainder of the packet as scratch space. Since the<br />

routine does track-size double-buffered I/O, the packet must be large enough to hold two<br />

I/O packets, two track-size buffers, and additional space required by the MFDSP$ routine<br />

for its internal tables. In general, a packet of 4,400 words is an adequate starting size.<br />

Once the ER MSCON$ file is successfully initialized, the exact packet size required is<br />

returned in register A5. The packet length may have to be increased if a 02 error is<br />

returned.<br />

7833 1733–004 13–1


MFDSP$–Master File Directory Service Package<br />

13.2. Calling Sequence<br />

The MFDSP$ routine is called by the MASM procedure M$FDSP. M$FDSP is used to<br />

generate the calling sequence for the relocatable version, the common bank version, or<br />

the common bank version using the Auto Switch calling sequence. Section 3 describes<br />

the advantages and disadvantages of using the different types of calls.<br />

Calling Format<br />

M$FDSP[,t] pkt-length,pkt-addr,func-code,device-table-size<br />

error return<br />

normal return<br />

Parameters<br />

t<br />

Type of call to MFDSP$. This parameter is optional and may be omitted. CB or A, if<br />

specified, must be enclosed by apostrophes.<br />

pkt-length<br />

blank Call the relocatable version of MFDSP$. This is the default if t is<br />

omitted.<br />

'CB' Call the common bank version of MFDSP$.<br />

'A' Call the common bank version of MFDSP$ using the Auto Switch<br />

method.<br />

The length of the packet provided by the calling program to the MFDSP$ routine.<br />

In general, a packet length of 4400 words is needed by MFDSP$. If this parameter<br />

is omitted, then the routine uses the value in H1 of register A0 as the packet length.<br />

The packet length parameter can be given as an actual number, a tag that has been<br />

equated to a number, or the address of a word that contains the packet length<br />

(see 13.4.).<br />

pkt-addr<br />

The address of the packet provided by the calling program to the MFDSP$ routine.<br />

The first two words of the packet must contain the internal file name (12 Fieldata<br />

characters, left-justified and space-filled format) of the file created by using the<br />

ER MSCON$. The rest of the packet is used by the MFDSP$ routine for I/O buffers<br />

and internal I/O packets and tables. If this parameter is omitted, then the routine<br />

uses the value in H2 of register A0 as the address of the packet.<br />

13–2 7833 1733–004


func-code<br />

MFDSP$–Master File Directory Service Package<br />

The function code may be given as an actual number, a tag that has been equated to<br />

an actual number, or the address of a word that contains the number. The first time<br />

the MFDSP$ routine is called, it must be called with a function code of zero or one.<br />

If the MFD file was created using the DGET$ function on the ER MSCON$, then use<br />

zero on the MFDSP$ call. If the MFD file was created using the DGET$P function on<br />

the ER MSCON$, then a function code of one must be used on the MFDSP$ call.<br />

If this parameter is omitted, the routine uses the value in H2 of register A1 as the<br />

function code. If device-table-size is specified as the fourth parameter then this<br />

parameter is required.<br />

The function codes for MFDSP$ are the following:<br />

0 Initialize for DGET$ file and return the address of the first lead item.<br />

1 Initialize for DGETP$ file and return the address of the first main item.<br />

2 Get next lead item (DGET$ file only).<br />

3 Get sector 1 of lead item (DGET$ file only).<br />

4 Get next main item.<br />

5 Get next sector of main item.<br />

6 Get first DAD table associated with the main item returned by function 4 or 5.<br />

7 Get next DAD table.<br />

8 Find item whose MFD address is in A2.<br />

9 Convert MFD address in A2 to DGET$ file relative address in A3.<br />

10 Get a ER MSCON$ (DGET$) copy of the MFD and initialize (function code 0)<br />

device-table-size<br />

If this parameter is omitted, the default maximum size of the device number table is<br />

1,000 words. The device table is a buffer built by MFDSP$ to contain a 1-word entry<br />

for each mass storage device configured on the system. Entries are located in the<br />

table according to the device number or LDAT index (see the Exec System Software<br />

Administration <strong>Reference</strong> <strong>Manual</strong> (subsection 2.2) for more information on the LDAT<br />

index). This means that if a device is numbered 100, its entry will occupy the 101 st<br />

word of the table (entries begin at the second word of the table). If this parameter is<br />

included, the ‘func-code’ parameter must also be included.<br />

The default maximum size of the device number table is 1,000 words. If your system<br />

includes devices numbered greater than 999, you can use this parameter to increase<br />

the table size to a maximum of 4,096 words. The requested word size of the table<br />

should be at least the highest device number plus 1. A device-table-size value of<br />

1000 or less will use the current table size of 1,000 words. The pkt-length<br />

(parameter 1) should also be increased when a larger device table size is requested<br />

by the fourth parameter. The device table size parameter is only used by functions<br />

that initialize the device table (functions 0, 1, and 10.) The value of this parameter is<br />

passed in H1 of register A1.<br />

7833 1733–004 13–3


MFDSP$–Master File Directory Service Package<br />

Returns<br />

On all returns, registers A0 through A3 are set as follows:<br />

A0<br />

A1<br />

A2<br />

A3<br />

A5<br />

Unchanged.<br />

Main storage address of requested item or zero if the requested item could not be<br />

found.<br />

Item type bits (rightmost bit is bit 35):<br />

Bit 35 Lead item<br />

Bit 34 Sector 0 or first item<br />

Bit 33 Sector 1 or extension or continuation item<br />

Bit 31 Main item<br />

Bit 29 DAD table<br />

Bits 33 and 34 may be set with any of the other bits.<br />

For example, if A2 = 0102, then the item returned is the first DAD table.<br />

Error code (if error return is taken). Zero if the item is not found.<br />

MFD address of requested item or zero if the requested item could not be obtained.<br />

Amount of D-bank required for the packet supplied to MFDSP$.<br />

13–4 7833 1733–004


13.3. Error Conditions<br />

MFDSP$–Master File Directory Service Package<br />

On error return, registers A4 and A5 sometimes contain additional information. MFDSP$<br />

error codes (returned in register A2) are as follows:<br />

01<br />

02<br />

03<br />

04<br />

05<br />

06<br />

Function out of range.<br />

Buffer too small.<br />

A4 = one of the following values, indicating the type of buffer size error:<br />

1<br />

2<br />

3<br />

Buffer smaller than minimum scratch space required to do any function.<br />

This code is only returned if the buffer is smaller than 200 words.<br />

Buffer is too small to complete initialization of the DGET$ or DGETP$ file.<br />

Buffer is large enough to complete initialization of the file but is not large<br />

enough to do double-buffered I/O on the file.<br />

A5 = Amount of buffer space required.<br />

In all cases, the calling program may obtain the required amount of buffer space and<br />

reinitialize the package.<br />

Illogical function sequence; for example, a request was made to obtain a main item<br />

extension sector when the preceding request was not for a main item.<br />

Bad link to lead item sector 1; A3 = MFD address in error.<br />

Bad link from lead item to main item; A3 = MFD address in error.<br />

Main item does not have MBIT set.<br />

7833 1733–004 13–5


MFDSP$–Master File Directory Service Package<br />

07<br />

010<br />

011<br />

012<br />

013<br />

014<br />

015<br />

016<br />

017<br />

020<br />

021<br />

Main item does not link back to lead item.<br />

Name in main item not same as name in lead item.<br />

Calculated F-cycle does not match F-cycle in main item.<br />

Bad link to main item extension; A3 = MFD address in error.<br />

Main extension does not link back to main item.<br />

Name in main item extension not same as name in lead item.<br />

Main extension has bad sentinel.<br />

Bad link to first DAD; A3 = MFD address in error.<br />

Bad link from DAD to DAD; A3 = MFD address in error.<br />

Undefined MFD address passed by caller.<br />

MFD address conversion error. A DAS was found with a track address in word zero<br />

that was invalid.<br />

A3<br />

MFD address in error.<br />

13–6 7833 1733–004


022<br />

023<br />

024<br />

025<br />

026<br />

027<br />

A5<br />

041 LDAT index in range but not defined.<br />

042 LDAT index too large.<br />

043 Track offset into unit too large.<br />

044 Track not allocated.<br />

MFDSP$–Master File Directory Service Package<br />

This is a fatal error. Reinitialization of the package is not possible.<br />

I/O error reading sector zero of DGET$ file.<br />

A4 Address of I/O packet.<br />

A5 I/O status code.<br />

I/O error reading first directory track.<br />

A4 Address of I/O packet.<br />

A5 I/O status code.<br />

More than one unit with same LDAT. This is a fatal error in the structure of the<br />

MFD. Reinitialization of the package is not possible.<br />

DAS in unallocated track. This is a fatal error in the structure of the MFD.<br />

Reinitialization of the package is not possible.<br />

Bad I/O status reading DAS.<br />

A4 Address of I/O packet.<br />

A5 I/O status code.<br />

Garbage lead item. A lead item was found that contained invalid links to all main<br />

items.<br />

7833 1733–004 13–7


MFDSP$–Master File Directory Service Package<br />

030<br />

031<br />

032<br />

033<br />

034<br />

035<br />

070<br />

071<br />

077<br />

Error in structure of MFD. This is a fatal error in the structure of the MFD.<br />

Reinitialization of the package is not possible.<br />

Too many units configured. Either there is an error in the MFD or the number of<br />

different units configured is greater than the parameter MAXUNT. MAXUNT is set<br />

to 1,000 in the released version.<br />

Bad main item in DGETP$ file. A main item from a DGETP$ file was found to have<br />

an invalid link to the first DAD table or the first DAD table did not link back to the<br />

main item.<br />

Error return from ER MSCON$ (status word in register A4). See the Exec<br />

Administration <strong>Reference</strong> <strong>Manual</strong>.<br />

Error return from GETPSF$ (status in register A4).<br />

A device table size of more than 4,096 words was requested by the fourth call<br />

parameter “device-table-size.”<br />

Function undefined.<br />

Internal error.<br />

I/O error.<br />

A4 Address of I/O packet.<br />

A5 I/O status code.<br />

13–8 7833 1733–004


13.4. Examples<br />

MFDSP$–Master File Directory Service Package<br />

The following MASM instructions illustrate how the M$FDSP can be used:<br />

$INCLUDE ‘MAXR$/’<br />

$ASCII<br />

$(2)<br />

FNCT $EQU 0<br />

VALUE + 0<br />

BUFFER $RES 4400<br />

BUFFLN $EQU $-BUFFER<br />

$(1)<br />

START .<br />

DL A0,($CFS(‘MFD ‘))<br />

DS A0,BUFFER<br />

M$FDSP,‘CB’ BUFFLN,BUFFER,0<br />

J MFDERR<br />

M$FDSP,‘CB’ BUFFLN,BUFFER,FNCT<br />

J MFDERR<br />

LXI,U X11,0<br />

LXI,U A0,BUFFLN<br />

LXM,U A0,BUFFER<br />

M$FDSP ,, VALUE<br />

J MFDERR<br />

J DONE<br />

MFDERR .<br />

L$SNAP ‘MFDERR’,2,0,0<br />

DONE .<br />

ER EXIT$<br />

$END START<br />

The structure of the MFD is described in the Exec Administration <strong>Reference</strong> <strong>Manual</strong>.<br />

Every filename has a lead item entry in the MFD. For every F-cycle of that particular<br />

filename, a main item entry exists. The lead item contains links to all the main items,<br />

and it can be up to two sectors, sector 0 and sector 1. If there are more main items than<br />

sector 0 can hold links to, a sector 1 of the lead item will contain the links to the rest of<br />

the main items. To access all possible main items in the MFD, you must use the<br />

following algorithm:<br />

Call MFDSP$ specifying function 0 to initialize and get<br />

the first lead item.<br />

GETNEXTMAIN:<br />

Call MFDSP$ specifying function 4, (Get-Next-Main-Item),<br />

and continue calling Get-Next-Main-Item until a<br />

No-Find condition (A1=0) occurs.<br />

Call Get-Sector-1-of-Lead-Item (MFDSP$ function 3).<br />

IF a No-Find condition (A1=0) occurs, jump to GETNEXTLEAD.<br />

Call Get-Next-Main-Item and continue to call it until a<br />

No-Find condition occurs (A1=0).<br />

GETNEXTLEAD:<br />

Call Get-Next-Lead-Item (MFDSP$ function 2).<br />

IF a No-Find condition (A1=0) occurs, exit the program,<br />

OTHERWISE jump to GETNEXTMAIN.<br />

7833 1733–004 13–9


MFDSP$–Master File Directory Service Package<br />

A sample MASM program was developed which performs the preceding algorithm. It is<br />

designed to be called only once.<br />

.<br />

. A program to access all the main items in the Master File Directory<br />

.<br />

INCLUDE ‘MAXR$’<br />

$(1)<br />

START* .<br />

LA,U A0,MFDPKT . Call ER MSCON$ to acquire a<br />

ER MSCON$ . copy of the directory<br />

SA A0,STATWORD .<br />

TZ,S3 STATWORD . Was MSCON$ erroneous?<br />

J ERROR . YES, exit with error<br />

DIROK .<br />

LA A0,(4400,DSPPKT) . Call MFDSP$ function 0 to<br />

LA,U A1,0 . initialize for DGET$ file<br />

LMJ X11,MFDSP$ . and return the address of<br />

. of the first lead item.<br />

J ERROR . A 0,X11 return means error.<br />

SZ A4 . Set a flag showing we have<br />

. not gotten lead item sector 1.<br />

NXTMAIN .<br />

LA A0,(4400,DSPPKT) . Call MFDSP$ function 4<br />

LA,U A1,4 . (Get Next Main Item).<br />

LMJ X11,MFDSP$ .<br />

J ERROR . A 0,X11 return means error<br />

JZ A1,NOSNAP . IF A1=0, no Main Item found<br />

SA A0,SNAPPKT+2 . ELSE, print out sector 0 of<br />

SA,H2 A1,SNAPPKT+1 . the main item<br />

LA,U A0,SNAPPKT .<br />

ER SNAP$ .<br />

NOSNAP .<br />

TZ A1 . Was a Main Item found?<br />

J NXTMAIN . Yes, get the next one.<br />

TNE,U A4,1 . Have we already gotten<br />

. sector 1 of the lead item?<br />

J NEXTLEAD . YES, get the next lead item<br />

LA,U A4,1 . NO, set the flag to show<br />

. we’re getting sector 1 now.<br />

LA A0,(4400,DSPPKT) .<br />

LA,U A1,3 . Get sector 1 of lead item.<br />

LMJ X11,MFDSP$ .<br />

J ERROR . A 0,X11 return means error<br />

JZ A1,NOSNAP3 . IF A1=0, no find occurred.<br />

SA A0,SNAPPKT3+2 . ELSE, print out sector 1 of<br />

SA,H2 A1,SNAPPKT3+1 . the current lead item.<br />

LA,U A0,SNAPPKT3 .<br />

ER SNAP$ .<br />

13–10 7833 1733–004


MFDSP$–Master File Directory Service Package<br />

NOSNAP3 .<br />

TZ A1 . Did we find a sector 1?<br />

J NXTMAIN . YES, get more main items<br />

NEXTLEAD .<br />

SZ A4 . Set the flag showing we have<br />

. not gotten lead item sect 1.<br />

LA A0,(4400,DSPPKT) . (We’re getting the next lead<br />

LA,U A1,2 . item now.)<br />

LMJ X11,MFDSP$ .<br />

J ERROR . A 0,X11 return means error<br />

JZ A1,EXIT . IF A1=0, no find occurred.<br />

SA A0,SNAPPKT2+2 . ELSE print out sector 0 of<br />

SA,H2 A1,SNAPPKT2+1 . the lead item.<br />

LA,U A0,SNAPPKT2 .<br />

ER SNAP$ .<br />

J NXTMAIN . Get the next main item.<br />

ERROR .<br />

L$SNAP ‘ERROR’,2 . An error occurred. ABORT.<br />

ER EABT$ .<br />

EXIT .<br />

er exit$ . exit the program.<br />

$(0) .<br />

SNAPPKT + ‘MAIN’ . The Main Item SNAP packet<br />

+ 0200034000000 . Snap A-registers, 034 words,<br />

+ 0 . start address gets filled in<br />

. in the code.<br />

SNAPPKT2 + ‘LEAD0’ . The Lead Item sector 0 SNAP<br />

+ 0200034000000 . packet<br />

+ 0 .<br />

SNAPPKT3 + ‘LEAD1’ . The Lead Item sector 1 SNAP<br />

+ 0200034000000 . packet<br />

+ 0 .<br />

STATWORD $RES 1 .<br />

MFDPKT + 015 . The packet needed for<br />

+ ‘TDIR$’ . calling ER MSCON$<br />

+ 900 .<br />

+ MFDBUF1,MFDBUF2 .<br />

+ 0 .<br />

MFDBUF1 $RES 1792 .<br />

MFDBUF2 $RES 1792 .<br />

DSPPKT + ‘TDIR$’ . The packet needed for<br />

$RES 4398 . calling MFDSP$.<br />

$END START .<br />

7833 1733–004 13–11


MFDSP$–Master File Directory Service Package<br />

13–12 7833 1733–004


Section 14<br />

PREPRM, PREPRO, PREPF$, and<br />

POSTPR$<br />

PREPRM, PREPRO, and PREPF$ are preprocessor routines; POSTPR$ is a<br />

postprocessor routine. The preprocessor routines assign input and output files to a<br />

processor. The postprocessor routine frees files that were assigned by a preprocessor<br />

routine.<br />

14.1. PREPRO, PREPRM–Preprocessor Routines<br />

PREPRO is designed for use by processors that require three fields on the processor call<br />

statement. The processor calling PREPRO can use up to the maximum 63 fields but<br />

PREPRO will only process the first three fields. Some of the OS 2200 processors that<br />

use PREPRO are ACOB, Collector (MAP), FTN, LINK, and MASM.<br />

PREPRM is designed for use by processors that require two fields on the processor call<br />

statement. The processor calling PREPRM can use up to the maximum 63 fields but<br />

PREPRM will only process the first two fields. Two of the OS 2200 processors that use<br />

PREPRM are ELT and PDP.<br />

See the ECL and FURPUR <strong>Reference</strong> <strong>Manual</strong> for a complete description of the processor<br />

call statement. The general format of the processor call statement is<br />

@[label:]processor[,options] field-1,field-2,field-3,...,field-n<br />

PREPRO dynamically attaches internal filenames to the filenames specified in the first<br />

three fields as follows: SI$$ is attached to field-1, RO$$ is attached to field-2, and SO$$<br />

is attached to field-3. Therefore, field-1 is commonly referred to by the mnemonic SI,<br />

field-2 as RO, and field-3 as SO.<br />

field-1 (SI) is expected to contain the symbolic input to the processor. PREPRO checks<br />

that the element specified is typed as symbolic (element type 01).<br />

field-2 (RO) is expected to contain an output element and may be used for executable,<br />

object module, omnibus, relocatable, or symbolic output. If the Relocatable Output<br />

Routine (ROR) will be used, then field-2 (RO) specifies the relocatable output element.<br />

field-3 (SO) is typically used for the updated symbolic output element if corrections are<br />

applied to the input symbolic element in field-1 (SI). If the Symbolic Input/Output<br />

Routine (SIR$) will be used then field-3 (SO) specifies the symbolic output element.<br />

7833 1733–004 14–1


PREPRM, PREPRO, PREPF$, and POSTPR$<br />

PREPRM dynamically attaches internal filenames to the filenames specified in the first<br />

two fields as follows: SI$$ is attached to field-1 and SO$$ is attached to field-2.<br />

field-1 (SI) is expected to contain the symbolic input to the processor. PREPRM checks<br />

that the element specified is typed as symbolic (element type 01).<br />

field-2 (SO) is typically used for the updated symbolic output element if corrections have<br />

been applied to the input symbolic element in field-1 (SI). This would apply if the routine<br />

SIR$ will be used. However, field-2 (SO) may be used for other types of output<br />

elements.<br />

The mnemonics SI, RO, and SO appear in error messages output by PREPRO and<br />

PREPRM. They refer to the first three fields on the processor call statement as follows:<br />

SI field-1<br />

RO field-2<br />

SO field-2 if PREPRM is used; field-3 if PREPRO is used<br />

14.1.1. PREPRO–Preprocessor Routine<br />

PREPRO reads the processor call statement in internal format (INFOR) (see Section 12),<br />

standardizes its form in PARTBL (see Figure 14-1), and dynamically assigns the<br />

necessary files. PREPRO obtains the “next write location” for program files and, for<br />

tape files, verifies that the source input element exists.<br />

Initial Conditions<br />

The processor must call PREPRO before it executes any read command such as<br />

ER SYMB$ (READ$ function), ER AREAD$, or ER READ$.<br />

The parameter table PARTBL must be externally defined and at least 40 words long. It<br />

also should be zero-filled.<br />

Calling Sequence<br />

LMJ X11,PREPRO$<br />

error return<br />

normal return<br />

Error Return<br />

The error return is taken under the following conditions:<br />

I/O error occurs (A0 = 0)<br />

error when reading INFOR (A0 ≠ 0)<br />

tape positioned improperly (A0 ≠ 0)<br />

file does not exist (A0 ≠ 0)<br />

file is not a program file (A0 ≠ 0)<br />

14–2 7833 1733–004


PREPRM, PREPRO, PREPF$, and POSTPR$<br />

The PARTBL that the calling program provides is filled with the data that is necessary to<br />

process the files. The input/output files are assigned as follows:<br />

SI assigned<br />

RO assigned exclusively<br />

SO assigned exclusively<br />

If SI is the same file as RO or SO, it is assigned exclusively.<br />

14.1.2. PREPRM–Preprocessor Routine<br />

PREPRM generates the source input and source output fields of PARTBL<br />

(see Figure 14-1). It performs dynamic assigns and program file searches on the source<br />

input and source output files.<br />

Initial Condition<br />

PARTBL must be externally defined and 27 words long (or 40 words long if relocatable<br />

output field is needed). It should be zero-filled.<br />

Calling Sequence<br />

LMJ X11,PREPRM$<br />

error return<br />

normal return<br />

The information on the processor call statement is transferred to PARTBL (see Figure<br />

14–1).<br />

The input/output files are assigned as follows:<br />

Symbolic input assigned<br />

Symbolic output assigned exclusively<br />

If the symbolic input file is the same file as the symbolic output file, the symbolic input<br />

file is assigned exclusively.<br />

On error return, an error message is printed.<br />

The PREPRO and PREPRM automatically fill PARTBL fields when called. The fields are<br />

filled with data needed by the SIR$, ROR, SOR, and POSTPR$ routines of <strong>SYSLIB</strong>.<br />

7833 1733–004 14–3


PREPRM, PREPRO, PREPF$, and POSTPR$<br />

Figure 14–1. PARTBL Table Format<br />

14–4 7833 1733–004


14.1.3. PARTBL Description<br />

PREPRM, PREPRO, PREPF$, and POSTPR$<br />

PARTBL is generated by the <strong>SYSLIB</strong> preprocessing routines (PREPRO, PREPRM, or<br />

PREPF) and provides file information to SIR$, ROR, SOR, and POSTPR$. This<br />

information includes the file/element name, cycle, size, and location of elements. All file,<br />

element, and version names are left-justified and space-filled.<br />

The internal filenames are use-names that have been dynamically attached to the<br />

external filenames on the processor call statement by the PREPRM, PREPRO, and<br />

PREPF$ routines. The internal names in PARTBL can be as follows:<br />

Field Processor Call<br />

PREPRO PREPRM PREPF$<br />

Field 1 SI$$ SI$$ SI$<br />

Field 2 R0$$ SO$$ SO$<br />

Field 3 SO$$<br />

The mnemonics refer to<br />

SI symbolic input<br />

SO symbolic output<br />

RO resultant output<br />

The default file name is TPF$. NAME$ is the default element name.<br />

Word 0<br />

input file type<br />

0 Input from runstream<br />

050 Program file<br />

076 Tape file<br />

options<br />

Words 3–12<br />

Option letters are A through Z left to right; for example, if the Z option is<br />

specified, bit 35 is set to 1.<br />

Contain the symbolic input element table item in the program file table of contents.<br />

7833 1733–004 14–5


PREPRM, PREPRO, PREPF$, and POSTPR$<br />

Word 13<br />

file information<br />

Contains indicators that the routine POSTPR$ uses to restore program files to<br />

their original assignment state.<br />

S1 Source input<br />

S2 Source output<br />

S3 Relocatable output<br />

0 No action<br />

1 @FREE,A remove attached name (SI$, SO$, RO$)<br />

2 @FREE,AX remove attached name and release exclusive use<br />

3 @FREE,AR remove attached name and free file<br />

010 File is read inhibited<br />

020 File is tape<br />

040 Write permission denied<br />

ITI–input termination indicator<br />

Contains the SIR$ input termination indicator for purposes of processor<br />

reusability. The possible values are<br />

0<br />

1<br />

2<br />

Reuse of the processor is possible. (Input terminated by call to CLOSR$, or<br />

@EOF image, end of @ADD,E file, INFOR CLIST image, or transparent<br />

control image.)<br />

End of file has been encountered. (Symbiont read operation returned with<br />

bit 0 set in register A0.)<br />

requested cycle<br />

@ENDX has been encountered.<br />

Contains source input element cycle requested. If none requested, the latest<br />

cycle is used.<br />

Words 16–25<br />

Contain the symbolic output element table item.<br />

14–6 7833 1733–004


Words 27–39<br />

May also be used for source output, that is, with SOR.<br />

Words 29–38<br />

Contain the relocatable element table item.<br />

14.1.4. Reusable Processor Construction<br />

PREPRM, PREPRO, PREPF$, and POSTPR$<br />

Initial program load operations are expensive relative to swapping. A mechanism is<br />

provided that allows a program to make itself reusable, thereby avoiding the need to<br />

reload itself. This applies to programs called by processor call statements but not by<br />

@XQT. If the processor in question makes use of the standard processor interface<br />

routines (PREPRO, PREPRM, POSTPR$, ROR, SOR, SIR$), implementing reusability is<br />

not a major task. The following describes the appropriate steps.<br />

1. Register the processor name with INFOR CLIST (ER CLIST$), either ASCII or<br />

Fieldata. Use a type 0 list, because an unknown control statement terminates CLIST<br />

mode. See the Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

2. Become self-initializing or self-reinitializing. This means that any data areas that are<br />

expected to contain particular values at the beginning of the program must be<br />

initialized by a particular instruction sequence. Do not rely on static data initialization.<br />

Do this by explicitly setting all initialized variables to their initial value or by reloading<br />

the main segment. The former method is recommended unless the number of<br />

variables is excessive.<br />

3. Check for potential reusability as indicated in PARTBL by SIR$ (S4 of PARTBL+13;<br />

see Figure 14–1); then call REPRO$ or REPRM$ to read the next INFOR, if any;<br />

reinitialize or terminate depending on which return is given by REPRO$/REPRM$.<br />

This is done with the following steps:<br />

a. If S4 of PARTBL+13 > 0, call POSTPR$, then quit.<br />

b. Zero INFOR$ (see Section 12), then call REPRO$ or REPRM$, setting A0 as<br />

desired.<br />

c. If absolute-eof return, call POSTPR$, then quit.<br />

d. If wrong CLIST value, take action as defined for the particular processor in<br />

question.<br />

e. If error return, treat same as error return from PREPRO or PREPRM.<br />

f. If normal return, reinitialize the processor (and SIR$, if used, by storing 0 in<br />

SIRP2$); begin new processing operation (compilation, assembly, and so on).<br />

7833 1733–004 14–7


PREPRM, PREPRO, PREPF$, and POSTPR$<br />

14.1.4.1. REPRO$–Reusable Processor Preprocessor Routine<br />

REPRO$ reads INFOR from the INFOR CLIST processor call statement. INFOR$ must<br />

be set to zero. REPRO$ also performs some of the same functions as PREPRO.<br />

Initial Conditions<br />

The calling program must establish an INFOR CLIST. On completing SIR$, S4 of<br />

PARTBL+13 must be zero.<br />

PARTBL must be externally defined and at least 40 words long.<br />

Calling Sequence<br />

LA A0,expected-CLIST-index-or-zero<br />

LMJ X11,REPRO$<br />

absolute-eof return<br />

wrong-CLIST-index return<br />

error return<br />

normal return<br />

Returns<br />

error<br />

normal<br />

Identical to those for PREPRO$.<br />

absolute-eof<br />

Indicates that an end-of-file condition has been encountered that cannot be<br />

bypassed; that is, a nontransparent control statement or @ENDX was encountered.<br />

In this case, the processor cannot reuse itself and must terminate.<br />

wrong-CLIST-index<br />

The wrong-CLIST-index return is optional for processors that have more than one<br />

item in their INFOR CLIST and only want to analyze one specific command<br />

automatically; the command is specified by its CLIST index given in A0 prior to<br />

calling REPRO$. This return never occurs if A0 is zero on entry to REPRO$.<br />

After the wrong-CLIST-index return, X11 points to a reentry location you want to<br />

continue with the preprocessor routine. (Note that the CLIST index encountered is<br />

found in S3 of INFOR$+1.) Use the following instructions:<br />

LMJ X11,0,X11<br />

error return<br />

normal return<br />

The two returns are the same as for PREPRO$.<br />

14–8 7833 1733–004


PREPRM, PREPRO, PREPF$, and POSTPR$<br />

14.1.4.2. REPRM$–Reusable Processor Preprocessor Routine<br />

REPRM$ reads INFOR from the INFOR CLIST processor call statement; INFOR$ must<br />

be set to zero. The other functions of REPRM$ are the same as for PREPRM, except<br />

the reentry feature of REPRM.<br />

Initial Conditions<br />

The calling program must establish an INFOR CLIST. On completing SIR$, S4 of<br />

PARTBL+13 must be zero.<br />

PARTBL must be externally defined and at least 27 words long.<br />

Calling Sequence<br />

LA A0,expected-CLIST-index-or-zero<br />

LMJ X11,REPRM$<br />

absolute-eof return<br />

wrong-CLIST-index return<br />

error return<br />

normal return<br />

Returns<br />

error<br />

normal<br />

Identical to those for PREPRM$.<br />

absolute-eof<br />

Indicates that an EOF condition has been encountered that cannot be bypassed; that<br />

is, a nontransparent control statement or @ENDX was encountered. In that case,<br />

the processor cannot reuse itself and must terminate.<br />

wrong-CLIST-index<br />

Is optional for processors that have more than one item in their INFOR CLIST and<br />

only need to analyze one specific command automatically; this is specified by its<br />

CLIST index given in register A0 prior to calling REPRM$. This return is never taken<br />

if register A0 is zero on entry to REPRM$.<br />

After the wrong-CLIST-index return, X11 points to a reentry location when the<br />

preprocessor routine continues. (Note that the CLIST index is found in S3 of<br />

INFOR$+1.)<br />

Use the following instructions to reenter REPRM$:<br />

LMJ X11,0,X11<br />

error return<br />

normal return<br />

The two returns are the same as PREPRM$.<br />

7833 1733–004 14–9


PREPRM, PREPRO, PREPF$, and POSTPR$<br />

14.1.5. FLDGET–Processor Field Retrieval<br />

The FLDGET routine retrieves individual fields from the processor call statement that<br />

PREPRO or PREPRM do not process, such as field number 4 or higher if PREPRO is<br />

being used and field number 3 or higher if PREPRM is being used.<br />

Initial Conditions<br />

FLDGETO$ and FLDGETM$ require PARTBL as defined for PREPRO and PREPRM,<br />

respectively.<br />

Calling Sequence<br />

F66618 $FORM 6,6,6,18 . MASM form directive<br />

F2466 $FORM 24,6,6<br />

or<br />

Parameters<br />

Register A1<br />

S5 of A1<br />

ft<br />

S6 of A1<br />

fn<br />

L A1,(F2466 0,ft,fn)<br />

L A0,(F66618 0,n,m,j)<br />

LMJ X11,FLDGETO$ (if using PREPRO$)<br />

LMJ X11,FLDGETM$ (if using PREPRM$)<br />

error return<br />

normal return<br />

field type of the field to be retrieved (see Field Type in Appendix G)<br />

field number of the field to be retrieved (see Field Number in Appendix G)<br />

14–10 7833 1733–004


Register A0<br />

S2 of A0<br />

S3 of A0<br />

n<br />

H2 of A0<br />

m<br />

j<br />

control bits<br />

Bit 11 (rightmost bit in S2 of A0)<br />

Bit 10<br />

Bit 9<br />

if set, field will be used for output<br />

if not set, field will be used for input<br />

if set, do not allow tape for input<br />

if not set, allow tape for input<br />

PREPRM, PREPRO, PREPF$, and POSTPR$<br />

if set, FLDGET does not print an error message when the specified field<br />

cannot be found<br />

if set, FLDGET prints all error messages<br />

type of element (1 through 7); if field is intended to name an element in a<br />

program file. Add 070 to element type if field is intended to name a file or<br />

an element in a program file. Use 070 if field is intended to name a file only.<br />

address of 13 word data area<br />

Error Return<br />

The error return is taken when<br />

• The file cannot be assigned correctly.<br />

• The input element cannot be found.<br />

• A field is incorrectly coded.<br />

• The specified field cannot be found. (A0 contains the same information SELT$<br />

returned in A0 on a no find return.)<br />

7833 1733–004 14–11


PREPRM, PREPRO, PREPF$, and POSTPR$<br />

The information pertaining to the requested field is transferred from the INFOR table to<br />

the 13-word data area specified by j. FLDGET assigns the files on the processor call line<br />

if necessary. If elements are designated for input, then FLDGET verifies the existence of<br />

the element. An internal file name of the form "Fxxyy$" is attached to each file, where xx<br />

is the field type and yy is the field number. TPF$ is the default file.<br />

The processor can request either a file or an element by adding 070 to the element type.<br />

In other words, 077 in field m indicates an omnibus element or a file. The request for an<br />

element has precedence over a request for a file.<br />

The following describes how FLDGET uses the control bits of parameter n in register A0.<br />

When bit 11 of parameter n is set (in other words, field is for output), FLDGET:<br />

• Assigns file exclusively<br />

• Does not allow tape files<br />

• Stores the element name, version, and type in the 13-word data area<br />

When bit 11 of parameter n is not set (in other words, field is for input), FLDGET<br />

• Allows tape files (depending on bit 10 of parameter n)<br />

• Stores the equipment code in S4 of the first word of the 13-word data area<br />

• Does an ER PFS$ on the supplied information<br />

• Checks element cycling; relative cycling is allowed<br />

When bit 9 of parameter n is set, error message printing is suppressed and the first<br />

word of the 13-word data area is set to negative if the specified field cannot be found.<br />

All other error messages are printed.<br />

14.2. PREPF$–Preprocessor Routine<br />

PREPF$ generates the source input and source output fields of PARTBL (see<br />

Figure 14–1). PREPF$ also performs dynamic assigns of source input and output files if<br />

they are not already assigned. This routine is intended for processors that use files<br />

rather than elements. The input or output file may be a tape file, a temporary file, or a<br />

cataloged file.<br />

PREPF$ is for processors that require two fields on the processor call statement and use<br />

files instead of elements. The files can be tape files, temporary files, or cataloged files.<br />

The processor calling PREPF$ can have a maximum of 63 fields, but PREPF$ will only<br />

process the first two fields. The two fields are processed as the source input file and/or<br />

the source output file depending on the option field on the processor call statement.<br />

PREPF$ performs dynamic assigns of the files if they are not aleady assigned, and<br />

attaches internal file names as follows:<br />

$SI is attached to the source input file.<br />

$SO is attached to the source output file.<br />

14–12 7833 1733–004


PREPRM, PREPRO, PREPF$, and POSTPR$<br />

PREPF$ generates the source input and source output fields of PARTBL (see Figure<br />

14–1).<br />

Initial Condition<br />

PARTBL must be externally defined, and at least 27 decimal words in length, and should<br />

be zero-filled.<br />

Calling Sequence<br />

LMJ X11,PREPF$<br />

error return<br />

normal return<br />

PREPF$ transfers information from the source input and source output parameters of<br />

the processor call line to PARTBL. The options specified on the processor call statement<br />

control how the information is placed in PARTBL. The options and associated results are<br />

as follows:<br />

• No options<br />

− If only the SI field is given, it is assumed to be the output file.<br />

− If only the SO field is given, an error message is printed and the error return is<br />

taken.<br />

− If both SI and SO fields are given, the files are assigned.<br />

− If the SI and SO fields are not given, the PARTBL internal filename for SI and SO<br />

is set to 12 fieldata space characters, and a normal return to the user is taken.<br />

• I option<br />

− SI field is assumed to be the output file.<br />

− If the SO field is given, an error message is printed and the error return is taken.<br />

− If the SI and SO fields are not given, the PARTBL internal file name for SI and SO<br />

is set to 12 Fieldata space characters, and a normal return to the user is taken.<br />

• U option<br />

− If the SI field is not given, an error message is printed and the error return taken.<br />

− If the SO field is given, an error message is printed and the error return taken.<br />

− The U option implies that the next higher F-cycle of the SI file is to be produced.<br />

The SI file must be a cataloged or temporary file. The SI (+1) file must be<br />

assigned to the run. The name specified in the SI field cannot be a use name.<br />

The error return is taken if PREPF$ receives a nonzero status code from a call to ER<br />

CSF$.<br />

7833 1733–004 14–13


PREPRM, PREPRO, PREPF$, and POSTPR$<br />

14.3. POSTPR$–Postprocessor Routine<br />

POSTPR$ removes all changes in the assignment status of a file that PREPRO,<br />

PREPRM, or PREPF$ made.<br />

Calling Sequence<br />

LMJ X11,POSTPR$<br />

error return<br />

normal return<br />

All files specified on the processor call statement are restored to the status they had<br />

before the processor call.<br />

The error return is taken if POSTPR$ receives a nonzero status code from a call to ER<br />

CSF$.<br />

14.4. FLDREL$–Field Release<br />

FLDREL$ removes changes in the assignment of program files that were made by<br />

FLDGETO$ or FLDGETM$.<br />

Calling Sequence<br />

L,U A0,address<br />

LMJ X11,FLDREL$<br />

error return<br />

normal return<br />

where address is the address of the data area given to FLDGET$.<br />

Using the information saved in the first three words of the data area pointed to by<br />

address, the file is restored to the state it was in before FLDGET$ was called.<br />

The error return is taken if the free returns a negative status.<br />

14–14 7833 1733–004


Section 15<br />

ROR, ROR$–Relocatable Output Routine<br />

The Relocatable Output Routine produces a relocatable element that is used for input to<br />

the Collector. The relocatable element is produced from relocatable items the language<br />

processors generate.<br />

The Relocatable Output Routine contains user interfaces SROR$, ROR$, EROR$, and<br />

TBLWR$. The following subsections describe these interfaces. Do not call the<br />

Relocatable Output Routine from a minor register set activity.<br />

If the external buffer version of ROR (ROR$) is used, ($EB entry points) then the $EB<br />

entry points must be used for all calls to ROR. These entry points are: SROR$EB,<br />

ROR$EB, EROR$EB, and TBLWR$EB.<br />

15.1. SROR$, SROR$EB–Start Relocatable Output<br />

Routine<br />

SROR$ initializes ROR prior to writing any relocatable text words.<br />

Calling Sequence<br />

L,U A0,K-bit limit<br />

LMJ X11,SROR$<br />

error return<br />

normal return<br />

Parameters<br />

K-bit limit<br />

The number of bits required to contain either the largest control counter or the<br />

number of undefined symbols for the relocation, whichever is larger.<br />

SROR$ saves the K-bit limit for the relocatable element and establishes the program file<br />

write location for the element via ER PFWL$. (See the Exec ER <strong>Programming</strong> <strong>Reference</strong><br />

<strong>Manual</strong>.) SROR$ adjusts the output buffer to minimize read-before-write operations,<br />

if possible.<br />

7833 1733–004 15–1


ROR, ROR$–Relocatable Output Routine<br />

Error Return<br />

The error return occurs when a nonzero status code is encountered in register A2.<br />

Register A2 contains the status code from ER PFWL$. (See the Exec ER <strong>Programming</strong><br />

<strong>Reference</strong> <strong>Manual</strong>.)<br />

The calling parameters for SROR$EB differ from SROR$ by the addition of a parameter<br />

that defines the external buffer to be used by ROR$. The length and address of the<br />

buffer are provided by the caller in H1 and H2 of register A1, respectively. All other<br />

parameters for SROR$EB are unchanged. A buffer length of at least 1792 words<br />

(1 track) is recommended.<br />

Calling Sequence (External Buffer)<br />

L,U A0,K-bit limit<br />

L A1,(length-of-buffer,address-of-buffer)<br />

LMJ X11,SROR$EB<br />

error return<br />

normal return<br />

Parameters<br />

length-of-buffer<br />

The number of words in buffer. Must be a multiple of 112 words (4 sectors).<br />

A minimum buffer length of 1792 words (1 track) is recommended.<br />

address-of-buffer<br />

Address of the buffer in caller's data area.<br />

15.2. ROR$, ROR$EB–Generation of Relocatable<br />

Output<br />

ROR$ formats relocatable items and outputs text to the relocatable element.<br />

Calling Sequence<br />

L,U A0,address-of-item<br />

LMJ X11,ROR$ (or ROR$EB)<br />

error return<br />

normal return<br />

Error Return<br />

The error return is taken when<br />

• An I/O error occurs; A1 will contain the status.<br />

• An internal inconsistency occurred in ROR; A1 will be zero.<br />

15–2 7833 1733–004


Item Description<br />

ROR, ROR$–Relocatable Output Routine<br />

ROR is called for every text word that will be inserted into the relocatable element.<br />

(Examples of text words are the instruction or data word.) For each call, the calling<br />

program must supply the text word and its relocation information in an item.<br />

The minimum length of the item is three words; however, it may be larger. Any<br />

relocation of a text word, other than a simple relocation of the right address under the<br />

same location counter that applies to the text word, must be handled through special<br />

relocation items. Any number of special relocation items may be appended to the item.<br />

Figure 15–1 shows the ROR item format.<br />

0 n not used l r<br />

1 text word<br />

2 f zero lc address<br />

special relocation items<br />

.. . . .<br />

n-1 special relocation items<br />

Field Descriptions<br />

Word 0<br />

n<br />

l<br />

r<br />

Figure 15–1. ROR: Item Format<br />

Item length, including any special relocation items.<br />

Bits 16 and 17 of a left address field plus 10 sign bits, or 12 sign bits, for a left<br />

half-word field.<br />

Bits 16 and 17 of a right address field plus 10 sign bits, or 12 sign bits, for a right<br />

half-word field.<br />

7833 1733–004 15–3


ROR, ROR$–Relocatable Output Routine<br />

Word 1<br />

text word<br />

Word 2<br />

f<br />

lc<br />

Bit 3 = 1, right address (bits 20-35) relocatable.<br />

Bit 2 = 1, left address (bits 2-17) relocatable.<br />

Contains the location counter the text word is under, and by which relocation<br />

specified by f takes place. May be overridden by a type 013 special item.<br />

address<br />

Address of the text word.<br />

Words 3, 4, and so on, may contain special relocation items.<br />

Location Counter Formats<br />

Following are descriptions of the three types of location counters.<br />

• The Location Counter Relocation Item, type 011, is used for relocation by a location<br />

counter other than the one specified in S3 of word 2.<br />

The format is<br />

01 011 l r lc<br />

where:<br />

l<br />

r<br />

lc<br />

The left margin of the field of relocation (a bit number in the range 0–35).<br />

The right margin of the field of relocation (a bit number in the range 0–35,<br />

with r less than or equal to l).<br />

Location counter number; a signed 12-bit integer. The starting address of the<br />

location counter is added if lc is positive or subtracted if lc is negative.<br />

15–4 7833 1733–004


ROR, ROR$–Relocatable Output Routine<br />

• The External <strong>Reference</strong> Item (two words), type 012, is used for relocation by the<br />

value of an externally defined symbol.<br />

The format is<br />

02 012 l r signs<br />

where:<br />

l<br />

r<br />

signs<br />

sequence number of the external reference in the preamble<br />

The left margin of the field of relocation.<br />

The right margin of the field of relocation.<br />

Twelve bits of all zeros or ones, depending on whether the external reference is<br />

to be added or subtracted, respectively.<br />

• The Large Location Counter Item, type 013, format is:<br />

01 013 not used lc<br />

where lc is the location counter number the text will be under.<br />

If this special item is used, it must be the first special item appended to the item.<br />

This item overrides the lc in Word 2 of the item. This allows location counters<br />

greater than 63.<br />

ROR formats the text words and the relocation information into blocks and writes the<br />

blocks to the relocatable element.<br />

7833 1733–004 15–5


ROR, ROR$–Relocatable Output Routine<br />

15.3. EROR$, EROR$EB–End Relocatable Output<br />

Routine<br />

EROR$ terminates ROR after the last text word has been processed.<br />

EROR outputs the last block built by ROR and generates a transfer image. The transfer<br />

image is a special word group. The format is described in Section 5, “Relocatable Binary<br />

(RB) Format” of the Data Structures <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

Calling Sequence<br />

L A0,(transfer-addr,transfer-addr-lc)<br />

LMJ X11,EROR$ (or EROR$EB)<br />

error return<br />

normal return<br />

Note: If a transfer location is not specified, then A0 must be negative (for example, if<br />

the element is a subroutine).<br />

Parameters<br />

transfer-addr<br />

location of the first instruction to be executed in the main program.<br />

transfer-addr-lc<br />

location counter to which the address applies.<br />

Error Return<br />

The error return is taken when an I/O error occurs. The status is returned in A1.<br />

15.4. TBLWR$, TBLWR$EB–Write Table to File<br />

TBLWR$ writes the preamble constructed by the calling program to the program file that<br />

contains the relocatable text. ROR must have already written the element text to the<br />

program file, and EROR must have been called.<br />

An ER PFI$ is done to update the file's table of contents.<br />

The preamble consists of one to five tables. The entries in PARTBL+29 through 38<br />

(see Figure 14–1) are updated to reflect the preamble length, preamble location, and the<br />

element type (5 = relocatable). The format of the preamble is described in Section 5,<br />

“Relocatable Binary (RB) Format” of the Data Structures <strong>Programming</strong> <strong>Reference</strong><br />

<strong>Manual</strong>.<br />

15–6 7833 1733–004


Calling Sequence<br />

L,U A0,preamble-addr<br />

L,U A1,preamble-length<br />

LMJ X11,TBLWR$ (or TBLWR$EB)<br />

error return<br />

normal return<br />

Error Return<br />

The error return is taken when<br />

ROR, ROR$–Relocatable Output Routine<br />

• An I/O error occurs. A1 will contain the status.<br />

• An error occurs on the ER PFI$. A1 will equal 0 and A2 will be the status.<br />

15.5. Optimization Information<br />

ROR and the Collector are more efficient if the instructions and data are coded under<br />

control of location counters one and two, respectively. ROR has less processing to do<br />

and produces a more compact relocatable element. The Collector has a smaller bit<br />

stream to analyze.<br />

7833 1733–004 15–7


ROR, ROR$–Relocatable Output Routine<br />

15–8 7833 1733–004


Section 16<br />

SAR$–Symbolic Access Routines<br />

The Symbolic Access Routines (SAR$) allow the calling program to read and write<br />

system data format (SDF) files.<br />

SAR$ has four main functions:<br />

• READ<br />

Read symbolic images from SDF files, SDF elements, the READ$ file, or an alternate<br />

READ$ file.<br />

• WRITE<br />

Write symbolic images to SDF files, SDF elements, the standard PRINT$ file, the<br />

standard PUNCH$ file, alternate PRINT$ files, or alternate PUNCH$ files.<br />

• ATREAD<br />

Write a symbolic image to the current output stream and read a symbolic image<br />

from the current input stream.<br />

• COM<br />

Write a symbolic image to the operator's console and read a symbolic image from<br />

the operator's console.<br />

Symbolic images have traditionally been in the Fieldata, ASCII/ISO, or attributed<br />

character data (ACD) character sets. Additional coded character sets (CCS) have now<br />

been defined and are supported by the Symbolic Access Routines. A total of 63 CCSs<br />

are currently defined. Forty of these are referred to as ASCII-like. This means that the<br />

character set is essentially identical to the ASCII/ISO character set in the octal range 000<br />

through 0177, with any differences being minor. Refer to the ER <strong>Programming</strong><br />

<strong>Reference</strong> <strong>Manual</strong>, Table 14–1, for a detailed description of the CCSs. Throughout<br />

Section 16, wherever ASCII or ASCII/ISO is used, the SAR$ capabilities apply equally to<br />

all ASCII-like character sets.<br />

The SAR$ functions may be called from either PLUS or MASM programs. These<br />

functions are described in the following subsections.<br />

SAR$ is available in relocatable elements and in the <strong>SYSLIB</strong> common banks. The READ,<br />

ATREAD, and COM functions are in the common bank absolute <strong>SYSLIB</strong>$3. The WRITE<br />

function is in the common bank absolute <strong>SYSLIB</strong>$4. Appendix E lists the relocatable and<br />

common bank entry points for SAR$.<br />

7833 1733–004 16–1


SAR$–Symbolic Access Routines<br />

16.1. File Information Packet<br />

The file information packet (FIP) is used to pass information to the Symbolic Access<br />

Routines (SAR$) for input and output to SDF files, SDF elements, and alternate symbiont<br />

files. The SAR$ calling program must supply the D-bank storage space for the FIP.<br />

The file information packet is not required for reading from or writing to the standard<br />

symbiont (READ$ and PRINT$) files.<br />

All required information is placed in the FIP, and the address of the FIP is placed in the<br />

SAR$ READ or WRITE packets.<br />

16.1.1. PLUS Interface<br />

The type definition for the FIP is contained in the PLUS definition element<br />

SAR$FILEPKTD in the <strong>SYSLIB</strong> file SYS$LIB$*<strong>SYSLIB</strong> and may be obtained with the<br />

PLUS COPY statement “COPY ('SAR$FILEPKTD');”. The identifier of the FIP data<br />

structure type is SAR_FILE_INFO_PACKET. The length of the FIP is equal to the<br />

constant SAR_FILE_INFO_PACKET_WORD_LENGTH defined in the element<br />

SAR$FILEPKTD (current length is nine words). SAR_FILE_INFO_PACKET is defined as<br />

LOCATABLE.<br />

16.1.1.1. FIP Field Descriptions<br />

The following fields of the FIP are set by the calling program:<br />

PACKET_VERSION<br />

PLUS Attribute: 6-bit integer<br />

The FIP data structure version. The current version is equal to the constant<br />

SAR_FILE_INFO_PACKET_CURRENT_VERSION defined in the element<br />

SAR$FILEPKTD.<br />

ACCESS_TYPE<br />

PLUS Attribute: 6-bit status<br />

The type of input being accessed<br />

S'SDF_file' Input is from an SDF file.<br />

S'SDF_element' Input is from an SDF element.<br />

S'PROC' Input is from a PLUS, FORTRAN, or COBOL PROC.<br />

S'Alternate_symbiont' Input is from an alternate READ file.<br />

This field is set for input only; it is omitted for output. If input is from the runstream<br />

(READ$ file), the FIP address in the READ packet is set to NULL.<br />

16–2 7833 1733–004


PROC_CHARACTER_TYPE<br />

PLUS Attribute: 6-bit status<br />

The character set type of the PROC to be read<br />

S'Fieldata' Fieldata 6-bit characters.<br />

S'ASCII_ISO' ASCII/ISO 9-bit characters.<br />

S'ACD' Attributed character data (ACD).<br />

This field is defined only for the ACCESS_TYPE of S'PROC'.<br />

PROC_SOURCE_LANGUAGE_TYPE<br />

PLUS Attribute: 9-bit status<br />

The source language type of the PROC to be read<br />

SAR$–Symbolic Access Routines<br />

S'PLUS' The source language type is PLUS.<br />

S'FORTRAN' The PROC source language type is FORTRAN.<br />

S'COBOL' The PROC source language type is COBOL.<br />

This field is defined only for the ACCESS_TYPE of S'PROC'.<br />

FILE_NAME_BUFFER_BYTE_LENGTH<br />

PLUS Attribute: 9-bit integer<br />

The length in bytes of the buffer containing the internal file name; legal values are<br />

from 1 to 12 bytes. May be set to 12 if the file name is space-filled to 12 characters.<br />

ELEMENT_NAME_BUFFER_BYTE_LENGTH<br />

PLUS Attribute: 9-bit integer<br />

The length in bytes of the buffer containing the output element name; legal values<br />

are from 1 to 12 bytes. This field is set for output only; it is omitted for input. May<br />

be set to 12 if the element name is space-filled to 12 characters.<br />

VERSION_NAME_BUFFER_BYTE_LENGTH<br />

PLUS Attribute: 9-bit integer<br />

The length in bytes of the buffer containing the output version name; legal values are<br />

from 1 to 12 bytes. This field is set for output only; it is omitted for input. May be<br />

set to 12 if the version name is space-filled to 12 characters.<br />

7833 1733–004 16–3


SAR$–Symbolic Access Routines<br />

FILE_NAME_BUFFER_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the buffer containing the internal file name. The file name must be in<br />

the ASCII/ISO character set, with length from 1 to 12 characters.<br />

ELEMENT_NAME_BUFFER_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the buffer containing the output element name. The element name<br />

must be in the ASCII/ISO character set, with length from 1 to 12 characters. This<br />

field is used only for output and an OUTPUT_FILE_TYPE of S'SDF_element'.<br />

VERSION_NAME_BUFFER_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the buffer containing the output version name. The version name<br />

must be in the ASCII/ISO character set, with length from 1 to 12 characters. This<br />

field is used only for output and an OUTPUT_FILE_TYPE of S'SDF_element'.<br />

ELEMENT_FLAG_BITS<br />

PLUS Attribute: 12-bit logical<br />

The element flag bits as defined in the Program File Element Table, Data Structures<br />

<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>. This field is defined only if writing to an SDF<br />

element.<br />

ELEMENT_TYPE<br />

PLUS Attribute: 6-bit integer<br />

The symbolic element type; see the Data Structures <strong>Programming</strong> <strong>Reference</strong><br />

<strong>Manual</strong> for element type definitions. This field is defined only if writing to an SDF<br />

element.<br />

ELEMENT_SUBTYPE<br />

PLUS Attribute: 6-bit integer<br />

The symbolic element subtype; see 2.6 for element subtype definitions. This field is<br />

defined only if writing to an SDF element.<br />

16–4 7833 1733–004


ACTUAL_ELEMENT_CYCLE<br />

PLUS Attribute: 6-bit integer<br />

SAR$–Symbolic Access Routines<br />

The absolute cycle number of the SDF element. This field is defined only if reading<br />

from or writing to an SDF element. If reading from an SDF element and if the actual<br />

element cycle is not known, set this field to 0‘77’ to read all nondeleted element<br />

cycles.<br />

HIGHEST_SECTOR_ADDRESS<br />

PLUS Attribute: 24-bit integer<br />

The highest mass storage sector address assigned to the SDF file used for input or<br />

output. This field is not currently used.<br />

NEXT_READ_SECTOR_ADDRESS<br />

PLUS Attribute: 24-bit integer<br />

The mass storage sector address of the SDF input file to begin reading at. This field<br />

is not used for symbiont files.<br />

WORD_OFFSET_INTO_READ_SECTOR<br />

PLUS Attribute: 6-bit integer<br />

The word offset into the mass storage sector address of the SDF input file to begin<br />

reading at. This field is not used for symbiont files.<br />

NEXT_READ_LOCATION<br />

PLUS Attribute: word machine integer<br />

A one-word combination of NEXT_READ_SECTOR_ADDRESS and<br />

WORD_OFFSET_INTO_READ_SECTOR contained in bits 12 to 35 and in bits 0 to 5,<br />

respectively. (Bit 0 is the leftmost bit of the word.)<br />

NEXT_WRITE_SECTOR_ADDRESS<br />

PLUS Attribute: 24-bit integer<br />

The mass storage sector address of the SDF output file to begin writing at. This field<br />

is not used for symbiont files.<br />

WORD_OFFSET_INTO_WRITE_SECTOR<br />

PLUS Attribute: 6-bit integer<br />

The word offset into the mass storage sector address of the SDF output file to begin<br />

writing at. This field is not used for symbiont files.<br />

7833 1733–004 16–5


SAR$–Symbolic Access Routines<br />

NEXT_WRITE_LOCATION<br />

PLUS Attribute: word machine integer<br />

A one-word combination of NEXT_WRITE_SECTOR_ADDRESS and<br />

WORD_OFFSET_INTO_WRITE_SECTOR contained in bits 12 to 35 and in bits 0 to 5,<br />

respectively. (Bit 0 is the leftmost bit of the word.)<br />

16.1.1.2. READ and WRITE Field Requirements<br />

FIP fields required for the READ and WRITE functions of SAR$ are as follows:<br />

• Fields required for READ<br />

PACKET_VERSION<br />

ACCESS_TYPE<br />

FILE_NAME_BUFFER_ADDRESS<br />

FILE_NAME_BUFFER_BYTE_LENGTH<br />

NEXT_READ_LOCATION<br />

• Additional fields required for READ if the ACCESS_TYPE is S'SDF_element' or<br />

S'PROC'<br />

PROC_CHARACTER_TYPE<br />

PROC_SOURCE_LANGUAGE_TYPE<br />

ACTUAL_ELEMENT_CYCLE<br />

• Fields required for WRITE<br />

PACKET_VERSION<br />

FILE_NAME_BUFFER_ADDRESS<br />

FILE_NAME_BUFFER_BYTE_LENGTH<br />

NEXT_WRITE_LOCATION<br />

• Additional fields required for WRITE if the OUTPUT_FILE_TYPE is S'SDF_element'<br />

ELEMENT_NAME_BUFFER_ADDRESS<br />

ELEMENT_NAME_BUFFER_BYTE_LENGTH<br />

VERSION_NAME_BUFFER_ADDRESS<br />

VERSION_NAME_BUFFER_BYTE_LENGTH<br />

ELEMENT_FLAG_BITS<br />

ELEMENT_TYPE<br />

ELEMENT_SUBTYPE<br />

ACTUAL_ELEMENT_CYCLE<br />

The information that is stored in the FIP may be obtained from PARTBL, the externalized<br />

table produced by the preprocessor routines PREPRO and PREPRM.<br />

16–6 7833 1733–004


16.1.2. MASM Interface<br />

SAR$–Symbolic Access Routines<br />

The S$ARFIPDEF PROC generates the EQUFs defining the packet fields of the file<br />

information packet (FIP). The element SAR$PROCS contains this PROC. S$ARFIPDEF<br />

also equates the current packet version and word length of the FIP to labels<br />

FIP$CURVER and FIP$PWLEN, respectively. FIP$PWLEN is defined by the<br />

S$ARFIPDEF PROC (current length is nine words).<br />

Calling Format<br />

S$ARFIPDEF x-reg,b-reg,dispflg<br />

Parameters<br />

x-reg<br />

b-reg<br />

dispflg<br />

The X-register to be attached to the file information packet EQUFs. If it is omitted,<br />

no X-register is attached to the EQUFs.<br />

The B-register to be attached to the file information packet EQUFs. If it is omitted,<br />

no B-register is attached to the EQUFs.<br />

A flag to display a table of file information packet EQUFs. If it is set to 'D', the field<br />

names are displayed. Otherwise the field names are not displayed.<br />

Example<br />

$ASCII<br />

$INCLUDE ‘MAXR$’<br />

S$ARFIPDEF X7,,‘D’<br />

This PROC call generates the EQUFs using X7 and no B-register, and displays the file<br />

information packet fields.<br />

16.1.2.1. FIP Field Descriptions<br />

The following fields of the FIP are set by the calling program:<br />

FIP$VER<br />

The FIP data structure version. The current version is equal to label FIP$CURVER,<br />

defined by the S$ARFIPDEF PROC.<br />

7833 1733–004 16–7


SAR$–Symbolic Access Routines<br />

FIP$ACTYP<br />

The type of input being accessed<br />

0 Input is from an SDF file.<br />

1 Input is from an SDF element.<br />

2 Input is from a COBOL, FORTRAN, or PLUS PROC.<br />

3 Input is from an alternate READ file.<br />

This field is set for input only; it is omitted for output.<br />

FIP$PCHAR<br />

The character set type of the PROC to be read<br />

0 Fieldata 6-bit characters.<br />

01 ASCII/ISO 9-bit characters.<br />

077 Attributed character data (ACD).<br />

This field is defined only for the access type 2 (PROC).<br />

FIP$PLANG<br />

The source language type of the PROC to be read. For access type of PROC<br />

1 The PROC source language type is COBOL.<br />

2 The PROC source language type is FORTRAN.<br />

4 The PROC source language type is PLUS.<br />

This field is defined only for the access type 2 (PROC).<br />

FIP$FNLEN<br />

The length in bytes of the buffer containing the internal file name; legal values are<br />

from 1 to 12 bytes. May be set to 12 if the file name is space-filled to 12 characters.<br />

FIP$ENLEN<br />

The length in bytes of the buffer containing the input or output element name; legal<br />

values are from 1 to 12 bytes. May be set to 12 if the element name is space-filled<br />

to 12 characters.<br />

FIP$VNLEN<br />

The length in bytes of the buffer containing the input or output version name; legal<br />

values are from 1 to 12 bytes. May be set to 12 if the version name is space-filled to<br />

12 characters.<br />

16–8 7833 1733–004


FIP$FNBUF<br />

SAR$–Symbolic Access Routines<br />

The address of the buffer containing the internal file name. The file name must be in<br />

the ASCII/ISO character set, with length from 1 to 12 characters.<br />

FIP$ENBUF<br />

The address of the buffer containing the output element name. The element name<br />

must be in the ASCII/ISO character set, with length from 1 to 12 characters. This<br />

field is used only for output and an output file type (SW$OUTFILT) of 0 (SDF<br />

element).<br />

FIP$VNBUF<br />

The address of the buffer containing the output version name. The version name<br />

must be in the ASCII/ISO character set, with length from 1 to 12 characters. This<br />

field is used only for output and an output file type (SW$OUTFILT) of 0 (SDF<br />

element).<br />

FIP$EFB1<br />

The first set of 6 element flag bits (12 total), corresponding to bits 0 to 5 of word 3 in<br />

the Program File Element Table Item. See the Data Structures <strong>Programming</strong><br />

<strong>Reference</strong> <strong>Manual</strong> for further details. This field is defined only if reading from or<br />

writing to an SDF element.<br />

FIP$EFB2<br />

Second set of 6 element flag bits, corresponding to bits 6 to 11 of word 3 in the<br />

Program File Element Table Item. See the Data Structures <strong>Programming</strong> <strong>Reference</strong><br />

<strong>Manual</strong> for further details. This field is defined only if reading from or writing to an<br />

SDF element.<br />

FIP$ETYP<br />

The symbolic element type; see the Data Structures <strong>Programming</strong> <strong>Reference</strong><br />

<strong>Manual</strong>. This field is defined only if reading from or writing to an SDF element.<br />

FIP$ESTYP<br />

The symbolic element subtype; see 18.3 for element subtype definitions. This field<br />

is defined only if reading from or writing to an SDF element.<br />

FIP$ECYC<br />

The absolute cycle number of the SDF element. This field is defined only if reading<br />

from or writing to an SDF element. If reading from an SDF element and if the actual<br />

element cycle is not known, set this field to 0'77' to read all nondeleted element<br />

cycles.<br />

7833 1733–004 16–9


SAR$–Symbolic Access Routines<br />

FIP$HSEC<br />

The highest mass storage sector address assigned to the SDF file used for input or<br />

output. This is a 24-bit field contained in bits 12 to 35 of the word (bit 0 is the<br />

leftmost bit of the word). This field is not currently used.<br />

FIP$NRSEC<br />

The mass storage sector address of the input file to begin reading at. This field is a<br />

full word; however, S1 contains the word offset (FIP$NRWO), which is not part of<br />

the sector address. This field is not used for symbiont files.<br />

FIP$NRWO<br />

The word offset into the mass storage sector address of the SDF input file to begin<br />

reading at. This field is equated to S1 of FIP$NRSEC, and must be set after<br />

FIP$NRSEC is set. Otherwise it will be overwritten. This field is not used for<br />

symbiont files.<br />

FIP$NWSEC<br />

The mass storage sector address of the SDF output file to begin writing at. This<br />

field is a full word; however, S1 contains the word offset (FIP$NWWO) which is not<br />

part of the sector address. This field is not used for symbiont files.<br />

FIP$NWWO<br />

The word offset into the mass storage sector address of the SDF output file to begin<br />

writing at. This field is equated to S1 of FIP$NWSEC, and must be set after<br />

FIP$NWSEC is set. Otherwise it will be overwritten. This field is not used for<br />

symbiont files.<br />

16–10 7833 1733–004


16.1.2.2. READ and WRITE Field Requirements<br />

SAR$–Symbolic Access Routines<br />

FIP fields required for the READ and WRITE functions of SAR$ are as follows:<br />

• Fields required for READ<br />

FIP$VER<br />

FIP$ACTYP<br />

FIP$FNBUF<br />

FIP$FNLEN<br />

FIP$NRSEC<br />

• Additional fields required for READ if FIP$ACTYP is 1 or 2<br />

FIP$PCHAR<br />

FIP$PLANG<br />

FIP$ECYC<br />

• Fields required for WRITE<br />

FIP$VER<br />

FIP$FNBUF<br />

FIP$FNLEN<br />

FIP$NWSEC<br />

• Additional fields required for WRITE if SW$OUTFILT is 0<br />

FIP$VNBUF<br />

FIP$EFB2<br />

FIP$VNLEN<br />

FIP$ETYP<br />

FIP$ENBUF<br />

FIP$ESTYP<br />

FIP$ENLEN<br />

FIP$ECYC<br />

FIP$EFB1<br />

7833 1733–004 16–11


SAR$–Symbolic Access Routines<br />

16.2. SAR$ Internal Format<br />

All of the SDF images handled by the SAR$ functions are placed in internal format.<br />

Internal format provides a common means of handling SDF images in different formats<br />

(nonshift coded, shift-coded, ACD, and so forth). The READ, ATREAD, and COM<br />

functions of SAR$ return SDF images to the calling program in internal format.<br />

The calling program must supply images that will be written out by the WRITE, ATREAD,<br />

and COM functions of SAR$ in internal format.<br />

Internal format consists of the character part and the attribute part.<br />

The character part contains a sequential list of the actual characters contained in the<br />

image. The character part contains no shift codes, attributes, or other special<br />

information. The characters in the character part must be in the ASCII/ISO, ASCII-like, or<br />

JIS-16 (kanji) character sets.<br />

The attribute part contains the attributes that apply to the characters in the character<br />

part. Each attribute is represented as a one-word entry in the attribute table, with the<br />

format in Figure 16–1<br />

index type value<br />

0 17 18 26 27 35<br />

Figure 16–1. SAR$: Attribute Table Entry<br />

The index is an 18-bit integer that indicates the position of the character in the character<br />

part to which this attribute applies. When reading and writing ACD images, the index<br />

range begins with 1 and ends with n, where n is the last 9-bit byte in the character part.<br />

(An index is in 9-bit byte granularity.) When reading and writing shift coded images, the<br />

index range begins with 1 and ends with n + 1. In this case, an index value of n + 1<br />

corresponds to a shift coded image that ends with a shift code and is not followed by<br />

any additional characters. More than one attribute can have the same index. However,<br />

indexes must be in nondecreasing order.<br />

The type is a 9-bit octal value that describes the type of the attribute. The types that are<br />

currently defined are as follows:<br />

001 Reset all attributes to default values<br />

002 The character set type<br />

003 The width of the character<br />

004 The height of the character<br />

005 The horizontal spacing between characters (center to center)<br />

Any number of attributes may apply to the same character.<br />

The value is a 9-bit octal value that provides specific information for the attribute type.<br />

These values are defined in the PLUS COPY element, ACD$VALUES. Table 16-1 lists<br />

the possible values for attribute types.<br />

16–12 7833 1733–004


Type<br />

SAR$–Symbolic Access Routines<br />

Table 16–1. SAR$: Attribute Types and Values<br />

Value When<br />

Reading/ Writing<br />

Shift-coded Data<br />

Value When Reading/<br />

Writing ACD<br />

Description<br />

001 0 0 No value applies<br />

002 01<br />

020<br />

003, 004 0<br />

003<br />

004<br />

005<br />

006<br />

005 0<br />

001<br />

002<br />

003<br />

005<br />

007<br />

7833 1733–004 16–13<br />

0<br />

020<br />

0<br />

0106<br />

0132<br />

0170<br />

0360<br />

0<br />

not applicable<br />

0110<br />

0220<br />

0170<br />

0140<br />

ASCII/ISO or ASCII-like<br />

JIS-16 kanji<br />

Device-dependent default<br />

Seven point<br />

Nine point<br />

Twelve point<br />

Twenty-four point<br />

Device-dependent default<br />

2.5 cpi (characters per inch)<br />

10 cpi<br />

5 cpi<br />

6 cpi<br />

7.5 cpi<br />

Once an attribute type and value are applied to a character in the character part, that<br />

attribute type and value apply to all of the following characters in the character part.<br />

The attribute type and value remain active until either another value for that attribute<br />

type is applied or the end of the character part is reached. If several attributes with the<br />

same types but different values apply to the same character, the last attribute value is<br />

used.


SAR$–Symbolic Access Routines<br />

16–14 7833 1733–004


Section 17<br />

SAR$ READ<br />

17.1. READ Function/PLUS Interface<br />

The SAR$ READ procedures can be called directly from PLUS. These procedures are<br />

• SAR_OPEN_INPUT<br />

• SAR_READ<br />

• SAR_CLOSE_INPUT<br />

All SAR$ data structure definitions and procedure calls are contained in definition<br />

elements. These definitions and procedures may be obtained with the PLUS COPY<br />

statement.<br />

17.1.1. READ Packet Data Structure Description<br />

The SAR$ READ function requires a READ packet data structure for the<br />

SAR_OPEN_INPUT, SAR_READ, and SAR_CLOSE_INPUT procedure calls.<br />

The type definition for this data structure is contained in the element SAR$RPKTD in the<br />

<strong>SYSLIB</strong> file (SYS$*RLIB$ or SYS$LIB$*<strong>SYSLIB</strong>) and may be obtained with the COPY<br />

statement. The identifier for the READ packet data structure type is<br />

SAR_READ_PACKET.<br />

The calling program must provide storage space for the READ packet data structure plus<br />

any necessary buffers and tables, since SAR$ does not have any D-bank storage.<br />

The length of the READ packet is equal to the constant<br />

SAR_READ_PACKET_WORD_LENGTH, defined in the element SAR$RPKTD<br />

(current length is 36 words). SAR_READ_PACKET is defined as LOCATABLE.<br />

The calling program places information in the READ packet data structure and passes the<br />

address of the data structure to SAR$ through the procedure calls.<br />

7833 1733–004 17–1


SAR$ READ<br />

17.1.1.1. Required Information for READ Procedures<br />

The calling program must set the following fields of the READ packet to appropriate<br />

values.<br />

PACKET_VERSION<br />

PLUS Attribute: 6-bit integer<br />

The READ packet data structure version. The current version is equal to the<br />

constant SAR_READ_PACKET_CURRENT_VERSION defined in the element<br />

SAR$RPKTD. The PACKET_VERSION must not be modified between calls to the<br />

SAR$ READ routine.<br />

INPUT_FILE_INFO_PKT_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the input file information packet. This packet is supplied by the caller<br />

(see 16.1). Set to NULL if input is from the runstream.<br />

INPUT_BUFFER_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the input buffer, used to read images from the input file or element.<br />

This field is defined only if input is from an SDF file or element. It is omitted if input<br />

is from the runstream or an alternate READ$ file. Subsection 17.1.2 describes the<br />

input buffer.<br />

INPUT_BUFFER_WORD_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The length in words of the input buffer. It must be of length (28* dpf * n), where<br />

dpf is the disk prepping factor and n is a positive integer. This field is defined only if<br />

input is from an SDF file or element. It is omitted if input is from the runstream or<br />

an alternate READ$ file.<br />

IMAGE_BUFFER_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the input image buffer, into which SAR$ places individual images<br />

from the input buffer. Subsection 17.1.2 describes the image buffer.<br />

IMAGE_BUFFER_WORD_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The length in words of the input image buffer.<br />

17–2 7833 1733–004


TEXT_BUFFER_ADDRESS:<br />

PLUS Attribute: word pointer<br />

SAR$ READ<br />

The address of the input text buffer, into which SAR$ places the character text of<br />

the image read. Subsection 17.1.2 describes the text buffer.<br />

TEXT_BUFFER_BYTE_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The length in 9-bit bytes of the input text buffer.<br />

ATTRIBUTE_TABLE_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the input attribute table where SAR$ places the attributes describing<br />

the character text of the image read. This field is undefined if the<br />

ATTRIBUTE_TABLE_WORD_LENGTH is zero. Subsection 17.1.2 describes the<br />

format of the attribute table.<br />

ATTRIBUTE_TABLE_WORD_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The length in words of the input attribute table. A length of zero indicates there is<br />

no input attribute table.<br />

17.1.1.2. Optional Information for READ Procedures<br />

The calling program may optionally set the following fields of the READ packet. The<br />

default values are obtained by zero-filling the READ packet before placing any<br />

information in the packet.<br />

SELECT_LIST_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the select list that specifies which attributes to return to the caller.<br />

This field is undefined if SELECT_LIST_BYTE_LENGTH is zero. Subsection 17.1.2<br />

describes the format of the select list.<br />

SELECT_LIST_BYTE_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The length in 9-bit bytes of the select list. A length of zero indicates there is no<br />

select list (default).<br />

7833 1733–004 17–3


SAR$ READ<br />

REQUEST_TYPE<br />

PLUS Attribute: 6-bit status<br />

The requested type of input:<br />

S'Pass_embedded_KANJI'<br />

Do not search for embedded shift-coded kanji in ASCII/ISO (default).<br />

S'Translate_embedded_KANJI'<br />

Search for any embedded shift-coded kanji in ASCII/ISO input, and convert it into<br />

internal format (text part and attributes part). Subsection 16.2 describes internal<br />

format.<br />

LINE_NUMBER_FORMAT<br />

PLUS Attribute: 6-bit status<br />

The format of line numbers returned by SAR$ to the caller.<br />

S'Use_input_numbers'<br />

Use the line number type read with the input image; it may be either a CTS or<br />

fractional line number (see LINE_NUMBER_TYPE in 17.1.1.3). If no line number<br />

exists for the input image, SAR$ increments the last line number by 1. If the<br />

input contains mixed LINE_NUMBER_TYPEs, the line number will be compared<br />

to the previous line number, and if necessary, incremented. If the input does<br />

not have any line numbers, SAR$ generates sequential line numbers with initial<br />

value 1 and increment value 1 (default).<br />

S'Generate_CTS'<br />

SAR$ generates sequential CTS line numbers with an initial value of 10 and an<br />

increment value of 10.<br />

S'Generate_fractional'<br />

SAR$ generates sequential fractional line numbers with an initial value of 10 and<br />

an increment value of 10.<br />

S'No_line_numbers'<br />

No line numbers are returned to the caller.<br />

17–4 7833 1733–004


UNTRANSLATE_MODE<br />

PLUS Attribute: 6-bit status<br />

The untranslate mode flag setting:<br />

S'Off'<br />

S'On'<br />

SAR$ READ<br />

An error is returned if SAR$ reads a character set type other than 00 (Fieldata),<br />

01 (ASCII/ISO), 077 (ACD) (default), or ASCII-like.<br />

All input is passed to the caller untranslated.<br />

SDF_CONTROL_RECORDS_TO_PASS<br />

PLUS Attribute: word logical<br />

This field specifies which SDF control records to return to the caller. Bits 1 to 32<br />

may be set by the caller, where bit 1 is the leftmost bit of the field. If bit n is set, the<br />

control record type ( n-1 + 040) is returned to the caller. The image control word of<br />

the control record is returned in SDF_IMAGE_CONTROL_WORD, and any data<br />

words of the control record are returned in the text buffer. If this field is set to zero,<br />

no control records are returned to the caller (default).<br />

Note that the control record type 051 is not returned unless it is used to continue a<br />

type 061 control record. Therefore, it is suggested that the caller specify that type<br />

051 records be returned if type 061 records are desired, and vice-versa.<br />

READ_ADDRESS_SECTOR<br />

PLUS Attribute: 24-bit integer<br />

The mass storage sector address of the next image to be read. This field is used if<br />

the image to be read is not the next sequential image. If this field is set to zero, the<br />

next sequential image is read (default). This field is undefined if the input is not from<br />

an SDF file or element.<br />

7833 1733–004 17–5


SAR$ READ<br />

READ_ADDRESS_WORD_OFFSET<br />

PLUS Attribute: 6-bit integer<br />

The word offset into the mass storage sector address of the next image to be read.<br />

This field is used if the image to be read is not the next sequential image. If this<br />

field is set to zero, the next sequential image is read (default). This field is undefined<br />

if the input is not from an SDF file or element.<br />

READ_ADDRESS<br />

PLUS Attribute: word machine integer<br />

A one-word combination of the READ_ADDRESS_SECTOR and the<br />

READ_ADDRESS_WORD_OFFSET fields, where these fields are contained in bits<br />

13 to 36 and 1 to 6, respectively. (Bit 1 is the leftmost bit of the READ_ADDRESS<br />

field.)<br />

17.1.1.3. Information Returned by READ Procedures<br />

The following fields of the READ packet contain values returned by the SAR$ READ<br />

procedures to the calling program.<br />

CALL_STATUS<br />

PLUS Attribute: 18-bit status<br />

The status of the current call to SAR_OPEN_INPUT, SAR_READ, or<br />

SAR_CLOSE_INPUT. See Table 17–3 for an explanation of the READ procedure call<br />

status codes. This field may also be referenced as an 18-bit logical field with label<br />

CALL_STATUS_CODE.<br />

SUB_STATUS_CODE<br />

PLUS Attribute: 12-bit logical<br />

This field contains additional information for particular CALL_STATUS codes.<br />

IO_STATUS<br />

PLUS Attribute: 6-bit status<br />

The status of any I/O operations performed by the READ procedures. See<br />

Table 17–4 for the I/O status lists. This field may also be referenced as a 6-bit logical<br />

field with label IO_STATUS_CODE.<br />

17–6 7833 1733–004


READ_STATUS_WORD<br />

PLUS Attribute: word logical<br />

A one-word combination of CALL_STATUS, SUB_STATUS, and IO_STATUS<br />

contained in H2, T1, and S3, respectively.<br />

SYMB_STATUS_WORD<br />

PLUS Attribute: word logical<br />

The status word returned from an ER SYMB$ request.<br />

SAR$ READ<br />

See SYMB$ section, Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for further details on<br />

the ER SYMB$ status word.<br />

RECOMMENDED_BUFFER_SIZE<br />

PLUS Attribute: 18-bit integer<br />

The recommended buffer or table size when an invalid length is specified or when<br />

an overflow occurs.<br />

TEXT_LENGTH_IN_BYTES<br />

PLUS Attribute: 18-bit integer<br />

The length in 9-bit bytes of the character text returned in the text buffer.<br />

NUMBER_OF_ATTRIBUTES<br />

PLUS Attribute: 18-bit integer<br />

The number of attributes returned in the attribute table.<br />

CHARACTER_TYPE<br />

PLUS Attribute: 6-bit status<br />

The character set type of the image returned to the caller:<br />

S'Fieldata' Fieldata 6-bit characters<br />

S'ASCII_ISO' ASCII/ISO 9-bit characters<br />

S'ACD' Attributed character data (ACD)<br />

A value of any ASCII-like character set type defined in Table H–1.<br />

If UNTRANSLATE_MODE is set to S'Off', then any Fieldata images read are<br />

translated to ASCII/ISO before they are returned to the caller. See 17.3 for details on<br />

allowed input character set types.<br />

7833 1733–004 17–7


SAR$ READ<br />

CHARACTER_CODE<br />

PLUS Attribute: 6-bit logical)<br />

The character set type of the image returned to the caller after any translation:<br />

0 Fieldata 6-bit characters<br />

01 ASCII/ISO 9-bit characters<br />

077 Attributed character data (ACD)<br />

A value of any ASCII-like character set type in Table H–1.<br />

If UNTRANSLATE_MODE is set to S'Off', then any Fieldata images read are<br />

translated to ASCII/ISO before they are returned to the caller. See 17.3 for details on<br />

allowed input character set types.<br />

INPUT_CHARACTER_CODE<br />

PLUS Attribute: 6-bit status<br />

The character set type of the image in the source input file or element. Contains the<br />

code type from the last 050 or 042 control record encountered in the input file or<br />

element.<br />

IMAGE_ADDRESS_SECTOR<br />

PLUS Attribute: 24-bit integer<br />

The mass storage sector address of the SDF image read. This field is undefined if<br />

input is from the runstream or an alternate READ$ file.<br />

IMAGE_ADDRESS_WORD_OFFSET<br />

PLUS Attribute: 6-bit integer<br />

The word offset into the mass storage sector address of the SDF image read. This<br />

field is undefined if input is from the runstream or an alternate READ$ file.<br />

IMAGE_ADDRESS<br />

PLUS Attribute: word machine integer<br />

This field is a one word combination of IMAGE_ADDRESS_SECTOR and<br />

IMAGE_ADDRESS_WORD_OFFSET, contained in bits 13 to 36 and in bits 1 to 6,<br />

respectively. (Bit 1 is the left-most bit of the field.)<br />

17–8 7833 1733–004


LINE_NUMBER_TYPE<br />

PLUS Attribute: 3-bit condition<br />

The type of line number returned with the image read.<br />

S'None'<br />

S'CTS'<br />

SAR$ READ<br />

No line number was read from the input; an SAR$ generated line number is<br />

returned. See LINE_NUMBER_FORMAT in 17.1.1.2.<br />

A CTS line number is returned.<br />

S'Fractional'<br />

A fractional line number is returned.<br />

LINE_NUMBER_INTEGER_PART<br />

PLUS Attribute: word integer<br />

The line number returned by SAR$. It may be a CTS line number, the integer part of<br />

a fractional line number, or a generated sequential line number (see<br />

LINE_NUMBER_TYPE).<br />

LINE_NUMBER_FRACTIONAL_PART (1:4)<br />

PLUS Attribute: four one-word integers<br />

The fractional part of fractional line numbers returned by SAR$. Each word of the<br />

array contains 10 digits of the fraction. This field is defined only if<br />

LINE_NUMBER_TYPE is S'Fractional'.<br />

SDF_IMAGE_CONTROL_WORD<br />

PLUS Attribute: word logical<br />

The image control word for the SDF record read. This field is defined only if input is<br />

from an SDF file or element. If bit 1 of this field is set, a control record was read; if<br />

bit 1 of this field is clear, a data record was read.<br />

If a control record was read, SDF_IMAGE_CONTROL_WORD has three subfields<br />

that are overlaid on SDF_IMAGE_CONTROL_WORD:<br />

CONTROL_RECORD_TYPE<br />

PLUS Attribute: 6-bit logical<br />

The type of control record read (an octal code from 040 to 077).<br />

7833 1733–004 17–9


SAR$ READ<br />

CONTROL_RECORD_WORD_LENGTH<br />

PLUS Attribute: 6-bit integer<br />

The length in words of the control record read.<br />

CONTROL_RECORD_CHAR_TYPE<br />

PLUS Attribute: 6-bit status<br />

The character set type of the control record, if applicable to this control record<br />

type (see the CHARACTER_TYPE field).<br />

If a data record was read, SDF_IMAGE_CONTROL_WORD has two subfields that<br />

are overlaid on SDF_IMAGE_CONTROL_WORD.<br />

DATA_RECORD_WORD_LENGTH<br />

PLUS Attribute: 12-bit integer<br />

The length in words of the data record read.<br />

DATA_RECORD_CHAR_TYPE<br />

PLUS Attribute: 6-bit status<br />

The character set type of the data record, if applicable to this input file type (see the<br />

CHARACTER_TYPE field).<br />

See the Data Structures <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> on SDF image control words.<br />

17.1.2. Buffers and Tables for PLUS READ Procedures<br />

The SAR$ READ function requires that an input (I/O) buffer, an image buffer, a text<br />

buffer, an attribute table, and a select list be supplied by the calling program.<br />

• Input buffer<br />

The input buffer is used to read from mass storage files. The calling program never<br />

needs to access the input buffer, but it must provide it to SAR$. If the calling<br />

program is using both the READ and WRITE functions of SAR$, then it cannot use<br />

the same I/O buffer for both functions. The calling program must provide a separate<br />

input and output buffer for each function.<br />

• Image buffer<br />

The image buffer is used to extract individual images from the input buffer. This<br />

buffer is necessary because images can contain information other than characters,<br />

such as attributes and ACD formats. The calling program never needs to access the<br />

image buffer, but it must provide it to SAR$. The calling program using the READ<br />

and WRITE functions can use the same image buffer for both functions.<br />

17–10 7833 1733–004


SAR$ READ<br />

• Text buffer<br />

The text buffer is used to return the characters contained in the image to the calling<br />

program. The characters are taken from the image buffer and placed sequentially in<br />

the text buffer, regardless of the format of the original image or any attributes that<br />

may apply to them. The text buffer provides one part of internal format (see 16.2).<br />

The calling program using the READ and WRITE functions can use the same text<br />

buffer for both functions.<br />

• Attribute table<br />

The attribute table is used to return to the calling program the attributes that apply to<br />

the characters in the text buffer. Each attribute has a one-word entry in the attribute<br />

table which follows the format in Figure 17–1.<br />

index type value<br />

0 17 18 26 27 35<br />

Figure 17–1. SAR$: Attribute Table Entry<br />

The attribute table provides the other part of internal format (see 16.2). If the images<br />

read by SAR$ do not contain any attributes or if UNTRANSLATE_MODE is set to<br />

S'On', then the attribute table may be omitted by setting<br />

ATTRIBUTE_TABLE_ADDRESS to null (zero). The calling program using the READ<br />

and WRITE functions can use the same attribute table buffer for both functions.<br />

• Select list<br />

The select list is used to determine which SAR$ attributes are returned to the calling<br />

program. It contains a sequential list of attribute types that are returned. Attribute<br />

types that are not on the select list are not returned. For example, if the calling<br />

program wants attribute types 3, 4, and 5 returned, the first word of the select list<br />

would be 003004005000. If the select list is omitted, all attribute types are returned<br />

to the calling program.<br />

The calling program must provide all buffers and tables. The type definitions for the<br />

buffers and tables, and definitions for the default buffer and table lengths, are contained<br />

in the element SAR$DEFN. SAR$DEFN is in the <strong>SYSLIB</strong> file (SYS$LIB$*<strong>SYSLIB</strong>) or<br />

SYS$*RLIB$. This element is obtained with the COPY statement. These definitions<br />

simplify the creation of required tables and buffers for the calling program.<br />

7833 1733–004 17–11


SAR$ READ<br />

The default buffer and table lengths are listed in Table 17–1.<br />

Table 17–1. SAR$: PLUS READ Buffer and Table<br />

Length Defaults<br />

Identifier Value<br />

SAR_IO_BUFFER_WORD_LENGTH 448<br />

SAR_IMAGE_BUFFER_WORD_LENGTH 63<br />

SAR_TEXT_BUFFER_BYTE_LENGTH 132<br />

SAR_ATTRIBUTE_TABLE_WORD_LENGTH 40<br />

SAR_SELECT_LIST_BYTE_LENGTH 4<br />

The buffer and table type definitions are listed in Table 17–2.<br />

Table 17–2. SAR$: PLUS READ Buffer and Table Type<br />

Definitions<br />

Identifier Type<br />

SAR_IO_BUFFER 448 words logical locatable<br />

SAR_IMAGE_BUFFER 63 words logical locatable<br />

SAR_TEXT_BUFFER 132 ASCII characters locatable<br />

SAR_ATTRIBUTE_TABLE 40 words logical locatable<br />

SAR_SELECT_LIST 4 bytes logical locatable<br />

The element SAR$DEFN also contains other definitions necessary to SAR$.<br />

17.1.3. READ Procedures Called from PLUS<br />

The procedures for the READ function are:<br />

• SAR_OPEN_INPUT<br />

• SAR_READ<br />

• SAR_CLOSE_INPUT<br />

The declarations for these procedures are contained in the element SAR$READ$DG, in<br />

the <strong>SYSLIB</strong> file (SYS$LIB$*<strong>SYSLIB</strong>) or SYS$*RLIB$. This element may be obtained with<br />

the COPY statement.<br />

SAR$READ$DG contains all three procedure declarations. All of the READ procedure<br />

modules are compiled with the G option, using the IBJ$ calling sequence.<br />

17–12 7833 1733–004


17.1.3.1. SAR_OPEN_INPUT Procedure Call<br />

SAR$ READ<br />

The READ packet data structure must be initialized before any input images are read.<br />

The SAR_OPEN_INPUT procedure performs the READ packet initialization.<br />

Initial Conditions<br />

The calling program sets the following parameters in the READ packet to appropriate<br />

values before calling SAR_OPEN_INPUT:<br />

• Required parameters (described in 17.1.1.1)<br />

PACKET_VERSION<br />

INPUT_FILE_INFO_PKT_ADDRESS<br />

INPUT_BUFFER_ADDRESS<br />

INPUT_BUFFER_WORD_LENGTH<br />

IMAGE_BUFFER_ADDRESS<br />

IMAGE_BUFFER_WORD_LENGTH<br />

• Optional parameters (described in 17.1.1.2)<br />

SELECT_LIST_ADDRESS<br />

SELECT_LIST_BYTE_LENGTH<br />

REQUEST_TYPE<br />

LINE_NUMBER_FORMAT<br />

UNTRANSLATE_MODE<br />

SDF_CONTROL_RECORDS_TO_PASS<br />

Note: It is recommended that the calling program zero-fill the READ packet before<br />

placing any parameters in the packet.<br />

Calling Format<br />

PROCEDURE SAR_OPEN_INPUT<br />

(READ_PACKET_ADDRESS: WORD MACHINE POINTER)<br />

IMPORTED ('SAR$OPENI$PG');<br />

Returns<br />

SAR_OPEN_INPUT returns the initialization status in the packet in CALL_STATUS. If the<br />

status is S'Normal', the initialization of the READ packet is successful. Otherwise an<br />

error has occurred, and CALL_STATUS contains the status code. See 17.1.4 for a list of<br />

the READ function status codes.<br />

7833 1733–004 17–13


SAR$ READ<br />

17.1.3.2. SAR_READ Procedure Call<br />

The SAR_READ procedure obtains one image from the input and returns the character<br />

text and attributes of the image to the calling program.<br />

Initial Conditions<br />

The calling program sets the following parameters in the READ packet to appropriate<br />

values before calling SAR_READ:<br />

• Required parameters (described in 17.1.1.1)<br />

TEXT_BUFFER_ADDRESS<br />

TEXT_BUFFER_BYTE_LENGTH<br />

ATTRIBUTE_TABLE_ADDRESS<br />

ATTRIBUTE_TABLE_WORD_LENGTH<br />

• Optional parameters (described in 17.1.1.2)<br />

SELECT_LIST_ADDRESS<br />

SELECT_LIST_BYTE_LENGTH<br />

READ_ADDRESS_SECTOR<br />

READ_ADDRESS_WORD_OFFSET<br />

Calling Format<br />

PROCEDURE SAR_READ<br />

(READ_PACKET_ADDRESS: WORD MACHINE POINTER)<br />

IMPORTED ('SAR$READ$PG');<br />

Returns<br />

Each call to SAR_READ reads one image from the input and returns the character text in<br />

the text buffer, the attributes in the attribute table, and other information in the READ<br />

packet. SAR_READ does not space-fill the text buffer if the text length is shorter than<br />

the text buffer length. If the character text is longer than the text buffer, SAR_READ<br />

truncates the text to the length of the text buffer and returns an error status in<br />

CALL_STATUS.<br />

SAR_READ returns the calling status in the READ packet field CALL_STATUS. If the<br />

status is S'Normal', then the read was successful.<br />

The following fields contain information returned by SAR$ to the caller:<br />

• Character text<br />

SAR_READ returns the character text of the image read in the text buffer and the<br />

character text length in TEXT_LENGTH_IN_BYTES. The length is in 9-bit bytes<br />

(characters).<br />

• Character type<br />

The character set type of the image read is returned in the field CHARACTER_TYPE.<br />

The octal code of the character set type is returned in the field CHARACTER_CODE.<br />

17–14 7833 1733–004


SAR$ READ<br />

• Attributes<br />

If there are any attributes that apply to the character text, they are returned in the<br />

attribute table. The number of attributes is returned in NUMBER_OF_ATTRIBUTES.<br />

• Line number<br />

CTS, fractional, and generated sequential line numbers are returned in the field<br />

LINE_NUMBER_INTEGER_PART. Fractional line numbers are returned in the array<br />

LINE_NUMBER_FRACTIONAL_PART (1:4). The line number type is returned in the<br />

field LINE_NUMBER_TYPE.<br />

• Image location<br />

The mass storage sector address and word offset of the image read are returned in<br />

the fields IMAGE_ADDRESS_SECTOR and IMAGE_ADDRESS_WORD_OFFSET,<br />

respectively.<br />

• Control word<br />

The image control word for data or control records is returned in the field<br />

SDF_IMAGE_CONTROL_WORD. If a control record was read, any data words of the<br />

control record are returned to the caller in the text buffer.<br />

If SAR_READ encounters an end-of-file condition, the CALL_STATUS field of the READ<br />

packet is set to status S'End_of_file'.<br />

If the status returned from SAR_READ is not S'Normal', then an error has occurred, and<br />

CALL_STATUS contains the status code. See 17.1.4 for a list of READ function status<br />

codes.<br />

17.1.3.3. SAR_CLOSE_INPUT Procedure Call<br />

The SAR_CLOSE_INPUT procedure closes the input operation, which must be done<br />

when all input is completed.<br />

Calling Format<br />

PROCEDURE SAR_CLOSE_INPUT<br />

(READ_PACKET_ADDRESS: WORD MACHINE POINTER)<br />

IMPORTED ('SAR$CLOSI$PG');<br />

Returns<br />

SAR_CLOSE_OUTPUT returns the calling status in the READ packet field<br />

CALL_STATUS. If the status is S'Normal', then the close was successful.<br />

If the status returned from SAR_CLOSE_OUTPUT is not S'Normal', then an error has<br />

occurred and CALL_STATUS contains the status code. See 17.1.4 for a list of READ<br />

function status codes.<br />

7833 1733–004 17–15


SAR$ READ<br />

17.1.3.4. Example<br />

The following example shows the SAR$ READ function in a PLUS program, reading SDF<br />

input:<br />

COPY (‘SAR$DEFN’);<br />

COPY (‘SAR$RPKTD’);<br />

COPY (‘SAR$READ$DG’);<br />

COPY (‘SAR$FILEPKTD’);<br />

DECLARE READ_PKT: SAR_READ_PACKET,<br />

IO_BUF: SAR_IO_BUFFER,<br />

IMAGE_BUF: SAR_IMAGE_BUFFER,<br />

TEXT_BUF: SAR_TEXT_BUFFER,<br />

ATTRIBUTE_TBL: SAR_ATTRIBUTE_TABLE,<br />

FILE_PKT: SAR_FILE_INFO_PACKET;<br />

.<br />

.<br />

.<br />

READ_PKT.PACKET_VERSION:= SAR_READ_PACKET_CURRENT_VERSION;<br />

READ_PKT.INPUT_FILE_INFO_PKT_ADDRESS:= LOC(FILE_PKT);<br />

READ_PKT.INPUT_BUFFER_ADDRESS:= LOC(IO_BUF);<br />

READ_PKT.INPUT_BUFFER_WORD_LENGTH:= SAR_IO_BUFFER_WORD_LENGTH;<br />

READ_PKT.IMAGE_BUFFER_ADDRESS:= LOC(IMAGE_BUF);<br />

READ_PKT.IMAGE_BUFFER_WORD_LENGTH:= SAR_IMAGE_BUFFER_WORD_LENGTH;<br />

READ_PKT.TEXT_BUFFER_ADDRESS:= LOC(TEXT_BUF);<br />

READ_PKT.TEXT_BUFFER_BYTE_LENGTH:= SAR_TEXT_BUFFER_BYTE_LENGTH;<br />

READ_PKT.ATTRIBUTE_TABLE_ADDRESS:= LOC(ATTRIBUTE_TBL);<br />

READ_PKT.ATTRIBUTE_TABLE_WORD_LENGTH:= SAR_ATTRIBUTE_TABLE_WORD_LENGTH;<br />

.<br />

.<br />

.<br />

SAR_OPEN_INPUT(LOC(READ_PKT));<br />

IF READ_PKT.CALL_STATUS NE S’Normal’<br />

THEN BEGIN<br />

PROCESS_READ_ERROR;<br />

RETURN;<br />

END;<br />

.<br />

.<br />

.<br />

SAR_EOF:= FALSE;<br />

WHILE NOT SAR_EOF DO<br />

BEGIN<br />

SAR_READ(LOC(READ_PKT));<br />

CASEENTRY READ_PKT.CALL_STATUS<br />

CASE S ‘End_of_file’ : SAR_EOF:= TRUE;<br />

CASE S ‘Normal’ :<br />

BEGIN<br />

.<br />

.<br />

.<br />

END;<br />

17–16 7833 1733–004


CASE * :<br />

BEGIN<br />

PROCESS_READ_ERROR;<br />

RETURN;<br />

END;<br />

ENDCASE;<br />

END;<br />

.<br />

.<br />

.<br />

SAR_CLOSE_INPUT(LOC(READ_PKT));<br />

IF READ_PKT.CALL_STATUS NE S ‘Normal’<br />

THEN BEGIN<br />

PROCESS_READ_ERROR;<br />

RETURN;<br />

END;<br />

SAR$ READ<br />

In this example, the COPY statement obtains the SAR$ definitions for the buffers and<br />

tables, READ packet, READ procedures, and file information packet. The SAR$ data<br />

structures are declared by using the definitions contained in elements SAR$DEFN,<br />

SAR$RPKTD, and SAR$FILEPKTD.<br />

The READ packet is initialized by assigning appropriate values to all necessary fields.<br />

All other packet fields take the default values if the READ packet is zero-filled.<br />

The SAR_READ_PACKET_CURRENT_VERSION constant is defined in the SAR$RPKTD<br />

element. The buffer length constants are defined in the SAR$DEFN element.<br />

The READ function is initialized by the calling SAR_OPEN_INPUT procedure, passing the<br />

READ packet address as a parameter. If the CALL STATUS field of the READ packet<br />

(returned by SAR$) is not status ‘Normal', the error is processed.<br />

The SAR_READ procedure reads one SDF image at a time until an end-of-file condition or<br />

an error occurs. When all images are read, the READ function is closed by calling the<br />

SAR_CLOSE_INPUT procedure.<br />

17.1.4. Status Lists for PLUS READ Procedures<br />

The READ procedure call status codes listed in Table 17–3 may be returned to the caller<br />

in the CALL_STATUS field of the READ packet. These CALL_STATUS codes are for<br />

SAR_READ_PACKET_CURRENT_VERSION = 3 and above. A list of all call status codes<br />

is available as READ_CALL_STATUS_LIST, an 18-bit status data entity defined in the<br />

element SAR$RPKTD.<br />

Table 17–3. SAR$: READ Procedure CALL_STATUS Codes<br />

Octal Code Status<br />

0 Normal return from SAR$.<br />

01 End-of-file condition reached by SAR_READ.<br />

7833 1733–004 17–17


SAR$ READ<br />

Table 17–3. SAR$: READ Procedure CALL_STATUS Codes<br />

Octal Code Status<br />

02 An I/O error has occurred in a READ procedure. See the IO_STATUS_CODE<br />

field for the status code and Table 17–4.<br />

03 An outdated READ packet version is being used.<br />

04 An invalid READ packet version is being used.<br />

05 An invalid value is specified for LINE_NUMBER_FORMAT.<br />

06 The value for IMAGE_BUFFER_ADDRESS is NULL; an address must be<br />

given for the input image buffer.<br />

07 The IMAGE_BUFFER_WORD_LENGTH is zero; a length must be given for<br />

the input image buffer.<br />

010 An invalid value is specified for REQUEST_TYPE.<br />

011 An invalid value is specified for UNTRANSLATE_MODE.<br />

012 The value for INPUT_BUFFER_WORD_LENGTH is too small; use the word<br />

length returned in RECOMMENDED_BUFFER_SIZE.<br />

013 The input file or element accessed is not SDF.<br />

014 An invalid value is specified in the ACCESS_TYPE field of the file information<br />

packet.<br />

015 An invalid address is specified in the READ_ADDRESS field; either the word<br />

offset is greater than 27 or the sector address is greater than the highest<br />

mass storage sector address of the file.<br />

016 The input image is too long to fit in the image buffer. The image buffer word<br />

length necessary to hold the entire image is returned in the field<br />

RECOMMENDED_BUFFER_SIZE. To reread the image, call SAR_READ with<br />

a larger IMAGE_BUFFER and IMAGE_BUFFER_WORD_LENGTH, and set the<br />

READ_ADDRESS to IMAGE_ADDRESS returned on the previous call.<br />

017 The character text is too long to fit in the text buffer and has been truncated.<br />

The text buffer byte length necessary to hold the character text is returned in<br />

the field RECOMMENDED_BUFFER_SIZE.<br />

020 The number of attributes is too large to fit in the attribute table. The attribute<br />

table word length necessary to hold all the attributes is returned in the field<br />

RECOMMENDED_BUFFER_SIZE.<br />

021 A partial image was read by SYMB$; call SAR_READ again to continue<br />

reading the image.<br />

022 An invalid SDF file or element label control record was read.<br />

023 An invalid SDF control record was read.<br />

024 The image read contains incorrectly formatted ACD or incorrectly formatted<br />

embedded shift-coded kanji.<br />

17–18 7833 1733–004


Table 17–3. SAR$: READ Procedure CALL_STATUS Codes<br />

Octal Code Status<br />

025 An invalid character set type was read.<br />

SAR$ READ<br />

026 The READ packet is not initialized; a call to SAR_OPEN_INPUT must be made<br />

before calls to SAR_READ or SAR_CLOSE_INPUT.<br />

027 An incorrect ACD subroutine version is being used with SAR$.<br />

030 The file name buffer address in the FIP is NULL; an address of an SDF file<br />

name must be specified.<br />

031 The file name buffer address in the FIP is NULL; an address of a symbiont file<br />

name must be specified.<br />

032 An illegal value is specified for the file name buffer byte length; legal values<br />

are from 1 to 12.<br />

033 The input I/O buffer address is NULL; this buffer must be provided when<br />

reading to an SDF file or element.<br />

034 The SDF data record or control record read exceeds the maximum allowed<br />

length of an SDF record.<br />

0100 An unrecognized error has occurred in the SDFI routine. The SDFI error code<br />

is returned in the SUB_STATUS field.<br />

0101 An unrecognized error has occurred in an ACD subroutine. The ACD error<br />

code is returned in the SUB_STATUS field.<br />

0102 An unrecognized error has occurred in executing ER SYMB$. The SYMB$<br />

error code is returned in the SUB_STATUS field.<br />

0103 An incorrect SDFI packet version is being used. The correct SDFI packet<br />

version is returned in the SUB_STATUS field.<br />

0104 An incorrect ER SYMB$ packet version is being used. The correct SYMB$<br />

packet version is returned in the SUB_STATUS field.<br />

A CALL_STATUS code of 0100 or greater is a SAR$ internal error.<br />

The READ procedure I/O status codes listed in Table 17–4 may be returned to the caller<br />

in the IO_STATUS field of the READ packet.<br />

Table 17–4. SAR$: READ Procedure IO_STATUS Status List<br />

Octal Code Status<br />

0 Normal I/O status.<br />

01 to 40 See Table C–2, I/O Status Codes, ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for<br />

an explanation of the I/O status codes.<br />

7833 1733–004 17–19


SAR$ READ<br />

17.2. READ Function/MASM Interface<br />

The SAR$ READ procedures can be called directly from MASM. The SAR$ data<br />

structure definitions and procedure calls are defined by MASM procedures (PROCs).<br />

The element SAR$PROCS contains these PROCs.<br />

17.2.1. READ Packet and Data Area Description<br />

The SAR$ READ function requires a READ packet and data area for the open-input, read,<br />

and close-input calls. The S$ARRPDEF PROC generates the EQUFs defining the READ<br />

packet fields. The word length of the MASM READ packet and data area is at label<br />

SR$PKTWLEN defined by the S$ARRPDEF PROC (the current length is 72 words).<br />

17.2.1.1. Required Information for READ Procedures<br />

The calling program must set the following fields of the READ packet to appropriate<br />

values:<br />

SR$PKTVER<br />

The READ packet data structure version. The current version is equal to the label<br />

SR$CURVER defined by the S$ARRPDEF PROC. SR$PKTVER must not be modified<br />

between calls to the SAR$ READ routine.<br />

SR$FIPADDR<br />

The address of the input file information packet. This packet is supplied by the caller<br />

(see 16.1). Set this field to zero if input is from the runstream.<br />

SR$INPBUF<br />

The address of the input buffer, used to read images from the input file or element.<br />

This field is defined only if input is from an SDF file or element. It is omitted if input<br />

is from the runstream or an alternate READ$ file. Subsection 16.1.2 describes the<br />

input buffer.<br />

SR$INPBUFL<br />

The length in words of the input buffer. It must be of length 28 * dpf * n, where dpf<br />

is the disk prepping factor and n is a positive integer. This field is defined only if<br />

input is from an SDF file or element. It is omitted if input is from the runstream or<br />

an alternate READ$ file.<br />

SR$IMGBUF<br />

The address of the input image buffer into which SAR$ places individual images<br />

from the input buffer. Subsection 16.1.2 describes the image buffer.<br />

17–20 7833 1733–004


SR$IMGBUFL<br />

The length in words of the input image buffer.<br />

SR$TEXBUF<br />

SAR$ READ<br />

The address of the input text buffer into which SAR$ places the character text of the<br />

image read. Subsection 16.1.2 describes the text buffer.<br />

SR$TEXBUFL<br />

The length in 9-bit bytes of the input text buffer.<br />

SR$ATTRIB<br />

The address of the input attribute table, into which SAR$ places the attributes<br />

describing the character text of the image read. This field is undefined if the<br />

attribute table word length is zero. Subsection 16.1.2 describes the format of the<br />

attribute table.<br />

SR$ATTRIBL<br />

The length in words of the input attribute table. A length of zero indicates that there<br />

is no input attribute table.<br />

17.2.1.2. Optional Information for READ Procedures<br />

The calling program may optionally set the following fields of the READ packet. The<br />

default values are obtained by zero-filling the READ packet before placing any<br />

information in the packet.<br />

SR$SELLST<br />

The address of the select list that specifies which attributes to return to the caller.<br />

This field is undefined if the select list byte length is zero. Subsection 16.1.2<br />

describes the format of the select list.<br />

SR$SELLSTL<br />

The length in 9-bit bytes of the select list. A length of zero indicates that there is no<br />

select list (default).<br />

7833 1733–004 17–21


SAR$ READ<br />

SR$REQTYPE<br />

The requested type of input.<br />

0<br />

1<br />

SR$LNUMFMT<br />

Do not search for embedded shift-coded kanji in ASCII/ISO (default).<br />

Search for any embedded shift-coded kanji in ASCII/ISO input, and convert it into<br />

internal format (text part and attributes part). Subsection 16.2 describes internal<br />

format.<br />

The format of line numbers returned by SAR$ to the caller.<br />

0<br />

1<br />

2<br />

3<br />

Use the input line number type read with the input image; it may be either a CTS<br />

or fractional line number (see 1 and 2 below). If no line number exists for the<br />

input image, SAR$ increments the last line number by 1. If the input contains<br />

mixed line number types (SR$LNUMTYP), the line number will be compared to<br />

the previous line number, and if necessary, incremented. If the input does not<br />

have any line numbers, SAR$ generates sequential line numbers with initial<br />

value 1 and increment value 1 (default).<br />

SAR$ generates sequential CTS line numbers with an initial value of 10 and<br />

increment value of 10.<br />

SAR$ generates sequential fractional line numbers with an initial value of 10 and<br />

an increment value of 10.<br />

No line numbers are returned to caller.<br />

17–22 7833 1733–004


SR$UNTRFLG<br />

The untranslate mode flag setting.<br />

0<br />

1<br />

SR$SDFCNTL<br />

SAR$ READ<br />

Untranslate mode is off: an error is returned if SAR$ reads a character set type<br />

other than 00 (Fieldata), 01 (ASCII/ISO), 077 (ACD) (default), or ASCII-like.<br />

Untranslate mode is on: all input is passed to the caller untranslated.<br />

This field specifies which SDF control records to return to the caller. Bits 0 to 31<br />

may be set by the caller, where bit 0 is the leftmost bit of the field. If bit n is set, the<br />

control record type (n + 040) is returned to the caller. The image control word of the<br />

control record is returned in SR$SDFICW, and any data words of the control record<br />

are returned in the text buffer. If this field is set to zero, no control records are<br />

returned to the caller (default).<br />

Note that the control record type 051 is not returned unless it is used to continue a<br />

type 061 control record. Therefore, it is suggested that the caller specify that type<br />

051 records be returned if type 061 records are desired, and vice-versa.<br />

SR$ADDRSEC<br />

The mass storage sector address of the next image to be read. This field is used if<br />

the image to be read is not the next sequential image. If this field is set to zero, the<br />

next sequential image is read (default). It is undefined if the input is not from an SDF<br />

file or element. This field contains SR$ADDRWO in S1 of the word.<br />

SR$ADDRWO<br />

The word offset into the mass storage sector address of the next image to be read.<br />

This field is used if the image to be read is not the next sequential image. If this<br />

field is set to zero, the next sequential image is read (default). This field is undefined<br />

if the input is not from an SDF file or element.<br />

17.2.1.3. Information Returned by READ Procedures<br />

The following fields of the READ packet contain values returned to the calling program<br />

by the SAR$ READ procedures.<br />

SR$STATUS<br />

The READ function status word; it contains the call status in H2, the substatus in T1,<br />

and the I/O status in S3.<br />

7833 1733–004 17–23


SAR$ READ<br />

SR$CALLST<br />

The status code of the current open-input, read, or close-input function calls. See<br />

Table 17–6 for an explanation of the octal status codes.<br />

SR$IOSTAT<br />

The status of any I/O operations performed by the READ procedures. See<br />

Table 17–7 for the octal status codes.<br />

SR$SYMBST<br />

The status word returned from an ER SYMB$ request. See the SYMB$ section of<br />

the Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for further details on the SYMB$<br />

status word.<br />

SR$RECBUFL<br />

The recommended buffer or table length when an invalid length is specified or when<br />

an overflow occurs.<br />

SR$TEXTLEN<br />

The length in 9-bit bytes of the character text returned in the text buffer.<br />

SR$NUMATTR<br />

The number of attributes returned in the attribute table.<br />

SR$CHARTYP<br />

The character set type of the image returned to the caller:<br />

0 Fieldata 6-bit characters<br />

01 ASCII/ISO 9-bit characters<br />

077 Attributed character data (ACD)<br />

A value of any ASCII-like character set type defined in Table H–1.<br />

If SR$UNTRFLG is zero (untranslate mode off), then any Fieldata images read are<br />

translated to ASCII/ISO before they are returned to the caller. See 17.3 for details on<br />

allowed input character set types.<br />

SR$INCHARTYP<br />

The character set type of the image in the source input file or element. Contains the<br />

code type from the last 050 or 042 control record encountered in the input file or<br />

element.<br />

17–24 7833 1733–004


SR$IMGSEC<br />

SAR$ READ<br />

The mass storage sector address of the SDF image read. This field is undefined if<br />

input is from the runstream or an alternate READ$ file. SR$IMGWO is contained in<br />

S1 of this field.<br />

SR$IMGWO<br />

The word offset into the mass storage sector address of the SDF image read. This<br />

field is undefined if input is from the runstream or an alternate READ$ file.<br />

SR$LNUMTYP<br />

The type of line number returned with the image read:<br />

0<br />

1<br />

2<br />

SR$LNUMINT<br />

No line number was read from the input; an SAR$ generated line number is<br />

returned. See SR$LNUMFMT in 17.2.1.2.<br />

A CTS line number is returned.<br />

A fractional line number is returned.<br />

The line number returned by SAR$. It may be a CTS line number, the integer part of<br />

a fractional line number, or a generated sequential line number (see SR$LNUMTYP).<br />

SR$LNUMF1<br />

The first 10 digits of the fractional part of a fractional line number. This field is<br />

defined only if SR$LNUMTYP is 2.<br />

SR$LNUMF2<br />

The second 10 digits of the fractional part of a fractional line number. This field is<br />

defined only if SR$LNUMTYP is 2.<br />

SR$LNUMF3<br />

The third 10 digits of the fractional part of a fractional line number. This field is<br />

defined only if SR$LNUMTYP is 2.<br />

SR$LNUMF4<br />

The fourth 10 digits of the fractional part of a fractional line number. This field is<br />

defined only if SR$LNUMTYP is 2.<br />

7833 1733–004 17–25


SAR$ READ<br />

SR$SDFICW<br />

The image control word for the SDF record read. This field is defined only if input is<br />

from an SDF file or element. If bit 1 of SR$SDFICW is set, the image is a control<br />

record. If bit 1 of SR$SDFICW is clear, the image is a data record. Bit 1 is the<br />

leftmost bit of the field. See the Data Structures <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong><br />

for further information on System Data Format (SDF) image control words.<br />

SR$ICWTYPE<br />

If the image is a control record, this field contains the control record type. If the<br />

image is a data record, this field is undefined.<br />

SR$ICWLEN<br />

If the image is a control record, this field contains the length in words of the control<br />

record. If the image is a data record, this field is undefined.<br />

SR$ICWCHAR<br />

This field contains the image character set type, if applicable for this control record<br />

or data record.<br />

17.2.1.4. READ Packet Definition PROC<br />

The PROC S$ARRPDEF generates the EQUFs to define the READ packet. The calling<br />

program may optionally attach an X-register and a B-register to these EQUFs. This<br />

allows the calling program to allocate storage space for the READ packet either statically<br />

at assembly time or dynamically at execution time. The calling program may display the<br />

EQUF labels by setting the display-flag parameter on the PROC call. This PROC also<br />

generates EQUs defining the READ packet current version and word length at labels<br />

SR$CURVER and SR$PKTWLEN, respectively.<br />

Calling Format<br />

S$ARRPDEF x-reg,b-reg,dispflg<br />

Parameters<br />

x-reg<br />

b-reg<br />

The X-register to be attached to the READ packet EQUFs. If x-reg is omitted, no<br />

X register is attached to the EQUFs.<br />

The B-register to be attached to the READ packet EQUFs. If it is omitted, no<br />

B register is attached to the EQUFs.<br />

17–26 7833 1733–004


dispflg<br />

A flag to display a table of the READ packet EQUFs. If it is set to ‘D’, the field<br />

names are displayed; otherwise the field names are not displayed.<br />

Example<br />

$ASCII<br />

$INCLUDE ‘MAXR$’<br />

S$ARRPDEF X9,B2,’D’<br />

SAR$ READ<br />

The PROC call S$ARRPDEF of this example generates EQUFs using registers X9 and B2<br />

and displays a description of each packet field.<br />

17.2.2. Buffers and Tables for MASM READ Procedures<br />

All buffers and tables must be provided by the calling program. The recommended<br />

lengths for the buffers and tables are equated to labels in the S$ARRPDEF PROC.<br />

These lengths and labels are listed in Table 17–5. These definitions simplify the creation<br />

of required buffers and tables for the calling program.<br />

Table 17–5. SAR$: MASM READ Buffer and Table Lengths<br />

Label Value<br />

SR$INPBUFDL (Input buffer word length) 448<br />

SR$IMGBUFDL (Image buffer word length) 63<br />

SR$TEXBUFDL (Text buffer byte length) 132<br />

SR$ATTRIBDL (Attribute table word length) 40<br />

SR$SELLSTDL (Select list byte length) 4<br />

17.2.3. READ Procedures Called from MASM<br />

The MASM procedures for the READ function are<br />

• S$AROPENI (open input)<br />

• S$ARREAD (read)<br />

• S$ARCLOSI (close input)<br />

The calling sequences for these procedures are generated by MASM PROCs, contained<br />

in the <strong>SYSLIB</strong> file (SYS$LIB$*<strong>SYSLIB</strong>) or SYS$*RLIB$.<br />

7833 1733–004 17–27


SAR$ READ<br />

17.2.3.1. Open-Input Procedure Call (S$AROPENI)<br />

The READ packet and data area must be initialized before any images are read. The<br />

S$AROPENI PROC performs the READ packet initialization.<br />

Initial Conditions<br />

The calling program sets the following parameters in the READ packet to appropriate<br />

values before calling S$AROPENI:<br />

• Required parameters (described in 17.2.1.1)<br />

SR$PKTVER<br />

SR$INPBUFL<br />

SR$FIPADDR<br />

SR$IMGBUF<br />

SR$INPBUF<br />

SR$IMGBUFL<br />

• Optional parameters (described in 17.2.1.2)<br />

SR$SELLST<br />

SR$UNTRFLG<br />

SR$SELLSTL<br />

SR$LNUMFMT<br />

SR$REQTYPE<br />

SR$SDFCNTL<br />

Calling Format<br />

S$AROPENI rpkt<br />

error return<br />

normal return<br />

where rpkt is a label identifying the starting address of the READ packet and data area.<br />

Note: It is recommended that the calling program zero-fill the READ packet before<br />

placing any parameters in the packet.<br />

Returns<br />

If the error return from S$AROPENI is taken, A1 contains the call status code, A2<br />

contains the I/O status code, and A3 contains the substatus code. These status codes<br />

are also returned in the packet fields SR$CALLST, SR$IOSTAT, and T1 of SR$STATUS,<br />

respectively. See 17.2.4 for an explanation of the status codes.<br />

If the normal return from S$AROPENI is taken, the initialization of the READ packet is<br />

successful.<br />

17–28 7833 1733–004


17.2.3.2. Read Procedure Call (S$ARREAD)<br />

SAR$ READ<br />

The S$ARREAD PROC returns one image from the symbolic input to the calling program,<br />

placing the character text in the text buffer and the attributes in the attribute table.<br />

Initial Conditions<br />

The calling program sets the following parameters in the READ packet to appropriate<br />

values before calling S$ARREAD:<br />

• Required parameters (described in 17.2.1.1)<br />

SR$TEXBUF<br />

SR$ATTRIBL<br />

SR$TEXBUFL<br />

SR$ATTRIB<br />

• Optional parameters (described in 17.2.1.2)<br />

SR$ADDRSEC<br />

SR$SELLSTL<br />

SR$ADDRWO<br />

SR$SELLST<br />

Calling Format<br />

S$ARREAD rpkt<br />

error return<br />

end-of-file return<br />

normal return<br />

where rpkt is a label identifying the starting address of the READ packet and data area.<br />

Returns<br />

Each call to S$ARREAD reads one image from the input. If the normal return is taken,<br />

S$ARREAD returns the character text in the text buffer, the attributes in the attribute<br />

table, and other information in the READ packet. S$ARREAD does not space-fill the text<br />

buffer if the text length is shorter than the text buffer length. If the text length is longer<br />

than the text buffer, S$ARREAD truncates the text to the length of the text buffer and<br />

takes the error return. See 17.2.1.3 for a list of the fields that contain information<br />

returned by S$ARREAD to the calling program.<br />

If the error return from S$ARREAD is taken, A1 contains the call status code, A2<br />

contains the I/O status code, and A3 contains the substatus code. These status codes<br />

are also returned in the packet fields SR$CALLST, SR$IOSTAT, and T1 of SR$STATUS,<br />

respectively. See 17.2.4 for an explanation of the status codes.<br />

If the end-of-file return from S$ARREAD is taken, the last read request encountered an<br />

end-of-file condition. A1 contains the call status code, A2 contains the I/O status code,<br />

and A3 contains the substatus code. These status codes are also returned in the packet<br />

fields SR$CALLST, SR$IOSTAT, and T1 of SR$STATUS, respectively.<br />

7833 1733–004 17–29


SAR$ READ<br />

17.2.3.3. Close-Input Procedure Call (S$ARCLOSI)<br />

The S$ARCLOSI PROC closes the input operation.<br />

Calling Format<br />

S$ARCLOSI rpkt<br />

error return<br />

normal return<br />

where rpkt is a label identifying the starting address of the READ packet and data area.<br />

Returns<br />

If the error return from S$ARCLOSI is taken, A1 contains the call status code, A2<br />

contains the I/O status code, and A3 contains the substatus code. These status codes<br />

are also returned in the packet fields SR$CALLST, SR$IOSTAT, and T1 of SR$STATUS,<br />

respectively. See 17.2.4 for an explanation of the status codes.<br />

If the normal return from S$ARCLOSI is taken, the input is successfully closed.<br />

17.2.4. Status Lists for MASM READ Procedures<br />

The READ procedure call status codes listed in Table 17–6 may be returned to the calling<br />

program in the SR$CALLST field of the READ packet. These call status codes are for<br />

SR$CURVER = 3 and above.<br />

Table 17–6. SAR$: READ Procedure SR$CALLST Status Codes<br />

Octal Code Status<br />

0 Normal return from SAR$.<br />

01 End-of-file condition reached by S$ARREAD.<br />

02 An I/O error has occurred in a READ procedure. See the SR$IOSTAT field for<br />

the status code and Table 17–7.<br />

03 An outdated READ packet version is being used.<br />

04 An invalid READ packet version is being used.<br />

05 An invalid value is specified for SR$LNUMFMT.<br />

06 The value for SR$IMGBUF is zero; an address must be given for the input<br />

image address.<br />

07 The value for SR$IMGBUFL is zero; a length must be given for the input image<br />

address.<br />

010 An invalid value is specified for SR$REQTYPE.<br />

011 An invalid value is specified for SR$UNTRFLG.<br />

17–30 7833 1733–004


Table 17–6. SAR$: READ Procedure SR$CALLST Status Codes<br />

Octal Code Status<br />

012 The value for SR$INPBUFL is too small; use the word length returned in<br />

SR$RECBUFL.<br />

013 The input file or element accessed is not SDF.<br />

014 An invalid value is specified in the FIP$ACTYP field of the file information<br />

packet.<br />

SAR$ READ<br />

015 An invalid address is specified in SR$ADDRSEC; either the word offset is<br />

greater than 27 or the sector address is greater than the highest mass storage<br />

sector address of the file.<br />

016 The input image is too long to fit in the image buffer. The image buffer word<br />

length necessary to hold the entire image is returned in the field<br />

SR$RECBUFL. To reread the image, call SAR$ READ with a larger image<br />

buffer and image buffer word length (SR$IMGBUFL) and set the read address<br />

(SR$ADDRSEC and SR$ADDRWO) to the image address (SR$IMGSEC and<br />

SR$IMGWO) returned on the previous call.<br />

017 The character text is too long to fit in the text buffer and has been truncated.<br />

The text buffer byte length necessary to hold the character text is returned in<br />

the field SR$RECBUFL.<br />

020 The number of attributes is too large to fit in the attribute table. The attribute<br />

table word length necessary to hold all the attributes is returned in the field<br />

SR$RECBUFL.<br />

021 A partial image was read by SYMB$; call S$ARREAD again to continue reading<br />

the image.<br />

022 An invalid SDF file or element label control record was read.<br />

023 An invalid SDF control read was read.<br />

024 The image read contains incorrectly formatted ACD or incorrectly formatted<br />

embedded shift-coded kanji.<br />

025 An invalid character set type was read.<br />

026 The READ packet is not initialized; a call to S$AROPENI must be made before<br />

calls to S$ARREAD or S$ARCLOSI.<br />

027 An incorrect ACD subroutine version is being used with SAR$.<br />

030 The file name buffer address in the FIP is zero; an address of an SDF file name<br />

must be specified.<br />

031 The file name buffer address in the FIP is zero; an address of a symbiont file<br />

name must be specified.<br />

032 An illegal value is specified for the file name buffer byte length; legal values are<br />

from 1 to 12.<br />

033 The input I/O buffer address is zero; this buffer must be provided when<br />

reading from an SDF file or element.<br />

7833 1733–004 17–31


SAR$ READ<br />

Table 17–6. SAR$: READ Procedure SR$CALLST Status Codes<br />

Octal Code Status<br />

034 The SDF data record or control record read exceeds the maximum allowed<br />

length of an SDF record.<br />

0100 An unrecognized error has occurred in the SDFI routine. The SDFI error code<br />

is returned in T1 of the SR$STATUS field.<br />

0101 An unrecognized error has occurred in an ACD subroutine. The ACD error<br />

code is returned in T1 of the SR$STATUS field.<br />

0102 An unrecognized error has occurred in executing ER SYMB$. The SYMB$<br />

error code is returned in T1 of the SR$STATUS field.<br />

0103 An incorrect SDFI packet version is being used. The correct SDFI packet<br />

version is returned in T1 of the SR$STATUS field.<br />

0104 An incorrect ER SYMB$ packet version is being used. The correct SYMB$<br />

packet version is returned in T1 of the SR$STATUS field.<br />

A SR$CALLST status code of 0100 or greater is a SAR$ internal error.<br />

The READ procedure I/O status codes listed in Table 17–7 may be returned to the caller<br />

in the SR$IOSTAT field of the READ packet.<br />

Table 17–7. SAR$: READ Procedure SR$IOSTAT Status Codes<br />

Status code Explanation<br />

0 Normal I/O status<br />

01 to 40 See Table C–2, I/O Status Codes, Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

17–32 7833 1733–004


SAR$ READ<br />

17.3. <strong>Support</strong>ed Character Set Types for the READ<br />

Function<br />

Table H–1 lists 64 character set types defined for the OS 2200 system. Forty of these<br />

are referred to as ASCII-like. This means that the character set is essentially identical to<br />

the ASCII/ISO character set in the octal range 000 through 01777, with any differences<br />

being minor. Table H–1 identifies the character set types that are ASCII-like.<br />

Throughout this section, wherever ASCII or ASCII/ISO is used, the SAR$ capabilities<br />

apply equally to all ASCII-like character sets.<br />

The following character set types may be read from input files:<br />

• Fieldata 6-bit characters<br />

• ASCII-like characters, including ASCII/ISO 9-bit characters and ASCII/ISO 9-bit<br />

characters with embedded shift-coded kanji<br />

• Attributed character data (ACD)<br />

17.3.1. Fieldata<br />

If the input images are in the Fieldata character set, they are translated to the ASCII/ISO<br />

character set before they are returned to the caller. The translated images are returned<br />

to the caller in the text buffer. No attributes are returned to the caller.<br />

17.3.2. ASCII/ISO and ASCII-like<br />

If the input images are in the ASCII/ISO character set, they are returned to the caller in<br />

the text buffer. No attributes are returned to the caller.<br />

7833 1733–004 17–33


SAR$ READ<br />

17.3.3. ASCII/ISO with Embedded Shift-Coded Kanji<br />

If the input images contain embedded shift-code bytes and REQUEST_TYPE is<br />

S'Translate_embedded_KANJI' (for PLUS) or SR$REQTYPE is 1 (for MASM), the READ<br />

procedures remove the embedded shift-code bytes and return the images in internal<br />

format. The character text is returned in the text buffer, and the attributes are returned<br />

in the attribute table. Subsection 16.2 describes internal format.<br />

If REQUEST_TYPE is S'Pass_embedded_KANJI' (for PLUS) or SR$REQTYPE is 0<br />

(for MASM), the READ procedures do not remove the embedded shift-code bytes.<br />

The entire image is returned untranslated in the text buffer.<br />

Multiple Block Sequence Indicator<br />

If the input images are from a card reader file created by the Nippon-go Preprocessors<br />

for ASCII COBOL (NCOB) and ASCII FORTRAN (NFTN), they may contain a logical record<br />

that is divided into two or more physical records. The record is divided because these<br />

processors run on EXEC level 38R5 or lower levels that do not allow more than 132<br />

characters in a record. To read one logical record rather than two or more physical<br />

records, the multiple block sequence indicator is set in the last shift code of a record.<br />

The records must reside in a symbiont file, and the text buffer must be at least 264<br />

characters long.<br />

17.3.4. Attributed Character Data<br />

If the input images are attributed character data (ACD), the READ procedures translate<br />

the images into internal format. The text part is returned in the text buffer, and the<br />

attributes are returned in the attribute table. Subsection 16.2 describes internal format.<br />

The Data Structures <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> describes ACD format.<br />

17–34 7833 1733–004


Section 18<br />

SAR$ WRITE<br />

18.1. WRITE Function/PLUS Interface<br />

The SAR$ WRITE function writes symbolic images to SDF files, SDF elements, and<br />

symbiont files (PRINT$, PUNCH$, alternate PRINT$, and alternate PUNCH$). If an SDF<br />

element is written to, the element is added to the program file table of contents when<br />

the WRITE operation is completed (by calling SAR_CLOSE_OUTPUT).<br />

The SAR$ WRITE function procedures can be called from PLUS. These procedures are<br />

• SAR_OPEN_OUTPUT<br />

• SAR_WRITE<br />

• SAR_WRITE_CONTROL<br />

• SAR_CLOSE_OUTPUT<br />

All SAR$ data structure definitions and procedure calls are contained in definition<br />

elements. These elements are obtained with the PLUS COPY statement.<br />

Empty symbiont output files may not be created by simply calling SAR_OPEN_OUTPUT<br />

followed by SAR_CLOSE_OUTPUT. An empty symbiont file may be created by setting<br />

IMAGE_CONTROL_WIDTH to a nonzero value when calling SAR_OPEN_OUTPUT,<br />

followed by a call to SAR_CLOSE_OUTPUT. This will cause a print control image to be<br />

generated, which will open the output file. If IMAGE_CONTROL_WIDTH is zero when<br />

creating an "empty" symbiont file, an error will occur during SAR_CLOSE_OUTPUT.<br />

18.1.1. WRITE Packet Data Structure Description<br />

The SAR$ WRITE function requires a WRITE packet data structure for the<br />

SAR_OPEN_OUTPUT, SAR_WRITE, SAR_WRITE_CONTROL, and<br />

SAR_CLOSE_OUTPUT procedure calls.<br />

The type definition for this data structure is contained in the element SAR$WPKTD in the<br />

<strong>SYSLIB</strong> file (SYS$LIB$*<strong>SYSLIB</strong>) or SYS$*RLIB$. It is obtained with the COPY<br />

statement. The identifier for the WRITE packet data structure type is<br />

SAR_WRITE_PACKET.<br />

7833 1733–004 18–1


SAR$ WRITE<br />

The calling program must provide storage space for the WRITE packet data structure<br />

plus any necessary buffers and tables since SAR$ does not have any D-bank storage.<br />

The length of the WRITE packet is equal to the constant<br />

SAR_WRITE_PACKET_WORD_LENGTH defined in the element SAR$WPKTD (current<br />

length is 36 words). SAR_WRITE_PACKET is defined as LOCATABLE.<br />

The calling program places information in the WRITE packet data structure and passes<br />

the address of the WRITE packet data structure to SAR$ as a parameter on the<br />

procedure calls.<br />

18.1.1.1. Required Information for WRITE Procedures<br />

The calling program must set the following fields of the WRITE packet to an appropriate<br />

value:<br />

PACKET_VERSION<br />

PLUS Attribute: 6-bit integer<br />

The WRITE packet data structure version. The current version is equal to the<br />

constant SAR_WRITE_PACKET_CURRENT_VERSION defined in the element<br />

SAR$WPKTD.<br />

OUTPUT_FILE_INFO_PKT_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the output file information packet. This packet is supplied by the<br />

caller (see 18.1.2). Set to NULL if OUTPUT_FILE_TYPE is S'PRINT_File',<br />

S'PUNCH_File', or S'No_Output'.<br />

OUTPUT_BUFFER_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the output buffer, used to write images to the output file or element.<br />

This field is defined only if output is to an SDF file or element. It is omitted if output<br />

is to a symbiont file. Subsection 18.1.2 describes the output buffer.<br />

OUTPUT_BUFFER_WORD_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The length in words of the output buffer. It must be of length 28 * dpf * n, where<br />

dpf is the disk prepping factor and n is a positive integer. This field is defined only if<br />

output is to an SDF file or element. It is omitted if output is to a symbiont file.<br />

18–2 7833 1733–004


IMAGE_BUFFER_ADDRESS<br />

PLUS Attribute: word pointer<br />

SAR$ WRITE<br />

The address of the output image buffer, into which SAR$ places the images to be<br />

written out. Subsection 18.1.2 describes the image buffer.<br />

IMAGE_BUFFER_WORD_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The length in words of the output image buffer.<br />

TEXT_BUFFER_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the output text buffer, into which the caller places the character text<br />

to be written out. Subsection 18.1.2 describes the text buffer.<br />

TEXT_BUFFER_BYTE_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The length in 9-bit bytes of the character text in the text buffer.<br />

ATTRIBUTE_TABLE_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the output attribute table, into which the caller places the attributes<br />

describing the character text to be output. This field is undefined if the<br />

ATTRIBUTE_TABLE_WORD_LENGTH is zero. Subsection 18.1.2 describes the<br />

format of the attribute table.<br />

ATTRIBUTE_TABLE_WORD_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The number of valid entries in the attribute table. (Each entry is one word.) A value<br />

of zero indicates there is no output attribute table.<br />

SDF_IMAGE_CONTROL_WORD<br />

PLUS Attribute: word logical<br />

If OUTPUT_RECORD_TYPE is S'Control_record', the caller must place the SDF<br />

image control word in this field and place any data words of the control record in the<br />

output text buffer. Otherwise, this field is omitted.<br />

7833 1733–004 18–3


SAR$ WRITE<br />

18.1.1.2. Optional Information for WRITE Procedures<br />

The calling program may optionally set the following fields of the WRITE packet.<br />

The default values are obtained by zero-filling the WRITE packet before placing any<br />

information in the packet.<br />

OUTPUT_FILE_TYPE<br />

PLUS Attribute: 6-bit status<br />

The file type that output images are written to:<br />

S'SDF_element'<br />

Write to an SDF element (default).<br />

S'SDF_file'<br />

Write to an SDF file.<br />

S'PRINT_file'<br />

Write to the standard PRINT$ file.<br />

S'PUNCH_file'<br />

Write to the standard PUNCH$ file.<br />

S'Alternate_PRINT_file'<br />

Write to an alternate PRINT$ file.<br />

S'Alternate_PUNCH_file'<br />

Write to an alternate PUNCH$ file.<br />

S'No_output'<br />

Construct the output image in the image buffer, but do not write it out.<br />

The output file may not be a tape file.<br />

18–4 7833 1733–004


OUTPUT_RECORD_TYPE<br />

PLUS Attribute: 6-bit status<br />

The type of record to be written;<br />

S'Data_record'<br />

SDF data record for SDF files or elements (default).<br />

S'Control_record'<br />

SDF control record for SDF files or elements.<br />

S'Symbiont_record'<br />

Data record for symbiont files.<br />

S'Write_control_record'<br />

Write control record for symbiont files.<br />

OUTPUT_LINE_NUMBER_TYPE<br />

PLUS Attribute: 6-bit status<br />

The type of line numbers used for the output images:<br />

S'No_line_numbers'<br />

No line numbers are written out (default).<br />

S'Generate_fractional'<br />

SAR$ WRITE<br />

Generate sequential fractional line numbers with initial value 10 and increment<br />

value 10.<br />

S'Generate_CTS'<br />

Generate sequential CTS line numbers with initial value 10 and increment value<br />

10.<br />

S'Fractional_in_packet'<br />

Output the fractional line numbers supplied by the caller in the packet.<br />

S'CTS_in_packet'<br />

Output the CTS line numbers supplied by the caller in the packet.<br />

7833 1733–004 18–5


SAR$ WRITE<br />

OUTPUT_IMAGE_CHARACTER_TYPE<br />

PLUS Attribute: 6-bit status<br />

The character set type to be output by SAR$:<br />

S'ASCII_ISO'<br />

S'ACD'<br />

ASCII/ISO 9-bit characters (default) and all other ASCII-like types in Table H–1.<br />

Attributed character data (ACD).<br />

A value of any ASCII-like character set type in Table H–1.<br />

Other character set types may not be written out by SAR$. See 18.3 for details on<br />

the allowed output character set types.<br />

INPUT_TEXT_CHARACTER_TYPE<br />

PLUS Attribute: 6-bit status<br />

If the character set type of the text placed in the text buffer is Fieldata, this field<br />

must be set to S'Fieldata'. Otherwise, this field is set to S'ASCII_ISO' (default). The<br />

WRITE procedure converts Fieldata to ASCII/ISO before it is written out.<br />

UNTRANSLATE_MODE<br />

PLUS Attribute: 6-bit status<br />

The untranslate mode flag setting:<br />

S'Off'<br />

S'On'<br />

An error is returned if character set types other than ASCII/ISO, ACD, or ASCIIlike<br />

are specified for output (default).<br />

Character set types other than ASCII/ISO, ACD, or ASCII-like are written to the<br />

output file untranslated. This is set to output Fieldata.<br />

18–6 7833 1733–004


GENERAL_SDF_LABEL_FLAG<br />

PLUS Attribute: 6-bit status<br />

SAR$ WRITE<br />

A flag controlling the generation of the SDF file or element label control record:<br />

S'On'<br />

S'Off'<br />

If output is to an SDF file or element, write out a label control record with<br />

general file type 'S' (default).<br />

Do not write out an SDF label control record. If output is to an SDF file or<br />

element, the caller must write this record.<br />

CLOSING_BREAKPOINT_FLAG<br />

PLUS Attribute: 6-bit status<br />

A flag controlling symbiont file closing breakpoints:<br />

S'On'<br />

S'Off'<br />

If output is to alternate symbiont file filename, execute an '@BRKPT filename'<br />

command when SAR_CLOSE_OUTPUT is called (default).<br />

Do not execute an '@BRKPT filename' command.<br />

OUTPUT_IMAGE_LINE_SPACING<br />

PLUS Attribute: 18-bit integer<br />

For symbiont file output, the number of lines to space before printing the image<br />

(default is 1).<br />

ELEMENT_CREATION_DATE_AND_TIME<br />

PLUS Attribute: word logical<br />

For SDF element output, the creation date and time of the element to be entered in<br />

the program file table of contents. The date and time format is described under<br />

"Program File Format," in the Data Structures <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>. The<br />

default is the current date and time when SAR_CLOSE_OUTPUT is called.<br />

7833 1733–004 18–7


SAR$ WRITE<br />

LINE_NUMBER_INTEGER_PART<br />

PLUS Attribute: word integer<br />

The line number to be written out with the output image. It may be a CTS line<br />

number or the integer part of a fractional line number (see<br />

OUTPUT_LINE_NUMBER_TYPE). This field is used only for output types of SDF<br />

files or SDF elements.<br />

LINE_NUMBER_FRACTIONAL_PART (1:4)<br />

PLUS Attribute: word integer<br />

The fractional part of a fractional line number to be written out with the output<br />

image. Each word contains 10 digits of the fraction. This field is used only for<br />

output types of SDF files or SDF elements.<br />

TRIM_BLANKS_FLAG<br />

PLUS Attribute: 6-bit status<br />

A flag that determines if words of blank (space) characters are trimmed from the end<br />

of ASCII output images before they are written out:<br />

S'Off'<br />

S'On'<br />

Do not trim blank characters (default).<br />

Trim blank characters from output image.<br />

IMAGE_CONTROL_WIDTH<br />

PLUS Attribute: 18-bit integer<br />

The initial print or punch control width of the output file. The default is 33 words<br />

(132 ASCII characters). This field is used only for symbiont output file types. This is<br />

only recognized during the SAR_OPEN_OUTPUT call. If it is modified in subsequent<br />

calls to SAR_WRITE, it will be ignored. If the output file type is a symbiont file,<br />

SAR$ may expand the line width if necessary. The line width will be reset to the<br />

print or punch device default in SAR_CLOSE_OUTPUT. This is to allow for the<br />

additional bytes required in the ASCII/ISO with embedded shift-coded kanji and ACD<br />

character types and for transmitting large data records such as a full screen of<br />

characters.<br />

The constant SAR_PCW_CHARS_PER_WORD may be used to calculate the desired<br />

IMAGE_CONTROL_WIDTH.<br />

18–8 7833 1733–004


18.1.1.3. Information Returned by WRITE Procedures<br />

SAR$ WRITE<br />

The following fields of the WRITE packet contain values returned by the SAR$ WRITE<br />

procedures to the calling program:<br />

CALL_STATUS<br />

PLUS Attribute: 18-bit status<br />

The status of the current call to SAR_OPEN_OUTPUT, SAR_WRITE,<br />

SAR_WRITE_CONTROL, or SAR_CLOSE_OUTPUT. See Table 18–3 for an<br />

explanation of the WRITE procedure status codes. This field may be referenced as<br />

an 18-bit logical field with the label CALL_STATUS_CODE.<br />

SUB_STATUS_CODE<br />

PLUS Attribute: 12-bit logical<br />

This field contains additional information for particular CALL_STATUS codes.<br />

IO_STATUS<br />

PLUS Attribute: 6-bit status<br />

The status of any I/O operations performed by SAR$. See Table 18–4 for the I/O<br />

status codes. This field may be referenced as a 6-bit logical field with the label<br />

IO_STATUS_CODE.<br />

WRITE_STATUS_WORD<br />

PLUS Attribute: word logical<br />

A one-word combination of CALL_STATUS, SUB_STATUS, and IO_STATUS<br />

contained in H2, T1, and S3, respectively.<br />

SYMB_STATUS_WORD<br />

PLUS Attribute: word logical<br />

The status word returned from an ER SYMB$ request. See SYMB$ section, OS<br />

2200 Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for further details on the ER SYMB$<br />

status word.<br />

RECOMMENDED_BUFFER_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The recommended buffer or table length when an invalid length is specified or when<br />

an overflow occurs.<br />

7833 1733–004 18–9


SAR$ WRITE<br />

IMAGE_BYTE_LENGTH<br />

PLUS Attribute: 18-integer<br />

The length in bytes of the image written out by the SAR_WRITE procedure. For<br />

images written to SDF files or elements, the length does not include the image<br />

control word or the length of the line number records. For images written to<br />

symbiont files, the length is the number of bytes transferred by the SYMB$ request.<br />

IMAGE_ADDRESS_SECTOR<br />

PLUS Attribute: 24-bit integer<br />

The mass storage sector address to which the SDF image was written. This field is<br />

undefined if output file type is not an SDF file or element. If a line number control<br />

record (type 053) is written with the data record, this address is the sector address<br />

of the line number control record corresponding to the data record.<br />

IMAGE_ADDRESS_WORD_OFFSET<br />

PLUS Attribute: 6-bit integer<br />

The word offset into the mass storage sector address that the SDF image was<br />

written to. This field is undefined if output file type is not an SDF file or element.<br />

IMAGE_ADDRESS<br />

PLUS Attribute: word machine integer<br />

A one word combination of IMAGE_ADDRESS_SECTOR and<br />

IMAGE_ADDRESS_WORD_OFFSET, contained in bits 13 to 36 and in bits 1 to 6,<br />

respectively. (Bit 1 is the leftmost bit of the word.)<br />

18.1.2. Buffers and Tables for PLUS WRITE Procedures<br />

The SAR$ WRITE function requires that the following buffers and table be supplied by<br />

the calling program:<br />

• Output buffer<br />

The output buffer is used to write to mass storage files. The calling program never<br />

needs to access the output buffer, but it must provide it to SAR$. If the calling<br />

program is using both the READ and WRITE functions of SAR$, then it cannot use<br />

the same I/O buffer for both functions. The calling program must provide a separate<br />

input and output buffer for each function.<br />

18–10 7833 1733–004


SAR$ WRITE<br />

• Image buffer<br />

The image buffer is used to construct individual images from information in the text<br />

buffer and attribute table and move them into the output buffer. Because images<br />

can be written in different formats, this buffer is necessary to relieve the calling<br />

program from having to build these formats. The calling program never needs to<br />

access the image buffer, but it must provide it to SAR$. The calling program using<br />

the READ and WRITE functions of SAR$ can use the same image buffer for both<br />

functions.<br />

• Text buffer<br />

The text buffer is used to pass the characters of the output image to SAR$. The<br />

calling program must place the characters sequentially in the text buffer, regardless<br />

of the eventual output format or attributes that may apply to the characters. The<br />

text buffer is one part of internal format (see 16.2). The calling program using the<br />

READ and WRITE functions of SAR$ can use the same text buffer for both<br />

functions.<br />

• Attribute table<br />

The attribute table is used to pass to SAR$ the attributes that apply to the characters<br />

in the text buffer. Each attribute has a one-word entry in the attribute table which<br />

follows the format in Figure 18–1.<br />

index type value<br />

0 17 18 26 27 35<br />

Figure 18–1. SAR$: Attribute Table Entry<br />

The calling program places the attribute entries into the attribute table. The attribute<br />

table is the other part of internal format (see 16.2). If the output images will not<br />

contain any attributes or if UNTRANSLATE_MODE is set to S (on), the attribute table<br />

may be omitted by setting ATTRIBUTE_TABLE_ADDRESS to null (zero). The calling<br />

program using the READ and WRITE functions of SAR$ can use the same attribute<br />

table for both functions.<br />

All buffers and tables must be provided by the calling program. The type definitions for<br />

the buffers and tables and definitions for the default buffer and table lengths are<br />

contained in the element SAR$DEFN in the <strong>SYSLIB</strong> file (SYS$LIB$*<strong>SYSLIB</strong>) or<br />

SYS$*RLIB$. They may be obtained with the COPY statement. These definitions<br />

simplify the creation of required buffers and tables for the calling program.<br />

7833 1733–004 18–11


SAR$ WRITE<br />

The default buffer and table lengths are listed in Table 18–1.<br />

Table 18–1. SAR$: PLUS WRITE Buffer and Table<br />

Length Defaults<br />

Identifier Value<br />

SAR_IO_BUFFER_WORD_LENGTH 448<br />

SAR_IMAGE_BUFFER_WORD_LENGTH 63<br />

SAR_TEXT_BUFFER_BYTE_LENGTH 132<br />

SAR_ATTRIBUTE_TABLE_WORD_LENGTH 40<br />

The buffer and table type definitions are listed in Table 18–2.<br />

Table 18–2. SAR$: PLUS WRITE Buffer and Table<br />

Type Definitions<br />

Identifier Type<br />

SAR_IO_BUFFER 448 words logical locatable<br />

SAR_IMAGE_BUFFER 63 words logical locatable<br />

SAR_TEXT_BUFFER 132 ASCII characters locatable<br />

SAR_ATTRIBUTE_TABLE 40 words logical locatable<br />

SAR_SELECT_LIST 4 bytes logical locatable<br />

The element SAR$DEFN also contains other definitions necessary to SAR$.<br />

18.1.3. WRITE Procedures Called from PLUS<br />

The procedures for the WRITE function are<br />

• SAR_OPEN_OUTPUT<br />

• SAR_WRITE<br />

• SAR_WRITE_CONTROL<br />

• SAR_CLOSE_OUTPUT<br />

The procedure declarations for SAR_OPEN_OUTPUT, SAR_WRITE,<br />

SAR_WRITE_CONTROL, and SAR_CLOSE_OUTPUT are contained in the element<br />

SAR$WRITE$DG in the <strong>SYSLIB</strong> file (SYS$LIB$*<strong>SYSLIB</strong>) or SYS$*RLIB$. This element is<br />

obtained with the COPY statement. SAR$WRITE$DG contains all four procedure<br />

declarations. All of the WRITE procedure modules are compiled with the G option using<br />

the IBJ$ calling sequence.<br />

18–12 7833 1733–004


18.1.3.1. SAR_OPEN_OUTPUT Procedure Call<br />

SAR$ WRITE<br />

The WRITE packet data structure must be initialized before any images are written out.<br />

The SAR_OPEN_OUTPUT procedure performs the WRITE packet initialization.<br />

Initial Conditions<br />

The calling program sets the following parameters in the WRITE packet to appropriate<br />

values before calling SAR_OPEN_OUTPUT:<br />

• Required parameters (described in 18.1.1.1)<br />

PACKET_VERSION<br />

OUTPUT_FILE_INFO_PACKET_ADDRESS<br />

OUTPUT_BUFFER_ADDRESS<br />

OUTPUT_BUFFER_WORD_LENGTH<br />

IMAGE_BUFFER_ADDRESS<br />

IMAGE_BUFFER_WORD_LENGTH<br />

• Optional parameters (described in 18.1.1.2)<br />

OUTPUT_FILE_TYPE<br />

OUTPUT_LINE_NUMBER_TYPE<br />

OUTPUT_IMAGE_CHARACTER_TYPE<br />

UNTRANSLATE_MODE<br />

GENERAL_SDF_LABEL_FLAG<br />

CLOSING_BREAKPOINT_FLAG<br />

TRIM_BLANKS_FLAG<br />

IMAGE_CONTROL_WIDTH<br />

Note: The calling program must zero-fill the WRITE packet before placing any<br />

parameters in the packet.<br />

Calling Format<br />

PROCEDURE SAR_OPEN_OUTPUT<br />

(WRITE_PACKET_ADDRESS: WORD MACHINE POINTER)<br />

IMPORTED ('SAR$OPENO$PG');<br />

Returns<br />

SAR_OPEN_OUTPUT returns the initialization status in the WRITE packet field<br />

CALL_STATUS. If the status is S'Normal', the initialization of the WRITE packet is<br />

successful. Otherwise, an error has occurred and CALL_STATUS contains the status<br />

code. See 18.1.4 for a list of WRITE function status codes.<br />

7833 1733–004 18–13


SAR$ WRITE<br />

18.1.3.2. SAR_WRITE Procedure Call<br />

The SAR_WRITE procedure writes images to the output file or element. Each call to<br />

SAR_WRITE writes out one image. The calling program must supply the character text<br />

of the image in the text buffer and the attributes for the text (if any) in the attribute table.<br />

SAR_WRITE combines the text and attributes into the proper format and writes out the<br />

image.<br />

Initial Conditions<br />

The calling program sets the following parameters in the WRITE packet to appropriate<br />

values before calling SAR_WRITE:<br />

• Required parameters (described in 18.1.1.1)<br />

TEXT_BUFFER_ADDRESS<br />

TEXT_BUFFER_BYTE_LENGTH<br />

ATTRIBUTE_TABLE_ADDRESS<br />

ATTRIBUTE_TABLE_WORD_LENGTH<br />

• Optional parameters (described in 18.1.1.2)<br />

OUTPUT_RECORD_TYPE<br />

INPUT_TEXT_CHARACTER_TYPE<br />

OUTPUT_IMAGE_LINE_SPACING<br />

LINE_NUMBER_INTEGER_PART<br />

LINE_NUMBER_FRACTIONAL_PART(1:4)<br />

Calling Format<br />

PROCEDURE SAR_WRITE<br />

(WRITE_PACKET_ADDRESS: WORD MACHINE POINTER)<br />

IMPORTED ('SAR$WRITE$PG');<br />

Returns<br />

SAR_WRITE returns the calling status in the WRITE packet field CALL_STATUS. If the<br />

status is S'Normal', then the write was successful. The following fields of the WRITE<br />

packet contain information returned by SAR$ to the calling program:<br />

IMAGE_BYTE_LENGTH<br />

IMAGE_ADDRESS_SECTOR<br />

IMAGE_ADDRESS_WORD_OFFSET<br />

These parameters are described in 18.1.1.3.<br />

If the status returned from SAR_WRITE is not S'Normal', then an error has occurred and<br />

CALL_STATUS contains the status code. See 18.1.4 for a list of WRITE function status<br />

codes.<br />

18–14 7833 1733–004


18.1.3.3. SAR_WRITE_CONTROL Procedure Call<br />

SAR$ WRITE<br />

The SAR_WRITE_CONTROL procedure performs the following write control functions<br />

for symbiont files:<br />

• Moves to the top of the next page<br />

• Moves to logical line n<br />

• Inserts a heading at the top of all succeeding pages<br />

• Clears the heading from the top of all succeeding pages<br />

• Sets the page length, top margin, bottom margin, and lines per inch<br />

Initial Conditions<br />

The calling program sets the following parameters in the WRITE packet to appropriate<br />

values before calling SAR_WRITE_CONTROL:<br />

• Required parameter (described below)<br />

CONTROL_FUNCTION<br />

• Optional parameters (described below)<br />

LINE_NUMBER_ON_PAGE<br />

PAGE_LENGTH<br />

TOP_MARGIN_LENGTH<br />

BOTTOM_MARGIN_LENGTH<br />

LINES_PER_INCH<br />

Calling Format<br />

PROCEDURE SAR_WRITE_CONTROL<br />

(WRITE_PACKET_ADDRESS: WORD MACHINE POINTER)<br />

IMPORTED ('SAR$WCNTL$PG');<br />

Parameters<br />

CONTROL_FUNCTION<br />

PLUS Attribute: 18-bit status<br />

The WRITE control function to be performed by SAR_WRITE_CONTROL:<br />

S'Top_of_page'<br />

Move to the top of the next page (page eject).<br />

S'Line_spacing'<br />

Space to line n on the page, where n is the value set by the calling program in<br />

the field LINE_NUMBER_ON_PAGE. If the current line location is equal to or<br />

beyond n, space to line n of the next page.<br />

7833 1733–004 18–15


SAR$ WRITE<br />

S'Print_heading'<br />

Insert a heading at the top of all succeeding pages. The heading text must be in<br />

the ASCII/ISO character set with a maximum length of 96 characters. The caller<br />

places the heading text in the text buffer, and the length of the heading text in<br />

the field TEXT_BUFFER_BYTE_LENGTH.<br />

S'Clear_heading'<br />

Clear the heading from the top of all succeeding pages.<br />

S'Set_margins'<br />

Change the values for the page length, top margin, bottom margin, and lines per<br />

inch. The values are set by the caller in fields PAGE_LENGTH,<br />

TOP_MARGIN_LENGTH, BOTTOM_MARGIN_LENGTH, and LINES_PER_INCH.<br />

A value of -1 for any of these fields results in the device standard value being<br />

used.<br />

LINE_NUMBER_ON_PAGE<br />

PLUS Attribute: 18-bit integer<br />

The logical line number on the page to space to. This field is defined only for the<br />

CONTROL_FUNCTION S'Line_spacing'.<br />

PAGE_LENGTH<br />

PLUS Attribute: 18-bit signed integer<br />

The number of lines in a page. This field is defined only for the<br />

CONTROL_FUNCTION S'Set_margins'.<br />

TOP_MARGIN_LENGTH<br />

PLUS Attribute: 18-bit signed integer<br />

The number of blank lines used for a top margin; it must be less than 63 lines.<br />

This field is defined only for the CONTROL_FUNCTION S'Set_margins'.<br />

BOTTOM_MARGIN_LENGTH<br />

PLUS Attribute: 18-bit signed integer<br />

The number of blank lines used for a bottom margin; it must be less than 63 lines.<br />

This field is defined only for the CONTROL_FUNCTION S'Set_margins'.<br />

18–16 7833 1733–004


LINES_PER_INCH<br />

PLUS Attribute: 18-bit signed integer<br />

SAR$ WRITE<br />

The number of lines per inch; it may be 6, 8, or -1 (device standard value). This field<br />

is defined only for the CONTROL_FUNCTION S'Set_margins'.<br />

Returns<br />

SAR_WRITE_CONTROL returns the calling status in the WRITE packet field<br />

CALL_STATUS. If the status is S'Normal', then the write control operation was<br />

successful.<br />

If the status returned from SAR_WRITE_CONTROL is not S'Normal', then an error has<br />

occurred and CALL_STATUS contains the status code. See 18.1.4 for a list of WRITE<br />

function status codes.<br />

18.1.3.4. SAR_CLOSE_OUTPUT Procedure Call<br />

The SAR_CLOSE_OUTPUT procedure performs the necessary tasks to close the output<br />

operation. If the output type is an SDF element, the element is added to the program<br />

file table of contents.<br />

Initial Condition<br />

The calling program may set the following optional parameter in the WRITE packet to an<br />

appropriate value before calling SAR_CLOSE_OUTPUT:<br />

ELEMENT_CREATION_DATE_AND_TIME<br />

This parameter is described in 18.1.1.2.<br />

Calling Format<br />

PROCEDURE SAR_CLOSE_OUTPUT<br />

(WRITE_PACKET_ADDRESS: WORD MACHINE POINTER)<br />

IMPORTED ('SAR$CLOSO$PG');<br />

Returns<br />

SAR_CLOSE_OUTPUT returns the calling status in the WRITE packet field<br />

CALL_STATUS. If the status is S'Normal', then the close was successful.<br />

If the status returned from SAR_CLOSE_OUTPUT is not S'Normal', then an error has<br />

occurred and CALL_STATUS contains the status code. See 18.1.4 for a list of WRITE<br />

function status codes.<br />

7833 1733–004 18–17


SAR$ WRITE<br />

18.1.3.5. Example<br />

The following example shows a PLUS program using SAR$ WRITE to write SDF output:<br />

COPY (‘SAR$DEFN’);<br />

COPY (‘SAR$WPKTD’);<br />

COPY (‘SAR$FILEPKTD’);<br />

DECLARE WRITE_PKT: SAR_WRITE_PACKET,<br />

IO_BUF: SAR_IO_BUFFER,<br />

IMAGE_BUF: SAR_IMAGE_BUFFER,<br />

TEXT_BUF: SAR_TEXT_BUFFER,<br />

ATTRIBUTE_TBL: SAR_ATTRIBUTE_TABLE,<br />

FILE_PKT: SAR_FILE_INFO_PACKET;<br />

COPY (‘SAR$WRITE$DG’);<br />

.<br />

.<br />

.<br />

WRITE_PKT.PACKET_VERSION:= SAR_WRITE_PACKET_CURRENT_VERSION;<br />

WRITE_PKT.OUTPUT_FILE_INFO_PACKET_ADDRESS:= LOC(FILE_PKT);<br />

WRITE_PKT.OUTPUT_BUFFER_ADDRESS:= LOC(IO_BUF);<br />

WRITE_PKT.OUTPUT_BUFFER_WORD_LENGTH:= SAR_IO_BUFFER_WORD_LENGTH;<br />

WRITE_PKT.IMAGE_BUFFER_ADDRESS:= LOC(IMAGE_BUF);<br />

WRITE_PKT.IMAGE_BUFFER_WORD_LENGTH:= SAR_IMAGE_BUFFER_WORD_LENGTH;<br />

WRITE_PKT.TEXT_BUFFER_ADDRESS:= LOC(TEXT_BUF);<br />

WRITE_PKT.TEXT_BUFFER_BYTE_LENGTH:= SAR_TEST_BUFFER_BYTE_LENGTH;<br />

WRITE_PKT.ATTRIBUTE_TABLE_ADDRESS:= LOC(ATTRIBUTE_TBL);<br />

WRITE_PKT.ATTRIBUTE_TABLE_WORD_LENGTH:= SAR_ATTRIBUTE_TABLE_WORD_LENGTH;<br />

.<br />

.<br />

.<br />

SAR_OPEN_OUTPUT(LOC(WRITE_PKT));<br />

IF WRITE_PKT.CALL_STATUS NE S ‘Normal’<br />

THEN BEGIN<br />

PROCESS_WRITE_ERROR;<br />

RETURN;<br />

END;<br />

.<br />

.<br />

.<br />

SAR_WRITE(LOC(WRITE_PKT));<br />

IF WRITE_PKT.CALL_STATUS NE S’Normal’<br />

THEN BEGIN<br />

PROCESS_WRITE_ERROR;<br />

RETURN;<br />

END;<br />

.<br />

.<br />

.<br />

SAR_CLOSE_OUPUT(LOC(WRITE_PKT));<br />

IF WRITE_PKT.CALL_STATUS NE S ‘Normal’<br />

THEN BEGIN<br />

PROCESS_WRITE_ERROR;<br />

RETURN;<br />

END;<br />

18–18 7833 1733–004


SAR$ WRITE<br />

In this example, the COPY statement obtains the SAR$ definitions for the buffers and<br />

tables, WRITE packet, WRITE procedure, and file information packet.<br />

The SAR$ data structures for the WRITE function are declared by using the definitions<br />

contained in element SAR$DEFN, SAR$WPKTD, and SAR$FILEPKTD.<br />

The WRITE packet is initialized by assigning appropriate values to all necessary fields.<br />

All other WRITE packet fields take the default values if the WRITE packet is zero-filled.<br />

The SAR_WRITE_PACKET_CURRENT_VERSION constant is defined in the SAR$WPKTD<br />

element, and the buffer length constants are defined in the SAR$DEFN element.<br />

The WRITE function is initialized by calling the SAR_OPEN_OUTPUT procedure, passing<br />

the WRITE packet address as a parameter. If the CALL_STATUS field of the WRITE<br />

packet is not status S'Normal', the error is processed. The SAR_WRITE procedure is<br />

called to write each SDF image out to the file or element described in the file information<br />

packet.<br />

When all images are written out, the SAR_CLOSE_OUTPUT procedure is called. This<br />

procedure writes an end-of-file record, and if the output is to an element, adds the<br />

element to the program file table of contents.<br />

18.1.4. Status Lists for PLUS WRITE Procedures<br />

The WRITE procedure call status codes listed in Table 18–3 may be returned to the<br />

calling program in the CALL_STATUS field of the WRITE packet. These CALL_STATUS<br />

codes are for SAR_WRITE_PACKET_CURRENT_VERSION = 2 and above. A list of all call<br />

status codes is available as WRITE_CALL_STATUS_LIST, an 18-bit status data entity<br />

defined in the element SAR$WPKTD.<br />

Table 18–3. SAR$: WRITE Procedure CALL_STATUS Codes<br />

Octal Code Status<br />

0 Normal return from SAR$.<br />

01 An outdated WRITE packet version is being used.<br />

02 An invalid WRITE packet version is being used.<br />

03 The value for IMAGE_BUFFER_ADDRESS is NULL; an address must be<br />

given for the output image buffer.<br />

04 The IMAGE_BUFFER_WORD_LENGTH is zero; a length must be given for<br />

the output image buffer.<br />

05 The value for OUTPUT_FILE_INFO_PKT_ADDRESS is NULL; a file<br />

information packet must be given for this output file type.<br />

06 An invalid value is specified for OUTPUT_FILE_TYPE.<br />

07 An invalid value is specified for OUTPUT_LINE_NUMBER_TYPE.<br />

010 An invalid value is specified for UNTRANSLATE_MODE.<br />

7833 1733–004 18–19


SAR$ WRITE<br />

Table 18–3. SAR$: WRITE Procedure CALL_STATUS Codes<br />

Octal Code Status<br />

011 The value for OUTPUT_BUFFER_WORD_LENGTH is too small; use the word<br />

length returned in RECOMMENDED_BUFFER_LENGTH.<br />

012 An I/O error has occurred in a WRITE procedure. See the IO_STATUS_CODE<br />

field for the status code and Table 18–4.<br />

013 An invalid value is specified for OUTPUT_RECORD_TYPE.<br />

014 An incorrect ACD subroutine version is being used with SAR$.<br />

015 The attribute table contains an index that is either zero, not in sequential<br />

order, or greater than the text length.<br />

016 The attribute table contains an invalid attribute type or an invalid value for the<br />

attribute type.<br />

017 An illegal character set type is specified for the<br />

OUTPUT_IMAGE_CHARACTER_TYPE.<br />

020 Line numbers are not allowed for this output file type.<br />

021 The WRITE packet is not initialized; a call to SAR_OPEN_OUTPUT must be<br />

made before calls to SAR_WRITE, SAR_WRITE_CONTROL, or<br />

SAR_CLOSE_OUTPUT.<br />

022 The image buffer has overflowed; use the word length in<br />

RECOMMENDED_BUFER_LENGTH for IMAGE_BUFFER_WORD_LENGTH<br />

and call SAR_WRITE again.<br />

024 An error has occurred in adding the element to the table of contents; see the<br />

SUB_STATUS_CODE field for the ER PFI$ status code and the Exec ER<br />

<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

026 An error has occurred in executing the symbiont file closing breakpoint; see<br />

the SUB_STATUS_CODE field for the ER CSF$ status code returned for<br />

@SYM and @BRKPT in dynamically submitted control statements in the Exec<br />

ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

027 SDF control records cannot be written to this output file type.<br />

030 Symbiont write control records cannot be written to this output file type.<br />

031 The file name buffer address in the FIP is NULL; an address of an SDF file<br />

name must be specified.<br />

032 The file name buffer address in the FIP is NULL; an address of a symbiont file<br />

name must be specified.<br />

033 The element name buffer address in the FIP is NULL; an address of an SDF<br />

element name must be specified.<br />

034 An illegal value is specified for the file name buffer byte length; legal values<br />

are from 1 to 12.<br />

035 An illegal value is specified for the element name buffer byte length; legal<br />

values are from 1 to 12.<br />

036 An illegal value is specified for the version name buffer byte length; legal<br />

values are from 1 to 12.<br />

18–20 7833 1733–004


Table 18–3. SAR$: WRITE Procedure CALL_STATUS Codes<br />

Octal Code Status<br />

SAR$ WRITE<br />

037 The output I/O buffer address is NULL; this buffer must be provided when<br />

writing to an SDF file or element.<br />

0100 An unrecognized error has occurred in the SDFO routine. The SDFO error<br />

code is returned in the SUB_STATUS field.<br />

0101 An unrecognized error has occurred in an ACD subroutine. The ACD error<br />

code is returned in the SUB_STATUS field.<br />

0102 An unrecognized error has occurred in executing ER SYMB$. The SYMB$<br />

error code is returned in the SUB_STATUS field.<br />

0103 An incorrect SDFO packet version is being used. The correct SDFO packet<br />

version is returned in the SUB_STATUS field.<br />

0104 An incorrect ER SYMB$ packet version is being used. The correct SYMB$<br />

packet version is returned in the SUB_STATUS field.<br />

A CALL_STATUS code of 0100 or greater is an SAR$ internal error.<br />

The WRITE procedure I/O status codes listed in Table 18–4 may be returned to the<br />

calling program in the IO_STATUS field of the WRITE packet.<br />

Table 18–4. SAR$: WRITE Procedure IO_STATUS Status List<br />

Octal Code Status<br />

0 Normal I/O status.<br />

01 to 040 See Table C–2, I/O Status Codes, Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong><br />

for an explanation of the I/O status codes.<br />

18.2. WRITE Function/MASM Interface<br />

The SAR$ write function writes symbolic images to SDF files, SDF elements, and<br />

symbiont files (PRINT$, PUNCH$, alternate PRINT$, and alternate PUNCH$). If an SDF<br />

element is written to, the element is added to the program file table of contents when<br />

the WRITE operation is completed (by calling S$ARCLOSO).<br />

The SAR$ WRITE procedures can be called directly from MASM. The SAR$ data<br />

structure definitions and procedure calls are defined by MASM procedures (PROCs).<br />

The element SAR$PROCS contains these PROCs.<br />

7833 1733–004 18–21


SAR$ WRITE<br />

Empty symbiont output files may not be created by simply calling S$AROPENO followed<br />

by S$ARCLOSO. An empty symbiont file may be created by setting SW$PCW to a<br />

nonzero value when calling S$AROPENO, followed by a call to S$ARCLOSO. This will<br />

cause a print control image to be generated, which will open the output file. If SW$PCW<br />

is zero when creating an "empty" symbiont file, an error will occur during S$ARCLOSO.<br />

18.2.1. WRITE Packet and Data Area Description<br />

The SAR$ write function requires a WRITE packet and data area for the open-output,<br />

write, and close-output calls. The S$ARWPDEF PROC generates the EQUFs defining<br />

the packet fields. The word length of the MASM WRITE packet and data area is equal to<br />

label SW$PKTWLEN defined by the S$ARWPDEF PROC (the current length is 70<br />

words).<br />

18.2.1.1. Required Information for WRITE Procedures<br />

The calling program must set the following fields of the WRITE packet to appropriate<br />

values:<br />

SW$PKTVER<br />

The WRITE packet data structure version. The current version is equal to the label<br />

SW$CURVER, defined by the S$ARWPDEF PROC.<br />

SW$FIPADDR<br />

The address of the output file information packet. This packet is supplied by the<br />

caller (see 16.1). Set this field to zero if SW$OUTFILT is 2, 3, or 6.<br />

SW$OUTBUF<br />

The address of the output buffer used to write images to the output file or element.<br />

This field is defined only if output is to an SDF file or element. It is omitted if output<br />

is to a symbiont file. Subsection 15.6.2 describes the output buffer.<br />

SW$OUTBUFL<br />

The length in words of the output buffer. It must be of length (28 * dpf * n), where<br />

dpf is the disk prepping factor and n is a positive integer. This field is defined only if<br />

output is to an SDF file or element. It is omitted if output is to a symbiont file.<br />

SW$IMGBUF<br />

The address of the output image buffer into which the SAR$ places the images to be<br />

written out. Subsection 15.6.2 describes the image buffer.<br />

SW$IMGBUFL<br />

The length in words of the output image buffer.<br />

18–22 7833 1733–004


SW$TEXBUF<br />

SAR$ WRITE<br />

The address of the output text buffer, into which the caller places the character text<br />

to be written out. Subsection 15.6.2 describes the text buffer.<br />

SW$TEXBUFL<br />

The length in 9-bit bytes of the character text in the text buffer.<br />

SW$ATTRIB<br />

The address of the output attribute table into which the caller places the attributes<br />

describing the character text to be output. This field is undefined if the<br />

SW$ATTRIBL field is set to zero. Subsection 15.6.2 describes the format of the<br />

attribute table.<br />

SW$ATTRIBL<br />

The number of valid entries in the attribute table (each entry is one word.) A value of<br />

zero indicates there is no output attribute table.<br />

SW$SDFICW<br />

If the SW$OUTRECT field is set to 1 (SDF control record), the caller must place the<br />

SDF image control word in this field, and place any data words of the control record<br />

in the output text buffer.<br />

18.2.1.2. Optional Information for WRITE Procedures<br />

The calling program may optionally set the following fields of the WRITE packet. The<br />

default values are obtained by zero-filling the WRITE packet before placing any<br />

information in the packet.<br />

SW$OUTFILT<br />

The file type that output images are written to:<br />

0 Write to an SDF element (default).<br />

1 Write to an SDF file.<br />

2 Write to the standard PRINT$ file.<br />

3 Write to the standard PUNCH$ file.<br />

4 Write to an alternate PRINT$ file.<br />

5 Write to an alternate PUNCH$ file.<br />

6 Construct the output image in the image buffer, but do not write it out.<br />

The output file may not be a tape file.<br />

7833 1733–004 18–23


SAR$ WRITE<br />

SW$OUTRECT<br />

The type of record to be written:<br />

0 SDF data record for SDF files or elements (default).<br />

1 SDF control record for SDF files or elements.<br />

2 Data record for symbiont files.<br />

3 Write control record for symbiont files.<br />

SW$LNUMFMT<br />

The format of line numbers used for output images:<br />

0<br />

1<br />

2<br />

3<br />

4<br />

SW$OCHART<br />

No line numbers are to be written out (default).<br />

Generate sequential fractional line numbers with initial value 10 and increment<br />

value 10.<br />

Generate sequential CTS line numbers with initial value 10 and increment value<br />

10.<br />

Output the fractional line numbers supplied by the caller in the packet.<br />

Output the CTS line numbers supplied by the caller in the packet.<br />

The character set type to be output by SAR$<br />

0 ASCII/ISO 9-bit characters (default), including ASCII-like characters in Table H–1.<br />

1 Attributed character data (ACD).<br />

Other character set types may not be written out by SAR$. See 18.3 for details on<br />

the allowed output character set types.<br />

18–24 7833 1733–004


SW$ICHART<br />

SAR$ WRITE<br />

If the character set type of the text placed in the text buffer is Fieldata, this field<br />

must be set to 1. Otherwise this field is set to 2 (ASCII/ISO–default). SAR$<br />

converts Fieldata to ASCII/ISO before it is written out.<br />

SW$UNTRFLG<br />

The untranslate mode flag setting:<br />

0<br />

1<br />

SW$SDFLBLF<br />

An error is returned if character set types other than ASCII/ISO, ACD, or ASCIIlike<br />

are specified for output (default).<br />

Character set types other than ASCII/ISO, ACD, or ASCII-like are written to the<br />

output file untranslated.<br />

A flag controlling the generation of the SDF file or element label control record<br />

0<br />

1<br />

SW$BRKPTF<br />

If output is to an SDF file or element, write out a label control record with<br />

general file type 'S' (default).<br />

Do not write out an SDF label control record. If output is to an SDF file or<br />

element, the caller must write this record.<br />

A flag controlling symbiont file closing breakpoints:<br />

0<br />

1<br />

SW$LINESPA<br />

If output is to alternate symbiont file filename, execute a '@BRKPT filename'<br />

command when the close-output procedure is called (default).<br />

Do not execute a '@BRKPT filename' command.<br />

For symbiont file output, the number of lines to space before writing the image<br />

(default is 1).<br />

7833 1733–004 18–25


SAR$ WRITE<br />

SW$ELTCDT<br />

For SDF element output, the creation date and time of the element to be entered in<br />

the program file table of contents. The date and time format is described under<br />

"Program File Format," Data Structures <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>. The default<br />

is the current date and time when the close-output procedure is called.<br />

SW$LNUMINT<br />

The line number to be written out with the output image. It may be a CTS line<br />

number or the integer part of a fractional line number (see SW$LNUMFMT). This<br />

field is used only for output types of SDF files and SDF elements.<br />

SW$LNUMF1<br />

The first 10 digits of the fractional line number to be written out with the output<br />

image. This field is used only for output types of SDF files and SDF elements.<br />

SW$LNUMF2<br />

The second 10 digits of the fractional line number to be written out with the output<br />

image. This field is used only for output types of SDF files and SDF elements.<br />

SW$LNUMF3<br />

The third 10 digits of the fractional line number to be written out with the output<br />

image. This field is used only for output types of SDF files and SDF elements.<br />

SW$LNUMF4<br />

The fourth 10 digits of the fractional line number to be written out with the output<br />

image. This field is used only for output types of SDF files and SDF elements.<br />

SW$TRIMBF<br />

A flag that determines if words of blank (space) characters are trimmed from the end<br />

of ASCII output images before they are written out.<br />

0 Do not trim blank characters (default).<br />

1 Trim blank characters from ASCII output images.<br />

SW$PCW<br />

The initial print or punch control width of the output file. The default is 33 words<br />

(132 ASCII characters). This field is used only for symbiont output file types. This is<br />

only recognized during the S$AROPENO call. If it is modified in subsequent calls to<br />

S$ARWRITE, it will be ignored. If the output file type is a symbiont file, SAR$ may<br />

expand the line width if necessary. The line width will be reset to the print or punch<br />

device default in the S$ARCLOSO call. This is to allow for the additional bytes<br />

required in the ASCII/ISO with embedded shift-coded kanji and ACD character types<br />

and for transmitting large data records such as a full screen of characters.<br />

18–26 7833 1733–004


18.2.1.3. Information Returned by WRITE Procedures<br />

SAR$ WRITE<br />

The following fields of the WRITE packet contain values returned by the SAR$ WRITE<br />

procedures to the calling program:<br />

SW$STATUS<br />

The WRITE function status word; it contains the call status in H2, the substatus in<br />

T1, and the I/O status in S3 of the word.<br />

SW$CALLST<br />

The status of the current open-output, write, or close-input procedure call. See Table<br />

18–6 for an explanation of the octal status codes.<br />

SW$IOSTAT<br />

The status of any I/O operations performed by SAR$. See Table 18–7 for the octal<br />

status codes.<br />

SW$SYMBDT<br />

The status word returned from an ER SYMB$ request. See the SYMB$ section,<br />

Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for further details on the SYMB$ status<br />

word.<br />

SW$RECBUFL<br />

The recommended buffer or table length when an invalid length is specified or when<br />

an overflow occurs.<br />

SW$IMGBLEN<br />

The length in bytes of the image written out by the WRITE procedure. For images<br />

written to SDF files or elements, the length does not include the image control word<br />

or the length of the line number records. For images written to symbiont files, the<br />

length is the number of bytes transferred by the SMB$ request.<br />

SW$IMGSEC<br />

The mass storage sector address that the SDF image was written to. This field is a<br />

full word containing the sector address in S3 to S6 and the field SW$IMGWO in S1.<br />

SW$IMGSEC is undefined if the output file type is not an SDF file or element. If a<br />

line number control record (type 053) is written with the data record, this address is<br />

the sector address of the line number control record corresponding to the data<br />

record.<br />

SW$IMGWO<br />

The word offset into the sector address (SW$IMGSEC) that the SDF image was<br />

written to. This field is contained in S1 of SW$IMGSEC. SW$IMGWO is undefined<br />

if the output file type is not an SDF file or element.<br />

7833 1733–004 18–27


SAR$ WRITE<br />

18.2.1.4. WRITE Packet Definition PROC<br />

The S$ARWPDEF PROC generates the EQUFs to define the WRITE packet. The calling<br />

program may optionally attach an X-register and a B-register to these EQUFs. This<br />

allows the calling program to allocate storage space for the WRITE packet either<br />

statically at assembly time or dynamically at execution time. The calling program may<br />

display the EQUF labels by setting the display-flag parameter on the PROC call. This<br />

PROC also generates EQUs defining the WRITE packet current version and word length<br />

at labels SW$CURVER and SW$PKTWLEN, respectively.<br />

Calling Format<br />

S$ARWPDEF x-reg,b-reg,dispflg<br />

Parameters<br />

x-reg<br />

The X-register to be attached to the WRITE packet EQUFs. If it is omitted, no<br />

X-register is attached to the EQUFs.<br />

b-reg<br />

The B-register to be attached to the WRITE packet EQUFs. If it is omitted, no<br />

B-register is attached to the EQUFs.<br />

dispflg<br />

A flag to display a table of the WRITE packet EQUFs. If it is set to 'D', the field<br />

names are displayed; otherwise, the field names are not displayed.<br />

Example<br />

$ASCII<br />

$INCLUDE ‘MAXR$’<br />

S$ARWPDEF X4,B6,‘D’<br />

The PROC call S$ARWPDEF generates EQUFs using registers X4 and B6 and displays a<br />

description of each packet field.<br />

18–28 7833 1733–004


18.2.2. MASM WRITE Procedures Buffers and Tables<br />

SAR$ WRITE<br />

All buffers and tables must be provided by the calling program. The recommended<br />

lengths for the buffers and tables are equated to labels in the S$ARWPDEF PROC.<br />

These lengths and labels are listed in Table 18–5. These definitions simplify the creation<br />

of required buffers and tables for the calling program.<br />

Table 18–5. SAR$: MASM WRITE Buffer and Table<br />

Lengths<br />

Label Value<br />

SW$OUTBUFDL (Output buffer word length) 448<br />

SW$IMGBUFDL (Image buffer word length) 63<br />

SW$TEXBUFDL (Text buffer byte length) 132<br />

SW$ATTRIBDL (Attribute table word length) 40<br />

18.2.3. WRITE Procedures Called from MASM<br />

The procedures for the WRITE function are<br />

• S$AROPENO (open output)<br />

• S$ARWRITE (write an image)<br />

• S$ARCLOSO (close output)<br />

The calling sequences for these procedures are generated by MASM PROCs, contained<br />

in the <strong>SYSLIB</strong> file (SYS$LIB$*<strong>SYSLIB</strong>) or SYS$*RLIB$.<br />

18.2.3.1. Open-Output Procedure Call (S$AROPENO)<br />

The WRITE packet and data area must be initialized before any images are written out.<br />

The S$AROPENO PROC performs the WRITE packet initialization.<br />

Initial Conditions<br />

The calling program sets the following parameters in the WRITE packet to appropriate<br />

values before calling S$AROPENO:<br />

• Required parameters (described in 18.2.1.1)<br />

SW$PKTVER<br />

SW$OUTBUFL<br />

W$FIPADDR<br />

W$IMGBUF<br />

W$OUTBUF<br />

W$IMGBUFL<br />

7833 1733–004 18–29


SAR$ WRITE<br />

• Optional parameters (described in 18.2.1.2)<br />

SW$OUTFILT<br />

SW$UNTRFLG<br />

SW$TRIMBF<br />

SW$LNUMFMT<br />

SW$SDFLBLF<br />

SW$OCHART<br />

SW$BRKPTF<br />

Note: It is recommended that the calling program zero-fill the WRITE packet before<br />

placing any parameters in the packet.<br />

Calling Format<br />

S$AROPENO wpkt<br />

error return<br />

normal return<br />

where wpkt is a label identifying the starting address of the WRITE packet and data area.<br />

Returns<br />

If S$AROPENO takes the error return, A1 contains the call status code, A2 contains the<br />

I/O status code, and A3 contains the substatus code. These status codes are also<br />

returned in the packet fields SW$CALLST, SW$IOSTAT, and T1 of SW$STATUS,<br />

respectively. See 18.2.4 for an explanation of the status codes.<br />

If S$AROPENO takes the normal return, the initialization of the WRITE packet is<br />

successful.<br />

18.2.3.2. WRITE Procedure Call (S$ARWRITE)<br />

The S$ARWRITE PROC writes images to the output file or element. Each call to<br />

S$ARWRITE writes out one image. The calling program must supply the character text<br />

of the image in the text buffer and the attributes for the text (if any) in the attribute table.<br />

S$ARWRITE combines the text and attributes into the proper format and writes out the<br />

image.<br />

Initial Conditions<br />

The calling program sets the following parameters in the WRITE packet to appropriate<br />

values before calling S$ARWRITE:<br />

• Required parameters (described in 18.2.1.1)<br />

SW$TEXBUF<br />

SW$ATTRIBL<br />

SW$TEXBUFL<br />

SW$ATTRIB<br />

18–30 7833 1733–004


• Optional parameters (described in 18.2.1.2)<br />

SW$OUTRECT<br />

SW$LNUMINT<br />

SW$LNUMF3<br />

SW$ICHART<br />

SW$LNUMF1<br />

SW$LNUMF4<br />

SW$LINESPA<br />

SW$LNUMF2<br />

Calling Format<br />

S$ARWRITE wpkt<br />

error return<br />

normal return<br />

SAR$ WRITE<br />

where wpkt is a label identifying the starting address of the WRITE packet and data area.<br />

Returns<br />

If S$ARWRITE takes the error return, A1 contains the call status code, A2 contains the<br />

I/O status code, and A3 contains the substatus code. These status codes are also<br />

returned in the packet fields SW$CALLST, SW$IOSTAT, and T1 of SW$STATUS,<br />

respectively. See 18.2.4 for an explanation of the status codes.<br />

If S$ARWRITE takes the normal return, the write was successful. The following fields of<br />

the WRITE packet contain information returned by SAR$ to the calling program:<br />

SW$IMGBLEN<br />

SW$IMGSEC<br />

SW$IMGWO<br />

These parameters are described in 18.2.1.3.<br />

Write Control Functions<br />

The calling program may perform write control functions with the S$ARWRITE<br />

procedure call. The calling program sets SW$OUTRECT to 3 (write control record),<br />

places the control image in the text buffer, and calls S$ARWRITE. See "Print Control<br />

Function," Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for details on the control images.<br />

18.2.3.3. Close-Output Procedure Call (S$ARCLOSO)<br />

The S$ARCLOSO PROC performs the necessary tasks to close the output operation.<br />

If the output type is an SDF element, the element is added to the program file table of<br />

contents.<br />

7833 1733–004 18–31


SAR$ WRITE<br />

Initial Condition<br />

The calling program may set the following optional parameter in the WRITE packet to an<br />

appropriate value before calling S$ARCLOSO:<br />

SW$ELTCDT<br />

This parameter is described in 18.2.1.2.<br />

Calling Format<br />

S$ARCLOSO wpkt<br />

error return<br />

normal return<br />

where wpkt is a label identifying the starting address of the WRITE packet and data area.<br />

Returns<br />

If S$ARCLOSO takes the error return, A1 contains the call status code, A2 contains the<br />

I/O status code, and A3 contains the substatus code. These status codes are also<br />

returned in the packet fields SW$CALLST, SW$IOSTAT, and T1 of SW$STATUS,<br />

respectively. See 18.2.4 for an explanation of the status codes.<br />

If S$ARCLOSO takes the normal return, the output is successfully closed.<br />

18.2.4. Status Lists for MASM WRITE Procedures<br />

The WRITE procedure call status codes listed in Table 18–6 may be returned to the<br />

calling program in the SW$CALLST field of the WRITE packet. These call status codes<br />

are for SW$CURVER = 2 or above.<br />

Table 18–6. SAR$: WRITE Procedure SW$CALLST Codes<br />

Octal Code Status<br />

0 Normal return from SAR$.<br />

01 An outdated WRITE packet version is being used.<br />

02 An invalid WRITE packet version is being used.<br />

03 The value for SW$IMGBUF is zero; an address must be given for the output<br />

image buffer.<br />

04 The SW$IMGBUFL is zero; a length must be given for the output image<br />

buffer.<br />

05 The value for SW$FIPADDR is zero; a file information packet must be given<br />

for this output file type.<br />

06 An invalid value is specified for SW$OUTFILT.<br />

07 An invalid value is specified for SW$LNUMFMT.<br />

010 An invalid value is specified for SW$UNTRFLG.<br />

18–32 7833 1733–004


Table 18–6. SAR$: WRITE Procedure SW$CALLST Codes<br />

Octal Code Status<br />

SAR$ WRITE<br />

011 The value for SW$OUTBUFL is too small; use the word length returned in<br />

SW$RECBUFL.<br />

012 An I/O error has occurred in a WRITE procedure. See the SW$IOSTAT field<br />

for the status code and Table 18–7.<br />

013 An invalid value is specified for SW$OUTRECT.<br />

014 An incorrect ACD subroutine version is being used with SAR$.<br />

015 The attribute table contains an index that is either zero, not in sequential<br />

order, or greater than the text length.<br />

016 The attribute table contains an invalid attribute type or an invalid value for the<br />

attribute type.<br />

017 An illegal character set type is specified in the SW$OCHART field.<br />

020 Line numbers are not allowed for this output file type.<br />

021 The WRITE packet is not initialized; a call to S$AROPENO must be made<br />

before calls to S$ARWRITE or S$ARCLOSO.<br />

022 The image buffer has overflowed; use the word length returned in<br />

SW$RECBUFL for the SW$IMGBUFL field and call S$ARWRITE again.<br />

024 An error has occurred in adding the element to the table of contents; see T1<br />

of the SW$STATUS field for the ER PFI$ status code and the Exec ER<br />

<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

026 An error has occurred in executing the symbiont file closing breakpoint; see<br />

T1 of the SW$STATUS field for the ER CSF$ status code and the Exec ER<br />

<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

027 SDF control records cannot be written to this output file type.<br />

030 Symbiont write control records cannot be written to this output file type.<br />

031 The file name buffer address in the FIP is zero; an address of an SDF file<br />

name must be specified.<br />

032 The file name buffer address in the FIP is zero; an address of a symbiont file<br />

name must be specified.<br />

033 The element name buffer address in the FIP is zero; an address of an SDF<br />

element name must be specified.<br />

034 An illegal value is specified for the file name buffer byte length in the FIP;<br />

legal values are from 1 to 12.<br />

035 An illegal value is specified for the element name buffer byte length in the<br />

FIP; legal values are from 1 to 12.<br />

036 An illegal value is specified for the version name buffer byte length in the FIP;<br />

legal values are from 1 to 12.<br />

037 The output I/O buffer address (SW$OUTBUF) is zero; this buffer must be<br />

provided when writing to an SDF file or element.<br />

7833 1733–004 18–33


SAR$ WRITE<br />

Table 18–6. SAR$: WRITE Procedure SW$CALLST Codes<br />

Octal Code Status<br />

0100 An unrecognized error has occurred in the SDFO routine. The SDFO error<br />

code is returned in the SUB_STATUS field.<br />

0101 An unrecognized error has occurred in an ACD subroutine. The ACD error<br />

code is returned in the SUB_STATUS field.<br />

0102 An unrecognized error has occurred in executing ER SYMB$. The SYMB$<br />

error code is returned in the SUB_STATUS field.<br />

0103 An incorrect SDFO packet version is being used. The correct SDFO packet<br />

version is returned in the SUB_STATUS field.<br />

0104 An incorrect ER SYMB$ packet version is being used. The correct SYMB$<br />

packet version is returned in the SUB_STATUS field.<br />

A SW$CALLST code of 0100 or greater is a SAR$ internal error.<br />

The WRITE procedure I/O status codes listed in Table 18–7 may be returned to the<br />

calling program in the SW$IOSTAT field of the WRITE packet.<br />

Table 18–7. SAR$: WRITE Procedure SW$IOSTAT Status List<br />

Octal Code Status<br />

0 Normal I/O status.<br />

01 to 040 See the Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for an explanation of the<br />

I/O status codes.<br />

18.3. WRITE Function <strong>Support</strong>ed Character Set<br />

Types<br />

Table H–1 lists 64 character set types defined for the OS 2200 system. Forty of these<br />

are referred to as ASCII-like. This means that the character set is essentially identical to<br />

the ASCII/ISO character set in the octal range 000 through 0177, with any differences<br />

being minor. Table H–1 identifies the character set types that are ASCII-like.<br />

Throughout this section, wherever ASCII or ASCII/ISO is used, the SAR$ capabilities<br />

apply equally to all ASCII-like character sets.<br />

The following character set types may be written to output files:<br />

• ASCII-like characters, including ASCII/ISO 9-bit characters and ASCII/ISO 9-bit<br />

characters with embedded shift-coded kanji<br />

• Attributed character data (ACD)<br />

18–34 7833 1733–004


18.3.1. ASCII/ISO and ASCII-like<br />

SAR$ WRITE<br />

If the text to be written out is in the ASCII/ISO character set, it is placed in the text<br />

buffer. An attribute table is not necessary; the attribute table word length is set to zero.<br />

18.3.2. ASCII/ISO with Embedded Shift-Coded Kanji<br />

If the text to be written out already contains the embedded shift-code bytes, it is placed<br />

in the text buffer. An attribute table is not necessary; the attribute table word length is<br />

set to zero.<br />

If the text to be written out is in internal format, the text part is placed in the text buffer,<br />

and the attributes are placed in the attribute table. The WRITE procedure places the<br />

shift-code bytes in the image before it is written out. Subsection 16.2 describes internal<br />

format.<br />

Multiple Block Sequence Indicator<br />

If the multiple block sequence indicator is set in the last shift code of a record, the next<br />

physical record is treated as a part of the current record. A complete record is returned<br />

with the requested attribute table.<br />

18.3.3. Attributed Character Data<br />

The text to be written out must be in internal format. The text part is placed in the text<br />

buffer, and the attributes are placed in the attribute table. The WRITE procedure<br />

constructs the ACD image and writes it out. Subsection 16.2 describes internal format.<br />

The Data Structures <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> describes the ACD format.<br />

7833 1733–004 18–35


SAR$ WRITE<br />

18–36 7833 1733–004


Section 19<br />

SAR$ ATREAD<br />

19.1. ATREAD Function/PLUS Interface<br />

The SAR$ ATREAD function writes a symbolic image to the current output stream and<br />

reads a symbolic image from the current input stream.<br />

The SAR$ ATREAD procedures can be called directly from PLUS. All SAR$ data<br />

structure definitions and procedure calls are contained in definition elements and may be<br />

obtained with the PLUS COPY statement.<br />

19.1.1. ATREAD Packet Data Structure Description<br />

The SAR$ ATREAD function requires an ATREAD packet data structure for the<br />

SAR_INITIALIZE_ATREAD and SAR_ATREAD procedure calls.<br />

The type definition for this data structure is contained in the element SAR$ATRPKTD in<br />

the <strong>SYSLIB</strong> file (SYS$LIB$*<strong>SYSLIB</strong>) or SYS$*RLIB$. It may be obtained with the COPY<br />

statement. The identifier for the ATREAD packet data structure type is<br />

SAR_ATREAD_PACKET.<br />

The calling program must provide storage space for the ATREAD packet data structure,<br />

plus any necessary buffers and tables, since SAR$ does not have any D-bank storage.<br />

The length of the ATREAD packet is equal to the constant<br />

SAR_ATREAD_PACKET_WORD_LENGTH, defined in the element SAR$ATRPKTD<br />

(current length is 29 words). SAR_ATREAD_PACKET is defined as LOCATABLE.<br />

The calling program places information in the ATREAD packet data structure and passes<br />

the address of the data structure to SAR$ through the procedure calls.<br />

7833 1733–004 19–1


SAR$ ATREAD<br />

19.1.1.1. Required Information for ATREAD Procedures<br />

The calling program must set the following fields of the ATREAD packet to appropriate<br />

values:<br />

PACKET_VERSION:<br />

PLUS Attribute: 6-bit integer<br />

The ATREAD packet data structure version. The current version is equal to the<br />

constant SAR_ATREAD_PACKET_CURRENT_VERSION defined in the element<br />

SAR$ATRPKTD.<br />

IMAGE_BUFFER_ADDRESS:<br />

PLUS Attribute: word pointer<br />

The address of the image buffer which ATREAD uses to construct images to be<br />

written out and to read input images into.<br />

IMAGE_BUFFER_WORD_LENGTH:<br />

PLUS Attribute: 18-bit integer<br />

The length in words of the image buffer.<br />

OUTPUT_TEXT_BUFFER_ADDRESS:<br />

PLUS Attribute: word pointer<br />

The address of the output text buffer into which the caller places the character text<br />

to be written out.<br />

OUTPUT_TEXT_BUFFER_BYTE_LENGTH:<br />

PLUS Attribute: 18-bit integer<br />

The length in 9-bit bytes of the character text in the text buffer.<br />

OUTPUT_ATTRIBUTE_TABLE_ADDRESS:<br />

PLUS Attribute: word pointer<br />

The address of the output attribute table into which the caller places the attributes<br />

describing the character text to be output. This field is undefined if the<br />

OUTPUT_ATTRIBUTE_TABLE_WORD_LENGTH is zero.<br />

19–2 7833 1733–004


OUTPUT_ATTRIBUTE_TABLE_WORD_LENGTH:<br />

PLUS Attribute: 18-bit integer<br />

SAR$ ATREAD<br />

The number of valid entries in the attribute table. (Each entry is one word.) A value<br />

of zero indicates there is no output attribute table.<br />

INPUT_TEXT_BUFFER_ADDRESS:<br />

PLUS Attribute: word pointer<br />

The address of the input text buffer into which ATREAD places the character text of<br />

the image read.<br />

INPUT_TEXT_BUFFER_BYTE_LENGTH:<br />

PLUS Attribute: 18-bit integer<br />

The length in 9-bit bytes of the input text buffer.<br />

INPUT_ATTRIBUTE_TABLE_ADDRESS:<br />

PLUS Attribute: word pointer<br />

The address of the input attribute table into which ATREAD places the attributes<br />

describing the character text of the image read. This field is undefined if the<br />

INPUT_ATTRIBUTE_TABLE_WORD_LENGTH is zero.<br />

INPUT_ATTRIBUTE_TABLE_WORD_LENGTH:<br />

PLUS Attribute: 18-bit integer<br />

The length in words of the input attribute table. A length of zero indicates there is no<br />

input attribute table.<br />

19.1.1.2. Optional Information for ATREAD Procedures<br />

The calling program may optionally set the following fields of the ATREAD packet. The<br />

default values are obtained by zero-filling the ATREAD packet before placing any<br />

information in the packet.<br />

OUTPUT_CHARACTER_TYPE<br />

PLUS Attribute: 6-bit status<br />

The character set type of the image to be output by ATREAD:<br />

S'ASCII_ISO' ASCII/ISO 9-bit characters (default).<br />

S'ACD' Attributed character data (ACD).<br />

A value of any ASCII-like character set type in Table H–1.<br />

7833 1733–004 19–3


SAR$ ATREAD<br />

Other character set types may not be written out by SAR$. See18.3 for details on<br />

the allowed output character set types.<br />

OUTPUT_IMAGE_LINE_SPACING<br />

PLUS Attribute: 18-bit integer<br />

The number of lines to space before writing the image (default is 1).<br />

INPUT_SELECT_LIST_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the input select list that specifies which attributes of the input image<br />

to return to the caller. This field is undefined if<br />

INPUT_SELECT_LIST_BYTE_LENGTH is zero.<br />

INPUT_SELECT_LIST_BYTE_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The length in 9-bit bytes of the input select list. A length of zero indicates there is no<br />

input select list (default).<br />

INPUT_REQUEST_TYPE<br />

PLUS Attribute: 6-bit status<br />

The requested type of input:<br />

S'Pass_embedded_KANJI'<br />

Do not search for embedded shift-coded kanji in ASCII/ISO (default).<br />

S'Translate_embedded_KANJI'<br />

Search for any embedded shift-coded kanji in ASCII/ISO input and convert it into<br />

internal format (text part and attributes part).<br />

PRINT_CONTROL_WIDTH<br />

PLUS Attribute: 18-bit integer<br />

The number of words in which to set the print line width. This value may be<br />

determined by dividing the desired number of columns by the constant<br />

SAR_PCW_CHARS_PER_WORD. This value must be set prior to calling the<br />

SAR_INITIALIZE_ATREAD routine. If this field is not set, the print line width will not<br />

be changed by the SAR_INITIALIZE_ATREAD routine (it may still be changed by the<br />

SAR_ATREAD routine if an image is encountered which is greater than the current<br />

print line width). Following the call to the SAR_INITIALIZE_ATREAD, this field is<br />

used to keep track of the current print line width; therefore, the caller should not<br />

modify this field following the SAR_INITIALIZE_ATREAD routine.<br />

19–4 7833 1733–004


19.1.1.3. Information Returned by ATREAD Procedures<br />

The following fields of the ATREAD packet contain values returned by the SAR$<br />

ATREAD procedures to the calling program:<br />

CALL_STATUS<br />

PLUS Attribute: 18-bit status<br />

SAR$ ATREAD<br />

The status of the current call to SAR_INITIALIZE_ATREAD or SAR_ATREAD. See<br />

Table 19–3 for an explanation of the ATREAD procedure call status codes. This field<br />

may also be referenced as an 18-bit logical field with label CALL_STATUS_CODE.<br />

SUB_STATUS_CODE<br />

PLUS Attribute: 6-bit logical<br />

This field contains additional information for particular CALL_STATUS codes.<br />

IO_STATUS<br />

PLUS Attribute: 6-bit status<br />

The status of any I/O operations performed by the ATREAD procedures. See<br />

Table 19–3 for the I/O status lists. This field may also be referenced as a 6-bit logical<br />

field with label IO_STATUS_CODE.<br />

ATREAD_STATUS_WORD<br />

PLUS Attribute: word logical<br />

A one-word combination of CALL_STATUS, SUB_STATUS, and IO_STATUS<br />

contained in H2, S1, and S3, respectively.<br />

SYMB_STATUS_WORD<br />

PLUS Attribute: word logical<br />

The status word returned from an ER SYMB$ request.<br />

See SYMB$, Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for further details on the ER<br />

SYMB$ status word.<br />

RECOMMENDED_BUFFER_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The recommended buffer or table length when an invalid length is specified or when<br />

an overflow occurs.<br />

7833 1733–004 19–5


SAR$ ATREAD<br />

OUTPUT_IMAGE_BYTE_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The length in bytes of the image written out by SAR_ATREAD.<br />

BYTE_LENGTH_OF_INPUT_TEXT<br />

PLUS Attribute: 18-bit integer<br />

The length in 9-bit bytes of the character text returned in the input text buffer.<br />

NUMBER_OF_INPUT_ATTRIBUTES<br />

PLUS Attribute: 18-bit integer<br />

The number of attributes returned in the input attribute table.<br />

INPUT_CHARACTER_TYPE<br />

PLUS Attribute: 6-bit status<br />

The character set type of the image read:<br />

S'ASCII_ISO' ASCII/ISO 9-bit characters<br />

S'ACD' Attributed character data (ACD)<br />

A value of any ASCII-like character set type defined in Table H–1.<br />

If a Fieldata image is read, it is translated to ASCII/ISO before being returned to the<br />

caller. See 17.3 for details on allowed input character set types.<br />

INPUT_CHARACTER_CODE<br />

PLUS Attribute: 6-bit logical<br />

The character set type of the image read:<br />

01 ASCII/ISO 9-bit characters<br />

077 Attributed character data (ACD)<br />

A value of any ASCII-like character set type defined in Table H–1.<br />

If a Fieldata image is read, it is translated to ASCII/ISO before being returned to the<br />

caller. See 17.3 for details on allowed input character set types.<br />

19–6 7833 1733–004


19.1.2. PLUS ATREAD Procedures Buffers and Tables<br />

SAR$ ATREAD<br />

All buffers and tables must be provided by the calling program. The type definitions for<br />

the buffers and tables, and definitions for the default buffer and table lengths, are<br />

contained in the element SAR$DEFN in the <strong>SYSLIB</strong> file (SYS$LIB$*<strong>SYSLIB</strong>) or<br />

SYS$*RLIB$. They may be obtained with the COPY statement. The buffers and tables<br />

for the ATREAD function are similar to the buffers and tables for the READ and WRITE<br />

functions. See 17.1.2 and 18.1.2 for details on the buffers and tables.<br />

The default buffer and table lengths are listed in Table 19–1.<br />

Table 19–1. SAR$: PLUS ATREAD Buffer and Table<br />

Length Defaults<br />

Identifier Value<br />

SAR_IO_BUFFER_WORD_LENGTH 448<br />

SAR_IMAGE_BUFFER_WORD_LENGTH 63<br />

SAR_TEXT_BUFFER_BYTE_LENGTH 132<br />

SAR_ATTRIBUTE_TABLE_WORD_LENGTH 40<br />

SAR_SELECT_LIST_BYTE_LENGTH 4<br />

The buffer and table type definitions are listed in Table 19–2.<br />

Table 19–2. SAR$: PLUS ATREAD Buffer and Table<br />

Type Definitions<br />

Identifier Type<br />

SAR_IO_BUFFER 448 words logical locatable<br />

SAR_IMAGE_BUFFER 63 words logical locatable<br />

SAR_TEXT_BUFFER 132 ASCII characters locatable<br />

SAR_ATTRIBUTE_TABLE 40 words logical locatable<br />

SAR_SELECT_LIST 4 bytes logical locatable<br />

The element SAR$DEFN also contains other definitions necessary to SAR$.<br />

7833 1733–004 19–7


SAR$ ATREAD<br />

19.1.3. ATREAD Procedures Called from PLUS<br />

The procedures for the ATREAD function are<br />

• SAR_INITIALIZE_ATREAD<br />

• SAR_ATREAD<br />

• SAR_RESTORE_ATREAD<br />

The procedure declarations for SAR_INITIALIZE_ATREAD, SAR_ATREAD, and<br />

SAR_RESTORE_ATREAD are contained in the element SAR$ATR$DG in the <strong>SYSLIB</strong> file<br />

SYS$LIB$*<strong>SYSLIB</strong>. This element may be obtained with the COPY statement.<br />

SAR$ATR$DG contains all three procedure declarations. All of the ATREAD procedure<br />

modules are compiled with the G option using the IBJ$ calling sequence.<br />

19.1.3.1. SAR_INITIALIZE_ATREAD Procedure Call<br />

The ATREAD packet data structure must be initialized before calling SAR_ATREAD. The<br />

SAR_INITIALIZE_ATREAD procedure performs the ATREAD packet initialization.<br />

Initial Conditions<br />

The calling program sets the following parameters in the ATREAD packet to appropriate<br />

values before calling SAR_INITIALIZE_ATREAD:<br />

• Required parameters (described in 19.1.1.1)<br />

PACKET_VERSION<br />

IMAGE_BUFFER_ADDRESS<br />

IMAGE_BUFFER_WORD_LENGTH<br />

• Optional parameters (described in 19.1.1.2)<br />

INPUT_SELECT_LIST_ADDRESS<br />

NPUT_SELECT_LIST_BYTE_LENGTH<br />

NPUT_REQUEST_TYPE<br />

PRINT_CONTROL_WIDTH<br />

Note: The caller should zero-fill the ATREAD packet before placing any parameters in<br />

the packet.<br />

Calling Format<br />

PROCEDURE SAR_INITIALIZE_ATREAD<br />

(ATREAD_PACKET_ADDRESS: WORD MACHINE POINTER)<br />

IMPORTED ('SAR$INATR$PG');<br />

Returns<br />

SAR_INITIALIZE_ATREAD returns the initialization status in the packet in CALL_STATUS.<br />

If the status is S'Normal', the initialization of the ATREAD packet is successful.<br />

Otherwise an error has occurred and CALL_STATUS contains the status code.<br />

See 19.1.4 for the ATREAD function status code lists.<br />

19–8 7833 1733–004


19.1.3.2. SAR_ATREAD Procedure Call<br />

SAR$ ATREAD<br />

The SAR_ATREAD procedure constructs an image from the output text and output<br />

attributes, writes the image to the current output stream, reads an image from the<br />

current input stream, and returns the character text and attributes of the image to the<br />

calling program.<br />

Initial Conditions<br />

The calling program sets the following parameters in the packet to appropriate values<br />

before calling SAR_ATREAD:<br />

• Required parameters (described in 19.1.1.1)<br />

OUTPUT_TEXT_BUFFER_ADDRESS<br />

OUTPUT_TEXT_BUFFER_BYTE_LENGTH<br />

OUTPUT_ATTRIBUTE_TABLE_ADDRESS<br />

OUTPUT_ATTRIBUTE_TABLE_WORD_LENGTH<br />

INPUT_TEXT_BUFFER_ADDRESS<br />

INPUT_TEXT_BUFFER_BYTE_LENGTH<br />

INPUT_ATTRIBUTE_TABLE_ADDRESS<br />

INPUT_ATTRIBUTE_TABLE_WORD_LENGTH<br />

• Optional parameters (described in 19.1.1.2)<br />

OUTPUT_CHARACTER_TYPE<br />

OUTPUT_IMAGE_LINE_SPACING<br />

Calling Format<br />

PROCEDURE SAR_ATREAD<br />

(ATREAD_PACKET_ADDRESS: WORD MACHINE POINTER)<br />

IMPORTED (‘SAR$ATR$PG’);<br />

Returns<br />

SAR_ATREAD returns the calling status in the ATREAD packet field CALL_STATUS.<br />

If the status is S'Normal', then the call was successful. Following is the information<br />

returned by SAR$ to the caller:<br />

• Character text<br />

The address of the character text and the length in 9-bit bytes (characters) are<br />

returned in the fields INPUT_TEXT_BUFFER_ADDRESS and<br />

BYTE_LENGTH_OF_INPUT_TEXT, respectively.<br />

• Character type<br />

The character set type of the image read is returned in the field<br />

INPUT_CHARACTER_TYPE. The octal code of the character set type is returned in<br />

the field INPUT_CHARACTER_CODE.<br />

7833 1733–004 19–9


SAR$ ATREAD<br />

• Attributes<br />

The address of the attribute table and the number of entries are returned in the<br />

fields INPUT_ATTRIBUTE_TABLE_ADDRESS and NUMBER_OF_INPUT<br />

ATTRIBUTES, respectively.<br />

SAR_ATREAD does not space-fill the input text buffer if the input character text length is<br />

less than the length of the input text buffer. If the input character text length is greater<br />

than the length of the input text buffer, then SAR_ATREAD truncates the character text<br />

and returns an error status to the calling program.<br />

If an end-of-file condition is encountered by SAR_ATREAD, the CALL_STATUS field of<br />

the ATREAD packet is set to status S'End_of_file'.<br />

If the status returned from SAR_ATREAD is not S'Normal' or S'End_of_file', then an<br />

error has occurred and CALL_STATUS contains the status code. See 19.1.4 for a list of<br />

ATREAD function status codes.<br />

Note: SAR$ may expand the line width if necessary. The line width may be reset to<br />

the print device default by calling the SAR_RESTORE_ATREAD procedure. The<br />

expansion of the line width is to allow for the additional bytes required in the ASCII/ISO<br />

with embedded shift-coded KANJI and ACD character types, and for transmitting large<br />

data records, such as a full screen of characters.<br />

19–10 7833 1733–004


19.1.4. SAR_RESTORE_ATREAD Procedure Call<br />

SAR$ ATREAD<br />

The SAR_RESTORE_ATREAD procedure restores the caller's environment, if it was<br />

changed by SAR_ATREAD. Specifically, if SAR_ATREAD changed the print line width,<br />

SAR_RESTORE_ATREAD will reset the print line width to the device default.<br />

There are no required packet parameters for the SAR_RESTORE_ATREAD call.<br />

However, SAR_RESTORE_ATREAD expects that a prior call to the<br />

SAR_INITIALIZE_ATREAD routine was made.<br />

Calling Format<br />

PROCEDURE SAR_RESTORE_ATREAD<br />

(ATREAD_PACKET_ADDRESS: WORD MACHINE POINTER)<br />

IMPORTED (‘SAR$RSATR$PG’);<br />

Returns<br />

SAR_RESTORE_ATREAD returns the calling status in the ATREAD packet field,<br />

CALL_STATUS. If the status is S'Normal', then the call was successful.<br />

If the status returned from SAR_RESTORE_ATREAD is not S'Normal', then an error has<br />

occurred, and CALL_STATUS contains the status code. See 19.1.5 for a list of ATREAD<br />

function status codes.<br />

19.1.5. Status Lists for PLUS ATREAD Procedures<br />

The ATREAD procedure call status codes listed in Table 19–3 may be returned to the<br />

calling program in the CALL_STATUS field of the ATREAD packet. These CALL_STATUS<br />

codes are for SAR_ATREAD_PACKET_CURRENT_VERSION = 1 and above. A list of all<br />

call status codes is available as ATREAD_CALL_STATUS_LIST, an 18-bit status data<br />

entity defined in the element SAR$ATRPKTD.<br />

Table 19–3. SAR$: ATREAD Procedure CALL_STATUS Codes<br />

Octal Code Status<br />

0 Normal return from the ATREAD procedure.<br />

01 End-of-file condition reached by SAR_ATREAD.<br />

02 An I/O error has occurred in an ATREAD procedure. See the<br />

IO_STATUS_CODE field for the status code.<br />

03 An outdated ATREAD packet version is being used.<br />

04 An invalid ATREAD packet version is being used.<br />

05 The ATREAD packet is not initialized; a call to SAR_INITIALIZE_ATREAD<br />

must be made before calling SAR_ATREAD.<br />

06 The value for IMAGE_BUFFER_ADDRESS is NULL; an address must be<br />

given for the input image buffer.<br />

7833 1733–004 19–11


SAR$ ATREAD<br />

Table 19–3. SAR$: ATREAD Procedure CALL_STATUS Codes<br />

Octal Code Status<br />

07 The IMAGE_BUFFER_WORD_LENGTH is zero; a length must be given for<br />

the input image buffer.<br />

010 The value for OUTPUT_TEXT_BUFFER_ADDRESS is NULL; an address must<br />

be given for the output text buffer.<br />

011 The OUTPUT_TEXT_BUFFER_BYTE_LENGTH is zero; a length must be given<br />

for the output text buffer.<br />

012 The value for INPUT_TEXT_BUFFER_ADDRESS is NULL; an address must be<br />

given for the input text buffer.<br />

013 The INPUT_TEXT_BUFFER_BYTE_LENGTH is zero; a length must be given<br />

for the input text buffer.<br />

014 An invalid value is specified for the INPUT_REQUEST_TYPE field.<br />

015 An illegal character set type is specified for the<br />

OUTPUT_CHARACTER_TYPE.<br />

016 The character set type of the input image is invalid.<br />

017 The input or output image is too long to fit in the image buffer. The image<br />

buffer word length necessary to hold the entire image is returned in the field<br />

RECOMMENDED_BUFFER_LENGTH.<br />

020 The character text is too long to fit in the input text buffer and has been<br />

truncated. The text buffer byte length necessary to hold the character text is<br />

returned in the field RECOMMENDED_BUFFER_LENGTH.<br />

021 The number of attributes is too large to fit in the input attribute table. The<br />

attribute table word length necessary to hold all the attributes is returned in<br />

the field RECOMMENDED_BUFFER_LENGTH.<br />

022 An incorrect internal format to ACD translation routine version is being used.<br />

023 An incorrect ACD to internal format translation routine version is being used.<br />

024 The output attribute table contains an index that is either zero, not in<br />

sequential order, or greater than the output text length.<br />

025 The output attribute table contains an invalid attribute type or an invalid value<br />

for an attribute type.<br />

026 The image read contains incorrectly formatted ACD or incorrectly formatted<br />

embedded shift-coded kanji.<br />

027 A partial image was read by SYMB$.<br />

0100 An unrecognized error has occurred in an ACD subroutine. The ACD error<br />

code is returned in the SUB_STATUS field.<br />

0101 An unrecognized error has occurred in executing ER SYMB$. The SYMB$<br />

error code is returned in the SUB_STATUS field.<br />

0102 An incorrect ER SYMB$ packet version is being used. The correct SYMB$<br />

packet version is returned in the SUB_STATUS field.<br />

A CALL_STATUS code of 0100 or greater is a SAR$ internal error.<br />

19–12 7833 1733–004


SAR$ ATREAD<br />

The ATREAD procedure I/O status codes listed in Table 19–4 may be returned to the<br />

caller in the IO_STATUS field of the ATREAD packet.<br />

Table 19–4. SAR$: ATREAD Procedure IO_STATUS Status List<br />

Octal Code Status<br />

0 Normal I/O status.<br />

01 to 040 See Table C–2, I/O Status Codes, Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong><br />

for an explanation of the I/O status codes.<br />

19.2. ATREAD Function/MASM Interface<br />

The SAR$ ATREAD function writes a symbolic image to the current output stream and<br />

reads a symbolic image from the current input stream.<br />

The SAR$ ATREAD procedures can be called directly from MASM. The SAR$ data<br />

structure definitions and procedure calls are defined by MASM procedures (PROCs).<br />

The element SAR$PROCS contains these PROCs.<br />

19.2.1. ATREAD Packet and Data Area Description<br />

The SAR$ READ function requires an ATREAD packet and data area for the INITIALIZE-<br />

ATREAD and ATREAD calls.<br />

The S$ARATRDEF PROC generates the EQUFs defining the ATREAD packet fields. The<br />

word length of the MASM ATREAD packet and data area is at label SA$PKTWLEN<br />

defined by the S$ARATRDEF PROC (the current length is 61 words).<br />

19.2.1.1. Required Information for ATREAD Procedures<br />

The calling program must set the following fields of the ATREAD packet to appropriate<br />

values:<br />

SA$PKTVER<br />

The ATREAD packet data structure version. The current version is equal to the label<br />

SA$CURVER defined by the S$ARATRDEF PROC.<br />

SA$IMGBUF<br />

The address of the image buffer which ATREAD uses to construct images to be<br />

written out and to read input images into.<br />

SA$IMGBUFL<br />

The length in words of the image buffer.<br />

7833 1733–004 19–13


SAR$ ATREAD<br />

SA$OTEXTB<br />

The address of the output text buffer, into which the caller places the character text<br />

to be written out.<br />

SA$OTEXTBL<br />

The length in 9-bit bytes of the character text in the text buffer.<br />

SA$OATTRT<br />

The address of the output attribute table into which the caller places the attributes<br />

describing the character text to be written out. This field is undefined if the output<br />

attribute table word length is zero.<br />

SA$OATTRTL<br />

The number of valid entries in the attribute table. (Each entry is one word.) A value<br />

of zero indicates there is no output attribute table.<br />

SA$ITEXTB<br />

The address of the input text buffer into which ATREAD places the character text of<br />

the image read.<br />

SA$ITEXTBL<br />

The length in 9-bit bytes of the input text buffer.<br />

SA$IATTRT<br />

The address of the input attribute table into which ATREAD places the attributes<br />

describing the character text of the image read. This field is undefined if the input<br />

attribute table word length is zero.<br />

SA$IATTRTL<br />

The length in words of the input attribute table. A length of zero indicates that there<br />

is no input attribute table.<br />

19.2.1.2. Optional Information for ATREAD Procedures<br />

The calling program may optionally set the following fields of the ATREAD packet.<br />

The default values are obtained by zero-filling the ATREAD packet before placing any<br />

information in the packet.<br />

19–14 7833 1733–004


SA$OCHART<br />

The character set type of the image to be output by ATREAD:<br />

SAR$ ATREAD<br />

0 ASCII/ISO 9-bit characters (default), including all ASCII-like types in Table H–1.<br />

1 Attributed character data (ACD).<br />

Other character set types may not be written out by ATREAD. See 18.3 for details<br />

on the allowed output character set types.<br />

SA$LINESPA<br />

The number of lines to space before writing out the image (default is 1).<br />

SA$ISLIST<br />

The address of the input select list that specifies which attributes of the input image<br />

to return to the caller. This field is undefined if the input select list byte length is<br />

zero.<br />

SA$ISLISTL<br />

The length in 9-bit bytes of the input select list. A length of zero indicates that there<br />

is no input select list (default).<br />

SA$REQTYPE<br />

The requested type of input:<br />

0<br />

1<br />

SA$PCW<br />

Do not search for embedded shift-coded kanji in ASCII/ISO (default)<br />

Search for any embedded shift-coded kanji in ASCII/ISO input, and convert it into<br />

internal format (text part and attributes part).<br />

The number of words to set the print line width to. This value may be determined<br />

by dividing the desired number of columns by the constant SA$PCW$CHARS. This<br />

value must be set prior to calling S$ARINITATR. If this field is not set, the print line<br />

width will not be changed by S$ARINITATR (it may still be changed by<br />

S$ARATREAD if an image is encountered which is greater than the current print line<br />

width). Following the call to S$ARINITATR, this field is used to keep track of the<br />

current print line width; therefore, the caller should not modify this field following the<br />

S$ARINITATR call.<br />

7833 1733–004 19–15


SAR$ ATREAD<br />

19.2.1.3. Information Returned by ATREAD Procedures<br />

The following fields of the ATREAD packet contain values returned by the SAR$<br />

ATREAD procedures to the calling program:<br />

SA$STATUS<br />

The ATREAD function status word; it contains the call status in H2, the substatus in<br />

S1, and the I/O status in S3.<br />

SA$CALLST<br />

The status code of the INITIALIZE-ATREAD or ATREAD procedure call. See Table<br />

19–6 for an explanation of the octal status codes.<br />

SA$SUBSTAT<br />

This field contains additional information for particular call status codes.<br />

SA$IOSTAT<br />

The status of any I/O operations performed by the ATREAD procedures. See Table<br />

19–7 for the octal status codes.<br />

SA$SYMBST<br />

The status word returned from an ER SYMB$ request. See the SYMB$ section,<br />

Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for further details on the SYMB$ status<br />

word.<br />

SA$RECBUFL<br />

The recommended buffer or table length when an invalid length is specified or when<br />

an overflow occurs.<br />

SA$OIMGLEN<br />

The length in bytes of the image written out by ATREAD.<br />

SA$TEXTLEN<br />

The length in 9-bit bytes of the character text returned in the text buffer.<br />

SA$NUMATTR<br />

The number of attributes returned in the attribute table.<br />

19–16 7833 1733–004


SA$ICHART<br />

The character set type of the image read:<br />

01 ASCII/ISO 9-bit characters<br />

077 Attributed character data (ACD)<br />

A value of any ASCII-like character set type defined in Table H–1.<br />

SAR$ ATREAD<br />

If a Fieldata image is read, it is translated to ASCII/ISO before it is returned to the<br />

caller. See 17.3 for details on allowed input character set types.<br />

19.2.1.4. ATREAD Packet Definition PROC (S$ARATRDEF)<br />

The S$ARATRDEF PROC generates the EQUFs to define the ATREAD packet. The<br />

calling program may optionally attach an X-register and a B-register to these EQUFs.<br />

This allows the calling program to allocate storage space for the ATREAD packet either<br />

statically at assembly time or dynamically at execution time. The calling program may<br />

display the EQUF labels by setting the display-flag parameter on the PROC call.<br />

This PROC also generates EQUs defining the ATREAD packet current version and word<br />

length at labels SA$CURVER and SA$PKTWLEN, respectively.<br />

Calling Format<br />

S$ARATRDEF x-reg,b-reg,dispflg<br />

Parameters<br />

x-reg<br />

b-reg<br />

dispflg<br />

The X-register to be attached to the ATREAD packet EQUFs. If it is omitted, no<br />

X-register is attached to the EQUFs.<br />

The B-register to be attached to the ATREAD packet EQUFs. If it is omitted, no<br />

B-register is attached to the EQUFs.<br />

A flag to display a table of the ATREAD packet EQUFs. If it is set to 'D', the field<br />

names are displayed; otherwise the field names are not displayed.<br />

Example<br />

$ASCII<br />

$INCLUDE ‘MAXR$’<br />

S$ARATRDEF X6,B3,‘D’<br />

The PROC call S$ARATRDEF generates EQUFs using registers X6 and B3 and displays a<br />

description of each packet field.<br />

7833 1733–004 19–17


SAR$ ATREAD<br />

19.2.1.5. ATREAD Packet Generation PROC (S$ARATRPKT)<br />

The S$ARATRPKT PROC generates an ATREAD packet, and reserves space for an image<br />

buffer, output text buffer, output attribute table, input text buffer, and input attribute<br />

table. S$ARATRPKT also calls the S$ARATRDEF PROC, which defines the ATREAD<br />

packet fields.<br />

Calling Format<br />

S$ARATRPKT x-reg,b-reg,dispflg<br />

The parameters for S$ARATRPKT are the same as for the S$ARATRDEF PROC (see<br />

19.2.1.4).<br />

Returns<br />

The S$ARATRPKT PROC places values in the following fields of the ATREAD packet:<br />

SA$PKTVER SA$IMGBUF SA$IMGBUFL<br />

SA$OTEXTB SA$OATTRT SA$ITEXTB<br />

SA$ITEXTBL SA$ATTRT SA$IATTRTL<br />

All other packet fields are set to default values. However, the calling program must still<br />

place values in the SA$OTEXTBL and SA$OATTRTL fields before calling S$ARATREAD.<br />

The generated buffers and tables use the default lengths (see Table 19–5). The<br />

following externalized labels are used to reference the buffers and tables:<br />

SAIMGBUF Image buffer<br />

SAOTEXTB Output text buffer<br />

SAOATTRT Output attribute table<br />

SAITEXTB Input text buffer<br />

SAIATTRT Input attribute table<br />

19–18 7833 1733–004


19.2.2. MASM ATREAD Procedures Buffers and Tables<br />

SAR$ ATREAD<br />

All buffers and tables must be provided by the calling program. The recommended<br />

lengths for the buffers and tables are equated to labels in the S$ARATRDEF PROC.<br />

These lengths and labels are listed in Table 19–5. The buffers and tables for the<br />

ATREAD function are similar to the buffers and tables for the READ and WRITE<br />

functions. See 17.1.2 and 18.1.2 for details on the buffers and tables.<br />

Table 19–5. SAR$: MASM ATREAD Buffer and<br />

Table Lengths<br />

Label Value<br />

SA$IMGBUFDL (Image buffer word length) 63<br />

SA$TEXBUFDL (Text buffer byte length) 132<br />

SA$ATTRIBDL (Attribute table word length) 40<br />

SA$SELLSTDL (Select list byte length) 4<br />

19.2.3. ATREAD Procedures Called from MASM<br />

The MASM procedures for the ATREAD function are<br />

• S$ARINITATR (initialize ATREAD)<br />

• S$ARATREAD (call ATREAD)<br />

• S$ARRSATR (reset ATREAD)<br />

19.2.3.1. Initialize ATREAD Procedure Call (S$ARINITATR)<br />

The ATREAD packet and data area must be initialized before any calls are made to<br />

ATREAD. The S$ARINITATR PROC performs the ATREAD packet initialization.<br />

Initial Conditions<br />

The calling program sets the following parameters in the ATREAD packet to appropriate<br />

values before calling S$ARINITATR:<br />

• Required parameters (described in 19.2.1.1)<br />

SA$PKTVER<br />

SA$IMGBUF<br />

SA$IMGBUFL<br />

7833 1733–004 19–19


SAR$ ATREAD<br />

• Optional parameters (described in 19.2.1.2)<br />

SA$ISLIST<br />

SA$ISLISTL<br />

SA$REQTYPE<br />

SA$PCW<br />

Note: It is recommended that the calling program zero-fill the ATREAD packet before<br />

placing any parameters in the packet.<br />

Calling Format<br />

S$ARINITATR atrpkt<br />

error return<br />

normal return<br />

where atrpkt is a label identifying the starting address of the ATREAD packet and data<br />

area.<br />

Returns<br />

If S$ARINITATR takes the error return, A1 contains the call status code, A2 contains the<br />

I/O status code, and A3 contains the substatus code. These status codes are also<br />

returned in the packet fields SA$CALLST, SA$IOSTAT, and SA$SUBSTAT, respectively.<br />

See 19.2.4 for an explanation of the status codes.<br />

If S$ARINITATR takes the normal return, the initialization of the ATREAD packet is<br />

successful.<br />

19.2.3.2. ATREAD Procedure Call (S$ARATREAD)<br />

The S$ARATREAD PROC constructs an image from the output text and output<br />

attributes, writes the image to the current output stream, reads an image from the<br />

current input stream, and returns the character text and attributes of the image to the<br />

calling program.<br />

Initial Conditions<br />

The calling program sets the following parameters in the ATREAD packet to appropriate<br />

values before calling S$ARATREAD:<br />

• Required parameters (described in 19.2.1.1)<br />

SA$OTEXTB<br />

SA$OATTRTL<br />

SA$IATTRT<br />

SA$OTEXTBL<br />

SA$ITEXTB<br />

SA$IATTRTL<br />

SA$OATTRT<br />

SA$ITEXTBL<br />

19–20 7833 1733–004


• Optional parameters (described in 19.2.1.2)<br />

SA$OCHART<br />

SA$LINESPA<br />

Calling Format<br />

S$ARATREAD atrpkt<br />

error return<br />

end-of-file return<br />

normal return<br />

SAR$ ATREAD<br />

where atrpkt is a label identifying the starting address of the ATREAD packet and data<br />

area.<br />

Returns<br />

error<br />

If S$ARATREAD takes the error return, A1 contains the call status code, A2 contains<br />

the I/O status code, and A3 contains the substatus code. These status codes are<br />

also returned in the packet fields SA$CALLST, SA$IOSTAT, and SA$SUBSTAT,<br />

respectively. See 19.2.4 for an explanation of the status codes.<br />

end-of-file<br />

normal<br />

If S$ARATREAD takes the end-of-file return, the ATREAD request encountered an<br />

end-of-file condition. A1 contains the call status code, A2 contains the I/O status<br />

code, and A3 contains the substatus code. These status codes are also returned in<br />

the packet fields SA$CALLST, SA$IOSTAT, and SS$SUBSTAT, respectively.<br />

If S$ARATREAD takes the normal return, the ATREAD call was successful. The<br />

following information is returned by ATREAD to the caller:<br />

• Character text<br />

The address of the character text and the length in 9-bit bytes (characters) are<br />

returned in the fields SA$ITEXTB and SA$TEXTLEN, respectively.<br />

• Character type<br />

The character set type of the image read is returned in the field SA$ICHART.<br />

• Attributes<br />

The address of the attribute table and the number of entries are returned in the<br />

fields SA$IATTRT and SA$NUMATTR, respectively.<br />

7833 1733–004 19–21


SAR$ ATREAD<br />

S$ARATREAD does not space-fill the input text buffer when the input character text<br />

length is less than the length of the input text buffer. If the input character text length is<br />

greater than the length of the input text buffer, S$ARATREAD truncates the character<br />

text and returns an error status to the calling program.<br />

Note: SAR$ may expand the line width, if necessary. The line width may be reset to<br />

the print device default by calling the S$ARRSATR (restore ATREAD) procedure. The<br />

expansion of the line width is to allow for the additional bytes required in the ASCII/ISO<br />

with embedded shift-coded KANJI and ACD character types, and for transmitting large<br />

data records, such as a full screen of characters<br />

19.2.3.3. Reset ATREAD Procedure Call (S$ARRSATR)<br />

The S$ARRSATR PROC restores the caller's environment, if it was changed by<br />

S$ARATREAD. Specifically, if S$ARATREAD changed the print line width, S$ARRSATR<br />

will reset the print line width to the device default.<br />

There are no required packet parameters for the S$ARRSATR PROC call. However,<br />

S$ARRSATR expects that a prior call to the S$ARINITATR PROC was made.<br />

Calling format<br />

S$ARRSATR atrpkt<br />

error return<br />

normal return<br />

where atrpkt is a label identifying the start address of the ATREAD packet and data area.<br />

Returns<br />

If S$ARRSATR takes the normal return, the call was successful.<br />

If S$ARRSATR takes the error return, A1 contains the call status code. This status code<br />

is also returned in the packet field SA$CALLST. See 19.2.4 for an explanation of the<br />

status codes.<br />

19–22 7833 1733–004


19.2.4. Status Lists for MASM ATREAD Procedures<br />

SAR$ ATREAD<br />

The ATREAD procedure call status codes listed in Table 19–6 may be returned to the<br />

calling program in the SA$CALLST field of the ATREAD packet. These call status codes<br />

are for SA$CURVER = 1 and above.<br />

Table 19–6. SAR$: ATREAD Procedure SA$CALLST Status Codes<br />

Octal Code Status<br />

0 Normal return from the ATREAD procedure.<br />

01 End-of-file condition reached by S$ARATREAD.<br />

02 An I/O error has occurred in an ATREAD procedure. See the SA$IOSTAT<br />

field and Table 19–7 for the status code.<br />

03 An outdated ATREAD packet version is being used.<br />

04 An invalid ATREAD packet version is being used.<br />

05 The ATREAD packet is not initialized; a call to S$ARINITATR must be made<br />

before calling S$ARATREAD.<br />

06 The value for SA$IMGBUF is zero; an address must be given for the image<br />

buffer.<br />

07 The value for SA$IMGBUFL is zero; a length must be given for the image<br />

buffer.<br />

010 The value for SA$OTEXTB is zero; an address must be given for the output<br />

text buffer.<br />

011 The value for SA$OTEXTBL is zero; a length must be given for the output<br />

text buffer.<br />

012 The value for SA$ITEXTB is zero; an address must be given for the input text<br />

buffer.<br />

013 The value for SA$ITEXTBL is zero; a length must be given for the input text<br />

buffer.<br />

014 An invalid value is specified for SA$REQTYPE.<br />

015 An illegal character set type is specified for SA$OCHART.<br />

016 The character set type of the input image is invalid.<br />

017 The input or output image is too long to fit in the image buffer. The image<br />

buffer word length necessary to hold the entire image is returned in the field<br />

SA$RECBUFL.<br />

020 The character text is too long to fit in the input text buffer and has been<br />

truncated. The text buffer byte length necessary to hold the character text is<br />

returned in the field SA$RECBUFL.<br />

021 The number of attributes is too large to fit in the input attribute table. The<br />

attribute table word length necessary to hold all the attributes is returned in<br />

the field SA$RECBUFL.<br />

022 An incorrect internal format to ACD translation routine version is being used.<br />

023 An incorrect ACD to internal format translation routine version is being used.<br />

7833 1733–004 19–23


SAR$ ATREAD<br />

Table 19–6. SAR$: ATREAD Procedure SA$CALLST Status Codes<br />

Octal Code Status<br />

024 The output attribute table contains an index that is either zero, not in<br />

sequential order, or greater than the output text length.<br />

025 The output attribute table contains an invalid attribute type or an invalid value<br />

for an attribute type.<br />

026 The image read contains incorrectly formatted ACD or incorrectly formatted<br />

embedded shift-coded kanji.<br />

027 A partial image was read by SYMB$.<br />

0100 An unrecognized error has occurred in an ACD subroutine. The ACD error<br />

code is returned in the SA$SUBSTAT field.<br />

0101 An unrecognized error has occurred in executing ER SYMB$. The SYMB$<br />

error code is returned in the SA$SUBSTAT field.<br />

0102 An incorrect ER SYMB$ packet version is being used. The correct SYMB$<br />

packet version is returned in the SA$SUBSTAT field.<br />

A SA$CALLST status code of 0100 or greater is an SAR$ internal error.<br />

The ATREAD procedure I/O status codes listed in Table 19–7 may be returned to the<br />

caller in the SA$IOSTAT field of the ATREAD packet.<br />

Table 19–7. SAR$: ATREAD Procedure SA$IOSTAT Status Codes<br />

Status code Explanation<br />

0 Normal I/O status.<br />

01 to 040 See Table C–2, I/O Status Codes, Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

19–24 7833 1733–004


Section 20<br />

SAR$ COM<br />

20.1. SAR$ COM Function/PLUS Interface<br />

The SAR$ COM function writes a symbolic image to the operator's console, and<br />

optionally reads a symbolic image from the operator's console.<br />

The SAR$ COM procedure can be called directly from PLUS. All SAR$ data structure<br />

definitions and procedure calls are contained in definition elements and are obtained with<br />

the PLUS COPY statement.<br />

20.1.1. SAR$ COM Packet Data Structure Description<br />

The SAR$ COM function requires a COM packet data structure for the SAR_COM<br />

procedure call. The type definition for this data structure is contained in the element<br />

SAR$COMPKTD in the <strong>SYSLIB</strong> file (SYS$LIB$*<strong>SYSLIB</strong>). This element may be obtained<br />

with the PLUS COPY statement. The identifier for the SAR$ COM packet data structure<br />

type is SAR_COM_PACKET.<br />

The calling program must provide storage space for the SAR$ COM packet data<br />

structure, plus any necessary buffers and tables, since SAR$ does not have any D-bank<br />

storage. The length of the SAR$ COM packet is equal to the constant<br />

SAR_COM_PACKET_WORD_LENGTH, defined in the element SAR$COMPKTD (current<br />

length is 25 words). The SAR_COM_PACKET data structure is defined as LOCATABLE.<br />

The calling program places information in the SAR$ COM packet data structure, and<br />

passes the address of the data structure to the SAR$ COM function through the<br />

procedure calls.<br />

20.1.1.1. Required Information for SAR$ COM Procedure<br />

The calling program must set the following fields of the SAR$ COM packet to<br />

appropriate values:<br />

PACKET_VERSION<br />

PLUS Attribute: 6-bit integer<br />

The SAR$ COM packet data structure version. The current version is equal to the<br />

constant SAR_COM_PACKET_CURRENT_VERSION defined in the element<br />

SAR$COMPKTD.<br />

7833 1733–004 20–1


SAR$ COM<br />

OUTPUT_TEXT_BUFFER_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the output text buffer, which contains the character text of the image<br />

that the SAR$ COM function writes out.<br />

OUTPUT_TEXT_BUFFER_BYTE_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The length in 9-bit bytes of the character text in the text buffer. This is the number<br />

of characters that the SAR$ COM function writes out.<br />

INPUT_TEXT_BUFFER_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the input text buffer, which contains the character text of the image<br />

that the SAR$ COM function reads in. This field is not necessary if<br />

INPUT_TEXT_BUFFER_BYTE_LENGTH is zero.<br />

INPUT_TEXT_BUFFER_BYTE_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The length in 9-bit bytes of the input text buffer; this is the maximum number of<br />

characters that the SAR$ COM function will read in. If this field is set to zero, no<br />

input is solicited from the operator's console.<br />

20.1.1.2. Optional Information for SAR$ COM Procedure<br />

The calling program may optionally set the following fields of the COM packet. The<br />

default values are obtained by zero-filling the COM packet before placing any information<br />

in the packet.<br />

OUTPUT_CHARACTER_TYPE<br />

PLUS Attribute: 6-bit status<br />

The character set type of the image written out by the SAR$ COM function.<br />

S'ASCII_ISO' ASCII/ISO 9-bit characters (default).<br />

S'ACD' Attributed character data (ACD)<br />

20–2 7833 1733–004


A value of any ASCII-like character set type in Table H–1.<br />

SAR$ COM<br />

Other character set types may not be written out by the SAR$ COM function. See<br />

18.3 for details on the allowed output character set types.<br />

IMAGE_BUFFER_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the image buffer; this buffer is necessary if either the output or input<br />

image character set types are ASCII/ISO with embedded shift-coded kanji or ACD.<br />

The default is no image buffer.<br />

IMAGE_BUFFER_WORD_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The length in words of the image buffer; a length must be specified if an address is<br />

given in IMAGE_BUFFER_ADDRESS. A length of zero indicates there is no image<br />

buffer (default).<br />

OUTPUT_ATTRIBUTE_TABLE_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the output attribute table which contains the attributes that describe<br />

the character text of the image that the SAR$ COM function writes out. If there are<br />

no attributes for the output image, this table is not necessary. The default is no<br />

output attribute table.<br />

OUTPUT_ATTRIBUTE_TABLE_WORD_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The number of valid entries in the attribute table. (Each entry is one word.) A value<br />

of zero indicates there is no output attribute table (default).<br />

INPUT_ATTRIBUTE_TABLE_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the input attribute table which contains the attributes that describe<br />

the character text of the image that the SAR$ COM function reads in. If the input<br />

image does not have any attributes, this table is not necessary. The default is no<br />

input attribute table.<br />

INPUT_ATTRIBUTE_TABLE_WORD_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The length in words of the input attribute table. A length of zero indicates there is<br />

no input attribute table (default).<br />

7833 1733–004 20–3


SAR$ COM<br />

INPUT_SELECT_LIST_ADDRESS<br />

PLUS Attribute: word pointer<br />

The address of the input select list that specifies which attributes of the input image<br />

to return to the caller. The default is no input select list.<br />

INPUT_SELECT_LIST_BYTE_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The length in 9-bit bytes of the input select list. A length of zero indicates there is no<br />

input select list (default).<br />

INPUT_REQUEST_TYPE<br />

PLUS Attribute: 6-bit status<br />

The request type for the input image.<br />

S'Pass_embedded_KANJI'<br />

Do not search for embedded shift-coded kanji in input images of character set<br />

type ASCII/ISO (default).<br />

S'Translate_embedded_KANJI'-<br />

Search ASCII/ISO input images for any embedded shift-coded kanji, and return<br />

the image in internal format (text part and attributes part). This request type<br />

requires an image buffer and an input attribute table.<br />

CONSOLE_CLASS<br />

PLUS Attribute: 6-bit status<br />

The console class that the ER COM$ request is directed to:<br />

S'System' System console (default).<br />

S'IO_activity' I/O activity console.<br />

S'Communications' Communications console.<br />

S'Hardware_confidence' Hardware confidence console.<br />

S'User_defined_4' Individual site-defined console for octal code 4.<br />

S'User_defined_5' Individual site-defined console for octal code 5.<br />

S'User_defined_6' Individual site-defined console for octal code 6.<br />

S'User_defined_7' Individual site-defined console for octal code 7.<br />

See the ER COM$ section, Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for further<br />

details.<br />

20–4 7833 1733–004


CONTROL_BITS<br />

PLUS Attribute: 6-bit logical<br />

SAR$ COM<br />

The caller supplied control bits for the ER COM$ request (default is zero). See the<br />

ER COM$ section, Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for further details.<br />

ADDITIONAL_CONTROL_BITS<br />

PLUS Attribute: 6-bit logical<br />

The caller supplied additional control bits for the ER COM$ request. SAR$ COM<br />

always sets bit 001 in addition to any caller supplied bits. See the ER COM$ section,<br />

Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for further details.<br />

RUN_ID_FOR_LOGGING<br />

PLUS Attribute: 8 ASCII characters<br />

The run-id to use when logging the console message. See the ER COM$ section,<br />

Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for further details.<br />

ROUTING_CONSOLE<br />

PLUS Attribute: 8 ASCII characters<br />

The console to which the message is sent. This definition is a legacy from Exec<br />

levels prior to 40R1 and is supplied for compatability only. All currently supported<br />

Exec levels use the ROUTING_INFORMATION definition, described below. See the<br />

Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for further details.<br />

ROUTING_INFORMATION<br />

PLUS Attribute: 36-bit machine logical<br />

This caller supplied routing information overlays the first 4 characters of<br />

ROUTING_CONSOLE. This field should be used when the routing information to be<br />

supplied for the ER COM$ request is either a 6-Fieldata character-site id or binary<br />

information. See the ER COM$ section of the Exec ER <strong>Programming</strong> <strong>Reference</strong><br />

<strong>Manual</strong> for further details.<br />

7833 1733–004 20–5


SAR$ COM<br />

20.1.1.3. Information Returned by SAR$ COM Procedure<br />

The following fields of the SAR$ COM packet contain values returned by the SAR$ COM<br />

procedure to the calling program:<br />

CALL_STATUS<br />

PLUS Attribute: 18-bit status<br />

The status of the current call to the SAR_COM procedure. See Table 20–3 for an<br />

explanation of the SAR$ COM procedure call status codes. This field may also be<br />

referenced as an 18-bit logical field with label CALL_STATUS_CODE.<br />

SUB_STATUS_CODE<br />

PLUS Attribute: 6-bit logical<br />

This field contains additional information for particular CALL_STATUS codes.<br />

COM_STATUS_WORD<br />

PLUS Attribute: word logical<br />

A one-word combination of CALL_STATUS and SUB_STATUS contained in H2 and<br />

S1, respectively.<br />

RECOMMENDED_BUFFER_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The recommended buffer or table length returned by the SAR$ COM function when<br />

an invalid length is specified or when an overflow occurs.<br />

OUTPUT_IMAGE_BYTE_LENGTH<br />

PLUS Attribute: 18-bit integer<br />

The length in bytes of the image written out by the SAR_COM procedure.<br />

BYTE_LENGTH_OF_INPUT_TEXT<br />

PLUS Attribute: 18-bit integer<br />

The length in 9-bit bytes of the character text read from the operator's console and<br />

returned in the input text buffer.<br />

NUMBER_OF_INPUT_ATTRIBUTES<br />

PLUS Attribute: 18-bit integer<br />

The number of attributes returned in the input attribute table.<br />

20–6 7833 1733–004


20.1.2. SAR$ PLUS COM Procedure Buffers and Tables<br />

SAR$ COM<br />

All buffers and tables must be provided by the calling program. The type definitions for<br />

the buffers and tables and the definitions for the default buffer and table lengths are<br />

contained in the element SAR$DEFN in the <strong>SYSLIB</strong> file (SYS$LIB$*<strong>SYSLIB</strong>) or<br />

SYS$*RLIB$. This element is obtained with the COPY statement. The buffers and<br />

tables for the COM function are similar to the buffers and tables for the READ and<br />

WRITE functions. See 17.1.2 and 18.1.2 for details on the buffers and tables. Note that<br />

for the COM function, the image buffer is not used if the input and output images do not<br />

have character attributes.<br />

The default buffer and table lengths are listed in Table 20–1.<br />

Table 20–1. SAR$: PLUS COM Buffer and Table Length<br />

Defaults<br />

Identifier Value<br />

SAR_IMAGE_BUFFER_WORD_LENGTH 63<br />

SAR_TEXT_BUFFER_BYTE_LENGTH 132<br />

SAR_ATTRIBUTE_TABLE_WORD_LENGTH 40<br />

SAR_SELECT_LIST_BYTE_LENGTH 4<br />

The buffer and table type definitions are listed in Table 20–2.<br />

Table 20–2. SAR$: PLUS COM Buffer and Table Type Definitions<br />

Identifier Type<br />

SAR_IMAGE_BUFFER 63 words logical locatable<br />

SAR_TEXT_BUFFER 132 ASCII characters locatable<br />

SAR_ATTRIBUTE_TABLE 40 words logical locatable<br />

SAR_SELECT_LIST 4 bytes logical locatable<br />

The element SAR$DEFN also contains other definitions necessary to SAR$.<br />

7833 1733–004 20–7


SAR$ COM<br />

20.1.3. SAR$ COM Procedure Called from PLUS<br />

The SAR$ COM function writes a symbolic image to the operator's console and<br />

optionally reads a symbolic image from the operator's console.<br />

The calling procedure for the COM function is SAR_COM.<br />

The procedure declaration for SAR_COM is contained in the element SAR$COM$DG, in<br />

the <strong>SYSLIB</strong> file (SYS$LIB$*<strong>SYSLIB</strong>) or SYS$*RLIB$. This element is obtained with the<br />

COPY statement. The module containing the SAR_COM procedure uses the PLSSTACK<br />

and is compiled with the G option using the IBJ$ calling sequence.<br />

SAR_COM Procedure Call<br />

The SAR_COM procedure constructs an image from the output text and output<br />

attributes, writes the image to the operator's console, reads an image from the<br />

operator's console, and returns the character text and attributes of the image to the<br />

caller.<br />

Initial Conditions<br />

The calling program sets the following parameters in the packet to appropriate values<br />

before calling SAR_COM:<br />

• Required parameters (described in 20.1.1.1)<br />

PACKET_VERSION<br />

OUTPUT_TEXT_BUFFER_ADDRESS<br />

OUTPUT_TEXT_BUFFER_BYTE_LENGTH<br />

INPUT_TEXT_BUFFER_ADDRESS<br />

INPUT_TEXT_BUFFER_BYTE_LENGTH<br />

• Optional parameters (described in 20.1.1.2)<br />

OUTPUT_CHARACTER_TYPE<br />

INPUT_REQUEST_TYPE<br />

IMAGE_BUFFER_ADDRESS<br />

IMAGE_BUFFER_WORD_LENGTH<br />

OUTPUT_ATTRIBUTE_TABLE_ADDRESS<br />

OUTPUT_ATTRIBUTE_TABLE_WORD_LENGTH<br />

INPUT_ATTRIBUTE_TABLE_ADDRESS<br />

INPUT_ATTRIBUTE_TABLE_WORD_LENGTH<br />

INPUT_SELECT_LIST_ADDRESS<br />

INPUT_SELECT_LIST_BYTE_LENGTH<br />

CONSOLE_CLASS<br />

CONTROL_BITS<br />

ADDITIONAL_CONTROL_BITS<br />

RUN_ID_FOR_LOGGING<br />

ROUTING_CONSOLE<br />

ROUTING_INFORMATION<br />

20–8 7833 1733–004


Calling Format<br />

PROCEDURE SAR_COM(COM_PACKET_ADDRESS: WORD MACHINE POINTER)<br />

IMPORTED (‘SAR$COM$PG’);<br />

SAR$ COM<br />

Returns<br />

SAR_COM returns the calling status in the COM packet field CALL_STATUS. If the<br />

status is S'Normal', then the call was successful. The following information is returned<br />

by SAR$ to the calling program:<br />

• Character text<br />

If operator input was solicited, the address of the character text and the length in<br />

9-bit bytes (characters) are returned in the fields INPUT_TEXT_BUFFER_ADDRESS<br />

and BYTE_LENGTH_OF_INPUT_TEXT, respectively. The character set type of the<br />

image read is the same as the output image character set type.<br />

• Attributes<br />

If operator input was solicited, the address of the input attribute table and the<br />

number of entries are returned in the fields INPUT_ATTRIBUTE_TABLE_ADDRESS<br />

and NUMBER_OF_INPUT ATTRIBUTES, respectively.<br />

If the status returned from SAR_COM is not S'Normal' or S'End_of_file', then an error<br />

has occurred and CALL_STATUS contains the status code. See 20.1.4 for a list of COM<br />

function status codes.<br />

20.1.4. Status Lists for PLUS COM Procedure<br />

The COM procedure call status codes listed in Table 20–3 may be returned to the calling<br />

program in the CALL_STATUS field of the COM packet. These CALL_STATUS codes are<br />

for SAR_COM_PACKET_CURRENT_VERSION = 1 and above. A list of all call status<br />

codes is available as COM_CALL_STATUS_LIST, an 18-bit status data entity defined in<br />

the element SAR$COMPKTD.<br />

Table 20–3. SAR$: COM Procedure CALL_STATUS Codes<br />

Octal Code Status<br />

0 Normal return from the SAR$ COM procedure.<br />

01 An outdated SAR$ COM packet version is being used.<br />

02 An invalid SAR$ COM packet version is being used.<br />

03 The value for IMAGE_BUFFER_ADDRESS is NULL; an address must be<br />

given for the input image buffer.<br />

04 The IMAGE_BUFFER_WORD_LENGTH is zero; a length must be given for<br />

the input image buffer.<br />

05 An invalid value is specified for the INPUT_REQUEST_TYPE field.<br />

7833 1733–004 20–9


SAR$ COM<br />

Table 20–3. SAR$: COM Procedure CALL_STATUS Codes<br />

Octal Code Status<br />

06 An illegal character set type is specified for the<br />

OUTPUT_CHARACTER_TYPE.<br />

07 An illegal value is specified for the OUTPUT_TEXT_BUFFER_ADDRESS.<br />

010 The OUTPUT_TEXT_BUFFER_BYTE_LENGTH is zero; a length must be given<br />

for the output text buffer.<br />

011 An illegal value is specified for INPUT_TEXT_BUFFER_ADDRESS.<br />

012 There are no valid characters in the output image.<br />

013 The input or output image is too long to fit in the image buffer. The image<br />

buffer word length necessary to hold the entire image is returned in the field<br />

RECOMMENDED_BUFFER_LENGTH.<br />

014 The character text is too long to fit in the input text buffer and has been<br />

truncated. The text buffer byte length necessary to hold the character text is<br />

returned in the field RECOMMENDED_BUFFER_LENGTH.<br />

015 The number of attributes is too large to fit in the input attribute table. The<br />

attribute table word length necessary to hold all the attributes is returned in<br />

the field RECOMMENDED_BUFFER_LENGTH.<br />

016 An incorrect internal format to ACD translation routine version is being used.<br />

017 An incorrect ACD to internal format translation routine version is being used.<br />

020 The output attribute table contains an index that is either zero, not in<br />

sequential order, or greater than the output text length.<br />

021 The output attribute table contains an invalid attribute type or an invalid value<br />

for an attribute type.<br />

022 The image read contains incorrectly formatted ACD or incorrectly formatted<br />

embedded shift-coded kanji.<br />

023 The caller has illegally set a secured control bit in the CONTROL_BITS field.<br />

024 The current Exec level does not allow ACD to be output or input with ER<br />

COM$.<br />

0100 An unrecognized error has occurred in an ACD subroutine. The ACD error<br />

code is returned in the SUB_STATUS field.<br />

0101 An unrecognized error has occurred in executing ER COM$. The COM$<br />

error code is returned in the SUB_STATUS field.<br />

A CALL_STATUS code of 0100 or greater is a SAR$ internal error.<br />

20–10 7833 1733–004


20.2. SAR$ COM Function/MASM Interface<br />

The SAR$ COM function writes a symbolic image to the operator's console and<br />

optionally reads a symbolic image from the operator's console.<br />

SAR$ COM<br />

The SAR$ COM procedure is callable directly from MASM. The SAR$ data structure<br />

definitions and procedure calls are defined by MASM procedures (PROCs). The element<br />

SAR$PROCS contains these PROCs.<br />

20.2.1. SAR$ COM Packet and Data Area Description<br />

The SAR$ COM function requires a SAR$ COM packet and data area for the COM<br />

procedure call. The S$ARCOMDEF PROC generates the EQUFs defining the COM<br />

packet fields. The word length of the SAR$ MASM COM packet and data area is at label<br />

SC$PKTWLEN defined by the S$ARCOMDEF PROC (the current length is 57 words).<br />

20.2.1.1. Required Information for SAR$ COM Procedure<br />

The calling program must set the following fields of the COM packet to appropriate<br />

values:<br />

SC$PKTVER<br />

The SAR$ COM packet data structure version. The current version is equal to the<br />

label SC$CURVER defined by the S$ARCOMDEF PROC.<br />

SC$OTEXTB<br />

The address of the output text buffer which contains the character text of the image<br />

that the SAR$ COM function writes out.<br />

SC$OTEXTBL<br />

The length in 9-bit bytes of the character text in the text buffer. This is the number<br />

of characters that the SAR$ COM function writes out.<br />

SC$ITEXTB<br />

The address of the input text buffer which contains the character text of the image<br />

that the SAR$ COM function reads in. This field is not necessary if SC$ITEXTBL is<br />

set to zero.<br />

SC$ITEXTBL<br />

The length in 9-bit bytes of the input text buffer; this is the maximum number of<br />

characters that the SAR$ COM function will read in. If this field is set to zero, no<br />

input is solicited from the operator's console.<br />

7833 1733–004 20–11


SAR$ COM<br />

20.2.1.2. Optional Information for SAR$ COM Procedure<br />

The calling program may optionally set the following fields of the COM packet. The<br />

default values are obtained by zero-filling the SAR$ COM packet before placing any<br />

information in the packet.<br />

SC$OCHART<br />

The character set type of the image written out by the SAR$ COM function:<br />

0 ASCII/ISO 9-bit characters (default), including all ASCII-like types in Table H–1.<br />

1 Attributed character data (ACD).<br />

Other character set types may not be written out by the SAR$ COM. See 18.3 for<br />

details on the allowed output character set types.<br />

SC$IMGBUF<br />

The address of the image buffer; this buffer is necessary if either the output or input<br />

character set types are ASCII/ISO with embedded shift-coded kanji or ACD. The<br />

default is no image buffer.<br />

SC$IMGBUFL<br />

The length in words of the image buffer; a length must be specified if an address is<br />

given in SC$IMGBUF. A length of zero indicates there is no image buffer (default).<br />

SC$OATTRT<br />

The address of the output attribute table, which contains the attributes that describe<br />

the character text of the image that the SAR$ COM function writes out. If there are<br />

no attributes for the output image, this table is not necessary. The default is no<br />

output attribute table.<br />

SC$OATTRTL<br />

The number of valid entries in the attribute table. (Each entry is one word.) A value<br />

of zero indicates that there is no output attribute table (default).<br />

SC$IATTRT<br />

The address of the input attribute table, which contains the attributes that describe<br />

the character text of the image that the SAR$ COM function reads in. If the input<br />

image does not have any attributes, this table is not necessary. The default is no<br />

input attribute table.<br />

SC$IATTRTL<br />

The length in words of the input attribute table. A length of zero indicates that there<br />

is no input attribute table (default).<br />

20–12 7833 1733–004


SC$ISLIST<br />

SAR$ COM<br />

The address of the input select list that specifies which attributes of the input image<br />

to return to the caller. The default is no input select list.<br />

SC$ISLISTL<br />

The length in 9-bit bytes of the input select list. A length of zero indicates that there<br />

is no input select list (default).<br />

SC$REQTYPE<br />

The request type for the input image:<br />

0<br />

1<br />

SC$CONSCLA<br />

Do not search for embedded shift-coded kanji in input images of character set<br />

type ASCII/ISO (default).<br />

Search ASCII/ISO input images for any embedded shift-coded kanji, and return<br />

the image in internal format (text part and attributes part). This request type<br />

requires an image buffer and an input attribute table.<br />

The console class that the ER COM$ request is directed to:<br />

0 System console (default).<br />

1 I/O activity console.<br />

2 Communications console.<br />

3 Hardware confidence console.<br />

4, 5, 6, 7 Individual site-defined consoles for octal codes 4 to 7.<br />

See the ER COM$ section, Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for further<br />

details.<br />

SC$CNTLB<br />

The caller-supplied control bits for the ER COM$ request (default is zero). See the<br />

ER COM$ section, Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for further details.<br />

SC$ACNTLB<br />

The caller-supplied additional control bits for the ER COM$ request. SAR$ COM<br />

always sets bit 01 in addition to any caller supplied bits. See the ER COM$ section,<br />

Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for further details.<br />

7833 1733–004 20–13


SAR$ COM<br />

SC$RUNIDW1<br />

The first four ASCII characters of the run-id to use when logging the console<br />

message. See the ER COM$ section, Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for<br />

further details.<br />

SC$RUNIDW2<br />

The second four ASCII characters of the run-id.<br />

SC$ROUTW1<br />

Routing information on the console to which the message is to be sent. The word<br />

may be a 6-Fieldata character-site id or may be binary information returned by<br />

ER KEYIN$. See the ER COM$ section, Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong><br />

for further details.<br />

SC$ROUTW2<br />

A second word of routing information. This definition is a legacy from Exec levels<br />

prior to 40R1 and is supplied for compatibility only. All currently supported Exec<br />

levels use one word for routing information, the previously described SC$ROUTW1.<br />

20.2.1.3. Information Returned by COM Procedure<br />

The following fields of the SAR$ COM packet contain values returned by the SAR$ COM<br />

procedure to the calling program:<br />

SC$STATUS<br />

The COM function status word; it contains the call status in H2 and the substatus in<br />

S1.<br />

SC$CALLST<br />

The status code of the current COM procedure call. See Table 20–5 for an<br />

explanation of the octal status codes.<br />

SC$SUBSTAT<br />

This field contains additional information for particular call status codes.<br />

SC$RECBUFL<br />

The recommended buffer or table length returned by the SAR$ COM procedure<br />

when an invalid length is specified or when an overflow occurs.<br />

20–14 7833 1733–004


SC$OIMGLEN<br />

The length in bytes of the image written out by the SAR$ COM procedure.<br />

SC$TEXTLEN<br />

SAR$ COM<br />

The length in 9-bit bytes of the character text read from the operator's console and<br />

returned in the input text buffer.<br />

SC$NUMATTR<br />

The number of attributes returned in the input attribute table.<br />

20.2.1.4. COM Packet Definition PROC (S$ARCOMDEF)<br />

The MASM PROC S$ARCOMDEF generates EQUFs that define the SAR$ COM packet.<br />

The calling program may optionally attach an X-register and a B-register to these EQUFs.<br />

This allows the calling program to allocate storage space for the COM packet either<br />

statically at assembly time or dynamically at execution time.<br />

The calling program may display the EQUF labels by setting a display-flag parameter on<br />

the PROC call. This PROC also generates EQUs defining the COM packet current<br />

version and word length at the labels SC$CURVER and SA$PKTWLEN, respectively.<br />

Calling Format<br />

S$ARCOMDEF x-reg,b-reg,dispflg<br />

Parameters<br />

x-reg<br />

b-reg<br />

dispflg<br />

The X-register that is attached to the COM packet EQUFs. If it is omitted, no<br />

X-register is attached to the EQUFs.<br />

The B-register that is attached to the COM packet EQUFs. If it is omitted, no<br />

B-register is attached to the EQUFs.<br />

A flag that displays a table of the COM packet EQUFs. If it is set to 'D', the field<br />

names are displayed; otherwise the field names are not displayed.<br />

7833 1733–004 20–15


SAR$ COM<br />

Example<br />

$ASCII<br />

$INCLUDE ‘MAXR$’<br />

S$ARCOMDEF X6,B3,‘D’<br />

The PROC call S$ARCOMDEF generates EQUFs using registers X6 and B3 and displays<br />

a description of each packet field.<br />

20.2.1.5. SAR$ COM Packet Generation PROC (S$ARCOMPKT)<br />

The PROC S$ARCOMPKT generates a COM packet and reserves space for an image<br />

buffer, output text buffer, output attribute table, input text buffer, and input attribute<br />

table. S$ARCOMPKT also calls the S$ARCOMDEF PROC, defining the COM packet<br />

fields.<br />

Calling Format<br />

S$ARCOMPKT x-reg,b-reg,dispflg<br />

The parameters for S$ARCOMPKT are the same as for the S$ARCOMDEF PROC<br />

(see 20.2.1.4).<br />

Returns<br />

The S$ARCOMPKT PROC places values in the following fields of the COM packet:<br />

SA$PKTVER SA$IMGBUF SA$IMGBUFL<br />

SA$OTEXTBL SA$OATTRT SA$ITEXTB<br />

SA$ITEXTB SA$ATTRT SA$IATTRTL<br />

All other packet fields are set to default values.<br />

The generated buffers and tables use the default lengths (see Table 20–4). The<br />

following externalized labels are used to reference the buffers and tables:<br />

SCIMGBUF Image buffer<br />

SCOTEXTB Output text buffer<br />

SCOATTRT Output attribute table<br />

SCITEXTB Input text buffer<br />

SCIATTRT Input attribute table<br />

20–16 7833 1733–004


20.2.2. MASM SAR$ COM Procedure Buffers and Tables<br />

SAR$ COM<br />

All buffers and tables must be provided by the calling program. The buffers and tables<br />

for the COM function are similar to the buffers and tables for the READ and WRITE<br />

functions. See 17.1.2 and 18.1.2 for details on the buffers and tables. Note that for the<br />

COM function, the image buffer is not used if the input and output images do not have<br />

character attributes. The recommended lengths for the buffers and tables are equated<br />

to labels in the S$ARCOMDEF PROC. These lengths and labels are listed in Table 20–4.<br />

Table 20–4. SAR$: MASM COM Buffer and Table Lengths<br />

Label Value<br />

SC$IMGBUFDL (Image buffer word length) 25<br />

SC$TEXBUFDL (Text buffer byte length) 80<br />

SC$ATTRIBDL (Attribute table word length) 10<br />

SC$SELLSTDL (Select list byte length) 4<br />

20.2.3. SAR$ MASM COM Procedure Call (S$ARCOM)<br />

The MASM procedure for the SAR$ COM function is S$ARCOM. The S$ARCOM PROC<br />

constructs an image from the output text and output attributes and writes the image to<br />

the operator's console. If input is solicited from the operator, an image is read from the<br />

console, and the character text and attributes of the image are returned to the caller.<br />

Initial Conditions<br />

The calling program sets the following parameters in the COM packet to appropriate<br />

values before calling the S$ARCOM PROC:<br />

• Required parameters (described in 20.2.1.1)<br />

SC$PKTVER<br />

SC$ITEXTB<br />

SC$OTEXTB<br />

SC$ITEXTBL<br />

SC$OTEXTBL<br />

7833 1733–004 20–17


SAR$ COM<br />

• Optional parameters (described in 20.2.1.2)<br />

SC$OCHART<br />

SC$OATTRT<br />

SC$IATTRTL<br />

SC$REQTYPE<br />

SC$RUNIDW1<br />

SC$ROUTW2<br />

SC$IMGBUF<br />

SC$OATTRTL<br />

SC$ISLIST<br />

SC$CONSCLA<br />

SC$RUNIDW2<br />

SC$IMGBUFL<br />

SC$IATTRT<br />

SC$ISLISTL<br />

SC$CNTLB<br />

SC$ACNTLB<br />

SC$ROUTW1<br />

Calling Format<br />

S$ARCOM compkt<br />

error return<br />

normal return<br />

Returns<br />

If S$ARCOM takes the error return, A1 contains the call status code and A3 contains<br />

the substatus code. These status codes are also returned in the packet fields<br />

SC$CALLST and SC$SUBSTAT, respectively. See 20.2.4 for an explanation of the<br />

status codes.<br />

If S$ARCOM takes the normal return, the COM call is successful. The following<br />

information is returned by COM to the caller:<br />

• Character text<br />

The address of the character text and the length in 9-bit bytes (characters) are<br />

returned in the fields SC$ITEXTB and SC$TEXTLEN, respectively. The character<br />

set type of the image read is the same as the output character set type.<br />

• Attributes<br />

The address of the attribute table and the number of entries are returned in the<br />

fields SC$IATTRT and SC$NUMATTR, respectively.<br />

20–18 7833 1733–004


20.2.4. Status Lists for the MASM COM Procedure<br />

SAR$ COM<br />

The SAR$ COM procedure call status codes listed in Table 20–5 may be returned to the<br />

calling program in the SC$CALLST field of the COM packet. These call status codes are<br />

for SC$CURVER = 1 and above.<br />

Table 20–5. SAR$: COM Procedure SC$CALLST Status Codes<br />

Octal Code Status<br />

0 Normal return from the SAR$ COM procedure.<br />

01 An outdated SAR$ COM packet version is being used.<br />

02 An invalid SAR$ COM packet version is being used.<br />

03 The value for SC$IMGBUF is zero; an address must be given for the<br />

image buffer.<br />

04 The value for SC$IMGBUFL is zero; a length must be given for the<br />

image buffer.<br />

05 An invalid value is specified for SC$REQTYPE.<br />

06 An illegal character set type is specified for SC$OCHART.<br />

07 An illegal address is specified for SC$OTEXTB.<br />

010 The value for SC$OTEXTBL is zero; a length must be given for the<br />

output text buffer.<br />

011 An illegal address is specified for SC$ITEXTB.<br />

012 There are no valid characters in the output image.<br />

013 The input or output image is too long to fit in the image buffer. The<br />

image buffer word length necessary to hold the entire image is<br />

returned in the field SC$RECBUFL.<br />

014 The character text is too long to fit in the input text buffer and has<br />

been truncated. The text buffer byte length necessary to hold the<br />

character text is returned in the field SC$RECBUFL.<br />

015 The number of attributes is too large to fit in the input attribute<br />

table. The attribute table word length necessary to hold all the<br />

attributes is returned in the field SC$RECBUFL.<br />

016 An incorrect internal format to ACD translation routine version is<br />

being used.<br />

017 An incorrect ACD to internal format translation routine version is<br />

being used.<br />

020 The output attribute table contains an index that is either zero, not<br />

in sequential order, or greater than the output text length.<br />

021 The output attribute table contains an invalid attribute type or an<br />

invalid value for an attribute type.<br />

022 The image read contains incorrectly formatted ACD or incorrectly<br />

formatted embedded shift-coded kanji.<br />

7833 1733–004 20–19


SAR$ COM<br />

Table 20–5. SAR$: COM Procedure SC$CALLST Status Codes<br />

Octal Code Status<br />

023 The caller has illegally set a secured control bit in the SC$CNTLB<br />

field.<br />

024 The current Exec level does not allow ACD to be output or input<br />

with ER COM$.<br />

0100 An unrecognized error has occurred in an ACD subroutine. The<br />

ACD error code is returned in the SC$SUBSTAT field.<br />

0101 An unrecognized error has occurred in executing ER COM$. The<br />

COM$ error code is returned in the SC$SUBSTAT field.<br />

A SC$CALLST status code of 0100 or greater is a SAR$ internal error.<br />

20–20 7833 1733–004


Section 21<br />

SDFI, SDFO–System Data Format I/O<br />

Routines<br />

The System Data Format Input (SDFI) routine and the System Data Format Output<br />

(SDFO) routine are two independent routines that process files or elements that are in<br />

system data format (SDF).<br />

The SDFI routine reads SDF images from the input file or element and returns the<br />

images one at a time to the calling program. The SDFO routine takes SDF images one at<br />

a time from the calling program and writes the images to the output file or element.<br />

The SDFI and SDFO routines each require the following data structures:<br />

• A packet or file control table (FCT)<br />

• An image buffer<br />

• One or two I/O buffers<br />

An 11-word packet is used to pass information to and from SDFI and SDFO. The packet<br />

format for SDFI is described in 21.1.1. The packet format for SDFO is described in<br />

21.2.1.<br />

The image buffer is either the data area that SDFI reads the next image into or the data<br />

area containing the image that SDFO writes out.<br />

The I/O buffers are used by SDFI and SDFO to access the file or element. The I/O buffer<br />

length must be a multiple of 28 words (one sector). If there are two I/O buffers, they<br />

must be of equal length. Because the physical record size on disks is most frequently<br />

four sectors (112 words), SDFI and SDFO execute most efficiently when their buffer<br />

lengths are a multiple of 112 words. If the buffer length is larger than but not a multiple<br />

of 112 words, the excess length (28, 56, or 84 words) is not used in I/O operations<br />

unless the I/O device is a tape drive.<br />

If the file accessed by SDFI or SDFO is on tape, the buffer length should be the length of<br />

the tape block. The standard tape block length is 224 words. SDFI and SDFO can<br />

handle multireel tape files correctly. SDFI and SDFO send a message to the print device<br />

each time an input or output tape reel is swapped.<br />

SDFI and SDFO assume that the file being accessed is assigned to the run before SDFI<br />

and SDFO are called.<br />

7833 1733–004 21–1


SDFI, SDFO–System Data Format I/O Routines<br />

The SDFI and SDFO routines are available as relocatable elements and also in the<br />

<strong>SYSLIB</strong> common banks. SDFI is in the common bank absolute <strong>SYSLIB</strong>$3, and SDFO is<br />

in the common bank absolute <strong>SYSLIB</strong>$4. Both routines are reentrant. The relocatable<br />

and common bank entry points for SDFI and SDFO are listed in Appendix E.<br />

The following compatibility considerations apply to FURPUR and Processor Common<br />

Input/Output System (PCIOS):<br />

• SDFI and SDFO are fully compatible with FURPUR level 28R3 and higher levels.<br />

• SDFI and SDFO are compatible with PCIOS levels 4R1 and 4R1A, except for the<br />

handling of multireel tape files:<br />

− When SDFI reads multireel tape files created by PCIOS, I/O error 01 (unlabeled<br />

tape) or TLBL$ error 013 (labeled tape) occurs.<br />

− When PCIOS reads multireel tape files created by SDFO, unlabeled tapes are<br />

read correctly, but labeled tapes encounter I/O error 01.<br />

• SDFI returns segmented PCIOS records one segment at a time. The caller must<br />

examine the segment flag in the PCIOS data record control word to determine how<br />

the data record is segmented.<br />

A description of each routine and its corresponding packet is in the following<br />

subsections.<br />

For details on system data format, see the Data Structures <strong>Programming</strong> <strong>Reference</strong><br />

<strong>Manual</strong>.<br />

21.1. SDFI–System Data Format Input Routine<br />

The SDFI routine returns one SDF image at a time from an SDF file or element. SDFI<br />

has the following functions and entry points:<br />

• Open SDFI (SDFIO$, SDFIOA$)<br />

• Read an image (SDFI$, SDFINT$)<br />

• Close SDFI (SDFIC$)<br />

The calling program must open SDFI before reading images from the file or element and<br />

close SDFI after all images are read.<br />

The packet (or FCT) for SDFI is described in 21.1.1. The open, read, and close functions<br />

of SDFI are described in 21.1.2.1, 21.1.2.2, and 21.1.2.3, respectively.<br />

21.1.1. Packet<br />

The calling program must provide an 11-word packet for SDFI. The SDFI packet format<br />

is described in Figure 21–1. The packet may be generated with the S$DFCT procedure<br />

described in 21.1.1.2.<br />

21–2 7833 1733–004


SDFI, SDFO–System Data Format I/O Routines<br />

The same 11-word packet should not be used for both SDFI and SDFO.<br />

21.1.1.1. Packet Format<br />

The calling program must provide the eleven-word packet and place appropriate<br />

information in all fields with names in italics.<br />

0 internal filename<br />

1<br />

2 zero<br />

3 zero 020 reserved zero<br />

4 buffer length (words) single buffer address<br />

5 Relative Mass Storage Address (Sector)<br />

6 address of buffer number 1 address of buffer number 2<br />

7 buffer length (sectors) length of image area<br />

8 zero (used by SDFI) image area location<br />

9 zero (used by SDFI) image location in buffer (filled)<br />

10 SDF Control Word (filled)<br />

Packet Fields<br />

Words 0,1<br />

Figure 21–1. SDFI: Packet Format<br />

The 12-character Fieldata internal file name.<br />

Word 3 (S2)<br />

The I/O read function, R$ or 020.<br />

Word 4 (H1)<br />

The length in words of the I/O buffer used by SDFI.<br />

Word 4 (H2)<br />

The address of the I/O buffer if using one buffer.<br />

Word 5<br />

The mass storage sector address of the first SDF image to be read.<br />

7833 1733–004 21–3


SDFI, SDFO–System Data Format I/O Routines<br />

Word 6<br />

The addresses of the I/O buffers when two buffers are used. If only one buffer is<br />

used, this word must be zero, and the address of the single buffer must be put in<br />

word 4.<br />

Word 7 (H1)<br />

The length in sectors of the I/O buffers used by SDFI.<br />

Word 7 (H2)<br />

The length in words of the image buffer into which SDFI transfers the individual SDF<br />

images.<br />

Word 8 (H2)<br />

The address of the image buffer into which SDFI transfers the individual images.<br />

Word 9 (H2)<br />

The location in the I/O buffer of the next SDF image to be read (filled by SDFI).<br />

Word 10<br />

The SDF control word of the image read (filled by SDFI).<br />

SDFI may use one or two buffers. If SDFI uses one I/O buffer, that buffer address is<br />

stored in H2 of word 4. Word 6 must be set to zero. If SDFI uses two I/O buffers, the<br />

buffer addresses are placed in H1 and H2 of word 6. Words 0 through 5 are the<br />

standard I/O packet used by Executive Requests.<br />

21.1.1.2. Packet Generation PROC<br />

S$DFCT is a MASM procedure that generates the SDFI packet (or FCT). S$DFCT<br />

defines the fields of the packet, initializes the packet, and displays a diagram of the<br />

packet.<br />

The MASM definition element SDFP$ contains the S$DFCT procedure. This element<br />

must be included in the calling program in order to use the S$DFCT procedure. It is<br />

included by using the following MASM directive:<br />

$INCLUDE ‘SDFP$’<br />

21–4 7833 1733–004


SDFI, SDFO–System Data Format I/O Routines<br />

S$DFCT Calling Sequence<br />

There are two calling sequences for the S$DFCT procedure. The first call is used if the<br />

G-option is specified. The second call is used if the G-option is not specified.<br />

• Call 1 (G-option specified)<br />

label S$DFCT,o ifn,f,msa blw,buf1,buf2;<br />

ialng,ialoc w,x,l<br />

This call generates the packet definitions, initializes the packet, and displays the<br />

packet in the calling programs assembly.<br />

• Call 2 (G-option not specified)<br />

label S$DFCT,o w,x,l<br />

This call generates the packet definitions and displays the packet, but it does not<br />

initialize the packet.<br />

Parameters<br />

label<br />

o<br />

Prefix for field names (see L-option)<br />

Options (in quotes)<br />

D<br />

G<br />

L<br />

N<br />

S<br />

Display the packet diagram, including user-defined names.<br />

Generate packet from parameters on Call 1.<br />

Generate dynamic definitions using label on S$DFCT call as prefix for field<br />

names.<br />

Suppress listing of data while generating packet.<br />

Use standard field names (FCTxxxx) with or without word offset and index<br />

register.<br />

The S option is the default if neither the S nor L option is present. The L option<br />

overrides the S option if both the S and L options are present.<br />

7833 1733–004 21–5


SDFI, SDFO–System Data Format I/O Routines<br />

ifn<br />

f<br />

msa<br />

blw<br />

buf1<br />

buf2<br />

ialng<br />

ialoc<br />

w<br />

x<br />

l<br />

Internal file name (in quotes)<br />

I/O function code: R$ - Read (020)<br />

Mass storage address<br />

Buffer length in words<br />

Buffer address 1<br />

Buffer address 2 (optional). If not specified, the packet is generated for 1 buffer.<br />

Image area length<br />

Image area location<br />

Address on which to base definitions (word offset). If omitted, the current location is<br />

used.<br />

Index register for dynamic definitions<br />

Levels above calling point to which definitions are known.<br />

If omitted, main assembly is used. If specified, one level above the main assembly<br />

is the maximum allowed; otherwise the main assembly level is the maximum.<br />

If buf2 is not specified, S$DFCT generates the FCT using single buffering.<br />

21–6 7833 1733–004


SDFI, SDFO–System Data Format I/O Routines<br />

Example<br />

The following example generates the packet (FCT) for SDFI with the S$DFCT PROC:<br />

1. $ASCII<br />

2. $INCLUDE ‘MAXR$’<br />

3. $INCLUDE ‘SDFP$’<br />

4. $(2)<br />

5. PKT S$DFCT,‘DGL’ ‘TPF$’,R$,1792 448,BUF1,BUF2;<br />

6. 20,LINE ,X7<br />

7. BUF1 $RES 448<br />

8. BUF2 $RES 448<br />

9. LINE $RES 20<br />

.<br />

.<br />

.<br />

10. $(1)<br />

11. START<br />

12. L,U X7,PKT . Get address of packet<br />

.<br />

.<br />

.<br />

13. L A6,PKTICW . Get Image Control Word<br />

In this example, the packet (FCT) for SDFI is generated on line 5 by the S$DFCT PROC.<br />

The D option displays the packet in the MASM assembly. The G option initializes the<br />

packet with the information contained in the S$DFCT parameter fields 1, 2, and 3. The<br />

L option generates dynamic $EQUF definitions using the label field on the S$DFCT<br />

PROC and information in parameter field 4. In this case, the $EQUF labels are prefixed<br />

with 'PKT', use X-register X7, and are externalized to the main assembly level.<br />

Line 13 accesses word 10 of the SDFI packet using the $EQUF generated by the<br />

S$DFCT PROC.<br />

21.1.2. Calling Sequence<br />

The following subsections explain how to open the SDFI routine, read an image, and<br />

close the routine.<br />

21.1.2.1. Open SDFI<br />

The calling program must open SDFI before any images can be read. There are two<br />

entry points that perform the open function.<br />

SDFIO$ Open SDFI at sector address<br />

SDFIOA$ Open SDFI at sector address and word offset<br />

When the SDFIO$ entry point is called, SDFI fills the I/O buffer or buffers and tests if the<br />

file accessed is an SDF file. Reading begins at the sector address specified in word 5 of<br />

the packet.<br />

7833 1733–004 21–7


SDFI, SDFO–System Data Format I/O Routines<br />

The SDFIOA$ entry point is the same as SDFIO$ except that the calling program can<br />

specify a word offset into the initial read sector address. This allows SDFI to begin<br />

reading on a word boundary instead of a sector boundary. The word offset must be in<br />

the range of 0 through 27. If the word offset is 0, SDFIOA$ performs the same as<br />

SDFIO$.<br />

Calling Sequence for SDFIO$<br />

Auto Switch Common Bank or Relocatable Relocatable<br />

L,U A0,address-of-packet<br />

LMJ X11,CBSDFIO$-1<br />

error return<br />

normal return<br />

Calling Sequence for SDFIOA$<br />

L,U A0,address-of-packet<br />

I$BJ X11,CBSDFIO$<br />

error return<br />

normal return<br />

L,U A0,address-of-packet<br />

LMJ X11,SDFIO$<br />

error return<br />

normal return<br />

Auto Switch Common Bank or Relocatable Relocatable<br />

L,U A0,address-of-packet<br />

L A1,word-offset<br />

LMJ X11,CBSDFIOA$-1<br />

error return<br />

normal return<br />

L,U A0,address-of-packet<br />

L A1,word-offset<br />

I$BJ X11,CBSDFIOA$<br />

error return<br />

normal return<br />

L,U A0,address-of-packet<br />

L A1,word-offset<br />

LMJ X11,SDFIOA$<br />

error return<br />

normal return<br />

If SDFI takes the error return, register A4 contains the error code. See 21.3 for an<br />

explanation of error codes.<br />

If SDFI takes the normal return, SDFI is opened and ready to read images.<br />

21.1.2.2. Read an Image<br />

Each call to SDFI$ or SDFINT$ reads one image from the file or element. SDFI returns<br />

the image in the image buffer and returns the image control word (ICW) in word 10 of<br />

the packet. There are two entry points to read an image.<br />

SDFI$ read an image (truncation if image overflows image buffer)<br />

SDFINT$ read an image (no truncation)<br />

The only difference between SDFI$ and SDFINT$ is how they handle an image buffer<br />

overflow. The SDFI$ entry point truncates images that are too long to fit in the image<br />

buffer. The image buffer is filled, and the rest of the image is lost. SDFI returns the total<br />

length of the image in word 10 (T1) of the FCT if the image is truncated. Therefore, the<br />

caller may detect if an image was truncated by checking whether the image length<br />

returned in word 10 (T1) of the FCT is greater than the image buffer length.<br />

21–8 7833 1733–004


SDFI, SDFO–System Data Format I/O Routines<br />

The SDFINT$ entry point does not truncate images that overflow the image buffer but<br />

instead returns an error. The recommended image buffer word length is returned in<br />

register A5. To read the entire image, the calling program must place the address and<br />

word length of a larger image buffer in the packet and call SDFINT$ again. If a<br />

continuation record (051 in S1 of the ICW) causes an overflow, the image buffer will<br />

contain the part just read, and word 10 of the FCT will contain an ICW for the portion of<br />

the image returned in the image buffer. To continue reading the image, the calling<br />

program must call SDFINT$ again. SDFI will return the next portion of the image.<br />

SDFI processes continuation records (051 in S1 of the ICW) and does not return them to<br />

the calling program, unless the image being continued is a type 061 special print control<br />

record. Since the type 061 record may exceed 63 words in length, the special print<br />

control record will be returned, and each continuation record associated with that special<br />

print control record will be returned as a separate record. All other control records are<br />

returned to the calling program.<br />

Calling Sequence for SDFI$<br />

Auto Switch Common Bank or Relocatable Relocatable<br />

L,U A0,address-of-packet<br />

LMJ X11,CBSDFI$-1<br />

error return<br />

end-of-file return<br />

normal return<br />

Calling Sequence for SDFINT$<br />

L,U A0,address-of-packet<br />

I$BJ X11,CBSDFI$<br />

error return<br />

end-of-file return<br />

normal return<br />

L,U A0,address-of-packet<br />

LMJ X11,SDFI$<br />

error return<br />

end-of-file return<br />

normal return<br />

Auto Switch Common Bank or Relocatable Relocatable<br />

L,U A0,address-of-packet<br />

LMJ X11,CBSDFINT$-1<br />

error return<br />

end-of-file return<br />

normal return<br />

L,U A0,address-of-packet<br />

I$BJ X11,CBSDFINT$<br />

error return<br />

end-of-file return<br />

normal return<br />

L,U A0,address-of-packet<br />

LMJ X11,SDFINT$<br />

error return<br />

end-of-file return<br />

normal return<br />

Returns<br />

If SDFI takes the error return, register A4 contains the error code. See 21.3 for an<br />

explanation of error codes.<br />

If SDFI takes the end-of-file return, an end-of-file control record was encountered (077 in<br />

S1 of the ICW). If the file or element read by SDFI does not contain an EOF control<br />

record, SDFI does not terminate correctly.<br />

If SDFI takes the normal return, the image has been read and is returned in the image<br />

buffer.<br />

7833 1733–004 21–9


SDFI, SDFO–System Data Format I/O Routines<br />

21.1.2.3. Close SDFI<br />

After all the images are read, the calling program must close SDFI by calling the SDFIC$<br />

entry point. This completes the SDFI read operation.<br />

Calling Sequence for SDFIC$<br />

Auto Switch Common Bank or Relocatable Relocatable<br />

L,U A0,address-of-packet<br />

LMJ X11,CBSDFIC$-1<br />

normal return<br />

L,U A0,address-of-packet<br />

I$BJ X11,CBSDFIC$<br />

normal return<br />

L,U A0,address-of-packet<br />

LMJ X11,SDFIC$<br />

normal return<br />

21.2. SDFO–System Data Format Output Routine<br />

SDFO writes images one at a time from the calling program to an SDF file or element.<br />

SDFO has the following functions and entry points:<br />

• Open SDFO (SDFOO$, SDFOOSF$)<br />

• Write an image (SDFO$)<br />

• Close SDFO (SDFOC$)<br />

The calling program must open SDFO before writing images to the file or element and<br />

close SDFO after all images are written.<br />

The packet (or FCT) for SDFO is described in 21.2.1. The open, write, and close<br />

functions of SDFO are described in 21.2.2.1, 21.2.2.2, and 21.2.2.3, respectively.<br />

21.2.1. Packet<br />

The calling program must provide an 11-word packet for SDFO. The packet (or FCT) for<br />

SDFO is described in Figure 21–2. The packet may be generated with the S$DFCT<br />

procedure, described in 21.2.1.2.<br />

The same 11-word packet should not be used for both SDFI and SDFO.<br />

21–10 7833 1733–004


21.2.1.1. Packet Format<br />

SDFI, SDFO–System Data Format I/O Routines<br />

The calling program must provide the 11-word packet and place appropriate information<br />

in all fields with names in italics.<br />

0 internal filename<br />

1<br />

2 zero<br />

3 zero 010 reserved zero<br />

4 buffer length in words (filled) single buffer address<br />

5 Relative Mass Storage Address (Sector)<br />

6 address of buffer number 1 address of buffer number 2<br />

7 buffer length (sectors) length of image area (filled)<br />

8 zero image area location<br />

9 zero buffer image locator (filled)<br />

10 SDF Control Word<br />

Packet Fields<br />

Words 0,1<br />

Figure 21–2. SDFO: Packet Format<br />

The 12-character Fieldata internal file name.<br />

Word 3 (S2)<br />

The I/O write function, W$ or 010.<br />

Word 4 (H1)<br />

The length in words of the I/O buffer or buffers used by SDFO (filled by SDFO).<br />

Word 4 (H2)<br />

The address of the I/O buffer if using one buffer; otherwise zero.<br />

Word 5<br />

The mass storage sector address to start writing SDF images to.<br />

Word 6<br />

The addresses of the I/O buffers if using two buffers (in H1 and H2); otherwise zero.<br />

7833 1733–004 21–11


SDFI, SDFO–System Data Format I/O Routines<br />

Word 7 (H1)<br />

The length in sectors of the I/O buffer used by SDFO.<br />

Word 7 (H2)<br />

The length in words of the SDF image transferred from the image buffer (filled by<br />

SDFO).<br />

Word 8 (H2)<br />

The address of the image buffer containing the SDF image that SDFO writes out.<br />

Word 9 (H2)<br />

The location in the buffer that SDFO places the next image to be written out (filled<br />

by SDFO).<br />

Word 10<br />

The SDF control word of the image that SDFO writes out.<br />

SDFO may use one or two buffers. If SDFO uses one output buffer, that buffer address<br />

is stored in H2 of word 4. Word 6 must be set to zero.<br />

If SDFO uses two buffers, the buffer addresses are placed in H1 and H2 of word 6. H2<br />

of word 4 must be set to zero.<br />

SDF Image Control Word Formats<br />

The calling program must place an ICW in word 10 for each SDF data record or control<br />

record written out.<br />

SDFO does not automatically generate 051 continuation control records. These are<br />

generally found only in symbiont generated print files.<br />

The general format of the ICW for an SDF data record is as follows:<br />

image length (words) variable information<br />

0 1 11 12 35<br />

The general format of the ICW for an SDF control record is as follows:<br />

control code image length variable information<br />

0 5 6 11 12 35<br />

The ICW for SDF control records always has bit 0 set.<br />

SDF is described in the Data Structures <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

21–12 7833 1733–004


21.2.1.2. Packet Generation PROC<br />

SDFI, SDFO–System Data Format I/O Routines<br />

S$DFCT is a MASM procedure that generates the SDFO packet (or FCT). S$DFCT<br />

defines the fields of the packet, initializes the packet, and displays a diagram of the<br />

packet.<br />

The MASM definition element SDFP$ contains the S$DFCT procedure. This element<br />

must be included in the calling program in order to use the S$DFCT procedure by using<br />

the following MASM directive:<br />

$INCLUDE ‘SDFP$’<br />

S$DFCT Calling Sequence<br />

There are two calling sequences for the S$DFCT procedure. The first call is used if the<br />

G-option is specified. The second call is used if the G-option is not specified.<br />

• Call 1 (G-option specified)<br />

label S$DFCT,o ifn,f,msa blw,buf1,buf2;<br />

ialng,ialoc,icw w,x,l<br />

• Call 2 (G-option not specified)<br />

label S$DFCT,o w,x,l<br />

The first call generates the packet definitions, initializes the packet, and displays the<br />

packet in the calling program's assembly. The second call generates the packet<br />

definitions and displays the packet but does not initialize the packet.<br />

Parameters<br />

label<br />

o<br />

Prefix for field names (see L-option)<br />

Options (must be in quotes)<br />

D<br />

G<br />

L<br />

Display the packet diagram, including user-defined names.<br />

Generate packet from parameters on Call 1.<br />

Generate dynamic definitions using label on S$DFCT call as prefix for field<br />

names.<br />

7833 1733–004 21–13


SDFI, SDFO–System Data Format I/O Routines<br />

ifn<br />

f<br />

msa<br />

blw<br />

buf1<br />

buf2<br />

ialng<br />

ialoc<br />

icw<br />

N<br />

S<br />

Suppress listing of data while generating packet.<br />

Use standard field names (FCTxxxx) with or without word offset and index<br />

register.<br />

The S option is the default if neither the S nor L option is present. The L option<br />

overrides the S option if both the S and L options are present.<br />

Internal file name (in quotes)<br />

I/O function code:<br />

W$–Write (010)<br />

Mass storage address<br />

Buffer length in words<br />

Buffer address 1<br />

Buffer address 2 (optional). If not specified, the packet is generated for 1 buffer.<br />

Image area length<br />

Image area location<br />

Image control word<br />

21–14 7833 1733–004


w<br />

x<br />

l<br />

SDFI, SDFO–System Data Format I/O Routines<br />

Address on which to base definitions (word offset). If omitted, the current location is<br />

used.<br />

Index register for dynamic definitions<br />

Levels above calling point to which definitions are to be known.<br />

If omitted, main assembly is used. If specified, one level above the main assembly<br />

is the maximum allowed; otherwise the main assembly level is the maximum.<br />

If buf2 is not specified, S$DFCT generates the FCT using single buffering.<br />

Example<br />

The following example generates the packet (FCT) for SDFO with the S$DFCT PROC:<br />

1. $ASCII<br />

2. $INCLUDE ‘MAXR$’<br />

3. $INCLUDE ‘SDFP$’<br />

4. $(2)<br />

5. PKT S$DFCT,‘DGL’ ‘TPF$’,W$,1792 448,BUF1,BUF2;<br />

6. 20,LINE ,X7<br />

7. BUF1 $RES 448<br />

8. BUF2 $RES 448<br />

9. LINE $RES 20<br />

.<br />

.<br />

.<br />

10. $(1)<br />

11. START<br />

12. L,U X7,PKT . Get address of packet<br />

13. L A6,(0500130000001)<br />

14. S A6,PKTICW . Store label ICW<br />

.<br />

.<br />

.<br />

In this example, the packet (FCT) for SDFO is generated on line 5 by the S$DFCT PROC.<br />

The D option displays the packet in the MASM assembly. The G option initializes the<br />

packet with the information contained in the S$DFCT parameter fields 1, 2, and 3. The L<br />

option generates dynamic $EQUF definitions using the label field on the S$DFCT PROC<br />

and information in parameter field 4. In this case, the $EQUF labels are prefixed with<br />

'PKT', use X-register X7, and are externalized to the main assembly level.<br />

Line 13 and 14 store a label control record in the SDFO packet using the $EQUF<br />

generated by the S$DFCT PROC.<br />

7833 1733–004 21–15


SDFI, SDFO–System Data Format I/O Routines<br />

21.2.2. Calling Sequence<br />

The following subsections explain how to open the System Data Format Output routine,<br />

read an image, and close it.<br />

21.2.2.1. Open SDFO<br />

The calling program must open SDFO before any images can be written. There are two<br />

entry points that perform the open function.<br />

SDFOO$ Open SDFO for any file type<br />

SDFOOSF$ Open SDFO for a sector-formatted file<br />

When the SDFOO$ entry point is called, SDFO initializes the packet for writing to the file<br />

or element. If the output file type is known to be sector-formatted, the SDFOOSF$ entry<br />

point should be used. This entry point is the same as SDFOO$ except that SDFO does<br />

not need to perform an ER FITEM$.<br />

Calling Sequence for SDFOO$<br />

Auto Switch Common Bank or Relocatable Relocatable<br />

L,U A0,address-of-packet<br />

LMJ X11,CBSDFOO$-1<br />

normal return<br />

Calling Sequence for SDFOOSF$<br />

L,U A0,address-of-packet<br />

I$BJ X11,CBSDFOO$<br />

normal return<br />

L,U A0,address-of-packet<br />

LMJ X11,SDFOO$<br />

normal return<br />

Auto Switch Common Bank or Relocatable Relocatable<br />

L,U A0,address-of-packet<br />

LMJ X11,CBSDFOOSF$-1<br />

normal return<br />

L,U A0,address-of-packet<br />

I$BJ X11,CBSDFOOSF$<br />

normal return<br />

L,U A0,address-of-packet<br />

LMJ X11,SDFOOSF$<br />

normal return<br />

21–16 7833 1733–004


21.2.2.2. Write an Image<br />

SDFI, SDFO–System Data Format I/O Routines<br />

Each call to SDFO$ writes one image to the file or element. The calling program must<br />

supply the image and an ICW for the image. The calling program places the image in the<br />

image buffer and places the ICW in word 10 of the SDFO packet. SDFO combines the<br />

ICW and the image and places them in the I/O buffer to be written out.<br />

SDFO does not actually write an image to the file or element every time SDFO$ is called.<br />

SDFO places the images in the I/O buffer or buffers. When the buffer is filled or a call is<br />

made to SDFOC$ to close SDFO, the buffer is written out to the file or element.<br />

SDFO maintains the write address when writing to a file or element. The calling<br />

program only needs to specify the initial write address.<br />

Calling Sequence for SDFO$<br />

Auto Switch Common Bank or<br />

Relocatable<br />

L,U A0,address-of-packet<br />

LMJ X11,CBSDFO$-1<br />

error return<br />

normal return<br />

L,U A0,address-of-packet<br />

I$BJ X11,CBSDFO$<br />

error return<br />

normal return<br />

Relocatable<br />

L,U A0,address-of-packet<br />

LMJ X11,SDFO$<br />

error return<br />

normal return<br />

If SDFO takes the error return, register A4 contains the error code. See 21.3 for an<br />

explanation of error codes.<br />

If SDFO takes the normal return, the image has been successfully written to the file or<br />

element.<br />

21.2.2.3. Close SDFO<br />

After all images have been written, the calling program must close SDFO by calling the<br />

entry point SDFOC$. SDFO places an end-of-file control record (077 in S1 of the ICW) in<br />

the I/O buffer and writes the buffer out to the file or element. If SDFO is writing to mass<br />

storage, it returns a sector address in word 5. This is the next available address to write<br />

to in the file. If SDFO is writing to tape, an end-of-file mark is written to the tape.<br />

Calling Sequence for SDFOC$<br />

Auto Switch Common Bank or<br />

Relocatable<br />

L,U A0,address-of-packet<br />

LMJ X11,CBSDFOC$-1<br />

error return<br />

normal return<br />

L,U A0,address-of-packet<br />

I$BJ X11,CBSDFOC$<br />

error return<br />

normal return<br />

Relocatable<br />

L,U A0,address-of-packet<br />

LMJ X11,SDFOC$<br />

error return<br />

normal return<br />

7833 1733–004 21–17


SDFI, SDFO–System Data Format I/O Routines<br />

21.3. Error Return<br />

When SDFI or SDFO takes the error return, register A4 contains an error code. For<br />

some error codes, register A5 contains additional information. The error codes are as<br />

follows:<br />

00<br />

01<br />

04<br />

05<br />

06<br />

07<br />

Unrecoverable I/O error; A5 contains the status code (see the Exec ER <strong>Programming</strong><br />

<strong>Reference</strong> <strong>Manual</strong>).<br />

Error on ER TLBL$ tape label call; A5 contains the status code (see the Exec ER<br />

<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>).<br />

(SDFI entry point SDFINT$ only) The record that is read is larger than the image<br />

buffer; the record has been truncated. The recommended image buffer word length<br />

is returned in A5. Place the length and address of a larger image buffer in the packet<br />

and call SDFI$ again to read the entire image.<br />

(SDFI entry point SDFINT$ only) A continuation control record (051) made the total<br />

record length exceed the image buffer length; the record has been truncated. The<br />

recommended image buffer word length is returned in A5, and the word length of<br />

the partial image transferred is in S2 of word 10 for control records, and T1 of word<br />

10 for data records. Another call to SDFI$ will continue reading the image.<br />

(SDFI entry points SDFI$ and SDFINT$) A continuation control record (051) made the<br />

total record length exceed the maximum allowed word length (63 for control records,<br />

2047 for data records).<br />

(SDFO entry point SDFOC$ only) The code for the equipment type is zero. Either<br />

SDFO has not been opened correctly or the SDFO packet has been corrupted.<br />

21–18 7833 1733–004


Section 22<br />

SFDT$–System Standard Format Date<br />

and Time<br />

The System Standard Format Date and Time (SFDT$) editing routine provides the calling<br />

program with standard formats for dates and times. SFDT$ converts the current date<br />

and time (or a specified date and time) into a string of ASCII characters. This string is<br />

placed into a buffer provided by the calling program.<br />

SFDT$ can create separate date and time formats or combine them together. The date<br />

format can contain the century, year of century, month, day, abbreviation for month, and<br />

abbreviation for day. The time format can contain the hour, minute, second, and<br />

fractional second. The calling program determines the exact contents of the date and<br />

time formats by selecting a date index and a time index.<br />

There are eight standard date formats and three standard time formats to choose from.<br />

• Date Formats<br />

1. YYMMDD<br />

2. CCYYMMDD<br />

3. YY-MM-DD<br />

4. CCYY-MM-DD<br />

5. YY mmm DD<br />

6. CCYY mmm DD<br />

7. YY mmm DD ddd<br />

8. CCYY mmm DD ddd<br />

• Time Formats<br />

1. HHMM<br />

2. HHMM:SS<br />

3. HHMM:SS.FFF<br />

7833 1733–004 22–1


SFDT$–System Standard Format Date and Time<br />

where:<br />

CC<br />

YY<br />

MM<br />

DD<br />

mmm<br />

ddd<br />

HH<br />

MM<br />

SS<br />

FFF<br />

Two-digit decimal century<br />

Two-digit decimal year of century<br />

Two-digit decimal month<br />

Two-digit decimal day of month<br />

Three-ASCII-character abbreviation for month (see <strong>SYSLIB</strong> element SFDTBL$)<br />

Three-ASCII-character abbreviation for day of week (see <strong>SYSLIB</strong> element SFDTBL$)<br />

Two-digit decimal hour<br />

Two-digit decimal minute<br />

Two-digit decimal second<br />

Three-digit decimal fractional second (only significant digits included)<br />

The calling program can use the date and time formats individually or combine them.<br />

If they are combined, the date format precedes the time format, and the formats are<br />

separated by either a space character (" ") or a dash character ("-"). The space character<br />

separator may be used with all formats. The dash character separator may only be used<br />

with date formats 1 through 4.<br />

22–2 7833 1733–004


SFDT$–System Standard Format Date and Time<br />

Recommended Date and Time Formats<br />

Since there are many possible date and time format combinations, the following formats<br />

are recommended as standard:<br />

YYMMDD HHMM:SS format (1,2) –most compact<br />

CCYY-MM-DD HHMM:SS format (4,2)<br />

CCYY mmm ddd HHMM:SS format (8,2) –most descriptive<br />

The element SFDTBL$ contains the ASCII character abbreviations for months and days.<br />

It is accessed by external label SFDTBL$. These abbreviations may be changed to other<br />

abbreviations for months and days, for example, when using languages other than<br />

English.<br />

SFDT$ can be called from both MASM and PLUS routines. It is available as a relocatable<br />

element in the <strong>SYSLIB</strong> file (SYS$LIB$*<strong>SYSLIB</strong>) or SYS$*RLIB$ and in the <strong>SYSLIB</strong><br />

common bank <strong>SYSLIB</strong>$1. The relocatable and common bank entry points to SFDT$ are<br />

listed in Appendix E.<br />

22.1. MASM Interface<br />

SFDT$ can be called directly from MASM programs. The packet for SFDT$ is described<br />

in 22.1.1. The calling sequence for SFDT$ is described in 22.1.2.<br />

22.1.1. Packet<br />

The calling program must provide a five-word packet for SFDT$. The following MASM<br />

PROC generates this packet:<br />

label S$FDTPKT datefmt,timefmt,buflen,bufaddr[,sep][,offset]<br />

The packet is shown in Figure 22–1.<br />

0 tscell datefmt timefmt sep reserved version<br />

01 offset numchar buflen errcode<br />

02 bufaddr<br />

03 date<br />

04 time<br />

Figure 22–1. SFDT$: Packet Format<br />

7833 1733–004 22–3


SFDT$–System Standard Format Date and Time<br />

Packet Fields<br />

The calling program provides the fields in italics.<br />

tscell<br />

datefmt<br />

Available to the calling program as a test-and-set flag (optional).<br />

The date format index (0 through 8) (required). It corresponds to the date formats<br />

listed at the beginning of this section. If set to zero, no date format is used; only the<br />

time is formatted.<br />

timefmt<br />

sep<br />

The time format index (0 through 3) (required). If set to zero, no time format is used;<br />

only the date is formatted.<br />

A flag for which separator character to use (optional)<br />

0 Space (" ") character (default)<br />

1 Dash ("-") character<br />

version<br />

offset<br />

The packet version number; the current version is 1 (required).<br />

The character offset within the first word (0, 1, 2, or 3) of the SFDT$ output<br />

(optional). If omitted, it defaults to zero. SFDT$ also returns the position of the last<br />

nonspace character (0, 1, 2, or 3) in this field.<br />

numchar<br />

buflen<br />

errcode<br />

bufaddr<br />

The number of characters that SFDT$ writes to the output buffer.<br />

The length in words of buffer specified by bufaddr (required).<br />

A negative error code returned by SFDT$ when the error return is taken.<br />

The address of SFDT$ output buffer (required).<br />

22–4 7833 1733–004


date<br />

time<br />

SFDT$–System Standard Format Date and Time<br />

The date and time in TDATE$ format (optional). The default is the current date and<br />

time.<br />

The time in TIME$ format (optional). The default is the current time.<br />

Parameters datefmt, timefmt, buflen, and bufaddr are required; sep is optional and is set<br />

to zero (space separator) if omitted; offset is optional and is set to zero if omitted.<br />

Output Buffer<br />

The SFDT$ packet and the buffer to contain the ASCII string must be in the same<br />

D-bank. This D-bank must be based when SFDT$ is called.<br />

The caller-provided buffer must be large enough to hold the ASCII string generated by<br />

the specified format. If not, the ASCII string is truncated to the length of the buffer<br />

(buflen), and the error return is taken. If the buffer length is greater than the format<br />

length, the buffer is space-filled to the end of the buffer.<br />

22.1.2. Calling Sequence<br />

SFDT$ is called with the MASM PROC S$FDT$. This PROC can call SFDT$ as a<br />

relocatable element, a common bank element, or a common bank element using the<br />

auto-switch method.<br />

Calling Format<br />

S$FDT$[,t] pktaddr [date] [time]<br />

error return<br />

normal return<br />

Parameters<br />

t<br />

The type of call to SFDT$. This parameter is optional and may be omitted. CB or A,<br />

if specified, must be enclosed by apostrophes.<br />

blank Call the relocatable version of SFDT$. This is the default if t is omitted.<br />

'CB' Call the common bank version of SFDT$.<br />

'A' Call the common bank version of SFDT$ using the auto switch method.<br />

pktaddr<br />

The address of the five-word SFDT$ packet.<br />

7833 1733–004 22–5


SFDT$–System Standard Format Date and Time<br />

date<br />

time<br />

The address of a caller-specified date and time (must be in TDATE$ format). This<br />

parameter is optional.<br />

The address of a caller-specified time (must be in TIME$ format). This parameter is<br />

optional.<br />

If date or time are not included on the calling statement, the current date and time (from<br />

ER TDATE$, or current time from ER TIME$ for time format 3) is used. The calling<br />

program can use indexing, incrementation, and indirect addressing in specifying the<br />

addresses for pktaddr, date, or time, by using the $EQUF directive. See $EQUF<br />

definitions in the MASM <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

Returns<br />

If the normal return is taken, SFDT$ has stored the ASCII date/time string in the buffer.<br />

The following information is returned to the caller in registers A0 to A3 and also stored in<br />

the packet at the appropriate locations:<br />

A0 The address of the SFDT$ packet<br />

A1 The number of characters in the formatted ASCII string<br />

A2 The address of the buffer containing the ASCII string<br />

A3 The character offset of the last nonspace character<br />

If the error return is taken, register A0 contains the packet address, and register A1<br />

contains the negative error code (also stored in the packet field errcode).<br />

1 The buffer length is too short for specified format(s).<br />

2 The date format index is out of range.<br />

3 The time format index is out of range.<br />

4 Both date and time formats are zero.<br />

5 An outdated version of the SFDT$ packet is being used.<br />

22–6 7833 1733–004


22.1.3. Example<br />

SFDT$–System Standard Format Date and Time<br />

The following example generates the packet for SFDT$ and calls SFDT$ from a MASM<br />

routine:<br />

1. $(0)<br />

2. PACKET S$FDTPKT 8,2,LINELEN,LINE<br />

3. LINELEN $EQU 7<br />

4. LINE $RES LINELEN<br />

.<br />

.<br />

.<br />

5. $(1)<br />

6. START<br />

.<br />

.<br />

.<br />

7. S$FDT$,‘CB’ PACKET . Format the date and time<br />

In this example, lines 2 through 4 generate the packet for SFDT$. Date format 8 and<br />

time format 2 are used, and the date/time string will be placed in the seven-word buffer<br />

LINE. The separator character and the offset default to a space and zero, respectively.<br />

Line 7 calls the common bank version of SFDT$ to format an ASCII string of the current<br />

date and time.<br />

7833 1733–004 22–7


SFDT$–System Standard Format Date and Time<br />

22.2. PLUS Interface<br />

SFDT$ can be called directly from PLUS programs. The packet for SFDT$ is described in<br />

22.2.1. The calling sequence for SFDT$ is described in 22.2.2.<br />

22.2.1. Packet<br />

Required Data Structures<br />

SFDT$ requires a five-word packet and a seven-word (or less) buffer area. The packet<br />

passes parameters to SFDT$ and the buffer area contains the ASCII date/time string<br />

generated by SFDT$. These data structures are defined as follows:<br />

DEFINE TYPE SFDT_BUFFER = 28 ASCII CHARACTERS LOCATABLE;<br />

DEFINE TYPE SFDT_PACKET = MAPPED LOCATABLE<br />

[*: LOGICAL(6),<br />

SFDT_DATE_FORMAT: 6 BIT INTEGER,<br />

SFDT_TIME_FORMAT: 6 BIT INTEGER,<br />

SFDT_SEPARATOR: 6 BIT STATUS (S’SPACE’:0, S’DASH’:1),<br />

*: LOGICAL(6),<br />

SFDT_PACKET_VERSION: 6 BIT INTEGER,<br />

SFDT_CHAR_OFFSET: 6 BIT INTEGER,<br />

SFDT_BUFFER_LENGTH: 6 BIT INTEGER,<br />

SFDT_NUMBER_CHAR: 6 BIT INTEGER,<br />

SFDT_ERROR_CODE: 18 BIT SIGNED INTEGER,<br />

SFDT_BUFFER_ADDRESS: 36 BIT MACHINE POINTER,<br />

SFDT_DATE: 36 BIT MACHINE LOGICAL,<br />

SFDT_TIME: 36 BIT MACHINE LOGICAL];<br />

The calling program can use these data types to set up the necessary data entities for<br />

SFDT$. For example<br />

DECLARE buffer: SFDT_BUFFER;<br />

DECLARE pkt: SFDT_PACKET;<br />

where:<br />

buffer<br />

pkt<br />

An identifier of a buffer that SFDT$ places the ASCII date/time string into.<br />

An identifier of a data entity that passes information to SFDT$.<br />

The type definitions for SFDT_BUFFER and SFDT_PACKET are available in PLUS COPY<br />

elements (see 22.2.2).<br />

22–8 7833 1733–004


SFDT$–System Standard Format Date and Time<br />

Parameters<br />

The calling program must set the following variables before calling SFDT$:<br />

SFDT_DATE_FORMAT<br />

Specifies date format (0 through 8). If set to zero, no date format is used; only the<br />

time is formatted.<br />

SFDT_TIME_FORMAT<br />

Specifies time format (0 through 3). If set to zero, no time format is used; only the<br />

date is formatted.<br />

SFDT_SEPARATOR<br />

Specifies space separator (" ") between formats if set to S'Space', and dash<br />

separator ("-") if set to S'Dash'.<br />

SFDT_PACKET_VERSION<br />

Specifies the SFDT$ packet version (the current version is 1).<br />

SFDT_CHAR_OFFSET<br />

The character offset (0, 1, 2, or 3) in the first word at which to start the ASCII<br />

date/time string.<br />

SFDT_BUFFER_LENGTH<br />

Specifies the length in words of the buffer into which the string is placed.<br />

SFDT_BUFFER_ADDRESS<br />

Specifies a pointer to the buffer into which the string is placed.<br />

SFDT_DATE<br />

Value for date; may be assigned a negative integer to use current date or assigned a<br />

positive integer or octal string value if a date other than the current date is desired<br />

(must be in TDATE$ format).<br />

SFDT_TIME<br />

Value for time; may be assigned a negative integer to use current time or assigned a<br />

positive integer or octal string value if a time other than the current time is desired<br />

(must be in TIME$ format).<br />

7833 1733–004 22–9


SFDT$–System Standard Format Date and Time<br />

Initialization Procedure<br />

The calling program may use the following procedure to set these variables in the SFDT$<br />

packet:<br />

PROCEDURE SFDT_INITIALIZE(%PACKET: SFDT_PACKET,<br />

INIT_DATE_FORMAT: 6 BIT INTEGER,<br />

INIT_TIME_FORMAT: 6 BIT INTEGER,<br />

INIT_SEPARATOR: 6 BIT STATUS (S’SPACE’:0,<br />

S’DASH’:1),<br />

INIT_CHAR_OFFSET: 6 BIT INTEGER,<br />

INIT_BUFFER_LENGTH: 6 BIT INTEGER,<br />

INIT_BUFFER_ADDRESS: 36 BIT MACHINE POINTER,<br />

INIT_DATE: 36 BIT MACHINE LOGICAL,<br />

INIT_TIME: 36 BIT MACHINE LOGICAL);<br />

BEGIN<br />

PACKET.SFDT_DATE_FORMAT:= INIT_DATE_FORMAT;<br />

PACKET.SFDT_TIME_FORMAT:= INIT_TIME_FORMAT;<br />

PACKET.SFDT_SEPARATOR:= INIT_SEPARATOR;<br />

PACKET.SFDT_CHAR_OFFSET:= INIT_CHAR_OFFSET;<br />

PACKET.SFDT_BUFFER_LENGTH:= INIT_BUFFER_LENGTH;<br />

PACKET.SFDT_BUFFER_ADDRESS:= INIT_BUFFER_ADDRESS;<br />

PACKET.SFDT_DATE:= INIT_DATE;<br />

PACKET.SFDT_TIME:= INIT_TIME;<br />

PACKET.SFDT_PACKET_VERSION:= 1;<br />

END;<br />

The SFDT_INITIALIZE procedure is defined in a PLUS COPY element (see 22.2.2).<br />

For example, the following call will initialize the data entity 'pkt' for date format 4 and<br />

time format 2, which are separated by a dash.<br />

SFDT_INITIALIZE(%pkt,4,2,S’Dash’,0,5,LOC(buffer),TEST_DATE,-1);<br />

These formats start in Q1 of the first word of the buffer; the buffer length is five words<br />

and is stored in buffer using the date stored at TEST_DATE and the current time.<br />

Returns<br />

SFDT$ returns string length in SFDT_NUMBER_CHAR, the offset of the last character<br />

(0, 1, 2, or 3) in SFDT_CHAR_OFFSET, and the error code, if any, in<br />

SFDT_ERROR_CODE.<br />

22–10 7833 1733–004


22.2.2. Calling Sequence<br />

SFDT$–System Standard Format Date and Time<br />

Calling programs need the following procedure declaration to call SFDT$:<br />

PROCEDURE STANDARD_DATE_TIME(%SFDT_PKT_ADDR: SFDT_PACKET)<br />

IMPORTED (‘external-name’);<br />

The external-name may be one of two entry points to SFDT$.<br />

SFDT$P This entry point uses the relocatable version of SFDT$.<br />

SFDT$PG This entry point uses the common bank version of SFDT$.<br />

The type definitions for SFDT_BUFFER and SFDT_PACKET, the initialization procedure<br />

SFDT_INITIALIZE, and the procedure definition for STANDARD_DATE_TIME are available<br />

in elements SFDT$D and SFDT$DG in the <strong>SYSLIB</strong> file SYS$LIB$*<strong>SYSLIB</strong>. Element<br />

SFDT$D contains the definitions to call the relocatable version of SFDT$, and SFDT$DG<br />

contains the definitions to call the common bank version of SFDT$.<br />

These elements are obtained with the COPY statement as follows:<br />

COPY(‘elt-name’);<br />

where elt-name may be SFDT$D or SFDT$DG.<br />

SFDT$ Calling Format<br />

STANDARD_DATE_TIME(%pkt);<br />

where pkt is the identifier of a data entity of type SFDT_PACKET.<br />

Returns<br />

If no error occurs, SFDT$ creates the ASCII date/time format string and returns it in the<br />

buffer specified by the calling program.<br />

SFDT$ returns the following variables to the calling program:<br />

SFDT_CHAR_OFFSET<br />

Position in word of the last nonspace character of the ASCII string (0, 1, 2, or 3).<br />

SFDT_NUMBER_CHAR<br />

The number of characters in the string.<br />

7833 1733–004 22–11


SFDT$–System Standard Format Date and Time<br />

SFDT_ERROR_CODE<br />

22.2.3. Example<br />

Negative error code if an error occurs:<br />

1 The buffer length is too short for specified format(s).<br />

2 The date-format index is out of range.<br />

3 The time-format index is out of range.<br />

4 Both date and time formats are zero.<br />

5 An outdated version of the SFDT$ packet is being used.<br />

The following example calls the relocatable version of SFDT$ from a PLUS program to<br />

return the date and time as an ASCII character string.<br />

module;<br />

copy ( ‘sfdt$dg’ );<br />

declare line: sfdt_buffer;<br />

declare pkt: sfdt_packet;<br />

sfdt_initialize ( %pkt, 8, 3, s’space’, 0, 7, loc( line ), -1, -1 );<br />

standard_date_time ( %pkt );<br />

open file ‘sysprint’ stream output;<br />

put file ‘sysprint’ edit ( line ) ( skip, a(28), skip );<br />

close file ‘sysprint’ ;<br />

term<br />

This will store the ASCII string for date format 8 and time format 2, which are separated<br />

by a space. These formats start in Q3 of the first word using current date and time in<br />

the buffer DATE_AND_TIME_LINE. They are six words long.<br />

22.3. SFDTBL$–Month and Day Table<br />

SFDTBL$ is a table of three ASCII character abbreviations for the months of the year and<br />

days of the week. SFDTBL$ is used by the standard date/time routines as a separate<br />

element. The ASCII characters can then be changed easily to incorporate user-defined<br />

abbreviations. Each abbreviation uses one word of storage, with a blank as the fourth<br />

character of the word.<br />

22–12 7833 1733–004


Section 23<br />

SIR$–Symbolic Input/Output Routine<br />

The Symbolic Input/Output Routine (SIR$) performs input, output, and updating on<br />

system data format (SDF) files. Processors call SIR$ to read symbolic input from<br />

• A runstream<br />

• A symbolic element in a program file<br />

• An SDF file<br />

SIR$ can update the symbolic input from an element or file with input from the<br />

runstream.<br />

After reading symbolic input and possibly updating it, the SIR$ routine can write<br />

symbolic output to<br />

• A symbolic element in a program file<br />

• An SDF file<br />

The general capabilities of SIR$ are described in this subsection. The entry points and<br />

functions of SIR$ are described in 23.2.<br />

When reading symbolic input, SIR$ automatically merges correction images and<br />

produces an updated symbolic element that is inserted into a program file. The symbolic<br />

element that contains the symbolic input may be cycled by specifying the desired cycle<br />

in the processor call statement. SIR$ automatically passes to the processor only those<br />

images that pertain to the cycle requested.<br />

Symbolic images can be in any of the coded character sets (CCS) listed in Appendix H.<br />

SIR$ normally handles images in the following CCSs:<br />

• Fieldata images.<br />

• ASCII images. Identified as ASCII_ISO, octal code 01, in Table H–1.<br />

• ASCII-like images. There are 39 CCSs listed in Table H–1 that are defined as being<br />

ASCII-like, or essentially identical to the ASCII_ISO character set for characters in the<br />

octal range of 0000 through 0177.<br />

SIR$ can optionally be initialized to handle, with some restrictions, images in an<br />

additional 22 CCSs. These 22 CCSs are referred to as “other CCSs” in the remainder of<br />

the SIR$ section. This allows SIR$ to process images in all 63 legal CCSs. Note that<br />

CCS octal 076 is reserved for future use and is currently illegal.<br />

7833 1733–004 23–1


SIR$–Symbolic Input/Output Routine<br />

The information for symbolic input and output elements or files (for example, their<br />

names) is obtained from the entries in PARTBL. The information in PARTBL is usually<br />

produced by the PREPRM and PREPRO (see 14.1.1) or PREPF$ (see 14.2) routines from<br />

information specified on the processor call statement.<br />

Some options placed on a processor call statement affect the SIR$ routine. These<br />

options are listed in 23.1.<br />

Depending on which options are specified, SIR$ is directed to<br />

• Write images in Fieldata, ASCII, or without translation.<br />

• Read and check sequence numbers.<br />

• Create symbolic elements from the runstream.<br />

• Update and produce new element cycles.<br />

• List runstream line change statements and change images.<br />

SIR$ reads, processes and writes system data format (SDF) images.<br />

SDF data images from the source input element or file have implicit, sequential line<br />

numbers, beginning with 1. The numbers on runstream correction images refer to the<br />

source input line numbers.<br />

SDF control images in the source input may be passed to the calling program, but the<br />

control images do not have line numbers and do not affect the line numbering of the<br />

source input data images.<br />

See the Data Structures <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for a description of SDF data<br />

images and control images. See the ECL and FURPUR <strong>Reference</strong> <strong>Manual</strong> for a<br />

description of runstream correction images.<br />

Note the following CCS-related restrictions on runstream correction images:<br />

• Runstream line change statements (-n and -n,m), partial line change statements<br />

(-n- and -n,m-) and partial line change editing statements (c/new-data, c,d/new-data/,<br />

/old-data/new-data and /old-data/new-data/) must be Fieldata, ASCII, or ASCII-like<br />

images.<br />

• Runstream partial line change statements (-n- and -n,m-) can only be used to edit<br />

source input images that are Fieldata, ASCII or ASCII-like. That is, source input line n<br />

(first format) or lines n through m (second format) must be Fieldata, ASCII, or<br />

ASCII-like images.<br />

• The CCS of a source input image does not change when it is edited by a partial line<br />

change statement and partial line change editing statements.<br />

• When the partial line change editing statements (c/new-data, c,d/new-data/,<br />

/old-data/new-data, and /old-data/new-data/) are in a different ASCII-like CCS than the<br />

source input image being edited, differences in the graphic representation of<br />

characters may affect the results of SIR$ editing operations.<br />

23–2 7833 1733–004


SIR$–Symbolic Input/Output Routine<br />

Different ASCII-like CCSs often have different graphic characters associated with an<br />

octal value, particularly for octal values of 0200 and over. Conversely, there are<br />

cases where characters in different ASCII-like CCSs have identical graphic<br />

representations but have different octal values. Of particular note in this case are<br />

certain special characters in the ASCII-like ISO 646 CCSs (decimal CCS 17 through<br />

28). For example, the small letter “c” with the cedilla diacritical mark is represented<br />

by the octal value 0134 in ISO_646_Italy (decimal CCS 22); the octal value 0175 in<br />

ISO_646_Spain (decimal CCS 23); and the octal value 0347 in ISO_8859_2 (decimal<br />

CCS 36).<br />

SIR$ character comparisons and replacements are always based on the octal values<br />

of characters in the runstream partial line editing statement and in the source input<br />

image, never on their graphic representation. As a result<br />

− Old-data characters that graphically match a source input image string may result<br />

in an unexpected SIR$ “no find.”<br />

− Old-data characters that do not appear to match a source input image string may<br />

result in an unexpected SIR$ “find.”<br />

− New-data characters may not have the same graphic representation once they<br />

are placed into the source input image.<br />

• Runstream images in CCSs other than Fieldata, ASCII, or ASCII-like can only<br />

represent images to be inserted into the source output following a “-n” line change<br />

statement or images to replace source input images following a “-n,m” line change<br />

statement.<br />

When an updated or new symbolic element is specified on the processor call statement,<br />

the updated or new symbolic is written to the program file. If a two-pass processor call<br />

is made to SIR$ and an update element is not specified on the processor call statement,<br />

the processor must provide a scratch file to hold the updated symbolic for the second<br />

pass. GETPSF$ can be called to get the scratch file. The internal file name of the<br />

scratch file must be in PARTBL+14,15 and PARTBL+16 must be set to zero prior to<br />

entering SIR$.<br />

To read from and write to an SDF file, PARTBL + 16,17 and PARTBL + 29,30 must be<br />

set to zero.<br />

Label Control Record<br />

Whenever symbolic output is written by SIR$, a label control record is the first image<br />

written. The format of the label control record created by SIR$ is the following.<br />

0 5 6 11 12 17 18 29 30 35<br />

0 050 01 030 CCS<br />

1 *SDFF*<br />

7833 1733–004 23–3


SIR$–Symbolic Input/Output Routine<br />

Word 0<br />

S1<br />

S2<br />

S3<br />

S6<br />

050 is the SDF label identifying this as an SDF element.<br />

indicates that a 1-word image follows.<br />

the Fieldata character 'S' identifies this as an SIR$-created file or element.<br />

indicates the CCS of the data records that follow (see Appendix H).<br />

If SIR$ writes a source output element, the element is identified as a Fieldata element if<br />

the label control record CCS is zero; otherwise, it is identified as an ASCII element.<br />

SIR$ Line-Change Control Record<br />

When SIR$ applies runstream corrections to the source input, SIR$ line-change control<br />

records are written to the source output and passed to the calling program. Note that<br />

these are control records that SIR$ writes to the source output; if SIR$ line-change<br />

control records are read in the source input, they are discarded by SIR$.<br />

SIR$ produces two types of SIR$ line-change control records, both of which may be<br />

present in source output produced by SIR$.<br />

The first type contains the actual text of the runstream line change statement or partial<br />

line change statement. It is used primarily by processors when producing<br />

comprehensive 'V' option listings of source input line numbers and runstream<br />

corrections. The control record format follows.<br />

0 5 6 11 18 35<br />

0 052 n 0<br />

1 line-change statement<br />

..<br />

n<br />

23–4 7833 1733–004


Word 0<br />

S1<br />

S2<br />

H2<br />

052 indicates that this is an SIR$ line-change control record.<br />

SIR$–Symbolic Input/Output Routine<br />

n specifies the length of the line change statement or partial line change statement<br />

in words 1 through n.<br />

Zero.<br />

When this control record is written to the source output and passed to the calling<br />

program, the CCS of the line change statement image is processed identically to a<br />

runstream data image of the same CCS.<br />

The SIR$ line-change control record for a -n line change statement is written to the<br />

source output immediately after source input line n. The SIR$ line-change control record<br />

for a -n,m line-change statement or for a -n- or -n,m- partial line change statement is<br />

written to the source output immediately after source input line n-1.<br />

The second type of SIR$ line-change control record is used internally by SIR$ and is not<br />

directly passed to the calling program. This control record is written by SIR$ whenever<br />

source input images are deleted by runstream corrections. The record contains a count<br />

of the number of source input images deleted immediately before the source input<br />

image that follows this control record. On the second and subsequent passes, SIR$<br />

uses this control record to calculate source input line number and source input image<br />

deletion information that is returned to the calling program. The control record format<br />

follows.<br />

0 5 6 11 18 35<br />

0 052 0 number-of-images-deleted<br />

Word 0<br />

S1<br />

S2<br />

H2<br />

052 indicates that this is an SIR$ line-change control record.<br />

Zero.<br />

The number of source input images deleted immediately before the next source<br />

input image.<br />

7833 1733–004 23–5


SIR$–Symbolic Input/Output Routine<br />

Data Record<br />

The first word of each data record is the image control word. For data records written by<br />

SIR$, the format of the image control word is as follows:<br />

0<br />

0 1 11 12 17 18 23 24 29 30 35<br />

0<br />

image length<br />

(words)<br />

previous images<br />

deleted flag<br />

delete cycle<br />

number<br />

new images flag<br />

start cycle<br />

number<br />

S6 is the element cycle at which the image was added; S4 is the cycle at which it was<br />

deleted. If the image is added on the latest cycle (after cycle zero), the new flag is set.<br />

The calling processor marks the line as "NEW". If this is not a new image and any<br />

previous images were deleted on the cycle, S3 is nonzero.<br />

When the symbolic input is from a FURPUR-formatted element file, the tape label block<br />

is read prior to entering SIR$. SIR$ then treats it as a program-file element. After SIR$<br />

is closed, the tape is positioned in front of the new element label block.<br />

SIR$ contains its own D-bank; however, all D-bank references in SIR$ are made using<br />

index registers. This allows the SIR$ D-bank to be located above the 65K addressing<br />

boundary.<br />

23.1. SIR$–Control Options<br />

SIR$ uses options to control the input and output of the symbolic elements. Most of the<br />

Unisys language processors (FTN, MASM, ACOB, NUALG, etc.) and system processors<br />

(DATA, ELT, PDP, and Collector) use the SIR$ routine to obtain input. The following<br />

options are available in most language system processors:<br />

G<br />

H<br />

I<br />

Input is compressed symbolic in columns 1 through 80 of the symbolic images.<br />

Applies only with I option.<br />

Input contains sequence numbers in columns 73 through 80 of the images. Applies<br />

only with I option.<br />

Read images from the runstream and insert them into a new symbolic. If the I<br />

option is present without any source input (SI) specification, SIR$ reads images from<br />

the runstream and passes them to the caller. In this case, if the calling program is a<br />

multipass processor, a scratch file (usually PSF$) must be provided so that the<br />

source images can be processed on the second and subsequent passes.<br />

23–6 7833 1733–004


J<br />

K<br />

SIR$–Symbolic Input/Output Routine<br />

Input contains compressed symbolic images in columns 1 through 72 of the images<br />

and sequence numbers in columns 73 through 80. These sequence numbers are<br />

not checked by either the J option or the K option. Applies only with the I option.<br />

Check sequence numbers in columns 73 through 80 of the symbolic images (valid<br />

only with H and I options).<br />

P and Q<br />

U<br />

W<br />

The P and Q options are used in combination to specify the CCSs of source output<br />

images produced by SIR$. A detailed description of source output operations<br />

follows this list of options.<br />

Read change images from the runstream, apply them to the symbolic input element,<br />

and produce a new cycle of the symbolic element.<br />

List line-change statements and change images.<br />

SIR$ Source Output<br />

When the source output portion of PARTBL (Words 14 through 26) has been filled by the<br />

calling program, SIR$ produces a source output file or element. When the I option is<br />

specified, the source output is created from runstream images. When the I option is not<br />

specified, the source output is created from source input images, possibly modified by<br />

corrections contained on runstream images.<br />

The CCS of images in the source output is controlled by the various combinations of the<br />

P and Q options and by the CCS of the images in the source input and the runstream.<br />

In general, the P option requests Fieldata source output, the Q option requests ASCII<br />

source output, and both the P and Q options request source output without translation.<br />

7833 1733–004 23–7


SIR$–Symbolic Input/Output Routine<br />

The following table lists SIR$ source output operations in greater detail. The columns of<br />

the table list the P option, the Q option, and both the P and the Q options. Note that the<br />

"neither P nor Q option" case is discussed later in this section. There are separate rows<br />

in the table for input images in Fieldata, ASCII, ASCII-like CCSs, the 22 "other" CCSs, and<br />

the illegal CCS. The input image may originate in either the runstream or the source<br />

input. The intersection of the columns and rows is the SIR$ source output action with<br />

this combination of options and input image CCS type.<br />

Input Image Type<br />

P Option<br />

Fieldata Unchanged<br />

Fieldata image<br />

ASCII Translated to<br />

Fieldata image<br />

ASCII-like Translated to<br />

Fieldata image<br />

"Other CCS" Error; image<br />

not written<br />

Illegal CCS Error; image<br />

not written<br />

Q Option<br />

Translated to<br />

ASCII_ISO<br />

image<br />

Unchanged<br />

ASCII image<br />

Unchanged<br />

ASCII-like<br />

image<br />

Error; image<br />

not written<br />

Error; image<br />

not written<br />

P and Q<br />

Options<br />

Unchanged<br />

Fieldata image<br />

Unchanged<br />

ASCII image<br />

Unchanged<br />

ASCII-like<br />

image<br />

Unchanged<br />

image in<br />

"other" CCS<br />

Error; image<br />

not written<br />

In summary, when the P option is specified, the source output contains only Fieldata<br />

images; when the Q option is specified, the source output can contain images in ASCII<br />

and any of the 39 ASCII-like CCSs; and when both the P and the Q options are specified,<br />

the source output can contain images in any of the 63 legal CCSs.<br />

When neither the P nor the Q option is specified, the CCS of source output images<br />

depends on the presence of the I option.<br />

When the I option is specified, both the P and the Q option are assumed. Runstream<br />

images in all 63 legal CCSs can be written unchanged to the source output. The "P and<br />

Q options" column of the preceding table lists the SIR$ source output action for the<br />

runstream image types listed in the rows.<br />

When the I option is not specified, the CCS of the source output image is determined as<br />

follows:<br />

• When a source input image is written to the source output, it is written unchanged<br />

and retains its CCS.<br />

• When a runstream image following a -n line-change statement is written to the<br />

source output, the CCS of the output image is based on the CCS of source input<br />

image n, as shown in the table that follows.<br />

• When a runstream image following a -n,m line-change statement is written to the<br />

source output, the CCS of the output image is based on the CCS of source input<br />

image m, as shown in the table that follows.<br />

23–8 7833 1733–004


SIR$–Symbolic Input/Output Routine<br />

The columns of the table list the source input image type for image n or m, described<br />

above. The types are Fieldata, ASCII, or ASCII-like and other CCSs. The rows of the<br />

table list the runstream image type to be written to the source output. The types are<br />

Fieldata, ASCII, or ASCII-like and other legal CCSs. The intersection of the columns and<br />

rows is the SIR$ source output action with this combination of source input image CCS<br />

type and runstream image CCS type.<br />

Runstream<br />

Input Image<br />

Type<br />

Source Input<br />

Image is<br />

Fieldata<br />

Fieldata Unchanged<br />

Fieldata image<br />

ASCII or<br />

ASCII-like<br />

Translated to<br />

Fieldata image<br />

"Other CCS" Error; image not<br />

written<br />

Source Input<br />

Image is ASCII<br />

or ASCII-like<br />

Translated to<br />

ASCII_ISO<br />

image<br />

Unchanged<br />

ASCII,<br />

ASCII-like image<br />

Error; image not<br />

written<br />

Source Input<br />

Image is<br />

"Other" CCS<br />

Unchanged<br />

Fieldata image<br />

Unchanged<br />

ASCII,<br />

ASCII-like<br />

image<br />

Unchanged<br />

image in<br />

"other" CCS<br />

In summary, when the source input image is Fieldata the P option is assumed; when the<br />

source input image is ASCII or ASCII-like, the Q option is assumed; and when source<br />

input image is in another CCS, both the P and the Q options are assumed.<br />

Note that when the calling program is a multipass processor, the second and<br />

subsequent passes usually read the source output that is written by SIR$ during the first<br />

pass. This means that the CCS of an image processed during the first pass may be<br />

different when the same image is processed during the second and subsequent passes.<br />

For example, if the P option is specified, an ASCII-like source input image in decimal CCS<br />

41 is written to the source output in Fieldata. This means that on the second pass the<br />

image can no longer be identified as a CCS 41 image and, in fact, cannot be<br />

distinguished from images that were originally Fieldata, ASCII, or any of the 39 ASCII-like<br />

CCSs. A more extreme example is that if both the P and Q options are not either<br />

specified or assumed, source input images in the 22 “other” CCSs are not written to the<br />

source output. This means that on the second pass the images cannot be passed to the<br />

calling program since they were not written to the source output on the first pass.<br />

7833 1733–004 23–9


SIR$–Symbolic Input/Output Routine<br />

Character Set Change Control Record<br />

When the source output contains images in more than one CCS, Character Set Change<br />

control records are written by SIR$ each time an image to be written is in a different<br />

CCS than the previously written image. The Character Set Change control record<br />

indicates the CCS of one or more images that follow. The control record format is as<br />

follows:<br />

0 5 6 11 30 35<br />

042<br />

Word 0<br />

0 CCS<br />

S1<br />

S2<br />

S6<br />

042 indicates that this is a Character Set Change control record.<br />

Zero.<br />

The CCS of the data records that follow.<br />

23.2. SIR$ Entry Points<br />

The SIR$ routine contains six entry points<br />

OPNSR$ Initialize SIR$ for symbolic input and output.<br />

INISR$ Initialize SIR$ with additional information.<br />

GETAS$ Read a symbolic image in ASCII.<br />

GETSR$ Read a symbolic image in Fieldata.<br />

GETNM$ Read a symbolic image without translation.<br />

CLOSR$ Close SIR$ input and output.<br />

Note: Either OPNSR$ or INISR$ may be called for initialization. Both routines cannot<br />

be called on the same pass.<br />

23.2.1. OPNSR$–Open SIR$ Input and Output<br />

OPNSR$ initializes SIR$ to allow input and output of symbolic data.<br />

OPNSR$ provides first or second pass initialization for the GETAS$, GETSR$, and<br />

GETNM$ read symbolic image routines. If the symbolic input is from a program file or<br />

tape, the System Data Format Input (SDFI) routine is opened. If the symbolic output is<br />

specified, the System Data Format Output (SDFO) routine is opened.<br />

23–10 7833 1733–004


SIR$–Symbolic Input/Output Routine<br />

If input is from an element, the SDF type is tested. If S3 of the label control record is<br />

nonzero and not the Fieldata character "S", the message 'SI IS NOT SIR TYPE' is printed.<br />

All cycling information in the control words is then ignored.<br />

Calling Sequence<br />

LMJ X11,OPNSR$<br />

error return<br />

normal return<br />

Returns<br />

OPNSR$ takes the error return if:<br />

• SDFI is unable to open the symbolic input. Register A5 contains the I/O error status<br />

code from SDFI.<br />

• An attempt is made to process an invalid SDF file or element. Register A5 is set to<br />

zero. The associated error message is<br />

INVALID SDF LABEL WORD w<br />

where w is the first two words of the element or file printed in Fieldata.<br />

23.2.2. INISR$–Initialize SIR$ Input and Output<br />

INISR$ initializes SIR$ to allow input and output of symbolic data. INISR$ performs the<br />

first or second pass initialization functions described for OPNSR$ and additionally allows<br />

the calling program to control certain SIR$ actions.<br />

Calling Sequence<br />

L A4,initialization-word<br />

LMJ X11,INISR$<br />

error return<br />

normal return<br />

The initialization-word is provided by the caller to control certain SIR$ actions.<br />

The initialization-word can contain<br />

• A list of specific SDF control record types that SIR$ should not pass to the calling<br />

program.<br />

• A flag to indicate that SIR$ should not create source output if certain conditions are<br />

met.<br />

• A flag to indicate that when an ASCII-like image is passed to the calling program,<br />

SIR$ should include the CCS for the image.<br />

• A flag to indicate that SIR$ should pass images in all 63 legal CCSs to the calling<br />

program and should include the CCS for the image.<br />

7833 1733–004 23–11


SIR$–Symbolic Input/Output Routine<br />

Control Records to Pass<br />

On entry, bits 4 through 35 of A4 specify which SDF control records SIR$ should not<br />

pass to the calling program. If bit n is set, then the control record type 0103-n is not<br />

passed to the calling program. The control record is still written to the source output by<br />

SIR$.<br />

Example<br />

If A4 equals 013 on a call to INISR$, bits 32, 34, and 35 are set, or bits 040, 042, and 043<br />

in octal. This initializes SIR$ so that control record types 0103-040 = 043, 0103-042<br />

= 041, and 0103-043 = 040 are not passed to the calling program.<br />

Source Output Control<br />

If bit 0 of A4 is set, SIR$ checks for the following conditions:<br />

• The output is to a scratch file and not to a source output element (PARTBL+16=0).<br />

• The input is not from tape.<br />

• There are no changes to the symbolic input.<br />

If these conditions exist, SIR$ does not write to the processor's scratch file on the first<br />

pass. On subsequent passes, SIR$ rereads the input element. If these conditions are<br />

met, SIR$ performs approximately 75-percent fewer I/Os on the first pass than if SIR$<br />

were called with OPNSR$.<br />

Example<br />

@MASM,S non-tape-si-element,ro-element<br />

@EOF<br />

In this example, SIR$ does not send unused output to the processor scratch file when<br />

the Assembler sets register A4 to negative and calls INISR$ instead of OPNSR$.<br />

Return CCS Identifier<br />

Fieldata, ASCII, and ASCII-like symbolic images can be passed to the calling program in<br />

Fieldata by using the GETSR$ entry point, in ASCII by using the GETAS$ entry point, or<br />

without translation by using the GETNM$ entry point.<br />

If bit 1 of A4 is set, SIR$ stores the CCS identifier in S6 of A0 for all images passed to<br />

the calling program in ASCII (GETAS$ and GETNM$ entry points). This initialization<br />

option allows the caller to identify the actual CCS associated with each image passed in<br />

ASCII, which may be necessary for proper processing of images in different ASCII-like<br />

CCSs.<br />

If bit 1 of A4 is clear or if the OPNSR$ initialization entry point is called, SIR$ stores 01 in<br />

S6 of A0 for all images passed to the calling program in ASCII (GETAS$ and GETNM$<br />

entry points) and 00 in S6 of A0 for all images passed to the calling program in Fieldata<br />

(GETSR$ and GETNM$ entry points).<br />

23–12 7833 1733–004


SIR$–Symbolic Input/Output Routine<br />

Return Images in All CCSs<br />

Symbolic images in the 22 "other" CCSs cannot be translated by SIR$ into Fieldata or<br />

ASCII, so these images cannot be passed to the calling program using the GETSR$ or<br />

GETAS$ entry points.<br />

If bit 2 of A4 is set and the GETNM$ entry point is called to read a symbolic image, SIR$<br />

passes images in Fieldata, ASCII, ASCII-like CCSs, and the 22 "other" legal CCSs to the<br />

calling program without translation. SIR$ stores the CCS identifier of the image in S6 of<br />

A0.<br />

If bit 2 of A4 is clear or if the OPNSR$ initialization entry point is called, SIR$ does not<br />

pass images in the 22 “other” CCSs to the calling program, but instead returns an error.<br />

This ensures that only Fieldata, ASCII, and ASCII-like images are passed to a calling<br />

program, unless the program has explicitly set bit 2 in A4 to indicate that it can handle<br />

images in the 22 “other ” CCSs.<br />

23.2.3. GETAS$–Get Symbolic Image in ASCII<br />

The GETAS$ entry point is called to obtain the next input image from the source input or<br />

the runstream and to pass the image to the calling program in ASCII. Input images in<br />

Fieldata are translated to the ASCII_ISO CCS and passed to the calling program. Input<br />

images in ASCII and ASCII-like CCSs are passed without change to the calling program.<br />

An exception is that when the P option is either specified or assumed, requesting<br />

Fieldata source output, lowercase alphabetics are changed to uppercase alphabetics<br />

when the image is passed to the calling program. Input images in the 22 “other” CCSs<br />

are not passed to the calling program, but instead result in an error return.<br />

Calling Sequence<br />

L A0,(buffer-length,buffer-addr)<br />

LMJ X11,GETAS$<br />

error return<br />

end-of-file return<br />

normal return<br />

where:<br />

buffer-length<br />

The length in words of the buffer into which the symbolic input images are read.<br />

buffer-addr<br />

The address of the buffer into which symbolic input images are read.<br />

7833 1733–004 23–13


SIR$–Symbolic Input/Output Routine<br />

Returns<br />

A call to GETAS$ obtains the next symbolic image from the source input. The image is<br />

returned in the calling program buffer. The images are always returned in the ASCII<br />

character set. If the image was read in Fieldata, it is translated to ASCII before it is<br />

returned to the calling program.<br />

If the buffer is longer than the image read, the buffer is blank-filled to the end. If the<br />

buffer is shorter than the image read, only the part of the image that will fit in the buffer<br />

is returned; the rest of the image is lost. SIR$ reads up to a 63-word image and can be<br />

configured to read up to 2047 word images.<br />

If symbolic output is specified, SIR$ writes the image. Note that even though the image<br />

is passed to the calling program in ASCII, this does not affect the CCS of the image<br />

when it is written to the source output. As previously described, the P and Q options<br />

determine the CCS of the output image. For example, a Fieldata image is translated to<br />

ASCII_ISO when passed to the calling program, but the image would still be written to<br />

the source output in Fieldata if the P option or both the P and the Q options are<br />

specified.<br />

If SIR$ takes an error return because of an unrecoverable I/O error, A5 contains the I/O<br />

error status code. If SIR$ takes an error return because of a line-change statement error,<br />

partial line-change statement error, partial line-change editing statement error, source<br />

input image CCS error, or source output image CCS error, A5 is zero and A0 contains a<br />

print control word for a message describing the error. The calling program can do an<br />

ER PRINT$ to print the Fieldata error message.<br />

SIR$ takes the end-of-file return when there are no more symbolic input images to read.<br />

The following information is returned to the calling program in registers A0 through A5<br />

when the normal return is taken:<br />

A0<br />

A1<br />

(S6)<br />

If SIR$ was initialized with OPNSR$ or if SIR$ was initialized with INISR$ and A4<br />

bits 1 and 2 were both clear, the ASCII_ISO CCS identifier 01 is returned. If<br />

SIR$ was initialized with INISR$ and either A4 bit 1 or 2 was set, the CCS<br />

identifier of the image is returned. For a Fieldata image translated to ASCII, the<br />

ASCII_ISO CCS identifier 01 is returned.<br />

The SDF image control word for the record read. If bit 0 (leftmost bit) of register<br />

A1 = 1, the record returned to the caller is a control record, and registers A2 through<br />

A5 are undefined.<br />

23–14 7833 1733–004


A2<br />

A3<br />

A4<br />

A5<br />

(Q1)<br />

(Q2)<br />

(H2)<br />

SIR$–Symbolic Input/Output Routine<br />

ASCII "#" symbol (octal 043) if the sequence numbers in columns 73 through 80<br />

are not sequential. Otherwise, an ASCII space (octal 040). This applies only<br />

with the H and K options.<br />

ASCII "*" symbol (octal 052) if the image came from the runstream. Otherwise,<br />

an ASCII space (040).<br />

A 2-digit ASCII cycle number for the image.<br />

Contains one of the following in ASCII:<br />

• The characters "∆NEW" (if this is a new image).<br />

• The characters "xxxx" where xxxx is a left-justified, space-filled decimal number.<br />

It is preceded by a minus sign if 3 digits or less. This indicates the number of<br />

images deleted prior to this image.<br />

• Four space characters.<br />

The current line number of the symbolic input element. Register A4 = 0 for new<br />

images read from the runstream. The line number for each image is the same for all<br />

passes.<br />

An actual or generated CTS line number.<br />

7833 1733–004 23–15


SIR$–Symbolic Input/Output Routine<br />

23.2.4. GETSR$–Get Symbolic Image in Fieldata<br />

GETSR$ obtains a symbolic input image in Fieldata and returns it to the calling program.<br />

If symbolic output is specified, SIR$ writes the image to the output file or element.<br />

Calling Sequence<br />

L A0,(buffer-length,buffer-addr)<br />

LMJ X11,GETSR$<br />

error return<br />

end-of-file return<br />

normal return<br />

where:<br />

buffer-length<br />

The length in words of the buffer into which the symbolic input image is read.<br />

buffer-addr<br />

The address of the buffer into which the symbolic input image is read.<br />

Returns<br />

The GETSR$ entry point is called to obtain the next input image from the source input or<br />

the runstream and to pass the image to the calling program in Fieldata. Input images in<br />

ASCII and ASCII-like CCSs are translated to Fieldata and passed to the calling program.<br />

Input images in Fieldata are passed without change to the calling program. Input images<br />

in the 22 "other" CCSs are not passed to the calling program, but instead result in an<br />

error return.<br />

If the buffer is longer than the Fieldata image, the buffer is filled with Fieldata spaces to<br />

the end. If the buffer is shorter that the image, only buffer-length words are returned;<br />

the remainder of the image is lost. SIR$ reads images up to 63 words and can be<br />

configured to read images up to 2,047 words.<br />

If symbolic output is specified, SIR$ writes the image. Note that even though the image<br />

is passed to the calling program in Fieldata, this does not affect the CCS of the image<br />

when it is written to the source output. As previously described, the P and Q options<br />

determine the CCS of the output image. For example, an ASCII-like ISO_8859_5<br />

(decimal CCS 39) image is translated to Fieldata when passed to the calling program, but<br />

the image would still be written to the source output as an ISO_8859_5 image if the Q<br />

option or both the P and the Q options are specified.<br />

If SIR$ takes an error return, the information returned is the same as described for<br />

GETAS$ in 23.2.3.<br />

SIR$ takes the end-of-file return when there are no more symbolic images to read in<br />

either the source input or the runstream.<br />

The following information is returned to the calling program in registers A0 through A5<br />

when the normal return is taken:<br />

23–16 7833 1733–004


A0<br />

A1<br />

A2<br />

A3<br />

(S6)<br />

00, the Fieldata CCS identifier.<br />

SIR$–Symbolic Input/Output Routine<br />

The SDF image control word for the image read. If bit 0 of register A1 = 1, the<br />

record returned to the caller is a control record and registers A2 through A5 are<br />

undefined.<br />

(S1)<br />

(S2)<br />

(S3)<br />

(H2)<br />

Always contains a Fieldata space (octal 05).<br />

Fieldata "#" symbol (octal 03) if the sequence numbers in columns 73 through 80<br />

are not sequential; otherwise, a Fieldata space (octal 05). This applies only with<br />

the H and K options.<br />

Fieldata "*" symbol (octal 050) if the image came from the runstream; otherwise,<br />

a Fieldata space (octal 05).<br />

A 3-digit Fieldata cycle number for the image.<br />

Contains one of the following in Fieldata characters:<br />

• The 6 characters "∆∆∆NEW" if this is a new image.<br />

• A decimal number indicating the number of images deleted prior to this image.<br />

If the number is 5 digits or less, it is preceded by a minus sign (octal 041) and<br />

the digits are left-justified and space-filled on the right. If the number is 6 digits,<br />

it is not preceded by a minus sign.<br />

• Six space characters.<br />

7833 1733–004 23–17


SIR$–Symbolic Input/Output Routine<br />

A4<br />

A5<br />

The current line number of the symbolic input file or element. Register A4 is zero for<br />

new images read from the runstream. The line number for each image is the same<br />

for all passes.<br />

An actual or generated CTS line number.<br />

23.2.5. GETNM$–Get Symbolic Image Without Translation<br />

GETNM$ obtains a symbolic input image and returns it to the calling program with no<br />

translation. If symbolic output is specified, SIR$ writes the image to the output file or<br />

element.<br />

Calling Sequence<br />

L A0,(buffer-length,buffer-addr)<br />

LMJ X11,GETNM$<br />

error return<br />

end-of-file return<br />

normal return<br />

where:<br />

buffer-length<br />

The length in words of the buffer into which the symbolic input images are read.<br />

buffer-addr<br />

The address of the buffer into which the symbolic input images are read.<br />

Returns<br />

The GETNM$ entry point is called to obtain the next input image from the source input<br />

or the runstream and to pass the image to the calling program without translation. Input<br />

images in Fieldata, ASCII, and the 39 ASCII-like CCSs are passed without change to the<br />

calling program. An exception is that when the image to be returned is ASCII or<br />

ASCII-like and when the P option is either specified or assumed, requesting Fieldata<br />

source output, lowercase alphabetics are changed to uppercase alphabetics when the<br />

image is passed to the calling program. If SIR$ was initialized with INISR$ and A4 bit 2<br />

was set, input images in the 22 “other” CCSs are passed to the calling program. If SIR$<br />

was initialized with OPNSR$ or if SIR$ was initialized with INISR$ but A4 bit 2 was clear,<br />

input images in the 22 “other” CCSs are not passed to the calling program, but instead<br />

result in an error return.<br />

23–18 7833 1733–004


SIR$–Symbolic Input/Output Routine<br />

If the buffer is longer than the image, the buffer is filled to the end. If the image is<br />

Fieldata, the buffer is filled with Fieldata spaces, octal 05. If the image is ASCII or<br />

ASCII-like, the buffer is filled with ASCII spaces, octal 040. If the image is in an "other"<br />

CCS, the buffer is filled with binary zero characters, octal 0. If the buffer is shorter than<br />

the image, only “buffer-length” words are returned; the remainder of the image is lost.<br />

SIR$ reads images up to 63 words and can be configured to read images up to 2,047<br />

words.<br />

If symbolic output is specified, SIR$ writes the image. Note that even though the image<br />

is passed to the calling program without translation, this does not affect the CCS of the<br />

image when it is written to the source output. As previously described, the P and Q<br />

options determine the CCS of the output image.<br />

If SIR$ takes an error return, the information returned is the same as described for<br />

GETAS$ in 23.2.3.<br />

SIR$ takes the end-of-file return when there are no more symbolic images to read in<br />

either the source input or the runstream.<br />

When SIR$ takes a normal return, information is returned to the calling program in<br />

registers A0 through A5. If the passed image is Fieldata, the return information is as<br />

described in 23.2.4 for GETSR$. If the passed image is not Fieldata (ASCII, ASCII-like,<br />

or “other”), the return information is as described in 23.2.3 for GETAS$.<br />

23.2.6. CLOSR$–Close SIR$ Input and Output<br />

CLOSR$ closes the symbolic input file. If there is symbolic output, CLOSR$ closes the<br />

symbolic output file.<br />

CLOSR$ provides termination for the first and all subsequent passes. SIR$ closes the<br />

SDFI routine. If symbolic output was specified, SIR$ closes the SDFO routine. If the call<br />

to SIR$ is a first pass and the symbolic output is an element, an entry is made in the<br />

symbolic output program file through the Program File Package Insert routine (ER PFI$).<br />

Calling Sequence<br />

LMJ X11,CLOSR$<br />

error return<br />

normal return<br />

Error Return<br />

SIR$ takes the error return when SDFO is unable to close the symbolic output. Two<br />

other error returns are possible when source output is to be written to a program file<br />

element. SIR$ takes the error return when the text length is over 262,143 sectors or<br />

when ER PFI$ returns an error to SIR$.<br />

In the case of an SDFO error, register A5 contains the I/O error status code. In the two<br />

other cases, A5 is zero. In the case of the text length over 262,143 sectors, register A2<br />

contains the sector count, which is always at least octal 01000000. In the case of an<br />

ER PFI$ error, register A2 contains the PFI$ error status code, which is always less than<br />

octal 0100. (See the ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.)<br />

7833 1733–004 23–19


SIR$–Symbolic Input/Output Routine<br />

23.3. External Labels<br />

SIR$ contains a number of data areas that the calling program may access.<br />

• SIRIB$<br />

The start of the 1,792-word input buffer.<br />

• SIROB$<br />

The start of the 1,792-word output buffer.<br />

• SIRP2$<br />

Set to one in CLOSR$ to identify a second pass call to OPNSR$, INISR$,<br />

GETAS$, and GETNM$.<br />

• SIRSDFIFCT$<br />

The start of the SDFI file control table.<br />

• SIRSDFOFCT$<br />

The start of the SDFO file control table.<br />

The calling program may not use the SIRIB$ or SIROB$ buffers between calls to<br />

OPNSR$ or INISR$ and CLOSR$.<br />

23.4. SIR$–Multipass Capability<br />

SIR$ allows many passes to be made over the input element if a scratch file or output<br />

element is available in PARTBL+14,15. (For exceptions, see INISR$, 23.2.2.) For<br />

reusable processors, SIR$ must be told when to initialize itself to process the element<br />

designated on the next processor call statement that INFOR CLIST reads. The calling<br />

program must store zero into the externally defined cell SIRP2$ in SIR$. No other action<br />

is required.<br />

23.5. Compressed Symbolic Elements<br />

To minimize the number of cards required to contain a symbolic element, the FURPUR<br />

processor can compress strings of blanks in symbolic images before punching the<br />

element. SIR$ expands the compressed images on input.<br />

A compressed symbolic image card deck is produced when the appropriate options are<br />

used on the FURPUR @PCH control statement. (See the ECL and FURPUR <strong>Reference</strong><br />

<strong>Manual</strong>.) SIR$ converts compressed card image decks to SDF images upon initial input<br />

when the I and G or J options are specified on the processor call statement (see G.1).<br />

The first card punched is an @ELT or @PDP control statement with the appropriate<br />

options. Following the control statement are the cards that contain compressed<br />

symbolic images.<br />

The compressed image consists of a stream of characters in the following format:<br />

23–20 7833 1733–004


xccc...cyxccc...cz<br />

where:<br />

x Number of characters C (1 ≤x ≤ 37)<br />

y 40 + Number of blanks (41 < y ≤ 77)<br />

z 40 = End of image<br />

SIR$–Symbolic Input/Output Routine<br />

The number of characters in a string is limited to 37; the number of blanks is limited to<br />

36. If either is larger, a new x or y is initiated.<br />

In addition to the x, y, and z characters, two other special characters are used:<br />

41 character<br />

indicates the end of images in this element.<br />

0 character<br />

is a special character in column 80 if a new x will begin in column 80. The x is<br />

moved to the next physical card and the 0 is placed in column 80.<br />

The compressed images immediately follow one another on the physical card and<br />

continue to the next card when the end of card is reached. The punch routine begins<br />

each physical card with an x, y, or z by breaking an x string at the end of the card and<br />

starting a new string on the next card. This guarantees a nonzero character in the first<br />

character position of the card. A compressed blank image is represented by a 40<br />

character. The physical card may contain compressed image characters in columns 1<br />

through 80.<br />

Compressed images are not retained in the program file. SIR$ expands the images and<br />

stores them in the program file in SDF format.<br />

Compressed image symbolic input is an SIR$ configurable feature.<br />

7833 1733–004 23–21


SIR$–Symbolic Input/Output Routine<br />

23–22 7833 1733–004


Section 24<br />

Program Trace Routine<br />

The Program Trace Routine (SNOOPY) is a routine that traces through programs. It is<br />

used with assembly language programs. In batch mode, SNOOPY provides information<br />

about every instruction executed and the effect it had. In demand mode, SNOOPY is a<br />

powerful diagnostic routine that gives the caller control over the trace operation. The<br />

following paragraphs describe how to use SNOOPY in batch mode. Large printouts may<br />

be produced.<br />

A program that is being traced functions the same as a program that is not being traced<br />

except that:<br />

• Execution time is slower. This can affect I/O timing, which might be relevant to the<br />

program being diagnosed.<br />

• Contingencies that would normally error terminate the activity being traced<br />

terminate EXIT$.<br />

The following restrictions apply to SNOOPY:<br />

• SNOOPY must be part of the program's main segment (see the Collector<br />

<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>).<br />

• Tracing terminates if the main segment is reloaded.<br />

• Only one activity may be traced at a time unless the caller uses duplicate copies of<br />

SNOOPY.<br />

• The program cannot be traced if it is running in real-time mode.<br />

• No activity contingency routine may exist for the activity being traced.<br />

• The only I/O Executive requests permitted are IO$ and IOW$.<br />

• Byte instructions and J-register (character addressing) mode for the 1100/60,<br />

1100/70, and 1100/80 are not traced. The EIS instructions for the 1100/60 and<br />

1100/70 are not simulated.<br />

• The major register set must be available.<br />

7833 1733–004 24–1


Program Trace Routine<br />

• The following Executive requests (ERs) are supported with packet dumps and<br />

register displays:<br />

ABORT$ DATE$ PFS$<br />

ACSF$ EDJS$ PFUWL$<br />

APCHCA$ ERR$ PFWL$<br />

APCHCN$ EXIT$ NCHA$<br />

APNCHA$ FACIL$ PRINT$<br />

APRINT$ FACIT$ PRNTA$<br />

APRNTA$ FITEM$ PRTCA$<br />

APRTCA$ FORK$ PRTCN$<br />

APRTCN$ IALL$ PSR$<br />

APUNCH$ IO$ PUNCH$<br />

AREAD$ IOW$ READ$<br />

AREADA$ LCORE$ READA$<br />

ATREAD$ LOAD$ SETC$<br />

BANK$ MCORE$ SNAP$<br />

BDI$ MCT$ SWAIT$<br />

CEND$ MSCON$ SYMB$<br />

COM$ OPT$ TDATE$<br />

COND$ PCHCA$ TFORK$<br />

CRTN$ PCHCN$ TIME$<br />

CSF$ PCT$ TREAD$<br />

CTS$ PFD$ TWAIT$<br />

CTSA$ PFI$ WAIT$<br />

CTSQ$<br />

Other ERs pass parameters using the A0 and A1 registers only, but they do not<br />

provide full packet display.<br />

• SNOOPY recognizes the following OS 2200 instruction mnemonics:<br />

AAIJ, AH, AMA, ANA, AND, ANH, ANMA, ANT, ANU, ANX, AT, AU, AX, BT, CDU,<br />

DA, DAN, DDC, DEC, DEC2, DF, DFA, DFAN, DFD, DFM, DFP, DFU, DI, DJZ, DL,<br />

DLM, DLN, DLSC, DS, DSA, DSC, DSF, DSL, DTE, EDC, ENZ, ER, EX, FA, FAN, FCL,<br />

FD, FEL, FM, HJ, INC, INC2, J, JB, JC, JDF, JFO, JFU, JGD, JK, JMGI, JN, JNB,<br />

JNC, JNDF, JNFO, JNFU, JNO, JNS, JNZ, JO, JP, JPS, JZ, LA, LBJ, LCF, LDJ,<br />

LDSC, LDSL, LIJ, LMA, LMJ, LNA, LNMA, LPD, LR, LSC, LSSC, LSSL, LUF, LX, LXI,<br />

LXM, MASG, MASL, MCDU, MF, MI, MLU, MSE, MSG, MSI, MSLE, MSNE,<br />

MSNW, MSW, NOP, OR, PAIJ, SA, SAS, SAZ, SE, SFS, SFZ, SG, SIL, SLE, SLJ,<br />

SMA, SNA, SNE, SNW, SNZ, SN1, SPD, SP1, SR, SSA, SSC, SSL, SW, SX, SZ, TCS,<br />

TE, TEP, TG, TLE, TLEM, TN, TNE, TNW, TNZ, TOP, TP, TS, TSS, TW, TZ, XOR.<br />

24–2 7833 1733–004


24.1. Calling Sequence<br />

There are two formats available for calling SNOOPY.<br />

Format 1<br />

SLJ SNOOPY$<br />

+ mode-bits,termination-addr . mode-word<br />

where:<br />

mode-bits (bits 0 through 17 where bit 0 is the leftmost bit)<br />

Program Trace Routine<br />

Bit 17 controls quarter-word mode sensitivity. If bit 17 of the mode word is set,<br />

SNOOPY simulates quarter-word mode for checkout of quarter-word sensitive<br />

programs on machines without quarter-word hardware. If bit 17 is clear,<br />

SNOOPY uses either third- or quarter-word mode, depending on the mode set in<br />

the Processor State Register (PSR) on entry. If bit 18 is set, the mode word<br />

suppresses the solicitation of commands at the beginning and end of a trace<br />

when using SNOOPY in demand mode.<br />

termination-addr (bits 18 through 35)<br />

Format 2<br />

Tracing begins with the instruction following the mode word. Tracing continues<br />

until the termination address (termination-addr) is reached or until another<br />

termination condition is encountered.<br />

SLJ TON$<br />

Tracing begins following the SLJ instruction and continues until it encounters a<br />

termination condition. The quarter-word mode sensitivity is unchanged with this<br />

format.<br />

24.2. Terminating Trace<br />

Tracing is terminated in batch mode by any of the following:<br />

• Reaching the specified termination address. Program execution continues.<br />

• Using the SLJ TOFF$ instruction (program execution continues). If an SLJ TOFF$<br />

instruction is executed outside of the trace routine, it has no effect.<br />

• Using the ER EXIT$ instruction (see the Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>).<br />

This not only terminates SNOOPY, but it also terminates the activity being traced.<br />

• Encountering a program contingency of types 1, 2, 7, or 12 for which standard<br />

system action has been specified. The activity being traced is terminated by EXIT$.<br />

7833 1733–004 24–3


Program Trace Routine<br />

Tracing can be terminated in batch or demand mode with the following methods:<br />

• Use the TOFF$ command (see 24.4.2). Program execution continues.<br />

• Use the EXIT$ command (see 24.4.2)<br />

24.3. Symbol Tables<br />

When using SNOOPY, the u-field of the instruction is edited in octal if it does not refer to<br />

control storage.<br />

The calling program can provide a symbol table to SNOOPY using Fieldata characters<br />

instead of octal values when the u-field falls within the address range of the program<br />

being traced. To do this, store a value in the externally defined location SYMTB$.<br />

SNOOPY uses the symbol table while tracing a program. The value stored in SYMTB$<br />

has the following form:<br />

0 17 18 35<br />

nbr-of-entries table-addr<br />

H1 H2<br />

The symbol table at the specified address is an array of three-word entries in the form:<br />

0 high +1 low<br />

1 Fieldata symbol name or address of long name<br />

2 bits symbol address<br />

H1 H2<br />

If the rightmost bit of bits (bit 17) is set, SNOOPY assumes word 1 of the entry is the<br />

address of a 7- to 12-character Fieldata symbol instead of a 1- to 6-character Fieldata<br />

symbol. This accommodates long labels.<br />

The next word after the last entry may be another symbolic table descriptor word. This<br />

occurs if bit 1 is set in the last entry of the symbol table. SNOOPY searches the symbol<br />

table to which it points in the same fashion. This may be repeated to any level desired.<br />

However, circularity must be avoided (in other words, pointing to the address of a<br />

higher-level symbol table).<br />

If the u-field of an instruction is between the low- and high-address values, edit the<br />

u-field as the symbol given by the second word of the entry, plus or minus an offset<br />

calculated from the symbol address in the third word. If the nbr-of-entries parameter of<br />

SYMTB$ is zero as it is initially, all u-fields outside control storage are edited in octal<br />

except TOFF$ and a number of ER indexes.<br />

24–4 7833 1733–004


24.4. Demand Mode Operation<br />

Program Trace Routine<br />

The caller has a great deal of control over the behavior of SNOOPY in demand mode.<br />

SNOOPY examines the program control table (PCT) to compute storage limits and the<br />

contingency routine address.<br />

When SNOOPY traces a demand program, the amount of output that SNOOPY produces<br />

is reduced (relative to batch mode) because of the low-speed output devices. In<br />

particular, header and trailer messages are brief, registers are dumped only on request,<br />

and line length may be restricted. Further control over printing may be obtained by using<br />

commands described in 24.4.2.<br />

For demand programs, SNOOPY operates in two modes.<br />

• Trace mode, in which instructions are traced<br />

• Command mode, in which the caller uses commands that direct SNOOPY's<br />

operation<br />

SNOOPY enters command mode under these circumstances.<br />

• On entrance, before tracing any instructions, unless mode bit 16 was set<br />

• When the Remote Break (RBK) contingency occurs (@@X C)<br />

• On completing the number of instructions specified by a SKIP or a numeric<br />

command<br />

• When encountering a condition specified by the BREAK or TRAP command<br />

• When an instruction is executed at an address specified on a CAPTUR command<br />

• At trace termination, unless mode bit 16 was set<br />

In command mode, the prompt is “C--”. SNOOPY solicits required parameter fields by<br />

indicating the nature of the required parameter. More than one command can be<br />

entered on any line solicited in command mode (including parameter lines).<br />

Delimiters separate the commands and parameters. A delimiter is any character not in<br />

the set (A through Z, 0 through 9, $, or -). Excess blanks are ignored. If any other<br />

consecutive delimiters are encountered, the effect is the same as the STEP command.<br />

That is, if answering “C--” with a line consisting of “////”, it has the same effect as four<br />

STEP commands.<br />

In certain cases, specific delimiters are required. To omit a parameter entirely, follow the<br />

delimiter that terminated the command by another (nonblank) delimiter (for example,<br />

“PRINT/”). Trace mode is suspended, the last instruction is printed, and a soliciting<br />

message appears under the above six circumstances.<br />

7833 1733–004 24–5


Program Trace Routine<br />

In each of the following circumstances, SNOOPY ignores all commands on the line after<br />

the last one performed; they can be reentered if desired.<br />

• Trace termination (unless mode bit 16 was set).<br />

• The @@X C sequence interrupts the trace.<br />

• SNOOPY encounters an invalid command.<br />

• A CHANGE, TOFF$, or EXIT$ command is used without a trailing asterisk.<br />

Entering a blank line (carriage return) in reply to the “C--” has the same effect as the<br />

STEP command. A blank line response to a parameter request may be erroneous or may<br />

have a special meaning, depending on the nature of the command.<br />

To enter an Executive control statement, answer a command solicitation by entering a<br />

line beginning with the character %. The remainder of the line should be an Executive<br />

control statement without the initial @ character. The statement must be legal for<br />

submission to the CSF$ Executive Request function. SNOOPY converts the initial %<br />

character to an @ and submits the resulting image to CSF$.<br />

If the CSF request is processed normally, the status bits from register A0 are displayed<br />

and SNOOPY solicits the next command. Otherwise, SNOOPY intercepts the<br />

appropriate contingency and prints the message “CSF$ ERROR” followed by command<br />

solicitation. For example, to assign a temporary file named T35, respond to “C--” by<br />

typing “%ASG,T T35,F2”.<br />

When command mode is entered at trace termination, the trace may be completed only<br />

by using the GO or STEP commands or a command with an equivalent effect. Once<br />

such a command is entered, no further commands are executed, and the trace<br />

terminates. The activity then continues execution or exits, depending on the type of<br />

trace termination.<br />

In all cases where number is called for, octal notation is assumed. Unless indicated<br />

otherwise, a leading zero is not required. In general, SNOOPY uses octal notation<br />

everywhere except in register designations and in the instruction cycle count printed by<br />

SNOOPY.<br />

Certain commands (TOFF$, EXIT$, and CHANGE) clear SNOOPY's command buffer<br />

before reading further commands because of the potentially irreversible nature of the<br />

operation that will be performed. If this is not desired, affix an asterisk to the command<br />

(TOFF*). For example, to terminate a trace and continue an execution without typing in<br />

two lines, use the sequence “TOFF$*GO”.<br />

Refer to 24.4.2 for a list of all SNOOPY commands. All commands except ALTPRT,<br />

TON$, RBK, RLIB, and STEP can be abbreviated to the first character.<br />

In some cases, particularly for complex programs, the set of commands SNOOPY<br />

provides may not meet all debugging requirements. For this reason, there is a method<br />

that allows the command interpreter to be extended as needed.<br />

24–6 7833 1733–004


Program Trace Routine<br />

SNOOPY links to a user-supplied subroutine when it encounters a command that is not<br />

contained in the set of standard commands. (Because one-character abbreviations are<br />

permitted for most SNOOPY commands, the command cannot begin with the same<br />

letter as a SNOOPY command. Therefore, the commands should begin with a $<br />

character.)<br />

A user command routine is identified to SNOOPY by storing its address in H2 of the<br />

externally defined cell SNUCM$. If SNOOPY cannot recognize the command, the user<br />

routine must return to 0,X11; normal return is to 1,X11. The volatile register set can be<br />

used without saving and restoring it.<br />

When SNOOPY enters the user command routine, registers A1 and A2 contain the<br />

command in Fieldata, the command is left-justified and space-filled, register X2 contains<br />

the current program address (simulated P register), and X10 points to an area containing<br />

the program's simulated control registers. These registers are located offset to a<br />

location that corresponds to their absolute addresses; for example, A0 contents at<br />

014,X10, R5 contents at 0105,X10, and so on. The program can change the value in<br />

SNUCM$ at any time, even while SNOOPY is performing a trace. If it is set to zero,<br />

SNOOPY does not interpret any user commands.<br />

The command routine may reference SNOOPY's command reading routine and lexical<br />

scanner by performing an SLJ to SNGTC$. A0 should contain zero or a pointer to a<br />

TREAD$ packet before it calls SNGTC$.<br />

If register A0 = 0, SNOOPY will not read the input; the remainder of the line containing<br />

the user command will be scanned for information. If A0 contains a TREAD$ packet<br />

pointer, the calling program must specify the input buffer SNBUF$. On return from<br />

SNGTC$, register A0 is unchanged; A1 and A2 contain a Fieldata command which is<br />

left-justified and space-filled (unless A3 = 0); A3 contains the nonblank character count<br />

for A1 and A2; and register R1 has the terminated delimiter. If an entirely blank line is<br />

encountered, registers A3 = 0 and R1 = '/'.<br />

SNOOPY commands conform to element name syntax (alphabetics, numerics, “-”,<br />

and “$”).<br />

24.4.1. Contingency Processing<br />

In some cases, because of time constraints, it is undesirable to use SNOOPY to trace an<br />

entire program. Instead, SNOOPY can gain control only when a contingency occurs.<br />

To call a routine that does this, enter the following:<br />

SLJ SNCNT$<br />

After this calling sequence is read, the program proceeds normally until a contingency is<br />

encountered. When a contingency occurs, SNOOPY takes control and the simulated<br />

P register points to the contingency address + 1. A message indicating the nature of the<br />

error is printed. If the contingency is fatal and the program is in batch mode, SNOOPY<br />

exits (EXIT$). For nonfatal contingencies, the remainder of the program is executed.<br />

7833 1733–004 24–7


Program Trace Routine<br />

In demand mode, the caller has control and can examine the program environment. No<br />

distinction is made between fatal and nonfatal contingencies in demand mode. Note<br />

that it is the caller's responsibility to clear registers in case of arithmetic fault and to<br />

respond to the onsite operator in case of a II keyin. For interrupt guard mode (IGDM),<br />

the trapped address may or may not be the address of the offending instruction.<br />

Contingency interception can be reset with the following:<br />

SLJ SNCLR$<br />

In frequently executed code, the caller may not want to trace every iteration of a loop or<br />

every call of a subroutine. A bug may not appear until a routine executes a number of<br />

times. The following calling sequence provides a way to call SNOOPY selectively.<br />

SLJ TCNT$<br />

+ count,start<br />

+ until,every<br />

+ mode-bits,termination-address<br />

where mode-bits and termination-address are the same as for an SLJ to SNOOPY.<br />

The count field should be zero initially; it is incremented on each pass through the code.<br />

If start ≤ count < until and (count - start)///every = 0 or (count - start) modulo every = 0,<br />

SNOOPY begins tracing following the mode word. Otherwise, execution will continue in<br />

normal (untraced) mode.<br />

24.4.2. Demand Mode Commands<br />

These are the SNOOPY commands, their permissible abbreviations, and their functions.<br />

ABSAD (ABS, A)<br />

Converts relative program addresses to absolute addresses. The parameters are<br />

eltname,loc-counter,location.<br />

or<br />

symbol*<br />

If the program is segmented and the specified address is in a segment not in main<br />

storage, a message is printed.<br />

In case of symbols, the Collector may look up only referenced symbols defined by<br />

non-SYS$*RLIB$ routines unless the collection source code includes a<br />

“TYPE EXTDIAG” statement. In this case, the Collector may search for all symbols<br />

(see the Collector <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>).<br />

This command is useful in conjunction with the BREAK, CAPTUR, CHANGE, DUMP,<br />

JUMP, and TRAP commands.<br />

24–8 7833 1733–004


ALTPRT (PRT)<br />

Program Trace Routine<br />

Sends all trace printout to an alternate print file while command solicitation,<br />

command responses (as for DUMP, for example), and all program print requests are<br />

sent to the terminal as usual. One parameter may be entered that is the name of<br />

the file to be used as an alternate print file. If the file specified is not assigned,<br />

SNOOPY automatically assigns a temporary file. (If the file will be printed by the<br />

@SYM statement, it must be assigned as cataloged rather than temporary.) If the<br />

program traced uses alternate symbiont files, the restrictions on the maximum<br />

number of alternate files that are allowed open must be followed.<br />

The ALTPRT command gives control of the alternate print files. In general, the<br />

ALTPRT command uses an alternate file and the current alternate file is breakpointed<br />

(@BRKPT). This action may be suppressed by using an asterisk (*) as the trailing<br />

delimiter for the parameter (for example, either “ALTPRTfilename*” or<br />

“ALTPRT *”).<br />

To obtain printouts both at a terminal and in an alternate file, the ALTPRT filename<br />

should have a trailing exclamation point (!), (for example, “ALTPRTfilename!”). This<br />

is useful for obtaining a permanent record when working at a terminal that lacks a<br />

hard-copy capability. If an alternate file is already active, the command forms<br />

“ALTPRT !” and “ALTPRT ?” may be used to set and clear echo mode while leaving<br />

the same alternate file in use. Echo mode is always cleared when the trailing<br />

exclamation point is not used. Therefore, to start a new alternate file without<br />

breakpointing the old file and with echo mode set, use the command sequence<br />

“ALTPRT* ALTPRTfilename!”.<br />

If the parameter is omitted (as in “ALTPRT/”), printing is directed to the terminal as it<br />

is initially. This command is effective for all SNOOPY operations until another<br />

ALTPRT command is given or the program being traced terminates. This command<br />

forces the location counter element name printout to be given so that each piece of<br />

printout may be easily identified.<br />

BREAK<br />

The BREAK loc-1, loc-2,... command indicates a stopping point for SNOOPY when<br />

operating in trace mode. When any specified address is reached, the trace stops<br />

and SNOOPY enters command mode. This command is useful for running with<br />

printing turned off. Use the form BREAK+ to add entries to the existing table. A<br />

maximum of 16 addresses is permitted. Use the $ specification to retrieve the last<br />

address returned by the ABSAD command. The form BREAK? lists the table of<br />

break addresses. The command BREAK may be abbreviated to just the letter B.<br />

This form of the BREAK command is incompatible with the previous form. The<br />

change is made for reasons of efficiency and utility; the break on element name or<br />

location counter was seldom used but introduced considerable overhead for each<br />

instruction traced, while it was impossible to have more than one break active at the<br />

same time. Determine which form of the BREAK command is available in SNOOPY<br />

by entering the BREAK command without parameters on the same line (or a “/” to<br />

indicate no parameters). The old form of BREAK solicits input with “ELT NAME--”,<br />

whereas the new form requests input with “LOCN--”.<br />

7833 1733–004 24–9


Program Trace Routine<br />

CAPTUR<br />

Enters SNOOPY from ordinary program execution mode whenever control reaches<br />

any of a specified set of addresses. The instructions at the specified addresses are<br />

overlaid by a jump to a SNOOPY internal table area, where an SLJ TON$ is<br />

performed, followed by the overlaid instruction. The overlaid instruction may not be<br />

referenced as data by the program, but there are no other restrictions. The syntax of<br />

the command is CAPTUR loc-1,loc-2,..… Up to eight locations may be specified,<br />

separated by commas. Any existing list is replaced by the new list (with the overlaid<br />

instructions restored). If CAPTUR+ is used, the specifications are added to the<br />

existing table, again up to a total limit of eight. Use CAPTUR? to print out the<br />

contents of the table.<br />

When using this command with segmented or multibanked programs, take care that<br />

the specified capture locations are in main storage when they are changed. The<br />

locations must not reside in a read-only bank. The purpose of this command is to<br />

provide the fastest possible means of getting past a portion of the program that is<br />

irrelevant to the debugging task. The use of external symbols is subject to the<br />

restrictions noted for the ABSAD command. See CHANGE command for use of the<br />

symbol $.<br />

CHANGE (C)<br />

Allows the caller to change the contents of control registers or main storage. The<br />

single parameter specifies the location to be changed. After reading the location<br />

parameter, the contents of the specified location are displayed as if the location<br />

parameter had been given to a DUMP command; then the new value is solicited.<br />

The new value is stored and the new contents displayed. A void new value does not<br />

change the indicated main storage element.<br />

If the parameter is a register name, a number, or a number or register name<br />

preceded by an H or Q, the new value is to be entered as a single octal number.<br />

The CHANGE command allows the caller to use mnemonics and external symbols<br />

for I format (instruction format) changes, as well as octal values. The first item given<br />

to “NEW VAL--” may be an op-code mnemonic instead of an octal number for the<br />

f-field of the instruction. Abbreviated forms such as L, LN, ANM, etc. are not<br />

permitted; however, LX, LA, LR, LNA, ANMA, and so on must be used.<br />

For some instructions, the op-code mnemonic specifies values for the j-field and<br />

perhaps the a-field as well. In such cases, the next value given to the CHANGE<br />

command is an a-field or an x-field. Mnemonics may also be used for the<br />

j-designator values (W, H1, H2, XH1, XH2, T1, T2, T3, S1, S2, S3, S4, S5, S6, Q1, Q2,<br />

Q3, Q4,U, and XU) and for standard X, A, and R register names. If a register name is<br />

used in the a-field of an instruction, its value will be adjusted appropriately.<br />

Truncation errors are not detected.<br />

24–10 7833 1733–004


Program Trace Routine<br />

Fields of an instruction are always expected to be entered in the order f, j, a, x, h, i,<br />

and u. Note that the h- and i-fields are combined. An external symbol may be used<br />

for any field except the f-field, subject to the same restrictions noted for the ABSAD<br />

command.<br />

For specification of an address to the CHANGE command, $ and $P have the following<br />

special meanings:<br />

$P<br />

$P-n$<br />

P+n<br />

$<br />

$-n$<br />

+n<br />

CLEAR<br />

The P register of the traced program.<br />

Where n is an octal number used to compute a value offset negatively or<br />

positively from $P.<br />

The last value returned by the ABSAD command, or the last address plus one<br />

changed (CHANGE) or dumped (DUMP). This allows the caller to continue a<br />

dump or change operation immediately following the last area referenced, or to<br />

change a cell at an address to be calculated by ABSAD without retyping the<br />

absolute address.<br />

Where n is an octal number, used to compute a value offset negatively or<br />

positively from $.<br />

The form $P (but not $P-n, $, or $-n) may also be used with the RELAD command.<br />

Clears one or more flags. List the flags to be cleared as names separated by<br />

commas. See the STATUS command for flag names and meanings.<br />

DUMP (D)<br />

Displays the program status. Separate each parameter by a comma. If no<br />

parameter or an empty parameter (that is, two consecutive commas) is entered, all<br />

registers and the carry and overflow designators are dumped. The parameters are:<br />

A,X, or R<br />

Dumps the indicated group of registers. To dump the contents of a single<br />

register, use the register mnemonic or the octal address.<br />

7833 1733–004 24–11


Program Trace Routine<br />

T<br />

L<br />

B<br />

S<br />

E<br />

N<br />

Dumps the carry and overflow designators.<br />

Displays current storage limits.<br />

Displays names of active banks (in order main-I, main-D, utility-D, with commas<br />

indicating place for unbased BDR portions) indicate write-inhibited banks by an<br />

asterisk (*). Banks whose names cannot be found in diagnostic tables are<br />

printed in octal numbers.<br />

Displays names of active segments.<br />

Last contingency and address, if any.<br />

Instruction cycle count.<br />

Any dump specification that references an address may be given a trailing + sign<br />

followed by an octal number n. A dump is then taken of n consecutive storage locations<br />

following the original address in the same format as the first dump, resulting in a dump<br />

of n+1 locations. The number of items printed per line depends on the line length set by<br />

the LINE command.<br />

If a specification number is neither the address of a register nor within the storage limits<br />

of the program, an error message is displayed.<br />

See CHANGE command for use of symbols $ and $P.<br />

The contents of the specified location or locations are printed in octal unless a format<br />

letter is given. The format letters are as follows:<br />

• The letter I preceding a number or register designator produces an instruction format<br />

dump.<br />

• The letter H preceding a number or register designator produces a Fieldata character<br />

dump.<br />

• The letter Q preceding a number or register designator produces an ASCII character<br />

dump.<br />

24–12 7833 1733–004


EXIT$ (E)<br />

GO (G)<br />

HDG<br />

JHT<br />

Program Trace Routine<br />

Terminates the traced activity by means of an EXIT$ request. Trace mode is<br />

terminated and the last instruction is printed.<br />

Returns to trace mode from command mode.<br />

This command allows the caller to insert print control information into SNOOPY's<br />

output, whether directed to a standard symbiont file or to an alternate file. Unless<br />

given as “HDG*”, the command buffer is flushed, and all other commands on the<br />

line are ignored. In any case, the input for this command is solicited by the printout<br />

“HDG- -”. Only print control information may go on this line; no commands are<br />

permitted. The format is identical to that used for the PRTCN$/PRTCA$ ERs.<br />

In particular, for heading information, the format is “H,opt,ps,txt”. But any of the<br />

other print control functions may be used.<br />

Prints the jump history table, starting with the most recent jump-from address and<br />

continuing with the last eight jump instructions that transfer control. The table is<br />

cleared on entry to SNOOPY, so fewer than eight addresses may be printed early in<br />

a trace. A jump that has been executed several times in succession without any<br />

other jumps intervening (that is, a loop) produces a listing with a repeat count, rather<br />

than many identical entries in the table. On 1100/60, 1100/70, and 1100/80<br />

systems, if SNOOPY is activated by a contingency after a call on SNCNT$, the JHT<br />

command can be used to retrieve the hardware jump history stack as captured at<br />

the time of the contingency. This applies only to hardware contingencies (IOPR,<br />

IGDM, IFOF, IFUF, and IDOF).<br />

JUMP (J)<br />

Transfers control to an address specified as an octal number or externally defined<br />

symbol. The current absolute and relative P-register values are displayed. If the new<br />

value is within the program storage limits, that value is set into the P register. The<br />

new value is printed in relative form, and the next command is executed.<br />

This command is the only way to get out of EXIT$ mode and do further tracing by<br />

means of the TON$ command. If TON$ is used in the EXIT$ mode without a JUMP<br />

command, the TON$ command is rejected and a message is displayed.<br />

If a JUMP command is used in EXIT$ mode termination, the termination mode<br />

becomes a TOFF$ termination. Use a TON$ command to continue tracing.<br />

The jump-to address specified for the JUMP command may be an external symbol<br />

as well as an octal value, subject to the restrictions on use of external symbols noted<br />

for the ABSAD command.<br />

7833 1733–004 24–13


Program Trace Routine<br />

LINE<br />

Adjusts the length of the line printed by SNOOPY. If "LINE /" is entered, the line<br />

length set is the default value of 132 decimal = 204 octal. Otherwise, the parameter<br />

given to LINE must be an octal number denoting the line length for the device in<br />

use. As indicated, the default value is 132 decimal = 204 octal for devices such as<br />

DCT 500 terminals.<br />

For a UNISCOPE or UTS Display terminal, use “LINE 116” with alternate print files<br />

(see the ALTPRT command), “LINE 204” may be the most convenient. The effect<br />

of a LINE command is canceled by the next LINE command or by program<br />

termination. The previous value will be printed as “WAS nnn”. This value is also<br />

printed when SNOOPY signs on unless NO HDG is set.<br />

number<br />

Has the same effect as a SKIP n GO sequence (where n is the number). See SKIP<br />

command. The number is in octal.<br />

PRINT (P)<br />

Allows the amount of printing to be modified. The PRINT command recognizes only<br />

one parameter at a time. If an invalid parameter or no parameter is specified, the<br />

F parameter is assumed. The parameters are:<br />

C<br />

E<br />

F<br />

N<br />

P<br />

Produces a printout omitting extraneous formatting spaces.<br />

Produces an expanded printout including formatting spaces. The E mode is<br />

effective until a PRINT C is encountered.<br />

Produces a full printout consisting of each instruction, its location, and the<br />

contents of main storage and registers (in before/after form if the value<br />

changed). For certain Executive Requests, the contents of the associated<br />

packet are also dumped. This is the default mode.<br />

Suppresses printout. This provides a means of skipping long sections of<br />

irrelevant code.<br />

Produces a printout of the instructions but not referenced main storage or<br />

Executive Request packets. If SNOOPY is in the N mode, the P mode is entered<br />

automatically upon the occurrence of an RBK contingency or encountering a<br />

BREAK-specified break condition.<br />

24–14 7833 1733–004


RBK<br />

I,n<br />

M,msk<br />

Program Trace Routine<br />

The value of n is an exponent of 2, indicating the frequency with which the<br />

instruction cycle printout is given. The default is 10, the minimum is 6. Turn off<br />

the printout using a value of 35.<br />

The value of msk is a mask that determines which instructions are to be edited<br />

while tracing. The most useful value for msk is 400, which suppresses all<br />

instructions except for jumps, skips, and Executive Requests. Other values for<br />

msk are determined by examining the code for SNOOPY (edit descriptor bits).<br />

Allows the caller to simulate an RBK contingency for the executing program; the<br />

actual RBK contingency is intercepted by SNOOPY and directs a return to command<br />

mode. This command allows a contingency routine to be traced. If the program<br />

does not expect the contingency, an appropriate message is displayed.<br />

RELAD (R)<br />

Converts absolute program addresses to relative addresses. A list of locations<br />

separated by commas may be specified as parameters.<br />

See $P specification for DUMP command.<br />

Ambiguities are resolved in favor of elements residing in loaded segments in active<br />

banks; otherwise a location may be specified as addr/bdi.<br />

RLIB param<br />

param may be an A, E, L, N, or X. Anything else is assumed to be N. The<br />

parameters are:<br />

A<br />

Allows tracing of RLIB$ routines, which include elements from the SYS$*RLIB$<br />

and SYS$*DATA$.LIB$NAMES files and elements marked as being from the<br />

files by the Collector RLIB directive.<br />

E,element-list<br />

Where element-list is a list of element names separated by commas specifying<br />

that the elements named should be treated as if they were RLIB$ elements for<br />

the purposes of RLIB$ trace suppression. The specified list completely replaces<br />

any preceding list. If a “+” sign follows the E, the listed elements are added to<br />

the current list. A maximum of 16 names can be specified. An empty list is<br />

specified by following the “E” with punctuation other than a comma, a plus sign,<br />

or a question mark. “RLIB E?” prints the current list.<br />

7833 1733–004 24–15


Program Trace Routine<br />

SET<br />

L<br />

N<br />

Prints the system type, system level identification, and site as well as the RLIB$<br />

level used at collection time.<br />

Suppresses trace printout of RLIB$ code and common banks. When tracing of<br />

RLIB$ is suppressed (which is the default mode for demand operations), an<br />

RLIB$ code is entered. The print mode is in effect saved. Printing is then<br />

turned off, and the RLIB$ code is interpreted until control leaves RLIB$ code. At<br />

this time, the print mode is restored and normal execution continues. This<br />

command may be used at any time. If it is used to change the mode while the<br />

program is in RLIB$ code, the effect will be as if RLIB$ was just exited (from N<br />

to A) or entered (from A to N). This means that the print mode will be saved or<br />

restored, respectively.<br />

X,element-list<br />

Has syntax identical to that for "RLIB E", but the effect is inverted. That is, any<br />

element not contained in the RLIB X list will be treated as an RLIB$ element.<br />

Use RLIB X+ to extend the line.<br />

If a break interrupt happens to give control in RLIB$ (or pseudo-RLIB$) code and<br />

RLIB$ tracing is suppressed, the STEP command and the blank line command are<br />

disabled. This prevents losing control when a blank line is transmitted by the break<br />

contingency under certain EXEC levels. Be sure to turn off printing or else allow<br />

RLIB$ tracing so that a runaway print can be avoided.<br />

Sets one or more flags. List the flags by name. The names must be separated by<br />

commas. See the STATUS command for flag names and meanings.<br />

SKIP n (S)<br />

Returns to command mode after executing n number of instruction cycles. If n is<br />

omitted, any previously existing skip count is deleted and no skip interrupt occurs.<br />

Otherwise, an octal number is used to set the interrupt point. If the count is<br />

exceeded during an indirect addressing or execute remote cascade, the command<br />

mode is reentered when the instruction is completed.<br />

24–16 7833 1733–004


STATUS<br />

Program Trace Routine<br />

Prints the status of any or all flags. Use the STATUS? command to print all flags.<br />

Otherwise, these flags may be listed, separated by commas. The flags are as<br />

follows:<br />

STEP n<br />

Name Action If Set<br />

BYPADD Bypasses @ADD images when looking for a SNOOPY command.<br />

NOHDG SNOOPY sign-on and sign-off information is suppressed.<br />

UXUCOR The u-field is looked up in SYMTB$ for J = U (016) or XU (017) when<br />

the x-field is zero.<br />

Executes n instructions in trace mode and returns to command mode. Default for n<br />

is one.<br />

TOFF$ (T)<br />

TON$<br />

TRAP<br />

Leaves the trace mode and continues execution as if an SLJ TOFF$ command had<br />

been executed. Trace mode is then terminated, and the last instruction is printed.<br />

Restarts a trace that will be terminated and executes one instruction. To compute<br />

the number of instruction cycles performed, use the TOFF$ command followed by<br />

the TON$ command. The TON$ command is not affected if the activity is about to<br />

terminate by means of an EXIT$ request; to continue tracing from that point, use a<br />

JUMP command to first establish a point from which execution will continue.<br />

Enters command mode from trace mode whenever one of a set of locations is<br />

referenced or altered except for ER operations. The locations may be octal numbers,<br />

register mnemonics, or external symbols. Entering the command<br />

“TRAPloc-1,loc-2...” places up to 16 locations in the trap table for the locators. Use<br />

commas as separators.<br />

If an asterisk immediately follows “TRAP”, the trap occurs only when a location's<br />

contents are changed. If the change occurs by using an Executive Request or<br />

asynchronously, the trap occurs at the next reference. If an exclamation point<br />

immediately follows “TRAP”, the trace does not stop when a trapped location<br />

changes. The old and new values are displayed, even in “PRINT N” mode.<br />

The use of external symbols is subject to the restrictions noted for the ABSAD<br />

command. Each specified list completely replaces the preceding list unless TRAP is<br />

followed immediately with a + (intervening spaces not allowed). In this case, the<br />

specifications are added to the list. The command “TRAP?” prints out the current<br />

list. See CHANGE command for use of the symbol $.<br />

7833 1733–004 24–17


Program Trace Routine<br />

24.5. Control Flags<br />

The location of some of SNOOPY's control flags is externalized with the label SNFLG$.<br />

In addition, the system procedure SN$DEF provides mnemonic tags for the following<br />

flags:<br />

BYPADD<br />

CCALL<br />

Set to bypass from @ADD streams when reading a SNOOPY command.<br />

(SNFLG$+2,,S2)<br />

Set by SNCNT$, cleared by SNCLR$. (SNFLG$,,S2)<br />

CMODE<br />

Set when tracing a contingency routine. (SNFLG$+1,,S2)<br />

COMPRT<br />

Set for compressed print ("PRINT C"), clear for expanded print. (SNFLG$+1,,S3)<br />

CONTINGF<br />

ECHO<br />

Set when a contingency has occurred, otherwise clear. (SNFLG$,,S5)<br />

Set for echo mode of ALTPRT. (SNFLG$+1,,S6)<br />

NOHDG<br />

Suppresses SNOOPY sign-on and sign-off messages. (SNFLG$+2,,S4)<br />

OLDSKP<br />

Saved value of REMSKPIT when RLIB$T = 0 and WASRLB = 1. (SNFLG$+1,,S5)<br />

REMBRK<br />

Set when the break contingency has occurred or by encountering a condition set by<br />

the SKIP (or number) command, the BREAK command, or the TRAP command.<br />

When set, SNOOPY enters command mode before interpreting the next instruction.<br />

(SNFLG$,,S6)<br />

REMOTE<br />

Clear for batch mode, set for demand mode. (SNFLG$,,S1)<br />

24–18 7833 1733–004


REMPRT<br />

Program Trace Routine<br />

Set for partial-print mode ("PRINT P"), clear for full-print mode. (SNFLG$,,S3)<br />

REMSKPIT<br />

RLIBX<br />

Set for suppress print mode ("PRINT N"), clear for full- or partial-print mode.<br />

(SNFLG$,,S4)<br />

RLIB$T<br />

Set if RLIB list is in exception mode, otherwise clear. (SNFLG$+2,,S1)<br />

Set to enable RLIB$ tracing ("RLIB A"), clear to suppress RLIB$ tracing (“RLIB N”).<br />

(SNFLG$+1,,S4)<br />

UXUCOR<br />

Set to look up u-fields in SYMTB$ when x-field is zero and j-field is U (016) or<br />

XU (017). (SNFLG$+2,,S3)<br />

WASRLB<br />

Set when executing an RLIB$ or pseudo-RLIB$ element. (SNFLG$+1,,S1).<br />

7833 1733–004 24–19


Program Trace Routine<br />

24–20 7833 1733–004


Section 25<br />

SOR–Symbolic Output Routine<br />

The Symbolic Output Routine (SOR) writes symbolic images produced by a processor<br />

into a program file as a symbolic element. The symbolic element produced by SOR is<br />

suitable for input to another processor by SIR$.<br />

The symbolic output produced by SOR should not be confused with the symbolic output<br />

produced by SIR$, described in Section 23. The symbolic output produced by SIR$ is<br />

based on the source input (SI) file or element, as modified by optional runstream<br />

corrections. The symbolic output produced by SOR is independent of the SIR$ symbolic<br />

output and is completely under control of the calling processor. SOR would normally be<br />

used by a processor that produces symbolic output rather than relocatable, omnibus,<br />

absolute, or object module output.<br />

The calling program must supply a 40-word PARTBL that is zero filled. The name<br />

PARTBL must be externally defined. See Figure 14–1 for PARTBL description. For<br />

symbolic output, SOR uses words 27 through 39 of PARTBL, the table item normally<br />

used for relocatable output.<br />

The calling program must insert the following information in PARTBL before calling SOR.<br />

The PREPRO routine can be used to enter the information from the second field<br />

(relocatable output) of the processor call statement to PARTBL.<br />

PARTBL+27,+28 Internal file name<br />

PARTBL+29,+30 Element name<br />

PARTBL+33,+34 Version name<br />

7833 1733–004 25–1


SOR–Symbolic Output Routine<br />

SOR inserts the following:<br />

S2 of PARTBL+32 Bit 7, the ASCII bit, is zero if the first symbolic image written by<br />

SOR is Fieldata; otherwise, the ASCII bit is set to 1.<br />

S3 of PARTBL+32 Element type is set to (01-symbolic).<br />

T1 of PARTBL+35 Cycle limit is set to the system standard (CYCLIM$).<br />

T2 of PARTBL+35 Latest cycle number is set to zero.<br />

T3 of PARTBL+35 Current number of cycles is set to 1.<br />

S1 of PARTBL+36 Element subtype is set to 01 (ELT).<br />

H2 of PARTBL+36 Length of text.<br />

PARTBL+37 Location of text.<br />

PARTBL+38 Time and date element created. Initialized to zero by SSOR$<br />

routine. User may insert time and date after SSOR$ call;<br />

otherwise, current time and date will be used.<br />

PARTBL+39 Next write location in program file.<br />

25.1. SSOR$–Start Symbolic Output<br />

SSOR$ initializes the SOR routine by setting up the appropriate PARTBL fields and by<br />

opening the System Data Format Output (SDFO) routine.<br />

Calling Sequence<br />

LMJ X11,SSOR$<br />

error return<br />

normal return<br />

SSOR$ initializes and makes PARTBL entries for a symbolic element. If the calling<br />

program also calls SIR$ and if the same file is used for both SIR$ source output and SOR<br />

symbolic output, then SSOR$ should not be called until SIR$ has created its source<br />

output, which occurs at the end of the first pass through SIR$. This is necessary<br />

because the text location for SOR symbolic output cannot be correctly determined using<br />

ER PFWL$ until SIR$ has created its source output element. The SDFO packet with the<br />

external label SORFCT$ is opened for SOR symbolic output.<br />

The calling program receives control at the error return if ER PFWL$ encounters an error<br />

condition. (See the Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>) On an error return,<br />

register A2 is nonzero, and contains the ER PFWL$ status.<br />

25–2 7833 1733–004


SOR–Symbolic Output Routine<br />

25.2. SORASC$ and SORASCA$–Output ASCII<br />

Image<br />

The SORASC$ and SORASCA$ routines write an ASCII image from a location specified<br />

by the calling program to the symbolic output element.<br />

Calling Sequence<br />

L A0,(image-length,image-location)<br />

LMJ X11,SORASC$ (or SORASCA$)<br />

error return<br />

normal return<br />

where:<br />

image-length<br />

The length in words of the symbolic image to output.<br />

image-location<br />

The address of the symbolic image to output.<br />

If this is the first call to output an image, SOR calls SDFO to write the SDF Label control<br />

record. If the SORASC$ entry point is called, SOR checks for and suppresses words of<br />

ASCII spaces at the end of the image. If the SORASCA$ entry point is called, there is no<br />

space suppression and image-length words are written. SOR calls SDFO to write the<br />

symbolic image.<br />

The following are the causes of SOR error returns:<br />

• If the image-location is zero but the image-length is nonzero, SOR returns with A5<br />

zero.<br />

• If an unrecoverable SDFO I/O error is encountered, SOR returns with A5 containing<br />

the nonzero I/O error status code.<br />

• If the image-length is over the maximum of 2,047 words, SOR returns with A5<br />

containing the illegal word count.<br />

7833 1733–004 25–3


SOR–Symbolic Output Routine<br />

25.3. Output Fieldata Image<br />

The SOR$ and SORA$ routines translate into ASCII a Fieldata image from a location<br />

specified by the calling program and write it to the symbolic output element.<br />

Calling Sequence<br />

L A0,(image-length,image-location)<br />

LMJ X11,SOR$ (or SORA$)<br />

error return<br />

normal return<br />

where:<br />

image-length<br />

The length in words of the symbolic image to output.<br />

image-location<br />

The address of the symbolic image to output.<br />

If this is the first call to output an image, SOR calls SDFO to write the SDF Label control<br />

record. If the SOR$ entry point is called, SOR checks for and suppresses words of<br />

Fieldata spaces at the end of the image. If the SORA$ entry point is called, there is no<br />

space suppression. If this is the first call to SOR$ or SORA$, SOR prints the following<br />

informational message:<br />

SOR: Fieldata symbolic output in not allowed; output is in ASCII.<br />

SOR then translates the Fieldata image to ASCII. The buffer that SOR uses for the<br />

translation is 63 words long, so if the Fieldata image is 42 words or less, SOR translates<br />

the image and then calls SDFO to write it. If the Fieldata image is more than 42 words,<br />

the entire image cannot be translated and written at once. In this case, SOR calls SDFO<br />

to write the first 63 words of the translated image; then continues by translating the next<br />

part of the Fieldata image and calling SDFO to write it as an SDF Continuation control<br />

record, octal code 051. SOR continues writing Continuation control records until the<br />

entire Fieldata image has been translated and written.<br />

To write a Fieldata image to the symbolic output element in Fieldata, the calling program<br />

can use the SORNM$ or SORNMA$ calls described in 25.4. Note also that SOR can be<br />

configured so that the SOR$ and SORA$ entry points write Fieldata images with no<br />

translation to ASCII.<br />

The SOR error returns described for SORASC$ and SORASCA$ in 25.2 also apply to<br />

SOR$ and SORA$.<br />

25–4 7833 1733–004


SOR–Symbolic Output Routine<br />

25.4. SORNM$ and SORNMA$–Output Specified<br />

Coded Character Set Image<br />

The SORNM$ and SORNMA$ routines write, without translation, an image from a<br />

location specified by the calling program to the symbolic output element. The coded<br />

character set (CCS) of the image is specified by the calling program.<br />

Calling Sequence<br />

L A0,(image-length,image-location)<br />

L,U A1,CCS-identifier<br />

LMJ X11,SORNM$ (or SORNMA$)<br />

error return<br />

normal return<br />

where:<br />

image-length<br />

The length in words of the symbolic image to output.<br />

image-location<br />

The address of the symbolic image to output.<br />

CCS-identifier<br />

The CCS of the symbolic image, as described in Table I–1. The calling program is<br />

responsible for assuring that the symbolic image has the correct format for the<br />

specified CCS. Note that CCS octal 076 is reserved for future use and is currently<br />

illegal.<br />

If this is the first call to output an image, SOR calls SDFO to write the SDF Label control<br />

record. If this is not the first call to output an image, SOR checks if the CCS identifier for<br />

the image to be written is the same as the CCS of the previous symbolic image. If it is<br />

not, SOR calls SDFO to write a Character Set Change control record, octal code 042.<br />

This control record indicates the CCS of one or more symbolic images that follow.<br />

The SORNM$ entry point is called to request space suppression at the end of the image.<br />

If this is a Fieldata image (CCS 0), SOR checks for and suppresses words of Fieldata<br />

spaces. If this is an ASCII image (CCS 1) or an image in one of the 39 CCSs listed in<br />

Table I–1 as “ASCII-like,” SOR checks for and suppresses words of ASCII spaces. If this<br />

is an image in one of the 22 CCSs that is not Fieldata, ASCII, or ASCII-like, SOR checks<br />

for and suppresses words of binary zeroes. If the SORNMA$ entry point is called, there<br />

is no space suppression.<br />

The SOR error returns described for SORASC$ and SORASCA$ in 25.2 also apply to<br />

SORNM$ and SORNMA$. The following error return is unique for SORNM$ and<br />

SORNMA$: If the CCS-identifier is not a legal CCS (A1 is negative, equal to octal 076 or<br />

over octal 077), SOR returns with A5 (H1) equal to 1 to indicate a CCS identifier error and<br />

A5 (H2) equal to the CCS identifier.<br />

7833 1733–004 25–5


SOR–Symbolic Output Routine<br />

25.5. ESOR$–End Symbolic Output<br />

ESOR$ terminates the operations of the SOR routine.<br />

Calling Sequence<br />

LMJ X11,ESOR$<br />

error return<br />

normal return<br />

ESOR$ terminates SOR, closes SDFO, and inserts the generated element in the<br />

program file (ER PFI$). If SOR takes the error return from ER PFI$, register A5 equals<br />

zero; register A2 contains the descriptive code. If the error return is from SDFO, an<br />

(unrecoverable) I/O error occurred and register A5 contains the I/O status code.<br />

25.6. SOR File Control Table (SORFCT$)<br />

The file control table (FCT) and the buffers provided by SOR for SDFO are similar to<br />

those SDFI requires. Therefore, the external label SORFCT$ is provided for the first<br />

word of the FCT.<br />

Although SORFCT$ is initially zero, it is set to nonzero when SSOR$ is called; SORFCT$<br />

is reset to zero when ESOR$ is called. If SORFCT$ is nonzero when SSOR$ is called, a<br />

01 (no find) error condition is returned in register A2. If the calling program uses the FCT<br />

and SOR buffers, it must do the following:<br />

• Check that SORFCT$ is zero before using it.<br />

• Set SORFCT$ to zero while using it.<br />

• Reset SORFCT$ to zero when it is no longer required.<br />

• Be sure S2 of SORFCT$+3 is the correct I/O code.<br />

Note: SIR$ has its own input FCT and buffers for SDFI use.<br />

25–6 7833 1733–004


Appendix A<br />

Using <strong>SYSLIB</strong><br />

This appendix contains suggestions for using <strong>SYSLIB</strong>.<br />

A.1. Efficient Collections<br />

Under certain conditions, the efficiency of the Collector can be improved when using<br />

<strong>SYSLIB</strong> relocatable elements. These conditions are:<br />

• <strong>SYSLIB</strong> has been installed with COMUS level 4R2 or higher.<br />

• The Exec level is 40R1 or higher.<br />

• The Collector level is 31R2 or higher.<br />

• The <strong>SYSLIB</strong> elements are not explicitly included with the “IN file-name.elementname”<br />

directive.<br />

If these conditions are met, programs that call <strong>SYSLIB</strong> routines should use the MASM<br />

INFO 12 directive. This directive instructs the Collector to search the library file<br />

SYS$LIB$*<strong>SYSLIB</strong> before searching other library files. The format of the INFO 12<br />

directive is<br />

$INFO 12 '<strong>SYSLIB</strong>'<br />

where ‘<strong>SYSLIB</strong>’ is the keyword for the SYS$LIB$*<strong>SYSLIB</strong> file. For details, see the<br />

MASM <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

A.2. PLUS Routines<br />

When any <strong>SYSLIB</strong> routines written in PLUS are used, the PLUS library must be available<br />

when collecting programs. SAR$ is the only <strong>SYSLIB</strong> routine that is currently written in<br />

PLUS. If PLUS is installed with COMUS or is included in the SYS$RLIB$ file, the<br />

Collector will automatically include referenced PLUS elements. IF PLUS is installed in a<br />

different file, it may be necessary to use the Collector LIB directive of MAP$PF use<br />

name. See the Collector <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for more information on the<br />

Collector LIB.<br />

A.3. Compilations<br />

Attach MASM$PF or PLS$PF to file SYS$LIB$*<strong>SYSLIB</strong>, or the file containing <strong>SYSLIB</strong>,<br />

and assign it to the run. This will decrease the assembly and compilation time. Use the<br />

M option with PLS.<br />

7833 1733–004 A–1


Using <strong>SYSLIB</strong><br />

A–2 7833 1733–004


Appendix B<br />

Diagnostic Messages<br />

This appendix contains processor interface routine messages and SIR$ line-change<br />

diagnostics.<br />

B.1. Processor Interface Routine Messages<br />

In the following messages, x may be either si, ro, or so, corresponding to the parameters<br />

on the processor call statement.<br />

The following messages are produced by the Processor Interface Routines:<br />

ABNORMAL RETURN FROM READ$<br />

A program which expects to be called as a processor has been called with @XQT.<br />

x BADLY CODED FIELD<br />

Fill from previous parameter was requested, and the filled parameter is illegal or<br />

ambiguous.<br />

x CYCLE SPECIFICATION IGNORED<br />

ro and so cycle specification is meaningless and is ignored. Does not cause error<br />

return.<br />

x FILE CANNOT BE READ<br />

Input file is in read-inhibited mode due to absence of read-key, write-only mode is<br />

set for file, or Y option is used on the file assignment.<br />

x FILE ERROR WAS REPORTED BY ER z - STATUS IN A2 = n<br />

Error status was received when acquiring file information using an OS 2200 program<br />

file package (PFP) request. z is the mnemonic of the ER and n is the PFP status<br />

code. See the Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

x FILE IS TAPE<br />

ro and so may not specify tape files.<br />

7833 1733–004 B–1


Diagnostic Messages<br />

x FILE NOT AVAILABLE - STATUS: n<br />

An attempt to assign a file has failed. Status n is the facility request status code.<br />

See the Exec ER <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

FILE NOT ASSIGNED: x<br />

POSTPR$ has tried to release (@FREE) a file that was not assigned. The calling<br />

program has probably altered PARTBL.<br />

x ILLEGAL DEVICE<br />

Output file is not sector-formatted or input file is neither tape nor sector-formatted.<br />

x ILLEGAL FIELD<br />

The field is ambiguous with the option given; that is, I option is specified and the<br />

symbolic output parameter is specified.<br />

INVALID SDF LABEL WORD w<br />

An attempt was made to process an invalid SDF file or element. w is the first two<br />

words printed in Fieldata.<br />

I/U OPTION CONFLICT<br />

Both I and U options were given on processor call statement. This situation is<br />

ambiguous.<br />

x NOT A PROGRAM FILE<br />

The file specified may not be used as a program file.<br />

PROCESSOR CALL ERROR<br />

A program which expects to be called as a processor has been called with @XQT.<br />

x READ ONLY OUTPUT FILE<br />

Output file is in a write inhibited mode, due to absence of write-key, read-only mode<br />

set for file, or Y option is used on the file assignments.<br />

SIR$: OUTPUT OF CCS 076 IMAGE NOT ALLOWED<br />

CCS 076 is reserved for future use and is currently illegal. SIR$ does not write<br />

images in this CCS to the source output.<br />

SIR$: OUTPUT OF CCS 0nn IMAGE REQUIRES ‘P’ AND ‘Q’ OPTIONS<br />

Octal CCS 0nn is not Fieldata, ASCII, or ASCII-like. SIR$ only writes images in this<br />

CCS if both the P and the Q options are either assumed or explicitly included on the<br />

processor call.<br />

B–2 7833 1733–004


SIR$: RETURN OF CCS 076 IMAGE NOT ALLOWED<br />

Diagnostic Messages<br />

CCS 076 is reserved for future use and is currently illegal. SIR$ does not pass<br />

images in this CCS to the calling program.<br />

SIR$: RETURN OF CCS 0nn IMAGE REQUIRES SPECIAL SIR$ INITIALIZATION<br />

SIR$ must be initialized using the INISR$ entry point with A4 bit 2 set to 1 in order to<br />

return images in octal CCS 0nn.<br />

SIR$: RETURN OF CCS 0nn IMAGE REQUIRES SPECIAL SIR$ INITIALIZATION AND USE<br />

OF GETNM$<br />

SIR$ must be initialized using the INISR$ entry point with A4 bit 2 set to 1 and the<br />

calling program must use the GETNM$ entry point in order to return images in octal<br />

CCS 0nn.<br />

SIR$: RETURN OF CCS 0nn IMAGE REQUIRES USE OF GETNM$<br />

The calling program must use the GETNM$ entry point to return images in octal CCS<br />

0nn.<br />

SI: CYCLE NONEXISTENT OR IN ERROR<br />

Requested cycle of specified element does not exist or cycle field has improper<br />

format.<br />

SI: ELEMENT NOT FOUND<br />

Element name given cannot be found as a symbolic element in the specified<br />

program file.<br />

SI: IMPROPER LABEL BLOCK<br />

Symbolic input file is tape, and tape is not positioned at the label block for requested<br />

element, probably because an @FIND has not been performed.<br />

SI IS NOT SIR TYPE SDF<br />

The SDF type is not S (general symbolic) or unspecified; therefore the input element<br />

is assumed to contain no valid cycle information.<br />

SI: MISSING FIELD<br />

A field of required information (for example, element name) was not given.<br />

SI: TAPE I/O ERROR — STATUS: n<br />

Symbolic input file is tape, and I/O status is n.<br />

7833 1733–004 B–3


Diagnostic Messages<br />

SIR EDIT ERR c l<br />

c indicates the cause of the error, and l represents the line number of the last image<br />

retrieved from the input symbolic before the error occurred or before the change<br />

statement in error.<br />

TOO MANY SPECIFICATIONS<br />

A processor call statement is too complex.<br />

B.2. SIR$–Line-Change Diagnostics<br />

When an error occurs, SIR$ passes a print control word in control register A0 back to the<br />

calling processor. Normally the processor performs an ER PRINT$ to inform the caller of<br />

the error. No other image is returned to the processor on an error return. The formats<br />

of the error messages are:<br />

Format 1<br />

SIR EDIT ERR c l<br />

Format 2<br />

c l<br />

where:<br />

c<br />

l<br />

Indicates the cause of the error. Table B–1 lists the possible errors.<br />

Is the line number of the last image retrieved from the input symbolic before the<br />

error occurred or before the change statement in error.<br />

Format 1 is returned when a partial-line-change editing statement is in error. Format 2 is<br />

returned when a line-change or partial- line-change statement is in error.<br />

SIR$ does not make assumptions as to the format of a changed line. Information in<br />

fixed fields—for example, sequence numbers in columns 73 through 80—may be<br />

destroyed when using partial-line-changes, especially formats 2 and 4.<br />

B–4 7833 1733–004


Table B–1. SIR$: Line-change Diagnostics<br />

Error Description<br />

ASCII OUTPUT TRUNCATED Overflow occurred on Fieldata to ASCII translation.<br />

Diagnostic Messages<br />

CARD COUNT < Not enough editing statements were provided. Those lines<br />

for which no editing statement was provided remain<br />

unchanged.<br />

CARD COUNT > Too many editing statements were provided. The excess<br />

editing statements are ignored.<br />

COLUMN The column number specified in Format 1 or 2 editing<br />

statement is out of range or c > d for a Format 2 editing<br />

statement.<br />

COMPRESSED SYMBOLIC<br />

FORMAT ERROR<br />

EDIT OF CCS 0nn<br />

IMAGE NOT ALLOWED<br />

EDITING STATEMENT IN<br />

CCS 0nn NOT ALLOWED<br />

NO CARDS FOLLOW -n No change lines follow -n.<br />

A compressed symbolic image exceeded the maximum<br />

image length when expanded. The remainder of the input<br />

image is ignored.<br />

A source input line referenced by a partial line change<br />

statement is in octal CCS 0nn, which is not Fieldata, ASCII,<br />

or ASCII-like and cannot be edited.<br />

A partial line change editing statement is in octal CCS 0nn,<br />

which is not Fieldata, ASCII, or ASCII-like as required.<br />

NO FIND The characters given in the old-data parameter of a format 3<br />

or 4 editing statement could not be found in the line being<br />

changed.<br />

Whenever a NO FIND, SEPARATOR, or COLUMN error<br />

occurs, the editing statement is ignored and the line remains<br />

unchanged except format -n, where the last changed image<br />

is returned.<br />

OUT OF SEQ The line-change or partial-line-change statement is illegal.<br />

PREMATURE @EOF An end of file encountered when reading compressed<br />

symbolic images. An image has probably been lost.<br />

SEPARATOR The separator used in the editing statement is invalid or<br />

nonexistent.<br />

SI ENDS AT LINE NUMBER n The line-change or partial-line-change references a line after<br />

the last line of the input symbolic. Line number n is the last<br />

line of the symbolic.<br />

7833 1733–004 B–5


Diagnostic Messages<br />

B–6 7833 1733–004


Appendix C<br />

<strong>SYSLIB</strong> Restrictions<br />

This appendix explains the restrictions of using <strong>SYSLIB</strong>.<br />

C.1. ASM Compatibility<br />

<strong>SYSLIB</strong> levels 75R2 and higher are not compatible with OS 2200 Assembler (ASM) level<br />

15R1. ASM routines that use PROCs from <strong>SYSLIB</strong> levels 75R2 or higher may or may not<br />

assemble correctly with ASM. If they do not, the routines should be assembled with<br />

MASM (any supported level).<br />

C.2. Object Modules<br />

The only elements released in <strong>SYSLIB</strong> as object modules are ERU$ and SYS$DEF. All<br />

other <strong>SYSLIB</strong> elements cannot be used as object modules. However, the subset of<br />

<strong>SYSLIB</strong> routines in the <strong>SYSLIB</strong> common banks can be accessed from object modules.<br />

SLIB provides equivalent services for the extended mode environment.<br />

C.3. SDFI and SDFO Tape Handling<br />

SDFI and SDFO are not compatible with PCIOS levels 4R1 and 4R1A when handling<br />

multireel tape files.<br />

When SDFI reads multireel tape files created by PCIOS, I/O error 01 (unlabeled tape) or<br />

ER TLBL$ error 013 (labeled tape) occurs. When PCIOS reads multireel tape files<br />

created by SDFO, unlabeled tapes are read correctly, but labeled tapes encounter I/O<br />

error 01.<br />

C.4. Symbolic Access Routine (SAR$)<br />

SAR$ does not process data that is made up only of JIS-16 (kanji) characters. But SAR$<br />

does process kanji characters when they are part of ASCII/ISO shift-coded data and<br />

attributed character data (ACD).<br />

C.5. 65K Addressing Limit<br />

The elements PREPF$, POSTPR$, PREPRM, PREPRO, ROR, and SOR cause truncation<br />

errors during collection if they are located above 65K in the D-bank.<br />

7833 1733–004 C–1


<strong>SYSLIB</strong> Restrictions<br />

C–2 7833 1733–004


Appendix D<br />

<strong>SYSLIB</strong> Elements<br />

This appendix contains a complete list of all <strong>SYSLIB</strong> elements.<br />

The <strong>SYSLIB</strong> elements are listed alphabetically in Table D–1, along with the element type,<br />

common bank it resides in, and element size. The name of the common bank absolute<br />

is listed if the element is contained in a <strong>SYSLIB</strong> common bank. The approximate<br />

element size in words is listed if the element is a relocatable element (rounded to the<br />

nearest 0100). All size values are in octal.<br />

Table D–1. <strong>SYSLIB</strong> Elements<br />

Element Name Element Type Common Bank Size<br />

AEDIT$ Relocatable <strong>SYSLIB</strong>$1 0400<br />

AEDIT$F Relocatable <strong>SYSLIB</strong>$1 0500<br />

AEDIT$P Assembler Procedure<br />

AEDIT$SFDT Relocatable <strong>SYSLIB</strong>$1 0300<br />

AEDIT$T Relocatable <strong>SYSLIB</strong>$1 0200<br />

AXR$ Assembler Procedure<br />

A$ACD2INT Relocatable <strong>SYSLIB</strong>$3 0700<br />

A$INT2ACD Relocatable <strong>SYSLIB</strong>$4 01000<br />

A$INT2SC Relocatable <strong>SYSLIB</strong>$4 0600<br />

A$SC2INT Relocatable <strong>SYSLIB</strong>$3 0300<br />

BSP$ Relocatable <strong>SYSLIB</strong>$1 02500<br />

BUF$TRANS Omnibus<br />

CABSAD$ Relocatable <strong>SYSLIB</strong>$1 0500<br />

CBEPFORV$ Relocatable 0<br />

CBEPMDP$ Relocatable 0<br />

CBEPUTS4$ Relocatable 0<br />

CBEP$$DMS Relocatable 0<br />

CBEP$$EMSLIB Omnibus<br />

CBEP$$MS Relocatable 0<br />

CBEP$$PIRCB$ Relocatable 0<br />

7833 1733–004 D–1


<strong>SYSLIB</strong> Elements<br />

Table D–1. <strong>SYSLIB</strong> Elements<br />

Element Name Element Type Common Bank Size<br />

CBEP$$<strong>SYSLIB</strong> Relocatable 0<br />

CB$CONFIG Omnibus<br />

CB$RETURNS Relocatable 0<br />

CERU$ Relocatable 0<br />

CERU$ Symbolic<br />

CONWRD$ Relocatable <strong>SYSLIB</strong>$1 0100<br />

CRELAD$ Relocatable <strong>SYSLIB</strong>$1 0500<br />

DLOAD$ Relocatable 0100<br />

EDIT$ Relocatable 0400<br />

EDIT$F Relocatable 0500<br />

EDIT$P Assembler procedure<br />

EDIT$T Relocatable 0200<br />

EM$BSP$ICPT Relocatable <strong>SYSLIB</strong>$1 0200<br />

EM$EDIT$ICPT Relocatable <strong>SYSLIB</strong>$1 0100<br />

EM$ERS Relocatable <strong>SYSLIB</strong>$1 0100<br />

EM$FDA$ICPT Relocatable <strong>SYSLIB</strong>$3 0100<br />

EM$INF$ICPT Relocatable <strong>SYSLIB</strong>$1 0100<br />

EM$MFD$ICPT Relocatable <strong>SYSLIB</strong>$2 0100<br />

EM$PSF$ICPT Relocatable <strong>SYSLIB</strong>$1 0100<br />

EM2CB$P Omnibus<br />

ERU$ Absolute (Object Module)<br />

ERU$ Omnibus<br />

ERU$ Relocatable 0<br />

ERU$ Symbolic<br />

ER$APRTCN$WD Omnibus<br />

ER$APRTCN$WI Omnibus<br />

ER$BRKPT Omnibus<br />

ER$COM$ Omnibus<br />

FDASC$ Relocatable <strong>SYSLIB</strong>$3 0200<br />

FDASC$PKTD Symbolic<br />

GETPSF$ Relocatable <strong>SYSLIB</strong>$1 0100<br />

IDLAD$ Relocatable 0100<br />

D–2 7833 1733–004


Table D–1. <strong>SYSLIB</strong> Elements<br />

Element Name Element Type Common Bank Size<br />

IDLA$ Relocatable 0100<br />

IDLD$ Relocatable 0100<br />

IDLINE$ Relocatable 0200<br />

IDL$ Relocatable 0100<br />

IDONLY$ Relocatable 0100<br />

ID$ Relocatable <strong>SYSLIB</strong>$1 0400<br />

INFOR$ Relocatable <strong>SYSLIB</strong>$1 0400<br />

MAXR$ Omnibus<br />

MFDSP$ Relocatable <strong>SYSLIB</strong>$2 01700<br />

OM$DEF Omnibus<br />

PIRCB$INTCPT Relocatable 0200<br />

PLSG$ID$ Relocatable 0100<br />

PLSG$SFDT$ Relocatable 0100<br />

PLS$ER$PFI$ Relocatable <strong>SYSLIB</strong>$4 0100<br />

PLS$FDASC$ Relocatable <strong>SYSLIB</strong>$3 0100<br />

PLS$ID$ Relocatable 0100<br />

PLS$SDFI Relocatable <strong>SYSLIB</strong>$3 0200<br />

PLS$SDFO Relocatable <strong>SYSLIB</strong>$4 0200<br />

PLS$SFDT$ Relocatable 0100<br />

PLS$SYMB$ Relocatable <strong>SYSLIB</strong>$3 0100<br />

POSTPR$ Relocatable 0100<br />

PREPF$ Relocatable 0500<br />

PREPRM Relocatable 01300<br />

PREPRO Relocatable 01400<br />

PROC$ Assembler procedure<br />

ROR Relocatable 0700<br />

SAR$ATREAD$G Relocatable <strong>SYSLIB</strong>$3 0700<br />

SAR$ATRPKTD Symbolic<br />

SAR$ATR$DG Symbolic<br />

SAR$COMPKTD Symbolic<br />

SAR$COM$DG Symbolic<br />

SAR$COM$G Relocatable <strong>SYSLIB</strong>$3 0400<br />

<strong>SYSLIB</strong> Elements<br />

7833 1733–004 D–3


<strong>SYSLIB</strong> Elements<br />

Table D–1. <strong>SYSLIB</strong> Elements<br />

Element Name Element Type Common Bank Size<br />

SAR$DEFN Symbolic<br />

SAR$FILEPKTD Symbolic<br />

SAR$PROCS Assembler procedure<br />

SAR$READ$DG Symbolic<br />

SAR$READ$G Relocatable <strong>SYSLIB</strong>$3 02300<br />

SAR$RPKTD Symbolic<br />

SAR$WPKTD Symbolic<br />

SAR$WRITE$DG Symbolic<br />

SAR$WRITE$G Relocatable <strong>SYSLIB</strong>$4 03400<br />

SDFI Relocatable <strong>SYSLIB</strong>$3 0500<br />

SDFI$PKTD Symbolic<br />

SDFO Relocatable <strong>SYSLIB</strong>$4 0400<br />

SDFO$PKTD Symbolic<br />

SDFP$ Omnibus<br />

SFDTBL$ Relocatable <strong>SYSLIB</strong>$1 0100<br />

SFDT$ Relocatable <strong>SYSLIB</strong>$1 0400<br />

SFDT$D Symbolic<br />

SIR$ Relocatable 04400<br />

SNAP$ Relocatable 0200<br />

SNOOPY Relocatable 011300<br />

SOR Relocatable 0400<br />

SSTYP$ Relocatable 0100<br />

SYMB$PKTD Symbolic<br />

<strong>SYSLIB</strong>$ID Relocatable 0<br />

<strong>SYSLIB</strong>$1-EP Relocatable <strong>SYSLIB</strong>$1 0400<br />

<strong>SYSLIB</strong>$2-EP Relocatable <strong>SYSLIB</strong>$2 0100<br />

<strong>SYSLIB</strong>$3-EP Relocatable <strong>SYSLIB</strong>$3 0100<br />

<strong>SYSLIB</strong>$4-EP Relocatable <strong>SYSLIB</strong>$4 0100<br />

SYS$DEF Absolute (object module)<br />

SYS$DEF Omnibus<br />

SYS$DEF Relocatable 0<br />

TABLE$ Relocatable <strong>SYSLIB</strong>$3 0200<br />

D–4 7833 1733–004


<strong>SYSLIB</strong> Elements<br />

Table D–2 contains the <strong>SYSLIB</strong> common bank absolute elements. The table includes the<br />

highest address of the common bank, rounded up to the next 0100. All <strong>SYSLIB</strong> common<br />

banks begin at address 01000.<br />

Table D–2. <strong>SYSLIB</strong> Common Bank Absolute Elements<br />

Element Name Element Type Highest Address<br />

PIRCB$ Absolute (common bank) 024000<br />

<strong>SYSLIB</strong>$1 Absolute (common bank) 011700<br />

<strong>SYSLIB</strong>$2 Absolute (common bank) 03200<br />

<strong>SYSLIB</strong>$3 Absolute (common bank) 013300<br />

<strong>SYSLIB</strong>$4 Absolute (common bank) 011200<br />

7833 1733–004 D–5


<strong>SYSLIB</strong> Elements<br />

D–6 7833 1733–004


Appendix E<br />

<strong>SYSLIB</strong> Common Bank Entry Points<br />

This appendix contains a list of all <strong>SYSLIB</strong> common bank entry points. The common<br />

bank entry points are listed in Table E–1 through Table E–4. They are grouped by the<br />

common bank absolute in which they reside. In each table, the entry points are grouped<br />

by routine, and both the relocatable and common bank entry points are listed.<br />

Table E–1 lists the routines and entry points for <strong>SYSLIB</strong> common bank <strong>SYSLIB</strong>$1.<br />

Table E–1. <strong>SYSLIB</strong>$1 Entry Points<br />

Element Name Relocatable Entry Point Common Bank Entry Point<br />

AEDIT$ AECHAR$ CBAECHAR$<br />

AECLEAR$ CBAECLEAR$<br />

AECOLN$ CBAECOLN$<br />

AECOL$ CBAECOL$<br />

AECOPY$ CBAECOPY$<br />

AEDCFZ$ CBAEDCFZ$<br />

AEDECF$ CBAEDECF$<br />

AEDECV$ CBAEDECV$<br />

AEDITR$ CBAEDITR$<br />

AEDITX$ CBAEDITX$<br />

AEDIT$ CBAEDIT$<br />

AEFD1$ CBAEFD1$<br />

AEFD2$ CBAEFD2$<br />

AEMSGR$ CBAEMSGR$<br />

AEMSG$ CBAEMSG$<br />

AEOCTF$ CBAEOCTF$<br />

AEOCTV$ CBAEOCTV$<br />

AEPACK$ CBAEPACK$<br />

AEPRINT$ CBAEPRINT$<br />

AESKIP$ CBAESKIP$<br />

7833 1733–004 E–1


<strong>SYSLIB</strong> Common Bank Entry Points<br />

Table E–1. <strong>SYSLIB</strong>$1 Entry Points<br />

Element Name Relocatable Entry Point Common Bank Entry Point<br />

AEDIT$F AEFLF1$ CBAEFLF1$<br />

AEFLF2$ CBAEFLF2$<br />

AEFLG1$ CBAEFLG1$<br />

AEFLG2$ CBAEFLG2$<br />

AEFLS1$ CBAEFLS1$<br />

AEFLS2$ CBAEFLS2$<br />

AEDIT$SFDT AESFDT$ CBAESFDT$<br />

BSP$ APTIA$ CBAPTIA$<br />

APTID$ CBAPTID$<br />

APTIS$ CBAPTIS$<br />

APTIU$ CBAPTIU$<br />

APTNL$ CBAPTNL$<br />

CPTIA$ CBCPTIA$<br />

CPTID$ CBCPTID$<br />

CPTIS$ CBCPTIS$<br />

CPTIU$ CBCPTIU$<br />

CPTNL$ CBCPTNL$<br />

EPTIA$ CBEPTIA$<br />

EPTID$ CBEPTID$<br />

EPTIS$ CBEPTIS$<br />

EPTIU$ CBEPTIU$<br />

EPTNL$ CBEPTNL$<br />

ETIA$ CBETIA$<br />

ETID$ CBETID$<br />

ETIS$ CBETIS$<br />

ETIU$ CBETIU$<br />

ETNL$ CBETNL$<br />

FPTIA$ CBFPTIA$<br />

FPTID$ CBFPTID$<br />

FPTIS$ CBFPTIS$<br />

FPTIU$ CBFPTIU$<br />

E–2 7833 1733–004


Table E–1. <strong>SYSLIB</strong>$1 Entry Points<br />

<strong>SYSLIB</strong> Common Bank Entry Points<br />

Element Name Relocatable Entry Point Common Bank Entry Point<br />

BSP$ (cont.) FPTNL$ CBFPTNL$<br />

PTATWT$ CBPTATWT$<br />

PTCTWT$ CBPTCTWT$<br />

PTETWT$ CBPTETWT$<br />

PTEWT$ CBPTEWT$<br />

PTFTWT$ CBPTFTWT$<br />

RFTI$ CBRFTI$<br />

RFTI$$ CBRFTI$$<br />

RPFAPT$ CBRPFAPT$<br />

RPFCPT$ CBRPFCPT$<br />

RPFEPT$ CBRPFEPT$<br />

RPFET$ CBRPFET$<br />

RPFFPT$ CBRPFFPT$<br />

WFTI$ CBWFTI$<br />

WPFAPT$ CBWPFAPT$<br />

WPFCPT$ CBWPFCPT$<br />

WPFEPT$ CBWPFEPT$<br />

WPFET$ CBWPFET$<br />

WPFFPT$ CBWPFFPT$<br />

CABSAD$ CABSAD$ CBCABSAD$<br />

CAINIT$ CBCAINIT$<br />

CBX$ CBCBX$<br />

CSX$ CBCSX$<br />

CSYMVL$ CBCSYMVL$<br />

CONWRD$ CWCLEAR$ CBCWCLEAR$<br />

CWSET$ CBCWSET$<br />

CRELAD$ CBN$ CBCBN$<br />

CRELAD$ CBCRELAD$<br />

CRINIT$ CBCRINIT$<br />

CSN$ CBCSN$<br />

EDESC$ CBEDESC$<br />

7833 1733–004 E–3


<strong>SYSLIB</strong> Common Bank Entry Points<br />

Table E–1. <strong>SYSLIB</strong>$1 Entry Points<br />

Element Name Relocatable Entry Point Common Bank Entry Point<br />

CRELAD$ (cont.) FHT$ CBFHT$<br />

GETPSF$ GETPSFN$ CBGETPSFN$<br />

GETPSF$ CBGETPSF$<br />

ID$ ID$ CBID$<br />

INFOR$ DUSE$ CBDUSE$<br />

RINF$ CBRINF$<br />

SELT$ CBSELT$<br />

SINF$ CBSINF$<br />

SFDT$ SFDT$ CBSFDT$<br />

STARTSFDT$ CBSTARTSFDT$<br />

Table E–2 lists the routines and entry points for <strong>SYSLIB</strong> common bank <strong>SYSLIB</strong>$2.<br />

Table E–2. <strong>SYSLIB</strong>$2 Entry Points<br />

Element Name Relocatable Entry Point Common Bank Entry Point<br />

MFDSP$ MFDSP$ CBMFDSP$<br />

E–4 7833 1733–004


<strong>SYSLIB</strong> Common Bank Entry Points<br />

Table E–3 lists the routines and entry points for <strong>SYSLIB</strong> common bank <strong>SYSLIB</strong>$3.<br />

Table E–3. <strong>SYSLIB</strong>$3 Entry Points<br />

Element Name Relocatable Entry<br />

Point<br />

FDASC$ ASCFD$ CBASCFD$<br />

FDASC$ CBFDASC$<br />

Common Bank Entry Point<br />

SAR$ATREAD$G SAR$ATR$PG CBSAR$ATR$PG<br />

SAR$INATR$PG CBSAR$INATR$<br />

SAR$RSATR$PG CBSAR$RSATR$<br />

SAR$COM$G SAR$COM$PG CBSAR$COM$PG<br />

SAR$READ$G SAR$CLOSI$PG CBSAR$CLOSI$<br />

SAR$OPENI$PG CBSAR$OPENI$<br />

SAR$READ$PG CBSAR$READ$P<br />

SDFI SDFIC$ CBSDFIC$<br />

SDFINT$ CBSDFINT$<br />

SDFIOA$ CBSDFIOA$<br />

SDFIO$ CBSDFIO$<br />

SDFI$ CBSDFI$<br />

Table E–4 lists the routines and entry points for <strong>SYSLIB</strong> common bank <strong>SYSLIB</strong>$4.<br />

Table E–4. <strong>SYSLIB</strong>$4 Entry Points<br />

Element Name Relocatable Entry Point Common Bank Entry Point<br />

SAR$WRITE$G SAR$CLOSO$PG CBSAR$CLOSO$<br />

SAR$OPENO$PG CBSAR$OPENO$<br />

SAR$WCNTL$PG CBSAR$WCNTL$<br />

SAR$WRITE$PG CBSAR$WRITE$<br />

SDFO SDFOC$ CBSDFOC$<br />

SDFOOSF$ CBSDFOOSF$<br />

SDFOO$ CBSDFOO$<br />

SDFO$ CBSDFO$<br />

7833 1733–004 E–5


<strong>SYSLIB</strong> Common Bank Entry Points<br />

E–6 7833 1733–004


Appendix F<br />

Interface to Selected Extended Mode<br />

Executive Requests<br />

This appendix describes an interface from Extended Mode Object Modules (EMOM) to a<br />

small subset of basic mode Executive requests (ER). The interface allows a MASM<br />

program executing in Extended Mode (as an object module) to perform selected ERs.<br />

The purpose of this interface is to provide the EMOM programmer with a way to dump<br />

data and perform simple symbiont requests. This is a temporary solution only, provided<br />

for the EMOM programmer’s convenience until the Exec callable interfaces are available.<br />

To use this interface, the MASM program uses PROCs to execute ERs. These PROCs<br />

save the contents of all registers they use (including B-registers), jump to a basic mode<br />

<strong>SYSLIB</strong> common bank (<strong>SYSLIB</strong>$1), execute the ER, return to the EMOM, and restore<br />

the contents of registers they use. These PROCs are contained in the omnibus element<br />

EM2CB$P, which must be obtained by the MASM ‘$INCLUDE’ directive. The element<br />

EM2CB$P is contained in the <strong>SYSLIB</strong> product file. No file name is necessary on the<br />

$INCLUDE directive if <strong>SYSLIB</strong> is installed using the default product file name<br />

SYS$LIB$*<strong>SYSLIB</strong>.<br />

This interface requires MASM level 4R2 (or later) and Exec level 40R1 (or later).<br />

F.1. Calling Sequence<br />

The EM to ER interface PROCs in element EM2CB$P call the EM$ERS routine in the<br />

<strong>SYSLIB</strong> common bank. The following ERs may be performed by calling these PROCs:<br />

APRINT$ PRINT$ SNAP$<br />

AREAD$ READ$ TREAD$<br />

ATREAD$<br />

7833 1733–004 F–1


Interface to Selected Extended Mode Executive Requests<br />

Calling Sequence<br />

EM$xxxxx pkt,b-reg<br />

Parameters<br />

xxxxx<br />

pkt<br />

b-reg<br />

The ER mnemonic to be performed; READ, AREAD, PRINT, APRINT, TREAD,<br />

ATREAD, or SNAP.<br />

The label (18-bit offset from zero) of the packet generated by the appropriate<br />

EM$xxxxPKT PROC.<br />

The B-register of the bank containing the packet generated by the appropriate<br />

EM$xxxxPKT PROC.<br />

Each EM$xxxxx PROC call switches to a basic mode bank, performs the ER, and<br />

switches back to the extended mode bank.<br />

F.2. Packet Generation<br />

The PROCs in the following subsections generate the required packets for the Extended<br />

Mode interfaces to ERs.<br />

F.2.1. EM$READPKT<br />

The EM$READPKT PROC generates the packet for the EM$READ and EM$AREAD<br />

PROCs.<br />

Calling Sequence<br />

label EM$READPKT buffer<br />

or<br />

label EM$AREADPKT buffer<br />

Parameters<br />

buffer<br />

The address (18-bit offset from zero) of the buffer into which the image will be read.<br />

The buffer parameter may be set at execution time, and is located at word 2 of the<br />

packet (packet address + 1).<br />

F–2 7833 1733–004


Interface to Selected Extended Mode Executive Requests<br />

The buffer must be either in the same bank that contains the packet or in a bank that is<br />

based on B15 when EM$READ or EM$AREAD is called.<br />

The status word from the ER READ$/AREAD$ is returned in word 3 of the packet<br />

(packet address + 2). S2 of word 3 contains an EOF flag; a nonzero value indicates an<br />

end-of-file condition. S1 of word 3 contains the bit settings returned from the ER<br />

READ$/AREAD$ request (bits 35 to 30). H2 of word 3 contains the number of words<br />

read by EM$READ/EM$AREAD into the buffer. The buffer is not space filled if the<br />

length of the image read is shorter than the length of the buffer.<br />

F.2.2. EM$PRINTPKT<br />

The EM$PRINTPKT PROC generates the packet for the EM$PRINT and EM$APRINT<br />

PROCs.<br />

Calling Sequence<br />

label EM$PRINTPKT buf,len[,linespa]<br />

or<br />

label EM$APRINTPKT buf,len[,linespa]<br />

Parameters<br />

buf<br />

len<br />

linespa<br />

The address (18-bit offset from zero) of the buffer containing the image to be<br />

printed.<br />

The word length of the image to be printed.<br />

The line spacing for the image to be printed (if omitted, the default is one).<br />

The buf, len, and linespa parameters may also be set at execution time. The buf<br />

parameter is located at word 3 of the packet (packet address + 2). The len parameter is<br />

located at S3 of word 2 of the packet, and the linespa parameter is located at T1 of word<br />

2.<br />

The buffer must be in either the same bank that contains the packet or in a bank that is<br />

based on B15 when EM$PRINT or EM$APRINT is called.<br />

7833 1733–004 F–3


Interface to Selected Extended Mode Executive Requests<br />

F.2.3. EM$TREADPKT<br />

The EM$TREADPKT PROC generates the packet for the EM$TREAD and EM$ATREAD<br />

PROCs.<br />

Calling Sequence<br />

label EM$TREADPKT outbuf,len,linespa,inbuf<br />

or<br />

label EM$ATREADPKT outbuf,len,linespa,inbuf<br />

Parameters<br />

outbuf<br />

len<br />

linespa<br />

inbuf<br />

The address (18-bit offset from zero) of the buffer containing the image to be<br />

printed.<br />

The word length of the image to be printed.<br />

The line spacing for the image to be printed (if omitted, the default is one).<br />

The address (18-bit offset from zero) of the buffer to read the input image into.<br />

The outbuf, len, linespa, and inbuf parameters may also be set at execution time.<br />

The outbuf parameter is located at word 3 of the packet (packet address + 2). The len<br />

parameter is located at S3 of word 2 of the packet, and the linespa parameter is located<br />

at T1 of word 2. The inbuf parameter is located at word 4 of the packet.<br />

The buffers must be in either the same bank that contains the packet or in a bank that is<br />

based on B15 when EM$TREAD or EM$ATREAD are called.<br />

The status word from ER TREAD$/ATREAD$ is returned in word 5 (packet address + 4)<br />

of the packet. S2 of word 5 contains an EOF flag; a non-zero value indicates an end-offile<br />

condition. S1 of word 5 contains the bit settings returned from the ER<br />

READ$/AREAD$ request (bits 35 to 30). H2 of word 5 contains the number of words<br />

read by EM$READ/EM$AREAD into the input buffer. The input buffer is not space filled<br />

if the length of the image read is shorter that the length of the input buffer.<br />

F–4 7833 1733–004


F.2.4. EM$SNAPPKT<br />

Interface to Selected Extended Mode Executive Requests<br />

The EM$SNAPPKT PROC generates the packet for the EM$SNAP PROC.<br />

Calling Sequence<br />

label EM$SNAPPKT snap-id,xar,len,address<br />

Parameters<br />

snap-id<br />

xar<br />

len<br />

address<br />

The snapshot identifier, from 1 to 6 characters (in quotes).<br />

The bits identifying which registers to dump (same as for L$SNAP PROC).<br />

The number of words to dump.<br />

The address (18-bit offset from zero) to start dumping words from.<br />

All of the parameters may also be set at execution time. The snap-id parameter is<br />

located at word 2 of the packet (packet address + 1). The xar parameter is located in bits<br />

35 to 33 of word 3 of the packet. The len and address parameters are located in bits 32<br />

to 18 and in H2 of word 3, respectively.<br />

The dump address must be in either the same bank that contains the packet or in a bank<br />

that is based on B15 when EM$SNAP is called.<br />

The value given for address must be greater than the highest address of the <strong>SYSLIB</strong>$1<br />

common bank rounded up to the next highest 01000. The highest address of the<br />

<strong>SYSLIB</strong>$1 common bank is given in Table D–2. This is necessary because common bank<br />

<strong>SYSLIB</strong>$1 is based to perform the ER SNAP$ and any address to be dumped that<br />

overlaps the <strong>SYSLIB</strong>$1 address limits will give incorrect results.<br />

7833 1733–004 F–5


Interface to Selected Extended Mode Executive Requests<br />

F.3. Example<br />

The following example uses the EM$APRINT PROC to print a line of ASCII characters<br />

from an EMOM:<br />

$ASCII<br />

$EXTEND<br />

$OBJ<br />

$INCLUDE ‘MAXR$’<br />

$INCLUDE ‘OM$DEF’<br />

$INCLUDE ‘EM2CB$P’<br />

.<br />

OM$USE_LV LVBANK,,B2<br />

.<br />

$(0) $BANK OM$DATA_EMB,050000 ‘DBA . EM data bank<br />

DSTART<br />

APRTPKT EM$APRINTPKT APRTBUF,APRTBUFL . Packet<br />

APRTBUF ‘Print an ASCII line.’ . ASCII image to print<br />

APRTBUFL $EQU $-APRTBUF . Word length<br />

.<br />

$(1) $BANK OM$CODE_EMB,01000 ‘IBANK’ . EM code bank<br />

START$*<br />

LBU B2,R0 . Load Link Vector<br />

bank<br />

. virtual address into<br />

B2<br />

OM$LOAD_BDR B3,DSTART,,B2 . Base data bank on B3<br />

.<br />

EM$APRINT APRTPKT,B3 . Print ASCII start<br />

line<br />

.<br />

RTN . Program completed<br />

$END<br />

In this example, the EM$APRINTPKT PROC generates the packet for the EM$APRINT<br />

PROC. The ASCII line to be printed is at label APRTBUF. The data bank containing the<br />

image and the packet is based on B3. The EM$APRINT PROC performs the ER<br />

APRINT$.<br />

F–6 7833 1733–004


Appendix G<br />

INFOR Information<br />

When a program is executed as a processor, the OS 2200 Exec converts the processor<br />

call statement into internal format (INFOR) and supplies it as input data to the first<br />

symbiont read operation performed by the program.<br />

Note: This conversion occurs only for programs that are executed as a processor<br />

(@program) and not for programs executed with the @XQT control statement (@XQT<br />

program).<br />

G.1. INFOR Identifiers for Processor Call Statement<br />

The following diagram shows the general format of a processor call statement and the<br />

parts that are identified by INFOR.<br />

INFOR identifies the processor,options part of the processor call statement as field type<br />

0. This is referred to as the command field. It is composed of field 1 and the option<br />

field. The field?1, field?2, ...,field?n part of the call statement is identified as field type 1<br />

and is referred to as the specification field. It is composed of a variable number of<br />

fields. INFOR does not include the label field and comment field of the processor call<br />

statement.<br />

Note: In other Unisys documents, the command field may be referred to as the<br />

processor field or operation field. The specification field may be referred to as the<br />

operand field, parameter operand, or parameter field.<br />

7833 1733–004 G–1


INFOR Information<br />

A field in the processor call statement contains information that conforms to the syntax<br />

conventions of a file name or element name, as specified in the Executive Control<br />

Language (ECL) and FURPUR <strong>Reference</strong> <strong>Manual</strong>. The format of the standard<br />

filename.eltname notation consists of 8 parts. The following diagram shows how these<br />

parts are identified by INFOR.<br />

INFOR identifies each part of the filename.eltname in a field by its assigned subfield<br />

number. For example, the filename is always identified as subfield number 2, and<br />

eltname is always identified as subfield number 6. The character data contained within<br />

the subfield is referred to as the symbolic subfield.<br />

G–2 7833 1733–004


G.2. The INFOR Table<br />

The format of the INFOR table is as follows:<br />

INFOR Information<br />

7833 1733–004 G–3


INFOR Information<br />

Word 0<br />

Bits 0–9<br />

Type<br />

Control statement type number. If these 10 bits are placed right-justified and<br />

zero-filled in a 36-bit word, the result value indicates the following:<br />

0051 The INFOR table is for a processor call.<br />

0100 The INFOR table is for a FURPUR statement.<br />

Note: In an octal dump of word 0, the 4 leftmost octal digits would be 0244 if the<br />

INFOR table is for a processor call and the A and B options were not<br />

specified.<br />

Bits 10–35<br />

Options<br />

These 26 bits are master bits representing the options that were specified in the<br />

option field of the processor call statement. Bit 10 is set if A was specified, bit<br />

11 is set if B was specified, ..., bit 35 is set if Z was specified.<br />

Note: The option field has no field number associated with it and has no subfield<br />

descriptions generated for it.<br />

Subfield Description<br />

This is an entry of 2 or 3 words consisting of the following parts:<br />

• Subfield control word<br />

• Symbolic subfield<br />

There is one subfield description for each subfield that was specified in the processor<br />

call statement.<br />

G–4 7833 1733–004


Subfield Control Word<br />

The following 1-word entry provides information about the subfield.<br />

Bits 0–5<br />

Field Type (FT)<br />

Bits 6–11<br />

INFOR Information<br />

Indicates whether the subfield is in the command field or in the specification<br />

field. The possible values are<br />

0 Command field<br />

1 Specification field<br />

Field Number (FN)<br />

Bits 12–17<br />

The field number (within the field type) that contains the subfield. In the<br />

processor call statement, fields are numbered beginning with 1, left to right, and<br />

are separated by commas. The highest field number is 63. If more than 63<br />

fields are entered in the processor call statement, the 64th and following fields<br />

are numbered beginning with 1.<br />

Subfield Number (SFN)<br />

Identifies which part of the filename.eltname notation is being described by the<br />

subfield. The possible values are<br />

1 File qualifier<br />

2 File name<br />

3 File cycle<br />

4 Read key<br />

5 Write key<br />

6 Element name<br />

7 Version name<br />

8 Element cycle<br />

7833 1733–004 G–5


INFOR Information<br />

Bits 18–23<br />

File Continuation Indicator (FCI)<br />

Bits 24–29<br />

The possible values are<br />

075 The Fieldata code for the period (.) character. This value indicates that<br />

the subfield is the first one of the field, and the field contains a leading<br />

period.<br />

000 Value used for all other cases.<br />

Character Count (CC)<br />

Bits 30–35<br />

A value in the range 1 to 6. The character count indicates the number of<br />

characters in the last word of the symbolic subfield.<br />

Word Count (WC)<br />

A value of 1 or 2. The word count indicates the number of words in the<br />

symbolic subfield of the subfield description.<br />

Symbolic Subfield<br />

This is the character data that was entered for the subfield in the processor call<br />

statement. It is a Fieldata character string that uses either 1 or 2 words as indicated by<br />

the WC value. Each word can contain up to 6 characters. The number of characters in<br />

the symbolic subfield can be calculated using the following formula:<br />

6 * (WC - 1) + CC<br />

The characters are left-justified, and the unused rightmost character positions in the last<br />

word are space-filled.<br />

G–6 7833 1733–004


INFOR Information<br />

The range for number of characters and number of words in the symbolic subfield is as<br />

follows:<br />

SFN Subfield Name Number of Characters Number of Words<br />

1 File qualifier 1 to 12 1 or 2<br />

2 File name 1 to 12 1 or 2<br />

3 File cycle 1 to 3 1<br />

4 Read key 1 to 6 1<br />

5 Write key 1 to 6 1<br />

6 Element name 1 to 12 1 or 2<br />

7 Version name 1 to 12 1 or 2<br />

8 Element cycle 1 to 3 1<br />

G.3. INFOR Table Conventions<br />

The following conventions are used when generating the INFOR data:<br />

• Except for one special situation, a subfield description is generated only if symbolic<br />

subfield information has been entered for that subfield number in the processor call<br />

statement. The exception is if a field in the processor call statement contains a file<br />

name with a leading asterisk (*) character. For this situation, a subfield description is<br />

generated as if a qualifier of 12 spaces had been entered in that field in the<br />

processor call statement.<br />

• If a field in the processor call statement contains a leading period, the first subfield<br />

description generated for the field will contain a value of 075 in the FCI part of the<br />

subfield control word.<br />

• If the symbolic information in the processor call statement uses a character type<br />

other than Fieldata, it is first translated into Fieldata before being put in the INFOR<br />

table. For example, if lowercase ASCII characters are entered in the processor call<br />

statement, the symbolic subfields in the INFOR table will contain the corresponding<br />

uppercase characters in Fieldata.<br />

• If a processor call statement is continued onto more than one line using the<br />

semicolon (;), the INFOR is generated as if the call statement were on one line.<br />

7833 1733–004 G–7


INFOR Information<br />

G.4. INFOR Table Example<br />

Assume that the following processor call statement is entered to execute program.abs<br />

with c and z options and 3 fields in the specification field.<br />

The following octal word would be generated for word 0 of INFOR:<br />

024440000001<br />

The following subfield descriptions would be generated in the INFOR table:<br />

Field 1 of command field<br />

FT FN SFN FCI CC WC Symbolic Subfield<br />

00 01 02 00 01 02 PROGRAM∆∆∆∆∆<br />

00 01 06 00 03 01 ABS∆∆∆<br />

Field 1 of specification field<br />

FT FN SFN FCI CC WC Symbolic Subfield<br />

01 01 01 00 06 02 ∆∆∆∆∆∆∆∆∆∆∆∆<br />

01 01 02 00 05 01 FILE1∆<br />

01 01 05 00 06 01 WRTKEY<br />

01 01 06 00 04 01 ELT1∆∆<br />

01 01 010 00 01 01 1∆∆∆∆∆<br />

Field 2 of specification field<br />

No subfield descriptions are generated because the field contains only subfield<br />

separators and no symbolic subfield information.<br />

Field 3 of specification field generates 23 words of INFOR<br />

FT FN SFN FCI CC WC Symbolic Subfield<br />

01 03 06 075 06 02 ELEMENTNAME3<br />

01 03 07 00 02 02 VERSION3∆∆∆∆<br />

G–8 7833 1733–004


G.5. Reading the INFOR Table<br />

INFOR Information<br />

The INFOR data is supplied as input data to the first symbiont read operation performed<br />

by the program. The program issues an ER AREAD$, ER READ$, or ER SYMB$<br />

(READ$ function) with a buffer size of at least 27 words specified. The INFOR data is<br />

received in blocks of 27 words or less. Only full subfield descriptions are put in the<br />

block. If a subfield description does not fit within the last words of the block, it is put in<br />

the next block.<br />

Upon return from the read, register A0 contains the following information:<br />

Bit 4 This bit is set if the data transferred into the buffer is INFOR data.<br />

Bit 5 This bit is set if more INFOR data needs to be read.<br />

Bits 18–35 These bits specify the number of words transferred into the buffer.<br />

Notes:<br />

• If the program issues a read command that specifies a buffer size less than 27<br />

words, INFOR data may be transferred into the area beyond the end of the buffer.<br />

• The <strong>SYSLIB</strong> and the SLIB service libraries provide INFOR routines to read the INFOR<br />

table, to search it, and to transfer data from it to other tables. See the SLIB<br />

<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

G.6. Determining the INFOR Table Size<br />

If a program intends to read the entire INFOR table into memory, the size of the memory<br />

area needed to hold the INFOR table can be determined by adding the maximum sizes<br />

needed by the various types of information that are put in the table.<br />

1 Word 0 of INFOR table<br />

+ 18 Words needed for field 1 of the command field if it contains a<br />

fully specified file name and element name.<br />

+ 20*n<br />

————<br />

sum<br />

n is the number of fields that the program expects in the<br />

specification field. Multiply n by 20, which is the number of<br />

words needed by each field if it contains a fully specified file<br />

name and element name.<br />

The sum above is the maximum size of the INFOR table.<br />

7833 1733–004 G–9


INFOR Information<br />

G–10 7833 1733–004


Appendix H<br />

ASCII-like Character Sets<br />

Table H–1 indicates which character sets are ASCII-like. ASCII-like character sets are<br />

those that are essentially identical to the ASCII/ISO character set in the range of values<br />

from 0000 to 0177. Where ASCII-like character sets differ from ASCII/ISO in the 0000<br />

through 0177 range, the difference must be minor. For example, a character set that<br />

replaces the U.S. dollar sign with a British pound sign is ASCII-like because both are<br />

currency symbols.<br />

Table H–1. Character Set Types<br />

Name Octal Code Character Set Description ASCII-like<br />

Fieldata 000 Fieldata character set<br />

ASCII_ISO 001 ASCII/ISO character set. The data is expected<br />

to be in the United States variant of ISO 646.<br />

Historically, however, this value has also been<br />

used to indicate any quarter-word character<br />

set (in contrast to sixth-word Fieldata).<br />

ASCII_APL 002 ASCII/APL character set Yes<br />

EBCDIC 003 Extended Binary Coded Decimal Interchange<br />

Code (EBCDIC)<br />

Binary 004 Raw binary<br />

Untyped 005 Untyped data, or application-dependent data<br />

Column_Binary 006 Column binary format character set<br />

OIAP 007 Reserved for use by the operating system.<br />

Customer_Reserved 010-015 Reserved for customer use. These characters<br />

are assumed to be ASCII-like.<br />

Hangul 016 Hangul character set<br />

Hanzi 017 Hanzi character set<br />

Kanji 020 JIS-16 18-bit kanji format character set<br />

ISO_646_US 021 United States variant of ISO 646 Yes<br />

ISO_646_Nor_Den 022 Norway/Denmark variant of ISO 646 Yes<br />

ISO_646_France 023 French variant of ISO 646 Yes<br />

ISO_646_Germany 024 German variant of ISO 646 Yes<br />

ISO_646_UK 025 United Kingdom variant of ISO 646 Yes<br />

7833 1733–004 H–1<br />

Yes<br />

Yes


ASCII-like Character Sets<br />

Table H–1. Character Set Types<br />

Name Octal Code Character Set Description ASCII-like<br />

ISO_646_Italy 026 Italian variant of ISO 646 Yes<br />

ISO_646_Spain 027 Spanish variant of ISO 646 Yes<br />

ISO_646_Sweden 030 Swedish variant of ISO 646 Yes<br />

ISO_646_Finland 031 Finnish variant of ISO 646 Yes<br />

ISO_646_Canada 032 Canadian variant of ISO 646 Yes<br />

ISO_646_Netherlands 033 Netherlands variant of ISO 646 Yes<br />

ISO_646_Portugal 034 Portuguese variant of ISO 646 Yes<br />

ISO_Reserved 035-040 Reserved for future definition of ISO character<br />

sets.<br />

Customer_Reserved 041-042 Reserved for customer use. These character<br />

sets can be defined in any way required by the<br />

customer, but ECL commands cannot be<br />

entered using them. They are treated as not<br />

ASCII-like.<br />

ISO_8859_1 043 ISO 8859.1 character set (Latin 1) Yes<br />

ISO_8859_2 044 ISO 8859.2 character set (Latin 2) Yes<br />

ISO_8859_3 045 ISO 8859.3 character set (Latin 3) Yes<br />

ISO_8859_4 046 ISO 8859.4 character set (Latin 4) Yes<br />

ISO_8859_5 047 ISO 8859.5 character set (Latin/Cyrillic) Yes<br />

ISO_8859_6 050 ISO 8859.6 character set (Latin/Arabic) Yes<br />

ISO_8859_7 051 ISO 8859.7 character set (Latin/Greek) Yes<br />

ISO_8859_8 052 ISO 8859.8 character set (Latin/Hebrew) Yes<br />

ISO_8859_9 053 ISO 8859.9 character set (Latin 5) Yes<br />

ISO_8859_10 054 ISO 8859.10 character set (box drawing set) Yes<br />

French_Arabic 055 French/Arabic character set Yes<br />

Japan_ISO_3 056 Katakana character set Yes<br />

BICS 057 BICS character set Yes<br />

ISO_Reserved 060-062 Reserved for a future definition of ISO<br />

character sets.<br />

General_Reserved 063-075 Reserved for arbitrary future use. Assumed to<br />

be not ASCII-like.<br />

H–2 7833 1733–004<br />

Yes<br />

Yes


Table H–1. Character Set Types<br />

ASCII-like Character Sets<br />

Name Octal Code Character Set Description ASCII-like<br />

Alternate_Location 076 Reserved for future use. This code indicates<br />

that the user must look in an alternate location<br />

for the actual code type.<br />

This code is not supported; its use results in<br />

an error.<br />

ACD 077 Attributed character data (ACD) format<br />

character set.<br />

7833 1733–004 H–3


ASCII-like Character Sets<br />

H–4 7833 1733–004


Appendix I<br />

Extended Mode Interface to <strong>SYSLIB</strong><br />

I.1. General<br />

Some <strong>SYSLIB</strong> routines can be called from Extended Mode Object Modules (EMOM)<br />

written in MASM. This is accomplished by interfacing from extended mode banks to the<br />

<strong>SYSLIB</strong> basic mode common banks. This appendix describes how to use the interface.<br />

For complete information on how to use each routine, see the corresponding sections in<br />

this manual.<br />

The following <strong>SYSLIB</strong> routines may be called from EMOMs with this interface:<br />

• AEDIT$ package<br />

• BSP$<br />

• FDASC$<br />

• GETPSF$<br />

• ID$<br />

• INFOR$<br />

• MFDSP$<br />

Each <strong>SYSLIB</strong> routine has a MASM PROC defined to call it, and a MASM PROC defined<br />

to generate a packet for the call. These PROCs are contained in the omnibus element<br />

EM2CB$P, which must be obtained by the MASM ‘$INCLUDE’ directive. The element<br />

EM2CB$P is contained in the <strong>SYSLIB</strong> product file. No file name is necessary on the<br />

$INCLUDE directive if <strong>SYSLIB</strong> is installed using the default product file name<br />

SYS$LIB$*<strong>SYSLIB</strong>.<br />

This interface requires MASM level 4R2 (or higher) and Exec level 40R1 (or higher).<br />

7833 1733–004 I–1


Extended Mode Interface to <strong>SYSLIB</strong><br />

I.2. Interface to the AEDIT$ Package<br />

All of the routines in the AEDIT$ package are called with the EM$EDIT PROC. The<br />

packet for the AEDIT$ package is generated with the EM$EDITPKT PROC.<br />

The EM$EDIT PROC calls the ASCII editing routines in the <strong>SYSLIB</strong> common bank.<br />

Calling Sequence:<br />

EM$EDIT pkt,b-reg [func,param1,param2]<br />

where:<br />

pkt<br />

b-reg<br />

func<br />

The label (18-bit offset from zero) of the packet generated by the EM$EDITPKT<br />

PROC.<br />

The B-register describing the bank containing the packet generated by the<br />

EM$EDITPKT PROC.<br />

The code for which ASCII editing function to perform. See Table I–1 for a list of all<br />

function codes.<br />

param1<br />

The first additional parameter for the EM$EDIT call. This parameter varies<br />

depending on which function code is used. See Table I–2 for a list of first parameter<br />

values.<br />

param2<br />

The second additional parameter for the EM$EDIT call. This parameter varies<br />

depending on which function code is used. See Table I–3 for a list of second<br />

parameter values.<br />

The func, param1, param2 parameters are optional. If they are omitted, EM$EDIT uses<br />

the values contained in registers A1, A2, and A3, respectively. Since the EM$EDIT<br />

PROC does not handle all combinations, either supply all parameters or all registers.<br />

I–2 7833 1733–004


Extended Mode Interface to <strong>SYSLIB</strong><br />

Table I–1 contains the function codes which may be used on the EM$EDIT PROC call.<br />

Table I–1. EM$EDIT Function Codes<br />

Code Description<br />

1 Initialize and enter edit mode.<br />

2 Reenter edit mode without initializing.<br />

3 Terminate edit mode.<br />

4 Print image and terminate edit mode.<br />

5 Insert a character into the image buffer.<br />

6 Clear the image buffer.<br />

7 Move to a column position.<br />

8 Return the current column position.<br />

9 Copy a string into the image buffer.<br />

10 Edit a decimal number with leading zeroes.<br />

11 Edit a decimal number with leading spaces.<br />

12 Edit a decimal number with variable length.<br />

13 Insert one word of ASCII characters into the image buffer.<br />

14 Insert two words of ASCII characters into the image buffer.<br />

15 Begin copying a message to the image buffer.<br />

16 Resume copying a message to the image buffer.<br />

17 Edit an octal number with fixed length.<br />

18 Edit an octal number with variable length.<br />

19 Copy a string to the image buffer but exclude any null characters.<br />

20 Move the column pointer forward.<br />

21 Edit a floating-point number to single-precision fixed-length decimal format.<br />

22 Edit a floating-point number to double-precision fixed-length decimal format.<br />

23 Edit a floating-point number to single-precision generalized format.<br />

24 Edit a floating-point number to double-precision generalized format.<br />

25 Edit a floating-point number to single-precision scientific format.<br />

26 Edit a floating-point number to double-precision scientific format.<br />

27 Place a standard format date and time string in the image buffer.<br />

If the first parameter is an address, it must be in the same bank as the packet generated<br />

by the EM$EDITPK PROC. All addresses are an 18-bit offset from zero.<br />

7833 1733–004 I–3


Extended Mode Interface to <strong>SYSLIB</strong><br />

Table I–2 contains the possible values for the first parameter field. Function codes not<br />

listed in the table do not require a first parameter value.<br />

Table I–2. EM$EDIT First Parameter Field Values<br />

Code Description<br />

4 The line spacing for printing the image<br />

5 The ASCII character to be inserted<br />

7 The column number to move to<br />

9 The address of the string to copy<br />

10, 11, 12 The address of the integer to edit<br />

13, 14 The address of the ASCII characters<br />

15 The address of the string to copy<br />

17, 18 The address of the integer to edit<br />

19 The address of the string to copy<br />

20 The number of columns to move forward<br />

21–26 The address of the floating point number<br />

Table I–3 contains the possible values for the second parameter field. Function codes<br />

not listed in the table do not require a second parameter value.<br />

Table I–3. EM$EDIT Second Parameter Field Values<br />

Code Description<br />

9 The number of characters to copy<br />

10, 11, 17 The length of the field in characters<br />

19 The number of characters to copy<br />

21–26<br />

The field length specification in the format x * /6 + y<br />

where x is the field length in characters and y is the<br />

number of digits following the decimal point<br />

There are no parameters for function code 27. To edit the current date or time, set the<br />

DATE and TIME fields in the packet generated by EM$EDITPKT to zero (default). To edit<br />

a specified date or time, set these fields to the desired TDATE$ or TIME$ values. The<br />

DATE field is word 17 of the packet (packet address + 16), and the TIME field is word 18<br />

of the packet (packet address + 17).<br />

I–4 7833 1733–004


Extended Mode Interface to <strong>SYSLIB</strong><br />

EM$EDIT returns the status of the call to AEDIT$ routines in the packet field CALLSTAT.<br />

The CALLSTAT field is S3 of word 2 of the packet (packet address + 1). The possible<br />

status are:<br />

0 Normal return from the AEDIT$ routine<br />

1 Error return from AEDIT$ (for function code 27 only)<br />

2 Illegal value given for the AEDIT$ function code<br />

EM$EDIT constructs the ASCII image in a buffer contained in the packet generated by<br />

EM$EDITPKT. The address of the first word of the buffer is identified by the<br />

externalized label EM$EDITBUF. The value of EM$EDITBUF is the offset from zero to<br />

the start of the buffer.<br />

Packet Generation<br />

The EM$EDITPKT PROC generates the packet for the Extended Mode interface to the<br />

AEDIT$ routines. This packet is required by the EM$EDIT PROC.<br />

Calling Sequence:<br />

label EM$EDITPKT buflen ['MSG', msg][ 'FPS', fps] :<br />

['FPR', fpr] ['DPC',dpc] ['SPC', spc] :<br />

['DFT', dft] ['TFT',tft] ['SEP', sep]<br />

where:<br />

buflen<br />

The length in words of the data area used to contain the image constructed by<br />

AEDIT$ This buffer is part of the EM$EDITPKT, and the address of the first word is<br />

identified by the label EM$EDITBUF.<br />

msg, fps, fpr, dpc, spc, dft, tft, sep<br />

Optional parameters, as defined in Section 4.<br />

I.3. Interface to BSP$<br />

All of the functions of the BSP$ routine are called with the EM$BSP PROC. The packet<br />

for BSP$ is generated with the EM$BSPPKT PROC.<br />

Calling Sequence:<br />

EM$BSP pkt, b-reg [func,param1,param2]<br />

where:<br />

pkt<br />

The label (18-bit offset from zero) of the packet generated by the EM$BSPPKT<br />

PROC.<br />

7833 1733–004 I–5


Extended Mode Interface to <strong>SYSLIB</strong><br />

b-reg<br />

func<br />

The B-register of the bank containing the packet generated by the EM$BSPPKT<br />

PROC.<br />

The code for which BSP$ function to perform. See Table I–4 for a list of all function<br />

codes.<br />

param1, param2<br />

Additional parameter for some function codes. See Table I–5 for a list of parameter<br />

values. Functions 2 through 6 require one additional parameter. Functions 10 and<br />

11 require two additional parameters.<br />

The func, param1, and param2 parameters are optional. If func is omitted or specified as<br />

0, EM$BSP uses the value contained in register A1.<br />

If the function requires one parameter:<br />

• If param1 is omitted or specified as 0, EM$BSP uses the value contained in register<br />

A2.<br />

• param2 should be omitted.<br />

If the function requires two parameters:<br />

• If param1 is omitted or specified as 0, EM$BSP uses the value contained in register<br />

A2 modifier (bits 18–35).<br />

• If param1 is specified, even as 0, param2 should also be specified.<br />

• If param2 is omitted or specified as 0, EM$BSP uses the value contained in register<br />

A2 increment (bits 0–17).<br />

I–6 7833 1733–004


Extended Mode Interface to <strong>SYSLIB</strong><br />

Table I–4 contains the function codes that may be used on the EM$BSP PROC call.<br />

Table I–4. EM$BSP Function Codes<br />

Code Description<br />

1 Read the file table index (RFTI$).<br />

2 Read a program file table.<br />

3 Search the program file table for an item.<br />

4 Add an item to the program file table.<br />

5 Delete an item from the program file table.<br />

6 Locate an item by its sequence number.<br />

7 Write out the last item referenced.<br />

8 Write out the program file table.<br />

9 Write the file table index back.<br />

10 Change an item in the program file table.<br />

11 Read the file table index (RFTI$$).<br />

12 Mark the last item referenced as updated.<br />

Table I–5 contains the possible values for the parameter field. Function codes not listed<br />

in the table do not require a parameter value.<br />

Table I–5. EM$BSP Parameter Field Values<br />

Code Description<br />

2 The code for which program file table to read:<br />

1 Element table<br />

2 Assembler procedure table<br />

3 COBOL procedure table<br />

4 FORTRAN/PLUS procedure table<br />

5 Entry point table<br />

3 The address of the search packet.<br />

4 The address of the add packet.<br />

5 The address of the delete packet.<br />

6 The sequence number of the item to locate.<br />

10 Param1 is the address of the search packet. Param2 is<br />

the address of the change packet.<br />

11 Param1 is the BSP$ interface level. Param2 is the<br />

program file format for an empty file.<br />

7833 1733–004 I–7


Extended Mode Interface to <strong>SYSLIB</strong><br />

If the parameter is an address, it must be in the same bank as the packet generated by<br />

the EM$BSPPKT PROC. All addresses are an 18-bit offset from zero.<br />

The buffer for file table index (FTI) is contained in the packet generated by the<br />

EM$BSPPKT PROC. The first word of the FTI is identified by the externalized label<br />

EM$FTI. The value of EM$FTI is the offset from zero to the start of the FTI.<br />

EM$BSP returns the status of the call to BSP$ in the packet field CALLSTAT. The<br />

CALLSTAT field is S3 of word 2 of the packet (packet address + 1). The possible status<br />

is<br />

0 Normal return from BSP$<br />

1 Error return from BSP$, error code in field A0SAVE<br />

2 Illegal value given for the BSP$ function code<br />

3 Illegal value given for the table type (TBLTYPE field)<br />

For CALLSTAT codes 0 and 1, the contents of registers A0, A1, and A2 from BSP$ are<br />

returned in packet fields A0SAVE, A1SAVE, and A2SAVE, respectively. These fields are<br />

at words 3, 4, and 5 of the packet.<br />

Packet Generation<br />

The EM$BSPPKT PROC generates the packet for the Extended Mode interface to BSP$.<br />

This packet is required for the EM$BSP PROC.<br />

Calling Sequence:<br />

label EM$BSPPKT buflen [,filename]<br />

where:<br />

buflen<br />

The word length of the buffer used to hold the program file table. The length should<br />

be 28*(5+4n), where n is a positive integer. The minimum length is 252 words. For<br />

maximum efficiency, the buffer length should be large enough to contain the entire<br />

table, including the size of entries to be added.<br />

filename<br />

The12-Fieldata-character internal file name of the file to be accessed (in quotes).<br />

This parameter is optional; if omitted, the caller must place the internal file name at<br />

location EM$FTI (an externalized label from this PROC).<br />

The packet generated by the EM$BSPPKT PROC contains the buffers for the FTI and the<br />

program file tables. It is not necessary to allocate additional space for them.<br />

I–8 7833 1733–004


I.4. Interface to FDASC$<br />

Extended Mode Interface to <strong>SYSLIB</strong><br />

The FDASC$ routine is called with the EM$FDASC PROC. The packet for the FDASC$<br />

routine is generated with the EM$FDASCPKT PROC.<br />

The EM$FDASC PROC calls the FDASC$ routine in the <strong>SYSLIB</strong> common bank.<br />

Calling Sequence:<br />

EM$FDASC pkt,b-reg [func]<br />

where:<br />

pkt<br />

b-reg<br />

func<br />

The label (18-bit offset from zero) of the packet gnerated by the EM$FDASCPKT<br />

PROC.<br />

The b-register of the bank containing the packet generated by the EM$FDASCPKT<br />

PROC.<br />

The code for which FDASC$ function to perform:<br />

1 Convert a Fieldata image to ASCII<br />

2 Convert an ASCII image to FIeldata<br />

The func parameter is optional. If it is omitted, EM$FDASC uses the value contained in<br />

register A1.<br />

EM$FDASC performs character set translation on Fieldata and ASCII images. The caller<br />

must place the image to be transferred in the input buffer, and EM$FDASC returns the<br />

translated image in the output buffer. The input and output buffers must be specified in<br />

the packet generated by the EM$FDASCPKT PROC.<br />

EM$FDASC returns the status of the call to FDASC$ in the packet field CALLSTAT. The<br />

CALLSTAT field is S3 of word 2 of the packet (packet address + 1). The possible status<br />

is<br />

0 Normal return from FDASC$<br />

1 Illegal value given for the FDASC$ function code<br />

If the normal return is taken, EM$FDASC returns the word length of the converted<br />

image in H2 of word 3 of the packet (packet address + 2).<br />

7833 1733–004 I–9


Extended Mode Interface to <strong>SYSLIB</strong><br />

Packet Generation<br />

The EM$FDASCPKT PROC generates the packet for the Extended Mode interface to<br />

FDASC$. This packet is required for the EM$%FDASC PROC.<br />

Calling Sequence:<br />

label EM$FDASCPKT len,inbuf,outbuf<br />

where:<br />

len<br />

inbuf<br />

outbuf<br />

The word length of the input buffer.<br />

The label (18-bit offset from zero) of the input buffer.<br />

The label (18-bit offset from zero) of the output buffer.<br />

The input buffer and output buffer must be in the same bank as the packet generated by<br />

the EM$FDASCPKT PROC.<br />

I.5. Interface to GETPSF$<br />

The GETPSF$ routine is called with the EM$GETPSF PROC. The packet for the<br />

GETPSF$ routine is generated with the EM$GETPSFPKT PROC.<br />

Calling Sequence<br />

EM$GETPSF pkt,b-reg [func,param]<br />

where:<br />

pkt<br />

b-reg<br />

The label (18-bit offset from zero) of the packet generated by the EM$GETPSFPKT<br />

PROC.<br />

The B-register of the bank containing the packet generated by the EM$GETPSFPKT<br />

PROC.<br />

I–10 7833 1733–004


func<br />

param<br />

The code for which GETPSF$ function to perform:<br />

1 Assign n program scratch files<br />

2 Assign a specific program scratch file<br />

An additional parameter for the following function codes:<br />

1 The number of files requested (from 1 to 10)<br />

2 The number of the specific file requested<br />

Extended Mode Interface to <strong>SYSLIB</strong><br />

The func and param parameters are optional. If they are omitted, EM$GETPSF uses the<br />

values contained in registers A1 and A2, respectively.<br />

EM$GETPSF returns the status of the call to GETPSF$ in the packet field CALLSTAT.<br />

The CALLSTAT field is S3 of word 2 of the packet (packet address + 1). The possible<br />

status is<br />

0 Normal return from GETPSF$<br />

1 Error return from GETPSF$, error code in field A0SAVE<br />

2 Illegal value given for the GETPSF$ function code<br />

For CALLSTAT codes 0 and 1, the contents of registers A0, A1, and A2 from GETPSF$<br />

are returned in packet fields A0SAVE, A1SAVE, and A2SAVE, respectively. These fields<br />

are at words 3, 4, and 5 of the packet.<br />

Packet Generation<br />

EM$GETPSFPKT generates the 18-word packet for the Extended Mode interface to<br />

GETPSF$. This packet is required for the EM$GETPSF PROC.<br />

Calling Sequence<br />

label EM$GETPSFPKT<br />

There are no parameters for the EM$GETPSFPKT PROC.<br />

7833 1733–004 I–11


Extended Mode Interface to <strong>SYSLIB</strong><br />

I.6. Interface to ID$<br />

The ID$ routine is called with the EM$ID PROC. The packet for the ID$ routine is<br />

generated with the EM$IDPKT PROC.<br />

EM$ID$ calls the ID$ routine in the <strong>SYSLIB</strong> common bank.<br />

Calling Sequence:<br />

EM$ID pkt,b-reg<br />

where:<br />

pkt<br />

b-reg<br />

The label (18-bit offset from zero) of the packet generated by the EM$IDPKT PROC.<br />

The B-register of the bank containing the packet generated by the EM$IDPKT PROC.<br />

This must be the beginning of the bank that contains the packet (in other words, no<br />

subsetting).<br />

Packet Generation:<br />

The EM$IDPKT PROC generates the packet for the Extended Mode interface to ID$.<br />

This packet is required by the EM$ID PROC.<br />

Calling Sequence:<br />

If idbuf or hdrbuf are used, they must be in the same bank as the packet.<br />

I–12 7833 1733–004


I.7. Interface to INFOR$<br />

Extended Mode Interface to <strong>SYSLIB</strong><br />

The INFOR$ routine is called with the EM$INFOR PROC. The packet for the INFOR$<br />

routine is generated with the EM$INFORPKT PROC.<br />

The EM$INFOR PROC calls the INFOR$ routine in the <strong>SYSLIB</strong> common bank.<br />

Calling Sequence:<br />

EM$INFOR pkt,b-reg [func,param]<br />

where:<br />

pkt<br />

b-reg<br />

func<br />

param<br />

The label (18-bit offset from zero) of the packet generated by the EM$INFORPKT<br />

PROC.<br />

The B-register of the bank containing the packet generated by the EM$INFORPKT<br />

PROC.<br />

The code for which INFOR$ function to perform. See Table I–6 for a list of possible<br />

function codes.<br />

An additional parameter for some function codes. See Table I–7 for a list of possible<br />

parameter values.<br />

The func and param parameters are optional; if they are omitted, EM$INFOR uses the<br />

values contained in registers A1 and A2 (and A3 for function code 4), respectively.<br />

Table I–6 contains the function codes that may be used in the EM$INFOR PROC call.<br />

Table I–6. EM$INFOR Function Codes<br />

Code Description<br />

1 Read the INFOR table (RINF$).<br />

2 Search INFOR for a specification subfield (SINF$).<br />

3 Transfer a field to the ELT$ table (SELT$).<br />

4 Dynamically attach a use name to a file (DUSE$).<br />

7833 1733–004 I–13


Extended Mode Interface to <strong>SYSLIB</strong><br />

Table I–7 contains the possible values for the additional parameter field. Function codes<br />

not listed in the table do not require an additional parameter value.<br />

Table I–7. EM$INFOR Additional Parameter Field<br />

Values<br />

Code Description<br />

2 The specification field in the format ftfuss, where:<br />

ft field type<br />

fn field number<br />

ss subfield number<br />

3 The subfield notation in the format ftfu, where:<br />

ft field type<br />

fn field number<br />

4 The use name to attach to the file (1 to 12 Fieldata<br />

characters in quotes)<br />

EM$INFOR returns the status of the call to INFOR$ in the packet field CALLSTAT.<br />

The CALLSTAT field is S3 of word 2 of the packet (packet address + 1). The possible<br />

status is<br />

0 Normal return from INFOR$<br />

1 Error return from INFOR$, error code in field A1SAVE<br />

2 Illegal value given for the INFOR$ function code<br />

The contents of registers A0, A1, A2, and A3 from INFOR$ are returned in packet fields<br />

A0SAVE, A1SAVE, A2SAVE, and A3SAVE, respectively. These fields are at words 3, 4,<br />

5, and 6 of the packet.<br />

Packet Generation:<br />

The EM$INFORPKT PROC generates the packet for the Extended Mode interface to<br />

INFOR$. This packet is required by the EM$INFOR PROC. EM$INFORPKT also<br />

generates the externalized labels INFOR$, FILE$, and ELT$. The value of each label is<br />

the offset from zero to the first word of the data entity.<br />

Calling Sequence:<br />

label EM$INFORPKT tbllen<br />

where tbllen is the word length of the INFOR table; the minimum size is 28 words.<br />

I–14 7833 1733–004


Extended Mode Interface to <strong>SYSLIB</strong><br />

The buffer to hold the INFOR table is contained within the packet generated by the<br />

EM$INFORPKT PROC. The first word of the INFOR table is identified by the<br />

externalized label EM$INFORTBL. The value of this label is offset from zero to the start<br />

of the table.<br />

The caller must set the INFOR$ word to zero for the INFOR$ routine to read the INFOR<br />

table.<br />

I.8. Interface to MFDSP$<br />

All functions of the MFDSP$ routine are called with the EM$MFDSP PROC. The packet<br />

for the MFDSP$ routine is generated with the EM$MFDSPPKT PROC.<br />

Calling Sequence<br />

EM$MFDSP pkt,b-reg [func,param]<br />

where:<br />

pkt<br />

b-reg<br />

func<br />

param<br />

The label (18-bit offset from zero) of the packet generated by the EM$MFDSPPKT<br />

PROC.<br />

The B-register of the bank containing the packet generated by the EM$MFDSPPKT<br />

PROC.<br />

The code for which MFDSP$ function to perform. See Table I–8 for a list of possible<br />

function code values.<br />

An additional parameter for the following function. See Table I–9 for a list of second<br />

parameter values.<br />

The func and param parameters are optional; if they are omitted, EM$MFDSP uses the<br />

values contained in registers A1 and A2, respectively.<br />

7833 1733–004 I–15


Extended Mode Interface to <strong>SYSLIB</strong><br />

Table I–8 contains the function codes that may be used on the EM$MFDSP PROC call.<br />

Table I–8. EM$MFDSP Function Codes<br />

Code Description<br />

0 Initialize MFDSP$ and get the first lead item.<br />

1 Initialize MFDSP$ and get the first main item.<br />

2 Get the next lead item.<br />

3 Get sector 1 of the current lead item.<br />

4 Get the next main item.<br />

5 Get the next sector of the current main item.<br />

6 Get the first DAD table for the current main item.<br />

7 Get the next DAD table.<br />

8 Find an item by its MFD address.<br />

9 Convert an MFD address to the DGET file address.<br />

Table I–9 contains the possible values for the additional parameter field. Function codes<br />

not listed in the table do not require an additional parameter value.<br />

Table I–9. EM$MFDSP Parameter Field Values<br />

Code Description<br />

8 The MFD address of the item to be found<br />

9 The MFD address to be converted<br />

EM$MFDSP returns the status of the call to MFDSP$ in the packet field CALLSTAT.<br />

The CALLSTAT field in S3 of word 2 of the packet (packet address + 1). The possible<br />

status is:<br />

0 Normal return from MFDSP$<br />

1 Error return from MFDSP$ (error code returned in field<br />

A2SAVE)<br />

2 Illegal value given for the MFDSP$ function code<br />

For all calls by EM$MFDSP, the contents of registers A0 through A5 from MFDSP$ are<br />

returned in packet fields A0SAVE, A1SAVE, A2SAVE, A3SAVE, A4SAVE, and A5SAVE,<br />

respectively. These fields are at words 3 through 8 of the packet.<br />

Packet Generation:<br />

The EM$MFDSPPKT PROC generates the packet for the Extended Mode interface to<br />

MFDSP$. This packet is required by the EM$MFDSP PROC.<br />

I–16 7833 1733–004


Calling Sequence:<br />

label EM$MFDSPPKT [buflen] [filename]<br />

where:<br />

buflen<br />

Extended Mode Interface to <strong>SYSLIB</strong><br />

The word length of the buffer used by MFDSP$. This parameter is optional.<br />

If omitted, a value of 4,400 words is used.<br />

filename<br />

The 12-Fieldata-character internal file name of the file containing the MFD<br />

(in quotes). This parameter is optional; if omitted, the caller must place the internal<br />

file name at location EM$MFDSPBUF, an externalized label from this PROC. The<br />

value of this label is the offset from zero to the start of the table.<br />

7833 1733–004 I–17


Extended Mode Interface to <strong>SYSLIB</strong><br />

I–18 7833 1733–004


Appendix J<br />

Obsolete Entry Points, PROCs, and<br />

Routines<br />

This appendix documents PROC calls, entry points, and routines that have been<br />

replaced. Whenever an application is updated that calls these PROCs or entry points, it<br />

should be changed to use the new replacement.<br />

J.1. AEDIT$–Generating the AEDIT$ Packet<br />

The following three MASM procedures that generate the AEDIT$ packet are replaced by<br />

the MASM PROC A$EDITPKT (see 4.1.2).<br />

• A$EPKT (for general-purpose editing)<br />

• A$EPKTF (for floating-point editing)<br />

• A$EPKTSFDT (for date and time editing)<br />

The calling sequences for these MASM procedures are described below. The<br />

parameters in italics are supplied by the calling program. The parameters in brackets are<br />

optional and may be omitted. If they are omitted, the default value is used.<br />

J.1.1. A$EPKT<br />

The A$EPKT procedure generates a seven-word AEDIT$ packet. This packet is used for<br />

general-purpose editing.<br />

Calling Sequence<br />

label A$EPKT image-length,image-address [‘MSG’,msg]<br />

J.1.2. A$EPKTF<br />

The A$EPKTF procedure generates an 11-word AEDIT$ packet. This packet is used for<br />

floating-point number editing.<br />

Calling Sequence<br />

label A$EPKTF image-length,image-address [‘MSG’,msg];<br />

[‘FPS’,fps] [‘FPR’,fpr];<br />

[‘DPC’,dpc] [‘SPC’,spc]<br />

7833 1733–004 J–1


Obsolete Entry Points, PROCs, and Routines<br />

J.1.3. A$EPKTSFDT<br />

A$EPKTSFDT procedure generates a 14-word AEDIT$ packet. This packet is used for<br />

date and time editing.<br />

Calling Sequence<br />

label A$EPKTSFDT image-length,image-address [‘MSG’,msg];<br />

[‘FPS’,fps] [‘FPR’,fpr] [‘DPC’,dpc];<br />

[‘SPC’,spc] [‘DFT’,date-format] [‘TFT’,time-format];<br />

[‘SEP’,separator-character]<br />

J.1.4. Examples of Generating the AEDIT$ Packet<br />

Example 1<br />

$(0)<br />

PACKET A$EPKT 20,ASCIILINE .AEDIT$ packet<br />

ASCIILINE $RES 20 .Data area for ASCII image<br />

In example 1, the MASM procedure A$EPKT generates a seven-word packet at the<br />

location PACKET in location counter 0. AEDIT$ uses this packet for general-purpose<br />

ASCII editing, but not for floating-point numbers or data and time formats. AEDIT$ will<br />

store the generated ASCII string in the 20-word data area at location ASCIILINE. The<br />

message halt character defaults to “&”.<br />

Example 2<br />

LINELEN $EQU 33 .Length of ASCII data area<br />

$(4)<br />

LINE $RES LINELEN .Data area for ASCII image<br />

PACKET A$EPKTSFDT LINELEN,LINE ‘DFT’,8 ‘TFT’,3 .AEDIT$ packet<br />

In example 2, the MASM procedure A$EPKTSFDT generates a 14-word packet for ASCII<br />

editing with date and time formats. AEDIT$ will store the generated ASCII string in the<br />

33-word data area at location LINE. AEDIT$ uses date format index 8 and time format<br />

index 3. AEDIT$ uses the default values for the msg, fps, dps, spc, and<br />

separator-character parameters.<br />

J.2. CONWRD$–MASM PROCs and Entry Points<br />

These entry points to the CONWRD$ routine are replaced by the C$ONWRD PROC<br />

(see Section 7). The common bank entry points are<br />

BCWSET$<br />

Sets bit 8 of the condition word; if bit 8 was already set, then set bit 7.<br />

BCWCLEAR$<br />

Clears bit 8 of the condition word; it does not affect bit 7.<br />

J–2 7833 1733–004


MASM PROCs to call CONWRD$<br />

• Relocatable element<br />

C$WSET<br />

normal return<br />

and<br />

C$WCLEAR<br />

normal return<br />

• Common bank<br />

B$CWSET<br />

normal return<br />

and<br />

B$CWCLEAR<br />

normal return<br />

Obsolete Entry Points, PROCs, and Routines<br />

J.3. EOUT$–Generalized Output Editing Routine<br />

The functionality of EOUT$ is now provided by the AEDIT$ and EDIT$ image<br />

composition editing packages (see Sections 4 and 8).<br />

EOUT$ is an interpretive routine that performs editing functions for Fieldata output<br />

produced for a printer, communications terminal, card punch, or display console.<br />

The interpretive instructions performed by the routine are constructed similarly to<br />

machine language instructions. The format is<br />

f t d x m<br />

0 4 5 11 12 17 18 19 20 35<br />

where:<br />

f<br />

t<br />

d<br />

Function code<br />

Print position (printer) or character position (display console). Print position<br />

numbering starts at zero.<br />

Decimal point location<br />

7833 1733–004 J–3


Obsolete Entry Points, PROCs, and Routines<br />

x<br />

m<br />

Specifies indirect address and use of the simulated index register<br />

Address (main storage location of data)<br />

EOUT$ is called by<br />

LMJ X11,EOUT$<br />

There are two entry points to this subroutine. The normal entry point is EOUT$.<br />

The other, EOUTR$, is the point for reentry after the E$TERM (terminate) function (see<br />

J.3.4).<br />

The addressed word in the m-field may be either in a control register or in main storage.<br />

Any word, even if the word is in a volatile register, is permissible. If register X11 is<br />

addressed, however, the location of the interpretive word that references X11 is output.<br />

All registers, including volatile ones, are saved and restored. The x-field specifies indirect<br />

addressing and the use of the single simulated index register. Its permissible values<br />

(in octal) are as follows:<br />

00 No action<br />

01 Use address indirectly<br />

02 Apply simulated index register<br />

03 Apply simulated index register, then use address indirectly<br />

Indirect addressing is permitted to one level only, and the x-, h-, and i- fields of the<br />

indirectly addressed word are ignored. It is possible, however, to indirectly address<br />

control storage. All modes may be used with indirect addressing.<br />

The various functions are described in the following paragraphs. All may be called as<br />

procedures. Each of the procedure calls generates one word in the correct format. The<br />

parameters of these procedures are interpreted differently, depending on the number<br />

written. A single parameter is taken as m; two parameters as m and x; three parameters<br />

as t, d, and m; and four parameters as t, d, m, and x. Any missing parameters are<br />

assumed to be zero.<br />

The caller may obtain entry to EOUT$ by the procedure E$OUT or E$OUTR, depending<br />

on the entry point desired. No parameters are required.<br />

J–4 7833 1733–004


J.3.1. Editing Functions<br />

Obsolete Entry Points, PROCs, and Routines<br />

These editing functions convert the information to be output. In all cases, except E$A<br />

(alphanumeric words), the field specifies the print position at which the rightmost digit,<br />

bit, or character will be printed. The number given in parentheses following the<br />

procedure call is the octal function code.<br />

E$D(01)–Decimal<br />

The address word is treated as if it were a signed decimal integer and is edited<br />

without a decimal point unless a set function (see E$PNT, J.3.3) is in effect. Leading<br />

zeros to the left are suppressed, and a minus sign, if any, is printed immediately to<br />

the left of the number (also see E$OVRP, J.3.3). If the value is zero, a single zero is<br />

printed. If a set point is in effect, the decimal number is assumed to have the<br />

started point specified by the set point. The d-field specifies the number of decimal<br />

digits to be printed to the right of the decimal point. If a set field function (see<br />

E$FLD, J.3.3) with D = 0 is in effect, the specified field is treated as an unsigned<br />

decimal integer.<br />

E$0(02)–Octal<br />

The d low-order bits of the addressed word are edited and printed as (d+2)/3 octal<br />

digits, unsigned. For a full octal, binary, or alphanumeric character word, d must<br />

always be given as 36.<br />

E$B(03)–Binary<br />

The d low-order bits of the addressed word are edited as d binary digits, unsigned.<br />

E$C(04)–Alphanumeric Characters<br />

The d low-order bits of the addressed word are edited and printed as (d+5)/6<br />

alphanumeric characters in Fieldata code.<br />

E$A(05)–Alphanumeric Words<br />

The d words beginning with the addressed word are edited as 6*d characters in<br />

Fieldata code. For this editing function only, the t-field specifies the print position at<br />

which the leftmost character is printed.<br />

E$E(06)–Floating-Point (FORTRAN E)<br />

The addressed word is edited as a floating-point number with d significant digits.<br />

Normally these are all printed to the right of the decimal point (see E$SCL, J.3.3).<br />

A decimal exponent consisting of a sign and 2 digits is inserted immediately to the<br />

right of the significant portion. If the floating-point number is negative, a minus sign<br />

is inserted immediately to the left of the number (see E$OVRP, J.3.3). If the<br />

addressed word is minus zero, there is no effect and the field is left blank.<br />

7833 1733–004 J–5


Obsolete Entry Points, PROCs, and Routines<br />

E$F(07)–Floating-to-Fixed (FORTRAN F)<br />

The addressed word is assumed to be a floating-point number and is edited to fixed<br />

point with d places following the decimal point. Negative numbers, including minus<br />

zero, are treated as in E$E.<br />

E$DE(26)–Double-Precision Floating-Point<br />

This editing function is the same as E$E, with the addressed word and the<br />

addressed word plus one edited as a double-precision, floating-point number. A<br />

decimal exponent consisting of a sign and 3 digits is inserted immediately to the<br />

right of the significant portion.<br />

E$DF(27)–Double-Precision Floating-to-Fixed<br />

EIMG$<br />

This editing function is the same as E$F, with the addressed word and the<br />

addressed word plus one edited as a double-precision, floating-point number.<br />

The edited output of EOUT$ is stored in a 22-word buffer in the EOUT$ D-bank<br />

following the externally defined label EIMG$.<br />

E$CENT<br />

The text at m is edited as a centered string. The parameters m and x may be given;<br />

in addition, a third parameter is required to specify the number of characters in the<br />

string. The string will be centered in a 128-character line and edited by a call to E$A.<br />

J.3.2. Output Functions<br />

The output functions serve to transmit the edited line to an output device. The device to<br />

be used is determined by the d-field:<br />

Printer d=0<br />

Card Punch d=1<br />

Display Console d=2<br />

The word or character count is given in the t-field. This count must be given. (It is not<br />

assumed maximum if it is given as zero.) For the printer, the word count is normally 22;<br />

for the card punch, normally 14. For the display console, the t-field is a character count<br />

and cannot be more than 60.<br />

For the printer, the m-field serves to specify the number of lines to be spaced. A value<br />

greater than the length of a logical page results in printing on the first line of the next<br />

page. For the punch and display console, the m-field is ignored. The number given in<br />

parentheses following the procedure call is the octal function code.<br />

J–6 7833 1733–004


E$WT(10)–Write and Terminate<br />

Obsolete Entry Points, PROCs, and Routines<br />

The edited image is transmitted to the specified device, and the routine returns<br />

control to the next instruction in machine language mode. The image is not reset to<br />

blanks.<br />

E$W(11)–Write<br />

The edited image is transmitted to the specified device and the routine continues in<br />

the interpretive mode. The image is reset to blanks.<br />

E$WS(12)–Write and Save<br />

The edited image is transmitted to the specified device and the routine continues to<br />

the next instruction in the interpretive mode. The image remains available for use by<br />

further output functions or further editing.<br />

J.3.3. Modal Functions<br />

The modal functions serve to enter information that affects the interpretation of one or<br />

more of the instructions that follow. The number given in parentheses following the<br />

procedure call is the octal function code.<br />

E$SCL(13)–Set Scale<br />

The contents of the address field are treated as a signed power of 10 to be applied<br />

to any floating-point or floating-to-fixed function that follows the set scale function.<br />

For floating-point, the scale is the number of digits to be printed to the left of the<br />

decimal point. The exponent field is reduced accordingly, so that the resulting value<br />

is the same as if no set scale function were in effect. Negative values of the<br />

address (the 16-bit ones complement) introduce leading zeros after the decimal point<br />

and increase the exponent field accordingly.<br />

For floating-to-fixed conversion, the actual value of the resulting number is altered by<br />

multiplying it by the power of 10 indicated by the address. The set scale function<br />

remains in effect until it is countermanded by a new set scale. Upon initial entry to<br />

EOUT$, the scale is assumed to be 0.<br />

E$PNT(14)–Set Point<br />

The set point function specifies the position of the binary point for the next editing<br />

function to be encountered (presumably a decimal editing function). It remains in<br />

effect only for the single edit. The address of the set point gives the number of bits<br />

following the binary point. Negative values are permitted (see E$FLD).<br />

7833 1733–004 J–7


Obsolete Entry Points, PROCs, and Routines<br />

E$FLD(15)–Set Field<br />

The set field function is used to specify a subfield of the next word to occur<br />

(presumably decimal, octal, binary or alphanumeric character function). The t-field<br />

specifies the left margin and the m-field the right margin. The bits of the machine<br />

word are numbered, for the purposes of this function, from left (00) to right (35).<br />

The d-field specifies extension of sign; if it is nonzero, the field is treated as sign.<br />

A set field function with d=0 and t=0 may be used to treat fields, including the sign<br />

bit, as unsigned unless m=35. (That is, a whole word must always be signed in the<br />

event a sign is applied.)<br />

The set field function remains in effect only for the next function encountered.<br />

If both a set field and a set point function are in effect when editing occurs, the set<br />

field function is applied first. In this case, the set point function specifies the binary<br />

point counting from the right-hand end of the specified field.<br />

E$INDX(16)–Set Index<br />

The set index function is used to address a quantity in main storage that is to be<br />

loaded into the single simulated index register. For any function that addresses<br />

storage (including this one), the presence of a 1 bit in the increment (h) portion of the<br />

address causes the simulated index to be added to the specified address before<br />

access is made. The left half of the index register word is ignored. If the d-field is<br />

nonzero, the contents of the m-field (with sign extension) are loaded into the<br />

simulated index register. The set index function remains in effect until it is<br />

countermanded by another set index function.<br />

E$OVRP(17)–Overpunch<br />

The overpunch function specifies that any minus signs produced by the editing<br />

functions are to be removed from their positions in front of the edited numbers and<br />

placed as 11-punches over the low-order digits. In the case of floating-point editing,<br />

the sign of the mantissa is placed over the low-order digit of the mantissa and the<br />

sign of the exponent over its low-order digit. The space that would normally contain<br />

the sign of the exponent is omitted.<br />

The overpunch function is initiated by its occurrence with address 1. It is<br />

countermanded by its occurrence with address 0. Upon initial entry to EOUT$,<br />

the overpunch mode is assumed to be off.<br />

J.3.4. Control Functions<br />

The control functions introduce some of the control operations available in machine<br />

language into the interpretive language. The number in parentheses following the<br />

procedure call is the octal function code.<br />

J–8 7833 1733–004


E$TERM(20)–Terminate<br />

Obsolete Entry Points, PROCs, and Routines<br />

The terminate function returns the routine to the next instruction in machine<br />

language. Upon reentry at point EOUTR$, all counters, modes in effect, interpretive<br />

subroutines, and any partial image are left undisturbed. Control is returned to the<br />

next instruction in machine code. If reentry is made at EOUT$, these are all cleared<br />

and control is returned to the interpretive mode. Entry at EOUT$ is made by:<br />

LMJ X11,EOUTR$<br />

E$LINK(21)–Link<br />

The link function forms subroutines in the editing language. Its effective address<br />

specifies the location of the entry to a subroutine. Subroutines may be nested to a<br />

depth of 10.<br />

E$JUMP(22)–Jump<br />

The jump function with a nonzero effective address causes an interpretive transfer of<br />

control to the designated location. If the address is zero, the jump function serves<br />

as a subroutine exit. Transfer is to the interpretive function following that link control<br />

most recently executed for which no exit has been performed.<br />

E$RPT(23)–Repeat<br />

The repeat function causes the next single interpretive function to be repeated the<br />

number of times specified in the d-field of the repeat word. A repeat function<br />

preceding E$LINK is meaningless; for multiple execution of E$LINK, the routine<br />

EOUT$ should be called within a machine language loop. The t- and m-fields contain<br />

increments to the t- and m-fields of the instruction to be repeated for each<br />

execution. Any modes set by the modal functions which would be in effect for the<br />

first execution of a repeated instruction remain in effect for all executions.<br />

E$CLR(24)–Clear<br />

The clear function sets the image to blanks.<br />

J.3.5. EOUT$–Calling Sequences<br />

This section shows some typing EOUT$ calling sequences. (The FORTRAN formatting<br />

merely indicates the format desired. The I/O functions in FORTRAN use an editing<br />

scheme peculiar to themselves.)<br />

7833 1733–004 J–9


Obsolete Entry Points, PROCs, and Routines<br />

Example 1<br />

The FORTRAN instruction<br />

PRINT 100,A,I,N,B,C<br />

100 FORMAT (6X,E20.7, I20, O20, 1P2F20.6)<br />

is equivalent to the following interpretive sequences:<br />

E$OUT<br />

E$E 26,7,A<br />

E$D 46,0,I<br />

E$0 66,36,N<br />

E$SCL 1<br />

E$F 86,6,B<br />

E$F 106,6,C<br />

E$WT 22,0,1<br />

Next machine language instruction.<br />

Example 2<br />

If this line is punched on a card punch whose output code is 1, then the last interpretive<br />

instruction is replaced by<br />

E$WS 14,1,0<br />

E$WT 22,0,1<br />

Only the first 80 columns of the image are punched.<br />

Example 3<br />

The FORTRAN statements<br />

PRINT 100 (J (I), K (I), L (I), M (I), I=1,4)<br />

100 FORMAT (20I6)<br />

are equivalent to the following interpretive sequences:<br />

E$RPT 30,4,1<br />

E$D 6,0,J,2<br />

E$RPT 30,4,1<br />

E$D 12,0,K,2<br />

E$RPT 30,4,1<br />

E$D 18,0,L,2<br />

E$RPT 30,4,1<br />

E$D 24,0,M,2<br />

E$WT 22,0,1<br />

J–10 7833 1733–004


J.4. I$D–Calling Sequence<br />

Obsolete Entry Points, PROCs, and Routines<br />

The I$D PROC to call the ID$ routine is replaced by the I$D$ PROC (see 11.1.2).<br />

The following MASM procedure calls ID$:<br />

I$D pktaddr date<br />

error return<br />

normal return<br />

where:<br />

pktaddr<br />

date<br />

address of the ID$ packet.<br />

address of caller-specified date and time (must be in TDATE$ format). This<br />

parameter is optional.<br />

The calling program can use indexing, incrementation, indirect addressing, and register<br />

basing in specifying the addresses for pktaddr and date with the $EQUF directive in the<br />

following format:<br />

label $EQUF,j *u,*x,,*b<br />

If date is included on the calling statement, the TDATE$ value at that address is used for<br />

the execution date/time. If the date is excluded, the TDATE$ value in word 8 of the ID$<br />

packet is used. If no value is present in word 8, the current date/time is obtained from<br />

ER TDATE$.<br />

Error Return<br />

If ID$ takes the error return, either A1 or A2 contains a negative error code. If the error<br />

occurred in ID$, A1 contains the error code; if the error occurred in SFDT$, A2 contains<br />

the error code.<br />

• ID$ error codes (returned in A1):<br />

-01 An outdated version of the ID$ packet is being used.<br />

• SFDT$ error codes (returned in A2):<br />

-01 through -05 SFDT$ routine error; see Section 22.<br />

The error code is also stored in the packet, in ERRCODE.<br />

7833 1733–004 J–11


Obsolete Entry Points, PROCs, and Routines<br />

Normal Return<br />

The output ID$ generates may be one or more lines; this depends on the length of the<br />

processor/program description and specified options. For each line of ID$ output, a print<br />

control word is constructed (line-spacing, image-length, image-address) and stored<br />

sequentially in the ID$ packet starting with word 10. The number of print control words<br />

constructed is stored in S6 or word 0 of the ID$ packet.<br />

If the normal return occurs, the first print control word is returned in A0.<br />

The following procedure simplifies printing of the ID$ output:<br />

I$DPRINT pktaddr<br />

where pktaddr is the address of the ID$ packet.<br />

This procedure performs an APRINT$ for each print control word. It may be called from<br />

the I$D PROC by setting option bit 4.<br />

All output from ID$ is directed to the current print file.<br />

Example of Calling ID$<br />

The following example calls the ID$ routine to generate an ASCII identification line:<br />

$ASCII<br />

$INCLUDE ‘MAXR$’<br />

$(0)<br />

IDPAC I$DPKT ‘IDLINE$ ‘Math Quiz Program (Level 8)’026<br />

$(1)<br />

START I$D IDPAC . Generate and print the ID line<br />

J ERROR . Jump ahead if error return<br />

.<br />

. (Program code)<br />

.<br />

J DONE . Program complete<br />

ERROR L$SNAP ‘ID$’,2 . Dump the A-registers<br />

DONE ER EXIT$<br />

$END START<br />

This MASM routine uses the ID$ routine to create and print the following identification<br />

line:<br />

Math Quiz Program (Level 8) 840425 1147:31<br />

In this example, ID$ generates the ASCII identification line in the 11-word data area at<br />

location IDLINE. The I$DPKT procedure generates the ID$ packet (see Example 2 in the<br />

previous subsection).<br />

J–12 7833 1733–004


Obsolete Entry Points, PROCs, and Routines<br />

The I$D procedure calls ID$, which generates the identification line and prints it by<br />

executing an ER APRINT$ (because option bit 4 is set).<br />

If ID$ takes the error return, L$SNAP prints the A registers. Otherwise, the program<br />

continues executing.<br />

J.5. IDLINE$ and IDONLY$–Identification Line<br />

Routines<br />

The IDLINE$ and IDONLY$ routines are replaced by the ID$ routine (see Section 11).<br />

IDLINE$ and IDONLY$ are routines that provide a standard identification line for Series<br />

1100 system, language, and utility processors. IDLINE$ and IDONLY$ are reentrant and<br />

not quarter/third-word sensitive. Do not call IDLINE$ and IDONLY$ from a minor register<br />

set activity.<br />

Identification Line Format<br />

A standard processor identification line is generated in a processor-supplied buffer called<br />

IDBUFF. All fields but the processor name and level field are generated. The element<br />

cycle information field is optional. All information is generated in Fieldata code beginning<br />

after the last nonblank character and preceded by one blank character.<br />

The format of the complete ID line is<br />

ppplll <strong>SYSLIB</strong> mm/dd/yy hh:mm:ss (old->new)<br />

where:<br />

ppplll<br />

<strong>SYSLIB</strong><br />

processor name and level, 12 characters or less, supplied by the processor.<br />

<strong>SYSLIB</strong> level the processor is collected with. The form varies with the level number.<br />

For example, SL74R1, 74R1Q1.<br />

mm/dd/yy<br />

month/day/year at processor call.<br />

hh:mm:ss<br />

hour:minute:second at processor call.<br />

(old->new)<br />

input-> output symbolic element cycle number (optional).<br />

7833 1733–004 J–13


Obsolete Entry Points, PROCs, and Routines<br />

IDBUFF<br />

The processor must supply a buffer with an externally defined label, IDBUFF. Before<br />

calling IDLINE$ or IDONLY$, this buffer must be initialized with the name/level field (up<br />

to 12 characters) left-justified and the remainder of the buffer blank-filled. This buffer<br />

must be at least six words long and up to eight, depending on the name/level length and<br />

whether or not cycle information is requested.<br />

The minimum IDBUFF length required is shown in Table J–1.<br />

Table J–1. IDLINE$, IDONLY$: IDBUFF<br />

Length<br />

Routine Called Name and Level Length<br />

1 Word 2 Words<br />

IDLINE$,IDTIME$ 7 8<br />

IDONLY$,IDTOME$ 6 7<br />

A processor name and level greater than 12 characters may be used by defining the start<br />

of IDBUFF as the word following the name and level. It may also be used if no more<br />

than the last 12 characters are included within IDBUFF.<br />

J.5.1. IDLINE$<br />

There are two entry points to the IDLINE$ routine: IDLINE$ and IDTIME$.<br />

J.5.1.1. IDLINE$<br />

IDLINE$ generates the complete ID line, including symbolic element cycle information.<br />

The element cycle information is taken from PARTBL, which is filled in by either the<br />

<strong>SYSLIB</strong> routine PREPRM or PREPRO. The call on PREPRM or PREPRO must precede<br />

the call on IDLINE$ or IDTIME$.<br />

Calling Sequence<br />

LMJ X11,PREPRO$ . or PREPRM$<br />

J ERROR . error return from PREPRO$ or PREPRM$<br />

LMJ X11,IDLINE$<br />

.<br />

PF FORM 12,6,18<br />

LA A0,(PF 1,8,IDBUFF)<br />

ER PRINT$<br />

J–14 7833 1733–004


J.5.1.2. IDTIME$<br />

Obsolete Entry Points, PROCs, and Routines<br />

The IDLINE$ call is the equivalent of IDLINE$, except that you furnish the date (in<br />

register R2) and time (in register R3) in ER DATE$ format. IDTIME$ can be used by a<br />

processor that executes for a considerable time before it prints the ID line. In this case,<br />

the actual date and time that the processor began execution are saved and then passed<br />

to IDLINE$ in registers R2 and R3.<br />

J.5.2. IDONLY$<br />

There are two entry points to the IDONLY$ routine: IDONLY$ and IDTOME$.<br />

J.5.2.1. IDONLY$<br />

IDONLY$ generates the ID line without the symbolic element cycle information.<br />

IDONLY$ can be used by processors that do not create or update elements. An<br />

externally defined PARTBL is not required.<br />

Calling Sequence<br />

LMJ X11,IDONLY$<br />

.<br />

PF FORM 12,6,18<br />

LA A0,(PF 1,7,IDBUFF)<br />

ER PRINT$<br />

J.5.2.2. IDTOME$<br />

The IDTOME$ call is the equivalent of IDONLY$, except that you furnish the date (in R2)<br />

and time (in R3) in ER DATE$ format.<br />

J.6. SFDT$–MASM Calling Sequence<br />

The S$FDT PROC to call the SFDT$ routine is replaced by the S$FDT$ PROC (see<br />

22.1.2).<br />

The S$FDT procedure call obtains the standard format for date, time, or both date and<br />

time:<br />

S$FDT pkt-addr date time<br />

error return<br />

normal return<br />

where:<br />

pkt-addr<br />

the address of the five-word SFDT$ packet.<br />

7833 1733–004 J–15


Obsolete Entry Points, PROCs, and Routines<br />

date<br />

time<br />

the address of a caller-specified date and time (must be in TDATE$ format). This<br />

parameter is optional.<br />

the address of a caller-specified time (must be in TIME$ format). This parameter is<br />

optional.<br />

J.7. SYS$RLIB$ID–RLIB Identification<br />

SYS$RLIB$ID is an element that contains the level identification of the system<br />

relocatable library file, SYS$*RLIB$ (also referred to as RLIB). It defines the following<br />

external labels:<br />

RLIB$ID1 First four characters of ID in ASCII<br />

RLIB$ID2 Second four characters of ID in ASCII<br />

RLIB$ID3 Third four characters of ID in ASCII<br />

If a site makes changes to SYS$*RLIB$, it should update the level identification of this<br />

file.<br />

The SYS$*RLIB$ file ID is updated by assembling the element SYS$RLIB$ID and<br />

supplying the new ID in the fourth parameter field of the @MASM processor call. The ID<br />

may be from 1 to 12 characters long.<br />

Example<br />

@MASM,S SYS$*RLIB$.SYS$RLIB$ID,.SYS$RLIB$ID,,840713<br />

where 840713 is the new ID.<br />

This example generates the following definitions:<br />

RLIB$ID1* $EQU ‘8407’<br />

RLIB$ID2* $EQU ‘13∆∆’<br />

RLIB$ID3* $EQU ‘∆∆∆∆’<br />

J–16 7833 1733–004


Obsolete Entry Points, PROCs, and Routines<br />

J.8. PIRCB$ Common Bank Entry Points<br />

Table J–2 lists the routines and entry points for <strong>SYSLIB</strong> common bank PIRCB$. PIRCB$<br />

is replaced by the common banks <strong>SYSLIB</strong>$1, <strong>SYSLIB</strong>$2, <strong>SYSLIB</strong>$3, and <strong>SYSLIB</strong>$4. The<br />

common bank entry points listed in Table J–2 should not be used; instead, use the<br />

common bank calling sequence documented in the description of these routines.<br />

Table J–2. PIRCB$ Entry Points<br />

Element Name Relocatable Entry Point Common Bank Entry Point<br />

BSP$ APTIA$ BAPTIA$<br />

APTID$ BAPTID$<br />

APTIS$ BAPTIS$<br />

APTNL$ BAPTNL$<br />

CPTIA$ BCPTIA$<br />

CPTID$ BCPTID$<br />

CPTIS$ BCPTIS$<br />

CPTNL$ BCPTNL$<br />

EPTIA$ BEPTIA$<br />

EPTID$ BEPTID$<br />

EPTIS$ BEPTIS$<br />

EPTNL$ BEPTNL$<br />

ETIA$ BETIA$<br />

ETID$ BETID$<br />

ETIS$ BETIS$<br />

ETNL$ BETNL$<br />

FPTIA$ BFPTIA$<br />

FPTID$ BFPTID$<br />

FPTIS$ BFPTIS$<br />

FPTNL$ BFPTNL$<br />

PTATWT$ BPTATWT$<br />

PTCTWT$ BPTCTWT$<br />

PTETWT$ BPTETWT$<br />

PTEWT$ BPTEWT$<br />

PTFTWT$ BPTFTWT$<br />

RFTI$ BRFTI$<br />

RPFAPT$ BRPFAPT$<br />

7833 1733–004 J–17


Obsolete Entry Points, PROCs, and Routines<br />

Table J–2. PIRCB$ Entry Points<br />

Element Name Relocatable Entry Point Common Bank Entry Point<br />

BSP$ (cont.) RPFCPT$ BRPFCPT$<br />

RPFEPT$ BRPFEPT$<br />

RPFET$ BRPFET$<br />

RPFFPT$ BRPFFPT$<br />

WFTI$ BWFTI$<br />

WPFAPT$ BWPFAPT$<br />

WPFCPT$ BWPFCPT$<br />

WPFEPT$ BWPFEPT$<br />

WPFET$ BWPFET$<br />

WPFFPT$ BWPFFPT$<br />

CONWRD$ CWCLEAR$ BCWCLEAR$<br />

CWSET$ BCWSET$<br />

FDASC$ ASCFD$ BASCFD$<br />

FDASC$ BFDASC$<br />

ID$ ID$ BID$<br />

SAR$ATREAD$G SAR$ATR$PG BSAR$ATR$P<br />

SAR$INATR$PG BSAR$INATR$P<br />

SAR$COM$G SAR$COM$PG BSAR$COM$P<br />

SAR$READ$G SAR$CLOSI$PG BSAR$CLOSI$P<br />

SAR$OPENI$PG BSAR$OPENI$P<br />

SAR$READ$PG BSAR$READ$P<br />

SAR$WRITE$G SAR$CLOSO$PG BSAR$CLOSO$P<br />

SAR$OPENO$PG BSAR$OPENO$P<br />

SAR$WCNTL$PG BSAR$WCNTL$P<br />

SAR$WRITE$PG BSAR$WRITE$P<br />

SDFI SDFIC$ BSDFIC$<br />

SDFINT$ BSDFINT$<br />

SDFIOA$ BSDFIOA$<br />

SDFIO$ BSDFIO$<br />

SDFI$ BSDFI$<br />

J–18 7833 1733–004


Obsolete Entry Points, PROCs, and Routines<br />

Table J–2. PIRCB$ Entry Points<br />

Element Name Relocatable Entry Point Common Bank Entry Point<br />

SDFO SDFOC$ BSDFOC$<br />

SDFOOSF$ BSDFOOSF$<br />

SDFOO$ BSDFOO$<br />

SDFO$ BSDFO$<br />

SFDT$ SFDT$ BSFDT$<br />

STARTSFDT$ BSTARTSFDT$<br />

7833 1733–004 J–19


Obsolete Entry Points, PROCs, and Routines<br />

J–20 7833 1733–004


Appendix K<br />

Related Product Information<br />

OS 2200 Exec System Software Administration <strong>Reference</strong> <strong>Manual</strong> (7831 0323).<br />

Unisys Corporation.<br />

OS 2200 Exec System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong><br />

(7830 7899). Unisys Corporation.<br />

OS 2200 Executive Control Language (ECL) and FURPUR <strong>Reference</strong> <strong>Manual</strong><br />

(7830 7949). Unisys Corporation.<br />

OS 1100 Meta-Assembler (MASM) <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> (7830 8269).<br />

Unisys Corporation.<br />

OS 2200 Exec System Software Installation and Configuration Guide (78306 7915).<br />

Unisys Corporation.<br />

OS 1100 Collector <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> (7830 9887). Unisys Corporation.<br />

OS 1100 LIST Processor (LIST) End Use Guide (7831 3384). Unisys Corporation.<br />

OS 1100 Universal Compiling System (UCS) FORTRAN <strong>Programming</strong> <strong>Reference</strong><br />

<strong>Manual</strong> Volume 1, FORTRAN Statements (7831 0489). Unisys Corporation.<br />

Unisys e-@ction Application Development Solutions FORTRAN Compiler <strong>Programming</strong><br />

<strong>Reference</strong> <strong>Manual</strong> Volume 2: Compiler and System Interface (7830 7477).<br />

Unisys Corporation.<br />

OS 1100 Universal Compiling System (UCS) PLUS <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong><br />

Volume 1, PLUS Statements (7831 0497). Unisys Corporation.<br />

OS 1100 Universal Compiling System (UCS) PLUS <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong><br />

Volume 2, Compiler and System Interface (7831 2287). Unisys Corporation.<br />

OS 2200 Data Structures <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> (7833 3481).<br />

Unisys Corporation.<br />

OS 2200 Service Library <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> (7830 7857).<br />

Unisys Corporation.<br />

OS 2200 System Services <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> (7833 4455).<br />

Unisys Corporation.<br />

7833 1733–004 K–1


Related Product Information<br />

OS 1100 Exec System Software Executive Request <strong>Programming</strong> Quick-<strong>Reference</strong> Guide<br />

(7830 9952). Unisys Corporation.<br />

OS 1100 Postmortem Dump (PMD) <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> (UP-8725).<br />

Unisys Corporation.<br />

K–2 7833 1733–004


Glossary<br />

B<br />

bank descriptor index (BDI)<br />

An index into the bank descriptor table (a data structure defined by the Exec). Practically,<br />

BDIs are the equivalent of symbolic bank names. Program BDIs are assigned by the<br />

Collector, whereas configured common bank BDIs are managed by the Exec, COMUS,<br />

and the systems analyst, or<br />

C<br />

An integer value used as a relative index into a bank descriptor table (BDT). The BDI<br />

points to a bank descriptor (BD) in the BDT that defines storage allocation for a program<br />

segment, or<br />

An unsigned integer in the range of zero to n-1, where n is the maximum number of<br />

bank descriptors allowed in a given bank descriptor table. The integer is used to locate a<br />

bank descriptor in the bank descriptor table. The first bank descriptor has an index of<br />

zero and the nth bank descriptor has an index of n-1. The bank descriptor index is the<br />

low order 16 bits of L,BDI and the low order 12 bits of E,LS,BDI.<br />

Collector<br />

A system processor (called using @MAP) that joins relocatable elements into an absolute<br />

element.<br />

D<br />

DAD<br />

E<br />

ECL<br />

Abbreviation for device area descriptor.<br />

Abbreviation for Executive control language.<br />

Element (ELT) processor<br />

Processor used to introduce a new element into a program file or to correct the content<br />

of a symbolic element in a program file from a runstream.<br />

7833 1733–004 Glossary–1


Glossary<br />

Exec<br />

The kernel of the OS 2200 system that controls the operating environment. The Exec<br />

process user runs, controls files, manages the system resources, and performs input and<br />

output operations. The active Exec is the Exec that is currently booted. The default<br />

Exec is the Exec to be booted the next time the device is manually selected as the boot<br />

device without explicitly selecting, through the SCF interface, an Exec to boot.<br />

Executive request (ER)<br />

A machine instruction that allows a user to request services from the kernel, or<br />

F<br />

A system call to the OS 2200 Exec that asks the Exec to perform a task (such as I/O) that<br />

is normally privileged and outside the control of the user. The ER is the standard<br />

interface between programs and the operating system, providing programs with access<br />

to system resources under Exec control. Selected ERs affect system security and their<br />

ability to be executed is controlled, or<br />

A program instruction that interrupts the Exec and has it perform a function for the<br />

program. An ER can be used to read or print data, request system information, and<br />

terminate a program. Executive request also refers to the service resulting from the<br />

request.<br />

Fault Location by Interpretive Testing (FLIT)<br />

A tool for development, checkout, installation, and maintenance of software, and for<br />

solving complex debugging problems. FLIT provides a simulated operating environment<br />

where you can run and debug any OS 2200 compatible executable program. Working in<br />

this simulated environment, a programmer can load and execute object code, trace<br />

execution of the code, and change it dynamically without recompiling. Debugging is<br />

controlled by a high-level language (HLL) or low-level language (LLL). Typically, Meta-<br />

Assembler (MASM) programs are debugged using LLL, and PLUS programs are<br />

debugged using HLL. In system mode, you can customize the hardware environment<br />

and boot, run, and debug your own operating system or control program.<br />

FURPUR<br />

The operating system Executive file utility routine. Abbreviation for File Utility<br />

Routines/Program Utility Routines.<br />

Glossary–2 7833 1733–004


M<br />

Glossary<br />

master file directory (MFD)<br />

The file catalog of the Executive that contains Exec file definitions that the system or<br />

users can assign and access. Files listed in the MFD are said to be cataloged and are<br />

retained after a run terminates. In an XTC system, there is a single shared MFD for the<br />

system, and each host has its own standard (local) copy of the MFD. See also standard<br />

MFD, shared MFD, or<br />

P<br />

A directory maintained by the Exec to control cataloged files. The MFD contains the<br />

security attributes for cataloged files. Files listed in the MFD are cataloged and retained<br />

after a run terminates. MFDF$$ is the internal file name that refers to the MFD, or<br />

A list of all the files currently cataloged in the computer system. The file may not<br />

currently be in either main or mass storage, but if cataloged, it will be listed in the MFD<br />

until it is deleted.<br />

post mortem dump processor (PMDP)<br />

A system processor that produces a printout (dump) of the main storage a program<br />

occupied when it terminated. Experienced programmers can use these dumps to<br />

determine what processing occurred. This helps isolate errors in a program.<br />

Programmers Advanced Debugging System<br />

A language-independent interactive debugging tool.<br />

Processor common input/output system (PCIOS)<br />

A system that handles data in conventional PCIOS files.<br />

program control table (PCT)<br />

A special table maintained by the Exec for each active run in the system. The PCT<br />

contains control information about a particular run, and about the program currently being<br />

executed in the run (if any). Among other things, the PCT includes a list of the files<br />

currently assigned to the run, or<br />

A table, one per run, created and maintained by the Exec to accummulate data needed to<br />

control and record each run. The PCT is a read-only user bank from 1 to 42 blocks, or<br />

A bank whose data structure is defined, created, and maintained by the operating<br />

system. The PCT contains information about the run, or<br />

An area in main storage containing the information necessary to define the state of the<br />

program. The PCT shows contents of the P-register, the next instruction to be executed,<br />

and the contents of various data registers. With the information in the program control<br />

table, the Exec can stop the program and resume it exactly where it left off.<br />

7833 1733–004 Glossary–3


Glossary<br />

Problem list entry (PLE)<br />

An organized list of user reported problems, or<br />

R<br />

A unique software problem that has been reported to Unisys and recorded in the<br />

PRIMUS database.<br />

relocatable element<br />

A machine language element produced by a compiler; an object program. Relocatable<br />

elements must still undergo the process of collection before they can be executed. The<br />

system relocatable library has the file name SYS$RLIB$.relocable subroutine library.<br />

S<br />

A component of the operating system that contains useful subroutines you can<br />

incorporate into your programs. Among other things, these subroutines sort and merge<br />

data and perform mathematical and statistical operations.<br />

Software Library Administrator (SOLAR)<br />

A software tool that a site or system administrator uses to install and maintain software<br />

products. SOLAR consists of a set of utilities and the SOLAR processor–a full screen<br />

interface to the utilities.<br />

System data format (SDF)<br />

The standard format used by the Exec to format data for storage in data files. The Exec<br />

system data format is sequential, fixed-block, variable-record length, or<br />

<strong>SYSLIB</strong><br />

U<br />

Files that contain only symbolic images (data, directives, or runstreams) in system data<br />

format (SDF). They are commonly used as print files or for data storage. Data files can<br />

be stored on mass storage (disk) or on tape.<br />

Abbreviation for System Service Routines Library, which is a Unisys software product.<br />

Its file name is SYS$LIB$*<strong>SYSLIB</strong>. It contains system definitions and procedures and<br />

processor interface and utility routines.<br />

Universal Compiling System (UCS)<br />

A system for compiling extended mode programs written in UCS FORTRAN or UCS<br />

COBOL. The UCS compilers produce an absolute element in a standard form that is<br />

called an object module. The UCS and Linking system allow object modules written in<br />

different languages to be linked together as a program. See also object module, OS<br />

2200 linking system, zero overhead object module (ZOOM).<br />

Glossary–4 7833 1733–004


Index<br />

A<br />

Access Methods<br />

common bank, 3-3<br />

relocatable, 3-2<br />

ACD<br />

attributes, 16-12<br />

internal format, 16-12<br />

output, 18-35<br />

Addressing routines, 6-1<br />

AEDIT$<br />

calling sequence, 4-6, 4-7<br />

description, 4-1<br />

error status codes, 4-24<br />

examples, 4-5, 4-13, 4-25<br />

packet format, 4-3<br />

packet generation, 4-4<br />

AEDIT$F<br />

calling sequence, 4-6, 4-16<br />

description, 4-14<br />

error status codes, 4-24<br />

examples, 4-17<br />

AEDIT$SFDT<br />

calling sequence, 4-6, 4-21<br />

error status codes, 4-24<br />

AEDIT$SFDT$<br />

examples, 4-23<br />

ASCII<br />

A$SCTRL procedure, 2-4<br />

conversion table, 9-3<br />

conversion to Fieldata, 9-1<br />

input, 17-33, 23-13<br />

output, 18-35, 23-13, 25-3<br />

Attributed Character Data<br />

attributes, 16-12<br />

internal format, 16-12<br />

output, 18-35<br />

B<br />

BSP$<br />

examples, 5-34<br />

File Control Table, 5-5<br />

functions, 5-1<br />

7833 1733–004 Index–1<br />

C<br />

CABSAD$, 6-1, 6-2<br />

CAINIT$, 6-4<br />

Calling Sequences<br />

auto switch, 3-5<br />

common bank, 3-3<br />

relocatable, 3-2<br />

CBX$, 6-5<br />

common bank routines, 3-1<br />

Common Banks, 3-1<br />

CRELAD$<br />

calling, 6-8<br />

CBN$, 6-13<br />

CRELAD$, 6-9<br />

CRINIT$, 6-12<br />

CSN$, 6-14<br />

description, 6-1<br />

CSX$, 6-6<br />

CSYMVL$, 6-7<br />

CYCLIM$, 2-8<br />

D<br />

Debugging routines<br />

CABSAD$, 6-1<br />

CONWRD$, 7-1<br />

CRELAD$, 6-1<br />

Diagnostic routines<br />

CABSAD$, 6-1<br />

CRELAD$, 6-1<br />

E<br />

Editing<br />

ASCII characters, 4-1<br />

dates, 4-18, 8-8, 22-1


Index<br />

Fieldata characters, 8-1<br />

floating point numbers, 8-9<br />

times, 4-18, 8-8, 22-1<br />

Editing routines<br />

AEDIT$F, 4-14<br />

AEDIT$T, 4-18<br />

EDIT$, 8-1<br />

EDIT$F, 8-9<br />

EDIT$T, 8-8<br />

element subtypes, 2-4<br />

Error status codes<br />

AEDIT$, 4-24<br />

CABSAD$, 6-4<br />

CAINIT$, 6-5<br />

CBN$, 6-13<br />

CBX$, 6-6<br />

CLOSR$ (SIR$), 23-19<br />

CRELAD$, 6-11<br />

CRINIT$, 6-13<br />

CSN$, 6-14<br />

CSX$, 6-7<br />

CSYMVL$, 6-8<br />

entry look_up (BSP$), 5-19<br />

EROR$, 15-6<br />

GETPSF$, 10-4<br />

ID$, 11-6<br />

INISR$ (SIR$), 23-11<br />

item add (BSP$), 5-24<br />

item delete (BSP$), 5-15<br />

item search (BSP$), 5-12<br />

MFDSP$, 13-5<br />

OPNSR$ (SIR$), 23-11<br />

POSTPR$, 14-14<br />

PREPRO$, 14-2<br />

read table (SP$), 5-10<br />

REPRM$, 14-8<br />

REPRO$, 14-8<br />

RINF$, 12-5<br />

ROR$, 15-2<br />

SAR$ ATREAD, 19-23<br />

SAR$ COM, 20-19<br />

SAR$ READ, 17-30<br />

SAR$ WRITE, 18-19<br />

SDFI, 21-18<br />

SDFO, 21-18<br />

SELT$, 12-11<br />

SFDT$, 22-6, 22-11<br />

SINF$, 12-7<br />

SOR, 25-2<br />

SROR$, 15-2<br />

TBLWR$, 15-7<br />

write FTI (BSP$), 5-33<br />

write last item (BSP$), 5-30, 5-31<br />

write table (BSP$), 5-32<br />

Index–2 7833 1733–004<br />

F<br />

Fieldata<br />

conversion table, 9-3<br />

editing, 8-1<br />

input, 17-33, 23-13<br />

File Information Packet<br />

fields (PLUS), 16-2<br />

File Table Index<br />

format, 5-5<br />

reading, 5-4<br />

G<br />

GETPSF$<br />

description, 10-1<br />

error status codes, 10-4<br />

examples, 10-5<br />

MASM calling sequence, 10-2<br />

I<br />

I/O routines, 21-1<br />

ID$<br />

error status codes, 11-6<br />

examples, 11-4, 11-7, 11-11<br />

MASM calling sequence, 11-5<br />

MASM packet format, 11-12<br />

PLUS calling sequence, 11-8<br />

PLUS packet, 11-8<br />

INFOR<br />

format, G-3<br />

reading the table, G-9<br />

subfield number, G-2<br />

table conventions, G-7<br />

table size, G-9<br />

INFOR$<br />

description, 12-1<br />

DUSE$, 12-11<br />

guidelines, 12-2<br />

RINF$, 12-4<br />

SELT$, 12-8<br />

SINF$, 12-6


K<br />

Kanji<br />

input, 17-34<br />

internal format, 16-12<br />

output, 18-35<br />

M<br />

MFDSP$<br />

calling sequence, 13-2<br />

error status codes, 13-5<br />

examples, 13-9<br />

function codes, 13-3<br />

information returned, 13-4<br />

packet, 13-1<br />

N<br />

Nonsupported routines<br />

AEDIT$T, 4-18<br />

EDIT$, 8-1<br />

EDIT$F, 8-9<br />

P<br />

PARTBL<br />

description, 14-5<br />

format, 14-3<br />

PLUS callable routines<br />

CONWRD$, 7-1<br />

ID$, 11-1<br />

SAR$, 16-1<br />

SFDT$, 22-1<br />

Processor Interface Routines, 14-1<br />

Processors<br />

call statement, 12-1<br />

field release, 14-14<br />

field retrieval, 14-10<br />

file assignments, 14-3<br />

Program File<br />

adding items, 5-23<br />

deleting items, 5-14<br />

file table index, 5-5<br />

Searching for, 5-11<br />

searching for items, 5-18<br />

Index<br />

7833 1733–004 Index–3<br />

R<br />

Read routines<br />

SDFI, 21-1<br />

ROR<br />

description, 15-1<br />

EROR$, 15-6<br />

external reference item, 15-5<br />

large location counter item, 15-5<br />

location counter item, 15-4<br />

optimization, 15-7<br />

ROR$, 15-2<br />

SROR$, 15-1<br />

SROR$EB, 15-2<br />

TBLWR$, 15-6<br />

RPCTA$, 2-8<br />

S<br />

SAR$<br />

attribute table entry, 16-12, 17-11, 18-11<br />

attributes, 16-12<br />

character sets, 17-33, 18-34<br />

description, 16-1<br />

error, 19-11<br />

error status, 18-32<br />

error status codes<br />

(ATREAD), 19-23<br />

(COM), 20-9, 20-19<br />

(READ), 17-17, 17-30<br />

(WRITE), 18-19<br />

examples, 17-16, 18-18<br />

file information packet<br />

about, 16-2<br />

MASM<br />

ATREAD function, 19-13<br />

COM function, 20-11<br />

WRITE function, 18-21<br />

PLUS<br />

ATREAD function, 19-1<br />

COM function, 20-1<br />

READ function, 17-1<br />

SAR$ ATREAD$G<br />

MASM interface, 19-1<br />

PLUS interface, 19-13<br />

SDFI<br />

close call, 21-10<br />

description, 21-1<br />

error status codes, 21-18<br />

open call, 21-7<br />

packet format, 21-3


Index<br />

read call, 21-8<br />

SDFO<br />

close call, 21-17<br />

description, 21-1<br />

error status codes, 21-18<br />

open call, 21-16<br />

packet format, 21-11<br />

write call, 21-17<br />

SFDT$<br />

error status codes, 22-6, 22-11<br />

examples, 22-7, 22-12<br />

MASM calling sequence, 22-5<br />

MASM packet format, 22-3<br />

PLUS calling sequence, 22-11<br />

PLUS packet format, 22-8<br />

SIR$<br />

close call, 23-19<br />

description, 23-1<br />

entry points, 23-10<br />

get, 23-18<br />

get image call, 23-13<br />

open call, 23-10, 23-11<br />

options, 23-6<br />

SNOOPY<br />

calling sequence, 24-3<br />

commands, 24-8<br />

control flags, 24-18<br />

demand mode, 24-5<br />

description, 24-1<br />

SYS$DEF System Standard Definitions<br />

PCTBD$, 2-8<br />

PFAPT$, 2-8<br />

PFCPT$, 2-8<br />

PFEPT$, 2-8<br />

PFET$, 2-8<br />

PFFPT$, 2-8<br />

PFTEXT$, 2-8<br />

W<br />

Write routines<br />

SDFO, 21-1<br />

Index–4 7833 1733–004


*78331733-004*<br />

78331733–004

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!