1
0
mirror of synced 2026-03-03 18:16:28 +00:00
Files
lisper.cpus-pdp8/tss8/system/fipa.pal
brad 0e9bfd9d85
2010-04-02 12:36:00 +00:00

1195 lines
30 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/EDUSYSTEM 50 MONITOR FOR MELROSE HIGH SCHOOL #495AB
/COPYRIGHT 1975
/DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
/
/THIS SECTION DEFINES THE HARDWARE CONFIGURATION ON WHICH INDIVIDUAL
/EDUSYSTEM 50 MONITORS ARE TO RUN.
/FOR EACH STATEMENT, THE COMMENT INDICATES THE POSSIBLE RESPONSES.
CPU= 2 /1 IF CPU IS PDP-8; 0 IF CPU IS PDP-8/I;
/2 IF CPU IS PDP-8/E
CORMEM= 70 /HIGHEST DATA FIELD SELECT. FOR 12K SYSTEM,
/RESPOND 20, FOR 16K SYSTEM, RESPOND 30, ETC. (70 MAX)
PHONES= 0 /1 IF DC08 INCLUDES 689AG;
/0 IF IT DOES NOT OR IF TTY INTERFACING IS OTHER THAN DC08
EAE= 0 /20 IF PROCESSOR INCLUDES EAE; 0 IF IT DOES NOT
RF08= 0 /40 IF SYSTEM DISC IS DF32; 0 IF SYSTEM DISK IS RF08
RS08= 1 /NUMBER OF DISCS ON THE SYSTEM, WHETHER DF/DS OR RF/RS.
/RESPOND WITH 1, 2, 3, OR 4.
PUNCH= 1 /1 IF SYSTEM INCLUDES PUNCH; 0 IF IT DOES NOT
TC01= 1 /1 IF SYSTEM INCLUDES DECTAPE(S); 0 IF IT DOES NOT
RK05= 1 /NUMBER OF RK05 CARTRIDGE DISK DRIVES ON THE SYSTEM; 0 TO 4
CDR= 1 /1 IF SYSTEM INCLUDES CARD READER; 0 IF IT DOES NOT
LPT= 1 /1 IF SYSTEM INCLUDES LINE PRINTER; 0 IF NO LINE PRINTER
DECIMAL /MONITOR CAPACITY FOR THIS SYSTEM
JOBMAX= 20 /NUMBER OF SIMULTANEOUS USERS (20 MAXIMUM)
/THE FOLLOWING ENTRIES DEFINE THE NUMBER OF TERMINALS
/ATTACHED TO THE SYSTEM, AND ALSO THE METHOD OF INTERFACING
CONTTY= 1 /WE ALWAYS HAVE A CONSOLE (K00)
DC08A= 0 /NUMBER OF TERMINALS INTERFACED VIA DC08A (PDP-8/I ONLY, 19 MAX.)
DC08LO= 0 /LOWEST HARDWARE LINE NUMBER UTILIZED ON DC08A; USUALLY 0
PT08= 0 /NUMBER OF TERMINALS INTERFACED VIA PT08 (PDP-8 & PDP-8/I ONLY)
KL8= 16 /NUMBER OF ADDITIONAL TERMINALS INTERFACED VIA KL8 (PDP-8/E ONLY, 19 MAX.)
/PARAMATERS VERSION 8.24 (01-JANUARY-75)
/
/
/
/
/COPYRIGHT (C) 1975
/DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
/
/
/THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY
/ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH
/THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS
/SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT BE PRO-
/VIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON
/EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO
/THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE
/SOFTWARE SHALL REMAIN IN DEC.
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE
/WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COM-
/MITMENT BY DIGITAL EQUIPMENT CORPORATION.
/
/DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR
/RELIABILITY OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT
/SUPPLIED BY DEC.
OCTAL
PLT= 0
IFNZRO CPU < IFNZRO DC08A <ILLEGAL CONFIGURATION>>
IFNZRO 24-JOBMAX&4000 <ILLEGAL CONFIGURATION>
IFNZRO 23-KL8-PT08&4000 <ILLEGAL CONFIGURATION>
IFNZRO 24-DC08A&4000 <ILLEGAL CONFIGURATION>
IFZERO DC08A <D689=0>
IFNZRO DC08A < IFNZRO PHONES <D689=4>
IFZERO PHONES <D689=0>>
NULINE= DC08A+PT08+KL8 /EVERY TERMINAL EXCEPT THE CONSOLE
SWDEX= 5 /DISK TRACK OF THE FIRST USER SWAP TRACK
STOMIN= 5 /MINIMUM # FREE STORAGE BLOCK FOR NEW JOB
IFZERO RF08-40 <
IFZERO RS08-1 <DSKSIZ=10>
IFZERO RS08-2 <DSKSIZ=20>
IFZERO RS08-3 <DSKSIZ=30>
IFZERO RS08-4 <DSKSIZ=40>
DSKEXT= DSKSIZ-1>
IFZERO RF08 <DSKSIZ=RS08^100 /# 4K DISC TRACKS
DSKEXT= RS08^100+77>
CLOCKR= 144 /MILLISECONDS PER TICK
TICMIN= 1130 /600 TICKS PER MINUTE
INCLK2= 0322 /INITIAL CLOCK
INCLK1= 7400
TICSPS= 12 /NUMBER OF SYSTEM TICKS PER SECOND
INIDEX= 10 /INIT DISC EXTENSION
TS8DEX= 30 /FIELD 0 DISC EXTENSION*2^3
ERPDEX= 0 /ERP DISC EXTENSION*4
ERPWC= 0 /ERP WORD COUNT
FIPDEX= 4 /FIP DISC EXTENSION*4
FIPWC= 0 /FIP WORD COUNT
SIDEX= ERPDEX /SI DISC EXTENSION*4
SIWC= ERPWC /SI WORD COUNT
LIBACT= 2 /LIBRARY ACCOUNT #
BRKINI= 4000 /INITIAL USER BREAK MASK
/IOT DEFINITIONS
IFNZRO DC08A < /DC08A, DL8I IOTS
TTIL= 6401 /INCREMENT LINE REGISTER
TTI= 6402 /TELETYPE INPUT COMMAND
TTO= 6404 /TELETYPE OUTPUT COMMAND
TTCL= 6411 /CLEAR LINE REGISTER
TTLL= 6412 /LOAD LINE REGISTER, CLEAR AC
TTRL= 6414 /READ LINE REGISTER
T1SKP= 6421 /SKIP ON CLOCK FLAG
T1OFF= 6422 /TURN CLOCK OFF
T1ON= 6424 /TURN CLOCK ON
TTIR= 6461 /INCREMENT THE R REG.
TTCR= 6471 /CLEAR THE R REG.
TTLR= 6472 > /LOAD THE R REG.
/EXTENDED MEMORY
CDF= 6201 /CHANGE TO DATA FIELD 0
CIF= 6202 /CHANGE TO INSTRUCTION FIELD 0
CINT= 6204 /CLEAR USER IOT
RDF= 6214 /READ DATA FIELD
RIF= 6224 /READ INSTRUCTION FIELD
RIB= 6234 /READ INTERRUPT BUFFER
RMF= 6244 /RESTORE MEMORY FIELD
SINT= 6254 /SKIP ON USER IOT
CUF= 6264 /USER FLAG OFF
SUF= 6274 /USER FLAG ON
/EAE
MUY= 7405 /MULTIPLY
DVI= 7407 /DIVIDE
NMI= 7411 /NORMALIZE
SHL= 7413 /SHIFT ARITHMETIC LEFT
ASR= 7415 /ARITHMETIC SHIFT RIGHT
LSR= 7417 /LOGICAL SHIFT RIGHT
MQL= 7421 /LOAD MQ
SCL= 7403 /STEP COUNTER LOAD FROM MEMORY
SCA= 7441 /STEP COUNTER TO AC
MQA= 7501 /MQ TO AC
IFZERO CPU-2 <
DBSZ= 7451 /MODE B ONLY - SKIP IF AC&MQ ARE CLEAR
SWBA= 7447 /CHANGE MODE TO A
SWAB= 7431 /CHANGE MODE TO B (ALSO DOES MQL)
ACS= 7403 /AC(7:11) TO SC; AC CLEARED
SGT= 6006 /SKIP ON GT FLAG
>
/LINE PRINTER IOTS
LSF= 6661 /SKIP ON CHAR FLAG SET
LCF= 6662 /CLEAR CHAR FLAG
LSRP= 6663 /SKIP ON NOT READY OR ON ERROR
LLC= 6664 /TRANSMIT CHAR TO PRINTER
LSP= 6665 /SET PROGRAM INTERRUPT; LP08/LE8
LPC= 6666 /TRANSMIT CHAR & CLEAR FLAG
LCP= 6667 /CLEAR PROGRAM INTERRUPT
LIE= 6665 /AC11 TO INTERRUPT ENABLE; LS08/LS8E
/CTY
TPC= 6044 /LOAD TELEPRINTER AND PRINT
/DISC (DF32)
DCMA= 6601 /CLEAR
DMAR= 6603 /READ
DMAW= 6605 /WRITE
DCEA= 6611 /CLEAR DISC EXTENDED ADDRESS
DEAL= 6615 /LOAD EXTENDED ADDRESS
DFSE= 6621 /SKIP ON ERROR
DFSC= 6622 /SKIP ON COMPLETION
DEAC= 6616 /READ EXTENDED ADDRESS
/DISC (RF08)
DSAC= 6612
DORS= 6614
DIML= 6615
DIMA= 6616
DCXA= 6641
DXAL= 6643
/CARD READER IOT'S
RCSF= 6631
RCRA= 6632
RCRB= 6634
RCNO= 6635 /8E ONLY
RCRC= 6636 /8E ONLY
RCNI= 6637 /8E ONLY
RCSD= 6671
RCSE= 6672
RCRD= 6674
RCSI= 6675 /8E ONLY
RCTF= 6677 /8E ONLY
/RK05 IOT'S
IFZERO PHONES <
DSKP= 6741
DCLR= 6742
DLAG= 6743
DLCA= 6744
DRST= 6745
DLDC= 6746
DMAINT= 6747 >
IFNZRO PHONES <
DSKP= 6751
DCLR= 6752
DLAG= 6753
DLCA= 6754
DRST= 6755
DLDC= 6756
DMAINT= 6757 >
/DECTAPE
DTRA= 6761
DTCA= 6762
DTXA= 6764
DTSF= 6771
DTRB= 6772
DTLB= 6774
IFZERO CPU <
/KW8I REAL TIME CLOCK
CECI= 6137 /CLEAR AND ENABLE CLOCK AND INTERRUPT
CSCF= 6133 /SKIP AND CLEAR FLAG IF FLAG
>
IFZERO CPU-1 <
CECI= 6315 /CLOCK ENABLE
CSCF= 6301 /SKIP ON CLOCK FLAG
CCF= 6302 /CLEAR CLOCK FLAG, CLEAR ENABLE, AND CLEAR BUFFER
CLB= 6304 > /LOAD BUFFER FROM AC
IFZERO CPU-2 <
CECI= 6131 /CLOCK ENABLE
CSCF= 6133 /SKIP AND CLEAR FLAG IF FLAG
/POWER FAIL IOT
SPL= 6102 /SKIP IF POWER LOW
/ 8/E PROCESSOR IOT
SRQ= 6003 /SKIP ON INTERRUPT REQUEST
GTF= 6004 /LINK TO AC0, GT FLAG TO AC1
RTF= 6005 /AC0 TO LINK, AC1 TO GT FLAG
CAF= 6007 > /CLEAR ALL FLAGS
IFZERO CPU-4 <
CLLE= 6135 /AC11 TO INTERRUPT ENABLE FOR CLOCK
CLCL= 6136 /CLEAR CLOCK FLAG
CLSK= 6137 /SKIP ON CLOCK FLAG
SPL= 6102 /SKIP POWER LOW
CAL= 6133 > /CLEAR AC LOW FLAG
IFNZRO DC08A <
/689AG
SRF= 6701 /SKIP IF RING FLAG
SCF= 6711 /SKIP IF CARRIER FLAG
DFCRF= 6742 /CLEAR RING FLAG
CTG= 6721 /CLEAR GROUP COUNTER
RRS= 6702 /READ RING STATUS
ITG= 6731 /INCREMENT GROUP COUNTER
STR= 6722 /SET TERMINAL READY
EDF= 6704 /ENABLE DATAPHONE FEATURES
DDF= 6714 /DISABLE DATAPHONE FEATURES
CTR= 6724 /CLEAR TERMINAL FLAG
CCF= 6741 /CLEAR CARRIER FLAG
RCS= 6712 /READ CARRIER STATUS
>
/FIP IOTS (IN ABBREVIATED FORM)
SEGS= 0006 /RETURN NUMBER OF FREE SEGMENTS ON DISK
ASD= 0040 /ASSIGN
REL= 0042 /RELEASE
REN= 0200 /RENAME
OPEN= 0201 /OPEN
CLOS= 0202 /CLOSE
RFILE= 6603 /READ FILE
PROT= 0204 /PROTECT
WFILE= 6605 /WRITE FILE
CRF= 0210 /CREATE
EXT= 0211 /EXTEND
RED= 0212 /REDUCE
FINF= 6613 /FILE INFORMATION
LIN= 0214 /LOGIN
LOUT= 0215 /LOGOUT
WHO= 6616 /WHO
/DEVICE DATA BLOCK
DDBSTS= 0 /WORD 1, STATUS AND UNIT NUMBER
DXON= 2000 /XOFF SENT FLAG
DSI= 1000 /DESTINATION IS S.I. FLAG
DFULL= 400 /KEYBOARD BUFFER IS FULL
DUPL= 200 /CONSOLE IN DUPLEX MODE
SICOM= 100 /COMMAND WAITING
DECHO= 40 /CAUSE SI TO RE-ECHO CURRENT INPUT BUFFER
/DEVICE UNIT NUMBER IS IN BITS 6-11
DDBJN= 1 /WORD 2, JOB NUMBER IN 7-11
DDBBRK= 2 /BREAK MASK
DDBTIM= 3 /TIME THAT DEVICE WAS ASSIGNED
DDBINP= 4 /BUFFER FILL POINTER
DDBINC= 5 /BUFFER TOTAL COUNT
DDBOUC= 6 /BUFFER EMPTY COUNT
DDBOUP= 7 /BUFFER EMPTY POINTER
/JOB DATA AREA
JOBSTS= 0 /STATUS
/STR0
JSRUN= 4000 /RUN BIT
JSEREN= 2000 /USER ERROR ENABLE
JCOMBD= 1000 /LAST TIME THE JOB RAN AS COMPUTE BOUND
JSPEEK= 400 /ALLOW "PEEK" AND "LOGOUT" IOT'S
JSACC= 200 /JOB LOGGED IN UNDER PRIVILEGED ACCOUNT (1, 2, OR 3)
JSIOT= 100 /NON-RESIDENT IOT
JSIOTC= 40 /COPY IOT RESULT TO USER
JSEXON= 20 /EXECUTE ONLY
JSINER= 10 /INHIBIT ERROR REPORT FROM SI, (UNTIL NEXT COMMAND)
/BITS 9-11 ARE SYSTEM ERROR CODE
UUOERF= 1 /IOT ERROR
SWPRER= 2 /SWAP READ ERROR
SWPWER= 3 /SWAP WRITE ERROR
DSKERR= 5 /DISC ERROR
HUNGDV= 6 /HUNG DEVICE
/STR1
JSTIME= 4000 /TIME IS UP
JSF0= 2000 /FILE 0 IS NOT BUSY
JSF1= 1000 /FILE 1 IS NOT BUSY
JSF2= 400 /FILE 2 IS NOT BUSY
JSF3= 200 /FILE 3 IS NOT BUSY
JSDEL= 100 /KEYBOARD DELIMITER SEEN
JSLPT= 40 /LINE PRINTER BUFFER IN USE BUT NOT FULL
JSTEL= 20 /TELEPRINTER OUTPUT BUFFER IN USE BUT NOT FULL
JSPTR= 10 /CHARACTERS IN READER BUFFER
JSPTP= 4 /PUNCH BUFFER IN USE BUT IS NOT FULL
JSERR= 2 /SYSTEM ERROR DETECTED
JSWAIT= 1 /JOB NOT IN WAIT STATE
JOBSTB= 2 /DEVICE STATUS REGISTER (FOR RK05, DECTAPE, AND CARD READER)
JOBWMK= 3 /WAIT MASK
JOBSRA= 5 /JOB RESTART ADDRESS
JOBERR= 6 /JOB ERROR RESTART ADDRESS
JOBLNK= 7 /IOT LINKAGE
JOBSWR= 10 /SWITCH REGISTER
JOBREG= 11 /PC LINK AC
JOBEAE= 14 /MQ MODE GT SC
JOBACC= 16 /ACCOUNT NUMBER
JOBF0= 17 /POINTER TO FILE 0 CONTROL
JOBF1= 20 /POINTER TO FILE 1 CONTROL
JOBF2= 21 /POINTER TO FILE 2 CONTROL
JOBF3= 22 /POINTER TO FILE 3 CONTROL
JOBRTM= 23 /LOW ORDER RUN TIME
JOBRTH= 24 /HI ORDER RUN TIME
/FILE CONTROL BLOCK - POINTED TO BY JOBFX, X=0,1,2,3
FILWPT= 0 /POINTER TO FILE RETRIEVAL WINDOW
FILSCT= 1 /SEGMENT NUMBER OF FIRST WINDOW ENTRY
FILPRO= 2 /FILE PROTECTION - BIT 9
FILPAR= 3 /POINTER TO RFILE OR WFILE PARAMETER BLOCK
FILDA= 4 /DISC ADDRESS OF RFILE OR WFILE
FILWC= 6 /-WORD COUNT OF RFILE OR WFILE
FILRES= 7 /POINTER TO FILPIF IN USER AREA
/FILE RETRIEVAL WINDOW
/WORD 0: UFD LINK TO NEXT GROUP OF 7 SEGMENT POINTERS
/WORDS 1-7: SEVEN SEGMENT ADDRESSES
/RFILE OR WFILE PARAMETER BLOCK - POINTED AT BY FILPAR
FILPFN= 0 /FUNCTION: 0603 OR 0605
FILPDX= 1 /DISC EXTENSION
FILPIF= 2 /INTERNAL FILE # (BITS 10-11) AND FIELD # (BITS 7-9)
FILPWC= 3 /-WORD COUNT FOR THIS TRANSFER
FILPCA= 4 /CORE ADDRESS FOR THIS TRANSFER
FILPDA= 5 /DISC ADDRESS
FILPRA= 6 /EXEC RETURN ADDRESS FOR THIS TRANSFER
FILPCT= 7 /POINTER TO FILE CONTROL BLOCK
/CORE TABLE CONTROL FLAGS
SWAP= 4000 /SWAP REQUEST
LOCK= 2000 /LOCK IN CORE
NOTRUN= 1000 /HAS NOT BEEN SCHEDULED TO RUN
FIP= 400 /FILE PHANTOM
SI= 200 /SYSTEM INTERPRETOR
NOHOLD= 140 /INHIBIT "NOTRUN" STATUS AFTER FOUR CONSECUTIVE FILE TRANSFERS
CJOB= 37 /BITS 7-11 CONTAIN THE JOB #
/FIP TABLE DEFINITIONS
SATSIZ= 530
JTABLE= 6000
ENTABL= JTABLE+JOBMAX+1
UTABLE= ENTABL+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX
RTABLE= UTABLE+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX
/TABLES
CORTBL= 7001 /CORE ASSIGNMENT TABLE
L2QTB= CORTBL+7
IFZERO DC08A <DCSIZE=0>
IFNZRO DC08A <DCSIZE=400> /SIZE OF FIELD 1 DC08A CODE PLUS 689AG CODE
OUTREG= 200 /ACTIVE OUTPUT REGISTERS (TTY'S, LPT & PTP)
SKPTBL= OUTREG+NULINE+3 /START OF IOT SKIP TABLE
SKPTP= SKPTBL+NULINE+NULINE+3 /POSITION OF PUNCH SKIP IN SKIP TABLE
RINGIN= SKPTP+3 /KEYBOARD INPUT RING BUFFER
ENDBUF= OUTREG+200 /END OF KEYBOARD INPUT BUFFER
INPUTS= ENDBUF-RINGIN%2 /NUMBER OF POSSIBLE ENTRIES IN THE KEYBOARD RING BUFFER
DATFLD= CDF 10 /MONITOR DATA FIELD SELECT
IFZERO EAE-20 <MQREG=1>
IFZERO EAE <IFNZRO CPU&7776 <MQREG=1>
IFZERO CPU&7776 <MQREG=0>>
IFNZRO OUTREG&1 <YOU GOOFED>
/SUPER CRITICAL LOCATIONS
/THESE LOCATIONS ARE USED TO LINK TS8, TS8II, FIP, SI, AND INIT.
/IT MAY BE NECESSARY TO ADJUST THEM ACCORDINGLY
/DEFINED IN TS8:
WSCHED= 2573 /ADDRESS FOR WAIT
GETJTB= 401 /GETJTA
CORSRC= 1317 /SEARCH CORE TABLE
OVERLA= 5171 /FILE STUFF
READFI= 574 /MORE FILE STUFF
CONDBA= 132 /DEVTBL POINTER USED BY "PRINT" ETC.
RETB= 611 /RETURN A BLOCK TO FREE CORE
GETB= 1405 /GET A BLOCK OF FREE CORE
GETDB0= 1447 /GET A DDB
CLK1= 51 /LOW ORDER DAYTIME CLOCK
CLK2= 50 /HIGH ORDER DAYTIME CLOCK
DATE= 166 /12 BIT DATE WORD
TTCHAR= 31 /SAVE REG. FOR CONSOLE CHARACTERS
KBD00= 3201 /PROCESS KEYBOARD INPUT
PRINT0= 1205 /TYPE OUT A CHARACTER
OVRLA1= 562 /MORE FILE STUFF
RUNFI= 605 /SI FILE TRANSFER INITIALIZER
L2SF= 103 /LEVEL 2 SAVED MODE AND FIELD
SICLR= 6572 /SI CLEAR LINKED BUFFER
TIMSI= 2421 /TIMER FOR SI "COMWAT"
SIWAIT= 1702 /NUMBER OF SI COMMANDS BEING WAITED ON
TIMFIP= 2423 /TIMER FOR FIPLOCK
FIPLOK= 2724 /CORTBL STATUS CHECK FOR FORCE OUT
CLKINI= 322 /CONVERT HARDWARE CLOCK TO SYSTEM-TICKS (100MS)
BLT0= 1602 /BLOCK TRANSFER FROM CORE TO CORE
KBDSQ= 3213 /ADDRESS OF JMS TO ^S/^Q CODE
/DEFINED IN TS8II:
F1TCNT= 175 /SI DDB CHARACTER COUNT
F1ECNT= 176 /SI DDB EMPTY COUNT
F1BUF= 177 /SI DDB EMPTY BLOCK POINTER
DTJOB= 20 /JOB OWNING THE DECTAPE CONTROLLER
RKJOB= 54 /JOB OWNING RK05 CONTROLLER
DTSI= 1175 /SI TERMINATE A DECTAPE ON TIMER
DATA1= 2200+DCSIZE
DEVTBL= DATA1+140
DEVTBE= DEVTBL+NULINE+NULINE+2
JOBTBL= DEVTBE+22
CLKTBL= JOBTBL+JOBMAX+1
TTYTBL= CLKTBL+JOBMAX+1
PRGTBL= TTYTBL+JOBMAX+1
DSUTBL= PRGTBL+JOBMAX+JOBMAX+JOBMAX-7
FIPBLK= 7720 /FIXED BLOCK FOR FIP I/O
WINBAS= 7730 /ADDRESS OF THE BASIC WINDOW
OUTDIF= -OUTREG^2+DEVTBL /FOR LINKING BETWEEN OUTREG AND DEVTBL
F1OFFJ= 164 /FOR OFF/ON COMMANDS USED BY SI
IFNZRO DEVTBL&1 <YOU GOOFED>
/DEFINED IN SI:
DTSIDT= 7270 /RETURN FROM STOPPING A DECTAPE ON TIMER
VERBRK= 7600 /START OF INSTALLATION DEFINED LOGIN MESSAGE
/FIP VERSION 8.24 (01-JANUARY-75)
/
/
/
/
/COPYRIGHT (C) 1975
/DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
/
/
/THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY
/ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH
/THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS
/SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT BE PRO-
/VIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON
/EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO
/THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE
/SOFTWARE SHALL REMAIN IN DEC.
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE
/WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COM-
/MITMENT BY DIGITAL EQUIPMENT CORPORATION.
/
/DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR
/RELIABILITY OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT
/SUPPLIED BY DEC.
/FIP HANDLES ALL NON-RESIDENT FILE IOT'S
/RUNS IN AN UPPER FIELD IN PLACE OF USER IT IS SERVING
/RUNS IN EXEC MODE
FIELD 1 /FIP LOADS ONTO DISK TRACK 1
*0
JMP I .+1
FIP0
LNS01, LNS0
RETBK1, RETBKS
LNK01, LNK0
ZDS1, DS1 /
*10
INDEX, 0 /ONLY REGISTER AVAILABLE IN FIP FOR INDEXING
P5400, 5400
P2000, 2000
P0077, 0077
P0007, 7
FIDEXP, /TO REPLACE FIDEXP, FIPDEX WHERE FIPDEX=4
P0004, 4
FIPFLD, /FIELD WE ARE RUNNING IN
C0020, 20
C002,
FILPRP, FILPRO
FIPDAT= 155 /DATA REFERENCED BY FIP
*FIPDAT
FIPJOB, .
C0400, 400
SEGSIZ= C0400 /# WORDS PER SEGMENT
FIBASE, SWDEX+JOBMAX /BASE ADDRESS OF ALLOCATABLE DISC STORAGE
JOB, . /# OF CURRENT JOB
JOBDAT, . /ADDRESS OF CURRENT JOB DATA LIST. MUST RESIDE IN DATA FIELD.
P7000,
CORTBA, CORTBL-1 /CORE ALLOCATION TABLE
DEVTBA, DEVTBL /DEVICE TABLE
DEVEND, DEVTBE /START OF ASSIGNABLE DEVICE TABLE
DSBUSY, . /DISC BUSY COUNT
/THE DATE IS KEPT AS A 12 BIT NUMBER IN THE FORMAT
/DATE=((YEAR-1974)*12+(MONTH-1))*31+DAY-1
DATE, .
BLTA, BLT0 /BLOCK TRANSFER
BLT= JMS I BLTA
CORSRA, CORSRC
CORE= JMS I CORSRA
GETBA, GETB
GETBLK= JMS I GETBA
GETDBA, GETDB0 /GET A DATA BLOCK
GETDDB= JMS I GETDBA
PRINTA, PRINT0 /TYPE OUT A CHARACTER
PRINT= JMS I PRINITA
GETJT0, GETJTB /GET JOB DATA TABLE ADDRESS
GETJTA= JMS I GETJT0
RETBA, RETB /RETURN BLOCK TO FREE STORAGE
RETBLK= JMS I RETBA
WAITA, WSCHED
WAIT= JMP I WAITA
DEVOVR, JOBTBL /END OF DEVICE TABLE; START OF JOB TABLE
*20
FIUSAC, 0 /SAVED USER AC
FIJOB, 0 /JOB NUMBER FILE PHANTOM IS REPRESENTING
FIOPTR, 0 /POINTER TO FIELD 0 IOT
GDRETP, 0 /RETRIEVAL POINTER, SET BY GD0 ROUTINE
WNDREM, 0 /REMAINDER FROM DIVISION BY 7
BUFSTA, 0 /BUFFER STATUS, 7777 IF FULL
BUFMOD, 1 /BUFFER MODIFIED IF =0; UNCHANGED IF =1
SATSTA, 0 /SATSTATUS, 7777 IF CHANGED THIS RUN
TABSTA, 0 /TABLE STATUS, 7777 IF CHANGED THIS RUN
/POINTERS TO FILE PHANTOM'S INTERNAL TABLES
JOBTAB, JTABLE /TABLE OF PROJ,PROG NUMBERS FOR ALL ACTIVE JOBS
ENTEND, /END OF ENTRY TABLE
UFDTBL, UTABLE /TABLE OF ALL ACCESSED UFD'S
UFDEND, /TOP OF UFD TABLE
RETTBL, RTABLE /TABLE OF RETRIEVAL INFORMATION FOR ALL ACCESSED UUFD'S
ENTTBL, ENTABL-10 /TABLE REFLECTING STATE OF ALL POSSIBLE FILE NUMBERS
BUFFER, 5400 /BUFFER FOR DIRECTORY MANIPULATIONS
SATBOT, -SATSIZ /BOTTOM OF STORAGE ALLOCATION TABLE
/SUBROUTINE POINTERS
DE01, DE0 /GET A DIRECTORY ENTRY
DS01, DS0 /DIRECTORY SEARCH
GE01, GE0 /GET A DIRECTORY WORD INTO CORE
GD01, GD0 /GET A FILE DIRECTORY ENTRY INTO CORE
WRT1, WRITE /MAKE SURE THE BUFFER IS EMPTY
DTE01, DTE0
FIO01, FIPIO /COMMON DISC I/O ROUTINE
SATL1, SATLOK /GET A FREE SEGMENT FROM SAT
TF01, TF0 /FREE AN ENTRY ON UFD TABLE
UC01, UC0 /USER-OWNER FILE CHECK
UFO01, UFO0 /OPEN A UFD
UTS01, UTS0 /SEARCH UFD TABLE FOR PROJ,PROG NUMBER
CL01, CL0 /CLOSE A FILE
WND201, WND20 /DIVIDE BY SEVEN
FIEXIT, FIX0 /EXIT ROUTINE
BLDP1, BLDP /BUILD A POINTER TO ENTTBL
ENR01, ENR0
REL01, REL00
WR01, WR0
GTBLO1, GTBLOK
EBLD0, EBLD
JBLD0, JBLD
FIX401, FIX40
IFN01, IFN0
LGI201, LGI20 /-1 TO USER AC
FGETJT= JMS I .
FGETJ0
DIRBAD, BADDIR
/CONSTANTS
C0006, 6
C0200, 200
P0037, 37
P0003, 3
P6000, 6000
P0777, 777
C0605, 6605
C0005, 5
C0603, 6603
C7774, -4
C4400, 4400
C7771, 7771
P7770, 7770
CFLD= CDF 20 /FIP IS ALWAYS IN FIELD 2
EXQ1,
UTPRNU, 0 /USED BY UTS0 ROUTINE TO HAVE THE PTR TO UFD TABLE WHILE SEARCHING
CFH, 0 /THIS LOCATION IS USED FOR TEMP STORAGE BY MANY ROUTINES
ACC01, ACT01 /SEE IF CALLING USER IS ACCOUNT 1
BASCO1, BASCO0 /SEE IF THE FILE IS BASIC
BASSWT, 0 /SWITCH FOR BASIC
C0010, 10
C7700, 7700
BASWIN, WINBAS /FIELD 1 ADDRESS OF BASIC WINDOW
BAS1A, BAS0 /CREATES A BASIC WINDOW
SEGLIM, 0
REWNDC,
REL6, 0
FIOSTK, 0 /STACK HOLDING IOT LINKAGE
0
0
0
0
0
0
0
FLPARB, 0 /TABLE FOR READ OR WRITE PARAMETER CONSTRUCTION
0
0
0
0
0
OVERLA
0
/ROUTINE TO RELEASE FREE BLOCK, (IF ANY), IF IT IS
/NECESSARY TO ABORT FIP FOR SOME REASON.
RETURN, TAD FIOSTK /GET THE IOT THAT BROUGHT US HERE
CMA /IS THERE A PARAMETER BLOCK?
AND C4010
SZA CLA
JMP I FIEXIT /NONE, OK TO EXIT
DATFLD
TAD I FIOPTR /GET THE BLOCK
JMS I RETBK1 /RETURN IT SO IT WON'T BE LOST FOREVER
CLA
JMP I FIEXIT /NOW IT'S OK TO LEAVE
C4010, 4010 /MASK FOR FINF AND WHO
/FILE PHANTOM START
/FIP'S FIRST JOB IS TO PICK UP THE IOT WHICH IT IS TO PERFORM
/AND THE PARAMETERS WHICH GO ALONG WITH IT (IF ANY). THESE
/ARE MOVED INTO AN 8-WORD BLOCK CALLED 'FIOSTK.' THE FIRST REG-
/ISTER IN THIS BLOCK CONTAINS THE IOT, PARAMETERS FOLLOW
*200
FIP0, CLL CLA IAC
DCA BUFMOD /MARK BUFFER AS NOT MODIFIED
DCA SATSTA /CLEAR SAT STATUS
DCA TABSTA /CLEAR TABLE STATUS
TAD BUFSTA /IS THERE VALID DATA IN THE BUFFER?
SZA CLA
IAC /YES; RE-CALCULATE DISK PARAMETERS IF NEEDED
DCA BUFSTA
6201 /CDF FIELD ZERO
TAD I JOB /GLOBAL TO "JOB"
AND P0037
DCA FIJOB /SAVE IT
CFLD
FGETJT /SAVE USER AC
JOBREG+2
DCA FIUSAC /ADDRESS OF USER'S AC
FGETJT
JOBLNK /IOT REQUEST WORD
DCA FIOPTR /POINTER TO IOT LINKAGE
DATFLD
TAD I FIUSAC
DCA FIUSAC /USER'S AC
TAD I FIOPTR /PICK UP LINKAGE
AND IC7400 /IS IT AN IOT? (IF IT IS, JOBLNK WILL HAVE BITS 0-3 CLEARED)
SNA CLA
JMP FIP2 /IS AN IOT, SO GO MOVE IT INTO FIOSTK (AC IS PARAMETER)
TAD I FIOPTR /IS A POINTER, PICK UP LINKAGE
DCA FIP6 /POINTER TO LINKAGE TABLE
CFLD
6202 /CIF FIELD 0
BLT /MOVE IOT PARAMETERS INTO FIOSTK
DATFLD
FIP6, 0
6221 /CDF THIS FIELD
FIOSTK /IOT LINKAGE BUFFER
-10
TAD FIOSTK
SPA CLA /WILL THE IOT PARAMETER BLOCK BE NEEDED TO RETURN PARS?
JMP FIP4 /YES, SO DON'T RETURN IT
TAD FIP6
JMS I RETBK1 /RETURN THE IOT PARAMETER BLOCK TO FREE CORE
CLA CLL
DATFLD
DCA I FIOPTR /CLEAR JOBLNK TO AVOID CONFUSION LATER
CFLD
/COMES HERE WHEN IOT AND ITS PARAMETERS ARE COMFORTABLY
/NESTLED IN FIOSTK
FIP4, TAD IOTABL
DCA FITPTR /TABLE POINTER
FIP5, ISZ FITPTR /PICK UP IOT FROM TABLE
TAD I FITPTR
SNA /END OF TABLE?
JMP I LGI201 /DON'T KNOW WHAT TO DO SO PASS BACK AN ERROR AT LEAST
CIA /NO
TAD FIOSTK /IOT FROM USER
SZA CLA /DISPATCH?
JMP FIP5 /NO
TAD IOTABL /YES, FIND PROPER POINTER
CIA
TAD FITPTR
TAD IODSPA
DCA FITPTR
TAD I FITPTR /PICK UP DISPATCH ADDRESS
DCA FITPTR
TAD FIOSTK /IS THIS AN IOT WHICH DOES REQUIRE PARAMETERS TO BE
/RETURNED IN AN IOT PARAMETER BLOCK?
SMA CLA /...IF SO, USER AC CONTAINS A PTR TO WHERE THEY WILL GO
DCA FIUSAC /CLEAR USER AC
JMP I FITPTR /DISPATCH
/COMES HERE FOR A "SHORT" IOT. SAVED AC IS ONLY PARAMETER
/PUT IT IN FIOSTK+1
FIP2, TAD I FIOPTR /PICK UP IOT
DCA FIOSTK /PLACE ON STACK
TAD FIUSAC /USER ACCUMULATOR
DCA FIOSTK+1 /SIMULATE LINKAGE
JMP FIP4-2
IOTABL, . /TABLE OF USER FILE IOT'S
ASD /ASSIGN A DEVICE
REL /RELEASE A DEVICE
REN /RENAME A FILE
OPEN /OPEN A FILE
CLOS /CLOSE A FILE
RFILE /FILE READ (WINDOW MOVE)
PROT /FILE PROTECTION
WFILE /FILE WRITE (WINDOW MOVE)
CRF /CREATE A FILE
EXT /EXTEND A FILE
RED /REDUCE A FILE
FINF /FILE INFORMATION
LIN /LOGIN
LOUT /LOGOUT
WHO /RETURN PASSWORD
SEGS /RETURN # OF DISK SEGMENTS AVAILABLE
0
IODSPA, IODISP-1
FITPTR, 0
IC7400, 7400
/ROUTINE TO GET A DIRECTORY ENTRY INTO CORE
/CALLING SEQUENCE:
/ TAD (INTERNAL FILE NUMBER)
/ JMS GD0
/ RETURN (BUFFER POINTER IN AC, 0=ERROR)
GD0, 0
JMS I EBLD0
DCA GDUFDP
TAD I GDUFDP /RELATIVE POSITION IN UFD TABLE
JMS I BLDP1
DCA GDRETP /POINTER TO UFD RETRIEVAL INFORMATION
ISZ GDUFDP
TAD I GDUFDP /PICK UP ENTRY ADDRESS WITHIN UFD
DCA GD1
TAD GDRETP
JMS I GE01 /GET ENTRY INTO CORE
GD1, 0
JMP I GD0
GDUFDP, 0
IFN0, 0
TAD FIOSTK+1
AND P0003
DCA FIOSTK+1
JMP I IFN0
EBLD, 0
DCA CFH
TAD FIJOB
CLL RTL
TAD CFH
RAL
TAD ENTTBL
JMP I EBLD
WR0, 0 /WRITE OUT THE CONTENTS OF THE BUFFER
TAD C0605 /WRITE IOT
DCA FLPARB /I/O PARAMETER BLOCK
JMS I FIO01 /PERFORM THE WRITE
HLT /ERROR ON WRITE, TOO BAD
CLA IAC
DCA BUFMOD /SET NOT-MODIFIED STATUS
JMP I WR0
/ROUTINE TO OPEN A FILE
OPN0, JMS I BASCO1 /IF BASIC SET BASSWT TO -1
DCA OPENTT /PTR TO ENTTBL
JMS I JBLD0 /PROJ PROG # OF THIS JOB IN AC
DCA PRJPRO /SAVE PROJ, PROG #
TAD FIOSTK+2
SNA /IF [S]HE OWNS THE FILE THEN FIOSTK+2 IS 0
JMP OPNOWN /YES, [S]HE DOES
CIA
TAD PRJPRO /IF [S]HE HAS MENTIONED THE PROJ, PROG #
SNA CLA /CHECK IF [S]HE IS THE OWNER
JMP OPNOWN
STA
TAD FIOSTK+2 /TRYING TO OPEN ACCOUNT 1 FILE?
SZA CLA
JMP .+6 /NO, OK
TAD FIOSTK+3 /WHOSE UFD?
CIA
TAD PRJPRO /HIS/HER OWN?
SZA CLA
JMP OPN3 /NO, TELL HIM/HER FILE NOT FOUND
TAD FIOSTK+2
AND C7700 /TAKE OUT JUST THE PROJ # OF THE FILE
CIA
TAD PRJPRO /DOES IT AGREE WITH JOB'S PROJ #?
AND C7700
SNA CLA
TAD P0003 /4 IN AC SAME PROJ #
CLL IAC /1 IN AC DIFF PROJ #
JMP .+4
OPNOWN, TAD PRJPRO
DCA FIOSTK+2
TAD C0010 /10 IN AC IF [S]HE OWNS THE FILE
DCA PRJPRO /STORE PROTECTIVE BITS FOR READ CASE
TAD FIOSTK+2 /PICK UP THE PROJ PROG # OF THE FILE
JMS I UTS01 /SEARCH OPEN UFD TABLE RETURN WITH PTR IN AC
JMP OPN6 /UFD NOT OPEN, GO OPEN IT
OPN2, DCA I OPENTT /SAVE ITS RELATIVE PTR IN ENTTBL
TAD I OPENTT /GET RELATIVE ADDRESS OF UFD TBL
JMS I BLDP1 /BUILD A PTR TO RETTBL ENTRY
DCA FIOSTK+2 /SAVE IT
JMS I DS01 /3 WORD SEARCH
FIOSTK+2
JMP OPN3 /NO SUCH FILE
TAD P0007 /PTR TO RETRIEVAL ENTRY IN BUFFER
DCA OPBUFP
ISZ OPENTT
TAD I ZDS1 /GET THIS FILE'S DIRECTORY ADDRESS
DCA I OPENTT /SAVE IN SECOND WORD OF ENTTBL ENTRY
CLL CMA RTL /-3 IN AC
TAD OPBUFP /PTR TO PROTECTION BIT
JMS I OPN11A /CHECK PROTECTION OF THE FILE
PRJPRO, 0
TAD I OPBUFP /ADD POINTER TO FIRST RETRIEVAL WINDOW AND
DCA PRJPRO /SAVE WITH PROTECTION BIT
TAD OPNFI0 /JOB STATUS WORD FILE FOR FILE 0
TAD FIOSTK+1
DCA OPACSC /FOR LINKING A BLOCK
TAD I OPBUFP /GET RETRIEVAL WINDOW
DCA OPBUFP /SAVE IT
TAD FIOSTK+2
JMS I GE01 /GET RETRIEVAL WINDOW IN CORE
OPBUFP, 0
DCA OPENTT /SAVE THE BUFFER ADDRESS
FGETJT /GET THE ADDRESS OF JOB STATUS FOR THIS FILE
OPACSC, 0
DCA OPACSC /SAVE POINTER
TAD OPACSC
JMS I GTBLO1 /GET A BLOCK LINKED FOR FILE CONTROL
JMP OPNOT /NO FREE CORE; CAN'T OPEN THEN
DCA OPBUFP /SAVE IT TO BUILD THE FILE CONTROL BLOCK
ISZ BASSWT
JMP OPN123
TAD I BASWIN /IS BASIC WINDOW ALREADY SET UP?
IAC
SNA CLA /YES THEN HAS -1
JMP OPRET1 /BASIC WINDOW ALREADY LOADED
TAD OPENTT /BUFFER ADDRESS OF THE WINDOW
JMS I BAS1A /CREATE BASIC WINDOW
OPRET1, TAD BASWIN /PUT BASIC WINDOW POINTER IN CONTROL BLOCK
DCA I OPBUFP
OPRET, CFLD
CLA CMA /ACCESS COUNT IN UFDTBL
TAD I UTPRNU /INCREASE BY -1
DCA I UTPRNU
DATFLD
ISZ OPBUFP
ISZ OPBUFP /POINTS TO PROTECTION BIT
TAD PRJPRO
DCA I CPBUFP /PUT IN THE WRITE PROT BIT CREATED BEFOREHAND
JMP I .+1 /EXIT AND WRITE OUT TABLES
TABOUT
OPN123, TAD OPBUFP /LINK A BLOCK
JMS I GTBLO1
JMP OPN4 /NO FREE CORE, CAN'T OPEN
DCA OPENTU
CFLD
CIF
BLT
CFLD /SOURCE
OPENTT, 0
DATFLD
OPENTU, 0
-10
JMP OPRET
OPN5, SNA /DID THE ACCOUNT EXIST?
JMP OPNOT /YES; LACK OF ROOM IN UFDTBL
OPN3, STL CLA RTR /NOT FOUND ERROR
OPNPRE, TAD P2000 /PROTECTED
TAD P2000
OPNOT, CLL CML RAR /NOT OPEN, LACK OF SYSTEM RESOURCES
DCA FIUSAC
TAD FIOSTK+1
JMS I EBLD0 /BE SURE TO REMOVE ALL THE POINTERS PUT IN BY OPEN
DCA OPENTT
DCA I OPENTT
JMP I FIEXIT
OPN4, TAD I OPACSC /CONTROL BLOCK ADDR
JMS I RETBK1 /RETURN IT
DATFLD
DCA I OPACSC /CLEAR POINTER FROM JOB BLOCKS
CFLD
JMP OPNOT /TELL HIM/HER WE COULDN'T OPEN
OPN6, TAD FIOSTK+2 /PICK UP PROJ PROG #
JMS I UFO01 /OPEN UFD
JMP OPN5 /NO LUCK, ERROR
JMP OPN2 /OPENED RELATIVE POSITION IN AC
OPNFI0, JOBF0
OPN11A, OPN11
/ROUTINE TO CLOSE A FILE
*600
CLS0, DCA CLSIFN /INTERNAL FILE NUMBER
TAD C7774
DCA CLCNTR /COUNTER FOR BIT SCAN
CLS1, TAD FIOSTK+1 /PICK UP BIT PATTERN
RAL
DCA FIOSTK+1
SZL
JMP CLS3
CLS2, ISZ CLSIFN /NEXT FILE NUMBER
ISZ CLCNTR /DONE ALL FOUR?
JMP CLS1 /NO, KEEP AT IT
JMP I FIEXIT /THROUGH
CLS3, TAD CLSIFN /PICK UP INTERNAL FILE NUMBER
JMS CL0 /CLOSE THE FILE
JMP CLS2 /LOOK FOR MORE
CLSIFN, 0
CLCNTR, 0
/ROUTINE TO DO ACTUAL FILE CLOSE
CL0, 0
JMS I EBLD0
DCA CLENTP
TAD CFH
JMS I LNK01 /RETURNS WITH PTR TO FILE CONTROL BLOCK FROM JOB STATUS BLOCK
SNA
JMP CL3 /FILE WAS NOT OPEN
DCA CLPARP /SAVE IT
DCA I CFH /CLEAR POINTER TO FILE CONTROL BLOCK --- INDICATES FILE CLOSED
CFLD /SET DATA FIELD TO THIS FIELD
TAD CLPARP /POINTER TO PARAMETER BLOCK
JMS I CLOBA /PROPERLY CLOSE TESTING FOR BASIC
DCA CLO3 /SWITCH SET TO -1 IF BASIC FILE
CLA CMA CLL
TAD I CLENTP /RELATIVE POINTER TO UFD RETRIEVAL TABLE
CLL RTL
IAC
TAD UFDTBL
DCA CLUFDP /POINTER TO ACCESS COUNTER
DCA I CLENTP /CLEAR PTR IN ENTTBL TO INDICATE FILE IS CLOSED
CLA CMA
DCA TABSTA /SET TABLE STATUS TO WRITE OUT
ISZ I CLUFDP /REMOVE THIS JOB FROM ACCESS COUNT IN UFDTBL
JMP I CL0
/THIS WAS THE ONLY GUY USING THIS UFD, SO CLOSE IT OUT
ISZ CLO3 /IS IT BASIC FILE BEING CLOSED?
JMP CL11 /NO, PROCEED FURTHER
DATFLD /YES, JUST ZERO ONE LOC IN FIELD 1
DCA I BASWIN
CFLD
CL11, CLA CMA /NO ONE IS NOW ACCESSING THIS UFD
TAD CLUFDP
JMS I TF01 /FREE A TABLE ENTRY
CL3, CFLD
JMP I CL0
CLOBA, CLOBAS
CLPARP, 0
CLENTP, 0
CLUFDP, 0
/SKIPS IF NO OTHER USER IS ACCESSING THIS FILE
ENR0, 0
TAD FIOSTK+1
JMS I EBLD0
DCA ENR1 /PTR INTO ENTTBL
ISZ ENR1
TAD I ENR1 /GET ADDR IN ENTTBL
DCA ENR1
TAD GDRETP /RTABLE
JMS I ENS01 /HOW MANY PEOPLE HAVE THIS FILE OPEN?
ENR1, 0
SKP /FOUND THE SAME FILE OPEN
ISZ ENR0 /...ONLY ONE WHO HAS IT OPEN
JMP I ENR0
ENS01, ENS0
/CHANGE THE PROTECTION OF A FILE
PRT0, TAD FIOSTK+1 /PICK UP INTERNAL FILE NUMBER
RTR
RTR
RAR
AND P0003 /AND OFF PROTECTION BITS
DCA PRIFNU /INTERNAL FILE NUMBER
TAD PRIFNU
JMS I UC01 /CHECK TO SEE IF USER IS OWNER
JMP PRT1 /ERROR RETURN, USER IS NOT OWNER
JMS I ACC01 /IS [S]HE UNDER ACCOUNT 1?
JMP PRT1+1 /YES; ERROR - [S]HE MUST USE #RENAME#
TAD PRIFNU
JMS I GD01 /GET THIS DIRECTORY ENTRY INTO CORE
SNA
JMP I DIRBAD /**************DEBUG*************
TAD P0004
DCA PRENTP /POINTER TO PROTECTION BITS OF THIS FILE
TAD C7637
AND FIOSTK+1 /PICK UP NEW PROTECTION BITS
DCA I PRENTP /RESTORE
DCA BUFMOD /SCHEDULE WRITE
JMP I FIEXIT
PRT1, SZA CLA /ERROR
CLL CML RAR
CLL CML RAR
DCA FIUSAC
JMP I FIEXIT
CLO3,
PRIFNU, 0
PRENTP, 0
C7637, 7637
WHO0, JMS I JBLD0
DCA PAS1
CMA /ONE WORD SEARCH
JMS I DS01 /SEARCH THE MFD FOR THIS ACC'T #
PAS0
JMP I DIRBAD /************DEBUG ONLY***********
DCA PAS1
TAD I PAS1 /GET ACC'T # FROM UFD FILE NAME BLOCK
ISZ PAS1
DCA FIOSTK+1 /STORE ACC'T #
TAD I PAS1
ISZ PAS1
DCA FIOSTK+2 /STORE FIRST TWO CHRS OF PASSWORD
TAD I PAS1
DCA FIOSTK+3 /STORE LAST TWO CHARS OF PASSWORD
JMP I PAINF5 /GO STORE THIS INFORMATION FOR RETURN TO MONITOR
PAINF5, INF5
PAS0, RTABLE
PAS1,
JBLD, 0
TAD FIJOB
TAD JOBTAB
CFLD
DCA CFH
TAD I CFH
JMP I JBLD
/ROUTINE TO MOVE THE RETRIEVAL WINDOW IN FIELD ZERO
*1000
WND0, TAD FIOSTK+2 /PICK UP INTERNAL FILE NUMBER
AND P0003 /AND OFF FIELD BITS
JMS I EBLD0
DCA WNENTP /POINTER TO RETRIEVAL INFORMATION POINTER
TAD I WNENTP
JMS I BLDP1 /GENERATE ABSOLUTE PTR INTO RETTBL
DCA WNRETP /RETRIEVAL POINTER
TAD FIOSTK+7
DCA WNFCBP /PTR TO THIS FILE'S FILE CONTROL BLOCK
TAD FIOSTK+5
DCA WND5 /LOW ORDER DISK ADDRESS
DCA WNDCNT /GET INTO CORE
TAD WNDCCT /INITIALIZE COUNT
DCA WNDSCT
TAD C0177
AND FIOSTK+1 /GET HIGH ORDER FILE ADDRESS
DCA WNDIRP
TAD SEGSIZ /GET RID OF ADDRESS WITHIN SEGMENT
CLL CIA
AND WND5
RAL
TAD WNDIRP /NOW HAVE FILE SEGMENT #; NEED TO SHIFT IT
SKP
RAL
ISZ WNDSCT /SHIFT SEGCCT TIMES?
JMP .-2
DCA WNSEGC
DATFLD /WNSEGC NOW HAS SEGMENT NUMBER TO GET
TAD I WNFCBP /PICK UP FIELD 0 WINDOW POINTER
DCA WNDPTR /PNTS TO FILE RETRIEVAL WINDOW FOR THIS FILE
ISZ WNFCBP
TAD I WNFCBP /PICK UP NUMBER OF CURRENT SEGMENT IN WINDOW
DCA WNCURS /CURRENT SEGMENT IN WINDOW
TAD WNSEGC /SEGMENT TO GET
JMS I WND201 /DIVIDE BY 7 (IGNORE REMAINDER)
JMS WND30 /MULTIPLY BY 7
DCA WNSEGC /FIRST SEGMENT IN PROPER WINDOW
CLA CMA
TAD I WNDPTR /GET FIRST WORD OF FILE RETRIEVAL WINDOW
SNA CLA /=7777?
JMP WND6 /INVALID WINDOW POINTER
TAD WNCURS /CURRENT SEGMENT AT TOP OF CURRENT CORE WINDOW
CIA