home *** CD-ROM | disk | FTP | other *** search
- ; ----------------------------
- ; PRINT.DEM - Demoprogramm für die Routinen aus PRINT.LIB
- ; (für den A86)
- ;
- ; (c) Bernd Schemmer 1990 - 1992
- ; Letzter Update: 15.02.1992
- ;
- ; Übersetzen:
- ; A86 MACROS.MAC PRINT.DEM PRINT.LIB DEMOS.INC TO PRINT.COM
- ;
- ; ---------------------------
-
- jmp start ; Daten überspringen
-
- logo db CR,LF
- db 'PRINT.DEM - Demoprogramm für die Routinen aus PRINT.LIB'
- db CR,LF
- db '--------------------------------------------------------'
- db CR,LF
- db CR,LF
- db 'Hinweis: Zu Testzwecken sollte entweder der Drucker OFFLINE geschaltet'
- db CR,LF
- db ' sein, oder als Ausgabe-Einheit für PRINT das NUL-Device angegeben'
- db CR,LF
- db ' werden! '
- db CR,LF
- GETLENGTH logo
-
- db 64xD ; max. Länge des Namens (für die Funktion 0Ah
- ; des Interrupt 21h)
- DefString FileName, 64xD ; Puffer für einen Dateinamen
-
- ; Array für die Funktion GetPRINTQueueEntrys
- MaxEntrys EQU 8xD ; (max. 8 Einträge)
- ArrayOfNames db MaxEntrys dup (65 dup 0)
-
- ; ------------------
- start:
- call ShowLogo ; Logo ausgeben und Speicherblock verkleinern
- ; DOS-Version überprüfen
- TestDOSVersion 3,00
-
- ; Überprüfen, ob PRINT geladen ist
- call PrintLoaded?
- jnc >l1
- ; Fehler: PRINT nicht geladen
- mov al,0
- call ShowPrintError
- jmp Ende
-
- l1:
- call Menue ; Menue ausgeben
- or al,al
- jz Ende
- call Auswahl ; Menuepunkt bearbeiten
- jmp start
-
- Ende:
- EndProcess 0
-
- ; ----------------------------
- ; Menue
- ;
- ; Funktion: Ausgabe des Menues
- ;
- ; Ausgabe: AL = gewählter Menuepunkt
- ; (AL = 0 ->> Programm-Ende)
- ;
- MenueMSG db CR,LF
- db 'Zur Verfügung stehende Funktionen:'
- db CR,LF
- db CR,LF
- db '1 - Ausgabe des Status von PRINT'
- db CR,LF
- db '2 - Einfügen einer Datei in die Warteschlange'
- db CR,LF
- db '3 - Löschen einer Datei aus der Warteschlange'
- db CR,LF
- db '4 - Löschen aller Dateien aus der Warteschlange'
- db CR,LF
- db CR,LF
- db '0 - Programm-Ende'
- db CR,LF
- db CR,LF
- db 'Ihre Wahl: '
- GETLENGTH MenueMSG
-
- Menue:
- WRITE_STRING MenueMSG
- Menue0:
- mov ah,08h
- int 021h
- cmp al,ESC ; ESC gedrückt ?
- if e mov al,'0'
- sub al,'0'
- cmp al,4
- ja Menue0
- push ax ; Eingabe sichern!
- call ShowCR_LF
- pop ax
- ret
-
- ; ----------------------------
- ; Auswahl
- ;
- ; Funktion: Ausführen der gewünschten Funktion
- ;
- ; Eingabe: AL = Nummer der Funktion
- ;
- Auswahl:
- cmp al,1
- jne >l1
- jmp _ShowPrintStatus
- l1:
- cmp al,2
- jne >l1
- jmp _PrintFile
- l1:
- cmp al,3
- jne >l1
- jmp _DeleteFile
- l1:
- cmp al,4
- jne >l1
- jmp _DeleteFiles
- l1:
- ret
-
- ; ----------------------------
- ; _ShowPrintStatus
- ;
- ; Funktion: Ausgabe des Status von PRINT
- ;
- MakeMsg ShowPrintStatusMSG0, CR,LF, 'Ermitteln des Status von PRINT'
-
- ShowPrintStatusMSG1 db CR,LF
- db 'Anzahl Einträge in der Queue von PRINT: '
- QUeueEntrys db '?????'
- db CR,LF
- db '(Dieses Demo kann max. 8 Dateien in der Queue von PRINT anzeigen)'
- db CR,LF
- db 'Namen der Einträge in der Queue: '
- db CR,LF
- GETLENGTH ShowPrintStatusMSG1
-
- _ShowPrintStatus:
- WRITE_STRING ShowPrintStatusMSG0
-
- ; Einträge ermitteln
- mov di,offset ArrayOfNames
- mov cx,MaxEntrys
- call GetPrintQueueEntrys
- jnc >l1
- ; Fehler!
- call ShowPrintError
- ret
- l1:
- ; Anzahl der Einträge in die Meldung
- ; eintragen
- mov di,offset QueueEntrys
- mov ax,cx
- call Konvert_AX_To_Dezstring
-
- push cx ; Anahl der Einträge sichern
- WRITE_STRING ShowPrintStatusMSG1
- pop cx
- ; Namen der Einträge ausgeben
- cmp cx,MaxEntrys
- if a mov cx,MaxEntrys
- ; CX = Anzahl der belegten Einträge im Array
- or cx,cx
- jz >l1 ; keine Einträge in der Queue vorhanden!
-
- mov si,offset ArrayOfNames
- l0:
- push si
- push cx
- lodsb
- mov dx,si ; DX -> Name
- mov cl,al
- xor ch,ch ; CX = Länge des Namens
- mov bx,01h
- mov ah,040h
- int 021h ; Namen ausgeben
- call ShowCR_LF
- pop cx
- pop si
- add si,65xD ; SI -> nächstes Array-Element
- loop l0
- l1:
- ret
-
- ; ----------------------------
- ; _PrintFile
- ;
- ; Funktion: Einfügen einer neuen Datei in die Queue von PRINT
- ;
- MakeMsg _PrintFileMSG0, CR,LF, 'Einfügen einer neuen Datei in die Queue von PRINT',CR,LF
- MakeMsg _PrintFileMSG, CR,LF, 'Datei in die Queue von PRINT eingefügt.',CR,LF
-
- _PrintFile:
- WRITE_STRING _PrintFileMsg0
-
- call LeseDateiname ; Namen der Datei ermitteln
-
- ; Datei einfügen
- mov si,offset FileName
- call PrintFile
- jnc >l1
- ; Fehler!
- call ShowPrintError
- jmp >l2
-
- l1:
- WRITE_STRING _PrintFileMSG
- l2:
- ret
-
- ; ----------------------------
- ; _DeleteFile
- ;
- ; Funktion: Löschen einer Datei aus der Queue von PRINT
- ;
- MakeMsg _DeleteFileMSG0, CR,LF, 'Löschen einer Datei aus der Queue von PRINT',CR,LF
- MakeMsg _DeleteFileMSG, CR,LF, 'Datei aus der Queue von PRINT gelöscht.',CR,LF
-
- _DeleteFile:
- WRITE_STRING _DeleteFileMsg0
- ; Dateinamen lesen
- call LeseDateiname
- ; Datei aus der Queue löschen
- mov si,offset FileName
- call DeletePrintQueueEntry
- jnc >l1
- ; Fehler!
- call ShowPrintError
- jmp >l2
- l1:
- WRITE_STRING _DeleteFileMSG
- l2:
- ret
-
- ; ----------------------------
- ; _DeleteFiles
- ;
- ; Funktion: Löschen aller Dateien aus der Queue von PRINT
- ;
- MakeMsg _DeleteFilesMSG0, CR,LF, 'Löschen aller Dateien aus der Queue von PRINT',CR,LF
- MakeMsg _DeleteFilesMSG, CR,LF, 'Dateien aus der Queue von PRINT gelöscht.',CR,LF
-
- _DeleteFiles:
- WRITE_STRING _DeleteFilesMsg0
-
- ; Queue löschen
- call DeletePrintQueueEntrys
- jnc >l1
- ; Fehler!
- call ShowPrintError
- jmp >l2
- l1:
- WRITE_STRING _DeleteFilesMSG
- l2:
- ret
-
- ; ----------------------------
- ; LeseDateiname
- ;
- ; Funktion: Lesen eines Dateinames
- ;
- MakeMsg DateinamenMSG, CR,LF, 'Bitte den Dateinamen eingeben (incl. vollständigen Pfad!): '
-
- LeseDateiname:
- WRITE_STRING DateinamenMSG
-
- mov dx,offset FileName-1
- mov ah,0Ah
- int 021h
-
- call ShowCR_LF
- ret
-
- ; ----------------------------
- ; ShowPrintError
- ;
- ; Funktion: Ausgabe einer Fehlermeldung
- ;
- ; Eingabe: AL = Fehlernummer von PRINT
- ;
- DefString PRINTErrorMSG0, 0, CR,LF, 'Fehler: PRINT nicht geladen!'
- DefString PRINTErrorMSG1, 0, CR,LF, 'Fehler: Falsche Funktionsnummer!'
- DefString PRINTErrorMSG2, 0, CR,LF, 'Fehler: Datei nicht gefunden!'
- DefString PRINTErrorMSG3, 0, CR,LF, 'Fehler: Pfad nicht gefunden!'
- DefString PRINTErrorMSG4, 0, CR,LF, 'Fehler: Kein freies Handle mehr vorhanden!'
- DefString PRINTErrorMSG5, 0, CR,LF, 'Fehler: Zugriff verweigert!'
- DefString PRINTErrorMSG8, 0, CR,LF, 'Fehler: Warteschlange voll!'
- DefString PRINTErrorMSG9, 0, CR,LF, 'Fehler: PRINT beschäftigt!'
- DefString PRINTErrorMSGC, 0, CR,LF, 'Fehler: Dateiname ist zu lang!'
- DefString PRINTErrorMSGF, 0, CR,LF, 'Fehler: Falsches Laufwerk angegeben!'
- DefString PRINTUnknownError, 0, CR,LF, 'Fehler: Unbekannter Fehler!'
-
- ShowPrintError:
- push dx,cx,si
-
- mov dx,offset PRINTErrorMSG0
- cmp al,0
- je >l1
- mov dx,offset PRINTErrorMSG1
- cmp al,1
- je >l1
- mov dx,offset PRINTErrorMSG2
- cmp al,2
- je >l1
- mov dx,offset PRINTErrorMSG3
- cmp al,3
- je >l1
- mov dx,offset PRINTErrorMSG4
- cmp al,4
- je >l1
- mov dx,offset PRINTErrorMSG5
- cmp al,5
- je >l1
- mov dx,offset PRINTErrorMSG8
- cmp al,8
- je >l1
- mov dx,offset PRINTErrorMSG9
- cmp al,9
- je >l1
- mov dx,offset PRINTErrorMSGC
- cmp al,0Ch
- je >l1
- mov dx,offset PRINTErrorMSGF
- cmp al,0Fh
- je >l1
- mov dx,offset PRINTUnknownError
- l1:
- mov si,dx
- mov cl,[si]
- xor ch,ch
- inc dx
- call OutputMsg
-
- pop si,cx,dx
- ret
-
-