; ; C10SYS - C LIBRARY ROUTINES (INTERFACES TO SYSTEM CALLS) ; ; This file is ITS dependent. ; TITLE C10SYS .INSRT NC .INSRT NM ; CONTAINS: ; SYSOPEN ; OPEN CHANNEL ; CLOSE ; CLOSE CHANNEL ; CHNLOC ; FIND AVAILABLE CHANNEL ; UIIOT ; PERFORM UNIT INPUT IOT ; UOIOT ; PERFORM UNIT OUTPUT IOT ; SYSREAD ; PERFORM BLOCK INPUT IOT ; SYSWRITE ; PERFORM BLOCK OUTPUT IOT ; SIOT ; STRING IOT ; SYSFINISH ; FORCE OUTPUT AND WAIT FOR COMPLETION ; SYSFORCE ; FORCE OUTPUT TO DEVICE ; RESET ; RESET CHANNEL ; STATUS ; GET CHANNEL STATUS ; RFPNTR ; READ FILE ACCESS POINTER ; ACCESS ; PERFORM RANDOM ACCESS ON CHANNEL ; FILLEN ; GET FILE LENGTH ; FILNAM ; GET FILE NAME FROM CHANNEL ; RAUTH ; READ FILE AUTHOR ; SAUTH ; SET FILE AUTHOR ; RDMPBT ; READ DUMP BIT ; SDMPBT ; SET DUMP BIT ; SREAPB ; SET DO-NOT-REAP BIT ; RFDATE ; READ FILE CREATION DATE ; SFDATE ; SET FILE CREATION DATE ; SRDATE ; SET FILE REFERENCE DATE ; DSKUPD ; UPDATE FILE INFO ; RESRDT ; RESTORE FILE INFO ; TTYGET ; GET TTY STATUS ; TTYSET ; SET TTY STATUS ; CNSGET ; GET CONSOLE PARAMETERS ; CNSSET ; SET CONSOLE PARAMETERS ; ITYIC ; READ TTY INTERRUPT CHARACTER ; WHYINT ; WHY WAS I INTERRUPTED? ; SYSLISTEN ; LISTEN FOR TTY INPUT ; RCPOS ; READ CURSOR POSITION ; SCML ; SET # OF COMMAND LINES ; GETCPU ; RETURN CPU TIME IN 4.069 USEC ; CPUTM ; RETURN CPU TIME IN 1/60 SECONDS ; SLEEP ; GO TO SLEEP ; ETIME ; RETURN A TIME FOR ELAPSED TIME MEASUREMENT ; NOW ; GET CURRENT DATE AND TIME ; CORBLK ; PERFORM PAGE HACKING ; CORTYP ; GET INFORMATION ABOUT PAGE ; PAGEID ; GET NAMED PUBLIC PAGE ; PGWRIT ; CAUSE PAGE TO BE WRITTEN ON DISK ; RSNAME ; READ SNAME ; SSNAME ; SET SNAME ; RUNAME ; READ USER NAME ; RSUSET ; WHAT = RSUSET (WHERE) ; WSUSET ; WHAT = WSUSET (WHERE, WHAT) ; RUSET ; WHAT = RUSET (WHO, WHERE) ; WUSET ; WHAT = WUSET (WHO, WHERE, WHAT) ; WUSRVAR ; RC = WUSRVAR (JOB, SPEC, VALUE) ; DELETE ; DELETE A FILE ; SYSDEL ; DELETE FILE ; RENMWO ; RENAME FILE OPEN FOR OUTPUT ; SYSRNM ; EC = SYSRNM (FS1, FS2) ; SYSLNK ; EC = MAKE LINK (FS1, FS2) ; DIRSIZ ; READ DIRECTORY SIZE, QUOTA INFO ; TRANAD ; RC = TRANAD (JOB, FROM, TO, FLAGS) ; TRANCL ; RC = TRANCL (JOB, FLAGS) ; TRANDL ; RC = TRANDL (JOB, FILESPEC, FLAGS) ; SYSLOAD ; LOAD A PROGRAM ; PDUMP ; PDUMP A PROGRAM ; UCLOSE ; DESTROY INFERIOR JOB ; SYSDISOWN ; EC = SYSDISOWN (JOBCH) ; REOWN ; EC = REOWN (JOBCH) ; SYSDTACH ; EC = SYSDTACH (JOBCH) ; SYSATACH ; EC = SYSATACH (JOBCH, TTY) ; ATTY ; GIVE TTY TO INFERIOR ; DTTY ; TAKE TTY FROM INFERIOR ; WFNZ ; WAIT FOR WORD TO BECOME NON-ZERO ; WFZ ; WAIT FOR WORD TO BECOME ZERO ; VAL7RET ; VALRET AN ASCIZ STRING ; DEMSIG ; SIGNAL A DEMON PROCESS ; SSTATUS ; OBTAIN SYSTEM STATUS ; MAKTAG ; CREATE A TAG (GLOBAL LABEL) ; GOTAG ; GOTO A TAG, DISMISSING INTERRUPTS CENTRY SYSOPEN,[CHAN, FILSPC, MODE] ; OPEN CHANNEL HRLZ B,MODE HRR B,CHAN HRRZ C,FILSPC SYSCAL OPEN,[B ? (C) ? 1(C) ? 2(C) ? 3(C)] RETURN CENTRY CLOSE,[CHAN] ; CLOSE CHANNEL SYSCAL CLOSE,[CHAN] RETURN CENTRY CHNLOC ; FIND AVAILABLE CHANNEL FIRSTC==1 ; CHANGE TO 0 IF SYSTEM FIXED SO THAT ; CHANNEL 0 IS NOT ARBITRARILY SMASHED ; BY .CALL MLINK, ETC. MOVEI B,FIRSTC CL$1: SYSCAL RFNAME,[B ? 2000,,C] JUMPE C,CL$2 ; CHANNEL NOT OPEN ADDI B,1 CAIGE B,20 GO CL$1 SETO A, GO CL$RET CL$2: MOVE A,B CL$RET: RETURN CENTRY UIIOT,[CHAN] ; PERFORM UNIT INPUT IOT MOVE A,CHAN ANDI A,17 LSH A,23. IOR A,[.IOT A] XCT A RETURN CENTRY UOIOT,[CHAN,DATA] ; PERFORM UNIT OUTPUT IOT MOVE A,CHAN ANDI A,17 LSH A,23. IOR A,[.IOT DATA] XCT A MOVE A,DATA RETURN CENTRY SYSREAD,[CHAN,BUFFP,NWORDS] ; PERFORM BLOCK INPUT IOT XENTRY SYSWRITE,SYSREAD ; PERFORM BLOCK OUTPUT IOT MOVN A,NWORDS ; MINUS NUMBER OF WORDS HRLZ 0,A HRR 0,BUFFP ; SET UP CPTR MOVE C,CHAN ANDI C,17 LSH C,23. IOR C,[.IOT 0] XCT C HLRE C,0 ; NEW COUNTER SUB C,A ; NUMBER OF WORDS WRITTEN/READ MOVE A,C RETURN CENTRY SIOT,[CHAN,BYTP,NBYTES] ; STRING IOT SYSCAL SIOT,[CHAN ? BYTP ? NBYTES],SI$LOS MOVE A,NBYTES SI$RET: RETURN SI$LOS: CROAK SIOT LOST GO SI$RET CENTRY SYSFINISH,[CHAN] SYSCAL FINISH,[CHAN] RETURN CENTRY SYSFORCE,[CHAN] SYSCAL FORCE,[CHAN] RETURN CENTRY RESET,[CHAN] ; RESET CHANNEL MOVE A,CHAN ANDI A,17 LSH A,23. IOR A,[.RESET] XCT A SETZ A, RETURN CENTRY STATUS,[CHAN] ; GET CHANNEL STATUS MOVE A,CHAN LSH A,23. IOR A,[.STATUS A] XCT A RETURN CENTRY RFPNTR,[CHAN] ; READ FILE ACCESS POINTER SYSCAL RFPNTR,[CHAN ? MOVEM B],RP$LOS MOVE A,B RP$RET: RETURN RP$LOS: MOVN A,A GO RP$RET CENTRY ACCESS,[CHAN,POS] ; PERFORM RANDOM ACCESS ON CHANNEL SYSCAL ACCESS,[CHAN ? POS] RETURN CENTRY FILLEN,[CHAN] ; GET FILE LENGTH SYSCAL FILLEN,[CHAN ? 2000,,B],FL$LOS MOVE A,B FL$RET: RETURN FL$LOS: MOVN A,A GO FL$RET CENTRY FILNAM,[CHAN,FILSPC] ; GET FILE NAME FROM CHANNEL HRLZ B,CHAN ; CHANNEL HRR B,FILSPC ; FILESPEC FOR RESULTS MOVE C,4(B) ; SAVE 5TH WORD .RCHST B, ; READ CHANNEL STATUS HRLZS (B) ; LEFT ADJUST DEV MOVEM C,4(B) ; RESTORE 5TH WORD RETURN ; DONE CENTRY RAUTH,[CHAN] SYSCAL RAUTH,[CHAN ? MOVEM B],RA$LOS MOVE A,B RA$RET: RETURN RA$LOS: MOVN A,A GO RA$RET CENTRY SAUTH,[CHAN,AUTHOR] SYSCAL SAUTH,[CHAN ? AUTHOR] RETURN CENTRY RDMPBT,[CHAN] SYSCAL RDMPBT,[CHAN ? MOVEM B],RD$LOS MOVE A,B RD$RET: RETURN RD$LOS: MOVN A,A GO RD$RET CENTRY SDMPBT,[CHAN,BIT] SYSCAL SDMPBT,[CHAN ? BIT] RETURN CENTRY SREAPB,[CHAN,BIT] SYSCAL SREAPB,[CHAN ? BIT] RETURN CENTRY RFDATE,[CHAN] ; READ FILE CREATION DATE SYSCAL RFDATE,[CHAN ? 2000,,B],RF$LOS MOVE A,B RF$RET: RETURN RF$LOS: MOVN A,A GO RF$RET CENTRY SFDATE,[CHAN,FDATE] ; SET FILE CREATION DATE SYSCAL SFDATE,[CHAN ? FDATE] RETURN CENTRY SRDATE,[CHAN,FDATE] ; SET FILE REFERENCE DATE SYSCAL SRDATE,[CHAN ? FDATE] RETURN CENTRY DSKUPD,[CHAN] SYSCAL DSKUPD,[CHAN] RETURN CENTRY RESRDT,[CHAN] SYSCAL RESRDT,[CHAN] RETURN CENTRY TTYGET,[CHAN,BLOCK] ; GET TTY STATUS - WRITES 3 VALUES HRRZ B,BLOCK SYSCAL TTYGET,[CHAN ? MOVEM (B) ? MOVEM 1(B) ? MOVEM 2(B)] RETURN CENTRY TTYSET,[CHAN,BLOCK] ; SET TTY STATUS - READS 3 VALUES HRRZ B,BLOCK SYSCAL TTYSET,[CHAN ? (B) ? 1(B) ? 2(B)] RETURN CENTRY CNSGET,[CHAN,BLOCK] ; GET CONSOLE STATUS - WRITES 5 VALUES HRRZ B,BLOCK SYSCAL CNSGET,[CHAN ? MOVEM (B) ? MOVEM 1(B) ? MOVEM 2(B) MOVEM 3(B) ? MOVEM 4(B)] RETURN CENTRY CNSSET,[CHAN,BLOCK] ; SET CONSOLE STATUS - READS 5 VALUES HRRZ B,BLOCK SYSCAL CNSSET,[CHAN ? (B) ? 1(B) ? 2(B) ? 3(B) ? 4(B)] RETURN CENTRY WHYINT,[CHAN,BLOCK] HRRZ B,BLOCK SYSCAL WHYINT,[CHAN ? (B) ? 1(B) ? 2(B) ? 3(B) ? 4(B)] RETURN CENTRY ITYIC,[CHAN] ; READ TTY INTERRUPT CHARACTER MOVE A,CHAN ; CHANNEL .ITYIC A, SETO A, RETURN CENTRY SYSLISTEN,[CHAN] ; NCHARS = SYSLISTEN(CHAN) SYSCAL LISTEN,[CHAN ? MOVEM B],LI$LOS MOVE A,B LI$RET: RETURN LI$LOS: MOVN A,A GO LI$RET CENTRY RCPOS,[CHAN] ; READ TTY CURSOR POSITION (V,,H) SYSCAL RCPOS,[CHAN ? 2000,,B],RC$LOS MOVE A,B RC$RET: RETURN RC$LOS: MOVN A,A GO RC$RET CENTRY SCML,[CHAN,NUMBER] SYSCAL SCML,[CHAN ? NUMBER] RETURN CENTRY GETCPU ; RETURN CPU TIME IN 4.069 USEC .SUSET [24,,A] RETURN CENTRY CPUTM ; RETURN CPU TIME IN 1/60 SECONDS .SUSET [24,,A] LSH A,-12. RETURN CENTRY SLEEP,[TIME] ; GO TO SLEEP MOVE A,TIME .SLEEP A, RETURN CENTRY ETIME ; RETURN A TIME FOR ELAPSED TIME MEASUREMENT .RDTIME A, LSH A,1 RETURN CENTRY NOW,[PCAL] ; GET CURRENT DATE AND TIME HRRZ D,PCAL ; CAL POINTER .CALL [SETZ ? 'RQDATE ? SETZM A] JRST [SETZ A, ? RETURN] LDB B,[331100,,A] ; YEAR ADDI B,1900. MOVEM B,(D) LDB B,[270400,,A] MOVEM B,1(D) ; MONTH LDB B,[220500,,A] MOVEM B,2(D) ; DAY LDB A,[012100,,A] IDIVI A,60. MOVEM B,5(D) ; SECOND IDIVI A,60. MOVEM B,4(D) ; MINUTE MOVEM A,3(D) ; HOUR MOVEI A,(D) RETURN CENTRY CORBLK,[A1,A2,A3,A4,A5] ; PERFORM PAGE HACKING SYSCAL CORBLK,[A1 ? A2 ? A3 ? A4 ? A5] RETURN CENTRY CORTYP,[PAGNO,OUTPUT] ; GET INFORMATION ABOUT PAGE MOVE B,OUTPUT SYSCAL CORTYP,[PAGNO ? 2000,,(B) ? 2000,,1(B) ? 2000,,2(B) 2000,,3(B)] RETURN CENTRY PAGEID,[VPN,IDN] ; GET NAMED PUBLIC PAGE SYSCAL PAGEID,[VPN ? IDN ? 2000,,B],PI$LOS MOVE A,B PI$RET: RETURN PI$LOS: MOVN A,A GO PI$RET CENTRY PGWRIT,[JOB,VPN] SYSCAL PGWRIT,[JOB ? VPN] RETURN CENTRY RSNAME ; READ SNAME .SUSET [.RSNAM,,A] RETURN CENTRY SSNAME,[NAME] ; SET SNAME MOVE A,NAME .SUSET [.SSNAM,,A] RETURN CENTRY RUNAME ; READ USER NAME .SUSET [.RUNAM,,A] RETURN CENTRY RSUSET,[WHERE] HRLZ A,WHERE TLZ A,600000 ; CLEAR DIRECTION AND BLOCK BITS ADDI A,A ; RESULT TO A .SUSET A ; DO IT RETURN CENTRY WSUSET,[WHERE,WHAT] HRLZ B,WHERE TLO B,400000 ; SET DIRECTION BIT TLZ B,200000 ; CLEAR BLOCK BIT ADDI B,A ; TAKE WORD FROM A MOVE A,WHAT .SUSET B ; DO IT RETURN CENTRY RUSET,[WHO,WHERE] HRLZ B,WHERE TLZ B,600000 ; CLEAR DIRECTION AND BLOCK BITS ADDI B,A ; RESULT TO A HRRZ A,WHO ANDI A,17 ; CHANNEL NUMBER LSH A,23. IOR A,[.USET B] XCT A ; DO IT RETURN CENTRY WUSET,[WHO,WHERE,WHAT] HRLZ B,WHERE TLO B,400000 ; SET DIRECTION BIT TLZ B,200000 ; CLEAR DIRECTION BIT ADDI B,A ; TAKE WORD FROM A HRRZ C,WHO ANDI C,17 ; CHANNEL NUMBER LSH C,23. IOR C,[.USET B] MOVE A,WHAT XCT C ; DO IT RETURN CENTRY WUSRVAR,[JOB,SPEC,VALUE] SETZ A, SYSCAL USRVAR,[JOB ? SPEC ? VALUE] RETURN CENTRY DELETE,[FILNAM],[FDEV,FDIR,FFN1,FFN2] ; DELETE A FILE MOVEI A,FDEV ; POINTER TO FILESPEC CALL FPARSE,[FILNAM,A] ; CONSTRUCT FILESPEC MOVEI A,FDEV CALL SYSDELETE,[A] ; DELETE THAT FILE RETURN CENTRY SYSDELETE,[FILSPC] ; DELETE FILE MOVE B,FILSPC ; ADDRESS OF FILESPEC BLOCK HRLZI C,(SIXBIT/DSK/) SKIPN (B) MOVEM C,(B) .SUSET [.RSNAM,,C] SKIPN 3(B) MOVEM C,3(B) SYSCAL DELETE,[(B) ? 1(B) ? 2(B) ? 3(B)] RETURN CENTRY RENMWO,[CHAN,FILSPC] ; RENAME FILE OPEN FOR OUTPUT HRRZ B,FILSPC SYSCAL RENMWO,[CHAN ? 1(B) ? 2(B)] RETURN CENTRY SYSRNM,[FILSP1,FILSP2] HRRZ B,FILSP1 HRRZ C,FILSP2 SYSCAL RENAME,[(B) ? 1(B) ? 2(B) ? 3(B) ? 1(C) ? 2(C) ? 3(C)] RETURN CENTRY SYSLNK,[FILSP1,FILSP2] HRRZ B,FILSP1 HRRZ C,FILSP2 SYSCAL MLINK,[(B) ? 1(B) ? 2(B) ? 3(B) ? 1(C) ? 2(C) ? 3(C)] RETURN CENTRY DIRSIZ,[CHAN,BLOCK] ; WRITES 2 VALUES HRRZ B,BLOCK SYSCAL DIRSIZ,[CHAN ? (B) ? 1(B)] RETURN CENTRY TRANAD,[JOB,FROM,TO,FLAGS] HRRZ B,JOB HRL B,FLAGS HRRZ C,FROM ; FROM FILESPEC HRLI C,-4 ; MAKE IT A CPTR HRRZ D,TO ; TO FILESPEC HRLI D,-4 ; MAKE IT A CPTR SYSCAL TRANAD,[B ? C ? D] RETURN CENTRY TRANCL,[JOB,FLAGS] HRRZ B,JOB HRL B,FLAGS SKIPN FLAGS HRLI B,300003 ; DEFAULT FLAGS SYSCAL TRANCL,[B] RETURN CENTRY TRANDL,[JOB,FILSPC,FLAGS] HRRZ B,JOB HRL B,FLAGS HRRZ C,FILSPC HRLI C,-4 ; MAKE IT A CPTR SYSCAL TRANDL,[B ? C] RETURN CENTRY SYSLOAD,[JOB,CHAN],[RCODE,OLDIOC] ; LOAD A PROGRAM SETZM RCODE CALL ON,[[[2]],[[1]]] MOVEM A,OLDIOC SYSCAL LOAD,[JOB ? CHAN],LD$LOS LD$1: CALL ON,[[[2]],OLDIOC] MOVE A,RCODE RETURN LD$LOS: SETOM RCODE GO LD$1 CENTRY PDUMP,[JOBCH,DSKCH] SETZ B, SYSCAL PDUMP,[JOBCH ? DSKCH ? B] RETURN CENTRY UCLOSE,[JCHAN] ; DESTROY INFERIOR JOB MOVE A,JCHAN ANDI A,17 LSH A,23. IOR A,[.UCLOSE] XCT A RETURN CENTRY SYSDISOWN,[JCHAN] SYSCAL DISOWN,[JCHAN] RETURN CENTRY REOWN,[JCHAN] SYSCAL REOWN,[JCHAN] RETURN CENTRY SYSDTACH,[JCHAN] SYSCAL DETACH,[JCHAN] RETURN CENTRY SYSATACH,[JCHAN,TTY] ; TTY<0 => DEFAULT SKIPGE TTY GO AT$1 SYSCAL ATTACH,[JCHAN ? TTY] AT$RET: RETURN AT$1: SYSCAL ATTACH,[JCHAN] GO AT$RET CENTRY ATTY,[JOB] ; GIVE TTY TO INFERIOR MOVE B,JOB ANDI B,17 LSH B,23. IOR B,[.ATTY] SETZ A, XCT B SETO A, RETURN CENTRY DTTY,[JOB] ; TAKE TTY FROM INFERIOR MOVE B,JOB ANDI B,17 LSH B,23. IOR B,[.DTTY] SETZ A, XCT B SETO A, RETURN CENTRY WFNZ,[PTR] ; WAIT FOR WORD TO BECOME NON-ZERO MOVE A,PTR SKIPN (A) .HANG MOVE A,(A) RETURN CENTRY WFZ,[PTR] ; WAIT FOR WORD TO BECOME ZERO MOVE A,PTR SKIPE (A) .HANG MOVE A,(A) RETURN CENTRY VAL7RET,[STR] ; VALRET AN ASCIZ STRING HRRZ A,STR HRLI A,(.VALUE) XCT A RETURN CENTRY DEMSIG,[DEMON] ; SIGNAL A DEMON PROCESS SYSCAL DEMSIG,[DEMON] RETURN CENTRY SSTATUS,[VALBLK] ; RETURNS 7 VALUES HRRZ B,VALBLK SYSCAL SSTATUS,[MOVEM (B) ? MOVEM 1(B) ? MOVEM 2(B) MOVEM 3(B) ? MOVEM 4(B) ? MOVEM 5(B) ? MOVEM 6(B)] RETURN CENTRY MAKTAG,[TAGP] HRRZ A,TAGP ; TAG POINTER MOVE B,(P) ; RETURN PC MOVEM B,(A) ; SAVE RETURN PC MOVEI B,-2(P) ; STACK POINTER BEFORE CALL MOVEM B,1(A) ; SAVE STACK POINTER RETURN CENTRY GOTAG,[TAGP] MCALL DISMISS MOVE A,TAGP MOVE P,1(A) HRRZ D,(A) GO (D) END