.RIGHT MARGIN 80 .LEFT MARGIN 10 .TITLE ^^NOSLIB LIBRARY SUBROUTINES .CENTER INTRODUCTION .SKIP 2 ^T\\HIS IS TO BE A BRIEF DESCRIPTION OF SOME OF THE SUBPROGRAMS TO BE FOUND IN THE OBJECT LIBRARY CALLED ^^NOSLIB, \\THE FILENAME OF WHICH IS ^^NOSLIB.OLB\\. ^ADDITIONAL DETAILS ON LIBRARIES CONCERNING THEIR CREATION, INSERTION AND REPLACEMENT OF MODULES MAY BE FOUND IN ^CHAPTER 14 OF THE ^UTILITIES MANUAL. .SKIP 2 ^A\\LL OF THE PROGRAMS DESCRIBED HERE MAY BE CALLED FROM EITHER ^^FORTRAN \O\R MACRO-11 \\IN THE FOLLOWING MANNER. ^FROM ^^FORTRAN \\A STANDARD SUBROUTINE CALL IS ISSUED, I.E.; .SKIP 2 .CENTER ^^CALL SUBPRG (ARG1,ARG2,ARG3,\\\...) .SKIP 2 ^WHERE ^^ARG1, ARG2\\ AND ^^ARG3\\ ARE USER SUPPLIED ARGUMENTS, EITHER SIMPLE INTEGERS OR INTEGER ARRAYS. .SKIP 2 ^THE FORM THAT IS REQUIRED TO CALL ONE THESE SUBROUTINES FROM ^^MACRO-11 \\IS THE STANDARD ^^FORTRAN/MACRO-11\\ INTERFACE. ^THAT IS: .SKIP 2 .LEFT MARGIN 30 .NOJUSTIFY .NOFILL \\ SOURCE CODE . . . ^^MOV _#LABEL,R5 JSR PC,ASCEBC . . . LABEL: .WORD NARG,ARG1,ARG2,ARG3,... ARG1: .WORD 1 ARG2: .WORD 2 ARG3: .BLKB 6 . . . .SKIP 2 .LEFT MARGIN 10 .FILL .JUSTIFY ^I\\N THIS CASE ^^NARG\\ REPRESENTS THE NUMBER OF ARGUMENTS TO BE PASSED AND IS AN ACTUAL NUMBER, AND ^^ARG\\1, ^^ARG\\2, ETC. REPRESENT THE LABELS OF THE ARGUMENTS. ^IN THIS EXAMPLE, ^^ARG\\1 AND ^^ARG\\2 ARE SIMPLE INTEGERS, WITH THE VALUES OF 1 AND 2 RESPECTIVELY, AND ^^ARG3\\ REPRESENTS A 6 BYTE (3 WORD OR ELEMENT) ARRAY, WHICH IS INITIALLY EMPTY. .SKIP 2 ^TO INCORPORATE THESE ROUTINES INTO YOUR PROGRAM, ONCE THE CORRECT STATEMENTS HAVE BEEN INCLUDED IN YOUR SOURCE FILE, THEY MUST BE LINKED INTO YOUR TASK THROUGH ONE OF THE TASK BUILDERS (^^TKB, FTB\\) FOR RUNNING. ^THIS IS USUALLY DONE THROUGH A COMMAND LINE SIMILAR TO THE FOLLOWING: .SKIP 2 .CENTER ^^TKB FILENAME/CP=FILENAME,[200,1]NOSLIB/LB .SKIP 2 \O\R .SKIP 2 .CENTER FTB FILENAME/CP=FILENAME,[200,1]NOSLIB/LB .SKIP 2 M\\ORE INFORMATION ON USING THESE PROCEDURES MAY BE FOUND IN THE ^TASK ^BUILDER ^MANUAL. .SKIP 2 ^ALL OF THE PROGRAMS DESCRIBED HERE RESTORES THE REGISTERS THAT ARE USED IN CONNECTION WITH THEIR OPERATION AND USE. .SKIP 2 ^IT SHOULD BE REMEMBERED THAT THE FIRST SIX OF THE EIGHT AVAILABLE ^REGISTERS (^R0-^R5) ARE FOR GENERAL USE BY USER PROGRAMS. ^REGISTER 6 IS USED AS THE ^STACK ^POINTER (^S^P) AND AS SUCH SHOULD NOT BE ADDRESSED DIRECTLY, THAT IS AVOID USING MODE 0 (ZERO) IN THE VARIOUS OPERATIONS. ^REGISTER 7 IS CALLED THE ^PROGRAM COUNTER (^P^C) AND ALSO SHOULD NOT BE ACCESED IN THE DIRECT MODE. ^YOU MAY NOTICE IN READING THROUGH THE EXAMPLES ^I HAVE INCLUDED THE FOLLOWING CONSTRUCTS OF ^^MACRO-11 \\STATEMENTS: .SKIP 2 .CENTER ^^MOV R0,JDATE .SKIP 2 ^T\\HIS INSTRUCTION MEANS MOVE (COPY) THE CONTENTS OF ^R0 (^REGISTER 0) INTO THE LOCATION SPECIFIED BY THE LABEL ^^JDATE. ^"J\\UMPING" TO A SUBROUTINE IS DONE THRU THE USE OF THE ^^JSR I\\NSTRUCTION AS ILLUSTRATED IN THE FOLLOWING EXAMPLE: .SKIP 2 .CENTER ^^JSR PC,SUBPRG .SKIP 2 ^T\\HE PREVIOUS STATEMENT TRANSFERS CONTROL OF THE PROGRAM TO THE SUBPROGRAM SPECIFIED BY THE LABEL ^^SUBPRG. ^THE ^^PC (R7, R\\EGISTER 7) IS CALLED THE LINKAGE REGISTER. ^ADDITIONAL DETAILS ON THE USE OF THIS AND ALL OTHER ^^MACRO-11 I\\NSTRUCTIONS AND COMMANDS CAN BE FOUND IN THE ^^PDP-11 P\\ROCESSOR HANDBOOK OR THE ^^MACRO-11 R\\EFERENCE MANUAL. .SKIP 2 ^IN THIS DESCRIPTIONS, AN INSTRUCTION MEANS A MACHINE INSTRUCTION (I.E. ^^MOV, JSR, \\ETC.), A STATEMENT USUALLY REFERS TO A ^^FORTRAN \\STATEMENT (I.E. ^^WRITE(5,10), GO TO 20, \\ETC.) AND A COMMAND REFERS TO ^^MACRO-11\\ ASSEMBLY LANGUAGE DIRECTIVES, SUCH AS ^^.BYTE, .TITLE . .PAGE .CENTER ^^ASCEBC (R\\EQUIRES 86. WORDS) .SKIP 2 ^T\HIS SUBROUTINE TRANSLATES STANDARD ^^ASCII \\CODE INTO ^^EBCDIC\\. ^THE ^^FORTRAN\\ CALL TAKES THE FORM OF: .SKIP 2 .CENTER ^^CALL ASCEBC (INBUF,2048) .SKIP 2 ^W\\HERE ^^INBUF\\ IS AN INTEGER ARRAY HOLDING THE CHARACTERS TO BE TRANSLATED, AND 2048 IS THE NUMBER OF CHARACTERS TO BE TRANSLATED. ^THE ^^MACRO-11 \\FORM WOULD TAKE THE FORM THAT WAS GIVEN AS AN EXAMPLE IN THE INTRODUCTION. ^IN MORE DETAIL THIS WOULD TAKE THE FORM OF; .SKIP 2 .LEFT MARGIN 30 .NOFILL .NOJUSTIFY .INDENT 9 SOURCE CODE . . ^^MOV _#TRANS,R5 JSR PC,ASCEBC . . . TRANS: .WORD 2,BUFFER,QUAN BUFFER: .BLKB 80. .EVEN QUAN: .WORD 80. . . . .SKIP 2 .FILL .JUSTIFY .LEFT MARGIN 10 ^^NOTE: T\H\E ASCEBC \\TRANSLATES ^^ASCII\\ CODE INTO ^^EBCDIC\\ CODE AND ^^EBCASC \\DOES THE REVERSE OF TRANSLATING ^^EBCDIC\\ INTO STANDARD ^^ASCII\\ CODE. .PAGE .CENTER ^^CDATE (R\\EQUIRES 75. WORDS) .SKIP 2 ^T\\HIS PROGRAM CONVERTS A GIVEN ^JULIAN DATE (I.E. 266) INTO THE CORRESPONDING CALENDAR DATE (I.E. 9,22). ^FOR THIS PROGRAM TO WORK THE YEAR MUST ALSO BE GIVEN (FOR LEAP YEARS). ^IF THE PROGRAM ENCOUTERS AN ILLEGAL DATE IN THE JULIAN DATE, NEGATIVE NUMBERS ARE RETURNED IN THE MONTH AND DAY VARIABLES. ^THE ^^FORTRAN\\ CALL TAKES THE FORM OF; .SKIP 2 .CENTER ^^CALL CDATE (JLDATE,IMONTH,IDAY,IYEAR) .SKIP 2 .NOFILL .NOJUSTIFY .LEFT MARGIN 30 .INDENT -3 ^W\\HERE: ^^JLDATE\\ IS THE ^JULIAN DATE; GIVEN ^^IMONTH\\ IS THE MONTH OF THE YEAR; RETURNED ^^IDAY\\ IS THE DAY OF THE MONTH; RETURNED ^^IYEAR\\ IS THE YEAR; GIVEN .LEFT MARGIN 10 .SKIP 2 .FILL .JUSTIFY ^THE ^^MACRO-11 \\CALL IS AGAIN THE ^^FORTRAN/MACRO-11\\ INTERFACE IN THE FOLLOWING MANNER. .SKIP 2 .LEFT MARGIN 15 .NOFILL .NOJUSTIFY .INDENT 5 SOURCE CODE . . . ^^MOV R0,JLDATE ;M\\OVE CONTENTS OF ^R0 TO ;LOCATION (^^LOC) JLDATE MOV R1,IYEAR ;M\\OVE CONTENTS OF ^R1 TO ^^LOC IYEAR MOV _#SUBLAB,R5 ;M\\OVE ADDRESS OF THE LABEL ;CALLED ^^SUBLAB\\ TO ^^R5 JSR PC,CDATE ;J\\UMP TO THE SUBROUTINE ;CALLED ^^CDATE \\THROUGH ;THE ^PROGRAM ^COUNTER (^^PC) . . . SUBLAB: .WORD 4,JLDATE,IMONTH,IDAY,IYEAR JLDATE: .BLKW 1 IMONTH: .BLKW 1 IDAY: .BLKW 1 IYEAR: .BLKW 1 . . . .SKIP 2 .JUSTIFY .FILL .LEFT MARGIN 10 ^^NOTE: ^T\\HIS PROGRAM IS ACCURATE AND WORKS CORRECTLY WITH ONE MINOR EXCEPTION. ^WHEN THE YEAR BEING USED IS EVENLY DIVISIBLE BY 4, BUT THE YEAR IS NOT A LEAP YEAR (E.G. 1900), THEN ALL DATES AFTER THE ^JULIAN DATE 59 (^MARCH 1, 1900) WILL BE OFF BY ONE. ^WITH RESPECT TO YEAR, ONLY THE LAST TWO DIGITS ARE NECCESARY FOR PROPER OPERATION. .PAGE .CENTER ^^EBCASC (R\\EQUIRES 150. WORDS) .SKIP 2 ^T\\HIS PROGRAM CONVERTS STANDARD ^^EBCDIC\\ TO STANDARD ^^ASCII \\CODE AND AS SUCH IS CALLED AND USED IN THE SAME MANNER AS THE ^^ASCEBC \\SUBROUTINE IS USED. ^THAT IS THE ^^FORTRAN\\ CALL IS; .SKIP 2 .CENTER ^^CALL EBCASC (INBUF,2048) .SKIP 2 ^A\\DDITIONAL INFORMATION CAN BE FOUND IN THE DESCRIPTION CONCERNING THE ^^ASCEBC \\SUBROUTINE. .PAGE .SKIP 2 .CENTER ^^JDATE (R\\EQUIRES 86. WORDS) .SKIP 2 ^T\\HE ^^JDATE\\ SUBROUTINE ACCEPTS THE MONTH, DAY AND YEAR FROM A CALLING PROGRAM AND RETURNS THE CORRESPONDING ^JULIAN DATE AND THE NUMBER OF DAYS LEFT IN THE YEAR. ^IF THE SUBROUTINE DETECTS ERRONEOUS INFORMATION IN THE DATA (I.E. A THIRTEENTH MONTH, THE FORTIETH DAY OF A MONTH, ETC.) MINUS ONE'S ARE RETURNED TO THE CALLING PROGRAM. ^TO CALL THIS SUBROUTINE FROM ^^FORTRAN\\ THE FOLLOWING STATEMENT IS USED: .SKIP 2 .CENTER ^^CALL JDATE (IMONTH,IDAY,IYEAR,IDATE,NDAYS) .SKIP 2 .LEFT MARGIN 30 .NOFILL .NOJUSTIFY .INDENT -5 ^W\\HERE: ^^IMONTH\\ IS THE MONTH OF THE YEAR; GIVEN ^^IDAY\\ IS THE DAY OF THE MONTH; GIVEN ^^IYEAR\\ IS THE YEAR; GIVEN ^^IDATE\\ IS THE CORRESPONDING ^JULIAN DATE; RETURNED ^^NDAYS\\ IS THE NUMBER OF DAYS REMAINING IN THE YEAR; RETURNED .FILL .JUSTIFY .LEFT MARGIN 10 .SKIP 2 ^^NOTE: T\\HIS PROGRAM IS ACCURATE AND WORKS CORRECTLY WITH ONE MINOR EXCEPTION. ^WHEN THE YEAR IS EVENLY DIVISIBLE BY 4, BUT THE YEAR IS NOT A LEAP YEAR (E.G. 1900), THEN ALL DATES AFTER ^FEBRUARY 28 WILL BE OFF, AND ^FEBRUARY 29 WILL NOT BE FLAGGED AS A MISTAKE. ^WITH REGARD TO THE YEAR VARIABLE, ONLY THE LAST TWO DIGITS ARE NECCESARY FOR PROPER OPERATION.