====== Verzeichnisnummern zählen für Cardrive im Netzwerk ======
Dieses Unterprogramm setzt den Inhalt der Seiten [[hilfe:tipps:exchanges:CDrvNet|Das Carddrive im Netzwerk]] und [[software:diy:batch:cdrvnet|Programmierung --> Batch]] voraus.
Mit einem ähnlichen Prinzip der "Nummerierung" werden Linienflüge weltweit verwaltet, da der Wertevorrat auf Grund der Zahlenbasis 36 erheblich größer ist.
Im Jahre 1995 war das VNRPLUS1-Modul der Zähler eines TSR-Programmes zur fortlaufenden Speicherung von Bildschirminhalten (s. ZielDatei) und ist deshalb in keiner Hochsprache geschrieben worden. In der vorliegenden Form wird die Ausgabe in die Datei LETZTVNR.TXT als eine Möglichkeit der Datenübergabe an andere Programme verwendet.
Heutzutage könnte mit MySQL der Kern dieser Zählfunktion beispielsweise wie folgt realisiert werden:
SELECT CONV(`VNR`,36,10)+1;
==== VNRplus1.exe ====
.model small
.code
.stack 100h
datum equ ´28.05.95´
;Byte-suchen
;df = 0; es:di = Vergleichsstring; al = Vergl.Wert; cx anzahl
;ze gefunden, di = gefundene Pos. + 1
;nz nicht gefunden, cx = 0, di = ende + 1
; Makrodefinitionen
; Makro für den DOS-Aufruf
DOS MACRO FunNr
mov AH,FunNr
int 21h
ENDM
; ---------------------------------------------------------
; Konstanten für DOS-Funktionen
oeffnen equ 3Dh
erstellen equ 5Bh
schliessen equ 3Eh
lesen equ 3Fh
schreiben equ 40h
beenden equ 4Ch
ausgeben equ 09h
; Ende des Vereinbarungsteils
; ---------------------------------------------------------
org 100h
vnrbearb proc
mov ax,cs
mov ds,ax
MOV DX,OFFSET QuellDATEI ; Adresse des Quelldateinamens
MOV AL,2 ; R/W-Zugriff
DOS OEFFNEN
JNC LAB_10
mov dx,offset ErrorOeffn
jmp ProgEnde
LAB_10:
MOV cs:Haendler1,AX ; Handle speichern
MOV CX,3 ; 3 Byte aus Quelldatei lesen
MOV BX,cs:Haendler1
MOV DX,OFFSET vnr ; Adresse des Lesepuffers
DOS LESEN
JNC LAB_11
mov dx,offset ErrorLes
jmp ProgEnde
LAB_11:
call vnrplus1
;schreibzeiger verschieben
MOV BX,cs:Haendler1
MOV DX,0
MOV CX,0 ; auf Dateianfang
mov ax,4200h
int 21h ;DOS Zeiger verschieben
JNC LAB_13
mov dx,offset ErrorSchr
jmp ProgEnde
lab_13:
;geänderte VNR abspeichern
MOV CX,3 ; 3 Byte schreiben
MOV BX,cs:Haendler1
MOV DX,OFFSET vnr ; Adresse des Schreibpuffers
DOS schreiben
JNC LAB_12
mov dx,offset ErrorSchr
jmp ProgEnde
LAB_12: dos schliessen
mov dx,offset TextOK
jnc ProgEnde ;kein Fehler
mov dx,offset ErrorSchlie
ProgEnde:
mov si,dx
; call textausgabe
dos beenden
; ret
vnrbearb endp
; Datenbereich Dateiarbeit
Version db ´Version vom ´,Datum,10,13,´$´
ErrorZÜ db ´Abbruch durch Zeitüberschreitung!´,10,13,´$´
TextOK DB ´ Vorgang gespeichert! ´,10,13,´$´
ErrorErst DB ´FEHLER beim ERSTELLEN der Datei! ´,10,13,´$´
ErrorLes DB ´FEHLER beim LESEN der Datei! ´,10,13,´$´
ErrorOeffn DB ´FEHLER beim ÖFFNEN der Datei! ´,10,13,´$´
ErrorSchr DB ´FEHLER beim SCHREIBEN der Datei! ´,10,13,´$´
ErrorSchlie DB ´FEHLER beim SCHLIESSEN der Datei!´,10,13,´$´
QuellDatei DB ´LETZTVNR.TXT´,0
;ZielDatei DB ´VORGANG1.XXX´,0
Haendler1 DW ?
Haendler2 DW ?
BytePuffer DB ?
vnrplus1 proc
mov dx,cs
mov ds,dx
mov es,dx
mov al,cs:vnrr ;rechtes Zeichen
call bytesuch
mov al,[di]
mov cs:vnrr,al
cmp cl,1 ;Übertrag?
jz weiterm ;ja
ret
weiterm: mov al,cs:vnrm ;mittleres Zeichen
call bytesuch
mov al,[di]
mov cs:vnrm,al
cmp cl,1 ;Übertrag?
jz weiterl ;ja
ret
weiterl: mov al,cs:vnrl ;linkes Zeichen
call bytesuch
mov al,[di]
mov cs:vnrl,al
ret
vnrplus1 endp
bytesuch proc
lea di,konvtab ;Vergleichsziel
mov cx,37 ;Anzahl
cld
repnz scasb
jnz fehler1 ;nicht gefunden
fehler1:
ret
bytesuch endp
vnr: ;3 Byte für VNR
vnrl db ´z´
vnrm db ´z´
vnrr db ´z´
konvtab db ´0123456789abcdefghijklmnopqrstuvwxyz0X´
end