ASMB,R,Q,C
*     NAME:   SWPIN 
*     SOURCE: 92070-18161 
*     RELOC:  92070-1X161 
*     PGMR:   HLC 
* 
* 
*  **************************************************************** 
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  ALL RIGHTS      * 
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,       * 
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * 
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.        * 
*  **************************************************************** 
* 
* 
      NAM SWPIN,7  92070-1X161  REV.1941  790208
      ENT SWPIN 
* 
      EXT $LIBR,$LIBX,.ENTP,$SWTA 
      EXT $SWLU,.MVW
      EXT GTOPN,$BGBP,$SYBP,$FWBG 
      EXT $ROM,$ID# 
* 
A     EQU 0 
B     EQU 1 
* 
* 
* 
* 
*     SAMPLE PROGRAM: 
* 
*FTN4,L 
*     PROGRAM SWPTS 
*     INTEGER DCB(144),ERROR,NAME(3)
*     INTEGER SWPIN,BLOCKS
*     DATA NAME/2HSW,2HAP,2HFL/ 
*C
*     IF (OPEN (DCB,ERROR,NAME,4).LT.0) GOTO 100
*     IF (SWPIN(DCB,ERROR,BLOCKS).LE.0) GOTO 100
*     WRITE(1,50)ERROR,BLOCKS 
*50   FORMAT(I8," SWAP AREAS AVAILABLE." I8 " BLOCKS REQUIRED.")
*200  CALL CLOSE(DCB) 
*     STOP
*100  WRITE(1,150)ERROR 
*150  FORMAT("  SWAP INITIALIZATION FAILED  (FMP ERROR",I4,")") 
*     GOTO 200
*     END 
*     END$
* 
* 
*     POSSIBLE SWPIN ERRORS:
*     -7            WRONG SECURITY CODE 
*     -11           FILE NOT OPEN 
*     -42           SWAPPING ACTIVE 
*     -43           SYSTEM DOES NOT ALLOW SWAPPING
*     -44           WRONG FILE TYPE 
*     -45           FILE TOO SMALL
* 
* 
* 
IDCB  NOP 
IERR  NOP 
IBLKS NOP 
SWPIN NOP           INITIALIZE SWAPPING 
      JSB $LIBR     TURN OFF MEMORY PROTECT 
      NOP 
      JSB .ENTP     GET PARAMETER ADDRESSES 
      DEF IDCB
      LDA =D-43 
      LDB $SWLU 
      SSB 
      JMP ERROR     NO SWAPPING MODULE IN SYSTEM
* 
AGAIN LDA $ID#      MAX NO. OF SWAP AREAS 
      CMA,INA 
      STA TEMP
* 
      LDA $SWTA     SCAN THE SWAP TABLE FOR BUSY AREAS
      STA SWTP
LOOP1 LDB A,I 
      SZB 
      JMP MR?       SWAPPING ACTIVE 
      INA 
      ISZ TEMP
      JMP LOOP1 
* 
      LDA IDCB      COPY THE DCB TO LOCAL MEMORY
      LDB DDCB
      JSB .MVW
      DEF D10 
      NOP 
* 
      JSB GTOPN     GET THE OPEN FLAG 
      DEF *+1 
      CPA OPEN
      CCB,RSS 
      JMP ER.11     DCB NOT OPEN TO THIS PROGRAM
* 
      ADB TYPE
      LDA =D-44 
      SZB 
      JMP ERROR     NOT TYPE 1 FILE 
* 
      LDB CODE
      LDA =D-7
      SSB,RSS 
      JMP ERROR     WRONG SECURITY CODE 
* 
      LDA LU
      AND =B77
      STA SWLU      SWAPPING DISC LU
* 
      LDA $FWBG 
      CMA,INA 
      ADA $ROM      SIZE OF BACKGROUND
      CLB 
      RRR 7         DIVIDE BY 128 
      SZB 
      INA           ROUND UP TO WHOLE BLOCK 
      STA TEMP      NO. OF BLOCKS FOR MAIN
