|
|
DataMuseum.dkPresents historical artifacts from the history of: MIKADOS |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about MIKADOS Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 5600 (0x15e0)
Types: TextFile
Notes: Mikados_K
Names: »PURGEF.K«
└─⟦33b8385fd⟧ Bits:30009009 PSAP1
└─⟦this⟧ »PURGEF.K«
;*************************************************************
;* PASCAL STANDARD ASSEMBLER PACKAGE. *
;* *
;* (C) 1980 DANSK DATA ELEKTRONIK APS. *
;*************************************************************
;
;*************************************************************
;* PROCEDURE NAME: PURGEF *
;*************************************************************
;
; CT 07-MAY-1980/22-SEP-1980
;
;=============================================================
; DESCRIPTION:
; THIS PROCEDURE PURGES A MIKADOS FILE.
; PLEASE REFER TO THE PASCAL STANDARD ASSEMBLER PACKAGE MANUAL
; SECTION 8.4 FOR DETAILS.
;
;-------------------------------------------------------------
; STACK CONTENTS ON ENTRY: I I
; I---------------I
; I RETURN ADR. I
; I---------------I
; I -> FILENAME I
; I---------------I
; I I
;-------------------------------------------------------------
; STACK CONTENTS ON EXIT: EMPTY
;=============================================================
SKIP
SYMB
PURGEF::
;
;GET AND SAVE POINTER FROM STACK
;
POP D ;DE=RETURN ADDRESS
POP H ;HL->FILENAME
SHLD FILPTR ;SAVE ADDRESS OF FILENAME
PUSH D ;PUT RETURN ADDRESS BACK ON STACK
;
;CHECK THAT THERE IS ROOM ON THE HEAP FOR THE DCB
;
LHLD NP ;HL->NEXT VACANT IN HEAP
XCHG ;DE->NEXT VACANT IN HEAP
LXI H,-#256-#48-#40-#10 ;HL:=REQUIRED DISTANCE
; BETWEEN STACK AND HEAP
DAD SP
MOV A,L ;CALCULATE DISTANCE
SUB E
MOV A,H
SBB D ;IS IT SUFFICIENT?
JNC SUFF ;YES
MVI E,'K' ;(SET UP ERROR CODE FOR UNSIFFICENT
; STACK LENGTH)
JMP XEQRR ;NO. TERMINATE WITH RUN TIME ERROR K
SUFF: XCHG ;YES. HL->TOP OF HEAP
SHLD DCBADR ;THIS SHOULD BE THE DATA CONTROL BLOCK
LXI D,#256+#48 ;RESERVE ROOM
DAD D ; ON HEAP
SHLD NP ; FOR DCB
;
;THE FOLLOWING CODE BUILDS AND PUSHES THE PARAMETERS FOR THE
;PURGE SUBROUTINE
;
LXI D,1 ;DCB SIZE
PUSH D
;
;BLANK FILNAM
;
MVI A,#8 ;A=LENGTH OF FIELD TO BE BLANKED
LXI H,FILNAM ;HL->FIELD TO BE BLANKED
CALL E0LIN ;BLANK IT!
;
;MOVE CURRENT FILE NAME TO FILNAM. THE CURRENT FILE NAME IS
;TERMINATED BY A ':'
;
LXI B,FILNAM ;BC->FILNAM
LHLD FILPTR ;HL->FILENAME PARAMETER
INX H ;SKIP LENGTH OF FILENAME PARAMETER
NEXFIL:MOV A,M ;A:=A CHARACTER FROM THE FILE NAME
CPI ':' ;IS IT A COLON?
JZ GETDSC ;YES, WE ARE FINISHED
STAX B ;NO, STORE IT IN FILNAM
INX H ;POINT TO
INX B ; NEXT CHARACTER
JMP NEXFIL ;AND DO IT ONCE MORE
;
;GET DISC ID
;
GETDSC:INX H ;HL->DISC ID IN FILENAME PARAMETER
MOV C,M ;GET
INX H ; DISC ID
MOV B,M ; INTO BC
INX H ;SKIP THE SUBSEQUENT COLON
PUSH B ;PUSH DISC ID
;
;GET FILE TYPE
;
INX H ;HL->FILE TYPE
MOV B,M ;B:=FILE TYPE
PUSH B ;PUSH FILE TYPE IN MSB.
;
;SET UP REMAINING PARAMETERS FOR PURGE SUBROUTINE
;
LXI B,FILNAM
PUSH B ;PUSH ADDRESS OF FILE NAME
LHLD DCBADR
PUSH H ;PUSH ADDRESS OF DCB
MVI M,0 ;INDICATE
LXI B,DKÅBN ; FILE
DAD B ; CLOSED
MVI M,0
;
;DELETE THAT FILE!
;
CALL PURGE
;
;SET IORESULT
;
STA IORSLT
;
;RELEASE DCB AREA FROM HEAP
;
LHLD DCBADR ;HL->TOP OF HEAP BEFORE RESERVATION
SHLD NP ;STORE IT AS THE NEW TOP OF HEAP
RET
SKIP
;********** LOCAL DATA *********************
DCBADR:DS 2 ;ADDRESS OF DATA CONTROL BLOCK FOR FILE
FILNAM:DS 8 ;FILE NAME
FILPTR:DS 2 ;ADDRESS OF FILENAME PARAMETER
END
0x0000…0040 Line {l1=0x3e, l2=»;*************************************************************«, l3=0x3e}
0x0040…0080 Line {l1=0x3e, l2=»;* PASCAL STANDARD ASSEMBLER PACKAGE. *«, l3=0x3e}
0x0080…00c0 Line {l1=0x3e, l2=»;* *«, l3=0x3e}
0x00c0…0100 Line {l1=0x3e, l2=»;* (C) 1980 DANSK DATA ELEKTRONIK APS. *«, l3=0x3e}
0x0100…0140 Line {l1=0x3e, l2=»;*************************************************************«, l3=0x3e}
0x0140…0143 Line {l1=0x01, l2=»;«, l3=0x01}
0x0143…0183 Line {l1=0x3e, l2=»;*************************************************************«, l3=0x3e}
0x0183…01c3 Line {l1=0x3e, l2=»;* PROCEDURE NAME: PURGEF *«, l3=0x3e}
0x01c3…0203 Line {l1=0x3e, l2=»;*************************************************************«, l3=0x3e}
0x0203…0206 Line {l1=0x01, l2=»;«, l3=0x01}
0x0206…0224 Line {l1=0x1c, l2=»; CT 07-MAY-1980/22-SEP-1980«, l3=0x1c}
0x0224…0227 Line {l1=0x01, l2=»;«, l3=0x01}
0x0227…0267 Line {l1=0x3e, l2=»;=============================================================«, l3=0x3e}
0x0267…0277 Line {l1=0x0e, l2=»; DESCRIPTION:«, l3=0x0e}
0x0277…02a0 Line {l1=0x27, l2=»; THIS PROCEDURE PURGES A MIKADOS FILE.«, l3=0x27}
0x02a0…02e0 Line {l1=0x3e, l2=»; PLEASE REFER TO THE PASCAL STANDARD ASSEMBLER PACKAGE MANUAL«, l3=0x3e}
0x02e0…02fc Line {l1=0x1a, l2=»; SECTION 8.4 FOR DETAILS.«, l3=0x1a}
0x02fc…02ff Line {l1=0x01, l2=»;«, l3=0x01}
0x02ff…033f Line {l1=0x3e, l2=»;-------------------------------------------------------------«, l3=0x3e}
0x033f…0371 Line {l1=0x30, l2=»; STACK CONTENTS ON ENTRY: I I«, l3=0x30}
0x0371…03a3 Line {l1=0x30, l2=»; I---------------I«, l3=0x30}
0x03a3…03d5 Line {l1=0x30, l2=»; I RETURN ADR. I«, l3=0x30}
0x03d5…0407 Line {l1=0x30, l2=»; I---------------I«, l3=0x30}
0x0407…0439 Line {l1=0x30, l2=»; I -> FILENAME I«, l3=0x30}
0x0439…046b Line {l1=0x30, l2=»; I---------------I«, l3=0x30}
0x046b…049d Line {l1=0x30, l2=»; I I«, l3=0x30}
0x049d…04dd Line {l1=0x3e, l2=»;-------------------------------------------------------------«, l3=0x3e}
0x04dd…0503 Line {l1=0x24, l2=»; STACK CONTENTS ON EXIT: EMPTY«, l3=0x24}
0x0503…0543 Line {l1=0x3e, l2=»;=============================================================«, l3=0x3e}
0x0543…0546 Line {l1=0x01, l2=» «, l3=0x01}
0x0546…0553 Line {l1=0x0b, l2=» SKIP«, l3=0x0b}
0x0553…0560 Line {l1=0x0b, l2=» SYMB«, l3=0x0b}
0x0560…0563 Line {l1=0x01, l2=» «, l3=0x01}
0x0563…056d Line {l1=0x08, l2=»PURGEF::«, l3=0x08}
0x056d…0570 Line {l1=0x01, l2=» «, l3=0x01}
0x0570…0573 Line {l1=0x01, l2=»;«, l3=0x01}
0x0573…0595 Line {l1=0x20, l2=»;GET AND SAVE POINTER FROM STACK«, l3=0x20}
0x0595…0598 Line {l1=0x01, l2=»;«, l3=0x01}
0x0598…05c3 Line {l1=0x29, l2=» POP D ;DE=RETURN ADDRESS«, l3=0x29}
0x05c3…05e9 Line {l1=0x24, l2=» POP H ;HL->FILENAME«, l3=0x24}
0x05e9…061b Line {l1=0x30, l2=» SHLD FILPTR ;SAVE ADDRESS OF FILENAME«, l3=0x30}
0x061b…0655 Line {l1=0x38, l2=» PUSH D ;PUT RETURN ADDRESS BACK ON STACK«, l3=0x38}
0x0655…0658 Line {l1=0x01, l2=» «, l3=0x01}
0x0658…065b Line {l1=0x01, l2=»;«, l3=0x01}
0x065b…068e Line {l1=0x31, l2=»;CHECK THAT THERE IS ROOM ON THE HEAP FOR THE DCB«, l3=0x31}
0x068e…0691 Line {l1=0x01, l2=»;«, l3=0x01}
0x0691…06c2 Line {l1=0x2f, l2=» LHLD NP ;HL->NEXT VACANT IN HEAP«, l3=0x2f}
0x06c2…06f3 Line {l1=0x2f, l2=» XCHG ;DE->NEXT VACANT IN HEAP«, l3=0x2f}
0x06f3…072e Line {l1=0x39, l2=» LXI H,-#256-#48-#40-#10 ;HL:=REQUIRED DISTANCE«, l3=0x39}
0x072e…076b Line {l1=0x3b, l2=» ; BETWEEN STACK AND HEAP«, l3=0x3b}
0x076b…077e Line {l1=0x11, l2=» DAD SP«, l3=0x11}
0x077e…07aa Line {l1=0x2a, l2=» MOV A,L ;CALCULATE DISTANCE«, l3=0x2a}
0x07aa…07bc Line {l1=0x10, l2=» SUB E«, l3=0x10}
0x07bc…07d0 Line {l1=0x12, l2=» MOV A,H«, l3=0x12}
0x07d0…07fb Line {l1=0x29, l2=» SBB D ;IS IT SUFFICIENT?«, l3=0x29}
0x07fb…0818 Line {l1=0x1b, l2=» JNC SUFF ;YES«, l3=0x1b}
0x0818…0854 Line {l1=0x3a, l2=» MVI E,'K' ;(SET UP ERROR CODE FOR UNSIFFICENT«, l3=0x3a}
0x0854…087d Line {l1=0x27, l2=» ; STACK LENGTH)«, l3=0x27}
0x087d…08ba Line {l1=0x3b, l2=» JMP XEQRR ;NO. TERMINATE WITH RUN TIME ERROR K«, l3=0x3b}
0x08ba…08c3 Line {l1=0x07, l2=» «, l3=0x07}
0x08c3…08f1 Line {l1=0x2c, l2=»SUFF: XCHG ;YES. HL->TOP OF HEAP«, l3=0x2c}
0x08f1…0930 Line {l1=0x3d, l2=» SHLD DCBADR ;THIS SHOULD BE THE DATA CONTROL BLOCK«, l3=0x3d}
0x0930…0959 Line {l1=0x27, l2=» LXI D,#256+#48 ;RESERVE ROOM«, l3=0x27}
0x0959…0980 Line {l1=0x25, l2=» DAD D ; ON HEAP«, l3=0x25}
0x0980…09aa Line {l1=0x28, l2=» SHLD NP ; FOR DCB«, l3=0x28}
0x09aa…09b3 Line {l1=0x07, l2=» «, l3=0x07}
0x09b3…09b6 Line {l1=0x01, l2=»;«, l3=0x01}
0x09b6…09f4 Line {l1=0x3c, l2=»;THE FOLLOWING CODE BUILDS AND PUSHES THE PARAMETERS FOR THE«, l3=0x3c}
0x09f4…0a07 Line {l1=0x11, l2=»;PURGE SUBROUTINE«, l3=0x11}
0x0a07…0a0a Line {l1=0x01, l2=»;«, l3=0x01}
0x0a0a…0a2c Line {l1=0x20, l2=» LXI D,1 ;DCB SIZE«, l3=0x20}
0x0a2c…0a3e Line {l1=0x10, l2=» PUSH D«, l3=0x10}
0x0a3e…0a41 Line {l1=0x01, l2=» «, l3=0x01}
0x0a41…0a44 Line {l1=0x01, l2=»;«, l3=0x01}
0x0a44…0a53 Line {l1=0x0d, l2=»;BLANK FILNAM«, l3=0x0d}
0x0a53…0a56 Line {l1=0x01, l2=»;«, l3=0x01}
0x0a56…0a90 Line {l1=0x38, l2=» MVI A,#8 ;A=LENGTH OF FIELD TO BE BLANKED«, l3=0x38}
0x0a90…0ac2 Line {l1=0x30, l2=» LXI H,FILNAM ;HL->FIELD TO BE BLANKED«, l3=0x30}
0x0ac2…0ae6 Line {l1=0x22, l2=» CALL E0LIN ;BLANK IT!«, l3=0x22}
0x0ae6…0ae9 Line {l1=0x01, l2=» «, l3=0x01}
0x0ae9…0aec Line {l1=0x01, l2=»;«, l3=0x01}
0x0aec…0b29 Line {l1=0x3b, l2=»;MOVE CURRENT FILE NAME TO FILNAM. THE CURRENT FILE NAME IS«, l3=0x3b}
0x0b29…0b3f Line {l1=0x14, l2=»;TERMINATED BY A ':'«, l3=0x14}
0x0b3f…0b42 Line {l1=0x01, l2=»;«, l3=0x01}
0x0b42…0b67 Line {l1=0x23, l2=» LXI B,FILNAM ;BC->FILNAM«, l3=0x23}
0x0b67…0b98 Line {l1=0x2f, l2=» LHLD FILPTR ;HL->FILENAME PARAMETER«, l3=0x2f}
0x0b98…0bd4 Line {l1=0x3a, l2=» INX H ;SKIP LENGTH OF FILENAME PARAMETER«, l3=0x3a}
0x0bd4…0c10 Line {l1=0x3a, l2=»NEXFIL:MOV A,M ;A:=A CHARACTER FROM THE FILE NAME«, l3=0x3a}
0x0c10…0c39 Line {l1=0x27, l2=» CPI ':' ;IS IT A COLON?«, l3=0x27}
0x0c39…0c68 Line {l1=0x2d, l2=» JZ GETDSC ;YES, WE ARE FINISHED«, l3=0x2d}
0x0c68…0c99 Line {l1=0x2f, l2=» STAX B ;NO, STORE IT IN FILNAM«, l3=0x2f}
0x0c99…0cbc Line {l1=0x21, l2=» INX H ;POINT TO«, l3=0x21}
0x0cbc…0ce8 Line {l1=0x2a, l2=» INX B ; NEXT CHARACTER«, l3=0x2a}
0x0ce8…0d16 Line {l1=0x2c, l2=» JMP NEXFIL ;AND DO IT ONCE MORE«, l3=0x2c}
0x0d16…0d19 Line {l1=0x01, l2=» «, l3=0x01}
0x0d19…0d1c Line {l1=0x01, l2=»;«, l3=0x01}
0x0d1c…0d2a Line {l1=0x0c, l2=»;GET DISC ID«, l3=0x0c}
0x0d2a…0d2d Line {l1=0x01, l2=»;«, l3=0x01}
0x0d2d…0d69 Line {l1=0x3a, l2=»GETDSC:INX H ;HL->DISC ID IN FILENAME PARAMETER«, l3=0x3a}
0x0d69…0d87 Line {l1=0x1c, l2=» MOV C,M ;GET«, l3=0x1c}
0x0d87…0dab Line {l1=0x22, l2=» INX H ; DISC ID«, l3=0x22}
0x0dab…0dd1 Line {l1=0x24, l2=» MOV B,M ; INTO BC«, l3=0x24}
0x0dd1…0e05 Line {l1=0x32, l2=» INX H ;SKIP THE SUBSEQUENT COLON«, l3=0x32}
0x0e05…0e2c Line {l1=0x25, l2=» PUSH B ;PUSH DISC ID«, l3=0x25}
0x0e2c…0e2f Line {l1=0x01, l2=» «, l3=0x01}
0x0e2f…0e32 Line {l1=0x01, l2=»;«, l3=0x01}
0x0e32…0e42 Line {l1=0x0e, l2=»;GET FILE TYPE«, l3=0x0e}
0x0e42…0e45 Line {l1=0x01, l2=»;«, l3=0x01}
0x0e45…0e6d Line {l1=0x26, l2=» INX H ;HL->FILE TYPE«, l3=0x26}
0x0e6d…0e94 Line {l1=0x25, l2=» MOV B,M ;B:=FILE TYPE«, l3=0x25}
0x0e94…0ec5 Line {l1=0x2f, l2=» PUSH B ;PUSH FILE TYPE IN MSB.«, l3=0x2f}
0x0ec5…0ec8 Line {l1=0x01, l2=» «, l3=0x01}
0x0ec8…0ecb Line {l1=0x01, l2=»;«, l3=0x01}
0x0ecb…0efe Line {l1=0x31, l2=»;SET UP REMAINING PARAMETERS FOR PURGE SUBROUTINE«, l3=0x31}
0x0efe…0f01 Line {l1=0x01, l2=»;«, l3=0x01}
0x0f01…0f1a Line {l1=0x17, l2=» LXI B,FILNAM«, l3=0x17}
0x0f1a…0f4e Line {l1=0x32, l2=» PUSH B ;PUSH ADDRESS OF FILE NAME«, l3=0x32}
0x0f4e…0f65 Line {l1=0x15, l2=» LHLD DCBADR«, l3=0x15}
0x0f65…0f93 Line {l1=0x2c, l2=» PUSH H ;PUSH ADDRESS OF DCB«, l3=0x2c}
0x0f93…0fb6 Line {l1=0x21, l2=» MVI M,0 ;INDICATE«, l3=0x21}
0x0fb6…0fd7 Line {l1=0x1f, l2=» LXI B,DKÅBN ; FILE«, l3=0x1f}
0x0fd7…0ffc Line {l1=0x23, l2=» DAD B ; CLOSED«, l3=0x23}
0x0ffc…1010 Line {l1=0x12, l2=» MVI M,0«, l3=0x12}
0x1010…1013 Line {l1=0x01, l2=» «, l3=0x01}
0x1013…1016 Line {l1=0x01, l2=»;«, l3=0x01}
0x1016…102a Line {l1=0x12, l2=»;DELETE THAT FILE!«, l3=0x12}
0x102a…102d Line {l1=0x01, l2=»;«, l3=0x01}
0x102d…1043 Line {l1=0x14, l2=» CALL PURGE«, l3=0x14}
0x1043…1046 Line {l1=0x01, l2=» «, l3=0x01}
0x1046…1049 Line {l1=0x01, l2=»;«, l3=0x01}
0x1049…1058 Line {l1=0x0d, l2=»;SET IORESULT«, l3=0x0d}
0x1058…105b Line {l1=0x01, l2=»;«, l3=0x01}
0x105b…1072 Line {l1=0x15, l2=» STA IORSLT«, l3=0x15}
0x1072…1075 Line {l1=0x01, l2=» «, l3=0x01}
0x1075…1078 Line {l1=0x01, l2=»;«, l3=0x01}
0x1078…1095 Line {l1=0x1b, l2=»;RELEASE DCB AREA FROM HEAP«, l3=0x1b}
0x1095…1098 Line {l1=0x01, l2=»;«, l3=0x01}
0x1098…10d4 Line {l1=0x3a, l2=» LHLD DCBADR ;HL->TOP OF HEAP BEFORE RESERVATION«, l3=0x3a}
0x10d4…110d Line {l1=0x37, l2=» SHLD NP ;STORE IT AS THE NEW TOP OF HEAP«, l3=0x37}
0x110d…1110 Line {l1=0x01, l2=» «, l3=0x01}
0x1110…111c Line {l1=0x0a, l2=» RET«, l3=0x0a}
0x111c…111f Line {l1=0x01, l2=» «, l3=0x01}
0x111f…112c Line {l1=0x0b, l2=» SKIP«, l3=0x0b}
0x112c…115a Line {l1=0x2c, l2=»;********** LOCAL DATA *********************«, l3=0x2c}
0x115a…115d Line {l1=0x01, l2=» «, l3=0x01}
0x115d…119d Line {l1=0x3e, l2=»DCBADR:DS 2 ;ADDRESS OF DATA CONTROL BLOCK FOR FILE«, l3=0x3e}
0x119d…11c0 Line {l1=0x21, l2=»FILNAM:DS 8 ;FILE NAME«, l3=0x21}
0x11c0…11f7 Line {l1=0x35, l2=»FILPTR:DS 2 ;ADDRESS OF FILENAME PARAMETER«, l3=0x35}
0x11f7…11fa Line {l1=0x01, l2=» «, l3=0x01}
0x11fa…1206 Line {l1=0x0a, l2=» END«, l3=0x0a}
0x1206…1220 00 00 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 ┆ cccccccccccccccccccccccc┆
0x1220…1240 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 ┆cccccccccccccccccccccccccccccccc┆
[…0x1d…]