;NEWPPN -BASIC SUBROUTINE WHICH RETURNS WITH THE USER'S PPN ; AND OPTIONALLY THE USER'S DEVICE, JOBNAM, TERMINAL NAME, ; PROGRAM NAME, DATE, TIME ; ; THIS PROGRAM IS CALLED AS FOLLOWS: ; ; XCALL NEWPPN,PPN{,DEVICE{,JOBNAM{,TRMNAM{,PRGNAM{,DAY{,TIM{,TDVNAM{,MEMSIZ}}}}}}}} ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; MAP1 PPN ; MAP2 PROJECT,B,2 ; MAP2 PROGRAMMER,B,2 ; MAP1 DEVICE,S,6 ; MAP1 JOBNAM,S,6 ; MAP1 TRMNAM,S,6 ; MAP1 PRGNAM,S,6 ; MAP1 DAY,S,8 ; MAP1 TIM,S,8 ; MAP1 TDVNAM,S,6 ; MAP1 MEMSIZ,F,6 ; ; XCALL PPN,PPN,DEVICE,JOBNAM,TRMNAM,PRGNAM,DAY,TIM,TDVNAM,MEMSIZ ; ; PRINT ; PRINT " LOG: "DEVICE"["STR(PROJECT)","STR(PROGRAMMER)"]" ; PRINT "JOBNAM: "JOBNAM ; PRINT "TRMNAM: "TRMNAM ; PRINT "PRGNAM: "PRGNAM ; PRINT "DAY : "DAY ; PRINT "TIM : "TIM ; PRINT "TDVNAM: "TDVNAM ; PRINT "MEMSIZ: "MEMSIZ ; PRINT ; END ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; NOTE: THE PPN NUMBERS WILL BE RETURNED AS DECIMAL ; BUT THEY WILL REPRESENT THE OCTAL NUMBERS, SO NO CONVERSIONS ; ARE NECCESSARY. ; ; WRITTEN BY MIKE SIGONA ON 1-29-79 FOR THE AM100 ; MODIFIED FOR AM 100/L ON 1-24-83 JOHN KEYS 202 872-4538 ; ADDING ARGUMENTS FOR JOB NAME, AND TERMINAL NAME, ; AND CORRECT PPN IF HEX MODE IS SET ; ; MODIFIED 18-MAY-86 BY JALAL RAISSI ; ADDING ARGUMENTS FOR PROGRAM NAME, DAY, TIME, TDVNAM, MEMSIZ ; SEARCH SYS SEARCH SYSSYM SEARCH TRM .OFINI .OFDEF XC.ARG,2 ;number of arguments .OFDEF XC.TY1,2 ;type code - arg 1 .OFDEF XC.AD1,4 ;abs addr - arg 1 .OFDEF XC.SZ1,4 ;size - arg 1 .OFDEF XC.TY2,2 ;type code - arg 2 .OFDEF XC.AD2,4 ;abs addr - arg 2 .OFDEF XC.SZ2,4 ;size - arg 2 .OFDEF XC.TY3,2 ;type code - arg 3 .OFDEF XC.AD3,4 ;abs addr - arg 3 .OFDEF XC.SZ3,4 ;size - arg 3 .OFDEF XC.TY4,2 ;type code - arg 4 .OFDEF XC.AD4,4 ;abs addr - arg 4 .OFDEF XC.SZ4,4 ;size - arg 4 .OFDEF XC.TY5,2 ;type code - arg 5 .OFDEF XC.AD5,4 ;abs addr - arg 5 .OFDEF XC.SZ5,4 ;size - arg 5 .OFDEF XC.TY6,2 ;type code - arg 6 .OFDEF XC.AD6,4 ;abs addr - arg 6 .OFDEF XC.SZ6,4 ;size - arg 6 .OFDEF XC.TY7,2 ;type code - arg 7 .OFDEF XC.AD7,4 ;abs addr - arg 7 .OFDEF XC.SZ7,4 ;size - arg 7 .OFDEF XC.TY8,2 ;type code - arg 8 .OFDEF XC.AD8,4 ;abs addr - arg 8 .OFDEF XC.SZ8,4 ;size - arg 8 .OFDEF XC.TY9,2 ;type code - arg 9 .OFDEF XC.AD9,4 ;abs addr - arg 9 .OFDEF XC.SZ9,4 ;size - arg 9 .OFSIZ XC.SIZ OBJNAM NEWPPN.SBR SPACE=40 VMAJOR=1 VMINOR=0 VEDIT=100. PHDR -1,0,PH$REE!PH$REU ; MUST BE LOGGED IN GETPPN: JOBIDX CLR D3 MOVW JOBTYP(A6),D3 ; SAVE OLD JOB TYPE (MAINLY J.HEX) IS SET ANDW #^CJ.HEX,JOBTYP(A6) MOVW JOBUSR(A6),D0 ; GET THE PPN MOV XC.AD1(A3),A5 ; INDEX BASIC VARIABLE (XCALL ARGUMENT) CALL CONVRT MOVW D1,2(A5) ; PROGRAMMER NUMBER RORW D0,#10 ; GET OTHER BYTE - ROTATE RIGHT 8 BITS CALL CONVRT MOVW D1,@A5 ; PROJECT NUMBER GETDEV: CMPB @A3,#1 ; DO THEY WANT THE DEVICE ? JLE BACK ; - NO JOBIDX ; INDEX THE JOB TABLE MOV XC.AD2(A3),A2 ; INDEX BASIC VARIABLE (ASCII DEVICE) LEA A1,JOBDEV(A6) ; INDEX DEVICE NAME (RAD50) UNPACK ; DECODE DEVICE NAME A1 -> A2 CLR D1 JOBIDX ; INDEX THE JOB TABLE MOVW JOBDRV(A6),D1 ; GET DRIVE NUMBER DCVT 0,OT$MEM ; ADD DRIVE NUMBER TO BASIC STRING IN A2 MOVB #72,(A2)+ ; ADD A COLON TO STRING IN A2 CLRB @A2 ; ADD A NULL GETJOB: CMPB @A3,#2 ; DO THEY WANT THE JOB NAME? JLE BACK ; - NO JOBIDX ; INDEX THE JOB TABLE LEA A1,JOBNAM(A6) ; POINT TO THE JOB NAME MOV XC.AD3(A3),A2 ; INDEX THE BASIC VARIABLE (ASCII JOBNAM) UNPACK ; DECODE THE JOB UNPACK ; NAME A1 -> A2 STR1: CMPB -(A2),#SPACE ; IS LAST CHAR IN FIELD A SPACE? BEQ STR1 ; - YES ...BACKUP, TRY ANOTHER CLRB 1(A2) ; - NO ....NULL LAST SPACE IN FIELD GETTRM: CMPB @A3,#3 ; DO THEY WANT THE TERMINAL NAME? JLE BACK ; - NO JOBIDX ; INDEX THE JOB TABLE MOV JOBTRM(A6),A1 ; POINT TO THE TERMINAL STATUS WORD SUB #4,A1 ; NOW POINT TO THE TERMINAL NAME MOV XC.AD4(A3),A2 ; INDEX THE BASIC VARIABLE (ASCII TRMNAM) UNPACK ; DECODE THE TERMINAL UNPACK ; NAME A1 -> A2 STR2: CMPB -(A2),#SPACE ; IS LAST CHAR IN FIELD A SPACE? BEQ STR2 ; - YES ...BACKUP, TRY ANOTHER CLRB 1(A2) ; - NO ....NULL LAST SPACE IN FIELD GETPRG: CMPB @A3,#4 ; DO THEY WANT THE PROGRAM NAME? JLE BACK ; - NO JOBIDX LEA A1,34(A6) ; POINT TO PROGRAM STATUS WORD MOV XC.AD5(A3),A2 ; INDEX THE BASIC VARIABLE (ASCII PRGNAM) UNPACK ; DECODE THE PROGRAM UNPACK ; NAME A1 -> A2 STR3: CMPB -(A2),#SPACE ; IS LAST CHAR IN FIELD A SPACE? BEQ STR3 ; - YES ...BACKUP, TRY ANOTHER CLRB 1(A2) ; - NO ....NULL LAST SPACE IN FIELD GETDAT: CMPB @A3,#5 ; DO THEY WANT THE DATE? JLE BACK ; - NO GDATES @A4 ;get the date MOV XC.AD6(A3),A2 ;A2 := index to DAY CLR D1 ;clear D1 MOVB @A4,D1 ;D1 := month DCVT 2,OT$MEM ;store month in DAY MOVB #'/,(A2)+ ;append "/" to DAY MOVB 1(A4),D1 ;D1 := day DCVT 2,OT$MEM ;append day to DAY MOVB #'/,(A2)+ ;append "/" to DAY MOVB 2(A4),D1 ;D1 := year DCVT 2,OT$MEM ;append year to DAY GETTIM: CMPB @A3,#6 ; DO THEY WANT THE TIME? JLE BACK ; - NO GTIMES @A4 ;get the time MOV XC.AD7(A3),A2 ;A2 := index to TIM MOVB @A4,D1 ;D1 := hours CLRW D2 ;clear D2 (AM/PM flag) CMPB D1,#12. ;is the hour>12 noon? BLE 10$ ; no SUBW #12.,D1 ; yes - adjust for 12 hour time SETW D2 ; and set PM flag 10$: DCVT 2,OT$MEM!OT$ZER ;store hours in TIM MOVB #':,(A2)+ ;append ":" to TIM MOVB 1(A4),D1 ;D1 := minutes DCVT 2,OT$MEM ;append minutes to TIM MOVB #40,(A2)+ ;append space to TIM MOVB #'A,D1 ;D1 := "A" TSTW D2 ;AM or PM? BEQ 20$ ; AM MOVB #'P,D1 ;D1 := "P" 20$: MOVB D1,(A2)+ ;append D1 to TIM MOVB #'M,(A2)+ ;append "M" to TIM GETTDV: CMPB @A3,#7 ; DO THEY WANT THE TDVNAM? BLE BACK ; - NO JOBIDX MOV JOBTRM(A6),A1 ;A1 points to terminal status word MOV T.TDV(A1),A1 SUB #4,A1 ;A1 points to the terminal driver name MOV XC.AD8(A3),A2 ;A2 := index to TDVNAM UNPACK UNPACK STR4: CMPB -(A2),#SPACE ; IS LAST CHAR IN FIELD A SPACE? BEQ STR4 ; - YES ...BACKUP, TRY ANOTHER CLRB 1(A2) ; - NO ....NULL LAST SPACE IN FIELD GETSIZ: CMPB @A3,#10 ; DO THEY WANT THE MEMORY SIZE? BLE BACK ; - NO JOBIDX MOV JOBSIZ(A6),D1 DIV D1,#1024. AND #177777,D1 MOV XC.AD9(A3),A5 ;A2 := index to MEMORY FLTOF D1,@A5 BACK: JOBIDX ; INDEX THE JOB TABLE MOVW D3,JOBTYP(A6) ; RESTORE OLD JOBTYPE RTN ; RETURN TO BASIC ;THE FOLLOWING IS A SUBROUTINE TO SIMULATE OCTAL NUMBERS IN DECIMAL. ;IT PERFORMS THE CONVERSION BY A SNEAKY METHOD -- SSHHH! ; CONVRT: LEA A2,BUF ; INDEX TEMPORARY STORAGE CLR D1 MOVB D0,D1 ; GET PART OF THE PPN AND #377,D1 ; GET RID OF HIGH BYTE OCVT 3,50 ; OUTPUT WITH TRAILING SPACE TO BUF IN A2 LEA A2,BUF ; A2 POINTS TO BEGINNING OF BUF GTDEC ; HERE'S THE PART THAT CHEATS! A2 -> D1 RTN BUF: BLKB 4 ; STORAGE FOR ASCII NUMBER END .