PDA

View Full Version : Hexa -> alpha



Seiten : [1] 2

lossin
29-01-10, 13:26
Hallo @all,

ich muß ein uraltes Programm mit Daten versorgen. Das Programm stammt noch aus der Zeit, als Speicherplatz teuer war und an allen Ecken gespart wurde. In der Input-Datei besteht das Datum daher aus drei einstelligen Alphafeldern. Im ersten Alpha-Feld steht der Kalendertag hexadezimal verschlüsselt. Im zweiten der Monat hexadezimal verschlüsselt und das zweistellige Jahr entsprechend hexadezimal im dritten Feld. Wenn man DSPPFM und F10 macht kann man das Datum auf der Hexa-Seite also lesen (29 01 10).
Damit das alte Programm weiterlaufen kann, muß ich nun den umgekehrten Weg gehen und die Datumswerte als hexa-Werte in die Alphafelder pressen. Mit welchem RPG-Befehl bekomme ich z.B. den Kalendermonat 01 hexadezimal in ein einstelliges Alpha-Feld ?

Vielen Dank !

Fuerchau
29-01-10, 13:32
Definiere die Felder einfach als 2B 0 !
Dann kannst du die einfach als Zahl (0-99) ansprechen, ich denke das reicht doch:

ILE:
D TTFELD 2B 0

RPG:
I B 0 00TTFELD

lossin
29-01-10, 13:56
Danke, habe da Feld eingebaut und befüllt.
Aber was bringt mir das ?
Wofür steht die Datenart 'B' und wie bekomme ich jetzt dieses Feld in ein einstelliges Alpha-Feld ?

B.Hauser
29-01-10, 14:04
Die Felder als Integer zu definieren ist besser, da Integer intern nicht in gepackt konvertiert wird!



D DSDATUM DS
D Datum
D Jahr 3U 0 Overlay(Datum)
D Monat 3U 0 Overlay(Datum: *Next)
D Tag 3U 0 Overlay(Datum: *Next)
/Free
Jahr = 10;
Monat = 1;
Tag = 29;
//--> Datum ist 3A und enthält x'0A011D'
/End-Free


Birgitta

lossin
29-01-10, 14:56
Danke für die Alternative.

Aber das ist leider nicht das, was ich brauche.
Bei mir müßte in Datum dann x'10129' stehen, also das Datum in Klarschrift.

Pikachu
29-01-10, 15:01
Vielleicht so?

D DS DS
D ZAHLHEX 2A
D ZAHL 3P 0 OVERLAY(ZAHLHEX)
D HEX 1A
D************************************************* ****
C MOVE *ZERO ZAHL
C ADD 29 ZAHL
C MULT 10 ZAHL
C 1 SUBST ZAHLHEX HEX
C MOVE *ON *INLR

Fuerchau
29-01-10, 15:21
Na dann gehts (analog Pikachu) auch mit genau einer Definition:

D MYDATE 7P 0 INZ
D HEXDATE 3 overlay(MYDATE)

MYDATE = Neuesdatum * 10;
ZielDatum = HEXDATE;

bzw.

HEXDATE = QuellDatum;
MYDATE /= 10;

lossin
29-01-10, 15:57
Hurra es hat geklappt !
Jetzt muß ich nur noch verstehen, was ihr mir da erzählt habt ;)

Vielen Dank und schönes WE

Fuerchau
29-01-10, 17:15
Ist doch ganz einfach:
Eine gepackte Zahl legt je Halbbyte 1 Ziffer ab dazu kommt noch im rechtesten Halbbyte das Vorzeichen (F=Plus, D=Minus, alte Hobel kenn noch C=Plus).
Also hat eine gepackkte Zahl immer eine ungerade Anzahl Stellen (auch wenn du 6p0 definierst).

Durch den Overlay redefinierst du den Speicher.
Mit dem kleinen Trick *10 bzw. / 10 schiebst du nur die Halbbytes hin und her, damit das Hexfeld korrekt funktionert.

Dieter nennt sowas bitfummellei.
Aber als ich noch mit 8"-Disketten hantierte ...

Kennt eigentlich noch jemand die guten alten Magnetkonten-Computer ?
Da hatten wir nur 5-Bit je Info und komlette Buchhaltungen abgewickelt.
Jaja, die schöne Vergangenheit wo ein Programmier-Statement noch bei DM 0,50 lag ...

BenderD
29-01-10, 20:10
... Jungs (und Mädels), ich bin der älteste der genannten - und habe aus diesen Zeiten gelernt...


D*B

PS: Was lernen wir daraus? Das gehört in eine Procedure huddel2Datum verpackt, damit sich die jungen Leute nicht erschrecken müssen...



Ist doch ganz einfach:
Eine gepackte Zahl legt je Halbbyte 1 Ziffer ab dazu kommt noch im rechtesten Halbbyte das Vorzeichen (F=Plus, D=Minus, alte Hobel kenn noch C=Plus).
Also hat eine gepackkte Zahl immer eine ungerade Anzahl Stellen (auch wenn du 6p0 definierst).

Durch den Overlay redefinierst du den Speicher.
Mit dem kleinen Trick *10 bzw. / 10 schiebst du nur die Halbbytes hin und her, damit das Hexfeld korrekt funktionert.

Dieter nennt sowas bitfummellei.
Aber als ich noch mit 8"-Disketten hantierte ...

Kennt eigentlich noch jemand die guten alten Magnetkonten-Computer ?
Da hatten wir nur 5-Bit je Info und komlette Buchhaltungen abgewickelt.
Jaja, die schöne Vergangenheit wo ein Programmier-Statement noch bei DM 0,50 lag ...