Newsgroup: it.comp.lang.visual-basic
Titolo: Problema con QuickBasic 7.1 e assembly

Non sono un esperto, quindi scusate se commetto degli errori…
Ho un problema urgente. Sto facendo un programmino in QuickBasic 7.1. Devo
usare alcune delle funzioni utilizzabili con InterruptX. Per la precisione,
mi serve sapere gli attributi di un file, mi serve poter creare una
directory; insomma, sto avendo problemi con tutte quelle funzioni che
richiedono che DS:DX siano "puntati" sugli indirizzi relativi a nomi di
file, directory, ecc.
La tavola degli Interrupt l'ho presa da Internet. Per vedere gli attributi
di un file, l'Interrupt č &H21, e AH deve essere uguale a 43h (AL = 00h per
leggere e 01h per modificare). Per creare una directory, AH deve essere
uguale a 39h, e cosě via…
Dal QuickBasic 7.1, come č possibile ricavarsi i valori di DS:DX?
Io ho fatto cosě. Ho dimensionato due variabili (InX e OutX) come RegTypeX
(come consiglia la guida in linea del QB), un type contenente ax, bx,… Inx č
per i valori in entrata, e OutX per quelli in uscita.
Quindi ho scritto:
A$ = "C:\DOS\CDMO.DOC" (il file di cui voglio conoscere gli attributi)
AZ$ = A$ + CHR$(0)  (ho visto non so dove che bisogna aggiungere Chr$(0), č
corretto?)
InX.ax = &H4300
InX.ds = -1 (predefinito)
InX.dx = SADD(AZ$)
CALL InterruptX(&H21, InX, OutX)
Quando vado a chiedere OutX.ax e OutX.cx, il primo č uguale a 2, e il
secondo a 0. Che il primo sia un messsaggio di errore che non conosco?
Ho anche provato a scrivere:
(...)
InX.ds = VARSEG(AZ$)
InX.dx = VARPTR(Z$)
(...)
Quando conviene usare VARPTR e quando SADD? Che differenza c'č? Il valore di
SADD č sempre inferiore rispetto a quello di VARPTR.
Insomma, con QB 7 e InterruptX sono riuscito a gestire gli eventi relativi
al mouse, e a fare tante altre cose che prima non mi sarei neanche sognato.
Ma quando si tratta di passare all'assemby valori relativi a nomi di
file/directory č complicatissimo.
Se potete, cercate di darmi un consiglio, sicuramente conoscerete meglio di
me il QuickBasic e il modo per "interfacciarlo" con assembly.
Vi chiedo un'ultima cosa: conoscete un buon manuale di QuickBasic in cui sia
spiegato BENE e chiaramente come utilizzare InterruptX, Call Absolute (non
so come si possono passare valori di variabili con Call Absolute), nonchč
gli eventi relativi al modem? So che usando i comandi PEEK, POKE, INP e ON
COM č possibile gestire (piů o meno) comodamente diverse funzioni del modem.
So anche che per inviare dati al modem bisogna conoscere un elenco di codici
di CHR$(), che non sono riuscito a trovare da nessuna parte.
Vi ringrazio.
Mario Rossi
priv...@yahoo.com

 directory; insomma, sto avendo problemi con tutte quelle funzioni
...cut...
wow, io sono rimasto alla versione 4.5 di quickbasic.
Mi interesserebbe.

 spiegato BENE e chiaramente come utilizzare InterruptX, Call Absolute
Io ho i manuali originali del Microsoft Basic 7.0 e lì è spiegato tutto su
carta e benissimo. Ah, i bei tempi quando i manuali potevi leggerli anche al
cesso...
Ciao
*Roby*
P.S.
Beato te che puoi continuare a lavorare col DOS. Finchè puoi, resisti.

 di CHR$(), che non sono riuscito a trovare da nessuna parte.
