PofoWiki

Die ultimative Informationsquelle zum ATARI Portfolio

Benutzer-Werkzeuge

Webseiten-Werkzeuge


software:diy:assembler:cdrvnet

Verzeichnisnummern zählen für Cardrive im Netzwerk

Dieses Unterprogramm setzt den Inhalt der Seiten Das Carddrive im Netzwerk und 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
software/diy/assembler/cdrvnet.txt · Zuletzt geändert: 07/06/2007 00:06 (Externe Bearbeitung)