.TITLE PHODIR - PHONE DIRECTORY ROUTINE .IDENT /1.1/ .ENABL LC ;+ ; ; Free software BY ; Project Software & Development, Inc. ; ; This software is furnished for free and may be used and copied as ; desired. This software or any other copies thereof may be provided ; or otherwise made available to any other person. No title to and ; ownership of the software is hereby transferred or allowed. ; ; The information in this software is subject to change without notice ; and should not be construed as a commitment by PROJECT SOFTWARE ; AND DEVELOPMENT, INC. ; ; PROJECT SOFTWARE assumes no responsibility for the use or reliability ; of this software on any equipment whatsoever. ; ; Project Software & Development, Inc. ; 14 Story St. ; Cambridge, Ma. 02138 ; 617-661-1444 ; ; ; Title: PHODIR.MAC ; Author: Gary N. Larsen ; Date: August 23, 1982 ; ; Description: ; ; Directory routine for Phone. ; ; ; Modification History: ; ;- .ENABL AMA .NLIST BEX .MCALL ALUN$S, DIR$, QIOW$S, SPWN$S, STSE$S, STOP$S ; Local/Global storage area: SPNEST::.BLKW 8. ; SPAWN EXIT STATUS BLOCK MCRNAM: .RAD50 %MCR...% ; SPAWN COMMAND TO MCR... USENAM: .RAD50 %...USE% ; SPAWN USERS COMMAND ; Escape sequence to clear the command line , print the heading , ands set ; the scroll region. DIRM: .ASCII %[2;2H%%[0K%%[3;1H%%[0K% .ASCII %Press any key to cancel the directory listing and continue.% .ASCII %[5;1H%%[0J%%[5;1H% .ASCII %TT# UIC First Name Last Name% .ASCIZ %[6;23r%%[6;1H% DIRML = .-DIRM ; String to remove scrolling region and position the cursor. CMS: .ASCIZ %[r%%[24;1H% CMSLEN=.-CMS USERS: .ASCII %USERS% USEC: .ASCII % /-HEADER% ; MCR COMMAND USELEN=.-USERS ; LENGTH OF THE USER STRING USECL = .-USEC .BYTE 0 ; EXTRA BYTE FOR ESCAPE DEVMSG: .ASCII %DEV /LOG% ; DEVICE /LOG MESSAGE DEVLEN=.-DEVMSG ; BYTE COUNT .BYTE 0 ; EXTRA BYTE FOR ESCAPE .EVEN .SBTTL DIRECT - PHONE DIRECTORY LISTING ;+ ; ; DIRECT - PHONE DIRECTORY LISTING ; ; This routine sets up the buffer to spawn USERS and get a listing of ; UIC's logged in to the system. ; ;- DIRECT::MOV #DIRM,R1 ; ADDRESS OF MESSAGE TO WRITE MOV #DIRML,R2 ; AND THE BYTE COUNT CALL OUTMSG ; OUTPUT THE MESSAGE DIR$ #TIDET ; DEATTACH THE TERMINAL SPWN$S #USENAM,,,,,#SPNEFN,,#SPNEST,#USEC,#USECL ; SPAWN TO ...USE BCS 5$ ; IF CS, DIRECTIVE ERROR STSE$S #SPNEFN ; ELSE, STOP FOR SPAWNED COMMAND BR 40$ ; AND REATTACH THE TERMINAL ; If USERS is not installed, we will spawn "DEV /LOG" to MCR. 5$: CMP $DSW,#IE.INS ; IS THE ERROR "TASK NOT INSTALLED" ? BNE 10$ ; IF NE, NO MOV #DEVMSG,R0 ; ELSE SPAWN DEV/LOG MOV #DEVLEN,R1 ; SET UP BYTE COUNT BR 20$ ; AND SPAWN IT ; If USERS is active, we will spawn the command line to MCR. 10$: CMP $DSW,#IE.ACT ; IS USERS ALREADY ACTIVE ? BNE 30$ ; IF NE, NO (UNEXPECTED ERROR) MOV #USERS,R0 ; SET UP THE COMMAND LINE TO SPAWN MOV #USELEN,R1 ; SET UP THE BYTE COUNT ; Spawn the command line to MCR. 20$: CALL SPAWN ; SPAWN APPROPRIATE COMMAND CALL REPBOT ; REPAINT BOTTOM HALF OF SCREEN RETURN ; Report error message from SPAWN. 30$: SEC ; SHOW WE HAD A DIRECTIVE ERROR CALL CHKDIR ; REPORT IT 40$: DIR$ #TIATT ; REATTACH THE TERMINAL CALL CHKERR ; CHECK/REPORT ANY ERRORS CALL REPBOT ; REPAINT BOTTOM HALF OF SCREEN RETURN .SBTTL REPBOT - READ AND REPAINT THE SCREEN ;+ ; ; REPBOT - READ AND REPAINT THE SCREEN ; ; This subroutine waits for input from the user to repaint the bottom half ; of the screen and continue with phone. ; ; Inputs: ; None ; ; Outputs: ; ; All registers are preserved. ; ;- REPBOT:: QIOW$S #IO.RPR!TF.RNE,#TILUN,#TIEFN,,#TIOSB,,<#SCRBUF,#1,,#CMS,#CMSLEN,#0> ; READ ANY CHAR TO CONTINUE CALL SCRMSG ; AND REPAINT THE SCREEN RETURN .SBTTL SPAWN - SPAWN A MCR COMMAND LINE ;+ ; ; SPAWN - Spawn a MCR command line and wait until it's done. ; ; This subroutine spawns a command to the MCR dispatcher. ; ; Inputs: ; R0 = Command line to spawn ( appended automatically). ; R1 = The command line byte count. ; ; Outputs: ; All registers are preserved. ; ;- SPAWN:: CALL $SAVAL ; SAVE R0 - R5 DIR$ #TIDET ; DEATTACH THE TERMINAL MOV R0,R2 ; SETUP FOR THE APPEND OF ADD R1,R2 ; FIND THE END OF THE MESSAGE MOVB #ESC,(R2)+ ; MOVE IN THE ESCAPE INC R1 ; ADJUST THE BYTE COUNT SPWN$S #MCRNAM,,,,,#SPNEFN,,#SPNEST,R0,R1 ; SPAWN COMMAND TO MCR BCS 10$ ; IF CS, DIRECTIVE FAILED STSE$S #SPNEFN ; STOP FOR SPAWNED COMMAND 10$: DIR$ #TIATT ; REATTACH THE TERMINAL CALL CHKERR ; CHECK/REPORT ANY ERRORS RETURN ; AND RETURN STATUS .END