Trailing-Edge
-
PDP-10 Archives
-
TOPS-20_V6.1_DECnetSrc_7-23-85
-
mcb/sc/scxsub.lst
There is 1 other file named scxsub.lst in the archive. Click here to see a list.
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 1
30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (1)
; 0001 module SCXSUB (
; 0002 ident = 'X01150'
; 0003 ) =
; 0004 begin
; 0005 !
; 0006 ! COPYRIGHT (c) 1980, 1981, 1982
; 0007 ! DIGITAL EQUIPMENT CORPORATION
; 0008 ! Maynard, Massachusetts
; 0009 !
; 0010 ! This software is furnished under a license and may be used
; 0011 ! and copied only in accordance with the terms of such license
; 0012 ! and with the inclusion of the above copyright notice. This
; 0013 ! software or any other copies thereof may not be provided or
; 0014 ! otherwise made available to any other person. No title to
; 0015 ! and ownership of the software is hereby transferred.
; 0016 !
; 0017 ! The information in this software is subject to change
; 0018 ! without notice and should not be construed as a commitment
; 0019 ! by DIGITAL EQUIPMENT CORPORATION.
; 0020 !
; 0021 ! DIGITAL assumes no responsibility for the use or reliability
; 0022 ! of its software on equipment which is not supplied by
; 0023 ! DIGITAL.
; 0024 !
; 0025
; 0026 !++
; 0027 !
; 0028 ! FACILITY: Task Session Control
; 0029 !
; 0030 ! ABSTRACT: Subroutine support to the task interface SCX
; 0031 !
; 0032 ! ENVIRONMENT: MCB (RSX-11 user)
; 0033 !
; 0034 ! AUTHOR: Buren Hoffman CREATION DATE: 5-Aug-80
; 0035 !
; 0036 ! MODIFIED BY:
; 0037 ! X01010 Changed code to use $byt_ptr macro in place of the
; 0038 ! ch$ptr macro.
; 0039 ! X01020 Fixed SIGNAL_STOP macro to output more info, as required
; 0040 ! X01030 Fixed redundant coding problem in FNDOBJ.
; 0041 ! X01040 Use new Comm/Exec to process linkage (.CRDAT for database)
; 0042 ! X01050 Updated to use library calls, instead of requires.
; 0043 ! X01060 Modified KOMPLT to put status in C_PRM2
; 0044 ! X01070 Added AST queueing routine.
; 0045 ! X01080 Fixed bug in above ast queueing routine.
; 0046 ! X01090 Fixed DEACB problem.
; 0047 ! X01100 Fixed link counter problem.
; 0048 ! X01110 X01060 should have put status in C_STS.
; 0049 ! X01120 Optimization work.
; 0050 ! X01130 ?
; 0051 ! X01140 Fixed LCB unlink and deallocation problem.
; 0052 ! x01150 Ron Platukis 17-aug-81
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 2
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (1)
; 0053 ! -Set C_CNT to 0 in MBPROC before issueing S$REJ call
; 0054 !
; 0055 !
; 0056 !--
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 3
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (2)
; 0057 !
; 0058 ! INCLUDE FILES:
; 0059 !
; 0060 library 'SCPRM';
; 0061 library 'MCB:MCBLIB';
; 0062 library 'MCB:RSXLIB';
; 0063 library 'MCB:XPORTX';
; 0064 library 'MCB:SCSYS';
; 0065
; 0066 require 'SCRSX';
; 0160
; 0161 !
; 0162 ! TABLE OF CONTENTS:
; 0163 !
; 0164 forward routine
; 0165 BUFCHK, ! Validate user buffer
; 0166 DO$XME: linkage_ccb novalue, ! Do XME processing
; 0167 FNDOBJ, ! Locate specified object
; 0168 GETLCB, ! Get LCB and ULA, and init it
; 0169 LCBKIL: novalue, ! Unlink and deallocate LCB
; 0170 MBPROC: novalue, ! Process mailbox connects
; 0171 NOOP: novalue, ! Do nothing; just return
; 0172 QUEAST, ! Queue an AST
; 0173 STXMAP, ! Map from SC codes to RSX codes
; 0174 ULAGET, ! Allocate a ULA to use
; 0175 ULARD, ! Read contents of ULA
; 0176 ULASET: novalue, ! Set contents of ULA
; 0177 $C5TA: novalue, ! Convert rad50 to ascii
; 0178 $CAT5, ! Convert ascii to rad50
; 0179 $SCQHD: novalue, ! Queue to head of list
; 0180 $SCQIN: novalue, ! Queue to tail of list
; 0181 $SCQRM; ! Remove from head of list
; 0182
; 0183 !
; 0184 ! MACROS:
; 0185 !
; 0186
; 0187 !
; 0188 ! EQUATED SYMBOLS:
; 0189 !
; 0190
; 0191 !
; 0192 ! OWN STORAGE:
; 0193 !
; 0194
; 0195 !
; 0196 ! EXTERNAL REFERENCES:
; 0197 !
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 4
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (3)
; 0198 global routine BUFCHK (USR, SYS, SIZE) =
; 0199
; 0200 !++
; 0201 ! FUNCTIONAL DESCRIPTION:
; 0202 ! Validate user buffers, and remap for APR6 usage.
; 0203 !
; 0204 ! FORMAL PARAMETERS:
; 0205 ! USR User buffer specification
; 0206 ! SYS Output area for system buffer specification
; 0207 ! SIZE Maximum buffer size
; 0208 !
; 0209 ! IMPLICIT INPUTS:
; 0210 ! USR and SYS areas formatted according to standard
; 0211 ! USR_BUFF and SYS_BUFF definitions.
; 0212 !
; 0213 ! IMPLICIT OUTPUTS:
; 0214 ! None
; 0215 !
; 0216 ! ROUTINE VALUE:
; 0217 ! Status code for any error detected.
; 0218 !
; 0219 ! COMPLETION CODES:
; 0220 ! None
; 0221 !
; 0222 ! SIDE EFFECTS:
; 0223 ! None
; 0224 !--
; 0225
; 0226 begin
; 0227 map
; 0228 USR: ref block field (USR_BUFF),
; 0229 SYS: ref block field (SYS_BUFF);
; 0230 local
; 0231 USR_TMP: block [2] field (USR_BUFF);
; 0232
; 0233 if (USR_TMP [USR_ADDR] = .USR [USR_ADDR]) eql 0
; 0234 then
; 0235 begin
; 0236 SYS [SYS_SIZE] = 0; ! No buffer, so
; 0237 SYS [SYS_BIAS] = 0; ! set zeroes
; 0238 SYS [SYS_ADDR] = 0;
; 0239 end
; 0240 else
; 0241 begin
; 0242 USR_TMP [USR_SIZE] = .USR [USR_SIZE];
; 0243 if (.USR_TMP [USR_SIZE] leq 0) or ((.SIZE neq 0) and (.USR_TMP [USR_SIZE] gtr .SIZE))
; 0244 then return IE_BAD; ! Bad parameter
; 0245 SYS [SYS_SIZE] = .USR_TMP [USR_SIZE];
; 0246 if not ACHKB$ (.USR_TMP [USR_ADDR], .USR_TMP [USR_SIZE])
; 0247 then return IE_SPC; ! Invalid buffer parameter
; 0248 RELOC$ (.USR_TMP [USR_ADDR], SYS [SYS_BIAS], SYS [SYS_ADDR])
; 0249 end;
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 5
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (3)
; 0250
; 0251 return IS_SUC
; 0252 end;
.TITLE SCXSUB
.IDENT /X01150/
.GLOBL $ACHKB, $RELOC
.SBTTL BUFCHK
000000 .PSECT $CODE$, RO
000000 004167 000000G BUFCHK::JSR R1,$SAVE3 ; 0198
000004 005746 TST -(SP)
000006 016603 000016 MOV 16(SP),R3 ; SYS,* 0236
000012 017646 000020 MOV @20(SP),-(SP) ; USR,USR.TMP 0233
000016 001006 BNE 1$
000020 005063 000004 CLR 4(R3) ; 0236
000024 005013 CLR (R3) ; 0237
000026 005063 000002 CLR 2(R3) ; 0238
000032 000437 BR 5$ ; 0233
000034 016600 000022 1$: MOV 22(SP),R0 ; USR,* 0242
000040 016066 000002 000002 MOV 2(R0),2(SP) ; *,USR.TMP+2
000046 016601 000002 MOV 2(SP),R1 ; USR.TMP+2,* 0243
000052 003405 BLE 2$
000054 016600 000016 MOV 16(SP),R0 ; SIZE,*
000060 001405 BEQ 3$
000062 020100 CMP R1,R0
000064 003403 BLE 3$
000066 012700 177777 2$: MOV #-1,R0 ; 0244
000072 000421 BR 6$
000074 010163 000004 3$: MOV R1,4(R3) ; 0245
000100 011600 MOV (SP),R0 ; USR.TMP,* 0246
000102 004767 000000G JSR PC,$ACHKB
000106 103003 BHIS 4$
000110 012700 177772 MOV #-6,R0 ; 0247
000114 000410 BR 6$
000116 011600 4$: MOV (SP),R0 ; USR.TMP,* 0248
000120 004767 000000G JSR PC,$RELOC
000124 010113 MOV R1,(R3) ; $RSX$R1,*
000126 010263 000002 MOV R2,2(R3) ; $RSX$R2,*
000132 012700 000001 5$: MOV #1,R0 ; 0226
000136 022626 6$: CMP (SP)+,(SP)+ ; 0198
000140 000207 RTS PC
; Routine Size: 49 words, Routine Base: $CODE$ + 0000
; Maximum stack depth per invocation: 7 words
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 6
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (4)
; 0253 global routine DO$XME (CCB, MDF, IOP, LCB, BUF): linkage_ccb novalue =
; 0254
; 0255 !++
; 0256 ! FUNCTIONAL DESCRIPTION:
; 0257 ! Do XME processing
; 0258 !
; 0259 ! FORMAL PARAMETERS:
; 0260 ! CCB CCB address
; 0261 ! MDF RCP modifier
; 0262 ! IOP IOP address
; 0263 ! LCB LCB address (may be zero)
; 0264 ! BUF 3-word buffer-descriptor address
; 0265 !
; 0266 ! IMPLICIT INPUTS:
; 0267 ! LLT mapped
; 0268 !
; 0269 ! IMPLICIT OUTPUTS:
; 0270 ! CCB scheduled
; 0271 !
; 0272 ! ROUTINE VALUE:
; 0273 ! COMPLETION CODES:
; 0274 ! None
; 0275 !
; 0276 ! SIDE EFFECTS:
; 0277 ! None
; 0278 !--
; 0279 begin
; 0280 $scx_get_data_base (SCXDB);
; 0281 map CCB: ref block field (C_FIELDS),
; 0282 LCB: ref block field (LCB_FIELDS),
; 0283 BUF: ref vector [3];
; 0284
; 0285 CCB [C_FNC] = FC_XME;
; 0286 CCB [C_MOD] = .MDF;
; 0287 CCB [C_PIX] = .SCXDB [SCX_SCPIX];
; 0288 CCB [C_PRM5] = .IOP;
; 0289
; 0290 if .BUF neq 0
; 0291 then
; 0292 begin
; 0293 CCB [C_BIAS] = .BUF [0];
; 0294 CCB [C_ADDR] = .BUF [1];
; 0295 CCB [C_CNT] = .BUF [2]
; 0296 end;
; 0297
; 0298 if .LCB neq 0
; 0299 then
; 0300 begin
; 0301 CCB [C_LIX] = .LCB [LC_LLA];
; 0302 CCB [$sub_field (C_PRM1, LO_BYTE)] = .LCB [LC_ULA]
; 0303 end;
; 0304
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 7
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (4)
; 0305 $MCB_SCHEDULE_CCB (.CCB)
; 0306 end;
.GLOBL .CRDAT, $SCHED
.SBTTL DO$XME
000000 010446 DO$XME::MOV R4,-(SP) ; 0253
000002 112764 000002 000012 MOVB #2,12(R4) ; *,*(CCB) 0285
000010 116664 000012 000013 MOVB 12(SP),13(R4) ; MDF,*(CCB) 0286
000016 016700 000002G MOV .CRDAT+2,R0 ; 0287
000022 116064 000002 000011 MOVB 2(R0),11(R4) ; *,*(CCB)
000030 016664 000010 000034 MOV 10(SP),34(R4) ; IOP,*(CCB) 0288
000036 016600 000004 MOV 4(SP),R0 ; BUF,* 0290
000042 001410 BEQ 1$
000044 011064 000016 MOV (R0),16(R4) ; *,*(CCB) 0293
000050 016064 000002 000020 MOV 2(R0),20(R4) ; *,*(CCB) 0294
000056 016064 000004 000022 MOV 4(R0),22(R4) ; *,*(CCB) 0295
000064 016600 000006 1$: MOV 6(SP),R0 ; LCB,* 0298
000070 001406 BEQ 2$
000072 116064 000021 000010 MOVB 21(R0),10(R4) ; *,*(CCB) 0301
000100 116064 000020 000024 MOVB 20(R0),24(R4) ; *,*(CCB) 0302
000106 004767 000000G 2$: JSR PC,$SCHED ; 0305
000112 012604 MOV (SP)+,R4 ; 0253
000114 000207 RTS PC
; Routine Size: 39 words, Routine Base: $CODE$ + 0142
; Maximum stack depth per invocation: 2 words
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 8
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (5)
; 0307 global routine FNDOBJ (DST, TCB) =
; 0308
; 0309 !++
; 0310 ! FUNCTIONAL DESCRIPTION:
; 0311 ! Locate object type, and return TCB address
; 0312 !
; 0313 ! FORMAL PARAMETERS:
; 0314 ! DST Destination portion of connect block
; 0315 ! TCB Address of word to receive TCB address
; 0316 !
; 0317 ! IMPLICIT INPUTS:
; 0318 ! The connect block is mapped (i.e., DST).
; 0319 !
; 0320 ! IMPLICIT OUTPUTS:
; 0321 ! None
; 0322 !
; 0323 ! ROUTINE VALUE:
; 0324 ! True if object found
; 0325 ! False if object not found
; 0326 !
; 0327 ! COMPLETION CODES:
; 0328 ! None
; 0329 !
; 0330 ! SIDE EFFECTS:
; 0331 ! None
; 0332 !--
; 0333
; 0334 begin
; 0335 $scx_get_data_base (SCXDB);
; 0336 map DST: ref block field (CBSD_FIELDS);
; 0337 local
; 0338 PROC_NAM,
; 0339 NAM_LEN,
; 0340 NAM_PTR,
; 0341 NAME: vector [byt$allocation (6)],
; 0342 %if %bliss (bliss36) %then R50_NAME %else R50_NAME: vector [2] %fi;
; 0343
; 0344 bind
; 0345 OTN = SCXDB [SCX_OTN_ADDR]: ref blockvector [,OTN_SIZE] field (OTN_FIELDS);
; 0346
; 0347 case .DST [CB_FMT] from 0 to 2 of
; 0348 set
; 0349
; 0350 [0]: ! Format 0
; 0351 begin
; 0352 local
; 0353 OBJ,
; 0354 SAV_MAP;
; 0355
; 0356 SMAP$ (SAV_MAP); ! Save mapping
; 0357 OBJ = .DST [CB_OBJ]; ! Get obj before changing map
; 0358 MAP$ (.SCXDB [SCX_OTN_BIAS]); ! Set to object table map
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 9
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (5)
; 0359 NAM_LEN = 0; ! Be pessimistic
; 0360 incr I from 0 to .SCXDB [SCX_OTN_LEN]-1 do
; 0361 begin
; 0362 if .OBJ eql .OTN [.I, OTN_TYPE]
; 0363 then
; 0364 begin
; 0365 NAM_PTR = byt$ptr (NAME); ! Copy name to local store
; 0366 ch$move (6, byt$ptr (OTN [.I, OTN_NAME]), .NAM_PTR);
; 0367 NAM_LEN = .OTN [.I, OTN_NLEN];
; 0368 exitloop
; 0369 end
; 0370 end;
; 0371
; 0372 MAP$ (.SAV_MAP); ! Restore mapping
; 0373 if .NAM_LEN eql 0 then return false
; 0374 end;
; 0375
; 0376 [1]: ! Format 1
; 0377 begin
; 0378 NAM_PTR = byt$ptr (DST [CB_NAM]);
; 0379 NAM_LEN = .DST [CB_LEN]
; 0380 end;
; 0381
; 0382 [2]: ! Format 2
; 0383 begin
; 0384 NAM_PTR = byt$ptr (DST [CB_NM2]);
; 0385 NAM_LEN = .DST [CB_LN2]
; 0386 end;
; 0387
; 0388 [outrange]:
; 0389 return false;
; 0390 tes;
; 0391
; L 0392 %if %bliss (bliss36)
; U 0393 %then
; U 0394 R50_NAME = $CAT5 (NAM_PTR, true);
; 0395 %else
; 0396 R50_NAME [0] = $CAT5 (NAM_PTR, true);
; 0397 R50_NAME [1] = $CAT5 (NAM_PTR, true);
; 0398 %fi
; 0399
; 0400 $rsx_get_tcb( R50_NAME, .TCB)
; 0401 end;
.GLOBL KISAR6, $SRSTD, $TSKHD
.SBTTL FNDOBJ
000000 004167 000000G FNDOBJ::JSR R1,$SAVE5 ; 0307
000004 162706 000020 SUB #20,SP
000010 016704 000002G MOV .CRDAT+2,R4 ; 0334
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 10
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (5)
000014 016600 000040 MOV 40(SP),R0 ; DST,* 0347
000020 005001 CLR R1
000022 151001 BISB (R0),R1
000024 020127 000002 CMP R1,#2
000030 101073 BHI 7$
000032 006301 ASL R1
000034 066107 000000' ADD P.AAA(R1),PC ; Case dispatch
000040 000467 1$: BR 7$ ; 0389
000042 016716 000000G 2$: MOV KISAR6,(SP) ; *,SAV.MAP 0356
000046 116066 000001 000002 MOVB 1(R0),2(SP) ; *,OBJ 0357
000054 105066 000003 CLRB 3(SP) ; OBJ
000060 016467 000020 000000G MOV 20(R4),KISAR6 ; 0358
000066 005005 CLR R5 ; NAM.LEN 0359
000070 005002 CLR R2 ; I 0360
000072 000443 BR 5$
000074 010200 3$: MOV R2,R0 ; I,* 0362
000076 072027 000003 ASH #3,R0
000102 010003 MOV R0,R3
000104 066403 000022 ADD 22(R4),R3
000110 005001 CLR R1
000112 151301 BISB (R3),R1
000114 026601 000002 CMP 2(SP),R1 ; OBJ,*
000120 001027 BNE 4$
000122 012766 000012 000004 MOV #12,4(SP) ; *,NAM.PTR 0365
000130 060666 000004 ADD SP,4(SP) ; NAME,NAM.PTR
000134 012746 000006 MOV #6,-(SP) ; 0366
000140 010001 MOV R0,R1
000142 066401 000022 ADD 22(R4),R1
000146 010146 MOV R1,-(SP)
000150 062716 000002 ADD #2,(SP)
000154 016646 000010 MOV 10(SP),-(SP) ; NAM.PTR,*
000160 004767 000000G JSR PC,BL$MOV
000164 005005 CLR R5 ; NAM.LEN 0367
000166 156305 000001 BISB 1(R3),R5 ; *,NAM.LEN
000172 062706 000006 ADD #6,SP ; 0368
000176 000404 BR 6$
000200 005202 4$: INC R2 ; I 0360
000202 020264 000016 5$: CMP R2,16(R4) ; I,*
000206 002732 BLT 3$
000210 011667 000000G 6$: MOV (SP),KISAR6 ; SAV.MAP,* 0372
000214 005705 TST R5 ; NAM.LEN 0373
000216 001020 BNE 10$
000220 005000 7$: CLR R0
000222 000464 BR 14$
000224 011766 000004 8$: MOV (PC),4(SP) ; *,NAM.PTR 0378
000230 060066 000004 ADD R0,4(SP) ; *,NAM.PTR
000234 016005 000002 MOV 2(R0),R5 ; *,NAM.LEN 0379
000240 000407 BR 10$ ; 0347
000242 012766 000010 000004 9$: MOV #10,4(SP) ; *,NAM.PTR 0384
000250 060066 000004 ADD R0,4(SP) ; *,NAM.PTR
000254 016005 000006 MOV 6(R0),R5 ; *,NAM.LEN 0385
000260 012746 000006 10$: MOV #6,-(SP) ; 0396
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 11
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (5)
000264 060616 ADD SP,(SP) ; NAM.PTR,*
000266 012746 000001 MOV #1,-(SP)
000272 004767 000000V JSR PC,$CAT5
000276 010066 000012 MOV R0,12(SP) ; *,R50.NAME
000302 012716 000010 MOV #10,(SP) ; 0397
000306 060616 ADD SP,(SP) ; NAM.PTR,*
000310 012746 000001 MOV #1,-(SP)
000314 004767 000000V JSR PC,$CAT5
000320 010066 000016 MOV R0,16(SP) ; *,R50.NAME+2
000324 016700 000000G MOV $TSKHD,R0 ; 0400
000330 005760 000030 TST 30(R0)
000334 001406 BEQ 11$
000336 012703 000014 MOV #14,R3
000342 060603 ADD SP,R3 ; R50.NAME,*
000344 004767 000000G JSR PC,$SRSTD
000350 103003 BHIS 12$
000352 012700 000040 11$: MOV #40,R0
000356 000404 BR 13$
000360 010076 000044 12$: MOV R0,@44(SP) ; $RSX$R0,TCB
000364 012700 000001 MOV #1,R0
000370 062706 000006 13$: ADD #6,SP ; 0334
000374 062706 000020 14$: ADD #20,SP ; 0307
000400 000207 RTS PC
; Routine Size: 129 words, Routine Base: $CODE$ + 0260
; Maximum stack depth per invocation: 18 words
000000 .PSECT $PLIT$, RO , D
P.AAA: ; CASE Table for FNDOBJ+0034 0347
000000 000002 .WORD 2 ; [2$]
000002 000164 .WORD 164 ; [8$]
000004 000202 .WORD 202 ; [9$]
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 12
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (6)
; 0402 global routine GETLCB (TNBP, LCBP, TKBA) =
; 0403
; 0404 !++
; 0405 ! FUNCTIONAL DESCRIPTION:
; 0406 ! Get LCB memory and ULA.
; 0407 !
; 0408 ! FORMAL PARAMETERS:
; 0409 ! TNBP Address of word to receive address of TNB
; 0410 ! LCBP Address of word to receive address of LCB
; 0411 ! TKBA TKB address
; 0412 !
; 0413 ! IMPLICIT INPUTS:
; 0414 ! None
; 0415 !
; 0416 ! IMPLICIT OUTPUTS:
; 0417 ! LCB initialized
; 0418 !
; 0419 ! ROUTINE VALUE:
; 0420 ! True if successful, else false
; 0421 !
; 0422 ! COMPLETION CODES:
; 0423 ! None
; 0424 !
; 0425 ! SIDE EFFECTS:
; 0426 ! None
; 0427 !--
; 0428
; 0429 begin
; 0430 $scx_get_data_base (SCXDB);
; 0431 local
; 0432 TNB: ref block field (TNB_FIELDS),
; 0433 LCB: ref block field (LCB_FIELDS),
; 0434 ULA;
; 0435
; 0436 if $MCB_GET_DSR (LCB_SIZE*bytes_word, LCB)
; 0437 then
; 0438 begin
; 0439 if not ULAGET (ULA)
; 0440 then
; 0441 begin
; 0442 $MCB_RETURN_DSR (LCB_SIZE*bytes_word, .LCB);
; 0443 return false
; 0444 end
; 0445 end
; 0446 else return false;
; 0447
; 0448 ch$fill (0, LCB_SIZE*bytes_word, .LCB);
; 0449 .LCBP = .LCB;
; 0450 ULASET (.ULA, .LCB);
; 0451 LCB [LC_ULA] = .ULA;
; 0452 LCB [LC_TASK] = .TKBA;
; 0453 LCB [LC_OQTL] = LCB [LC_OQHD];
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 13
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (6)
; 0454 LCB [LC_NQTL] = LCB [LC_NQHD];
; 0455
; 0456 TNB = SCXDB [SCX_TNB];
; 0457 while (TNB = .TNB [TN_LINK]) neq 0 do
; 0458 begin
; 0459 if .TNB [TN_TASK] eql .LCB [LC_TASK]
; 0460 then
; 0461 begin
; 0462 LCB [LC_TNB] = .TNB;
; 0463 exitloop
; 0464 end
; 0465 end;
; 0466
; 0467 if .TNB eql 0 then SIGNAL_STOP (SCX$_ILE);
; 0468 .TNBP = .TNB;
; 0469 LCB [LC_LINK] = .TNB [TN_LCB];
; 0470 TNB [TN_LCB] = .LCB;
; 0471 return true
; 0472 end;
.GLOBL $DSRGT, $DSRRT
.SBTTL GETLCB
000662 .PSECT $CODE$, RO
000000 004167 000000G GETLCB::JSR R1,$SAVE3 ; 0402
000004 005746 TST -(SP)
000006 016703 000002G MOV .CRDAT+2,R3 ; 0429
000012 012701 000022 MOV #22,R1 ; 0436
000016 004767 000000G JSR PC,$DSRGT
000022 103512 BCS 5$
000024 010002 MOV R0,R2 ; $MCB$R0,LCB
000026 012746 000002 MOV #2,-(SP) ; 0439
000032 060616 ADD SP,(SP) ; ULA,*
000034 004767 000000V JSR PC,ULAGET
000040 005726 TST (SP)+
000042 006000 ROR R0
000044 103406 BLO 1$
000046 010200 MOV R2,R0 ; LCB,* 0442
000050 012701 000022 MOV #22,R1
000054 004767 000000G JSR PC,$DSRRT
000060 000473 BR 5$ ; 0441
000062 005046 1$: CLR -(SP) ; 0448
000064 012746 000022 MOV #22,-(SP)
000070 010246 MOV R2,-(SP) ; LCB,*
000072 004767 000000G JSR PC,BL$FIL
000076 010276 000024 MOV R2,@24(SP) ; LCB,LCBP 0449
000102 016616 000006 MOV 6(SP),(SP) ; ULA,* 0450
000106 010246 MOV R2,-(SP) ; LCB,*
000110 004767 000000V JSR PC,ULASET
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 14
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (6)
000114 116662 000010 000020 MOVB 10(SP),20(R2) ; ULA,*(LCB) 0451
000122 016662 000024 000002 MOV 24(SP),2(R2) ; TKBA,*(LCB) 0452
000130 012762 000006 000010 MOV #6,10(R2) ; *,*(LCB) 0453
000136 060262 000010 ADD R2,10(R2) ; LCB,*(LCB)
000142 012762 000012 000014 MOV #12,14(R2) ; *,*(LCB) 0454
000150 060262 000014 ADD R2,14(R2) ; LCB,*(LCB)
000154 010301 MOV R3,R1 ; *,TNB 0456
000156 062701 000006 ADD #6,R1 ; *,TNB
000162 011101 2$: MOV (R1),R1 ; TNB,TNB 0457
000164 001407 BEQ 3$
000166 026162 000002 000002 CMP 2(R1),2(R2) ; *(TNB),*(LCB) 0459
000174 001372 BNE 2$
000176 010162 000004 MOV R1,4(R2) ; TNB,*(LCB) 0462
000202 001007 BNE 4$ ; 0467
000204 012716 100004 3$: MOV #-77774,(SP)
000210 012746 000001 MOV #1,-(SP)
000214 004767 000000G JSR PC,$STOP
000220 005726 TST (SP)+
000222 010176 000030 4$: MOV R1,@30(SP) ; TNB,TNBP 0468
000226 016112 000004 MOV 4(R1),(R2) ; *(TNB),LCB 0469
000232 010261 000004 MOV R2,4(R1) ; LCB,*(TNB) 0470
000236 062706 000010 ADD #10,SP ; 0402
000242 012700 000001 MOV #1,R0 ; 0429
000246 000401 BR 6$
000250 005000 5$: CLR R0 ; 0402
000252 005726 6$: TST (SP)+
000254 000207 RTS PC
; Routine Size: 87 words, Routine Base: $CODE$ + 0662
; Maximum stack depth per invocation: 11 words
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 15
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (7)
; 0473 global routine LCBKIL (LCB): novalue =
; 0474
; 0475 !++
; 0476 ! FUNCTIONAL DESCRIPTION:
; 0477 ! Unlink and deallocate specified LCB
; 0478 !
; 0479 ! FORMAL PARAMETERS:
; 0480 ! LCB Address of LCB to get rid of
; 0481 !
; 0482 ! IMPLICIT INPUTS:
; 0483 ! It is assumed that the link is closed, and the
; 0484 ! output queue is empty.
; 0485 !
; 0486 ! IMPLICIT OUTPUTS:
; 0487 ! None
; 0488 !
; 0489 ! ROUTINE VALUE:
; 0490 ! COMPLETION CODES:
; 0491 ! None
; 0492 !
; 0493 ! SIDE EFFECTS:
; 0494 ! None
; 0495 !--
; 0496
; 0497 begin
; 0498 map LCB: ref block field (LCB_FIELDS);
; 0499 local
; 0500 LC: ref block field (LCB_FIELDS),
; 0501 LC_PREV: ref block field (LCB_FIELDS);
; 0502 bind
; 0503 TNB = LCB [LC_TNB]: ref block field (TNB_FIELDS);
; 0504
; 0505 LC = TNB [TN_LCB]; ! Point to first LCB pointer
; 0506 while (LC_PREV = .LC; LC = .LC [LC_LINK]) neq 0 do
; 0507 begin
; 0508 if .LC eql .LCB
; 0509 then
; 0510 begin
; 0511 LC_PREV [LC_LINK] = .LC [LC_LINK]; ! Remove LCB from list
; 0512 $MCB_RETURN_DSR (LCB_SIZE*bytes_word, .LC); ! and release memory
; 0513 exitloop
; 0514 end
; 0515 end
; 0516 end;
.SBTTL LCBKIL
000000 004167 000000G LCBKIL::JSR R1,$SAVE3 ; 0473
000004 016600 000012 MOV 12(SP),R0 ; LCB,* 0503
000010 062700 000004 ADD #4,R0
000014 011002 MOV (R0),R2 ; *,LC 0505
000016 062702 000004 ADD #4,R2 ; *,LC
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 16
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (7)
000022 010203 1$: MOV R2,R3 ; LC,LC.PREV 0506
000024 011202 MOV (R2),R2 ; LC,LC
000026 001411 BEQ 2$
000030 020266 000012 CMP R2,12(SP) ; LC,LCB 0508
000034 001372 BNE 1$
000036 011213 MOV (R2),(R3) ; LC,LC.PREV 0511
000040 010200 MOV R2,R0 ; LC,* 0512
000042 012701 000022 MOV #22,R1
000046 004767 000000G JSR PC,$DSRRT
000052 000207 2$: RTS PC ; 0473
; Routine Size: 22 words, Routine Base: $CODE$ + 1140
; Maximum stack depth per invocation: 5 words
; 0517
; 0518
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 17
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (8)
; 0519 global routine MBPROC (QUEUE): novalue =
; 0520
; 0521 !++
; 0522 ! FUNCTIONAL DESCRIPTION:
; 0523 ! Process waiting connect packets on the specified queue
; 0524 !
; 0525 ! FORMAL PARAMETERS:
; 0526 ! QUEUE Address of mailbox queue header
; 0527 !
; 0528 ! IMPLICIT INPUTS:
; 0529 ! None
; 0530 !
; 0531 ! IMPLICIT OUTPUTS:
; 0532 ! Appropriate packets are dequeued, and rejected.
; 0533 !
; 0534 ! ROUTINE VALUE:
; 0535 ! COMPLETION CODES:
; 0536 ! None
; 0537 !
; 0538 ! SIDE EFFECTS:
; 0539 ! None
; 0540 !--
; 0541
; 0542 begin
; 0543 $scx_get_data_base (SCXDB);
; 0544 map QUEUE: ref block field (QHD_FIELDS);
; 0545 local
; 0546 CCB: ref block field (C_FIELDS),
; 0547 MB_PREV: ref block field (MBP_FIELDS),
; 0548 MB: ref block field (MBP_FIELDS);
; 0549
; 0550 MB = .QUEUE; ! Initialize queue pointer
; 0551 while (MB_PREV = .MB; MB = .MB [MB_LINK]) neq 0 do
; 0552 begin
; 0553 if (.MB [MB_FNC] eql MB$CON) or (.MB [MB_FNC] eql MB$CNP)
; 0554 then
; 0555 begin
; 0556 if .MB [MBF_REQ] then MB [MBF_REQ] = not TSKRT$ (.MB [MB_TASK], 0);
; 0557 if .MB [MB_TIME] neq 0 ! Active timer ?
; 0558 then
; 0559 begin ! Yes, check it
; 0560 if (MB [MB_TIME] = .MB [MB_TIME] - 1) eql 0
; 0561 then
; 0562 begin ! It has expired
; 0563 if CCBGT$ (CCB) ! Get a CCB to reject connect
; 0564 then
; 0565 begin
; 0566 if (MB_PREV [MB_LINK] = .MB [MB_LINK]) eql 0
; 0567 then QUEUE [Q_TAIL] = .MB_PREV; ! Dequeue the entry
; 0568 CCB [C_LIX] = .MB [MB_LLA];
; 0569 ccb [c_cnt] = 0; ! no optional data.
; 0570 CCB [C_PRM2] = S_ENRO;
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 18
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (8)
; 0571 CCB [C_PRM4] = .MB [MB_TNB]; ! Remember which TNB
; 0572 $SCX_DO_XME (.CCB, S$REJ, 0, 0, 0);
; 0573 $MCB_RETURN_DSR (MBP_SIZE*bytes_word + .MB [MB_CNT], .MB);
; 0574 MB = .MB_PREV
; 0575 end
; 0576 else
; 0577 MB [MB_TIME] = 1 ! Let it blow on next tick
; 0578 end
; 0579 end
; 0580 end
; 0581 end
; 0582 end;
.GLOBL $TSKRT, $CCBGT
.SBTTL MBPROC
000000 004167 000000G MBPROC::JSR R1,$SAVE5 ; 0519
000004 005746 TST -(SP)
000006 016646 000020 MOV 20(SP),-(SP) ; QUEUE,MB 0550
000012 011666 000002 1$: MOV (SP),2(SP) ; MB,MB.PREV 0551
000016 017616 000000 MOV @0(SP),(SP) ; MB,MB
000022 001532 BEQ 8$
000024 012700 000004 MOV #4,R0 ; 0553
000030 061600 ADD (SP),R0 ; MB,*
000032 010004 MOV R0,R4
000034 121427 000001 CMPB (R4),#1
000040 001402 BEQ 2$
000042 105714 TSTB (R4)
000044 001362 BNE 1$
000046 032714 000400 2$: BIT #400,(R4) ; 0556
000052 001424 BEQ 5$
000054 011602 MOV (SP),R2 ; MB,*
000056 016200 000014 MOV 14(R2),R0 ; *(MB),*
000062 005001 CLR R1
000064 004767 000000G JSR PC,$TSKRT
000070 103403 BCS 3$
000072 012700 000001 MOV #1,R0
000076 000402 BR 4$
000100 012700 000040 3$: MOV #40,R0
000104 005100 4$: COM R0
000106 042714 000400 BIC #400,(R4)
000112 032700 000001 BIT #1,R0
000116 001402 BEQ 5$
000120 052714 000400 BIS #400,(R4)
000124 012701 000012 5$: MOV #12,R1 ; 0557
000130 061601 ADD (SP),R1 ; MB,*
000132 010100 MOV R1,R0
000134 005710 TST (R0)
000136 001725 BEQ 1$
000140 005310 DEC (R0) ; 0560
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 19
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (8)
000142 001323 BNE 1$
000144 004767 000000G JSR PC,$CCBGT ; 0563
000150 103454 BCS 7$
000152 010405 MOV R4,R5 ; $MCB$R4,CCB
000154 017676 000000 000002 MOV @0(SP),@2(SP) ; MB,MB.PREV 0566
000162 001005 BNE 6$
000164 016600 000022 MOV 22(SP),R0 ; QUEUE,* 0567
000170 016660 000002 000002 MOV 2(SP),2(R0) ; MB.PREV,*
000176 011600 6$: MOV (SP),R0 ; MB,* 0568
000200 116065 000006 000010 MOVB 6(R0),10(R5) ; *(MB),*(CCB)
000206 005065 000022 CLR 22(R5) ; *(CCB) 0569
000212 012765 177732 000026 MOV #-46,26(R5) ; *,*(CCB) 0570
000220 016065 000016 000032 MOV 16(R0),32(R5) ; *(MB),*(CCB) 0571
000226 012746 000004 MOV #4,-(SP) ; 0572
000232 005046 CLR -(SP)
000234 005046 CLR -(SP)
000236 005046 CLR -(SP)
000240 010504 MOV R5,R4 ; CCB,*
000242 004767 176460 JSR PC,DO$XME
000246 016600 000010 MOV 10(SP),R0 ; MB,* 0573
000252 016001 000002 MOV 2(R0),R1 ; *(MB),*
000256 062701 000020 ADD #20,R1
000262 004767 000000G JSR PC,$DSRRT
000266 016666 000012 000010 MOV 12(SP),10(SP) ; MB.PREV,MB 0574
000274 062706 000010 ADD #10,SP ; 0565
000300 000644 BR 1$ ; 0562
000302 012710 000001 7$: MOV #1,(R0) ; 0577
000306 000641 BR 1$ ; 0559
000310 022626 8$: CMP (SP)+,(SP)+ ; 0519
000312 000207 RTS PC
; Routine Size: 102 words, Routine Base: $CODE$ + 1214
; Maximum stack depth per invocation: 13 words
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 20
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (9)
; 0583 global routine NOOP: novalue =
; 0584
; 0585 !++
; 0586 ! FUNCTIONAL DESCRIPTION:
; 0587 ! This routine simply returns
; 0588 !
; 0589 ! FORMAL PARAMETERS:
; 0590 ! None
; 0591 !
; 0592 ! IMPLICIT INPUTS:
; 0593 ! None
; 0594 !
; 0595 ! IMPLICIT OUTPUTS:
; 0596 ! None
; 0597 !
; 0598 ! ROUTINE VALUE:
; 0599 ! COMPLETION CODES:
; 0600 ! None
; 0601 !
; 0602 ! SIDE EFFECTS:
; 0603 ! None
; 0604 !--
; 0605
; 0606 begin
; 0607 return
; 0608 end;
.SBTTL NOOP
000000 000207 NOOP:: RTS PC ; 0583
; Routine Size: 1 word, Routine Base: $CODE$ + 1530
; Maximum stack depth per invocation: 0 words
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 21
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (10)
; 0609 global routine QUEAST (TNB) =
; 0610
; 0611 !++
; 0612 ! FUNCTIONAL DESCRIPTION:
; 0613 ! Queue an AST to RSX
; 0614 !
; 0615 ! FORMAL PARAMETERS:
; 0616 ! TNB TNB address for task
; 0617 !
; 0618 ! IMPLICIT INPUTS:
; 0619 ! None
; 0620 !
; 0621 ! IMPLICIT OUTPUTS:
; 0622 ! None
; 0623 !
; 0624 ! ROUTINE VALUE:
; 0625 ! COMPLETION CODES:
; 0626 ! False if memory allocation fails, else true.
; 0627 !
; 0628 ! SIDE EFFECTS:
; 0629 ! None
; 0630 !--
; 0631
; 0632 begin
; 0633 map
; 0634 TNB: ref block field (TNB_FIELDS);
; 0635 local
; 0636 AST: ref block field (AST_FIELDS);
; 0637 literal
; 0638 AST_SIZE = %fieldexpand (A_PRM, 0) * bytes_word;
; 0639
; 0640 if .TNB [TN_SPA] eql 0 then return true;
; 0641 if not ALOCB$ (AST_SIZE, AST) then return false;
; 0642
; 0643 AST [A_CBL] = AST_SIZE;
; 0644 AST [A_BYT] = 7 * %upval;
; 0645 AST [A_AST] = .TNB [TN_SPA];
; 0646 AST [A_NPR] = 0;
; 0647 QASTT$ (.TNB [TN_TASK], .AST);
; 0648 return true
; 0649 end;
.GLOBL $ALOCB, $QASTT
.SBTTL QUEAST
000000 004167 000000G QUEAST::JSR R1,$SAVE3 ; 0609
000004 016600 000012 MOV 12(SP),R0 ; TNB,* 0640
000010 016003 000024 MOV 24(R0),R3
000014 001426 BEQ 1$
000016 012701 000012 MOV #12,R1 ; 0641
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 22
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (10)
000022 004767 000000G JSR PC,$ALOCB
000026 103424 BCS 2$
000030 010001 MOV R0,R1 ; $RSX$R0,AST
000032 012761 000012 000002 MOV #12,2(R1) ; *,*(AST) 0643
000040 012761 000016 000004 MOV #16,4(R1) ; *,*(AST) 0644
000046 010361 000006 MOV R3,6(R1) ; *,*(AST) 0645
000052 005061 000010 CLR 10(R1) ; *(AST) 0646
000056 016602 000012 MOV 12(SP),R2 ; TNB,* 0647
000062 016200 000002 MOV 2(R2),R0
000066 004767 000000G JSR PC,$QASTT
000072 012700 000001 1$: MOV #1,R0 ; 0632
000076 000207 RTS PC
000100 005000 2$: CLR R0 ; 0609
000102 000207 RTS PC
; Routine Size: 34 words, Routine Base: $CODE$ + 1532
; Maximum stack depth per invocation: 5 words
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 23
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (11)
; 0650 global routine STXMAP (CODE) =
; 0651
; 0652 !++
; 0653 ! FUNCTIONAL DESCRIPTION:
; 0654 ! Map from SC error codes to RSX codes
; 0655 !
; 0656 ! FORMAL PARAMETERS:
; 0657 ! CODE SC error code
; 0658 !
; 0659 ! IMPLICIT INPUTS:
; 0660 ! None
; 0661 !
; 0662 ! IMPLICIT OUTPUTS:
; 0663 ! None
; 0664 !
; 0665 ! ROUTINE VALUE:
; 0666 ! The equivalent RSX error code
; 0667 !
; 0668 ! COMPLETION CODES:
; 0669 ! None
; 0670 !
; 0671 ! SIDE EFFECTS:
; 0672 ! None
; 0673 !--
; 0674
; 0675 begin
; 0676
; 0677 macro
; 0678 C (SC_CODE, RSX_CODE) = ((SC_CODE - S_ELO)^1, RSX_CODE) %;
; 0679
; 0680 bind
; P 0681 STATUS_MAP = TABLE$ (IE_PRI, (S_EHI - S_ELO)^1,
; P 0682 C (S_SSUC, IS_SUC), ! Success
; P 0683 C (S_EABL, IE_ABO), ! Abort
; P 0684 C (S_EABM, IE_ABO), ! ...
; P 0685 C (S_EABO, IE_ABO), ! ...
; P 0686 C (S_EABS, IE_ABO), ! ...
; P 0687 C (S_ENUR, IE_ABO), ! ...
; P 0688 C (S_ERNS, IE_ABO), ! ...
; P 0689 C (S_EACR, IE_URJ), ! User reject
; P 0690 C (S_EOTB, IE_URJ), ! ...
; P 0691 C (S_ERBO, IE_URJ), ! ...
; P 0692 C (S_ECBE, IE_BAD), ! Bad parameter
; P 0693 C (S_ELST, IS_DAO), ! Data overrun
; P 0694 C (S_EMTL, IE_SPC), ! Invalid buffer parameter
; P 0695 C (S_ENRO, IE_NNT), ! Not a network task
; P 0696 C (S_EURO, IE_NNT), ! ...
; P 0697 C (S_ERES, IE_RSU), ! Resources unavailable
; 0698 C (S_EUNN, IE_NRJ)): vector; ! Network rejection
; 0699
; 0700 .STATUS_MAP [.CODE - S_ELO]
; 0701 end;
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 24
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (11)
000006 .PSECT $PLIT$, RO , D
000006 177761 P.AAB: .WORD -17
000010 177660 .WORD -120
000012 177760 .WORD -20
000014 177760 .WORD -20
000016 177760 .WORD -20
000020 177667 .WORD -111
000022 177760 .WORD -20
000024 177760 .WORD -20
000026 177760 .WORD -20
000030 177760 .WORD -20
000032 177760 .WORD -20
000034 177760 .WORD -20
000036 177760 .WORD -20
000040 177760 .WORD -20
000042 177760 .WORD -20
000044 177760 .WORD -20
000046 177760 .WORD -20
000050 177760 .WORD -20
000052 177760 .WORD -20
000054 177667 .WORD -111
000056 177761 .WORD -17
000060 177760 .WORD -20
000062 177772 .WORD -6
000064 177760 .WORD -20
000066 000002 .WORD 2
000070 177760 .WORD -20
000072 177760 .WORD -20
000074 177777 .WORD -1
000076 177760 .WORD -20
000100 177760 .WORD -20
000102 177761 .WORD -17
000104 177761 .WORD -17
000106 177761 .WORD -17
000110 177667 .WORD -111
000112 177760 .WORD -20
000114 177660 .WORD -120
000116 177761 .WORD -17
000120 177666 .WORD -112
000122 177757 .WORD -21
000124 177760 .WORD -20
000126 000001 .WORD 1
000006' STATUS.MAP= P.AAB
.SBTTL STXMAP
001636 .PSECT $CODE$, RO
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 25
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (11)
000000 016600 000002 STXMAP::MOV 2(SP),R0 ; CODE,* 0700
000004 006300 ASL R0
000006 016000 000124' MOV STATUS.MAP+116(R0),R0 ; 0650
000012 000207 RTS PC
; Routine Size: 6 words, Routine Base: $CODE$ + 1636
; Maximum stack depth per invocation: 0 words
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 26
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (12)
; 0702 global routine ULAGET (ULA) =
; 0703
; 0704 !++
; 0705 ! FUNCTIONAL DESCRIPTION:
; 0706 ! Locate an available ULA and assign it.
; 0707 !
; 0708 ! FORMAL PARAMETERS:
; 0709 ! ULA Address of word to receive ULA number
; 0710 !
; 0711 ! IMPLICIT INPUTS:
; 0712 ! The vector at SCX_ULA is used
; 0713 !
; 0714 ! IMPLICIT OUTPUTS:
; 0715 ! The vector entry in SCX_ULA is set to true
; 0716 !
; 0717 ! ROUTINE VALUE:
; 0718 ! True if ULA allocated, else false
; 0719 !
; 0720 ! COMPLETION CODES:
; 0721 ! None
; 0722 !
; 0723 ! SIDE EFFECTS:
; 0724 ! None
; 0725 !--
; 0726
; 0727 begin
; 0728 $scx_get_data_base (SCXDB);
; 0729 local
; 0730 SAV_MAP;
; 0731 bind
; 0732 ULA_VEC = SCXDB [SCX_ULA_ADDR]: ref vector;
; 0733
; 0734 SMAP$ (SAV_MAP);
; 0735 MAP$ (.SCXDB [SCX_ULA_BIAS]);
; 0736
; 0737 incr I from 1 to .SCXDB [SCX_LINKS]-1 do ! Don't assign zero
; 0738 begin
; 0739 if .ULA_VEC [.I] eql 0
; 0740 then
; 0741 begin
; 0742 ULA_VEC [.I] = true;
; 0743 .ULA = .I;
; 0744 MAP$ (.SAV_MAP);
; 0745 return true
; 0746 end
; 0747 end;
; 0748
; 0749 MAP$ (.SAV_MAP);
; 0750 return false
; 0751 end;
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 27
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (12)
.SBTTL ULAGET
000000 004167 000000G ULAGET::JSR R1,$SAVE3 ; 0702
000004 016701 000002G MOV .CRDAT+2,R1 ; 0727
000010 016703 000000G MOV KISAR6,R3 ; *,SAV.MAP 0734
000014 016167 000024 000000G MOV 24(R1),KISAR6 ; 0735
000022 005002 CLR R2 ; I 0737
000024 000417 BR 2$
000026 010200 1$: MOV R2,R0 ; I,* 0739
000030 006300 ASL R0
000032 066100 000026 ADD 26(R1),R0
000036 005710 TST (R0)
000040 001011 BNE 2$
000042 012710 000001 MOV #1,(R0) ; 0742
000046 010276 000012 MOV R2,@12(SP) ; I,ULA 0743
000052 010367 000000G MOV R3,KISAR6 ; SAV.MAP,* 0744
000056 012700 000001 MOV #1,R0 ; 0741
000062 000207 RTS PC
000064 005202 2$: INC R2 ; I 0737
000066 020261 000010 CMP R2,10(R1) ; I,*
000072 002755 BLT 1$
000074 010367 000000G MOV R3,KISAR6 ; SAV.MAP,* 0749
000100 005000 CLR R0 ; 0727
000102 000207 RTS PC ; 0702
; Routine Size: 34 words, Routine Base: $CODE$ + 1652
; Maximum stack depth per invocation: 5 words
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 28
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (13)
; 0752 global routine ULARD (ULA) =
; 0753
; 0754 !++
; 0755 ! FUNCTIONAL DESCRIPTION:
; 0756 ! Return contents of ULA vector entry
; 0757 !
; 0758 ! FORMAL PARAMETERS:
; 0759 ! ULA The ULA
; 0760 !
; 0761 ! IMPLICIT INPUTS:
; 0762 ! The vector at SCX_ULA is used
; 0763 !
; 0764 ! IMPLICIT OUTPUTS:
; 0765 ! None
; 0766 !
; 0767 ! ROUTINE VALUE:
; 0768 ! The ULA vector contents, which is
; 0769 ! True, if just allocated
; 0770 ! LCB address when in use
; 0771 !
; 0772 ! COMPLETION CODES:
; 0773 ! None
; 0774 !
; 0775 ! SIDE EFFECTS:
; 0776 ! None
; 0777 !--
; 0778
; 0779 begin
; 0780 $scx_get_data_base (SCXDB);
; 0781 local
; 0782 SAV_MAP,
; 0783 TEMP;
; 0784 bind
; 0785 ULA_VEC = SCXDB [SCX_ULA_ADDR]: ref vector;
; 0786
; 0787 SMAP$ (SAV_MAP);
; 0788 MAP$ (.SCXDB [SCX_ULA_BIAS]);
; 0789
; 0790 TEMP = .ULA_VEC [.ULA];
; 0791 MAP$ (.SAV_MAP);
; 0792 return .TEMP
; 0793 end;
.SBTTL ULARD
000000 004167 000000G ULARD:: JSR R1,$SAVE2 ; 0752
000004 016701 000002G MOV .CRDAT+2,R1 ; 0785
000010 062701 000026 ADD #26,R1
000014 016702 000000G MOV KISAR6,R2 ; *,SAV.MAP 0787
000020 016700 000002G MOV .CRDAT+2,R0 ; 0788
000024 016067 000024 000000G MOV 24(R0),KISAR6
000032 016600 000010 MOV 10(SP),R0 ; ULA,* 0790
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 29
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (13)
000036 006300 ASL R0
000040 061100 ADD (R1),R0
000042 011001 MOV (R0),R1 ; *,TEMP
000044 010267 000000G MOV R2,KISAR6 ; SAV.MAP,* 0791
000050 010100 MOV R1,R0 ; TEMP,* 0779
000052 000207 RTS PC ; 0752
; Routine Size: 22 words, Routine Base: $CODE$ + 1756
; Maximum stack depth per invocation: 4 words
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 30
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (14)
; 0794 global routine ULASET (ULA, VALUE): novalue =
; 0795
; 0796 !++
; 0797 ! FUNCTIONAL DESCRIPTION:
; 0798 ! Set value into ULA vector.
; 0799 !
; 0800 ! FORMAL PARAMETERS:
; 0801 ! ULA The ULA
; 0802 ! VALUE Value to be written into ULA vector
; 0803 !
; 0804 ! IMPLICIT INPUTS:
; 0805 ! The vector at SCX_ULA is used
; 0806 !
; 0807 ! IMPLICIT OUTPUTS:
; 0808 ! None
; 0809 !
; 0810 ! ROUTINE VALUE:
; 0811 ! COMPLETION CODES:
; 0812 ! None
; 0813 !
; 0814 ! SIDE EFFECTS:
; 0815 ! None
; 0816 !--
; 0817
; 0818 begin
; 0819 $scx_get_data_base (SCXDB);
; 0820 local
; 0821 SAV_MAP;
; 0822 bind
; 0823 ULA_VEC = SCXDB [SCX_ULA_ADDR]: ref vector;
; 0824
; 0825 SMAP$ (SAV_MAP);
; 0826 MAP$ (.SCXDB [SCX_ULA_BIAS]);
; 0827
; 0828 ULA_VEC [.ULA] = .VALUE;
; 0829 MAP$ (.SAV_MAP)
; 0830 end;
.SBTTL ULASET
000000 004167 000000G ULASET::JSR R1,$SAVE2 ; 0794
000004 016701 000002G MOV .CRDAT+2,R1 ; 0823
000010 062701 000026 ADD #26,R1
000014 016702 000000G MOV KISAR6,R2 ; *,SAV.MAP 0825
000020 016700 000002G MOV .CRDAT+2,R0 ; 0826
000024 016067 000024 000000G MOV 24(R0),KISAR6
000032 016600 000012 MOV 12(SP),R0 ; ULA,* 0828
000036 006300 ASL R0
000040 061100 ADD (R1),R0
000042 016610 000010 MOV 10(SP),(R0) ; VALUE,*
000046 010267 000000G MOV R2,KISAR6 ; SAV.MAP,* 0829
000052 000207 RTS PC ; 0794
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 31
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (14)
; Routine Size: 22 words, Routine Base: $CODE$ + 2032
; Maximum stack depth per invocation: 4 words
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 32
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (15)
; 0831 global routine $C5TA (RAD50_NAME, PTR_ADDR, LNG_ADDR): novalue =
; 0832
; 0833 !++
; 0834 ! FUNCTIONAL DESCRIPTION:
; 0835 ! Convert RAD50 value to ascii string.
; 0836 !
; 0837 ! FORMAL PARAMETERS:
; 0838 ! RAD50_NAME The RAD50 value to convert
; 0839 ! PTR_ADDR Address of pointer to buffer to receive ascii
; 0840 ! LNG_ADDR Address of word to receive string length
; 0841 !
; 0842 ! IMPLICIT INPUTS:
; 0843 ! None
; 0844 !
; 0845 ! IMPLICIT OUTPUTS:
; 0846 ! The buffer pointer is updated to point to next position in buffer
; 0847 ! following information inserted.
; 0848 !
; 0849 ! ROUTINE VALUE:
; 0850 ! COMPLETION CODES:
; 0851 ! None
; 0852 !
; 0853 ! SIDE EFFECTS:
; 0854 ! None
; 0855 !--
; 0856
; 0857 begin
; 0858 local
; 0859 CH;
; 0860
; 0861 CH = .RAD50_NAME mod 40;
; 0862 RAD50_NAME = .RAD50_NAME / 40;
; 0863 if .RAD50_NAME neq 0 then $C5TA (.RAD50_NAME, .PTR_ADDR, .LNG_ADDR);
; 0864
; 0865 CH = (selectone .CH of
; 0866 set
; L 0867 %if %bliss (bliss36)
; U 0868 %then
; U 0869 [0]: %c' ';
; U 0870 [1 to 10]: %c'0' + .CH - 1;
; U 0871 [11 to 36]: %c'A' + .CH - 11;
; U 0872 [37]: %c'.';
; U 0873 [38]: %c'$';
; U 0874 [39]: %c'%';
; 0875 %else
; 0876 [0]: %c' ';
; 0877 [1 to 26]: %c'A' + .CH - 1;
; 0878 [27]: %c'$';
; 0879 [28]: %c'.';
; 0880 [30 to 39]: %c'0' + .CH - 30;
; 0881 [otherwise]: %c'_';
; 0882 %fi
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 33
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (15)
; 0883 tes);
; 0884
; 0885 .LNG_ADDR = ..LNG_ADDR + 1; ! Count the character
; 0886 ch$wchar_a (.CH, .PTR_ADDR) ! and put it into string
; 0887 end;
.SBTTL $C5TA
000000 004167 000000G $C5TA:: JSR R1,$SAVE2 ; 0831
000004 016601 000014 MOV 14(SP),R1 ; RAD50.NAME,* 0861
000010 006700 SXT R0
000012 071027 000050 DIV #50,R0
000016 010102 MOV R1,R2 ; *,CH
000020 016601 000014 MOV 14(SP),R1 ; RAD50.NAME,* 0862
000024 006700 SXT R0
000026 071027 000050 DIV #50,R0
000032 010066 000014 MOV R0,14(SP) ; *,RAD50.NAME
000036 001411 BEQ 1$ ; 0863
000040 010046 MOV R0,-(SP)
000042 016646 000014 MOV 14(SP),-(SP) ; PTR.ADDR,*
000046 016646 000014 MOV 14(SP),-(SP) ; LNG.ADDR,*
000052 004767 177722 JSR PC,$C5TA
000056 062706 000006 ADD #6,SP
000062 005702 1$: TST R2 ; CH 0865
000064 001003 BNE 2$
000066 012702 000040 MOV #40,R2 ; *,CH
000072 000436 BR 7$
000074 003406 2$: BLE 3$
000076 020227 000032 CMP R2,#32 ; CH,*
000102 003003 BGT 3$
000104 062702 000100 ADD #100,R2 ; *,CH 0877
000110 000427 BR 7$ ; 0865
000112 020227 000033 3$: CMP R2,#33 ; CH,*
000116 001003 BNE 4$
000120 012702 000044 MOV #44,R2 ; *,CH
000124 000421 BR 7$
000126 020227 000034 4$: CMP R2,#34 ; CH,*
000132 001003 BNE 5$
000134 012702 000056 MOV #56,R2 ; *,CH
000140 000413 BR 7$
000142 020227 000036 5$: CMP R2,#36 ; CH,*
000146 002406 BLT 6$
000150 020227 000047 CMP R2,#47 ; CH,*
000154 003003 BGT 6$
000156 062702 000022 ADD #22,R2 ; *,CH 0880
000162 000402 BR 7$ ; 0865
000164 012702 000137 6$: MOV #137,R2 ; *,CH
000170 005276 000010 7$: INC @10(SP) ; LNG.ADDR 0885
000174 017600 000012 MOV @12(SP),R0 ; PTR.ADDR,* 0886
000200 110210 MOVB R2,(R0) ; CH,*
000202 005276 000012 INC @12(SP) ; PTR.ADDR
000206 000207 RTS PC ; 0831
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 34
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (15)
; Routine Size: 68 words, Routine Base: $CODE$ + 2106
; Maximum stack depth per invocation: 7 words
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 35
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (16)
; 0888 global routine $CAT5 (PTR_ADDR, FLAG) =
; 0889
; 0890 !++
; 0891 ! FUNCTIONAL DESCRIPTION:
; 0892 ! Convert ascii string to RAD50 format
; 0893 !
; 0894 ! FORMAL PARAMETERS:
; 0895 ! PTR_ADDR Address of pointer which contains ascii string
; 0896 ! FLAG If nonzero, period is accepted as a character
; 0897 !
; 0898 ! IMPLICIT INPUTS:
; 0899 ! None
; 0900 !
; 0901 ! IMPLICIT OUTPUTS:
; 0902 ! The pointer addressed by PTR_ADDR is updated past characters converted.
; 0903 !
; 0904 ! ROUTINE VALUE:
; 0905 ! The RAD50 equivalent of the characters converted.
; 0906 !
; 0907 ! COMPLETION CODES:
; 0908 ! None
; 0909 !
; 0910 ! SIDE EFFECTS:
; 0911 ! None
; 0912 !--
; 0913
; 0914 begin
; 0915 local
; 0916 R50;
; 0917 literal
; 0918 NCH = %if %bliss (bliss36) %then 5 %else 2 %fi;
; 0919
; 0920 R50 = 0;
; 0921 incr I from 0 to NCH do
; 0922 begin
; 0923 R50 = (.R50 * 40) +
; 0924 begin
; 0925 local CH;
; 0926 selectoneu (CH = ch$rchar_a (.PTR_ADDR)) of
; 0927 set
; L 0928 %if not %bliss (bliss36)
; 0929 %then ! (bliss16 or bliss32)
; 0930 [%c'A' to %c'Z']: .CH - %c'A' + 1;
; 0931 [%c'0' to %c'9']: .CH - %c'0' + 30;
; 0932 [%c'$']: 27;
; 0933 [%c' ']: 0;
; 0934 [%c'.']: if .FLAG neq 0 then 28 else (.PTR_ADDR = ch$plus (..PTR_ADDR, -1); 0);
; 0935 [otherwise]: (.PTR_ADDR = ch$plus (..PTR_ADDR, -1); 0);
; U 0936 %else ! (bliss36)
; U 0937 [%c'A' to %c'Z']: .CH - %c'A' + 11;
; U 0938 [%c'0' to %c'9']: .CH - %c'0' + 1;
; U 0939 [%c'$']: 38;
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 36
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (16)
; U 0940 [%c'%']: 39;
; U 0941 [%c' ']: 0;
; U 0942 [%c'.']: if .FLAG neq 0 then 37 else exitloop;
; U 0943 [otherwise]: exitloop;
; 0944 %fi
; 0945 tes
; 0946 end
; 0947 end;
; 0948
; 0949 return .R50
; 0950 end;
.SBTTL $CAT5
000000 004167 000000G $CAT5:: JSR R1,$SAVE5 ; 0888
000004 005005 CLR R5 ; R50 0920
000006 016604 000020 MOV 20(SP),R4 ; PTR.ADDR,* 0926
000012 005003 CLR R3 ; I 0921
000014 010501 1$: MOV R5,R1 ; R50,* 0923
000016 070127 000050 MUL #50,R1
000022 005214 INC (R4) ; 0926
000024 011400 MOV (R4),R0
000026 114000 MOVB -(R0),R0 ; *,CH
000030 042700 177400 BIC #177400,R0 ; *,CH
000034 020027 000101 CMP R0,#101 ; CH,*
000040 103407 BLO 2$
000042 020027 000132 CMP R0,#132 ; CH,*
000046 101004 BHI 2$
000050 010002 MOV R0,R2 ; CH,* 0930
000052 162702 000100 SUB #100,R2
000056 000411 BR 3$ ; 0926
000060 020027 000060 2$: CMP R0,#60 ; CH,*
000064 103410 BLO 4$
000066 020027 000071 CMP R0,#71 ; CH,*
000072 101005 BHI 4$
000074 010002 MOV R0,R2 ; CH,* 0931
000076 162702 000022 SUB #22,R2
000102 010200 3$: MOV R2,R0 ; 0926
000104 000424 BR 8$
000106 020027 000044 4$: CMP R0,#44 ; CH,*
000112 001003 BNE 5$
000114 012700 000033 MOV #33,R0
000120 000416 BR 8$
000122 020027 000040 5$: CMP R0,#40 ; CH,*
000126 001412 BEQ 7$
000130 020027 000056 CMP R0,#56 ; CH,*
000134 001006 BNE 6$
000136 005766 000016 TST 16(SP) ; FLAG 0934
000142 001403 BEQ 6$
000144 012700 000034 MOV #34,R0
000150 000402 BR 8$
000152 005314 6$: DEC (R4) ; 0935
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 37
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (16)
000154 005000 7$: CLR R0 ; 0926
000156 060001 8$: ADD R0,R1 ; 0923
000160 010105 MOV R1,R5 ; *,R50 0922
000162 005203 INC R3 ; I 0921
000164 020327 000002 CMP R3,#2 ; I,*
000170 003711 BLE 1$
000172 010500 MOV R5,R0 ; R50,* 0914
000174 000207 RTS PC ; 0888
; Routine Size: 63 words, Routine Base: $CODE$ + 2316
; Maximum stack depth per invocation: 7 words
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 38
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (17)
; 0951 global routine $SCQHD (QHD, STR): novalue =
; 0952
; 0953 !++
; 0954 ! FUNCTIONAL DESCRIPTION:
; 0955 ! Queue STR to head of queue defined by QHD.
; 0956 !
; 0957 ! FORMAL PARAMETERS:
; 0958 ! QHD 2-word queue header
; 0959 ! STR Structure to be queued (link in first word)
; 0960 !
; 0961 ! IMPLICIT INPUTS:
; 0962 ! None
; 0963 !
; 0964 ! IMPLICIT OUTPUTS:
; 0965 ! None
; 0966 !
; 0967 ! ROUTINE VALUE:
; 0968 ! COMPLETION CODES:
; 0969 ! None
; 0970 !
; 0971 ! SIDE EFFECTS:
; 0972 ! None
; 0973 !--
; 0974
; 0975 begin
; 0976 map
; 0977 QHD: ref block field (QHD_FIELDS),
; 0978 STR: ref block field (QHD_FIELDS);
; 0979
; 0980 if (STR [Q_HEAD] = .QHD [Q_HEAD]) eql 0 then QHD [Q_TAIL] = STR [Q_HEAD];
; 0981 QHD [Q_HEAD] = STR [Q_HEAD]
; 0982 end;
.SBTTL $SCQHD
000000 010146 $SCQHD::MOV R1,-(SP) ; 0951
000002 016601 000004 MOV 4(SP),R1 ; STR,* 0980
000006 016600 000006 MOV 6(SP),R0 ; QHD,*
000012 011011 MOV (R0),(R1)
000014 001002 BNE 1$
000016 010160 000002 MOV R1,2(R0)
000022 010110 1$: MOV R1,(R0) ; 0981
000024 012601 MOV (SP)+,R1 ; 0951
000026 000207 RTS PC
; Routine Size: 12 words, Routine Base: $CODE$ + 2514
; Maximum stack depth per invocation: 2 words
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 39
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (18)
; 0983 global routine $SCQIN (QHD, STR): novalue =
; 0984
; 0985 !++
; 0986 ! FUNCTIONAL DESCRIPTION:
; 0987 ! Queue STR to tail of queue defined by QHD.
; 0988 !
; 0989 ! FORMAL PARAMETERS:
; 0990 ! QHD 2-word queue header
; 0991 ! STR Structure to be queued (link in first word)
; 0992 !
; 0993 ! IMPLICIT INPUTS:
; 0994 ! None
; 0995 !
; 0996 ! IMPLICIT OUTPUTS:
; 0997 ! None
; 0998 !
; 0999 ! ROUTINE VALUE:
; 1000 ! COMPLETION CODES:
; 1001 ! None
; 1002 !
; 1003 ! SIDE EFFECTS:
; 1004 ! None
; 1005 !--
; 1006
; 1007 begin
; 1008 map
; 1009 QHD: ref block field (QHD_FIELDS),
; 1010 STR: ref block field (QHD_FIELDS);
; 1011 bind
; 1012 LAST_STR = QHD [Q_TAIL]: ref block field (QHD_FIELDS);
; 1013
; 1014 STR [Q_HEAD] = 0;
; 1015 LAST_STR [Q_HEAD] = STR [Q_HEAD];
; 1016 QHD [Q_TAIL] = STR [Q_HEAD]
; 1017 end;
.SBTTL $SCQIN
000000 010146 $SCQIN::MOV R1,-(SP) ; 0983
000002 016600 000006 MOV 6(SP),R0 ; QHD,* 1012
000006 016601 000004 MOV 4(SP),R1 ; STR,* 1014
000012 005011 CLR (R1)
000014 010170 000002 MOV R1,@2(R0) ; 1015
000020 010160 000002 MOV R1,2(R0) ; 1016
000024 012601 MOV (SP)+,R1 ; 0983
000026 000207 RTS PC
; Routine Size: 12 words, Routine Base: $CODE$ + 2544
; Maximum stack depth per invocation: 2 words
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 40
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (19)
; 1018 global routine $SCQRM (QHD, STR) =
; 1019
; 1020 !++
; 1021 ! FUNCTIONAL DESCRIPTION:
; 1022 ! Remove structure from queue defined by QHD, and return
; 1023 ! its address in STR.
; 1024 !
; 1025 ! FORMAL PARAMETERS:
; 1026 ! QHD 2-word queue header
; 1027 ! STR Word to receive structure address
; 1028 !
; 1029 ! IMPLICIT INPUTS:
; 1030 ! None
; 1031 !
; 1032 ! IMPLICIT OUTPUTS:
; 1033 ! None
; 1034 !
; 1035 ! ROUTINE VALUE:
; 1036 ! COMPLETION CODES:
; 1037 ! True if something dequeued
; 1038 ! False if nothing dequeued
; 1039 !
; 1040 ! SIDE EFFECTS:
; 1041 ! None
; 1042 !--
; 1043
; 1044 begin
; 1045 map QHD: ref block field (QHD_FIELDS);
; 1046
; 1047 if (.STR = .QHD [Q_HEAD]) eql 0 then return false;
; 1048 ..STR = 0;
; 1049 if (QHD [Q_HEAD] = .(.QHD [Q_HEAD])) eql 0
; 1050 then QHD [Q_TAIL] = QHD [Q_HEAD];
; 1051 return true
; 1052 end;
.SBTTL $SCQRM
000000 010146 $SCQRM::MOV R1,-(SP) ; 1018
000002 016601 000004 MOV 4(SP),R1 ; STR,* 1047
000006 016600 000006 MOV 6(SP),R0 ; QHD,*
000012 011011 MOV (R0),(R1)
000014 001412 BEQ 2$
000016 005071 000000 CLR @0(R1) ; 1048
000022 017010 000000 MOV @0(R0),(R0) ; 1049
000026 001002 BNE 1$
000030 010060 000002 MOV R0,2(R0) ; 1050
000034 012700 000001 1$: MOV #1,R0 ; 1044
000040 000401 BR 3$
000042 005000 2$: CLR R0 ; 1018
000044 012601 3$: MOV (SP)+,R1
000046 000207 RTS PC
SCXSUB 25-Jan-1983 10:27:23 TOPS-20 Bliss-16 2A(530) Page 41
X01150 30-Dec-1982 21:05:08 NETPKG:<SC>SCXSUB.BLI.9 (19)
; Routine Size: 20 words, Routine Base: $CODE$ + 2574
; Maximum stack depth per invocation: 2 words
; 1053
; 1054 end
; 1055 eludom
; OTS external references
.GLOBL $SAVE5, $SAVE3, $SAVE2, $STOP
.GLOBL BL$FIL, BL$MOV
; PSECT SUMMARY
;
; Psect Name Words Attributes
; $CODE$ 722 RO , I , LCL, REL, CON
; $PLIT$ 44 RO , D , LCL, REL, CON
; LIBRARY STATISTICS
;
; -------- Symbols -------- Blocks
; File Total Loaded Percent Read
;
; NETPKG:<SC>SCPRM.L16.4 262 100 38 0
; NETPKG:<MCB>MCBLIB.L16.15 372 53 14 0
; NETPKG:<MCB>RSXLIB.L16.13 317 18 5 0
; NETPKG:<MCB>XPORTX.L16.15 599 31 5 0
; NETPKG:<MCB>SCSYS.L16.13 113 30 26 0
; Size: 722 code + 44 data words
; Run Time: 01:08.4
; Elapsed Time: 04:07.4
; Memory Used: 87 pages
; Compilation Complete