'
' MODULE KOBASCH - _KOB_old-_A_cc-_SCH_nittstelle
'
' (C) von Manfred Ssykor
'
' Version: 0.3 24.10.1993
'
> PROCEDURE k2_init
'
' Bei Programmstart
'
adr%=MALLOC(512)
DIM msg&(7)
' Eigene ID
ap_id&=APPL_INIT()
'
' Kobold 2 ID
k2_id&=APPL_FIND("KOBOLD_2")
'
' Kobold_2 Nachrichten
k2_job&=12048
k2_job_no_window&=12049
k2_answer&=12050
k2_konfig&=12051
k2_close&=12054
'
RETURN
> PROCEDURE k2_exit
'
' Bei Programmende
'
' Speicher fr JOB freigeben!
~MFREE(adr%)
RETURN
'
> PROCEDURE k2_copy_and_quit(start$,ziel$,dat$,move!,dia!,dialog_level&)
'
' Eine Datei bzw. Ordner Kopieren oder Verschieben
' ^^^^
' move!   = TRUE  = Daten verschieben
' move!   = FALSE = Daten kopieren
' dia! = TRUE  = mit KOBOLD-Dialog
' dia! = FALSE = ohne KOBOLD-Dialog
'
' JOB generieren
job$="DIALOG_LEVEL = "+STR$(dialog_level&)+" DST_SELECT "+ziel$+" SRC_SELECT "+start$+" SRC_SELECT +"+dat$+" "
IF move!=TRUE
job$=job$+"MOVE IGNORE_WP "
ELSE
job$=job$+"COPY "
ENDIF
' JOB in den Reservierten Speicherbereich kopieren!
@k2_adresse(job$)
IF dia!=TRUE
msg&(0)=k2_job&           !MIT KOBOLD-Dialog
ELSE
msg&(0)=k2_job_no_window& !OHNE KOBOLD-Dialog
ENDIF
@k2_exec                  !KOBOLD aktivieren
@k2_close               !KOBOLD schliessen
'
RETURN
> PROCEDURE k2_delete_and_quit(start$,dat$,dia!,dialog_level&)
'
' Eine Datei bzw. Ordner l”schen
' ^^^^
' dia! = wie bei k2_copy
' flag!   = TRUE  = Dialog nach beendung entfernen
' flag!   = FALSE = Dialog nach beendung stehen lassen
'
' JOB generieren
job$="DIALOG_LEVEL = "+STR$(dialog_level&)+" SRC_SELECT "+start$+" SRC_SELECT +"+dat$+" DELETE IGNORE_WP "
' JOB in den Reservierten Speicherbereich kopieren!
@k2_adresse(job$)
@k2_dialog(dia!)
@k2_exec
@k2_close
'
RETURN
> PROCEDURE k2_src_select(start$,dia!)
'
' Quellpfad w„hlen bzw. KOBOLD aktivieren
'
' dia! = wie bei k2_copy
' flag!   = TRUE  = Dialog nach beendung entfernen
' flag!   = FALSE = Dialog nach beendung stehen lassen
LOCAL ofls%
'
' JOB generieren
job$="DIALOG_LEVEL = 0"+@chk_ofls$(start$)+"SRC_SELECT "+start$+" "
' JOB in den Reservierten Speicherbereich kopieren!
@k2_dialog(dia!)
@k2_adresse(job$)
@k2_exec
'
RETURN
> PROCEDURE k2_dst_select(dat$,dia!)
'
' Zielpfad w„hlen
'
' JOB generieren
job$="DST_SELECT +"+dat$+" "
' JOB in den Reservierten Speicherbereich kopieren!
@k2_dialog(dia!)
@k2_adresse(job$)
@k2_exec
'
RETURN
> PROCEDURE k2_select(dat$,dia!)
'
' Datei oder Ordner im Quellpfad selektieren
'
' JOB generieren
job$="SRC_SELECT +"+dat$+" "
' JOB in den Reservierten Speicherbereich kopieren!
@k2_dialog(dia!)
@k2_adresse(job$)
@k2_exec
'
RETURN
> PROCEDURE k2_copy(dia!,move!)
'
' Selectierte von Quellpfad nach Zielpfad kopieren oder verschieben
'
' JOB generieren
IF move!=TRUE
job$=job$+"MOVE IGNORE_WP "
ELSE
job$=job$+"COPY "
ENDIF
' JOB in den Reservierten Speicherbereich kopieren!
' und MSG 2-4 belegen!
@k2_adresse(job$)
@k2_dialog(dia!)
@k2_exec
'
RETURN
> PROCEDURE k2_delete(dia!)
'
' Selectierte im Quellpfad l”schen
'
' JOB generieren
job$="DIALOG_LEVEL = 0 DELETE IGNORE_WP "
' JOB in den Reservierten Speicherbereich kopieren!
' und MSG 2-4 belegen!
@k2_dialog(dia!)
@k2_adresse(job$)
@k2_exec
'
RETURN
> PROCEDURE k2_close
'
' KOBOLD beenden
'
msg&(0)=k2_close&
msg&(1)=ap_id&                     ! Applikations-ID des Accessories
msg&(2)=0
msg&(3)=0
'
' Abschicken
~APPL_WRITE(k2_id&,16,V:msg&(0))
DO
~EVNT_MESAG(V:msg&(0))      ! Auf Antwort warten
LOOP UNTIL msg&(0)=k2_answer&
status&=msg&(3)
k2_err$=@k2_err$(status&)
RETURN
'
' Werden von den oben genannten Routinen aufgerufen. Sind also fr den
' Anwender uninterressant, drfen aber NICHT gel”scht werden.
> PROCEDURE k2_dialog(flag!)    ! Wird ein DIALOG erwnscht?
'
' flag!=TRUE  = Alle aktionen mit Kobold-Dialog
' flag!=FALSE =  "      "     ohne  "     "
'
IF flag!=TRUE
msg&(0)=k2_job&
ELSE
msg&(0)=k2_job_no_window&
ENDIF
RETURN
> PROCEDURE k2_adresse(job$)    ! Job in Reservierten Bereich kopieren
CHAR{adr%}=job$
msg&(2)=0                     ! Muss 0 sein!
msg&(3)=WORD(SWAP(adr%))      ! Adresse der Commandline
msg&(4)=WORD(adr%)            ! ...im Motoroller-Format
msg&(5)=0                     ! Muss 0 sein!
RETURN
> PROCEDURE k2_exec             ! Nachricht an KOBOLD abschicken
msg&(1)=ap_id&                ! Eigene ID (ist immer in MSG(1))
' Abschicken
~APPL_WRITE(k2_id&,16,V:msg&(0))! Nachricht an's Hauptprogramm senden
DO
~EVNT_MESAG(V:msg&(0))              ! Auf Antwort warten
LOOP UNTIL msg&(0)=k2_answer&     ! Bis Antwort=k2_answer&
'
' RETURN-CODE von Kobold
status&=msg&(3)       ! 0, wenn OK | <>0 wenn Fehler aufgetreten (der Wert ist die Fehlernummer)
' ALERT 1,STR$(status&),1,"OK",b|
zeile&=msg&(4)        ! Wenn status& <>0 (also bei einem Fehler) steht hier die Zeile der fehlerhaften Stelle in der *.KBJ Datei.
'                       Nur bei JOB-Dateien. Nicht aber bei Speicherjob's (Da ist es ja eh nur eine Zeile)
k2_err$=@k2_err$(status&)
'
RETURN
> FUNCTION k2_err$(status&)     ! Gibt Fehlermeldung status& als Text zurck
SELECT status&
CASE -1
RETURN "FINISHED"
CASE 0
RETURN "OK"
CASE 0
RETURN "ERROR"
CASE 0
RETURN "NO_MEMORY"
CASE 0
RETURN "USER_BREAK"
CASE 0
RETURN "INVALID_POINTER"
CASE 0
RETURN "LOW_BUFFER"
CASE 0
RETURN "WRONG_DRIVE"
CASE 0
RETURN "WRONG_PARAMETER"
CASE 0
RETURN "UNEXPECTED_COMMAND"
CASE 0
RETURN "INVALID_MEMSIZE"
CASE 0
RETURN "NO_SUCH_OBJECT"
CASE 0
RETURN "NO_DRIVE_SELECTED"
CASE 0
RETURN "NO_FOLDER_CREATION"
CASE 0
RETURN "WRITE_PROTECTION"
CASE 0
RETURN "LOW_SPACE"
CASE 0
RETURN "LOW_ROOT"
CASE 0
RETURN "INVALID_PATH"
CASE 0
RETURN "BUFFER_IN_USE"
CASE 0
RETURN "BAD_BPB"
CASE 0
RETURN "BAD_READ"
CASE 0
RETURN "BAD_WRITE"
CASE 0
RETURN "UNKNOWN_COMMAND"
CASE 0
RETURN "NO_WINDOW"
CASE 0
RETURN "TOO_MANY_GOSUBS"
CASE 0
RETURN "TOO_MANY_RETURNS"
CASE 0
RETURN "LABEL_NOT_FOUND"
CASE 0
RETURN "NO_SUCH_FOLDER"
CASE 0
RETURN "REORGENIZED_MEMORY"
CASE 0
RETURN "SELECTION_MODE"
DEFAULT
RETURN "UNKNOWN_ERROR"
ENDSELECT
ENDFUNC
'
> PROCEDURE k2_init_texte       ! Liest die Jobbefehle in ein ARRAY
ERASE k2_job$()
DIM k2_job$(54)
FOR i%=0 TO 54
READ a$
k2_job$(i%)=a$
NEXT i%
'
' Job Kommandos von 0 bis 54
'
DATA SRC_SELECT,DST_SELECT,DIALOG_LEVEL,KEEP_FLAGS,IGNORE_WP,ALERT,PAUSE
DATA NEW_FOLDER,CHOOSE,RESET_STATUS,READ_INTO_BUFFER,WRITE_BUFFER,COPY
DATA MOVE,DELETE,QUIT,GOTO,GOSUB,RETURN,PERMANENT,MEMORY,VERIFY,DATE
DATA ARCHIVE_TREATMENT,GEMDOS_MODE,FORMAT_PARAMETER,FORMAT,SOFT_FORMAT,OFF,ON
DATA EVER_OFF,EVER_ON,CONSIDER_PATHS,ON_LEVEL,EXTENSIONS,ARCHIVE,FILE,KEEP_SEQUENCE
DATA RESET_ARCHIVES,OPEN_FOLDERS,CURRENT,KEEP,SET,CLEAR,CLEARED,SI,SE,DI,DE,ST,TT
DATA CLEAR_BUFFER,SOURCE_TREATMENT,DIALOG_WINDOWS,RENAME
RETURN
> PROCEDURE k2_konfig           ! noch nicht implementiert
LOCAL a%,a$
'
' KOBOLD beenden
'
msg&(0)=k2_konfig&
msg&(1)=ap_id&                ! Applikations-ID des eigenen Programms
msg&(2)=0
msg&(3)=WORD(SWAP(adr%))      ! Adresse der Commandline
msg&(4)=WORD(adr%)            ! ...im Motoroller-Format
msg&(5)=0
'
' Abschicken
~APPL_WRITE(k2_id&,16,V:msg&(0))
DO
~EVNT_MESAG(V:msg&(0))      ! Auf Antwort warten
LOOP UNTIL msg&(0)=k2_answer&
@k2_close
'
min_buffer&=WORD{adr%}            ! Eingestellte Speichergrenzen (in KB)
max_buffer&=WORD{adr%+2}
min_admin&=WORD{adr%+4}
max_admin&=WORD{adr%+6}
admin_percent&=WORD{adr%+8}       ! Prozentanteil des Verwaltungsspeichers
buffer_in_fast_ram&=WORD{adr%+10}  ! Lage der Speicherbereiche
admin_in_fast_ram&=WORD{adr%+12}  ! 0 = ST-Ram, 1 = Fast-Ram
admin&=WORD{adr%+14}              ! Freier Verwaltungsspeicher zum Zeitpunkt der Abfrage
buffer&=WORD{adr%+16}             ! Freier Dateipuffer zum Zeitpunkt der Abfrage
k2_sleeping&=WORD{adr%+18}        ! 0 = KOBOLD aktiv, 1 = KOBOLD inaktiv
k2_dialog&=WORD{adr%+20}          ! 0 = keine Hauptdialoganzeige, 1 = Hauptformular offen
no_of_files&=WORD{adr%+22}        ! Anzahl der im Quellaufwerk selektierten Dateien
no_of_folders&=WORD{adr%+24}      ! Anzahl der im Quellaufwerk selektierten Ordner
total_kb&=WORD{adr%+26}           ! Auswahlumfang in Kilobytes
source_drive&=WORD{adr%+28}       ! Quellaufwerk, -1 = Keins
dest_drive&=WORD{adr%+30}         ! Ziellaufwerk, -1 = Keins
'
a$="    "
BMOVE adr%+33,V:a$,4
a%={V:a$}
a$=BIN$(a%,32)
FOR i%=2 TO 27
IF MID$(a$,i%,1)="0"
MID$(a$,i%,1)=CHR$(i%+95)
ELSE
MID$(a$,i%,1)=CHR$(i%+63)
ENDIF
NEXT i%
gemdos_mode$=MID$(a$,2,26)
'
' PRINT "MIN-BUFFER: "+STR$(min_buffer&)
' PRINT "MAX-BUFFER: "+STR$(max_buffer&)
' PRINT "MIN-ADMIN: "+STR$(min_admin&)
' PRINT "MAX-ADMIN: "+STR$(max_admin&)
' PRINT "ADMIN- % : "+STR$(admin_percent&)
' PRINT "BUFFER in FAST RAM: "+STR$(buffer_in_fast_ram&)
' PRINT "ADMIN in FAST RAM: "+STR$(admin_in_fast_ram&)
' PRINT "ADMIN: "+STR$(admin&)
' PRINT "BUFFER: "+STR$(buffer&)
' PRINT "K2 SLEEPING: "+STR$(k2_sleeping&)
' PRINT "K2 DIALOG: "+STR$(k2_dialog&)
' PRINT "NO OF FILES: "+STR$(no_of_files&)
' PRINT "NO OF FOLDERS: "+STR$(no_of_folders&)
' PRINT "TOTAL_KB: "+STR$(total_kb&)
' PRINT "SOURCE-DRIVE: "+STR$(source_drive&)
' PRINT "DEST-DRIVE: "+STR$(dest_drive&)
' PRINT "GEMDOS-MODE: "+gemdos_mode$
'
RETURN
' ------------------------- END MODULE KOBASCH --------------------------------