Per quanto riguarda il manuale, sinceramente non me ne ricordo
uno e non ne ho sottomano. Posso dare un'occhiata in soffitta.
Riguardo il modem, ti faccio degli esempi che usano OPEN per
accedere alla seriale.
I comandi primari primari:
CR$ = CHR$(13): LF$ = CHR$(10): BS$ = CHR$(8): Escape$ = CHR$(27)
Up$ = CHR$(0) + CHR$(72): Down$ = CHR$(0) + CHR$(80)
Lft$ = CHR$(0) + CHR$(75): Rght$ = CHR$(0) + CHR$(77)
PgUp$ = CHR$(0) + CHR$(73): PgDown$ = CHR$(0) + CHR$(81)
XOn$ = CHR$(17): XOff$ = CHR$(19): Ack$ = CHR$(6): Nak$ = CHR$(21)
Soh$ = CHR$(1): Stx$ = CHR$(2): Eot$ = CHR$(4): Can$ = CHR$(24)
Esempi:
Baud& = 2400  'BaudRate
ComBase = &H03F8
Param$ = STR$(Baud&) + ",N,8,1,RS,OP,CD0,DS0"
'Apertura di Com1 con parametri
OPEN "R", 1, "COM1:" + Param$
'Ricezione tipo Xmodem
PRINT #1, XOff$; XOn$;
'Crc Mode
PRINT #1, "C";
'Identifica il carrier
DEF SEG = &H40
IF (INP(ComBase + 6) AND 128) = 0 THEN
    NoCarrier = TRUE
ELSE
    NoCarrier = FALSE
END IF
DEF SEG
'Annulla un invio
PRINT #1, STRING$(5, Can$); STRING$(5, BS$);
EXIT SUB
'Termina la trasmissione
CLOSE Channel: PRINT #1, Ack$;

Grazie mille, sei stato utilissimo.
Ti dico come è andata. A cambiare DS da -1 a sseg ci sono arrivato da solo,
per un colpo di fortuna...
ci ero riuscito la prima volta e non me ne ero neacnhe accorto.
grazie

grazie mille


Il problema è che non conoscendo l'assembler, non so che diavolo è FCB...
::))))))))
Voi direte: questo non sa niente e si mette a fare i programmi in Basic? In
realtà studio legge, ma la miaprima passione era l'informatica. in questi 5
anni di codici e sentenze, sono rimasto un po' indietro, ma cerco di tenermi
in forma.

 in forma.
FCB - File Control Block
E' una struttura che viene passata alle funzioni Int 21, in particolare
quelle da 0Fh a 17h, per le operazioni su file (apertura, creazione
cancellazione ecc.). La struttura di base è quella che segue. Varia
nella definizione dei membri "reserved" a seconda della versione
DOS. Se vuoi un elenco completo degli Interrupt con la definizione
delle loro funzioni, te lo posso inviare.
Offset     Size           Description
----------------------------------------------------
 -7         BYTE        extended FCB if FFh
 -6         5 BYTEs    reserved
 -1         BYTE        file attribute if extended FCB
 00h       BYTE        drive number (0 = default, 1 = A, etc)
 01h       8 BYTEs    blank-padded file name
 09h       3 BYTEs    blank-padded file extension
 0Ch      WORD      current block number
 0Eh      WORD       logical record size
 10h      DWORD    file size
 14h      WORD       date of last write (see AX=5700h)
 16h      WORD       time of last write (see AX=5700h)
 18h      8 BYTEs     reserved
 20h      BYTE         record within current block
 21h      DWORD    random access record number
                               (if record size is > 64 bytes, high byte is omitted)

nessuno di voi vecchi elefanti (come me) ha ancora il VB 1.00 per Windoows
che aveva la possibilita' di convertire i progetti da DOS a WIN??
grazie

Io ho tutti i VB, ma se mi ricordo si poteva solo fare il contrario, ovvero
convertire un progetto VB per Windows in DOS (comunque l'attrezzo era in
VBDOS, visto che uscì dopo quello Windows).
----------------------------------------------------------------------
Stefano Minardi
Zetesis: 
zet...@mclink.it
----------------------------------------------------------------------
White Smith <pa...@NOSPAMgeocities.com> wrote in message
RrrI4.112066$pn3.1...@news.infostrada.it...