* 
      LDA TRACK 
      STA SWTR      STARTING TRACK OF FILE
      LDA SECTR 
      STA SWSEC     STARTING SECTOR OF FILE 
      RAR 
      STA TEMP2     STARTING BLOCK
* 
      LDA SEC/T 
      RAR 
      STA BLK/T     CONVERT SECTORS TO BLOCKS 
      MPY TRACK 
      CLE 
      ADA TEMP2     STARTING BLOCK FOR SWAP FILE
      SEZ 
      CLE,INB       CARRY 
      DST MBLOK 
      ADA TEMP      ADD SIZE OF BACKGROUND
      SEZ 
      INB 
      DST BBLOK     STARTING BLOCK FOR BASE PAGE
* 
      LDA $BGBP 
      CMA,INA 
      ADA $SYBP     SIZE OF BACKGROUND BASE PAGE
      STA SZBP
      CLB 
      RRR 7         DIVIDE BY 128 
      SZB 
      INA           ROUND UP TO WHOLE BLOCK 
      ADA TEMP      TOTAL BLOCKS PER SWAP AREA
      STA BLK/A 
      LDA SIZE      DIVIDE FILE INTO SWAP AREAS 
      RAR 
      CLB 
      DIV BLK/A     NO. OF AREAS
      STA B 
      CMA,INA 
      ADA $ID#
      SSA 
      LDB $ID#      DO NOT EXCEED SIZE OF SWAP TABLE
      LDA =D-45 
      SZB,RSS 
      JMP ERROR     FILE TOO SMALL FOR ANY SWAP AREAS 
      STB SWT#
      ADB $SWTA 
      STB SWEND     END OF VALID SWAP TABLE 
* 
      LDA DSWLU     MOVE LOCAL TABLE TO SYSTEM MEMORY 
      LDB D$SWL 
      JSB .MVW
      DEF D13 
      NOP 
      LDA SWT#
      MPY BLK/A     COMPUTE TOTAL BLOCKS REQUIRED 
      STA IBLKS,I 
      LDA SWT#
* 
ERROR STA IERR,I
      JSB $LIBX     RESTORE MEMORY PROTECT
      DEF SWPIN 
* 
ER.11 LDA =D-11 
      JMP ERROR 
* 
* 
MR?   STA TEMP      SWAP TABLE INDEX
      ADB =D15
      LDA B,I       ID SEGMENT STATUS WORD
      SSA,RSS 
      JMP ER.42     SWAPPED PROGRAM IS NOT IN MEMORY
      ADB =D12
      LDA B,I 
      AND =B377     CLEAR SWAP AREA NO. 
      STA B,I 
      CLA 
      STA TEMP,I    CLEAR SWAP TABLE
      JMP AGAIN     RESCAN SWAP TABLE 
* 
* 
ER.42 LDA =D-42 
      JMP ERROR 
* 
D13   DEC 13
D10   DEC 10
* 
* 
D$SWL DEF $SWLU 
* 
DSWLU DEF SWLU
* 
SWLU  NOP           LU OF SWAPPING DISC 
SWTR  NOP           STARTING TRACK OF SWAP FILE 
SWSEC NOP           STARTING SECTOR OF SWAP FILE
SWT#  NOP           NUMBER OF VALID SWAP AREAS
SWTP  NOP           CURRENT SWAP TABLE POINTER
SWEND NOP           ADDRESS OF LAST VALID ENTRY +1
SZBP  NOP           SIZE OF BASE PAGE IN WORDS
BLK/T NOP           NO. OF 128 WORD BLOCKS PER TRACK
BLK/A NOP           NO. OF BLOCKS PER SWAP AREA 
MBLOK OCT 0,0       STARTING BLOCK FOR MAIN 
BBLOK OCT 0,0       STARTING BLOCK FOR BASE PAGE
* 
* 
* 
DDCB  DEF LU
* 
LU    NOP 
TEMP  NOP 
TYPE  NOP 
TRACK NOP 
SECTR NOP 
SIZE  NOP 
TEMP2 NOP 
CODE  NOP 
SEC/T NOP 
OPEN  NOP 
      END 
            